找到问题了,a,b要求是实数,还有没有考虑端点是根的情况#include<stdio.h>
#include<math.h>
double f(double x,double *p)//计算多项式
{
double result=0;
for(int i=3;i>=0;i--)
{
result = result*x+p[i];
}
return result;
}
int main()
{
double num[4];
double a,b;
int i;
for(i=3;i>=0;i--)
scanf("%lf",&num[i]);
scanf("%lf%lf",&a,&b);
while(fabs(b-a)>0.01)
{
if(f(a,num)*f(b,num)<0)
{
if(f((a+b)/2,num)==0)
break;
else if(f((a+b)/2,num)*f(a,num)>=0)
a = (a+b)/2;
else
b = (a+b)/2;
}
else
{
if(f(a,num)==0)
{
printf("%.2lf",a);
return 0;
}
else
{
printf("%.2lf",b);
return 0;
}
}
}
printf("%.2lf",(a+b)/2);
return 0;
}
|