第3章 分支结构程序设计
通常,计算机按语句在程序中书写的顺序一行一行地执行,但在实际情况中,经常要根据不同的条件来执行不同的程序段,即判断某个变量或表达式的值,以决定执行哪些语句或跳过哪些语句。
比如,根据学生的分数来评定优、良、及格、不及格等级,如60分以下为不及格,90分以上为优等。这种结构通常称为选择结构,因为按不同的条件来确定程序不同的转向,所以也称为分支结构。
关系运算
关系运算就是对两个数据按它们值的大小进行比较的运算。判断它们是否符合给定条件:若符合,则结果为1(即真);否则结果为0(即假)。C语言提供了6种关系运算符:
| 运算符 | 含义 | 优先级 |
|---|---|---|
| < | 小于 | 6 |
| <= | 小于或等于 | |
| > | 大于 | |
| >= | 大于或等于 | |
| == | 等于 | 7 |
| != | 不等于 |
关系运算符的优先级
优先级规定了运算的先后顺序。C语言中关系运算符的优先级说明如下:
- 关系运算符被分为两组不同的优先级,"=="、"!="的优先级低于"<"、"<="、">"、">="
- 关系运算符的优先级低于算术运算符
- 关系运算符的优先级高于赋值运算符
a = b > 3 等价于 a = (b > 3)
a != b > 3 等价于 a != (b > 3)
练习题
1. 在C语言中,关系表达式的结果是什么类型?
答案:整型(int)。关系表达式的结果为1(真)或0(假)。
2. 假设a=3, b=4, c=5,则表达式a+b>c && b==c的值是多少?
答案:0。a+b>c为真(1),b==c为假(0),真与假为假(0)。
3. 写出判断年份year是否为闰年的关系表达式(闰年条件:能被4整除但不能被100整除,或者能被400整除)
答案:(year%4==0 && year%100!=0) || (year%400==0)
逻辑运算
C语言中有3种逻辑运算符:
| 运算符 | 含义 | 优先级 | 结合方向 |
|---|---|---|---|
| ! | 逻辑非 | 2 | 右 |
| && | 逻辑与 | 11 | 左 |
| || | 逻辑或 | 12 | 左 |
逻辑运算符的优先级
"!"高于"&&","&&"高于"||"。"!"高于算术运算符,而"&&"和"||"低于关系运算符。
a || b && x == y 等价于 a || (b && (x == y))
!x || x > y 等价于 (!x) || (x > y)
逻辑运算规则
假设A和B是两个表达式:
- A && B:若A、B均为真,则"A && B"值为真,否则为假
- A || B:若A、B均为假,则"A || B"值为假,否则为真
- !A:若A为真,则"!A"值为假,否则为真
练习题
1. 在C语言中,表示逻辑"真"和"假"的值分别是什么?
答案:非0值表示"真",0表示"假"。
2. 若a=1, b=2, c=3,则表达式!(a>b)&&!c||1的值是多少?
答案:1。!(a>b)为真(1),!c为假(0),真与假为假(0),假或1为真(1)。
3. 写出判断字符变量ch是否为数字字符的逻辑表达式
答案:ch >= '0' && ch <= '9'
知识点总结与易错点
知识点总结
- 关系运算符用于比较两个值的大小关系,结果为1(真)或0(假)
- 逻辑运算符用于组合多个条件,包括&&(与)、||(或)、!(非)
- 关系运算符的优先级低于算术运算符,但高于赋值运算符
- 逻辑非(!)的优先级最高,其次是逻辑与(&&),最后是逻辑或(||)
- 在C语言中,任何非0值都视为"真",只有0视为"假"
易错点
- 不要把赋值运算符"="和关系运算符"=="混淆
- 注意运算符的优先级,不确定时使用括号明确运算顺序
- 逻辑与(&&)和逻辑或(||)具有短路特性:对于&&,如果左边为假,右边不再计算;对于||,如果左边为真,右边不再计算
- 不要将逻辑运算符写成&&、||以外的形式(如AND、OR)
- 注意关系表达式和数学中不等式写法的区别,如数学中的a<b<c,在C语言中应写为a<b && b<c