• ベストアンサー

2次元配列

大学の課題なのですが 10×10の2次元配列に、平面のビットパターンが入っているとする(0と1の整数が入っているとする)。左右反転して出力しなさい。 という問題で、自分は以下のプログラムを作ったのですが、うまくうごいてくれません。だれか間違いを指摘していただけないでしょうか。 よろしくお願いします。 #include<stdio.h> int main(void) { int i,j; int data[10][10]={0,1}; for(i=0;i<10;i++){ for(j=0;j<10;j++){ printf("%3d",data[10-i][10-j]); } printf("\n"); } return(0); }

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

  • ベストアンサー
  • yukimican
  • ベストアンサー率70% (112/159)
回答No.3

配列のインデックスの使い方が間違っています。 for(i=0;i<10;i++){  for(j=0;j<10;j++){   printf("%3d",data[10-i][10-j]);  } } これだと、data[10][10]~data[1][1]を表示することになりますよね? あと、初期化については以下のように書くと良いでしょう。 int data[10][10]={  {0,1,0,1,1,・・・}, // data[0][0]~data[0][9]まで  {1,1,0,1,0,・・・}, // data[1][0]~data[1][9]まで  ・・・ }; int data[10][10]={0,1}だと、 ・data[0][0]=0; ・data[0][1]=1; ・残りは全部0 ということになってしまいますので。

house-i
質問者

お礼

丁寧な回答ありがとうございます。 配列のインデックスの使い方よくわかりました。 基本的な問題にもかかわらずありがとうございます!

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

10*10の100個必要なのに int data[10][10]={0,1}; だと98個足りません 配列のインデックスは0から始まるので[9]~[0]ですが10-jだと[10]~[1]になってしまいます。 上下は反転しなくて良いのですからiはそのままで良いでしょう。

house-i
質問者

お礼

早速の回答ありがとうございます!最初の宣言の部分は自分の確認ミスでした、情けないです。そうか、10-jだと[10]~[1]になってしまいますね。基本的な問題なのにアドバイスありがとうございます!

  • baber
  • ベストアンサー率18% (17/92)
回答No.1

課題ならばデバッガを使ったり、結果から推測して自力でなんとかしないといけないと思うのですが。。。。。。ちょっとプログラムを試してみました。 2次元配列の初期化ができてないと思いますがいかがでしょうか。

house-i
質問者

お礼

ご指摘ありがとうございます。初期化をどうすればいいかよくわからなかったのです・・・

関連するQ&A