演習6ー12
問: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])
// Ex0612.c
#include <stdio.h>
void mat_mul(const int a[4][3], const int b[3][4], int c[4][4])
{
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++)
for (int k = 0; k < 3; k++)
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 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("tensu2(3行4列)の入力");
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");
}
mat_mul(tensu1, tensu2, sum);
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");
}
puts("合計点"); mat_print(sum);
return 0;
}
コメント
問いの文章の意味がわからなくて何度も読み返したけど、楽しい試行錯誤だった。
書籍情報
コメント