选择结构和转移语句
if 语句
if语句是用来实现双分支选择结构的语句。
一般形式:
if(逻辑量)
语句1
else
语句2
if和else是构成if 语句的关键字,语句中的逻辑量是选择结构的条件,else和语句2可以省略。
语句1和语句2都只能是单条语句,如果在逻辑量为真或为假的分支中需执行多个操作,应该使用复合语句将多个操作构成一条语句。
条件表达式
-
条件运算符
由两个符号“?”和“:”复合而成,是C语言中唯一的三目运算符。
第一目写在“?”之前,是逻辑量,第二目写在“?”和“:”中间,是数据,第三目写在“:”之后,是数据。条件运算符的优先级只比赋值运算符和逗号运算符高,结合性为右结合。
-
条件表达式
用条件运算符将运算对象连接起来的符合C语言规则的表达式。
运算过程:先判断第1目逻辑量,如果逻辑量为真,选取第2目的结果作为整个表达式的值,否则选取第3目结果作为整个表达式的值。
条件表达式中存在类型的自动转换,条件表达式的值的类型是第2目和第3目中类型较高的运算对象的类型。
- 条件表达式运算的短路
if 语句的嵌套
if 语句的嵌套中,会有多个if和多个else。按照if 语句的规则if和else中间只能有一条语句,嵌套的if 语句中else总是和它前面最近的没有和其它else配对的if配对。
switch 语句
C语言提供了专门处理多分支选择结构的switch语句,又称为开关语句。
在switch 语句实现的多分支选择结构中,不同的分支通过不同的常量来标识,因此使用switch 语句实现多分支选择结构时,首要的任务是构造表达式,使得该表达式的取值可以唯一明确某一分支。
具体形式:
switch(表达式)
{
case 常量1: 语句组1
case 常量2: 语句组2
···
case 常量n: 语句组n
default : 语句组n+1
}
其中switch、case、default是switch 语句的关键字。“{}”内是switch 语句的语句体,不表示复合语句。switch后面括号里的表达式的值可以是任意类型,系统会自动转换为整型或字符型。case之后只能是常量或常量表达式,不能是变量或其它表达式,其值就是switch后括号内的表达式的各种可能的取值,各个常量应互不相同。语句组可以是多条语句,也可以没有语句,不需要用“{}”括起来构成复合语句。语句组中可以使用“break;”语句,它的作用是终止switch 语句的执行,转向执行switch 语句的后续语句。
switch 语句执行时,先求解switch后面括号里的表达式的值,然后用表达式的值和case后面的常量逐一进行比较,如果表达式的值和某一个case后面的常量相等,则由此进入switch 语句,开始顺次执行后面所有的可执行语句,如果和所有的case后面的常量都不相符,就由default后面的语句进入开始执行,直到遇到switch 语句结束的“}”或者遇到“break;”语句,结束switch 语句的执行。
- case和case之后的常量之间必须有空格。
- 如果多个常量用来标识同一个分支,要用多个case来标识,不能省略。
- “case 常量:”之后可以有多条语句,不需要用“{}”括起来。
- “case 常量:”之后也可以一条语句都没有。
- default 语句可以放在任意位置上。default 语句所处的位置不影响switch 语句的执行方式。
- switch 语句中右大括号之前必须有语句,如果没有则应用空语句来完善程序结构。
break 和 continue 语句
break 语句
break 语句只能使用在 switch语句的语句体 和 循环体语句 中。
break 语句在循环体中的作用是结束循环,继续执行循环的后续语句。break
语句在循环体中必须和if 语句配合使用,才不会破坏循环语句的作用。
continue 语句
continue 语句只能使用在 循环体语句 中。
continue 语句的功能是结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环执行。
continue 语句只结束本层本次的循环,并不终止循环。