自学谭浩强第2版C程序设计,例题6.6不明白,请教。

来源:百度知道 编辑:UC知道 时间:2024/05/17 10:20:48
原题:用pi/4≈1-1/3+1/5-1/7+--------公式求pi的近似值,直到某一项的绝对值的近似值小于10的-6次方为止。
书上的答案:
#include<math.h>
main()
{int s;
float n,t,pi;
t=1;pi=0;n=1;s=1;
while(fabs(t)>1e-6)
{pi=pi+t;
n=n+2;
s=-s;
t=s/n;
}
pi=pi*4;
printf("pi=%10.6f\n",pi);
}
若将程序像书上那般编的话,输出结果为pi= 3.141594。
我另外试了一下:1、若将s定义为float而将n定义为int,则程序死掉;2、若将s和n同时定义为int,则输出结果为pi= 4.000000——请问,这两种情况是咋回事?错在何处?

lz
第一种情况的代码是这样的吧:
float s;
int n,t,pi;我用vc++6.0输出的是0.0xxxxxx(没算多少个0),这种情况应该是s是float型的,n是int的,那么s/n就是float的,但t是int的。这样t的值就是0,故结果就是0
第二种情况是
int s;
int n,t,pi;吧,这样的话第一次循环t=1,第二次就是0,然后while循环就结束了,因为int/int的结果是int的,然后就向0靠拢,比如-4.2就是-4,3.2就是3,好像C中没有绝对相等,2个数之差不大于10的-6次方就是相等,然后1*4就是4啦
浅解,笑纳