Q&A (電気電子)

度数分布グラフを昇順で表示するプログラム

できたのでメモしておきます。

プログラム

コードは以下の通りです。

#include <iostream>
# define NUMBER 80
int main()
{
    int no;
    int i, j;

    int tensu[NUMBER];
    int bunpu[11] = { 0 };

    printf("人数を入力してください。");
    do {
        scanf_s("%d",&no);
        if (no < 1 || no>100) {
            printf("1~%dで入力してください。:",NUMBER);
        }
    } while (no < 1 || no>100);


    printf("%d人の点数を入力してください。\n", no);

    for (i = 0; i < no; i++) {
        printf("%2d番目:",i+1);
        do {
            scanf_s("%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---分布グラフ---\n");
    
    for (j = 0; j <=9; j++) {
        printf("%2d ~ %2d:",j*10,j*10+9);
        for (i = 0; i < bunpu[j]; i++) {
            putchar('*');
        }
        putchar('\n');
    }

    printf("     100:");
    for (i = 0; i < bunpu[10]; i++) {
        putchar('*');
    }
    putchar('\n');
}

実行結果

実行結果は以下の通りです。

人数を入力してください。30
30人の点数を入力してください。
 1番目:32
 2番目:98
 3番目:100
 4番目:78
 5番目:68
 6番目:54
 7番目:100
 8番目:99
 9番目:32
10番目:19
11番目:2
12番目:85
13番目:34
14番目:39
15番目:48
16番目:56
17番目:69
18番目:68
19番目:78
20番目:89
21番目:35
22番目:56
23番目:26
24番目:28
25番目:0
26番目:258
0~100の間で入力してください。:95
27番目:65
28番目:69
29番目:84
30番目:100

---分布グラフ---

 0 ~  9:**
10 ~ 19:*
20 ~ 29:**
30 ~ 39:*****
40 ~ 49:*
50 ~ 59:***
60 ~ 69:*****
70 ~ 79:**
80 ~ 89:***
90 ~ 99:***
     100:***

メモ

bunpu[tensu[i] / 10]++;

が肝やなぁ。

-Q&A (電気電子)
-