7-18 二分法求多项式单根 (20分)
#include <stdio.h>
double f(double a,double c[]){//求多项式值的函数
double h;
h=a*a*a*c[3]+a*a*c[2]+a*c[1]+c[0];
return h;
}
int main(){
double c[4]={0.0};//定义数组存储系数,在调用到函数时比较方便
double a,b,fa,fb,fm;
scanf("%lf %lf %lf %lf",&c[3],&c[2],&c[1],&c[0]);
scanf("%lf %lf",&a,&b);
if(f(a,c)==0){//两个if来解决当函数的解在端点时的情况(还有待改进)
printf("%.2f",a);
return 0;
}
if(f(b,c)==0){
printf("%.2f",b);
return 0;
}
while(b-a>0.01){
fa=f(a,c);//将函数值存入三个变量中方便后续代码的编写
fb=f(b,c);
fm=f((a+b)/2,c);
if(fa*fb<0){
if(fm==0){
printf("%.2f",(a+b)/2);
return 0;
}
if(fm>0&&fa>0){
a=(a+b)/2;
}
if(fm<0&&fa<0){
a=(a+b)/2;
}
if(fm>0&&fb>0){
b=(a+b)/2;
}
if(fm<0&&fb<0){
b=(a+b)/2;
}
}
}
printf("%.2f",(a+b)/2);
return 0;
}
虽然是AC答案,但总体来说还是有许多可以改进的地方