콘솔창에 막대그래프 출력하기
-> 학생들의 점수를 입력받아 막대그래프로 표현하기
<코드 작성하기>
- 학생 수 입력하기 (입력받은 학생 수로 메모리 동적 할당받기)
- 학생들의 점수 입력하기
- 입력받은 학생들의 점수를 막대그래프로 출력하기
입력받은 점수를 막대그래프로 출력하기 위해서 ┌┐(시작), ││(중간), ┴┴ (끝)등의 기호가 필요하다.
100점부터 시작해서 0점까지 막대그래프가 출력된다.
만약 학생의 점수가 60점이면 막대그래프의 60점 부분에서 ┌┐기호가 출력되어야 하고, 0점을 만나기 전까지 ││기호가 출력되며, 0점을 만나면 ┴┴ 기호로 마무리한다.
이렇게 출력하기 위해서 조건문을 사용하면 된다.
==> 막대그래프 출력 결과
<구현하기>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h> //system("cls") = 화면 클리어
int main() {
int cnt = 0;
int* arrScore = 0;
printf("학생 수를 입력하세요 : ");
scanf_s("%d", &cnt);
arrScore = (int*)malloc(sizeof(int) * cnt); //메모리 동적할당 받기
for (int i = 0; i < cnt; i++) {
printf("%d번 학생 점수 입력 : ", i + 1);
scanf_s("%d", arrScore + i);
}
system("cls");
for (int i = 0; i < cnt; i++) {
printf("%d번 학생 점수 : %d점\n", i + 1, arrScore[i]);
}
for (int i = 10; i > 0; i--) {
printf("%3d │", i * 10); //3d 자릿수 맞추기 최대 100점 세자리이므로 3d
//i를 10부터 시작, i에 10을 곱하여 점수를 표현
for (int j = 0; j < cnt; j++) {
int num = arrScore[j] / 10; //i와 값을 비교하기 위해 점수를 10으로 나눠줌
if (num >= i) { //점수를 10으로 나눈 값이 i보다 크거나 같을 때
if (num == i) { printf(" ┌┐ "); } //같으면 시작을 표시하는 ┌┐ 기호 출력
else { printf(" ││ "); } //0점을 만나기 전까지 ││ 기호 출력
}
else {
printf(" ");
}
}
printf("\n");
}
printf("%3d └─", 0); //0점 표시
for (int i = 0; i < cnt; i++) {
if (arrScore[i] != 0) { //0점이 아닌 점수가 입력된 부분에만 ─┴┴─ 기호로 출력
printf("─┴┴─ ");
}
else {
printf("─────"); //0점이 입력된 부분에는 ───── 기호로 출력
}
}
printf("\n");
printf(" ");
for (int i = 0; i < cnt; i++) {
printf(" %d번 ", i + 1);
}
printf("\n");
printf("==> ");
for (int i = 0; i < cnt; i++) {
printf(" %d점", arrScore[i]);
}
printf("\n");
free(arrScore); //메모리 해제
return 0;
}
막대그래프를 출력하기 위해 처음부터 ┌┐, ││, ┴┴ 등의 기호를 사용하면 어렵게 느껴지기에
시작, 중간, 끝 구분이 없는 다른 기호를 사용하여 모양을 먼저 만들어보는 것이 중요하다고 생각합니다.
저도 처음에는 ★기호를 사용하여 모양을 먼저 잡고 조건문을 사용하여 하나씩 고쳐 완성하였습니다.
감사합니다!
2021. 09.13
'C언어' 카테고리의 다른 글
[C언어] 동적할당 사용 예제 (0) | 2021.09.07 |
---|---|
[C언어] 동적할당 (dynamic allocation) (0) | 2021.09.06 |
[자료구조 - C언어] 정렬(Sort) - Bubble, Insertion, Selection (0) | 2021.08.30 |
[C언어] 로또 번호 뽑기 (0) | 2021.08.17 |
[C언어] 구조체(2) - 예제 (0) | 2021.08.08 |