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

コメント

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

 


書籍情報



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