题目是谭浩强编写的C程序设计中的例题:用Π/4≈1-1/3+1/5-1/7+……公式求Π的近似值,直到发现某一项的绝对值小于10^-6为止(该项不累加)。编写的代码见截图,同样的代码在VC6.0中可以运行出正确确结果,但在TurboC 3.0中却运行不出结果(但无语法错误)请教一下这是为什么?
截图效果不好,看不清楚,我把代码写一下:
#include <stdio.h>
#include <math.h>
void main ()
{int n;
float pi,t,s;
s=1.0,pi=0,t=1,n=1;
while (fabs(t)>=1e-6)
{pi=pi+t;
n=n+2;
s=-s;
t=s/n;
}
pi=pi*4;
printf("pi is %f\n",pi);}
将循环条件改为fabs(t)>=1e-4却可以在Turbo C3.0中运行以上代码得到π的近似值,这是为什么??
改成浮点型的确可以,但是我这段代码没有任何语法错误,却得不到输出的任何结果。
追答不同的编译环境,都有差异,比如VC地下编译,他调用子函数就可以不用声明。但是在TC下就必须先声明后实用。这个是编译软件的差异。这个不属于你考虑的范畴。你的程序是没什么问题。你知道这些就够了。至于为什么TC会有这么多的不允许,因为他是早期的一个编译软件,一般新生学C语言,大都用的是TC,以后搞开发,就不是用的TC了。还有你说的“将循环条件改为fabs(t)>=1e-4”后能运行,是因为他们存储的字符的大小是不同的。我好像记得在TC下一个float和VC下的float类型的字节数是不同的。这个都是后话了,我们没必要搞的那么清楚,你现在只是在学语言的基础,好好弄算法,语法。建议多看看数据结构,熟悉排序算法。······
我认为不需要强制转换,因为定义的s为单精度浮点型,系统会自动将n单精度转化为单精度浮点型,再将相除所得的值赋给t。这段代码没有语法错误,只是执行后没有任何结果。
追答你试试看。
追问我只想知道,为什么这段代码在Turbo C 3.0中运行后,没有任何错误和警告,但是看不到任何结果,在窗口里只看到光标停在第一行,就连原样输出的普通字符也没有。
追答因为类型不匹配,Turbo C 3.0的编译环境造成的。