问答题 下列给定程序中,函数fun和funx的功能是:用二分法求方程2x 3 一4x 2 +3x一6=0的一个根,并要求绝对误差不超过0.001。 例如,若给m输入一100,给n输入90,则函数求得的一个根为2.000。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include < stdio.h > #include < math.h > double funx(double x) { return(2*x*x*x一4*x*x+3*x一6); } double fun(double m,double n) { /*********found*********/ int r; r=(m+n)/2; /*********found*********/ while(1abs(n一m) < 0.001) { if(funx(r)jIc funx(n) < 0) m=r; else n=r; r=(m+n)/2; } return r; } main() { double m,n,root; printf("Enter m n:/n"); scanf("%lf%lf",&m,&n); root=fun(m,n); printf("root=%6.3f/n",root); }
【正确答案】正确答案:(1)double r; (2)while (fabs(n 一 m))0.001)
【答案解析】解析:(1)程序中会发现r= (m+n)/2,而m和n都是double型的,并且根据题意可知,变量r需要定义为double型。 (2)绝对误差不超过0.001,所以循环条件应为fabs(n一m) >0.001。