实验六.6

矩阵相乘

在这里插入图片描述

写出行列不同的矩阵相乘的关键就是充分理解它们相乘之后得出的结果是怎么样的,对于本人代码新人,我还是理解了些许时候的。
样例
第一个数组:两行三列{2 3 2 1 5 3};
第二个数组:三行两列{5 3 2 2 1 4};
样例得数
三行三列数组:
在这里插入图片描述

根据答案输出可以看出其中规律,我们先把每一项“+”后面的算式舍去不看,我们会发现第一个数组的每一行的第一个数乘以对应的第二个数组的该行所有元素,一一对应(即第一个数组第一行第一个数分别乘以第二个数组的第一个行的每一个元素,得到相乘后的数组中第一行的所有元素)以此类推,第一个数组的第二行的第一个数乘以第二个数乘以第二个数组第二行的每一个元素,得到相乘后数组的第二行所有元素。
最后我们看到样例得数中‘+’后面的数据,仔细观察就会发现用了第一个数组的每一行的第二个元素去分别乘以第二个数组对应行的所有数,再分别相加。

下面看一下代码:

#include <stdio.h>
#include <stdlib.h>


int main()
{
    int i,j;
    int a[100][100]= {0};
    int b[100][100]= {0};
    int c[100][100]= {0};
    int m,n,h,k,f,e;
    printf("please input M and N:");//输入第一个数组的行数和列数
    scanf("%d,%d",&m,&n);
    printf("please input the first array:\n");//输入数组1
    for(i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    printf("please input N and K:");//输入第二个数组的行数和列数
    scanf("%d,%d",&n,&k);
    printf("please input the second array:\n");//输入数组2
    for(i=0; i<n; i++)
    {
        for (j=0; j<k; j++)
        {
            scanf("%d",&b[i][j]);
        }
    }
    for(h=0;h<n;h++)//第一个矩阵的列数和第二个矩阵的行数
    {
        for(e=0;e<m;e++)//第一个矩阵的行数
        {
            for(f=0;f<k;f++)//第二个矩阵的列数
            {
                c[e][f]=a[e][h]*b[h][f]+c[e][f];//此处就是前面解释的相乘后的数组怎么得来的
            }
        }
    }

    for(i=0; i<m; i++)
    {
        for (j=0; j<k; j++)
        {
            printf("%3d",c[i][j]);
        }
        printf("\n");
    }
    return 0;
}

下面看一下输出:
在这里插入图片描述
这里有个地方值得注意的是,题目要求了第一个数组的列数要和第二个数组的行数相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值