第三十四课 用循环累加 【项目1-2】


第三十四课 用循环累加




项目一 【分数的累加】

编程序,输出1/3-3/5+5/7-7/9…+19/21的结果
提示:如果直接解决上面的问题有困难,可以设计一条“由易到难”的路线,逐渐解决其中要解决的问题,让自己的思路明朗起来。
(1)1+2+...+20  ——这个应该会
(2)1+1/2+1/3+…+1/20  ——分数的累加,注意两个整型相除,商也为整型,而显然求和结果应该是小数
(3)1/2+2/3+3/4+…+19/20  ——分子不全是1了,找找规律,稍加改动就好了
(4)1/2-2/3+3/4-…+19/20   ——要累加的值一正一负倒腾,用pow(-1,i)是个效率很低的做法,不推荐使用。技巧:专门设置一个变量s表示累加项的符号,取值随着循环,每次乘以-1,从而在+1、-1之间变化,循环加求和的累加要用累加的项(i/(i+1))乘以这个表示符号的s。
(5)1/3-3/5+5/7-7/9…+19/21  ——这是我们的目标。品品这种思路,一口吃不成胖子,学会一口一口吃饭。用心编程,再大的障碍,也会一个一个地排除。


代码及运行结果:

(1)

#include<stdio.h>
int main()
{
    int i=1,sum=0;
    while (i<=20)
    {
        sum=sum+i;
        i++;
    }
    printf("sum=%d\n",sum);
    return 0;
}







(2)

#include<stdio.h>
int main()
{
    int i=1;
    double sum=0.0,t;
    while (i<=20)
    {
        t=1.0/i;
        sum=sum+t;
        i++;
    }
    printf("%f",sum);
    return 0;
}






(3)


#include<stdio.h>
int main()
{
    int i=2;
    double t,sum=0.0;
    while (i<=20)
    {
        t=(double)(i-1)/i;
        sum=sum+t;
        i++;
    }
    printf("sum=%f\n",sum);
    return 0;
}





(4)

#include<stdio.h>
int main()
{
    int i=2;
    double sum=0.0,t,sign=1.0;
    while (i<=20)
    {
       t=sign*(double)(i-1)/i;
       sum=sum+t;
       sign=-sign;
       i++;
    }
    printf("%f",sum);
    return 0;
}





(5)

#include <stdio.h>
int main()
{
    int i=3;
    double sum=0.0,t,sign=1.0;
    while (i<=22)
    {
        t=sign*(double)(i-2)/i;
        sum=sum+t;
        sign=-sign;
        i+=2;
    }
    printf("%f",sum);
    return 0;
}







项目二 【麻烦的累加涨功夫】


计算
(1)   
(2)
关注效率,要求用单重循环完成,第一个式子的计算不能用求幂函数pow()


代码及运行结果:


(1)

#include<stdio.h>
int main()
{
    int i=1,t=1;
    double sign=-1.0,sum=1.0;
    while (i<=8)
    {
        t=t*2;
        sum=sum+sign*(1.0/t);
        sign=-sign;
        i++;
    }
    printf("sum=%f\n",sum);
    return 0;
}




(2)

#include<stdio.h>
int main()
{
    int i=1,t=1;
    double sum=0.0,sign=1.0;
    while(i<=9)
    {
        t=t*i;
        sum=sum+sign*(1.0/t);
        sign=-sign;
        i++;
    }
    printf("sum=%f\n",sum);
    return 0;
}







知识点与心得:

     从简单到复杂,一步一步来可以减少难度,一开始挺难琢磨的,理解一些是一些,主要的重点是中间那一个模块的设定,一个巧的解法省好多事。























100

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值