PAT编程基础 5-18 二分法求多项式单根 (20分)
2017-01-17 15:45
148 查看
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]; }
相关文章推荐
- PAT基础编程 5-3 逆序的三位数 (10分)
- PAT基础编程 5-4 BCD解密
- PAT基础编程 5-10 计算工资 (15分)
- PAT编程基础 5-11 分段计算居民水费 (10分)
- PAT基础编程 5-14 求整数段和 (15分)
- PAT基础编程 5-22 龟兔赛跑 (20分)
- PAT基础编程 5-21 求特殊方程的正整数解 (15分)
- PAT基础编程 5-20 打印九九口诀表 (15分)
- PAT基础编程 5-19 支票面额 (15分)
- Java 8的字符串连接
- c++友元的几种情况
- GitHub 翻译之 'Hello-world' 翻译
- Setting the -source and -target of the Java Compiler
- web:Fabric基础知识
- python读取独立mysql数据库中的数据发送中文乱码
- GoF--装饰者设计模式
- 推箱子暴力求解程序(SokobanSolver)
- 前置声明与C++头文件互相包含导致的error: 'xxx' does not name a type问题
- Java学习笔记(二十七):关于System.getProperty("user.dir")
- 最近不忙,想要学习一下python