题目:
输入样例1:
2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8
输出样例1:
2 4
20 22 24 16
53 58 63 28
输入样例2:
3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72
输出样例2:
Error: 2 != 3
首先得知道乘积矩阵是如何算出来的
也就是:
第一个矩阵第一行的每个值与第二个矩阵第一列的每个值对应相乘后加和起来,就得到了乘积矩阵的第一行的第一个值
第一个矩阵第一行的每个值与第二个矩阵第二列的每个值对应相乘后加和起来,就得到了乘积矩阵的第一行的第二个值
第一个矩阵第一行的每个值与第二个矩阵第三列的每个值对应相乘后加和起来,就得到了乘积矩阵的第一行的第三个值
......
第一个矩阵第二行的每个值与第二个矩阵第一列的每个值对应相乘后加和起来,就得到了乘积矩阵的第二行的第一个值
……
由此我们也可以知道想得到乘积矩阵的话,两个相乘的矩阵规模必须匹配,也就是说第一个矩阵的列必须等于第二个矩阵的行。
举个例子:
矩阵a
1 2 3
4 5 6
矩阵b
1 2
3 4
5 6
乘积矩阵ab:
第一行:第一个元素:1*1+2*3+3*5=22 第二个元素:1*2+2*4+3*6=28文章来源:https://www.toymoban.com/news/detail-770105.html
第二行:第一个元素:4*1+5*3+6*5=49 第二个元素:4*2+5*4+6*6=64文章来源地址https://www.toymoban.com/news/detail-770105.html
22 28
49 64
题目代码如下:
#include <stdio.h>
int main()
{
int a1,a2,b1,b2;//a1,a2第一个矩阵的行列;b1,b2第二个矩阵的行列
scanf("%d %d",&a1,&a2);
int num1[a1][a2];//创建第一个矩阵
for(int i = 0;i<a1;i++)//为第一个矩阵赋值
{
for(int j = 0;j<a2;j++)
{
scanf("%d",&num1[i][j]);
}
}
scanf("%d %d",&b1,&b2);//创建第二个矩阵
int num2[b1][b2];
for(int i = 0;i<b1;i++)//为第二个矩阵赋值
{
for(int j = 0;j<b2;j++)
{
scanf("%d",&num2[i][j]);
}
}
if(a2!=b1)//判断矩阵是否匹配
printf("Error: %d != %d",a2,b1);//不匹配则输出
else//匹配则继续往下
{
printf("%d %d\n",a1,b2);//先输出乘积矩阵的行列
for(int i = 0;i<a1;i++)//乘积矩阵每个元素的实现
{
for(int j = 0;j<b2;j++)
{
int ret = 0;//暂时储存乘积矩阵的一个元素
for(int k = 0;k<b1;k++)
{
//此层循环结束,则乘积矩阵的一个元素形成
ret += (num1[i][k] * num2[k][j]);
}
printf("%d",ret);//输出这个值
if(j<b2-1)//为格式做准备,最后一个值的后面没有空格
printf(" ");
}
printf("\n");//换行
}
}
return 0;
}
结果:
到了这里,关于PTA L1-048 矩阵A乘以B C语言的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!