求s=1-1/2+1/3-1/4+…+1/99-1/100.
源程序为:
#include<stdio.h>
void main()
{
float s=0;
int a=1,i;
for(i=1;i<=100;i++)
{
s+=a*1./i;
a=-a;
}
printf(“s=%f\n”,s);
}
void main()
{
float s=0;
int a=1,i;
for(i=1;i<=100;i++)
{
s+=a*1./i;
a=-a;
}
printf(“s=%f\n”,s);
}
请问下,为什么a*1.后面要加个”.”,而且去掉这个”.”运算结果就错误。谢谢
>> 本文固定链接: http://www.vcgood.com/archives/3512
问题很显然。你没有弄明白C语言中“/”的含义——a,b是两个int,a/b的意思是取整,比如1/2结果就是0,5/2结果就是2。回到你的问题,如果不加“.”,1/i就是取整运算,除了1/1的结果是1以外,其它的结果都是0。1.后面要加个”.”就实现了强制转换,将int转换成float,这样就变成了我们通常理解的数学运算。也可以不进行强制转换,程序可以写成下面这样,结果是一样的,你可以试试。
非常感谢解答,谢谢!http://www.vcgood.com/bbs/smileys/smiley1.gif','Image‘);” onmouseover=”this.style.cursor=’hand’” onmouseout=”this.style.cursor=”” src=”http://www.vcgood.com/bbs/smileys/smiley1.gif” height=”20″ width=”20″ border=”0″ alt=”Smile” title=”Smile” />
我运行了:
void main()
{
float s=0,a=1.0;
int i;
for(i=1;i<=100;i++)
{
s+=a/i;
a=-a;
}
printf(“s=%f\n”,s);
}
很简单啊,因为你那个是float 是单精度啊,肯定要1.0啊
楼主改过后的。代码还是报错的!