目录

C语言-判断语句

C语言—判断语句

C语言中的判断语句用于根据给定的条件来决定执行哪一段代码。其核心是条件为真(必须)则执行一段代码,条件为假(非必须)则执行另一段代码。

C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。

C语言提供了以下几种主要的判断/分支结构:

1、if 语句

2、if…else 语句

3、if…else if…else 语句

4、switch 语句

5、三元运算符(条件运算符)

1. if 语句

这是最基本的形式。如果条件为真,则执行后面的代码块。
语法:

if (condition) {
    // 如果 condition 为真(非0),则执行这里的代码
}

示例:

#include <stdio.h>

int main() {
    int number = 10;

    if (number > 5) {
        printf("数字大于5。\n"); // 这行会被执行
    }

    return 0;
}

2. if…else 语句

在 if 的基础上增加了一个 else 分支。如果条件为真,执行 if 的代码块;如果为假,则执行 else 的代码块。

语法:

if (condition) {
    // 条件为真时执行
} else {
    // 条件为假时执行
}

示例:

#include <stdio.h>

int main() {
    int age = 16;

    if (age >= 18) {
        printf("你已成年。\n");
    } else {
        printf("你是未成年人。\n"); // 这行会被执行
    }

    return 0;
}

3. if…else if…else 语句

用于检查多个条件。程序会按顺序检查每个 if 或 else if 的条件,一旦某个条件为真,就执行其对应的代码块,然后跳过整个判断结构的其余部分。
语法:

if (condition1) {
    // condition1 为真时执行
} else if (condition2) {
    // condition1 为假但 condition2 为真时执行
} else if (condition3) {
    // condition1 和 condition2 都为假但 condition3 为真时执行
} else {
    // 所有上述条件都为假时执行
}
// 可以有很多个 else if

示例:

#include <stdio.h>

int main() {
    int score = 85;

    if (score >= 90) {
        printf("成绩优秀!\n");
    } else if (score >= 80) { // 85 >= 80 为真,执行这里
        printf("成绩良好。\n"); // 这行会被执行
    } else if (score >= 70) {
        printf("成绩中等。\n");
    } else if (score >= 60) {
        printf("成绩及格。\n");
    } else {
        printf("成绩不及格。\n");
    }

    return 0;
}

4. switch 语句

switch 语句用于基于一个整型或字符型表达式的值来执行不同的代码块。它是一种多路分支选择结构,比多个 if…else if 更清晰。
语法:

switch (expression) {
    case constant1:
        // 如果 expression 的值等于 constant1,执行这里的代码
        break; // break 用于跳出 switch
    case constant2:
        // 如果 expression 的值等于 constant2,执行这里的代码
        break;
    case constant3:
        // ...
        break;
    default:
        // 如果 expression 的值不匹配任何 case,执行这里的代码
        // default 是可选的
}

重要规则:
1、expression 的结果必须是整型或字符型。
2、case 后面的值必须是整型或字符型常量。
3、break 语句至关重要。如果省略 break,程序会继续执行下一个 case 中的代码,直到遇到 break 或 switch 结束。这被称为“穿透”(fallthrough),有时会故意这样用。
示例:

#include <stdio.h>

int main() {
    char grade = 'B';

    switch (grade) {
        case 'A':
            printf("完美!\n");
            break;
        case 'B':
            printf("做得很好!\n"); // 这行会被执行
            break;
        case 'C':
            printf("做得不错。\n");
            break;
        case 'D':
            printf("刚好及格。\n");
            break;
        case 'F':
            printf("不及格,需要再努力。\n");
            break;
        default:
            printf("无效的成绩。\n");
    }

    return 0;
}

故意使用“穿透”的示例:

#include <stdio.h>

int main() {
    int number = 2;

    switch (number) {
        case 1:
        case 2:
        case 3:
            printf("数字是1, 2或3。\n"); // number=1,2,3 都会执行这里
            break;
        case 4:
            printf("数字是4。\n");
            break;
        default:
            printf("数字不是1,2,3,4。\n");
    }
    return 0;
}

5. 三元运算符 ( ? : )

这是一个非常简洁的条件表达式,可以看作是 if…else 的简写形式。它返回一个值。
语法:

condition ? expression_if_true : expression_if_false;
如果 condition 为真,整个表达式的值为 expression_if_true 的结果,否则为 expression_if_false 的结果。

示例:

#include <stdio.h>

int main() {
    int a = 10, b = 20;
    int max;

    // 等价于: if (a > b) { max = a; } else { max = b; }
    max = (a > b) ? a : b;

    printf("较大的数字是:%d\n", max); // 输出 20

    // 也可以直接用在函数参数等地方
    printf("a是%s\n", (a % 2 == 0) ? "偶数" : "奇数"); // 输出 "a是偶数"

    return 0;
}

图片来自菜鸟教程:https://www.runoob.com/cprogramming/c-decision.html
https://i-blog.csdnimg.cn/direct/3da1411f46284b90921919d3ff48fb1a.png

总结与对比

语句类型用途优点
if简单的单条件判断结构简单,适用于所有条件、
if…else二选一的分支逻辑清晰,处理真假两种情况\
if…else if…else多条件分支判断可以处理复杂的多个并列或递进条件
switch基于单个表达式的多个固定值进行分支结构清晰,效率高(通常使用跳转表)
三元运算符 ? :简单的二选一条件赋值或返回代码简洁,一行完成

如何选择

1、如果判断的条件是一个变量是否等于某些特定的常量值,优先考虑 switch,会使代码更清晰。

2、如果条件是一个范围(如 score > 60)或者涉及多个变量的复杂逻辑(如 a > b && c < d),则必须使用 if 系列语句。

3、如果只是简单的二选一赋值,三元运算符非常方便。