使用C语言编写二分法程序求方程在某区间内的根,误差不超过某值,要求输出每一次二分后新区间的端点和最后的解。
时间: 2024-04-30 20:17:13 浏览: 122
C语言二分法求解方程根的两种方法
5星 · 资源好评率100%
好的,以下是使用C语言编写二分法程序求方程在某区间内的根,并输出每一次二分后新区间的端点和最后的解的代码:
```
#include <stdio.h>
#include <math.h>
#define EPSILON 0.000001 // 误差不超过 0.000001
double f(double x) { // 方程的函数
return x*x - 2; // 例如,求根号 2 的值,即 f(x) = x^2 - 2 = 0
}
void bisection(double a, double b) { // a, b 为求解区间的端点
if (f(a) * f(b) >= 0) { // 判断区间内是否有根
printf("Error: the function has the same signs at endpoints.\n");
return;
}
double c = a; // 初始化新区间的左端点为 a
int i = 1; // 初始迭代次数为 1
while ((b - a) >= EPSILON) { // 满足误差不超过 EPSILON 的条件
c = (a + b) / 2; // 取区间中点作为新区间的左端点
printf("Iteration %d: [%f, %f], c = %f\n", i, a, b, c);
if (f(c) == 0.0) break; // 找到精确解,跳出循环
else if (f(c) * f(a) < 0) b = c; // 新区间的右端点为 c
else a = c; // 新区间的左端点为 c
i++; // 迭代次数增加 1
}
printf("Root = %f\n", c); // 输出最后的解
}
int main() {
double a, b;
printf("Enter the interval [a, b]: ");
scanf("%lf %lf", &a, &b);
bisection(a, b);
return 0;
}
```
注意事项:
1. 在输入区间端点时,应该保证 f(a) * f(b) < 0,否则该区间内不存在根。
2. 运行程序后,会输出每一次二分后新区间的左右端点,直到误差不超过 EPSILON,此时可得到近似解 c。
3. EPSILON 的值可以根据需要进行调整。
阅读全文