# define NB 20
# include "math.h"
float A[NB][NB+1] ,shw;
int flag,n;
exchange(int r,int k)
{ int i;
for(i=1;i<=n+1;i++)
A[0][i]=A[r][i];
for(i=1;i<=n+1;i++)
A[r][i]=A[k][i];
for(i=1;i<=n+1;i++)
A[k][i]=A[0][i];
}
float max(int k)
{ int i;
float temp=0;
for(i=k;i<=n;i++)
if(fabs(A[i][k])>temp)
{ temp=fabs(A[i][k]);
flag=i;}
return temp;
}
main()
{ float x[NB],b[NB];
int r,k,i,j;
printf("\n\n\n Gauss ready ");
printf("\n input n=");
scanf("%d",&n);
printf("\n please input A and b:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n+1;j++)
{ if(j==n+1) printf(" please input b%d:",i);
else printf("please input a%d%d:",i,j);
scanf("%f",&A[i][j]);
}
k=1;
label:
/*------------------------------------*/
shw=max(k);
if(shw==0)
{ printf("\n input error !");exit(0);}
else if(flag!=k)
exchange(flag,k);
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n+1;j++)
A[i][j]=A[i][j]-A[i][k]*A[k][j]/A[k][k];
if(k<n-1)
{ k++; goto label;}
else
{ x[n]=A[n][n+1]/A[n][n];
for( k=n-1;k>=1;k--)
{float me=0;
for(j=k+1;j<=n;j++)
{ me=me+A[k][j]*x[j];}
x[k]=(A[k][n+1]-me)/A[k][k];
}
}
for(i=1;i<=n;i++)
printf("\n x%d=%f",i,x[i]);
}