选择结构
看透 if / switch 每条分支的细节、坑点与边界
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
选择结构
看透 if / switch 每条分支的细节、坑点与边界
选择与条件构造
上一节我们知道了选择结构让程序有了'岔路口',但路口靠什么决定走哪边?靠的是条件。这一节我们来拆解条件本身。
串联闸机=必须全过(AND);并联闸机=任一通过(OR)
if语句
上一页我们构造了条件,这一页看条件如何驱动分支。'如果下雨就带伞、否则不带'——if 语句正是这种条件→动作判断的直接翻译。
按症状优先级逐个匹配科室,第一个命中即收治
switch语句
if 擅长范围判断与复杂条件,但反复检查同一变量等于某个固定值时——比如命令码分发、星期映射——一长串 if-else if 既啰嗦又易漏 break。switch 正是为「多分支等值匹配」量身打造的语法。
按 A1 出 A1 的饮料;乱按无响应(对应 default 缺失或命中);取走不及时饮料掉到下一层(穿透)
选择结构嵌套
前面学过 if 和 switch 都是「问一个问题,根据答案走不同路」。但现实中问题常常一个套一个——先满足 A,再在 A 内问 B。这种「选完再选」的结构,就是嵌套。
先按科室分流;进了科室再按病情细分;每层判断都依赖上一层的结果
switch语句编程
前面认识了switch的基本思想,现在要把它写成能跑的代码。它和if-else链像亲戚,但有几条硬规矩——不遵守,程序会跑出你意想不到的结果。
你按几楼就只停那层并开门(break);按了无效楼层就走默认路线(default)
选择结构常见错误分析
前面我们用 if 和 switch 写出了可运行的程序,但「能编译」「能运行」并不等于「正确」。选择结构中有些错误不会让程序崩溃,却悄悄给出错误的结果——下面剖析 4 类最隐蔽的陷阱。
中文里「是」是判断、「设为」是动作,靠字区分;代码里全靠等号个数,差一个角色互换
二级C考点解析之条件的正
你去网吧上网,前台要查三件事:满18岁、没欠费、带了身份证——全过才放行。程序里的「条件」也是同一个意思:写一个表达式,让计算机判断一次,结果只有真或假。
&& 像三关全过才放行,|| 像满足一条就放行;前一关不过,后面的检查直接跳过
二级C考点解析之if语句
前页我们看了条件怎么写才不出错,但条件装进 if 里时,C 语言还有几个坑专门等着考生——尤其是选择题爱考的细节。
左括号找最近的右括号配对,if也找最近的else配对
二级C考点解析之switch语
前面梳理了 if 的考点——它擅长判断范围和处理复杂条件。但变量只在几个固定值里挑一个时,if 链就显得笨重。C 语言为此提供了「按值跳转」的 switch 捷径。
按 B5 机器直接吐出对应货品;switch 根据值直接定位到匹配 case
本节要点
- ✓if 处理范围与复合条件,switch 只做离散等值
- ✓浮点判等是高危区,需转整型或加 eps 容差
- ✓漏 break 即穿透,default 写哪都行
- ✓嵌套层数 ≤3,超出就拆函数或早返回
- ✓复杂条件先抽布尔变量,可读性优先于简洁
课后思考
先独立思考每个问题,再对照参考答案。开放题没有唯一答案,关键在于理清思路。
参考答案C 把赋值视为合法表达式,`a=5` 返回 5 即真。这种「信任程序员」的设计提高了灵活性,但也埋下无数 bug。GCC 的 -Wall 可开启警告提醒。
参考答案取决于写法。直接对分数做区间判断(score>=90 等),只能用 if-else;若先除以 10 映射成离散等级,switch 更高效。关键看分支条件是连续区间还是离散常量。
参考答案放开限制编译器就难以生成跳转表,只能退化为类似 if-else 的串行比较,丧失 O(1) 跳转优势。case 标签本质是汇编层的地址偏移量,必须编译期确定。