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

6.1 计算机操作

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

pep/8 一台虚拟机

  1. 虚拟机:为了模拟真实机器的重要特征而设计的假想指令。
  2. 指令格式:一条指令由两部分组成:8位的指令说明符和(可选的)16位的操作说明符
  3. 指令说明符:说明了要执行什么操作和如何解释操作数的位置。
  4. 操作说明符:存放的是操作数本身或者操作数的地址。
  5. 立即寻址模式,操作数被涂成浅灰色。直接寻址模式,后又转到数据被涂成浅灰色。

6.3 一个程序实例

6.3.1 手工模拟

6.3.2pep/8模拟程序

  1. 装入程序:软件用于读取机器语言并把它载入内存的部分

6.4汇编语言

  1. 汇编语言:一种低级语言,用助记码表示特定计算机的机器语言指令。
  2. 汇编器:把汇编语言程序翻译成机器代码的程序。

6.4.2 汇编器指令

  1. 汇编器指令:翻译程序使用的指令。

6.4.3 Hello程序的汇编语言版本

  1. 注释:为程序读者提供的解释性文字。

6.4.4 一个新程序

介绍一个小的求和程序

6.4.5 具有分支的程序

测试数字,得到错误结果便停止

6.4.6 具有循环的程序

6.5表达算法

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

6.5.1 伪代码的功能

介绍了许多特殊语句

6.5.2 执行伪代码算法

6.5.3 写伪代码算法

  1. 桌面算法:在纸上走查整个设计。

6.5.4 翻译伪代码算法

6.6 测试

  1. 测试计划:说明如何测试程序的文档。
  2. 代码覆盖(明箱)测试法:通过执行代码中的所有语句测试程序或子程序的测试方法。
  3. 数据覆盖(暗箱):把代码作为一个暗箱,基于所有可能的输入数据测试程序或子程序的测试方法。
  4. 测试计划实现:用测试计划中规定的测试用例验证程序是否输出了预期的结果。

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

7.1 如何解决问题

7.1.1 提出问题

例:对这个问题我了解多少? 解决方案是什么样的?
存在什么特例? 我如何知道已经找到解决办法了?

7.1.2 寻找熟悉的感觉

识别相似

7.1.3 分治法

划分问题

7.1.4 算法

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

7.1.5 计算机问题求解过程

  1. 分析和说明阶段→算法开发阶段→实现阶段→维护阶段
  2. 分析&说明 开发&测试算法 编码&测试 使用&维护

7.1.6 方法总结

分析问题 列出主要任务 编写其余的模块(上层模块必须完整) 根据需要进行重组和改写

7.1.7 测试算法

越早发现和修正问题,解决问题就越容易

7.2 有简单参数的算法

简单(原子)变量是那些不能被分开的变量

7.2.1 带有选择的算法

7.2.2 带有循环的算法

  1. 计数控制循环:是用一个特殊的变量叫循环控制变量
  2. 事件控制循环
  3. 嵌套结构:控制结构嵌入另一个控制结构的结构,又称为嵌套逻辑。
  4. 抽象步骤:细节仍未明确的算法步骤。
  5. 具体步骤:细节完全明确的算法步骤。

7.3 复杂变量

7.3.1 数组

与其有关的算法:搜索、排序和处理。

7.3.2 记录

7.4 搜索算法

7.4.1 顺序搜索

7.4.2 有序数组中的顺序搜索

7.4.3二分检索

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

7.5排序

排序算法

7.5.1 选择排序

不断重新确定新的第一个

7.5.2 冒泡排序

不断进行元素间的交换使得最小的“冒泡”

7.5.3 插入排序

如果新元素小,就插入,自我交换

7.6 递归算法

  1. 递归:算法调用他本身的能力。

7.6.1 子程序语句

抽象的强力工具 允许程序的读者了解到任务已经完成并且不被细节所打扰。

7.6.2 递归阶乘

无限递归等价于无限循环

7.6.3 递归二分检索

只在第一次和最后一次用新值再次调用算法,而不是像在迭代中一样充值第一次或最后一次。

7.6.4 快速排序

排序好小数据,如果只有一个就意味着排好了。 如果数据是随机排列的,快速排序是个很好的排序方法。

7.7 几个重要思想

7.7.1 信息隐蔽

  1. 信息隐蔽:隐蔽模块的细节以控制对这些细节的访问的做法。
  2. 这样对于设计有优势,设计高层细节不能看到底层细节。

7.7.2 抽象

  1. 细节:复杂系统的一种模型,只包括对观察者来说必需的细节。
  2. 此抽象非彼抽象。
  3. 数据抽象:数据视图,把数据的逻辑视图和它的现实分开。
  4. 过程抽象:动作视图,把动作的逻辑视图和它的实现分离开。
  5. 控制抽象:控制结构的视图,把控制结构的逻辑视图和它的实现分离开。
  6. 控制结构:用于改变正常的顺序控制流的语句。使用控制结构可以改变算法的顺序控制流。

7.7.3 事物命名

每种语言都有自己够成标识符的规则。数据和动作的标识符都是抽象的一种形式。

7.7.4 测试

分为 白盒测试 基于代码本身 和 黑盒测试 基于所有可能的输入值。

Posted on 2020-10-28 09:27  20202403孟凡斌  阅读(82)  评论(0)    收藏  举报