2022-2023-1 20221312 《计算机基础与程序设计》课程总结

2022-2023-1 20221312《计算机基础与程序设计》课程总结

作业信息

这个作业属于哪个课程 2022-2023-1-计算机基础与程序设计
这个作业要求在哪里 2022-2023-1计算机基础与程序设计第十五周作业
这个作业的目标 <课程总结>
作业正文 2022-2023-1 20221312 《计算机基础与程序设计》课程总结

每周作业链接汇总

第一周作业
内容:通览《计算机科学概论》,每章提出问题。

第二周作业
内容:了解计算系统的发展和计算硬件与软件的更新,了解编程及相关概念

第三周作业
内容:学习数据分类,了解进制转化,了解了数据储存和压缩,巩固了基础C语言语法

第四周作业
内容:了解门,学习逻辑运算,了解了冯·诺伊曼结构,尝试汇编语言编程,巩固了C语言语法,尝试代码调试。

第五周作业
内容:简单了解了汇编,了解伪代码写法,巩固C语言语法,了解白盒与黑盒测试。

第六周作业
内容:学习数组中查找数据的方式,了解了各种代码对应的结构,巩固C语言语法。

第七周作业
内容:学习数组与链表的,学习了栈、队列等数据结构,学习建树,学习DFS、BFS等算法,了解子程序的使用,复习C语言语法。

第八周作业
内容:学习面向对象范式的大致过程,了解编译器和解释器的区别,了解命令式范型和声明式范型的区别,学习各种高级程序设计语言具体的功能性,学习面向对象语言具体的功能性以及过程设计与面向对象设计的区别,复习了C语言语法。

第九周作业
内容:学习了操作系统中,了解计算机在内存管理、进程管理和CPU调度的多种方式,学习文件系统,学习了目录的作用和磁盘调度的多种方式,复习C语言语法。

第十周作业
内容:学习信息系统的概念,了解数据库与SQL的功能,了解人工智能与专家系统,学习人工神经网络,学习模拟与离散事件,学习天气预报与气象模型,了解图形图像,复习C语言语法。

第十一周作业
内容:学习计算机网络,了解网络拓扑,了解云计算的方式与用途,学习网络安全,学习Web,了解多种编写网页的工具或语言,了解XML的功能,复习C语言语法。

第十二周作业
内容:学习了指针与数组的运用,加强了对二者间关系的认识,学习了部分内存分配函数的使用。

第十三周作业
内容:学习结构体,了解元素构成与地址分配,学习部分文件操作。

第十四周作业
内容:学习C语言常见文件操作,掌握文件的打开与关闭、写入与读出以及相关格式化和数据块操作等,了解二进制文件和文本文件的格式和不同。

整体评价一下第1周作业中自己的问题是不是抓住了学习重点

目前来看显然没有抓住学习重点,提问的部分问题与计算机自身关系不大的。如:“为什么计算机的预言中有许多是未实现或错误的?”,这个学习问题与计算机的科学内部其实关系不大。
另外,个人太专注于某个小知识点的概念细究,而忽视了知识点之间的相互关系,这导致我提出的问题很零散,没有系统的概念,解答起来也是东一榔头西一榔头。
所以在下次提问时,我会注意学习重点的。

解答第1周提出的问题

第一章

问题1:连网是如何实现信息传递的?

解答:绝大多数数据可以由二进制数据0、1进行表示。联网后通过电磁波等信息的变化传递,可以将0、1等数据传入,再通过分析得出想要的信息。

问题2:为什么计算机的预言中有许多是未实现或错误的?

解答:因为人很难预知未来。不只是计算机,其他地方的预言也有很多错误

第二章

问题1:二进制、八进制及十六进制的转换规则原理是什么?

解答:由于八、十六分别是二的三次方、四次方,那么可以把二进制下的三位、四位分别看作个八进制、十六进制数进行转换。

问题2:十进制数转换为其他数制的数的原理是什么?

解答:对于某种X进制的数A,我们可以写成A=aXn+b*X(n-1)+... ...+zX^1.

那么第一次短除取余后,由于高位数被除完后仍是X的倍数,只有最后一位会除完后不是X的倍数而被剩下来(即z),那么就是该数的末尾。同理,多次短除取余后便可以得到X进制的各位数,倒序排列后便是结果。

第三章

问题1:如何解决溢出?

解答:数据的保存方式有多种,溢出时可以把该数据当成另一个种类,比如可以把一个数字当作一个字符串进行储存,这样就不太可能溢出。

问题2:目前计算机压缩文本最常用方法是什么,为什么是这种方法?

解答:这个问题仍不能一概而论,不同的文本、不同的计算机采取的压缩文本方式是不同的。

第四章

问题1:全加器的结果是如何表示?

解答:全加器本身是通过某一位的异或门、或门以及与门运算来表示当前位以及上一位进位的运算结果,并提供该位的进位值。

问题2:为什么存储路电器使x和y总是互补的?

解答:由于X和Y是通过与非门相互锁住的,而其中的S和R在存储时均为1,那么如果其中一方是0, 那么另一方必然是1;而如果其中一方是1, 那么另一方必然是0。

第五章

问题1:可编址性与可寻址能力的关系是什么?

解答:可编址性是内存中可编制位置存储的位数,而寻址能力通俗讲是寻找地址的能力,二者间的关系并不大,是两个不同的方面。

问题2:为何访问寄存器比访问内存快?

解答:有下面三个原因:
1.寄存器在CPU中,距离较近;而内存距离寄存器较远。
2.寄存器容量小,可以使用高性能高效率的技术;而内存容量相对大得多,不适宜应用高耗技术。
3.寄存器只有获得位和读取位两项工作,而内存的工作要多得多。

第六章

问题1:Pep/9与VirtueBox的区别包括什么?

解答:在个人实践体会中,Pep/9虚拟机是只有一个软件只有一台,功能简单,允许使用汇编语言和机器语言,好像更还原了计算机的运行本质;而VirtueBox可以提供多种系统,如Window、 Linux等,一个软件可以提供多台虚拟机,好像更接近于现在常见的计算机。

问题2:伪代码与代码的区别是什么?

解答:伪代码是人写出来的接近于编程语言的语言,几乎不能被编译器翻译,但是可以允许使用不同语言的程序员了解算法的实现过程;而代码则是人写出来被编译器等工具用来编译成程序的,不同语言的代码规则不同。
使用伪代码可以方便不同语言的程序员共同编写一个项目,应掌握适量的伪代码写作能力。

第七章

问题1:快速排序的过程是什么?

解答:快速排序通过选取待排序数组(也可以不是数组)内一个元素的值,将数组内所有元素以该元素的值为标准划分为两部分,不同的快速排序的标准不同。划分为两部分后,再对两部分进行如上的相同操作,再对两部分的两部分进行操作,以此类推,直到每个部分只有一个元素。
这是递归的算法,时间复杂度平均为O(nlogn),不过偶尔也会退化到O(n^2).具体看数组的排列情况了。

问题2:为什么低层细节容易发生变化?

解答:因为在实际运行中,低层细节的实际运行结果可能与程序员的预期不符,需要对低层细节的运行逻辑进行更改,而且可能更改多次,所以容易发生变化。
封装的好处便在于隐藏了低层细节,这样在修改程序时只需更改所对应的功能区,而不是全体修改。

第八章

问题1:列表、栈等不同抽象复杂结构的具体应用场合?

解答:列表的查找与修改相对比较简便,栈、队列对应的应用场合是需要特殊的数据应用逻辑,比如可以用栈实现简单的四则运算、队列实现出入等。树常见于邻接表的建图。

问题2:子程序和子算法在概念上的区分是什么?

解答:子程序是程序,而子算法是算法。程序中包含了特定问题的算法,子程序中有相对应的子算法。

第九章

问题1:编译器和解释器是的功能是如何实现的?

解答:编译器将高级程序中代码语句转化为机器代码执行,解释器将高级程序转化为机器代码执行,二者的运行方式有差异。

问题2:封装是如何实现信息隐藏的?

解答:封装将一个子功能闭合起来,提供对应的接口,让对应的数据在子程序中进行运算。封装内部不动用其他外部信息,仅使用借口提供的数据。

第十章

问题1:不同操作系统的更本质区别是什么?

解答:不同的操作系统对CPU等硬件资源的使用策略是不同的,并且,不同操作系统内部运行逻辑结构不同,由此导致的不同操作系统对于内存资源分配、CPU调度等方法也通常不同。

问题2:不同管理技术和不同CPU调度算法的具体应用有哪些?

解答:最先匹配、最佳匹配常用于固定分区,最差匹配常用于动态分区。
先到先服务最容易实现,最短作业优先效率最高,轮询法最公平、应用最广泛。

第十一章

问题1:文件保护是如何实现的?

解答:操作系统通过Owner、 Group、 World的分类,授予不同用户的不同访问权限。同时,管理员用户等也可以进行相关设置,对不同用户的不同权限进行细分。

问题2:如今最为流行的磁盘调度算法是什么?

解答:是这五种:
1.先来先服务算法(FCFS);
2.最短寻道时间优先算法(SSTF);
3.扫描算法(SCAN);
4.循环扫描算法(CSCAN)。
5.N-Step-SCAN和FSCAN调度算法。
不过这五种算法各有各的适用场合,不能说谁比谁有绝对的优势。

第十二章

问题1:表格的函数运算是怎么实现的?

解答:个人认为这种函数运算类似于程序中用特定的代码实现计算,不过接口是对应的单元格。

问题2:大数据是怎么收集运用的?

解答:这个貌似不能够一概而论,不同程序不同设计者收集大数据的方式不同,运用大数据的结果也是不同的。希望大数据不会泄露隐私,也不会导致偏见的俞演愈深。

第十三章

问题1:计算机在实际生活中是怎么区别二义性的?

解答:计算机处理具有二义性的文字时,会结合相关上下文的语法,与自身算法内部最接近的语法结构相匹配,来最大可能减少歧义的出现。
解决这类问题最好的办法是不使用二义性词语。

问题2:计算机如何在与人类对话中听懂人类意思?

解答:计算机的“听懂”事实上也只是计算机通过内部算法逻辑,分析人类语言中可能表达的意思,并用相关知识进行对话的功能。计算机目前不能做到真正的“思考”,只是勉强能“听懂”罢了。

第十四章

问题1:游戏中如何实现多人联机?

解答:游戏通过高速的信息传递,使得不同玩家之间的动作交互能以最快的速度表现在终端上。联机事实上是需要联网的单机游戏,我们在游戏上看到的他人行动是其他人的复制罢了。

问题2:游戏中如何设计其中的物理规则?

解答:游戏开发者可以通过Unity等工具,对自己要构建的物理世界的规律进行调整,不同游戏的物理规则不同,不同编辑工具的物理规则编辑方式也是不同的。使用专门的游戏编辑工具,能使得物理规则编辑起来更加容易。

第十五章

问题1:个人路由器是否会因他人路由器需要而传递信息?

解答:是可以的。常见的P2P传输协议便借助了个人路由器来传输信息。

问题2:防火墙如何防止外来入侵?

解答:防火墙通过设计随机序列序号来防止外来用户入侵,也可以通过设置一定时间内访问的目标端口数量有限来防止入侵,除此之外也有其他手段来防御不同种类的攻击。

解答:

第十六章

问题1:是否有Java之外嵌入HTML文档运行的程序?

解答:不只有Java,还有PHP等编程语言也可以应用于HTML中。

问题2:社交网络是如何分别保留大量个人信息的?

解答:社交网络通过数据库等工具来储存每个用户的信息,不过仍然有泄露的潜在威胁。

第十七章

问题1:恶意代码或恶意软件如何偷取个人信息?

解答:恶意代码会编译成恶意程序,而恶意程序通过自身的功能来获取超模权限,访问用户的隐私数据,进而偷取个人信息。

问题2:个人账户密码能否做到绝对安全?

解答:个人账户密码不能做到绝对安全,在互联网上的工作生活总会留下痕迹,不管是不是密码等机密资料,只能想办法增强密码的复杂度来防止泄露前便被破解了。

第十八章

问题1:为什么Linux是最著名的开源项目?

解答:Hohndel认为要想取得成功必须具备几个基本的前提条件:创新、远见、重点和持久性,而成功的关键是要把它们相结合。Linux便在Hohndel这样的理念被开发出来,这是它著名的原因之一。而Linux开源本身便于不同程序员之间的交流,同时Linux的操作方法适合大部分程序员操作,并且开源的项目的反馈比较明显,这也有助于它的成名。

问题2:图灵机怎么证明停机问题没有解决方案?

解答:这个问题好像挺哲学的。个人查阅资料,了解到可能的解释:
我们面对的世界是在不断变化的,而某一台图灵机被创建后它所解决的问题是有限的。无法用有限的集合去判断无限的集合,因为停机问题的原因是多种多样的。
以上是个人粗浅的理解,若有错误希望指出。

加分项目与经验

个人在学期初时便经过初中同学介绍了算法的概念,开始系统地学习算法,因此个人在平常学校小测时总是十分轻松,因为不太需要思考。

经验:在学习编程语言时,不必太过细致地研究课本,因为课本上的东西是课本的,不是自己的。只有自己亲身实践,才能更好了解不同语法不同函数的功能。
在这方面,个人还是更推荐校外也可访问的OJ平台,因为OJ平台对于题目的分类并不细致,而在实际应用中也极少有人告诉我们要用什么样的算法与数据结构来解决问题,只有在不告诉你用这种方法解决问题的前提下用这种方法解决,才能说是真正掌握了这种方法。校外的OJ平台也有较多对于算法与数据结构的考察,这方面还是推荐各位去解一解这些看上去很简单的题目,因为可能对于同一个问题,解决的方法是不同的,解决问题的时间复杂度、空间复杂度也是不同的,解出来后对于代码的理解能力更高超。

扣分项目与教训

云班课中有一个师生关系的作业活动,个人误判了活动结束时间,导致作业未能提交。

教训:收到消息时一定要注意活动的结束时间,不然即便有心也无力作答。

课程收获与不足

收获:
1.个人的C语言编程能力有了基础的提高,至少能解决一些比较简单的运算问题。
2.个人初步入门了算法,感受到了算法的奇妙乐趣,打算在未来继续学习研究算法。
3.个人对于计算机的数据储存、运作逻辑、以及硬件构成中有了初步的认识。

不足:
1.对于计算机本身的逻辑运算结构还是了解不够深入,只了解了皮毛的皮毛。
2.计算机科学的基础知识不足,记忆能力差,未能较好掌握基础知识。
3.对于C语言运行的更深层逻辑还是不够了解,只能够通过高级语言写程序。

给开学初的你和学弟学妹们的学习建议

由于课程改革,可能大一既要学科学概论,也要学C语言基础吧。那我基于这方面给出建议:

1.对于《计算机科学概论》,书名里都写了《概论》,因此细节不会具体表现在书里,只有一个大概的逻辑。因此,对于课本上具体未提及的,如果感兴趣,便可以自己查阅;如果不感兴趣,可以跳过,因为未来的课程估计还会相关设计内容。学习《计算机科学概论》,更重要的是掌握计算机的整体架构、整体运行内涵,以及重要的计算机内部结构(如CPU)和算法(如CPU调度算法),形成一个对于计算机更系统的认知,这样在未来学习更加深入的内容时便能将不同内容相互交织起来,让自己对于知识的理解更加深刻。

2.对于C语言,C语言本身的语法逻辑其实比较好理解,而出现概念理解不清的原因主要还是缺少实践。C语言本身是实践学科,在实践中才能更好掌握C语言的语法与函数功能。没事的时候要多敲代码,多上手调试。

3.我们这届信息安全的学生在大一真的蛮轻松的。如果你也蛮轻松并且想在编程上更进一步,推荐尽早接触一下数据结构与算法。当大体掌握一门语言都语法后,其他类似范式的语言其实也比较好掌握,甚至一些不同范式的语言也可以理解。因此,语法本身重要,但语法是会变化的,不能预知下一秒什么语言更实用。而算法,不会因为语言的变化而过时,只会因为要解决的问题不同而被变化。数据结构,更不会因为语言的变换而变化,永远具有对应的价值。这里个人给一个题目,看看各位学弟学妹在学习C语言后能用什么样的结构完成。

有N个人围成一圈,第m个人的序号是m.从第1个人开始顺序报号1、2、3、4、......, 凡报到3的倍数的人出圈。请计算最后留在圈子里的人的序号。
(N <= 10000).

不妨想想队列这种数据结构哦。

问卷调查

问 :你平均每周投入到本课程多长时间?

答:每周的时间总体是越来越长,从刚开始的几周平均十几个小时,到现在的每周二十个小时左右。但个人很高兴学习时间会越来越长。

问:每周的学习效率有提高吗?

答:感觉是在逐渐提高的,因为个人逐渐明白了学习计算机科学、学习编程语言的方法是什么。

问:学习效果自己满意吗?

答:其实还算比较满意。个人有了初步的C语言基础,算法处于入门阶段,学习了不少数据结构,对计算机的整体结构有了一定的了解。
美中不足的就是《计算机科学概论》的基础知识记忆背诵的不是很好吧,因为个人确实把时间更多的投入到了编程上。

问:课程结束后会继续一周至少一篇博客吗?

答:既然老师答应每周写博客便会给一本“博客书”,那我会尽己所能完成每周博客的,有利可图就会去做的嘛。
不过不只是有利可图啦,其实“博客书”还挺有纪念意义的。

问:你觉得这门课老师应该继续做哪一件事情?

答:继续以亲身实践进行终端代码操作,更有震撼感。

问: 你觉得这门课老师应该停止做哪一件事情?

答:让多名不同的学生助教批改同一类作业。不同学生助教的想法是不同的,没有固定标准的话我们很难保持固定风格的博客写作能得到稳定的分数。

问:你觉得这门课老师应该开始做什么新的事情?

答:让学生更好了解到计算机科学技术包含哪些方面的知识,并告知他们这些知识的应用,提前找到自己的兴趣点,方便深入研究。

本博客链接

2022-2023-1 20221312 《计算机基础与程序设计》课程总结

posted @ 2022-12-11 22:59  20221312付安旭  阅读(285)  评论(0编辑  收藏  举报