- ベストアンサー
c言語 行列の積に関して
<問> 4行3列の行列aと3行4列の行列bの積を、4行4列の行列cに格納する関数を作成せよ。 void mat_mul(const int a[4][3], const int b[3][4], int c[4][4]) 入門レベルのスキルしかありません。 上手く行列の積のプログラムが組めません。 行列の積の計算結果が何も出てきません。 どの様にしたら良いかご指導の程、宜しくお願いします。 <プログラム> void mat_mul(const int a[4][3], const int b[3][4], int c[4][4]) { int i, j, k; for (i = 0; i < 4; k++) { for (j = 0; j < 4; i++) for (k = 0; k < 3; j++) c[i][j] = c[i][j] + (a[i][k] * b[k][j]); } } void mat_print(const int m[4][4]) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) printf("%4d", m[i][j]); putchar('\n'); } } int main(void) { int i, j ,k; int tensu1[4][3]; int tensu2[3][4]; int seki[4][4]; for(i = 0; i < 4; i++) { for (j = 0; j < 3; j++) { scanf("%d", &tensu1[i][j]); } putchar('\n'); } for(i = 0; i < 3; i++) { for(j = 0; j < 4; j++){ scanf("%d", &tensu2[i][j]); } putchar('\n'); } putchar('\n'); mat_mul(tensu1, tensu2, seki); puts("行列の積"); mat_print(seki); return 0; }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
関数mat_mulの中のこの3行ですが,よく見てください。意図しているようなループ制御ではないと思います。 for (i = 0; i < 4; k++) { for (j = 0; j < 4; i++) for (k = 0; k < 3; j++)
その他の回答 (1)
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
・積を計算している部分のループ変数で、増加させる変数が間違っています。 ・配列sekiが0で初期化されていません。 以下を参考にして下さい。 https://aisumegane.com/product_of_matrices/
お礼