学习C语言时碰到的一个问题

题目是谭浩强编写的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中运行以上代码得到π的近似值,这是为什么??

类型不匹配,建议定义n的时候,把它也定义成浮点型(float)!就OK了追问

改成浮点型的确可以,但是我这段代码没有任何语法错误,却得不到输出的任何结果。

追答

不同的编译环境,都有差异,比如VC地下编译,他调用子函数就可以不用声明。但是在TC下就必须先声明后实用。这个是编译软件的差异。这个不属于你考虑的范畴。你的程序是没什么问题。你知道这些就够了。至于为什么TC会有这么多的不允许,因为他是早期的一个编译软件,一般新生学C语言,大都用的是TC,以后搞开发,就不是用的TC了。还有你说的“将循环条件改为fabs(t)>=1e-4”后能运行,是因为他们存储的字符的大小是不同的。我好像记得在TC下一个float和VC下的float类型的字节数是不同的。这个都是后话了,我们没必要搞的那么清楚,你现在只是在学语言的基础,好好弄算法,语法。建议多看看数据结构,熟悉排序算法。······

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-03
把n进行强制类型转化一下。追问

我认为不需要强制转换,因为定义的s为单精度浮点型,系统会自动将n单精度转化为单精度浮点型,再将相除所得的值赋给t。这段代码没有语法错误,只是执行后没有任何结果。

追答

你试试看。

追问

我只想知道,为什么这段代码在Turbo C 3.0中运行后,没有任何错误和警告,但是看不到任何结果,在窗口里只看到光标停在第一行,就连原样输出的普通字符也没有。

追答

因为类型不匹配,Turbo C 3.0的编译环境造成的。

第2个回答  2011-09-03
这个程序求得的就是π的近似值。并且,每个编译软件的设定是不一样的,你把printf中的/f改为/lf试试
第3个回答  2011-09-04
好像在win-tc也是只有光标.......
顺便问下,我们新生是用那个软件好入门?VC6.0 Turbo C3.0 win-tc
第4个回答  2011-09-11
#include <stdio.h>
#include <stdlib.h>
long a = 10000,b = 0, c = 2800, d = 0,e = 0,f[2801],g = 0;
void main()
{
for(b = 0;b < c;b ++)
f[b] = a / 5;
for(c = 2800;c != 0;c -= 14)
{
d = 0;
g = c * 2;
for(b = c;b > 0;)
{
d += f[b] * a;
g --;
f[b] = d % g;
d = d/g;
g --;
b --;
if(b > 1)
d *= b;

}
printf("%.4d", e + d / a);
e = d % a;
}
}
相似回答