c语言求助 这个程序哪不对啊?

来源:百度知道 编辑:UC知道 时间:2024/05/23 20:01:11
main()
{int i,j,k;
float a[4][4],b[4],x[4];
float l,s;

for(i=1;i<4;i++)
for(j=1;j<4;j++)
scanf("%f",&a[i][j]);
for(i=1;i<4;i++)
scanf("%f",&b[i]);

for(k=1;k<3;k++)
for(i=k+1;i<4;i++)
{
l=a[i][k]/a[k][k];
for(j=k+1;j<=3;j++)
{a[i][j]=a[i][j]-a[k][j]*l;
b[i]=b[i]-b[k]*l;}
}

for(i=1;i<4;i++)
printf("%f\n",a[3][i]);
for(i=1;i<4;i++)
printf("%f\n",b[i]);

for(i=3;i>0;i--)
{s=0;
for(j=3;j>i;j--)
s=s+a[i][j]*x[j];
x[i]=(b[i]-s)/a[i][i];}

for(i=1;i<4;i++)
printf("%f\n",x[i]);
} /*高斯消元法*/

能运行,没有错误,但就是计算结果不对,怎么回事啊?
算法应该是对的啊,我们老师给的,真的不知道怎么回事了

#include<math.h>
main()
{int i,j,k,r;
float a[4][4],b[4],x[4];
float l,temp,s;

for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
scanf("%f",&a[i][j]);
for(i=1;i<=3;i++)
scanf("%f",&b[i]);

for(k=1;k<3;k++)
{r=k;
for(j=k+1;j<=3;j++)
if(fabs(a[j][k])>fabs(a[r][k])) r=j;
if(a[r][k]==0) {printf("error");exit(0);}
if(r!=k)
{for(j=k;j<=3;j++)
{temp=a[k][j];a[k][j]=a[r][j];a[r][j]=temp;}
temp=b[k];b[k]=b[r];b[r]=temp;}
for(i=k+1;i<=3;i++)
{l=a[i][k]/a[k][k];
for(j=k+1;j<=3;j++)
a[i][j]=a[i][j]-l*a[k][j];
b[i]=b[i]-l*b[k];}
}

for(i=3;i>=1;i--)
{s=0;
for(j=i+1;j<=3;j++)
s=s+a[i][j]*x[j];
x[i]=(b[i]-s)/a[i][i];}

for(i=1;i<=3;i++)
printf("%f ",x[i]);

}