完整代码: //用弦截法求 func(x)=x^3-5*x^2+16*x-80=0 的根 //弦截法就是用函数上两点,连线的斜率近似代替f`(x) //公式为Xn+1=Xn−(Xn−Xn−1)*func(Xn)/(func(Xn)−f(Xn−1)) #include<stdio.h> #include<math.h> //求f(x)的值 double func(double x){ return x*x*x-5*x*x+16*x-80; } int main(){ double x1,x2,temp; do { printf("输入两个数x1,x2:"); scanf("%lf%lf",&x1,&x2); } // 当输入两个数大于0为真时,继续重新输入,直到f(x1)和f(x2)一正一负 //一正一负代表在x1和x2中间有f(x)=0的根 while (func(x1)*func(x2)>= 0); do { temp=x2-(x2-x1)*func(x2)/(func(x2)-func(x1)); if (func(temp)*func(x1)>0) { x1=temp; } else{ x2=temp; } } while (func(x2)>1e-7); printf("%.12f",x2); return 0; } 运行截图: