二、C语言分支循环语句

目录

1、if语句

1.1 if语句的基本语法

1.1.1 单分支结构

1.1.2 双分支结构

1.1.3 多分支结构

1.2 if语句的核心规则

1.2.1 条件表达式

1.2.2 代码块与大括号

1.2.3 嵌套if语句

1.3 if语句的使用场景

1.3.1 数值范围判断

1.3.2 字符或枚举类型判断

1.3.3 逻辑组合判断

1.4 if语句的注意事项

1.4.1 常见错误

1.4.2 悬空else问题

1.5 if语句的优缺点

1.6 总结

2、switch语句

2.1 switch语句的基本语法

2.2 switch语句的执行逻辑

2.3 switch语句的使用场景

2.3.1 多分支离散值判断

2.3.2 字符类型处理

2.3.3 利用穿透特性合并分支

2.4 switch 语句的注意事项

2.4.1 csae值的限制

2.4.2 必须使用break

2.4.3 default的使用

2.5 switch vs if 的对比

2.6 示例代码

2.6.1 处理枚举类型

2.6.2 穿透特性实现多条件合并

2.7 总结

3、while语句

3.1 while语句的基本语法

3.2 while的核心特点

3.3 使用场景

3.3.1 用户输入验证

3.3.2 遍历数组或集合

3.3.3 动态条件循环

3.3.4 无限循环(需配合break)

3.4 注意事项

3.4.1 避免无限循环

3.4.2 条件表达式的副作用

3.4.3 复杂的退出条件

3.5 变体:do-while语句

3.6 总结

4、for语句

4.1 for语句的基本语法

4.2 for循环的典型使用场景

4.2.1 固定次数的循环

4.2.2 遍历数组或集合

4.2.3 倒序循环

4.2.4 多变量控制

4.3 for循环的灵活性

4.3.1 表达式可省略(但分号必须保留)

4.3.2 空循环体

4.3.3 嵌套循环

4.4 for vs while 的对比

4.5 注意事项

4.5.1 避免无限循环

4.5.2 循环变量作用域(C99起)

4.5.3 浮点数循环的精度问题

4.6 高级用法

4.6.1 逗号运算符

4.6.2 循环控制语句

4.7 总结


1、if语句

1.1 if语句的基本语法

1.1.1 单分支结构
if (条件表达式) {
    // 条件为真时执行的代码块
}
  • 执行逻辑:若条件表达式结果为真(非零),则执行代码块;否则跳过。

  • 示例

    int age = 18;
    if (age >= 18) {
        printf("成年人\n");  // 输出
    }
1.1.2 双分支结构
if (条件表达式) {
    // 条件为真时执行
} else {
    // 条件为假时执行
}
  • 执行逻辑:根据条件表达式结果选择执行其中一个分支。

  • 示例

    int score = 75;
    if (score >= 60) {
        printf("及格\n");  // 输出
    } else {
        printf("不及格\n");
    }
1.1.3 多分支结构
if (条件1) {
    // 条件1为真时执行
} else if (条件2) {
    // 条件2为真时执行
} else {
    // 所有条件均为假时执行
}
  • 执行逻辑:按顺序检查条件,执行第一个满足条件的分支。

  • 示例

    int temperature = 28;
    if (temperature > 30) {
        printf("炎热\n");
    } else if (temperature > 20) {
        printf("温暖\n");  // 输出
    } else {
        printf("凉爽\n");
    }

1.2 if语句的核心规则

1.2.1 条件表达式
  • 结果类型:必须是整型或布尔类型(C99起支持_Bool)。

  • 真值判断

    • 非零值为真(如5,-1,'A')。

    • 零值为假(如0,NULL)。

  • 常见形式

    if (a > b) { ... }          // 比较运算
    if (a && b) { ... }         // 逻辑与
    if (flag || error) { ... }  // 逻辑或
    if (!valid) { ... }         // 逻辑非
    
1.2.2 代码块与大括号
  • 单语句省略:若代码块仅一行,可省略大括号(但不建议)。

    if (x > 0) 
        printf("正数\n");  // 单语句可省略大括号
  • 多语句必须:多行代码必须使用大括号。

    if (x > 0) {
        printf("正数\n");
        x *= 2;  // 多语句必须用大括号
    }
1.2.3 嵌套if语句
  • 嵌套结构:if内部可包含另一个if。

    if (a > 0) {
        if (b > 0) {
            printf("a和b均为正数\n");
        }
    }
  • 注意缩进:嵌套时应合理缩进,避免逻辑混乱。


1.3 if语句的使用场景

1.3.1 数值范围判断
int score = 85;
if (score >= 90) {
    printf("A\n");
} else if (score >= 80) {
    printf("B\n");  // 输出
} else {
    printf("C\n");
}
1.3.2 字符或枚举类型判断
char op = '+';
if (op == '+') {
    printf("加法\n");  // 输出
} else if (op == '-') {
    printf("减法\n");
}
1.3.3 逻辑组合判断
int age = 25;
bool isStudent = true;

if (age >= 18 && isStudent) {
    printf("成年学生\n");  // 输出
}

1.4 if语句的注意事项

1.4.1 常见错误
  • 赋值运算符误用

    if (x = 5) { ... }  // 错误:将 x 赋值为5,条件永真

    修正:使用==:if(x == 5)

  • 浮点数精度问题

    float a = 0.1 + 0.2;
    if (a == 0.3) { ... }  // 可能不成立

    修正:使用误差范围:

    if (fabs(a - 0.3) < 1e-6) { ... }
1.4.2 悬空else问题
  • 代码歧义:else匹配最近的未匹配if。

    if (a > 0)
        if (b > 0)
            printf("a和b均为正数\n");
    else
        printf("a非正数\n");  // 实际匹配内层if

    修正:使用大括号明确作用域:

    if (a > 0) {
        if (b > 0) {
            printf("a和b均为正数\n");
        }
    } else {
        printf("a非正数\n");
    }

1.5 if语句的优缺点

优点

  • 灵活性:支持任意复杂的条件表达式。

  • 通用性:适用于所有数据类型(整型、浮点型、指针等)。

缺点

  • 效率问题:多分支时需逐条判断,效率可能低于switch。

  • 可读性:深层嵌套或复杂条件可能导致代码难以阅读。


1.6 总结

特性 说明
核心功能 根据条件选择执行代码分支
适用场景 范围判断、逻辑组合、错误处理等
语法要点 条件表达式必须为整型或布尔值,注意大括号使用
常见错误 误用 = 代替 ==,浮点数精度问题,悬空else
与switch对比 if更灵活,switch适合离散值多分支

2、switch语句

2.1 switch语句的基本语法

switch (表达式) {
    case 常量1:
        // 代码块1
        break;
    case 常量2:
        // 代码块2
        break;
    ...
    default:
        // 默认代码块
        break;
}
  • 核心组成部分

  1. switch(表达式)

    • 表达式必须是 整型 或 枚举类型(如int、char)。

    • 不支持浮点数、字符串或其他复杂类型。

  2. csae 常量:

    • case后跟一个整型常量表达式(如1、'A'),不能是变量或表达式。

    • 所有case的常量值必须唯一。

  3. break;

    • 用于退出switch语句,防止代码“穿透”到下一个case。

  4. default:

    • 当所有case均不匹配时执行。

    • default可以省略,但建议保留以处理意外情况。


2.2 switch语句的执行逻辑

  1. 计算表达式:先计算switch后的表达式值。

  2. 匹配case:从上到下依次与各case的常量值匹配。

  3. 执行代码块:找到匹配的case后,执行其代码块。

  4. 退出或穿透

    • 遇到bre

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值