分支和跳转
if语句
概念
if语句被称为分支语句或选择语句,因为它相当于一个交叉点,程序要在两条分支中选择一条执行。
形式
if ( expression )
statement
作用
如果对expression求值为真(非0),则执行statement;否则,跳过statement。这与while循环有点像,先判断条件,再执行。但是if条件只测试和执行一次,而while循环可测试执行多次。
if else语句
形式
if ( expression )
statement1
else
statement2
作用
如果expression为真(非0),则执行statement1;如果expression为假或
0,则执行else后面的statement2。
多重选择else if
形式
if(expression 1)
statement1
else if(expression 2)
statement2
else if(expression 3)
statement3
else
statement4
作用
expression哪个为真(非0)就执行谁后面的statement,若表达式都不成立,则执行else后面的statement。
注意
-
一个 if 后可跟零个或多个 else if,else if 必须在 else 之前。
-
一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试。
-
一边else if写在一起不分行,在浏览程序时,这种形式让读者更容易看清楚各项选
择。
if else的配对
/*例1*/
if ( expression 1)
if ( expression 2)
statement 1
else
statement 2
/*例2*/
if ( expression 1)
{
if ( expression 2)
statement 1
}
else
statement 2
规则
如果没有花括号,else与离它最近的if匹配,除非最近的if被花括号括起来。如例1,else与if (expresssion 2)配对,而例2有花括号,else与if(expression 1)配对。
多层嵌套的if语句
前面介绍的if…else if…else序列是嵌套if的一种形式,从一系列选项中选择一个执行。有时,选择一个特定选项后又引出其他选择,这种情况可以使用另一种嵌套 if。
形式
if(expression 1)
{
if(expression 2)
{
statement
}
}
作用
当第一个if通过后,检查expression 2进行进一步选择。
多重选择swich
使用条件运算符和 if else 语句很容易编写二选一的程序。然而,有时程序需要在多个选项中进行选择。可以用if else if…else来完成。但是,大多数情况下使用switch语句更方便。
形式
switch ( expression )
{
case label1 : statement1
case label2 : statement2
...
default : statement3
}
作用
程序根据expression的值跳转至相应的case标签处。然后,执行剩下的所有语句,除非执行到break语句进行重定向。如果没有case标签与expression的值匹配,控制则转至标有default的语句(如果有的话);否则,将转至执行紧跟在switch语句后面的语句。
注意
- break语句可用于循环和switch语句中,但是continue只能用于循环中。如果switch语句在一个循环中,continue便可作为switch语句的一部分。这种情况下,就像在其他循环中一样,continue让程序跳出循环的剩余部分,包括switch语句的其他部分。
- case一般都指定一个值,不能使用一个范围。
- switch在圆括号中的测试表达式的值应该是一个整数值(包括char类型)。case标签必须是整数类型(包括char类型)的常量或整型常量表达式。不能用变量作为case标签。
多个标签
可以有多个case执行同一条语句的情况,如:
switch ( expression )
{
case label1 :
case label2 : statement2
...
default : statement3
}
swich和if else选择
- 如果是根据浮点类型的变量或表达式来选择,就无法使用 switch。
- 如果根据变量在某范围内决定程序流的去向,使用 switch 就很麻烦,这种情况用if就很方便。如,if (integer < 1000 && integer > 2)。使用switch要涵盖以上范围,需要为每个整数(3~999)设置case标签。
逻辑运算符
if 语句和 while 语句通常使用关系表达式作为测试条件。有时,把多个关系表达式组合起来会很有用。这种情况下可以使用逻辑运算符。
与或非
C有三种逻辑运算符:
作用
当且仅当exp1和exp2都为真时,exp1 && exp2才为真;
如果exp1或exp2为真,则exp1 || exp2为真;
如果exp1为假,则!exp1为真;如果exp1为真,则!exp1为假。
备选拼写
C99标准新增了可代替逻辑运算符的拼写,它们被定义在ios646.h头文件中。如果在程序中包含该头文件,便可用and代替&&、or代替||、not代替!。
优先级
- !运算符的优先级很高,比乘法运算符还高,与递增运算符的优先级相同,只比圆括号的优先级低。
- &&运算符的优先级比||运算符高,但是两者的优先级都比关系运算符低,比赋值运算符高。
求值顺序
C保证逻辑表达式的求值顺序是从左往右。&&和||运算符都是序列点,所以程序在从一个运算对象执行到下一个运算对象之前,所有的副作用都会生效。
注
&&一般用于表示范围,在C语言中不允许使用数学写法,如90 <= range <= 100,这样的代码有语义错误,相当于(90 <= range) <= 100子表达式90 <= range的值要么是1(为真),要么是0(为假)。这两个值都小于100,所以不管range的值是多少,整个表达式都恒为真。因此,在范围测试中要使用&&。如range>=90&&range<=100。
条件运算符
C提供条件表达式作为表达if else语句的一种便捷方式,该表达式使用?:条件运算符。条件运算符是C语言中唯一的三元运算符。该运算符分为两部分,需要 3 个运算对象。
形式
expression1 ? expression2 : expression3
解释
测试中要使用&&。如range>=90&&range<=100。
条件运算符
C提供条件表达式作为表达if else语句的一种便捷方式,该表达式使用?:条件运算符。条件运算符是C语言中唯一的三元运算符。该运算符分为两部分,需要 3 个运算对象。
形式
expression1 ? expression2 : expression3
解释
如果 expression1 为真(非 0),那么整个条件表达式的值与 expression2的值相同;如果expression1为假(0),那么整个条件表达式的值与expression3的值相同。需要把两个值中的一个赋给变量时,就可以用条件表达式。