#include <stdio.h>
#define M 10
#define N 10
void InitDoubArray(int x[][N],int initType,int m,int n);
void PrintArray(int x[][N],int m,int n);
void ReverseArray(int x[][N],int y[][N],int m,int n);
void ArrayAdd(int a[][N],int b[][N],int n,int m);
void ArraySub(int a[][N],int b[][N],int n,int m) ;
void ArrayMultiplication(int a[][M],int b[][N],int c[][N],int n,int m,int p);
int main()
{
int a[N][M],b[N][M],c[N][M];
int computeType,initType,m,n,p;
while(true)
{
printf("请输入矩阵运算类型:1 转置 2 加法 3 减法 4 矩阵乘法 5 退出\n");
scanf("%d",&computeType);
if(computeType==1) //转置
{
scanf("%d%d%d",&initType,&m,&n);
InitDoubArray(a,initType,m,n);
PrintArray(a, n, m);
ReverseArray(a,b,n,m);
PrintArray(b, m,n);
}
else if(computeType==2)
{
//加法
scanf("%d%d%d",&initType,&m,&n);
InitDoubArray(a,initType, n, m);
InitDoubArray(b,initType, n, m);
printf("矩阵a为\n");
PrintArray(a, n, m);
printf("矩阵b为\n");
PrintArray(b, n, m);
ArrayAdd(a,b,n,m);
PrintArray(a, n, m);
}
else if(computeType==3)
{
//减法
scanf("%d%d%d",&initType,&m,&n);
InitDoubArray(a,initType, n, m);
InitDoubArray(b,initType, n, m);
printf("矩阵a为\n");
PrintArray(a, n, m);
printf("矩阵b为\n");
PrintArray(b, n, m);
ArraySub(a,b,n,m);
PrintArray(a, n, m);
}
else if(computeType==4)
{
//矩阵乘法
scanf("%d%d%d%d",&initType,&n,&m,&p);
InitDoubArray(a,initType, n, m);
InitDoubArray(b,initType, n, m);
printf("矩阵a为\n");
PrintArray(a, n, m);
printf("矩阵b为\n");
PrintArray(b, m, p);
ArrayMultiplication(a,b,c,n,m,p);
printf("矩阵a*b 为\n");
PrintArray(c, n, p);
}
else break;
}
return 0;
}
//初始化函数
void InitDoubArray(int x[][M],int initType,int n,int m)
{
int i,j;
if(initType==1)
{
int KnownArray[N][M]= {100,17,53,14,35,26,7,18,9,101,121,112,123,134,135,169,17,198,199,24,214,227,273,248,295,26,277,248,299,340,31,322,33,384,385,386};
for( i=0; i<n; i++)
{
for( j=0; j<m; j++)
{
x[i][j]=KnownArray[i][j];
}
}
}
else
{
for( i=0; i<n; i++)
{
for( j=0; j<m; j++)
{
x[i][j]=i*m+j;
}
}
}
}
//输出函数
void PrintArray(int x[][N],int m,int n)
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
printf("%5d",x[i][j]);
}
printf("\n");
}
}
//转置函数
void ReverseArray(int x[][N],int y[][N],int m,int n)
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
y[j][i]=x[i][j];
}
}
}
//加法
void ArrayAdd(int a[][N],int b[][N],int n,int m)
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
a[i][j]+=b[i][j];
}
}
}
//减法
void ArraySub(int a[][N],int b[][N],int n,int m)
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
a[i][j]-=b[i][j];
}
}
}
//乘法
void ArrayMultiplication(int a[][M],int b[][N],int c[][N],int n,int m,int p)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<p; j++)
{
int sum=0;
for(int k=0; k<m; k++)
{
sum+=a[i][k]*b[k][j];
c[i][j]=sum;
}
}
}
}
课程设计-矩阵操作
最新推荐文章于 2024-05-10 19:35:58 发布