c程序设计 例8.6
用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根。代码如下。
#include <stdio.h> #include <math.h> //定义f函数 float f(float x){ float y; y=(float)(x*((x-5.0)*x+16.0)-80.0); return y; } //求经过两个点的弦与x轴的交点的横坐标x float xpoint(float x1,float x2){ float x; x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1)); return x; } //求根 float root(float x1, float x2){ float x,y,y1=f(x1); do{ x=xpoint(x1,x2); y=f(x); if(y*y1>0){ y1=y; x1=x; }else{ x2=x; } }while(fabs(y)>0.0001); return x; } int main(){ float f1,f2,x1,x2,x; //输入x1,x2,直到f(x1),f(x2)异号 do{ printf("input x1,x2:\n"); scanf("%f,%f",&x1,&x2); f1=f(x1); f2=f(x2); }while(f1*f2>=0); //上面得到x1,x2两个值,使得f(x1),f(x2)异号 //利用上面得到的x1和x2,计算x,使得f(x)趋近于0 x=root(x1,x2); printf("求得方程的根为:%4.4f \n",x); return 0; }

浙公网安备 33010602011771号