PAT编程基础 5-18 二分法求多项式单根 (20分)

来源:互联网 发布:大话数据库 pdf 下载 编辑:程序博客网 时间:2024/06/04 18:14

5-18 二分法求多项式单根 (20分)

二分法求函数根的原理为:如果连续函数f(x)f(x)在区间[a, b][a,b]的两个端点取值异号,即f(a)f(b)<0f(a)f(b)<0,则它在这个区间内至少存在1个根rr,即f(r)=0f(r)=0。

二分法的步骤为:

这里写图片描述

输入样例:

3 -1 -3 1
-0.5 0.5
输出样例:

0.33


分析:
二分法的定义上面已经描述的很清楚了,只需要把每个分步骤写出来即可


AC代码:

#include<stdio.h>double f (double a[], double x);int main (){    double a[4];    int i;    for (i=3; i>=0; i--) {        scanf("%lf", &a[i]);    }    double low, high;    scanf("%lf %lf", &low, &high);    double mid = ( low + high) /2;    //区间长度大于给定阈值,并且中点値不为零    while (f(a, mid) != 0 && (high - low) > 0.001) {            //如果左端点处值为零,即左端点为根,输出        if (f(a, low) == 0) {            mid = low;            break;        }           //如果右端点处值为零,即右端点为根,输出        if (f(a, high) == 0) {            mid = high;            break;        }        //如果f((a+b)/2)与f(low)同号        if (f(a, mid) * f(a, low) < 0) {            high = mid;        } else {            //如果f((a+b)/2)与f(high)同号            low = mid;        }        mid = (low + high) / 2;    }    printf("%.2f\n", mid);    return 0;}double f (double a[], double x) {    return a[3] * x * x * x + a[2] * x * x + a[1] * x + a[0];}
0 0
原创粉丝点击