这是一个持续更新的个人编程学习仓库,用来保存 C 语言、Python、Java、数据结构、算法和综合项目练习。仓库不只收集代码,也为重要练习记录运行示例、易错点和拓展方向,方便以后复习、重写和对比自己的进步。
当前已整理的内容以实际文件为准:
- C 语言:基础语法、变量与数据类型、分支与循环、函数、数组、字符串、指针、结构体、动态内存、链表、哈希表、算法练习和综合项目。
- Python:基础语法、分支与循环、列表与元组、字典、文件操作、异常处理、算法和综合项目。
- Java:类与
main入口、基本类型、类型转换、运算符、短路求值、输入校验、条件分支、switch、单层与嵌套循环、循环统计、随机猜数字、方法拆分与重载、值传递与数组引用、素数/约数/数字拆位/第二大值/数对统计、冒泡排序、线性/二分查找、菜单式学生成绩管理,以及类对象、构造方法、封装、this和static面向对象入门。 - 辅助内容:3D 莲花可视化项目、配套逐题说明,以及学习路线、环境配置和 Git 操作文档。
仓库采用“先按语言、再按知识点”的结构。每个源码文件保持原文件名,练习说明与源码放在同一目录,查找和理解代码不需要跨目录跳转。
| 入口 | 用途 |
|---|---|
| C 语言分类导航 | 查看 C 语言的分类、练习顺序和运行方式 |
| Python 分类导航 | 查看 Python 的分类、练习顺序和项目入口 |
| Java 分类导航 | 查看 Java 的目录、源码命名规则和入门练习 |
| C 语言学习指南 | 系统学习重点、难点、练习方法、掌握标准和拓展方向 |
| Python 学习指南 | 按 Python 特点组织的知识点、项目阅读和练习建议 |
| Java 学习指南 | Java 程序结构、类型、运算符、输入分支、循环、掌握标准和后续路线 |
| 综合学习路线 | 安排三种语言、算法和项目的学习顺序 |
| 开发环境与 Git 操作 | macOS 下的 C、Python、Java 环境、终端、Git 和测试流程 |
| 仓库结构说明 | 分类规则、命名规范和后续维护约定 |
| 文件与文档导航 | 按学习目标查找目录、主指南和逐题说明 |
.
├── C/
│ ├── 01_基础语法/
│ ├── 02_变量与数据类型/
│ ├── 04_分支与循环/
│ ├── 05_函数/
│ ├── 06_数组/
│ ├── 07_字符串/
│ ├── 08_指针/
│ ├── 09_结构体与自定义类型/
│ ├── 12_数据结构/
│ ├── 13_算法练习/
│ └── 14_综合项目/
├── Python/
│ ├── 01_基础语法/
│ ├── 03_分支与循环/
│ ├── 05_列表与元组/
│ ├── 06_字典与集合/
│ ├── 08_文件操作/
│ ├── 10_异常处理/
│ ├── 12_算法练习/
│ ├── 13_综合项目/
│ └── 14_可视化项目/
├── Java/
│ ├── 01_基础语法/
│ ├── 02_分支与循环/
│ ├── 03_方法与数组/
│ ├── 04_综合项目/
│ └── 05_面向对象/
├── docs/
│ ├── C语言学习指南.md
│ ├── Python学习指南.md
│ ├── Java学习指南.md
│ ├── 开发环境与Git操作指南.md
│ ├── 2026-10-10_学习顺序.md
│ ├── 2026-09-12_仓库结构说明.md
│ ├── 2026-09-12_文件清单.md
│ └── legacy/ 迁移前的目录说明,作为历史资料保留
├── README.md
├── requirements.txt 可视化项目依赖
└── .gitignore
文件名或配套文档名中的日期表示该练习第一次进入仓库的日期,不表示它是当天刚写的。Java 源码因类名规则可能不带日期,以同目录说明为准。源码不按日期排序学习,实际顺序见各语言导航和学习指南。
| 目录 | 已有源码 | 主要内容 |
|---|---|---|
C/01_基础语法 |
1 | 输入输出、变量、格式符和基础综合练习 |
C/02_变量与数据类型 |
1 | 整数除法、类型转换和格式控制 |
C/04_分支与循环 |
6 | if、switch、for、while、输入校验 |
C/05_函数 |
5 | 函数定义与调用、返回值、参数、作用域基础 |
C/06_数组 |
5 | 一维数组、遍历、统计、逆序、极值和旧版对照 |
C/07_字符串 |
2 | fgets、strlen、字符数组和 ASCII |
C/08_指针 |
7 | 指针读写、指针交换、值传递对比、指针偏移、数组传参、NULL 和边界 |
C/09_结构体与自定义类型 |
3 | 结构体变量、结构体数组、结构体指针、字段访问、成绩统计和输入校验 |
C/12_数据结构 |
8 | 固定容量哈希表、动态内存数组、单链表遍历、尾插、删除分支、固定测试、线性探测与整合复习版 |
C/13_算法练习 |
13 | 蓝桥杯入门题、两数之和、第二大不同值、二分查找、水仙花数、巴什博弈与测试用例 |
C/14_综合项目 |
7 | 计算器、学生成绩管理系统、多知识点模拟和两套考试综合题 |
建议先阅读 C 语言分类导航,再按 C 语言学习指南 中的阶段练习。
| 目录 | 已有源码 | 主要内容 |
|---|---|---|
Python/01_基础语法 |
6 | 输出、循环、字符串运算和早期版本对照 |
Python/03_分支与循环 |
16 | 登录、资格判断、猜数字、菜单流程和输入控制 |
Python/05_列表与元组 |
3 | 列表增删、遍历、统计和成绩复习 |
Python/06_字典与集合 |
1 | 字典成绩统计、排序和查询 |
Python/08_文件操作 |
6 | 文本文件、JSON、路径定位和读写练习 |
Python/10_异常处理 |
1 | try / except 与 ValueError |
Python/12_算法练习 |
4 | 两数之和的暴力解、字典优化、自动测试版和结果展示版 |
Python/13_综合项目 |
9 | 计算器、通讯录、成绩管理系统及多个迭代版本 |
Python/14_可视化项目 |
1 | NumPy、Matplotlib 与 3D 动画 |
建议先阅读 Python 分类导航,再按 Python 学习指南 推进。
| 目录 | 已有源码 | 主要内容 |
|---|---|---|
Java/01_基础语法 |
3 | 类、main、基本类型、自动与强制转换、整数溢出、运算符、短路求值和三元表达式 |
Java/02_分支与循环 |
10 | Scanner、输入校验、if / else if、switch、for / while / do-while、嵌套循环、统计、极值和持续交互 |
Java/03_方法与数组 |
10 | 方法定义与重载、值传递与数组引用、数组遍历、素数/约数/数字拆位/第二大值/数对统计、冒泡排序、线性查找和二分查找 |
Java/04_综合项目 |
1 | 菜单循环、多方法分工、固定容量平行数组、输入校验、学号查找、统计和同步排序 |
Java/05_面向对象 |
3 | 类、对象、构造方法、引用、私有字段、封装、this、static 和对象传参 |
Java 源码保留合法类名,不强行套用 C/Python 的编号前缀。阅读顺序、文件名规则和运行命令见 Java 分类导航,系统知识见 Java 学习指南。
整体顺序是:理解概念 → 阅读示例 → 手动跟踪程序 → 独立重写 → 修改条件做变式 → 调试错误 → 完成整题 → 总结复习。
- 先学 Python 基础语法和流程控制,建立变量、循环、列表与字典的直觉。
- 如果当前课程正在讲 Java,可以接着完成输出、基本类型、运算符、输入、条件分支、循环、方法与数组阶段,再用成绩管理系统复习菜单、函数和数组,最后进入类对象与封装;先手写一遍排序和查找,再讨论内置工具。不要同时把三种语言的语法全部铺开。
- 再学 C 语言基础语法,重点适应类型、格式符、数组和内存边界。
- 学完 C 的分支、循环、函数和数组后,进入字符串与指针。
- 数组、函数、字符串和指针不要孤立背诵,要反复比较“数组名怎样传参”“函数里为什么还要传长度”。
- 完成基础练习后,进入动态内存、哈希表、单链表、两数之和、二分查找、巴什博弈和蓝桥杯入门题。
- 综合项目放在算法基础之后阅读,也可以用项目反过来复习函数、菜单和数据结构。
完整阶段、先修关系、文件位置和检查点见 综合学习路线。
在仓库根目录运行 Python 程序:
python3 "Python/01_基础语法/01_2026-08-23_输出偶数.py"
python3 "Python/13_综合项目/02_2026-09-09_简易计算器_函数版.py"编译运行 C 程序:
clang -std=c17 -Wall -Wextra -Wpedantic \
"C/01_基础语法/01_2026-09-28_基础语法综合练习.c" \
-o /tmp/c_practice
/tmp/c_practice编译运行 Java 程序:
java_dir=$(mktemp -d /tmp/java-practice.XXXXXX)
javac -encoding UTF-8 -Xlint:all -d "$java_dir" "Java/01_基础语法/BasicTypes.java"
java -cp "$java_dir" BasicTypes可视化项目需要安装 requirements.txt 中的依赖,具体步骤见 开发环境与 Git 操作指南。
- 仓库首页:只负责总览、查找入口和学习原则。
- 语言导航:
C/README.md、Python/README.md、Java/README.md说明目录与推荐顺序。 - 语言学习指南:集中讲知识体系、重点、难点、练习方法和掌握标准。
- 综合学习路线:只安排阶段和检查点,避免在路线里重复完整理论。
- 逐题说明:源码旁的
_简介与学习建议.md或_零基础教程.md是最具体的讲解,不把全部内容复制到首页。 - 环境指南:集中维护软件安装、终端、编译、调试和 Git 操作。
- 历史资料:
docs/legacy/保存迁移前的目录 README。它们用于对照和查找历史说明,不作为当前入口。
仓库已有练习可以证明你接触过以下内容:Python 列表、字典、文件、异常和菜单项目;C 数组、函数、字符串、指针、结构体、动态内存、单链表创建/尾插/删除/释放、哈希表、二分查找、基础算法和综合项目;Java 类与对象、构造方法、对象引用、封装、this、static、基本类型、输入校验、条件分支、循环、方法重载、值传递、数组、排序查找、基础算法和内存版成绩管理菜单项目。
以下内容目前没有足够的独立练习,适合作为后续学习方向,而不是已经掌握的结论:
- C 文件操作、递归、栈、队列和树。
- Python 面向对象、模块与包、正式的数据结构实现。
- Java 继承、多态、接口、集合、系统异常处理、自动测试和工程构建。
- Java 二维数组、集合参与的数据处理、正式自动测试和更复杂的算法变式。
- Java 成绩管理的对象化重构、继承层次和接口设计。
- Java 成绩管理的删除/修改、文件持久化、对象化数据和正式自动测试。
- 更系统的算法专题、复杂项目拆分和自动化测试。
新增练习时,先判断主要学习目标,再放进对应语言和知识点目录,并补充同目录学习说明。具体规则见 仓库结构说明。
C/08_指针/23_2026-10-15_指针初始化与数组参数校验练习.c保留了真实错误:空指针检查后漏写return;。请先按说明自行定位,再阅读同目录的教程版。C/06_数组/05_2026-09-30_数组统计.c曾存在极值比较错误,已于 2026-10-15 修复。它的说明保留了“程序能跑完但答案错误”的复盘价值。C/14_综合项目/44_2026-10-30_软件协会入门考试五题综合练习_原始版.c保留了块注释结束位置错误导致的嵌套注释警告;可在-Werror下通过检查的是相邻的_修正版.c,两者只差一个*/。Java/01_基础语法/hellojava.java的可执行代码通过编译和运行;源码后半段注释里的文件名与类名说明存在两处旧描述,已在同目录简介中记录,没有擅自改源码。Java/02_分支与循环/SwitchBreakDemo.java故意保留漏写break的反例,使用-Xlint:all时会产生 11 条预期[fallthrough]警告;使用-Werror会按设计失败,不能通过修改原始源码来掩盖。Java/03_方法与数组/ArrayAndBubbleSort.java的二分查找要求数组已经有序,方法本身不会先排序;它的check()在教学输出中显示[失败]时不会改变进程退出码,因此不能把“退出码为 0”当成正式自动测试通过。Java/03_方法与数组/SecondLargest.java保留了真实逻辑错误:数组读取从下标 1 开始,漏掉第一个输入和a[0],输出判断也写反。请先按同目录简介定位问题,再阅读零基础教程中的最小修复思路;原源码没有直接改写。Java/03_方法与数组/Narcissistic.java固定按三位数拆位,但没有校验输入范围。1 20会输出 1,标准水仙花数测试应限定在100~999;该边界已记录,不把程序输出直接当作题目定义。Java/04_综合项目/GradeManager.java使用三个平行数组保存学生记录,数据只存在内存中;姓名和学号不能含空格。它适合练习菜单程序,但不要把它误认为已经使用面向对象、集合或文件持久化。Java/05_面向对象/Student.java的字段没有private,是为了先演示类和对象;它允许直接改字段,也不校验成绩。封装的安全版本由EncapsulationStaticDemo中的SafeStudent展示,不能把两份类混为同一实现。- 运行文件相关练习时,不要在仓库根目录随意生成临时数据;优先进入脚本所在目录运行,并确认输出文件未被 Git 跟踪。
- 发现代码问题时先记录在对应学习说明中。未经明确授权,不直接修改原始学习代码。