【例10-3】编写一个程序,求分数序列2,3/2,5/3,8/5,13/8...的前50项和。
【分析】
解这类题的关键是找出数据序列的规律,然后通过循环语句累加求和。对于本题,仔细分析分数序列不难发现:序列的后一项分数的分母等于前一项分数的分子,序列后一项分数的分子等于前一项分数的分母与分子之和。根据这个规律,可以得到以下的算法。
float Sum(int n)
{
int i;
float sum = 0,a=2,b=1,tmp;
for(i=0;i<n;i++)
{
sum = sum +a/b;
tmp = a + b;
b = a; /*后一项的分母等于前一项的分子*/
a = tmp; /*后一项的分子等于前一项分母与分子之和*/
}
return sum;
}
函数sum()用于计算该分数序列的前n项和,参数n指定项数。其执行过程如下。
(1)程序首先通过一个循环累加求和。用变量a表示每一项的分子,用变量b表示每一项的分母。按照分数序列每一项的变化规律,每次累加后都执行tmp=a+b;语句,记录分母与分子之和。
(2)然后执行b=a;语句,使得分数序列后一项的分母等于前一项的分子;再执行a=tmp;语句,使得分数序列后一项的分子等于前一项的分母与分子之和。共循环n次,可求出分数序列的前n项和。
(3)最后返回累加后的结果sum。
下面给出完整的测试程序,程序清单10-3
#include "stdio.h"
float Sum(int n)
{
int i;
float sum = 0,a=2,b=1,tmp;
for(i=0;i<n;i++)
{
sum = sum +a/b;
tmp = a + b;
b = a; /*后一项的分母等于前一项的分子*/
a = tmp; /*后一项的分子等于前一项分母与分子之和*/
}
return sum;
}
main()
{
printf("2+3/2+5/3+...=%f",Sum(50));
getche();
}
本程序的运行结果如下图所示