《妙趣横生的算法》第10章 算法设计与数据结构面试精粹之常见的算法设计题10-3(question?)

【例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();
}

     本程序的运行结果如下图所示


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值