実現したいこと
テストの点数の分布図を作成したいです。
例えば、6人の生徒の点数が30点・50点・55点・59点・75点・79点だったとすれば、
* * * * * *
0 10 20 30 40 50 60 70 80 90 100
このような分布図を作りたいです。
発生している問題・分からないこと
入力する生徒の数が11までは問題なく分布図を作れるのですが、12のときに分布図の上に改行文字が出力され、13を超えると空白を無限に出力する無限ループが起こってしまいます。
エラーメッセージ
error
1エラーメッセージはなしです。
該当のソースコード
c言語
1#include <stdio.h> 2 3int main(void) 4{ 5 int no; 6 7 printf("生徒の数は?:"); scanf("%d", &no); 8 9 int a[no]; // データ全体の数 10 int bunpu[11] = {0}; // 各点数のデータの数 0~9・10~19・…・90~99・100で分ける 11 12 for (int i = 0; i < no; i++) { // データの読込 13 do { 14 printf("%d人目の点数:", i + 1); scanf("%d", &a[i]); 15 if (a[i] < 0 || a[i] > 100) printf("\a正しく点数を入力してください。\n"); 16 } while (a[i] < 0 || a[i] > 100); 17 bunpu[a[i] / 10]++; // 各点数のデータの数を増やす 18 } 19 20 int max = bunpu[0]; 21 22 for (int i = 1; i < no; i++) { // 各点数のデータの数のなかで最大のものを求める 23 if (max < bunpu[i]) max = bunpu[i]; 24 } 25 26 int max2 = max; // for文の制御式に用いるmaxをmax2とする 27 28 for (int i = 1; i <= max2; i++) { // 分布図の行の繰り返し 29 for (int q = 0; q < 11; q++) { // 分布図の列の繰り返し *を打つための繰り返し 30 if (bunpu[q] >= max) printf(" * "); 31 else printf(" "); 32 } 33 putchar('\n'); 34 max--; 35 } 36 37 printf("---------------------------------\n"); // 分布図の目盛の部分 38 printf(" 0 10 20 30 40 50 60 70 80 90 100\n"); 39 40 return 0; 41} 42
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
for文が意図せず無限ループしてしまう理由はネット上で見つけられませんでした。
補足
特になし

回答3件
あなたの回答
tips
プレビュー