![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
これが私のプログラムです。
##############################################
#include<stdio.h>
int main(void)
{
int i, j, k, c;
int matrix1[4][3]; /*4かけ3行列*/
int matrix2[3][4]; /*3かけ4行列*/
int matrix[4][4]; /* matrix1とmatrix2の掛け算*/
puts("4掛け3行列の入力:");
for(i=0; i<4; i++) {
for(j=0; j<3; j++) {
printf("matrix1[%d][%d]=", i+1, j+1);
scanf("%d", &matrix1[i][j]);
}
putchar('\n');
}
putchar('\n');
puts("3掛け4行列の入力:");
for(i=0; i<3; i++) {
for(j=0; j<4; j++) {
printf("matrix2[%d][%d]=", i+1, j+1);
scanf("%d", &matrix1[i][j]);
}
putchar('\n');
}
putchar('\n');
puts("行列の積:");
for(i=0; i<4; i++) {
for(j=0; j<4; j++) {
c = 0;
for(k=0; k<3; k++)
c = c + matrix1[i][k]*matrix2[k][j];
c = matrix[i][j];
printf("%4d", matrix[i][j]);
}
putchar('\n');
}
putchar('\n');
puts("4掛け4行列の計算結果:");
for(i=0; i<5; i++) {
for(j=0; j<5; j++)
printf("%4d", matrix[i][j]);
putchar('\n');
}
return 0;
}
##############################################
これを実行すると、
##############################################
4掛け3行列の入力:
matrix1[1][1]=1
matrix1[1][2]=1
matrix1[1][3]=1
matrix1[2][1]=1
matrix1[2][2]=1
matrix1[2][3]=1
matrix1[3][1]=1
matrix1[3][2]=1
matrix1[3][3]=1
matrix1[4][1]=1
matrix1[4][2]=1
matrix1[4][3]=1
3掛け4行列の入力:
matrix2[1][1]=1
matrix2[1][2]=1
matrix2[1][3]=1
matrix2[1][4]=1
matrix2[2][1]=1
matrix2[2][2]=11
matrix2[2][3]=1
matrix2[2][4]=1
matrix2[3][1]=1
matrix2[3][2]=1
matrix2[3][3]=1
matrix2[3][4]=1
行列の積:
1835627636160006154118698333341952802655
1 04196909 0
0 0 0 0
4196832 04195728 0
4掛け4行列の計算結果:
1835627636160006154118698333341952802655 1
1 04196909 0 0
0 0 0 04196832
4196832 04195728 01673351312
1673351312327656176885764550097164196832
##############################################
となってしまいます。どのように改善すればようでしょうか?
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?e8efa67)
No.4ベストアンサー
- 回答日時:
以下のようにしてください。
修正個所は//修正のコメントをいれてます。-------------------------------
#include<stdio.h>
int main(void)
{
int i, j, k, c;
int matrix1[4][3]; /*4かけ3行列*/
int matrix2[3][4]; /*3かけ4行列*/
int matrix[4][4]; /* matrix1とmatrix2の掛け算*/
puts("4掛け3行列の入力:");
for(i=0; i<4; i++) {
for(j=0; j<3; j++) {
printf("matrix1[%d][%d]=", i+1, j+1);
scanf("%d", &matrix1[i][j]);
}
putchar('\n');
}
putchar('\n');
puts("3掛け4行列の入力:");
for(i=0; i<3; i++) {
for(j=0; j<4; j++) {
printf("matrix2[%d][%d]=", i+1, j+1);
scanf("%d", &matrix2[i][j]); //修正matrix1->matrix2
}
putchar('\n');
}
putchar('\n');
puts("行列の積:");
for(i=0; i<4; i++) {
for(j=0; j<4; j++) {
c = 0;
for(k=0; k<3; k++)
c = c + matrix1[i][k]*matrix2[k][j];
matrix[i][j]=c; //修正 右辺と左辺を交換
printf("%4d", matrix[i][j]);
}
putchar('\n');
}
putchar('\n');
puts("4掛け4行列の計算結果:");
for(i=0; i<4; i++) { //修正 5->4
for(j=0; j<4; j++) //修正 5->4
printf("%4d", matrix[i][j]);
putchar('\n');
}
return 0;
}
--------------------------------------
以下、実行結果です。
ケース1
4掛け3行列の入力:
matrix1[1][1]=1
matrix1[1][2]=1
matrix1[1][3]=1
matrix1[2][1]=1
matrix1[2][2]=1
matrix1[2][3]=1
matrix1[3][1]=1
matrix1[3][2]=1
matrix1[3][3]=1
matrix1[4][1]=1
matrix1[4][2]=1
matrix1[4][3]=1
3掛け4行列の入力:
matrix2[1][1]=1
matrix2[1][2]=1
matrix2[1][3]=1
matrix2[1][4]=1
matrix2[2][1]=1
matrix2[2][2]=1
matrix2[2][3]=1
matrix2[2][4]=1
matrix2[3][1]=1
matrix2[3][2]=1
matrix2[3][3]=1
matrix2[3][4]=1
行列の積:
3 3 3 3
3 3 3 3
3 3 3 3
3 3 3 3
4掛け4行列の計算結果:
3 3 3 3
3 3 3 3
3 3 3 3
3 3 3 3
ケース2
4掛け3行列の入力:
matrix1[1][1]=1
matrix1[1][2]=2
matrix1[1][3]=3
matrix1[2][1]=4
matrix1[2][2]=5
matrix1[2][3]=6
matrix1[3][1]=7
matrix1[3][2]=8
matrix1[3][3]=9
matrix1[4][1]=10
matrix1[4][2]=11
matrix1[4][3]=12
3掛け4行列の入力:
matrix2[1][1]=13
matrix2[1][2]=14
matrix2[1][3]=15
matrix2[1][4]=16
matrix2[2][1]=17
matrix2[2][2]=18
matrix2[2][3]=19
matrix2[2][4]=20
matrix2[3][1]=21
matrix2[3][2]=22
matrix2[3][3]=23
matrix2[3][4]=24
行列の積:
110 116 122 128
263 278 293 308
416 440 464 488
569 602 635 668
4掛け4行列の計算結果:
110 116 122 128
263 278 293 308
416 440 464 488
569 602 635 668
No.3
- 回答日時:
>for(i=0; i<3; i++) {
>for(j=0; j<4; j++) {
>printf("matrix2[%d][%d]=", i+1, j+1);
>scanf("%d", &matrix1[i][j]);
>}
多分コピペミスでしょうがscanf()で受け取る配列違いませんか?
そんな訳でmatrix2[][]は未初期化なんじやないですかね?
本来なら想定みしてない妙な値が出ていることからも。
# あとツッコミありますがループ回数がおかしくてバッファオーバーランとか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- 数学 線形代数の対称行列についての問題がわからないです。 2 2023/01/08 14:59
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- 工学 下図回路のFETはIDSQ=2mA、にバイアスされている。但し、ri=10kΩ、R1=22kΩ、R2 3 2022/09/29 12:49
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
二点の座標から距離や角度を求...
-
4変数の非線形方程式のときかた
-
エクセル・VBAでテキストボック...
-
零元のはいっている
-
テキストボックスかラベル上の...
-
Excel VBAでsub,dimは何の略?
-
【VB.NET】テキストボックスに...
-
subsequentとnextの違いってな...
-
他のフォームから別のフォーム...
-
C#のループでtextboxに値を入れ...
-
VB.NETのグラフィック描画で困...
-
PictureBoxでのアニメーション...
-
VBでの入力値制限について
-
VB.NETでのイベントの途中終了
-
【VBS】クリップボード操作につ...
-
テキストボックスを下から上へ...
-
プロシージャまたは関数の引数...
-
日付の重複
-
アクセスできない保護レベルエ...
-
sublimit textっていうエディタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ドラゴン曲線を再帰で書く
-
VB.NET)コンボボックスの連動に...
-
エクセル・VBAでテキストボック...
-
二点の座標から距離や角度を求...
-
複数条件のオートフィルタ(VBA)
-
テキストファイルの読み込みと...
-
エクセル ユーザーフォーム ...
-
C#を勉強していて、指定したフ...
-
エクセルのVBAでの7×7の魔方陣...
-
C言語で非線形方程式を解くプロ...
-
Lispにおける最大値関数
-
Linuxのプログラミング
-
4変数の非線形方程式のときかた
-
こうもりの撃退法
-
二分法のC++プログラム
-
VBA for next
-
小数点以下五桁一致の判定
-
VC++ (byte)(col & 0xFF) の意味
-
2次元配列を返す関数について
-
C言語の行列演算に関する質問
おすすめ情報