3.05 控制结构

每日笔记


1. 语句块与变量作用域
  • 语句块:由 {} 括住的若干条语句构成,可以嵌套。

  • 变量定义

    • 语句块内可定义变量(局部变量)。

    • 变量仅在定义它的语句块及下层语句块内有效。

    • 同名变量规则

      • 同一语句块内变量不可同名。

      • 不同语句块可定义同名变量,遵循 “下层优先” 原则(内层变量覆盖外层)。

    • 建议:尽量避免同名变量,提高代码可读性。


2. 结构化程序设计
  • 基本结构

    1. 顺序结构:代码逐行执行。

    2. 选择结构if-elseswitch

    3. 循环结构forwhiledo-while

  • 结构化程序:仅用上述三种结构实现的程序,逻辑清晰且易于维护。


3. switch语句注意事项
  • 语法要求

    • case 后的表达式必须是 整型常量表达式(编译时确定值)。

    • 不支持浮点数(因精度问题无法精确比较)。

  • 执行逻辑

    • 进入 case 分支后,若未遇到 break,会继续执行后续分支的代码(包括其他 casedefault),直到遇到 break 或语句块结束。

    • 务必注意:每个 case 分支末尾需显式添加 break(除非故意穿透)。

  • 示例风险

    c

    复制

     switch (n) {
       case 1: 
         printf("A"); // 无 break,会继续执行 case 2
       case 2: 
         printf("B"); 
         break;
     }
     // 输入 n=1 时输出 "AB"

4. switch vs else-if
特性switchelse-if
条件类型仅支持整数 == 判断支持任意逻辑表达式(如范围、逻辑运算)
可读性分支清晰,适合多分支离散值场景灵活性高,适合复杂条件
执行效率通常编译为跳转表,效率较高逐条件判断,可能较慢
常量要求case 必须为常量无此限制
  • 选用原则

    • 多分支离散整数值 → switch(如菜单选项、状态码)。

    • 复杂条件或非整型比较 → else-if(如范围判断、字符串比较)。


总结提示
  • 变量作用域:善用语句块限制变量生命周期,避免污染外层命名空间。

  • switch穿透特性需谨慎使用,忘记 break 是常见错误来源!

  • 结构化设计:优先使用三种基本结构,避免 goto 等非结构化语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值