二次元配列

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

二次元配列

#1

投稿記事 by gamma213 » 7年前

3科目の点数データを読み込み、読み込んだデータと個人の平均点、および3科目の平均点を出力するプログラムを作成せよ。

って問題で、コードは以下の通りなんですが平均点だけエラーが出て、(double)sum1/3.00以外考えつかないのですがどのようにやれば直るのか教えていただきたいです。

コード:

#include<stdio.h>
main()
{
int score[100][3], i, j, sum1[100], sum2[100];
for (i = 0; i < 100; i++)
{
sum1[i] = 0;
for (j = 0; j < 3; j++)
{
scanf("%d", &score[i][j]);
sum1[i] = sum1[i] + score[i][j];
}
}
for (i = 0; i < 100; i++)
{
for (j = 0; j < 3; j++)
{
printf("%7d", score[i][j]);
}
printf("%7d", (double)sum1[i] / 3.00);
printf("\n");
}
for (i = 0; i < 100; i++)
{
sum2[i] = 0;
for (j = 0; j < 3; j++)
{
sum2[j] = sum2[j] + score[i][j];
}
}
for (j = 0; j < 3; j++)
{
printf("%7.2lf", (double)sum2[j] / 100.00);
}

}
ちなみに出力は

89 90 88 0
31 32 54 0
12 45 67-1431655765
13 96 431431655765
68 76 43-1431655765
32 53 95 0
23 95 53 0
23 54 23-1431655765
12 65 43 0
87 65 43 0
89 90 88 0
...省略
12 65 43 0
87 65 43 0
39.00 66.20 53.78

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

Re: 二次元配列

#2

投稿記事 by みけCAT » 7年前

%7dはint型のデータを出力するための書式です。
double型のデータを出力するので、20行目の%7dを%7f、または33行目にならって%7.2fにすると直ると思います。
(lはC99以降ならつけても構いませんが、必要ありません)

また、動作には関係ないはずですが、インデントも整えることをおすすめします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 二次元配列

#3

投稿記事 by みけCAT » 7年前

28行目において、初期化されていない自動変数sum2[1]の値(不定)が計算に使用され、未定義動作になります。
23~30行目は

コード:

	for (j = 0; j < 3; j++)
	{
		sum2[j] = 0;
		for (i = 0; i < 100; i++)
		{
			sum2[j] = sum2[j] + score[i][j];
		}
	}
とするといいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

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