第 4章 分支结构的程序设计
4.1 分支结构问题的提出
4.2 判断条件的描述方法
4.3 解决简单的分支问题
4.4 解决多重分支的问题
4.5 程序测试的问题
4.1 分支结构问题的提出上一章所讲到的顺序结构程序中,各语句是按照语句的前后顺序依次执行,没有选择,没有跳跃,也没有重复执行的问题,但是我们在解决实际问题时,经常遇到这样的问题:当客观现实事物满足不同的条件,会有不同的结果出现 。
比如:某一门课程考试成绩大于等于
60分,该课程考核视为通过;如果考试成绩小于 60分,则视为不通过 。 遇到类似这样的问题,首先需要判断一下具体的情况是什么,然后决定选择什么样的处理方式 。
不同的情况,会有不同的处理结果 。
对以上问题的解决,在程序设计中需要采用分支结构,也称为选择结构 。 上述提到的,条件,,在 C语言中是如何表示的呢?
4.2 判断条件的描述方法
4.2.1 用关系表达式描述判断条件
4.2.2 用逻辑表达式描述判断条件
4.3 解决简单的分支问题
4.3.1 if语句语句形式,if( 表达式)语句
if语句的执行是:遇到 if关键字,首先计算圆括号中的表达式的值,如果表达式的值为非 0,则执行圆括号其后的语句,然后执行 if语句后面的下一个语句 。 如果表达式的值为 0,则跳过圆括号后面的语句,
直接执行 if语句后面的下一个语句 。 if语句执行过程如图 4-1所示 。

4-
1if
语句的执行
4.3.2 if-else语句语句形式,if( 表达式 ) 语句 1
else语句 2
该语句遇到关键字 if,首先运算小括号中的表达式,如表达式的值为非 0,则执行紧跟其后的语句 1,执行完语句 1后,执行 if-else结构后面的语句;如果表达式的值为 0,则执行关键字 else后面的语句 2,接着执行 if-else结构后面的语句 。 执行过程如图
4-2所示 。
图 4-2 if-else语句的执行过程
4.3.3 if语句的嵌套在 if语句结构中,根据关键字 if后面的表达式的值 。 决定选择那一个分支,执行相应的语句 。 这个对应的语句只要是合法的语句,都可以执行 。 因此有时根据实际问题的需要,我们可以在 if语句结构中再包含 if语句结构,这就称为 if语句的嵌套 。
4.3.4 条件运算符和条件表达式在 C语言中使用 if语句,实现了分支结构,同时系统还提供了条件运算符,同样可以实现简单的分支结构 。
条件运算符为,?,
该运算符是由两个运算符所组成,为三目运算符。由条件运算符所构成的条件表达式为:表达式 1?表达式 2,表达式 3
它的运算功能是:当表达式 1的值为非
0时,运算表达式 2,此时表达式 2的值就作为整个条件表达式的值;当表达式 1的值为
0时,运算表达式 3,此时表达式 3的值就作为整个条件表达式的值。
条件运算符的优先级高于赋值运算符,
但低于逻辑运算、关系运算和算术运算符。
例如,y = x > 9? 100∶ 200,由于赋值号的优先级低于条件运算符,因此先求条件表达式的值,如 x>9关系表达式成立,
则条件表达式的值为 100;如 x>9 不成立,
则条件表达式的值为 200,然后将条件表达式的值赋给变量 y。
4.4 解决多重分支的问题
4.4.1 利用 if语句的嵌套功能请看以下语句结构:
if ( 表达式 1) if ( 表达式 1)
语句 1 语句 1
else if ( 表达式 2) else if ( 表达式 2)
语句 2 语句 2
else if ( 表达式 3) else if ( 表达式 3)
语句 3 整理后 语句 3
.,
.,
.,
else else
语句 n+1 语句 n+1
以上语句结构,除最后一个 else子句中,均嵌入了 if-else语句,此语句结构执行过程是:从上到下逐一对 if后面的表达式进行运算。当某一个表达式的值为非 0时,
就执行紧跟其后的相关子句中的语句,而后面的其余部分均被跳过。因此有 n个 if语句,就有 n+1个分支。
4.4.2 使用 switch语句实现多重分支除了使用嵌套的 if语句,实现多重分支选择之外,C语言系统还专门提供了一种多重分支选择语句 switch语句 。
switch语句的一般形式为:
switch ( 表达式)
{ case 常量表达式 1,语句 1
case 常量表达式 2,语句 2
.
.
.
case 常量表达式 n,语句 n
default,语句 n+1
}
说明
( 1) switch关键字后面的表达式,可以是任意合法的表达式。每个 case关键字后面的常量表达式的类型,必须与 switch
关键字后面的表达式类型一致。
( 2) 执行 switch语句,首先计算其后的表达式的值,然后自上而下顺序寻找一个 case后面的常量与该值相匹配,找到后按顺序执行此 case后面的所有语句,包括后续的 case子句,而不再进行判断 。 如果所有 case中的常量值都不能与 switch后面的表达式的值相等,就执行 default关键字后面的语句;若既没有相匹配的 case,也没有 default关键字,则直接跳过 switch语句 。
4.5 程序测试的问题
1,结构测试法这种测试方法的特点是:让测试用例尽可能地覆盖程序结构中的每一部分 。
2,功能测试法功能测试法的特点是:从程序需实现的功能出发来选取测试用例 。