プロが教えるわが家の防犯対策術!

指定された行・列数(それぞれ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]);
}
}

A 回答 (3件)

それはそうと、



>double A[10][10];
>double B[10][10];
>scanf("%d", &A[i][j]);
>scanf("%d", &B[i][j]);

データの型と入力の仕様が矛盾しています。
    • good
    • 0

すみません「一列になる」の意味がわかりません。



もし
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個でなかったらエラーにする
といった処理が必要です。
    • good
    • 0

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

「c言語のプログラムで行列の積を計算する」の回答画像1
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!