版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章控制语句,(教材的第四、五章),1/36,4.1 分支语句 4.2 循环语句 4.3 其它语句 4.4 本章要点小结,2/36,4.1 分支语句,4.1.1 if语句的三种形式 4.1.2 if语句的嵌套 4.1.3 switch(多分支)语句,3/36,4.1.1 if语句的三种形式,形式一:,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,4/36,形式二:,if (表达式) 语
2、句序列1; else 语句序列2;,执行过程:,例如:,if (ab) x=a; else x=b;,if (x=0) printf(%.3fn,x); else printf(%.3fn,-x),5/36,形式三:,if (表达式1) 语句序列1; else if (表达式2) 语句序列2; else if (表达式3) 语句序列3; else if (表达式n) 语句序列n; else 语句序列n+1;,6/36,if (x0) y=1; else if (x=0) y=0; else y=-1;,7/36,说明:,1、表达式一般为关系表达式或逻辑表达式。但在C语言中它也可以是任意的数值表
3、达式。,if (3) n=1;,if (a) printf(%d,a);,if (n=3-3) x=1; else x=-1;,4、每个语句序列可以是一个语句也可以是若干个语句,但要构成复合语句。,3、 else 只能与 if 配对使用。仅 else 本身不能单独作为一个语句使用。,if (ab) t=a; a=b; b=t; ,if (a+bc ,2、每个语句都要以“ ;”结束,分号是语句的一部分。,8/36,4.1.2 if语句的嵌套,形式:,if (表达式1) if (表达式2) 语句序列2; else 语句序列3; else if (表达式4) 语句序列4; else 语句序列5;,在
4、if语句的原“语句序列”中又包含一个或多个if语句称为if语句的嵌套。,当然,语句序列2、3、4、5还可以是if语句。,例如:max=(a,b,c),if (a=b) if (a=c) max=a; else max=c; else if (b=c) max=b; else max=c;,9/36,二义性:,if (表达式1) if (表达式2) 语句序列2; else 语句序列3;,if (表达式1) if (表达式2) 语句序列2; else 语句序列3;,if (表达式1) if (表达式2) 语句序列2; else 语句序列3;,应如何理解?,有两种理解方式:,语言规定:else总是与
5、它前面最近的且未曾配对的if配对。,if (表达式1) if (表达式2) 语句序列2; else 语句序列3; ,if (表达式1) if (表达式2) 语句序列2; else 语句序列3;,10/36,4.1.3 switch(多分支)语句,1、格式:switch (表达式) case 常量表达式1 : 语句1; break; case 常量表达式2 : 语句2;break; case 常量表达式n : 语句n ;break; default: 语句 n+1;break; ,2、功能:先计算表达式的值,测试该值是否与某常量表达式的值相同。 、若有相同者,流程转向其后面的语句执行 、若无,再
6、看有没有default部分:若有default,则执行其后面的语句; 若无default,则switch语句什么也不做,流程转向其后继语句。,3、 例:读入1到7之间的某个数,输出一个星期中相应的某一天的单词。,eg404.c,11/36,4、说明:,、 switch语句的执行部分是由若干个case语句和一个可缺省的default语句组成的复合语句,整个语句要用大括号括起来;,、switch后面括号内的表达式可以是整型也可以是字符型或枚举类型;,、每个case后的常量表达式只起语句标号的作用,所以当表达式的值与某一个case后的常量表达式的值相等时,就执行相应的语句,它后面若没有break语句
7、,程序就自动地执行下一个case之后的语句,所以每个case之后通常都有一个break,使流程跳出switch语句;,、各个case的常量表达式的值必须互不相同;,、各个case和default的出现次序是任意的,出现次序不影响执行结果;一般常量表达式按升序(或降序)排列,并将default放在所有case语句之后;,、各个case后的语句可以是多个语句,且不用花括号括起来;,、switch语句允许几种情况执行相同的语句;,case 6 : case 7 : printf(“Resetn”); break;,但不能写成:case 6,7: printf(“Resetn”); break;,5、
8、例:输入一个年号year和月号month,计算该月有几天,并输出结果。,eg404.c,12/36,4.2 循环语句,4.2.1 while语句 4.2.2 do-while语句 4.2.3 for语句 4.2.4 循环嵌套 4.2.5 几种循环的比较,13/36,4.2.1 while语句,1、格式:while (表达式) 循环体;,2、功能:首先计算表达式的值,若表达式成立(非0),执行一遍循环体,再判断表达式,若成立再执行循环体当表达式不成立(其值为0)时退出循环,跳转到循环体之后的语句执行。,eg406.c,3、特点:先判断表达式,然后执行循环体。若表达式一开始就不成立,则循环体一次也
9、不执行。,4、注意:(1)、循环部分为多个语句时,必须用大括号构成复合语句; (2)、循环体中应有语句修改控制条件,5、例:计算 sum=1+2+3+100,14/36,4.2.2 do-while语句,1、格式:do 循环体; while (表达式);,2、功能:先执行一遍循环体,再判断表达式,当表达式的值为非0(真)时,返回重新执行循环体;如此反复,直到表达式的值为0(假)时退出循环。,eg407.c,3、特点:先执行循环体,后判断循环条件(表达式)是否成立,即循环体至少执行一次。,4、推荐书写格式: do while();,5、例:计算 sum=1+2+3+100,15/36,对于同一个
10、问题既可以用while语句处理,也可以用do-while语句处理。do-while语句结构可以转换成while结构。,do-while语句流程图可以改写为:,可见,do-while结构是由一个语句加一个while结构构成的。,一般情况下,用while语句和do-while语句处理同一问题时,若二者的循环体一样,则结果也一样。但是如果while后面的表达式一开始就为假(0)时,两种循环的结果是不同的。,例:计算: (分别用while和do-while实现),结论:当while后面的表达式的第一次的值为“真”时,两种循环的结果相同。否则,二者结果不相同(指二者具有相同的循环体的情况)。,eg408
11、.c、eg409.c,16/36,4.2.3 for语句,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,17/36,for (i=1; i=100;i+) sum=
12、sum+i;,i=1; while ( i=100) sum=sum+i; i+; ,for语句的功能和执行过程与while相似。在上例中,若把给循环控制变量赋初值的工作放在语句之外,把循环变量的修改放在循环体内,则跟while循环相同,所以for 语句的一般形式可以用while表示成:,表达式1; while (表达式2) 语句序列; 表达式3; ,18/36,说明:,、for语句的三个表达式都可以缺省,但两个分号不能缺省;,、若在for语句之前已经对循环控制变量赋初值,则表达式1可以缺省;,例: i=1; for ( ; i=100; i+) sum=sum+i;,for (i=1; i=
13、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+; ,19/36,、表达式3也可以缺省,但应设法修改循环控制变量,保证程序正常结束。,for (i=1; i=100; ) sum=sum+i; i+; ,、可以省略表达式1和表达式3,即只给循环条件。,如:for ( ;i=100; ) sum=sum+i; i+; ,w
14、hile (i=100) sum=sum+i; i+; ,此时,完全等同于while语句。,、3个表达式都可以省略,如:,for ( ; ; ) 循环体;,while (1) 循环体;,将无终止的执行循环。从语法上讲是正确的,但一般没有实际意义。,20/36,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,
15、k=%dn,i,j,k);,i=? j=? k=?,#include stdio.h main( ) int a,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=?,、for语句中的表达式1和表达式3通常与循环变量有关,但也可以无关。,eg411.c,21/36,、for语句中的表达式1和表达式3通常与循环变量有关,但也可以无关。,#include stdio.h main( ) int i,sum; i=1; for (sum=0;
16、 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,22/36,4.2.4 循环嵌套,一个循环体内又包含另一个完整的循环结构,称为循环嵌套。内层的循环中还可以嵌套循环,构成多重循环。,三种循环可以相互嵌套。,while ( ) while ( ) ,for ( ; ; ) for ( ; ; )
17、,do do while ( ); while ( );,while ( ) for ( ; ; ) ,for ( ; ; ) do while( ); ,while ( ) do while( ); ,23/36,例:打印一张九九表。,for (i=1; i=9; i+),for (j=1; j= ; j+),i,printf(%4d, );,i*j,printf(n);,eg414.c,24/36,在设计循环嵌套时要注意:应该“在一个循环体内包含另一个完整的循环结构”,不论嵌套次数多少,要遵守这个原则。,while ( ) do for ( ; ; ) while( ); ,do for
18、( ; ; ) while( ); ,25/36,、C语言中的三种循环结构都由表达式控制执行一个循环体,一般情况下可以相互代替;,、while和do-while循环,只在while后面指定循环条件; for循环可以在表达式3中包含使循环趋于结束的操作;,、用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化;,、当循环次数及控制条件要在程序运行过程中确定时,选用while和do-while语句;,26/36,、在初值、增量及控制条件明显,或循环次数已经给定的情况下,选用for循环;,、在循环的执
19、行过程中,应不断的改变循环控制表达式的值,以便逐步形成使它为0的条件,否则出现死循环;,、三种循环可以相互嵌套,形成多重循环,外循环可以包含多个或多重内循环,循环之间可以并列但不能相交,并列的循环控制变量可以同名,但嵌套的循环控制变量不能同名;,、不允许用其它的控制语句把程序流程从循环体外转入循环体内,但必要时可以用break等语句把流程从循环体内转到循环体外。,27/36,4.3 其它语句,4.3.1 break语句 4.3.2 continue语句 4.3.3 空语句,28/36,1、格式:,break;,2、功能:在循环体或switch语句中,执行到break语句时,终止当前语句的执行,
20、程序流程转移到当前循环语句或switch语句的后继语句去执行,3、说明:,eg416.c,、若是多重循环,break只能使流程跳出离break最近的一层;,、break只用于switch语句和循环语句;,4、例:计算 r=1到 r=10时的圆面积,直到面积大于100为止,4.3.1 break语句,29/36,1、格式:,continue;,2、功能:在循环体中,当执行到continue语句时,跳过循环体内位于其后的其它语句,接着进行下一次是否执行循环的判定;即“提前结束本次循环”,3、说明:,eg417.c,、continue语句只能用于循环语句中,它是一种具有特殊功能的转移语句;,、con
21、tinue与break不同:continue语句只结束本次循环,而不是终止整个循环的执行;而break语句则是结束整个循环,不再判断循环条件是否成立。,4、例:把100到200之间能被3整除的数输出,4.3.2 continue语句,30/36,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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44624-2024热环境的人类工效学接触冷热表面时人体反应评价方法
- 工程招标设计阶段合同条件(第二部分)
- 专业体育教练合作协议范本
- 企业资产收购合同
- 事业单位引进急需紧缺专业人才暨2024年
- 2024年最高额反担保保证
- 政府采购协议供货公开招标文件2024年
- 农家乐活动合作合同
- 快递合作协议书样本
- 2024年如何制定具有法律效力的离婚协议
- 上海市普陀区2024-2025学年六年级(五四学制)上学期期中语文试题
- 小学学校信息化管理章程
- 封条模板A4直接打印版
- 倪志钦:年轻有遗憾没伤感
- 干辣椒收购合同协议书范本通用版
- 印度英文介绍 india(课堂PPT)
- 旅游线路设计实务 理论知识篇
- 工程地质学—地貌
- 应聘登记表(CMHR
- 《海报设计》PPT课件(完整版)
- 吉林省义务教育阶段新课程计划表(新)
评论
0/150
提交评论