《C语言及程序设计》实践参考——分数的累加

简介: 返回:贺老师课程教学链接  项目要求【项目1:分数的累加】编程序,输出1/3-3/5+5/7-7/9…+19/21的结果提示:如果直接解决上面的问题有困难,可以设计一条“由易到难”的路线,逐渐解决其中要解决的问题,让自己的思路明朗起来。(1)1+2+...+20  ——这个应该会(2)1+1/2+1/3+…+1/20  ——分数的累加,注意两个整型相除,商也为整型,而显然求和结果应该是

返回:贺老师课程教学链接  项目要求



【项目1:分数的累加】
编程序,输出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)1+2+...+20  ——这个应该会

//用for循环完成,其他循环自行完成
#include <stdio.h>
int main( )
{
    int sum=0,i;
    for(i=1; i<=20; ++i)
        sum+=i;
    printf("%f\n", sum);
    return 0;
}


(2)1+1/2+1/3+…+1/20  ——分数的累加,注意两个整型相除,商也为整型,而显然求和结果应该是小数
//用for循环完成,其他循环自行完成
#include <stdio.h>
int main( )
{
    int i;
    double sum=0;  //注意结果将为小数
    for(i=1; i<=20; ++i)
        sum=sum+1.0/i; //注意是1.0/i,而不能是1/i
    printf("%f\n", sum);
    return 0;
}


(3)1/2+2/3+3/4+…+19/20  ——分子不全是1了,该找找规律了,也不是从1开始加了
#include <stdio.h>
int main( )
{
    int i;
    double sum=0;
    for(i=2; i<=20; ++i)
        sum=sum+(double)(i-1)/i; //注意是(double)(i-1)/i;,而不能是(i-1)/i
    printf("%f\n", sum);
    return 0;
}


(4)1/2-2/3+3/4-…+19/20   ——要累加的值一正一负倒腾,用pow(-1,i)是个效率很低的做法,不推荐使用。技巧:专门设置一个变量s表示累加项的符号,取值随着循环,每次乘以-1,从而在+1、-1之间变化,循环加求和的累加要用累加的项(i/(i+1))乘以这个表示符号的s。
#include <stdio.h>
int main( )
{
    int i,s=1;
    double sum=0;
    for(i=2; i<=20; ++i)
    {
        sum=sum+s*(double)(i-1)/i; //用s乘以被加的分数,考虑了待加项的符号
        s=-s;    //-是一目的负号运算符,获得s的相反数,以此将循环中在+1和-1间交替
    }
    printf("%f\n", sum);
    return 0;
}


思考:将循环体内的两条语句换一下会怎样?一定要换,需要进行怎样的调整?


(5)1/3-3/5+5/7-7/9…+19/21  ——这是我们的目标。品品这种思路,一口吃不成胖子,学会一口一口吃饭。用心编程,再大的障碍,也会一个一个地排除。
#include <stdio.h>
int main( )
{
    int i,s=1;
    double sum=0;
    for(i=1; i<=10; ++i) //i和下面加数是相关的
    {
        sum=sum+s*(double)(2*i-1)/(2*i+1); //按循环变量变化规律,相邻的两个奇数将相除
        s=-s;
    }
    printf("%f\n", sum);
    return 0;
}




思考:如果for循环这样写,程序该如何改?
#include <stdio.h>
int main( )
{
    int i,s=1;
    double sum=0;
    for(i=1; i<=19; i+=2)
    {
        sum=sum+s*____________________; //使相邻的两个奇数将相除
        s=-s;
    }
    printf("%f\n", sum);
    return 0;
}



目录
相关文章
|
30天前
|
存储 C语言
C语言顺序结构:基础与实践
C语言,作为一种广泛使用的编程语言,其程序结构可以分为三种基本类型:顺序结构、选择结构和循环结构。在这篇文章中,我们将重点讨论顺序结构的概念、特点以及如何在C语言中实现顺序结构的程序设计。
35 1
|
1月前
|
C语言
C语言模块化程序设计
C语言模块化程序设计
21 0
|
27天前
|
存储 文件存储 C语言
《C语言程序设计》课程设计 -- 火车票票务管理系统
《C语言程序设计》课程设计 -- 火车票票务管理系统
23 1
|
29天前
|
存储 C语言
C语言顺序结构程序设计
C语言顺序结构程序设计
21 0
|
30天前
|
Unix Linux C语言
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
19 0
|
1月前
|
存储 C语言
C语言的顺序程序设计
C语言的顺序程序设计
11 2
|
1月前
|
存储 C语言
C语言的顺序程序设计
C语言的顺序程序设计
14 0
|
1月前
|
C语言
【C语言】用函数实现模块化程序设计
【C语言】用函数实现模块化程序设计
|
9天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
16 0
|
20天前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
23 0