#include<math.h>
#include <stdio.h>
#define N 3
void guass(double A[N][N],double y[N],double x[N])
{
double t,u;
int i,j,k,tj;
for(k=0;k<N-1;k++)
{
for(j=k+1;j<N;j++)
if(fabs(A[j][k])>fabs(A[k][k])) {tj=j; t=fabs(A[j][k]);}
if(tj!=k)
{
u=y[tj];y[tj]=y[k];y[k]=u;
for(i=0;i<N;i++)
{t=A[tj][i];A[tj][i]=A[k][i];A[k][i]=t; }
}
for(i=k+1;i<N;i++)
{
t=A[i][k]/A[k][k]; y[i]-=t*y[k];
for(j=k;j<N;j++)
A[i][j]-=t*A[k][j];
}
}
x[N-1]=y[N-1]/A[N-1][N-1];
for(i=N-2;i>=0;i--)
{
x[i]=y[i];
for(j=i+1;j<N;j++)
x[i]-=A[i][j]*x[j];
x[i]=x[i]/A[i][i];
}
for(i=0;i<N;i++)
printf("x[%d]=%f\n",i,x[i]);
}
void main()
{
double A[N][N]={{2.5,2.3,-5.1},{5.3,9.6,1.5},{8.1,1.7,-4.3}};
double y[N]={3.7,3.8,5.5}, x[N]={0,0,0};
guass(A,y,x);
}