




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四讲:控制结构(二),讲师: 程浩,学习目标:,1. 理解while语句的使用规则和相应程序流 程 2. 理解do-while语句的使用规则和相应程序 流程 3. 理解for语句的使用规则和相应程序流程 4. 熟练应用各种循环语句的组合使用 5. 理解break、continue语句的使用特性以及 应用范畴 6. 了解goto语句的使用方法,学习重点:,各种循环语句的组合使用 break、continue语句的使用特性,学习难点:,for语句的循环嵌套,什么是循环?,循环是程序中重复执行,直到满足指定条件才停止的一段代码,一、 while语句(1),while语句的一般形式: while (条件) 语句; 流程图: while语句的执行过程是:当条件成立时执行循环体中的语句,然后再次判断条件,重复上述过程,直到条件不成立结束循环。while语句的特点是:当一开始条件就不成立时,一次也不执行循环语句。,成立,不成立,一、 while语句(2),例4.1 求1+2+ +100的结果。 第一步, 计算 0+1; 第二步, 计算 (0+1)+2; 第 n 步, 计算 (0+1+n-1)+n; 第100步,计算 (0+1+99)+100; 所以只要定义一个变量s,初值为0,则第 1次循环加1,第n次循环加n,直到第100 次循环加100即可 伪代码算法: 定义s、n存放累计的和以及循环次数 累计和清零s=0; 循环变量赋初值n=1; while (n=100) s=s+n; n=n+1; 输出结果s,n=100,s=s+n; n=n+1;,s=0; n=1;,定义s、n,开始,结束,输出s,成立,不成立,一、 while语句(3),#include void main() int s,n; s=0; n=1; while (n=100) s=s+n; n=n+1; printf(“1+2+3+ .+100=%dn“,s); ,一、 while语句(4),上例程序510行也可以改写如下两种常见形式: 形式一:s=1;n=2; 形式二:s=1;n=1; while (n=100) while (n100) s=s+n; n=n+1; n=n+1; s=s+n; 通过以上三种形式的比较,我们可以看到在循环结构中,初值 (包括循环变量初值和计算结果初值等)与循环条件是相互影 响的,所以为了避免出错,可以通过验算循环结构开始和结束 的运行状态,如上例中代入n=1、n=2以及n=99、n=100, 进一步判断是否符合要求。习惯上,累计求和初值为0、累计求 积初值为1,所以我们推荐例4.1的形式。 在循环结构的设计中,特别需要注意的是:避免死循环。循环 体中必须有改变条件的语句,并且可以使程序执行到某一时刻 不满足这个条件而结束循环。,举一反三:从键盘输入n,求1+2+ +n的结果并输出。,二、 do-while语句(1),do-while语句的一般形式: do 循环体语句 while (条件) ; 流程图: do-while语句的执行过程:执行循环体中的语句,然后判断条件,条件成立再执行循环体;重复上述过程,直到条件不成立时结束循环 do-while语句的特点是:当一开始条件就不成立时,已经执行了一次循环语句。 此外特别注意while(条件)后面的分号不要省。,条件,语句段,成立,不成立,二、 do-while语句(2),例4.2 求1+2+ +100的结果。 算法分析同例4.1。 伪代码算法: 定义s、n存放累计的和以及循环次数 累计和清零s=0; 循环变量赋初值n=1; do s=s+n; n=n+1; while (n=100); 输出结果s;,n=100,s=s+n; n=n+1;,s=0; n=1;,定义s、n,开始,结束,输出s,成立,不成立,二、 do-while语句(3),#include void main() int s,n; s=0; n=1; do s=s+n; n=n+1; while (n=100); printf(“1+2+3+ .+100=%dn“,s); ,n=100,s=s+n; n=n+1;,s=0; n=1;,定义s、n,开始,结束,输出s,成立,不成立,二、 do-while语句(4),#include void main() int s,n; s=0; n=1; do s=s+n; n=n+1; while (n=100); printf(“1+2+3+ .+100=%dn“,s); ,#include void main() int s,n; s=0; n=1; while (n=100) s=s+n; n=n+1; printf(“1+2+3+ .+100=%dn“,s); ,二、 do-while语句(5),通过例4.1和4.2可以看到用while语句可以转换为do-while语句,二者唯一不同的是:当一开始条件就不成立时,while语句不执行循环体,而do-while语句执行一次循环体。 程序一:void main() 程序二:void main() int s=0,n=101; int s=0,n=101; while (n=100) do s=s+n;n=n+1; s=s+n;n=n+1; printf (“n=%d,s=%d”,n,s); while (n=100); printf (“n=%d,s=%d”,n,s); 执行结果: 执行结果: n=101,s=0 n=102,s=101,举一反三:求2+4+ +100的结果并输出,三、 for语句(1),for语句的一般形式: for (表达式1;条件;表达式2) 语句 for语句的执行过程是:第一步执行表达式1,第二步判断条件,第三步当条件成立时执行循环体中的语句和表达式2;然后重复第二、三步直到条件不成立结束循环。 for语句可以改写成while语句形式: 表达式1; while (条件) 语句 表达式2; ,条件,语句,成立,不成立,表达式1,表达式2,三、 for语句(2),例4.3 求1+2+ +100的结果 算法分析同例4.1。 伪代码算法: 定义s、n存放累计的和以及循环次数; for (s=0,n=1;n=100;n=n+1) s=s+n; 输出结果s;,n=100,s=s+n;,定义s、n,开始,结束,输出s,成立,不成立,s=0; n=1;,n=n+1;,三、 for语句(3),#include void main() int s,n; for(s=0,n=1;n=100;n=n+1) s=s+n; printf(“1+2+3+ .+100=%dn“,s); ,n=100,s=s+n;,定义s、n,开始,结束,输出s,成立,不成立,s=0; n=1;,n=n+1;,三、 for语句(4),for 语句中的表达式1,一般用于给循环前的某些变量赋初值的(超过一个语句用逗号间隔),如果在循环语句前已经赋过初值,表达式1可以省略,但是其后的分号不能省略。所以上例for语句可以改写如下: s=0;n=1; for ( ; n=100; n=n+1) s=s+n; 表达式2可以是用于修改循环一次后循环变量,确保循环在某一时刻可以结束,如果循环体语句中已经包含控制循环次数的内容,表达式2可以省略,但是表达式2前面的分号不能省略。上例for语句可以变换如下: for (s=0,n=1; n=100 ; ) s=s+n; n=n+1;,三、 for语句(5),表达式1和表达式2也可以是与循环无关的量,甚至条件也可 以省略(如果条件省略,循环体中需要有跳出循环的语句,这 部分内容我们将在下一节中介绍)。但是一般来说,for语句写 成如下形式方便阅读和理解: for (循环变量赋初值;循环条件;循环变量增值) 循环体语句 以上我们介绍了C语言常用的循环语句while语句、do-while语句和for语句。一般情况下三种循环语句可以互相替换,只有当一开始条件就不成立时,while语句和for语句不执行循环体,而do-while语句执行一次循环体。这三种循环语句中for语句最灵活,不仅循环变量的初始化可以放在表达式1中,而且循环变量的增值甚至整个循环体都可以放入表达式2中,所以在C语言中for语句最为常用。 举一反三:求100+99+ +1的结果并输出。,猴子吃桃,猴子吃桃:有一天,一只猴子摘了一些桃子。它吃掉了一半,又吃了一个, 第二天也是这样,吃了所有桃子的一半,又多吃了一个. 到了 第十天,小猴子一看,只有1个桃子了。 求最早的时候,小猴子摘了几个桃子?,1534个桃子,四、 break和continue语句(1),break语句除了可以用在switch语句中,还可以用在循环体中。在循环体中遇见break语句,立即结束循环,跳到循环体外,执行循环结构后面的语句。一般形式为: break; 在循环体中break语句常与if语句搭配使用,并且break语句只能用在switch语句和循环语句中。,四、 break和continue语句(2),例4.4 判断一个数n是否是素数。 如果n不能被2到n-1中的任何一个数整除 n为素数,所以循环让n除以i,i分别等于2 到n-1,如果n不是素数,则2到n-1中至 少存在一个数可以整除n,当i等于第一个 这种数时,除法运算的余数为0,则提前结 束循环,此时i小于n。如果n是素数,则 经过2到n-1之间的除法运算,没有余数 为0的情况,循环由于不满足条件i小于等 于n而结束。 伪代码算法:定义n、i; 输入数n; for (i=2;in;i=i+1) if (n%i= =0) break; if (in) 输出n不是素数 else 输出n为素数。,in,输入n;,定义n,i=2,开始,结束,输出不是素数,不成立,不成立,n%i=0,in,成立,成立,输出是素数,成立,不成立,i=i+1,四、 break和continue语句(2),#include void main() int n,i; scanf(“%d“, ,in,输入n;,定义n,i=2,开始,结束,输出不是素数,不成立,不成立,n%i=0,in,成立,成立,输出是素数,成立,不成立,i=i+1,四、break和continue语句(3),写出下列两段循环语句的输出结果: for (k=1;k5;k=k+1) for (k=1;k5;k=k+1) printf(“*n”); if (k= =3) break; printf(“*n”); 在循环体中break语句常与if语句搭配使用,并且break语句只能用在switch语句和循环语句中。,四、break和continue语句(4),continue语句用于结束本次循环,即在循环体中遇见continue语句,则循环体中continue语句后面的语句不执行,接着进行下一次循环的判定。它的一般形式为: continue; continue语句只用于循环结构的内部,一般同if配合使用。,四、break和continue语句(5),例4.5 统计120之间不能被3整除的数的个数并输出这些数。 算法分析: 当n=1时,输出1,计数加1; 当n=2时,输出2,计数加1; 当n=3时,结束本次循环, 转到第4次循环; 当n=4时,输出4,计数加1; 伪代码算法: 定义n、s; for (n=1,s=0;n=20;n=n+1) if (n%3= = 0) continue; printf(“%dt”,n); s=s+1; 输出统计数s;,n=20,n=1,s=0;,定义n、s,开始,结束,输出n,成立,不成立,n%3= =0,s=s+1,成立,不成立,输出统计结果s,n=n+1,四、break和continue语句(6),#include void main() int n,s; for (n=1,s=0;n=20;n=n+1) if (n%3=0) continue; printf(“%dt“,n); s=s+1; printf(“ntotal:%dn“,s); ,n=20,n=1,s=0;,定义n、s,开始,结束,输出n,成立,不成立,n%3= =0,s=s+1,成立,不成立,输出统计结果s,n=n+1,四、break和continue语句(7),continue语句和break语句用在循环体中的作用是不同的。continue语句只取消本次循环的continue语句后面的内容,而break语句终止了整个循环过程。 continue语句和break语句用在循环体中的作用是不同的。continue语句只取消本次循环的continue语句后面的内容,而break语句终止了整个循环过程。如例4.5中如果continue换成break,则输出结果为: 1 2 total:2,五、循环的嵌套(1),一个循环语句的循环体内包含另一个完整的循环语句,称为循环的嵌套。While语句、do-while语句和for语句都可以互相嵌套,甚至可以多层嵌套。 例4.6 输出下列图形: 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9,n 1 2 3 4 5 6 7 8 9,五、循环的嵌套(2),算法分析: 输出共9行,行号变量为n,从1到9,为外循环; 内循环输出1行中各个元素 我们知道: 第一行执行输出1次,输出1 第二行执行输出2次,第1次输出1,第二次输出2; 第n行执行输出n次,第1次输出1,第二次输出2, ,第n次输出n。 所以内循环变量m,执行输出操作从1到n次, 每次输出结果是内循环变量m的值,伪代码算法: 定义m、n; for (n=1;n=9;n=n+1) for (m=1;m=n;m=m+1) printf(“%4d”,m); printf(“n”); ,五、循环的嵌套(3),#include void main() int m,n; for (n=1;n=9;n=n+1) for(m=1;m=n;m=m+1) printf(“%-4d“,m); printf(“n“); ,伪代码算法: 定义m、n; for (n=1;n=9;n=n+1) for (m=1;m=n;m=m+1) printf(“%4d”,m); printf(“n”); ,五、循环的嵌套(4),循环嵌套时注意内循环变量的初始化问题。此外,break只能跳出一层循环(或者一层switch语句结构)。例如: 例4.7 输出3100的所有素数。 伪代码算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职场情绪与压力管理专题培训
- 质量管理系统培训
- 机架人员安全培训教育
- 城市建筑排水设计重点基础知识点
- 办公家具业务培训
- 气球使用协议书
- 2024秋招北森题库数学百题
- 物品转让协议书
- 商业场所租赁扩展协议
- 通风安装维修合同协议
- 第四单元《保护牙齿》活动三《保护牙齿》教案 浙教版综合实践活动二年级上册
- 慢性阻塞性肺疾患
- 2024-2030年中国南美白对虾养殖市场规模分析及发展风险研究报告权威版
- 定期清洗消毒空调及通风设施规章制度
- 林业基础知识考试题库单选题100道及答案解析
- 消防操作员劳动合同模板
- 肩颈刮痧活动方案
- 静脉血栓栓塞症VTE防治质控培训试题
- 人教版小学数学五年级上册课件:7.1扇形统计图的认识
- 《体育心理学》第十一章-运动损伤的心理致因与康复
- 《跨境电商视觉设计》高职 全套教学课件
评论
0/150
提交评论