M043

02-程序修改题 软件154 范金瑞 1227浏览

所属年份:2011.9;

下列给定程序中函数fun和funx的功能是:用二分法求方程 的一个根,并要求绝对误差不超过0.001。
例如,若给m输入-100,n输入90,则函数求得的一个根为2.000。

请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。

#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(fabs(n-m)<0.001)
    {
        if(funx(r)*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)

【考点分析】
本题考查:变量数据类型;while循环语句。

【解题思路】
(1)程序中我们会发现r=(m+n)/2,而m和n都是double型的,并且根据题意可知,变量r需要定义为double型。
(2)绝对误差不超过0.001,所以循环条件应为fabs(n-m)>0.001。