c语言求助?这个有什么错误啊?

来源:百度知道 编辑:UC知道 时间:2024/06/04 17:22:51
main()
{int i,j,k;
float a[3][3],b[3],x[3];
float l,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++)
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]-a[k][j]*l;
b[i]=b[i]-b[k]*l;}
}

for(i=1;i<=3;i++)
printf("%f\n",a[3][i]);
for(i=1;i<=3;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<=3;i++)
printf("%f\n",x[i]);
} /*高斯消元法*/
一二楼的问题都不是关键啊,主要是计算结果不对,运行一点错误都没

没认真看, 看见几个/a[i][i], /a[k][k],都不检查一下是不是零就除下去, 肯定不会正确了.

最主要的错大概是数组上下界的问题.
float a[3][3]声明的数组是从a[0][0]到a[2][2],float b[3]声明的数组是从b[0]到b[2]。而你的每个循环里好象都是从1到3。

运行当然是没问题,因为a[3][3]和b[3]虽然不存在但不算非法引用。他们的值是本身残留在内存中的没用的值,所以你计算结果当然不会对了。