题目要求:输入一个正整数n,输出2/1+3/2+5/3+8/5+.......的前n项和。
提示:该序列从第二项开始,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
分析:把分母,分子的数分别提取出来,分别构成一个新的数列,会发现他们都是斐波那契数列,俗称兔子数列,仅仅只是初值不同。兔子数列的特点是前两项和等于第三项。又从题目已知循环终值是多少。所以利用一次for循环即可实现。
下面是代码实现过程及具体解析。
#include<stdio.h>
int main(void){
int i,n;//定义变量i,以及题目要求输入的正整数。
double sum=0;
double x1=2;//总数列的第一个值。
double c1=0,a1=3,b1=5;//分子数列的第二,第三个值。
double c2=0,a2=2,b2=3;//分母数列的第二,第三个值。
double k;//分数列的项数,我用k来表示
double t1=a1,t2=b1,t3=a2,t4=b2;//缓存两个数列的第二,第三个值。
scanf("%d",&n);
for(i=1;i<=n-3;i++){
c1=a1+b1;
a1=b1;
b1=c1;
c2=a2+b2;
a2=b2;
b2=c2;
k=c1/c2;
sum=sum+k;//总数列从第四项开始求和,剩下的前三项放到后面求。
}
double presum=x1+(t1/t3)+(t2/t4);//利用开头的缓存变量求前面三项和。
sum=sum+presum;//总求和。
printf("s=%.2lf",sum);//输出求和的值。
}