我又来问问题了
#include<stdio.h>#include<math.h>
#define N 20
#define EPSILON 0.000000001
void main()
{
int i,j,k,n,i0;double t;
double a[N][N+1];
printf("数组的维数n\n");
scanf("%d",&n);
printf("输入a[i][j]\n");
for(i=0;i<n;i++)
for(j=0;j<n+1;j++)
scanf("%lf",&a[i][j]);
/*找列主元 并消去*/
for(k=0;k<n;k++)
{
t=fabs(a[k][k]);i0=k;
for(i=k+1;i<n;i++)
if(fabs(a[i][k])>t)
{
t=fabs(a[i][k]);
i0=i;
}
/*交换这两行*/
if(i0!=k)
{
for(j=k;j<n+1;j++)
{
t=a[i0][j];
a[i0][j]=a[k][j];
a[k][j]=t;
}
}
for(i=0;i<n;i++)
for(j=0;j<n+1;j++)
printf("%12.9f",a[i][j]);
if(fabs(a[k][k])<EPSILON)
break;
else for(j=k+1;j<n+1;j++)
{
a[k][j]=a[k][j]/a[k][k];
a[k][k]=1.0;
}/*为什么此时只进行了2步*/
for(i=0;i<n;i++)
{
if(i!=k)
{
for(j=k+1;j<n;j++)
a[i][j]=a[i][j]-a[i][k]*a[k][j];
a[i][k]=0.0;
}
}
for(i=0;i<n;i++)
for(j=0;j<n+1;j++)
printf("%12.9f",a[i][j]);
}
printf("\n方程组的解为\n");
for(i=0;i<n;i++)
printf("x%d=%12.9f\n",i+1,a[i][n]);
}