演習 6-12

#include <stdio.h>

int matrix1[3][4], matrix2[4][3], matrix3[3][3] = { 0 };

//3行4列の行列aを入力
void input_matrix1(){

int i;

printf("3行4列の行列を入力して下さい。(数字と数字の間は半角スペース)\n");
for (i = 0; i < 3; i++){
scanf("%d %d %d %d", &matrix1[i][0], &matrix1[i][1], &matrix1[i][2], &matrix1[i][3]);
}
}

//4行3列の行列bを入力
void input_matrix2(){

int i;

printf("4行3列の行列を入力して下さい。(数字と数字の間は半角スペース)\n");
for (i = 0; i < 4; i++){
scanf("%d %d %d", &matrix2[i][0], &matrix2[i][1], &matrix2[i][2]);
}
}

//b*aをcに代入
void mat_mul(const int a[3][4], const int b[4][3], int c[3][3]){

int i, j, k;

for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
for (k = 0; k < 4; k++){
c[i][j] = c[i][j] + b[k][j] * a[j][k];
}
}
}
}

//cを出力
void mat_print(const int c[3][3]){

int i, j;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
printf("%3d", c[i][j]);
}
printf("\n");
}
}

int main(){

printf("3行4列の行列と4行3列の行列の積を求めます。\n");
input_matrix1();
input_matrix2();
printf("4行3列の行列と3行4列の行列の積は\n");
mat_mul(matrix1, matrix2, matrix3);
mat_print(matrix3);

return 0;
}

2 件のコメント:

  1. 著書にはc[4][4]と書いているのに
    なぜmatrix3[3][3]になってるのですか・・・?

    返信削除
  2. 返信が遅れてしまいすいません. 2014年初版をもっているのですがそちらの方では[3][3]で定義されていました. 行列のほうが(3,4)×(4, 3)なので結果としては(3, 3)になるのですが, 配列の安全性からするともしかすると[4][4]で定義したほうが良いかもしれません.

    返信削除