用C写1-1/2+1/3-1/4+1/5.....+1/99-1/100.我写了一个代码,可是运算结果不对,实在是查不出来哪错了,求解

#include<stdio.h>
void main()
{
int i,n;float s,s1,s2;
i=1;
n=0;
s1=0;
s2=0;
while(n<=100)
{ n=n+1;
if(n%2==1)
s1=s1+i/n;
else
s2=s2+i/n;

}
s=s1-s2;
printf("s is=%f\n",s);
}
在根据以下大侠的帮助下,可以出结果了,但是又有两种情况,当n初始设为0,n=n+1放在while一开始的时候,算出的答案有偏差;当n初始设为1时,n=n+1放在while循环最后的时候就是正确答案了。这是为什么呢

i/n
改成:
1.0*i/n;

n=n+1放在while一开始处,你最后一项加的是1/101,因为n=100的时候,还要再while里面运行一次。

n=1,将n=n+1放在最后的话,n=100那一项,加完后,n=101,就不循环了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-09
注意:i=1.0是实数,要不然s2始终为0.
#include<stdio.h>
main()
{int n;
float i,s,s1,s2;
i=1.0;
n=1;
s1=0;
s2=0;
while(n<=100)
{
if(n%2==1)
s1=s1+i/n;
else
s2=s2+i/n;
n=n+1;
}
s=s1-s2;
printf("s is=%f\n",s);
}追问

又有两种情况了,当n初始设为0,n=n+1放在while一开始的时候,算出的答案有偏差;当n初始设为1时,n=n+1放在while循环最后的时候就是正确答案了。这是为什么呢

第2个回答  2011-04-09
i换成1.0就可以了。如果把i定义为int 类型的话,使用除法,系统会默认取正数的。
#include<stdio.h>
void main()
{
int n;
float s,s1,s2;
n=0;
s1=0;
s2=0;
while(n<=100)
{ n=n+1;
if(n%2==1)
s1=s1+1.0/n;
else
s2=s2+1.0/n;

}
s=s1-s2;
printf("s is=%f\n",s);
}
这样就可以了
第3个回答  2011-04-09
i和n都定义为了int
默认的C++会将i/n按照int类型来计算.
你可以 把i定义为float.也可以像 wacs5说的那样.强制类型转换.
第4个回答  2011-04-09
int i,n改为float i,n;
相似回答