话不多说,看代码就行,这种题目就是条件多,容易乱,滤清思路是重点,慢慢敲,其他没啥难的,可以先写框架,再填内容,比如有几个判断,就写几个if-else框架,最后有输出,那我就先敲一个printf,然后再慢慢往里填内容,不要妄图一下看到头,写着写着就有思路了,加油!
- #include
- int main(){
- double a3,a2,a1,a0,a,b,x,fx,fa,fb;//x用于存储根,fx,fa,fb分别是对应函数值
- scanf("%lf %lf %lf %lf",&a3,&a2,&a1,&a0);//注意输入对应顺寻别搞错了
- scanf("%lf %lf",&a,&b);
- while((b-a)>=0.001){//我是真没找到阈值在哪里,试出来的0.001,当然越小算出来的越精确
- x=(a+b)/2;//每次循环让x取中点
- fx=a3*pow(x,3)+a2*pow(x,2)+a1*x+a0;//计算f(x)
- fa=a3*pow(a,3)+a2*pow(a,2)+a1*a+a0;//计算f(a)
- fb=a3*pow(b,3)+a2*pow(b,2)+a1*b+a0;//计算f(b)
- if(fa==0){//判断左端点处是否为根
- x=a;
- break;
- }
- else if(fb==0){//判断右端点处是否为根
- x=b;
- break;
- }
- else if(fx==0){//判断中点是否为根
- break;
- }
- else if(fx*fa>0){//无脑抄题条件就完事了
- a=(a+b)/2;
- }
- else if(fx*fb>0){//无脑抄题条件就完事了
- b=(a+b)/2;
- }
- }
- printf("%.2lf",x);//记住x自始至终就是存的中点值也就是根,因此最后输出x
- return 0;
- }