- ベストアンサー
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); }
- みんなの回答 (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 ということになってしまいますので。
その他の回答 (2)
- php504
- ベストアンサー率42% (926/2160)
10*10の100個必要なのに int data[10][10]={0,1}; だと98個足りません 配列のインデックスは0から始まるので[9]~[0]ですが10-jだと[10]~[1]になってしまいます。 上下は反転しなくて良いのですからiはそのままで良いでしょう。
お礼
早速の回答ありがとうございます!最初の宣言の部分は自分の確認ミスでした、情けないです。そうか、10-jだと[10]~[1]になってしまいますね。基本的な問題なのにアドバイスありがとうございます!
- baber
- ベストアンサー率18% (17/92)
課題ならばデバッガを使ったり、結果から推測して自力でなんとかしないといけないと思うのですが。。。。。。ちょっとプログラムを試してみました。 2次元配列の初期化ができてないと思いますがいかがでしょうか。
お礼
ご指摘ありがとうございます。初期化をどうすればいいかよくわからなかったのです・・・
お礼
丁寧な回答ありがとうございます。 配列のインデックスの使い方よくわかりました。 基本的な問題にもかかわらずありがとうございます!