C语言实验报告

检测报告基本合格。
格式不是大问题;内容足够好。

代码问题: 1 、s2 末尾有一个f;错误 应该是“1 2 3 4 5 6 ”。
2 . s3 =NULL 不是必需的。
C++会自动清除堆内存。

如何编写数据结构? “顺序存储结构”和“顺序链接方式”容易混淆。
您实际上正在使用持久内存。

算法复杂度: O(n+m) 是正确的。
但不要只把“中性”写成“线性”。

测试目的: “理解数据结构”是模糊的。
具体一点,比如“掌握字符数组操作”。

对于教师: 将空白留空,让老师填写。

你自己看看。
还有其他问题吗?

Cs61c lab&discussion进度分享2

CS6 1 C学习经验总结: 1 、栈和堆的区别:函数中的变量都在栈上,动态分配在堆上。
小心 bad_Vector_new。
2 . 指针管理:避免NULL指针解引用,掌握ex8 _double_pointers等双指针。
3 、内存生命周期:为了防止泄漏,malloc与free搭配使用,就像vector_free一样。
4 .字符串处理:预留空间,防止像Bork.c那样越界。
5 .编译器GCC:学习gcc基础知识,了解编译过程。
6 . 调试器GDB:控制进程、设置断点、检查状态。
7 .内存检测器Valgrind:检查泄漏和非法访问,例如非自由的vector_new。
8 .编程习惯:接口分离、防御性编程、边界检查。
9 . 进度控制:平衡测试和实验室。
1 0、实用优势:直接实现动态数组,提高调试效率,学习模块化。
1 1 、改进方向:强化答辩方案,合理规划时间。
你自己掂量一下。

核心实验:实现被测程序ArrayCompare代码

老实说,实现像 ArrayCompare 这样的小程序实际上是一个很好的实践。
我记得我做这个实验的时候,StringHandle类的inputString方法是最容易出问题的。
比如朋友直接使用返回结果;但忘记处理空输入情况,并且在运行 sc.nextLine() 时崩溃。
您必须密切注意这个细节。

有趣的是ArrayHandle中的arraySort方法使用了冒泡排序。
代码很简单,但是效果确实令人印象深刻。
然后我将其更改为重构时的快速排序,时间复杂度从 O(n²) 降低到 O(n log n)。
结果当我提交的时候,老师不喜欢“不是简单地使用现成的API”。
就我个人而言,我还没有对此运行 Java 的内置排序,但我的印象是使用 Arrays.sort(array) 更让人放心。

修复BUG时,​我特别关注CompareHandle类。
mainCheck方法有一个潜在的问题:当两个数组排序后相同但初始顺序不同时,例如a={3 ,1 } b={1 ,3 },应该认为它们“排序后相同”。
但原来的代码没有考虑这一点,直接使用arrayCompare来比较排序数组。
我被困在这里,花了半个小时才意识到我需要改变逻辑。
现在想来,这种边界情况特别容易出现泄漏。

就软件开发流程而言,我更喜欢敏捷开发。
像 ArrayCompare 这样的测试实际上可以以更轻量级的方式完成。
比如先写最小可行积,比如只支持比较两个无序数组是否相同。
您可以跳过需求分析阶段,只编写代码和单元测试。
当然,如果你真的想创建一个功能丰富的ArrayCompare,那么要求几十页的文档也不为过。
我记得我之前写过一个外包项目的需求文档,老板说“太简单了”。
因此,在交付过程中进行了多次返工。
所以有需要的时候,写的详细可能不太好,因人而异。

最后,我想提出一个个人建议。
ArrayHandle中的arrayCompare方法可以进行优化。
原来的代码中,每次调用都会使用一个新的ArrayHandle,有点浪费。
最好改成静态方法或者画一个工具类。
当时我将其更改为工具类,测试用例的运行速度减半。
老师在面试中也会注意此类细节。