回 帖 发 新 帖 刷新版面

主题:一个关于计算PAI值的问题(PAI指的是数学里的希腊字母)

题目:
编程用PAI/4=1-1/3+1/5-1/7+1/9-...公式,求PAI的近似值,直到最后一项的绝对值小于10^(-6)为止,并输出结果。
我的代码:
#include<stdio.h>
int main()
{
float x=0.0,sign=1.0;int i;
for(i=1;1.0/(2*i-1)<1/1000000;i++)
{
x=x+sign/(2*i-1);
sign=sign*(-1);
};
printf("%f",4.0*x);
getchar();
return 0;
}
为什么我的代码运行后结果为零啊

回复列表 (共8个回复)

沙发

1/1000000 不如直接写成 0

板凳

for(i=1;1.0/(2*i-1)<1/1000000;i++)
改为:
for(i=1;1.0/(2*i-1)<1e-6;i++)

3 楼

另:
int i;
改为:
long i;
会保险些,因为不知道你是在VC下跑还是TC下~~~~

4 楼


嗯,就这样

5 楼

初略看了下,你for语句里的判断条件就反了啊。判断条件为直到最后一项的绝对值小于10^(-6)为止,意思就是当直到最后一项的绝对值大于10^(-6)时执行累加啊。

6 楼

同意楼上的,要不然这是一个死循环程序?

7 楼

[quote]同意楼上的,要不然这是一个死循环程序?[/quote]
不是死循环,只是不执行循环体,所以最后得值PAI=0

8 楼

加上一个头文件math.h然后主函数这样改:
int sign=1;double pi=0.0,n=1.0,term=1.0;
while(fabs(term)>=1e-6)
{
pi=pi+term;
n=n+2;
sign=-sign;
term=sign/n;
}
pi=pi*4;
printf("pi=%10.8f\n",pi);
return 0;

我来回复

您尚未登录,请登录后再回复。点此登录或注册