注册 登录
编程论坛 C++教室

新手求助!!!!!下面这个程序有什么问题

Liu3420175 发布于 2013-03-24 13:58, 644 次点击
求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;
}
8 回复
#2
yuccn2013-03-24 15:23
#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;
 }
#3
qunxingw2013-03-24 15:23
for(j=0;(double)1/(4*j+3)>1e-7;j++)//for(j=0;b>1e-7;j++)
#4
qunxingw2013-03-24 15:28
b=1/3就可不要了
#5
Liu34201752013-03-24 16:51
回复 2楼 yuccn
谢谢!刚接触这些,好多不懂,老犯错。。。
#6
Liu34201752013-03-24 16:56
回复 4楼 qunxingw
这个貌似不行啊,我用的是VS2010,如果不要b=1/3,它就说“warning C4700: 使用了未初始化的局部变量“b””,然后就运行失败,这是为何?以前也碰到过类似的问题,特别是在循环语句中
#7
Liu34201752013-03-24 17:13
回复 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“的·区别吗?
#8
shmilyflf2013-03-24 17:42
你看看类型的转换吧。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会被当成浮点型处理。看看这两者的一些区别你就知道为什么了。
#9
李沫沫2013-03-25 21:42
同意楼上说的。你试试
1