#include<stdio.h>
#include<math.h>
#define N 20
#define EPSILON 0.000000001
void main()
{
int i,j,k,n;
double a[N][N];
double b[N];
double l[N][N];
double t;
printf("数组的维数n\n");
scanf("%d",&n);
printf("输入a[i][j]\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%lf\n",&a[i][j]);
}
printf("输入b[i]\n");
for(i=0;i<n;i++)
{
scanf("%lf\n",&b[i]);
}
for(k=0;k<n-1;k++)
{
t=fabs(a[k][k]);
/*找列主元*/
for(i=k+1;i<n;i++)
{
if(t<fabs(a[i][k]))
t=a[i][k];
}
for(j=k;j<n;j++)
{
t=a[i][j];
a[i][j]=a[k][j];
a[k][j]=t;
}
t=b[i];
b[i]=b[k];
b[k]=t;
for(i=k+1;i<n;i++)
{
l[i][k]=-a[i][k]/a[k][k];
b[i]=b[i]-l[i][k]*b[k];
for(j=k;j<n;j++)
a[i][j]=a[i][j]+a[k][j]*l[i][k];
}
}
printf("检验最后的方程是否为下三角矩阵\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
printf("%10.6f",a[i][j]);
printf("\n");
/*回代过程*/
b[n-1]=b[n-1]/a[n-1][n-1];
for(i=n-2;i>-1;i--)
{
for(j=i+1;j<n;j++)
b[i]=b[i]-b[j]*a[i][j];
b[i]=b[i]/a[i][i];
}
printf("\n方程组的解\n");
for(i=0;i<n;i++)
printf("x%d=%lf",i+1,b[i]);
}