| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 778 人关注过本帖
标题:二分法求零点,为什么运行不到结果?求大神指点,感激万分!!
只看楼主 加入收藏
CCCRonaldo
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-12-9
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:13 
二分法求零点,为什么运行不到结果?求大神指点,感激万分!!
#include<stdio.h>
#include<math.h>
int main()
{
    float F(float);
    float a,b,c;
    printf("please enter the possible area:");
        scanf("%f%f",&a,&b);
        printf("\n");
        c=(a+b)/2;
        for(;c>0.000001;)
        {
            if(F(a)*F(c)<0)
                b=c;
            else
                a=c;
            c=(a+b)/2;
        }
        printf("the approximate zero is %10.5f\n",c);
        return 0;
}
float F(float x)
{
    float t;
    t=x*x-3;
return(t);
}
搜索更多相关主题的帖子: 二分法 please include possible 
2013-12-09 21:03
wht750109
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:49
专家分:151
注 册:2013-10-21
收藏
得分:2 
for(;c>0.000001;)/*应定义c的绝对值吧。c有正有负的*/
        {
            if(F(a)*F(c)<0)
                b=c;
            else
                a=c;
            c=(a+b)/2;
        }
2013-12-09 21:28
CCCRonaldo
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-12-9
收藏
得分:0 
回复 2楼 wht750109
但是F(x)=X*X-3的初始的a b我是赋值1和2的,也就是说c在运行过程中一直是正直,但是程序运行就是输出了换行符,大神在帮帮我把
2013-12-09 22:42
CCCRonaldo
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-12-9
收藏
得分:0 
这个问题折磨我好久了,谁能教教我,让我睡个好觉,太谢谢了
2013-12-09 23:28
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:2 
c 的值一直在 1 到 2 之间徘徊,所以 c > 0.0000001是恒成立的


[fly]存在即是合理[/fly]
2013-12-10 07:13
CCCRonaldo
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-12-9
收藏
得分:0 
但是当c=(a+b)/2,运行一定次数之后,c的值是可以小于给定的精确度0.000001的
2013-12-10 08:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:2 
你的程序运行时要输入两个数据的呀,你总得告诉别人你输入哪两个数据后死循环了吧?!如果我输入-2,+2,那就直接出结果了,虽然是错误的。
这种必须的信息,为什么不肯定说?!为什么不肯定说?!为什么不肯定说?!

2楼和5楼(即所有回答你问题的人)说得都是正确的,两者结合起来就是 for(;c>0.000001;) 应当改为 for(;abs(F(c))>0.000001;)
2013-12-10 08:46
CCCRonaldo
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-12-9
收藏
得分:0 
谢谢大神,已经运行出来了!!!我之前输入的是1和2,实验一下,看看能不能运行,结果出现了死循环,怎么都没检查出来,还是你膩害,一句话搞定
2013-12-10 08:57
CCCRonaldo
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-12-9
收藏
得分:0 
回复 7楼 rjsp
大神,我第一次运行的时候输入的值是1 2,运行过程中c的值应该恒大于0,但是就是出现了死循环。。。我觉得应该当区间被分割到某一程度时,c的值就能近似代替x的值,也就是 根号3  ,但是程序出现了死循环。。。不知道为什么,请大神帮帮忙,教我一下吧
2013-12-10 09:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
以下是引用CCCRonaldo在2013-12-10 09:09:09的发言:

教我一下吧
你眼神又不好了,我在7楼不是已经教过你了嘛,“for(;c>0.000001;) 应当改为 for(;fabs(F(c))>0.000001;)”

另外,我不知道你为什么这么喜欢用float,如果是用于存储,还可以说是为了节约空间。
2013-12-10 09:21
快速回复:二分法求零点,为什么运行不到结果?求大神指点,感激万分!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012966 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved