2.1 关系与逻辑运算符
程序不只是按顺序执行语句。很多时候,它需要先判断某个条件(condition)是否成立,再决定下一步要做什么。在 C 中,条件的结果用整数表示:0 表示假,非 0 表示真。
关系运算符
关系运算符(relational operator)用于比较两个值。比较结果不是数字本身,而是 1(真)或 0(假)。
C 中常见的关系运算符包括:
<:小于>:大于<=:小于等于>=:大于等于==:等于!=:不等于
注意
一个等号
= 是赋值(assignment),两个等号 == 才是比较(comparison)。c
int age = 17;
printf("%d\n", age < 18); // 1
printf("%d\n", age == 18); // 0
printf("%d\n", age != 18); // 1age = 17 的意思是把 17 赋值给变量 age。age == 18 的意思是比较 age 当前的值是否等于 18。
正在加载概念检查...
逻辑运算符
逻辑运算符(logical operator)用于连接多个条件。它们的结果仍然是 1 或 0。
&&:多个条件都为真时,整体才为真。||:多个条件中至少有一个为真时,整体就为真。!:把真变成假,把假变成真。
逻辑运算符真值表
真值表(truth table)会把所有可能的输入组合列出来,帮助你看清逻辑运算符的规则。
&& 要求左右两边都为真,结果才为真。
| A | B | A && B |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 假 | 假 |
| 假 | 真 | 假 |
| 假 | 假 | 假 |
|| 只要求左右两边至少有一边为真,结果就为真。
| A | B | A `\ | \ | ` B |
|---|---|---|---|---|
| 真 | 真 | 真 | ||
| 真 | 假 | 真 | ||
| 假 | 真 | 真 | ||
| 假 | 假 | 假 |
! 只作用在一个值上,会把结果反过来。
| A | ! A |
|---|---|
| 真 | 假 |
| 假 | 真 |
c
int age = 20;
int has_ticket = 1;
printf("%d\n", age >= 18 && has_ticket); // 1
printf("%d\n", age < 18 || has_ticket); // 1
printf("%d\n", !has_ticket); // 0如果你把条件读成自然语言,会更容易理解:age >= 18 && has_ticket 可以读成“年龄至少 18 岁,并且有票”。
正在加载交互实验...
正在加载概念检查...
组合条件
和数学写法不同,C 不支持把比较“串起来”写。0 < age < 18 在 C 中不会报错,但它的含义并不是“age 在 0 到 18 之间”,所以要写成两个条件用 && 连接。
c
int age = 16;
printf("%d\n", 0 < age && age < 18); // 1当条件变复杂时,建议先把每个小条件命名清楚,再组合起来。
c
int score = 85;
int attendance = 92;
int passed = score >= 60 && attendance >= 80;
int excellent = score >= 90 || attendance >= 95;
printf("%d\n", passed); // 1
printf("%d\n", excellent); // 0不要急着把所有条件写成一行。先把每个小条件命名清楚,程序会更容易读,也更容易排错。
正在加载概念检查...