首页 > C/C++语言 > C/C++基本语法 > 求助,入门级问题,有劳解答,谢谢!
2011
08-03

求助,入门级问题,有劳解答,谢谢!

求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);
}

请问下,为什么a*1.后面要加个”.”,而且去掉这个”.”运算结果就错误。谢谢


求助,入门级问题,有劳解答,谢谢!》有 4 条评论

  1. 佛陀的fans 说:

    问题很显然。你没有弄明白C语言中“/”的含义——a,b是两个int,a/b的意思是取整,比如1/2结果就是0,5/2结果就是2。回到你的问题,如果不加“.”,1/i就是取整运算,除了1/1的结果是1以外,其它的结果都是0。1.后面要加个”.”就实现了强制转换,将int转换成float,这样就变成了我们通常理解的数学运算。也可以不进行强制转换,程序可以写成下面这样,结果是一样的,你可以试试。

    #include<stdio.h>
    void main()
    {
    float s=0,a=1.0;
    for(int i=1;i<=100;i++)
    {
    s+=a/i;
    a=-a;
    }
    printf(“s=%f\n”,s);
    }

  2. 新手儿峥嵘 说:

        非常感谢解答,谢谢!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” />

    我运行了:

    #include<stdio.h>
    void main()
    {
    float s=0,a=1.0;
    for(int i=1;i<=100;i++)
    {
    s+=a/i;
    a=-a;
    }
    printf(“s=%f\n”,s);
    }
    但报了:error C2143: syntax error : missing ‘;’ before ‘type’;error C2143: syntax error : missing ‘;’ before ‘type’;error C2065: ‘i’ : undeclared identifier的错误。
    我后来改了下:
    #include<stdio.h>
    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);
    }
    就没有报错了。可能是 i 不能那样定义。

  3. h4317582 说:

    很简单啊,因为你那个是float 是单精度啊,肯定要1.0啊

  4. ii_9878 说:

    楼主改过后的。代码还是报错的!

留下一个回复