PAT编程基础 5-18 二分法求多项式单根 (20分)
2017-12-03 19:36
288 查看
二分法求函数根的原理为:如果连续函数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
#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;
}
if(f(a,mid)*f(a,low)>0){
low=mid;
}
else{
high=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];
}
二分法的步骤为:
输入样例:
3 -1 -3 1
-0.5 0.5
输出样例:
0.33
#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;
}
if(f(a,mid)*f(a,low)>0){
low=mid;
}
else{
high=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-18 二分法求多项式单根 (20分)
- PAT 5-18 二分法求多项式单根 浮点数二分法
- PTA 7-18 二分法求多项式单根(20 分)
- PAT循环-08. 二分法求多项式单根(20)
- 7-18 二分法求多项式单根(20 分)
- PAT 数据结构 03-树1. 二分法求多项式单根(20)
- 7-18 二分法求多项式单根
- 5-18 二分法求多项式单根 (用不少人竟然用 浮点数 0.0 == 0 的用法,哎)
- PTA 5-18 二分法求多项式单根
- PAT 03-1. 二分法求多项式单根(20)
- PAT - JAVA-5-18 二分法求多项式单根 (20分)
- PAT 03-1. 二分法求多项式单根(20)
- 5-18 二分法求多项式单根
- PAT基础编程 5-22 龟兔赛跑 (20分)
- 二分法求多项式单根 PAT
- 03-1. 二分法求多项式单根(PAT) - 二分查找问题
- PAT:二分法求多项式单根
- 7-18 二分法求多项式单根
- 中国大学MOOC-数据结构基础习题集、03-1、二分法求多项式单根
- PAT练习基础编程题目之多项式求值