#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]);


}