问题 I: 习题5-10 分数序列求和
题目描述
有如下分数序列
2/1,3/2,5/3,8/5,13/8,21/13…
求出次数列的前20项之和。
请将结果的数据类型定义为double类型。
输入
无
输出
小数点后保留6位小数,末尾输出换行。
样例输入
无
样例输出
32.660261
提示:
用斐波那契数列求出每项的分子和分母,在累加求和即可,注意菲波拉契数列的第一项舍去,求菲波拉契数列的函数套用了上题的函数体,返回值改为了double类型避免强转时精度损失,while 循环时将 --i 改为 i-- 即舍去了数列的第一项,体会其中的差别。
参考代码:
#include<stdio.h>
double FB(int i)
{
double sum = 1, pre_sum = 0, cre_sum;
while(i--)
{
cre_sum = sum;
sum += pre_sum;
pre_sum = cre_sum;
}
return sum;
}
int main()
{
double SUM = 0 ;
int i;
for(i = 1;i <= 20;++i)
{
SUM += FB(i+1)/FB(i);
}
printf("%.6f\n",SUM);
return 0;
}