演習5ー8
問:右に示すように、List5-7の分布グラフの表示を縦方向に行うプログラムを作成せよ。
// Ex0508.c
#include <stdio.h>
#define NUMBER 120
int main(void)
{
int num; // 実際の人数
int tensu[NUMBER]; // 学生の点数
int bunpu[11] = { 0 }; // 点数の分布
printf("人数を入力せよ: ");
do {
scanf("%d", &num);
if (num < 1 || num > NUMBER)
printf("\n1~%dで入力せよ: ", NUMBER);
} while (num < 1 || num > NUMBER);
printf("\n%d人の点数を入力せよ。\n", num);
for (int i = 0; i < num; i++) {
printf("%2d番: ", i + 1);
do {
scanf("%d", &tensu[i]);
if (tensu[i] < 0 || tensu[i] > 100) {
printf("\n1~100で入力せよ。");
printf("%d番: ", i + 1);
}
} while (tensu[i] < 0 || tensu[i] > 100);
bunpu[tensu[i] / 10]++;
}
printf("\n");
int retsu, gyo;
retsu = gyo = 0;
for (int i = 0; i <= num; i++)
if (retsu < bunpu[i] ) retsu = bunpu[i];
for (int j = retsu; j > 0; j--) {
int i = 0;
for (gyo = 0; gyo <= 10; gyo++) {
if (bunpu[i] >= j) {
printf(" * "); i++;
}
else {
printf(" "); i++;
}
}
printf("\n");
}
for (int i = 0; i <= 11; i++) {
if (i <= 10) {
printf("---");
}
else if (i > 10) {
printf("-\n");
}
}
for (int i = 0; i <= 11; i++) {
if (i == 0) {
printf(" 0 ");
}
else if (i >= 1 && i <= 9) {
printf("%d0 ", i);
}
else if (i == 11) {
printf("100\n");
}
}
return 0;
}
コメント
これは考えていて楽しかった問題。ぜひ自力で!
書籍情報
https://www.amazon.co.jp/新・明解C言語-入門編-第2版-柴田-望洋/dp/4815609799?_...
www.amazon.co.jp