3.1 关系运算符和逻辑运算符
3.1.1 关系运算符
- 优先级高:
>
(大于)、<
(小于)、>=
(大于或等于)、<=
(小于或等于) - 优先级低:
==
(等于)、!=
(不等于)
’
3.1.2 逻辑运算符
&&
(与):如果 a 和 b 都为真,则结果为真,否则为假。||
(或):如果 a 和 b 有一个以上为真,则结果为真,二者都为假时,结果为假。!
(非):如果 a 为假,则!a
为真,如果 a 为真,则!a
为假
3.2 运算符的优先级
优先次序:
- 前 4 种关系运算符(
<
,<=
,>
,>=
)的优先级别相同,后 2 种也相同。前 4 种高
于后 2 种。例如,>
优先于==
。而>
与<
优先级相同。- 关系运算符的优先级低于算术运算符。
- 关系运算符的优先级高于赋值运算符。
例如:
c > a+b
等效于c > (a+b)
(关系运算符的优先级低于算术运算符)a>b == c
等效于(a > b) == c
(大于运算符 > 的优先级高于相等运算符 ==)a == b < c
等效于a == (b < c)
(小于运算符<的优先级高于相等运算符==)a = b > c
等效于a = (b > c)
(关系运算符的优先级高于赋值运算符)
运算符优先级排序(由高到低):
!(非) > 算术运算符 > 关系运算符 > && 和 || > 赋值运算符
3.3 逻辑表达式
用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。逻辑表达式的值应该是一个逻辑量「真」或「假」。任何非零的数值被认作「真」。
逻辑表达式自左向右扫描求解。
3.4 条件语句:条件、复合语句、条件语句的嵌套和级联、条件运算符和条件表达式
3.4.1 条件语句三种表现形式:
-
if(表达式)语句,例如:
if(x > y) printf("%d",x);
-
if(表达式)语句 1 else 语句 2,例如:
if (x > y) printf("%d",x); else printf("%d",y);
-
if(表达式 1)语句 1 else if(表达式 2)语句 2 else if(表达式 3)语句 3 …… else if(表达式 m)语句 m else 语句 n,例如:
if (number > 500) cost = 0.15; else if(number > 300) cost = 0.10; else if(number > 100) cost = 0.075; else if(number > 50) cost = 0.05; else cost = 0;
注意:
- 3 种形式的 if 语句中在 if 后面都有表达式,一般为逻辑表达式或关系表达式。
- 第二、第三种形式的 if 语句中,在每个 else 前面有一个分号,整个语句结束处有一个分号。
- 在 if 和 else 后面可以只含有一个内嵌的操作语句,也可以由多个操作语句,此时用花括号将几个语句括起来成为一个复合语句。
3.4.2 条件语句的嵌套
if(表达式)
if(表达式) 语句1
else 语句2
else
if() 语句3
else 语句
匹配规则:
else 总是与它上面的、最近的、统一复合语句中的,未配对的 if 语句配对。
当 if 和 else 数目不同时,可以加 花括号 来确定配对关系。
3.4.3 条件运算符
-
格式:表达式 1 ? 表达式 2 : 表达式 3
-
功能:判断表达式 1 的值,如果成立就执行表达式 2,否则就执行表达式 3
-
使用场合:若在 if 语句中,当被判别的表达式的值为 "真" 或 "假" 时,都执行一个赋值语句且向同一个变量赋值时,可以用一个条件运算符来处理。
注意:
- 条件运算符的执行顺序:先求解表达式 1,若为非 0(真)则求解表达式 2,此时表达式 2 的值就作为整个条件表达式的值。若表达式 1 的值为 0(假),则求解表达式 3,表达式 3 的值就是整个条件表达式的值。
- 条件运算符优先级高于赋值运算符 ,低于关系运算符和算术运算符。
- 条件运算符的结合方向为 "自右至左"。
- 表达式 2 和 表达式 3 不仅可以是数值表达式,还可以是赋值表达式或函数表达式。
- 条件表达式中,表达式 1 的类型可以与表达式 3 和表达式 3 的类型不同。
3.5 switch 语句
- switch 格式:
switch (表达式) { case 常量表达式 1 : 语句 1 case 常量表达式 2 : 语句 2 …… case 常量表达式 n : 语句 n default : 语句 n+1 }
说明:
- switch 后面括弧内的 "表达式",ANSI 标准允许它为任何类型。
- 当表达式的值与某一个 case 后面的常量表达式的值相等时,就执行此 case 后面的语句,若所有的 case 中的常量表达式的值都没有与表达式的值匹配的,就执行 default 后面的语句。
- 每一个 case 的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。
- 各个 case 和 default 的出现次序不影响执行结果。例如,可以先出现 "default : …",再出现 "case ′D′ : …",然后是 "case ′A′ : …"。
- 执行完一个 case 后面的语句后,流程控制转移到下一个 case 继续执行。"case 常量表达式" 只是起语句标号作用,并不是在条件判断。在执行 switch 语句时,根据 switch 后面表达式的值 找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。应该在执行一个 case 分支后,可以用一个 break 语句来终止 switch 语句的执行。
- 多个可以共用一组执行语句。
评论(没有评论)