📄 一句话概括
程序的骨架只有三块:顺序(往下走)、分支(二选一)、循环(转回来)——流程图把这三块画在纸上,让【思路先对、代码后写】,乱码般的逻辑纠缠在图上一目了然。
📝 本节和前面几节的关系
第三章备齐了【数据】(怎么表示、怎么存),第四章讲【处理】(怎么一步步做)——流程图是开篇的【施工图纸】。回收第一章 1-8 的瀑布流程(那是项目级图纸,这是单个程序的图纸)。
一、三种基本结构:程序的骨架
1966 年的结构化程序设计定理证明了一个惊人的事实:任何程序都能只用三种结构写出来——
| 结构 | 干什么 | 日常原型 |
|---|---|---|
| 顺序 | 一句接一句往下走 | 照菜谱做菜 |
| 分支(选择) | 按条件二选一 | 遇到岔路口看路标 |
| 循环(重复) | 反复执行直到条件不满足 | 揉面到光滑为止 |
嵌套组合它们,就能表达任意复杂的逻辑——不需要第三种花样。
二、流程图:三种符号画一切
| 符号 | 形状 | 含义 |
|---|---|---|
| 起止 | 椭圆(胶囊形) | 开始/结束 |
| 处理 | 矩形 | 一个执行步骤 |
| 判断 | 菱形 | 是/否二选一的岔路 |
| 流向 | 箭头 | 执行顺序 |
【洗澡要不要加热水】这种小事画出来就是:开始 → 加水 → 菱形【水够热吗】→ 否则继续加热(箭头转回去=循环)、否则出来(箭头向下=结束)——画得出来就写得出来;画不出来说明还没想清楚。
三、为什么【先画图再写代码】
- 图强迫你穷尽分支——菱形只有是/否两个出口,【漏考虑的情况】在纸上直接暴露;
- 图跟人沟通快——十行代码讲解十分钟,一张流程图十秒看懂(给同事讲逻辑、写设计文档全靠它);
- 图不绑定语言——同一张图,Python、C++、Java 都能实现——算法与语言分离的第一课。
四、动手 Demo:把生活流程画成图+翻译成码
任务:【不断输入密码,对了才放行】。
开始 → 输入密码 → 菱形【正确?】
├─ 否 → 提示错误 → 箭头回到【输入密码】(循环)
└─ 是 → 放行 → 结束
while True:
pwd = input("密码: ")
if pwd == "1234":
break # 菱形走【是】出口 → 结束循环
print("错误,重试") # 菱形走【否】出口 → 转回循环开头
print("放行")
看到什么算成功:输错三次各打印【错误,重试】,输对后打印【放行】。
读结果:图里的【箭头转回去】对应代码的 while True,菱形对应 if,【结束】对应 break——三种结构在图与码之间一一对应,这就是流程图当施工图纸的价值。
五、30 秒实验
拿一张纸(或手机备忘录),给【早上决定穿不穿外套】画流程图:一个菱形(温度低于 15 度?)、两个出口。30 秒画完你会发现——条件分支你其实每天都在走,只是今天起你能【画】出来了。
六、常见误区
- 【流程图是初学者的玩具,高手不用】——错。设计评审、算法讲解、面试白板全用它;高手画的是【逻辑骨架】,只是画得快。
- 【菱形可以有多个出口】——错。规范流程图里判断只有是/否两个出口;【多选一】要用多个菱形串起来(程序里的 elif/switch 也是这么实现的)。
- 【先写代码再补流程图】——本末倒置。先码后图往往是在给【没想清楚的逻辑】圆场;图的价值在【写码之前】暴露问题。
自测三问(点开对答案)
1. **程序的三种基本结构是什么?** 答:顺序、分支(选择)、循环(重复)——结构化定理保证任何程序都能由这三者组合实现。 2. **菱形符号代表什么?有几个出口?** 答:判断;规范上只有【是/否】两个出口,多选一须用多个菱形组合。 3. **流程图最大的实用价值?** 答:写码之前暴露【没想清楚】的逻辑——画不出来就说明还没想清,以及分支遗漏在图上一目了然。- ☐ 下一节(4-2 条件分支、if、三元运算符)
相关笔记
- 条件分支 —— 菱形的代码形态
- 软件开发工程 —— 设计阶段的图纸工序
- ⌨️ 编程原理 · 索引 —— 全课路线图