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

【项目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  ——这个应该会

  1. //用for循环完毕,其它循环自行完毕
  2. #include <stdio.h>
  3. int main( )
  4. {
  5. int sum=0,i;
  6. for(i=1; i<=20; ++i)
  7. sum+=i;
  8. printf("%f\n", sum);
  9. return 0;
  10. }

(2)1+1/2+1/3+…+1/20  ——分数的累加,注意两个整型相除,商也为整型。而显然求和结果应该是小数

  1. //用for循环完毕,其它循环自行完毕
  2. #include <stdio.h>
  3. int main( )
  4. {
  5. int i;
  6. double sum=0; //注意结果将为小数
  7. for(i=1; i<=20; ++i)
  8. sum=sum+1.0/i; //注意是1.0/i,而不能是1/i
  9. printf("%f\n", sum);
  10. return 0;
  11. }

(3)1/2+2/3+3/4+…+19/20  ——分子不全是1了,该找找规律了。也不是从1開始加了

  1. #include <stdio.h>
  2. int main( )
  3. {
  4. int i;
  5. double sum=0;
  6. for(i=2; i<=20; ++i)
  7. sum=sum+(double)(i-1)/i; //注意是(double)(i-1)/i;,而不能是(i-1)/i
  8. printf("%f\n", sum);
  9. return 0;
  10. }

(4)1/2-2/3+3/4-…+19/20   ——要累加的值一正一负倒腾。用pow(-1,i)是个效率非常低的做法,不推荐使用。技巧:专门设置一个变量s表示累加项的符号,取值随着循环,每次乘以-1,从而在+1、-1之间变化,循环加求和的累加要用累加的项(i/(i+1))乘以这个表示符号的s。

  1. #include <stdio.h>
  2. int main( )
  3. {
  4. int i,s=1;
  5. double sum=0;
  6. for(i=2; i<=20; ++i)
  7. {
  8. sum=sum+s*(double)(i-1)/i; //用s乘以被加的分数,考虑了待加项的符号
  9. s=-s; //-是一目的负号运算符,获得s的相反数,以此将循环中在+1和-1间交替
  10. }
  11. printf("%f\n", sum);
  12. return 0;
  13. }

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

(5)1/3-3/5+5/7-7/9…+19/21  ——这是我们的目标。品品这样的思路。一口吃不成胖子,学会一口一口吃饭。用心编程,再大的障碍,也会一个一个地排除。

  1. #include <stdio.h>
  2. int main( )
  3. {
  4. int i,s=1;
  5. double sum=0;
  6. for(i=1; i<=10; ++i) //i和以下加数是相关的
  7. {
  8. sum=sum+s*(double)(2*i-1)/(2*i+1); //按循环变量变化规律。相邻的两个奇数将相除
  9. s=-s;
  10. }
  11. printf("%f\n", sum);
  12. return 0;
  13. }

思考:假设for循环这样写,程序该如何改?

  1. #include <stdio.h>
  2. int main( )
  3. {
  4. int i,s=1;
  5. double sum=0;
  6. for(i=1; i<=19; i+=2)
  7. {
  8. sum=sum+s*____________________; //使相邻的两个奇数将相除
  9. s=-s;
  10. }
  11. printf("%f\n", sum);
  12. return 0;
  13. }

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

  1. 《C++语言基础》实践參考——数组作数据成员

    返回:贺老师课程教学链接 [项目5 - 数组作数据成员]阅读教材P255例8.4.注意到类中的数据成员能够是数组.设计一个工资类(Salary),当中类的数据成员例如以下: class Salary ...

  2. C++实践參考——二进制文件浏览器

    [项目-二进制文件浏览器] (1)做一个相似BinaryViewer的查看二进制文件的程序.输入文件名称后,能够以16进制和ASCII对比的方式列出该文件的内容.能够參考下图: 提示:循环中,一次读入 ...

  3. C++项目參考解答:累加求圆周率

    [项目-累加求圆周率] 用例如以下公式求π的近似值(计算直到最后一项的绝对值小于10−5) π4=1−13+15−17+... [參考解答] #include <iostream> usi ...

  4. 《C语言及程序设计初步》网络课程主页

    题记 CSDN要开在线教育频道,向我发出邀请,看能否开些课程. 我近日一直在关注着翻转课堂,试图在传统课堂中引入新的元素,这须要资源建设的积累.没有时间表的工作,非常难把握. 为CSDN做在线课程,为 ...

  5. C语言及程序设计[套餐]课程主页

    课程链接:http://edu.csdn.net/combo/detail/30,提供全部的视频和课件下载. 三部分的课程主页.提供了为每一课时配套的自測.演示样例下载,以及程序阅读.程序填空.实践项 ...

  6. 【算法】C语言趣味程序设计编程百例精解

    C语言趣味程序设计编程百例精解 C/C++语言经典.实用.趣味程序设计编程百例精解(1)  https://wenku.baidu.com/view/b9f683c08bd63186bcebbc3c. ...

  7. 2014秋C++第5周项目1參考-见识刚開始学习的人常见错误

    课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/a ...

  8. ANTLR4权威參考手冊(一)

    写在前面的话: 此文档是对伟大的Terence Parr的著作<the definitive antlr4 reference>的翻译本.致敬!欢迎转载,请注明原地址,请尊重劳动成果.翻译 ...

  9. 学习笔记之TCP/IP协议分层与OSI參考模型

    1.协议的分层      ISO在制定标准化OSI之前,对网络体系结构相关的问题进行了充分的讨论, 终于提出了作为通信协议设计指标的OSI參考模型.这一模型将通信协议中必要 的功能分成了7层.通过这些 ...

随机推荐

  1. Android开发 之 我的jar包引用方法

    1.在工程上名上右键->Build Path ->Configure Build Path 2.在Libraries选项卡中,选择右侧的Add External JARs,然后选择要导入的 ...

  2. Spring之替换Bean的返回结果,替换Bean的方法实例

    Spring是一个非常强悍的框架+容器,其中有代理模式(动态代理模式)的极致体现.下面是两个比较让人感觉精彩的代码使用,重点关注main方法中的ClassPathXMlApplicationConte ...

  3. iOS真机调试 for Xcode 5

    由于Xcode5的到来,关于iOS软件进行真机调试方面,有了一些变化,苹果在Xcode 5中修改了一些规则,一方面是阻止以往破解的方式进行调试(免证书).另一方面是添加了自动生成证书的功能特性,来加快 ...

  4. js math 对数和指数处理 expm1 log1p

    1.Math.expm1() Math.expm1(x)返回 ex - 1,即Math.exp(x) - 1. Math.expm1(-1) // -0.6321205588285577 Math.e ...

  5. 【FinancialKnowledge】拨备

    一句话: 银行拨备就是银行贷款损失减值准备的俗称,其相当于为承担风险和损失的金融资产计提的准备金 通俗易懂的解释见:https://wallstreetcn.com/articles/3307725

  6. 【Linux】xshell连接中断后就无法连接虚拟机中的Linux

    具体情景是这样的: 在使用Linux的时候,本来一直好好的,突然就断了,我去百度了一番,网上的说法有千万种 有的说:是由于防火墙的问题 有的说:是由于Linux与其他ip冲突造成 ... 说法千万种, ...

  7. test_login

    import unittest,requestsimport ddtfrom BeautifulReport import BeautifulReport as bffrom urllib impor ...

  8. Paper Reading 1 - Playing Atari with Deep Reinforcement Learning

    来源:NIPS 2013 作者:DeepMind 理解基础: 增强学习基本知识 深度学习 特别是卷积神经网络的基本知识 创新点:第一个将深度学习模型与增强学习结合在一起从而成功地直接从高维的输入学习控 ...

  9. host文件配置 了解

    https://blog.csdn.net/CJF_iceKing/article/details/7702694 hosts文件位于" C:\Windows\System32\driver ...

  10. yum安装Apache,Mysql,PHP

    用yum安装Apache,Mysql,PHP.  用yum安装Apache,Mysql,PHP. 2.1安装Apache yum install httpd httpd-devel 安装完成后,用/e ...