Description
方程f(x)=2x3−4x2+3x−6,试用二分法计算f(x)=0在(a,b)之间的根。
Input
两个实数a,b,确保f(a)f(b)<0
注意多组输入!
Output
用二分法计算出f(x)=0在区间内的根,结果保留6位小数
#include<stdio.h>#include<math.h>double f(double n){return (2*n*n*n-4*n*n+3*n-6);}int main(){double n,a,b,c,x;while(scanf("%lf%lf",&a,&b)!=EOF){while(fabs(f(x))>=1e-6){x=(a+b)/2;if(f(a)*f(x)>=0)a=x;elseb=x;x=(a+b)/2.0;}printf("%.6lf\n",x);}}
#include<stdio.h>int main(){float a,b,z,v,x,s,m,h,j,i;while(scanf("%f%f",&a,&b)!=EOF){z=2*a*a*a-4*a*a+3*a-6;v=2*b*b*b-4*b*b+3*b-6;if((z*v<0)&&(a<b)){x=(a+b)/2.0;s=2*x*x*x-4*x*x+3*x-6;while(s>0){while(s>0){b=x;x=(a+b)/2.0;s=2*x*x*x-4*x*x+3*x-6;}h=(a+b)/2.0;j=2*h*h*h-4*h*h+3*h-6;while(j<0){a=h;h=(a+b)/2.0;j=2*h*h*h-4*h*h+3*h-6;}i++;}while(s<0){h=(a+b)/2.0;j=2*h*h*h-4*h*h+3*h-6;while(j<0){a=h;h=(a+b)/2.0;j=2*h*h*h-4*h*h+3*h-6;}x=(a+b)/2.0;s=2*x*x*x-4*x*x+3*x-6;while(s>0){b=x;x=(a+b)/2.0;s=2*x*x*x-4*x*x+3*x-6;}i++;}}m=(a+b)/2.0;printf("%.6f\n",m);}return 0;}