C语言计算数列1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + …的前n项之和

#include<stdio.h>
int main()
{
long n;
while (scanf("%ld", &n) != -1)
{
double s = 0.0;
int i, a = 1;
for (i = 1; i <= 2 * n - 1; i += 2)
{
if (((i + 1) / 2) % 2 == 1)
s += 1.0 / i;
else
s -= 1.0 / i;
}
printf("%.5f", s);
}
return 0;
}
为什么是wrong answer

手边没有电脑,没法调试。代码逻辑看起来没什么问题,应该是对的。就是你这样用scanf不太好。标准输入始终都会有一个换行符,可能会导致输入的问题。
建议你加个getchar可以解决这个问题。
另外就是你的逻辑,感觉有点难理解,建议改为for(i=1;i<=n;i++)
if就可以写成i%2
你觉得呢?追问

但是提交OJ就是显示wrong answer ,不知道错在哪里

追答

你截图给我看看吧

追问

提交就是result显示wrong answer

追答

我猜测有可能是你运算符优先级问题。你在for和if条件判断里左右两边加上括号试一试

追问

我这样写还是错了
for (i = 1; i <= (2 * n - 1); i += 2)
if ((((i + 1) / 2) % 2) == 1)

追答

你的标准答案是什么啊?我刚才在机器上跑了一下你的代码,然后用计算器验算了一下,没什么问题啊。会不会是答案四舍五入的问题呢?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-10

程序没什么问题。1、退出程序的条件设置有误。2、正负号改得太麻烦。

#include <stdio.h>
int main()
{
long n;
scanf("%ld",&n);
while(n>1)
{
double i=1,s=0,d=1;
for(i=1;i<=2*n-1;i+=2)
{s+=d/i;d=-d;}
printf("%.5f\n", s);
scanf("%ld",&n);
}
return 0;
}

追问

条件设置错在哪里?我试了下你的代码会超过输出限制

第2个回答  2017-10-10
#include <stdio.h>
#include <stdlib.h>
int main(){
double result=0;
double s=1;
int count=1;
do{
if(count%2==1)
{
result+=1/s;
s+=2;
count++;
}
else
{
result-=1/s;
s+=2;
count++;
}
}while(s <= 101);
printf("1-1/3+1/5-1/7+1/9-1/11+·····+1/101=%f\n", result);
system("pause");
return 1;
}本回答被网友采纳
第3个回答  2017-10-10
结果好像没错啊。
相似回答