logo
0
0
Login
Forkfromopencamp/learning-c/c-training-guidance, ahead:main2 commits

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的所有素数

前置条件

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

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

操作流程

  • Fork 本仓库, 解锁作业副本。
  • 在您 Fork 的仓库中点击 云原生开发 按钮进入开发环境。
  • 根据注释完成10个 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_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. 如果通过,继续下一题;如果不通过,根据提示修改

🔧 故障排除

常见问题

  1. 编译错误

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

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

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

调试技巧

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

🤝 贡献

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

📄 许可证

本项目采用 MIT 许可证。

🎉 致谢

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

Happy Coding! 🚀

About

No description, topics, or website provided.
Language
C66.8%
Markdown10.7%
TOML5.2%
Shell5.1%
Others12.2%