C语言系列(四): 分支结构程序设计


在这里插入图片描述

选择结构是程序设计3种基本结构之一,通过判定给定的条件是否成立选择需要执行的操作。C语言提供了条件语句(if语句和switch语句)用以实现选择结构的程序设计,条件通常用关系表达式或逻辑表达式表示。

C语言提供3种逻辑运算符,即!(逻辑非)、&&(逻辑与)、||(逻辑或)。

在这里插入图片描述

可知:

  1. 逻辑非运算表示对运算对象的值取反(右结合性)
  2. 逻辑与运算中,当参与运算的两个操作数均为真时,其结果为真否则为假(左结合性)
  3. 逻辑或运算中,当参与运算的两个操作数均为假时,其结果为假否则为真(左结合性)

多分支结构和else-if语句

一般形式:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if (表达式3)
语句3;

else if (表达式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嵌套语句。

  1. 在switch语句中,各分支都不使用break语句,一般形式如下:

switch (表达式) {
case 常量表达式1:语句1;
case 常量表达式2:语句2;

case 常量表达式n:语句n;
default: 语句n + 1;
}

执行流程:首先计算表达式的值,若表达式的值与某个case后的常量表达式的值相等,则执行该常量表达式后的语句段;若表达式的值不与任一个常量表达式相等,则执行default后的语句段。

注意:这种形式的switch语句很少使用,不能真正实现多分支情况的处理。

例子:
下面程序段根据考生成绩等级输出相应百分制分数段,分析能否正确实现。

#include <stdio.h> //编译预处理命令
int main() //主函数
{
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”);
}
return 0;
}

分析:若grade的值为’C’,程序在执行到switch语句时,按顺序与switch的语句进行逐个比较,当在case中找到相匹配的’C’时,由于没有break语句,程序从分支case ‘C’:开始,向后顺序执行其后所有的语句。
输出结果:

在这里插入图片描述

  1. 在switch语句中,多个分支共用相同语句段和break语句。
    在switch语句中,允许case常量表达式后的语句段为空,这样就使得多个case分支共用相同语句段和break语句。实际应用中,当两个或多个分支所要执行的语句段功能完全相同时,可以使用这种形式,使程序看起来更简单。

嵌套的if-else语句

一般形式:
if(表达式1)
if (表达式2)语句1;
else 语句2;
else
if (表达式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语言程序设计
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值