给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra行、Ca列,B有Rb行、Cb列,则只有Ca与Rb相等时,两个矩阵才能相乘。
输入格式:
输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。
输出格式:
若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出Error: Ca != Rb
,其中Ca
是A的列数,Rb
是B的行数。
输入样例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
C语言:
矩阵A,B的乘法
A的列数需要与B的行数相等
细节:
因为此时的二维数组的长度需要根据输入来确定,所以定义数组需要在读入数据之后 。
首先读入矩阵A有几行几列,然后根据读入的数据定义二维数组,使用双层for循环读入数据存入二维数组中。
矩阵B同样操作。
读入两个矩阵之后根据要求判断是否能进行乘法运算,不可相乘则按要求进行输出,可以相乘则继续往下走。
设置三层for循环使两个矩阵的元素相乘并相加再进行输出,最后按照要求输出空格与换行。
#include <stdio.h>
int main()
{
int r1,c1,r2,c2,i,j,k,element,count=1;
scanf("%d %d",&r1,&c1);//读入第一个矩阵行列数
int A[r1][c1];
//因为此时的二维数组的长度需要根据输入来确定,所以定义数组需要在读入数据之后
for(i=0;i<r1;i++)//循环读入第一个矩阵
{
for(j=0;j<c1;j++)
{
scanf("%d",&A[i][j]);
}
}
scanf("%d %d",&r2,&c2);//读入第二个矩阵行列数
int B[r2][c2];
//因为此时的二维数组的长度需要根据输入来确定,所以定义数组需要在读入数据之后
for(i=0;i<r2;i++)//循环读入第二个矩阵
{
for(j=0;j<c2;j++)
{
scanf("%d",&B[i][j]);
}
}
if(c1!=r2)
{
printf("Error: %d != %d\n",c1,r2);
}
else
{
printf("%d %d\n",r1,c2);//输出计算后的行列数
for(i=0;i<r1;i++)//三层for循环实现矩阵A的行*B的列
{
for(k=0;k<c2;k++)
{
element=0;//暂时存储计算所得的元素值,每计算一个新元素进行清零
for(j=0;j<c1;j++)
{
element+=(A[i][j]*B[j][k]);
}
printf("%d",element);
if(k<c2-1)
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
标签:输出,数组,048,矩阵,乘以,相乘,读入,L1,输入 From: https://blog.csdn.net/m0_55661792/article/details/140228495