『新・明解C言語 入門編 第2版』演習問題解答例 6ー12

演習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;
}

コメント

 問いの文章の意味がわからなくて何度も読み返したけど、楽しい試行錯誤だった。

 


書籍情報


コメント

タイトルとURLをコピーしました