学C的师傅进来帮小弟我看一下
学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位,所以不会出现这个错误的。
#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位,所以不会出现这个错误的。