输入格式:
输入在第1行中顺序给出多项式的4个系数a3、a2、a1、a0,在第2行中顺序给出区间端点a和b。题目保证多项式在给定区间内存在唯一单根。
输出格式
在一行中输出该多项式在该区间内的根,精确到小数点后2位
输入样例
3 -1 -3 1
-0.5 0.5
输出样例
0.33
代码如下
#include <stdio.h>
#include<math.h>
double a3, a2, a1, a0;
double F(double x){
return a3*x*x*x+a2*x*x+a1*x+a0;
}
int main() {
double l,r,m;
scanf("%lf%lf%lf%lf",&a3,&a2,&a1,&a0);
scanf("%lf%lf",&l,&r);
if( fabs(F(l))< 1e-5 ){
/* C语言无法准确判断两个实数是否相等,故判据为两数距离的大小*/
printf("%.2f\n", l);
}
else if( fabs(F(r)) < 1e-5 ){
printf("%.2f\n", r);
}
else if(F(l)*F(r)<0)
while( fabs(r-l) > 1e-5 ){
m=(l+r)/2;
if(fabs(F(m))<1e-5){/*****第一次就是这里没加绝对值***/
printf("%.2f",m);break;
}else if(F(m)*F(l)>0){
l=m;
}else {
r=m;
}
}if(fabs(r-l) <= 1e-5){
printf("%.2f", m);}
return 0;
}
这一题注意的是C语言无法判定实数是否相等或者等不等于0,只能用绝对值函数fabs来求距离是否
小于1e-5,这次做了一个下午的原因是自己太粗心,有一个地方没有加fabs