Skip to content

About

编程学习记录

Resources

Stars

2 stars

Watchers

1 watching

Forks

Latest commit

 

History

85 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C、Python 与 Java 编程学习档案

这是一个持续更新的个人编程学习仓库,用来保存 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 语言专区

目录 已有源码 主要内容
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 专区

目录 已有源码 主要内容
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 专区

目录 已有源码 主要内容
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 学习指南。

推荐学习方式

整体顺序是:理解概念 → 阅读示例 → 手动跟踪程序 → 独立重写 → 修改条件做变式 → 调试错误 → 完成整题 → 总结复习。

  1. 先学 Python 基础语法和流程控制,建立变量、循环、列表与字典的直觉。
  2. 如果当前课程正在讲 Java,可以接着完成输出、基本类型、运算符、输入、条件分支、循环、方法与数组阶段,再用成绩管理系统复习菜单、函数和数组,最后进入类对象与封装;先手写一遍排序和查找,再讨论内置工具。不要同时把三种语言的语法全部铺开。
  3. 再学 C 语言基础语法,重点适应类型、格式符、数组和内存边界。
  4. 学完 C 的分支、循环、函数和数组后,进入字符串与指针。
  5. 数组、函数、字符串和指针不要孤立背诵,要反复比较“数组名怎样传参”“函数里为什么还要传长度”。
  6. 完成基础练习后,进入动态内存、哈希表、单链表、两数之和、二分查找、巴什博弈和蓝桥杯入门题。
  7. 综合项目放在算法基础之后阅读,也可以用项目反过来复习函数、菜单和数据结构。

完整阶段、先修关系、文件位置和检查点见 综合学习路线。

运行示例

在仓库根目录运行 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 跟踪。
  • 发现代码问题时先记录在对应学习说明中。未经明确授权,不直接修改原始学习代码。

About

编程学习记录

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages