寒假作业三
github链接
提交日志截图
文件读写学习过程与心得
c语言课本的第十章详细的介绍了c语言中如何对文件进行输入与输出,学习课本后我总结了一些要点:
- stdio.h头文件中有对FILE结构体类型的声明,在程序中可以直接用FILE类型名定义变量,如FILE f1;,定义了一个结构体变量f1用来存放一个文件的有关信息,FILE * fp;定义一个指向文件类数据的指针变量。
- fopen(“文件名”,“使用文件方式”);其返回值为指向文件的指针(文件信息区的起始地址),其中比较重要的使用文件方式有“r”只读,“w”只写,“a”追加。
- fclose(文件指针);关闭文件使文件指针不再指向文件。
- 格式化的方式读写文件:
- fprintf(文件指针,格式控制符,输出列表);
- fscanf(文件指针,格式控制符,输入列表);
学习完这些完成本次作业的文件输入输出绰绰有余。
git commit信息的学习心得和体会
我觉得commit信息主要先掌握
- type用来表面用途/说明意图,主要有:
- feat:新功能
- fix:修补bug
- docs:文档
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- subject是对本次commit目的的简短描述。
编码历程
这次题目是上一次题目的升级版,于是我按照上次作业的思路开始构建框架,我先构造了两个结构体类型分别代表指令和电梯,这次学习过文件的输入输出后,我运用fprintf函数构造了一个专门用来输出的Print函数,方便在其他功能中的调用,再按照老师提示构造了一个taximode函数,这个函数的功能是用来实现电梯接到一个乘客就直接把乘客送到目的地,途中不再响应其他乘客的需求也就是顺序执行指令,这里出现了一个bug,在该函数中我调用了Print函数,Print函数需要一个文件指针作为参数,但是我没有再taximode中定义,而是再main函数中定义,我将mian中的定义移到taximode函数中,完成了bug的修复。
我做了一个在时间上的优化将指令按照时间排序,构造了一个Exchange函数来实现这一功能,用冒泡排序后进行了测试,然后我又进行了对重复指令过滤的优化,相同的指令如果直接使用taximode的话会被多次处理,我设计了一个对比函数用来实现对两条指令的对比,先无条件执行排序后的第一条指令,再用循环和条件语句来一直判断该指令和后一条指令是否相同,相同则不处理后一条,不相同则处理后一条,并进行了测试,测试是出现了一个bug,通过debug,我发现我跳了一次循环,我发现我忘记了continue完,进入到下一循环for时,会先i++完再进入循环体,自己再循环体中加了i++,导致了会跳过循环的bug,修复后又进行了测试。我又想了想同一层上同一层下的优化问题,按照现实生活中的情况,他还是要进入电梯按一下的,电梯也是会停留一秒的,所以问题不是很大。
关于busmode和进一步的优化,我想了一些但是和我的程序的切合度不是很高就被我推翻了,到现在还是想不出一个很好的算法来解决这个电梯难题。
||||||||||||||
|:--|:--|:--|
|代码行数|bug数|耗时|
|113|6|17h|
相关测试与运行结果
- 对排序函数的测试
测试该函数是否使命令按照时间顺序执行。
第一组为五条按时间顺序的命令,第二组为前五条打乱过后的数据,输出结果比较,发现完全相同,排序函数的功能正常。
- 对过滤重复命令这一功能进行测试
测试是否能够成功过滤相同的命令。
两次测试后重复的部分都被过滤了,过滤功能正常。