#include<stdio.h>
int f(float x);
float y(float x);
int main()
{
float a=-10, b=10;
// scanf("%d%d", &a, &b);
float x = 1.0*(a + b) / 2;
while (f(x) == 1) {
if (y(a) * y(b) < 0) {
if (y(a) * y(x) < 0) b = x;
else if (y(b) * y(x) < 0) a = x;
x = (a + b) / 2;
}
}
printf("%.2f", x)
;
return 0;
}
int f(float x) {
int y = 1; float m;
m = 2 * x * x * x - 4 * x * x + 3 * x - 6;
if ((m < 1e-6 && m>0) || (m > -1e-6 && m < 0)) y = 0;
return y;
}
float y(float x) {
float y;
y = 2 * x * x * x - 4 * x * x + 3 * x - 6;
return y;
}
你好,我仔细看了之后,给你的二分法修改如下:
#include<stdio.h>
float y(float x);
int main()
{
float a=-10, b=10;
scanf("%f %f", &a, &b);
float x;
while ( (b-a) > 1e-3 ) {
x = (b+a)*0.5; // 直接取半
if (y(a) * y(x) <= 0) b = x; //如果根在x左边
else a = x;//否则肯定在右边
}
printf("%.2f", x);
return 0;
}
//定义y函数
float y(float x) {
return 2 * x * x * x - 4 * x * x + 3 * x - 6;//函数一句就够了
}
输入输出:
-10 10
2.00
有帮助还望题主给个采纳哟,谢谢啦