logo
0
0
WeChat Login
Forkfromopencamp/learning-c/c-training-guidance, aheadmain1 commits, behindmain7 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的所有素数

🛠️ 系统要求

  • 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! 🚀

About

No description, topics, or website provided.
Language
C63.8%
Markdown12.5%
TOML5.4%
Shell5.3%
Others13%