こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

大学のプログラミングの課題

大学のプログラミングの課題で、また分からないことがあるので
質問させていただきます。

3行3列の正の実数データを入力して、行列の様に出力して、
縦の合計と横の合計を求めるものなんですが、

実行例はこんな感じです

999.99以下の3行3列の正の実数データを入力してください
data[0][0]の値? 350.23
data[0][1]の値? 1.0
data[0][2]の値? 503.25
・・・
集計の結果は次のとおりである.
350.23 1.00 503.25 : 854.48
625.00 3.14 50.27 : 678.41
999.00 750.75 0.00 : 1749.75
=================================
1974.23 754.89 553.52 : 3282.64


私の作ったプログラムは以下の通りです。

#include <stdio.h>
int main (void)
{
int i,j;
float data[3][3];
float suma,sumb,sumsum=0;
printf(" 999.99 以下の3行3列の正の実数データを入力してください\n");

for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("date[%d][%d]の値?",i,j);
scanf("%f",&data[i][j]);
}
}
printf("集計の結果は次のとおりである。\n");
for(i=0;i<3;i++)
{
suma=0;
for(j=0;j<3;j++)
{
suma=suma+data[i][j];
printf("%7.2f ",data[i][j]);
}
printf(":");
printf("%7.2f ",suma);
printf("\n");

sumsum=sumsum+suma;
}
printf("======================================\n");
for(j=0;j<3;j++);
{
sumb=0;
for(i=0;i<3;i++)
{
sumb=sumb+data[i][j];
}
printf("%7.2f ",sumb);
}
printf(":");
printf("%7.2f ",sumsum);
printf("\n");
}

実行すると、横の合計はうまくいくのですが、
縦の合計(1974.23 754.89 553.52 と出力したいところ)が
-107374・・・
と表示されてうまく行きません・・・

どこが間違っているのか分からないので
詳しく教えていただけると嬉しいです。

分かりにくくてすみません・・・(・・;)

投稿日時 - 2010-12-07 22:22:48

QNo.6369786

困ってます

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

> for(j=0;j<3;j++);

また、前と同じことやってますよ

http://okwave.jp/qa/q6356162.html

悪癖が着く前に治しましょう。

投稿日時 - 2010-12-07 22:39:11

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#1さん、すごいですね。



蛇足:
for文は、

for (j=0; j<3; j++ ) { ”ここに繰り返す命令を書く” }

のですが、

for (j=0; j<3; j++ ) ;

と、セミコロンを書いてしまうと、セミコロンまでの命令文を繰り返すとなってしまいます。
この例ですと、何も書かれていないので、単に j がインクリメントされ、最後には j には3が代入されるだけでループが終了します。

次の {  から、 } までは一つの命令郡になりますので、一度だけ実行されます。
今回の例では、sumb に0を代入した後、 data[0][3]、data[1][3], data[2][3]が次々に加算されます。(j=3のままなので)

dataは、float data[3][3] で定義されていますので、data[?][3] は定義されていない領域(通常は不定値)になりますので、異常な値が加算されていたことになります。

なので、最初の誤記 ”;” を取れば、確実に動くでしょう。


蛇足の蛇足:

cで記述する場合、インデントをちゃんと入れると見易くなります。

例:
printf("集計の結果は次のとおりである。\n");

for(i=0;i<3;i++) {
suma=0;
for(j=0;j<3;j++) {
suma=suma+data[i][j];
printf("%7.2f ",data[i][j]);
}
printf(":");
printf("%7.2f ",suma);
printf("\n");
sumsum=sumsum+suma;
}
printf("======================================\n");
for(j=0;j<3;j++); {


ご参考に。

投稿日時 - 2010-12-07 22:52:30

お礼

ありがとうございます
単純なケアレスミスですね
もっと気をつけます(^^;)

投稿日時 - 2010-12-07 22:59:18

ANo.1

printf("======================================\n");
のすぐ下にある,
for(j=0;j<3;j++); の行末にある";"を削除

投稿日時 - 2010-12-07 22:37:04

お礼

ありがとうございます
しょうもないミスでした(^^;)

無事に解決しました!!

投稿日時 - 2010-12-07 23:00:25

あなたにオススメの質問