#include<iostream.h>
#include<math.h>
#define N 100
int main()
{
int n,k,i,j,m,l;
double A[N][N],b[N],eps,temp,x[N];
cout<<"请输入方程组维数"<<endl;
cin>>n;
cout<<"请输入控制精度"<<endl;
cin>>eps;
cout<<"请输入矩阵A"<<endl;
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
cin>>A[i][j];
}
}
cout<<"矩阵输入完毕"<<endl;
cout<<"请输入右端项b"<<endl;
for(i=0;i<=n-1;i++)
{
cin>>b[i];
}
cout<<"右端项输入完毕"<<endl;
for(k=0;k<n-1;k++)
{
double max=A[k][k];
for(j=k+1;j<=n-1;j++)
{
if(abs(A[j][k])>abs(A[k][k]))
{
max=A[j][k];
}
}
if(max<eps)
{
return 0;
}
if(max!=A[k][k])
{
temp=A[k][k];
A[k][k]=A[j][k];
A[j][k]=temp;
temp=0;
temp=b[k];
b[k]=b[j];
b[j]=temp;
for(l=0;l<=n-1;l++)
{
temp=0;
temp=A[k][l];
A[k][l]=A[j][l];
A[j][l]=temp;
}
}
for(j=k+1;j<=n-1;j++)
{
double tmp=A[j][k]/A[k][k];
b[j]-=tmp*b[k];
for(l=0;l<=n-1;l++)
{
A[j][l]-=tmp*A[k][l];
}
}
}
cout<<"整理完毕,此时方程组为"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<A[i][j]<<" ";
}
}
cout<<"此时右端项为"<<endl;
for(i=0;i<n;i++)
{
cout<<b[i]<<" ";
}
x[n-1]=b[n-1]/A[n-1][n-1];
for(i=n-1;i>=0;i--)
{
for(j=n-1;j>=i+1;j--)
{
b[i]-=A[i][j]*x[j];
}
x[i]=b[i]/A[i][i];
}
cout<<"方程的解为"<<endl;
for(l=0;l<n;l++)
cout<<x[i]<<" ";
return 0;
}