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

输入一个两个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

1、程序运行输入数据时,第一行为A矩阵的行列数和B矩阵的行列数,接着分别输入A、B两个矩阵的值。

2、首先,定义6个整型变量,保存A、B矩阵的行和列,以及控制循环的变量,k则用于实现矩阵的乘法。

3、接着,定义三个整型二维数组,保存A、B和C矩阵的各元素。

4、输入三个矩阵的行数和列数,保存在变量a、b、c中。

5、输入矩阵A的各元素,保存在数组X中。

6、输入矩阵B的各元素,保存在数组Y中。

7、将二维数组Z的各元素,初始化为0。

8、用两层for循环,控制矩阵的乘法,并输出乘法所得的结果。

9、计算A矩阵和B矩阵的乘法,结果保存在数组Z中。

10、最后,输出乘法所得的结果,即输出Z数组中的所有元素。

11、运行程序,输入矩阵A和B的行数和列数,以及A矩阵和B矩阵的所有元素,电脑就会计算出乘积C矩阵的所有元素,并输出C矩阵。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-03-24

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

第2个回答  推荐于2018-02-26
#include<stdio.h>
#include<stdlib.h>
#define M 3

int main(void)
{
    int i,j,k,matrix1[M][M],matrix2[M][M],row1=M ,col1=M ,row2=M,col2=M,matrix[M][M];   
    /*为需要相乘的两个矩阵赋值:*/ 
    printf("输入第一个矩阵:\n");
    for(i=0;i<row1;i++){
        for(j=0;j<col1;j++){
            scanf("%d",&matrix1[i][j]); 
        } 
    } 
    printf("输入第二个矩阵:\n");
    for(i=0;i<row2;i++){
        for(j=0;j<col2;j++){
            scanf("%d",&matrix2[i][j]); 
        } 
    }
    /*初始化matrix:*/
    for(i=0;i<row1;i++){
        for(j=0;j<col2;j++){
            matrix[i][j]=0; 
        } 
    } 
    
    printf("The result:\n"); 
    for(i=0;i<row1;i++){
        for(j=0;j<col2;j++){
            for(k=0;k<col1;k++){
                matrix[i][j]=matrix[i][j]+matrix1[i][k]*matrix2[k][j]; 
            } 
        } 
    }

    for(i=0;i<row1;i++){
        for(j=0;j<col2;j++){
            printf("%d ",matrix[i][j]); 
        } 
        printf("\n"); 
    } 
    return 0;
}

本回答被网友采纳
第3个回答  推荐于2017-10-03
#include <stdio.h>

int main()
{
int a[3][3];
int b[3][3];
int c[3][3];
int i,j;

for(i = 0;i < 3 ; i++)
{
for(j = 0; j < 3; j++)
{
scanf("%d",&a[i][j]);
}
}

for(i = 0;i < 3 ; i++)
{
for(j = 0; j < 3; j++)
{
scanf("%d",&b[i][j]);
}
}

for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
c[i][j] = a[i][j] * b[i][j];
}
}
for(i = 0;i < 3 ; i++)
{
for(j = 0; j < 3; j++)
{
printf("%3d",c[i][j]);
}
printf("\n");
}
}
请采纳本回答被提问者采纳
第4个回答  2019-12-23
用c语言实现两个矩阵相乘,编写程序就行。
相似回答