7-29 二分法求多项式单根(程序有错误)
#include<stdio.h> double a3,a2,a1,a0;//跨函数的变量弄成全局变量 double f(double x){ return a3*x*x*x+a2*x*x+a1*x+a0; } int main(){ double a,b,mid; //mid代表是根 scanf("%lf %lf %lf %lf",&a3,&a2,&a1,&a0); scanf("%lf %lf",&a,&b); while(f(a)*f(b)<=0){ if(f(a)==0){ mid=a; break; } if(f(b)==0){ mid=b; break; } mid=(a+b)/2; if(f(mid)==0){ break; }else{ if(f(mid)*f(a)>=0){ a=mid; }else{ b=mid; } } } printf("%.2f",mid); return 0; }
#include<stdio.h> double a3,a2,a1,a0; //跨函数的变量弄成全局变量 double f(double x){ return a3*x*x*x+a2*x*x+a1*x+a0; } int main() { double a,b,mid; scanf("%lf %lf %lf %lf",&a3,&a2,&a1,&a0); scanf("%lf %lf",&a,&b); while( b-a>=1e-4 && f(a)*f(b)<=0 ) //1e-4是10的(-4)次方,小于这个数是因为想到某个时间结束,而不是无限进行下去,不加会TLE { if( f(a)==0 ) { mid=a;//mid代表是根 break; } if( f(b)==0 ) { mid=b; break; } mid = (a+b)/2; if( f(mid)==0 ) { break; } else { if(f(mid)*f(a)>=0) { a=mid; } else { b=mid; } } } printf("%.2f",mid); return 0; }
第 I 段——变量、表达式、分支、循环 文章被收录于专栏
中国大学MOOC 2021年春季C、Java入门练习第I段——变量、表达式、分支、循环