首页 理论教育多分支程序设计-C语言程序设计基础(3rdEdition)

多分支程序设计-C语言程序设计基础(3rdEdition)

【摘要】:图3.6程序的4分支结构示意图对于一般的多分支情况,程序设计语言中没有直接对应的控制语句,需要首先对其分解,然后用单分支或者双分支控制结构的嵌套进行处理。图3.7分支结构对称分解示意图图3.8分支结构不对称分解示意图1.使用if语句嵌套组成多分支结构程序如果if结构或者else结构的语句部分又是另外一个if结构,称为if语句的嵌套。

在实际问题中,我们经常遇到多分支选择问题。所谓“多分支”,指的是在某个条件下存在着多种选择。例如,一个4分支的情况如图3.6所示。

图3.6 程序的4分支结构示意图

对于一般的多分支情况,程序设计语言中没有直接对应的控制语句,需要首先对其分解,然后用单分支或者双分支控制结构的嵌套进行处理。例如,图3.6所示的4分支结构可以有两种分解法方式,如图3.7和图3.8所示。

图3.7 分支结构对称分解示意图

图3.8 分支结构不对称分解示意图

1.使用if语句嵌套组成多分支结构程序

如果if结构或者else结构的语句部分又是另外一个if结构,称为if语句的嵌套。例如,在一个二分支if语句的两个语句部分分别嵌入一个二分支if语句的形式为(对应图2.5的分解方式):

【例3.6】 某公司按照销售人员收到的订单金额评定其等级。规则为:订单总金额≥10 000为A等,5 000~9 999为B等,2 500~4 999为C等,2 500以下为D等。编程序实现如下功能:输入某人的订单总金额数后,判定其对应的等级并输出结果。

在C程序中,也可能出现上述形式的各种变形,例如:if和else的语句部分中只有一个是if结构、嵌套和被嵌套的if结构中一个或者两个都是不平衡的if结构(即没有else部分的结构)等。特别地,当被嵌套的if结构均被嵌套在else的语句部分时,形成了一种称为else…if的多分支选择结构,这是if…else多重嵌套的变形(对应图2.6的分解方式),其一般形式为:

在这种特殊的else…if结构中,表示条件的表达式是相互排斥的,执行该结构时控制流程从exp1开始判断,一旦有一个条件表达式值为非0(真)时,就执行与之匹配的语句,然后退出整个选择结构;如果所有表示条件的表达式值均为0(假),则在执行语句sentenceN+1后退出整个选择结构;如果当所有的条件均为假时不需要进行任何操作,则最后的一个else和语句sentenceN+1可以缺省。

【例3.7】 重写例3.6的程序,要求用不对称分解方式处理多分支。

在包含了if语句嵌套结构的程序中,else子句与if的配对原则是非常重要的,按不同的方法配对则得到不同的程序结构。C语言规定:else子句不能独立出现,程序中的else子句与在它前面距它最近的且尚未匹配的if配对。无论将程序书写为何种形式,系统总是按照上面的规定来解释程序的结构。

2.使用switch语句组成多分支结构程序

使用if语句嵌套可以处理所有多分支的问题,但如果分支的条件不是某个区间的连续条件,而是若干个分散的条件点时,C语言提供了switch语句更加简洁地处理该类多分支问题。switch语句结构的一般形式如下:

C程序中使用switch结构时要注意以下几点:

·作为条件的表达式值只能是整型、字符型、枚举型三者之一;

·case后的语句段可以是单条语句,也可以是多条语句,但多条语句并不构成复合语句,不需要使用花括号{};

·结构中的常数值应与表示条件的表达式值对应一致,且各常数的值不能相同;(www.chuimin.cn)

·结构中的break语句和default项可根据需要确定是否选用;

·switch结构允许嵌套。

switch语句结构执行过程是:首先对作为条件的表达式(expression)求值;然后在语句结构的花括号内从上至下地查找所有case分支,当找到与条件表达式值相匹配(相同)的case时,将其作为控制流程执行的入口并从此处开始执行相应的语句段直到遇到break语句或者是到switch语句结构的右花括号“}”为止。

【例3.8】 从键盘上输入一个字符,判断它是数字、空格还是其他键;若是数字,还要求显示出是哪一个数字。

需要特别注意的是,在嵌套的switch结构中,内层switch结构执行中遇到break语句时,退出的仅仅是内层switch结构,下面的代码段说明了这个问题。