#include
#define M 20
#define N 20
double A[M][N],B[M][N],C[M][N];
int i,j,m,n,p,q,k;
int main()
{
printf("******************************************************************\n");
printf("###########欢迎您使用矩阵函数系统.##########\n");
printf("##########系统功能:##########\n");
while(1)
{
printf("#####请选择您需要的运算,按回车结束.#####\n");
printf("***1. 矩阵相加\n");
printf("***2. 矩阵相减\n");
printf("***3. 矩阵相乘\n");
printf("***4. 单矩阵转置\n");
printf("***5. 退出\n");
printf("******************************************************************\n");
int a;
scanf("%d",&a);
if(a==5) break;
switch(a)
{
case 1:
{
printf("请输入矩阵A的行数和列数(用逗号隔开):");
scanf("%d,%d",&i,&j);
printf("请输入矩阵B的行数和列数(用逗号隔开):");
scanf("%d,%d",&m,&n);
if(i!=m||j!=n)
{
printf("***对不起,您输入两个矩阵不能相加,请重试.***\n");
printf ("请重新输入矩阵B的行数和列数(用逗号隔开):\n");
scanf("%d,%d",&m,&n);
}
printf("请输入矩阵A:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
scanf("%lf",&A[p][q]);
}
printf("输出矩阵A:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
{
printf("%10.2lf",A[p][q]);
if((q+1)%j==0)
printf("\n");
}
}
printf("请输入矩阵B:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
scanf("%lf",&B[p][q]);
}
printf("输出矩阵B:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
{
printf("%10.2lf",B[p][q]);
if((q+1)%j==0)
{
printf("\n");
}
}
}
printf("矩阵A+矩阵B为:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
C[p][q]=A[p][q]+B[p][q];
}
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
{
printf("%10.2lf",C[p][q]);
if((q+1)%j==0)
{
printf("\n");
}
}
}
};break;
case 2:
{
printf("请输入矩阵A的行数和列数(用逗号隔开):");
scanf("%d,%d",&i,&j);
printf("请输入矩阵B的行数和列数(用逗号隔开):");
scanf("%d,%d",&m,&n);
if(i!=m||j!=n)
{
printf("***对不起,您输入两个矩阵不能相加,请重试.***\n");
printf ("请重新输入矩阵B的行数和列数(用逗号隔开):\n");
scanf("%d,%d",&m,&n);
}
printf("请输入矩阵A:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
scanf("%lf",&A[p][q]);
}
printf("输出矩阵A:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
{
printf("%10.2lf",A[p][q]);
if((q+1)%j==0)
{
printf("\n");
}
}
}
printf("请输入矩阵B:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
scanf("%lf",&B[p][q]);
}
printf("输出矩阵B:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
{
printf("%10.2lf",B[p][q]);
if((q+1)%j==0)
{
printf("\n");
}
}
}
printf("矩阵A-矩阵B为:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
C[p][q]=A[p][q]-B[p][q];
}
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
{
printf("%10.2lf",C[p][q]);
if((q+1)%j==0)
{
printf("\n");
}
}
}
};break;
case 3:
{
printf("请输入矩阵A的行数和列数(用逗号隔开):");
scanf("%d,%d",&i,&j);
printf("请输入矩阵B的行数和列数(用逗号隔开):");
scanf("%d,%d",&m,&n);
if( j != m)
{
printf("***对不起,您输入两个矩阵不能相乘,请重试.***\n");
printf ("请重新输入矩阵B的行数和列数(用逗号隔开):\n");
scanf("%d,%d",&m,&n);
}
printf("请输入矩阵A:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
scanf("%lf",&A[p][q]);
}
printf("输出矩阵A:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
{
printf("%10.2lf",A[p][q]);
if((q+1)%j==0)
{
printf("\n");
}
}
}
printf("请输入矩阵B:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
scanf("%lf",&B[p][q]);
}
printf("输出矩阵B:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
{
printf("%10.2lf",B[p][q]);
if ((q+1)%j==0)
{
printf("\n");
}
}
}
printf("矩阵A*矩阵B为:\n");
for(p=0;p<i;p++)
{
for(q=0;q<n;q++)
{
C[p][q]=0;
for(k=0;k<j;k++)
{
C[p][q]+=A[p][k]*B[k][q];
}
}
}
for(p=0;p<i;p++)
{
for(q=0;q<n;q++)
{
printf("%10.2lf",C[p][q]);
if((q+1)%n==0)
{
printf("\n");
}
}
}
} ;break;
case 4:
{
printf("请输入矩阵A的行数和列数(用逗号隔开):");
scanf("%d,%d",&i,&j);
printf("请输入矩阵A:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
scanf("%lf",&A[p][q]);
}
printf("输出矩阵A:\n");
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
{
printf("%10.2lf",A[p][q]);
if((q+1)%j==0)
{
printf("\n");
}
}
}
for(p=0;p<i;p++)
{
for(q=0;q<j;q++)
B[q][p]=A[p][q];
}
printf("输出矩阵A的转置矩阵:\n");
for(p=0;p<j;p++)
{
for(q=0;q<i;q++)
{
printf("%10.2lf",B[p][q]);
if((q+1)%i==0)
{
printf("\n");
}
}
}
};break;
case 5:
;break;
default:
printf("\n********您选择错误,请重试.********\n");
break;
}
}
printf("#########再次感谢您使用本系统,合作愉快!############");
printf("\n");
printf("******************************************************************\n");
return 0;
}