#include <stdio.h>
float a3,a2,a1,a0;
float f(float x);
int main()
{
float a,b;
scanf("%f %f %f %f",&a3,&a2,&a1,&a0);
scanf("\n%f %f",&a,&b);
float left,right;
left=a;
right=b;
float mid=0;
while(right-left>=0.0001&&f(left)*f(right)<=0){
if(f(left)==0){
printf("%.2f",left);
return 0;
}else if(f(right)==0){
printf("%.2f",right);
return 0;
}
mid=(left+right)/2;
if(f(mid)*f(left)>0){
left=mid;
}else if(f(mid)*f(left)<0){
right=mid;
}
}
printf("%.2f",mid);
return 0;
}
float f(float x){
float end;
end=a3*x*x*x+a2*x*x+a1*x+a0;
return end;
}
试试这样:
#include <stdio.h>
float a3,a2,a1,a0;
float f(float x);
int main()
{
float a,b;
scanf("%f %f %f %f",&a3,&a2,&a1,&a0);
scanf("\n%f %f",&a,&b);
float left,right;
left=a;
right=b;
float mid=0;
while(right-left>=0.0001&&f(left)*f(right)<=0){
if(f(left)==0){
printf("%.2f",left);
return 0;
}else if(f(right)==0){
printf("%.2f",right);
return 0;
}
mid=(left+right)/2;
if(f(mid)*f(left)>0){
left=mid;
}else if(f(mid)*f(left)<0){
right=mid;
}else{
printf("%.2f",mid);
return 0;
}
}
printf("%.2f",mid);
return 0;
}
float f(float x){
float end;
end=a3*x*x*x+a2*x*x+a1*x+a0;
return end;
}
你可以这样设计程序的二分治法,没输入一次拍一次序,由于前面 的是已经排好的序列,后面再插入数据时,是对已经排好顺序的数据插入新数据排序,这样会更快些