• 締切済み

c言語のプログラムで行列の積を計算する

指定された行・列数(それぞれ10以下とする)の行列 X, Y の積 Z = X × Y を求めるプログラムを作成せよ.行列の要素はすべて整数とする. このプログラムで行と列の成分を入力するときに、1列になってしまうのですがどうしたらちゃんと入力できますか? int main(void) { double A[10][10]; double B[10][10]; int i,j,m,n,p,k; printf("行列xの行数は?:"); scanf("%d",&m); printf("行列xの列数(行列yの行数)は?:"); scanf("%d",&n); printf("行列yの列数は?:"); scanf("%d",&p); printf("行列xを入力してください。\n"); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%d", &A[i][j]); } } printf("行列yを入力してください。\n"); for (i = 0; i < n; i++) { for (j = 0; j < p; j++) { scanf("%d", &B[i][j]); } }

みんなの回答

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

それはそうと、 >double A[10][10]; >double B[10][10]; >scanf("%d", &A[i][j]); >scanf("%d", &B[i][j]); データの型と入力の仕様が矛盾しています。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

すみません「一列になる」の意味がわかりません。 もし 1(エンター) 2(エンター) 3(エンター) ... と入力したら 1 2 3 ... と表示される、という意味なら、ただ表示がそうなっている、というだけです。1(エンター)と入力したので、1(改行)と表示されただけです。 scanfのマニュアルをよく読めばわかることですが、 (%cや[]等で明示しないかぎり)、空白も改行も区別されません。 よって 1 2 3 4 も 1 2 3 4 も 1 2 3 4 も 1 2 3 4 も全部同じ入力になります。 もし、ちゃんとm行n列で入力したいのなら ・1行ずつ処理する。適当な区切り文字で分割する。 ・1行に含まれるデータの数を数えて、n個でなかったらエラーにする といった処理が必要です。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

何が一列なのかを具体的に説明したほうが回答を得られやすいと思います。