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

C语言,计算1+1/2-1/3+1/4-1/5+1/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

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

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


 #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);

} 

使用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标记

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