#include<stdio.h>
#include<malloc.h>
void menu()
{
printf(" 矩阵运算管理系统 \n");
printf("---------------------------------------------------------------\n");
printf("1.输入矩阵A\n");
printf("2,输入矩阵B\n");
printf("3.矩阵加法\n");
printf("4.矩阵减法\n");
printf("5.矩阵乘法\n");
printf("0.退出\n");
printf("---------------------------------------------------------------\n");
printf("请选择:");
}
void menu1()
{
printf(" 矩阵运算管理系统 \n");
printf("---------------------------------------------------------------\n");
printf("1.返回主菜单\n");
printf("0.退出\n");
printf("---------------------------------------------------------------\n");
printf("请选择:");
}
int *matrixA(int m,int n)
{
int *matrixA;
matrixA = (int *)malloc(m*n*sizeof(int));
return matrixA;
}
void inputMatrixA(int *p1,int*p2,int m,int n)
{
int *p;
int i;
printf("输入矩阵A:\n");
for(p=p1,i=0;i<n*m;i++)
{
scanf("%d",p++);
}
}
void inputMatrixB(int *p2,int*p1,int p,int q)
{
int *a;
int i;
printf("输入矩阵B:\n");
for(a=p2,i=0;i<p*q;i++)
{
scanf("%d",a++);
}
}
int *matrixB(int p,int q)
{
int *matrixB;
matrixB = (int *)malloc(p*q*sizeof(int));
return matrixB;
}
void add(int *p1,int *p2,int m,int n)
{
int *C;
int i,j;
C = (int *)malloc(m*n*sizeof(int));
for(i=0;i<m;i++)
for(j=0;j<n;j++)
C[i*n+j]=p1[i*n+j] + p2[i*n+j];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",C[i*n+j]);
}
printf("\n");
}
}
void minus(int *p1,int *p2,int m,int n)
{
int *C;
int i,j;
C = (int *)malloc(m*n*sizeof(int));
for(i=0;i<m;i++)
for(j=0;j<n;j++)
C[i*n+j]=p1[i*n+j] - p2[i*n+j];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",*(C+i*n+j));
}
printf("\n");
}
}
void time(int *p1,int *p2,int m,int q,int n)
{
int *C;
int i,j,s,sum;
C = (int *)malloc(m*q*sizeof(int));
for(i=0;i<m;i++)
for(j=0;j<q;j++)
{
for(s=0,sum=0;s<n;s++)
sum=sum+ p1[i*m+s] * p2[s*q+j];
}
C[i*n+j]=sum;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",C[i*n+j]);
}
printf("\n");
}
}
int main()
{
int *p1,*p2;
int n,m,p,q,a1,i,j;
while(1)
{
menu();
scanf("%d",&a1);
switch(a1)
{
case 1:
printf("输入行和列:\n");
scanf("%d%d",&m,&n);
p1=matrixA( m, n) ;
inputMatrixA(p1,p2,m,n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",*p1++);
}
printf("\n");
}
break;
case 2:
printf("输入行和列:\n");
scanf("%d%d",&p,&q);
p2=matrixB(p,q) ;
inputMatrixB(p2,p1,p,q);
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
printf("%d ",*p2++);
}
printf("\n");
}
break;
case 3:
if(m==p&&n==q)
add(p1,p2,m,n);
else
printf("无法计算\n");
break;
case 4:
if(m==p&&n==q)
minus(p1,p2,m,n);
else
printf("无法计算\n");
break;
case 5:
if(n==p)
time(p1,p2, m, q,n);
else
printf("无法计算\n");
break;
case 0:return 0;break;
}
}
return 0;
}
#include<malloc.h>
void menu()
{
printf(" 矩阵运算管理系统 \n");
printf("---------------------------------------------------------------\n");
printf("1.输入矩阵A\n");
printf("2,输入矩阵B\n");
printf("3.矩阵加法\n");
printf("4.矩阵减法\n");
printf("5.矩阵乘法\n");
printf("0.退出\n");
printf("---------------------------------------------------------------\n");
printf("请选择:");
}
void menu1()
{
printf(" 矩阵运算管理系统 \n");
printf("---------------------------------------------------------------\n");
printf("1.返回主菜单\n");
printf("0.退出\n");
printf("---------------------------------------------------------------\n");
printf("请选择:");
}
int *matrixA(int m,int n)
{
int *matrixA;
matrixA = (int *)malloc(m*n*sizeof(int));
return matrixA;
}
void inputMatrixA(int *p1,int*p2,int m,int n)
{
int *p;
int i;
printf("输入矩阵A:\n");
for(p=p1,i=0;i<n*m;i++)
{
scanf("%d",p++);
}
}
void inputMatrixB(int *p2,int*p1,int p,int q)
{
int *a;
int i;
printf("输入矩阵B:\n");
for(a=p2,i=0;i<p*q;i++)
{
scanf("%d",a++);
}
}
int *matrixB(int p,int q)
{
int *matrixB;
matrixB = (int *)malloc(p*q*sizeof(int));
return matrixB;
}
void add(int *p1,int *p2,int m,int n)
{
int *C;
int i,j;
C = (int *)malloc(m*n*sizeof(int));
for(i=0;i<m;i++)
for(j=0;j<n;j++)
C[i*n+j]=p1[i*n+j] + p2[i*n+j];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",C[i*n+j]);
}
printf("\n");
}
}
void minus(int *p1,int *p2,int m,int n)
{
int *C;
int i,j;
C = (int *)malloc(m*n*sizeof(int));
for(i=0;i<m;i++)
for(j=0;j<n;j++)
C[i*n+j]=p1[i*n+j] - p2[i*n+j];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",*(C+i*n+j));
}
printf("\n");
}
}
void time(int *p1,int *p2,int m,int q,int n)
{
int *C;
int i,j,s,sum;
C = (int *)malloc(m*q*sizeof(int));
for(i=0;i<m;i++)
for(j=0;j<q;j++)
{
for(s=0,sum=0;s<n;s++)
sum=sum+ p1[i*m+s] * p2[s*q+j];
}
C[i*n+j]=sum;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",C[i*n+j]);
}
printf("\n");
}
}
int main()
{
int *p1,*p2;
int n,m,p,q,a1,i,j;
while(1)
{
menu();
scanf("%d",&a1);
switch(a1)
{
case 1:
printf("输入行和列:\n");
scanf("%d%d",&m,&n);
p1=matrixA( m, n) ;
inputMatrixA(p1,p2,m,n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",*p1++);
}
printf("\n");
}
break;
case 2:
printf("输入行和列:\n");
scanf("%d%d",&p,&q);
p2=matrixB(p,q) ;
inputMatrixB(p2,p1,p,q);
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
printf("%d ",*p2++);
}
printf("\n");
}
break;
case 3:
if(m==p&&n==q)
add(p1,p2,m,n);
else
printf("无法计算\n");
break;
case 4:
if(m==p&&n==q)
minus(p1,p2,m,n);
else
printf("无法计算\n");
break;
case 5:
if(n==p)
time(p1,p2, m, q,n);
else
printf("无法计算\n");
break;
case 0:return 0;break;
}
}
return 0;
}