C语言实现二分法求方程的根
二分法(二分查找法)是一种简单而有效的数值计算方法,用于求解方程f(x)=0在某个区间内的实根,下面我将介绍如何在C语言中实现二分法求方程的根。

(图片来源网络,侵删)
算法原理
- 确定一个区间[a, b],使得f(a)和f(b)符号相反(即f(a)*f(b)<0)
- 计算区间中点c=(a+b)/2
- 计算f(c):
- 如果f(c)=0,则c就是方程的根
- 如果f(a)*f(c)<0,则根在[a, c]区间,令b=c
- 否则根在[c, b]区间,令a=c
- 重复步骤2-3,直到区间长度小于给定的精度要求
C语言实现代码
#include <stdio.h>
#include <math.h>
// 定义要求解的方程函数,f(x) = x^3 - x - 2
double f(double x) {
return x*x*x - x - 2;
}
// 二分法求方程的根
double bisection(double a, double b, double epsilon) {
double fa = f(a);
double fb = f(b);
// 检查初始区间是否有效
if (fa * fb >= 0) {
printf("区间[%f, %f]内可能没有根或无法确定,\n", a, b);
return NAN; // 返回非数字表示错误
}
double c;
while (fabs(b - a) > epsilon) {
c = (a + b) / 2;
double fc = f(c);
if (fabs(fc) < epsilon) {
return c; // 找到足够精确的根
}
if (fa * fc < 0) {
b = c;
fb = fc;
} else {
a = c;
fa = fc;
}
}
return (a + b) / 2; // 返回区间中点作为近似根
}
int main() {
double a, b, epsilon;
printf("请输入初始区间a和b(用空格分隔): ");
scanf("%lf %lf", &a, &b);
printf("请输入精度要求(例如0.0001): ");
scanf("%lf", &epsilon);
double root = bisection(a, b, epsilon);
if (!isnan(root)) {
printf("方程的近似根为: %f\n", root);
printf验证: f(%.6f) = %.6f\n", root, f(root));
}
return 0;
}
代码说明
- 函数定义:
f(x)定义了要求解的方程,可以修改为任何你需要的方程。 - 二分法函数:
- 参数a和b是初始区间,epsilon是精度要求
- 首先检查区间是否有效(f(a)和f(b)符号相反)
- 然后循环执行二分过程,直到区间长度小于精度要求
- 主函数:
- 从用户获取初始区间和精度要求
- 调用二分法函数求解
- 输出结果并验证
示例运行
假设要求解方程x³ - x - 2 = 0在区间[1, 2]内的根:
请输入初始区间a和b(用空格分隔): 1 2
请输入精度要求(例如0.0001): 0.0001
方程的近似根为: 1.521379
验证: f(1.521379) = -0.000001
注意事项
- 初始区间[a, b]必须满足f(a)*f(b)<0,否则算法无法保证找到根
- 对于某些函数,可能存在多个根,二分法只能找到一个
- 如果函数在区间内有奇点(如不连续点),算法可能失效
- 可以通过增加最大迭代次数来防止无限循环
你可以根据需要修改f(x)函数来求解不同的方程。

(图片来源网络,侵删)
