已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章流程控制,4.1分支语句4.2循环语句4.3其它语句4.4本章要点小结,4.1分支语句,4.1.1if语句的三种形式4.1.2if语句的嵌套4.1.3switch(多分支)语句,4.1.1if语句的三种形式,形式一:,if(表达式)语句序列;,执行过程:,例如:,if(xy)printf(%dn,x);printf(%dn,y);,if(ab,if(4.5)x=a;,if(ab)t=a;a=b;b=t;,问题:abc是否合法?,eg401.c,形式二:,if(表达式)语句序列1;else语句序列2;,执行过程:,例如:,if(ab)x=a;elsex=b;,if(x=0)printf(%.3fn,x);elseprintf(%.3fn,-x),形式三:,if(表达式1)语句序列1;elseif(表达式2)语句序列2;elseif(表达式3)语句序列3;elseif(表达式n)语句序列n;else语句序列n+1;,if(x0)y=1;elseif(x=0)y=0;elsey=-1;,说明:,1、表达式一般为关系表达式或逻辑表达式。但在C语言中它也可以是任意的数值表达式。,if(3)n=1;,if(a)printf(%d,a);,if(n=3-3)x=1;elsex=-1;,4、每个语句序列可以是一个语句也可以是若干个语句,但要构成复合语句。,3、else只能与if配对使用。仅else本身不能单独作为一个语句使用。,if(ab)t=a;a=b;b=t;,if(a+bc,2、每个语句都要以“;”结束,分号是语句的一部分。,4.1.2if语句的嵌套,形式:,if(表达式1)if(表达式2)语句序列2;else语句序列3;elseif(表达式4)语句序列4;else语句序列5;,在if语句的原“语句序列”中又包含一个或多个if语句称为if语句的嵌套。,当然,语句序列2、3、4、5还可以是if语句。,例如:max=(a,b,c),if(a=b)if(a=c)max=a;elsemax=c;elseif(b=c)max=b;elsemax=c;,二义性:,if(表达式1)if(表达式2)语句序列2;else语句序列3;,if(表达式1)if(表达式2)语句序列2;else语句序列3;,if(表达式1)if(表达式2)语句序列2;else语句序列3;,应如何理解?,有两种理解方式:,语言规定:else总是与它前面最近的且未曾配对的if配对。,if(表达式1)if(表达式2)语句序列2;else语句序列3;,if(表达式1)if(表达式2)语句序列2;else语句序列3;,4.1.3switch(多分支)语句,1、格式:switch(表达式)case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式n:语句n;break;default:语句n+1;break;,2、功能:先计算表达式的值,测试该值是否与某常量表达式的值相同。、若有相同者,流程转向其后面的语句执行;、若无相同者,再看有没有default部分:若有default,则执行其后面的语句;若无default,则switch语句什么也不做,流程转向其后继语句。,3、例:读入1到7之间的某个数,输出一个星期中相应的某一天的单词。,eg404.c,4、说明:,、switch语句的执行部分是由若干个case语句和一个可缺省的default语句组成的复合语句,整个语句要用大括号括起来;,、switch后面括号内的表达式可以是整型也可以是字符型或枚举类型;,、每个case后的常量表达式只起语句标号的作用,所以当表达式的值与某一个case后的常量表达式的值相等时,就执行相应的语句,它后面若没有break语句,程序就自动地执行下一个case之后的语句,所以每个case之后通常都有一个break,使流程跳出switch语句;,、各个case的常量表达式的值必须互不相同;,、各个case和default的出现次序是任意的,出现次序不影响执行结果;一般常量表达式按升序(或降序)排列,并将default放在所有case语句之后;,、各个case后的语句可以是多个语句,且不用花括号括起来;,、switch语句允许几种情况执行相同的语句;,case6:case7:printf(“Resetn”);break;,但不能写成:case6,7:printf(“Resetn”);break;,5、例:输入一个年号year和月号month,计算该月有几天,并输出结果。,eg404.c,4.2循环语句,4.2.1while语句4.2.2do-while语句4.2.3for语句4.2.4循环嵌套4.2.5几种循环的比较,4.2.1while语句,1、格式:while(表达式)循环体;,2、功能:首先计算表达式的值,若表达式成立(非0),执行一遍循环体,再判断表达式,若成立再执行循环体当表达式不成立(其值为0)时退出循环,跳转到循环体之后的语句执行。,eg406.c,3、特点:先判断表达式,然后执行循环体。若表达式一开始就不成立,则循环体一次也不执行。,4、注意:(1)、循环部分为多个语句时,必须用大括号构成复合语句;(2)、循环体中应有语句修改控制条件。,5、例:计算sum=1+2+3+100,4.2.2do-while语句,1、格式:do循环体;while(表达式);,2、功能:先执行一遍循环体,再判断表达式,当表达式的值为非0(真)时,返回重新执行循环体;如此反复,直到表达式的值为0(假)时退出循环。,eg407.c,3、特点:先执行循环体,后判断循环条件(表达式)是否成立,即循环体至少执行一次。,4、推荐书写格式:dowhile();,5、例:计算sum=1+2+3+100,对于同一个问题既可以用while语句处理,也可以用do-while语句处理。do-while语句结构可以转换成while结构。,do-while语句流程图可以改写为:,可见,do-while结构是由一个语句加一个while结构构成的。,一般情况下,用while语句和do-while语句处理同一问题时,若二者的循环体一样,则结果也一样。但是如果while后面的表达式一开始就为假(0)时,两种循环的结果是不同的。,例:计算:(分别用while和do-while实现),结论:当while后面的表达式的第一次的值为“真”时,两种循环的结果相同。否则,二者结果不相同(指二者具有相同的循环体的情况)。,eg408.c、eg409.c,4.2.3for语句,1、格式:,for(表达式1;表达式2;表达式3)循环体;,其中:表达式1规定循环控制变量的初始值;表达式2指出循环条件表达式;表达式3修改循环变量的值。,2、功能:先求解表达式1,给循环控制变量赋初值;求解表达式2,若为真(非0),执行循环体;求解表达式3,它改变了表达式2中的某个变量;返回;直到条件为假(0),退出循环。,for语句最易理解的形式:for(循环控制变量赋初值;循环条件;循环变量增值)循环体;,3、例:计算sum=1+2+3+100,eg410.c,for(i=1;i=100;i+)sum=sum+i;,i=1;while(i=100)sum=sum+i;i+;,for语句的功能和执行过程与while相似。在上例中,若把给循环控制变量赋初值的工作放在语句之外,把循环变量的修改放在循环体内,则跟while循环相同,所以for语句的一般形式可以用while表示成:,表达式1;while(表达式2)语句序列;表达式3;,说明:,、for语句的三个表达式都可以缺省,但两个分号不能缺省;,、若在for语句之前已经对循环控制变量赋初值,则表达式1可以缺省;,例:i=1;for(;i=100;i+)sum=sum+i;,for(i=1;i=100;i+)sum=sum+i;,、通常不缺省表达式2;有时缺省表达式2,即不判断循环条件,循环将无终止的执行,即认为表达式2始终为真;在循环体内用if和break控制循环结束。,if(条件)break;,for(i=1;i+)sum=sum+i;,i=1;while(1)sum=sum+i;i+;,、表达式3也可以缺省,但应设法修改循环控制变量,保证程序正常结束。,for(i=1;i=100;)sum=sum+i;i+;,、可以省略表达式1和表达式3,即只给循环条件。,如:for(;i=100;)sum=sum+i;i+;,while(i=100)sum=sum+i;i+;,此时,完全等同于while语句。,、3个表达式都可以省略,如:,for(;)循环体;,while(1)循环体;,将无终止的执行循环。从语法上讲是正确的,但一般没有实际意义。,for语句表达式的计算:,、for语句中的表达式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;printf(i=%d,j=%d,k=%dn,i,j,k);,i=?j=?k=?,#includestdio.hmain()inta,b,c;for(a=0,b=50;ab;a+,b-)printf(a=%d,b=%dn,a,b);c=a+b;printf(a=%d,b=%d,c=%dn,a,b,c);,a=?b=?c=?,eg411.c,、for语句中的表达式1和表达式3通常与循环变量有关,但也可以无关。,#includestdio.hmain()inti,sum;i=1;for(sum=0;i=100;sum=sum+i)i+;printf(sum=%dn,sum);,i=?sum=?,、for语句中的表达式2通常为关系表达式或逻辑表达式,但也可以是数值或字符表达式,判断时,只要其值非0,就执行循环体,为0则退出循环。,for(i=0;(ch=getchar()!=n;i+=ch);,eg412.c、eg413.c,4.2.4循环嵌套,一个循环体内又包含另一个完整的循环结构,称为循环嵌套。内层的循环中还可以嵌套循环,构成多重循环。,三种循环可以相互嵌套。,while()while(),for(;)for(;),dodowhile();while();,while()for(;),for(;)dowhile();,while()dowhile();,例:打印一张九九表。,for(i=1;i=9;i+),for(j=1;j=;j+),i,printf(%4d,);,i*j,printf(n);,eg414.c,在设计循环嵌套时要注意:应该“在一个循环体内包含另一个完整的循环结构”,不论嵌套次数多少,要遵守这个原则。,while()dofor(;)while();,dofor(;)while();,、C语言中的三种循环结构都由表达式控制执行一个循环体,一般情况下可以相互代替;,、while和do-while循环,只在while后面指定循环条件;for循环可以在表达式3中包含使循环趋于结束的操作;,、用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化;,、当循环次数及控制条件要在程序运行过程中确定时,选用while和do-while语句;,、在初值、增量及控制条件明显,或循环次数已经给定的情况下,选用for循环;,、在循环的执行过程中,应不断的改变循环控制表达式的值,以便逐步形成使它为0的条件,否则出现死循环;,、三种循环可以相互嵌套,形成多重循环,外循环可以包含多个或多重内循环,循环之间可以并列但不能相交,并列的循环控制变量可以同名,但嵌套的循环控制变量不能同名;,、不允许用其它的控制语句把程序流程从循环体外转入循环体内,但必要时可以用break等语句把流程从循环体内转到循环体外。,4.3其它语句,4.3.1break语句4.3.2continue语句4.3.3空语句,1、格式:,break;,2、功能:在循环体或switch语句中,执行到break语句时,终止当前语句的执行,程序流程转移到当前循环语句或switch语句的后继语句去执行,3、说明:,eg416.c,、若是多重循环,break只能使流程跳出离break最近的一层;,、break只用于switch语句和循环语句;,4、例:计算r=1到r=10时的圆面积,直到面积大于100为止,4.3.1break语句,1、格式:,continue;,2、功能:在循环体中,当执行到continue语句时,跳过循环体内位于其后的其它语句,接着进行下一次是否执行循环的判定;即“提前结束本次循环”,3、说明:,eg417.c,、continue语句只能用于循环语句中,它是一种具有特殊功能的转移语句;,、continue与break不同:continue语句只结束本次循环,而不是终止整个循环的执行;而break语句则是结束整个循环,不再判断循环条件是否成立。,4、例:把100到200之间能被3整除的数输出,4.3.2continue语句,1、格式:,;(仅由一个分号“;”组成),2、功能:当从语法上需要一个语句,而从语义上不需要任何操作时,便可以用空语句。,3、例如:,在循环语句中提供一个不需要执行操作的空语句体。,for(sum=0,i=1;i=100;sum+=i,i+);,for(i=1;i=10000;i+);,4.3.3空语句,4、注意:要将空语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版口腔科常见病症状及护理技巧
- 车厘子品牌介绍
- 奇马特技术介绍
- 高血压病治疗方案分享
- 网络五层协议书
- 如何签订意定监护协议书
- 协议书市长夫人
- 2025-2026学年北京市东城区高三数学上册期中考试试卷及答案
- 西师版初一物理上册月考考试试题及答案
- 鱼骨分析法讲方法
- 第14课 点亮一盖灯说课稿-2025-2026学年小学信息技术(信息科技)六年级上册青岛版(六三制)
- 2025年人性本恶辩论赛辩论稿
- 2025年水利安全考试试题及答案
- 2024年中级注册安全工程师煤矿安全实务真题及答案解析
- GB/T 222-2025钢及合金成品化学成分允许偏差
- 中国联通商洛市2025秋招笔试性格测评专练及答案
- 食品加工厂营销策划方案
- 人工智能+文旅融合沉浸式旅游体验研究报告
- 员工信息安全培训
- 高处作业安全培训大纲课件
- 北京市西城区2024-2025学年四年级上学期期末英语试题
评论
0/150
提交评论