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

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

コメント

 めちゃくちゃてこずった問題。そもそも表同士の掛け算の仕組みを知らないと解けない。重なる値をただ掛ければいいわけじゃないよ。

 


書籍情報

& 784815609795%2Caps%2C168&sr=8-1&linkCode=ll1&tag=hyogokurumisite-22&linkId=7d292d5af37ba885acf362d5e6112ae8&language=ja_JP&ref_=as_li_ss_tl”]


コメント

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