C言語で二次配列の要素をキーボードから入力し、表示するプログラムの作成方法

このQ&Aのポイント
  • C言語で3×2行列の要素(float)をキーボードから入力し、画面表示するプログラムを作成する方法について説明します。
  • プログラムの作成には、配列名をmatrixとし、行と列のループ処理を使用して要素の入力と表示を行います。
  • ただし、現在のプログラムでは一部が正しく表示されておらず、ビジュアルスタジオ.net2003でコンパイルするとエラーが発生する問題があります。解決方法についても説明します。
回答を見る
  • ベストアンサー

二次配列

3×2 行列の要素(float)をキーボードから入力し,画面表示するプログラムを作成したいのですが 配列名をmatrixとして #include <stdio.h> int main(void){ int i, j; float matrix[3][2]; for ( i = 0; i < 3; i++ ){ printf("列入力:"); scanf("%f",matrix[i]); } for ( j = 0; j < 2; j++ ){ printf("行入力:"); scanf("%f",matrix[i]); }   for( i = 0; i < 3; i++ ){ for(j = 0; j < 2; j++ ){ printf("matrix[%d][%d] = %f\n",i+1,j+1,matrix[j][i]); } } getchar(); getchar(); return(0); } としたのですが・・・・・・一部が正しく表示されません。 さらにビジュアルスタジオ.net2003でコンパイルすると。実行結果の最後にエンターキーを押すとエラーが発生してしまうのですが・・・・。 どのようにすればいいのでしょうか?

noname#46595
noname#46595

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

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

ちょっとした例です。 #include <stdio.h> int main(void) {   int i, j;   float matrix[3][2];      for (i = 0; i < 3; i++) {     for (j = 0; j < 2; j++) {       printf("%d行%d列のデータ:", i + 1, j + 1);       scanf("%f", &matrix[i][j]);     }   }      for (i = 0; i < 3; i++) {     for (j = 0; j < 2; j++) {       printf("matrix[%d][%d] = %f\n", i + 1, j + 1, matrix[i][j]);     }   }   return 0; } (注)インデントのため、全角空白を使っています。

noname#46595
質問者

補足

お答いただいてありがとうございます。 自分のプログラム見直したらscanfの&が抜けてたり・・・・

関連するQ&A

  • 配列の和を求めるプログラム

    キーから入力したデータを配列に入力した後、その和を求めるプログラムを作成したいのですが、プログラミング初心者の私にはさっぱりわかりません。 和を求めたいのに平均値が出てきてしまいます。 どこが間違っているのか教えてください。 #include <stdio.h> float data[5]; float total(int max); void main(void) { int cnt = 0; float d; printf("please input a data: "); scanf("%f", &d); while((cnt < 5) && (d > 0.0)) { data[cnt] = d; cnt++; printf("please input a data: "); scanf("%f", &d); } printf("total data: %5.2f\n", total(cnt)); } float total(int max) { int i; float total = 0.0; for(i = 0; i < max; i++) { total += data[i]; } return total / max; }

  • C言語 プログラミングで行詰まりました…

    標準入力(キーボード)からi,jk,nの値を入力し、次の漸化式を計算し、X_0からX_nまで求めるプログラムを作成したいのですが、うまく表示されません。どかがおかしいのかご指摘お願いします。 <漸化式> X_n=(a+b)/X_(n-1) , X_0=c(n=0) ================================================================== #include<stdio.h> float f_X(int a,int b,float c) { float y; y=(a+b)/c; return y; } int main (void) { int number,i,j; float k,l,n,X; printf("i:"); scanf("%d", &i); printf("j:"); scanf("%d", &j); printf("k:"); scanf("%f", &k); printf("n:"); scanf("%f", &n); X=k; printf("X_0= %.6f\n",X); for(number=1;number<=n;number++) { l=f_X(i,j,X); printf("X_%d= %.6f \n",number,l); X=l; } return 0; } ===================================================================

  • Visual C++ 2005 行列のプログラムがうまくいきません

    Visual C++ 2005 で行列プログラムを作っているのですが、上手くいきません。初心者ですのでとても下らない間違えの可能性もありますが、ご教授下さい。 /*matrix*/ #include<stdio.h> int main(){ int i, j, m[2][2]; for(i=0; i<3; i++){ for(j=0; j<3; j++){ printf("matrix[%d][%d] ",i+1, j+1); scanf("%d",&m[i][j]); } } printf("matrix\n"); for(i=0; i<3; i++){ for(j=0; j<3; j++){ printf("%d ",m[i][j]); } printf("\n"); } printf("transposed matrix\n"); for(i=0; i<3; i++){ for(j=0; j<3; j++){ printf("%d ",m[j][i]); } printf("\n"); } } とプログラムし、デバックなしで開始すると。 matrix[1][1] 1 matrix[1][2] 2 matrix[1][3] 3 matrix[2][1] 4 matrix[2][2] 5 matrix[2][3] 6 matrix[3][1] 7 matrix[3][2] 8 matrix[3][3] 9 matrix 1 2 4 4 5 7 7 8 9 transposed matrix 1 4 7 2 5 8 4 7 9 続行するには何かキーを押してください . . . となってしまいます。 予定では matrix[1][1] 1 matrix[1][2] 2 matrix[1][3] 3 matrix[2][1] 4 matrix[2][2] 5 matrix[2][3] 6 matrix[3][1] 7 matrix[3][2] 8 matrix[3][3] 9 matrix 1 2 3 4 5 6 7 8 9 transposed matrix 1 4 7 2 5 8 3 6 9 続行するには何かキーを押してください . . . となって欲しいのですが。何処が間違っているんでしょうか。できれば正しいプログラムまで載せていただけると助かります。

  • 配列

    /*10個の数字を受け取り,その中に一致する2つの数字があるかどうかを報告するプログラム*/ #include<stdio.h> int main(void) { int i,j,k; int item[9]; printf("10個の数字を入力してください\n"); for(i=0;i<10;i++) scanf("%d",&item[i]); for(j=0;j<10;j++) { for(k=j+1;k<10;k++) { if(item[j]==item[k]) printf("%dが2つ存在します.\n",item[j]); } } return 0; } というプログラムでエラーが出てしまいました. エラー内容は Stack around the variable 'item' was corrupted というものです. 原因を知りたいです.よろしくお願いします.

  • C言語 多重配列に関して

    以下のプログラムについての質問です。 10行目 for i = 0 の時、13行目 for j = 0 で scanf("%lf", &a[0][0])に10と代入します。 この時のドス画面は input 1-th line element:10 です。ここまではいいのですが、この次がよくわかりません。私の考えでは、10行目 i = 0 の時 13行目 j = 1 となって j がNMAXまでやったら、10行目のiが1になってまた同じように動いて、10行目の i がNMAXになったら、for文が終わると考えたのですが、このプログラムの実行結果(一番下にあります)を見てみると自分の考えが間違っていることに気がつきました。 3行3列のプログラムなので、a[0][0] a[0][1] a[0][2] a[1][0].......となると考え、scanfでドス画面に9回数字を打ち込むかと思ったのですが実際は3回でした。このプログラムはどのように読んだら良いのでしょうか?? 回答宜しくお願い致します。 1  #include <stdio.h> 2  #define NMAX 3 3 4  main() 5  { 6   double a[NMAX] [NMAX], b[NMAX] [NMAX], c[NMAX] [NMAX]; 7   int i,j,k; 8 9   printf("matrix 1:\n"); 10   for(i=0; i< NMAX; i++) 11   { 12   printf("input %d-th line element:", i+1); 13   for(j=0; j< NMAX; j++); 14   { 15   scanf("%lf", &a[i][j]); 16   } 17   } 18   printf("matrix 2:\n"); 19   for(i=0; i<NMAX; i++) 20   { 21   printf("input %d-th line element:", i+1); 22   for(j=0; j< NMAX; j++); 23   { 24   scanf("%lf", &b[i] [j]); 25   } 26   } 27  for(i=0; i<NMAX; i++) 28   { 29   for(j=0; j<NMAX; j++) 30   { 31   c[i][j] = 0; 32   for(k=0; k <NMAX; k++) 33   { 34   c[i][j] += a[i][k] * b[k][j]; 35   } 36   } 37   } 38 39  printf("matrix 1 * matrix2 = :\n"); 40  for(i=0; i<NMAX; i++) 41   { 42   printf("["); 43   for(j=0;j<NMAX; j++) 44   { 45   printf("%f", c[i][j]); 46   } 47   printf("]\n"); 48   } 49  }

  • 二次元配列2

    キーボードから0 以上100 以下の整数を入力し,(1)0 以上10 未満,(2)10 以上20 未満,(3)20 以上30 未満,・・・(10)90 以上100 未満,(11)100 の11 段階に分類して頻度を調べるプログラムを作成します。負の値が入力された場合にはプログラムを終了して,101 以上の数が入力された場合には入力値が無効であることを画面表示して頻度には数えない。 日本語が難しくて少し理解しずらいのですが・・・・・ #include <stdio.h> int main(void){ int i,n,count; int a[11] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; do{ printf("1以上100以下の整数を入力"); scanf("%d",&n); /*ここに頻度の処理を書く??*/ }while(n < 0); printf("終了"); for( i = 0; i < 11; i++){ /*画面表示*/ } getchar(); getchar(); return(0); } という具合でいいのでしょうか・・・・・・・ それと頻度の処理はどうすればいいのでしょうか

  • 中央値の抽出

     printf("\n中央値は%7.1fです。\n",median);の部分で%7.1fの7.1というのはどんな意味があるのでしょうか? #include<stdio.h> #include<conio.h> void main() { int d[100]; int i,j,n,temp,n_med; float median; printf("データ数を入力してください。(最大100); "); scanf("%d",&n); for(i=0;i<n;i++){ printf("%d番目のデータは? ",i+1); scanf("%d",&d[i]); } for(i=0;i<n;i++){ for(j=i+1;j<n;j++){ if(d[i]<d[j]){ temp=d[i]; d[i]=d[j]; d[j]=temp; } } } n_med=n/2; if(n==n_med*2){ median=(float)(d[n_med-1]+d[n_med])/(float)2; } else{ median=d[n_med]; } printf("\n中央値は%7.1fです。\n",median); getch(); }

  • C言語・値交換について

    キーボードから10個のfloat型の値を入力し、入力した順序と逆順に表示するプログラムを作成せよ。 との問題ですが解けずに悔しいです、アドバイスお願いします。 // charを使うと思いますが練習不足です><。 #include<stdio.h> int main() { int i; float a[10]; for(i=0;i<=10;i=i-1){ scanf("%f",&a[i]); printf("%f\n",a[i]); } for(i=0;i<=10;i++){ printf("Input=\n"); } return 0; }

  • C言語の配列について

    配列を20 定義し値を入力して合計値を出したいのですがどうすればよいのでしょうか 下のソースでエラーはおこりませんでした 何がちがうのでしょうか #include <stdio.h> int main() { int a[20]={}; int i, sum; printf("整数を入力してください:"); scanf("%d",&a); printf("\n"); for (i = 0; i < 10; i++) { sum += a[i]; } printf("sum= %d\n", sum); return 0; }

  • getchar()について 教えてください。

    visual studio 2010 professinalで以下のソースをデバッグして ”続行するには何かキーを押してください!”  で待機させたいのですが getchar()一個だけでは実現しません。   2個重ねるとOKです。どうしてでしょうか。  -------------- 以下のようにscanf関数がなければokということは突き止めたのですが、、、。  ご教授ください。 #include <stdio.h> int main(void) { int i; printf("なにか数字を入力してください。\n"); scanf("%d",&i); printf("今あなたが入力した数字は%dです。\n",i); printf("続行するには何かキーを押してください!"); getchar(); //getchar(); return 0; } ---------------------------------------------------------------- int main(void) { printf("続行するには何かキーを押してください!"); getchar();   return 0; }