读书人

学C的师傅进来帮小弟我看一下

发布时间: 2012-04-02 19:58:59 作者: rapoo

学C的师傅进来帮我看一下
#include <math.h>
main()
{
int i;
float pi,n,t;
for(pi=0,n=1.0,i=1,t=1;fabs(t)>1e-6;)
{
pi+=t;
n=-n;
i+=2;
t=n/i;
}
pi=pi*4;
printf("%10.6f\n",pi);
}

该程序为何会进入死循环?谢谢!

[解决办法]
Turbo C太烂了,扔了吧,用Dev-C++支持最新C99标准,不错的~
[解决办法]
楼主在程序
#include <math.h>
main()
{
int i;
float pi,n,t;
for(pi=0,n=1.0,i=1,t=1;fabs(t)>1e-6;)
{
pi+=t;
n=-n;
i+=2;
t=n/i;
}
pi=pi*4;
printf("%10.6f\n",pi);
}

该程序为何会进入死循环?
原因是因为当用tc等16位编译器时,int i的范围是16位的-32768~32767,unsigned is 0~65536,而你的精度要达到1e-6,i的值就要出现溢出,如果你把i声明为long int,则不会出现这个问题,用vc或者devc++因为都是32位的编译器,int默认为32位,所以不会出现这个错误的。

读书人网 >C语言

热点推荐