您的位置:首页 > 编程语言 > C语言/C++

问题 : 方程求零点

2017-08-11 09:39 302 查看
题目描述

设函数f(x)是在区间[a,b]内的连续函数,且f(a)f(b)<0, 根据Role定理,f(x)在区间内必存在零点。已知f(x)=x3-x-1, 输入区间端点的值,令精确度为eps=10-5, 判断是否存在零点,如果存在,输出该零点的近似值,否则输出No zero point.

输入

输入包括若干行,表示该区间端点

输出

每行对应每个区间的计算结果,如果根存在,保留5位小数。对于有根区间,如果|f(x*)|<=eps,则x*为零点的近似值。

样例输入

-1 0

0 1

1 1.5

样例输出

No zero point in area(-1.00000,0.00000)

No zero point in area(0.00000,1.00000)

The Zero Point is 1.32472 in area(1.00000,1.50000)

AC代码

#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const double eps=0.00001;
double f(double x){
return (x*x*x-x-1)*1.0;
}
int main()
{
double left,right;
while(scanf("%lf%lf",&left,&right)!=EOF){
if(f(left)*f(right)>0){
cout<<"No zero point in area";
printf("(%.5f,%.5f)\n",left,right);
}else if(f(left)==0){
printf("The Zero Point is %.5f in area(%.5f,%.5f)\n",left,left,right);
}else if(f(right)==0){
printf("The Zero Point is %.5f in area(%.5f,%.5f)\n",right,left,right);
}else{
double _mind=(left+right)/2.0;
double l=left,r=right;
while((l-r)>eps||(l-r)<-eps){
if(f(_mind)*f(l)<0){
r=_mind;
_mind=(r+l)/2.0;
}else if(f(_mind)*f(r)){
l=_mind;
_mind=(l+r)/2.0;
}
}
printf("The Zero Point is %.5f in area(%.5f,%.5f)\n",_mind,left,right);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息