问题描述:
编写程序,可以实现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