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

 

posted @ 2017-07-28 21:04  Allen101  阅读(127)  评论(0)    收藏  举报