逻辑或运算符 || 用于合并两个或多个条件,只要其中至少一个为 true,整个表达式的结果就为 true。
1. 真值规则
| 条件1 | 条件2 | 条件1 ` | ` 条件2 | |
|---|---|---|---|---|
| true | true | true | ||
| true | false | true | ||
| false | true | true | ||
| false | false | false |
核心口诀:一真即真,全假才假。
2. 基本语法与示例
if(a < 10 || b > c || c > 50)
printf("至少有一个条件是true就会执行本条语句");Code language: HTML, XML (xml)
上述代码中,只要 a < 10、b > c、c > 50 三个条件中任意一个成立,就会执行 printf()。三个全成立也执行。
3. 短路求值特性
与 && 相反,|| 的短路规则是:如果第一个条件为 true,就不再求值后续条件,直接判定整个式子为 true。
if(ptr != NULL || ptr->value > 0)
printf("ok\n");Code language: PHP (php)
这里 ptr != NULL 为 true 时,不会执行 ptr->value > 0 的求值,避免了空指针解引用风险。
4. && 与 || 混合使用
当两个条件需要同时满足,而整体又与其他条件二选一时,就会混合使用:
if((age > 12 && age < 20) || savings > 5000)
printf("你是一个青少年,或者你是很有钱,或两个都是");Code language: HTML, XML (xml)
执行逻辑:
(age > 12 && age < 20)为 true → 整体为 true- 或者
savings > 5000为 true → 整体为 true - 两者都为 true → 整体仍为 true
括号的必要性:&& 优先级高于 ||,因此 (age > 12 && age < 20) 外面的括号可以省略不影响结果,但加上后可读性更强,推荐保留。
5. 使用中间变量拆分
bool over_12 = age > 12;
bool under_20 = age < 20;
bool age_check = over_12 && under_20;
bool savings_check = savings > 5000;
if(age_check || savings_check)
printf("你是一个青少年,或者你是很有钱,或两个都是");Code language: HTML, XML (xml)
将复杂条件拆解为有意义的变量名,代码自解释性更强,也便于调试时观察各子条件的真假。
7. 与 if-else 配合的完整示例
#include <stdio.h>
int main(void)
{
int age = 0;
double savings = 0.0;
printf("请输入年龄和存款:");
scanf("%d %lf", &age, &savings);
if((age > 12 && age < 20) || savings > 5000)
printf("你是一个青少年,或者你很有钱,或两个都是\n");
else
printf("你既不是青少年,也不够富有\n");
return 0;
}Code language: PHP (php)