废话少说,直接上干货。
#include <stdio.h>
#include <math.h>
float f(float x) {
// 函数
return x*x*x - x - 1;
}
float root(float x1, float x2) {
float mid, fmid;
float e = 1e-6;
while ((x2 - x1) >= e) {
mid = (x1 + x2) / 2;
fmid = f(mid);
// 判断中点是否为根
if (fabs(fmid) < e) {
return mid;
}
// 根据f(mid)的符号调整区间
if (fmid * f(x1) < 0) {
x2 = mid;
}
else {
x1 = mid;
}
}
return (x1 + x2) / 2;
}
int main() {
int k;
float x1, x2, t;
printf("请输入x1和x2:\n");
do {
k = 0;
scanf_s("%f,%f", &x1, &x2);
if (f(x1) * f(x2) > 0)
{
printf("f(x1)和f(x2)的符号相同,请重新输入。\n");
k = 1;
}
} while (k);
t = root(x1, x2);
printf("x = %f\n", t);
return 0;
}