两个矩阵相乘

给定两个矩阵A和B,计算它们的乘积矩阵AB。
注意:
1、只有规模匹配的矩阵才可以相乘。即若A有Ra行、Ca列,B有Rb行、Cb列,则只有Ca=Rb时,A和B才能相乘。
2、乘积矩阵的行数等于A的行数Ra,列数等于B的列数Cb
3、乘积矩阵的第i行第j列的元素等于矩阵A的第i行的元素与矩阵B的第j列对应元素乘积之和。 如下所示:

图片.png

图片.png

输入格式:

输入先后给出两个矩阵A和B。
对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。
输入保证两个矩阵的RC都是正数,并且所有整数的绝对值不超过100。

输出格式:

若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出Error: Ca != Rb,其中Ca是A的列数,Rb是B的行数。

输入样例:

2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8

输出样例:

2 4
20 22 24 16
53 58 63 28

输入样例:

3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72

输出样例:

Error: Ca != Rb
#include<stdio.h>
int main()
{
	//给出矩阵A
	int ra,ca;
	scanf("%d %d",&ra,&ca);
	int i,j,a[ra][ca];
	for(i=1;i<=ra;i++)
	{
		for(j=1;j<=ca;j++)
		{
			scanf("%d",&a[i][j]);
		}
	} 
	//给出矩阵B
	int rb,cb;
	scanf("%d %d",&rb,&cb);
	int b[rb][cb];
	for(i=0;i<rb;i++)
	{
		for(j=0;j<cb;j++)
		{
			scanf("%d",&b[i][j]);
		}
	}
	//先判断是否能进行相乘
	if(ca!=rb) //如果不能匹配 
	{
		printf("Error: Ca != Rb\n");//题目并未要求给出具体的Ca Rb的值 
	}
	else//如果可以匹配 
	{
		int k,sum;
		printf("%d %d\n",ra,cb);//如果可以匹配先输出结果矩阵的行和列
		for(i=0;i<ra;i++)//控制行数偏移
		{
			for(j=0;j<cb;j++)//控制列数偏移 
			{
				sum=0;//每次相加开始时的初始值应该是0,避免影响下一轮结果
				for(k=0;k<ca;k++)//控制数据偏移
				{
					sum=sum+a[i][k]*b[k][j];//循环算乘积和,A矩阵的数字列坐标变化,B矩阵的数据行坐标变化 
				} 
				printf("%d",sum);//输出算得的乘积和
				if(j!=cb-1)  //一共有cb项,但是最后一个的下标是cb-1,因为是从0开始变化的
				{
				    printf(" ");//如果此时尚未算到结果矩阵的最后一个数字,数字后面还有个空格
                }
			}
            printf("\n");//换行 
		}
	}
	return 0;
} 

 

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值