摘要

  为完成课程任务提升自身的代码理解能力以及自学编程能力,同时更深刻地理解循环算法以及排序原理,我选择了这段选择排序代码作为我的课程报告主题;从编译后发现的各种错误,到利用AI工具理解代码、调试代码、运行代码、优化代码,再到最后完成技术报告,我从中学习到了很多C语言代码知识;我深刻理解了循环算法的应用,包括内层循环和外层循环的相互配合,以及输出输入与循环的正确配合,同时我也学习到了选择排序的相关原理,最重要的是我明白了如何自主地去学习、理解、调试、一段陌生的代码。

  1. 选题与准备
  1. 1选题

选择45号代码是因为我在预览过程中发现这段代码以循环为主体,并且其中的选择排序我也很感兴趣,希望通过理解学习其实现过程,加深对数组操作和算法逻辑的理解调,同时该代码呈现出典型的C语言特征。

  1. 2环境准备

    操作系统:Windows 11

    编译器:Dev-C++ 以及后续使用的VSCode和gcc版本

    辅助工具:Deepseek

  2. 编译调试过程

      2.1初始编译与错误分析

            编译错误如下图:

            错误1:使用了 exit() 函数但没有包含对应的头文件(即#include<stdlib.h>);

            错误2:clrscr()是不标准函数,clrscr() 是一个清除屏幕的函数,不属于C语言标准库,特定于古老的编译器,依赖特定的头文件;

            错误3:主函数void main() 是一个常见但不符合C语言标准的写法,C语言标准明确要                               求 main 返回 int,void main() 主要来自1980年代以及嵌入式系统(程序永不退出);

           *简化4:主函数结束部分我采用 return 0; 代替puts("\n Press any key to quit...");         

                                          getch(); 

                         是为简化程序,让程序能自然结束,不用用户再次按键才能结束。

      2.2错误修正

          修正1:在预处理部分添加头文件(#include<stdlib.h)以解决exit()函数的声明问题;

          修正2:直接删去clrscr()函数,即直接开始程序逻辑不清屏;

          修正3:把void main()改为int main(),将过时函数替换。

      2.3反复调试

      3. 代码理解与重命名

        ​​​​​​​3.1运行测试

             运行结果如下图:

          程序功能:将一串数组进行从小到大的排序,具体而言:先识别数组的数字个数并进行判断;然后进入外层排序循环,以及内层循环比较大小并进行数字交换;最后输出排序后的数组。

     ​​​​​​​ 3.2代码解析

           流程图如下:

            代码逻辑:首先输入数字个数n(n必须满足0<n<MAX),扫描n并判断n是否满足条件:否,则正常退出程序;是,则继续执行程序。然后继续依次输入n个数字,接着调用Select_Sort函数,执行外层排序循环,排序n-1次,执行内层循环,比较大小并判断是否要进行交换。最后,返回主函数,结束程序。

​​​​​​​       3.3重命名

            根据功能将原文件重命名为“45-select_sort.c”。

4.使用VSCode管理项目

​​​​​​​    4.1VSCode环境配置

         浏览器搜索VSCode,点击官网并安装,在系统中配置C/C++插件,配置编译器路径即Dev-Cpp。

​​​​​​​    4.2在VSCode中编译运行

         展示如下图:

5.代码版本管理

​​​​​​​    5.1Gitee仓库创建

         仓库创建过程较简单,如下图:

​​​​​​​     5.2VSCode中集成Git

         该过程遇到了很多问题,利用AI工具解决了大部分问题,自己尝试分析理解解决了部分问题:

          Q1:在Dev-Cpp安装目录中初始化Git,导致检测到大量系统文件

          解决:使用 git pull origin master --allow-unrelated-histories 先拉取远程内容

          Q2:尝试使用 main 分支,但远程是 master 分支

          解决:确认并使用正确的分支名 master

          Q3: Gitee密码认证失败,实则输错了密码

          解决:重置密码

        Q4:代码文件在 D:/45-选择排序.c/45-select-sort,但Git仓库在 D:/Dev-Cpp/select-sort-c-language

         解决如下图

         最终成果如下图:

6.总结

在完成本次课程报告的过程中,我收获了很多:深刻学习了循环结构,外层循环和内层循环的相互配合以实现选择排序的原理,理解了for循环算法语句;如何在代码中实现排序交换:必须先引入一个临时变量用于存储;新的输出方式puts可以实现自动换行;循环输入和输出如何实现,将一个一次性任务变成重复性任务;永不退出的古老主函数表达void main;现今简单的退出程序的方式return 0。 这是我第一次系统性地使用Git和Gitee。从最初的陌生到最终成功将代码推送至远程仓库,我深刻理解了版本控制绝不仅仅是“备份代码”。在配置和上传过程中,我们遇到了仓库关联冲突、认证失败、文件路径错误等一系列问题。解决这些问题的过程,让我认识到规范的流程(如先pull再push)和工具(如git status检查状态)的重要性。

在修复古老代码的过程中,我了解到了古老编码语言与现今的不同之处:不标准函数clrscr()不适用与现今的C语言环境;主函数void main与现今的int main之间的区别;古老代码退出程序的方式与现今的return 0;的差异;exit()函数的声明必须要添加头文件#include<stdlib.h>。尽管代码的实现方式可能“古老”,但选择排序算法本身的核心思想——每次从未排序部分中选取极值放到已排序序列的末尾——是清晰且永恒的。

本次课程报告我重新认识了C语言,它不是枯燥繁琐的而是严谨有序的,这次任务让我收获了很多知识的同时也唤起了我的兴趣以及对C语言的全新认知.有人认为C语言已经过时,但本次任务证明,无论是算法实现还是与现代开发工具链(如Git、VSCode)的结合,C语言依然充满活力。强大的基础,使其能无缝融入现代软件开发流程。

本次任务让我不仅巩固了选择排序算法,更让我亲身体验了代码调试、版本控制和项目管理的完整流程。我从一个只关心代码逻辑的实现者,开始向一个关注代码质量、历史维护性和团队协作的工程实践者转变。这段经历为我未来的学习和职业发展打下了坚实而宝贵的基础。

附录:

Gitee仓库链接:

https://gitee.com/zhouchang071118/select-sort-c-language

参考CSDN文章链接:

https://blog.csdn.net/weixin_52811588/article/details/126486829?fromshare=blogdetail&sharetype=blogdetail&sharerId=126486829&sharerefer=PC&sharesource=2501_94063307&sharefrom=from_link

    Logo

    有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

    更多推荐