⌨️ 第四章 流程图与算法
📄 一句话概括

程序的骨架只有三块:顺序(往下走)、分支(二选一)、循环(转回来)——流程图把这三块画在纸上,让【思路先对、代码后写】,乱码般的逻辑纠缠在图上一目了然。

📝 本节和前面几节的关系

第三章备齐了【数据】(怎么表示、怎么存),第四章讲【处理】(怎么一步步做)——流程图是开篇的【施工图纸】。回收第一章 1-8 的瀑布流程(那是项目级图纸,这是单个程序的图纸)。

一、三种基本结构:程序的骨架

1966 年的结构化程序设计定理证明了一个惊人的事实:任何程序都能只用三种结构写出来——

结构 干什么 日常原型
顺序 一句接一句往下走 照菜谱做菜
分支(选择) 按条件二选一 遇到岔路口看路标
循环(重复) 反复执行直到条件不满足 揉面到光滑为止

嵌套组合它们,就能表达任意复杂的逻辑——不需要第三种花样。

二、流程图:三种符号画一切

符号 形状 含义
起止 椭圆(胶囊形) 开始/结束
处理 矩形 一个执行步骤
判断 菱形 是/否二选一的岔路
流向 箭头 执行顺序

【洗澡要不要加热水】这种小事画出来就是:开始 → 加水 → 菱形【水够热吗】→ 否则继续加热(箭头转回去=循环)、否则出来(箭头向下=结束)——画得出来就写得出来;画不出来说明还没想清楚。

三、为什么【先画图再写代码】

  1. 图强迫你穷尽分支——菱形只有是/否两个出口,【漏考虑的情况】在纸上直接暴露;
  2. 图跟人沟通快——十行代码讲解十分钟,一张流程图十秒看懂(给同事讲逻辑、写设计文档全靠它);
  3. 图不绑定语言——同一张图,Python、C++、Java 都能实现——算法与语言分离的第一课。

四、动手 Demo:把生活流程画成图+翻译成码

任务:【不断输入密码,对了才放行】。

开始 → 输入密码 → 菱形【正确?】
        ├─ 否 → 提示错误 → 箭头回到【输入密码】(循环)
        └─ 是 → 放行 → 结束
while True:
    pwd = input("密码: ")
    if pwd == "1234":
        break          # 菱形走【是】出口 → 结束循环
    print("错误,重试")   # 菱形走【否】出口 → 转回循环开头
print("放行")

看到什么算成功:输错三次各打印【错误,重试】,输对后打印【放行】。

读结果:图里的【箭头转回去】对应代码的 while True,菱形对应 if,【结束】对应 break——三种结构在图与码之间一一对应,这就是流程图当施工图纸的价值。

五、30 秒实验

拿一张纸(或手机备忘录),给【早上决定穿不穿外套】画流程图:一个菱形(温度低于 15 度?)、两个出口。30 秒画完你会发现——条件分支你其实每天都在走,只是今天起你能【画】出来了。

六、常见误区

  1. 【流程图是初学者的玩具,高手不用】——错。设计评审、算法讲解、面试白板全用它;高手画的是【逻辑骨架】,只是画得快。
  2. 【菱形可以有多个出口】——错。规范流程图里判断只有是/否两个出口;【多选一】要用多个菱形串起来(程序里的 elif/switch 也是这么实现的)。
  3. 【先写代码再补流程图】——本末倒置。先码后图往往是在给【没想清楚的逻辑】圆场;图的价值在【写码之前】暴露问题。
自测三问(点开对答案) 1. **程序的三种基本结构是什么?** 答:顺序、分支(选择)、循环(重复)——结构化定理保证任何程序都能由这三者组合实现。 2. **菱形符号代表什么?有几个出口?** 答:判断;规范上只有【是/否】两个出口,多选一须用多个菱形组合。 3. **流程图最大的实用价值?** 答:写码之前暴露【没想清楚】的逻辑——画不出来就说明还没想清,以及分支遗漏在图上一目了然。

相关笔记