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

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

【项目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;
}
时间: 2024-09-15 07:35:21

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

《C++语言基础》实践参考——分数类中的运算符重载

返回:贺老师课程教学链接 [项目3-分数类中的运算符重载] (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简).比较(6种关系)的运算.可以在第4周分数类代码的基础上开始工作. class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 }; //重载函数的实现及用于测试的main()函数 [参考解答] #include <iostream> #inclu

2014秋C++第9周项目2参考-分数的累加

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703.课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.   [项目2:分数的累加]编程序,输出1/3-3/5+5/7-7/9--19/21的结果 提示:关注效率,要求用单重循环完成,累加项目一正一负交替,不能用pow(-1,i)(pow()是C++中求幂的函数,但效率低).处理一正一负交替的技巧是:专门设置一个变量s表示累加项的符号,初值为1,每次

C++第10周项目2参考——分数的累加

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目2-分数的累加]编程序,输出1/3-3/5+5/7-7/9-+19/21的结果提示:如果直接解决上面的问题有困难,可以设计一条"由易到难"的路线,逐渐解决其中要解决的问题,让自己的思路明朗起来.(1)1+2+...+20  --这个应该会 //用for循环完成,其他循环自行完成 #include <iostream> using namespa

《C语言及程序设计》实践参考——麻烦的累加涨功夫

返回:贺老师课程教学链接  项目要求 [项目2:麻烦的累加涨功夫]计算(1)   (2)关注效率,要求用单重循环完成,第一个式子的计算不能用求幂函数pow() [参考解答] (1) #include <stdio.h> int main( ) { int i,m=1; //m表示2的幂,1为2的0次幂,与循环相符 double sum=0, s=1.0; //s直接取double型,保证除的结果是浮点型 for(i=0; i<=8; ++i) { sum=sum+s/m; m*=2; /

《C++语言基础》实践参考—— 链表类

返回:贺老师课程教学链接  项目要求 [项目 - 链表类]动态链表也是程序设计中的一种非常有用的数据结构.可以说,是否能够理解有关操作的原理,决定了你是否有资格称为"科班"出身.在后续的专业基础课中,相关的内容还会从不同的角度,反复地认识,反复地实践.不过,在现阶段多些体验,也是很有必要的了.(1)阅读下面的程序,回顾一下动态链表,阅读程序过程中,请用笔画一画形成链表的过程中指针值的变化. #include <iostream> using namespace std; s

C++实践参考——分数类的雏形

[项目-分数类的雏形] C++中提供了多种基本的数据类型.实际上,这些远不能满足我们的需求,如复数,再如分数.我们可以自定义类支持这些数据类型. 本任务将设计一个简单的分数类,完成对分数的几个运算.一则巩固基于对象编程的方法,二则也为运算符重载等积累些感性认识. 分数类的声明为: class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu=0,int de=1); //构造函数,初始化用

C++实践参考——分数类中的运算符重载

[项目1-分数类中的运算符重载] (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简).比较(6种关系)的运算. class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 }; //重载函数的实现及用于测试的main()函数 (2)在(1)的基础上,实现分数类中的对象和整型数的四则运算.分数类中的对象可以和整型数进行四则运算,且运算符合交换律.例如:CFra

《C++语言基础》实践参考——旱冰场造价

返回:贺老师课程教学链接 [项目1 - 旱冰场造价] 有一个圆形的旱冰场地,场地内抹水泥,造价为每平方米M元,围栏用木条围成,每米造价N元,输入旱冰场半径,用程序计算出其造价. 一级提示: 先定义类,确定其数据成员和成员函数.在这里要定义的旱冰场类,实际我们只关心其面积和周长,根据面积计算场地内抹水泥的造价,根据周长计算围栏的造价.有了类的定义,在main函数中定义该类对象,调用成员函数即可以完成求解.二级提示: 实际上,对于旱冰场,我们只关心它就是一个圆.这就是设计中抓住了本质.于是,设计一个

《C++语言基础》实践参考——指向学生类的指针

返回:贺老师课程教学链接 [项目4-指向学生类的指针] 设计一个学生类Student,数据成员包括学号(num)和成绩(score),成员函数根据需要自行设计(建议配备需要的set.get函数,以及必要的输入或输出,给出的代码中也可以找到需要成员函数的线索).在main函数中,要做到: 建立一个对象数组,通过初始化,设置5个学生的数据,要求: 用指针指向数组首元素,输出第1.3.5个学生的信息: 设计一个函数int max(Student *arr);,用指向对象的指针作函数参数,在max函数中