分页: 1 / 1
参考《c++程序设计》谭浩强版 80页 例3.12改写的程序,为什么答案不能达到预期?
发表于 : 2009-07-08 11:11
由 yang_hui1986527
通过pi/4=1-1/3+1/5-1/7......来近似计算pi值!
编译通过,但是运行出来pi=4,不知道哪里出问题了,望指教~
代码: 全选
//计算pi的近似值
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{int s=1;
double t,n=0,pi=0;
for(;(fabs(t))<1e-7;n++)
{t=s/(2*n+1);
pi=pi+t;
s=-s;
}
pi=pi*4;
cout<<setiosflags(ios::fixed)<<setprecision(6)<<pi<<endl;
return 0;
}
Re: 参考《c++程序设计》谭浩强版 80页 例3.12改写的程序,为什么答案不能达到预期?
发表于 : 2009-07-08 11:18
由 BigSnake.NET
double t=1,n=0,pi=0;
for(;(fabs(t))>1e-7;n++)
Re: 参考《c++程序设计》谭浩强版 80页 例3.12改写的程序,为什么答案不能达到预期?
发表于 : 2009-07-08 12:14
由 yang_hui1986527
搞定,谢谢~
还有一个疑问,为什么要初始化t=1?
代码: 全选
//计算pi的近似值
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{int s=1;
double t=1,n=0,pi=0;
for(;(fabs(t))>1e-7;n++)
{t=s/(2*n+1);
pi=pi+t;
s=-s;
}
pi=pi*4;
cout<<setiosflags(ios::fixed)<<setprecision(6)<<pi<<endl;
return 0;
}
Re: 参考《c++程序设计》谭浩强版 80页 例3.12改写的程序,为什么答案不能达到预期?
发表于 : 2009-07-08 12:31
由 dbzhang800
还有一个疑问,为什么要初始化t=1?
那你想把它初始化成几呢?
Re: 参考《c++程序设计》谭浩强版 80页 例3.12改写的程序,为什么答案不能达到预期?
发表于 : 2009-07-08 16:18
由 yang_hui1986527
我的意思是为什么要初始化?
Re: 参考《c++程序设计》谭浩强版 80页 例3.12改写的程序,为什么答案不能达到预期?
发表于 : 2009-07-08 16:54
由 devin
yang_hui1986527 写了:我的意思是为什么要初始化?
LZ有这个疑问主要是没有完全理解 for(A;B;C) 的过程中,B在什么时候执行。
B是每次循环开始前执行,如果为真就执行循环体,如果为假就不执行循环体。
既然是在每次循环开始前执行,那当然在第一次循环之前就已经执行了B,而这时 t 这个变量还没有初始化,判别条件为假,所以就不会执行循环体了。
当然,严格来说,如果 t 这个变量没有初始化就执行for,判别条件应该有时为假,有时为真。这是因为t是分配在堆栈上的一个变量,
一般情况下,这个变量所在堆栈中位置在以前是用过的,所以它的值是不定的。它很可能存放了前面的函数运行过程中曾经用过的局部变量或对象的某一个值,甚至可能是某一个函数的返回地址或堆栈指针。
Re: 参考《c++程序设计》谭浩强版 80页 例3.12改写的程序,为什么答案不能达到预期?
发表于 : 2009-07-08 18:34
由 yang_hui1986527
有点明白了,谢谢~
Re: 参考《c++程序设计》谭浩强版 80页 例3.12改写的程序,为什么答案不能达到预期?
发表于 : 2009-07-08 22:05
由 BigSnake.NET
yang_hui1986527 写了:我的意思是为什么要初始化?
为什么不初始化,不初始化的话那个 for 的第二分句该怎么做呢