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

输入一个两个3*3的矩阵,输出矩阵为两个矩阵的卷积。例,输入矩阵为123,和987456654789321输出矩阵为:9162124252421169环境为:vc++6.... 输入一个两个3*3的矩阵,输出矩阵为两个矩阵的卷积。 例,输入矩阵为1 2 3,和9 8 7 4 5 6 6 5 4 7 8 9 3 2 1 输出矩阵为:9 16 21 24 25 24 21 16 9 环境为:vc++ 6.0 展开
 我来答
郦鲸赛成济
2019-06-05 · TA获得超过3761个赞
知道大有可为答主
回答量:3023
采纳率:26%
帮助的人:428万
展开全部

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嵌套循环进行计算。
根据矩阵乘法公式:
可以用循环直接套用上面的公式计算每个元素。嵌套循环内部进行累加前,一定要注意对累加变量进行清零。
数据要求
问题中的常量:
#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<m;i++)
 
for(j=0;j<p;j++)
 
{
  
/*按照矩阵乘法的规则计算结果矩阵的i*j元素*/
  
lSum=0;
  
for(k=0;k<n;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<m;i++)
 
for(j=0;j<n;j++)
 
{
  
scanf("%ld",&lTemp);
  
lMatrix1[i][j]=lTemp;
 
}
/*输入第二个矩阵的每个元素*/
printf("\nPlease
elements
of
Matrix2(%d*%d):\n",n,p);
for(i=0;i<n;i++)
 
for(j=0;j<p;j++)
 
{
  
scanf("%ld",&lTemp);
  
lMatrix2[i][j]=lTemp;
 
}
/*调用函数进行乘法运算,结果放在lMatrixResult
中*/
MatrixMutiply(m,n,p,lMatrix1,lMatrix2,lMatrixResult);
/*打印输出结果矩阵*/
printf("\nResult
matrix:
\n");
for(i=0;i<m;i++)
{
 
for(j=0;j<p;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

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式