你的程序我感觉是对的,我没有运行看看啊你那个if判断,牵扯到数学问题,不在程序中讨论,其实那个都可以跳出循环,只是精度问题就是感觉的你的算法也就是程序思路不怎么好for(;b-a>=0.005;){ c=(a+b)/2; if(f(c)==0) break; if(f(a)*f(c)>0) a=c; else b=c;}