编辑代码

/* 输入成绩,生成成绩分布图。 */

#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;
}