『新・明解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;
}

コメント

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

 


書籍情報



Copyright (C) 2016 "HYOGOKURUMI" All Rights Reserved./「来未炳吾・平極ルミ・HYOGOKURUMI」の発達障害考察を主とした全ての発信は、相互不干渉など特別な約束をした者達を除き、どなたでもご活用できます。ただし著作権は放棄しておりません。あしからずご了承ください。詳細は著作権に関するガイドラインをご一読ください。/「HYOGOKURUMI.site」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。