#include<stdio.h>
#include<malloc.h>
void?main()
{
int?**mata=NULL,**matb=NULL,ar,ac,br,bc,i,j,k,**matres=NULL;//矩陣a,b,a的行,a的列,b的行,b的列,循環變量i,j,k,相乘的結果
scanf("%d%d",&ar,&ac);//接受矩
陣a的行列值
if(!(mata=(int**)malloc(ar*sizeof(int))))
{
printf("Not?Enough?Memory!");?//內存不足malloc會返回NULL
return;
}
for(i=0;i<ac;i++)
{
if(!(mata[i]=(int*)malloc(ac*sizeof(int))))
{
printf("Not?Enough?Memory!");?//內存不足malloc會返回NULL
return;
}
}
for(i=0;i<ar;i++)
for(j=0;j<ac;j++)
scanf("%d",&mata[i][j]);
scanf("%d%d",&br,&bc);////接受矩陣b的行列值
if(ac!=br)
{
printf("Matrix?Can't?Multiply!");
return;
}
if(!(matb=(int**)malloc(br*sizeof(int))))
{
printf("Not?Enough?Memory!");?//內存不足malloc會返回NULL
return;
}
for(i=0;i<bc;i++)
{
if(!(matb[i]=(int*)malloc(bc*sizeof(int))))
{
printf("Not?Enough?Memory!");?//內存不足malloc會返回NULL
return;
}
}
for(i=0;i<br;i++)
for(j=0;j<bc;j++)
scanf("%d",&matb[i][j]);
if(!(matres=(int**)malloc(ar*sizeof(int))))
{
printf("Not?Enough?Memory!");?//內存不足malloc會返回NULL
return;
}
for(i=0;i<bc;i++)
{
if(!(matres[i]=(int*)malloc(bc*sizeof(int))))
{
printf("Not?Enough?Memory!");?//內存不足malloc會返回NULL
return;
}
}
for(i=0;i<ar;i++)for(j=0;j<bc;j++)
matres[i][j]=0;//初始化0
/*計算*/
for(i=0;i<ar;i++)
for(j=0;j<bc;j++)
for(k=0;k<ac;k++)
matres[i][j]+=mata[i][k]*matb[k][j];
/*輸出*/
for(i=0;i<ar;i++)
{
for(j=0;j<bc;j++)
printf("%d? ",matres[i][j]);
printf("\n");
}
}