📄 matrix.c
字号:
#include"stdio.h"
void plus(float a[30][30],float b[30][30],int m,int n)
{ float c[30][30]={0};
int i,j;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
c[i][j]=a[i][j]+b[i][j];
printf("A+B=C,矩阵C等于\n");
for(i=0;i<=m-1;i++)
{ for(j=0;j<=n-1;j++)
printf("%6.2f ",c[i][j]);
printf("\n");
}
}
void neg(float a[30][30],float b[30][30],int m,int n)
{ float c[30][30]={0};
int i,j;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
c[i][j]=a[i][j]-b[i][j];
printf("A-B=C,矩阵C等于\n");
for(i=0;i<=m-1;i++)
{ for(j=0;j<=n-1;j++)
printf("%6.2f ",c[i][j]);
printf("\n");
}
}
void multiply1(float a,float b[30][30],int m,int n)
{ float c[30][30]={0};
int i,j;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
c[i][j]=a*b[i][j];
printf("a*B=C,矩阵C等于\n");
for(i=0;i<=m-1;i++)
{ for(j=0;j<=n-1;j++)
printf("%6.2f ",c[i][j]);
printf("\n");
}
}
void multiply2(float a[30][30],float b[30][30],int m,int t,int n)
{ float c[30][30]={0};
int i,j,k;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
for(k=0;k<=t-1;k++)
c[i][j]+=a[i][k]*b[k][j];
printf("AxB=C,矩阵C等于\n");
for(i=0;i<=m-1;i++)
{ for(j=0;j<=n-1;j++)
printf("%6.2f ",c[i][j]);
printf("\n");
}
}
void turn(float b[30][30],int m,int n)
{ int i,j;
printf("矩阵B的转置矩阵为\n");
for(i=0;i<=n-1;i++)
{ for(j=0;j<=m-1;j++)
printf("%6.2f ",b[j][i]);
printf("\n");
}
}
void contrary(float b[30][30],int m)
{ int i,j,n=0,t;
float x;
j=m;
for(i=0;i<=m-1;i++)
b[i][j++]=1;
for(t=0;t<=m-1;t++)
{ for(i=t;i<=m-1;i++)
for(j=2*m-1;j>=t;j--)
b[i][j]=b[i][j]/b[t][t];
for(i=0;i<=m-1;i++)
for(j=2*m-1;j>=0;j--)
{ if(t==i)
continue;
else
{ x=b[i][t]/b[t][t];
b[i][j]=b[i][j]-(x*b[t][j]);
}
}
}
for(i=0;i<=m-1;i++)
if(b[m-1][i]==0)
n++;
if(n==m)
printf("矩阵B为奇异矩阵,不可逆\n");
else
{ printf("矩阵B的逆阵为\n");
for(i=0;i<=m-1;i++)
{ for(j=m;j<=2*m-1;j++)
printf("%6.2f ",b[i][j]);
printf("\n");
}
}
}
main()
{ float a[30][30]={0},b[30][30]={0};
int i,j,k1,l1,k2,l2;
float m;
printf("输入A矩阵行数k1,列数l1\n");
scanf("%d%d",&k1,&l1);
printf("输入A矩阵\n");
for(i=0;i<=k1-1;i++)
for(j=0;j<=l1-1;j++)
scanf("%f",&a[i][j]);
printf("A矩阵为\n");
for(i=0;i<=k1-1;i++)
{ for(j=0;j<=l1-1;j++)
printf("%6.2f ",a[i][j]);
printf("\n");
}
printf("输入B矩阵行数k2,列数l2\n");
scanf("%d%d",&k2,&l2);
printf("输入B矩阵\n");
for(i=0;i<=k2-1;i++)
for(j=0;j<=l2-1;j++)
scanf("%f",&b[i][j]);
printf("B矩阵为\n");
for(i=0;i<=k2-1;i++)
{ for(j=0;j<=l2-1;j++)
printf("%6.2f ",b[i][j]);
printf("\n");
}
if(k1!=k2||l1!=l2)
printf("不能进行加减运算\n");
else
{ plus(a,b,k1,l1);
neg(a,b,k1,l1);
}
if(l1!=k2)
printf("不能进行矩阵相乘运算\n");
else
multiply2(a,b,k1,k2,l2);
printf("输入数乘运算m*B的系数m\n");
scanf("%f",&m);
multiply1(m,b,k2,l2);
turn(b,k2,l2);
if(k2!=l2)
printf("B矩阵不能进行求逆运算\n");
else
contrary(b,k2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -