c语言两矩阵相乘算法,用c语言实现两个矩阵相乘怎么做?

该博客介绍了如何使用C语言实现两个矩阵相乘的算法。通过定义一个void MatrixMutiply函数,采用三层嵌套循环来计算m*n和n*p矩阵的乘积,并将结果存储到新的m*p矩阵中。博主提供了完整的代码示例,包括输入矩阵的行列数及元素,最终输出乘法运算后的结果矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

匿名用户

1级

2015-01-15 回答

C语言实现矩阵相乘

问题描述:

编写程序,可以实现m*n矩阵和n*p矩阵相乘。m,n,p均小于10,矩阵元素为整数。

分析:

首先我们可以根据题意写出函数头。可以定为void MatrixMutiply(int m,int n,int p,long lMatrix1[MAX][MAX],long lMatrix2[MAX][MAX],long lMatrixResult[MAX][MAX]),其中lMatrix1和lMatrix2分别是输入的m*n矩阵和n*p矩阵,lMatrixResult是输出的m*p矩阵。

因为m,n和p都是未知量,要进行处理的矩阵大小是变量。但我们可以定义比较大的二维数组,只使用其中的部分数组元素。

矩阵相乘的算法比较简单,输入一个m*n矩阵和一个n*p矩阵,结果必然是m*p矩阵,有m*p个元素,每个元素都需要计算,可以使用m*p嵌套循环进行计算。

根据矩阵乘法公式:

e90f854a1420607c462ac25d4d09075e.png

可以用循环直接套用上面的公式计算每个元素。嵌套循环内部进行累加前,一定要注意对累加变量进行清零。

数据要求

问题中的常量:

#define MAX 10  /*矩阵最大行数和列数*/

问题的输入:

int m,n,p;   /*相乘的两个矩阵的行列数*/

long lMatrix1[MAX][MAX],lMatrix2[MAX][MAX]; /*相乘的两个矩阵*/

问题的输出:

long lMatrixResult[MAX][MAX];    /*矩阵相乘后得到的矩阵*/

初始算法

1.输入两个矩阵的的行列数m,n,p;

2.输入第一个矩阵的每个元素;

3.输入第二个矩阵的每个元素;

4.调用函数进行乘法运算,结果放在lMatrixResult 中;

5. 打印输出结果矩阵。

算法细化

算法的步骤4计算两个矩阵的乘法算法如下:

4.1 定义循环变量i,j,k;

4.2 嵌套循环计算结果矩阵(m*p)的每个元素。

程序代码如下:

#define MAX 10

void MatrixMutiply(int m,int n,int p,long lMatrix1[MAX][MAX],

long lMatrix2[MAX][MAX],long lMatrixResult[MAX][MAX])

{

int i,j,k;

long lSum;

/*嵌套循环计算结果矩阵(m*p)的每个元素*/

for(i=0;i

for(j=0;j

{

/*按照矩阵乘法的规则计算结果矩阵的i*j元素*/

lSum=0;

for(k=0;k

lSum+=lMatrix1[i][k]*lMatrix2[k][j];

lMatrixResult[i][j]=lSum;

}

}

main()

{

long lMatrix1[MAX][MAX],lMatrix2[MAX][MAX];

long lMatrixResult[MAX][MAX],lTemp;

int i,j,m,n,p;

/*输入两个矩阵的的行列数m,n,p*/

printf("\nPlease input m of Matrix1:\n");

scanf("%d",&m);

printf("Please input n of Matrix1:\n");

scanf("%d",&n);

printf("Please input p of Matrix2:\n");

scanf("%d",&p);

/*输入第一个矩阵的每个元素*/

printf("\nPlease elements of Matrix1(%d*%d):\n",m,n);

for(i=0;i

for(j=0;j

{

scanf("%ld",&lTemp);

lMatrix1[i][j]=lTemp;

}

/*输入第二个矩阵的每个元素*/

printf("\nPlease elements of Matrix2(%d*%d):\n",n,p);

for(i=0;i

for(j=0;j

{

scanf("%ld",&lTemp);

lMatrix2[i][j]=lTemp;

}

/*调用函数进行乘法运算,结果放在lMatrixResult 中*/

MatrixMutiply(m,n,p,lMatrix1,lMatrix2,lMatrixResult);

/*打印输出结果矩阵*/

printf("\nResult matrix: \n");

for(i=0;i

{

for(j=0;j

printf("%ld ",lMatrixResult[i][j]);

printf("\n");

}

}

程序运行结果如下:

Please input m of Matrix1:

3

Please input n of Matrix1:

2

Please input p of Matrix2:

3

Please elements of Matrix1(3*2):

1 2

0 1

3 0

Please elements of Matrix2(2*3):

1 2 0

3 1 1

Result matrix:

7 4 2

3 1 1

3 6 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值