




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第04章 循环,上一章学习了如何比较数据项,并根据其结果进行判断。我们可以根据程序的输入选择计算机如何做出反应。本章将介绍如何重复执行一个语句块,直到满足某个条件为止,这称为循环。 语句块的执行次数可以简单地用一个计数器来控制,语句块重复执行指定的次数,或者还可以更复杂一些,重复执行一个语句块,直到满足某个条件为止,例如用户输入quit。后者可以编写上一章的计算器示例,使计算过程重复需要的次数,而不必使用goto语句 。,4.1 循环,如前所述,使一系列语句重复执行指定的次数,或重复执行它们,直到满足某个条件为止的编程机制称为循环。循环和比较数据项是基本的编程工具。能比较数据值和重复执行语句块
2、后,就可以合并这两个功能,控制语句块的执行次数。例如,可以重复执行一个操作,直到比较的两个数据项相同为止。当它们相同时,就可以执行另一个操作 。,4.2 递增和递减运算符,递增运算符(+)和递减运算符( )会将存储在整数变量中的值递增或递减1。假设定义一个整数变量number,它的当前值是6。可以用下面的语句给它加1: +number; /* Increase the value by 1 */,4.3 for循环,使用for循环的基本形式可以使语句块重复执行指定的次数。假设要显示110 之间的数字,可以不用编写10条printf()语句,而可以这么写: intcount = 0; for(c
3、ount = 1; count = 10; +count) printf(n%d, count);,4.4 for循环的一般语法,for循环的一般形式如下: for(starting_condition; continuation_condition ; action_per_iteration) Statement; Next_statement; 重复执行的语句由Statement表示。通常这等价于包含在括号中的语句块(一组语句)。,4.5 再谈递增和递减运算符,前面的示例使用了递增运算符,下面深入探讨递增和递减运算符的作用。它们都是一元运算符,只使用一个操作数,用来将存储在整数类型变量中
4、的值加1或减1 。 递增运算符 递增运算符的前置和后置形式 递减运算符,4.5.1 递增运算符,先看看递增运算符。它的形式是+,给所操作的变量加l。例如,假如变量的类型是int,下面的3条语句有相同的结果: count = count + 1; count += 1; +count;,4.5.2 递增运算符的前置和后置形式,前面将+运算符放在变量前面,这叫做前置形式。这个运算符也可以写在变量的后面,这称为后置形式。在表达式中使用前置和后置形式的效果大不相同。如果在表达式中编写的是count+,则变量count的值在使用之后才递增。这看起来有点复杂。修改前面的例子: total = 6 + co
5、unt+;,4.5.3 递减运算符,递减运算符的操作和递增运算符完全相同。它的形式是 ,作用是给它操作的变量减1。它的使用方式和+完全相同。例如,假设变量count是int类型,下面3条语句会有相同的结果: count = count - 1; count -= 1; -count;,4.6 再论for循环,有了+和 的更多了解,下面看看另一个使用循环的例子。 试试看:数字汇总 这个程序比用*号画盒子要有用、有趣得多。假定想知道某条街上所有门牌号的总和是多少,这需要读入一个整数值,再使用for循环汇总所有的整数,从1加到输入的那个数值为止。 修改for循环变量 没有参数的for循环 循环内的b
6、reak语句 使用for循环限制输入 生成伪随机整数 再谈循环控制选项 浮点类型的循环控制变量,4.6.1 修改for循环变量,当然,递增循环控制变量不是只能加l。可以用任意值改变循环控制变量,正数或负数均可。例如,可以逆向计算前n个整数的总和。,4.6.2 没有参数的for循环,如前所述,不必在for循环语句内放置任何参数。for循环的最简洁形式如下: for(;) statement; 和前面一样,这里的statement也可以是放在括号中的语句块,且通常是语句块。因为没有循环继续条件、初始条件以及循环计数器,因此循环将永不停止。除非希望计算机总是什么都不做,否则statement必须包含
7、退出循环的方式。要停止循环,循环体必须包含两条语句:判断结束循环的条件是否已满足的语句,以及终止当前循环迭代并继续执行循环后面语句的语句。,4.6.3 循环内的break语句,第3章在switch语句里使用过break语句。它的作用是终止switch块中代码的执行,并继续执行跟在switch后的第一行语句。break语句在循环体内的作用和switch基本相同。,4.6.4 使用for循环限制输入,可以使用for循环限制用户输入的次数。循环的每次迭代都允许输入一个值。当循环完成指定的重复次数后,便结束循环,不允许再输入数据。下面编写一个简单的程序来演示,这个程序实现了一个数字猜谜游戏。,4.6.
8、5 生成伪随机整数,在前一个例子中,如果程序在每次执行时,可以生成要猜测的数字,该数字每次都不同。为此,可以使用在头文件中声明的函数rand(): int chosen = 0; chosen = rand(); /* Set to a random integer */,4.6.6 再谈循环控制选项,前面介绍了如何用+和 运算符递增或递减循环计数器。可以对循环计数器递增或递减任意数值。,4.6.7 浮点类型的循环控制变量,循环控制变量也可以是一个浮点类型的变量。下面的循环汇总从1/11/10的分数: double sum = 0.0; for(double x = 1.0 ; x11 ; x
9、 += 1.0) sum += 1.0/x;,4. 7 while循环,for循环就介绍到这里。前面举了许多for循环的例子,现在探讨另一类循环:while循环。在while循环中,只要某个逻辑表达式等于true,就重复执行一组语句。这可以表示为: While this condition is true Keep on doing this,4. 8 嵌套循环,有时需要将一个循环放在另一个循环里面。例如计算某条街上每间房子的居住 人数。这需要进入每间房子,计算每间房子的居住人数。统计所有的房子是一个外部循环,在外部循环的每次迭代中,都要使用一个内部循环来计算居住人数。,4. 9 嵌套循环和g
10、oto语句,前面学习了如何在一个循环内嵌套另一个循环,其实循环还可以嵌套任意多层。例如: for(int i = 0 ; i10 ; +i) for(int j = 0 ; j20 ; +k) /* Loop executed 10 times */ for(int k = 0 ; k30 ; +k) /* Loop executed 10 x20 times */ /* Loop body executed 10 x20 x30 times */ /* Do something useful */ 由i控制的外部循环每次迭代时,都会执行一次由j控制的内部循环。由j控制的循环每次迭代时,都会执
11、行一次由k控制的最内层循环。因此最内层的循环体会执行6 000次。,4. 10 do-while循环,第3种循环类型是do-while。既然已经有for循环和while循环了,为什么还需要这个循环?do-while和这两个循环有非常微妙的区别。它是在循环结束时测试循环是否继续,所以这个循环的语句或语句块至少会执行一次。 while循环是在循环开始处进行测试。所以在任何动作发生之前,先检查表达式 。,4. 11 continue语句,有时不希望结束循环,但要跳过目前的迭代,继续执行下一个迭代。循环体内的continue语句就有这个作用,它可以编写为: continue; 当然,continue是一个关键字,不能将它用于其他目的。,4. 12 设计程序,现在,在一个比较大的编程问题上测试前面学习过的技巧,应用本章和前一章学到的东西。本节还会介绍几个新的标准库函数,它们非常有用 。 问题 分析 解决方案,4.12.1 问题,本节要编写一个简单的Simon游戏,这是一个记忆测试游戏。计算机会在屏幕上将一串数字显示很短的时间。玩家必须在数字消失之前记住他们,然后输入这串数字。每次过关后,计算机会显示更长的一串数字,让玩家继续玩下去。玩家应尽可能使这个过程重复更多的次数。,4. 12.2 分析,程序必须产生一连串09的整数,使它们在屏幕上显示1秒
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- “资本下乡”背景下宗族型村庄的非制度性排斥研究-基于山东Z村的实地调查
- 高浓度含锰废水膜电解工艺研究
- 6S现场管理培训
- 校园安全情景剧
- 颅脑护理课件
- 预防食品安全教育课件
- 预防暴雨安全知识课件
- 游戏攻略:幻世录Ⅱ修改教程
- 幼儿园急救培训分享会
- 项链说课课件中职
- W -S-T 431-2023 护理分级标准(正式版)
- JBT 7043-2006 液压轴向柱塞泵
- 【文创产品的价格决策及成本管理的案例探析16000字(论文)】
- 易制毒化学品单位安全管理机构图
- 陕西省幼儿教师通识性知识大赛考试题库(含答案)
- 超级辩论赛辩论比赛流程主题课件
- 脊柱转移性肿瘤临床研究现状与进展课件
- 银行贸易融资业务介绍
- 跑步运动知识讲座
- IATF16949质量体系审核检查表2019
- 发电机应急预案处理方案
评论
0/150
提交评论