qq_33486292
abc罗大侠
采纳率86.4%
2016-03-14 05:29 阅读 1.3k

c++程序简单问题,求助!

用c++编写二分法求解一元二次方程x^2-x-2=0在的根的程序。精确到0.00001。
#include
#include
double f(double x)
{
return x^2–x–2;
}
int main()
{
double a=0,b=3,c;
c=(b–a)/2;
while(f(c)!=0)
{
if(f(a)*f(b)>0)
b=c;
else
a=c;
}
cout<<setprecision(5)<<c;
return 0;
}
麻烦给我看一下,程序格式基本没什么问题,结果得不出来。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    qq423399099 小灸舞 2016-03-14 07:30

    楼主可以改成这样,基本上保留了你原来的思路

     #include<iostream>
    #include<iomanip>
    using namespace std;
    double f(double x)
    {
        return x*x-x-2;
    }
    int main()
    {
        double a=0,b=3,c;
        c=(b-a)/2;
        while(f(c) >= 0.00001 || f(c) <= -0.00001)
        {
            if(f(a)*f(c)<0)
            {
                b=c;
            }
            else
            {
                a=c;
            }
            c = (a + b) / 2;
        }
        cout<<setprecision(5)<<c<< endl;
        return 0;
    }
    
    点赞 评论 复制链接分享
  • qq423399099 小灸舞 2016-03-14 06:04

    改成下面那样能跑了
    改了几个地方:
    1.楼主的减号好像都是中文格式的-
    2. x^2–x–2改成了x*x-x-2
    3.while(f(c)!=0)改成了if(f(c)!=0),否则的话一旦f(c)!=0则一直在while循环中,无法跳出

    #include<iostream>
    #include<iomanip>
    using namespace std;
    double f(double x)
    {
        return x*x-x-2;
    }
    int main()
    {
        double a=0,b=3,c;
        c=(b-a)/2;
        if(f(c)!=0)
        {
            if(f(a)*f(b)>0)
                b=c;
            else
                a=c;
        }
        cout<<setprecision(5)<<c<< endl;
        return 0;
    }
    
    点赞 评论 复制链接分享
  • leilba 林深 2016-03-14 06:18

    二分法一般会设置一个极小数来作为近似0的点,我这里使用MIN_ZERO,在精度允许的情况下可以避免死循环,
    c=(b-a)/2 要改成 c=(b+a)/2,因为c每次是取a和b中间的一个值。
    f(a)*f(b)>0要改成 result>0 ,只有这样才能判断c的值是取高了还是低了,从而来调整a和b的值
    最后得到的答案是2

    #include <iostream>
    #include <iomanip>
    #include <cmath>
    
    #define MIN_ZERO 1e-9
    using namespace std;
    
    double f(double x)
    {
        return x*2-x-2 ;
    }
    
    int main()
    {
        double a=0,b=3,c,result;
        c=(b+a)/2;
        while(result = f(c),abs(result) > MIN_ZERO)
        {
            if(result > 0)
                b = c;
            else
                a = c;
            c = (b+a)/2;
        }
        cout<<setprecision(5)<<c<<endl;
        return 0;
    }
    
    点赞 评论 复制链接分享

相关推荐