C语言程序设计 教学课件 ppt 作者 田祥宏 全书 第4章

上传人:E**** 文档编号:89346032 上传时间:2019-05-23 格式:PPT 页数:63 大小:323.50KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 田祥宏 全书 第4章_第1页
第1页 / 共63页
C语言程序设计 教学课件 ppt 作者 田祥宏 全书 第4章_第2页
第2页 / 共63页
C语言程序设计 教学课件 ppt 作者 田祥宏 全书 第4章_第3页
第3页 / 共63页
C语言程序设计 教学课件 ppt 作者 田祥宏 全书 第4章_第4页
第4页 / 共63页
C语言程序设计 教学课件 ppt 作者 田祥宏 全书 第4章_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 田祥宏 全书 第4章》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 田祥宏 全书 第4章(63页珍藏版)》请在金锄头文库上搜索。

1、,第4章 选 择 结 构,4.1 语句与复合语句 4.2 二分支选择结构 4.3 多分支选择结构 4.4 程序举例 习题4,本章学习要求: 1. 了解关系运算、逻辑运算与表达式的关系,掌握语句、复合语句的概念。 2. 掌握if语句(if;ifelse;ifelse ifelse)的使用、if-else语句的嵌套使用,掌握switch和break语句的使用。 为了控制计算机各操作的执行次序,程序设计语言中引入了控制语句。选择结构是结构化程序设计的三种结构之一。C语言提供了二分支和多分支选择结构,本章将进行详细介绍。,1. 语句 C语言规定,在表达式的后面加上一个分号(;)即成为语句。例如: x=

2、1; 赋值语句 scanf(“%d“, 自增运算语句,4.1 语句与复合语句,在C语言中除了结构控制行之外,其他的内容均由语句组成,即所有的语句均由一个分号(;)结束。有时为了程序的需要,我们会遇到只有一个分号而没有表达式的情形,这在C语言中也是合法的,称为空语句,例如: main() ; /*空语句*/ 在第1章的C语言特点中提到,C语言书写灵活,允许一行写多条语句,一条语句也可以写在多行。但是建议初学者不要采用此种形式,因为这样做不利于检查和调试程序。,2. 复合语句 在C语言中,用一对花括号“ ”将若干条语句括起来成为一个语句组,称为复合语句,其一般形式如下: 语句1; 语句2; 语句3

3、; 语句n ; 花括号内语句的数量、类型不限,可以是声明语句、赋值语句等;一个复合语句在语法上被视为一条语句。例如: #include main() ,int a,b,c; /*变量a、b、c只能在此复合语句内使用*/ a=10; b=20; c=a+b; printf(“%d,%d,%dn“,a,b,c) ; 注意,复合语句内的定义变量语句要出现在执行语句之前,且复合语句内定义的变量只能在该复合语句内部有效。,4.2.1 简单的二分支选择结构 C语言的if语句有两种基本形式,即独立的if结构和if-else结构。 1. 独立的if结构 1) 语法形式 if(表达式) 语句,4.2 二分支选择

4、结构,其中: (1) if是C语言的关键字; (2) 表达式可以是任意的表达式,且一对圆括号不可缺省; (3) 语句可以是一条简单语句或复合语句。 2) 执行过程 首先计算表达式的值,然后根据其真假来决定程序的走向。若表达式为真(值为非零)则执行语句,若为假(值为零)则不执行语句。退出分支结构后,程序继续执行if结构后面的语句,如图4.1所示。,图4.1 if结构流程图,3) 举例 执行如下程序: if(ab) b+; 若a的初值为20,b的初值为10,则表达式(ab)为真,执行语句“b+;”,则a的结果为20,b的结果为11。 若a的初值为10,b的初值为20,则表达式(ab)为假,不执行语

5、句“b+;”,则a和b均保留初值即10和20。 如果语句为复合语句,将以上程序段改为 if(ab) b+; a+; ,若a的初值为20,b的初值为10,则表达式(ab)为真,执行语句“b+;”和“a+;”, a的结果为21,b的结果为11。若a的初值为10,b的初值为20,则表达式(ab)为假,语句“b+;”和“a+;”均不被执行,a的结果仍为10,b的结果仍为20。如果将复合语句的一对花括号去掉,则程序段成为 if(ab) b+; a+; 此时,语句“a+;”已不再属于if结构,不管条件为真或为假,对于整个程序来说它都将被执行。,2. if-else结构 1) 语法形式 if(表达式) 语句

6、1 else 语句2,其中: (1) if和else是C语言的关键字,表达式及语句1、语句2的解释同独立的if结构; (2) else不能独立存在,它必须与if语句配对组合方可使用,否则会产生语法错误; (3) else后面绝对不能跟条件表达式,它执行的条件是隐含的,即与之配对的if的反面。,2) 执行过程 首先计算表达式的值,然后根据其真假来决定程序的走向。若表达式为真(值为非零)则执行语句1,若为假(值为零)则执行语句2。退出分支结构后程序继续执行if-else结构后面的语句,如图4.2所示。,图4.2 if-else结构流程图,3) 举例 if(ab) b+; else a+; 若a的初

7、值为20,b的初值为10,则表达式(ab)为真,执行语句“b+;”,然后退出if-else结构,a的结果为20,b的结果为11。 若a的初值为10,b的初值为20,则表达式(ab)为假,执行语句“a+;”,然后退出if-else结构,a的结果为11,b的结果为20。,前文曾提到过语句1和语句2都可以是复合语句,但如果不慎将语句1的花括号丢了,则编译时会出现语法错误,如下例: main() int a=1,b=2; if(ab) a+; b-; else a-; 该程序执行时会出现错误提示信息:“Error:Misplaced else in function main”,因为此时else不能与

8、if合法匹配,而else又不能独立存在,所以出现了上述错误。,4.2.2 嵌套的二分支选择结构 1. 在if语句中嵌套分支结构 1) 语法形式 if(表达式1) if(表达式2) 语句1 else 语句2 else 语句3,其中: (1) 表达式1、2均可以是任意的表达式; (2) 语句1、2、3均可以是一条简单语句或复合语句; (3) 内层if-else语句书写时注意格式缩进,以培养良好的程序设计风格; (4) 内层if-else结构仍然可以继续嵌套,依此类推。,2) 执行过程 首先计算表达式1的值,若表达式1为真则执行内层if-else语句,若表达式1为假则执行语句3。若执行内层if-el

9、se语句,则计算表达式2的值,若表达式2为真则执行语句1,若表达式2为假则执行语句2,如图4.3所示。总之,程序必须在语句1、2、3中选择其一来执行。,图4.3 if嵌套的分支结构流程图,3) 举例 如果一个奇数x能被3整除,则输出“是”,否则输出“否”。程序段如下: if(x%2!=0) /*条件1,判断x是否为奇数*/ if(x%3=0) /*条件2,判断x能否被3整除*/ printf(“yesn“); /*语句1*/ else printf(“non“); /*语句2*/ else printf(“non“); /*语句3*/ 若x为6则条件1不满足,执行语句3,输出“no”;若x为5

10、则条件1满足,条件2不满足,执行语句2,输出“no”;若x为9则条件1、条件2均满足,执行语句1,输出“yes”。,2. 在else语句中嵌套分支结构 1) 语法形式 if(表达式1) 语句1 else if(表达式2) 语句2 else 语句3 其中,解释同上。,2) 执行过程 首先计算表达式1的值,若表达式1为真则执行语句1,若表达式1为假则执行内层if-else语句。若执行内层if-else语句,则计算表达式2的值,若表达式2为真则执行语句2,若表达式2为假则执行语句3,如图4.4所示。总之,程序必须在语句1、2、3中选择其一来执行。,图4.4 else嵌套的分支结构流程图,3) 举例

11、题目同上,如果一个奇数x能被3整除,则输出“是”,否则输出“否”。改用另外一种思路来解决,程序段如下: if(x%2=0) /*条件1,判断x是否为奇数*/ printf(“non“); /*语句1*/ else if(x%3=0) /*条件2,判断x能否被3整除*/ printf(“yesn“); /*语句2*/ else printf(“non“); /*语句3*/,观察发现将嵌套if-else结构移至外层else语句之后,此例与上例的主要变化之处在于表达式1及语句1、语句2的变化,只有改变才能解决问题。可见,同一个问题可以有很多种解决办法,我们要善于开拓思路,推陈出新。如此一来,若x为6

12、则条件1满足,执行语句1,输出“no”;若x为5则条件1不满足,条件2也不满足,执行语句3,输出“no”;若x为9则条件1不满足,条件2满足,执行语句2,输出“yes”。,特别说明: (1) 在一个分支结构中,if和else语句均可以同时进行若干层嵌套; (2) 内嵌结构可以是if语句或if-else语句; (3) 当嵌套较多的时候,则程序结构不清晰,if与else的配对容易混淆,这里给大家一个解决办法,从上至下将每个else与距其最近的尚未配对的if进行匹配。,在C语言中还提供了一种多路判定语句switch,在这种结构里可以实现,一个条件符合时程序执行若干条语句。 1. 语法形式 switc

13、h(表达式) case 常量表达式1:语句序列1 case 常量表达式2:语句序列2 case 常量表达式n:语句序列n default: 语句序列n+1 ,4.3 多分支选择结构,其中: (1) switch、case和default是C语言关键字,default是可以缺省的项; (2) switch后的表达式必须为整型或字符型表达式; (3) case后的常量表达式称为标号,且标号必须互不相同,case与标号之间必须留有空格; (4) 必要时,某些case标号后的语句序列可以不写,但冒号不可省掉; (5) 语句序列可以是一条也可以是多条,且多条不需组合成复合语句。,2. 执行过程 首先计算

14、switch后表达式的值,然后寻找与其相等的case标号,如果找到了则从该case后的语句序列开始执行下去,不再进行判断,直至遇break或switch结构结束;如果没有找到与switch表达式的值相等的case标号,则执行default后的语句序列或退出switch结构(default缺省的情况下)。 这里提到了break,它是一个使程序立即从switch结构或循环中退出的语句,在下一章会详细介绍。具体程序中到底要不要使用break,需要针对实际问题而定。,3. 举例 设变量grade是字符型,代表成绩的等级,以下程序段则实现根据学生成绩的等级来输出相应的分数范围: switch(grade

15、) case A:printf(“90100n“);break; case B:printf(“8089n“); break; case C:printf(“7079n“); break; case D:printf(“6069n“); break; case E:printf(“ 059n“); break; default: printf(“error!n“); ,执行以上程序段时,若grade的值为A则输出结果是:90100;若grade的值为D则输出结果是:6069;若grade的值超出AE这五个等级,例如G则输出结果是:error!。 如果将所有的break语句去掉,程序变成: switch(grade) case A:printf(“90100n“); case B:printf(“8089n“); case C:printf(“7079n“);,case D:printf(“6069n“); case E:printf(“ 059n“); default: printf(“error!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号