编辑代码

#include <stdio.h>  
#include <math.h>  
  
// 定义函数f  
float f(float x) {  
    return x * x * x - 2 * x * x - 4 * x - 7;  
}  
  
int main() {  
    float a, b, eps = 1e-5, c, fa, fb, fc;  
      
    // 提示用户输入区间端点a和b  
    printf("请输入区间端点a和b(确保f(a)和f(b)异号): ");  
    scanf("%f%f", &a, &b);  
      
    // 计算区间端点的函数值  
    fa = f(a);  
    fb = f(b);  
      
    // 检查输入区间是否有效  
    if (fa * fb >= 0) {  
        printf("输入的区间无效,因为函数值在区间两端符号相同。\n");  
        return 1;  // 返回非零值表示程序异常结束  
    }  
      
    // 使用二分法迭代求解  
    while (fabs(b - a) >= eps) {  
        c = (a + b) / 2;  
        fc = f(c);  
          
        // 检查是否找到根或达到精度要求  
        if (fabs(fc) < eps) {  
            break;  
        } else if (fa * fc < 0) {  
            b = c;  
            fb = fc;  // 更新b端点的函数值,以便下次迭代使用(可选,但可以提高效率)  
        } else {  
            a = c;  
            fa = fc;  // 更新a端点的函数值,以便下次迭代使用(可选,但可以提高效率)  
        }  
    }  
      
    // 输出结果  
    printf("找到的根为: x = %f\n", c);  
      
    return 0;  // 返回0表示程序正常结束  
}