質問: キーボードから学生の体重と身長を入力し,それぞれの合計(小数点以下 1 桁)を求め るプログラムを作りなさい.ただし,データを格納する変数は配列を用いるこ ととして,3 行 2 列の二次元配列 gakusei[3][2]を考える(学生数は 3 名). 使う変数は,カウンタ用:i,j,体重集計用:taizyu,身長集計用:sintyo として,カ ウンタ用は整数型を,集計用とデータ格納用の配列は実数型とする.なお,数値入力と集 計のための繰り返し処理は for 文を使うこと. ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/a0ab79cb43773f01c163eb6ca391a069.png) という問題です。 実行結果の例として 学生 1 の体重(kg)と身長(cm)を入力(カンマ区切り):55, 167.01 学生 2 の体重(kg)と身長(cm)を入力(カンマ区切り):90, 180.5 学生 3 の体重(kg)と身長(cm)を入力(カンマ区切り):75.3, 178 学生たちの合計体重は 220.3kg,合計身長は 525.5cm です. と出したいのですが実行すると繰り返し処理がされず一人だけで終わり合計が出てしまいます。 どのようにすればいいでしょうか。 よろしくお願いします。 ``` include int main(void) { float gakusei[3][2]={ {55.0,167.01}, {90.0,180.5}, {75.3,178.0} }; float taizyu=0.0; float sintyo=0.0; int i; int j; int sum=0; ; for(i=0;i<3;i++){ sum+=i; printf("学生%dの体重(kg)と身長(cm)を入力(カンマ区切り):",i+1); scanf("%d",&i); scanf("%d",&j); } printf("学生たちの合計体重は%.1fkg",gakusei[i][0]); printf("合計身長は%.1fcmです",gakusei[i][1]); } ```
回答: ``` int i, j; ``` これはカウンタなんですよね? >カウンタ用:i,j,体重集計用:taizyu,身長集計用:sintyo とわざわざ指示されているのに、なぜカウンタに身長と体重を入力しているのでしょうか。 ``` for(i=0;i<3;i++){ sum+=i; printf("学生%dの体重(kg)と身長(cm)を入力(カンマ区切り):",i+1); scanf("%d",&i); scanf("%d",&j); } ``` iに体重が入力されたため、2回目にforの条件式がFalseになりそこで終わってしまっています。 もしiに体重を入力するとしても、 1. sum に i を加えるタイミングがおかしいです。 scanf() してから sum に加えるべきではないでしょうか。 2. float型で体重身長を入力したいはずなのに int の i, j で入力していますね。 せっかくfloat の taizyu, sintyo が用意されているじゃないですか。 sum も int ですね。指示通り、sum はいりません。 さらに、学生の体重と身長はキーボードから入力するのですよね? ということは、 ``` float gakusei[3][2]={ {55.0,167.01}, {90.0,180.5}, {75.3,178.0} }; ``` これはいらないはずですね。もし学生の体重身長が変わってしまったとき、誤った定型の答えがでてしまいます。 いろいろと校正と勉強の余地がありそうですね!頑張ってください~