平均を出すデータ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初めたて初心者

平均を出すデータ

#1

投稿記事 by 初めたて初心者 » 3週間前

こんばんは、学校の課題が上手く出来ず質問させてもらいにきました。
./a.exe
1001   85   74   63   90   78.0
1002   78   65   70   62   68.8
1003   89   92   88   76   86.2
1004   32   48   66   25   42.8
1005   92   76   81   98   86.8
     75.2  71.0  73.6  70.2

このように表示したいです。最右列と最下行はそれまでの行と列の平均を示しています。最左列は学生番号なので計算しないです。

コード:

 
 #include <stdio.h>
int main(){
int i=0,j=0;
float b[5] = {0,0,0,0,0};
float c[4] = {0,0,0,0};
int a[5][5] = {
 {1001,85,74,63,90},
 {1002,78,65,70,62},
 {1003,89,92,88,76},
 {1004,32,48,66,25},
 {1005,92,76,81,98},
};
for(i=0;i<5;i++){
	for(j=1;j<5;j++){
			b[i] += a[i][j];}
b[i] /= 4;
}
for(i=0;i<5;i++){
	for(j=1;j<5;j++){c[j] +=a[i][j];
if(i==4){
c[j] /= 5;}
}
}
			
for(i=0;i<5;i++){
	for(j=0;j<5;j++){
		printf("%d   ",a[i][j]);
                        }
printf("%5.1f",b[i]);
	printf("\n");
                }

printf("   ");
for(j=1;j<5;j++){
	printf(" %5.1f",c[j]);
}
}

 
としたのですが一番右上の平均と一番下の列の右の平均がうまく計算できません。
どなたか解説をお願いしたいです。

アバター
みけCAT
記事: 6198
登録日時: 8年前
住所: 千葉県
連絡を取る:

Re: 平均を出すデータ

#2

投稿記事 by みけCAT » 3週間前

配列cが4要素しか確保されておらず、範囲外への読み書きが発生するため、未定義動作になります。
そして、範囲外への書き込みによりデータが破壊されたため、出力が変になったと考えられます。
配列cも配列bと同様に5要素確保するようにするといいでしょう。
(アクセス時の添字を修正する方法もありますが、こっちの方が簡単です)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

初めたて初心者

Re: 平均を出すデータ

#3

投稿記事 by 初めたて初心者 » 3週間前

先ほど確認したところ無事に成功しました!
素早い返信に感謝します。ありがとうございました。

返信

“C言語何でも質問掲示板” へ戻る