1+1/3+1/5+....的和两种方法下为什么结果不同?

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

 

 23
sum = 2.549541
--------------------------------
Process exited after 2.295 seconds with return value 0
请按任意键继续. .

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

23
sum = 2.224353
--------------------------------
Process exited after 1.858 seconds with return value 0
请按任意键继续. . .
 

N=5的时候,代码一的分母上限是9,二的分母上限是5

for 循环里面的语句不一样好吧,具体看下图,说不清。。。。

主要是你这两个方法中对N的di定义是不一样的。直接举例的话,假设N=2,第一种算的是1+1/3,而第二种只会算一个1。

第一个循环计算了N次,所以值更大;

第二个循环只计算了N/2次,所以就小了很多;

第二个循环结束条件错了。应该是:

for(i=1;i<=N*2-1;i+=2)

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

第一种的循环每次只+1,所以循环执行了N次,

第二种的循环每次+2,循环只执行了N/2次

如有帮助,请采纳一下,谢谢。

肯定是某一种算法有问题了