第三十四课 用循环累加 【项目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;
}

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




(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;
}

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




(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;
}

第三十四课 用循环累加 【项目1-2】_第3张图片



(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】_第4张图片





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


计算
(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;
}

第三十四课 用循环累加 【项目1-2】_第5张图片


(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-2】)