[首页]
[文章]
[教程]
首页
Web开发
Windows开发
编程语言
数据库技术
移动平台
系统服务
微信
设计
布布扣
其他
数据分析
首页
>
其他
> 详细
程序设计层第6、7章读书笔记 rwl
时间:
2019-10-22 00:57:07
阅读:
260
评论:
0
收藏:
0
[点我收藏+]
程序设计层第6、7章读书笔记
第6章 低级程序设计语言与伪代码
6.1 计算机操作
计算机是能够
存储、检索和处理数据
的可编程电子设备。
要改变计算机对数据的处理,只需要改变
指令
即可。
存储、检索和处理
是计算机能够对数据执行的动作。
6.2 机器语言
计算机
真正执行
的程序设计指令是用
机器语言
编写的指令,这些指令固定在计算机的
硬盘
中。
机器语言(machine language)
:由计算机直接使用的
二进制编码指令
构成的语言。
在机器语言中,处理过程中每一个微小的步骤都
必须
被明确地编码。
目前
几乎没有
程序是用
机器语言
编写的,主要是因为编写这种程序
太费时间
。
Pep/8:一台虚拟机
虚拟机(virtual computer(machine))
:为了
模拟
真实机器地重要特征而设计的假想机器。
Pep/8
有
39
个机器语言指令。这意味着每个Pep/8程序一定是由这些指令组合而成的
序列
。
Pep/8反映的
重要特征
:
1.Pep/8的内存单元由
65536
个字节的存储空间构成。这些字节从0到65535(
十进制
)进行编号。
2.Pep/8的
字长
是两字节,或者16比特。这样向算术/逻辑单元(ALU)流入的数据或从
算术/逻辑单元
流出的数据在长度上就是
16比特
。
3.Pep/8有
7
个存储器。
累加器
:用来保存操作的数据和结果的一种特殊的
存储寄存器
。
指令格式
1.一条指令由
两部分
组成,即8位的
指令说明符
和(可选的)16位的
操作数说明符
。
2.指令说明符(指令的
第一个
字节)说明了要执行什么操作和如何解释操作数的位置。
3.操作说明符(指令的
第二和第三个
字节 )存放的是操作数本身或者操作数的地址。
注
:有些指令
没有
操作数说明符。
立即寻址
:如果寻址模式是
000
,那么指令的操作数说明符中存储的就是操作数。
直接寻址
:如果寻址模式是
001
,那么操作数说明符中存储的是操作数所在的内存地址名称。
立即寻址和直接寻址模式之间差别十分重要,因为它决定了操作中涉及的
数据存储或将要被存储的位置
。
没有操作数(要处理的数据)的指令称为
一元指令
,这些指令没有操作数说明符。也就是说,一元指令的长度是
1
个字节,而不是
3
个字节。
一些示例指令
模式说明符说明了该字要载入的
位置
,其确定了指令的操作数部分(在指令的第二和第三字节)所存储的就是将要载入的值,或是将要载入的值的
地址
。
6.3 一个程序实例
例如,在屏幕上显示“hello”。
我们
必须
用二进制构造操作说明符,因为它由
4位操作码、1位寄存器说明符和3位寻址模式说明符
构成。
我们使用
双引号
来指一组字符,如“hello”,使用
单引号
指单个字符。
6.3.1 手工模拟
需要通过
执行读取-执行周期
的步骤模拟这个程序的执行。
6.3.2 Pep/8模拟程序
要运行一个程序,需要逐字节地输入
十六进制
的代码,每个字节之间用空格隔开,以
zz
结束程序。
装入程序(loader)
:软件用于读取机器语言并把它载入内存的部分。
6.4 汇编语言
汇编语言(assembly language)
:一种低级语言,用助记码表示特定计算机的机器语言指令。
汇编器(assembler)
:把汇编语言程序翻译成机器代码的程序。
6.4.1 Pep/8汇编语言
在Pep/8汇编语言中,每个寄存器有
一个操作码
,操作数是
十六进制
的,由0x说明,寻址模式说明符由字母i或d说明。
Pep/8汇编语言提供了
助记忆码
DECI和DECO,它允许我们做十进制
输入和输出
。
6.4.2 汇编器指令
汇编器指令(assembler)
:翻译程序使用的指令。
6.4.3 Hello程序的汇编语言版本
注释(comment)
:为程序读者提供的
解释性
文字。
汇编器的输入是一个用
汇编语言
编写的程序,输出是用
机器代码
编写的程序。
6.4.4 一个新程序
6.4.5 具有分支的程序
一个将程序计数器设为下一条被执行的指令地址的
BR指令
可以改变程序计数器。
6.4.6 具有循环的程序
伪代码:这是一种可以减少对
分支
和循环的情形进行文字解释的方式。
6.5 表达算法
算法(algorithm)
:解决方案的计划或概要,或解决问题的逻辑步骤顺序。
伪代码(pseudocode)
:一种表达算法的语言。
6.5.1 伪代码的功能
虽然伪代码并没有
特定的
语法规则,但必须要表示
变量、赋值、输入/输出、选择和重复
的概念。
布尔表达式(boolean expression)
:评价为真或假的表达式。
6.5.2 执行伪代码算法
6.5.3 写伪代码算法
桌面检查(desk checking)
:在纸上走查整个设计。
6.5.4 翻译伪代码算法
由于汇编语言的范围是有限的,所以一个伪代码语句需要几个 Pep/8语句。
6.6 测试
测试计划(test plan)
:说明如何测试程序的文档。
代码覆盖(明箱)测试法(code-coverage(clear-box)testing)
:通过执行代码中的所有语句测试程序或子程序的测试方法。
数据覆盖(暗箱)测试法(data-coverage(black-box)testing)
:把代码作为一个暗箱,基于所有可能的输入数据测试程序或子程序的测试方法。
测试计划实现(test-plan implementation)
:用测试计划中规定的测试用例验证程序是否输出了预期的结果。
第7章 问题求解与算法设计
7.1 如何解决问题
重要的
引入
:1945年,George Polya所写的《如何解决它:数学方法的新观点》。
7.1.1 提出问题
Polya的“如何解决它”列表
7.1.2 寻找熟悉的情况
人类是擅长
识别
相似的情况的,在计算领域中,会看到某种问题不断地以
不同的形式
出现,一个好的程序员看到以前解决的任务或者任务的一部分(子任务)时,会直接选用已有的解决方案。
7.1.3 分治法
通常,我们会把一个大问题划分为几个
能解决
的小单元,这项原则尤其适用于
计算领域
:把大的问题分割成能够单独解决的小问题。
可以把一项任务分成若干个子任务,而子任务还可以继续划分为子任务,如此进行下去。可以反复利用
分治法
,直到每个子任务都是可以实现的为止。
7.1.4 算法
算法(algorithm)
:在有限的时间内用有限的数据解决问题或子问题的
明确指令集合
。
7.1.5 计算机问题求解过程
计算机问题求解过程有四个阶段,即
分析和说明阶段、算法开发阶段、实现阶段和维护阶段
。
上述的四个阶段是存在
交互
现象的。如下图所示,
粗线
标明了各阶段间的一般信息流,
细线
表示在发生问题时可以退回前面的阶段的路径。
7.1.6 方法总结
主要可分解为一下
四个
步骤:
1.
分析问题
2.列出主要任务
3.编写其余的模块
4.根据需要进行重组和改写
7.1.7 测试算法
数学问题求解的目标是生成问题的特定答案,因此,检查结果等价于
测试推出答案
的过程。
7.2 有简单参数的算法
简单(原子)变量
是那些不能被分开的变量,是存储在一个地方的一个值。
7.2.1 带有选择的算法
顶级(主要)模块
只是表达任务。
任何一个分支都包含
一连串
的语句。
7.2.2 带有循环的算法
计数控制循环
1.计数控制循环可以指定过程重复的
次数
,这个循环的
机制
是简单记录过程重复的次数并且在重复再次开始前检测循环是否已经结束。
2.这类循环有
三个
不同的部分,使用一个特殊的变量叫
循环控制变量
。第一部分是初始化:循环控制变量初始化为某个初始值。第二部分是测试:循环控制变量是否已经达到特定值?第三部分是增量:循环控制变量以1递增。
3.
while
循环被称为前测试循环。
4.永远不会终止的循环称为一个
无限循环
。
事件控制循环
1.
定义
:循环中重复的次数是由循环体自身内发生的事件控制的循环。
2.当使用
while
语句来实现事件控制循环时,这一过程仍分为三部分:
事件必须初始化,事件必须被测试,事件必须更新
。
计数控制循环
是非常简单直接的,它指定了循环的次数,而在
事件控制循环
中则不太清楚,并不显而易见。
嵌套结构(nested structure)
:控制结构嵌入另一个控制结构的结构,又称为
嵌套逻辑(nested logic)
。
平方根
走查平方根算法如下图
抽象步骤(abstract step)
:细节仍未明确的算法步骤。
具体步骤(concrete step)
:细节完全明确的算法步骤。
7.3 复杂变量
引用中的
字母
叫作字符串。
7.3.1 数组
数组
:
同构项目
的有名集合。
项目在集合中的位置叫
索引
。
与数组有关的算法分为三类:
搜索、排序和处理
。
7.3.2 记录
记录
:
异构项目
的有名集合。
集合可以包含
整数、实数、字符串或其他类型的数据
。
7.4 搜索算法
7.4.1 顺序搜索
7.4.2 有序数组中的顺序搜索
无序数组
有序数组
7.4.3 二分检索
二分检索(binary search)
:在有序列表中查找项目的操作,通过比较操作排除大部分检索范围。
二分检索不是从数组开头开始顺序前移,而是从
数组中间
开始。
7.5 排序
7.5.1 选择排序
选择排序算法
虽然简单,但却有缺陷,它需要两个完整列表(数组)的空间。即使不考虑内存空间,赋值操作显然也很费空间。
7.5.2 冒泡排序
冒泡排序也是一种
选择排序法
,只是在查找最小值时采用了不同的方法。它从数组的最后一个元素开始,比较相邻的元素对,如果下面的元素小于上面的元素,就交换这两个元素的位置。
冒泡排序是
非常慢
的排序方式。
7.5.3 插入排序
插入排序:将元素加入
有序部分
类似于冒泡排序中冒泡的过程。如果找到了一个位置,要插入的元素比数组中这个位置的元素小,那么就将新元素插入这个位置。
7.6 递归算法
递归算法
:当在一个算法中使用它自己时时的算法。
递归(recursion)
:算法调用它本身的
能力
。
每个递归算法至少有两种情况:
基本情况和一般情况
。
7.6.1 子程序语句
调用单元
:命名代码出现的地方。
子程序有
两种
形式,一种是只执行特定任务的命名代码,一种是不仅执行任务,还返回给调用单元一个值(值返回子程序)。
7.6.2 递归阶乘
数的阶乘的
定义
:这个数与0和它自身之间的所有数的乘积。
尺寸系数
就是要计算阶乘的数。
7.6.3 递归二分检索
递归算法必须从
非递归算法
中调用。
7.6.4 快速排序
快速排序算法的
基本思想
:对两个小列表排序比对一个大列表排序更快更容易。
其名字来自源于这种算法通常可以相对快地对
数据元素列表
进行排序,其
基本策略
是“分治法”。
如果数据是
随机排列
的,则
快速排序
是一个很好的排序方法。
7.7 几个重要思想
7.7.1 信息隐蔽
信息隐蔽(information hiding)
:隐蔽模块的细节以控制对这些细节的访问的做法。
7.7.2 抽象
抽象(abstraction)
:复杂系统的一种模型,只包括对观察者来说必需的细节。
数据抽象(data abstraction)
:把数据的逻辑视图和它的实现分离开。
过程抽象(procedural abstraction)
:把动作的逻辑视图和它的实现分离开。
控制抽象(control abstraction)
:把控制结构的逻辑视图和它的实现分离开。
控制结构(control structure)
:用于改变正常的顺序控制流的语句。
7.7.3 事物命名
给数据和过程一个名字,这些名字叫作
标识符
。
当我们要用一种程序设计语言把算法转换成计算机能够执行的程序时,可能必须修改标识符。
转换过程分
两个阶段
,首先在算法中命名数据和动作,然后把这些名字转换成符合
计算机语言规则
的标识符。
7.7.4 测试
测试
在编程的每个阶段都十分重要,有两种基本的测试分类:
白盒测试
,基于代码本身;
黑盒测试
,基于测试所有可能的输入值。
程序设计层第6、7章读书笔记 rwl
原文:https://www.cnblogs.com/rwl010306/p/11717080.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年09月23日 (328)
2021年09月24日 (313)
2021年09月17日 (191)
2021年09月15日 (369)
2021年09月16日 (411)
2021年09月13日 (439)
2021年09月11日 (398)
2021年09月12日 (393)
2021年09月10日 (160)
2021年09月08日 (222)
最新文章
更多>
2021/09/28 scripts
2022-05-27
vue自定义全局指令v-emoji限制input输入表情和特殊字符
2022-05-27
9.26学习总结
2022-05-27
vim操作
2022-05-27
深入理解计算机基础 第三章
2022-05-27
C++ string 作为形参与引用传递(转)
2022-05-27
python 加解密
2022-05-27
JavaScript-对象数组里根据id获取name,对象可能有children属性
2022-05-27
SQL语句——保持现有内容在后面增加内容
2022-05-27
virsh命令文档
2022-05-27
教程昨日排行
更多>
1.
list.reverse()
2.
Django Admin 管理工具
3.
AppML 案例模型
4.
HTML 标签列表(功能排序)
5.
HTML 颜色名
6.
HTML 语言代码
7.
jQuery 事件
8.
jEasyUI 创建分割按钮
9.
jEasyUI 创建复杂布局
10.
jEasyUI 创建简单窗口
友情链接
汇智网
PHP教程
插件网
关于我们
-
联系我们
-
留言反馈
- 联系我们:wmxa8@hotmail.com
© 2014
bubuko.com
版权所有
打开技术之扣,分享程序人生!