C++ curriculum · lessons 06-20

C++ 第 6-20 课课程大纲

从面向对象继续前进,系统学习命令行交互、程序拆分、字符串与 STL、基础算法和常用数据结构。结课时,学生能够独立分析需求、编写并测试一个可保存数据的 C++ 命令行程序。

Learning goal

目标不是“见过语法”,而是能独立完成一个程序。

这 15 节课采用“讲一个概念、写一个例子、解决一个问题、完成一份作业”的方式。每一阶段都会产出一个能运行的小程序,学生既要写出正确代码,也要学会拆分任务、验证输入、定位错误和解释算法。

第 6-8 课面向对象进阶与命令行交互
第 9-11 课判断、循环、函数与程序拆分
第 12-14 课字符串、STL 容器、排序与查找
第 15-17 课栈、队列、集合、映射与链表
第 18-20 课递归、文件存储与综合项目
学生和机器人一起搭建 C++ 命令行综合项目
每一课都围绕可运行的程序展开,让语法、算法和数据结构真正连接起来。

Phase 01 · Object-oriented to CLI

第 6-8 课:从对象模型走向命令行交互。

第 06 课

多态、虚函数与统一接口

理解“同一个接口,不同对象执行不同版本”,为可扩展的程序结构打基础。

  • 核心知识virtualoverride、抽象类、纯虚函数、虚析构。
  • 课堂案例角色技能调度器:战士、法师和弓箭手执行各自技能。
  • 算法训练遍历对象容器,根据运行时类型调用统一接口。
  • 课后作业新增治疗者和防御者,并通过父类指针统一管理。
进入现有第 6 课
第 07 课

面向对象 RPG 项目

把封装、继承、多态、组合和智能指针放进一个完整的小型项目。

  • 核心知识类图、头文件与源文件拆分、对象所有权、模块协作。
  • 课堂案例玩家与怪物回合制战斗,包含生命值、攻击和胜负判断。
  • 算法训练回合循环、状态更新、最大最小值与随机选择。
  • 课后作业增加道具、暴击、逃跑和两类怪物,完成三组测试。
进入现有第 7 课
第 08 课

命令行输入输出与参数检查

学会让程序与用户对话,并正确处理空输入、错误数字和退出命令。

  • 核心知识cincoutgetline、输入流状态、argc/argv
  • 课堂案例单位换算器:温度、长度和重量三种模式。
  • 算法训练读取—验证—计算—输出的标准命令行流程。
  • 课后作业制作支持加减乘除和连续计算的安全计算器。
进入第 8 课
阶段成果学生能够读懂多文件项目,并写出带菜单、输入验证和清晰输出的命令行工具。

Phase 02 · Program logic

第 9-11 课:掌握控制流程与函数化思维。

第 09 课

条件判断、枚举与菜单状态

把复杂规则写成清晰分支,避免多层判断互相打架。

  • 核心知识if/elseswitch、逻辑运算、enum class
  • 课堂案例电影票价系统:年龄、会员和场次共同决定价格。
  • 算法训练条件表、边界值判断和有限状态转换。
  • 课后作业制作学生成绩等级与补考资格判断器。
进入第 9 课
第 10 课

循环、计数与数据统计

使用循环处理重复任务,学会累计、计数、寻找最大值和提前结束。

  • 核心知识forwhile、嵌套循环、break/continue
  • 课堂案例连续录入成绩,输出人数、平均分、最高分和及格率。
  • 算法训练累加器、计数器、最大最小值、质数判断。
  • 课后作业完成猜数字游戏,并统计次数和最佳纪录。
进入第 10 课
第 11 课

函数、参数与程序拆分

把长程序拆成可命名、可测试、可复用的小步骤。

  • 核心知识声明与定义、返回值、引用、const 引用、函数重载。
  • 课堂案例个人消费分析器:录入、统计、评级和输出分别封装。
  • 算法训练自顶向下分解、输入输出约定和边界测试。
  • 课后作业编写数字工具箱:素数、最大公约数、阶乘和区间求和。
进入第 11 课
阶段成果学生能够把自然语言规则转换为判断和循环,并将 100 行左右的程序合理拆分成函数。

Phase 03 · STL and algorithms

第 12-14 课:用 STL 处理真实数据。

第 12 课

字符串与文本解析

掌握命令行程序最常见的数据类型:一整行用户文本。

  • 核心知识stringfindsubstr、字符判断、stringstream
  • 课堂案例句子分析器:统计单词、数字、空格和最长单词。
  • 算法训练逐字符扫描、分词、大小写统一和格式验证。
  • 课后作业解析“add 数学作业 3”形式的任务命令。
进入第 12 课
第 13 课

数组、vector 与迭代器

用连续容器保存一组数据,完成增加、删除、修改和遍历。

  • 核心知识arrayvector、范围循环、迭代器、二维容器。
  • 课堂案例课程成绩管理器:添加学生、修改分数和打印表格。
  • 算法训练顺序查找、按条件删除、聚合统计和矩阵遍历。
  • 课后作业制作电影院座位表,支持预订、取消和剩余统计。
进入第 13 课
第 14 课

排序、查找与复杂度入门

理解算法不仅要“得到答案”,还要考虑数据变大后是否仍然高效。

  • 核心知识sort、比较器、线性查找、二分查找、lower_bound
  • 课堂案例游戏排行榜:按分数、姓名和完成时间切换排序。
  • 算法训练手写选择排序,对比 O(n)O(n²)O(log n)
  • 课后作业生成一组有序数据,比较线性查找与二分查找次数。
进入第 14 课
阶段成果学生能够选择合适的顺序容器,完成文本解析、排序、查找和基础复杂度分析。

Phase 04 · Data structures

第 15-17 课:理解常用数据结构解决什么问题。

第 15 课

栈、队列与双端队列

通过“后进先出”和“先进先出”理解数据顺序怎样影响程序行为。

  • 核心知识stackqueuedeque 及其常用操作。
  • 课堂案例打印任务队列和文本编辑器撤销记录。
  • 算法训练括号匹配、任务调度和滑动窗口直觉。
  • 课后作业模拟服务窗口排队,支持普通用户和优先用户。
进入第 15 课
第 16 课

集合、映射与词频统计

用键快速查找数据,用集合自动去重,理解有序与哈希容器的区别。

  • 核心知识setmapunordered_setunordered_map
  • 课堂案例通讯录:按姓名查询电话,阻止重复联系人。
  • 算法训练去重、频率计数、键值查询和按次数排名。
  • 课后作业统计文章词频,输出出现最多的十个单词。
进入第 16 课
第 17 课

链表、节点与指针复习

看懂节点如何连接,比较链表与 vector 在访问和插入方面的差异。

  • 核心知识节点、next 指针、list、插入、删除和遍历。
  • 课堂案例命令行音乐播放列表:插歌、删歌、下一首。
  • 算法训练链表顺序查找、头插尾插和反转思路。
  • 课后作业用节点实现简化任务链,并画出每次操作后的连接图。
进入第 17 课
阶段成果学生不只会背容器名称,还能根据访问顺序、是否重复和查找方式选择合适的数据结构。

Phase 05 · Problem solving and capstone

第 18-20 课:从算法思维走向独立项目。

第 18 课

递归、回溯与问题分解

学习函数怎样调用自己,以及如何在尝试失败后退回上一步。

  • 核心知识递归出口、递归步骤、调用栈、深度优先搜索与回溯。
  • 课堂案例迷宫寻路:标记走过的位置,找到出口后打印路径。
  • 算法训练阶乘、斐波那契、全排列和网格深度优先搜索。
  • 课后作业完成四宫格路径题,并解释每一次返回发生的原因。
进入第 18 课
第 19 课

文件读写、异常与测试

让命令行程序关闭后仍能保留数据,并学会处理文件不存在或格式错误。

  • 核心知识ifstreamofstream、CSV、异常、错误信息和断言。
  • 课堂案例可保存的任务清单:启动加载,退出自动保存。
  • 算法训练序列化、逐行解析、错误恢复和测试用例设计。
  • 课后作业为损坏文件、空文件、重复记录和正常文件编写测试。
进入第 19 课
第 20 课

结课项目:命令行信息管理系统

独立完成需求分析、类设计、算法选择、数据保存、测试和演示。

  • 核心功能新增、查看、修改、删除、搜索、排序、统计、保存和加载。
  • 项目选题图书馆、学生成绩、个人任务或游戏角色管理系统。
  • 算法与结构至少使用三种容器,并包含排序、查找和统计算法。
  • 结课提交源代码、设计说明、测试记录、示例数据和五分钟演示。
进入第 20 课
阶段成果学生能够从空文件夹开始,独立完成一个有明确需求、可靠输入、持久化数据和测试记录的 C++ 命令行项目。

Graduation checklist

完成第 20 课后,学生应该具备这些能力。

01

独立编程

能从需求写出菜单、函数和类,完成一个 300-600 行左右的多文件命令行程序。

02

算法基础

能实现并解释计数、最大最小值、线性查找、二分查找、排序、递归和简单回溯。

03

数据结构

理解数组、vector、栈、队列、集合、映射和链表的特点,并能根据问题做出选择。

04

程序质量

会验证输入、处理文件错误、设计边界测试,并利用编译信息和调试输出定位问题。

05

项目表达

能画出简单类图,说明使用了哪些算法和容器,并通过示例数据演示程序功能。

06

继续学习

具备进入竞赛算法、游戏开发、系统编程或更大型 C++ 项目的基础阅读和实践能力。

Recommended lesson rhythm

每课都要完成“理解、模仿、独立、复盘”四步。

概念与图解 20 分钟 教师示例 25 分钟 学生独立编程 35 分钟 测试与复盘 10 分钟

建议每课 90-120 分钟,并保留一份可运行的作业。进入下一课前,学生应能不用照抄重新完成本课核心案例,并说出所用算法或数据结构为什么适合这个问题。