C语言中两矩阵相乘

Python09

C语言中两矩阵相乘,第1张

#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

}

#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个以内)。

没有细看,是不是维数问题。

给你一个程序,计算:

a[a_row][a_col] * b[b_row][b_col]=c[a_row][b_col]

注意 b_row==a_col

DEBUG 为 1 输出中间结果,方便查错。 可以改为 0。

动态分配数组。

含输入例子。

#include<stdio.h>

#include <stdlib.h>

#define DEBUG 1

void show_array(int *a, int row,int col)

/*---------------------

c[j]][i] = a[j][k] * b[k][i] = c[j][i]

a[c_row][nk]: a[3][2]={1,2,3,4,5,6}

b[nk][c_col]: b[2][3]={1,2,3,4,5,6}

c[c_row][c_col]: c[3][3]={9,12,15,19,26,33,29,40,51}

*---------------------*/

void matrix2(int *a,int *b, int *c, int a_row, int b_col, int b_row)

{

int i,j,k

int a_col,c_row,c_col

a_col=b_rowc_row=a_rowc_col=b_col

if (DEBUG==1){

printf("A[%d][%d]:\n",a_row,a_col)

show_array(a,a_row,a_col)

printf("B[%d][%d]:\n",b_row,c_col)

show_array(b,b_row,b_col)

}

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

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

c[j*c_col+i]=0

for(k=0k<a_colk++) c[j*c_col+i]+= a[j*a_col+k] * b[k*b_col+i]

}

}

}

main()

{

int i,j,k,tmp

int a_row,a_col,b_row,b_col,c_row,c_col

int *a,*b,*c

printf("please enter a_row a_col of matrix_A: 3 2\n")

scanf("%d %d",&a_row,&a_col)

b_row = a_col

printf("please enter b_col of matrix_B: 3\n")

scanf("%d",&b_col)

c_row = a_row

c_col = b_col

a = (int *) malloc(sizeof(int *) * a_row * a_col)

b = (int *) malloc(sizeof(int *) * b_row * b_col)

c = (int *) malloc(sizeof(int *) * c_row * c_col)

if (!c) { printf("no enought memory for alloc\n")return 0}

printf("Please input int matrix a[%d][%d] 1 2 3 4 5 6\n",a_row,a_col)

for (j=0j<a_rowj++)

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

scanf("%d",&tmp)

a[j*a_col+i] = tmp

}

printf("Please input int matrix b[%d][%d] 1 2 3 4 5 6\n",b_row,b_col)

for (j=0j<b_rowj++)

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

scanf("%d",&tmp)

b[j*b_col+i] = tmp

}

if (DEBUG==1){

printf("A[%d][%d]:\n",a_row,a_col)

show_array(a,a_row,a_col)

printf("B[%d][%d]:\n",b_row,c_col)

show_array(b,b_row,b_col)

}

matrix2( a,b,c, a_row, b_col, b_row)

show_array(c,c_row,c_col)

free(a)free(b)free(c)

return 0

}

void show_array(int *a, int row,int col)

{

int i,j

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

for (i=0i<coli++) printf("%d ",a[j*col+i])

printf("\n")

}

printf("--------------------\n")

}