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

问题描述

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;
}
麻烦给我看一下,程序格式基本没什么问题,结果得不出来。

解决方案

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

 #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;
}

解决方案二:

改成下面那样能跑了
改了几个地方:
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;
}

解决方案三:

二分法一般会设置一个极小数来作为近似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;
}
时间: 2024-09-06 17:00:07

c++ 新手-c++程序简单问题,求助!的相关文章

exception-winform程序报错求助(判断查询结果是否为空)

问题描述 winform程序报错求助(判断查询结果是否为空) 小弟初学c#,写了一个数据查询的程序,分别用四个方法实现数据查询结果是否为空的判断,方法1和方法2都可以,但是方法三和方法四一直提示 " 对象的当前状态使该操作无效"异常,请各位大侠给指点下,问题出在哪? 备注:1.oradr.GetString(0)))字段本人用控制台测试是能正确输出相关数据库字段信息的: 2.看到网上说这个错误一般是,数据超过1000条的缘故,但是这个用户数据库里面只有一条数据,所以我也有点头晕,还请各

24色位图,字母图片验证码识别,基于MFC对话框的程序,在线求助,高手帮帮忙

问题描述 24色位图,字母图片验证码识别,基于MFC对话框的程序,在线求助,高手帮帮忙 24色位图(如下图)字母图片验证码识别,基于MFC对话框的程序,在线求助,高手帮帮忙

浅谈新手SEOER如何简单判断关键词热度

选取关键词对于网站本身来说很重要,这个站长都很清楚,尤其是一些优化的公司每天都要优化不同行业的网站,客户会给你一些词让你优化到什么程度然后付费,但是客户不了解SEO这个行业的规则,不是客户说优化那个词你就要优化那个词,SEOER要学会分析这个词的难度是属于那种类型的,如果太热的词一个小的团队在几个月是不可能优化上去的,比如客户让你优化手机这个词,那么作为SEOER不能优化这个词这个词太笼统了,一定要和客户好好沟通,今天白癜风早期能治愈吗和大家一起分享一下新手SEOER如何简单判断关键词热度? 一

c语言编程-关于C语言字符串的简单题求助

问题描述 关于C语言字符串的简单题求助 进行对输入的字符串重新排列,要求字母在前,数字在后,并不改变字母和数字之间的字符排列顺序. 解决方案 #include void main() { char a[10] = {0}, b[10] = {0}, c[10]={0}; int n = 0, m = 0, k = 0,f = 0; printf("输入字符串:"); gets(a); for(int j = 0; j < 10; j++) { if((a[j] >= 'a'

编程-程序媛小白求助:C#贪吃蛇精灵游戏

问题描述 程序媛小白求助:C#贪吃蛇精灵游戏 我编了一个贪吃蛇的游戏,代码如下.编译无错误,但运行后蛇不会动啊~我真的真的不知道问题出在哪儿.多谢各位大神指教~ using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threadin

java新手,程序能正常运行,但结果不对

问题描述 java新手,程序能正常运行,但结果不对 输入年份.月份,打印出月历的小程序.源代码全是照着教程打上去的,程序能正常运行,但结果不对.输入2015年8月,月历是对的:输入2014年1月,正确的结果1号应该是星期三,但是显示的结果却是星期四. import java.util.Scanner; public class PrintCalendar { /** * @param args the command line arguments */ public static void ma

Fortran程序纠错,求助

问题描述 Fortran程序纠错,求助 菜鸟一个,求各位大神指教哪里有错误,断点调试J值跳动 求3-200的素数输出,万分感谢呀. program main integer i,j print*,'2-200之间素数有:' do i=3,200 do j=2,i-1 if(mod(i,j)/=0) then print*,i else endif enddo enddo end 解决方案 代码根本就不对,哪里能一判断不能整除就输出呢?素数是全部不能整除才是. 解决方案二: 对噢 好像被戳中了 谢

opencv-vs2010,vs2013都不能新建win32控制台应用程序!!求助!!

问题描述 vs2010,vs2013都不能新建win32控制台应用程序!!求助!! 点击完成或者取消都不行啊! 各位帮帮忙!我没有C币! 解决方案 不行的话是弹出了什么样子的错误呢?你得给个错误的截图或者信息啊 解决方案二: 就是点击完成, 或者点击取消,都没反应... 用vs2010,vs2013都是这样!! 而且这是当前项目设置下面也是空白! 解决方案三: 这都是你的VS没有安装成功,看来你的系统环境不是很干净了,导致VS几个版本都安装不成功.需要清理一下系统,或者重装 解决方案四: VS没

计算机问题-无法启动程序,新人求助呀

问题描述 无法启动程序,新人求助呀 无法启动程序,计算机中丢失swscale-2.dll是怎么回事