【PTA】练习2-14 求奇数分之一序列前N项和

本题要求编写程序,计算序列 1 + 1/3 + 1/5 + … 的前N项之和。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:

23

输出样例:

sum = 2.549541

首先上两端代码

#include 

int main(){
	int N,i;
	double sum;
	scanf("%d", &N);
	if(N > 0){
		for(i = 1.0; i <= N; i += 2){
			sum += 1.0/i;
		}
	}
	printf("sum = %.6f\n", sum);
	return 0;
}

23
sum = 2.224353


#include
int main()
{
	int i, d, n;
	double sum;
	scanf("%d", &n);
	sum=0;
	i=1;
	d=1;
	for(i=1; i<=n; i++){
		sum=sum+1.0/d;
		d=d+2;//两端代码区别之处--------------------------------------------------******
	}
	printf("sum = %.6f", sum);
	return 0;
}

23
sum = 2.549541


很显然第一段代码输出的错误的结果
对比两端代码发现,求1+1/3+1/5+…第一段代码只加到了1/N—1/23
但是本题要求的是N = 23的时候,即应该加到1/(2N-1)—1/45
本题是对题目理解的错误

你可能感兴趣的:(PTA)