78——糖果分配模拟程序的技术分析与实现
摘要:本报告详细记录了编号78的古老C语言糖果分配平衡模拟程序的现代化改造过程。通过Dev-C++和VSCode环境,解决了老式语法与新标准的兼容性问题,包括替换clrscr()和getch()等过时函数。程序模拟10个孩子环形分配糖果的过程,核心算法包括分糖规则和环形传递机制。项目成功实现了代码迁移、VSCode环境配置、Git版本管理及Gitee仓库同步。在调试过程中积累了老代码现代化改造的经
摘要
本报告基于选题编号78的古老C语言代码,完成了一个糖果分配平衡模拟程序的现代化改造与深度分析。通过系统性的问题解决流程,将原始代码成功迁移至现代开发环境,并实现了完整的技术文档化。
1.选题与准备
1.1选题
-
选题编号:78
-
程序功能:糖果分配平衡模拟
-
原始文件:78
.c
1.2环境准备
-
操作系统:Windows 11
-
编译器:Dev-C++ 5.11 / VSCode + MinGW
-
调试工具:GCC
-
辅助工具:百度引擎,CSDN
2.编译调试过程
2.1初始编译与错误分析
将78号文件夹复制至本地工作路径后,用Dev - C++打开78.c文件并执行编译操作,系统提示多项编译错误。经分析,错误根源均为代码采用的老式C语言语法与现行C语言标准不兼容,具体错误如下:
1. D:\Download\GameCode155\078\78.c [Error] stray '\32' in program
-
在程序中出现了不合法的字符'\32'
-
\32是八进制表示,对应十进制的 26,这是一个不可见的控制字符
2.[{
"resource": "/d:/Download/GameCode155/078/78.c",
"owner": "cpptools",
"severity": 4,
"message": "implicit declaration of function 'clrscr'; did you mean '_lrotr'? [-Wimplicit-function-declaration]",
"source": "gcc",
"startLineNumber": 10,
"startColumn": 5,
"endLineNumber": 10,
"endColumn": 5
}]
-
implicit declaration of function 'clrscr':编译器发现你使用了
clrscr()这个函数,但没有找到它的声明 -
did you mean '_lrotr'?:编译器猜测你可能想用的是
_lrotr函数(因为名字相似) -
[-Wimplicit-function-declaration]:这是一个警告,告诉你函数没有显式声明
3.[{
"resource": "/d:/Download/GameCode155/078/78.c",
"owner": "cpptools",
"severity": 4,
"message": "implicit declaration of function 'getch'; did you mean 'getc'? [-Wimplicit-function-declaration]",
"source": "gcc",
"startLineNumber": 28,
"startColumn": 5,
"endLineNumber": 28,
"endColumn": 5
}]
getch() 函数在旧版本的 Turbo C 等编译器中存在于 conio.h 头文件中,但在现代C编译器中:
-
要么不存在
-
要么需要不同的头文件
-
要么有不同的名称
2.2错误修正
1.代码中出现了一个编译器无法识别的非法字符,这通常是由于从网页、文档等地方复制粘贴代码时,带入了一些隐藏的、不可见的特殊字符,统一使用无 BOM 的 UTF-8 编码即可。
2.
#include<stdlib.h> // 添加这个头文件
system("cls"); // 替换 clrscr()
3.
// 把这一行:
printf("\n Press any key to quit...");
getch();
// 改为:
printf("\n Press Enter to quit...");
getchar();
2..3反复调试
经纠错代码,对齐运行系统与文件编码后,成功实现了编译并运行如下图:

3.代码理解与重命名
3.1运行测试
对修改后的程序进行完整运行测试,其执行流程与功能表现如下:
主要表现为
模拟10个孩子围成一圈进行糖果分配的过程,直到所有孩子拥有相同数量的糖果为止。
3.2代码解析


1. 初始化阶段
-
初始化10个孩子的糖果数:
[10,2,8,22,16,4,10,6,14,20] -
t[10]用于临时存储每个孩子分出去的糖果数
2. 显示初始状态
打印初始状态
3. 核心循环逻辑
1)分糖规则(重点)
if (sweet[i] % 2 == 0)
t[i] = sweet[i] = sweet[i] / 2; // 情况A:偶数直接分
else
t[i] = sweet[i] = (sweet[i] + 1) / 2; // 情况B:奇数先加1再分
关键点分析:
• t[i]:临时存储每个孩子要分出的糖果数
• sweet[i] = ...:更新孩子自己剩余的糖果数
• 这个过程完成后,每个孩子手中剩下原来一半(或一半减0.5)的糖果。
2)传递规则
for (l = 0; l < 9; l++)
sweet[l + 1] = sweet[l + 1] + t[l]; // 前9个孩子向右传递
sweet[0] += t[9]; // 第10个孩子传递给第1个孩子
环形结构实现:
• 这是一个典型的约瑟夫环结构模拟
• 第i个孩子分给第i+1个孩子,最后一个分给第一个
• 确保了系统的封闭性(糖果总数可能变化,但没有糖果丢失)
总而言之总结为:
// 当糖果数不相等时继续循 // 第一步:每个孩子分出一半糖果 // 偶数直接分一半 // 奇数加1后分一半 // 第二步:传递糖果给右边邻居 // 右边孩子接收左边孩子的糖果 // 第一个孩子接收最后一个孩子的糖果 // 打印本轮结果
终止条件
judge() 函数检查所有元素是否相等:
3.3重命名
据程序功能,我将其命名为“78+糖果分配问题”。
4.使用VS Code 管理项目
4.1VSCode环境配置
4.1.1 必要扩展安装
-
C/C++ (Microsoft)
-
C/C++ Extension Pack
-
Code Runner
4.1.2配置文件
配置gcc编译器:安装gcc编译器后,在Windows系统环境变量的Path路径中添加gcc安装目录,确保VSCode能够调用编译器。
4.2在VSCode中编译运行
# 在VSCode终端中编译
gcc -o 78+糖果分配问题.exe 78+糖果分配问题.c
# 运行程序
./78+糖果分配问题.exe
#与Dev - C++运行效果完全一致,实现了代码在VSCode中的稳定运行。
5.代码版本管理
5.1前期准备工作
-
安装 Git
访问 Git 官网 下载并安装 Git。安装后,在终端输入git --version验证安装成功。 -
在VS code中gitee和gielens两个插件可以实现vscode与gitee的稳定传输。
-
配置 Git 用户信息
打开 VSCode 终端,设置用户名和邮箱(提交记录会使用这些信息):bash
git config --global user.name "用户名" git config --global user.email "邮箱"
-
注册 Gitee 账号并创建仓库
-
访问 Gitee 官网 注册账号。
-
登录后,点击页面右上角的 “+” 号,选择 “新建仓库”。
-
填写仓库名称
-
5.2上传项目到 Gitee
-
在 VSCode 中初始化 Git 仓库:
-
用 VSCode 打开 C语言项目文件夹。
-
点击左侧活动栏的 源代码管理图标(或按
Ctrl+Shift+G),在源代码管理面板中点击 “初始化仓库”。这会在你的项目根目录创建一个.git文件夹。
-
-
关联 Gitee 远程仓库:
在 VSCode 终端中执行(将用户名和仓库名替换为实际信息):bash
git remote add origin https://gitee.com/用户名/仓库名.git
使用
git remote -v可以检查是否关联成功。 -
提交并推送代码:
-
在 VSCode 源代码管理面板,暂存更改:点击文件旁边的
+号,或使用git add .命令。 -
提交更改:在提交信息框输入简要说明(如 "初次提交:糖果"),然后按
Ctrl+Enter提交。 -
推送到 Gitee:在终端执行
git push -u origin master(这里以推送到master分支为例)。首次推送需要输入 Gitee 的用户名和密码。
-
-
在暂存区同步代码
点击下方同步按键即可在gitee仓库同步自己的代码。
6.总结
6.1学习收获
1.语法与调试能力:掌握了老式语法与现代语法的区别,总结为库的更改,以及函数的定义形式的改变,并通过相关论坛改正其错误。
2.掌握了“环形分配”算法的核心思想:通过数组操作模拟了糖果的传递过程,并处理了首尾相连的环形边界条件。
3.工具运用能力:掌握vscode与gitee库的基本链接过程,掌握vscode环境配置方法以及在dev c++中的错误纠正过程有了明确的思路与途径。
6.2学习不足
1.在vscode的环境配置过程中对路径的盲目,分不清配置环境导致实际作业时间大大延长。
2.在vscode与gitee的上传过程中,一味的询问ai,实际上ai并不能理解我的问题。导致问题迟迟没有解决。
3.在学习b站视频的过程中,囫囵吞枣,其中一个看似不起眼的过程确是卡住我的一个大问题。后续再次观看视频时,发现问题及时更正。
4.b站视频参差不齐,我观看的视频其中缺少很多过程,需要别的视频辅助来完成串起整个过程。
附录
gitee仓库链接:糖果分配问题: 编程经典问题--小孩分糖果
参考资料:b站《vscode与gitee连接。gitee管理vscode代码。》
b站《git_05_git设置用户名和邮箱》
b站《git的安装和配置》
b站《vscode使用教程【2025最新】vscode安装教程vscode配置c/c++教程vscode怎么设置中文》
CSDN《C语言clrscr与getch函数替代方案》
更多推荐



所有评论(0)