逻辑或运算符 ||

逻辑或运算符 || 用于合并两个或多个条件,只要其中至少一个为 true,整个表达式的结果就为 true。

1. 真值规则

条件1条件2条件1 `` 条件2
truetruetrue​
truefalsetrue​
falsetruetrue​
falsefalsefalse

核心口诀:一真即真,全假才假。

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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注