- ベストアンサー
C言語の2次配列
4行5列の配列を用意し、その配列の要素をtij(i=1~4, j=1~5)とするとき、tij=i×j となるように配列に値を入れ、 それを表の形で画面に表示するプログラムを作りなさい。 という問題なんですが、自分は下の様に組みましたがうまく動きません。どこが悪いのか教えてください。よろしくお願いします。あまりC言語を理解していないので申し訳ないですが、なるべく簡単に教えて頂ければ幸いです。 #include<stdio.h> int main(void) { int i,j; int t[4][5]; for(i=0;i<=3;i++) { for(j=0;j<=4;j++) t=i*j; printf("%5d",t); printf("\n"); } return 0; }
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> int main(void) { int t[4][5]; int i, j; for(i = 0; i < 4; i ++){ for(j = 0; j < 5; j ++){ t[i][j] = (i + 1) * (j + 1); printf(" %2d", t[i][j]); } putchar('\n'); } return 0; }
その他の回答 (5)
- Werner
- ベストアンサー率53% (395/735)
> ANo.4補足 > これも違いますよね? そりゃ違うでしょうね。 私はANo.3で、 「配列参照部分だけ」を修正したのではまだ間違っているところがあるので うまくいかないと言いたかったのですが。 ANo.3のままだとバグが残っているのでちゃんと修正してください。
補足
配列参照部分以外にも間違いがあったのですね。う~ん、気づきませんでした。
- asuncion
- ベストアンサー率33% (2127/6289)
> どうやら違うようです・・・。 字下げのために全角空白を使っていたのです。 コピー&ペースト後、全角空白を半角空白に変えるなどしてから コンパイルしてください。
補足
あ、なるほど。さっそくやってみました。プログラムは動くようになりましたが、結果が 1245072 512 2147336192 1245112 となりました。これも違いますよね?
- Werner
- ベストアンサー率53% (395/735)
配列参照部分だけを修正し、 内側のforループの括弧を補うと以下のようになります。 ------------------------------------------------- #include<stdio.h> int main(void) { int i,j; int t[4][5]; for(i=0;i<=3;i++) { for(j=0;j<=4;j++) { t[i][j]=i*j; } printf("%5d ",t[i][j]); /* この行では j==5 */ printf("\n"); } return 0; } ------------------------------------------------- > printf("%5d ",t[i][j]); /* この行では j==5 */ のt[i][j]は初期化も代入もされていない領域ですから、 何が入っているかは分かりません。
補足
コピペして試したところ以下のような結果になりました。 エラー E2206 無題1.c 4: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 4: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 5: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 5: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 6: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 6: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 7: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 7: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 8: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 8: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 8: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 8: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 9: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 9: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 9: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 9: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 10: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 10: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 10: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 10: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 10: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 10: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 11: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 11: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2206 無題1.c 11: 不正な文字 ' ' (0x8140)(関数 main ) エラー E2228 無題1.c 11: エラーあるいは警告が多すぎる(関数 main ) *** 26 errors in Compile *** ------ コンパイル終了 ------ どうやら違うようです・・・。
- yaemon_2006
- ベストアンサー率22% (50/220)
t = i * j -> t[i][j] = (i + 1) * (j + 1)
補足
さっそく試してみました。結果が 1244988 1244988 1244988 1244988 となったのですが、これはあっているのでしょうか?友達の正解をちらっと見た感じでは、違った気がするのですが・・・?
t=i*j; ↓ t[i][j]=i*j; printf("%5d",t); ↓ printf("%5d",t[i][j]); かな?
補足
さっそくの回答ありがとうございます。 上の通りに変えてみました。プログラムは動くようになりましたが、結果が違うようです・・・。ごめんなさい。
お礼
あ、動きました!確かに正解です。ありがとうございました。色々間違いがあったのですね・・・。本当にありがとうございました。