logo资料库

计算机科学概论(第11版)- 问题与练习答案 2.pdf

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
问题与练习答案 11 3. 使用口令可以保护数据(当然也包括信息)。加密的使用可以保护信息。 4. 对于公钥加密系统,知道报文如何被加密并不能够对报文进行解密。 5. 这些问题是国际化的,因此不隶属于某一个政府的法律。此外,法律补救只是给那些受伤害 人一些帮助,并不能真正防止伤害。 第 5 章 5.1 节 1. 进程是执行算法的活动。程序是算法的表示。 2. 在绪论里,我们引证了演奏音乐、操作洗衣机、构造模型、表演魔术以及欧几里得算法等算法。 在日常生活中遇到的许多“算法”按照我们的正式定义都不能算是算法。本书引证的长除算 法就是一个例子。另一个例子是时钟执行的算法:它的指针日复一日地走动,奏鸣钟声。 3. 非正式定义没有要求步骤是有序的和无歧义的,它只在要求里暗示,步骤是可执行的且能终 止的。 4. 这里存在两点。一是这些指令定义了一个不可终止的过程。但事实上,这个过程最终到达这 样的状态:你的口袋里没有硬币。实际上,这可能是个初始状态。二是算法是有歧义的。这 个算法正像所表示的,它没有告诉我们在这种情况下该怎么做。 5.2 节 1. 以物质的组成为例。在一个层面上,原语被认为是分子,而分子实际是由原子组成的,原子 又是由电子、质子和中子组成的。今天,我们知道,甚至这些“原语”也是合成物。 2. 一个过程被正确地构建以后,它就可以用作较大程序结构的构件块,不必再重新考虑该过程 的内部构成。 3. X ← 较大的输入; Y ← 较小的输入; while(Y不是0) do (Remainder ← X被Y除后的余数; X ← Y; Y ← Remainder); GCD ← X 4. 光的所有其他颜色都可由红、蓝和绿组合产生。所以,电视机的显像管被设计成能产生这三 种基色。 5.3 节 1. a. if (n = 1 or n=2) then (答案是含有一个值n的列表) else (n除以3,得到商q和余数r. if (r=0) then (答案是含有q个3的列表) if (r=1) then (答案是含有(q-1)个3和两个2的列表) if (r=2)
12 问题与练习答案 then (答案是含有q个3和1个2的列表) ) 2. a. 可以。提示:把第一个棋子放在中心,这样使得覆盖其他各个象限的一个正方形时它能 b. 结果是含有667个3的列表。 c. 用小的输入值来试验,直到看出一个模式。 避免该象限含有那个洞。每个象限是原来问题的较小版本。 b. 有一个洞的棋盘含有22n-1个正方形,而每个棋子实际覆盖3个正方形。 c. 知道一个问题的解如何能够帮助解决其他问题?问题a和问题b提供了极好的例子。见 Ploya的第4阶段。 3. This is the correct answer. 4. 简单地设法去拼装图片是一个自底向上的方法。然而,通过观察拼图盒来看图形是什么样子, 为你的方法增加了自顶向下的成分。 5.4 节 1. 把while语句的测试修改为“目标值不等于当前表项并且还有表项要检查”。 2. Z ← 0; X ← 1; repeat ( Z ← Z + X; X ← X + 1) until (X = 6) 3. 这是C语言中的一个问题。当关键字do距while若干行时,读程序的人常常会在对while语 句的正常解释上遇到障碍。特别是,一个do语句结尾处的while常常被解释为一个while语 句的开始。所以,经最好使用不同的关键字来表示先测试循环结构和后测试循环结构。 4. Chery1 Gene Alice Brenda 5. 坚持把主元放到列表里一个相同表项的上面是浪费时间。例如,按建议进行修改,然后对所 Alice Brenda Chery1 Gene Alice Chery1 Gene Brenda 有表项都相同的列表试用这个修改后的新程序。 6. procedure sort (List) N ← 1; while(N小于List的长度) do (J ← N + 1; while( J不大于List的长度) do ( if (位置J里的表项小于位置N里的表项) then(交换两个表项) J ← J + 1) N ← N + 1) 7. 下面这个解决方案的效率不是很高,你能使其效率更高吗? procedure sort (List) N ← List的长度; While (N大于1) do
问题与练习答案 13 (J ← List的长度; while(J大于1) do ( if (位置J里的表项小于位置J-1里的表项) then(交换两个表项) J ← J – 1) N ← N - 1) 5.5 节 1. 考虑的第一个名字是Henry,接下来是Larry,最后是Joe。 2. 8,17 3. 1,2,3,3,2,1 4. 终止条件是“N大于等于3”(或“N不小于3”)。该条件的前提是没有创建额外的激活。 5.6 节 1. 如果该机器1 s可以排序100个名字,那么它1 s可以进行 次比较所花费的时间近似于0.0004 s。因此,排序1000个名字平均需要 1 (10 000-100)次比较。这意味着,每 4 1 (1 000 000-1 000)次 4 比较,大概需要100 s或1 2 min。 3 2. 二分搜索法属于  (lgn)、顺序搜索法属于 (n),而插入排序法属于 (n2)。 3.  (lgn) 类是效率最高的,接着是 (n)、 (n2)和  (n3)。 4. 回答是不正确的,尽管听起来似乎是对的。事实是3张卡片中有两张两面是一样的。于是, 取得这样一张牌的概率是2/3。 5. 不正确。如果被除数小于除数,如3/7,给出的答案是1,尽管正确结果应该是0。 6. 不正确。如果X的值是0,而Y的值不是0,那么所给出的答案是不正确的。 7. 每次构建终止测试时,语句“Sum=1+2+…+K并且K小于等于N”为真。把它与终止条件“K 大于等于N”合并产生所预期的结论“Sum=1+2+…+N”。因为K被初始化为0,并且每进行一 次循环K的值就增加1,所以它的值最终一定达到N。 8. 不能保证。不是硬件和软件设计所能控制的问题,如机械故障和电气问题等,都会影响计算。 第 6 章 6.1 节 1. 一个用第三代语言编写的程序,从某种意义上说它是独立于机器的,因为它的运行步骤不是 按照寄存器和存储单元地址这样的机器特征来描述的。在另一方面,从某种意义上说,它又 是依赖于机器的,因为算数溢出和截断误差还是会出现。 2. 主要差别是,汇编程序把源程序里的每条指令只翻译为一条机器指令,而编译器往往要产生 多条机器语言指令才能等价于一条源程序指令。 3. 说明性范型基于开发所要解决的问题的描述。函数式范型使程序员根据较小问题的解决方案 来描述待解决问题的解决方案。面向对象范型则强调描述问题的环境里的成分。 4. 与前几代语言相比,第三代语言更多是用问题的环境来表达程序,很少用计算机细节来表达。
14 问题与练习答案 6.2 节 1. 使用描述性常量可以改进程序的可理解性。 2. 声明语句描述术语,命令语句描述算法中的步骤。 3. 整型、实型、字符型和布尔型。 4. if-then-else和while循环结构很常见。 5. 同构数组所有的成分有同样的类型。 6.3 节 1. 变量的作用域是指变量在程序中可使用的范围。 2. 函数是这样的一个过程,它返回一个与函数名相关联的值。 3. 因为它们就是这样的。I/O操作实际上是对该机器操作系统内例程的调用。 4. 形参是过程内的标识符。它是实参这个值的占位符,在该过程被调用时,实参才传递给该过程。 5. 过程用于执行一个操作,而函数用于产生一个值。于是,如果过程的名字反映它所执行的操 作,函数名反映它所产生的值,那么这个程序就更可读。 6.4 节 1. 词法分析:识别标记的过程。 语法分析:识别程序的语法结构的过程。 代码生成:产生目标程序指令的过程。 2. 符号表是语法分析程序从程序的声明语句中得到的信息的记录。 3. 表达式 项 表达式 因子 项 项 表达式 因子 因子 项 因子 4. 符合Chacha结构的字符串由一个或几个下述子串构成: forward backward cha cha cha backward forward cha cha cha swing right cha cha cha swing left cha cha cha
问题与练习答案 15 6.5 节 1. 类是对象的描述。 2. 大概是MeteorClass,由它可构造各种流星。在类LaserClass内,可以找到名为AimDirection 的实例变量,它指示激光瞄准的方向。这个变量大概会用在fire、turnRight和turnLeft 等方法中。 3. 类Employee可以包含与雇员的姓名、住址、服务年限等有关的特性。类FullTimeEmployee 可以包含与退休津贴有关的特性。类PartTimeEmployee可以包含与每周工作的小时数和每 小时佣金等有关的特性。 4. 构造器是类里的一个特殊方法,它在创建该类的一个实例时执行。 5. 一个类里的某些项被指定为私有,以防止其他程序单元直接访问这些项。如果一个项是私有 的,那么修改这个项的影响应该限于这个类的内部。 6.6 节 1. 包含初始化并发进程执行的技术以及实现进程间通信的技术。 2. 一个方法是把负担放在进程上,另一个方法是把负担放在数据上。后者的好处是把任务集中 在该程序的一个点上。 3. 这包括天气预报、空中交通管制、复杂系统(从核反应到行人交通)的模拟、计算机网络以 及数据库维护。 6.7 节 1. R、T和V。例如,我们可以证明,R是将﹁R加到这个集合的结果,并且能够证明这个解可以 得到空语句,证明如下: 2. 不是。这个集合是不一致的,因为消解可以得到空语句,证明如下: 空 3. mother(X, Y) :- parent(X, Y), female(X) father(X, Y) :- parent(X, Y), male(X) 空 4. Prolog将得出结论:carol是她的同胞。为了解决这个问题,规则需要包括x不能等于y这样 的事实,在Prolog中写成x \= y。这样规则的改进版本是: sibling(x, y) :- x \= y, parent(z, x), parent(z, y)
16 问题与练习答案 意思是:如果x和y不相同且其父母中有一方相同,那x就是y的同胞。下面的版本则坚持认 为只有当x和y的父母双方都相同,那他们才是同胞: sibling (x, y) :- x \= y, z \= w parent (z, x), parent (z, y) parent (w, x), parent (w, y) 第 7 章 7.1 节 1. 一长串赋值语句序列并不比设计成几个嵌套的if语句复杂。 2. 在使用了一段时间后,发现错误的数目为多少?这里的一个问题就是不能预先估算出这个值。 3. 这里的关键问题就是要考虑如何能对软件的属性进行度量。用于估算一款软件中错误数目的 一种方法是,在设计这个软件时故意放进一些错误。然后,在认为软件已调试后,检查一下, 看原先的错误还存在多少。例如,如果你在软件中故意放入7个错误,在调试后消除了5个错 误,那么你就可以推测,软件中错误的总数只有 5 7 被排除。 个是(稍后将在7.5节介绍)建模和UML等符号系统的开发。 4. 可能的答案包括:度量的发现、预制构件的开发、CASE工具的开发以及向标准靠近。另一 7.2 节 1. 在开发阶段稍作努力就能为将来的维护工作带来很多便利。 2. 需求分析阶段的重点在于,所推荐的系统必须实现哪些功能,设计阶段的重点在于系统完成 这些目标的方式,实施阶段的重点在于系统的实际建设,而测试阶段的重点在于,保证建成 的系统遵循原定的目标。 3. 软件需求规格说明文档的作用是:为客户和软件工程公司,在所要开发软件的需求和规格说 明问题上达成一致而编写的文档。 7.3 节 1. 传统的瀑布方法要求需求分析、设计、实现和测试阶段按照线性方式实现,而较新的模型则 是一种更为宽松的反复试验、不断探索的方法。 2. 增量模型、迭代模型和XP如何? 3. 传统的演化式原型开发是开发软件的组织所实现的,而开放源码开发的方法并不限制在 一个组织内。在开放源码开发的情况中,管理软件开发过程的人没有必要决定报告哪些 增强,而在传统的演化式原型开发中,管理软件开发的人员要为员工分配明确的增强软 件的任务。 4. 对你而言,这是你要考虑的。如果你是软件开发公司的管理者,你能够对你的公司要销售的 软件采用开放源码的方法进行开发吗? 7.4 节 1. 一部小说的各章之间相互依存,而一部百科全书各个章节之间很大程度上是相互独立的。所 以,小说的章节之间比百科全书的章节之间有更大的耦合度。然而,百科全书中的章节可能 比小说里的章节有更高的内聚度。
问题与练习答案 17 2. 累计积分可能是数据耦合的一个例子。其他可能存在的“耦合”包括疲劳、冲力、对对手策 略的了解,可能还有自信心。在许多体育运动项目中,因一局比赛的结束而重新开始下一局, 局的内聚度会增加。例如,在棒球运动中,一个队即使以满垒结束了上轮击球,每次轮到击 球也都不以跑垒选手开始。在其他有些运动中,各单元分别记分,如网球比赛中,每局的输 赢与其他局无关。 3. 这是一个难题。从一种观点来看,我们可以从把每件事情放在单个模块中开始。这就造成了 较低的内聚度而根本没有耦合。然后,如果开始把单一模块分割成一些较小的模块,结果就 会使得耦合度增加。所以可能会得出结论:内聚度的增加易于导致耦合度的增加。从另一方 面讲,假设手头上的问题自然地分割成3个内聚度较高的模块,称为A、B和C。如果原始的设 计没有注意到这种自然的分割(例如,A的一半任务可能与B的一半任务放在了一起,等等), 我们希望内聚度低而耦合度高。在这种情况下,重新设计系统,将任务A、B和C分离至不同的 模块中,这就极有可能在增加模块内的内聚度的同时降低模块间的耦合度。 4. 耦合是模块之间的链接,内聚则是模块内部的连接关系。信息隐藏是信息共享的约束。 5. 你可以添加一个箭头,用来说明ControlGame模块必须告知UpdateScore模块,谁赢得了比 赛。然后,再在其另外一个方向上添加一个箭头,用来说明当UpdateScore模块把控制权移 交到ControlGame模块时,它就将报告当前的状态(如“局结束”或“比赛结束”等)。 6. 删除图7-5中除第一个和最后一个以外的所有水平箭头。也就是说,裁判应该评判PlayerA 的发球,并且直接将updateScore消息发送给Score。(当然,这也就忽视了第二发球的机 会。考虑到双误时,应该如何修改程序设计呢?) 7. 传统的程序员是在语句的基础上写程序,如第6章所介绍的;而组件装配员则是通过链接称 为构件的预制块来构建程序。 7.5 节 1. 首先确定的是,你的图处理的是数据流(不是书本的流动)。下图就表明:图书ID(来源于 读者)和读者记录(来源于图书馆文件)结合成借书记录,并存放在图书馆文件中。 图书ID 读者 借书过程 读者记录 图书 馆文件 借书记录 图书馆系统 借书 还书 更新藏书记录 读者 图书管理员 2.
18 问题与练习答案 3. 4. 旅客 入住 接待 PersonClass name address 酒店 EmployeeClass employee ID seniorityLevel 5. 如图7-13所示,在图的周围画一个矩形,并且在左上角加上“sd”标识。 6. 设计模式为实现反复出现的软件主题提供了标准的、成熟的方法。 7.6 节 1. SQA(软件质量保证)小组负责监督和实施组织所采用的质量控制系统。 2. 人们一般不会记录他们在一个项目中所采取的步骤措施(如决定、操作等)。(这里还存在性 格冲突、嫉妒、自我冲突等问题) 3. 记录保存和评审。 4. 软件测试的目的是为了找出错误。那么,从这个意义上讲,没有发现错误的测试就是失 败的。 5. 办法之一就是考虑模块中的分支数。例如,一个过程模块,它包含了大量的循环和if-then- else语句,那么它很可能比一个带有简单的逻辑结构的模块更容易出错。 6. 边界值分析会建议你用一个有100个数据项的表和一个没有数据项的表对这个软件进行测 试。你还可以用一个已经排好序的表进行测试。 7.7 节 1. 文档采用的形式有用户文档、系统文档和技术文档。通常出现在随付的手册中、以注释形式 出现在源程序和编写规范的代码中,或者以程序写到终端上的交互消息的形式出现,还有可 能是数据字典、结构图、类图、数据流图和实体-联系图之类的设计文档。 2. 在开发阶段和修改阶段。问题在于,修改必须要像原始程序一样完全文档化。(同样,软件 在其使用阶段也要文档化。例如,系统的一个用户可能会发现问题,这个问题不是确定的, 而仅仅会在系统的用户手册的以后版本中得到反映。而且有时候,有关软件如何使用的书籍 是在该软件已经使用了一段时间并开始流行后写的。) 3. 不同的人对此有不同的观点。有些人认为程序是整个项目的关键,所以自然更重要。而另一 部分人则认为,如果程序没有文档,则它什么也不是,因为如果你不能理解一个程序,你就 不会使用和修改它。而且,如果有良好的文档,创建程序的任务就“容易”被再创造。 7.8 节 1. a. 调节显视器屏幕的倾角或者鼠标形状的能力如何?在智能手机上,用触摸屏来替代鼠标, 或者通过倾斜手机来提供输入的做法怎么样?
分享到:
收藏