想知道为什么是部分正确

img

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

img

测试图:

img


一些小的细节处理上的错误,两种方式改正如下:
①调整一下运算顺序:

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

②调整一下运算语句+顺序

#include<stdio.h>
#include<math.h>

int main(){
    int i,n;
    int den=1;
    int flag=1;
    double sum=0,item=0;
    scanf("%d",&n);
    
    for(i=1;i<=n;i++)
    {
        flag=pow(-1,i-1)*i;//分子
        den=2*i;  //分母(此时为偶数)
        den-=1;  //通过观察发现分母实际上为奇数 所以减去1即可
        item=flag*1.0/den; //分数 
        sum=sum+item;//求和
    
    }
    printf("%.3f\n",sum);
    return 0;
    
}

希望对题主有所帮助,可以的话,帮忙点个采纳!

题主的想法复杂了点,修改如下,供参考:

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