版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章第五章 循环控制循环控制教教 学学 目目 标标u理解循环条件和循环体理解循环条件和循环体u熟练掌握熟练掌握三种循环语句的使用三种循环语句的使用 while 、 do - while 和和 foru掌握掌握break和和continue的使用的使用5.1 5.1 概述概述一般需要使用循环的情况是一般需要使用循环的情况是: : 有重复的动作有重复的动作 ( 循环体循环体 ) 循环次数可以控制循环次数可以控制 ( 循环条件循环条件 ) 例如例如: 1+2+3+.+100实现循环的语句实现循环的语句: : while do-while for循环结构的特点循环结构的特点: 在满足给定条件时,反复
2、执行某个程序段。在满足给定条件时,反复执行某个程序段。循环结构的术语循环结构的术语1. 循环条件循环条件: : 是循环结构中的测试表达式。是循环结构中的测试表达式。 如:如:while ( i=10 )2. 循环体循环体:是在每个循环周期均要执行一次的语是在每个循环周期均要执行一次的语 句。语句可以是任何语句,简单语句、句。语句可以是任何语句,简单语句、 复合语句或者空语句。复合语句或者空语句。 如:如:while语句中用花括号括起来的复合语句语句中用花括号括起来的复合语句3. 循环控制变量循环控制变量: :是在循环条件中是在循环条件中, 控制条件是真控制条件是真 是假的变量。是假的变量。 如
3、:如:while 语句中使用的变量语句中使用的变量 i 循环条件中的表达式是逻辑表达式和关系表达循环条件中的表达式是逻辑表达式和关系表达式,也可以是算数表达式(非式,也可以是算数表达式(非0为真,为真,0为假)为假), 一般表达式中应含有循环控制变量。一般表达式中应含有循环控制变量。 while (3) 表示无限循环表示无限循环while (0) 表示不进入循环体表示不进入循环体 要写出一个正确的循环结构,对控制变量要做要写出一个正确的循环结构,对控制变量要做 三方面工作:三方面工作:控制变量赋初值控制变量赋初值;把控制变量写入正确的循环条件把控制变量写入正确的循环条件;控制变量的更新、调整。
4、控制变量的更新、调整。合法合法 不合理不合理注意:注意:例例5.1 用用 while 语句求语句求 1+2+3+.+100 5.3 while语句,语句,用来实现用来实现“当型当型”循环循环 一般格式一般格式: while ( (表达式表达式) ) 语句语句 当表达式为真时当表达式为真时( (非非0 0值值),),执行执行whilewhile语句的内嵌语句语句的内嵌语句sum=sum+i;i=i+1;核心算法核心算法 循环体循环体while (i=100) i=1; sum=0;printf(“%dn,sum);#include void main() int i=1,sum=0; while
5、 (i=100) sum=sum+i; i+; printf(“%d”,sum); 如果循环体有一个以如果循环体有一个以上的语句,则必须用上的语句,则必须用 构成复合语句构成复合语句; ; 要有修改循环变量的要有修改循环变量的语句。语句。(接上)例(接上)例5.1 用用while语句求语句求1+2+3+.+100 完整程序如下:完整程序如下: 5.4 do-while语句,用来实现语句,用来实现“直到型直到型”循环循环 例例5.2 用用do-while语句求语句求1+2+100的值的值 void main() int i=0, sum=0; do sum=sum+i; i+; while (i
6、=1e-6) pi=pi+s/n; n=n+2; s=-s; pi=pi*4; printf(pi=%10.6fn,pi); 死循环死循环 !void main() int s; float n, t, pi; t=1;pi=0; n=1; s=1; while (fabs(t)=1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi);while 和和 do-while 的比较的比较 表达表达式式 while的下一条语句的下一条语句表达表达式式循环体语句循环体语句 while 是先判别条件,再决定是否循环;是先判别条件
7、,再决定是否循环; do-while 是先循环一次,然后再根据循环的结是先循环一次,然后再根据循环的结果决定是否继续循环。果决定是否继续循环。FTFT循环体语句循环体语句循环体语句循环体语句while的下一条语句的下一条语句do-while的下一条语句的下一条语句5.5 5.5 for 语句语句for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3 3)语句)语句循环变量赋初值循环变量赋初值循环条件循环条件循环变量增量循环变量增量循环变量赋初值循环变量赋初值执行循环体中的语句执行循环体中的语句循环变量的增量计算循环变量的增量计算NY循环条件?循环条件? for (表达式表达式1;表
8、达式;表达式2;表达式;表达式3) 语句语句i 1100循环初值循环初值: i=1循环条件循环条件: i=100循环增量循环增量: i=1+1 循环体:循环体:sum=sum+i; 想一想想一想: 循环变量的初值循环变量的初值? 循环条件循环条件? 循环变量的增量循环变量的增量? 例例5.4 5.4 用用forfor求求1+2+3+4+1+2+3+4+100 +100 的值的值分析:分析:void main() int i,sum; sum=0; for(i=1;i=100;i+) sum=sum+i; printf(“&d”,sum);;1, 1, 2, 3, 5, 8, 13, f1 f2
9、 fn f1 f2 fn f1 f2 fn 1,1,2,3,5,8,13,21,. 的前的前2020个数。个数。 F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2分析:分析:例例5.5 求求Fibnacci数列数列核心语句核心语句 f1=1; f2=1;fn = f1 + f2;f1 = f2;f2 = fn;设设i为循环控制变量为循环控制变量,用用for循环循环问:循环初值?问:循环初值?循环条件?循环条件?循环增量?循环增量?循环体?循环体?设设i为循环控制变量为循环控制变量,用用for循环循环循环初值:循环初值:i=3循环条件:循环条件:i=20循环增量:循环增量:i
10、+循环体:循环体:f1 = 1;f2 = 1;printf (%6d%6d, f1, f2 ); /*输出头两项输出头两项*/for (i = 3; i = 20; i+) /*循环输出后循环输出后20项项*/ f n= f1 + f2; /*计算新项计算新项*/ printf(%6d, fn); if ( i%5 = 0 ) printf(n); f1 = f2; /*更新更新f1和和f2*/ f2 = fn; while语句和语句和for语句都是在循环前,先判断语句都是在循环前,先判断条件,再进入循环体,可互换使用:条件,再进入循环体,可互换使用:while 和和 for 语句的相互转换语
11、句的相互转换表达式表达式1 1;while ( 表达式表达式2 2 ) 循环体语句循环体语句 表达式表达式3 3; for ( 表达式表达式1 1; 表达式表达式2 2; 表达式表达式3 3 ) 循环体语句循环体语句 break 语句语句:从循环体里退出从循环体里退出,中止循环。中止循环。While (exp1) 语句语句1 if (exp2) break; 语句语句2 当循环有多个出口时当循环有多个出口时,要注意区分结束条件。要注意区分结束条件。exp1exp2语句语句1循环体循环体语句语句2TTFF出口出口1 1出口出口2 2 continue 语句语句: 跳过跳过continue后面的后
12、面的语句,继续下一次循环。语句,继续下一次循环。while (exp1) 语句语句1 if (exp2) continue; 语句语句2 exp2exp1语句语句1语句语句2T循环体循环体FTF出口出口 / /* *把把100100200200之间不能被之间不能被3 3整除的数输出整除的数输出* */ /void main() int n; for (n=100; n100) printf(%f,area); 思考:思考:break break 还是还是 continue ?continue ?break;例例5.4 5.4 判断判断m m是否素数是否素数定义:定义: 除了除了1和自身和自身m
13、外外,不能被其它数整除;不能被其它数整除;分析:首先排除分析:首先排除m的数,设其它数为的数,设其它数为i, i 的取值区间为的取值区间为 2, m-1 ,那么那么如果如果m不能被该区间上的任何一个数整除,不能被该区间上的任何一个数整除, 即对每个即对每个i, m%i 都不为都不为0, 则则m是素数是素数;只要找到一个只要找到一个i, 使使m%i为为0, 则则m肯定不是素数肯定不是素数. 另外,另外,m不可能被大于不可能被大于 m/2 的数整除或的数整除或 的数整除的数整除,i 可取值区间:可取值区间: 2, m-1 、 2, m/2 、 2, mm 核心程序段:核心程序段: for (i =
14、 2; i m/2) printf(yesn) else printf(non”); m %2 %3 %4 %(m-1)不是素数不是素数 | =0 =0 =0是素数是素数 & !=0 !=0 !=0void main() int i, m; printf(Enter a number: ); scanf (%d, &m); for ( i = 2; i m/2 ) printf(%d is a prime number! n, m); else printf(No!n); Enter a number: 9NoEnter a number: 1111 is a prime number!巧妙之
15、处巧妙之处:充分利用了充分利用了循环的二个出口的结束条件。循环的二个出口的结束条件。 一个循环的循环体中套有另一个循环叫循一个循环的循环体中套有另一个循环叫循环嵌套环嵌套, ,这种嵌套过程可以一直重复下去。这种嵌套过程可以一直重复下去。 一个循环外面包围一层循环称为一个循环外面包围一层循环称为二重循环二重循环。一个循环外面包围二层循环称为一个循环外面包围二层循环称为三重循环三重循环。一个循环外面包围多层循环称为一个循环外面包围多层循环称为多重循环多重循环。 while、do-while、for可以互相嵌套自由组合。可以互相嵌套自由组合。 5.6 循环的嵌套循环的嵌套 理解二重循环理解二重循环v
16、oid main() int i,j; for (i=1;i=5;i+) /外循环开始外循环开始 printf(“n i is now %dn”,i); for (j=1;j=4;j+) /内循环开始内循环开始 printf(“j= %d”,j); /内循环结束内循环结束 /外循环结束外循环结束 printf(“n”); Sample run: i is now 1 j = 1 j = 2 j = 3 j = 4 i is now 2 j = 1 j = 2 j = 3 j = 4 i is now 3 j = 1 j = 2 j = 3 j = 4 i is now 4 j = 1 j =
17、2 j = 3 j = 4 i is now 5 j = 1 j = 2 j = 3 j = 4 设我们需要得到这样的结果:设我们需要得到这样的结果: Sample run: i is now 1 j = 1 i is now 2 j = 1 j = 2 i is now 3 j = 1 j = 2 j = 3 i is now 4 j = 1 j = 2 j = 3 j = 4 怎么改程序?怎么改程序?void main() int i,j; for (i=1; i = 5 ; i+) /外循环开始外循环开始 printf(“n i is now %dn”,i); for (j=1; j =
18、 4 ; j+) /内循环开始内循环开始 printf(“j= %d”,j); /内循环结束内循环结束 /外循环结束外循环结束 printf(“n”);i4 例例5.5 5.5 用求用求1!+2!+100!1!+2!+100!的值的值分析:分析:1,先求,先求 i! 内层循环内层循环 2, 再求和再求和 外层循环外层循环求和求和 :sum=0;for(i = 1; i =100; i+) 求求i!item; sum = sum + item; 求求i!item:item = 1; for ( j = 1; j = i; j+) item = item * j; sum=0;for(i = 0;
19、 i 100; i+) item = 1; for ( j = 1; j = i; j+) item = item * j; sum = sum + item; #include int main() int i, j;double item, sum; / item 存放阶乘存放阶乘sum = 0; for ( i = 1; i = 100; i+ ) item = 1; / 每次求阶乘都从每次求阶乘都从1开始开始 for ( j = 1; j = i; j+ ) / 内层循环算出内层循环算出 item = i! item = item * j; sum = sum + item; prin
20、tf(1! + 2! + 3! + + 100! = %en, sum);分析嵌套循环的执行过程分析嵌套循环的执行过程for(i = 1; i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; 外层循环变量外层循环变量 i 每变换一个值每变换一个值,内层循环变量内层循环变量 j 变化一个轮次;变化一个轮次; 内外层循环变量名不能相同内外层循环变量名不能相同,分别用分别用 i 和和 j。思考思考: :求求1! + 1!*2! + + 1!*2!*100! 用几重循环?用几重循环? sum=
21、0; 例例 汽车里程表上的读数是汽车里程表上的读数是9585995859,7 7小时小时之后里程表的读数是一个对称数之后里程表的读数是一个对称数(最大是(最大是5 5位数),问汽车的速度(是一个位数),问汽车的速度(是一个整数)。整数)。 分析分析: : 速度速度= =路程路程/ /时间时间 检查所有的在检查所有的在9585995859到到9999999999之间的对称之间的对称数,如果它与数,如果它与9585995859的差能被的差能被7 7整除,则整除,则商是速度。商是速度。(可有多种解法)(可有多种解法)void main() int i,a,b,c,e,d; float f,g; i=
22、95860; while (i=99999 ) a=i/10000; b=(i-a*10000)/1000; c=(i-a*10000-b*1000)/100; d=(i-a*10000-b*1000-c*100)/10; e=i-a*10000-b*1000-c*100-d*10; if (a=e) & (b=d) & (i-95859)%7=0) ) printf(The speed is %dn,(i-95859)/7); i+; /该程序需要循环该程序需要循环99999-95859次次/ / 第一种方法,直接列出第一种方法,直接列出95860999999586099999间的数,求出间
23、的数,求出个位、十位个位、十位、百位百位、千位和千位和万位,判是否为对称数和速万位,判是否为对称数和速度度= =路程路程/ /时间是整数。时间是整数。void main() int i,distance,a,b,c,d,e; for (i=1;i99999void main() int i,j,distance; float speed; for(i=6;i=9;i+) for (j=0;j=9;j+) distance=90000+i*1000+j*100+i*10+9; if (distance-95859)%7=0) printf(The speed is %dn,(distance-9
24、5859)/7); /该程序需要循环该程序需要循环(9-6+1)*10次次/方法三方法三, ,利用数字的对称性利用数字的对称性958596909 例例 统计选票。现有选票如下统计选票。现有选票如下: : 3,1,2,1,1,3,3,2,1,2,3,3,2,1,1, 3,1,2,1,1,3,3,2,1,2,3,3,2,1,1, 3,2,0,1,4,-1, 3,2,0,1,4,-1, -1 -1是结束标志。设是结束标志。设1 1选李选李, 2, 2选张,选张,3 3选王,选王, 0 0和和4 4为废票,谁会当选?为废票,谁会当选?解题思路解题思路1.1.每当我们读入一张选票,只有每当我们读入一张选
25、票,只有5 5种情况,种情况, 将它们加到相应的人选上;将它们加到相应的人选上;2.-12.-1结束循环;结束循环;3.case3.case语句作为开关。语句作为开关。 int vote,li,zhang,wang, invalid; li=0; zhang=0; wang=0; invalid=0; scanf(%d,&vote); while (vote!=-1) switch (vote) case 1: li+; break; case 2: zhang+; break; case 3: wang+; break; case 0: case 4: invalid+; break; de
26、fault: break; scanf(%d,&vote); printf(Li%2d,zhang%2d,wang%2d,invalid%2d, li,zhang,wang,invalid);核心程序段核心程序段1.1.输入输入5050个字符数字个字符数字, ,而不是整数;而不是整数;char num;2.502.50个字符的输入和个字符的输入和5050个数字的输入有区别:个数字的输入有区别: 字符可以连续输入字符可以连续输入5050个个: : 009764146589 009764146589. 数字输入必须是用空格数字输入必须是用空格,TAB,TAB键或回车隔开键或回车隔开: : 0 0
27、9 7 6 4 1 4 6 5 8 9 0 0 9 7 6 4 1 4 6 5 8 9 3. 3. 将字符变成数字后判断奇偶将字符变成数字后判断奇偶。 i=num-0; 字符数字的字符数字的asciiascii码码:30 31 32 33 34 35 30 31 32 33 34 35 36 37 38 3936 37 38 394.4.怎么判奇偶?奇怎么判奇偶?奇i%2!=0 i%2!=0 偶偶i%2=0i%2=0练习练习1: 1: 输入输入5050个个0-90-9的字符数字,计算数的字符数字,计算数字串中有多少个奇数,偶数和零字串中有多少个奇数,偶数和零 。解题要点:解题要点:void main() int i, n1,n2,n0; /n0为为0,n1为奇数为奇数,n2为偶数为偶数 char num; int number; n1=0;n2=0; n0=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防校园欺凌主题班会 班主任专用
- 2026农业热点面试题及答案
- 2026屏障修护面试题及答案
- 2026青海选调生遴选面试题及答案
- 2026热点事件面试题目及答案
- 2026省考德安公安面试题目及答案
- 2026食品设计面试题库及答案
- 中国传统文化传承与创新途径探讨及实践真题
- 高二语文必修三模拟考试试题及答案
- 幼儿园编外教师模拟考试试题及答案
- 2025-2026学年八年级语文下学期期末模拟卷及答案
- 湖南省永州市2025-2026学年高一下学期期末考试数学自编试卷(人教A版)(原卷版)
- 2026贵州毕节黔西市粮油购销有限公司面向社会公开招聘工作人员3人笔试备考试题及答案详解
- 个人所得税申报代理授权书范本
- 2025年广东省广州市中考数学试卷(含答案解析)
- 2026太原化学工业集团有限公司所属企业校园招聘笔试参考题库及答案解析
- 2025年全国通信专业技术人员职业水平考试(通信专业实务互联网技术)(高、中级)综合试题及答案
- 2026年二级造价工程师之土建建设工程计量与计价实务模拟试题含答案详解(巩固)
- 护理安全护航:输血操作的规范与风险控制
- 火电厂技术监督工作制度
- 2026专业技术人员继续教育人工智能赋能制造业高质量发展试题及答案
评论
0/150
提交评论