线性代数——矩阵乘积的代码实现

think:
1根据线性代数矩阵乘积部分的知识点,自己创作了自己的第一道题目,虽然并不真正能够作为一道测试题目使用,但对自己来说却拥有重要的意义,而且自己可以通过这样的方法途径优化建立自己的新的知识体系,热爱计算机,以兴趣为老师
2学会活学活用,将自己学到的知识与计算机知识结合起来,尝试将自己的其他学科的知识体系结合优化与计算机知识体系的联系,并希望可以建立一种新的更加优化的知识体系

计算AB的矩阵乘积

input:n, m, ni, mi
n:矩阵A的行数
m:矩阵A的列数
ni:矩阵B的行数
mi:矩阵B的列数
输入矩阵A,输入矩阵B

output:
输出AB的矩阵乘积

example input1:

3 4 4 2
1 0 2 -1
0 1 -1 3
-1 2 0 1
1 2
2 1
0 3
1 4

example output1:

Very Good!
AB = 
0 4
5 10
4 4

example input2:

3 3 3 3
1 -3 2
3 -4 1
2 -5 3
2 5 6
1 2 5
1 3 2

example output2:

Very Good!
AB = 
1 5 -5
3 10 0
2 9 -7
I Love You!
BA = 
29 -56 27
17 -36 19
14 -25 11

example input3:

4 2 3 4
1 2
2 1
0 3
1 4
1 0 2 -1
0 1 -1 3
-1 2 0 1

example output3:

请确认矩阵乘积是否合法
注意, 在矩阵乘积的定义中,只有当左边矩阵A的列数等于右边矩阵B的行数时,乘积AB才有意义,这时矩阵AB的行数等于矩阵A的行数,AB的列数等于矩阵B的列数,且AB的第i行第j列的元素是A的第i行与B的第j列的对应元素的乘积之和

hint:

author:
LEO

以下为线性代数——矩阵乘积的实现代码

#include 
int main()
{
    int a[104][104], b[104][104], ans[104][104];
    int n, m, ni, mi, i, j, k;
    while(scanf("%d %d %d %d", &n, &m, &ni, &mi) != EOF)
    {
        for(i = 1; i <= n; i++)
            for(j = 1; j <= m; j++)
                scanf("%d", &a[i][j]);
        for(i = 1; i <= ni; i++)
            for(j = 1; j <= mi; j++)
                scanf("%d", &b[i][j]);
        if(m == ni)
        {
            for(i = 1; i <= n; i++)
                for(j = 1; j <= mi; j++)
                {
                    ans[i][j] = 0;
                    for(k = 1; k <= m; k++)
                    {
                        ans[i][j] += a[i][k]*b[k][j];
                    }
                }
            printf("Very Good!\nAB = \n");
            for(i = 1; i <= n; i++)
                for(j = 1; j <= mi; j++)
                    printf("%d%c", ans[i][j], j == mi? '\n': ' ');
        }
        if(m == ni && n == mi)
        {
            for(i = 1; i <= ni; i++)
                for(j = 1; j <= m; j++)
                {
                    ans[i][j] = 0;
                    for(k = 1; k <= n; k++)
                    {
                        ans[i][j] += b[i][k]*a[k][j];
                    }
                }
            printf("I Love You!\nBA = \n");
            for(i = 1; i <= ni; i++)
                for(j = 1; j <= m; j++)
                    printf("%d%c", ans[i][j], j == m? '\n': ' ');
        }
        else if(m != ni)
        {
            printf("请确认矩阵乘积是否合法\n");
            printf("注意, 在矩阵乘积的定义中,只有当左边矩阵A的列数等于右边矩阵B的行数时,乘积AB才有意义,这时矩阵AB的行数等于矩阵A的行数,AB的列数等于矩阵B的列数,且AB的第i行第j列的元素是A的第i行与B的第j列的对应元素的乘积之和\n");
        }
    }
    return 0;
}

你可能感兴趣的:(线性代数,知识体系,线性代数-矩阵乘积)