跪求C语言高手~~~ 矩阵相乘 动态数组!!!!!!!!!!!!

、矩阵乘法
描述: 编程计算两个矩阵的乘积并输出。若给定的矩阵不能相乘,则输出"Matrix Can't
Multiply!"。若计算机内存不足以计算给定矩阵的乘积, 则输出"Not Enough Memory!"。
输入: 第一行输入两个整数,表示第一个矩阵的行数r1 和列数c1。
第二行到第 r1+1 行顺次输入c1*r1 个整数,表示第一个矩阵的内容。
第 r1+2 行输入两个整数,表示第二个矩阵的行数r2 和列数c2。
第 r1+3 行到第r1+r2+2 行顺次输入c2*r2 个整数,表示第二个矩阵的内容。
提示:设A=(aij)是一个m×s 矩阵,B=(bij)是一个s×n 矩阵,那么规定矩阵A 与
矩阵 B 的乘积是一个m×n 矩阵C=(cij),其中:
Cij=ai1b1j+ai2b2j+…+aisbsj=Σaikbkj (i=1,2,…,m;j=1,2,…,n;k=1,2,…,s)
注:若第一个矩阵的列数不等于第二个矩阵的行数,则不能进行乘法运算。
提示:需用动态二维数组实现。
         

输出: 按行列顺序输出乘积矩阵中的所有数据。
输入样例:
2 2 <---第一个矩阵的行数和列数
3 4
5 6
2 3 <---第二个矩阵的行数和列数
1 2 3
4 5 6
输出样例:
19 26 33
29 40 51

#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");

}

}




温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-22
你想说神马
相似回答