wxcxoy
wxcxoy
采纳率100%
2015-12-27 10:28

C语言,计算1+1/2-1/3+1/4-1/5+1/6...,要求只使用一个循环

已采纳

C语言,计算1+1/2-1/3+1/4-1/5+1/6...,要求只使用一个循环

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • caozhy 从今以后生命中的每一秒都属于我爱的人 6年前
     float foo(int n)
    {
        float acc = 1.0;
        for (int i = 1; i < n; i++)
        {
            if (i % 2 == 0) acc += 1/float(i); else acc -= 1/float(i);
        }
        return acc;
    }
    
    int main()
    {
        float r = foo(100);
        printf("%f", r);
    }
    

    http://codepad.org/tYlq33fQ

    点赞 4 评论 复制链接分享
  • qq_27183003 ysuwood 6年前
     #include <stdio.h>
    
    void main()
    {
        int i,s=1;
        double sum=1.0;
        for(i=2; ;i++)
        {
            sum+=s*1.0/i;
            s=-s;
            if(1.0/i<0.00001) break;
        }
        printf("%lf\n",sum);
    
    } 
    
    
    点赞 3 评论 复制链接分享
  • qq_32780047 邵琼 6年前

    使用flag标记, 每次奇数时候, 赋值-1

    int n = 20, flag = 1;
    float s = 1;
     for(int i = 2; i <= n; i++) {
      s += 1 / i * flag ;
        flag = - flag;
        }
        prinf("%lf",s);
    

    flag 真的很强大,比如: 冒泡排序中的flag标记

    点赞 1 评论 复制链接分享
  • gds2014 gds2014 6年前

    for(int i=1;i<n;i++)
    sum+=((-1)^i)/i;

    
    
    点赞 1 评论 复制链接分享
  • danielinbiti danielinbiti 6年前
     #include<stdio.h>
    
    int  main()
    {
        int n;
        scanf("%d",&n);
        float result = 1;
        for(int i=2; i<=n; i++)  //把1排除 ,从2开始 
        {
            int flag;
            if(0 == i%2)   //判断是否是偶数 
                flag = 1;
            else 
                flag = -1;
            result += flag * 1.0 / i;   //小数计算要用1.0 
        }
        printf("%f",result);    
    } 
    
    点赞 1 评论 复制链接分享
  • qq_19558705 ITDragon龙 6年前

    我记得程序员考证中的下午一题就有这个,当时是要用一行代码完成,for循环里面的内容:(-1)的(n+1)次方/ n ,然后累加。

    点赞 评论 复制链接分享

相关推荐