二分求根哪里错了,没有编译结果

#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;
}

img

你好,我仔细看了之后,给你的二分法修改如下:

#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

有帮助还望题主给个采纳哟,谢谢啦