




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、5.15.1 程序中需要用循环结构程序中需要用循环结构5.25.2 用用whilewhile语句和语句和do-whiledo-while语句实现循环语句实现循环5.35.3 用用for for 语句实现循环语句实现循环 5.45.4 循环的嵌套循环的嵌套5.55.5 用用breakbreak语句和语句和continuecontinue语句改变循环状态语句改变循环状态5.65.6 几种循环的比较几种循环的比较5.75.7 程序举例程序举例5.85.8 提高部分提高部分什么是循环?为什么要使用循环?1001nyn问题1:问题2:分数相加后除以课数 在许多问题中需要用到循环控制。循环结构就是用来处理
2、需要重复处理的问题的,所以又称重复结构。它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。 循环分为两种:无休止循环和有终止循环 构成有效循环的条件:循环体和循环结束条件while语句用来实现“当型”循环结构一般形式:一般形式: while (表达式) 语句 当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行循环体,即内嵌语句。1001nn例题例题 5.1求1+2+3+100的和解题思路解题思路(1)开始时使sum的值为0,被加数i第一次取值为1。开始进入循环结构。(2)判别“i100”条件是否满足,由于i小于100,因此“i100”的值为真。所以应当执
3、行其下面矩形框中的操作。(3)执行sum=sum+i,此时sum的值变为1了,然后使i的值加1,i的值变为2了,这是为下一次加2作准备。流程返回菱形框。(4)再次检查“i100”条件是否满足,由于i的值为2,小于100,因此“i100”的值仍为真,所以应执行其下面矩形框中的操作。(5)执行sum=sum+i,由于sum的值已变为1,i的值已变为2,因此执行sum=sum+i后sum的值变为3。再使i的值加1,i的值变为3。流程再返回菱形框。(6)再次检查“i100”条件是否满足,如此反复执行矩形框中的操作,直到i的值变成了100,把i加到sum中,然后i又加1变成101了。当再次返回菱形框检查
4、“i100”条件时,由于I已是101,大于100,“i100” 的值为假,不再执行矩形框中的操作,循环结构结束。1001nn(1)循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现.(2)在循环体中应有使循环趋向于结束的语句。运行结果:运行结果: 5050编写程序编写程序 do-while语句的特点:先执行循环体,然后判断循环条件是否成立。执行过程:先执行一次指定的循环体语句,然后判别“表达式”,当表达式的值为非0(“真”) 时,返回重新执行循环体语句,如此反复,直到表达式的值等于0 (“假”)为止,此时循环结束。while语句和do-while语句的关系:同一个问题既可以用
5、while循环处理,也可以用do-while循环来处理。二者是可以互相转换的。一般形式: do 循环体语句 while(表达式);运行结果:运行结果: 50501001nn可以看到,结果和例5.1完全相同。编写程序编写程序1001nn例题例题 5.3 募集慈善基金10000元,有若干人捐款,每输入一个人的捐款数后,计算机就输出当时的捐款总和。当某一次输入捐款数后,总和达到或超过10000元时,即宣告结束,输出最后的累加值。解题思路解题思路解此题的思路是设计一个循环结构,在其中输入捐款数,求出累加值,然后检查此时的累加值是否达到或超过预定值,如果达到了,就结束循环操作。运行结果:运行结果:100
6、0 (输入捐款额输入捐款额)1850 1500 2600 2500 1200 sun= 10650.001001nn设计循环结构,要考虑两个问题:一是循环体,二是循环结束条件。注意while循环中判断的条件是循环继续的条件,而不是结束条件。编写程序编写程序 C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。 一般形式: for(表达式1;表达式2;表达式3) 语句 forfor语句的执行过程:语句的执行过程: (1) 先求解表达式1。 (2) 求解表达式2,若其值为真(值为非0),则执 行f
7、or语句中指定的内嵌语句,然后执行下 面第(3)步。若为假(值为0),则结束循环, 转到第(5)步。 (3) 求解表达式3。 (4) 转回上面第(2)步骤继续执行。 (5) 循环结束,执行for语句下面的一个语句。 for语句最简单的形式:for(循环变量赋初值;循环条件;循环变量增值) 例如: for(i=1;i=100;i+) sum=sum+i;相当于: i=1; while(i=100) sum=sum+i;i+; 国王的小麦。相传古代印度国王舍罕要褒赏他的聪明能干的宰相达依尔(国际象棋的发明者),国王问他要什么?达依尔回答说:“国王只要在国际象棋的棋盘第1个格子中放1粒麦子,第2个格
8、子中放2粒麦子,第3个格子中放4粒麦子,以后按此比例每一格加一倍,一直放到第64格(国际象棋的棋盘8*8=64格),我感恩不尽,其他什么都不要了。”国王想,这有多少!还不容易!让人扛来一袋小麦,但不到一会儿全用没了,再来一袋很快又用完了。结果全印度的粮食全部用完还不够。国王纳闷,怎样也算不清这笔账。现在我们用计算机来算一下。1F例题例题 5.41001nn解题思路解题思路麦子的总粒数是:分别计算出每一格的麦子粒数,把它们加起来,就得到总粒数。据估算,1m3 小麦约有1.42*108 粒,可以计算出小麦的体积。可以用for语句实现循环。6332222211001nn运行结果:运行结果:total
9、=1.844674e+019volnme=1.299066e+011编写程序编写程序 变量i用来控制循环的次数,开始时i=1,在完成第1次循环后,i的值加1变为2,由于264,所以执行第2次循环,依此类推,当i变到63时,执行最后一次循环,i再变为64,由于i不再小于64了,不再执行循环。接着计算体积,输出结果。NS图及流程图见Page122图5.7 人口增长预测。据2005年末统计,我国人口为130756万人,如果人口的年增长率为1%,请计算到哪一年中国总人口超过15亿。1F例题例题 5.5解题思路解题思路计算人口增长和计算存款利息的公式是相同的。假设原来人口为 ,则一年后的人口:其中r是年
10、增长率。用此公式依次计算出每年的人口,每算出一年的人口后就检查一下是否达到或超过15亿?如果未达到或超过15亿,就再计算下一年的人口,直到某一年的人口达到或超过15亿为止。)1(0rpp1001nn编写程序编写程序运行结果:运行结果:year=2019,p=1.503007e+009注意区分变量注意区分变量p p在不同阶段中的不同含义。在不同阶段中的不同含义。 y代表年份。循环体中只有一个语句,用来计算从2006年开始的各年的人口数。在for语句中设定的循环条件是p15亿,当某一年的p达到或超过15亿,就停止循环,输出年份和当年的人口数。由于在最后结束循环前y又加了1,因此在输出年份时应输出y
11、-1的值而不是y的值。 一个变量开始时有一初值,通过一定的运算,可以推算出一个新的值,再从这个新值又推出下一个新值,即不断用计算出的新值去取代原有的值,这种方法称为迭代。上面的计算公式p*(1+r)称为迭代公式。迭代算法一般是用循环来实现的。迭代是一种常用的算法,用人工实现很麻烦,而用计算机实现却十分方便。1F 一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。 三种循环(while循环、do-while循环和for循环)可以互相嵌套。 下面几种都是合法的形式:(1) while( ) (2) do (3) for(;) while( ) do
12、for(;) while( ); while( );(4) while( ) (5) for(;) (6) do do while( ) for(;) while( ) while( ) break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。 一般形式: break;break语句不能用于循环语句和switch语句之外的任何其他语句中。 统计各班级的学生的平均成绩。已知各班人数不等,但都不超过30人。编一个程序能处理人数不等的各班学生的平均成绩。1F例题例题 5.6解题思路解题思路 如果各班人数相同,问题比较简单,只需用一个for语句控制即可: for(i=1;i
13、Z| cz) /* 请和程序笫7行比较 */ c=c-26;因为如果所有小写字毋都满足“cZ”的条件,从而也都执行“c=c-26;”语句,这就会出错。因此必须限制其范围为“cZ & c=Z+4”,即原字母为W到Z。只有符合此条件才减26,否则,不应按此规律转换。 凡是能用while循环处理,都能用dowhile循环处理。dowhile循环结构可以转换成while循环结构。 在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。1001nn运行结果:运行结果
14、:1 sum=55 再运行一次:再运行一次: 11 sum=0运行结果:运行结果:1 sum=55 再运行一次:再运行一次: 11 sum=11当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相同。 for语句相当灵活,形式变化多样: (1) for语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。注意省略表达式1时,其后的分号不能省略。如: for(;i=100;i+) sum=sum+i; 执行时,跳过“求解表达式1”这一步,其他不变。(2) 如果表达式2省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式2始
15、终为真。如: for(i=1; ;i+) sum=sum+i; 表达式1是一个赋值表达式,表达式2空缺。它相当于: i=1; while(1) sum=sum+1;i+;(3) 表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。如: for(i=1;i=100;) sum=sum+i;i+; 在上面的for语句中只有表达式1和表达式2,而没有表达式3。i+的操作不放在for语句的表达式3的位置处,而作为循环体的一部分,效果是一样的,都能使循环正常结束。(4) 可以省略表达式1和表达式3,只有表达式2,即只给循环条件。如: for(;i=100;) while(i=100) su
16、m=sum+i; 相当于 sum=sum+i; i+; i+; 在这种情况下,完全等同于while语句。可见for语句比while语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。5.8.2 for语句的各种形式语句的各种形式(5) 3个表达式都可省略,如: for(; ;) 语句语句相当于 while(1) 语句语句 即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体。(6) 表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如: for (sum=0;i=100;i+) sum=sum+i;表达式3也可以是与
17、循环控制无关的任意表达式。表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如: for(sum=0,i=1;i=100;i+) sum=sum+i;或 for(i=0,j=100;i=j;i+,j-) k=i+j;表达式1和表达式3都是逗号表达式,各包含两个赋值表达式,即同时设两个初值,使两个变量增值。 在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为其中最右边的表达式的值。如: for(i=1;i=100;i+,i+) sum=sum+i;相当于 for(i=1;i=100;i=i+2) sum=sum+i;(7) 表达式一般是关系表达式(如i=100)或逻辑表达式(如ab & xy),但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。 for(i=0;(c=getchar()!=n;i+=c); 在表达式2中先从终端接收一个字符赋给c,然后判断此赋值表达式的值是否不等于n(换行符),如果不等于n,就执行循环体。此for语句的循环体为空语句,把本来要在循环体内处理的内容放在表达式3中,作用是一样的。可见for语句功能强,可以在表达式中完成本来应在循环体内完成的操作。 for( ;(c=getchar()!=n;) printf(%c,c); for语句中只有表达式2,而无表达式1和表达式3。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宁波幼儿师范高等专科学校《汽车车身电控与技术》2023-2024学年第二学期期末试卷
- 山西能源学院《当代建筑史》2023-2024学年第二学期期末试卷
- 西北农林科技大学《基础法语听力(2)》2023-2024学年第二学期期末试卷
- 合肥科技职业学院《地质与地球科学》2023-2024学年第二学期期末试卷
- 曲靖师范学院《游戏创作基础与实践》2023-2024学年第二学期期末试卷
- 江苏城乡建设职业学院《教师语言训练》2023-2024学年第二学期期末试卷
- 昆明工业职业技术学院《自动控制系统课程设计》2023-2024学年第二学期期末试卷
- 山东旅游职业学院《检测技术实验》2023-2024学年第二学期期末试卷
- 西安工程大学《数据分析与应用》2023-2024学年第二学期期末试卷
- 许昌学院《工业机器人基础操作与编程实训》2023-2024学年第二学期期末试卷
- 2023年陕西普通高中学业水平考试通用技术试题
- 快递员(初级)理论培训考试题库600题(含答案)
- 中西医执业医师《第二单元》模拟试题卷一(精选)
- 二年级看图写话讲评
- 审计业务约定书
- 酒店OTA宾客服务操作流程
- 人教版高中化学选修二测试题及答案解析
- LY/T 2692-2016榉树育苗技术规程
- GB/T 5357-1998内六角花形扳手
- GB/T 31765-2015高密度纤维板
- GB/T 23129-2008家用咖啡机性能测试方法
评论
0/150
提交评论