第六章 低级程序设计语言与伪代码
6.1 计算机操作
计算机是能够存储、检索和处理数据的可编程电子设备。存储、检索和处理是计算机能够对数据执行的动作。
6.2 机器语言
计算机真正执行的程序设计指令是用机器语言编写的指令。大多数程序是用高级语言编写的,然后翻译成机器语言。
6.2.1 Pep/p:一台虚拟机
机器代码因机器的不同而不同,每种类型的CPU都有它能理解的自己的机器语言。
虚拟机:为了模拟真实机器的重要特征而设计的假想机器。
1.Pep/9的基本特性
Pep/9有七个寄存器,书中重点研究三个:
程序计数器(PC):其中包含下一条即将被执行的指令的地址。
指令寄存器(IR):其中包含正在本质性的指令的一个副本。
累加器(A):用来存储数据和运算的结果。
2.指令格式
指令格式:一条指令由两部分构成,即8位的指令说明符和16位的操作数说明符,因此Pep/9的指令在长度上是1字节还是3字节,取决于是否需要用操作说明符。
3.一些示例指令
6.2.2 Pep/9的输入/输出
(I/O)遵循内存映射I/O原则,与主存中特定、固定的地址相联系。使用ASCII码表示字符。
6.3 一个程序实例
6.4 汇编语言
编语言:一种低级语言,用助记码表示特定计算机的机器语言指令。
汇编器:把汇编语言程序翻译成机器代码的程序。
汇编器指令:翻译程序使用的指令。
使用Pep/9汇编语言,可以使用额外的用来展示输入和输出(I/O)数字和整个字符串的指令。这些指令实际上是由操作系统实现的。
分支:指出执行下一条指令的指令。
程序在汇编命令和指令中使用了标签,这些标签被放在每一行的开头,之后跟着一个冒号。一旦被标上标签,该位置的数据或指令就可以通过标签进行引用,而不是引用它具体的内存地址。这也就使得程序更容易读。
标签:对内存位置起的名字,可以将这个名字当作操作数。
6.5 表达算法
算法:解决方案的计划或概要,或解决问题的逻辑步骤顺序。
伪代码:一种表达算法的语言。
伪代码的功能:变量、赋值、输入/输出、选择、重复。
布尔表达式:评价为真或假的表达式。
6.6 测试
测试计划就是一个文档,说明了要全面测试程序需要运行的次数以及运行程序使用的数据。每套输入的数据值称为测试用例。
代码覆盖测试法:通过执行代码中的所有语句测试程序或子程序的测试方法。
数据覆盖测试法:把代码作为一个暗箱,基于所有可能的输入数据测试程序或子程序的测试方法。
测试结果实现:用测试计划中规定的测试用例验证程序是否输出了预期的结果。
问题求解与算法设计
7.1 如何解决问题
1.提出问题。
2.寻找熟悉的情况。
3.分治法。
4.算法。
5.计算机问题求解过程。
6.方法总结。
7.测试算法。
7.2有简单变量的算法
带有选择的算法
带有循环的算法
1.计数循环算法
2.事件控制循环
3.平方根
嵌套结构:控制结构另一个结构的结构,又称为嵌套逻辑。
抽象步骤:细节仍未明确的算法步骤。
具体步骤:细节完全明确的算法步骤。
7.3 复杂变量
描述两种把数据收集到一起、给这个集合命名并访问其中单独的值或者作为一个集合来访问它的方法。
数组:是同构项目的有名集合,可以通过单个项目在集合中的位置访问它们。项目在集合中的位置叫做索引。
与数组相关的算法分为三类:搜索、排序和处理。
记录:是异构项目的有名集合,可以通过名字单独访问其中的项目。异构,指集合中的元素可以不必相同。
7.4 搜索算法
顺序搜索
二分检索
二分检索算法假设要检索的数组是有序的,其中每次比较操作可以找到要找的项目或把数组减少一半。
二分检索:在有序列表中查找项目的操作,通过比较操作排除大部分检索范围。
排序
1.选择排序
2.冒泡排序
3.插入排序
7.6 递归算法
当在一个算法使用它自己时,这样的算法被称为递归算法。
递归:算法调用他本身的能力。
子程序语句
递归阶乘
递归二分检索
快速排序
7.7 几个重要思想
信息隐蔽:隐蔽模块的细节以控制对这些细节的访问的做法。
抽象:复杂系统的一种模型,只包括对观察者来说的必须细节。
抽象是人们用来处理复杂事务的强有力的工具。
数据抽象:把数据的逻辑视图和它的现实分离开。
过程抽象:把动作的逻辑视图和它的现实分离开。
控制抽象:把控制结构的逻辑视图和它的现实分离开。
控制结构:用于改变正常的顺序控制流的语句。