第五章 选择语句

第五章 选择语句

根据语句执行过程中顺序所产生的影响方式,C语言的其他语句大多属于以下三类:

选择语句( selection statement )。 if 语句和 switch 语句允许程序在一组可选项中选择一条特定的执行路径。

循环语句( iteration statement )。 while 语句、 do 语句和 for 语句支持重复操作。

跳转语句( jump statement )。 break 语句、 continue 语句和 goto 语句引起无条件地跳转到程序中的某个位置。( return 语句也属于此类)

C语言还有其他两类语句,一类是由几条语句组合成一条语句的复合语句,一类是不执行任何操作的空语句。

逻辑表达式

包括 if 语句在内的某些C语句都必须测试表达式的值是“真”还是“假”。诸如i

关系运算符

C语言的关系运算符( relational operator )用在C语言中时产生的结果是0(假)或1(真)。

符号

含义

<

小于

>

大于

<=

小于或等于

>=

大于或等于

关系运算符的优先级低于算术运算符,关系运算符都是左结合的。表达式i+j

判等运算符

符号

含义

==

等于

!=

不等于

判定运算符是左结合的,也是产生0或1作为结果。然而,判等运算符的优先级低于关系运算符。例如表达式i

逻辑运算符

符号

含义

!

逻辑非

&&

逻辑与

||

逻辑或

逻辑运算符所产生的结果是0或1。逻辑运算符将任何非零值操作数作为真值来处理,同时将任何零值操作作为假值来处理。

运算符&&和||都对操作数进行“短路”计算。

运算符!的优先级和一元正号、负号的优先级相同。运算符&&和||的优先级低于关系运算符和判等运算符。运算符!是右结合的,而运算符&&和||是左结合的。

if 语句

if 语句允许程序通过测试表达式的值从两种选项中选择一种。 if 语句的最简单的格式如下:

if (表达式) 语句

执行 if 语句时,先计算圆括号内的表达式的值。如果表达式的值非零,那么接着执行括号后面的语句,C语言把非零值解释为真值。

复合语句

如果想用 if 语句处理两条或更多语句,该怎么办呢?可以引入复合语句( compound statement )。复合语句有如下格式:

{ 多条语句 }

else 子句

if 语句可以有 else 子句:

if (表达式) 语句 else 语句

如果在圆括号内的表达式的值为0,那么就执行 else 后边的语句。

条件表达式

C语言提供了一种特殊的运算符,这种运算符允许表达式依据条件的值产生两个值中的一个。

条件运算符( conditional operator )由符号?和符号:组成,两个符号必须按如下格式一起使用:

表达式1 ? 表达式2 : 表达式3

条件运算符是C运算符中唯一一个要求3个操作数的运算符。因此,经常把它称为三元运算符。

条件表达式的求值步骤是:首先计算出表达式1的值,如果此值不为零,那么计算表达式2的值,并且计算出来的值就是整个条件表达式的值;如果表达式1的值为零,那么计算表达式3的值,并且此值就是整个条件表达式的值。

布尔值

因为许多程序需要变量能存储假值和真值,所以C语言缺少适当的布尔类型可能会很麻烦。可以使用 int 型变量来模拟布尔类型:

int flag;

flag = 0;

flag = 1;

为了使程序更加便于理解,一个好的方法是用类似 TRUE 和 FALSE 这样的名字定义宏:

#define TRUE 1

#define FALSE 0

flag = FALSE;

flag = TRUE;

为了更进一步实现这个想法,甚至可以定义用作类型的宏:

#define BOOL int

BOOL flag;

switch 语句

C语言提供了 switch 语句作为级联式 if 语句的替换:

switch (grade) {

case 4: printf("Excellent"); break;

case 3: printf("Good"); break;

case 2: printf("Average"); break;

case 1: printf("Poor"); break;

case 0: printf("Failing"); break;

default: printf("Illegal grade"); break;

}

switch 语句的最常用的格式如下:

switch (表达式) {

case 常量表达式: 多条语句

...

case 常量表达式: 多条语句

default: 多条语句

}

switch 语句的组成部分:

控制表达式。 switch 后面必须跟着右圆括号括起来的整型表达式。C语言把字符当成整数来处理,因此可以在 switch 语句中对字符进行判定。但是,不能用浮点数和字符串。

情况标号。常量表达式( constant expression )更像是普通的表达式,5是常量表达式,5 + 10也是,而n + 10不是(除非n是表示常量的宏)。

语句。每个情况标号的后边可以跟任意数量的语句,不需要用大括号括起来。每组语句的最后通常是 break 语句。

国际上著名的音响设备品牌有哪些?100个享誉全球的音响设备品牌
免费蜜蜂涂色页