C言語の二次元配列について教えてください

このQ&Aのポイント
  • C言語の二次元配列について教えて下さい。二次元配列で、次の行列の1の要素の添え字を書き出したいです。
  • 自分で出来る範囲で組み上げたプログラムを載せます。
  • 実行結果は (0,0) (0,2) (1,1) (1,2) (1,3) (2,0) (2,3) です。どなたか解る方、出来るだけ簡単なプログラムを教えて下さい。
回答を見る
  • ベストアンサー

C言語の二次元配列について教えて下さい。

二次元配列で、次の行列の1の要素の添え字を書き出したいです。例えばa11の場合、(0,0)の様にしたいです。 {1,0,1,0} {0,1,1,1}   {1,0,0,1} 自分で出来る範囲で組み上げたプログラムを載せます。 #include <stdio.h> int main(void) { int x,y; int a[3][4]= {{1,0,1,0}, {0,1,1,1}, {1,0,0,1}}; for(x=0;x<3;x++){ for(y=0;y<4;y++){ printf("%3d",a[x][y]); } } return (0); } 実行結果 (0,0) (0,2) (1,1) (1,2) (1,3) (2,0) (2,3) あくまで上の実行結果を出力するものを組み上げたいのですが、続きがさっぱり解りません。それと上記のプログラムには何らかの間違いがあるかもしれません。どなたか解る方、出来るだけ簡単なプログラムを教えて下さい。宜しくお願います。

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

  • ベストアンサー
回答No.1

a[x][y] == 1 のときだけ printf(...) すればいいんでしょ? printf(...) を if でくるめば完成。

その他の回答 (3)

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

>何らかの間違いがあるかもしれません。 ご自分のところでコンパイル~実行してみれば、 結果が正しいかどうかはすぐわかりますね。 「あるかもしれません」というあいまいな話ではなくて。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

>行列の1の要素の添え字を書き出したい つまり、a[x][y]が1の場合だけ表示し、そうでなければ表示しない。 ということですね。 printf("%3d",a[x][y]);←この部分がヘンなので、以下のように直す。 if( a[x][y] == 1 ) {   printf("(%d,%d)",x,y); //★参照 } ★ (1)添え字は2個なので、"%d"を2個記述する (2)添え字(xとy)を表示するわけで、要素(a[x][y])を表示しない (3)"%3d"の"3"は不要 意味が分かってやっているの?

  • yoyox
  • ベストアンサー率44% (86/193)
回答No.2

printfを実行するかどうかをif文で判別できませんか? if(配列の中身が1かどうか) {printf(~~~)} for > for > if といった構造にすればよいかと思います。 あと、printf文の中身も違うようです。 そのままですと配列の要素の中身を表示するだけなので、 xとyを表示するよう改めなければいけません。

関連するQ&A

  • callocで二次元配列を作成するには?

    今、動的オブジェクトの勉強をしております。 動的の一次元配列の作り方として #include <stdio.h> #include <stdlib.h> int main(void) {    int *a;    int x;    printf("配列の大きさX入力>");    scanf("%d",&x);    a=calloc(x,sizeof(int));    return (0); } これでいいと思うんですが動的な2次元配列を 作りたいときはどのようにすればよろしいのでしょうか? (↓作りたい二次元配列の例(1)↓) int main(void) {    int *a;    int x , y;    printf("配列の大きさX入力>");    scanf("%d",&x);         //5と入力    printf("配列の大きさY入力>");    scanf("%d",&y);         //10と入力    上のように入力するとa[5][10]という配列が完成する } よろしくお願いします

  • C言語のポインタについての質問です。

    C言語のポインタについての質問です。 2つのプログラムを作り、片方で数値を入力し、 もう片方でその数値を読み取りたいと思っています。 数値入力のプログラムは次のようになっています。 #include<stdio.h> void main(void){ int A=1; int *p; p=&A; printf("%p\n",p); } この実行結果は「0012FF88」となりました。 次にこの「0012FF88」というアドレスを使って「1」を読み取る 別のプログラムを作りたいと思っています。 #include<stdio.h> void main(void) { int add; int a; printf("アドレスは?\n"); scanf("%x",&add);    //「0012FF88」と入力 a=*(int*)add; printf("%x---->%d",&add,a); } このようなプログラムを作ってコンパイルできたのですが、 実行してアドレスを打ち込むと「Win32の例外が発生しました」 となって実行できません。 何かよい方法やプログラムの問題などありましたら 教えて頂けませんか?

  • c言語 パスカルの三角形

    c言語でパスカルの三角形を出力するプログラムを作りたいのですが、上手くいきません。 何を直せばいいのか教えてください。 #include <stdio.h> #define N 10 int main(void){ int i, j = 1, x, y; int d[N][N]; /* 三角形を作成 */ for (i = 1 ; i < N ; i++){ d[i][0] = 1; while (j <= i - 1){ d[i][j] = d[i-1][j-1] + d[i-1][j]; j ++; } } /* 三角形の表示 */ for (y = 0; y < N; y++) { for (x = 0; x < N-y; x++) printf(" "); for (x = 0; x < y; x++) printf("%3d ", d[x][y]); printf("\n"); } return 0; } 実行結果 -2147417616 2665208 1629976532 1627572249 1629101723 1 1629982744 2665256 2665548 3407923 1629345053 1627571017 0 3538997 1629739051 10 1629345053 2665368 3670071 2665384 1629739040 1627927140 2665244 1628040295 57 1628810863 1629476960 1628602749 2665560 2665304 1629345053 0 1629739040 1629740576 1628992224 2 4411498 1628040588 -2147417600 0 1629476960 1629740664 1629739040 1 267574 0

  • C言語 2次元配列で

    #include<stdio.h> int main() { char name[4][8]={"2013","mic","matsu","test"}; int i; for(i=0;i<4;i++) { printf("%s\n",name[i]); } return; } をいじって、配列の宣言をせずに、別の動作で同じ実行結果を得るためにはどうすればよいでしょうか? ただし、2次元配列を使用しないといけないのですが・・・。 すみませんが、できれば至急、ご指導、ソースコードの模範解答のほう、よろしくお願いします。

  • C言語 2次元配列の積について

    <演習>  4行3列の行列と3行4列の行列の積を求めるプログラムを作成    せよ。各構成要素の値はキーボードから読み込むこと。  ここに出てくる「行列」とは、数学で出てくるあの「行列」のこと でしょうか。  そうなると私が作成したプログラムは意味が違ってきます。 4回同じ事をする様になっていて1回分の計算結果だけにしたいのですが、方法が分かりません。  入門レベルの知識しかありません。ご指導の程、お願いしたいで す。 下記、プログラムを送付します。 <プログラム> #include <stdio.h> int main(void) { int i,j=0; int o,p; int a[4][3]; int b[3][4]; int m[4][4]; for (i = 0;i < 4; i++){ for (j = 0; j < 3 ; j++) { printf("a[%d][%d] = ",i,j); scanf("%d",&a[i][j]); } } printf("\n"); for (i= 0; i < 3; i++){ for (j = 0; j < 4; j++){ printf("b[%d][%d] = ",i,j); scanf("%d",&b[i][j]); } } printf("\n"); for (o = 0; o < 4; o++){ for (p = 0; p < 4; p++){ for (j = 0; j < 4; j++){ for ( i=0 ; i < 4 ;i++ ) { m[o][p] = a[i][j] * b[i][j]; printf ("a[%d][%d] = %d ," ,i, j, a[i][j]); printf ("b[%d][%d] = %d ," ,i, j, b[i][j]); printf("m[%d][%d] = %d \n",o,p,m[o][p]); } } } } return 0; }    

  • C言語のポインタの考え方について

    ポインタについて理解ができていないのでお聞きしたいのですが 値を交換する関数のプログラミングでこの場合ポインタ で以下にしないといけないと思います。 #include<stdio.h> void swap(int *a int *b){ int c; c=*a; *a=*b; *b=c; } main(){ int x,y; x=123; y=456; swap(&x,&y); printf("x = %d, y = %d\n", x, y); } またポインタを使用せず以下のプログラムではなぜダメのでしょうか。 よろしくお願い致します。 #include<stdio.h> void swap(int a int b){ int c; c=a; a=b; b=c; } main(){ int x,y; x=123; y=456; swap(x,y); printf("x = %d, y = %d\n", x, y); }

  • 二次元配列の対各成分を書き出すプログラムについて

    実行結果が3,5,7を書き出すプログラムを作成したいです。1,5,9を書き出す(以下のプログラム)を書き出すものは出来たのですが、3,5,7を書き出すプログラムが解りません。誰か解る方、教えて下さい。 #include<stdio.h> int main(void){ int i,mt[3][3]= {{1,2,3}, {4,5,6},     {7,8,9}}; for(i=0;i<3;i++){ printf("%d",mt[i][i]); } printf("\n"); return(0); }

  • C言語プログラム 配列

    C言語プログラム初心者です。以下のプログラムに対して、実行結果がなぜそうなるかがわからないので、詳しく教えてください。 #include<stdio.h> int func(int a[ ],int b[ ],int n); main(){ int i,k; static int a[12] ={1,2,3,4,5,(省略)・・・,12};  static int b[12] ={21,22,23,24,(省略)・・・,32}; k = func(a,b,6); k = func(b+3,a+3,6); printf("a = "); for(i=0;i<12;i++)printf("%d",a[i]); printf("\n = b"); for(i=0;i<12;i++)printf("%d",b[i]); printf("\n k = %d\n",k); } int func(int a[ ],int b[ ],int n){ int i,x=0; for(i=0;i<n;i++);{ a[i] = b[i]; x = x+a[i]; } return(x); } 結果: a = 21 22 23 .... 26 7 8 9 10 11 12 b = 21 22 23 .... 26 7 8 9 30 31 32 k = 99

  • c言語

    #include<stdio.h> main(void) { int x; double y,sum; void p(double *); for(sum=0.0,x=1;x<10;x++){ sum+=1.0/p(&x); ここでエラーがでます。 } printf("%d\n",sum); } void p(double *y) { *y*=*y; } どうしてエラーがでるかわかりません。教えてください!

  • 配列について(C言語)

    配列の要素において一番目の要素以外を0にするプログラムを以下のように作成したのですが(while文を*b != 0という条件で作りたい)、while文内のところが間違っているためだと思われるのですが、うまく実行されません(実行しても何も表示されない)。どのようにしたらいいのでしょうか。または、何かが抜けている、ほかの部分が間違っている等もあるためにうまく実行されないということなのでしょうか。 #include <stdio.h> int main(void) { int a[5] = {5, 78, 2, 9, 0}; int i, *b; b = &a[0]; while (*b != 0){ if(*!=a[0]) *ptr=0; else *ptr=a[0]; } for (i = 0; i < 5; i++){ printf("ptr値 =%d ptrアドレス =%p \n", *ptr, ptr); } printf("\n"); return (0); }

専門家に質問してみよう