第 4 章 选择结构程序设计
选择结构要解决的问题:根据某个条件是否满足来决定是否执行指定的操作任务,或者从给定的两种或多种操作选择其一。
4.1 选择结构和条件判断
C 语言中有两种选择语句:
- if 语句:用来实现两个分支的选择结构;
- switch 语句:用来实现多分支的选择结构。
4.2 用 if 语句实现选择结构
4.2.1 用 if 语句处理选择结构举例
4.2.2 if 语句的一般形式
if 语句的一般形式如下:
if (表达式) 语句 1
[else 语句 2]
- if 语句中的“表达式”可以是关系表达式、逻辑表达式、数值表达式。
- 方括号内的 else 子句是可选的。
- 语句 1 和 语句 2 可以是一条简单的语句,也可以是一个复合语句。
if 语句最常用的有以下 3 种形式:
if (表达式)
语句 1
if (表达式)
语句 1
else
语句 2
if (表达式 1)
语句 1
else if (表达式 2)
语句 2
...
else
语句 n
4.3 关系运算符和关系表达式
在 C 语言中,比较符(或称比较运算符)成为关系运算符。
4.3.1 关系运算符及其优先次序
C 语言提供 6 中关系运算符:
- <
- <=
- >
- >=
- ==
- !=
关于优先次序:
- 前 4 种关系运算符(<, <=, >, >=)的优先级相同,后 2 种也相同。
- 关系运算符的优先级低于算术运算符。
- 关系运算符的优先级高于赋值运算符。
4.3.2 关系表达式
用关系运算符将两个数值或数值表达式连接起来的式子,称为关系表达式。
关系表达式的值是一个逻辑值,即“真”或“假”。
在 C 的逻辑运算中,以“1”代表“真”,以“0”代表“假”。
4.4 逻辑运算符和逻辑表达式
用逻辑运算符将关系表达式或其他逻辑量连接起来的式子就是逻辑表达式。
4.4.1 逻辑运算符及其优先次序
有 3 种逻辑运算符,与(&&),或(||),非(!)。
表 4.1 C 逻辑运算符及其含义
运算符 | 含义 | 举例 | 说明 |
---|---|---|---|
&& | 逻辑与 | a&&b | 如果 a 和 b 都为真,则结果为真,否则为假 |
|| | 逻辑或 | a||b | 如果 a 和 b 有一个以上为真,则结果为真,二者都为假时,结果为假 |
! | 逻辑非 | !a | 如果 a 为假,则 !a 为真,如果 a 为真,则 !a 为假 |
- "&&"和"||"是双目(元)运算符,它要求有两个运算对象(操作数)。
- “!”是一目(元)运算符,只要求有一个运算对象。
在一个逻辑表达式中如果包含多个逻辑运算符,按以下的优先次序:
- ! > && > ||,“!”为三者中最高的。
- 逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符。
4.4.2 逻辑表达式
-
逻辑表达式的值是一个逻辑值“真”或“假”。
-
C 语言在表示逻辑运算结果时,用 1 代表“真”,用 0 代表“假”。
-
C 语言在判断一个量是否为“真”时,以 0 代表“假”,以非 0 代表“真”。
-
由系统给出的逻辑运算结果不是 0 就是 1。而在逻辑表达式中作为参加逻辑运算的运算对象可以是 0 或任何其他非 0 的数值。
-
实际上,逻辑运算符两侧的运算对象不但可以是 0 和 1,或者时 0 和非 0 的整数,也可以时字符型、浮点型、枚举型或指针型的纯量数据,最终以 0 和非 0 来判断它们属于“真”或“假”。
在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。
4.5 条件运算符和条件表达式
条件运算符由两个符号(? 和 :)组成,要求有 3 个操作对象,称为三目(元)运算符。它是 C 语言中唯一的一个三目运算符。
条件表达式的一般形式为:
表达式 1 ? 表达式 2 : 表达式 3
- 条件运算符的执行顺序:先求解表达式 1,若为非 0(真),则表达式 2 的值作为条件表达式的值;反之则以表达式 3 的值作为条件表达式的值。
- 条件运算符优先于赋值运算符。
- 表达式 2 和表达式 3 可以是数值表达式,还可以是赋值表达式或函数表达式。
条件表达式相当于一个不带关键字 if 的 if 语句,可以处理简单的选择结构。
4.6 选择结构的嵌套
在 if 语句中又包含一个或多个 if 语句称为 if 语句的嵌套。其一般形式如下:
if ()
if ()
语句 1
else
语句 2
else
if ()
语句 3
else
语句 4
注意 if 与 else 的配对关系,else 总是与它上面的最近的未配对的 if 配对。
如果 if 与 else 的数目不一样,可以加花括号来确定配对关系。例如:
if ()
{
if ()
语句 1
}
else
语句 2
4.7 用 switch 语句实现多分支选择结构
C 语言提供 switch 语句直接处理多分支选择,也可以用嵌套的 if 语句来处理。
switch 是多分支选择语句。switch 语句的作用是根据表达式的值,使流程跳转到不同的语句。switch 语句的一般形式如下:
switch (表达式)
{
case 常量 1 :
语句 1
case 常量 2 :
语句 2
...
case 常量 n :
语句 n
default :
语句 n + 1
}
- switch 语句中括号内的“表达式”的值的类型应为整数类型(包括字符型);
- switch 语句的花括号内是一个复合语句,它是 switch 语句的语句体。语句体内包含多个以关键字 case 开头的语句行和最多一个以 default 开头的行。case 后面跟一个常量(或常量表达式)。case 和 default 起到标记的作用,用来标志一个位置。 执行 switch 语句时,先计算 switch 后面的“表达式”的值,然后与某一个 case 标记中常量相同,就执行此 case 标记后的语句。如果没有匹配到任何一个 case 标记中的常量,就执行 default 标记后的语句。
- 在 switch 语句体中可以没有 default 标记。
- 各个 case 与 default 标记出现次序不影响执行结果。
- 每一个 case 标记后的常量必须互不相同。
- case 标记只标志的作用。在匹配到一个 case 标记后,就从此标记开始执行下去,不再进行判断。
- 一般情况下,在执行完一个 case 子句后,应当用 break 语句跳出 switch 语句。
- 多个 case 标记可以公用一组执行语句。