第6章 低级程序设计语言与伪代码
6.1 计算机操作
- 机器语言:由计算机直接使用的二进制编码指令构成的语言。
pep/8 一台虚拟机
- 虚拟机:为了模拟真实机器的重要特征而设计的假想指令。
- 指令格式:一条指令由两部分组成:8位的指令说明符和(可选的)16位的操作说明符
- 指令说明符:说明了要执行什么操作和如何解释操作数的位置。
- 操作说明符:存放的是操作数本身或者操作数的地址。
- 立即寻址模式,操作数被涂成浅灰色。直接寻址模式,后又转到数据被涂成浅灰色。
6.3 一个程序实例
6.3.1 手工模拟
6.3.2pep/8模拟程序
- 装入程序:软件用于读取机器语言并把它载入内存的部分
6.4汇编语言
- 汇编语言:一种低级语言,用助记码表示特定计算机的机器语言指令。
- 汇编器:把汇编语言程序翻译成机器代码的程序。
6.4.2 汇编器指令
- 汇编器指令:翻译程序使用的指令。
6.4.3 Hello程序的汇编语言版本
- 注释:为程序读者提供的解释性文字。
6.4.4 一个新程序
介绍一个小的求和程序
6.4.5 具有分支的程序
测试数字,得到错误结果便停止
6.4.6 具有循环的程序
6.5表达算法
- 算法:解决方案的计划或概要,或解决问题的逻辑步骤顺序。
- 伪代码:一种表达算法的语言。
6.5.1 伪代码的功能
介绍了许多特殊语句
6.5.2 执行伪代码算法
6.5.3 写伪代码算法
- 桌面算法:在纸上走查整个设计。
6.5.4 翻译伪代码算法
6.6 测试
- 测试计划:说明如何测试程序的文档。
- 代码覆盖(明箱)测试法:通过执行代码中的所有语句测试程序或子程序的测试方法。
- 数据覆盖(暗箱):把代码作为一个暗箱,基于所有可能的输入数据测试程序或子程序的测试方法。
- 测试计划实现:用测试计划中规定的测试用例验证程序是否输出了预期的结果。
第7章 问题求解与算法设计
7.1 如何解决问题
7.1.1 提出问题
例:对这个问题我了解多少? 解决方案是什么样的?
存在什么特例? 我如何知道已经找到解决办法了?
7.1.2 寻找熟悉的感觉
识别相似
7.1.3 分治法
划分问题
7.1.4 算法
- 算法:在有限的时间内用有限的数据解决问题或子问题的明确指令集合。
7.1.5 计算机问题求解过程
- 分析和说明阶段→算法开发阶段→实现阶段→维护阶段
- 分析&说明 开发&测试算法 编码&测试 使用&维护
7.1.6 方法总结
分析问题 列出主要任务 编写其余的模块(上层模块必须完整) 根据需要进行重组和改写
7.1.7 测试算法
越早发现和修正问题,解决问题就越容易
7.2 有简单参数的算法
简单(原子)变量是那些不能被分开的变量
7.2.1 带有选择的算法
7.2.2 带有循环的算法
- 计数控制循环:是用一个特殊的变量叫循环控制变量。
- 事件控制循环
- 嵌套结构:控制结构嵌入另一个控制结构的结构,又称为嵌套逻辑。
- 抽象步骤:细节仍未明确的算法步骤。
- 具体步骤:细节完全明确的算法步骤。
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 递归算法
- 递归:算法调用他本身的能力。
7.6.1 子程序语句
抽象的强力工具 允许程序的读者了解到任务已经完成并且不被细节所打扰。
7.6.2 递归阶乘
无限递归等价于无限循环
7.6.3 递归二分检索
只在第一次和最后一次用新值再次调用算法,而不是像在迭代中一样充值第一次或最后一次。
7.6.4 快速排序
排序好小数据,如果只有一个就意味着排好了。 如果数据是随机排列的,快速排序是个很好的排序方法。
7.7 几个重要思想
7.7.1 信息隐蔽
- 信息隐蔽:隐蔽模块的细节以控制对这些细节的访问的做法。
- 这样对于设计有优势,设计高层细节不能看到底层细节。
7.7.2 抽象
- 细节:复杂系统的一种模型,只包括对观察者来说必需的细节。
- 此抽象非彼抽象。
- 数据抽象:数据视图,把数据的逻辑视图和它的现实分开。
- 过程抽象:动作视图,把动作的逻辑视图和它的实现分离开。
- 控制抽象:控制结构的视图,把控制结构的逻辑视图和它的实现分离开。
- 控制结构:用于改变正常的顺序控制流的语句。使用控制结构可以改变算法的顺序控制流。
7.7.3 事物命名
每种语言都有自己够成标识符的规则。数据和动作的标识符都是抽象的一种形式。
7.7.4 测试
分为 白盒测试 基于代码本身 和 黑盒测试 基于所有可能的输入值。
浙公网安备 33010602011771号