C语言 分支控制——关系运算符和逻辑运算符

目录

关系运算符与关系表达式

关系运算符的优先级和结合性

关系表达式的值

逻辑运算符和逻辑表达式

逻辑运算符的优先级和结合性

逻辑运算符的短路特性


这是什么结构?

“树上有10只鸟,开枪打死一只,还剩几只?”

*如果挂在树枝上,则剩一只。如果掉下来,则一只也不剩。

*如果有关在笼子里的鸟,则……

*如果用的是无声手枪,则……

*如果树上有的鸟是聋子,则……

*如果一枪打死两只,则……

让计算机求解问题,必须考虑所有的“如果”

选择结构——分支结构(Selection Structurn)

*根据给定的判定条件,判断结果,并根据判断的结果来控制程序的流程

关系运算符与关系表达式

关系运算符的优先级和结合性

算术运算符 → 关系运算符

判断n是否是奇数                                                                  判断n是否是偶数

n%2 != 0                                                                              n%2 == 0

关系表达式的值

The value of a relational expression is a logical value:

true or false

There is no logic type in C,thus ,for a relational expression,

*true ←→1

*false←→0

判断表达式的真假

*非0←→true

*0←→false

问题:a > b >c表示“b在a和c之间”的意思吗?

NO  NO  NO

逻辑运算符和逻辑表达式

&&             与(AND):当且仅当两个操作数都为真“A并且B”      

||                或(OR):两个操作数中只要有一个为真“或者A或者B”    

!               非(NOT)

逻辑运算符的优先级和结合性

逻辑非 → 算术运算符 → 关系运算符 → 逻辑与 → 逻辑或

*逻辑非 ——右结合

*逻辑与,逻辑或——左结合

问题:如何表示“b在a和c之间”?

a > b  &&  b > c

(a > b)  &&  (b > c)

判断ch是大写英文字母

'Z' >= ch >='A'  ?

(ch >= 'A')  &&  (ch <= 'Z')

判断ch是数字字符

(ch >= '0')  &&  (ch <= '9')

一位百岁老人一生只过了25个生日,是何原因呢?

判断某年year是闰年的条件是满足下列二者之一

*能被4整除,但不能被100整除

*能被400整除

如何表示“能被某数整除”?用什么运算?

year%4==0 && year%100!=0  ||  year%400==0

优先级:  %  ==(!=)  &&  ||

((year%4==0)&&(year%100!=0))||(year%400==0)

逻辑运算符的短路特性

问题:用逻辑与&&或者逻辑或||连接的两个子表达式互换位置,对整个逻辑表达式的值有影响吗?

*若表达式的值可由先计算的左操作数的值单独推导出来,那么将不再计算右操作数的值

*“短路”特性

   (a >= 1)&&(b++==5)       (b++==5)&&(a >= 1)

(0 >= 1)&&(b++==5)       (b == 5)&&(a >= 1)

→        0       &&(b++==5)          b++

→        0

a:0

b:5

短路特性有时也很有用

i  != 0)&&(j / i > 0)

——“短路”使得“除0”运算不会发生

良好的程序设计风格还是不建议在程序中使用多用途、复杂而晦涩难懂的复合表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值