您的位置:首页 > 其它

本程序主要实现了一个方阵的求逆与实现了逆矩阵和原矩阵的乘积为单位矩阵

2016-03-03 20:20 465 查看
#include<stdio.h>
#define M 10
int main()
{
void chengji(int n);
float a[M][M*2];
float b[M][M*2];
float c[M][M*2];
float d[M][M];//存储原矩阵
float t,x;
int k,T,i,j,n;
printf("输入方阵的维数(小于M):\n");     //请输入方阵,即行和列相等的矩阵。
scanf("%d",&T);
n=T;
printf("请输入矩阵:\n");
for(i=0; i<T; i++)
for (j=0; j<T; j++)
{
scanf("%f",&b[i][j]);
d[i][j]=b[i][j];
}
printf("原矩阵为:\n");
for (i=0; i<T; i++)
{
for (j=0; j<T; j++) printf("%10.3f",b[i][j]);
printf("\n");
}
for(i=0; i<T; i++)         for(j=0; j<(2*T); j++)
{
if(j<T) a[i][j]=b[i][j];
else if (j==T+i) a[i][j]=1.0;
else a[i][j]=0.0;
}
for(i=0; i<T; i++)
{
for(k=0; k<T; k++)
{
if(k!=i)
{
t=a[k][i]/a[i][i];
for(j=0; j<(2*T); j++)
{
x=a[i][j]*t;
a[k][j]=a[k][j]-x;
}
}
}
}
for(i=0; i<T; i++)
{
t=a[i][i];
for(j=0; j<(2*T); j++) a[i][j]=a[i][j]/t;
}
int y=1;
for(i=0; i<T; i++)        y=y*a[i][i];
if(y==0)
printf("对不起,您输入的矩阵没有逆矩阵,请重新输入。\n");
else
{
for(i=0; i<T; i++)
for(j=0; j<T; j++) b[i][j]=a[i][j+T];
printf("逆矩阵为:\n");
for (i=0; i<T; i++)
{
for (j=0; j<T; j++)
printf("%10.3f",b[i][j]);
printf("\n");
}
}
printf("原方阵与逆方阵的积:\n");
k=0;
//int l=0;
//int i,j;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
c[i][j]=0;
for(k=0; k<n; k++)
{
c[i][j]+=d[i][k]*b[k][j];
//printf("%g   ",c[i][j]);
}
}
}
for (i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%g    ",c[i][j]);
}
puts("");
}
puts(" ");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: