这个程序好像有bug,按道理来说第一次循环时j是负数,那么第一此循环结束后sum的值应该小于1,但是结果不是

问题遇到的现象和发生背景

计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和

问题相关代码,请勿粘贴截图
# include<stdio.h>
int main()
{
    int i,j,N;
    j=-1;
    double sum=1.0;
    scanf("%d",&N);
    for(i=2;i<=N;i++){
        sum+=j*i/(2i-1);
        j*=-1;
    }
    printf("%.3f\n",sum);
    return 0;
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

sum+=j*i/(2*i-1); 这句,首先等号右边的计算都是整数,所以是会整除。
可以这样修改sum+=j*i/(2.0*i-1)

代码逻辑看着没什么问题
第9行 应该写成2*i 代码中不能像数学那样直接省略符号写的 改一下应该就正确了

img

这样改就好了!

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

有用请采纳!谢谢!

你打印下每次循环里面的每个值,不就一眼看出来吗

没有问题,是大于零,sum初值为1.0,-2/3没有比-1小。

数据类型问题,sum+=ji/(2i-1), j和i都是int行,第一次循环,j = -1, i = 2 , j * i / (2i - 1) = -2 / 3 =0.改一下就行了:

sum+=double(j)*i/(2*i-1);