Skip to content

判断

在C语言中,判断语句用于根据条件的真假来执行不同的代码块。这些语句使程序能够根据不同的情况做出不同的决策,是实现程序逻辑的重要组成部分。在本章节中,我们将学习C语言中的各种判断语句及其使用方法。

1. if语句

if语句是C语言中最基本的判断语句,用于当条件为真时执行特定的代码块

1.1 语法

c
if (条件) {
    // 条件为真时执行的代码
}

1.2 说明

  • 条件:一个表达式,其结果为真(非0)或假(0)
  • 代码块:当条件为真时执行的语句,用花括号{}包围
  • 如果代码块只包含一条语句,可以省略花括号

1.3 示例

c
#include <stdio.h>

int main() {
    int age = 18;
    
    if (age >= 18) {
        printf("你已经成年了!\n");
    }
    
    // 省略花括号的情况
    if (age > 0)
        printf("年龄是正数\n");
    
    return 0;
}

2. if-else语句

if-else语句用于当条件为真时执行一个代码块,当条件为假时执行另一个代码块

2.1 语法

c
if (条件) {
    // 条件为真时执行的代码
} else {
    // 条件为假时执行的代码
}

2.2 示例

c
#include <stdio.h>

int main() {
    int num = 5;
    
    if (num % 2 == 0) {
        printf("%d是偶数\n", num);
    } else {
        printf("%d是奇数\n", num);
    }
    
    return 0;
}

3. if-else if-else语句

if-else if-else语句用于处理多个条件的情况,可以根据不同的条件执行不同的代码块。

3.1 语法

c
if (条件1) {
    // 条件1为真时执行的代码
} else if (条件2) {
    // 条件2为真时执行的代码
} else if (条件3) {
    // 条件3为真时执行的代码
} else {
    // 所有条件都为假时执行的代码
}

3.2 说明

  • 条件会按顺序逐个检查,一旦找到第一个为真的条件,就执行对应的代码块,然后跳过整个if-else if-else结构
  • 如果所有条件都为假,则执行else代码块
  • else部分是可选的

3.3 示例

c
#include <stdio.h>

int main() {
    int score = 85;
    
    if (score >= 90) {
        printf("优秀\n");
    } else if (score >= 80) {
        printf("良好\n");
    } else if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }
    
    return 0;
}

4. 嵌套if语句

嵌套if语句是指在一个if语句的代码块中包含另一个if语句,用于处理更复杂的条件逻辑。

4.1 语法

c
if (条件1) {
    // 条件1为真时执行的代码
    if (条件2) {
        // 条件1和条件2都为真时执行的代码
    } else {
        // 条件1为真但条件2为假时执行的代码
    }
} else {
    // 条件1为假时执行的代码
}

4.2 示例

c
#include <stdio.h>

int main() {
    int age = 20;
    int has_license = 1;
    
    if (age >= 18) {
        printf("你已经成年了\n");
        if (has_license) {
            printf("你可以开车\n");
        } else {
            printf("你需要先考驾照\n");
        }
    } else {
        printf("你还未成年,不能开车\n");
    }
    
    return 0;
}

5. switch语句

switch语句是一种多分支选择语句,用于根据表达式的值选择执行不同的代码块,比if-else if-else语句更简洁。

5.1 语法

c
switch (表达式) {
    case 值1:
        // 表达式等于值1时执行的代码
        break;
    case 值2:
        // 表达式等于值2时执行的代码
        break;
    case 值3:
        // 表达式等于值3时执行的代码
        break;
    default:
        // 表达式不等于任何case值时执行的代码
        break;
}

5.2 说明

  • 表达式:通常是一个整型或字符型表达式
  • case:每个case后面跟一个常量值
  • break:用于跳出switch语句,防止执行下一个case的代码
  • default:可选的,当表达式不等于任何case值时执行

5.3 示例

c
#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;
        default:
            printf("无效的等级\n");
            break;
    }
    
    return 0;
}

5.4 注意事项

  1. case值必须是常量:case后面的值必须是常量表达式,不能是变量
  2. break语句:如果没有break语句,会发生"穿透"现象,即执行完当前case后会继续执行下一个case的代码
  3. default的位置:default可以放在switch语句的任何位置,但通常放在最后

5.5 穿透现象示例

c
#include <stdio.h>

int main() {
    int month = 2;
    
    switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            printf("该月有31天\n");
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            printf("该月有30天\n");
            break;
        case 2:
            printf("该月有28或29天\n");
            break;
        default:
            printf("无效的月份\n");
            break;
    }
    
    return 0;
}

在这个例子中,我们利用了穿透现象来处理多个case值对应相同操作的情况。

6. 条件运算符(三元运算符)

条件运算符(三元运算符)是一种简洁的条件判断表达式,可以替代简单的if-else语句。

6.1 语法

c
条件 ? 表达式1 : 表达式2

6.2 说明

  • 如果条件为真,执行表达式1并返回其结果
  • 如果条件为假,执行表达式2并返回其结果

6.3 示例

c
#include <stdio.h>

int main() {
    int a = 10, b = 20;
    int max;
    
    // 使用条件运算符
    max = (a > b) ? a : b;
    printf("最大值: %d\n", max);  // 20
    
    // 直接在printf中使用
    printf("%d%s\n", a, (a % 2 == 0) ? "偶数" : "奇数");  // 偶数
    
    return 0;
}

7. 逻辑运算符与判断语句

逻辑运算符(&&、||、!)常用于组合多个条件,使判断语句更加灵活。

7.1 示例

c
#include <stdio.h>

int main() {
    int age = 25;
    int has_id = 1;
    int has_ticket = 1;
    
    // 使用逻辑与&&
    if (age >= 18 && has_id) {
        printf("你可以进入\n");
    }
    
    // 使用逻辑或||
    if (has_ticket || age < 5) {
        printf("你可以免费进入\n");
    }
    
    // 使用逻辑非!
    if (!has_id) {
        printf("请出示身份证\n");
    }
    
    return 0;
}

8. 注意事项

  1. 条件表达式的结果:在C语言中,任何非零值都被视为真,零被视为假
  2. 花括号的使用:即使代码块只有一条语句,也建议使用花括号,提高代码可读性和可维护性
  3. 嵌套层级:避免过多的嵌套if语句,以免代码难以理解
  4. switch vs if-else if-else:对于多个固定值的判断,switch语句通常比if-else if-else语句更高效

9. 示例:综合运用

让我们看一个综合运用各种判断语句的例子:

c
#include <stdio.h>

int main() {
    int choice;
    float num1, num2, result;
    
    printf("请选择操作:\n");
    printf("1. 加法\n");
    printf("2. 减法\n");
    printf("3. 乘法\n");
    printf("4. 除法\n");
    printf("请输入选择(1-4): ");
    scanf("%d", &choice);
    
    if (choice >= 1 && choice <= 4) {
        printf("请输入两个数字: ");
        scanf("%f %f", &num1, &num2);
        
        switch (choice) {
            case 1:
                result = num1 + num2;
                printf("%.2f + %.2f = %.2f\n", num1, num2, result);
                break;
            case 2:
                result = num1 - num2;
                printf("%.2f - %.2f = %.2f\n", num1, num2, result);
                break;
            case 3:
                result = num1 * num2;
                printf("%.2f * %.2f = %.2f\n", num1, num2, result);
                break;
            case 4:
                if (num2 != 0) {
                    result = num1 / num2;
                    printf("%.2f / %.2f = %.2f\n", num1, num2, result);
                } else {
                    printf("错误:除数不能为零\n");
                }
                break;
        }
    } else {
        printf("无效的选择\n");
    }
    
    return 0;
}

小结

C语言提供了多种判断语句,用于根据条件执行不同的代码块:

  1. if语句:用于单一条件的判断
  2. if-else语句:用于两个互斥条件的判断
  3. if-else if-else语句:用于多个条件的判断
  4. 嵌套if语句:用于复杂的条件逻辑
  5. switch语句:用于多分支选择,特别是当条件是固定值时
  6. 条件运算符:用于简洁的条件判断

这些判断语句使程序能够根据不同的情况做出不同的决策,是实现程序逻辑的重要工具。在实际编程中,应根据具体情况选择合适的判断语句,以提高代码的可读性和效率。