logo
0
0
Login
修改 CI 触发方式

C 语言训练营导学阶段实验

欢迎来到 C 语言训练营导学阶段实验!

本实验将帮助你熟悉 C 语言编程环境,以及如何使用 C 语言编写程序。

📚 练习题列表

  1. 01_hello_world - 打印 "Hello, World!"
  2. 02_count_fingers - 循环计数(1-10)
  3. 03_sum_1_to_100 - 计算1到100的和
  4. 04_multiplication_table - 打印9×9乘法表
  5. 05_max_prime_100 - 找出100以内的最大素数
  6. 06_count_nines - 统计1-100中数字9的出现次数
  7. 07_itoa - 整数转字符串
  8. 08_josephus_ring - 约瑟夫环问题
  9. 09_count_nines_advanced - 统计数字9(高级版本)
  10. 10_all_primes_100 - 找出1-100的所有素数

🛠️ 系统要求

  • 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_hello_world # 或者 make hint EXERCISE=01_hello_world

4. 编辑练习题

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

5. 检查单个练习题

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

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报告包含:

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

📁 项目结构

C-test/ ├── exercises/ # 练习题源码目录 │ ├── 01_hello_world.c │ ├── 02_count_fingers.c │ └── ... ├── tests/ # C语言测试用例目录 │ ├── test_01_hello_world.c │ ├── test_02_count_fingers.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_hello_world # 4. 编辑文件 vim exercises/01_hello_world.c # 5. 在编辑器中: # - 移除 "// I AM NOT DONE" 行 # - 添加 printf("hello, world.\\n"); # 6. 检查练习题 ./c-checker check 01_hello_world # 7. 如果通过,继续下一题;如果不通过,根据提示修改

📋 命令参考

C语言检查器命令

# 列出所有练习题及其状态 ./c-checker list # 检查指定练习题 ./c-checker check [exercise_name] # 检查所有练习题 ./c-checker check-all # 显示练习题提示 ./c-checker hint [exercise_name] # 显示帮助信息 ./c-checker help

Makefile 命令

# 编译检查器 make c-checker # 列出所有练习题 make list # 检查所有练习题 make check-all # 检查指定练习题 make check EXERCISE=exercise_name # 显示练习题提示 make hint EXERCISE=exercise_name # 清理编译文件 make clean # 显示帮助 make help

辅助脚本

# 启动监控模式(自动检查文件变化) ./watch.sh # 编译并运行指定练习题 ./run.sh [exercise_name] # 清理所有编译生成的文件 ./clean.sh

🔧 故障排除

常见问题

  1. 编译错误

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

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

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

调试技巧

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

🤝 贡献

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

📄 许可证

本项目采用 MIT 许可证。

🎉 致谢

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

Happy Coding! 🚀