矩阵乘法(C/C++)

矩阵乘法(C/C++)

代码如下:

#include<stdio.h> 
int main(){
	//r1表示第一个矩阵的行数,c1表示第一个矩阵的列数
	//r2表示第二个矩阵的行数,c2表示第二个矩阵的列数 
	int r1, c1, r2, c2;
	
	//输入第一个矩阵的行数和列数 
	printf("输入第一个矩阵的行数和列数:");
	scanf("%d %d", &r1, &c1);
	//输入第二个矩阵的行数和列数 
	printf("输入第二个矩阵的行数和列数:");
	scanf("%d %d", &r2, &c2);
	
	//判断输入的矩阵是否满足矩阵乘法要求,即第一个矩阵的列数c1等于第二个矩阵的行数r2 
	if(c1 == r2){ 
		//m1表示第一个矩阵,m2表示第二个矩阵,m3表示两个矩阵相乘后所得到的矩阵 
		double m1[r1][c1], m2[r2][c2], m3[r1][c2];
		
		//输入第一个矩阵的元素 
		printf("\n输入第一个矩阵(%d行,%d列)的元素:\n", r1, c1);
		for(int i = 0; i < r1; i++){//表示第一个矩阵的第i行 
			for(int j = 0; j < c1; j++){//表示第一个矩阵的第j列 
				scanf("%lf", &m1[i][j]);//m1[i][j]表示第一个矩阵的第i行第j列元素 
			}
		}
		//输入第二个矩阵的元素 
		printf("输入第二个矩阵(%d行,%d列)的元素:\n", r2, c2);
		for(int i = 0; i < r2; i++){//表示第二个矩阵的第i行 
			for(int j = 0; j < c2; j++){//表示第二个矩阵的第j列 
				scanf("%lf", &m2[i][j]);//m2[i][j]表示第二个矩阵的第i行第j列元素 
			}
		}
		
		//两个矩阵进行乘法运算 
		for(int i = 0; i < r1; i++){//表示第一个矩阵的第i行 
			for(int j = 0; j < c2; j++){//表示第二个矩阵的第j列 
				m3[i][j] = 0;//累加求和的前提条件 
				for(int k = 0; k < r2; k++){//累加求第一个矩阵的第i行与第二个矩阵的第j列的对应元素乘积之和 
					//m1[i][k]表示第一个矩阵的第i行第k个元素,从左到右 
					//m2[k][j]表示第二个矩阵的第j列第k个元素,从上到下 
					m3[i][j] += m1[i][k]*m2[k][j];
					//与上面式子的等价写法:m3[i][j] = m3[i][j] + m1[i][k]*m2[k][j]; 
				}
			}
		}
		
		//输出两个矩阵相乘所得到的矩阵,即输出乘积矩阵 
		printf("\n两个矩阵相乘所得到的矩阵(%d行,%d列)为:\n", r1, c2);
		for(int i = 0; i < r1; i++){//表示乘积矩阵的第i行 
			for(int j = 0; j < c2; j++){//表示乘积矩阵的第j列 
				printf("%f ", m3[i][j]);//m3[i][j]表示乘积矩阵的第i行第j列元素 
			}
			printf("\n");//输出换行 
		}
	}else{
		//输出错误提示信息 
		printf("输入矩阵不满足矩阵乘法要求!\n");
	}
}

运行结果如下:

在这里插入图片描述

参考数目如下:

[1] 严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2020:15.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值