本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
20
结尾无空行
输出样例:
32.66
结尾无空行
#include<stdio.h>
int main(){
int n,i;
double numerator,denominator;
/*当n的值较大的时,分子和分母会超过int型的范围,所以需要定义double型*/
double sum,item,flag;
sum=0;
scanf("%d",&n); //接受函数(用户输入),别忘了打&!!!,好多次都犯这个错误!
if(n>=1){
denominator=1;
numerator=2;
item=numerator/denominator;
sum=sum+item;
if(n>=2){
for(i = 2;i <= n;i++){
flag=numerator; //引用一个变量储存前一项的分子
numerator=denominator+flag; //分子=前一项分子与分母之和
denominator=flag; //分母=前一项分子
item=1.0*numerator/denominator;//需要乘以1.0转化为double型,不然是以整数型输出
sum=sum+item;
}
}
}
printf("%.2f",sum);
return 0;
}
这道提最容易犯的错误是:较大n!
自己在博客查了一下,结合自己的理解,应该是当n的值较大时,分子和分母会超出int型的范围,而double的范围会很大。