C语言分支结构详解:if语句与switch语句全面解析

一、程序的基本结构

在C语言中,我们通过三种基本结构来组织代码逻辑:

  • 顺序结构:代码按照书写顺序依次执行

  • 选择结构:根据条件判断选择执行不同的代码块

  • 循环结构:重复执行某段代码直到满足特定条件

二、选择结构之if语句

1. 单分支if语句

if(表达式){
    语句;
}

执行流程:如果表达式为真(非0),则执行语句;为假(0)则不执行。

2. 双分支if-else语句

if(表达式){
    语句1;
}
else{
    语句2;
}

执行流程:表达式为真执行语句1,为假执行语句2。

实例:密码验证系统

#include <stdio.h>

int main() {
    int My_password;
    int password;
    
    // 设置密码
    printf("请设置您的密码:");
    scanf("%d", &My_password);
    printf("密码已保存!\n");
    
    // 输入密码
    printf("请输入密码:");
    scanf("%d", &password);
    
    // 判断密码
    if (My_password == password) {
        printf("密码正确!");
    }
    else {
        printf("密码错误!");
    }
    
    return 0;
}

3. 多分支if-else if语句

if(表达式1){
    语句1;
}
else if(表达式2){
    语句2;
}
else if(表达式3){
    语句3;
}
// ... 更多else if
else{
    // 所有表达式都为假时执行
    语句;
}

执行流程:依次判断每个表达式,第一个为真的表达式对应的语句会被执行,然后跳出整个多分支结构。

实例:年龄分段判断

#include <stdio.h>

int main() {
    int age;
    printf("请输入年龄:");
    scanf("%d", &age);
    
    if (age > 0) {
        if (age > 0 && age <= 18) {
            printf("未成年");
        }
        else if (age > 18 && age <= 28) {
            printf("青年");
        }
        else if (age > 28 && age <= 38) {
            printf("青壮年");
        }
        else if (age > 38 && age <= 48) {
            printf("壮年");
        }
        else if (age > 48 && age <= 58) {
            printf("暮年");
        }
        else if (age > 58 && age <= 68) {
            printf("即将退休");
        }
        else if (age > 68 && age <= 100) {
            printf("安享晚年");
        }
        else {
            printf("大寿星");
        }
    }
    else {
        printf("输入错误,请重新输入!");
    }
    
    return 0;
}

三、选择结构之switch语句

基本语法

switch(表达式){    // 表达式必须是整数类型
    case 常量表达式1: 语句1; break;
    case 常量表达式2: 语句2; break;
    case 常量表达式3: 语句3; break;
    // ... 更多case
    default: 语句; break;    // 所有case都不匹配时执行
}

实例:星期判断

#include <stdio.h>

int main() {
    int num;
    printf("请输入一个数字(1-7):");
    scanf("%d", &num);
    
    switch (num) {
        case 1: printf("星期一"); break;
        case 2: printf("星期二"); break;
        case 3: printf("星期三"); break;
        case 4: printf("星期四"); break;
        case 5: printf("星期五"); break;
        case 6: printf("星期六"); break;
        case 7: printf("星期日"); break;
        default: printf("输入错误,请重新输入!"); break;
    }
    
    return 0;
}

switch语句的嵌套

#include <stdio.h>

int main() {
    int n = 1;
    int m = 2;
    
    switch (n) {
        case 1:
            m++;
        case 2:
            n++;
        case 3:
            switch (n) {
                case 1:
                    n++;
                case 2:
                    m++;
                    n++;
                    break;
            }
        case 4:
            m++;
            break;
        default: 
            break;
    }
    
    printf("m = %d, n = %d", m, n);
    return 0;
}

四、重要注意事项

1. 判断逻辑中的"=="陷阱

错误写法

if (a = 1) {  // 这是赋值,不是比较!
    // 永远为真
}

正确写法:

if (1 == a) {  // 推荐:常量在左,变量在右
    // 正确比较
}

2. else的匹配规则

else总是与最近的if配对:

if (a == 1)
    if (b == 2)
        printf("hehe");
else  // 这个else与if(b == 2)配对!
    printf("haha");

3. 代码块规范

使用分支语句时,即使只有一条语句也建议加上花括号:

// 推荐写法
if (condition) {
    statement;
}

// 不推荐(容易出错)
if (condition)
    statement;

五、逻辑运算符

1. 逻辑与(&&)

表达式1 && 表达式2
  • 真 && 真 → 真

  • 真 && 假 → 假

  • 假 && 真 → 假

  • 假 && 假 → 假

2. 逻辑或(||)

表达式1 || 表达式2
  • 真 || 真 → 真

  • 真 || 假 → 真

  • 假 || 真 → 真

  • 假 || 假 → 假

注意:数学中的连续比较在C语言中需要拆开:

// 错误写法
0 < age < 18

// 正确写法
age > 0 && age < 18

六、实战练习

练习1:判断奇偶数

#include <stdio.h>

int main() {
    int num;
    printf("请输入数字:");
    scanf("%d", &num);
    
    if (0 == num % 2) {
        printf("该数为偶数");
    }
    else {
        printf("该数为奇数");
    }
    
    return 0;
}

练习2:判断7的倍数

#include <stdio.h>

int main() {
    int a;
    printf("请输入数字:");
    scanf("%d", &a);
    
    if (0 == a % 7) {
        printf("该数字是7的倍数。");
    }
    else {
        printf("该数字不是7的倍数。");
    }
    
    return 0;
}

总结

选择结构是C语言编程中的重要组成部分,掌握if语句和switch语句的使用技巧对于编写逻辑清晰的程序至关重要。记住关键点:正确使用比较运算符、注意else的匹配规则、规范代码块书写,这些都将帮助你避免常见的编程错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值