/* 输入成绩,生成成绩分布图。 */
#include <stdio.h>
#define NUMBER 50
int main(void)
{
int x[NUMBER];
int fb[11] = {0}; /* 存储分布图的数组 */
int num; /* 实际录入数 */
int i, j, max;
do {
printf("输入学生人数:");
scanf("%d", &num);
if (num < 1 || num > NUMBER)
printf("输入限制在1~50之间\n\n");
} while (num < 1 || num > NUMBER);
/* 录入成绩,保存至数组x[NUMBER](num个元素) */
for (i = 0; i < num; i++) {
do {
printf("学生%d的成绩:", i + 1);
scanf("%d", &x[i]);
if (x[i] < 0 || x[i] > 100)
printf("输入限制在1~100之间\n\n");
} while (x[i] < 0 || x[i] > 100);
fb[x[i] / 10]++;
}
/* 在数组fb[11]中找出数值最大的元素,赋值到max,作为分布图的y轴。*/
max = fb[0];
for (i = 1; i < 11; i++) {
max = (max > fb[i]) ? max : fb[i];
}
/*
生成分布图
y轴循环数:0~max 显示相应行数的 *
*/
printf("\n成绩分布图:\n");
for (i = max; i >= 1; i--) {
for (j = 0; j < 11; j++) {
if (fb[j] == i) {
printf(" *");
fb[j]--;
}
else
printf("%6d", j);
}
putchar('\n');
}
/*
生成分布图
x轴循环数:0~11 显示分数范围 0~9,10~19...90~99,100
*/
printf(" ");
for (j = 0; j < 11; j++) {
printf("------");
}
putchar('\n');
printf(" ");
for (j = 0; j < 10; j++) {
printf("%d-%d ", j * 10, j * 10 + 9);
}
printf(" 100");
return 0;
}