4.2 关系运算符、逻辑运算符、条件运算符
4.2.1 1关系运算符:关系运算符用于判断两个操作数的大小关系。
注意:1关系运算符都是双目运算符,其结合方向是左结合。
2 关系运算符的优先级低于算术运算符,但是高于赋值运算符。
3关系运算符中,>、<、>=、<=的优先级相同,==、!=的优先级相同,前者的优先级高于后者,即“>=”的优先级高于“==”。
2关系表达式:用关系运算符将两个表达式连接起来的式子称为关系表达式。
功能:比较两个表达式的大小,返回一个逻辑值。
关系表达式中允许出现嵌套的情况。
注意 :1注意区分运算符“=”和“==”。“=”是赋值运算符,“==”是关系运算符。
2 对实数进行相等判断可能得不到正确的结果。
3 关系表达式中可以出现赋值运算符。
关系表达式主要用于分支结构中的条件判断。
4.2.2 逻辑运算符和逻辑表达式
1逻辑运算符
关系表达式只能描述单一的条件。对于较复杂的复合条件,例如:“x小于10且x大于4”,如果用关系表达式“4<x<10”来描述,则当x=2时,由于关系运算符是左结合的,因此先计算“4<x其”值为0;然后在计算“0<10”,其值为1;即说明档x=2时满足关系“4<x<10”,很显然是错误的。此时需要用到逻辑运算符将若干个关系表达式连接起来才能正确描述上述关系。
注意:与运算符&&和运算符||都是双目运算符,非运算符!为单目运算符。
2 逻辑表达式:用逻辑运算符将两个表达式连接起来的式子称为逻辑表达式。
逻辑表达式的结果也是一个逻辑值“真”或“假”,即为“1”或“0”
关于逻辑表达式的说明:1参与逻辑运算的数据可以是1和0,也可以是非零值和0,还可以是任何类型的数据,但最终都是以非0和0来判断他们是“真”或“假”。
2在逻辑表达式中也可以使用赋值运算符,如“a&&(b=0)”,但是不能写成“a&&b=0”相当于“(a&&b)=0”,赋值运算符左边不是变量,会出现编译错误。
3C语言规定,只对决定整个表达式值所需的最少数目的子表达式进行运算。即在由若干个子表达式组成的逻辑表达式中,从左向右计算,当计算出一个子表达式的值就确定了整个逻辑表达式的值时,此后就不再计算右边剩下的子表达式的值,这种情况称为“短路”。
4.2.3 条件运算符和条件表达式
1条件运算符:条件运算符由“?”和“:”两个符号组成,用于条件求值,它是一个三目运算符,需要三个操作数。条件运算符的优先级低于逻辑运算符、高于赋值运算符、它是右结合的。
2 条件表达式:由条件运算符将3个表达式连接起来的式子称为条件表达式。
关于条件表达式的说明:(1)条件表达式中表达式1的类型可以与表达式2和表达式3不同,表达式2和表达式3的类型也可以不同,此时系统会自动进行转换,结果为表达式2和表达式3中级别类型较高的,并将其作为条件表达式的类型。例如条件表达式“’a‘?1:2.0”的结果为doubie型的1.0.
(2)条件表达式中表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式,如“a>b?b=2:(c=4)",但是不能写成”a>b?b=3:c=4"的形式。这是由于在表达式“a>b?b=3:c=4"中,条件运算符的优先级高于复值运算符,上述表达式相当于”(a>b?b=3:c)=4",因赋值运算符左边不是变量,所以会出现编译错误。
(3)条件表达式允许嵌套,例如“a>3?b:c>2?:0",根据条件表达式的结合性,它相当于”a>3?b:(c>2?1:0)".
4.3 使用if——else实现分支结够
4.3.1 if——else语句
1双分支if语句:其语义是首先求解表达式,如果表达式的值为“真”,则执行语句1;若表达式的值为“假”则执行语句2,无论执行完语句1还是语句2,都会结束整个if语句的执行。
2 单分支if语句:其语句是首先计算表达式,如果表达式的值为“真”,则执行语句;否则不执行语句,直接执行if语句的下一语句。
4.4 使用switch语句实现分支结构
说明:1switch后的表达式可以是任何表达式,其值只能为整数、字符型、枚举型之一。
2每个case后面的常量表达式的值互不相同,否则就会出现互相矛盾的现象。
3各个case和defauit的出现次序不影响执行结果。
4可以让多个case共用一组执行语句。
5switch语句允许嵌套使用。
6使用switch语句的一个难点是构造switch语句的表达式。
1在switch语句格式中不使用break语句
switch语句中不使用break语句时,程序在执行相应语句后,不会跳出正在执行的switch语句,而会
继续执行其后的所有语句