| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 644 人关注过本帖
标题:新手求助!!!!!下面这个程序有什么问题
只看楼主 加入收藏
Liu3420175
Rank: 2
来 自:湖北黄冈
等 级:论坛游民
帖 子:26
专家分:17
注 册:2013-3-24
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
新手求助!!!!!下面这个程序有什么问题
求S=1/3+1/7+...+1/(4n+3)当最后一项小于0.000001时为止。这是我写的,为什么输出结果会是0.000000
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    double b,s2;
    int j;
    b=1/3;
    s2=0.0;
    for(j=0;b>1e-7;j++)
    {
        b=(double)1.0/(double)(4*j+3);
        s2=s2+b;
    }
    cout <<"s2="<<setiosflags(ios::fixed)<<setprecision(6)<<s2<<endl;
    return 0;
}
搜索更多相关主题的帖子: include double 
2013-03-24 13:58
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:3 
#include<iostream>
 #include<iomanip>
 using namespace std;
 int main()
 {
     double b,s2;
     int j;
     b=1/3;// 这行改成b = 1.0/3; 就行了
     s2=0.0;
     for(j=0;b>1e-7;j++)
     {
         b=(double)1.0/(double)(4*j+3);
         s2=s2+b;
     }
     cout <<"s2="<<setiosflags(ios::fixed)<<setprecision(6)<<s2<<endl;
     return 0;
 }

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-03-24 15:23
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:3 
for(j=0;(double)1/(4*j+3)>1e-7;j++)//for(j=0;b>1e-7;j++)

www.qunxingw.wang
2013-03-24 15:23
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
b=1/3就可不要了

www.qunxingw.wang
2013-03-24 15:28
Liu3420175
Rank: 2
来 自:湖北黄冈
等 级:论坛游民
帖 子:26
专家分:17
注 册:2013-3-24
收藏
得分:0 
回复 2楼 yuccn
谢谢!刚接触这些,好多不懂,老犯错。。。

天下事在局外呐喊是无益的,必须躬亲入局才有改变的希望!
2013-03-24 16:51
Liu3420175
Rank: 2
来 自:湖北黄冈
等 级:论坛游民
帖 子:26
专家分:17
注 册:2013-3-24
收藏
得分:0 
回复 4楼 qunxingw
这个貌似不行啊,我用的是VS2010,如果不要b=1/3,它就说“warning C4700: 使用了未初始化的局部变量“b””,然后就运行失败,这是为何?以前也碰到过类似的问题,特别是在循环语句中

天下事在局外呐喊是无益的,必须躬亲入局才有改变的希望!
2013-03-24 16:56
Liu3420175
Rank: 2
来 自:湖北黄冈
等 级:论坛游民
帖 子:26
专家分:17
注 册:2013-3-24
收藏
得分:0 
回复 3楼 qunxingw
为什么用了for(j=0;(double)1/(4*j+3)>1e-7;j++)这句,就不需要对b进行初值化呢?也就是不要“b=1/3"或者”b=1.0/3"也可以编译成功得出结果。而用了for(j=0;b>1e-7;j++) 后,必需要加”b=1.0/3"这句,否则编译系统会说“warning C4700: 使用了未初始化的局部变量“b””,如果用b=1/3,就出现错误,仅仅就是"1"与”1.0“的·区别吗?

天下事在局外呐喊是无益的,必须躬亲入局才有改变的希望!
2013-03-24 17:13
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:3 
你看看类型的转换吧。b=1/3得到的是整型的b,你上面声明的是double的b,能是一个变量吗?
for(j=0;(double)1/(4*j+3)>1e-7;j++)这句中中间的(double)1/(4*j+3)就做了你那个b=1/3做的工作,当然不需要“b=1/3"或者”b=1.0/3"也可以编译成功得出结果。
1在会被当成整型处理,1.0会被当成浮点型处理。看看这两者的一些区别你就知道为什么了。
2013-03-24 17:42
李沫沫
Rank: 2
来 自:唐山
等 级:论坛游民
帖 子:35
专家分:13
注 册:2013-3-14
收藏
得分:3 
同意楼上说的。你试试

沫沫、努力学习呀!c++我来了!
2013-03-25 21:42
快速回复:新手求助!!!!!下面这个程序有什么问题
数据加载中...
 
   



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

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