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")
}