c语言矩阵的乘法

Python016

c语言矩阵的乘法,第1张

#include<stdio.h>

typedef struct

{

int m

int n

int array[100][100]

}Ju_def

int main()

{

Ju_def Ju[11]

int i=0,m,n,k

int flag[10]

while(1)

{

flag[i]=0

printf("In put m and n:\n")

scanf("%d%d",&Ju[i].m,&Ju[i].n)

while(Ju[i].m<=0||Ju[i].m>100||Ju[i].n<=0||Ju[i].m>100)

{

printf("In put m and n again:\n")

scanf("%d%d",&Ju[i].m,&Ju[i].n)

}

printf("In put your array:\n")

for(m=0m<Ju[i].mm++)

{

for(n=0n<Ju[i].nn++)

{

scanf("%d",&Ju[i].array[m][n])

if(Ju[i].array[m][n]==0)

flag[i]++

}

}

if(flag[i]==(Ju[i].m*Ju[i].n))//矩阵元素全为0才退出循环

{

flag[i]=1

break

}

else

flag[i]=0

i++

i=i%10//超过10个矩阵,则又循环到第1个。

}

for(i=1i<10i++)

{

if((Ju[i].m!=Ju[0].n)&&(flag[i]==0))

{

printf("Not satisfied the definition of matrix multiplication !\n")

return 0

}

if(flag[i])

{

break

}

for(m=0m<Ju[0].mm++)

{

for(n=0n<Ju[0].nn++)

{

Ju[10].array[m][n]=0

for(k=0k<Ju[i].mk++)

{

Ju[10].array[m][n]+=Ju[0].array[m][n]*Ju[i].array[k][n]

}

Ju[0].array[m][n]=Ju[10].array[m][n]

}

}

}

for(m=0m<Ju[0].mm++)

{

for(n=0n<Ju[0].nn++)

{

printf("%-8d",Ju[0].array[m][n])

}

printf("\n")

}

}

你试试这个我的矩阵乘法是这样的了,A=A*B*C...(10个以内)。

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=0i<mi++)

 

for(j=0j<pj++)

 

{

  

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

  

lSum=0

  

for(k=0k<nk++)

   

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=0i<mi++)

 

for(j=0j<nj++)

 

{

  

scanf("%ld",&lTemp)

  

lMatrix1[i][j]=lTemp

 

}

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

printf("\nPlease

elements

of

Matrix2(%d*%d):\n",n,p)

for(i=0i<ni++)

 

for(j=0j<pj++)

 

{

  

scanf("%ld",&lTemp)

  

lMatrix2[i][j]=lTemp

 

}

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

中*/

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

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

printf("\nResult

matrix:

\n")

for(i=0i<mi++)

{

 

for(j=0j<pj++)

  

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

#include <stdio.h>

int main()

{

int x,y,z

int i,j,l

int sum=0

printf("请输入前一个矩阵的行数,列数与后一个矩阵的列数:\n")

scanf("%d %d %d",&x,&y,&z)

int a[x][y]

int b[y][z]

int c[x][z]

//读入矩阵

printf("请输入矩阵a:\n")

for(i=0i<xi++){

for(j=0j<yj++){

scanf("%d",&a[i][j])

}

}

printf("请输入矩阵b:\n")

for(i=0i<yi++){

for(j=0j<zj++){

scanf("%d",&b[i][j])

}

}

printf("矩阵a为:\n")

for(i=0i<xi++){

for(j=0j<yj++){

printf("%d",a[i][j])

if(j==y-1)

printf("\n")

else

printf("\t")

}

}

printf("矩阵b为:\n")

for(i=0i<yi++){

for(j=0j<zj++){

printf("%d",b[i][j])

if(j==z-1)

printf("\n")

else

printf("\t")

}

}

for(i=0i<xi++){

for(l=0l<zl++){

for(j=0j<yj++){

sum+=a[i][j]*b[j][l]

if(j==y-1){

c[i][l]=sum,sum=0

}

}

}

}

printf("矩阵a与矩阵b的乘积为:\n")

for(i=0i<xi++){

for(j=0j<zj++){

printf("%d",c[i][j])

if(j==z-1)

printf("\n")

else

printf("\t")

}

}

return 0

}