C语言 二分法求方程x^2-3x-5=0的近似解

#include<stdio.h>/*求x^2-3x-5=0在指定区间的解*/#include<math.h>voidmain(){doublex1=1,x2=1,f1=... #include<stdio.h>/*求x^2-3x-5=0在指定区间的解*/
#include<math.h>
void main()
{
double x1=1,x2=1,f1=x1*x1-3*x1-5,f2=x2*x2-3*x2-5;
printf("请输入指定区间(x1,x2):");
scanf_s("%lf,%f",&x1,&x2);
aa:double x0=(x1+x2)/2,f0=x0*x0-3*x0-5;
while (f1*f0>0)
{
f1=f0,x1=x0;
x0=(x1+x2)/2;
f0=x0*x0-3*x0-5;
}
f2=f0,x2=x0;
while (f1*f0>0)
{
f1=f0,x1=x0;
x0=(x1+x2)/2;
f0=x0*x0-3*x0-5;
}
if (fabs(f0)<0.00001)
printf("%lf",x0);
else goto aa;
}
实在不行用了个aa,不然跳不出去啊……谁能帮我找找错,再优化一下什么的。。。。
额,打错了,x2为lf。。。。。
展开
 我来答
励若08t
2013-04-10 · TA获得超过1221个赞
知道小有建树答主
回答量:366
采纳率:0%
帮助的人:233万
展开全部
#include <cmath> double func(double x){
return x * (x - 3.0) - 5.0;
}

double binary_search(double x1, double x2, double (*f)(double)){
static const double epsilon = 1.0e-14;

double y1 = f(x1); double y2 = f(x2);
bool b1 = (y1 < 0.0 && y2 > 0.0);
bool b2 = (y1 > 0.0 && y2 < 0.0);

while (b1 || b2)
{
double x = (x1 + x2) / 2;
double y = f(x);

if (fabs(y) <= epsilon) { return x;}
((b1 == y < 0.0) ? x1 : x2) = x;
}

return 0.0;
}

int main(int, char*[]){
double f = binary_search(1.5, 10, func);
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式