- ベストアンサー
C言語の問題-配列について
今、独学でC言語をやっているんですが本にのっている問題に解答がなくわかりません。 問題はbunpu[tensu[i] / 10]++;はどういう意味を表すかです。 do-while分の繰り返しがおわった後にbumpuに++があるので+1をすればいいのでしょうか?よくわかりません・・・ 学生10人の点数の分布を10点ごとに分布グラフとして表示します。 #include <stdio.h> #define NUMBER 80 int main (void) { int i,j,num; int tensu[NUMBER]; int bunpu[11] = {0}; 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 < bumpu[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(o); }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>bunpu[tensu[i] / 10]++; i は繰返しで使われている変数 だから tensu[i] は繰返しが起こる度に変化する i が0の時は tensu[0] i が1の時は tensu[1] i が2の時は tensu[2] その内容を取り出し10で割っている。つまり10点刻みの分布を数える(int同士の演算は)為にbunpuが用意されている。 tensu[i] が 0~9 なら bunpu[0] tensu[i] が 10~19 なら bunpu[1] tensu[i] が 20~29 なら bunpu[2] の内容が ++ される 判らなくなったらとりあえず展開していく。そうして一番内側の括弧から理解していけば判る筈。
その他の回答 (2)
- bnosuke-x
- ベストアンサー率39% (43/110)
このプログラム、このままでは動きませんよね。 まぁ、やりたいことは大体解るのでいいのですが、コンパイルを通ったものをできれば載せてください。 さて、ご質問の件ですが、 >問題はbunpu[tensu[i] / 10]++;はどういう意味を表すかです。 入力された点数から分布カウント配列のインデックスを算出してカウントアップをしています。 #1さんの説明の通りです。 直前のdo-whileは、入力データの範囲チェックですね。 0~100点でないとループが終わらないようになっていて、再度入力を促されるという風になっています。 ここを抜けてきたなら、正しいデータの範囲であったということで、分布ごとの件数をカウントアップ(++)しています。 ループになっているのはやり直しのためであって、配列とは何の関係もありません。
今回のプログラムのdo~whileは、 テストの点数としてふさわしくない値を入力した際、 再入力を求めるために使っています。