#include<stdio.h>
#include<malloc.h>
void main()
{
float ** scan(int row,int column,int num);
void print(int row,int column,float ** p);
void add(int row,int column);
void minus(int row,int column);
void multiply(int row,int column,int column1);
void freearray(float ** p,int row);
int a,b,m,n,type;
while(1)
{
printf("请输入第一个矩阵的行数和列数(以回车分开):\n");
scanf("%d",&a);
scanf("%d",&b);
printf("\n请输入第二个矩阵的行数和列数(以回车分开):\n");
scanf("%d",&m);
scanf("%d",&n);
if(a<=0||b<=0||m<=0||n<=0)
{
printf("\n输入错误!\n请重新输入.\n");
continue;
}
else
{
printf("\n请输入您想进行的计算类型的编号:\n1:+\n2:-\n3:*\n");
scanf("%d",&type);
if(type==1)
{
if(a!=m||b!=n)
{
printf("\n这两个矩阵不可相加!\n请重新输入。\n");
continue;
}
else add(a,b);
break;
}
if(type==2)
{
if(a!=m||b!=n)
{
printf("\n这两个矩阵不可相减!\n请重新输入。\n");
continue;
}
else minus(a,b);
break;
}
if(type==3)
{
if(b!=m)
{
printf("\n这两个矩阵不可相乘!\n请重新输入。\n");
continue;
}
else multiply(a,n,b);
break;
}
else
{
printf("\n输入!\n请重新输入.\n");
}
}
}
}
float ** scan(int row,int column,int num)
{
int i,j;
float ** p;
p=(float**)malloc(row*sizeof(float*));
if(p==NULL)
printf("\n空间不足!\n");
else
{
for(i=0;i<row;i++)
p[i]=(float*)malloc(column*sizeof(float));
printf("\n请输入第%d个矩阵:\n",num);
for(i=0;i<row;i++)
{
for(j=0;j<column;j++)
scanf("%f",&p[i][j]);
}
return(p);
}
}
void print(int row,int column,float ** p)
{
int i,j;
printf("\nThe end is:\n");
for(i=0;i<row;i++)
for(j=0;j<column;j++)
{
printf("%-5.2f",p[i][j]);
if(j==column-1)
printf("\n");
}
}
void freearray(float ** p,int row)
{
int i;
for(i=0;i<row;i++)
free(p[i]);
free(p);
p=NULL;
}
void add(int row,int column)
{
int i,j;
float ** p;
float ** q;
float ** add;
add=(float**)malloc(row*sizeof(float*));
if(add==NULL)
printf("\n空间不足!\n");
else
{
for(i=0;i<row;i++)
add[i]=(float*)malloc(column*sizeof(float));
if(add[i]==NULL) printf("\n空间不足!\n");
else
{
p=scan(row,column,1);
q=scan(row,column,2);
for(i=0;i<row;i++)
{
for(j=0;j<column;j++)
add[i][j]=p[i][j]+q[i][j];
}
print(row,column,add);
freearray(add,row);
}
}
}
void minus(int row,int column)
{
int i,j;
float **p;
float ** q;
float ** minus;
minus=(float**)malloc(row*sizeof(float*));
if(minus==NULL) printf("\n空间不足!\n");
else
{
for(i=0;i<row;i++)
minus[i]=(float*)malloc(column*sizeof(float));
p=scan(row,column,1);
q=scan(row,column,2);
for(i=0;i<row;i++)
{
for(j=0;j<column;j++)
minus[i][j]=p[i][j]-q[i][j];
}
print(row,column,minus);
freearray(minus,row);
}
}
void multiply(int row,int column,int column1)
{
int i,j,a;
float **p;
float ** q;
float ** multiply;
multiply=(float**)malloc(row*sizeof(float*));
if(multiply==NULL) printf("\n空间不足!\n");
else
{
for(i=0;i<row;i++)
multiply[i]=(float*)malloc(column*sizeof(float));
p=scan(row,column1,1);
q=scan(column1,column,2);
for(i=0;i<row;i++)
for(j=0;j<column;j++)
for(a=0,multiply[i][j]=0;a<column1;a++)
multiply[i][j]=multiply[i][j]+p[i][a]*q[a][j];
print(row,column,multiply);
freearray(multiply,row);
}
}
哈哈 连题目都看不懂的大项目 我来了