第3章 分支结构程序设计

通常,计算机按语句在程序中书写的顺序一行一行地执行,但在实际情况中,经常要根据不同的条件来执行不同的程序段,即判断某个变量或表达式的值,以决定执行哪些语句或跳过哪些语句。

比如,根据学生的分数来评定优、良、及格、不及格等级,如60分以下为不及格,90分以上为优等。这种结构通常称为选择结构,因为按不同的条件来确定程序不同的转向,所以也称为分支结构。

关系运算

关系运算就是对两个数据按它们值的大小进行比较的运算。判断它们是否符合给定条件:若符合,则结果为1(即真);否则结果为0(即假)。C语言提供了6种关系运算符:

运算符 含义 优先级
< 小于 6
<= 小于或等于
> 大于
>= 大于或等于
== 等于 7
!= 不等于

关系运算符的优先级

优先级规定了运算的先后顺序。C语言中关系运算符的优先级说明如下:

  1. 关系运算符被分为两组不同的优先级,"=="、"!="的优先级低于"<"、"<="、">"、">="
  2. 关系运算符的优先级低于算术运算符
  3. 关系运算符的优先级高于赋值运算符
a > b + 3     等价于    a > (b + 3)
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

逻辑运算符的优先级

"!"高于"&&","&&"高于"||"。"!"高于算术运算符,而"&&"和"||"低于关系运算符。

x > y && m > n     等价于    (x > y) && (m > n)
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