(C言語)分布を表示する
( 子の本棚にC言語入門の本が落ちてたので、勉強してみよっと )
【 実行プログラム 】

【 ソースプログラム 】
#include <stdio.h>
#define NUMBER 99
int main(void)
{
int i, j;
int num;
int tensu[NUMBER];
int bunpu[11] = {0};
printf("対象人数を設定ください");
do {
scanf("%d", &num);
if (num < 1 || num > NUMBER)
printf("【 1以上%d以下 】の範囲となります", NUMBER);
} while (num < 1 || num > NUMBER);
puts("点数を入力ください");
for (i = 0; i < num; i++) {
printf("%2d番:", i + 1);
do {
scanf("%d", &tensu[i]);
if (tensu[i] < 0 || tensu[i] > 100)
printf("【 0~100点 】の範囲となります");
} while (tensu[i] < 0 || tensu[i] > 100);
bunpu[tensu[i] / 10]++;
}
puts("\n----- 分布グラフ -----");
printf(" 100:");
for (j = 0; j < bunpu[10]; j++)
putchar('*');
putchar('\n');
for (i = 9; i >= 0; i--) {
printf("%3d - %3d:", i * 10, i * 10 + 9);
for (j = 0; j < bunpu[i]; j++)
putchar('*');
putchar('\n');
}
return (0);
}
【 まなび 】
■ int tensu[NUMBER];
個人ごとの点数を格納するための配列。
NUMBER は、#defineオブジェクト形式マクロで管理。
■ int bunpu[11] = {0};
分布(範囲)に該当する件数を格納するための配列。
0 で初期化。
■ bunpu[tensu[i] / 10]++;
10の位以上を基準値として割り出し、該当する分布の配列を1ずつカウント。
87点なら、tensu[i] / 10 により 8を算出し、配列bunpu[8]に1カウントつけている。
■ printf("%3d - %3d:", i * 10, i * 10 + 9);
分布表のラベルを順番に生成していっている。
■ for (j = 0; j < bunpu[i]; j++)
配列bunpuに格納されたカウント数の分だけ、putchar('*');を表示。
************************************************
【 演習5-7 】
縦方向の分布グラフの表示を行うプログラムを作成せよ。

#include <stdio.h>
#define NUMBER 99
int main(void)
{
int i, j;
int num;
int max = 0;
int tensu[NUMBER];
int bunpu[11] = {0};
printf("対象人数を設定ください");
do {
scanf("%d", &num);
if (num < 1 || num > NUMBER)
printf("【 1以上%d以下 】の範囲となります", NUMBER);
} while (num < 1 || num > NUMBER);
puts("点数を入力ください");
for (i = 0; i < num; i++) {
printf("%2d番:", i + 1);
do {
scanf("%d", &tensu[i]);
if (tensu[i] < 0 || tensu[i] > 100)
printf("【 0~100点 】の範囲となります");
} while (tensu[i] < 0 || tensu[i] > 100);
bunpu[tensu[i] / 10]++;
}
puts("\n----------- 分布グラフ ----------");
for (j = 0; j < 11; j++ )
if(bunpu[j] > max)
max = bunpu[j];
for (i = max; i > 0; i--) {
for (j = 0; j < 11; j++ )
if(bunpu[j] >= max)
printf(" * ");
else
printf(" ");
max--;
putchar('\n');
}
puts("---------------------------------");
puts(" 0 10 20 30 40 50 60 70 80 90 100");
return (0);
}
で、できた・・・なかなかに難しかった。