2022-2023-1 20221312 《计算机基础与程序设计》第七周学习总结
作业信息
班级链接:首页 - 2022-2023-1-计算机基础与程序设计 - 北京电子科技学院 - 班级博客 - 博客园 (cnblogs.com)
作业要求:2022-2023-1 《计算机基础与程序设计》教学进程 - 娄老师 - 博客园 (cnblogs.com)
作业目标:了解栈、队列、二叉树、堆等数据结构,学习DFS、BFS等算法,了解子程序的使用,复习C语言语法
作业正文:2022-2023-1 20221312 《计算机基础与程序设计》第七周学习总结 - 20221312付安旭 - 博客园 (cnblogs.com)
教材学习内容总结
了解了数组与链表的区别,学习了栈、队列的不同特点,学习树的建立,区分树与图的区别,学习DFS、BFS等算法,了解子程序的使用。复习C语言语法。
教材学习中的问题与解决过程
- 问题1:个人阅读了教材8.1中“抽象数据结构”的相关内容后,留意到抽象数据类型中应用层、逻辑层和实现层这些概念,仍不能很好的理解。
- 问题1解决方案:个人查阅网上资料后,经自己学习理解后,认为是如下意思:
- 应用层是指用户在实际处理问题中的操作,包括存储数据、查找数据等
- 逻辑层是指用指令在计算机上存储数据、查找数据等的方式
- 实现层是底层的东西,包括存储实际数据、通过程序设计使得逻辑层的行为能够便利地实现同时不必在意具体是如何实现的等作用。
- 问题2:个人阅读了教材8.7中“子程序”的相关内容,看到开头“递归”二字时,好奇递归是怎么实现的?
- 问题2解决方案:个人经查阅书籍后,在有栈的相关知识后得知,函数在多次调用自身时会生成类似栈的结构,在调用自身时正在执行的函数会保存当时的状态,通过栈的方式执行下一个函数,然后下一个函数如上同理,直到出现基本情况。基本情况执行完成后,最后执行的函数位于栈的顶侧,会先出栈,此时倒数第二个执行的函数会在它当时已保留的状态下继续执行剩余过程,直到第一个函数结束。但是递归真的很消耗时间和空间,追求速度可以考虑for循环等,这样比较快。
代码调试中的问题与解决过程
- 问题1:个人在操作高精度乘法时,总是会在高位多出不必要的0.
- 问题1解决方案:调试过程中个人意识到,函数外定义数组后,数组中某一索引一旦被创建,那该索引存储的值便会初始化为0。而在实际运行时,个人忽视了这一点,直接从最高索引开始输出,必然会出现多余的0。只要调整索引值即可。不过这个算法应该还是太复杂了,应该还可以优化。
- 问题2:个人在操作高精度加法时,总会出现数值无法对应的状况。
- 问题2解决方案:个人调试过程中注意到自己代码运行过程中,如果最高位实现了进位,那么最后个人代码中缺少了加入进位值这一点,补充上就可以。
代码托管
1.jiafa.C · zhuoxue/代码学习的路途 - 码云 - 开源中国 (gitee.com)
2.chengfa.C · zhuoxue/代码学习的路途 - 码云 - 开源中国 (gitee.com)
3.jibaogui.C · zhuoxue/代码学习的路途 - 码云 - 开源中国 (gitee.com)
4.xuehao.C · zhuoxue/代码学习的路途 - 码云 - 开源中国 (gitee.com)
5.baoshu.C · zhuoxue/代码学习的路途 - 码云 - 开源中国 (gitee.com)
6.yuwen.C · zhuoxue/代码学习的路途 - 码云 - 开源中国 (gitee.com)
这里也写了其他代码,但是测试样例不太好找。可以在码云查看备注“WEEK07”的代码。
上周考试错题总结
- 错题1:
An array is a named homogeneous collection of items in which individual items are accessed by an index.正确答案: 正确 个人作答: 错误错选原因:个人基础不牢。数组在查找元素时就是通过索引值去查找的。
-
The general case of a recursive solution determines when the recursion stops.正确答案: 错误 个人作答: 正确错选原因:个人基础不牢。递归结束的情况时基本情况,不是一般情况。
-
An algorithm is a calculation that determines how long it will take to solve a problem.正确答案: 错误 个人作答: 正确错选原因:算法不只是和时间相关,虽然这是最重要的一部分。算法也和空间等方面相关。
之前有和一位老同学沟通。他听到我在学C语言,他劝我学C++吧,快把C语言扔到垃圾桶里面。
我觉得他言重了,C语言应该和C++差不多的。
后来在做题时,他告诉我用vector会比较简便。
我:那是什么?
后来我就去了解了一下STL库,然后就被降维打击了。
这个STL库里面有队列、栈、堆等容器,可以实现链表,也能根据字典序对数组进行全排列。
这可真是太棒了。C++在容器上确实简便不少。
不过C++最打动我的还是输入输出流,cin >> x, cout << x,就像发气功波一样,太帅了(但是比scanf和printf慢)。
不过STL库虽然简便,但是还是了解这些容器的原理并在C语言上实现比较好,不然只用C++的STL库是不能更高提升自己的理解水平的。
学习进度条
代码行数(新增/累计) | 博客量(新增/累计) | 学习时间(新增/累计) | 重要成长 | |
第一周 | 0/0 | 4/4 | 12/12 | |
第二周 | 230/230 | 2/6 | 30/42 | |
第三周 | 160/390 | 5/11 | 18/60 | |
第四周 | 200/590 | 2/13 | 14/74 | |
第五周 | 180/770 | 2/15 | 10/84 | |
第六周 | 700/1470 | 5/20 | 20/104 | |
第七周 | 520/1990 | 1/21 | 17/121 |
参考资料
1.计算机科学概论(原书第7版) (豆瓣) (douban.com)