C言語の問題で 生徒6人の数学と国語の得点を入力すると 各教科の合計平均、生徒一人一人の合計平均を入力するプログラムを作成せよ
C言語の問題で 生徒6人の数学と国語の得点を入力すると 各教科の合計平均、生徒一人一人の合計平均を入力するプログラムを作成せよ という問題で下のようなプログラムを作成したところ、画像のように5人目の表示だけ値が-になってしまいます。どこを変更したらよろしいでしょうか? いろいろ変更してみたのですが、5人目だけおかしくなってしまいます。 わかる方いたら教えてください。 #include<stdio.h> int main(void){ int sum[6]; int tensu[6][2]; int i; int msum,jsum; printf("6人の数学と国語の点数を入力してください\n"); for(i=0;i<6;i++){ printf("%d人目\n",i+1); printf("数学:"); do{ scanf("%d",&tensu[i][0]); if(tensu[i][0]<0||tensu[i][0]>100) printf("0~100で入力してください:"); }while(tensu[i][0]<0||tensu[i][0]>100); printf("国語:"); do{ scanf("%d",&tensu[i][1]); if(tensu[i][1]<0||tensu[i][1]>100) printf("0~100で入力してください:"); }while(tensu[i][1]<0||tensu[i][1]>100); } for(i=0;i<6;i++){ msum=msum+tensu[i][0]; jsum=jsum+tensu[i][1]; } for(i=0;i<2;i++){ sum[0]=sum[0]+tensu[0][i]; sum[1]=sum[1]+tensu[1][i]; sum[2]=sum[2]+tensu[2][i]; sum[3]=sum[3]+tensu[3][i]; sum[4]=sum[4]+tensu[4][i]; sum[5]=sum[5]+tensu[5][i]; } printf("数学の合計点:%d平均点:%d\n",msum,(msum/6)); printf("国語の合計点:%d平均点:%d\n",jsum,(jsum/6)); printf("%d",tensu[4][0]); //5人目の値が正しく表示されているか for(i=0;i<6;i++){ printf("%d人目の学生の合計点:%d平均点:%f\n",i+1,sum[i],(double)sum[i]/2); }return 0; }
ベストアンサー
for(i=0;i<6;i++){ msum=msum+tensu[i][0]; jsum=jsum+tensu[i][1]; } の部分で msum と jsum を初期化せずに使っています。 for(i=0;i<2;i++){ sum[0]=sum[0]+tensu[0][i]; sum[1]=sum[1]+tensu[1][i]; sum[2]=sum[2]+tensu[2][i]; sum[3]=sum[3]+tensu[3][i]; sum[4]=sum[4]+tensu[4][i]; sum[5]=sum[5]+tensu[5][i]; } の部分で sum[0~5] を初期化せずに使っています。 ======== #include<stdio.h> int main(void) { int sum[6]; int tensu[6][2]; int i, j; // j を追加 int msum=0, jsum=0; // ゼロで初期化 printf("6人の数学と国語の点数を入力してください\n"); for (i = 0; i < 6; i++) { printf("%d人目\n", i + 1); printf("数学:"); do { scanf("%d", &tensu[i][0]); if (tensu[i][0] < 0 || tensu[i][0]>100) printf("0~100で入力してください:"); } while (tensu[i][0] < 0 || tensu[i][0]>100); printf("国語:"); do { scanf("%d", &tensu[i][1]); if (tensu[i][1] < 0 || tensu[i][1]>100) printf("0~100で入力してください:"); } while (tensu[i][1] < 0 || tensu[i][1]>100); } for (i = 0; i < 6; i++) { msum = msum + tensu[i][0]; jsum = jsum + tensu[i][1]; } /* sum[0] = sum[0] + tensu[0][i]; sum[1] = sum[1] + tensu[1][i]; sum[2] = sum[2] + tensu[2][i]; sum[3] = sum[3] + tensu[3][i]; sum[4] = sum[4] + tensu[4][i]; sum[5] = sum[5] + tensu[5][i]; */ for (i = 0; i < 6; i++) { sum[i] = 0; // まずゼロで初期化 for (j = 0; j < 2; j++) { sum[i] += tensu[i][j]; // 数学と国語の点数を足す } } for (i = 0; i < 2; i++) { printf("数学の合計点:%d平均点:%d\n", msum, (msum / 6)); printf("国語の合計点:%d平均点:%d\n", jsum, (jsum / 6)); printf("%d\n", tensu[4][0]); //5人目の値が正しく表示されているか;改行を追加 for (i = 0; i < 6; i++) { printf("%d人目の学生の合計点:%d, 平均点:%f\n", i + 1, sum[i], (double)sum[i] / 2); } } return 0; } ======== 【実行例】 6人の数学と国語の点数を入力してください 1人目 数学:58 国語:47 2人目 数学:85 国語:69 3人目 数学:81 国語:78 4人目 数学:96 国語:28 5人目 数学:75 国語:45 6人目 数学:96 国語:87 数学の合計点:491平均点:81 国語の合計点:354平均点:59 75 1人目の学生の合計点:105, 平均点:52.500000 2人目の学生の合計点:154, 平均点:77.000000 3人目の学生の合計点:159, 平均点:79.500000 4人目の学生の合計点:124, 平均点:62.000000 5人目の学生の合計点:120, 平均点:60.000000 6人目の学生の合計点:183, 平均点:91.500000
質問者からのお礼コメント
ソースコード且つ実行例まで載せてあり、とても分かりやすい説明でした。 今日までに提出だったのでとても助かりました。 初期化するのを忘れないようにしていきたいと思います。
お礼日時:1/23 7:52