版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、联系方式:http:/ 北京源智天下科技有限公司 第第6 6章章 选择结构选择结构 前几章介绍了前几章介绍了C语言的几个基本要素语言的几个基本要素(变量、常量、数据类型变量、常量、数据类型 、语句、操作符和表达式、语句、操作符和表达式),本章和第,本章和第7章将介绍章将介绍C语言中语言中 的基本程序结构。在第的基本程序结构。在第1章关于程序基础知识的介绍中,章关于程序基础知识的介绍中, 已经讨论了三种基本结构。已经讨论了三种基本结构。 在前几章的范例中接触到的程序基本都属于顺序结构,本章在前几章的范例中接触到的程序基本都属于顺序结构,本章 将先讨论选择结构的使用。将先讨论选择结构的使用。C语言
2、提供了多种手段来实现语言提供了多种手段来实现 选择结构:选择结构:if语句、语句、switch语句、条件表达式和逻辑表达语句、条件表达式和逻辑表达 式。它们各有优劣和适用的场景。通过本章的学习,需式。它们各有优劣和适用的场景。通过本章的学习,需 要掌握以下内容:要掌握以下内容: 联系方式:http:/ 北京源智天下科技有限公司 第第6 6章章 选择结构选择结构 if语句三种形式的使用;语句三种形式的使用; 使用使用switch语句实现多路选择结构;语句实现多路选择结构; else if结构和结构和switch语句的使用范围;语句的使用范围; 条件表达式的使用,以及与条件表达式的使用,以及与if
3、语句的比较;语句的比较; 逻辑表达式的隐式选择。逻辑表达式的隐式选择。 联系方式:http:/ 北京源智天下科技有限公司 6.1 if6.1 if语句语句 if语句是语句是C语言中实现选择结构最常用的方式。当语言中实现选择结构最常用的方式。当if语句和语句和 else语句组合时候时,可以实现更灵活更复杂的选择结语句组合时候时,可以实现更灵活更复杂的选择结 构。学会熟练地使用构。学会熟练地使用if语句是语句是C编程的基础。本小节将讨编程的基础。本小节将讨 论如何使用论如何使用if语句来实现选择结构,已经使用中需要注意语句来实现选择结构,已经使用中需要注意 的问题。的问题。 联系方式:http:/
4、 北京源智天下科技有限公司 6.1.1 6.1.1 使用使用if if语句语句 if语句的功能是根据一个条件判断的结果选择执行某一分支语句的功能是根据一个条件判断的结果选择执行某一分支 。if语句可以分为两个部分:语句可以分为两个部分:if头和头和if体。体。if头由关键字头由关键字if 和包含在括号中的表达式组成。和包含在括号中的表达式组成。if体由一个语句或一个复体由一个语句或一个复 合语句组成。例如:合语句组成。例如: if (判断表达式判断表达式 ) /* if头头 */ 操作操作1;/* if体体 */ 操作操作2; 联系方式:http:/ 北京源智天下科技有限公司 6.1.1 6.
5、1.1 使用使用if if语句语句 if语句经常和语句经常和else语句组合使用。语句组合使用。else语句也由两部分:语句也由两部分:else头和头和 else体。关键字体。关键字if和关键字和关键字else搭配使用的标准形式如下:搭配使用的标准形式如下: if (判断表达式判断表达式 ) 操作操作1; else /* else头头*/ 操作操作2;/* else 体体*/ 合理地组合合理地组合if语句和语句和else语句,可以实现以下三种选择结构。语句,可以实现以下三种选择结构。 联系方式:http:/ 北京源智天下科技有限公司 6.1.1 6.1.1 使用使用if if语句语句 1if结
6、构结构 if ( 表达式表达式 ) 操作操作1; 该结构的程序流程图如右图所示。该结构的程序流程图如右图所示。 联系方式:http:/ 北京源智天下科技有限公司 6.1.1 6.1.1 使用使用if if语句语句 2if-else结构结构 if ( 表达式表达式 ) 操作操作1; else 操作操作2; if-else结构的程序执行流程图如右图所示。结构的程序执行流程图如右图所示。 联系方式:http:/ 北京源智天下科技有限公司 6.1.1 6.1.1 使用使用if if语句语句 3else if结构结构 if ( 表达式表达式1 ) 执行操作执行操作1; else if ( 表达式表达式2
7、 ) 执行操作执行操作2; else if ( 表达式表达式3 ) 执行操作执行操作3; /*在这里允许有任意多个在这里允许有任意多个else if语句语句*/ else 执行操作执行操作4; 联系方式:http:/ 北京源智天下科技有限公司 该结构实现了多路分支结构,其中可以有任意多个该结构实现了多路分支结构,其中可以有任意多个else if语句,语句, 每一个每一个else if都是一路程序分支。其程序流程图如下图所示。都是一路程序分支。其程序流程图如下图所示。 联系方式:http:/ 北京源智天下科技有限公司 6.1.1 6.1.1 使用使用if if语句语句 else if结构实际上是
8、结构实际上是if-else结构的变种,可以其改写为结构的变种,可以其改写为if-else结构(为了结构(为了 简化,程序只包含一个简化,程序只包含一个else if):): if ( 表达式表达式1 ) 执行操作执行操作1; else /* 以下全部内容为第一个以下全部内容为第一个else的的else体体 */ if ( 表达式表达式2 ) 执行操作执行操作2; else if ( 表达式表达式3 ) 执行操作执行操作3; else 执行操作执行操作4; 联系方式:http:/ 北京源智天下科技有限公司 6.1.2 else6.1.2 else和和if if的配对使用的配对使用 关键字关键字e
9、lse与与if的组合使用可以实现多种丰富的选择结构。的组合使用可以实现多种丰富的选择结构。 但在当程序中使用但在当程序中使用else语句时,务必保证关键字语句时,务必保证关键字else必须必须 存在一个正确配对的存在一个正确配对的if。当。当if体或体或else体中嵌套使用体中嵌套使用if语句语句 的三种形式时,的三种形式时,else和和if的配对情况会变得复杂,若不细的配对情况会变得复杂,若不细 心处理,就有可能发生错误。心处理,就有可能发生错误。 联系方式:http:/ 北京源智天下科技有限公司 6.1.3 6.1.3 选择结构中的不平等分支选择结构中的不平等分支 在一个选择结构中,如果有
10、多个分支,而各分支的关系是不在一个选择结构中,如果有多个分支,而各分支的关系是不 平等的,则按照思维逻辑的习惯可以将分支按重要性或平等的,则按照思维逻辑的习惯可以将分支按重要性或 优先级的顺序从高到低排放。而在优先级的顺序从高到低排放。而在if-else结构中,如果两结构中,如果两 个分支不是平等的,请按照逻辑思维习惯,把重要的或个分支不是平等的,请按照逻辑思维习惯,把重要的或 者正常的分支处理放在者正常的分支处理放在if体里,即当体里,即当if头的选择表达式为头的选择表达式为 真时进入的分支是重要的或者正常的;而次要的或者异真时进入的分支是重要的或者正常的;而次要的或者异 常的分支处理放在常
11、的分支处理放在else体。如果是多路分支选择结构,体。如果是多路分支选择结构, 一般按分支的重要性依次向后排列。一般按分支的重要性依次向后排列。 联系方式:http:/ 北京源智天下科技有限公司 6.1.4 6.1.4 判断表达式中的与判断表达式中的与 赋值操作符赋值操作符=与等于操作符与等于操作符=只相差一个等号,前者多写一只相差一个等号,前者多写一 个等号就变成后者,而后者少写一个等号也变成前者。个等号就变成后者,而后者少写一个等号也变成前者。 这种错误在编程中十分常见。而且,这两种都是合法的这种错误在编程中十分常见。而且,这两种都是合法的 写法,编译器无法自动检测。如果这种错误出现在写法
12、,编译器无法自动检测。如果这种错误出现在if语句语句 的判断表达式中,很可能出现期望外的逻辑完全不一样的判断表达式中,很可能出现期望外的逻辑完全不一样 的程序。因此,编程时必须特别小心。下面的范例讨论的程序。因此,编程时必须特别小心。下面的范例讨论 了这种错误的危险,并讨论一种防范这种错误的措施。了这种错误的危险,并讨论一种防范这种错误的措施。 联系方式:http:/ 北京源智天下科技有限公司 6.2 switch6.2 switch语句语句 switch语句是语句是C语言中选择结构的另一个常用的实现方式,语言中选择结构的另一个常用的实现方式, 十分适用于多路选择的实现。本小节将讨论十分适用于
13、多路选择的实现。本小节将讨论switch结构结构 的使用和的使用和break语句在语句在switch结构中的作用,同时还比较结构中的作用,同时还比较 了了switch结构和结构和if-else结构在实现多路选择中的优劣,结构在实现多路选择中的优劣, 最后还介绍了标号的使用。最后还介绍了标号的使用。 联系方式:http:/ 北京源智天下科技有限公司 6.2.1 6.2.1 使用使用switchswitch语句语句 switch语句的标准形式如下:语句的标准形式如下: switch ( 判断表达式判断表达式 ) /* switch头,下面为头,下面为switch 体体 */ case 常量表达式常
14、量表达式1: 操作操作1;/* 分支分支1 */ case 常量表达式常量表达式2: 操作操作2;/* 分支分支2 */ case 常量表达式常量表达式3: 操作操作3;/* 分支分支3 */ default: 操作操作n;/* 异常情况异常情况 */ 联系方式:http:/ 北京源智天下科技有限公司 6.2.2 break6.2.2 break语句语句 break语句在语句在switch语句中的作用十分重要。在语句中的作用十分重要。在switch语句语句 中,遇到中,遇到break便终止执行便终止执行switch语句,跳出本层语句,跳出本层switch 体,继续执行后续语句。正确使用体,继续
15、执行后续语句。正确使用break语句与语句与case语句语句 和合理搭配,可以实现功能强大的多路选择功能。和合理搭配,可以实现功能强大的多路选择功能。 联系方式:http:/ 北京源智天下科技有限公司 6.2.3 else if6.2.3 else if语句和语句和switchswitch语句语句 比较例比较例6-1和例和例6-4,读者会发现,读者会发现else if语句和语句和switch语句都语句都 适合用在多路选择的场景中。那么,他们的区别是什么适合用在多路选择的场景中。那么,他们的区别是什么 呢?呢? 整数或值为整数的表达式都可以构造成具有有效布尔值的表整数或值为整数的表达式都可以构造
16、成具有有效布尔值的表 达式,所以所有的达式,所以所有的switch语句都可以转化为语句都可以转化为else if语句。语句。 然而,大多数的情况下,这种转化只会降低效率,是不然而,大多数的情况下,这种转化只会降低效率,是不 能带来任何好处的。所以,使用能带来任何好处的。所以,使用switch语句实现多路选语句实现多路选 择结构比使用择结构比使用if-else语句更有优势。如果能使用语句更有优势。如果能使用switch 语句,应该首先选择语句,应该首先选择switch语句。语句。 联系方式:http:/ 北京源智天下科技有限公司 6.2.4 switch6.2.4 switch中的标号中的标号
17、在在switch语句中,涉及到了两种标号:语句中,涉及到了两种标号:case标号和标号和default 标号。标号本身的存在不会改变程序的流程,但与跳转标号。标号本身的存在不会改变程序的流程,但与跳转 主体(主体(switch与与goto,后面章节会介绍,后面章节会介绍goto语句)搭配语句)搭配 时,标号的存在会产生不同的执行过程。时,标号的存在会产生不同的执行过程。 联系方式:http:/ 北京源智天下科技有限公司 6.2.5 6.2.5 使用具名常量组成标号使用具名常量组成标号 具名具名常量,顾名思义就是有名字的常量,它是常量,顾名思义就是有名字的常量,它是C语言中宏定语言中宏定 义的一
18、种用途,属于预处理命令,是在程序编译前(预义的一种用途,属于预处理命令,是在程序编译前(预 处理)进行的工作。在处理)进行的工作。在“预处理预处理”一章中会详细讨论预一章中会详细讨论预 处理的用法和功能。具名常量的定义由三部分组成:处理的用法和功能。具名常量的定义由三部分组成: #define、具名常量和数值。其标准形式如下:、具名常量和数值。其标准形式如下: #define 具名常量具名常量 数值常量数值常量 联系方式:http:/ 北京源智天下科技有限公司 6.3 6.3 条件操作符与条件表达式条件操作符与条件表达式 条件操作符是条件操作符是C语言中唯一的三元操作符,由条件操作符组语言中唯
19、一的三元操作符,由条件操作符组 成的条件表达式可以实现简单的选择结构。由于整个选成的条件表达式可以实现简单的选择结构。由于整个选 择结构都实现在一条语句中,限制了条件表达式的功能择结构都实现在一条语句中,限制了条件表达式的功能 ,但也因此使其更适用于实现比较简单的选择控制结构,但也因此使其更适用于实现比较简单的选择控制结构 。本小节将先介绍条件操作符和条件表达式的使用,再。本小节将先介绍条件操作符和条件表达式的使用,再 比较了条件表达式与比较了条件表达式与if-else结构的优劣,最后讨论了条件结构的优劣,最后讨论了条件 表达式的类型转换和嵌套使用。表达式的类型转换和嵌套使用。 联系方式:ht
20、tp:/ 北京源智天下科技有限公司 6.3.1 6.3.1 使用条件操作符使用条件操作符 条件表达式是通过使用条件操作符来实现的。条件操作符是条件表达式是通过使用条件操作符来实现的。条件操作符是 个三元操作符,其标准形式如下:个三元操作符,其标准形式如下: 表达式表达式1 ? 表达式表达式2 : 表达式表达式3; 流程图如右图所示。流程图如右图所示。 联系方式:http:/ 北京源智天下科技有限公司 6.3.2 6.3.2 条件表达式与条件表达式与if-elseif-else 不同点主要包括以下两点:不同点主要包括以下两点: 条件表达式的表达式条件表达式的表达式2和表达式和表达式3都只能是一句
21、语句,不能为都只能是一句语句,不能为 复合表达式;而复合表达式;而if体和体和else体则可以为复合表达式。体则可以为复合表达式。 条件表达式仍可以作为其他表达式的子表达式。条件表达式仍可以作为其他表达式的子表达式。 联系方式:http:/ 北京源智天下科技有限公司 6.3.3 6.3.3 条件表达式中的类型转换条件表达式中的类型转换 在条件表达式中,第在条件表达式中,第2个表达式的值类型必须与第个表达式的值类型必须与第3个表达式个表达式 的值类型相同。后两个表达式的值该类型就是条件表达的值类型相同。后两个表达式的值该类型就是条件表达 式的值类型。如果两个值类型不同,则需要进行类型转式的值类型
22、。如果两个值类型不同,则需要进行类型转 换,其遵循的规则与数值运算中的类型转换相同。换,其遵循的规则与数值运算中的类型转换相同。 联系方式:http:/ 北京源智天下科技有限公司 6.3.4 6.3.4 条件表达式的嵌套条件表达式的嵌套 条件表达式可以嵌套使用,即把一个条件表达式作为另一个条件表达式可以嵌套使用,即把一个条件表达式作为另一个 条件表达式中的子表达式。例如,可以将范例条件表达式中的子表达式。例如,可以将范例6-7的的if- else结构用条件表达式改写如下:结构用条件表达式改写如下: (0 = i ? b : a) 0) ? printf(b 0n) : printf(b = a
23、) /* a,b均为整型均为整型 */ do something; 在这个例子里,只有当在这个例子里,只有当a不等于不等于0时,才能作为除数,时,才能作为除数,b / a = a才才 合法,这种情况下才执行第二个表达式;如果合法,这种情况下才执行第二个表达式;如果a等于等于0,则条件,则条件 表达式结束,值为表达式结束,值为0。上面的例子不能写为:。上面的例子不能写为: if (b / a = a) do something; 这时,若这时,若a等于零,将出现错误。也不能写为:等于零,将出现错误。也不能写为: if (b / a = a 这也会产生错误,因为不管这也会产生错误,因为不管a是否为
24、是否为0,都会执行,都会执行b / a。 联系方式:http:/ 北京源智天下科技有限公司 6.4.3 6.4.3 巧用隐式选择巧用隐式选择 2使用结构体指针使用结构体指针 当变量为结构体指针时,若要访问其成员,必须要保证该变当变量为结构体指针时,若要访问其成员,必须要保证该变 量指向一个实体(即不为量指向一个实体(即不为NULL)。使用逻辑表达式可以)。使用逻辑表达式可以 实现如下:实现如下: if (ptr 只有当只有当ptr不等于不等于0(或或NULL),ptr-data才合法。如果才合法。如果ptr不不 等于等于0,执行第二个表达式;如果,执行第二个表达式;如果ptr等于等于0,则条件
25、表达,则条件表达 式结束,值为式结束,值为0。结构体指针会在第。结构体指针会在第18章中详细讨论。章中详细讨论。 联系方式:http:/ 北京源智天下科技有限公司 6.4.3 6.4.3 巧用隐式选择巧用隐式选择 3逻辑或表达式的多条件判断逻辑或表达式的多条件判断 下面这段代码是范例下面这段代码是范例6-5中的一段中的一段else if语句:语句: else if (4 = month/* 4月份月份 */ | 6 = month/* 6月份月份 */ | 9 = month/* 9月份月份 */ | 11 = month)/* 11月份月份 */ printf(there are 30 da
26、ys in this month!n); 联系方式:http:/ 北京源智天下科技有限公司 6.4.3 6.4.3 巧用隐式选择巧用隐式选择 实现功能为:如果变量实现功能为:如果变量month等于等于4,6,9或或11时,程序打时,程序打 印结果。这个结构的印结果。这个结构的if头中含有头中含有4个判断,但是当个判断,但是当month 等于等于4时,只执行了一次判断;当时,只执行了一次判断;当month等于等于6时,只执时,只执 行了两次判断;当行了两次判断;当month等于等于9时,执行三次判断;其余时,执行三次判断;其余 情况下才会执行四次判断。该代码可以用情况下才会执行四次判断。该代码可以用else if语句展开语句展开 得到完全等效的语句,如下:得到完全等效的语句,如下: el
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 年信息化平台助力护理临床带教工作
- 2026 年胸腔闭式引流管观察护理及拔管管理
- 赣州银行校园招聘纪检监察员环节笔试历年典型考题及考点剖析附带答案详解
- 异物窒息测验试题及参考答案
- 用工风险考试题目及完整答案
- 四年级语文教学计划
- 2026年1月浙江省首考地理真题卷及答案
- 2026年城市道路检测方案
- 2026年度全国保密教育线上培训考试试卷及答案
- 2026年企业员工培训需求分析及方案
- icu机械通气的临床应用
- 山地智慧灌溉系统建设项目可行性研究报告(范文模板)
- GB/T 48012.1-2026光伏发电系统用功率转换设备安全性第1部分:通用要求
- 北京市门头沟区城子街道办事处招聘城市协管员3人考试参考题库及答案详解
- 2026年汛期防汛排涝安全培训试题(含答案)
- 2025年教育综合知识真题试题及答案
- 铅山县2026年回村任职大学生集中选聘【40人】笔试参考题库及答案详解
- 2026年浙江省综合性评标专家库评标专家考试在线题库
- 2026年教研员面试试题及答案(含解析)
- 旧管道拆除施工方案
- 2026年留疆战士考核综合应试能力提升练习题含答案
评论
0/150
提交评论