/*
    C/C++の宿題片付けます 161代目
    http://t...content-available-to-author-only...h.net/test/read.cgi/tech/1354070278/
        125 名前：デフォルトの名無しさん [sage]： 2012/12/06(木) 10:12:21.78  
        [1] 授業単元：c言語 関数＆配列
        [2] 問題文　関数配列の問題です。
        ｈｔｔｐ：//www.dotup.org/uploda/www.dotup.org3703015.pdf
        [3] 環境 
        　[3.1] OS： Linux 
        　[3.2] コンパイラ名とバージョン： gcc 
        　[3.3] 言語： C 
        [4] 期限:12/11 
        ポインターは使わずによろしくお願いいたします 
    4.
*/
#include<stdio.h>

#define N (3)                   // 行, 列

void disp_matrix(double m[N][N])
{
    int g, r;
    for (g = 0; g < N; g++) {
        printf("| ");
        for (r = 0; r < N; r++) {
            printf("%f ", m[g][r]);
        }
        printf("|\n");
    }
}

void multmat(double mA[N][N], double mB[N][N], double mC[N][N])
{
    int g, r, i;
    for (g = 0; g < N; g++) {
        for (r = 0; r < N; r++) {
            mC[g][r] = 0.0;
            for (i = 0; i < N; i++) {
                mC[g][r] += mA[g][i] * mB[i][r];
            }
        }
    }
}

int main()
{
    double matrix_A[N][N] = { {1.0, 0.0, 2.0}, {2.0, 1.0, 2.0}, {3.0, 2.0, 1.0} };
    double matrix_B[N][N] = { {1.0, 3.0, 2.0}, {2.0, 0.0, 1.0}, {1.0, 1.0, 1.0} };
    double matrix_C[N][N];

    printf("A =\n");disp_matrix(matrix_A);
    printf("B =\n");disp_matrix(matrix_B);
    printf("C = A * B =\n");
    multmat(matrix_A, matrix_B, matrix_C);
    disp_matrix(matrix_C);

    return 0;
}