演習5ー10
問:4行3列の行列と3行4列の行列の積を求めるプログラムを作成せよ。各構成要素の値はキーボードから読み込むこと。
// Ex0510.c
#include <stdio.h>
int main(void)
{
int tensu1[4][3] = { {0} };
int tensu2[3][4] = { {0} };
int sum[4][4] = {{0}};
puts("tensu1(4行3列)の入力");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
printf("tensu1[%d][%d] = ", i, j);
scanf("%d", &tensu1[i][j]);
}
puts("\n");
}
puts("tensu1(4行3列)の入力");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("tensu2[%d][%d] = ", i, j);
scanf("%d", &tensu2[i][j]);
}
puts("\n");
}
puts("tensu1(4行3列)の表示");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++)
printf("%4d", tensu1[i][j]);
puts("\n");
}
puts("tensu2(3行4列)の表示");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++)
printf("%4d", tensu2[i][j]);
puts("\n");
}
// tensu1 * tensu2
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++)
for (int k = 0; k < 3; k++)
sum[i][j] = sum[i][j] + (tensu1[i][k] * tensu2[k][j]);
}
puts("tensu1 * tensu2の表示");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%4d", sum[i][j]);
}
puts("\n");
}
return 0;
}
コメント
めちゃくちゃてこずった問題。そもそも表同士の掛け算の仕組みを知らないと解けない。重なる値をただ掛ければいいわけじゃないよ。
書籍情報
コメント