Exercise Answer
基础语法与数据类型¶
1. 编写程序输出“Hello, World!”
要求:使用标准输出流 cout 实现。
2. 计算两个整数的和
要求:从用户输入读取两个整数,输出它们的和。
3. 交换两个变量的值
要求:不借助临时变量,使用算术或位运算实现。
4. 判断奇偶数
要求:输入一个整数,输出其为奇数或偶数。
5. 计算圆的面积
要求:输入半径,输出面积(保留两位小数)。
6. 温度转换
要求:将摄氏温度转换为华氏温度,公式为:
$$ F = C \times \frac{9}{5} + 32 $$
7. 计算数组平均值
要求:输入一个整数数组,输出其平均值。
8. 查找数组最大值
要求:遍历数组并返回最大值。
9. 反转字符串
要求:输入一个字符串,输出其反转结果。
10. 判断回文字符串
要求:检查字符串是否为回文(如“madam”)。
控制结构与循环¶
11. 打印乘法表
要求:输出 1 到 9 的乘法表。
12. 判断素数
要求:输入一个整数,判断是否为素数。
13. 计算阶乘
要求:递归或循环实现阶乘计算。
14. 斐波那契数列
要求:输出前 n 项斐波那契数列。
15. 猜数字游戏
要求:生成随机数,用户猜测并提示大小。
16. 打印菱形图案
要求:根据用户输入的行数打印菱形。
17. 计算最大公约数(GCD)
要求:使用辗转相除法实现。
18. 计算最小公倍数(LCM)
要求:基于 GCD 的结果计算 LCM。
19. 统计字符串中元音字母
要求:输入字符串,统计元音(a, e, i, o, u)的数量。
20. 打印素数区间
要求:输出给定区间内的所有素数。
函数与递归¶
21. 递归实现字符串反转
要求:不使用库函数,递归反转字符串。
22. 汉诺塔问题
要求:递归解决汉诺塔移动步骤。
23. 二分查找
要求:在有序数组中递归实现二分查找。
24. 计算幂函数
要求:递归计算 \(a^b\)。
25. 判断平衡二叉树
要求:检查二叉树是否平衡(高度差≤1)。
26. 十进制转二进制
要求:递归将十进制数转换为二进制字符串。
27. 计算组合数 C(n, k)
要求:递归或动态规划实现组合数计算。
28. 约瑟夫环问题
要求:模拟约瑟夫环的幸存者位置。
29. 快速排序
要求:递归实现快速排序算法。
30. 归并排序
要求:递归实现归并排序。
面向对象编程¶
31. 创建学生类
要求:包含姓名、学号、成绩属性,并实现成绩排序。
32. 银行账户类
要求:模拟存款、取款、查询余额操作。
33. 复数类运算
要求:实现复数的加减乘除运算。
34. 继承与多态
要求:基类“形状”,派生类“圆”“矩形”计算面积。
35. 运算符重载
要求:重载 + 运算符实现向量加法。
36. 友元函数
要求:使用友元函数访问类的私有成员。
37. 虚函数与动态绑定
要求:通过基类指针调用派生类方法。
38. 模板函数
要求:编写泛型函数求数组最大值。
39. 异常处理
要求:自定义异常处理除零错误。
40. 单例模式
要求:实现线程安全的单例类。
文件与标准库¶
41. 文件读写
要求:将用户输入写入文件,再读取输出。
42. 统计文件行数
要求:读取文本文件并统计行数。
43. CSV 文件解析
要求:读取 CSV 文件并存储为结构体数组。
44. 随机数生成
要求:生成 10 个随机数并存入文件。
45. 字符串分割
要求:使用 std::stringstream 分割字符串。
46. 日期时间处理
要求:输出当前日期和时间(<chrono> 库)。
47. STL 容器排序
要求:使用 std::sort 对 vector 排序。
48. 使用 std::map
要求:统计单词在文本中的出现频率。
49. 正则表达式匹配
要求:验证邮箱格式是否合法。
50. 多线程计算
要求:使用 std::thread 并行计算数组和。
数据结构与算法¶
51. 链表反转
要求:迭代或递归实现单链表反转。
52. 栈实现括号匹配
要求:检查表达式中的括号是否匹配。
53. 队列模拟
要求:用队列模拟银行排队系统。
54. 二叉树遍历
要求:实现前序、中序、后序遍历。
55. 图的深度优先搜索(DFS)
要求:邻接表存储图并实现 DFS。
56. 图的广度优先搜索(BFS)
要求:邻接矩阵存储图并实现 BFS。
57. 哈希表实现
要求:自定义哈希函数解决冲突。
58. 堆排序
要求:基于 std::priority_queue 实现堆排序。
59. Dijkstra 算法
要求:求解单源最短路径。
60. 动态规划背包问题
要求:01 背包问题的动态规划解法。
高级特性与综合应用¶
61. 智能指针管理资源
要求:使用 std::unique_ptr 管理动态数组。
62. Lambda 表达式排序
要求:用 Lambda 实现自定义排序规则。
63. 多线程生产者-消费者模型
要求:使用互斥锁和条件变量实现。
64. 网络编程(TCP 客户端/服务端)
要求:基于 sockets 实现简单通信。
65. JSON 数据解析
要求:使用 nlohmann/json 库解析 JSON 文件。
66. 单元测试框架
要求:使用 Google Test 测试一个函数。
67. 设计模式(工厂模式)
要求:通过工厂类创建不同图形对象。
68. 内存池实现
要求:自定义内存池优化小对象分配。
69. 编译器词法分析器
要求:解析简单算术表达式的词法单元。
70. 模拟计算器
要求:支持加减乘除和括号的表达式求值。
实战项目¶
71. 学生成绩管理系统
要求:文件存储数据,支持增删改查。
72. 简易聊天室
要求:多线程实现多人文本聊天。
73. 贪吃蛇游戏
要求:基于控制台的交互式游戏。
74. 图书管理系统
要求:使用类和文件管理图书信息。
75. 迷宫求解
要求:DFS 或 BFS 找到迷宫出口路径。
76. 五子棋 AI
要求:实现简单棋盘评估算法。
77. 词频统计工具
要求:统计文本中单词频率并生成报表。
78. 简易数据库
要求:支持 SQL 语句的增删改查。
79. HTTP 服务器
要求:解析 GET 请求并返回静态文件。
80. 密码管理器
要求:加密存储账号密码信息。
附加挑战¶
81. 实现 std::vector
要求:自定义动态数组类模板。
82. 实现 std::string
要求:自定义字符串类并支持常用操作。
83. 并发哈希表
要求:线程安全的哈希表设计。
84. 遗传算法求解 TSP
要求:旅行商问题的遗传算法实现。
85. 机器学习线性回归
要求:梯度下降法实现线性回归。
86. 区块链模拟
要求:实现简单的区块哈希链。
87. 编译器语法分析器
要求:生成算术表达式的抽象语法树。
88. 操作系统内存分配器
要求:模拟 malloc 和 free 的底层逻辑。
89. 图像处理(边缘检测)
要求:使用 OpenCV 实现 Sobel 算子。
90. 神经网络手写数字识别
要求:基于 MNIST 数据集的简单模型。
调试与优化¶
91. 内存泄漏检测
要求:使用 Valgrind 检查程序内存泄漏。
92. 性能剖析
要求:用 gprof 分析程序热点函数。
93. 代码覆盖率测试
要求:使用 gcov 生成覆盖率报告。
94. 编译期计算
要求:模板元编程实现斐波那契数列。
95. SIMD 指令优化
要求:使用 AVX 指令加速数组求和。
96. 缓存友好代码
要求:优化二维数组遍历顺序。
97. 无锁队列实现
要求:基于原子操作实现多线程队列。
98. 编译器内联优化
要求:分析 inline 关键字的效果。
99. 异常处理开销
要求:对比异常与错误码的性能差异。
100. 二进制协议解析
要求:解析自定义二进制数据格式。