这道题虽简单但一直出问题。。问题在于。。。两层for循环都用了i做循环变量,但是这两者所代表的意义是不一样的。。所以只要两者的循环变量不一样即可。另外,这道题计算sum时可用递归

double f(int n)
{
if (n == 0)
return 0;
else if (n % 2 == 1)
return f(n - 1) + 1.0 / n;
else
return f(n - 1) - 1.0 / n;
}

也可用条件语句简写

double f(int n)
{
return n ? f(n - 1) + ((n & 1) ? 1.0 : -1.0) / n : 0;
}

#include<stdio.h>
int main()
{
 int n,m,i,j,flag;
 double sum,r;
 scanf("%d",&m);
 if(m==0)
 printf("0.00\n");
    for(i=1;i<=m;i++)
 {
  scanf("%d",&n);
  flag=-1;
  sum=0;
  for(i=1;i<=n;i++)
  {
   if(i%2==0)
   r=1.0*flag/i;
   else r=1.0/i;
   sum+=r;
  }
  printf("%.2f\n",sum);
 }
 return 0;
}

posted on 2012-07-28 20:55  zhtzhl  阅读(192)  评论(0)    收藏  举报