• ベストアンサー

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; }

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

  • ベストアンサー
回答No.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; }  

ryutasa
質問者

お礼

あ、動きました!確かに正解です。ありがとうございました。色々間違いがあったのですね・・・。本当にありがとうございました。

その他の回答 (5)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.5

> ANo.4補足 > これも違いますよね? そりゃ違うでしょうね。 私はANo.3で、 「配列参照部分だけ」を修正したのではまだ間違っているところがあるので うまくいかないと言いたかったのですが。 ANo.3のままだとバグが残っているのでちゃんと修正してください。

ryutasa
質問者

補足

配列参照部分以外にも間違いがあったのですね。う~ん、気づきませんでした。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.4

> どうやら違うようです・・・。 字下げのために全角空白を使っていたのです。 コピー&ペースト後、全角空白を半角空白に変えるなどしてから コンパイルしてください。

ryutasa
質問者

補足

あ、なるほど。さっそくやってみました。プログラムは動くようになりましたが、結果が 1245072   512 2147336192 1245112 となりました。これも違いますよね?

  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

配列参照部分だけを修正し、 内側の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]は初期化も代入もされていない領域ですから、 何が入っているかは分かりません。

ryutasa
質問者

補足

コピペして試したところ以下のような結果になりました。 エラー 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 *** ------ コンパイル終了 ------ どうやら違うようです・・・。

回答No.2

  t = i * j -> t[i][j] = (i + 1) * (j + 1)  

ryutasa
質問者

補足

さっそく試してみました。結果が 1244988 1244988 1244988 1244988 となったのですが、これはあっているのでしょうか?友達の正解をちらっと見た感じでは、違った気がするのですが・・・?

noname#77845
noname#77845
回答No.1

t=i*j;  ↓ t[i][j]=i*j; printf("%5d",t);  ↓ printf("%5d",t[i][j]); かな?

ryutasa
質問者

補足

さっそくの回答ありがとうございます。 上の通りに変えてみました。プログラムは動くようになりましたが、結果が違うようです・・・。ごめんなさい。

関連するQ&A

専門家に質問してみよう