这道题虽简单但一直出问题。。问题在于。。。两层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;
}
浙公网安备 33010602011771号