C语言控制分支流(if与switch语句)

一、前言:为什么需要条件分支?

想象一下日常生活中的选择:如果下雨,我就带伞;否则就不带。程序中同样需要这样的决策能力,这就是条件语句的作用。在C语言中,ifswitch语句让程序能够根据不同条件执行不同的代码路径。

二、if语句:基础条件判断

1. 基本语法结构

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

示例:判断数字是否为偶数

#include <stdio.h>

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);
    
    if (num % 2 == 0) {
        printf("%d 是偶数\n", num);
    }
    
    return 0;
}

2. if-else:二选一的选择

if (条件表达式) {
    // 条件为真时执行
} else {
    // 条件为假时执行
}

示例:判断成绩是否及格

#include <stdio.h>

int main() {
    int score;
    printf("请输入成绩: ");
    scanf("%d", &score);
    
    if (score >= 60) {
        printf("恭喜,及格了!\n");
    } else {
        printf("很遗憾,不及格\n");
    }
    
    return 0;
}

3. if-else if-else:多条件判断

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

示例:成绩等级评定

#include <stdio.h>

int main() {
    int score;
    printf("请输入成绩(0-100): ");
    scanf("%d", &score);
    
    if (score >= 90) {
        printf("优秀!\n");
    } else if (score >= 80) {
        printf("良好\n");
    } else if (score >= 70) {
        printf("中等\n");
    } else if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }
    
    return 0;
}

三、if语句的重要注意事项

1. 大括号{}的重要性

正确写法:

if (condition) {
    statement1;
    statement2;
    statement3;
}

错误写法:

if (condition)
    statement1;    // 只有这一句属于if
    statement2;    // 无论条件如何都会执行
    statement3;    // 无论条件如何都会执行

建议:即使只有一行代码,也使用大括号,这样代码更清晰且避免错误。

2. 分号陷阱

错误示例:

if (condition);  // 这个分号结束了if语句!
{
    statement;   // 这行代码总会执行,与if条件无关
}

3. 常见错误写法

if (a = b)     // 这是赋值,不是比较!应该用 ==
if (a > b > c) // 这不会按预期工作!应该用 && 连接

四、switch语句:多路选择

1. 基本语法

switch (表达式) {
    case 常量1:
        语句1;
        break;
    case 常量2:
        语句2;
        break;
    default:
        默认语句;
        break;
}

2. switch使用示例

#include <stdio.h>

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

3. break的重要性

忘记break的后果:

switch (value) {
    case 1:
        printf("一");
        // 忘记break,会继续执行下一个case
    case 2:
        printf("二");  // 当value=1时,会输出"一二"
        break;
}

4. switch的特殊用法:多个case共享代码

#include <stdio.h>

int main() {
    char grade;
    printf("请输入等级(A-E): ");
    scanf("%c", &grade);
    
    switch (grade) {
        case 'A':
        case 'a':
            printf("优秀\n");
            break;
        case 'B':
        case 'b':
            printf("良好\n");
            break;
        case 'C':
        case 'c':
            printf("及格\n");
            break;
        case 'D':
        case 'd':
        case 'E':
        case 'e':
            printf("不及格\n");
            break;
        default:
            printf("无效等级\n");
    }
    
    return 0;
}

五、if vs switch:如何选择?

使用if的情况:

  • 条件判断基于范围(如 score > 90)
  • 条件不是离散值
  • 需要复杂的逻辑表达式(如多个条件的与或非组合)

使用switch的情况:

  • 基于单个变量的离散值进行判断
  • 有多个明确的具体值需要处理
  • 代码需要更好的可读性和结构

六、嵌套条件语句

#include <stdio.h>

int main() {
    int age;
    char hasLicense;
    
    printf("请输入年龄: ");
    scanf("%d", &age);
    printf("是否有驾照?(y/n): ");
    scanf(" %c", &hasLicense);  // 注意前面的空格,用于吸收换行符
    
    if (age >= 18) {
        if (hasLicense == 'y' || hasLicense == 'Y') {
            printf("可以合法驾驶\n");
        } else {
            printf("年龄达标但需要考取驾照\n");
        }
    } else {
        printf("未满18岁,不能驾驶\n");
    }
    
    return 0;
}

七、实战练习

练习:季节判断

#include <stdio.h>

int main() {
    int month;
    printf("请输入月份(1-12): ");
    scanf("%d", &month);
    
    switch (month) {
        case 12:
        case 1:
        case 2:
            printf("冬季\n");
            break;
        case 3:
        case 4:
        case 5:
            printf("春季\n");
            break;
        case 6:
        case 7:
        case 8:
            printf("夏季\n");
            break;
        case 9:
        case 10:
        case 11:
            printf("秋季\n");
            break;
        default:
            printf("无效月份\n");
    }
    
    return 0;
}

八、常见错误与调试技巧

  1. 总是使用大括号,即使只有一行代码
  2. 注意赋值(=)和比较(==)的区别
  3. switch中不要忘记break
  4. 使用调试器或打印语句检查条件判断的实际结果
  5. 测试边界条件(如刚好等于临界值的情况)

九、总结

条件分支是编程中的基础且重要的概念:

  • if语句适用于各种条件判断,灵活性高
  • switch语句适用于多路离散值选择,结构清晰
  • 注意代码风格和常见陷阱
  • 多练习,培养条件判断的思维模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值