- ベストアンサー
C言語 初心者です。
以下のソースの中でわからないことがあります。 詳しく説明してもらえないでしょうか? よろしくお願いします。 #include <stdio.h> #define NUMBER 80 /* 人数の上限 */ int main(void) { int i,j; int num; int tensu[NUMBER]; int bunpu[11] = {0}; printf("人数を入力してください。:"); do{ scanf("%d",&num); if (num < 0 || num > NUMBER) printf("\a要【1以上%d以下】:", NUMBER); }while (num > 0 || num < NUMBER); puts("点数を入力してください。"); for (i = 0; i < num; i++){ printf("%2d番:", i + 1); do { scanf("%d",&tensu[i]); if (tensu[i] < 0 || tensu[i] > 100) printf("\a要 【0以上100以下】:"); }while (tensu[i] < 0 || tensu[i] > 100); bunpu[tensu[i] / 10]++; } 上記のソースの中の bunpu[tensu[i] / 10]++; の部分がどうなっているのかわかりません。 教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
0~9 10~19 20~29 30~39 40~49 50~59 60~69 70~79 80~89 90~99 100 上記の各点数領域に何人いるかを、 配列bunpuに格納したいようです。 (後で使うんでしょうね) bunpu[tensu[i] / 10]++; この式が実行された時には、まず tensu[i] / 10 が実行されます。 tensu[i] はint型、10もint型なので、評価値はint型になります。 よって、小数点以下切捨てです。 上の各領域に照らし合わせると、 tensu[i] | tensu[i] / 10 ------------------------------------------ 0~9 | 0 10~19 | 1 20~29 | 2 30~39 | 3 40~49 | 4 50~59 | 5 60~69 | 6 70~79 | 7 80~89 | 8 90~99 | 9 100 | 10 となります。 (tensu[i] / 10の値は 0 ~ 10 になるのでbunpuは要素数が 11個必要になるのですね。はじめ見たときには分かりませんでした) 例えば tensu[i] が 89 であれば、tensu[i] / 10 は 8 となり bunpu[tensu[i] / 10]++; は、bunpu[8]++; になります。 後は、bunpu[8]++; ですが、これは普通の変数をインクリメント しているのと同じように、bunpu[8] をインクリメントします。
その他の回答 (2)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★配列部分として解説。 >bunpu[tensu[i] / 10]++; ↑ 上の1行を下の2行に書き換えると n = (tensu[i] / 10); // 点数を10で割る(0,10,20,30点…を0,1,2,3…にして n へセット) bunpu[ n ] += 1; // 分布(bunpu[11])の配列に +1 カウント となります。 書き換えただけですので同じ処理です。n は一時変数。 ・これにより bunpu[0] が 0~ 9点の人数 bunpu[1] が 10~19点の人数 bunpu[2] が 20~29点の人数 bunpu[3] が 30~39点の人数 bunpu[4] が 40~49点の人数 bunpu[5] が 50~59点の人数 bunpu[6] が 60~69点の人数 bunpu[7] が 70~79点の人数 bunpu[8] が 80~89点の人数 bunpu[9] が 90~99点の人数 bunpu[10] が 100点の人数 を表すようになります。 ・宣言で bunpu[11] となっているのは 100点の場合を考えてのことです。 do-while で 0以下や100以上をループしているため tensu[i] には 0~100 の数値が 安全に入っています。これを 10 で割ると 0~10 になります。この数を bunpu[] 配列の 添え字に使って +1 カウント・アップして人数を数えているのです。 ・以上。
お礼
回答有難うございます。 なんとなくわかった気がします。 もう一度解読してみます。 またよろしくお願いします。
- maku_x
- ベストアンサー率44% (164/371)
かいつまんで言いますと、(テストの)点数が、それぞれ 0~9点 10~19点 20~29点 30~39点 40~49点 50~59点 60~69点 70~79点 80~89点 90~99点 100点 の範囲の中に何人居るかということを数えているのです。
お礼
回答していただきありがとうございます。 またよろしくお願いします。
お礼
丁寧な回答ありがとうございます。 すごくわかりやすいです。 またお願いいたします。