为什么与答案差一点点

img


为什么与答案有一点点的差别,但是编程又没有问题,真的是让人头大

题目要求是n个奇数的倒数和,你这个代码,只求了n/2个奇数的倒数和啊

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

}
 
 
 

人家提示你用双精度,你为什么非要单精度
float全改成double
%f改成%lf

前n项和,不是到n为止

img

#include<stdio.h>

int main()
{
 int i,n;double sum;
scanf("%d",&n) ;sum=0;
for(i=1;i<= 2 *n-1;i++){
if(i%2!=0)
sum=sum+1.0/i;     
}
printf( "sum = %lf" , sum);
return 0;

}

 

你的代码没错,这道题也没错。但是这道题说的不明白所以让你理解错了。
你理解的是1/1一直加到1/23,这样的话确实是2.22。
但是题目说的是奇数倒数的前23项,也就是1/1一直加到1/47

因为题目你就理解错了,题目让你求的是奇数分之一的和,并且项数的个数是 n 个。而你求的是 n 以内的奇数分支一的和。


一段网上现成的代码,看了后你就理解是什么意思了:

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

按照这个思路改改你的代码即可。


望采纳。