求奇数分之一序列前N项和
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + … 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
输入样例:
23
输出样例:
sum = 2.549541
正确写法:
#include<stdio.h>
int main(void)
{
int i, d, n;
double sum = 0;
scanf("%d", &n);
i=1;
d=1;
for(i=1; i<=n; i++){
sum=sum+1.0/d;
d=d+2;
}
printf("sum = %.6f", sum);
return 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 = %f",sum);
return 0;
}
一开始,我的想法就是这个错误案例。按照题目的思路来想,感觉没毛病。
然后仔细读了一遍题目,要求的是:前N项之和 !!!
问题来了,我刚才是是前N项么
例如我这个错误式子,当我输入的 n = 3
的时候,输出的结果是 sum = 1 + 1/3
,
按照的题目的意思,输出前 3
项,应该是sum = 1 + 1/3 + 1/5
;
所以解决问题的办法就是有两种:
一、对我写的错误案例进行改进:把 for
循环 里面的条件 i<=n
改为 i<=2*n
;
二、新加入一个变量,如上面写的正确答案,变量 i
就是对项数的计数。