• ベストアンサー

教えてください

このソースのbunpu[tensu[i] / 10]++;がよく分からないので詳しく教えてください。 あと、 printf(" 100:"); for(j=0; j < bunpu[10]; j++) putchar('*'); putchar('\n');についても何を示しているのかわかりません。そこも詳しく教えてください。宜しくお願いします。 #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 < 1 || num > NUMBER) printf("\a要 [1以上%d以下] :", NUMBER); }while (num < 1 || 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]++; } puts("\n 分布グラフ "); printf(" 100:"); for(j=0; j < bunpu[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(0); }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

1.bunpu[tensu[i] / 10]++; tensu[i] / 10 は点数の範囲を1/10にして、 0~9点を0に、10~19点を1に...90~99点を9に、100点を10に変換しています。 すなわち、各点数の範囲を配列変数0から10に変換してbunpu[]の配列に各店数範囲の人数を格納しているのです。 このため、配列の最後に+1の「++」があります。 2.for(j=0; j < bunpu[10]; j++) putchar('*'); は100点の人数を「*」の数で棒グラフにしています。 putchar('\n');は最後に改行して継ぎの棒グラフがかけるようにしています。 3.int bunpu[11] = {0}; 最後に、bunpu[]++が有効にするには配列の初期化(=0)が必要ですが上の ={0}は配列の銭湯のみ0としたように記憶している。データエリアは大体初期化されていて問題ないと思うがゴミがあると誤動作する。 ただし、離れてからだいぶ立つので自信なし。m(_ _)m

その他の回答 (1)

回答No.2

>printf(" 100:"); >for(j=0; j < bunpu[10]; j++) >putchar('*'); >putchar('\n');についても何を示しているのかわかりません。そこも詳しく教えてください。宜しくお願いします。 この処理が具体的に動いたとすると、以下のようになるかと思います。 --------------------------- 分布グラフ 100:***** 90- 99:******** 80- 89:************ (中略) 10- 19:*** 0- 9:** --------------------------- で、これを踏まえた上で考えます。 for(j=0; j < bunpu[10]; j++) putchar('*'); putchar('\n'); まず、このfor文に{}がないため、ループがputchar('*');二しかかかりません。 ループ回数(100点の人数分)'*'を出力した後、\n(改行)が行われることになります。 したがって、以下の90-99等の範囲の人数を出力するのに使われているように、 for(j=0; j < bunpu[10]; j++) { putchar('*'); } putchar('\n'); としても変わりありません。その部分が理解できていれば、特に疑問に思う部分もなくなるのではないでしょうか? ※見当はずれの回答でしたらすいません

関連するQ&A

専門家に質問してみよう