请帮我解决这个C函数的问题!使用二分法的

来源:百度知道 编辑:UC知道 时间:2024/05/15 03:39:00
题目是:用二分法求方程:2*x*x*x-4*x*x+3*x-6=0在(-10,10)之间的根。
我做的答案是这样的:
#include<stdio.h>
main()
{
float a,b,c,d1,d2,d3;
a=-10,b=10,
d1=2*a*a*a-4*a*a+3*a-6,
d2=2*b*b*b-4*b*b+3*b-6;
if(d1*d2>0)printf("error\n");
else{
do{
c=(a+b)/2,d3=2*c*c-4*c*c+3*c-6;
if(d1*d3>0) a=c;
else b=c;
}while(fabs(a-c)>1e-6);printf("%lf\t",c);
}
}

但是出来的答案却是0.000,这个是为什么呢,哪位大虾可以帮我解答一下!

你的代码应改为:(我是在你的代码的基础上修改的)

#include<stdio.h>
#include<math.h>//因为你用了fabs()数学函数,所以要数学函数的头文件
main()
{
float a,b,c,d1,d2,d3;
a=-10,b=10,
d1=2*a*a*a-4*a*a+3*a-6,
d2=2*b*b*b-4*b*b+3*b-6;
if(d1*d2>0)printf("error\n");
else{
do{
c=(a+b)/2,d3=2*c*c*c-4*c*c+3*c-6; //这里少了一个c,应该你是明白这里的
if(d1*d3>0) a=c;
else b=c;
}while(fabs(a-b)>1e-6);printf("%lf\t",c);
//在这里while(fabs(a-c)>1e-6);应改为:while(fabs(a-b)>1e-6);因为当if(d1*d3>0)成立时a=c;所以a-c的绝对值等于0,从而跳出循环,故你的答案有误
}
getchar();
getchar();
}

不知我这样子解说你明不明白,你可以上机运行一下,我修改后的执行结果是2.000,不明白的地方再找我!!!

如果没看错的话,这行
c=(a+b)/2,d3=2*c*c-4*c*c+3*c-6;

2×c×c×c