logo
1
0
Login
update: update README

C 语言训练营基础阶段实验

欢迎来到 C 语言训练营基础阶段实验!

本实验将帮助你熟悉 C 语言常用算法,以及如何使用 Makefile 构建 C 语言。

📚 练习题列表

  1. 01_insert_sort - 插入排序
  2. 02_merge_sort - 归并排序
  3. 03_quick_sort - 快速排序
  4. 04_linear_search - 线性查找
  5. 05_binary_search - 折半查找
  6. 06_stack_maze - 栈解决迷宫问题
  7. 07_queue_maze - 队列实现广度搜索迷宫问题
  8. 08_circular_queue - 环形队列实现约瑟夫环问题
  9. 09_word_counter - 统计单词个数
  10. 10_my_strcpy - 字符串拷贝
  11. 11_command_interpreter - 字符指针数组 命令解释器
  12. 12_student_management - 结构体指针 学生信息管理
  13. 13_universal_sorter - 函数指针实现通用排序接口
  14. 14_calculator - 函数指针数组实现四则运算
  15. 15_url_parser - http 超链传递参数分析器
  16. 16_mysed - sed 简单流处理器实现
  17. 17_myfile - file命令查看ELF文件头
  18. 18_mywc - MyWC 词频统计器项目
  19. 19_mytrans - MyTrans 查字典翻译项目
  20. 20_mybash - MyBash 命令解释器项目

前置条件

  • 您必须报名 C 语言训练营

  • 您必须在训练营个人中心完成 CNB 账号绑定

操作流程

  • Fork 本仓库, 解锁作业副本。
  • 在您 Fork 的仓库中点击 云原生开发 按钮进入开发环境。
  • 根据文档完成20个 exercise 中的题目,并移除// I AM NOT DONE 注释。
  • 完成后提交代码到 main 分支,并创建合并请求。

  • 最后可以在 pr 页面来查看评分过程(可多次提交代码,每次提交都会触发评分,以最高分为准)

  • 如果通过,则可以在 opencamp 的晋级榜单上看到自己的成绩,如没有,请查看上一步的流水线日志。

云原生开发/本地测试

🛠️ 系统要求

  • Linux 或 macOS 系统
  • GCC 编译器
  • Python 3.6+
  • (可选)inotify-tools(用于文件监控功能)
# Ubuntu/Debian 安装依赖 sudo apt-get update sudo apt-get install gcc python3 inotify-tools # macOS 安装依赖(使用 Homebrew) brew install gcc

🚀 快速开始

1. 编译检查器

# 使用 Makefile make c-checker # 或者手动编译 gcc -Wall -Wextra -std=c11 -o c-checker checker.c

2. 查看所有练习题

./c-checker list # 或者 make list

3. 查看练习题提示

./c-checker hint 01_insert_sort # 或者 make hint EXERCISE=01_insert_sort

4. 编辑练习题

编辑 exercises/ 目录下的 .c 文件,移除 // I AM NOT DONE 注释并实现代码。

5. 检查单个练习题

./c-checker check 01_insert_sort # 或者 make check EXERCISE=01_insert_sort

6. 检查所有练习题

./c-checker check-all # 或者 make check-all

7. 监控模式(类似 rustlings watch)

./watch.sh # 或者 make watch

8. 运行单个练习题

./run.sh 01_hello_world

9. 清理编译文件

./clean.sh # 或者 make clean

10. 查看JSON测试报告

当运行所有测试时(check-all),系统会在项目根目录下生成一个总体的JSON格式测试报告:

# 运行所有测试并生成JSON报告 ./c-checker check-all # 查看总体JSON报告 cat test_results_summary.json # 使用Python格式化显示JSON python3 -m json.tool test_results_summary.json

JSON报告包含:

  • 总分数(每道题目5分,总分20道题100分)
  • 通过/失败/未完成的题目数量
  • 成功率统计
  • 每道题目的详细状态和得分

📁 项目结构

C-test/ ├── exercises/ # 练习题源码目录 │ ├── 01_insert_sort | | |—— 01_insert_sort.c │ ├── 02_merge_sort | | |—— 02_merge_sort.c │ └── ... ├── tests/ # C语言测试用例目录 │ ├── test_01_insert_sort.c │ ├── test_02_merge_sort.c │ └── ... ├── checker/ # C语言测试框架 │ ├── test_framework.h │ └── test_framework.c ├── checker.c # C语言检查器主程序 ├── c-checker # 编译后的检查器 ├── exercises.toml # 练习题配置文件 ├── Makefile # 构建配置 ├── watch.sh # 监控脚本 ├── run.sh # 运行脚本 ├── clean.sh # 清理脚本 └── README.md # 项目说明

🎮 使用方法

完成练习题的步骤

  1. 查看练习题列表: ./c-checker listmake list
  2. 查看提示: ./c-checker hint [exercise_name]make hint EXERCISE=[exercise_name]
  3. 编辑代码: 在 exercises/ 目录下编辑对应的 .c 文件
  4. 移除标记: 删除或注释掉 // I AM NOT DONE
  5. 实现功能: 根据注释和提示实现所需功能
  6. 测试验证: ./c-checker check [exercise_name]make check EXERCISE=[exercise_name]
  7. 重复直到通过: 根据错误信息修改代码直到测试通过

示例:完成第一个练习题

# 1. 编译检查器 make c-checker # 2. 查看练习题列表 ./c-checker list # 3. 查看第一题提示 ./c-checker hint 01_insert_sort # 4. 编辑文件 vim exercises/01_insert_sort.c # 5. 在编辑器中: # - 移除 "// I AM NOT DONE" 行 # - 添加 printf("hello, world.\\n"); # 6. 检查练习题 ./c-checker check 01_insert_sort # 7. 如果通过,继续下一题;如果不通过,根据提示修改

🔧 故障排除

常见问题

  1. 编译错误

    • 检查语法错误
    • 确保包含了必要的头文件
    • 对于涉及数学函数的程序,确保链接了数学库 (-lm)
  2. 测试失败

    • 检查输出格式是否与预期完全一致
    • 确保移除了 // I AM NOT DONE 标记
    • 查看错误信息,根据提示修改
  3. 权限问题

    • 确保脚本有执行权限:chmod +x *.sh

调试技巧

  • 使用 ./run.sh [exercise_name] 单独运行程序查看输出
  • 查看测试源码了解具体的验证逻辑
  • 使用 gcc -Wall 启用更多警告信息

🤝 贡献

欢迎提交问题和改进建议!

📄 许可证

本项目采用 MIT 许可证。

🎉 致谢

  • 灵感来源于 Rustlings
  • 感谢所有贡献者和使用者

Happy Coding! 🚀