20212306张阳

导航

 

2020—2021—1学期20212306《网络空间安全导论》第三周学习总结

学习内容:《计算机科学导论》第6,7章

第六、七章是《计算机科学概论》的第四部分——程序设计层的一个小部分。第一章《全景图》中提到过,程序设计层负责处理软件、用于实现计算的指令以及管理数据。程序有多种形式,可以在许多层面上执行,由各种语言实现。尽管程序设计问题多种多样,但是他们的目的是相同的,即解决问题。

第6章:低级程序设计语言与伪代码

6.1计算机操作

计算机是能够存储,检索,处理数据的可编程电子设备。
“存储,检索,处理数据”是计算机能够对数据执行的动作。“可编程”指改变指令(改变计算机对数据的处理)

6.2机器语言

机器语言:由计算机直接使用的二进制编码指令构成的语言。

现在大多数程序都是用高级语言编写的,然后翻译成机器语言。而每个机器语言只能执行一个非常低级的任务。

6.2.1Pep/9:一台虚拟机

每种类型的CPU都有它能理解的自己的机器语言
Pep/9有40条机器指令,程序由40条指令组合而成。
【基本特性】
Pep/9有7个寄存器,在这里重点研究三个。
①程序计数器 ,其中包含下一条即将被执行的指令的地址。
②指令寄存器,其中包含正在被执行的指令的一个副本。
③累加器,用来存储数据和运算的结果。

存储器的地址本身并不存储在存储器中,它们只是其中独立字节的名字。当涉及内存中某一个特定的字节时,实际使用它的地址替代的。

可用的位数决定了我们可以使用的内存大小。
【指令格式】
指令包括:指令说明符和操作数说明符
指令说明符(8位):执行什么操作,解释操作数的位值
操作数说明符(16位):操作数本身或其地址
指令的长度是1位或者是3位,取决于是否需要操作数说明符。
操作代码长度从4位到8位不等,3位的寻址模式说明符表示了怎样解析指令中的操作数部分。
如果寻址模式是000,那么指令的操作数说明符中存储的就是操作数。这种寻址模式叫立即寻址
如果寻址模式是001,那么操作数说明符中存储的事操作数所在的内存地址名称。这种寻址模式叫直接寻址

6.2.2Pep/9的输入和输出

原则是内存映射输入和输出

6.3一个程序实例

6.3.1Pep/9模拟器

输入目标代码(字节),注意用空格隔开,zz结束以载入存储器。
构建>装入➡装入程序
构建>执行➡运行程序

6.4汇编语言

汇编语言给每条机器语言指令分配了一个助记指令码,可以提高效率,也可以减少错误。
一个名为汇编器的程序将读取每条指令的助记码,然后翻译成为等价的机器语言。所以有多少种机器,就有多少种汇编语言和翻译程序。

6.4.1Rep/9汇编语言

汇编器指令:翻译程序使用的指令。(伪操作)

操作数用OX和十六进制表示,接下来用逗号,最后寻址模式。

6.4.2数字数据,分支,标签

分支:指出执行下一条指令的指令。

标签:对内存位置起的名字,可以将这个名字当作操作数。

6.5表达算法

算法:解决方案的计划或概要,或解决问题的逻辑步骤顺序。
伪代码:一种表达算法的语言。

在计算领域中,解决方案的计划被称为算法,从一个文字叙述形式的问题变为代码并不总是一个明确的过程。伪代码是一种语言,可以让我们以更清晰的形式表达算法。

6.5.1伪代码功能

【变量】出现在伪代码中的名字,应用的是内存中存储值的位值,反映出其角色。
【赋值】把一个值放入变量的方法
【输入/输出】write输出,read输入
叫做字符串,说明了输入/输出的内容
注意使用的单词一致。
【选择】
【重复】WHILE.IF旁括号里为布尔表达式
IF表达式为真,执行缩进代码块
表达式为假,跳过。(如果存在ELSE则执行其下面的缩进代码块)
WHILE真,执行缩进代块
假,跳到下一个不缩进的执行语句

6.5.2执行伪代码计算

6.5.3写伪代码算法

桌面检查:在纸上走查整个设计

6.5.46翻译伪代码算法

6.6测试

为了测试一个特定的程序以确定它的正确性,我们将设计和实现一个测试计划,测试计划要列出选择这套数据和数据值的原因,还要列出每套数据预期的输入是什么。
有几种测试方法可以作为测试过程的指导:代码覆盖测试法、明箱测试法、数据覆盖测试法、暗箱测试法,测试计划实现要运行测试计划中列出的所有计划用例,并记录运行结果。

测试计划:说明如何测试程序的文档。
代码覆盖(明箱)测试法:通过执行代码中的所有语句测试程序或子程序的测试方法。
数据覆盖(暗箱)测试法:把代码作为一个暗箱,基于所有可能的输入数据测试程序

第7章:问题求解与算法设计

7.1如何解决问题

理解问题➡设计方案➡执行方案➡回顾
找到信息和解决方案两者之间的联系是问题的核心

7.1.1提出问题

7.1.2寻找熟悉情况

7.1.3分治法

分治法是把大的问题分割成能够单独解决的小问题。

7.1.4算法

“最终应该得到解决方案”,在计算领域,这种“解决方案”就是算法。算法中的指令是明确的

算法:在有限的时间内用有限的数据解决问题或子问题的明确指令集合。

注意:算法是在编程语言进行编码之前要写的

7.1.5计算机问题求解过程

计算机问题求解包括四个阶段,即分析和说明阶段、算法开发阶段、实现阶段和维护阶段。

7.1.6方法总结

分析问题
列出主要任务
编写其余的模块
根据需要进行重组和改写

7.2有简单变量的算法

简单变量是那些不能被分开的变量,是存储在一个地方的一个值

7.2.1带有选择的算法

7.2.2带有循环的算法

带有循环的算法包括两种基本循环:计数控制和事件控制
1、计数控制循环
计数控制循环可以制定过程重复的次数,这个循环的机制是简单记录过程重复的次数并且在重复再次开始前检测循环是否已经结束。
这类循环有三个不同的部分,使用一个特殊的变量叫做循环控制变量。
第一部分是初始化:循环控制变量初始化为某个初始值
第二部分是测试:循环控制变量是否已经达到特定值?
第三部分是增量:循环控制变量以1递增。
while循环被称为前测试循环,因为在循环开始前就测试了,如果最初条件为假,那么将不进入循环。
2.事件控制循环
循环中重复的次数是由循环体自身内发生的事件控制的循环被称为事件控制循环。
当使用while语句来实现事件控制循环时,这一过程仍然分成三部分:事件必须初始化,事件必须被测试,事件必须更新。

计数控制循环是非常简单直接的,而事件控制循环中则不太清楚

嵌套结构:控制结构嵌入另一个控制结构的结构,又称为嵌套逻辑。
3.平方根
抽象步骤:细节仍未明确的算法步骤
具体步骤:细节完全明确的算法步骤

7.3复杂变量

7.3.1数组

数组是同构项目的有名集合,可以以通过单个项目在集合中的位值访问他们。项目在 集合中的位值叫做索引。
与数组有关的算法分为三类:搜索,排序和处理

7.4搜索算法

7.4.1顺序搜索

遵循了搜索定义,依次查找每个元素将其与我们需要的元素进行比较。如果匹配,则找到了这个元素,如果不匹配,继续寻找下一个元素。

7.4.2有序数组中的顺序搜索

如果知道数组中的项目是有序的,那么在查找时,如果我们需要的项目在数组中,到了这个数可以在数组中的位置时就可以停止查找了。

7.4.3二分搜索

二分搜索:在有序列表中查找项目的操作,通过比较操作排除大部分检索范围。

采用分治法。算法假设谣言所得数组是有序的,其中每次比较操作可以找到要找的项目或把数组减少一半。二分检索不是从头开始顺序前移,而是从数组中间开始。

7.5排序

7.5.1选择排序

这个方法虽然简单,但是有缺陷,他需要两个完整列表(数组)的空间
这个算法中只有三个抽象步骤,即确定数组是否已经排好序,找到最小元素的索引和互换两者位置。

7.5.2冒泡排序

冒泡排序是一种选择排序法,只是在查找最小值时采用了不同的方法。它从数组的最后一个元素开始,比较相邻的元素对,如果下面的元素小于上面的元素,就交换这两个元素的位置。
注意,冒泡排序法是非常慢的排序算法,还有大量的交换操作。

7.5.3插入排序

选择排序每次迭代后,一个元素被放置到它永久位置,而插入排序的每次迭代后,一个元素将被放在相对于其他元素来说适合的位置上。

7.6递归算法

当一个算法在使用他自己的时,这样的算法被称为递归算法,也就是说,在某种程度上调用自己,那么这个调用称为递归调用。

递归:算法调用它本身的能力。

每个递归算法至少有两种情况:基本情况和一般情况
基本情况:答案已知的情况
一般情况:调用自身来解决问题的更小版本的解决方案。
一般情况下解决的原始问题越来越小的版本,所以程序最终达到基本情况。
与每个递归问题相关的是如何衡量问题的大小。
所有递归解决方案的第一步都是确定尺寸系数。如果问题涉及的是数值,尺寸系数可能就是数值本身。如果问题涉及结构,那么尺寸系数可能就是结构尺寸。

7.6.1子程序语句

我们给一段代码一个名称,然后程序另一个部分的语句使用这个名称。遇到这个名称时,这个进程的其他部分将会终止,等待这个名称代码被执行。当名称代码执行完毕,将会继续处理下面的语句。命名代码出现的地方被称为调用单元
子程序的两种形式:只执行特定任务的命名代码;不仅执行任务,还返回给调用单元一个值。
第一种形式的子程序在调用单元中用作语句,第二种则作为表达式,返回的值被用来测估表达式。

7.6.2递归阶乘

N!=N * (N-1)!
Factorial(O)=1
Factorial(N)=N * Factorial(N-1)

7.6.4快速排序

如果数据是随机排列的,那么快速排序是一个很好的排序方法。

7.7几个重要思想

7.7.1信息屏蔽

信息屏蔽:隐藏模块的细节以控制对这些细节的访问的做法

7.7.2抽象

信息隐蔽是隐藏细节的做法,抽象则是隐藏细节的后果

抽象:复杂系统的一种模型,只包括对观察者来说必需的细节。

我们会看到计算领域中的各种抽象类型:

数据抽象:把数据的逻辑视图和它的实现分离开。
过程抽象:把动作的逻辑视图和它的实现分离开。
控制抽象:把控制结构的逻辑视图和它的实现分离开。
控制结构:用于改变正常的顺序控制流的语句。

7.7.3事物命名

7.7.4测试

思维导图


学习遇到的问题

第六章内容比较抽象,理解起来略有困难,第七章的递归相关知识理解不好,不太明白。在课堂上,将会认真听讲,并在课后再仔细研读教材,争取弄清楚这两部分知识。

posted on 2021-10-12 18:13  20212306张阳  阅读(104)  评论(1)    收藏  举报