每日笔记
1. 语句块与变量作用域
-
语句块:由
{}
括住的若干条语句构成,可以嵌套。 -
变量定义:
-
语句块内可定义变量(局部变量)。
-
变量仅在定义它的语句块及下层语句块内有效。
-
同名变量规则:
-
同一语句块内变量不可同名。
-
不同语句块可定义同名变量,遵循 “下层优先” 原则(内层变量覆盖外层)。
-
-
建议:尽量避免同名变量,提高代码可读性。
-
2. 结构化程序设计
-
基本结构:
-
顺序结构:代码逐行执行。
-
选择结构:
if-else
、switch
。 -
循环结构:
for
、while
、do-while
。
-
-
结构化程序:仅用上述三种结构实现的程序,逻辑清晰且易于维护。
3. switch
语句注意事项
-
语法要求:
-
case
后的表达式必须是 整型常量表达式(编译时确定值)。 -
不支持浮点数(因精度问题无法精确比较)。
-
-
执行逻辑:
-
进入
case
分支后,若未遇到break
,会继续执行后续分支的代码(包括其他case
和default
),直到遇到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
特性 | switch | else-if |
---|---|---|
条件类型 | 仅支持整数 == 判断 | 支持任意逻辑表达式(如范围、逻辑运算) |
可读性 | 分支清晰,适合多分支离散值场景 | 灵活性高,适合复杂条件 |
执行效率 | 通常编译为跳转表,效率较高 | 逐条件判断,可能较慢 |
常量要求 | case 必须为常量 | 无此限制 |
-
选用原则:
-
多分支离散整数值 →
switch
(如菜单选项、状态码)。 -
复杂条件或非整型比较 →
else-if
(如范围判断、字符串比较)。
-
总结提示
-
变量作用域:善用语句块限制变量生命周期,避免污染外层命名空间。
-
switch
:穿透特性需谨慎使用,忘记break
是常见错误来源! -
结构化设计:优先使用三种基本结构,避免
goto
等非结构化语句。