选择结构是程序设计3种基本结构之一,通过判定给定的条件是否成立选择需要执行的操作。C语言提供了条件语句(if语句和switch语句)用以实现选择结构的程序设计,条件通常用关系表达式或逻辑表达式表示。C语言提供3种逻辑运算符,即!(逻辑非)、&&(逻辑与)、||(逻辑或)。
可知:1. 逻辑非运算表示对运算对象的值取反
(右结合性)2. 逻辑与运算中,当参与运算的两个操作数均为真时,其结果为真否则为假
(左结合性)3. 逻辑或运算中,当参与运算的两个操作数均为假时,其结果为假否则为真
(左结合性)多分支结构和else-if语句一般形式:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;...elseif(表达式n-1)语句n-1;else语句n;解析:表达式通常为关系表达式或者逻辑表达式,表示判定条件。语句可以是简单语句和复杂语句。执行流程:首先求解表达式1,为真则执行语句1,并结束整个if语句的执行,转至整个if语句的下一条语句;否则,求解表达式2,为真则执行语句2,并结束整个if语句的执行,转至整个if语句的下一条语句;否则...;最后的else处理给出的条件都不满足的情况,即表达式1、表达式2、...、表达式n-1的值都为假,执行语句n。
switch语句switch语句在处理多分支为题时更为方便有效,其又称为开关语句。根据switch语句使用break语句的方法,分3种情况。
1. 在switch语句中,各分支都有单独语句段和break语句,一般形式如下:switch(表达式) {case常量表达式1:语句1;break;case常量表达式2:语句2;break;...case常量表达式n:语句n;break;default: 语句n + 1;break;}执行流程:首先计算表达式的值,若表达式的值与某个case后的常量表达式的值相等,则执行该常量表达式后的语句段,接着执行其后的break语句跳出switch;若表达式的值不与任一个常量表达式相等,则执行default后的语句段,接着执行其后的break语句跳出switch。
注意:当遇到switch语句嵌套时,break只能跳出当前一层switch语句体,而不能跳出多层switch嵌套语句。2. 在switch语句中,各分支都不使用break语句,一般形式如下:switch(表达式) {case常量表达式1:语句1;case常量表达式2:语句2;...case常量表达式n:语句n;default: 语句n + 1;}执行流程:首先计算表达式的值,若表达式的值与某个case后的常量表达式的值相等,则执行该常量表达式后的语句段;若表达式的值不与任一个常量表达式相等,则执行default后的语句段。
注意:这种形式的switch语句很少使用,不能真正实现多分支情况的处理。例子:下面程序段根据考生成绩等级输出相应百分制分数段,分析能否正确实现。# include//编译预处理命令intmain() //主函数{switch('C') {case'A':printf("85~100\n");case'B':printf("70~84\n");case'C':printf("60~69\n");case'D':printf("不及格\n");default:printf("输入错误!\n");}return0;}分析:若grade的值为’C’,程序在执行到switch语句时,按顺序与switch的语句进行逐个比较,当在case中找到相匹配的’C’时,由于没有break语句,程序从分支case ‘C’:开始,向后顺序执行其后所有的语句。输出结果:
3. 在switch语句中,多个分支共用相同语句段和break语句。在switch语句中,允许case常量表达式后的语句段为空,这样就使得多个case分支共用相同语句段和break语句。实际应用中,当两个或多个分支所要执行的语句段功能完全相同时,可以使用这种形式,使程序看起来更简单。
嵌套的if-else语句一般形式:if(表达式1)if(表达式2)语句1;else语句2;elseif(表达式3)语句3;else语句4;显然,以上实现了4路分支。说明:else-if语句和嵌套的if-else语句都可以实现多分支结构,各有特色。else-if语句的逻辑结构更清晰,但效率较低。嵌套的if-else语句结构较为复杂,容易产生二义性,但效率较高。在嵌套的if-else语句中,如果内嵌if省略else,使得else与if数量不等,可能在语义上产生二义性。
这需要我们应该知道,else和if的匹配规则是由内而外的,else总是与它最近的且未与其他else匹配的if相匹配。推荐阅读
(点击文字自动跳转)
C语言系列(三):基本数据类型与表达式
C语言系列(二):用C语言编写程序
C语言系列(一):C语言程序概述
浅谈嵌入式
参考资料:肖捷 侯家利——C语言程序设计