CS-MEDIUM-Manual
在开始做之前,相信你已经完成了CS方向的简单题部分或者你是具有C语言基础的佬佬。在接下来的学习中,你将会对C语言和计算机系统有更深入的理解、掌握编写大型程序的基本技能和思想。
本题没有题目,但是也请认真阅读。
Part 1 大型软件编程规范
虽然我们的项目代码量很小,但是编程规范仍然非常重要,不仅有利于我们检查你提交的代码,而且对你往后的职业发展具有重要意义。
这里可以通过一个案例让我们意识到编程规范的重要性。2018年9月19日,美国威斯康星州一位名叫Anthony Tong的 程序员在WTS Paradigm软件公司办公大楼枪击了4名同事,因为他无法忍受他的同事不为函数接口写注释、不遵守驼峰命名法、左花括号换行和强制更新版本等不规范做法。虽然这种过激行为必须受到法律的严惩,但是和不遵守编程规范的人一起写程序确实是一件非常痛苦的事情。遵守编程规范能提高代码可读性,便于代码维护,因此程序员一定要遵守编程规范。
虽然我们不会将此作为考核重点,但是遵守编程规范会让出题人更好地理解你的代码,留下更好的印象。
Part 2 结构化设计
结构化设计是克服开发大型程序的困难的最有效和最基本的方法。结构化设计的概念最早是由荷兰计算机科学家狄克斯特拉于1969年提出的。软件的结构化设计就是基于分而治之的思想,按照高内聚和松耦合原则进行的软件结构设计,其目的是使软件具有良好的结构,从而使软件易于开发和维护。
软件的结构化通常表现为层次化、过程化和对象化等,可以统称为模块化。那么怎样理解模块呢?模块可大可小,它具有不同的粒度或层次。 从语句粒度上看,顺序结构、选择结构和循环结构就是程序的三种基本模 块。从过程粒度上看,一个函数就是一个模块。从对象粒度上看,一个对象就是一个模块。从文件粒度上看,一个文件就是一个模块。如果从更高的体系结构的层次上看,软件系统中的一层或一个子系统都是一个模块。
例如:在后面编写程序的时候,我们会要求多文件编程。例如:将底层数据结构接口声明在stack.h
文件、将其定义放在相应的stack.c
文件中,将程序主要部分的具体实现放在main.c
中。尽管看起来像是把简单的问题复杂化了,但从长远来看,这对你的习惯的养成有深远影响。
Part 3 项目构建&调试
项目构建工具Makefile:
当面临多文件多目录的项目编译构建的时候,逐个编译并运行的方式似乎有些太低效了,在 Linux(Unix) 环境下使用GNU的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入一些时间去完成一个或者多个称之为Makefile的脚本文件。
项目调试工具GDB:
一般来说,GDB主要帮助你完成下面四个方面的功能:
- 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
- 可让被调试的程序在你所指定的调置的断点处停止。
- 当程序被停住时,可以检查此时你的程序中所发生的事。
- 你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
通过使用调试工具,可以摆脱过去debug时的”print大法“,让程序的运行与查错更加便利。
要求
接下来的题目,请一定一定一定保持类UNIX系统+结构化项目设计+合理的编程规范下完成。
再次强调:让出题人看懂你做的题目,端正你的态度,这个很重要