第6章 C语言选择结构_第1页
第6章 C语言选择结构_第2页
第6章 C语言选择结构_第3页
第6章 C语言选择结构_第4页
第6章 C语言选择结构_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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:/北京源智天下科技有限公司6.1.1 6.1.1 使用使用

4、if if语句语句if语句的功能是根据一个条件判断的结果选择执行某一分支语句的功能是根据一个条件判断的结果选择执行某一分支。if语句可以分为两个部分:语句可以分为两个部分:if头和头和if体。体。if头由关键字头由关键字if和包含在括号中的表达式组成。和包含在括号中的表达式组成。if体由一个语句或一个复体由一个语句或一个复合语句组成。例如:合语句组成。例如:if (判断表达式判断表达式 ) /* if头头 */操作操作1;/* if体体 */操作操作2;联系方式:http:/北京源智天下科技有限公司6.1.1 6.1.1 使用使用if if语句语句if语句经常和语句经常和else语句组合使用。

5、语句组合使用。else语句也由两部分:语句也由两部分:else头和头和else体。关键字体。关键字if和关键字和关键字else搭配使用的标准形式如下:搭配使用的标准形式如下:if (判断表达式判断表达式 ) 操作操作1; else /* else头头*/操作操作2;/* else 体体*/合理地组合合理地组合if语句和语句和else语句,可以实现以下三种选择结构。语句,可以实现以下三种选择结构。联系方式:http:/北京源智天下科技有限公司6.1.1 6.1.1 使用使用if if语句语句1if结构结构if ( 表达式表达式 ) 操作操作1;该结构的程序流程图如右图所示。该结构的程序流程图如右

6、图所示。联系方式: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 )执行操作执行操作2; else if ( 表达式表达式3 )执行操作执行操作3;/*在这里允许有任意多个在这里允许有任意

7、多个else if语句语句*/ else 执行操作执行操作4;联系方式:http:/北京源智天下科技有限公司该结构实现了多路分支结构,其中可以有任意多个该结构实现了多路分支结构,其中可以有任意多个else if语句,语句,每一个每一个else if都是一路程序分支。其程序流程图如下图所示。都是一路程序分支。其程序流程图如下图所示。联系方式:http:/北京源智天下科技有限公司6.1.1 6.1.1 使用使用if if语句语句else if结构实际上是结构实际上是if-else结构的变种,可以其改写为结构的变种,可以其改写为if-else结构(为了结构(为了简化,程序只包含一个简化,程序只包含一

8、个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的配对使用的配对使用关键字关键字else与与if的组合使用可以实现多种丰富的选择结构。的组合使用可以实现多种丰富的选择结构。但在当程序中使用但在当程序中使用else语句时,务必保证关键字语句时,务

9、必保证关键字else必须必须存在一个正确配对的存在一个正确配对的if。当。当if体或体或else体中嵌套使用体中嵌套使用if语句语句的三种形式时,的三种形式时,else和和if的配对情况会变得复杂,若不细的配对情况会变得复杂,若不细心处理,就有可能发生错误。心处理,就有可能发生错误。联系方式:http:/北京源智天下科技有限公司6.1.3 6.1.3 选择结构中的不平等分支选择结构中的不平等分支在一个选择结构中,如果有多个分支,而各分支的关系是不在一个选择结构中,如果有多个分支,而各分支的关系是不平等的,则按照思维逻辑的习惯可以将分支按重要性或平等的,则按照思维逻辑的习惯可以将分支按重要性或优

10、先级的顺序从高到低排放。而在优先级的顺序从高到低排放。而在if-else结构中,如果两结构中,如果两个分支不是平等的,请按照逻辑思维习惯,把重要的或个分支不是平等的,请按照逻辑思维习惯,把重要的或者正常的分支处理放在者正常的分支处理放在if体里,即当体里,即当if头的选择表达式为头的选择表达式为真时进入的分支是重要的或者正常的;而次要的或者异真时进入的分支是重要的或者正常的;而次要的或者异常的分支处理放在常的分支处理放在else体。如果是多路分支选择结构,体。如果是多路分支选择结构,一般按分支的重要性依次向后排列。一般按分支的重要性依次向后排列。联系方式:http:/北京源智天下科技有限公司6

11、.1.4 6.1.4 判断表达式中的与判断表达式中的与赋值操作符赋值操作符=与等于操作符与等于操作符=只相差一个等号,前者多写一只相差一个等号,前者多写一个等号就变成后者,而后者少写一个等号也变成前者。个等号就变成后者,而后者少写一个等号也变成前者。这种错误在编程中十分常见。而且,这两种都是合法的这种错误在编程中十分常见。而且,这两种都是合法的写法,编译器无法自动检测。如果这种错误出现在写法,编译器无法自动检测。如果这种错误出现在if语句语句的判断表达式中,很可能出现期望外的逻辑完全不一样的判断表达式中,很可能出现期望外的逻辑完全不一样的程序。因此,编程时必须特别小心。下面的范例讨论的程序。因

12、此,编程时必须特别小心。下面的范例讨论了这种错误的危险,并讨论一种防范这种错误的措施。了这种错误的危险,并讨论一种防范这种错误的措施。联系方式:http:/北京源智天下科技有限公司6.2 switch6.2 switch语句语句switch语句是语句是C语言中选择结构的另一个常用的实现方式,语言中选择结构的另一个常用的实现方式,十分适用于多路选择的实现。本小节将讨论十分适用于多路选择的实现。本小节将讨论switch结构结构的使用和的使用和break语句在语句在switch结构中的作用,同时还比较结构中的作用,同时还比较了了switch结构和结构和if-else结构在实现多路选择中的优劣,结构在

13、实现多路选择中的优劣,最后还介绍了标号的使用。最后还介绍了标号的使用。联系方式:http:/北京源智天下科技有限公司6.2.1 6.2.1 使用使用switchswitch语句语句switch语句的标准形式如下:语句的标准形式如下:switch ( 判断表达式判断表达式 ) /* switch头,下面为头,下面为switch体体 */case 常量表达式常量表达式1: 操作操作1;/* 分支分支1 */case 常量表达式常量表达式2: 操作操作2;/* 分支分支2 */case 常量表达式常量表达式3: 操作操作3;/* 分支分支3 */default: 操作操作n;/* 异常情况异常情况

14、*/联系方式:http:/北京源智天下科技有限公司6.2.2 break6.2.2 break语句语句break语句在语句在switch语句中的作用十分重要。在语句中的作用十分重要。在switch语句语句中,遇到中,遇到break便终止执行便终止执行switch语句,跳出本层语句,跳出本层switch体,继续执行后续语句。正确使用体,继续执行后续语句。正确使用break语句与语句与case语句语句和合理搭配,可以实现功能强大的多路选择功能。和合理搭配,可以实现功能强大的多路选择功能。联系方式:http:/北京源智天下科技有限公司6.2.3 else if6.2.3 else if语句和语句和s

15、witchswitch语句语句比较例比较例6-1和例和例6-4,读者会发现,读者会发现else if语句和语句和switch语句都语句都适合用在多路选择的场景中。那么,他们的区别是什么适合用在多路选择的场景中。那么,他们的区别是什么呢?呢? 整数或值为整数的表达式都可以构造成具有有效布尔值的表整数或值为整数的表达式都可以构造成具有有效布尔值的表达式,所以所有的达式,所以所有的switch语句都可以转化为语句都可以转化为else if语句。语句。然而,大多数的情况下,这种转化只会降低效率,是不然而,大多数的情况下,这种转化只会降低效率,是不能带来任何好处的。所以,使用能带来任何好处的。所以,使用

16、switch语句实现多路选语句实现多路选择结构比使用择结构比使用if-else语句更有优势。如果能使用语句更有优势。如果能使用switch语句,应该首先选择语句,应该首先选择switch语句。语句。联系方式:http:/北京源智天下科技有限公司6.2.4 switch6.2.4 switch中的标号中的标号在在switch语句中,涉及到了两种标号:语句中,涉及到了两种标号:case标号和标号和default标号。标号本身的存在不会改变程序的流程,但与跳转标号。标号本身的存在不会改变程序的流程,但与跳转主体(主体(switch与与goto,后面章节会介绍,后面章节会介绍goto语句)搭配语句)搭

17、配时,标号的存在会产生不同的执行过程。时,标号的存在会产生不同的执行过程。联系方式:http:/北京源智天下科技有限公司6.2.5 6.2.5 使用具名常量组成标号使用具名常量组成标号具名具名常量,顾名思义就是有名字的常量,它是常量,顾名思义就是有名字的常量,它是C语言中宏定语言中宏定义的一种用途,属于预处理命令,是在程序编译前(预义的一种用途,属于预处理命令,是在程序编译前(预处理)进行的工作。在处理)进行的工作。在“预处理预处理”一章中会详细讨论预一章中会详细讨论预处理的用法和功能。具名常量的定义由三部分组成:处理的用法和功能。具名常量的定义由三部分组成:#define、具名常量和数值。其

18、标准形式如下:、具名常量和数值。其标准形式如下:#define 具名常量具名常量 数值常量数值常量联系方式:http:/北京源智天下科技有限公司6.3 6.3 条件操作符与条件表达式条件操作符与条件表达式条件操作符是条件操作符是C语言中唯一的三元操作符,由条件操作符组语言中唯一的三元操作符,由条件操作符组成的条件表达式可以实现简单的选择结构。由于整个选成的条件表达式可以实现简单的选择结构。由于整个选择结构都实现在一条语句中,限制了条件表达式的功能择结构都实现在一条语句中,限制了条件表达式的功能,但也因此使其更适用于实现比较简单的选择控制结构,但也因此使其更适用于实现比较简单的选择控制结构。本小

19、节将先介绍条件操作符和条件表达式的使用,再。本小节将先介绍条件操作符和条件表达式的使用,再比较了条件表达式与比较了条件表达式与if-else结构的优劣,最后讨论了条件结构的优劣,最后讨论了条件表达式的类型转换和嵌套使用。表达式的类型转换和嵌套使用。联系方式:http:/北京源智天下科技有限公司6.3.1 6.3.1 使用条件操作符使用条件操作符条件表达式是通过使用条件操作符来实现的。条件操作符是条件表达式是通过使用条件操作符来实现的。条件操作符是个三元操作符,其标准形式如下:个三元操作符,其标准形式如下:表达式表达式1 ? 表达式表达式2 : 表达式表达式3;流程图如右图所示。流程图如右图所示

20、。联系方式:http:/北京源智天下科技有限公司6.3.2 6.3.2 条件表达式与条件表达式与if-elseif-else不同点主要包括以下两点:不同点主要包括以下两点:条件表达式的表达式条件表达式的表达式2和表达式和表达式3都只能是一句语句,不能为都只能是一句语句,不能为复合表达式;而复合表达式;而if体和体和else体则可以为复合表达式。体则可以为复合表达式。条件表达式仍可以作为其他表达式的子表达式。条件表达式仍可以作为其他表达式的子表达式。联系方式:http:/北京源智天下科技有限公司6.3.3 6.3.3 条件表达式中的类型转换条件表达式中的类型转换在条件表达式中,第在条件表达式中,

21、第2个表达式的值类型必须与第个表达式的值类型必须与第3个表达式个表达式的值类型相同。后两个表达式的值该类型就是条件表达的值类型相同。后两个表达式的值该类型就是条件表达式的值类型。如果两个值类型不同,则需要进行类型转式的值类型。如果两个值类型不同,则需要进行类型转换,其遵循的规则与数值运算中的类型转换相同。换,其遵循的规则与数值运算中的类型转换相同。联系方式:http:/北京源智天下科技有限公司6.3.4 6.3.4 条件表达式的嵌套条件表达式的嵌套条件表达式可以嵌套使用,即把一个条件表达式作为另一个条件表达式可以嵌套使用,即把一个条件表达式作为另一个条件表达式中的子表达式。例如,可以将范例条件

22、表达式中的子表达式。例如,可以将范例6-7的的if-else结构用条件表达式改写如下:结构用条件表达式改写如下:(0 = i ? b : a) 0)? printf(b 0n): printf(b = a) /* a,b均为整型均为整型 */do something;在这个例子里,只有当在这个例子里,只有当a不等于不等于0时,才能作为除数,时,才能作为除数,b / a = a才才合法,这种情况下才执行第二个表达式;如果合法,这种情况下才执行第二个表达式;如果a等于等于0,则条件,则条件表达式结束,值为表达式结束,值为0。上面的例子不能写为:。上面的例子不能写为:if (b / a = a) d

23、o something;这时,若这时,若a等于零,将出现错误。也不能写为:等于零,将出现错误。也不能写为:if (b / a = a & a != 0) do something;这也会产生错误,因为不管这也会产生错误,因为不管a是否为是否为0,都会执行,都会执行b / a。联系方式:http:/北京源智天下科技有限公司6.4.3 6.4.3 巧用隐式选择巧用隐式选择2使用结构体指针使用结构体指针当变量为结构体指针时,若要访问其成员,必须要保证该变当变量为结构体指针时,若要访问其成员,必须要保证该变量指向一个实体(即不为量指向一个实体(即不为NULL)。使用逻辑表达式可以)。使用逻辑表达式可以

24、实现如下:实现如下:if (ptr & ptr-data = data) /* ptr 指向一个含有成员指向一个含有成员data的结构体的结构体 */do something;只有当只有当ptr不等于不等于0(或或NULL),ptr-data才合法。如果才合法。如果ptr不不等于等于0,执行第二个表达式;如果,执行第二个表达式;如果ptr等于等于0,则条件表达,则条件表达式结束,值为式结束,值为0。结构体指针会在第。结构体指针会在第18章中详细讨论。章中详细讨论。联系方式:http:/北京源智天下科技有限公司6.4.3 6.4.3 巧用隐式选择巧用隐式选择3逻辑或表达式的多条件判断逻辑或表达式

25、的多条件判断下面这段代码是范例下面这段代码是范例6-5中的一段中的一段else if语句:语句: else if (4 = month/* 4月份月份 */| 6 = month/* 6月份月份 */| 9 = month/* 9月份月份 */| 11 = month)/* 11月份月份 */printf(there are 30 days 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语句展开语句展开得到完全等效的语句,如下:得到完全等效的语句,如下:else if ( 4 = month ) /* 4月份月份 */printf(there are 30 days in this

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论