output.json 3.0 MB

1
  1. {"totalList":[{"id":"learncoder_97_8383","stem":"找出下面顺序图中的错误,并加以改正<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image57.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"short_answer","answer":"如果需要返回size,那么addStudent就不应该是异步消息,应该是同步。而且Queue只能返回给Section,Section再返回给Registrar.最终修改应该是:addStudent、getSize都是同步消息,queue给section返回size,然后section再向registrar返回size。"},{"id":"learncoder_97_8381","stem":"一个银行贷款申请的流程如下:(1)申请人通过互联网完成并向银行提交贷款申请。(2)该系统验证贷款申请的信息, 检查其是否正确和完整。(3)该系统将贷款请求转交外部信贷局, 以获得申请人的信用报告。(4)该系统根据返回的信用报告计算申请人的信用评分。请为其建立系统顺序图描述。分析系统顺序图,说明该流程存在哪些问题?并一一修正。","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"short_answer","answer":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image64.png\">问题:1用户的刺激都没有得到响应 2验证正确和完整性之后没有分支处理 3 计算信用评分之后就结束没有完成整个流程"},{"id":"learncoder_97_8382","stem":"下面是一个售货机的使用流程,请为它建立系统顺序图主流程(1)顾客输入商品码选择商品(2)系统显示该商品是否有货(3)顾客投币(4)系统提示已投金额重复3-4步,直到所投费用超出商品价格(5)顾客确认购买(6)系统给顾客提供商品(7)顾客检查商品,无误后离开扩展流程2a如果商品无货(1)系统通知管理员补货(2)管理员确认得到消息。5a 顾客取消购买(1)系统退还钱款7a 商品有误(1)顾客联系管理员请求帮助(2)管理员告知登记码(3)顾客在系统中登记,等待后续人工处理。","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"short_answer","answer":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image65.png\">"},{"id":"learncoder_97_8379","stem":"下面的图中存在哪些错误?请找出并改正(1)<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image54.png\">(2)<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image55.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"short_answer","answer":"(1)show list应该是返回消息,虚线(2)返回过多。应该只有一个"},{"id":"learncoder_97_8380","stem":"下面的顺序图存在错误,请找出并改正<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image56.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"short_answer","answer":"答案:opt没有加监护条件<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image63.png\">"},{"id":"learncoder_97_8378","stem":"为下列描述建立分析类图。顾客到售票处, 想买一张特定旅程的票。航空公司的员工向客户询问他的需求,包括:(1)目的地机场,(2)出发机场,(3)出发的日期和时间,(4)经济舱还是VIP舱。(5)是否经停(转机)员工将上述信息输入到航班信息系统中, 该系统返回与查询匹配的一个或多个可能的航班数据。每个航班数据包括:(1)余票数量,(2)出发日期,(3)出发的确切时间(4)到达时间,(5)价格。客户选择其中一个航班并请求机票。机票包含更详细信息, 如签发日期, 以及机票是否已经支付或必须在办理入住时支付。客户收到一张或多张机票后, 必须支付。航空公司支持两种不同的付款方式:信用卡或借记卡付款。如果使用信用卡付款, 航空公司将注册信用卡号码及其到期日期。如果用借记卡付款, 需要从卡上读取银行代码和银行账户号码作为电子借记卡。无论如何支付,航空公司都要记录所支付的金额、付款日期和客户的签名。","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"short_answer","answer":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image62.png\">"},{"id":"learncoder_97_8376","stem":"大学图书馆的简单版本。图书馆管理系统必须跟踪记录书的信息,包括书目和具体书。书目详细内容包括题目、作者、出版社、版本、出版日期、ISBN、类别号。具体书需要描述书号、状态(可用还是已借出)、应归还日期。图书馆管理系统还需要跟踪记录借阅者信息。借阅者有多种类型——教师、研究生、本科生,每种类型有不同的权限。所有的借阅者都需要记录姓名、地址、电话号码。教师需要额外记录办公室地址和办公室电话。研究生需要额外记录专业和导师。本科生需要额外记录专业和学分级。图书馆管理系统需要记录借阅信息。借阅者把一系列书拿到流转台,管理员把书记录出馆,即形成借阅。一个借阅者可以有多次借阅记录,一次借阅可以借多本书。借阅者可以浏览馆藏书目,查看各书目是否有书可以借阅。如果借阅者想借的书已经借出,那么他可以订阅该书目,包括订阅日期、优先级、完成日期。一个借阅者一次只能订阅一个书目。借阅者还书时把书带到流转台,放入归还槽。管理员归还借阅记录中的书,同时把书入馆。管理还要跟踪记录新书信息。图书馆的管理者需要打印书目单报告,查看被订阅的书、过期未还的书。如果书被损坏,管理者可以核销该书。","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"short_answer","answer":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image60.png\">"},{"id":"learncoder_97_8377","stem":"一个诊所有三个牙医和许多牙医卫生员,想开发一个系统管理病人信息。系统不需要保持任何医疗记录,只需要处理病人事宜。每个病人建立一个记录,包括姓名、出生日期、性别、初诊日期、终诊日期。病人记录按家庭分组。每个家庭需要记录户主姓名、地址和电话。每个家庭联系一个保险员记录。保险员记录包括保险公司名称、地址、账单联系人、电话号码。在诊所中,每个员工(牙医、牙医卫生员、X光技术员)都有一个记录,包括姓名、地址、电话。每一次办公室诊疗都要保存信息,包括日期、自付费用、预付保险账号、实付保险费用。一个病人可以有多次诊疗,一次诊疗只针对一个病人。一次诊疗需要多名工作人员共同参与一个或多个工作程序。工作程序的详细信息需要记录下来,包括程序类型、描述、针对的牙齿、自付费用、总费用、保险费用、保险公司拒付费用。系统需要跟踪记录单据信息。有两种单据类型:给保险公司的单据和给家庭单据。两种单据有相类似的地方,都列出了每一次诊疗信息、工作程序信息。单据还包括发送日期、总费用、已支付费用、支付日期、拒绝费用。家庭单据还需要记录自付费用和预期支付日期。保险单据还记录保险支付费用和预期支付日期。接待员要跟踪和录入病人和家庭户主的信息,要记录病人的诊疗信息。病人信息也可以被业务管理者录入和维护。业务管理者还维护诊所员工的信息。业务管理者还要打印单据。病人的单据每月打印一次,寄送给家庭户主。保险单据每周打印一次。单据打印之后,业务管理者会检查一部分单据以确保内容正确。在收到付款时,业务管理员还需要输入付款信息,包括付款日期和数额。业务管理员可以打印一份逾期未付款的单据报告,列出这些单据的户主信息。诊所员工负责录入他们参与的诊疗程序信息,有时会查看他们一周或一个月内参与的诊疗程序报告。","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"short_answer","answer":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image61.png\">"},{"id":"learncoder_97_8375","stem":"为下面的描述建立类图要作为一个收藏者(collector),必须有一个或多个收藏(collection)。每个收藏必须有两个或者多个藏品项(Item)。每个收藏都属于一个收藏者。一个收藏由它所拥有的藏品项组成。一个特定的藏品项可能在多个收藏中出现。","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"short_answer","answer":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image59.png\">"},{"id":"learncoder_97_8370","stem":"下面的哪个符号表示异步消息<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image49.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"A":"1","B":"2","C":"3"},"answer":"B"},{"id":"learncoder_97_8372","stem":"有简易顺序图如下<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image52.png\">你认为与此一致的类图是","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"B":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image53.png\">","C":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image53.png\">","D":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image53.png\">","A":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image53.png\">"},"answer":"C"},{"id":"learncoder_97_8371","stem":"有简易顺序图如下<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image50.png\">你认为与此一致的类图是","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"C":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image51.png\">","B":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image51.png\">","D":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image51.png\">","A":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image51.png\">"},"answer":"B"},{"id":"learncoder_97_8369","stem":"下图中的哪一个符号表示正在处理中<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image48.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"B":"2","A":"1","C":"3"},"answer":"C"},{"id":"learncoder_97_8367","stem":"该图有异步消息吗?","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"B":"没有","C":"图中信息无法形成判断","A":"有"},"answer":"B"},{"id":"learncoder_97_8368","stem":"仅从图中的信息出发,对象A的类和对象C的类之间应该存在关联吗?下面的题目与上面图无关","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"C":"图中信息无法形成判断","A":"存在关联","B":"没有关联"},"answer":"B"},{"id":"learncoder_97_8363","stem":"标记(vii)所关联的箭头表示:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"E":"返回消息","A":"同步消息","D":"异步调用","B":"异步消息","C":"同步调用"},"answer":"E"},{"id":"learncoder_97_8366","stem":"该图表达的交互是并发的还是串行的?","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"A":"并发","B":"串行","C":"图中信息无法形成判断"},"answer":"B"},{"id":"learncoder_97_8364","stem":"标记(viii)所关联的虚线表示:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"A":"对象B已被销毁","D":"以上都不对","C":"对象B失去控制权,但还没有销毁","B":"对象B拥有控制权,正在执行中"},"answer":"A"},{"id":"learncoder_97_8365","stem":"标记(ix) 、 (x)所关联的柱状体表示:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"C":"对象B和C失去控制权,但还没有销毁","B":"对象B和C拥有控制权,正在执行中","D":"以上都不对","A":"对象B和C已被销毁"},"answer":"B"},{"id":"learncoder_97_8360","stem":"下面的各题都是针对上述图形该图描述的内容是:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"D":"用户需求中的领域知识","B":"用户执行一件任务的数据流处理过程;","A":"一个软件系统的结构","C":"用户在执行一件任务中发生的交互过程"},"answer":"C"},{"id":"learncoder_97_8361","stem":"标记(i)所关联的元素ABC是:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"C":"三个类的对象","D":"三个数据","A":"三个类","B":"一个处理的三个过程 ;"},"answer":"C"},{"id":"learncoder_97_8362","stem":"标记(ii), (iii) 和 (iv)所关联的箭头表示:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"E":"返回消息","A":"同步消息","D":"异步调用","B":"异步消息","C":"同步调用"},"answer":"A"},{"id":"learncoder_97_8358","stem":"对下面内容描述正确的类图是:一个访问登记(visitor register)由多个访问项(visitor entry)组成。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image42.png\"><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image46.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"B":"","A":"","D":"","C":""},"answer":"D"},{"id":"learncoder_97_8357","stem":"针对下面的描述,哪一个类图最为合适?一个公司(company)会做很多项目(project),一个项目由一个团队(Team)执行,团队内包括很多雇员(Employee),这些雇员是公司的员工。","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"D":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image41.png\">","A":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image38.png\">","C":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image40.png\">","B":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image39.png\">"},"answer":"B"},{"id":"learncoder_97_8359","stem":"该图描述了<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image47.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"D":"一个用例","C":"一个系统","E":"一个暂时行为","A":"一个行为顺序","B":"一个领域"},"answer":"B"},{"id":"learncoder_97_8355","stem":"参照类图,下面哪个对象图是不正确的?<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image29.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"D":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image33.png\">","B":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image31.png\">","C":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image32.png\">","A":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image30.png\">"},"answer":"B"},{"id":"learncoder_97_8356","stem":"一些人(Person)会养动物(Animal)作为宠物(Pet)。下面哪个类图最好地描述了这种情景。","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"C":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image36.png\">","B":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image35.png\">","A":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image34.png\">","D":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image37.png\">"},"answer":"A"},{"id":"learncoder_97_8351","stem":"与下面对象图比较相符的类图是<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image20.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"B":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image22.png\">","C":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image23.png\">","A":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image21.png\">","D":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image24.png\">"},"answer":"A"},{"id":"learncoder_97_8352","stem":"有类图如下<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image25.png\">基于上面的类图,能否建立一个对象图以表达 “翠花”(一个女孩Girl)喜欢 “酸菜”(一个男孩Boy)","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"关联的方向明确了,不可以逆向","type":"choice","options":{"A":"可以","B":"不可以"},"answer":"B"},{"id":"learncoder_97_8350","stem":"多态机制的一个好处是可以减少","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"A":"关联类中的方法;","C":"分支和判断语句","B":"需要完成同样功能的子类","D":"整个系统的类之间的耦合"},"answer":"D"},{"id":"learncoder_97_8354","stem":"参照下图,下面说法正确的是<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image28.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"D":"图里共有3个对象","C":"图里共有4个对象","B":"图里只有一个类","A":"图中有一个匿名对象;"},"answer":"A"},{"id":"learncoder_97_8353","stem":"有类图如下<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image26.png\">基于类图,有Boy对象Larry喜欢Girl对象Mindy,其对象图如下<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image27.png\">那么有没有可能还有Boy对象John也喜欢Girl对象Mindy?","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"关联的基数限定了一个Girl对象只有一个Boy对象会喜欢","type":"choice","options":{"B":"有","A":"没有"},"answer":"A"},{"id":"learncoder_97_8347","stem":"该图说明:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"B":"Guitarist有name","C":"Guitar有name","D":"MusicPlayer有 name","A":"Person有name"},"answer":"A"},{"id":"learncoder_97_8349","stem":"参照下图,下面说法正确的是<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image19.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"F":"CheckingAccount 有 balance","A":"CheckingAccount implements BankAccount","E":"SavingAccount 能够 processCheck","B":"CheckingAccount 和 SavingAccount是 BankAccount","C":"CheckingAccount 和SavingAccount 没有关联","D":"BankAccount 关联 CheckingAccount"},"answer":"C"},{"id":"learncoder_97_8348","stem":"下面哪个图的意思是:一个计划(Plan)是一种特殊类型的文档(Document)","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"C":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image18.png\">","A":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image16.png\">","B":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image17.png\">"},"answer":"B"},{"id":"learncoder_97_8346","stem":"查看下面两幅图,说法正确的是<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image14.png\"><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image15.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"C":"两个图信息一样,但左边更好","B":"右边的图信息更丰富","A":"左边的图信息更丰富","D":"两个图信息一样,但右边更好"},"answer":"D"},{"id":"learncoder_97_8344","stem":"小张和小吴分别是一个公司的财务和销售。现在该公司需要开发一个管理系统,需要登记两个人的姓名和联系方式。他们都可以登录系统处理各自业务,但因为财务比较关键,所以小张需要通过专门的授权验证才能使用系统。针对上面的描述,定义它们的抽象类:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"D":"小张、小吴","A":"小张、小吴、财务用户、销售用户","E":"财务用户、销售用户","B":"用户","C":"用户、财务用户"},"answer":"C"},{"id":"learncoder_97_8345","stem":"现在需要设计一个动物游戏,需要设计鹦鹉Parrot和企鹅Penguin,它们都有相同的形状(头、身体、翅膀、脚、尾巴),都会鸣叫,其中企鹅Penguin不会飞。那么你认为应该建立怎样的抽象类:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"D":"只有一个类:鸟,鹦鹉和企鹅都是鸟的实例对象","A":"鹦鹉、企鹅两个完全无关的类","C":"鹦鹉、企鹅,其中鹦鹉继承企鹅","B":"鹦鹉、企鹅,其中企鹅继承鹦鹉","E":"鸟(不会飞)、鹦鹉,其中鹦鹉继承鸟,企鹅是鸟的实例对象","F":"鸟(会飞)、企鹅,其中企鹅继承鸟,鹦鹉是鸟的实例对象"},"answer":"E"},{"id":"learncoder_97_8341","stem":"在对现实世界进行建模时,理想的顺序是:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"C":"抽象并使用类,需要的时候再列举对象","B":"先寻找对象,再归纳类","A":"先抽象类,再列举对象","D":"寻找和使用对象,需要的时候再归纳类"},"answer":"B"},{"id":"learncoder_97_8342","stem":"矩形的定义是 class Rectangle{int width; int height},正方形的定义是class Square{int edgeSize}。那么:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"严格按照定义,不能替换概念。定义中矩形是有宽和高并且二者独立,正方形是只有一个边长,所以二者不是一个类别。","type":"choice","options":{"B":"正方形Square不是矩形Rectangle的一种,所以可以归纳出两个无关的类:正方形Square、矩形Rectangle","C":"正方形Square是矩形Rectangle的一种,但是正方形Square也有自己的抽象需要,所以可以归纳出两个类:正方形Square、矩形Rectangle,并且正方形Square继承矩形Rectangle","A":"正方形Square是矩形Rectangle的一种,所正方形Square可以归属于矩形Rectangle,所以只能归纳出一个类Rectangle"},"answer":"B"},{"id":"learncoder_97_8343","stem":"为下面描述抽象出正确的类:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"D":"学院、课程、老师、学生","A":"软件谷学院开设了Java程序设计课程,王明老师进行讲授,张三和李四两个学生选修了该课程。","C":"软件谷学院、Java程序设计、课程、王明、老师、张三、李四、学生。","E":"以上都不对","B":"软件谷学院、Java程序设计课程、王明、张三、李四"},"answer":"D"},{"id":"learncoder_97_8338","stem":"与下图描述一致的接口定义是<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image12.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"C":"class Order { public OrderLine getLineItems(Product aProduct) ; public void addLineItem(Number amount, Product aProduct);","A":"class Order { public OrderLine getLineItems() ; public void addLineItem(Number amount); }","D":"class Order { public Object getLineItems() ; public void addLineItem(OrderLine lineItem);}","B":"class Order { public OrderLine getLineItems() ; public void addLineItem(OrderLine lineItem); }"},"answer":"C"},{"id":"learncoder_97_8339","stem":"有类图如下<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image13.png\">下列说法不正确的是","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"B":"一个人(Person)可以不被任何公司(Company)雇佣","A":"可以有一个没有任何员工(Employee)的公司(Company)","C":"一个人(person)可以自己雇佣自己"},"answer":"A"},{"id":"learncoder_97_8340","stem":"下面哪些不属于类图的内容","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"B":"带有参数和结果的操作","A":"属性及其类型","E":"可见性信息","C":"组成关系","D":"事件和行为","F":"导航信息"},"answer":"D"},{"id":"learncoder_97_8337","stem":"上图中两个类之间的箭头线表示:","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"A":"继承","D":"依赖","B":"关联","C":"发生消息"},"answer":"B"},{"id":"learncoder_97_8335","stem":"下面的关系应该是哪种类型?一个多边形由一些有序点组成","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"A":"继承(泛化Generalization)","D":"关联(Association)","C":"组成(Composition)","B":"聚集(Aggregation)"},"answer":"B"},{"id":"learncoder_97_8334","stem":"下面的关系应该是哪种类型?一个关系可以是关联或泛化","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"D":"关联(Association)","A":"继承(泛化Generalization)","B":"聚集(Aggregation)","C":"组成(Composition)"},"answer":"A"},{"id":"learncoder_97_8333","stem":"下面的关系应该是哪种类型?一个类有许多属性","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"A":"继承(泛化Generalization)","D":"关联(Association)","C":"组成(Composition)","B":"聚集(Aggregation)"},"answer":"C"},{"id":"learncoder_97_8336","stem":"下面的关系应该是哪种类型?一个人在一个项目上使用一种计算机语言<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image11.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"A":"继承(泛化Generalization)","D":"关联(Association)","B":"聚集(Aggregation)","C":"组成(Composition)"},"answer":"D"},{"id":"learncoder_97_8332","stem":"下面的关系应该是哪种类型?一个文件包含很多记录","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"A":"继承(泛化Generalization)","D":"关联(Association)","B":"聚集(Aggregation)","C":"组成(Composition)"},"answer":"C"},{"id":"learncoder_97_8331","stem":"下面的关系应该是哪种类型?一个吃饭的人拿一个叉子","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"A":"继承(泛化Generalization)","D":"关联(Association)","B":"聚集(Aggregation)","C":"组成(Composition)"},"answer":"D"},{"id":"learncoder_97_8328","stem":"针对上图,下面说法正确的是","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"E":"一个company可以有0个employer","D":"一个company有一个employer,这个employer是一个person","A":"一个company可以有0或1个person","C":"一个person有一个employment","B":"一个person只能为一个company工作"},"answer":"A"},{"id":"learncoder_97_8327","stem":"一类可以只有一个属性","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"类的判定标准是存在属性和行为职责,并没有要求不能只有一个属性","type":"true_false","answer":true},{"id":"learncoder_97_8330","stem":"下面的关系应该是哪种类型?一个文件可以是普通文件或目录文件","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"D":"关联(Association)","A":"继承(泛化Generalization)","B":"聚集(Aggregation)","C":"组成(Composition)"},"answer":"A"},{"id":"learncoder_97_8329","stem":"下面的关系应该是哪种类型()?一个国家有一个首都","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"空","type":"choice","options":{"A":"继承(泛化Generalization)","D":"关联(Association)","B":"聚集(Aggregation)","C":"组成(Composition)"},"answer":"B"},{"id":"learncoder_97_8325","stem":"下面的UML图描述正确吗<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image8.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"对象图的链接不能有基数","type":"true_false","answer":false},{"id":"learncoder_97_8323","stem":"如果一个类只有一个属性,它就应该被撤销,作为其他类的属性使用","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"无","type":"true_false","answer":false},{"id":"learncoder_97_8326","stem":"有类图如下<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image9.png\">下列说明正确吗:一个运动员(Player)要么属于NBA团队,要么属于NFL团队,但不能够同时属于两个团队。","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"组合关系决定了player只能属于一个团队","type":"true_false","answer":true},{"id":"learncoder_97_8324","stem":"下列说法正确吗:一个MP3 player可以不被任何teenager拥有","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"MP3 player是portable audio device的子类,一个portable audio device必须被一个teenager拥有,所以MP3 player也必须被一个teenager拥有","type":"true_false","answer":false},{"id":"learncoder_97_8317","stem":"下面类图正确吗?<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image1.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":" student和Module之间存在关联,足以表达二者关系,不需要再student类中再定义passedModules,而且更不应该使用string类型(图作者的意思是使用Module的name)","type":"true_false","answer":false},{"id":"learncoder_97_8318","stem":"下面类图正确吗?<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image2.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"可见性(+、-)不可以出现在关联名称前面。关联角色可以有可见性,但是关联名称没有。","type":"true_false","answer":false},{"id":"learncoder_97_8321","stem":"有类图如下<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image6.png\">该类图说明至少会存在一个teenager对象和一个portable audio device对象","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"关联基数所描述的是指定一端类对象与另一端类对象的可能数量关系,但不能用于限定领域中可能存在的类对象数量。","type":"true_false","answer":false},{"id":"learncoder_97_8319","stem":"下面的类图表达了人(Person)可以拥有宠物狗(Dog)<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image3.png\">你想进一步明确是人拥有狗,而不是狗拥有人,所以做了下面的修正<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image4.png\">这个修正正确吗?","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"修正图的箭头表达的是可见性,不是关联的方向。正确的图示应该如下所示。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image58.png\">","type":"true_false","answer":false},{"id":"learncoder_97_8322","stem":"有类图如下<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image7.png\">下列说明正确吗:一个运动员(Player)可以同时既属于一个NBA团队,又属于一个NFL团队","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"组合关系决定了player只能属于一个团队","type":"true_false","answer":false},{"id":"learncoder_97_8320","stem":"下图描述正确吗?<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/OOA练习/image5.png\">","key_points":"知识点.练习.专业课练习.软件工程.OO分析","analysis":"黑心菱形是组合,按照组合要求一个point只能属于一个polygon,所以组合符合上面标记*是错误的。","type":"true_false","answer":false},{"id":"learncoder_91_2230","stem":"<p>“系统应该基于Mysql数据库管理系统”这一表述并不是用户解决问题的需要,所以它不属于需求</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"虽然不属于用户解决问题的需要,但它是行业标准需求文档中要求书写的内容,所以仍然属于需求","type":"true_false","answer":false},{"id":"learncoder_91_2229","stem":"<p>只要没有写在需求规格说明文档中的,都不是需求</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"及时文档中没有书写,但如果的确是用户解决问题所需要的,那么也应该是需求","type":"true_false","answer":false},{"id":"learncoder_91_2228","stem":"<p>有两种理解:1)用户为了解决问题或达到某些目标需要具备的条件或能力;2)系统或系统部件为了满足合同、标准、规范或其他正式文档所规定的要求而需要具备的条件或能力。<br>那么能够准确定义需求的是:</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"<p>1)和2)之间有交叉,也有不同。1)中的有些现实是不出现在2)文档中的(被认为是默认知识,例如基本概念、人的能力),2)文档中有些不是为解决用户问题存在的(例如过程需求)</p><p>需求是1)和2)的合集</p>","type":"choice","options":{"A":"<p>1)</p>","B":"<p>2)</p>","C":"<p>1)或者2)</p>","D":"<p>1)并且2)</p>"},"answer":"C"},{"id":"learncoder_91_2227","stem":"<p>常见的需求表达方式是</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"<p>需求是针对系统的,所以是主语是“系统”,“必须”太强硬了,同时使用“系统应该....”。如果需要考虑用户的交互行为,一般写法是“在用户...时,系统应该....”。</p>","type":"choice","options":{"A":"<p>系统应该...</p>","B":"<p>用户希望...</p>","C":"<p>系统必须...</p>","D":"<p>用户应该...</p>"},"answer":"A"},{"id":"learncoder_91_2226","stem":"<p>需求开发的时候通常从用户需求开始,然后推演出业务需求和系统级需求</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"从业务需求开始","type":"true_false","answer":false},{"id":"learncoder_91_2225","stem":"<p>需求开发的终极目标是找到系统级需求,所以在某种意义上业务需求和用户需求的作用没那么重要</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"业务需求指导用户需求,用户需求转化为系统级需求,如果没有前两者,系统级需求的正确性没有保障","type":"true_false","answer":false},{"id":"learncoder_91_2224","stem":"<p>在需求定义的时候,可以模糊程度最大的是业务需求,其次是用户需求,最后是系统级需求</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"业务需求和系统级需求都必须明确量化标准,不能模糊","type":"true_false","answer":false},{"id":"learncoder_91_2223","stem":"<p>业务需求是用户的战略目标,所以一般由领导层和业务专家提出</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"true_false","answer":true},{"id":"learncoder_91_2222","stem":"<p>用户需求是用户的日常任务,一般由从事日常工作的一线用户提出</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"true_false","answer":true},{"id":"learncoder_91_2221","stem":"<p>系统级需求是用户与系统的交互,因为系统是需要新建立的,所以系统级需求也是需要技术加工(需求分析)才能建立的</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"true_false","answer":true},{"id":"learncoder_91_2220","stem":"<p>哪一个类型的需求反映了用户的战略目标</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>业务需求</p>","B":"<p>系统级(功能)需求</p>","C":"<p>其他</p>","D":"<p>用户需求</p>"},"answer":"A"},{"id":"learncoder_91_2219","stem":"<p>哪一个类型的需求反映了用户的日常任务</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>系统级(功能)需求</p>","B":"<p>用户需求</p>","C":"<p>其他</p>","D":"<p>业务需求</p>"},"answer":"B"},{"id":"learncoder_91_2213","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />在项目管理者请求分配任务时,系统将选中的需求开发任务分配给选中的开发人员</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"业务需求","B":"用户需求","C":"系统级(功能)需求","D":"约束"},"answer":"C"},{"id":"learncoder_91_2212","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />该软件管理工具必须帮助项目管理者进行开发管理工作,以通过CMMI-4的评估;</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"业务需求","B":"用户需求","C":"系统级(功能)需求<p><br></p>","D":"约束"},"answer":"B"},{"id":"learncoder_91_2218","stem":"<p>下面是从一个软件规格说明书的一个片段,你判断这段内容是哪种类型的需求,是否存在问题?<br />收文管理应包括:<br />来文登记、拟办、领导审批、办理、归档、查询统计等功能。附件支持WORD 、PDF 、EXCEL 、HTML 等文档类型格式;需提供方便、灵活、直观的文件批示处理;对收文的处理全过程进行自动化管理、跟踪和记录;在收文处理的过程中,支持电子印章、电子签名或手写批注等功能。<br />来文登记:完成来文登记功能。登记来文基本信息(来文编号、来文标题、主题词、来文单位、来文时间),还要对原文进行扫描处理,引入到公文库中。并可完成收文办文单打印功能。完成后启动收文流转流程。<br />拟办:查看公文的基本信息,原文内容。签录拟办意见,发送给领导审批。<br />领导审批:查看公文的基本信息,原文内容。签录批示意见,确定主办部门、协办部门。<br />办理:办理人根据领导批示办理,记录办理情况。<br />归档:对办理完结的来文归档,将来文信息、拟办意见、领导批示、办理情况等信息及来文扫描件发送到档案管理系统,档案科确认接收的文件,才属于己归档文件。<br />查询统计:提供按来文编号、来文标题、主题词、来文单位、来文时间等查询统计功能,要求查询统计结果可以打印。</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"用户需求,没有问题","B":"业务需求,存在问题,定义太模糊","C":"系统级需求,没有问题","D":"用户需求,存在问题,定义太模糊","E":"业务需求,没有问题","F":"系统级需求,存在问题,定义太模糊"},"answer":"A"},{"id":"learncoder_91_2217","stem":"<p>下面是从一个软件规格说明书的一个片段,你判断这段内容是哪种类型的需求,是否存在问题?<br />开发意图<br />1. 减少人力成本<br />2. 提高办公效率<br />3. 成本统计、查询<br />4. 历史信息查询<br />5. 支持WEB 操作</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"用户需求,没有问题","B":"业务需求,存在问题,定义太模糊","C":"系统级需求,没有问题","D":"用户需求,存在问题,定义太模糊","E":"业务需求,没有问题","F":"系统级需求,存在问题,定义太模糊"},"answer":"B"},{"id":"learncoder_91_2216","stem":"<p>下面是从一个软件规格说明书的一个片段,你判断这段内容是哪种类型的需求,是否存在问题?<br />1、实现各部门的公文流转无纸化、文档一体化、业务管理的规范化、自动化和网络化;<br />2、实现工作流程合理化、高效化,决策支持科学化、准确化;<br />3、统一办公流程、规范公文格式,加强信息交流和共享,提高工作效率</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"用户需求,没有问题","B":"业务需求,存在问题,定义太模糊","C":"用户需求,存在问题,定义太模糊","D":"业务需求,没有问题"},"answer":"B"},{"id":"learncoder_91_2214","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />系统需要帮助项目管理者安排项目计划,具体包括资源估算、进度安排、里程碑规划、跟踪计划、质量管理计划、风险管理计划。</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"业务需求","B":"用户需求","C":"系统级(功能)需求","D":"约束"},"answer":"B"},{"id":"learncoder_91_2215","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />系统需要帮助项目管理者安排项目计划,具体包括资源估算、进度安排、里程碑规划、跟踪计划、质量管理计划、风险管理计划。</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"<p>这里强调是用户任务,所以是用户需求</p>","type":"choice","options":{"A":"业务需求","B":"用户需求","C":"系统级(功能)需求","D":"约束"},"answer":"B"},{"id":"learncoder_91_2211","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />系统能够为用户提供库存分析报告、商品/利润报告和过期商品报告</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"业务需求","B":"用户需求","C":"系统级(功能)需求","D":"约束"},"answer":"B"},{"id":"learncoder_91_2210","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />产品在发布1年之后,必须在出版的A、B、C三个产品评论刊物中被评为最可靠的产品</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"业务需求","B":"用户需求","C":"系统级(功能)需求","D":"约束"},"answer":"A"},{"id":"learncoder_91_2209","stem":"<p>可以不做明确量化,带有一些多逻辑混杂的需求类型是:</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"业务需求","B":"用户需求","C":"前面三个都不可以","D":"系统级(功能)需求"},"answer":"B"},{"id":"learncoder_91_2208","stem":"<p>需要经过技术加工才能产生的需求类型是:</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"业务需求","B":"其他","C":"用户需求","D":"系统级(功能)需求"},"answer":"D"},{"id":"learncoder_91_2207","stem":"<p>需要配合现实世界知识才能更好地理解的需求类型是</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"业务需求","B":"其他","C":"用户需求","D":"系统级(功能)需求"},"answer":"C"},{"id":"learncoder_91_2206","stem":"<p>需要使用解决方案、功能特征来满足的需求类型是:</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"业务需求","B":"其他","C":"用户需求","D":"系统级(功能)需求"},"answer":"A"},{"id":"learncoder_91_2205","stem":"<p>哪一种类型的需求反映了用户与系统的交互细节</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"业务需求","B":"其他","C":"用户需求","D":"系统级(功能)需求"},"answer":"D"},{"id":"learncoder_91_2204","stem":"<p>项目过程中所采用的开发方法,需要产生的文档,需要的时间、人力和金钱投入,这些都不是为解决问题问题或者达到用户目标所需要的软件功能,所以不能算是需求</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"需求定义第二条:系统或系统部件为了满足合同、标准、规范或其他正式文档所规定的要求而需要具备的条件或能力。在合同和规范中常常需要界定上述内容,所以它们属于需求。","type":"true_false","answer":false},{"id":"learncoder_91_2203","stem":"<p>在一个软件系统的需求说明书中,项目需求、过程需求、硬件需求、人力需求等未必出现,即使出现了也只是很少的篇幅。</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"true_false","answer":true},{"id":"learncoder_91_2202","stem":"<p>说明下列需求分别属于下面的哪种类型<br />经过10天培训的收银员就能够熟练使用系统;</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"属于软件需求类别下的质量需求(易用性)。因为其描述重点不是需要怎样的人,而是系统应该易于使用(10天培训就足以)。如果需求是“系统使用之前,需要对用户进行10天的专门培训”,那么就是其他(人力)需求了。<p><br></p>","type":"choice","options":{"A":"软件需求","B":"其他需求(包括硬件需求、人力需求等)","C":"过程需求","D":"项目需求"},"answer":"A"},{"id":"learncoder_91_2201","stem":"<p>说明下列需求分别属于下面的哪种类型<br />系统开发的成本不超过10万元RMB;</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"跟项目计划相关的都是项目需求,资源(时间、人力、金钱)估算是项目计划范围","type":"choice","options":{"A":"其他需求(包括硬件需求、人力需求等)","B":"软件需求","C":"过程需求","D":"项目需求"},"answer":"D"},{"id":"learncoder_91_2200","stem":"<p>说明下列需求分别属于下面的哪种类型<br />系统开发必须在6个月内完成;</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"跟项目计划相关的都是项目需求,资源(时间、人力、金钱)估算是项目计划范围","type":"choice","options":{"A":"其他需求(包括硬件需求、人力需求等)","B":"软件需求","C":"过程需求","D":"项目需求"},"answer":"D"},{"id":"learncoder_91_2199","stem":"<p>说明下列需求分别属于下面的哪种类型<br />该软件管理工具的开发过程自身必须符合CMMI-4标准;</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"对开发过程的要求属于过程需求,不涉及软件管理工具的功能设定","type":"choice","options":{"A":"其他需求(包括硬件需求、人力需求等)","B":"软件需求","C":"过程需求","D":"项目需求"},"answer":"C"},{"id":"learncoder_91_2198","stem":"<p>说明下列需求分别属于下面的哪种类型<br />项目需要招聘并培训专职的系统管理员,以让其维护系统的运行与使用;</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"重点是要求专职系统管理员,是对人力的要求","type":"choice","options":{"A":"软件需求","B":"过程需求","C":"项目需求","D":"其他需求(包括硬件需求、人力需求等)"},"answer":"D"},{"id":"learncoder_91_2197","stem":"<p>说明下列需求分别属于下面的哪种类型<br />开发团队需要给出SRS文档</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"过程的管理规范、开发方法、开发工具选择、制品产出等都属于软件过程的内容","type":"choice","options":{"A":"软件需求","B":"其他需求(包括硬件需求、人力需求等)","C":"过程需求","D":"项目需求"},"answer":"C"},{"id":"learncoder_91_2196","stem":"<p>说明下列需求分别属于下面的哪种类型<br />顾客使用信用卡付款时,系统必须使用银联专用刷卡设备与银行交易;</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"硬件需求","type":"choice","options":{"A":"软件需求","B":"过程需求","C":"项目需求","D":"其他需求(包括硬件需求、人力需求等)"},"answer":"D"},{"id":"learncoder_91_2195","stem":"<p>下面是从一个软件规格说明书的一个片段,你判断这段内容是哪种类型的需求?<br />验收投标方需提供以下文档:<br />软件需求分析报告<br />软件总体设计报告<br />软件操作手册<br />软件配置手册<br />软件试运行报告<br />应用软件介质</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"过程的管理规范、开发方法、开发工具选择、制品产出等都属于软件过程的内容","type":"choice","options":{"A":"其他需求(包括硬件需求、人力需求等)","B":"软件需求","C":"过程需求","D":"项目需求"},"answer":"C"},{"id":"learncoder_91_2194","stem":"<p>下面是从一个软件规格说明书的一个片段,你判断这段内容是哪种类型的需求?<br />培训要求<br />投标人必须提供相应的应用软件技术和系统操作等方面的培训。投标人须在文件中提出全面、详细的培训课程以及时间表交给业主,并在合同签定后征得业主同意后实施。<br />投标人应提供面向系统管理员的应用软件系统结构、日常维护等方面的培训。<br />对于所有培训,投标人必须派出具有相应专业资格和实际工作经验的人员进行培训。<br />投标人须提供详细的培训计划。 <br />以上培训内容的培训费用均包含在投标报价内,项目采购人不再另行支付</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"培训的要求是对人力的要求","type":"choice","options":{"A":"软件需求","B":"过程需求","C":"项目需求","D":"其他需求(包括硬件需求、人力需求等)"},"answer":"D"},{"id":"learncoder_91_2193","stem":"<p>与软件功能无关的,例如开发时间、投入成本、人员招聘等都不能算是需求</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"需求定义第二条:系统或系统部件为了满足合同、标准、规范或其他正式文档所规定的要求而需要具备的条件或能力。在合同和规范中常常需要界定上述内容,所以它们属于需求。","type":"true_false","answer":false},{"id":"learncoder_91_2192","stem":"<p>如果用户没有在需求阶段主动提出对产品的性能质量需求,那么事后发生的性能问题就应该由用户来承担责任。</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"质量需求包括显性和隐性的,是作为软件职业人士应该了解的,无论用户是否主动提起","type":"true_false","answer":false},{"id":"learncoder_91_2191","stem":"<p>性能需求主要关注系统的计算速度有多快</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"性能关注的是系统的资源利用效率,除了cpu(关注计算速度)之外,存储(存储容量)、网络(并发访问)、综合资源效率(吞吐量、负载、响应速度)等都是性能的关注点","type":"true_false","answer":false},{"id":"learncoder_91_2190","stem":"<p>对需求进行分类的主要原因是不同需求的作用不同,读者不同,需要定义在需求文档的不同段落,方便不同读者的快速定位和使用</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"true_false","answer":true},{"id":"learncoder_91_2189","stem":"<p>大量的质量需求都是与具体功能需求耦合在一起的,全局性的质量需求是非常有限的</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"true_false","answer":true},{"id":"learncoder_91_2188","stem":"<p>环境与约束是一类特殊的问题域信息,它们一方面因为容易被遗漏,另一方面是软件开发的重要影响因素,所以才被列为单独类别,要求书写在需求规格说明书的专门段落</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"true_false","answer":true},{"id":"learncoder_91_2187","stem":"<p>数据需求是功能需求的补充,如果功能需求自身清晰地描述了功能处理的数据信息,可以不专门记录数据需求</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"true_false","answer":true},{"id":"learncoder_91_2186","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />一个从没有使用过ATM的新顾客,也能够顺利使用系统完成自助取款;</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"易用性的一种维度,表示易学习性","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"性能需求","D":"约束","E":"质量需求","F":"对外接口"},"answer":"E"},{"id":"learncoder_91_2185","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />使用扫描仪扫描文件,传递回的数据为pdf格式文件。</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"重点是强调软件与硬件之间的传递数据,属于对外接口","type":"choice","options":{"A":"对外接口","B":"功能需求","C":"数据需求","D":"质量需求","E":"约束","F":"硬件需求"},"answer":"A"},{"id":"learncoder_91_2184","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />当订单数量大于现有数量时,系统必须通知操作员</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"重点是“系统必须通知操作员”,要求软件系统有所动作,所以是功能需求","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"质量需求","D":"约束","E":"性能需求","F":"对外接口"},"answer":"A"},{"id":"learncoder_91_2183","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />订单数量不能大于现有库存数量</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"商业规则,是约束的一种","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"质量需求","D":"性能需求","E":"约束","F":"对外接口"},"answer":"E"},{"id":"learncoder_91_2182","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />系统每小时能够处理3000次呼叫</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"系统负载能力,体现了对计算资源的要求","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"性能需求","D":"质量需求","E":"约束","F":"对外接口"},"answer":"C"},{"id":"learncoder_91_2181","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />商品的标识由0~24位字母、数字混合组成的字符串</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"功能需求","B":"质量需求","C":"约束","D":"性能需求","E":"数据需求","F":"对外接口"},"answer":"E"},{"id":"learncoder_91_2177","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />在存储设备发生故障时,系统要在10秒内发现</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"可靠性需求,强调是故障处理。需要注意的是,发生故障不是正常的功能,所以考察的不是CPU的计算能力,不能算是性能需求。<p><br></p>","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"性能需求","D":"约束","E":"质量需求","F":"对外接口"},"answer":"E"},{"id":"learncoder_91_2178","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />数据库与服务器之间的通信必须是加密的</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"安全性需求,质量需求的一种。因为不强调具体的交互数据格式与内容,所以不是对外接口需求","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"性能需求","D":"约束","E":"质量需求","F":"对外接口"},"answer":"E"},{"id":"learncoder_91_2179","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />系统必须能够与Oracle数据库交互</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"Oracle数据库是系统运行的基本环境,而不是普通的其他软件系统,所以是约束不是对外接口。","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"质量需求","D":"性能需求","E":"对外接口","F":"约束"},"answer":"F"},{"id":"learncoder_91_2180","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />商品标识的类型要能够在0.5个人月内更改为长整型</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"可修改性是质量需求的一种","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"约束","D":"性能需求","E":"质量需求","F":"对外接口"},"answer":"E"},{"id":"learncoder_91_2169","stem":"<p>下面是从一个软件规格说明书的一个片段,你判断这段内容是哪种类型的需求<br />2.3. 产品功能<br />2.3.1. 人员管理<br />对本公司的人力资源进行管理。<br />提供功能:新员工信息录入、信息修改(晋升、部门调动、休假、婚姻状况变更)、离职人员归档。<br />2.3.2. 业务管理<br />对本公司的业务进行管理。<br />提供功能:新业务录入、现有业务变更(计划提前或延后、合同金额或付款方式变更、业务内容变更)、已完成的业务归档</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"质量需求","D":"约束","E":"性能需求","F":"对外接口"},"answer":"A"},{"id":"learncoder_91_2168","stem":"<p>下面哪些是功能需求</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"multiple_choice","options":{"A":"一个用户可以借一本书;","B":"如果用户要求借的书已经被借出了,该请求会被追加到等待列表中。","C":"临时工在借书的时候没有优先级","D":"图书馆馆藏一百万本书;","E":"一个临时工可以借一本书"},"answer":"A;B;E"},{"id":"learncoder_91_2170","stem":"<p>下面是从一个软件规格说明书的一个片段,你判断这段内容是哪种类型的需求<br />2.4.1. 扩展性<br />要求结构设计良好,二次开发成本要求低于本次开发成本30%<br />2.4.2. 灵活性<br />支持主流浏览器:IE7,8, FireFox2.0, Google 浏览器。<br />2.4.3. 精度<br />金额相关:小数点后保留2 位有效数字;<br />时间相关:精确到秒;<br />传输过程中的精度:小数点后保留5 位有效数字。<br />2.4.4. 响应要求<br />用户登陆: <= 0.5 秒<br />页面跳转: <= 2 秒<br />2.4.5. 安全性<br />系统管理员(admin)负责系统维护;<br />所有信息保存在MySQL 数据库中;<br />用户密码采用密文形式保存</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"约束","D":"性能需求","E":"质量需求","F":"对外接口"},"answer":"E"},{"id":"learncoder_91_2171","stem":"<p>下列描述当中哪些是有效的功能性需求?请给出你选择的理由</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"另外三个分别是不切实际的期望(软件系统无法控制用户的行为)、数据需求和过程需求(对开发过程中产物制品的要求","type":"choice","options":{"A":"在销售商品之后,系统应该更新库存的商品数量,如果库存的数量低于最低限值,系统应该发出警示信号","B":"开发组应该创建完整、有效的需求规格说明文档、体系结构设计文档、详细设计文档和测试过程记录日志","C":"每一个收银员都应该有一个记录,记录的内容包括名字和ID号。记录应该被建立成链表的形式","D":"用户在使用喷嘴给汽车加过油之后,应该将其放回原处"},"answer":"A"},{"id":"learncoder_91_2172","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />存储设备发生故障时,系统应该在0.5秒内发出警报。</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"性能需求","D":"质量需求","E":"约束","F":"对外接口"},"answer":"C"},{"id":"learncoder_91_2173","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />系统应该能够存储3年的交易数据</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"存储容量体现的是存储资源的使用效率,所以属于性能类型","type":"choice","options":{"A":"功能需求","B":"数据需求","C":"性能需求","D":"质量需求","E":"约束","F":"对外接口"},"answer":"C"},{"id":"learncoder_91_2174","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />默认的信用卡类型是“银联”</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"数据默认值的设定属于数据需求","type":"choice","options":{"A":"功能需求","B":"质量需求","C":"性能需求","D":"约束","E":"数据需求","F":"对外接口"},"answer":"E"},{"id":"learncoder_91_2175","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />需求开发任务的ID为:项目ID+需求ID+开发任务类型+序号</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"数据项定义属于数据需求","type":"choice","options":{"A":"功能需求","B":"质量需求","C":"性能需求","D":"约束","E":"数据需求","F":"对外接口"},"answer":"E"},{"id":"learncoder_91_2176","stem":"<p>说明下列需求分别属于下面的哪种类型:<br />电梯的默认停运楼层必须是最低楼层到最高楼层范围内的某个整数</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"对数据取值范围的约定属于数据需求,是数据的取值域定义","type":"choice","options":{"A":"功能需求","B":"质量需求","C":"约束","D":"性能需求","E":"数据需求","F":"对外接口"},"answer":"E"},{"id":"learncoder_91_2167","stem":"<p>下面哪些是功能需求?</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"multiple_choice","options":{"A":"每门课结束时要考试","B":"一个学生可以选修一门或多门课","C":"每个考试结果要按照成绩进行排名","D":"学生不可以是教师","E":"一个课程最多10个人选","F":"一门课由一名教师讲授"},"answer":"A;B;C;F"},{"id":"learncoder_91_2166","stem":"<p>下面哪些含有非功能需求内容:</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"multiple_choice","options":{"A":"按下开关,灯要在1秒内点亮;","B":"如果房间是黑暗的,那么按下开关,灯要被点亮。","C":"房间的亮度要足以阅读;","D":"如果一个人正在阅读,那么灯光要一直保持","E":"按下开关,灯点亮","F":"在房间空了2分钟后,灯要自己灭掉"},"answer":"A;C"},{"id":"learncoder_91_2165","stem":"<p>下面哪些是功能需求 IPhone需要:</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"multiple_choice","options":{"A":"能连接互联网;","B":"支持3g网络","C":"能像相机一样拍照;","D":"能提供一个虚拟键盘;","E":"可以通过usb线连接pc","F":"可移动的媒体播放机;"},"answer":"C;D;F"},{"id":"learncoder_91_2164","stem":"<p>针对下面的需求描述,你认为:<br />“系统在执行计算时,要给出正确的结果”</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"需求有问题,不正确","B":"需求没问题","C":"需求有问题, 不切实际","D":"需求有问题,模糊"},"answer":"A"},{"id":"learncoder_91_2163","stem":"<p>针对下面的需求描述,你认为:<br />“系统的体系结构设计应该易于在将来增加新功能”</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"需求有问题,模糊","B":"需求没问题","C":"需求有问题,不正确","D":"需求有问题, 不切实际"},"answer":"A"},{"id":"learncoder_91_2162","stem":"<p>针对下面的需求描述,你认为:<br />“购买汽油的价格计算方法为:单价 * 数量”</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"需求没问题","B":"需求有问题,不正确","C":"需求有问题, 不切实际","D":"需求有问题,模糊"},"answer":"A"},{"id":"learncoder_91_2161","stem":"<p>下面是从一个软件规格说明书的一个片段,你判断这段内容是哪种类型<br />业务现状与分析<br />单一客户经理渠道从“绿色通道”变成制约集团发展的瓶颈<br />其他营销服务界面缺乏有效识别集团客户的工具<br />目前公司缺少一套贯穿全省各级公司和各部门的统一业务调度系统来协助跨部门工作<br />各节点缺乏受理标准时限规范,内部资源调度无法快速响应,<br />客户经理在面对客户时无法进行服务时限承诺,降低了集团业务的客户满意<br />业务支撑平台不断增多,且均需要分散维护,服务质量难以保障</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"需求","B":"问题域信息","C":"问题","D":"软件规格"},"answer":"C"},{"id":"learncoder_91_2160","stem":"<p>需求处理的目标是需求,所以需求处理的最佳路径是直接获取需求,不用太关注问题</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"true_false","answer":false},{"id":"learncoder_91_2159","stem":"<p>需求与问题相对应,规格说明与需求相对应</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"规格说明是需求的一种类型,并不是需求的反面","type":"true_false","answer":false},{"id":"learncoder_91_2158","stem":"<p>问题是用户感受最深的,最容易发现,所以需求的获取一般从问题开始,问题的反推可以得出需求</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"true_false","answer":true},{"id":"learncoder_91_2157","stem":"<p>需求的满足程度是可以打折扣的,但是问题域信息必须完全尊重</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"true_false","answer":true},{"id":"learncoder_91_2156","stem":"<p>下面信息内容是哪一种?<br />超市的经营成本太高</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>问题域信息<br></p>","B":"<p>软件规格<br></p>","C":"<p>需求<br></p>","D":"<p>问题<br></p>"},"answer":"D"},{"id":"learncoder_91_2155","stem":"<p>下面信息内容是哪一种?<br />超市员工分为收银员、客户经理和总经理</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>问题<br></p>","B":"<p>软件规格<br></p>","C":"<p>问题域信息<br></p>","D":"<p>需求<br></p>"},"answer":"C"},{"id":"learncoder_91_2154","stem":"<p>下面信息内容是哪一种?<br />超市的人力成本应该降低</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>问题域信息<br></p>","B":"<p>需求<br></p>","C":"<p>问题<br></p>","D":"<p>软件规格<br></p>"},"answer":"B"},{"id":"learncoder_91_2153","stem":"<p>下面信息内容是哪一种?<br />收银员在计算款项时经常出错</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>问题域信息<br></p>","B":"<p>软件规格<br></p>","C":"<p>问题<br></p>","D":"<p>需求<br></p>"},"answer":"C"},{"id":"learncoder_91_2152","stem":"<p>下面信息内容是哪一种?<br />收银员可以使用系统计算应付账款</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>问题域信息<br></p>","B":"<p>软件规格<br></p>","C":"<p>问题<br></p>","D":"<p>需求<br></p>"},"answer":"B"},{"id":"learncoder_91_2151","stem":"<p>下面信息内容是哪一种?<br />收银员使用扫描仪输入商品条形码</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>问题域信息<br></p>","B":"<p>软件规格<br></p>","C":"<p>问题<br></p>","D":"<p>需求<br></p>"},"answer":"B"},{"id":"learncoder_91_2150","stem":"<p>下面信息内容是哪一种?<br />超市的成本主要由人力成本和库存成本组成</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>问题<br></p>","B":"<p>软件规格<br></p>","C":"<p>问题域信息<br></p>","D":"<p>需求<br></p>"},"answer":"C"},{"id":"learncoder_91_2149","stem":"<p>下面信息内容是哪一种?<br />系统的成本计算为:成本=人力成本+库存成本</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>问题域信息<br></p>","B":"<p>软件规格<br></p>","C":"<p>问题<br></p>","D":"<p>需求<br></p>"},"answer":"B"},{"id":"learncoder_91_2148","stem":"<p>下面信息内容是哪一种?<br />系统能够快速完成复杂情况的价格计算,提高收银员工作效率</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>问题域信息<br></p>","B":"<p>问题<br></p>","C":"<p>需求<br></p>","D":"<p>软件规格<br></p>"},"answer":"C"},{"id":"learncoder_91_2147","stem":"<p>下面是从一个软件规格说明书的一个片段,你判断这段内容存在哪些问题<br />先进性:软件系统采用三层B / S 系统结构,以“界面表示层-逻辑处理层-数据访问层”分层设计实现。采用国际上先进成熟的、厂商广泛支持的计算机技术、网络技术与软件技术对系统进行规划,保证系统整体架构在未来几年内都处于国际领先的地位。<br />安全性:软件系统具有较高的安全要求,系统必须具备充分的安全措施,包括具备严格的权限控制机制和完备的日志记录,以确保信息安全。<br />可靠性:保证系统核心功能可以7×24小时连续运行;<br />规范性:系统必须遵循国家有关法律法规要求,符合国家有关标准要求以及关于信息系统建设的各项标准和规范。</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"multiple_choice","options":{"A":"<p>不切实际<br></p>","B":"<p>不完备<br></p>","C":"<p>不必要<br></p>","D":"<p>不正确<br></p>","E":"<p>模糊<br></p>"},"answer":"A;C;E"},{"id":"learncoder_91_2146","stem":"<p>针对下面的需求描述,你认为:<br />“在付款流程完成之后,相关信息应该被追加到一个日志文件中”</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>需求没问题<br></p>","B":"<p>需求有问题,不正确<br></p>","C":"<p>需求有问题,模糊<br></p>","D":"<p>需求有问题, 不切实际<br></p>"},"answer":"C"},{"id":"learncoder_91_2145","stem":"<p>针对下面的需求描述,你认为:<br />“系统应该一周7天每天24小时可用”</p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>需求没问题<br></p>","B":"<p>需求有问题,不正确<br></p>","C":"<p>需求有问题, 不切实际<br></p>","D":"<p>需求有问题,模糊<br></p>"},"answer":"C"},{"id":"learncoder_91_2144","stem":"<p>下面是从一个软件规格说明书的一个片段,你判断这段内容是哪种类型<br>3.3.2. 人员信息变更<br>目的:修改员工信息。<br>功能:提供员工信息修改界面,并将修改后的信息保存进MySQL 数据库。<br>步骤:<br>1. 在界面上修改员工信息。<br>2. 操作者权限检查。<br>3. 操作成功,返回人员管理界面;<br>操作失败,提示错误信息。<br>流程图:<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxSwJiAZQlEAABUv8-nwTk960.png\"></p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>需求</p>","B":"<p>问题域信息</p>","C":"<p>软件规格</p>","D":"<p>问题</p>"},"answer":"C"},{"id":"learncoder_91_2143","stem":"<p>下面是从一个软件规格说明书的一个片段,你判断这段内容是哪种类型的需求</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxSvkCAFKIVAAC9Ol6pQ9c163.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.需求基础","analysis":"","type":"choice","options":{"A":"<p>数据需求</p>","B":"<p>对外接口</p>","C":"<p>质量需求</p>","D":"<p>性能需求</p>","E":"<p>功能需求</p>","F":"<p>约束</p>"},"answer":"A"},{"id":"learncoder_98_2562","stem":"<p>用例图中的Actor就是系统的用户。</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"一个用户会有多个角色,每个角色都是独立actor。而且非用户但需要与系统交互的其他软件系统也可能扮演actor的作用。","type":"true_false","answer":false},{"id":"learncoder_98_2561","stem":"<p>用例之间的<<include>>关系可以避免不同用例之间出现描述文本重复。</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"true_false","answer":true},{"id":"learncoder_98_2560","stem":"<p>真正让用例变得重要的是用例图后面的用例文本描述,而不是用例图。</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"用例文本描述是需求内容,所以它才变得重要","type":"true_false","answer":true},{"id":"learncoder_98_2559","stem":"<p>《extend》关系可以将一个非常复杂难以描述的用例合理分解为多个不同用例。</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"true_false","answer":true},{"id":"learncoder_98_2558","stem":"<p>在开发后期扩展前期用例时,《extend》关系可以让前期用例文本保持不变。</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"true_false","answer":true},{"id":"learncoder_98_2557","stem":"<p>复杂用例关系《include》、《extend》、继承等容易让用例模型变得难以理解,考虑到用例文本描述才是更重要的内容,所以应该尽量限制这些复杂关系的使用。</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"true_false","answer":true},{"id":"learncoder_98_2555","stem":"<p>参与者和用例之间的关系实质是:</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"choice","options":{"A":"目标","B":"交互","C":"拥有","D":"创造"},"answer":"B"},{"id":"learncoder_98_2556","stem":"<p>主参与者和辅助参与者之间的关系是</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"choice","options":{"A":"主参与者和辅助参与者有共同的目标,共同发起用例,但是主参与者更重要。","B":"主参与者是人,辅助参与者是硬件设备或其他软件系统。","C":"主参与者拥有目标,发起一个用例,辅助参与者参与用例,帮助主参与者完成目标。","D":"主参与者和辅助参与者有各自不同的目标,参与同一个用例,但是主参与者的目标更重要。"},"answer":"C"},{"id":"learncoder_98_2554","stem":"<p>下面哪些用例之间的关系是用例图支持的</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"<p>聚合是类图的关系,依赖是组件图的关系。前导和后续在各种图中都不支持</p>","type":"choice","options":{"A":"聚合","B":"包含","C":"依赖","D":"前导和后续"},"answer":"B"},{"id":"learncoder_98_2553","stem":"<p>搜索用例和按照名称搜索、按照日期搜索这两个用例之间的关系是</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"choice","options":{"A":"包含","B":"扩展","C":"关联","D":"继承"},"answer":"D"},{"id":"learncoder_98_2552","stem":"<p>现金付款用例和代金券付款、刷卡付款这两个用例之间的关系是</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"choice","options":{"A":"包含","B":"继承","C":"扩展","D":"关联"},"answer":"C"},{"id":"learncoder_98_2551","stem":"<p>ATM机取款、存款、转账这三个用例和查看账户余额用例之间可能的关系是</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"choice","options":{"A":"包含","B":"扩展","C":"继承","D":"关联"},"answer":"A"},{"id":"learncoder_98_2550","stem":"<p>下面哪些内容可以建模为用例</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"multiple_choice","options":{"A":"一次数据库读取","B":"一次用户与系统的交互","C":"一个复杂的计算","D":"一次事件处理过程","E":"一个报表展示界面","F":"一个用户任务"},"answer":"D;F"},{"id":"learncoder_98_2549","stem":"<p>下面哪些可能会被建模为actor</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"multiple_choice","options":{"A":"其他软件系统","B":"特殊硬件","C":"网络","D":"用户"},"answer":"A;B;D"},{"id":"learncoder_98_2548","stem":"<p>下列用例间关系正确的是</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"multiple_choice","options":{"A":"面试 继承 招聘用例","B":"考试用例 包含 身份验证用例","C":"开卷考试用例 继承 考试用例","D":"退货用例 扩展 送货用例","E":"用户管理用例 包含 新用户注册用例","F":"退货用例 扩展 销售用例<p><br></p>"},"answer":"B;C"},{"id":"learncoder_98_2547","stem":"<p>粒度恰当的用例具有下列哪些特点</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"multiple_choice","options":{"A":"同一类用户发起和参与","B":"同一段时间内发生","C":"同一个地点发生","D":"完成业务增值"},"answer":"A;B;D"},{"id":"learncoder_98_2546","stem":"<p>用例建模的主要目的是:</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"choice","options":{"A":"捕获用户","B":"捕获目标","C":"捕获非功能需求","D":"捕获功能需求"},"answer":"D"},{"id":"learncoder_98_2545","stem":"<p>下图是一个关于借书过程的用例描述,正确吗?</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxidIaAUL1EAAC2Gh4fYFs595.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"混淆了用例图与流程图,用例描述功能特性,不描述流程。","type":"true_false","answer":false},{"id":"learncoder_98_2544","stem":"<p>下图是一个借阅人搜索图书的用例描述,它正确吗?</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxidQqADF7CAADIWVSfH_I106.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"应该是继承关系,继承代表特化,扩展是主流程中发生了新的分支。","type":"true_false","answer":false},{"id":"learncoder_98_2543","stem":"<p>很多人养猫。假设有一个系统帮助养猫人定位猫的位置,那么它的用例图应该是下面的哪一个?</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"choice","options":{"A":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxidZ6AX5bSAAAXO0LThBU900.png\"><br></p>","B":"<p>前面都不对</p>","C":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxidaOAJcMFAAAfuzosJRk652.png\"><br></p>","D":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxidZiADGIBAAAgOdbhMm0663.png\"><br></p>"},"answer":"C"},{"id":"learncoder_98_2542","stem":"<p>一个顾客与销售公司达成订单的步骤包括:<br>1、查看产品目录,选择产品;<br>2、选择一个销售代表<br>3、提供快递地址;<br>4、付款<br>5、从销售代表那里接受快递号。<br>请结合上面描述,为销售业务建立简单的用例图。</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxid_qARwZkAAD_EL0BtYk956.png\"><br></p>"},{"id":"learncoder_98_2541","stem":"<p>智能售货机的基本功能如下:<br>顾客购买产品<br>供货员补货<br>供货员拿走机器中的钱<br>请为此建立用例图</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxieD2ALX7HAACjgRRGF44537.png\"><br></p>"},{"id":"learncoder_98_2540","stem":"<p>为帮助人们更好地参加“Java程序员认证”考试,需要开发一个在线训练系统。<br>在系统中用户可以请求进行小测验。系统会从数据库中选择一些题目,组成一份试卷,进行测验。测验中,如果用户请求,系统会给出答题的线索提示。测验之后系统会自动批改用户答案,。<br>导师负责提供题目和线索。有检查人员检查题目的质量,判定题目是否合格。<br>请为这样一个在线训练系统建立简单的用例图。</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxieGCAVDxiAAC9HOsK2Tc296.png\"><br></p>"},{"id":"learncoder_98_2539","stem":"<p>一个博物馆需要开发一个软件系统跟踪博物馆的游览活动。在一个游客团到达后,一名员工必须要记下日期、开始时间、人员数量等游览活动信息。员工还要从可选的博物馆导游中为游客团分配一名导游。被分配的导游会及时得到工作分配通知。在一次游览中,导游要记录可能发生的意外事件,例如游客生病。事件要记清楚所发生的游览活动、时间和详细描述。意外事件报告要提交给博物馆的安全办公室。</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxieLqAKEM9AAB9825B5u8532.png\"><br></p>"},{"id":"learncoder_98_2538","stem":"<p>大学图书馆的简单版本。图书馆管理系统必须跟踪记录书的信息,包括书目和具体书。书目详细内容包括题目、作者、出版社、版本、出版日期、ISBN、类别号。具体书需要描述书号、状态(可用还是已借出)、应归还日期。<br>图书馆管理系统还需要跟踪记录借阅者信息。借阅者有多种类型——教师、研究生、本科生,每种类型有不同的权限。所有的借阅者都需要记录姓名、地址、电话号码。教师需要额外记录办公室地址和办公室电话。研究生需要额外记录专业和导师。本科生需要额外记录专业和学分级。<br>图书馆管理系统需要记录借阅信息。借阅者把一系列书拿到流转台,管理员把书记录出馆,即形成借阅。一个借阅者可以有多次借阅记录,一次借阅可以借多本书。<br>借阅者可以浏览馆藏书目,查看各书目是否有书可以借阅。如果借阅者想借的书已经借出,那么他可以订阅该书目,包括订阅日期、优先级、完成日期。一个借阅者一次只能订阅一个书目。<br>借阅者还书时把书带到流转台,放入归还槽。管理员归还借阅记录中的书,同时把书入馆。<br>管理还要跟踪记录新书信息。<br>图书馆的管理者需要打印书目单报告,查看被订阅的书、过期未还的书。如果书被损坏,管理者可以核销该书。</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxieTqAMNCzAAGEa2P2fZw566.png\"><br></p>"},{"id":"learncoder_98_2537","stem":"<p>一个诊所有三个牙医和许多牙医卫生员,想开发一个系统管理病人信息。系统不需要保持任何医疗记录,只需要处理病人事宜。每个病人建立一个记录,包括姓名、出生日期、性别、初诊日期、终诊日期。病人记录按家庭分组。每个家庭需要记录户主姓名、地址和电话。每个家庭联系一个保险员记录。保险员记录包括保险公司名称、地址、账单联系人、电话号码。<br>在诊所中,每个员工(牙医、牙医卫生员、X光技术员)都有一个记录,包括姓名、地址、电话。 <br>每一次办公室诊疗都要保存信息,包括日期、自付费用、预付保险账号、实付保险费用。一个病人可以有多次诊疗,一次诊疗只针对一个病人。一次诊疗需要多名工作人员共同参与一个或多个工作程序。工作程序的详细信息需要记录下来,包括程序类型、描述、针对的牙齿、自付费用、总费用、保险费用、保险公司拒付费用。<br><br>系统需要跟踪记录单据信息。有两种单据类型:给保险公司的单据和给家庭单据。两种单据有相类似的地方,都列出了每一次诊疗信息、工作程序信息。<br>单据还包括发送日期、总费用、已支付费用、支付日期、拒绝费用。家庭单据还需要记录自付费用和预期支付日期。保险单据还记录保险支付费用和预期支付日期。<br>接待员要跟踪和录入病人和家庭户主的信息,要记录病人的诊疗信息。病人信息也可以被业务管理者录入和维护。业务管理者还维护诊所员工的信息。业务管理者还要打印单据。<br>病人的单据每月打印一次,寄送给家庭户主。保险单据每周打印一次。单据打印之后,业务管理者会检查一部分单据以确保内容正确。<br>在收到付款时,业务管理员还需要输入付款信息,包括付款日期和数额。业务管理员可以打印一份逾期未付款的单据报告,列出这些单据的户主信息。<br>诊所员工负责录入他们参与的诊疗程序信息,有时会查看他们一周或一个月内参与的诊疗程序报告。</p>","key_points":"知识点.练习.专业课练习.软件工程.用例描述","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxieWuAarJTAAHcCrvvJy8690.png\"><br></p>"},{"id":"learncoder_95_2480","stem":"<p>Java企业级开发中常用的设计模式有哪些?</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"short_answer","answer":"按照分层开发的观点,可以将应用划分为:表示层、业务逻辑层和持久层,每一层都有属于自己类别的设计模式。<div>表示层设计模式:<div>1)Interceptor Filter:拦截过滤器,提供请求预处理和后处理的方案,可以对请求和响应进行过滤。</div><div>2)Front Controller:通过中央控制器提供请求管理和处理,管理内容读取、安全性、视图管理和导航等功能。</div><div>3)View Helper:视图帮助器,负责将显示逻辑和业务逻辑分开。显示的部分放在视图组件中,业务逻辑代码放在帮助器中,典型的功能是内容读取、验证与适配。</div><div>4)Composite View:复合视图</div><div>业务逻辑层设计模式:</div><div>1)Business Delegate:业务委托,减少表示层和业务逻辑层之间的耦合。</div><div>2)Value Object:值对象,解决层之间交换数据的开销问题。</div><div>3)Session Façade:会话门面,隐藏业务逻辑组件的细节,集中工作流程。</div><div>4)Value Object Assembler:灵活的组装不同的值对象</div><div>5)Value List Handler:提供执行查询和处理结果的解决方案,还可以缓存查询结果,从而达到提升性能的目的。</div><div>6)Service Locator:服务定位器,可以查找、创建和定位服务工厂,封装其实现细节,减少复杂性,提供单个控制点,通过缓存提高性能。</div><div>持久层设计模式:</div><div>1)Data Access Object:数据访问对象,以面向对象的方式完成对数据的增删改查。<p><br></p></div></div>"},{"id":"learncoder_95_2479","stem":"<p>什么是迭代器(Iterator)?</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"short_answer","answer":"Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的迭代方法。迭代器可以在迭代的过程中删除底层集合的元素。"},{"id":"learncoder_95_2478","stem":"<p>动态代理:</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"short_answer","answer":"不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过类实例化一个动态代理,在实例化动态代理时将真实对象及装备注入到动态代理中,向客户端公开的是动态代理, 当客户端调用动态代理方法时,动态代理根据类的返射得到真实对象的Method,调用装备的invoke方法,将动态代理、Method、方法参数传与装备的invoke方法,invoke方法在唤起method方法前或后做一些处理。 1、产生动态代理的类: java.lang.refect.Proxy 2、装备必须实现InvocationHandler接口实现invoke方法"},{"id":"learncoder_95_2477","stem":"设计模式是一种对优秀代码的复用技术","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"设计模式复用的是设计,不是代码","type":"true_false","answer":false},{"id":"learncoder_95_2470","stem":"在Java类库中有WindowAdapter代码如下(注意:各方法的代码并不是被省略了,而是真的的为空)。该类采用了适配器Adapter模式吗?&nbsp;<pre><code>public abstract class WindowAdapter implements WindowListener {<br> public void windowOpened(WindowEvent e) {}<br> public void windowClosing(WindowEvent e) {}<br> public void windowClosed(WindowEvent e) {}<br> public void windowIconified(WindowEvent e) {}<br> public void windowDeiconified(WindowEvent e) {}<br> public void windowActivated(WindowEvent e) {}<br> public void windowDeactivated(WindowEvent e) {}<br>}</code></pre>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"虽然名称里面有Adapter,但其实现完全不符合Adapter的结构,所以不是Adapter模式。另外,在 java api 中,术语Adapter还用于专指为接口的所有方法提供空实现的便利类。当您想要实现接口, 但只对接口的几种方法感兴趣时, 这些方便类非常有用。您可以扩展接口的适配器类, 只重写您感兴趣的方法, 而不是实现接口并编写一堆空方法","type":"true_false","answer":true},{"id":"learncoder_95_2469","stem":"你正在开发与新硬件设备交互的软件, 并急于根据实际硬件进行测试。硬件制造商有他们计划发布的驱动程序的测试版, 但警告说设备驱动程序的接口可能会在后续日期发生变化。设备驱动程序会在整个代码中到处使用, 你担心如果后期这些接口发生修改会带来很大的风险。\n可以使用哪个设计模式解决这个问题?","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"适配器模式所针对的就是接口兼容和变化问题,所以Adapter适合于解决该问题","type":"choice","options":{"A":"Bridge","B":"Strategy","C":"以上都不是","D":"Mediator","E":"Adapter","F":"Decorator"},"answer":"E"},{"id":"learncoder_95_2468","stem":"下面哪个模式很好地体现了“组合优于继承”的面向对象设计原则?","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"“组合优于继承”针对的是复用,而composite、decorator、bridge中使用组合都不是这个目的,composite、decorator是为了组织复合结构,bridge是为了匹配接口和实现,所以它们都没有体现“组合优于继承”原则。Factory Method完全没有使用组合关系,只使用了普通关联。Adapter的目的是复用Adaptee,采用了组合的方式(没有直接继承Adaptee),正体现了“组合优于继承”的面向对象设计原则。","type":"choice","options":{"A":"Composite","B":"Bridge","C":"Adapter","D":"Decorator","E":"Factory Method"},"answer":"C"},{"id":"learncoder_95_2467","stem":"你在一个设计中已经使用了观察者Observer模式,建立了如下代码&nbsp;<div><pre><code>class Observable {<br> public attachObserver(Observer o);<br> public detachObserver(Observer o);<br> public notifyObservers();<br>}</code></pre></div><div>现在有另一个类S也需要执行Observable行为,但是该类已经继承了类A,如下所示。\nclass S extends A {\n&nbsp;&nbsp; . . .\n}\n你所使用的编程语言不支持多继承,S无法再继承Observable,你应该使用哪个设计模式解决该问题?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"这是典型的接口兼容和适配问题。Observable就是Target,继承它建立一个Adapter,执行具体功能时委托给S,S就是Adaptee","type":"choice","options":{"A":"Facade","B":"Mediator","C":"以上都不是","D":"Adapter","E":"Proxy","F":"Decorator","G":"Command"},"answer":"B"},{"id":"learncoder_95_2466","stem":"很多Client代码一直使用SquarePeg的insert方法,其代码如下&nbsp;<div><pre><code>public class SquarePeg {<br> public void insert(String str) {<br> System.out.println(\"SquarePeg insert(): \" + str);<br> }<br>}</code></pre></div><div>因为系统扩展,整合了另一个现存系统,引入了改系统中的RoundPeg类,其代码如下。&nbsp;</div><div><pre><code>public class RoundPeg {<br> public void insertIntoHole(String msg) {<br> System.out.println(\"RoundPeg insertIntoHole(): \" + msg);<br> }<br>}</code></pre></div><div>原来使用SquarePeg.insert的很多Client都需要能够使用RoundPeg.insertIntoHole。\n(1)哪个设计模式适合解决这个问题?\n给出方案代码<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"short_answer","answer":"(1)Adaptor模式适合解决该问题\n(2)增加新代码如下,其他代码保持不变。<pre><code>public class PegAdapter extends SquarePeg {<br> private RoundPeg roundPeg;<br> public PegAdapter(RoundPeg peg) {<br> this.roundPeg = peg;<br> }<br> public void insert(String str) {<br> roundPeg.insertIntoHole(str);<br> }<br>}</code></pre><p><br></p>"},{"id":"learncoder_95_2465","stem":"一个软件系统中有排序功能被广泛使用,为了将来容易扩展,系统定义了统一的接口如下。<div><pre><code>public interface Sorter {<br> public int[] sort(int[] numbers); <br>}</code></pre></div><div>如果需要增加新的排序算法,只需要增加一个实现该接口的新类即可。\n现在软件系统中整合了一个已有的子系统,其中有代码如下:&nbsp;</div><div><integer><integer><integer><pre><code>public class NumberSorter { <br> public List sort(List numbers) { <br> //sort and return <br> return new ArrayList(); <br> } <br>}</code></pre></integer></integer></integer></div><div><integer><integer><integer>因为是已有代码,无法再按照之前设想的思路处理。\n(1)哪个设计模式适合解决该问题?\n给出解决方案代码</integer></integer></integer></div>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"short_answer","answer":"(1)Adapter模式\n(2)增加下面代码,其他保持不变&nbsp;<pre><code>public class SortListAdapter implements Sorter { <br> @Override <br> public int[] sort(int[] numbers) { <br> //convert the array to a List <br> List numberList = new ArrayList(); //call the adapter <br> NumberSorter sorter = new NumberSorter(); <br> numberList = sorter.sort(numberList); //convert the list back to an array and return <br> return sortedNumbers; <br> } <br>}</code></pre>"},{"id":"learncoder_95_2464","stem":"在抽象工厂Abstract Factory模式中,隐含使用了工厂方法Factory Method模式","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Abstract Factory中的每一个creatProduct方法都使用了Factory Method模式","type":"true_false","answer":false},{"id":"learncoder_95_2463","stem":"建造具体类的模式是Factory,建造抽象类的模式是Abstract Factory","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Abstract Factory的关键在于Factory本身是有抽象继承结构的,并不是指被创建的对象是抽象的","type":"true_false","answer":false},{"id":"learncoder_95_2476","stem":"设计模式是软件系统中最为高质量的部分,是核心体系结构","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"设计模式不是体系结构","type":"true_false","answer":false},{"id":"learncoder_95_2475","stem":"设计模式本质上就是编程中经常会重复出现的代码","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"设计模式是重复出现的,但重复出现的未必是设计模式。设计模式是针对重复出现问题的有效解决方案,它的重点是问题!","type":"true_false","answer":false},{"id":"learncoder_95_2474","stem":"HashTable是一种常见的设计模式","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"HashTable是数据结构,不是设计模式","type":"true_false","answer":false},{"id":"learncoder_95_2473","stem":"设计模式比代码库更加抽象","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"设计模式是设计,代码库是实现,所以设计模式更加抽象","type":"true_false","answer":true},{"id":"learncoder_95_2472","stem":"设计模式与数据结构和算法有相似点,但处理的粒度和抽象层次不同","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"相似点是都在针对重复性复杂问题复用有效经验,但数据结构和算法处理的粒度是类型和算法,抽象层次在代码组织上。设计模式处理的粒度是类结构,抽象层次在模块划分上","type":"true_false","answer":true},{"id":"learncoder_95_2471","stem":"了解设计模式不仅需要静态结构类图,还需要动态结构顺序图","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"设计模式是设计思想,其中包括动态协作过程,最有效的动态协作描述就是顺序图","type":"true_false","answer":true},{"id":"learncoder_95_2462","stem":"在Strategy模式中,可以灵活设置不同的策略。有可能决策和判定具体使用哪种策略的类是","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"依据信息专家原则,谁拥有能够判定具体策略的信息,谁就应该执行判定行为。该信息可能属于Context、也可能属于前一个ConcreteStrategy、也可能位于Client或Main方法所在类(启动类、控制类),所以以上答案皆有可能。对于一个具体例子来说,该信息只会位于一个地方,只有一个类承担判定职责","type":"multiple_choice","options":{"A":"Main方法所在类","B":"Context","C":"Client","D":"ConcreteStrategy"},"answer":"A;B;C;D"},{"id":"learncoder_95_2461","stem":"单件模式Singleton的实质是编程语言提供的构造方法无法满足需要,甚至会带来负效果。所以在实现Singleton时首先需要屏蔽语言提供的构造方法,然后再提供新的构造接口","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"理由如题干所述","type":"true_false","answer":true},{"id":"learncoder_95_2460","stem":"单件Singleton模式的适用场景只能是:如果有超过一个的对象实例存在就会导致程序错误的场景。如果一个场景中某个对象实例只有一个能够正常工作,有多个复制也可以正常工作,那么就不应该使用Singleton","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Singleton是有副作用的,它依赖于共享Static机制,而共享会导致不好的耦合。所以,除非必要(不控制会带来负效果),否则不宜多用","type":"true_false","answer":true},{"id":"learncoder_95_2459","stem":"单件Singleton模式使用的Static机制会造成某种程度的共享,是有副作用的","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"true_false","answer":true},{"id":"learncoder_95_2458","stem":"单件Singleton是较为常用的设计模式,像界面类、持久化类、控制类等等都可以使用Singleton","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Singleton的使用场景是如果存在超过一个的对象实例就会造成负效果。而界面类、持久化类、控制类等在存在对个实例时基本不会出现负效果,所以不应该使用Singleton,除极少数(共享)情况之外","type":"true_false","answer":false},{"id":"learncoder_95_2457","stem":"单件Singleton模式使用的Static机制和全局变量是一样的机制","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"虽然Singleton的Static机制是全局性的,但是对SingletonStatic变量的访问是受控的,而全局变量的访问是不受控的,所以它们之间还是不一样的","type":"true_false","answer":false},{"id":"learncoder_95_2456","stem":"“隐藏类的构造函数,并提供静态方法代替构造函数的作用,这样客户就可以在不知道对象如何被构造的情况下使用对象”。符合上述说法的设计模式是","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"只有Singleton会使用隐藏构造函数,代之以静态方法","type":"choice","options":{"A":"建造者Builder","B":"单件Singleton","C":"工厂方法Factory method","D":"抽象工厂Abstract factory","E":"原型Prototype"},"answer":"E"},{"id":"learncoder_95_2455","stem":"假设你正在开发一个应用程序,现在需要建立日志功能,把产生的各类数据都记录到一个指定的日志文件之中。\n你认为哪个设计模式适合处理这种情况?","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"建立日志是对象创建功能,所以只有Singleton和Abstract Factory合适。但Abstract Factory适用场景是建立产品组合,Singleton是控制构造对象数量不超过1,很明显最终是Singleton模式","type":"choice","options":{"A":"观察者Observer","B":"单件Singleton","C":"职责链Chain of responsibility","D":"抽象工厂Abstract factory"},"answer":"B"},{"id":"learncoder_95_2454","stem":"有Singleton的两种代码写法如下\n方案一&nbsp;<div><pre><code>public class Singleton {<br> private Singleton() {<br> }<br> static private Singleton instance = null;<br> static public Singleton instance() {<br> if (instance == null) {<br> synchronized (Singleton.class) {<br> if (instance == null) {<br> instance = new Singleton();<br> }<br> }<br> }<br> return instance;<br> }<br>}</code></pre></div><div>&nbsp;方案二&nbsp;</div><div><pre><code>public class Singleton {<br> private Singleton() {<br> }<br> static private Singleton instance = null;<br> static public Singleton instance() {<br> synchronized (Singleton.class) {<br> if (instance == null) {<br> instance = new Singleton();<br> }<br> }<br> return instance;<br> }<br>}</code></pre></div><div>哪种方案更好?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"方案一会造成并发错误,可能A线程正在构造instance但还未完成,此时线程B因为判定第一个非NULL而返回了instance","type":"choice","options":{"A":"方案一","B":"都一样","C":"方案二"},"answer":"C"},{"id":"learncoder_95_2453","stem":"有Singleton实现代码如下<div><pre><code>public class Singleton { <br> private Singleton() { } <br> static private Singleton instance = new Singleton( ); <br> static public Singleton instance() { <br> return instance; <br> }<br> }</code></pre><div>该实现方案能够适应并发环境吗?<p><br></p></div></div>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"在static变量第一次被引用是就会触发实例化,所以能够解决并发问题","type":"choice","options":{"A":"能","B":"不能"},"answer":"A"},{"id":"learncoder_95_2452","stem":"使用synchronized语句实现并发环境下的Singleton模式","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"short_answer","answer":"<pre><code>public class Singleton {<br> private Singleton() {<br> }<br> static private Singleton instance = null;<br> static public Singleton instance() {<br> synchronized (Singleton.class) {<br> if (instance == null) {<br> instance = new Singleton();<br> }<br> }<br> return instance;<br> }<br>}</code></pre><p><br></p>"},{"id":"learncoder_95_2451","stem":"使用静态初始化实现并发环境下的Singleton模式","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"short_answer","answer":"<pre><code>public class Singleton {<br> private Singleton() {<br> }<br> static private Singleton instance = new Singleton();<br> static public Singleton instance() {<br> return instance;<br> }<br>}</code></pre>"},{"id":"learncoder_95_2450","stem":"迭代器Iterator模式违反了面向对象设计中数据与行为相集中的原则","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Iterator模式中,数据都由Aggregate持有,Iterator每次都需要访问Aggregate的数据,所以的确是违反数据与行为相集中的原则。但这个违反是为了取得更高的内聚,就像把持久化、界面与业务逻辑相分离一样","type":"true_false","answer":true},{"id":"learncoder_95_2449","stem":"迭代器Iterator模式的关键是处理聚合对象的访问,并不是体现单一职责原则的典型","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"迭代器Iterator模式的核心是把功能抽象和控制(访问)抽象相分离,是典型的单一职责情景","type":"true_false","answer":false},{"id":"learncoder_95_2448","stem":"迭代器Iterator模式违有解耦作用,Aggregate和Iterator之间的耦合被控制地非常低","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Aggregate和Iterator之间的耦合度很高,Iterator自身没有数据,完全依赖于Aggregate。Iterator的解耦作用更多地体现为外界Client不再依赖于Aggregate的结构","type":"true_false","answer":false},{"id":"learncoder_95_2447","stem":"学籍管理系统中一个课程有很多学生,现在需要遍历这些学生,可以使用哪个设计模式?","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Iterator模式的典型适用场景就是遍历集合对象","type":"choice","options":{"A":"Chain of Responsibility","B":"Builder","C":"Decorator","D":"Iterator"},"answer":"D"},{"id":"learncoder_95_2446","stem":"有一段代码如下:<div><pre><code>public interface Index {<br> public boolean hasNext();<br> public Object next();<br>}<br>public interface Container {<br> public Iterator getIterator();<br>}<br>public class NameRepository implements Container {<br> public String names[] = {\"Robert\", \"John\", \"Julie\", \"Lora\"};<br> @Override<br> public Index getIndex() {<br> return new NameIndex();<br> }<br> private class NameIndex implements Index {<br> int index;<br> @Override<br> public boolean hasNext() {<br> if (index &lt; names.length) {<br> return true;<br> }<br> return false;<br> }<br> @Override<br> public Object next() {<br> if (this.hasNext()) {<br> return names[index++];<br> }<br> return null;<br> }<br> }<br>}</code></pre></div><div>分析一下,该段代码使用了哪种设计模式?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Index的使用是典型的Iterator,它作为访问控制器,控制对集合对象Container的遍历","type":"choice","options":{"A":"Composite","B":"使用了设计模式,但列出的几个都不是","C":"Bridge","D":"Strategy","E":"没有使用任何设计模式","F":"Command","G":"Iterator"},"answer":"G"},{"id":"learncoder_95_2445","stem":"有一段代码如下:<div><string, list<string=\"\"><string><string><profile><string><profile><profile><string><pre><code>public class Profile {<br> private String name;<br> private String email;<br> private Map&gt;contacts =new HashMap&lt;&gt;();<br><br> public Profile(String email, String name, String... contacts) { ……}<br><br> public String getEmail() {<br> return email;<br> }<br><br> public String getName() {<br> return name;<br> }<br><br> public List getContacts(String contactType) {<br> return contacts.get(contactType);<br> }<br>}<br><br>public interface ProfilePos {<br> boolean hasNext();<br><br> Profile getNext();<br><br> void reset();<br>}<br><br>public class FacebookPos implements ProfilePos {<br> private Facebook facebook;<br> private String type;<br> private String email;<br> private int currentPosition = 0;<br> private List emails = new ArrayList&lt;&gt;();<br> private List profiles = new ArrayList&lt;&gt;();<br><br> public FacebookPos(Facebook facebook, String type, String email) {<br> this.facebook = facebook;<br> this.type = type;<br> this.email = email;<br> }<br><br> private void lazyLoad() {<br> if (emails.size() == 0) {<br> List profiles = facebook.requestProfileFriendsFromFacebook(this.email, this.type);<br> for (String profile : profiles) {<br> this.emails.add(profile);<br> this.profiles.add(null);<br> }<br> }<br> }<br><br> @Override<br> public boolean hasNext() {<br> lazyLoad();<br> return currentPosition &lt; emails.size();<br> }<br><br> @Override<br> public Profile getNext() {<br> if (!hasNext()) {<br> return null;<br> }<br> String friendEmail = emails.get(currentPosition);<br> Profile friendProfile = profiles.get(currentPosition);<br> if (friendProfile == null) {<br> friendProfile = facebook.requestProfileFromFacebook(friendEmail);<br> profiles.set(currentPosition, friendProfile);<br> }<br> currentPosition++;<br> return friendProfile;<br> }<br><br> @Override<br> public void reset() {<br> currentPosition = 0;<br> }<br>}<br><br>public interface SocialNetwork {<br> ProfilePos createFriendsPos(String profileEmail);<br><br> ProfilePos createCoworkersPos(String profileEmail);<br>}<br><br>public class Facebook implements SocialNetwork {<br> private List profiles;<br><br> public Facebook(List cache) {<br> if (cache != null) {<br> this.profiles = cache;<br> } else {<br> this.profiles = new ArrayList&lt;&gt;();<br> }<br> }<br><br> public Profile requestProfileFromFacebook(String profileEmail) {<br> // Here would be a POST request to one of the Facebook API endpoints. <br> // Instead, we emulates long network connection, which you would expect <br> // in the real life... <br> simulateNetworkLatency();<br> System.out.println(\"Facebook: Loading profile '\" + profileEmail + \"' over the network...\");<br> // ...and return test data. <br> return findProfile(profileEmail);<br> }<br><br> public List requestProfileFriendsFromFacebook(String profileEmail, String contactType) {<br> // Here would be a POST request to one of the Facebook API endpoints. <br> // Instead, we emulates long network connection, which you would expect <br> // in the real life... <br> simulateNetworkLatency();<br> System.out.println(\"Facebook: Loading '\" + contactType + \"' list of '\" + profileEmail + \"' over the network...\");<br> // ...and return test data. <br> Profile profile = findProfile(profileEmail);<br> if (profile != null) {<br> return profile.getContacts(contactType);<br> }<br> return null;<br> }<br><br> private Profile findProfile(String profileEmail) {<br> for (Profile profile : profiles) {<br> if (profile.getEmail().equals(profileEmail)) {<br> return profile;<br> }<br> }<br> return null;<br> }<br><br> private void simulateNetworkLatency() {<br> try {<br> Thread.sleep(2500);<br> } catch (InterruptedException ex) {<br> ex.printStackTrace();<br> }<br> }<br><br> @Override<br> public ProfilePos createFriendsPos(String profileEmail) {<br> return new FacebookPos(this, \"friends\", profileEmail);<br> }<br><br> @Override<br> public ProfilePos createCoworkersPos(String profileEmail) {<br> return new FacebookPos(this, \"coworkers\", profileEmail);<br> }<br>}</code></pre></string></profile></profile></string></profile></string></string></string,></div><div><string, list<string=\"\"><string><string><profile><string><profile><profile><string>阅读并分析该代码,下面说法正确的是:</string></profile></profile></string></profile></string></string></string,></div>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"SocialNetwork抽象了数据集合,ProfilePos是对该集合的遍历访问抽象,所以它们之间构成Iterator模式;SocialNetwork定义了创建ProfilePos的接口,但由自己的子类决定实际产生的类型,所以是Factory Method模式。SocialNetwork的子类除了创建ProfilePos之外,还有更多的自有职责,所以不是Abstract Factory","type":"multiple_choice","options":{"A":"使用了Factory Method模式,SocialNetwork的两个create方法是Factory Method","B":"使用Abstract Factory模式,SocialNetwork是Abstract Factory","C":"使用了Iterator模式,ProfilePos与SocialNetwork之间构成了Iterator模式","D":"使用了Bridge模式,ProfilePos与SocialNetwork之间构成了Bridge模式"},"answer":"A;C"},{"id":"learncoder_95_2444","stem":"下面的代码中使用了工厂方法Factory Method模式<pre><code>public class XMLReaderFactory {<br> public static XMLReader createXMLReader();<br>}<br><br>public interface XMLReader {<br> public void setContentHandler(ContentHandler handler):<br><br> public void parse(InputStream is);<br>}</code></pre><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"工厂方法不是单纯的创建其他对象,而是基于一个动态方法创建其他差异化对象","type":"true_false","answer":true},{"id":"learncoder_95_2443","stem":"Factory Method的命名中有一个含义:使用一个方法Method扮演Factory的作用","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"true_false","answer":true},{"id":"learncoder_95_2442","stem":"在Factory Method模式中,createXXX方法所在的类往往有自己独立的职责,createXXX只是它众多方法中的一个","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"专门创建其他对象的类是Factory,所以如果只有createXXX方法,那么Factory Method就应该被称为Abstract Factory","type":"true_false","answer":true},{"id":"learncoder_95_2441","stem":"有代码如下&nbsp;<div><thumbnail><thumbnail><thumbnail><pre><code>public class Thumbnail { // …}<br><br>public class GIFThumbnail :Thumbnail{ // …}<br><br>public class JPEG Thumbnail :Thumbnail{ // …}<br><br>public interface Image {<br> Thumbnail CreateThumbnail();<br>}<br><br>public class GifImage :Image{public Thumbnail CreateThumbnail(){<br> // … Create a GIF thumbnail here …<br> return gifThumbnail;<br>}}<br><br>public class JpegImage :Image{public Thumbnail CreateThumbnail(){ <br> // … Create a JPEG thumbnail here … <br> return jpegThumbnail;<br>}}<br><br>public class ImageCollection {<br> private IList images;<br><br> public ImageCollection(IList images) {<br> this.images = images;<br> }<br><br> public IList CreateThumbnails() {<br> IList thumbnails = new List(images.Count);<br> foreach(Image thumb in images) {<br> thumbnails.Add(thumb.CreateThumbnail());<br> }<br> return thumbnails;<br> }<br>}</code></pre></thumbnail></thumbnail></thumbnail></div><div><thumbnail><thumbnail><thumbnail>请问该设计使用了哪个设计模式?</thumbnail></thumbnail></thumbnail></div>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Image使用CreateThumbnail方法动态创建Thumbnail,是典型的Factory Method模式","type":"choice","options":{"A":"Bridge","B":"Strategy","C":"以上都不是","D":"Factory Method","E":"Builder","F":"Command"},"answer":"D"},{"id":"learncoder_95_2440","stem":"Factory模式的作用是在创建可变子类型对象时,能够使用多态机制代替多分支判定","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Factory模式并不能解决对象创建时的多分支判定,只是把该判定限制在了安全范围内","type":"true_false","answer":false},{"id":"learncoder_95_2439","stem":"Factory模式的作用是:在创建可变子类型对象时,将多分支判定的创建代码安置在可控、安全的范围内(Factory内),不仅可以避免该段代码重复出现,而且可以让Client代码与具体子类型解耦","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"true_false","answer":true},{"id":"learncoder_95_2438","stem":"有代码如下<div><pre><code>interface IChoice {<br> string Buy();<br>}<br>Class Car implements IChoice{......}<br>Class Bike implements IChoice{......}<br>Public Class Store{<br> Public void purchase(){<br> String choice=getUserChoice();<br> If(choice==\"Car\"){<br> Car c=new Car();c.buy();<br> }<br> If(choice==\"bike\"){<br> Bike b=new Bike();b.buy()<br> }<br> }<br>}</code></pre></div><div>下面说法正确的是:<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"在Store. purchase方法中,对Car和Bike的创建代码是违反OCP的。但是因为涉及的是对象创建问题,所以多态机制无法使用,不能使用Template Method模式,而是应该使用Factory模式加以改进。\n改进后的部分代码为:<pre><code>public class FactoryChoice {<br> static public IChoice getChoiceObj(string cChoice) {<br> IChoice objChoice = null;<br> if (cChoice.ToLower() == \"car\") {<br> objChoice = new Car();<br> } else if (cChoice.ToLower() == \"bike\") {<br> objChoice = new Bike();<br> } else {<br> objChoice = new InvalidChoice();<br> }<br> return objChoice;<br> }<br>}<br>Public Class Store{<br> Public void purchase(){<br> String choice=getUserChoice();<br> IChoice ichoice=FactoryChoice.getChoiceObj(choice);ichoice.buy();<br> }<br>}</code></pre><p><br></p>","type":"choice","options":{"A":"质量没有问题","B":"质量有问题,应该使用Factory Method模式加以改进","C":"质量有问题,应该使用Factory模式加以改进","D":"质量有问题,应该使用Template Method模式加以改进"},"answer":"C"},{"id":"learncoder_95_2437","stem":"<p>判断下图用的是哪种设计模式</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1N-yAQp1lAACBOuSYHDo004.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"问题的本质是接口兼容问题,使用的是单纯的委托机制,如果给Wrapper建立抽象接口解决OCP问题,就是Adapter方案了","type":"choice","options":{"A":"<p>Decorator<br></p>","B":"<p>Mediator<br></p>","C":"<p>几个都不是<br></p>","D":"<p>Bridge<br></p>","E":"<p>Strategy<br></p>","F":"<p>Adapter<br></p>"},"answer":"C"},{"id":"learncoder_95_2436","stem":"<p>因为系统演化需要,将把下面的代码1修改为代码2。理想情况是,在代码2中, 创建了一个新接口 CCPService,然后让FinancialTrustCC继承CCPService(第26-28 行提到, 对FinancialTrustCCP的源代码进行了修改, 以实现抽象接口 CCPService)。但如果FinancialTrustCC是第三方服务, 就不可能有机会对源代码进行更改。 那么在不对新设计进行任何代码更改的情况下, 可以使用什么设计模式解决该问题?</p><p>代码1</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1OFqALGkpAAFWA_2x7ns988.png\"><br></p><p>代码2</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1OG2AXz33AALjlHZcsBw623.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"这是典型的接口适配问题。CCPService就是Target,继承它建立一个Adapter,执行具体功能时委托给FinancialTrustCCP,FinancialTrustCCP就是Adaptee","type":"choice","options":{"A":"Facade","B":"以上都不是","C":"Proxy","D":"Mediator","E":"Adapter","F":"Decorator","G":"Command"},"answer":"E"},{"id":"learncoder_95_2435","stem":"<p>如下图所示,你需要设计一个新颖的圣诞树应用。圣诞树会在圣诞节送惊喜,会挂上有标签和把手的盒子。当你拉把手的时候, 礼物就会出来。礼物是独一无二的, 但它与盒子上的类别标签相匹配。每个盒子都带有年龄范围的标签,这些盒子会产生不同类型的礼物, 但都符合年龄范围</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1OP6Aa-CXAACJzLCgR9w920.png\"><br></p><p>你认为哪一个设计模式适合处理该问题?</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"问题的复杂度在于建立不同的盒子,首先是个创建问题。创建的复杂度在于有差异化的产品组合(不同年龄范围的不同礼物),这正是抽象工厂擅长解决的问题","type":"choice","options":{"A":"Composite","B":"Strategy","C":"Builder","D":"Decorator","E":"Abstract Factory"},"answer":"E"},{"id":"learncoder_95_2434","stem":"<p>有一款迷宫游戏的初始设计图如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Oa6AHTj2AAE7XC5XhPQ578.png\"><br></p><p>游戏的创建代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1OcCAH8A_AAKPmO7RZrk220.png\"><br></p><p>后来扩展了新的需求:游戏设计者希望加入新类型的迷宫游戏,例如带有魔法门的迷宫、带有魔法墙的迷宫、隐藏门的迷宫、门被锁住的迷宫等等。于是,程序员扩展了新的代码如下,使用新类型的XXXMazor创建新的游戏。</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1OdGANmnuAACyQASLgvY118.png\"><br></p><p>关于该扩展方案,下列说法正确的是:</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"没有违反OCP;Mazor及其扩展XXXMazor构成了Abstract Factory模式;没有抽取公共方法,所以没有使用Template Method","type":"choice","options":{"A":"使用了Template Method设计模式","B":"违反了OCP,不是好的方案","C":"其他说法都不对","D":"使用了Abstract Factory设计模式"},"answer":"D"},{"id":"learncoder_95_2433","stem":"<p>在一个网络通信系统中,关于通信Socket的创建有部分代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Ov6APDcCAAGhP8UGNO0140.png\"><br></p><p>分析该代码,下列哪个说法是正确的?</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"虽然Factory被定义为静态,但并没有限制数量,不是Singleton;SocketImpl和SocketImplFactory的抽象性说明其工厂是抽象工厂,实现具体类时还需要扩展具体子类关系;为了具体实现后Socket类型的多样性,SocketImpl和SocketImplFactory就应该是抽象的","type":"choice","options":{"A":"使用Abstract Factory模式","B":"使用了 Singleton模式","C":"其他说法都不对","D":"该段代码有问题,SocketImpl不应该是抽象类,SocketImplFactory也不应该是接口<p><br></p>"},"answer":"A"},{"id":"learncoder_95_2432","stem":"<p>一个图形化界面的部分代码如下:</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1PBCAYmqGAAEr1bKaVO4721.png\"></p><p>界面由Window、ScrollBar、Button几种组件组成。不同的系统环境需要不同的界面风格,例如微软Windows风格、Motif风格等等。<br>针对上述代码,下面哪个说法是正确的?</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"没有违反任何原则;Template Method是从共同行为中抽取个性,但代码中没有共同行为","type":"choice","options":{"A":"使用了Template Method模式","B":"使用了Abstract Factory模式","C":"违反了OCP原则<p><br></p>","D":"违反了LSP原则"},"answer":"B"},{"id":"learncoder_95_2431","stem":"<p>仔细分析下列代码,下面说法正确的是:</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1PSKAeuoAAAKor7zPR_U463.png\"><br></p><p><br></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1PS-AHzaeAAKor7zPR_U367.png\"></p><p>使用了桥接Bridge模式,灵活解决了Player和Obstacle的适配问题</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Mediator是减少复杂对象间的交互耦合,也不符合题目。","type":"choice","options":{"A":"使用了桥接Bridge模式,灵活解决了Player和Obstacle的适配问题;","B":"使用了Mediator模式,解决了Player和Obstacle的适配问题;","C":"使用了 Abstract Factory模式,解决了Player和Obstacle的适配问题;","D":"使用了Adaptor模式,解决了Player和Obstacle的适配问题;"},"answer":"C"},{"id":"learncoder_95_2430","stem":"<p>有一个类图的碎片如下图所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1PdOAKDWlAAHpoiMhuWI459.png\"><br></p><p>1)请补充各个类之间的关系,建立完整类图</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1PjGAeK3BAAGxQC2cNKo062.png\"><br></p>"},{"id":"learncoder_95_2429","stem":"<p>有一个类图的碎片如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Po6AMyLtAAHpoiMhuWI988.png\"><br></p><p>2)现在武器的使用有约定:Queen使用武器Knife;Troll使用BowAndArrow;King使用Sword;Knight使用Axe。那么setWeapon方法应该如何处理?给出实现方案</p><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"short_answer","answer":"<p>(1)在setWeapon()方法中加一个检查方法,如果为false,返回异常<br></p><pre><code>void setWeapon(WeaponBehavior w) throws Exception{<br> if isValid(w){<br> this.weapon = w;<br> } else {<br> throw new Exception(“weapontype error”);<br> }<br>}<br>abstract boolean isValid(WeaponBehavior w){}<br>boolean isValid(WeaponBehavior w) :: Queen{<br> if (w instanceof KnifeWeaponBehavior){<br> return true;<br> } else {<br> return false;<br> }<br>}</code></pre><p><br></p>"},{"id":"learncoder_95_2428","stem":"<p>有设计图如下,因为Person可能是多种类型(Manager、Engineer、Salesman)所以Person的工作是无法固定的。你认为下面的哪个设计模式能帮助解决这个问题?</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1P1uAYxVOAAEmJ3CyGKA604.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"抽象出一个Job接口,让Person拥有0或多个Job接口对象,再使用Manager、Engineer、Salesman继承Person对象,这样就是Strategy模式,能够解决上述问题","type":"choice","options":{"A":"抽象工厂Abstract Factory","B":"策略Strategy","C":"适配器Adapter","D":"组合Composite","E":"桥接Bridge"},"answer":"B"},{"id":"learncoder_95_2427","stem":"<p>判定下面的设计使用的是哪种设计模式</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1P-aAa0QhAACXXwyhfcc464.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"图中反映的是Client对象的单个行为Sort有多样性,这是典型的Strategy。State是指状态变化影响整个对象的行为,而不是单个行为;另外三个设计模式选项完全不契合类结构","type":"choice","options":{"A":"State","B":"以上都不是","C":"Template Method","D":"Adapter","E":"Strategy","F":"Command"},"answer":"E"},{"id":"learncoder_95_2426","stem":"<p>为保障用户使用的安全,设计师设计了如下图所示方案</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Qv6AbJVpAACkCRSyYKM943.png\"><br></p><p>在用户会话User Session中可以依据安全需要灵活调整使用下列安全方案的一种或多种:口令验证Password、挑战握手协议CHAP、公钥/私钥。<br>该设计方案使用了哪种设计模式?</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"一个对象User Session的单个行为authenticate有多样性,这是典型的Strategy。","type":"choice","options":{"A":"State","B":"以上都不是","C":"Template Method","D":"Strategy","E":"Decorator","F":"Command"},"answer":"D"},{"id":"learncoder_95_2425","stem":"<p>在一款场景游戏中,需要为玩家设计去机场的交通功能,玩家可以依据自己的判定选择公共汽车bus、私家车car或者出租车Taxi。其设计示意图如下.\\<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Q8CAScE4AAEFnwKdG48784.png\"></p><p>该设计方案使用了哪种设计模式?</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"一个对象TransportationToAirport的某方面特征Tool有多样性,是Strategy","type":"choice","options":{"A":"Decortor","B":"Bridge","C":"State","D":"以上都不是","E":"Strategy","F":"Command"},"answer":"E"},{"id":"learncoder_95_2424","stem":"<p>有网络通信系统的部分设计类图如下。</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1RK-AXyKcAAD-9bzRN50495.png\"><br></p><p>加密通信类EncryptedSocket需要使用两种加密算法中的一种DES和RSA。具体是哪种由EncryptionCreator根据环境需要进行创建并交给EncryptedSocket使用。<br>其中EncryptedSocket的加密算法的设计使用了哪种设计模式?</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"一个对象EncryptedSocket的算法Encryption有多样性,是Strategy","type":"choice","options":{"A":"Bridge","B":"Factory","C":"State","D":"以上都不是","E":"Strategy","F":"Decorator","G":"Command"},"answer":"E"},{"id":"learncoder_95_2423","stem":"<p>在Strategy模式中,可以灵活设置不同的策略。有可能决策和判定具体使用哪种策略的类是:&nbsp;&nbsp;<br></p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"依据信息专家原则,谁拥有能够判定具体策略的信息,谁就应该执行判定行为。该信息可能属于Context、也可能属于前一个ConcreteStrategy、也可能位于Client或Main方法所在类(启动类、控制类),所以以上答案皆有可能。对于一个具体例子来说,该信息只会位于一个地方,只有一个类承担判定职责","type":"multiple_choice","options":{"A":"Main方法所在类","B":"Context","C":"Client","D":"ConcreteStrategy"},"answer":"A;B;C;D"},{"id":"learncoder_95_2422","stem":"<p>现有一个图片编辑系统,图片类的设计如下图所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1ReyAVEhFAAB0JV8S5jg161.png\"><br></p><p>因为图片的格式可能是5种中的一种,每一种的保存方法都不同,所以Image实现了5种方法,使用时根据对象实例的格式选择其中的一个方法。<br>请问该设计有没有提升空间?可以使用哪个设计模式加以改进?给出改进后的设计图。</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"short_answer","answer":"<p>使用策略模式进行改进</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1RgyAL2miAADmCR-bD2Y402.png\"><br></p>"},{"id":"learncoder_95_2421","stem":"<p>判定下面的设计使用的是哪种设计模式</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Rl-AX7xOAABSHnTK8g0717.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"使用Static变量和函数,让static函数代替构造函数的作用,是典型的Singleton模式","type":"choice","options":{"A":"Prototype","B":"Factory","C":"以上都不是","D":"Builder","E":"Singleton"},"answer":"E"},{"id":"learncoder_95_2420","stem":"<p>有两段代码如下<br>方案一</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1SbWAXOEYAAGd4-4Wo98022.png\"><br></p><p>方案二</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Sb-AaQGYAAH1HZyP9tQ678.png\"><br></p><p>下列说法正确的是:</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"方案二使用Iterator时就使用了Iterator模式,这会让可能发生的集合类型(ArrayList、[])的变化影响范围更小(后面的代码不需要修改),所以质量更好。","type":"choice","options":{"A":"方案一质量更好","B":"方案二使用了Iterator模式","C":"两种方案功能时一样的,质量也是一样的"},"answer":"B"},{"id":"learncoder_95_2419","stem":"<p>有一个画图程序的设计方案如下所示,图形有线条LineFigure、文本TextFigure等多种类型。对所有图形都可以进行点选DownClick、拖拽Drag和释放UpClick等动作Manipulator,但是对于不同的图形类型,动作的细节会有所不同。现在Client持有Figure类型引用,需要创建能够操纵该Figure具体子类型的动作,应该如何解决?</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1ZaKAcZxlAABJJgsiZbg374.png\"><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1ZaWAZyjnAACqajBJt88847.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"choice","options":{"A":"Client代码使用InstanceOf判定Figure的子类型,然后使用Factory模式创建具体的Manipulator","B":"使用Abstract Factory模式,让具体的ConcreteFactory创建相匹配的Figure子类型和Manipulator子类型","C":"使用Factory Method模式,将创建具体Manipulator类的行为交由Figure的子类型来完成","D":"Client代码使用InstanceOf判定Figure的子类型,然后再创建相应的Manipulator具体类;"},"answer":"C"},{"id":"learncoder_95_2418","stem":"<p>有一个设计方案如下:</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1ZjKAMJk5AABAQyWNg1g156.png\"><br></p><p>糖果店CandyStore有糖果盒CandyBarBin,盒子里面装有条状糖果CandyBar,条状糖果有三个品牌Snickers、KitKat和ThreeMusketeers。<br>部分实现代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1ZkOAQ3ASAAFc-DKZXKE996.png\"><br></p><p>该设计方案使用了哪种设计模式?</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"首先,该方案解决的是对象创建问题。其次,方案基于CandyBar的继承结构和createCandyBay方法解决了被创建子类型的指定问题,虽然结构上不同于典型的Factory Method,但核心思想是Factory Method","type":"choice","options":{"A":"Abstract Factory","B":"Strategy","C":"State","D":"Template Method","E":"Factory Method","F":"Builder","G":"其他几个都不是"},"answer":"E"},{"id":"learncoder_95_2417","stem":"<p>下面的类图使用了哪种设计模式?</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1ZtmAXsVWAALWxRkJEBs419.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"首先是创建问题,所以只有Factory Method和Abstract Factory具备可能。其次,Document及其子类型自身有职责,不是Factory,所以是Factory Method,而不是Abstract Factory","type":"choice","options":{"A":"Abstract Factory","B":"Bridge","C":"Strategy","D":"Template Method","E":"Factory Method"},"answer":"E"},{"id":"learncoder_95_2416","stem":"<p>有一款迷宫游戏的部分设计图如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1ZzuAbbgdAAE7XC5XhPQ630.png\"><br></p><p>游戏的创建代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Z06AfKkzAADVASUFYAg682.png\"><br></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Z1SAGgp5AAD9VZD5Jgs263.png\"><br></p><p>现在出现了新的情况,游戏设计者希望加入新类型的迷宫游戏,例如带有魔法门的迷宫、带有魔法墙的迷宫、隐藏门的迷宫、门被锁住的迷宫等等。为了支持新的需求,程序员把代码修正如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Z2WAOMwLAACzPhUhtjY201.png\"><br></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Z22AEyCdAAF99ZqXtqs168.png\"><br></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1Z3OAfjf_AACTCOfTGPI361.png\"><br></p><p>通过为MazeGame建立继承结构,实现多种子类型;通过建立makeXXX接口实现不同子类型可以更换相应的游戏部件。<br>关于该修正代码方案,下列说法正确的是:</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"从creatMaze中将makeXXX方法抽离出来,就是应用了Template Method设计模式;makeXXX方法的使用本身是Factory Method模式","type":"multiple_choice","options":{"A":"使用了Template Method模式","B":"使用了Builder模式","C":"没有使用任何设计模式","D":"使用了Factory Method模式"},"answer":"A;D"},{"id":"learncoder_95_2415","stem":"<p>有网络通信系统的部分设计类图如下。</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1aJOAXtzJAAD-9bzRN50249.png\"><br></p><p>加密通信类EncryptedSocket需要使用两种加密策略中的一种DES和RSA。具体是哪种由EncryptionCreator根据环境需要进行创建并交给EncryptedSocket使用。<br>其中EncryptionCreator的设计使用了哪种设计模式?</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"","type":"choice","options":{"A":"Prototype","B":"Abstract Factory","C":"Singleton","D":"Factory","E":"以上都不是","F":"Builder","G":"Factory Method"},"answer":"D"},{"id":"learncoder_95_2414","stem":"<p>有设计示意图如下。类Copy基于Read Keyboar和Write Printer工作,代码如下。</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1acSACLYEAAB17PwMXnM200.png\"><br></p><p>第一版代码<br>public class Copy {<br> public void DoWork() {<br> ReadKeyboard reader = new ReadKeyboard();<br> WritePrinter writer = new WritePrinter();<br><br> string data = reader.ReadFromKeyboard();<br> writer.WriteToPrinter(data);<br> }<br>}<br>现在因为需求变更,需要增加Read Scanner和Write FlashDisk,所以变更代码如下<br>第二版代码<br>public class Copy {<br>\tprivate String readerType;<br>\tprivate String writerType;<br>public Copy(string readerType, string writerType) {<br> _readerType = readerType;<br> _writerType = writerType;<br> }<br> public void DoWork() {<br> string data;<br> switch (readerType) {<br> case \"keyboard\":<br> ReadKeyboard reader = new ReadKeyboard();<br> data = reader.ReadFromKeyboard();<br> break;<br> case \"scanner\":<br> ReadScanner reader2 = new ReadScanner();<br> data = reader2.ReadFromScanner();<br> break;<br> }<br> switch (writerType) {<br> case \"printer\":<br> WritePrinter writer = new WritePrinter();<br> writer.WriteToPrinter(data);<br> break;<br> case \"flashdisk\":<br> WriteFlashDisk writer2 = new WriteFlashDisk();<br> writer2.WriteToFlashDisk(data);<br> break;<br> }<br> }<br>}<br>上述修改明显违反了OCP原则,所以需要基于抽象机制,加以改进,结果如下:<br>第三版代码<br>public interface IReader {<br> string Read();<br>}<br>public interface IWriter {<br> void Write();<br>}<br>public class ReadKeyboard : IReader {<br> public string Read() {<br> // code to read from keyboard and return as string<br> }<br>}<br>public class ReadScanner : IReader {<br> public string Read() {<br> // code to read from scanner and return as string<br> }<br>}<br>public class WritePrinter : IWriter {<br> public void Write(string data) {<br> // code to write to the printer<br> }<br>}<br>public class WriteFlashDisk : IWriter {<br> public void Write(string data) {<br> // code to write to the flash disk<br> }<br>}<br>public class Copy {<br> private string _readerType;<br> private string _writerType;<br> public Copy(string readerType, string writerType) {<br> _readerType = readerType;<br> _writerType = writerType;<br> }<br> public void DoWork() {<br> IReader reader;<br> IWriter writer;<br> string data;<br> switch (readerType) {<br> case \"keyboard\":<br> reader = new ReadKeyboard();<br> break;<br> case \"scanner\":<br> reader = new ReadScanner();<br> break;<br> }<br> switch (writerType) {<br> case \"printer\":<br> writer = new WritePrinter();<br> break;<br> case \"flashdisk\":<br> writer = new WriteFlashDisk();<br> break;<br> }<br> data = reader.Read();<br> writer.Write(data);<br> }<br>}<br>对于最后修改的方案第三版代码,你认为:</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"只需要将对象创建部分分离出去,基于Factory模式加以改进,就可以实现Copy类完全的OCP。示意如下\npublic class Copy {\n public void DoWork() {\n IReader reader = serviceLocator.GetReader();\n IWriter writer = serviceLocator.GetWriter();\n string data = reader.Read();\n writer.Write(data);\n }\n}","type":"choice","options":{"A":"第三版代码也没有实现OCP,所以与第二版代码质量一样","B":"基于抽象机制,很好地实现了依赖倒置,可以实现OCP","C":"其他说法都不对","D":"第三版代码在局部(data = reader.Read(); writer.Write(data);)实现了依赖倒置和OCP,但是没有完全实现OCP。还需要继续使用Factory模式加以改进"},"answer":"D"},{"id":"learncoder_95_2413","stem":"<p>有一个设计方案如下:</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1azWATpACAABAQyWNg1g712.png\"><br></p><p>糖果店CandyStore有糖果盒CandyBarBin,盒子里面装有条状糖果CandyBar,条状糖果有三个品牌Snickers、KitKat和ThreeMusketeers。<br>部分实现代码如下:</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1a1eAB9AVAAFmA2gZ6Zo621.png\"><br></p><p>关于上述代码,下列说法正确的是:</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"如题目所述","type":"choice","options":{"A":"CandyBarBin.restock方法内部使用了复杂的多分支判定,应该将其中代码抽离出去建立Factory","B":"CandyBarBin.restock方法内部使用了复杂的多分支判定,应该为CandyBarBin建立子类,基于多态消除该多分支判定","C":"虽然CandyBarBin.restock方法内部使用了复杂的多分支判定,但因为涉及对象创建问题,所以虽然质量不佳,但无法处理","D":"现在代码质量很好,无需处理"},"answer":"A"},{"id":"learncoder_95_2412","stem":"<p>有一款迷宫游戏的部分设计图如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1bGiAXyv-AAE7XC5XhPQ367.png\"><br></p><p>游戏的创建代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1bHqAb4foAAMmEw2JbfY630.png\"><br></p><p>上述代码使用了哪个设计模式?</p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"Mazor是典型的创建其他对象的对象,是Factory","type":"choice","options":{"A":"Composite","B":"Factory","C":"Template Method","D":"Builder","E":"没有使用任何设计模式","F":"Decorator"},"answer":"B"},{"id":"learncoder_95_2411","stem":"<p>下图的设计使用了哪种设计模式?</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFy1bTKAL0exAAFu8TuGz_Q909.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.设计模式","analysis":"使用专门对象负责创建差异类型其他对象是典型的Factory模式","type":"choice","options":{"A":"Singleton","B":"Adaptor","C":"Strategy","D":"Factory","E":"没有使用任何设计模式"},"answer":"D"},{"id":"learncoder_93_2321","stem":"<p><span>有类结构如下</span><span><o:p></o:p></span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC3iSACNACAABHTOJkdxA344.png\"><br></p><p>\n\n\n\n\n\n<style>\n\n</style>\n\n\n\n\n\n\n\n\n\n\n</p><p><span>现在需要创建一个</span><span>Course</span><span>对象,应该由哪个类执行?</span><span><o:p></o:p></span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"choice","options":{"A":"<p>无法确定<br></p>","B":"<p>User<br></p>","C":"<p>以上都不是&nbsp; &nbsp;<br></p>","D":"<p>Course<br></p>","E":"<p>Student<br></p>","F":"<p>&nbsp;Professor&nbsp; &nbsp;<br></p>"},"answer":"F"},{"id":"learncoder_93_2320","stem":"<p>有类结构如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC39KAek2UAABHTOJkdxA249.png\"><br></p><p><span>学生注册一个课程,应该由哪个类执行?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"choice","options":{"A":"<p>无法确定</p><p><br></p><p></p>","B":"<p>Course</p><p><br></p>","C":"<p>Professor</p><p><br></p>","D":"<p>以上都不是&nbsp;&nbsp;<br></p>","E":"<p>User</p><p><br></p>","F":"<p>Student</p><p><br></p>"},"answer":"B"},{"id":"learncoder_93_2319","stem":"<p><span>有类结构如下</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC4FWANwAeAABHTOJkdxA425.png\"><br></p><p><span>查询一个学生的考试成绩,应该由哪个类执行?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"choice","options":{"A":"<p><span>以上都不是</span>&nbsp;&nbsp;<br></p>","B":"<p><span>Course</span></p><p><br></p>","C":"<p><span>无法确定</span></p><p></p><p><br></p>","D":"<p><span>Professor</span></p><p><br></p>","E":"<p><span>Student</span></p><p><br></p>","F":"<p><span>User</span></p><p><br></p>"},"answer":"B"},{"id":"learncoder_93_2318","stem":"<p><span>有类结构如下</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC4LeAbavbAABHTOJkdxA777.png\"><br></p><p><span>查询学生考试成绩时,需要接收界面输入的学号,然后根据该学号执行查询方法,该行为应该由哪个类执行?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"choice","options":{"A":"<p><span>Course</span></p><p><br></p>","B":"<p><span>无法确定</span></p><p><br></p>","C":"<p><span>Professor</span></p><p><br></p>","D":"<p><span>以上都不是</span><span>&nbsp; &nbsp;</span>&nbsp;&nbsp;<br></p>","E":"<p><span>Student</span></p><p><br></p>","F":"<p><span>User</span></p><p><br></p>"},"answer":"D"},{"id":"learncoder_93_2317","stem":"<p><span>有类结构如下</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC4TKAdj4DAABHTOJkdxA047.png\"><br></p><p><span>需要保存一个学生在一门课程上的考试成绩,应该由哪个类执行?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"choice","options":{"A":"<p><span>Course</span></p><p><br></p>","B":"<p><span>无法确定</span></p><p></p><p><br></p>","C":"<p><span>Professor</span></p><p><br></p>","D":"<p><span>Student</span></p><p><br></p>","E":"<p><span>User</span></p><p><br></p>","F":"<p><span>以上都不是</span>&nbsp;&nbsp;<br></p>"},"answer":"F"},{"id":"learncoder_93_2316","stem":"<p><span>有类结构如下图所示</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC4beABVYKAAAbZp_wp1w255.png\"><br></p><p><span>现在需要创建一个</span><span>Row</span><span>,该职责应该由谁负责?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"choice","options":{"A":"<p><span>Table</span></p>","B":"<p><span>以上都不是</span>&nbsp;&nbsp;<br></p>","C":"<p><span>Row</span></p><p><br></p>","D":"<p><span>Cell</span></p><p><br></p>","E":"<p><span>外界的</span><span>Client</span></p><p></p><p><br></p>"},"answer":"A"},{"id":"learncoder_93_2315","stem":"<p><span>有类结构如</span><span>有类结构如下图所示</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC4k6Acn5yAAAbZp_wp1w185.png\"><br></p>\n\n<p><span>现在需要创建一个</span><span>Cell</span><span>,该职责应该由谁负责?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"choice","options":{"A":"<p><span>以上都不是</span>&nbsp;&nbsp;<br></p>","B":"<p><span>Cell</span></p><p><br></p>","C":"<p><span>外界的</span><span>Client</span></p><p><br></p>","D":"<p><span>Row</span></p><p><br></p>","E":"<p><span>Table</span></p><p><br></p>"},"answer":"D"},{"id":"learncoder_93_2314","stem":"<p><span>有类图如下</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC4piAR3X5AAArl0XBEe4016.png\"><br></p><p><span>应该由谁创建</span><span>Payment</span><span>对象?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"choice","options":{"A":"<p><span>Sale</span></p><p><br></p>","B":"<p><span>Payment</span></p><p><br></p>","C":"<p><span>Register</span></p>","D":"<p><span>外界的</span><span>Client</span></p>","E":"<p><span>以上都不是</span><span>&nbsp; &nbsp;</span>&nbsp;&nbsp;<br></p>"},"answer":"A"},{"id":"learncoder_93_2313","stem":"<p><span>有类图如下</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC4uyAFqu2AAArl0XBEe4123.png\"><br></p><p><span>结账时,需要接受用户界面输入的付款数额,然后请求计算找零数额,该行为应该由谁执行?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"choice","options":{"A":"<p><span>Payment</span></p><p><br></p>","B":"<p><span>Register</span></p>","C":"<p><span>外界的</span><span>Client</span></p><p></p><p><br></p>","D":"<p><span>以上都不是</span>&nbsp;&nbsp;<br></p>","E":"<p><span>Sale</span></p>"},"answer":"D"},{"id":"learncoder_93_2312","stem":"<p><span>有类图如下</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC40KAFHqAAAArl0XBEe4089.png\"><br></p><p><span>拿到用户付款数额之后,就可以计算找零数额了,计算行为应该由谁负责?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"choice","options":{"A":"<p><span>以上都不是</span>&nbsp;&nbsp;<br></p>","B":"<p><span>Payment</span></p><p><br></p>","C":"<p><span>Register</span></p><p><br></p>","D":"<p><span>外界的</span><span>Client</span></p><p></p><p><br></p>","E":"<p><span>Sale</span></p><p><br></p>"},"answer":"B"},{"id":"learncoder_93_2311","stem":"<p><span>有类图如下</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC44iALVUxAAArl0XBEe4014.png\"><br></p><p><span>销售结束时要保存销售数据,该行为应该由谁负责?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"<p>应该单独建立一个SaleDAO类负责(依据GRSAP的纯虚构原则)</p>","type":"choice","options":{"A":"<p><span>Payment</span></p><p><br></p>","B":"<p><span>外界的</span><span>Client</span></p><p><br></p>","C":"<p><span>以上都不是</span><span>&nbsp; &nbsp;</span>&nbsp;&nbsp;<br></p>","D":"<p><span>Register</span></p><p><br></p>","E":"<p><span>Sale</span></p><p><br></p>"},"answer":"C"},{"id":"learncoder_93_2310","stem":"<p><span>有四个类:</span><span>Wall</span><span>(墙)、</span><span>Window</span><span>(窗)、</span><span>Paint</span><span>(油漆)和</span><span>Jar</span><span>(罐子)。它们之间的关系是:</span><span>每个罐子都含有一定数量的油漆,油漆用来粉刷墙,墙包含窗,窗不需要粉刷。</span></p><p><span>现在需要计算</span><span>给定表面所需的油漆量,这个职责应该由哪个类执行?</span>&nbsp; &nbsp;<br></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"choice","options":{"A":"<p><span>以上都不是</span>&nbsp;&nbsp;<br></p>","B":"<p><span>Window</span></p><p><br></p>","C":"<p><span>Jar</span></p><p></p><p><br></p>","D":"<p><span>Paint</span></p><p><br></p>","E":"<p><span>Wall</span></p>"},"answer":"E"},{"id":"learncoder_93_2309","stem":"<p><span>大富翁游戏是一种常见的策略游戏。游戏有一幅地图板,包括很多方块。游戏有一个</span><span>骰子(</span><span>Die</span><span>),会随机的产生一个数字。</span><span>玩家按照产生的数字在地图中移动。玩家移动到一些方块时,会触发方块的事件,执行财富任务。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC52SAai-uAAHg7s8r3q4539.png\"><br></p><p><span>大富翁游戏的部分领域类图如下所示。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC522AZh61AABU_HhrL0E621.png\"><br></p><p><span>1、应该由哪个类的实例对象负责创建</span><span>Square</span><span>的对象?</span></p><p><span>2、现在需要根据方块名称</span><span>name</span><span>寻找相应的</span><span>Square</span><span>,这个职责应该由哪个类执行?</span></p><p><span>3、游戏中,玩家通过界面发起行为,例如点击按钮掷骰子,掷骰子的行为进入业务逻辑后应该由哪个类负责执行?</span></p><p><span>4、游戏采用回合制,每个回合按顺序逐一给各玩家执行权。回合及顺序控制职责应该由哪个类执行?</span></p><p><span>示意图</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC53mACTo-AABdmt4Rn7c677.png\"><br></p><p><span>5、玩家每次执行过程是:(</span><span>1</span><span>)计算一个随机数;(</span><span>2</span><span>)找到玩家现在的位置;(</span><span>3</span><span>)根据随机数和现在的位置确定新的位置方块</span><span>Square</span><span>;(</span><span>4</span><span>)将玩家移动到新的</span><span>Square</span><span>。这一个执行过程应该怎样分配职责?</span></p><p><span>示意图如下</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC54yARUF6AABoBzu55UQ875.png\"><br></p><p><span>6、为了丰富的游戏体验,地图有很多种不同类型的</span><span>Square</span><span>,玩家移动到某个</span><span>Square</span><span>之后会触发不同的行为,有程序员给出了如下的伪代码实现方案:</span></p><pre><code>Square::landOn(Player){<br> switch( this.Type){<br> case Tax : 收税;<br> break;<br> case Income: 增加收入;<br> break;<br> case Pay:罚款; <br> break;<br> ……<br> case default:<br> 没有行为;<br> }<br>}</code></pre><p><span>你认为该方案的问题在哪里?请给出改进方案。</span></p><p><span>示意如下</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxC55eAR2wGAABKay8ysGc313.png\"><br></p><p><span>7、考虑到游戏的完整性,需要提供中断保存游戏、装载游戏存盘等功能,应该由哪些类负责?给出你的设计方案。</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"short_answer","answer":"<p><span>1、答案:</span><span>Board</span><span>,</span><span>GRASP</span><span>创建者原则</span></p><p><span>2、答案:</span><span>Board</span><span>,信息专家原则</span></p><p><span>3、答案:</span><span>MonopolyGame</span><span>或者新建专门的</span><span>Controller</span><span>,控制器模式。</span><span>MonopolyGame</span><span>或</span><span>Controller</span><span>接收后再转发给</span><span>Die</span><span>。</span></p><p><span>4、答案:</span><span>MonopolyGame</span><span>,信息专家原则,因为它拥有所有玩家信息。</span></p><p><span>5、答案:(</span><span>1</span><span>)计算随机数应该由</span><span>Die</span><span>负责;(</span><span>2</span><span>)找现有位置由</span><span>Player</span><span>负责,委托给</span><span>Piece</span><span>;(</span><span>3</span><span>)计算新位置由</span><span>Board</span><span>负责;(</span><span>4</span><span>)移动玩家由</span></p><p><span>6、答案:差异性处理不足,使用继承。</span></p><p><span>7、答案:新建专门的虚拟</span><span>IO</span><span>类,符合纯虚构模式。</span><br></p><p><span>除了</span><span>Die</span><span>类之前,其他类都需要建立一个对应的</span><span>IO</span><span>类。</span><span>MonopolyGame</span><span>负责调度各个类的</span><span>IO</span><span>入口。</span><span>各个类的</span><span>IO</span><span>入口再委托各自的</span><span>IO</span><span>类完成行为。</span></p>"},{"id":"learncoder_93_2308","stem":"<p><span>大富翁游戏是一种常见的策略游戏。游戏有一幅地图板,包括很多方块。游戏有一个</span><span>骰子(</span><span>Die</span><span>),会随机的产生一个数字。</span><span>玩家按照产生的数字在地图中移动。玩家移动到一些方块时,会触发方块的事件,执行财富任务。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFXmCAY626AAHg7s8r3q4686.png\"><br></p><p><span>大富翁游戏的部分领域类图如下所示。</span></p><p><span>&nbsp;</span><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFXnmASDlJAABU_HhrL0E120.png\"><br></p><p><span>应该由哪个类的实例对象负责创建</span><span>Square</span><span>的对象?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"short_answer","answer":"<p>答案:Board,GRASP创建者原则<br></p>"},{"id":"learncoder_93_2307","stem":"<p><span>大富翁游戏是一种常见的策略游戏。游戏有一幅地图板,包括很多方块。游戏有一个</span><span>骰子(</span><span>Die</span><span>),会随机的产生一个数字。</span><span>玩家按照产生的数字在地图中移动。玩家移动到一些方块时,会触发方块的事件,执行财富任务。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFXmCAY626AAHg7s8r3q4686.png\"><br></p><p><span>大富翁游戏的部分领域类图如下所示。</span></p><p><span>&nbsp;</span><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFXnmASDlJAABU_HhrL0E120.png\"><br></p><p></p><p><span>现在需要根据方块名称</span><span>name</span><span>寻找相应的</span><span>Square</span><span>,这个职责应该由哪个类执行?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"short_answer","answer":"<p>答案:Board,信息专家原则<br></p>"},{"id":"learncoder_93_2306","stem":"<p>大富翁游戏是一种常见的策略游戏。游戏有一幅地图板,包括很多方块。游戏有一个骰子(Die),会随机的产生一个数字。玩家按照产生的数字在地图中移动。玩家移动到一些方块时,会触发方块的事件,执行财富任务。<br></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYHaASurBAAHg7s8r3q4601.png\"><br></p><p><span>大富翁游戏的部分领域类图如下所示。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYISACkDJAABU_HhrL0E453.png\"><br></p><p><span>游戏中,玩家通过界面发起行为,例如点击按钮掷骰子,掷骰子的行为进入业务逻辑后应该由哪个类负责执行?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"short_answer","answer":""},{"id":"learncoder_93_2305","stem":"<p><span>大富翁游戏是一种常见的策略游戏。游戏有一幅地图板,包括很多方块。游戏有一个</span><span>骰子(</span><span>Die</span><span>),会随机的产生一个数字。</span><span>玩家按照产生的数字在地图中移动。玩家移动到一些方块时,会触发方块的事件,执行财富任务。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYHaASurBAAHg7s8r3q4601.png\"><br></p><p><span>大富翁游戏的部分领域类图如下所示。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYISACkDJAABU_HhrL0E453.png\"><br></p><p><span>游戏采用回合制,每个回合按顺序逐一给各玩家执行权。回合及顺序控制职责应该由哪个类执行?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"short_answer","answer":"<p><span>答案:</span><span>MonopolyGame</span><span>,信息专家原则,因为它拥有所有玩家信息。</span>&nbsp; &nbsp;<br></p>"},{"id":"learncoder_93_2304","stem":"<p><span>大富翁游戏是一种常见的策略游戏。游戏有一幅地图板,包括很多方块。游戏有一个</span><span>骰子(</span><span>Die</span><span>),会随机的产生一个数字。</span><span>玩家按照产生的数字在地图中移动。玩家移动到一些方块时,会触发方块的事件,执行财富任务。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYb6AbbT4AAHg7s8r3q4282.png\"><br></p><p><span>大富翁游戏的部分领域类图如下所示。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYdWAFM7gAABU_HhrL0E570.png\"><br></p><p><span>示意图</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYe6AN_cIAABdmt4Rn7c966.png\"><br></p><p><span>玩家每次执行过程是:(</span><span>1</span><span>)计算一个随机数;(</span><span>2</span><span>)找到玩家现在的位置;(</span><span>3</span><span>)根据随机数和现在的位置确定新的位置方块</span><span>Square</span><span>;(</span><span>4</span><span>)将玩家移动到新的</span><span>Square</span><span>。这一个执行过程应该怎样分配职责?</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"short_answer","answer":""},{"id":"learncoder_93_2303","stem":"<p><span>大富翁游戏是一种常见的策略游戏。游戏有一幅地图板,包括很多方块。游戏有一个</span><span>骰子(</span><span>Die</span><span>),会随机的产生一个数字。</span><span>玩家按照产生的数字在地图中移动。玩家移动到一些方块时,会触发方块的事件,执行财富任务。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYb6AbbT4AAHg7s8r3q4282.png\"><br></p><p><span>大富翁游戏的部分领域类图如下所示。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYdWAFM7gAABU_HhrL0E570.png\"><br></p><p><span>示意图</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYmuAdHVSAABn3XBHAjU649.png\"><br></p><p><span>为了丰富的游戏体验,地图有很多种不同类型的</span><span>Square</span><span>,玩家移动到某个</span><span>Square</span><span>之后会触发不同的行为,有程序员给出了如下的伪代码实现方案:</span></p><pre><code>Square::landOn(Player){<br> switch(this.Type){<br> case Tax:收税;<br> break;<br> case Income:增加收入;<br> break;<br> case Pay:罚款;<br> break;<br> ……<br> case default:<br> 没有行为;<br> }<br>}</code></pre><p><span>你认为该方案的问题在哪里?请给出改进方案。</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"short_answer","answer":"<p>答案:差异性处理不足,使用继承。<br></p>"},{"id":"learncoder_93_2302","stem":"<p>大富翁游戏是一种常见的策略游戏。游戏有一幅地图板,包括很多方块。游戏有一个骰子(Die),会随机的产生一个数字。玩家按照产生的数字在地图中移动。玩家移动到一些方块时,会触发方块的事件,执行财富任务。<br></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYuGAWWW7AAHg7s8r3q4013.png\"><br></p><p><span>大富翁游戏的部分领域类图如下所示。</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYumAK4YfAABU_HhrL0E523.png\"><br></p><p><span>示意如下</span></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxFYvOAYA8_AABKay8ysGc676.png\"><br></p><p><span>考虑到游戏的完整性,需要提供中断保存游戏、装载游戏存盘等功能,应该由哪些类负责?给出你的设计方案。</span></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"","type":"short_answer","answer":"<p><span>答案:新建专门的虚拟</span><span>IO</span><span>类,符合纯虚构模式。</span></p><p><span>除了</span><span>Die</span><span>类之前,其他类都需要建立一个对应的</span><span>IO</span><span>类</span></p><p><span>MonopolyGame</span><span>负责调度各个类的</span><span>IO</span><span>入口。</span></p><p><span>各个类的</span><span>IO</span><span>入口再委托各自的</span><span>IO</span><span>类完成行为</span>&nbsp; &nbsp;</p>"},{"id":"learncoder_93_2301","stem":"<p>对一个棋类游戏,有部分代码片段有两个不同的方案,如下所示</p><p>方案1:</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-C7uAP06UAAB5DcuMbUg214.png\"><br></p><p>方案2:</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-C8WAD_8rAACNvDBMFnk779.png\"><br></p><p>这两种方案存在区别吗</p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"isWalkable判定是一项职责,按照信息专家原则应该由Map来执行,而不是Hero顺带执行","type":"choice","options":{"A":"<p>方案二更好</p>","B":"<p>都一样,没有区别</p>","C":"<p>方案一更好</p>"},"answer":"A"},{"id":"learncoder_93_2300","stem":"<p>一个录像租借店开发了一套录像租借系统,部分类图如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-DomAWpssAAI_yVQMYSE856.png\"></p><p>现在有一个行为是找到店内所有的录像,应该由哪个类负责?</p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"根据信息专家原则,VideoStore知道所有的Video,所以由它负责。","type":"choice","options":{"A":"<p>Video</p>","B":"<p>以上都不对</p>","C":"<p>VideoStore</p>","D":"<p>VideoStore和Video分担</p>"},"answer":"C"},{"id":"learncoder_93_2299","stem":"<p>一个录像租借店开发了一套录像租借系统,部分类图如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-DyeAH6TOAAI_yVQMYSE267.png\"><br></p><p>现在需要根据title查找一个录像的detail信息,应该由哪个类负责?</p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"整个行为需要三个数据来满足:所有的录像;录像的Title;录像的Detail。它们分布在两个类中,所有需要两个类联合完成。VideoStore负责找到所有录像,定位Title相同的一个。Video负责提供Title和Detail","type":"choice","options":{"A":"<p>VideoStore和Video分组</p>","B":"<p>Video</p>","C":"<p>以上都不对</p>","D":"<p>VideoStore</p>"},"answer":"A"},{"id":"learncoder_93_2298","stem":"<p>有两个设计方案如下<br>方案一</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-EWyAMXjlAABxzZfrpvQ911.png\"><br></p><p>方案二</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-EXiAbfZPAAEoEjKZqiA395.png\"><br></p><p>下面说法正确的是</p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"参照GRASP的纯虚构模式","type":"choice","options":{"A":"<p>两个方案一样好,只是设计方案的选择不同而已</p>","B":"<p>方案二更好,因为它把持久化与业务功能分离了,能够更好地应对变更</p>","C":"<p>以上都不对。</p>","D":"<p>方案一更好,因为三个行为都使用了相同的数据,所以更加符合封装和内聚性</p>"},"answer":"B"},{"id":"learncoder_93_2297","stem":"<p>有一个评分系统,包含几个领域类如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-FhGAfFCJAAUJnbTOnlY703.png\"><br></p><p>现在有一个行为是计算一个课程的学生数量,应该由哪个类负责?</p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"一个课程所拥有的学生信息位于Course类,根据信息专家原则,应该由Course负责","type":"choice","options":{"A":"<p>Course</p>","B":"<p>以上都不是</p>","C":"<p>WorkItem</p>","D":"<p>MarkingSchema</p>","E":"<p>Student</p>"},"answer":"A"},{"id":"learncoder_93_2296","stem":"<p>有一个评分系统,包含几个领域类如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-GHWAWW84AAUJnbTOnlY507.png\"><br></p><p>现在需要按照课程内不同作业的权重计算一个学生的总成绩∑grade*weight,这个行为应该交由哪个类负责?</p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"计算需要四个信息:一个课程内的某个学生、该学生的所有作业、某个作业的grade、某个作业的weight,其中后两个信息属于WorkItem,但第一个信息分布在Course中,第二个信息分布在Student中,所以最终的职责分配应该是分散式的,应该是Course发起整个行为getScore(studentID),然后委托调用Student.getScore(),在Student.getScore()中遍历求和WorkItem.getScore(),最后在WorkItem.getScore()中计算grade*weight。","type":"choice","options":{"A":"<p>Course</p>","B":"<p>WorkItem</p>","C":"<p>MarkingSchema</p>","D":"<p>以上都不正确</p>","E":"<p>Student</p>"},"answer":"D"},{"id":"learncoder_93_2295","stem":"<p>有一个仿真模拟系统的部分设计图如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-GRyAIXDqAADrqxvcLLU253.png\"><br></p><p>SpeedControl负责控制仿真模拟的整个过程,按照一定时间频率进行仿真动作。Simultion负责执行仿真算法,表现仿真效果。SimulationData持久化仿真的数据支撑。<br>现在有一个行为是:判定是否需要显示下一帧的仿真效果。<br>这个行为应该由哪个类负责?</p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"SpeedControl负责控制仿真控制,所以它掌握对下一帧进行判定的时机和信息,依照信息专家模式,就应该由它负责","type":"choice","options":{"A":"<p>SpeedControl</p>","B":"<p>SimulationData</p>","C":"<p>以上都不对</p>","D":"<p>Simultion</p>"},"answer":"A"},{"id":"learncoder_93_2294","stem":"<p>有个销售管理系统阶段性设计类图如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-GeKAHnDLAAGUYxSuXKk888.png\"><br></p><p>现在Accounting.generateBill方法的职责分配有二种方案:<br>方案一:<br></p><pre><code>class Accounting {<br> private Map&lt;Integer, CustomerAccount&gt; accounts;<br>……<br> public void generateBill(Integer accountNo) {<br>……//Header<br> CustomerAccount account = accounts.getValue(accountNo);<br> Sale sale = account.getSale();<br> List&lt;Item&gt; items = sale.getItems();<br> for (Item item : items()) {<br> Printer.print(item.getName());//静态方法实现打印<br> Printer.print(item.getPrice());<br> }<br>……//others<br> }<br>}</code></pre><p>方案二:<br></p><pre><code>class Accounting {<br> private Map&lt;Integer, CustomerAccount&gt; accounts;<br>……<br><br> public void generateBill(Integer accountNo) {<br>……//Header<br> accounts.getValue(accountNo).printSaleItems();<br>……//others<br> }<br>}<br>Class CustomerAccount{<br> Public void printSaleItems(){<br> this.sale.printItems();<br> }<br>}<br>Class Sale{<br> Public void printItems(){<br> for(Item item:this.items()){<br> item.print();<br> }<br> }<br>}<br>Class Item{<br> Public void print(){<br> Printer.print(item.getName());<br> Printer.print(item.getPrice());<br> }<br>}</code></pre><p>哪种分配方案更合理?</p><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"方案一使得Accounting和Sale、Item建立了耦合,而这可以避免的。方案二避免了耦合,但分散了处理流程的逻辑过程,所以它的过程并不清晰。在过程清晰和耦合度更低之间折中时,人们通常选择耦合低更低,因为它对质量的影响更大","type":"choice","options":{"A":"<p>方案二,因为处理过程更清晰</p>","B":"<p>方案二,因为方案一额外增加了不必要的耦合</p>","C":"<p>方案一,因为更简洁</p>","D":"<p>方案一,因为方案二过度复杂</p>"},"answer":"B"},{"id":"learncoder_93_2293","stem":"<p>有代码如下:<br></p><pre><code>Class Foo{<br>public:<br> void setValue(int){//setter<br> };<br> int getValue(){//getter<br> };<br>private:<br> int value;<br>}<br>Class Payment{<br>public:<br> void discount(Foo foo){<br> int v=foo.getValue();<br> if(v&gt;=100){<br> foo.setValue(v*0.8);<br> }else{<br> foo.setValue(v*0.9);<br> }<br> }<br>}</code></pre><p>该代码的设计方案合理吗?&nbsp;&nbsp;<br></p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"discount始终在访问foo的value,所以如果信息和行为集中或者按照信息专家模式进行分配,discount都应该分配给foo类。Payment在discount中始终访问Foo却不访问自己属性的情况就是典型的特征妒忌","type":"multiple_choice","options":{"A":"<p>不合理,违反了信息与行为相集中的原则</p>","B":"<p>不合理,discount对Foo存在特征妒忌的情况。</p>","C":"<p>合理</p>","D":"<p>不合理,discount的分配违反了信息专家原则</p>"},"answer":"A;B;D"},{"id":"learncoder_93_2292","stem":"<p>下面有三种设计方案<br>方案一<br></p><pre><code>Class Calculator{<br> public void add(){<br> Console.WriteLine(\"请输入第一个数字\");<br> int a=int.Parse(Console.ReadLine());<br> Console.WriteLine(\"请输入第二个数字\");<br> int b=int.Parse(Console.ReadLine());<br> Console.WriteLine(“相加结果:”+String.valueOf(a+b));<br> }<br>}</code></pre><p>方案二<br></p><pre><code>Class GUI {<br> public void add(){<br> Calculator calculator = new Calculator();<br> Console.WriteLine(\"请输入第一个数字\");<br> int a = int.Parse(Console.ReadLine());<br> Console.WriteLine(\"请输入第二个数字\");<br> int b = int.Parse(Console.ReadLine());<br> Console.WriteLine (“相加结果:”+String.valueOf(calculator.add(a, b)));<br> }<br>}<br>Class Calculator{<br> Public int add( int x, int y){<br> return x+y;<br> }<br>}</code></pre><p>方案三:<br></p><pre><code>Class GUI {<br> public void add(){<br> CalculatorController calculatorController = new CalculatorController();<br> Console.WriteLine(\"请输入第一个数字\");<br> int a = int.Parse(Console.ReadLine());<br> Console.WriteLine(\"请输入第二个数字\");<br> int b = int.Parse(Console.ReadLine());<br> Console.WriteLine (“相加结果:”+String.valueOf(calculatorController.add(a, b)));<br> }<br>}<br>Class CalculatorController{<br> Private Calculator calculator;<br> Public CalculatorController(){<br> this.calculator = new Calculator();<br> }<br> Public int add(int x ,int y){<br> return calculator.add(x,y);<br> }<br>}<br>Class Calculator{<br> Public int add( int x, int y){<br> return x+y;<br> }<br>}</code></pre><p>下面说法正确的是:</p>","key_points":"知识点.练习.专业课练习.软件工程.职责分配","analysis":"功能虽然简单,但涉及三个关注点:界面交互、功能逻辑(相加)、界面与功能的连接。方案三完全分离了三个关注点,所以最容易修改,无论是哪个关注点(例如界面修改为图形化界面、功能修改为排序、用户发起行为后既要求相加求和又要求排序)发生变更,方案三都可以应对地比方案一和二更好","type":"choice","options":{"A":"<p>方案三最易于修改,因为它考虑了较多的因素,拆解了不同关注点</p>","B":"<p>以上说法都不对</p>","C":"<p>方案一最易于修改,因为代码简单</p>","D":"<p>方案二最易于修改,因为它既考虑了代码的简单性,又考虑了不同关注点的分解</p>"},"answer":"A"},{"id":"learncoder_92_2291","stem":"单一职责原则是指一个类最好只承担一个需求","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"应该是只有一个修改的原因,原因可能是承载需求,也可能是有实现方面的可变更性","type":"true_false","answer":false},{"id":"learncoder_92_2290","stem":"单一职责原则是指一个类只有一个被改变的原因","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"true_false","answer":true},{"id":"learncoder_92_2289","stem":"有类的代码框架如下:&nbsp;<div><pre><code>Class Simulation{ <br> Public LoadSimulationFile();<br> Public Simulate(); <br> Public ConvertParams()<br>}</code></pre><div>该类的设计:<p><br></p></div></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"LoadSimulationFile与另外两个方法的职责不一致,前者的职责是持久化,后置是业务逻辑","type":"choice","options":{"A":"框架的信息量较少,无法得出结论","B":"以上说法都不对","C":"内聚度不高,明显违反了单一职责原则","D":"内聚度很好,都在处理相同的数据,所以质量很好"},"answer":"C"},{"id":"learncoder_92_2288","stem":"有代码如下,分析该代码,它违反了哪条面向对象设计原则?&nbsp;<pre><code>class Person {<br> public name :string;\n public surname :string;\n public email :string;<br> constructor(name :string, surname :string, email :string) {<br> this.email = email;<br> this.name = name;<br> if (this.validateEmail(email)) {<br> this.surname = surname;<br> } else {<br> throw new Error(\"Invalid email!\");<br> }<br> }<br> validateEmail(email :string) {<br> var re = /^([\\w -]+( ?:\\.[\\w -]+)*)@(( ?:[\\w-]+\\.)*\\w[\\w -]{0, 66})\\.([a - z] {2, 6} ( ?:\\.[a - z]{ 2})?)$ / i;<br> return re.test(email);<br> }<br> greet() {<br> alert(\"Hi!\");<br> }<br>}</code></pre><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"greet行为和其他行为不是一个职责","type":"choice","options":{"A":"开闭原则OCP","B":"Demeter法则","C":"接口分离原则ISP","D":"数据与行为相集中原则","E":"单一职责原则SRP"},"answer":"E"},{"id":"learncoder_92_2287","stem":"下面的代码违反了Demeter法则&nbsp;<div><pre><code>Class A { <br> Private B b; \n …… <br> public void f(){ \n C c = b.getC(); \n c.p(); \n } \n}</code></pre><p>&nbsp;</p><p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"对于A来说,f()中的c是超出Demeter合理范围的,所以对c.p()的调用是违反Demeter的","type":"true_false","answer":true},{"id":"learncoder_92_2286","stem":"下面的代码违反了Demeter法则<div><pre><code>Class A{ <br> Private B b; <br> …… <br> public void f(C c) { <br> fp(); <br> b.p(); <br> c.q(); <br> D d = new D(); <br> d.m(); <br> } <br> private void fp(){ …… } <br>}</code></pre><p><br></p></div><div><p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"没有违反","type":"true_false","answer":false},{"id":"learncoder_92_2285","stem":"有代码如下:<div><pre><code>final String outputDir=ctxt.getOptions().getScratchDir().getAbsolutePath();</code></pre></div><div>该段代码违反了哪条原则?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"级联调用是典型的违反Demeter的场景","type":"choice","options":{"A":"开闭原则OCP","B":"依赖倒置原则DIP","C":"Demeter原则","D":"接口分离原则ISP","E":"Liskov可替代原则LSP","F":"单一职责原则SRP"},"answer":"C"},{"id":"learncoder_92_2284","stem":"有代码如下:<span style=\"background-color: rgb(241, 241, 241); font-family: Consolas, Menlo, Courier, monospace; font-size: 1em;\">ctxt.getOptions(). getScratchDir(). getAbsolutePath()</span>程序员小张分析后发现该级联调用违反了Demeter法则,于是将它修改为:<span style=\"font-size: 1em; background-color: rgb(241, 241, 241); font-family: Consolas, Menlo, Courier, monospace;\">ops = ctxt.getOptions(); scratchDir = opts.getScratchDir(); scratchDir.getAbsolutePath();</span>这样就没有级联调用了,这个修改后的代码是否就不再违反Demeter法则了?<div><p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"虽然消除了级联调用,但是ops与 scratchDir对象都是不符合Demeter法则得到的,所以仍然违反。正确的做法应该使用委托","type":"choice","options":{"A":"仍然违反Demeter法则","B":"不确定","C":"不违反Demeter法则了"},"answer":"A"},{"id":"learncoder_92_2283","stem":"有代码如下:&nbsp;<div><pre><code>public enum ShapeType {square, circle}; <br>public class Shape{ <br> public static void drawShape(Shape s) { <br> if (s.type == ShapeType.square){ <br> (s as Square).drawSquare(); <br> } else if (s.type == ShapeType.circle){ <br> (s as Circle).drawCircle(); <br> } <br> } <br>}<br>public class Circle: Shape { <br> public void drawCircle(){<br> /*draw the circle*/<br> } <br>} <br>public class Square: Shape { <br> public void drawSquare(){<br> /*draw the square*/<br> } <br>}</code></pre><div>该设计违反了哪条面向对象设计原则?<p><br></p></div></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"如果后续需要扩展新的类型(例如三角形Triangle),那么drawShape方法必须要修改,所以违反了OCP","type":"choice","options":{"A":"开闭原则OCP","B":"依赖倒置原则DIP","C":"接口分离原则ISP","D":"Liskov可替代原则LSP","E":"单一职责原则SRP"},"answer":"A"},{"id":"learncoder_92_2282","stem":"有简要的类框架代码如下:<div><pre><code>Interface DataStream { Public byte[] Read() ; } <br>Class NetworkDataStream implements DataStream{ <br> Public byte[] Read(){ <br> //Read from the network <br> } <br>} <br>Class Client { <br> Public void ReadData(DataStream ds){ <br> ds.Read(); <br> } <br>}</code></pre><div>关于改代码说法正确的是:<p><br></p></div></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"DataStream对各类可能类型Stream都做了抽象,所以肯定是符合OCP的,自然DataStream的存在也就是有意义的。仅仅看框架代码,还不能确定NetworkDataStream一定能代替DataStream,不能保证NetworkDataStream的read方法就会遵守DataStream的约定","type":"choice","options":{"A":"以上说法都不正确","B":"仅从框架代码看,足以判定该设计是符合开发原则OCP的","C":"假设DataStream只有一种类型NetworkDataStream,那么该设计就太复杂了,DataStream没有单独存在的必要","D":"仅从框架代码看,足以判定该设计是符合Liskov可替代性原则LSP的"},"answer":"B"},{"id":"learncoder_92_2281","stem":"有设计方案的代码框架如下,该方案违反了哪条面向对象设计原则?<pre><code>interface IEmail {<br> public void setSender(String sender);<br> /* content当前为string类型,但将来可以扩展为HTML、XML、SOAP等其他标准类型*/<br> public void setReceiver(String receiver);<br> public void setContent(String content);<br>}<br>class Email implements IEmail {<br> public void setSender(String sender) {<br> // set sender; <br> } <br> public void setReceiver(String receiver) {<br> // set receiver; <br> } <br> public void setContent(String content) {<br> //set content;<br> } <br>}</code></pre><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"既然content将来会发生改变,就应该为此加以考虑,应该建立抽象类Content,使用多种子类型,String只应该是其中的一个子类","type":"choice","options":{"A":"开闭原则OCP","B":"组合优于继承原则","C":"针对接口编程原则","D":"Demeter法则","E":"数据与行为相集中原则","F":"单一职责原则SRP"},"answer":"A"},{"id":"learncoder_92_2280","stem":"一个系统驱动底层设备,它的设备接口\nPublic Interface IDevice {\n Void Open(); \nVoid Read();\nVoid Close();\n}\n之前有两种常见设备PCI设备和网络设备,它们的框架代码如下&nbsp;<div><pre><code>public class PCIDevice implements IDevice {<br> public void Open() {<br> //Device specific opening logic<br> }<br><br> public void Read() {<br> //Reading logic specific to this device<br> }<br><br> public void Close() {<br> //Device specific closing logic.}<br> }<br>}<br>public class NetWorkDevice implements IDevice {<br> public void Open() {<br> //Device specific opening logic<br> }<br><br> public void Read() {<br> //Reading logic specific to this device<br> }<br><br> public void Close() {<br> //Device specific closing logic.<br> }<br>}</code></pre>&nbsp;现在添加了一种新设备——USB,其框架代码如下:&nbsp;</div><pre><code>public class USBDevice implements IDevice {<br> public void Open() {<br> //Device specific opening logic<br> }<br> public void Read() {<br> //Reading logic specific to this device<br> }<br> public void Close() {<br> //Device specific closing logic.<br> }<br> public void Refresh() { <br> //specific only to USB interface Device <br> } <br>}</code></pre><div>新增的使用USB设备的客户代码框架如下</div><div><pre><code>//New Client code.. <br>Public void Acquire(IDevice aDevice){ <br> aDevice.Open(); // Identify if the object passed here is USBDevice class Object.<br> if(aDevice.GetType() == typeof(USBDevice)){ <br> USBDevice aUsbDevice = (USBDevice) aDevice; <br> aUsbDevice.Refresh(); <br> } else { <br> throws new Exception(); <br> } <br> // remaining code…. <br>}</code></pre></div><div>关于上述代码,下列说法正确的是</div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"新增的USBDevice并没有修改已有代码,特殊进行了类型处理的Acquire方法也是新增加的,不是对原有代码的修正,所以没有违反OCP。新增加的Refresh接口并不是新的目标,所以也没有违反SRP。在Acquire方法中,子类USBDevice和父类IDevice已经处于不同的逻辑了(按照父类要求是抛出异常,但USBDevice没有抛出异常),所以它们之间已经失去了可替代性,自然是违反了LSP原则","type":"choice","options":{"A":"以上说法都不正确","B":"新增的USBDevice的设计违反了开闭原则OCP","C":"新增的USBDevice的设计违反了单一职责原则SRP","D":"新增的USBDevice的设计违反了Liskov可替代性原则LSP"},"answer":"D"},{"id":"learncoder_92_2279","stem":"有代码如下:&nbsp;<div><pre><code>public interface Worker {<br> public void eat();<br> public void work();<br>}<br>public class OfficeWorker implements Worker {<br> public void work() {<br> // ....working<br> }<br> public void eat() {<br> // .... eating in lunch break<br> } <br>} <br>public class RobotWorker implements Worker { <br> public void work() { <br> // Do work <br> } <br> public void eat() { <br> throw new NotImplementedException(); <br> } <br>}</code></pre>分析改代码,它违反了哪个面向对象设计原则?</div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"RobotWorker覆盖了eat接口,导致它无法代替Worker类型","type":"choice","options":{"A":"开闭原则OCP","B":"依赖倒置原则DIP","C":"组合优于继承原则","D":"Demeter原则","E":"针对接口编程","F":"Liskov可替代原则LSP"},"answer":"F"},{"id":"learncoder_92_2278","stem":"有代码如下,请分析该代码违反了哪个面向对象设计原则?<pre><code>public class Person {<br> protected long id;<br> private String name;<br> public String getName() {<br> return name;<br> }<br> public String toString() {<br> return getName() + \" ID: \" + String.valueof(id);<br> }<br>}<br>public class Student extends Person {<br> protected String id; // OK to define a new id (studentId)! <br> // redefine toString() to include Student ID. <br> public String toString() { <br> return getName()+\" ID: \"+Id; <br> } <br>}</code></pre><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"Person的Id被Student放弃了,所以虽然看上去二者的toString差不多,但是二者的含义已经发生了变化,Student已经不能再代替Person","type":"choice","options":{"A":"开闭原则OCP","B":"依赖倒置原则DIP","C":"组合优于继承原则","D":"Demeter原则","E":"针对接口编程","F":"Liskov可替代原则LSP"},"answer":"F"},{"id":"learncoder_92_2277","stem":"接口分离原则的主要意图是把大接口拆解成小接口,从而降低耦合","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"接口分离原则的关键是减少不必要的依赖和耦合,如果所有接口都是必须的,那么即使拆解了也起不到什么作用","type":"true_false","answer":false},{"id":"learncoder_92_2276","stem":"一个系统驱动底层设备,它的设备接口为&nbsp;<div><pre><code>Public Interface IDevice { <br> Void Open(); <br> Void Read(); <br> Void Refresh(); <br> Void Close(); <br>}</code></pre></div><div>有三种设备:PCI设备、网络设备和USB设备,分别被PCIClient、NetworkClient和USBClient使用,它们的框架代码如下<div><pre><code>public class PCIDevice implements IDevice {<br> public void Open() {<br> // Device specific opening logic<br> }<br> public void Read(){<br> // Reading logic specific to this device<br> }<br> public void Refresh(){<br> //do nothing… just a useless blank function<br> }<br> public void Close(){<br> // Device specific closing logic.<br> }<br>}<br>public class NetWorkDevice implements IDevice{<br> public void Open(){<br> // Device specific opening logic<br> }<br> public void Read(){<br> // Reading logic specific to this device<br> }<br> public void Refresh(){<br> //do nothing… just a useless blank function<br> }<br> public void Close(){<br> // Device specific closing logic.<br> }<br>}<br>public class USBDevice implements IDevice{<br> public void Open(){<br> // Device specific opening logic<br> }<br> public void Read(){<br> // Reading logic specific to this device<br> }<br> public void Refresh() { <br> // specific only to USB interface Device <br> } <br> public void Close(){ <br> // Device specific closing logic. <br> } <br>}</code></pre>关于上述代码,下列说法正确的是</div></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"1、USBDevice对Refresh方法的处理没有违反IDevice的约定(什么都不做要求),因为它在满足了IDevice约定的情况下加了额外的功能。2、几个方法都是持久化功能,本身就是单一职责的;3、参见题目选项的说法,是应该进行接口分离的","type":"choice","options":{"A":"设计方案违反了单一职责原则SRP,应该open和close一个职责类,read和refresh另一个职责类","B":"以上说法都不正确","C":"因为USBDevice对Refresh方法的处理,使得设计方案违反了Liskov可替代性原则LSP","D":"设计方案违反了接口分离原则ISP,应该将Refresh方法从IDevice接口中分离出来,这样PCIClient、NetworkClient就不再需要依赖于Refresh方法了"},"answer":"D"},{"id":"learncoder_92_2275","stem":"对下面的代码,应该使用组合优于继承原则加以改造<pre><code>Class Animal { //动物 <br> public void work(){……} //工作 <br> public void rest(){……} //休息<br>} <br>Class Robot extends Animal{ //机器人 <br> public void rest(){//不需要休息,所以覆盖<br> } <br>}</code></pre>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"Robot需要复用Animal的work代码,但是没有遵守Animal对rest的约定,这时应该使用组合优于继承基础原则加以改造,而不是直接继承","type":"true_false","answer":true},{"id":"learncoder_92_2274","stem":"根据组合优于继承原则,能够使用组合的地方尽量使用组合,组合无法适用的地方才使用继承","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"应该是不适用继承的地方,才使用组合","type":"true_false","answer":false},{"id":"learncoder_92_2273","stem":"下面哪些情况适用于组合优于继承原则?","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"multiple_choice","options":{"A":"类A的某个职责有Type1…..Typen多种情况,而且会实时根据需要从typei种类型变化为typej种类型","B":"类A需要复用类B几个方法的代码,同时不需要实现B的其他方法","C":"类A的某个职责有Type1…..Typen多种情况,而且会同时处于其中的多种情景","D":"各种情况下,都应该是组合优于继承"},"answer":"A;B;C"},{"id":"learncoder_92_2272","stem":"数据与行为相集中原则的要求是:一个类应该既有成员变量又有成员方法","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"数据与行为相集中原则的关键在于数据支持行为,行为以数据为基础,二者密切联系","type":"true_false","answer":false},{"id":"learncoder_92_2271","stem":"有代码如下:<div><pre><code>public class Student {<br> public boolean isTaking(Course course) {<br> return (course.getStudents().contains(this));<br> }<br>}<br>public class Course {<br> private List students;<br> public List getStudents() {<br> return students;<br> }<br>}</code></pre></div><div>&nbsp;该代码的设计违反哪条面向对象设计原则<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"Student.isTaking方法访问的是Course的数据,完全没有使用自己的数据,这说明该方法应该转移到Course类中","type":"choice","options":{"A":"开闭原则OCP","B":"数据与行为相集中原则","C":"单一职责SRP","D":"清晰原则"},"answer":"B"},{"id":"learncoder_92_2270","stem":"有代码如下&nbsp;<div><pre><code>class Item { …<br>}<br>class Basket { // …<br> float getTotalPrice(Item i) {<br> float price = i.getPrice() + i.getTax();<br> if (i.isOnSale())<br> price = price - i.getSaleDiscount() * price;<br> return price;<br> }<br>}</code></pre></div><div>该代码的设计违反哪条面向对象设计原则?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"Basket.getTotalPrice方法访问的是Item的数据,完全没有使用自己的数据,这说明该方法应该转移到Item类中","type":"choice","options":{"A":"开闭原则OCP","B":"数据与行为相集中原则","C":"单一职责SRP","D":"清晰原则"},"answer":"B"},{"id":"learncoder_92_2269","stem":"有代码如下,分析该代码,它违反了哪条面向对象设计原则?&nbsp;<div><pre><code>public class OrderItem {<br> public int Quantity{<br> get;<br> set;<br> }<br> public decimal UnitPrice{<br> get;<br> set;<br> }<br> public decimal Discount{<br> get;<br> set;<br> }<br>}<br>public class InvoiceItemGenerator {<br> private readonly OrderItem _orderItem;<br><br> public InvoiceItemGenerator(OrderItem orderItem) {<br> _orderItem = orderItem;<br> }<br> public dynamic Generate() {<br> dynamic invoiceItem = new ExpandoObject();<br> invoiceItem.Amount = _orderItem.Quantity * _orderItem.UnitPrice - _orderItem.Discount;<br> return invoiceItem;<br> }<br>}</code></pre><p><br></p><p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"InvoiceItemGenerator的Generate方法访问的主要是orderItem的数据,违反了数据与行为相集中原则。正确做法如下&nbsp;<div><pre><code>public class OrderItem {<br> public int Quantity{<br> get;<br> set;<br> }<br><br> public decimal UnitPrice{<br> get;<br> set;<br> }<br><br> public decimal Discount{<br> get;<br> set;<br> }<br> public decimal GetFinalAmount() {<br> return Quantity * UnitPrice - Discount;<br> }<br>}<br>public class InvoiceItemGenerator {<br> private readonly OrderIte _orderItem;<br><br> public InvoiceItemGenerator(OrderItem orderItem) {<br> _orderItem = orderItem;<br> }<br> public dynamic Generate() {<br> dynamic invoiceItem = new ExpandoObject();<br> invoiceItem.Amount = _orderItem.GetFinalAmount();<br> return invoiceItem;<br> }<br>}</code></pre><p><br></p><p><br></p></div>","type":"choice","options":{"A":"开闭原则OCP","B":"接口与行为相集中原则","C":"数据与行为相集中原则","D":"清晰原则","E":"单一职责SRP"},"answer":"C"},{"id":"learncoder_92_2268","stem":"有代码如下,分析该代码,它违反了哪条面向对象设计原则?<pre><code>public Class Mail{ <br> ……<br> private Address currentAddress=null;<br> public string MailingAddress(){<br> StringBuilder sb=new StringBuilder();<br> sb.Append(currentAddress.AddressLine1);<br> sb.Append(\"\\n\");<br> sb.Append(currentAddress.City+\", \"+currentAddress.State);<br> sb.Append(\"\\n\");<br> sb.Append(currentAddress.PostalCode);<br> return sb.ToString();<br> }<br>}</code></pre><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"Mail的MailingAddress方法访问的主要是Address的数据,违反了数据与行为相集中原则。正确做法如下<pre><code>public class Address {<br> public override string ToString() {<br> StringBuilder sb = new StringBuilder();<br> sb.Append(AddressLine1);<br> sb.Append(\"\\n\");<br> sb.Append(City + \", \" + State);<br> sb.Append(\"\\n\");<br> sb.Append(PostalCode);<br> return sb.ToString();<br> } <br> ...<br>}<br>public Class Mail{<br> private Address currentAddress=null;<br> public string MailingAddress(){<br> return currentAddress.ToString();<br> }<br>}</code></pre><p><br></p>","type":"choice","options":{"A":"开闭原则OCP","B":"接口分离原则ISP","C":"数据与行为相集中原则","D":"单一职责SRP","E":"清晰原则"},"answer":"C"},{"id":"learncoder_92_2267","stem":"依赖倒置原则DIP的意思是,如果原来A依赖于B,那么应该修正为B依赖于A<p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"<p>&nbsp;解析:依赖倒置的意思是从依赖于具体,转换为依赖于抽象&nbsp;&nbsp;<br></p>","type":"true_false","answer":false},{"id":"learncoder_92_2266","stem":"下面代码中的设计是符合依赖倒置原则DIP的<pre><code>Class TransferManager{<br> public void TransferData(<br> USBExternalDevice usbExternalDeviceObj,SSDDrive ssdDriveObj){<br> Byte []dataBytes=usbExternalDeviceObj.readData(); // work on dataBytes e.g compress, encrypt etc.. <br> ssdDriveObj.WrtieData(dataBytes); <br> } <br>} <br>Class USBExternalDevice { <br> Public byte[] readData(){//…… <br> } <br>} <br>Class SSDDrive { <br> Public void WriteData(byte[] data){//……<br> } <br>}</code></pre><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"TransferManager直接依赖(调用)了两个具体类USBExternalDevice、SSDDrive,所以是依赖于具体,自然是违反DIP的。如果要符合DIP,应该为USBExternalDevice、SSDDrive建立两个相应的接口类,然后让TransferManager依赖于接口类,让USBExternalDevice、SSDDrive实现接口类","type":"true_false","answer":false},{"id":"learncoder_92_2265","stem":"依赖于抽象,而不是依赖于具体,是依赖倒置原则DIP的基本要求","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"true_false","answer":true},{"id":"learncoder_92_2264","stem":"下面代码中的设计是符合依赖倒置原则DIP的&nbsp;<pre><code>Class USBExternalDevice implements IExternalDevice{<br> Public byte[]readData(){//……<br> }<br>}<br>Class SSDDrive implements IInternalDevice{<br> Public void WriteData(byte[] data){//……<br> }<br>}<br>Class TransferManager {<br> public void Transfer(IExternalDevice externalDeviceObj, IInternalDevice internalDeviceObj){<br> Byte[] dataBytes = externalDeviceObj.readData(); // work on dataBytes e.g compress, encrypt etc..<br> internalDeviceObj.WrtieData(dataBytes);<br> }<br>}<br>Interface IExternalDevice{<br> Public byte[] readData();<br>} <br>Interfce IInternalDevice{<br> Public void WriteData(byte[] data);<br>}</code></pre><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"依赖关系是TransferManager依赖(调用)于IExternalDevice 、IInternalDevice,而这两个都是抽象的,所以符合DIP原则","type":"true_false","answer":true},{"id":"learncoder_92_2263","stem":"有两个设计方案的代码如下\n方案一<div><pre><code>class Test extends PHPUnit_Framework_TestCase {<br> function testItCanReadAPDFBook() {<br> $b = new PDFBook();<br> $r = new EBookReader($b);<br> $this -&gt; assertRegExp('/pdf book/', $r -&gt; read());<br> }<br>}<br>interface EBook {<br> function read();<br>}<br>class EBookReader {<br> private $book;<br> function __construct(EBook $book) {<br> $this -&gt; book = $book;<br> }<br> function read() {<br> return $this -&gt; book -&gt; read();<br> }<br>}<br>class PDFBook implements EBook {<br> function read() {<br> return \"reading a pdf book.\";<br> }<br>}</code></pre></div><div>方案二&nbsp;</div><div><pre><code>class Test extends PHPUnit_Framework_TestCase {<br> function testItCanReadAPDFBook() {<br> $b = new PDFBook();<br> $r = new EBookReader($b);<br> $this -&gt; assertRegExp('/pdf book/', $r -&gt; read());<br> }<br>}<br>class EBookReader {<br> private $book;<br> function __construct(PDFBook $book) {<br> $this -&gt; book = $book;<br> }<br> function read() {<br> return $this -&gt; book -&gt; read();<br> }<br>}<br>class PDFBook {<br> function read() {<br> return \"reading a pdf book.\";<br> }<br>}</code></pre></div><div>&nbsp;针对上面两个方案,下面说法正确的是<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"DIP能够保障OCP的实现。方案二不符合DIP,虽然通过继承PDFBook能够勉强实现OCP,但同时也会违反LSP,所以方案二的质量不如方案一","type":"choice","options":{"A":"两个的质量都不好,都有明显的违反OCP原则的问题","B":"方案一更加符合依赖倒置原则,所以质量更好。如果新增加Book类型(例如MobiBook)","C":"方案二更加直接、简洁,理解起来更加容易,所以质量更好。如果新增加Book类型(例如MobiBook),通过继承PDFBook建立新子类,能够做到符合开闭原则OCP","D":"它们的功能效果是一样的,所以两个方案一样好","E":"通过增加Ebook的新实现类型,能够做到符合开闭原则OCP"},"answer":"B"},{"id":"learncoder_92_2262","stem":"有代码如下&nbsp;<div><pre><code>class EventLogWriter {<br> public void Write(string message) {<br> //Write to event log here<br> }<br>}<br>class AppPoolWatcher {<br> // Handle to EventLog writer to write to the logs<br> EventLogWriter writer = null;<br> // This function will be called when the app pool has problem<br> public void notify(string message) {<br> if (writer == null) {<br> writer = new EventLogWriter();<br> } \n writer.Write(message);<br> }<br>}</code></pre><p><br></p></div><div>分析该代码,下面说法正确的是<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"AppPoolWatcher只有一个职责,不违反SRP;没有类依赖于AppPoolWatcher,所以即使出现新的Watcher,也不会违反OCP;AppPoolWatcher依赖于EventLogWriter,而且没有对EventLogWriter做抽象处理,所以出现新的Writer类型,会违反OCP;notify并没有使用EventLogWriter的数据,所以不违反数据与行为相集中原则","type":"choice","options":{"A":"违反了OCP原则,如果出现新的Watcher类型,会陷入困难","B":"违反了DIP原则,如果出现了新的Writer类型,难以做到OCP","C":"违反了数据与行为相集中原则,notify方法应该交给EventLogWriter","D":"违反单一职责原则AppPoolWatcher做的事情太多了"},"answer":"B"},{"id":"learncoder_92_2261","stem":"针对接口编程原则的意图是让依赖只针对接口,与内部实现解耦,从而让可能的变更变得容易","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"true_false","answer":true},{"id":"learncoder_92_2260","stem":"针对接口编程的核心是要建立类的契约,并根据契约理解和使用类","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"true_false","answer":true},{"id":"learncoder_92_2259","stem":"针对接口编程的意思是,如果你使用Java编程,就将所有的依赖针对Interface,然后再用具体类实现Interface","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"针对接口编程所述的接口仅仅是抽象概念,实际在Java操作中,未必一定要使用Interface","type":"true_false","answer":false},{"id":"learncoder_92_2258","stem":"有两个设计方案如下\n方案一&nbsp;<div><pre><code>public interface PersonStore {<br> Person find(String name);<br> Save(PersonEntity person);<br>}<br>class DatabasePersonStore implements PersonStore {...}</code></pre></div><div>方案二</div><div><pre><code>public interface PersonDatabase {<br> PersonEntity find(Long id);<br> save(Long id, PersonEntity person);<br>}<br>class PersonDatabaseImpl implements PersonDatabase {...}</code></pre><p><br></p></div><div>哪一个方案更加符合 针对接口编程原则?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"方案一更好。方案二虽然在编程结构上是符合的,但它的细节暴露了内部实现,一个是名称暴露了存储是Database、另外id也是典型的database用法","type":"choice","options":{"A":"都不符合","B":"方案一","C":"都一样","D":"方案二"},"answer":"B"},{"id":"learncoder_92_2257","stem":"有一段代码如下<div><string><string><pre><code>ICollection MyCollection = new List(); <br>MyCollection.Add(\"hi\"); <br>MyCollection.Add(\"there\");</code></pre></string></string></div><div><string><string>现在程序员为了效率考虑,决定将List类型修改为HashSet,于是修改如下&nbsp;</string></string></div><div><string><string><string><string><pre><code>ICollection MyCollection = new HashSet(); \nMyCollection.Add(\"hi\"); <br>MyCollection.Add(\"there\");</code></pre></string></string></string></string></div><div><string><string><string><string>可以发现,除了在创建对象的时候,其他地方的代码都不需要修改。这种情况所反映的是针对接口编程原则吗?</string></string></string></string></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"<p>解析List和HashSet都符合ICollection的契约约定,所以才能在它们之间发生变更之后,其他代码不需要修改&nbsp;&nbsp;<br></p>","type":"choice","options":{"A":"不是","B":"是"},"answer":"B"},{"id":"learncoder_92_2256","stem":"有代码如下,分析该代码,它体现了哪条面向对象设计原则?<pre><code>interface displayModule {<br> public void display();<br>}<br>public class Monitor implements displayModule {<br> public void display() {<br> System.out.println(“Display through Monitor”);<br> }<br>}<br>public class Projector implements displayModule {<br> public void display() {<br> System.out.println(“Display through projector”);<br> }<br>}<br>public class Computer {<br> displayModule dm;<br> // programming through interface as variable part<br> public void setDisplayModule(displayModule dm) {<br> this.dm = dm;<br> }<br> public void display() {<br> dm.display();<br> }<br> public static void main(String args[]) {<br> Computer cm = new Computer();<br> displayModule dm = new Monitor();<br> displayModule dm1 = new Projector();<br> cm.setDisplayModule(dm);<br> cm.display();<br> cm.setDisplayModule(dm1);<br> cm.display();<br> }<br>}</code></pre><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"代码中没有对数据展开描述,所以体现不出数据与行为的集中;代码中的类没有复杂关联关系,所以也体现不出Demeter法则;代码中的接口本身就非常简单,不需要分离;DisplayModule接口定义了契约,Monitor和Projector都遵守了契约进行实现,Computer遵守契约加以使用,所以体现了针对接口编程原则","type":"choice","options":{"A":"接口分离原则ISP","B":"Demeter法则","C":"数据与行为相集中原则","D":"针对接口编程原则(Programming to an Interface)"},"answer":"D"},{"id":"learncoder_92_2255","stem":"有代码如下:<div><pre><code>private Double getTotalSum(List amounts){<br> double totalToPay=0.00;<br> Iterator amountsIterator=amounts.iterator();<br> while(amountsIterator.hasNext()){<br> Amount amount=(Amount)amountsIterator.next();<br> if(!cancelstatuses.contains(amount.getStatus())){<br> totalToPay += amount.doubleValue();<br> }<br> }<br> return new Double(totalToPay);<br>}<br>private Double getTotalSumExcludeCancelAmount(List amounts){<br> double totalToPay=0.00;<br> Iterator amountsIterator=amounts.iterator();<br> while(amountsIterator.hasNext()){<br> Amount amount=(Amount)amountsIterator.next();<br> if(!amount.getIsToCancel()){ <br> // Additional condition comparing to the first method. <br> if (!cancelstatuses.contains(amount.getStatus())) { <br> totalToPay += amount.doubleValue(); <br> } <br> } <br> } <br> return new Double(totalToPay); <br>}</code></pre><p><br></p></div><div>该代码的设计方案违反了哪条面向对象设计原则?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"很多的代码明显是重复的","type":"choice","options":{"A":"开闭原则OCP","B":"行为与数据相集中","C":"单一职责SRP","D":"清晰原则","E":"不要重复原则"},"answer":"E"},{"id":"learncoder_92_2254","stem":"有代码如下,它违反了哪条面向对象设计原则?<pre><code>private bool ValidateRequest(CustomerInquiryRequest request,int customerIDFieldLength,int productFieldLength){<br> if(request.CustomerProduct.ProductNumber != null &amp;&amp; request.Customer.CustomerID != null){<br> if(request.CustomerProduct.ProductNumber != string.Empty &amp;&amp; request.Customer.CustomerID != string.Empty){<br> throw new BusinessException(HandledErrors.InvalidBothParameterMessage);<br> }else if(request.Customer.CustomerID == string.Empty &amp;&amp; request.CustomerProduct.ProductNumber == string.Empty){<br> throw new BusinessException(HandledErrors.CustomerEmptyMessage);<br> }else if(request.Customer.CustomerID != string.Empty){<br> if(request.Customer.CustomerID.Length &gt; customerIDFieldLength){<br> throw new BusinessException(HandledErrors.CustomerLengthMessage);<br> }else if(request.CustomerProduct.ProductNumber != string.Empty){<br> if(request.CustomerProduct.ProductNumber.Length &gt; productFieldLength){<br> throw new BusinessException(HandledErrors.ProductFieldLengthMessage);<br> }<br> }<br> }<br>}</code></pre><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"关于判定是否为Null和string.Empty的代码是重复的,可以抽离出来建立一个私有方法","type":"choice","options":{"A":"开闭原则OCP","B":"行为与数据相集中","C":"清晰原则","D":"单一职责SRP","E":"不要重复原则"},"answer":"E"},{"id":"learncoder_92_2253","stem":"<p>有设计方案如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIpbaAO8SXAAFtifW_l94110.png\"><br></p><p>该设计方案违反了哪条面向对象设计原则?</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"级联调用时典型的违反Demeter法则情景","type":"choice","options":{"A":"<p>数据与行为相集中原则</p>","B":"<p>该设计方案没有问题</p>","C":"<p>Demeter法则</p>","D":"<p>单一职责SRP</p>","E":"<p>接口分离ISP</p>","F":"<p>开闭原则OCP</p>"},"answer":"C"},{"id":"learncoder_92_2252","stem":"<p>有个销售管理系统阶段性设计类图如下。</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIpmmAaHHcAAGUYxSuXKk417.png\"><br></p><p>现在Accounting.generateBill方法的实现有三种方案:<br>方案一:<br></p><pre><code>class Accounting {<br> private Map&lt;Integer, CustomerAccount&gt; accounts;<br>……<br> public void generateBill(Integer accountNo) {<br>……//Header<br> for (Item item : accounts.getValue(accountNo).getSale().getItems()) {<br> Printer.print(item.getName());//静态方法实现打印<br> Printer.print(item.getPrice());<br> }<br>……//others<br> }<br>}</code></pre><p>方案二:<br></p><pre><code>class Accounting{<br> private Map&lt;Integer, CustomerAccount &gt; accounts;<br>……<br> public void generateBill(Integer accountNo){<br>……//Header<br> CustomerAccount account = accounts.getValue(accountNo);<br> Sale sale = account.getSale();<br> List&lt;Item&gt; items = sale.getItems();<br> for(Item item : items()){<br> Printer.print(item.getName());//静态方法实现打印<br> Printer.print(item.getPrice());<br> }<br>……//others<br> }<br>}</code></pre><p>方案三:<br></p><pre><code>class Accounting {<br> private Map&lt;Integer, CustomerAccount&gt; accounts;<br>……<br><br> public void generateBill(Integer accountNo) {<br>……//Header<br> accounts.getValue(accountNo).printSaleItems();<br>……//others<br> }<br>}<br>Class CustomerAccount{<br> Public void printSaleItems(){<br> this.sale.printItems();<br> }<br>}<br>Class Sale{<br> Public void printItems(){<br> for(Item item:this.items()){<br> item.print();<br> }<br> }<br>}<br>Class Item{<br> Public void print(){<br> Printer.print(item.getName());<br> Printer.print(item.getPrice());<br> }<br>}</code></pre><p>请问哪个方案的质量最好?解释另外两个方案质量差的原因</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"short_answer","answer":""},{"id":"learncoder_92_2251","stem":"<p>有一个报童辅助系统的部分设计图如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIp4eAGyhxAANxlIm4PyY182.png\"><br></p><p>其中PaperBoy的getPayment方法的实现代码如下:<br></p><pre><code>Class PaperBoy{<br> public void getPayment(){<br> payment=2.00; // “I want my two dollars!”<br> Wallet theWallet=myCustomer.getWallet();<br> if(theWallet.countMoney()&gt;=payment){<br> theWallet.subtractMoney(payment);<br> }else{<br> // come back later and get my money <br> }<br> }<br>}</code></pre><p><br></p><p>请问该设计方案违反了哪个面向对象设计原则?请给出改正后的代码</p><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"short_answer","answer":""},{"id":"learncoder_92_2250","stem":"<p>下面的设计方案中关于Printer1的设计违反了OCP原则</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIp9yAHIKWAAAYkv_s1-o499.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"如果Printer1之外有新类型Printer2,那么就需要修改Client中调用Printer1的代码,增加对Printer2的调用。所以违反了OCP","type":"true_false","answer":true},{"id":"learncoder_92_2249","stem":"<p>下面的设计方案中关于Printer的设计违反了OCP原则</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIqKGAOHLSAAAYNKo1WPs768.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"不仅没有违反OCP原则,而且恰恰体现了OCP原则","type":"true_false","answer":false},{"id":"learncoder_92_2248","stem":"<p>一个真正高质量的设计应该是100%OCP的</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIqOeAN1GVAAAYNKo1WPs270.png\"></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"100%OCP是无法实现的。实践中人们只能根据对扩展和变更的预计事先准备,但无法做到 100%","type":"true_false","answer":false},{"id":"learncoder_92_2247","stem":"<p>有一个简单的设计图如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIq3WAPkCDAAAVGRk0c9c894.png\"><br></p><p>假设用户提出车子的引擎Engine后期很大可能会发生变更,那么该设计违反了哪条面向对象设计原则?</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"choice","options":{},"answer":""},{"id":"learncoder_92_2246","stem":"<p>下图的设计方案违反了LSP原则</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIq_eAUgQCAAMC9IPH6Vs729.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"该图的子类都可以代替父类起作用,没有违反LSP","type":"true_false","answer":false},{"id":"learncoder_92_2245","stem":"<p>有设计方案如下<br></p><pre><code>public class Rectangle {<br> public virtual int Height{<br> get;<br> set;<br> }<br> public virtual int Width{<br> get;<br> set;<br> }<br> public int Area() {<br> return Height * Width;<br> }<br>}<br>public class Square :Rectangle{<br>public override int Height{<br> get{return base.Height;}<br> set{base.Height=value;<br> base.Width=value;<br> }<br> }<br>public override int Width{<br> get{return base.Width;}<br> set{base.Width=value;<br> base.Height=value;<br> }<br> }<br>}</code></pre><p><br></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIrDqAGxLIAABrKehm3A0032.png\"><br></p><p>正方形Square继承矩形Rectangle,方法g在执行时,会发现如果r是Square类型,面积计算getArea()会出错(16而不是20)。<br>你认为这个设计方案的问题在哪里?它违反了哪条面向对象设计原则?</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"面积计算不正确是说明子类Square不能代替父类Rectangle起作用,是典型的违反LSP情景。Square不应该继承Rectangle。因为从现有代码看Rectangle的定义是有独立的高(setHeight)和宽(setWidth),而Square的宽和高是不独立的,所以它不应该是Rectangle的一种","type":"choice","options":{"A":"<p>组合优于继承原则</p>","B":"<p>针对接口编程</p>","C":"<p>依赖倒置原则DIP</p>","D":"<p>Liskov可替代原则LSP</p>","E":"<p>Demeter原则</p>","F":"<p>开闭原则OCP</p>"},"answer":"D"},{"id":"learncoder_92_2244","stem":"<p>有一个设计图如下。Duck 有quack(鸣叫)、游泳(swim)和图形显示(display)三种行为,其中MallardDuck和RedHeadDuck是两种不同的Duck,它们在显示上有所不同。</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIrOWANKRyAABjzimqs4k703.png\"><br></p><p>现在有一种新类型的Duck——RubberDuck(塑料鸭),它不能鸣叫quack,所以给出了下面的改进方案。</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIrPuAPGaBAADKxFBG6u4512.png\"><br></p><p>该方案违反了哪条面向对象设计原则,应该如何改正?</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"short_answer","answer":"<p>违反了LSP原则<br>使用组合代替继承的改进方案</p>"},{"id":"learncoder_92_2243","stem":"<p>一个金融系统的部分设计类图如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIrYCAfU3rAABhprmZ1yc394.png\"><br></p><p>ChequeAccount是信用账户,可以取款debit和还款credit。MortgageAccount是按揭贷款账户,它不能取款(-debit),但可以还款credit,还款是需要计算利息calculateInterest。<br>该设计违反了哪条面向对象设计原则?请给出修正后的设计方案</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"short_answer","answer":"<p>违反了LSP<br>修改后的设计为</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIraGABkeNAABm7U74Xcc908.png\"><br></p>"},{"id":"learncoder_92_2242","stem":"<p>有一个设计方案及其代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIriaAcDyhAABIC0Yf87E111.png\"><br></p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIri2AAv2rAACnKVfmvUY085.png\"><br></p><p>现在Door Client只需要使用Door的lock、unlock和isDoorOpen方法,不需要使用它继承来的timeout方法。该情景是违反接口分离原则吗?</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"true_false","answer":true},{"id":"learncoder_92_2241","stem":"<p>有设计方案如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIrnmAHiGjAAMFN_ryhKo996.png\"><br></p><p>Transaction有三种类型:存款Deposit、取款Withdrawal、转账Transfer。针对性的UI提供了相应的接口:请求存款数额RequestDopositAmt、请求取款数额RequestWithdrawalAmt、请求转账数额RequestTransferAmt和(取款、转账时)通知额度不足InformInsufficientFunds<br>该设计违反了哪条面向对象设计原则</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"存款Deposit、取款Withdrawal、转账Transfer使用的UI接口是不一样的,应该分开","type":"choice","options":{"A":"<p>单一职责原则</p>","B":"<p>针对接口编程原则</p>","C":"<p>Liskov可替代原则</p>","D":"<p>组合优于继承原则</p>","E":"<p>接口分离原则</p>","F":"<p>依赖倒置原则</p>"},"answer":"E"},{"id":"learncoder_92_2240","stem":"<p>设计方案如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIr2OAdW8jAAMFN_ryhKo787.png\"><br></p><p>有Transaction有三种类型:存款Deposit、取款Withdrawal、转账Transfer。针对性的UI提供了相应的接口:请求存款数额RequestDopositAmt、请求取款数额RequestWithdrawalAmt、请求转账数额RequestTransferAmt和(取款、转账时)通知额度不足InformInsufficientFunds<br>该设计方案存在问题,请指出,并给出改正方案</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"short_answer","answer":"<p>违反了接口分离原则</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIr4OAEPPjAANbOCwaQbg861.png\"><br></p>"},{"id":"learncoder_92_2239","stem":"<p>在一个设计场景中,有类Engineer,定义了所有工程师都应该具备的职责;有类Software Engineer,定义了所有软件工程师都应该具备的职责。Software Engineer应该具备所有Engineer定义的功能,同时有自己特有的功能。<br>关于它们之间的设计有如下两个方案,哪个方案更好?</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIsJCAJyArAACfkc2B5DU213.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"组合优于继承原则的使用场景是受限的:只有在继承机制会产生副作用(例如违反LSP)并且需要复用部分代码实现的情况。继承机制有非常好的降低整体耦合的效果,所以如果继承机制能够正确使用的情况下,还是以继承机制为先","type":"choice","options":{"A":"<p>方案一更好,继承准确地表达了设计场景的要求</p>","B":"<p>方案二更好,更加符合组合优于继承原则</p>"},"answer":"A"},{"id":"learncoder_92_2238","stem":"<p>在一个项目开发时,程序员小张先实现了类LinkedList,接着要实现类Stack,结果发现Stack需要的功能LinkedList都有,只是接口命名不一样而已,于是他给出了如下的设计方案。</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIsR6AAsU9AAD5W-y4io8357.png\"><br></p><p>请问小张的设计有什么问题?</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"场景的关键点在于需要两个接口,二者不应该继承,但其中一个像复用另一个的代码。这是典型的组合优于继承场景。如果消除两个接口,或者让一个接口更加复杂,就是在错误的道路上越走越远","type":"choice","options":{"A":"<p>违反了LSP原则,应该消除Stack。在需要使用Stack的地方,直接使用LinkedList就可以了,只需要在调用方法是把名称更换一下(push更换为addFirst、pop更换为removeFist、peek更换为get(0))</p>","B":"<p>违反了LSP原则,应该将push、pop、peek三个接口添加到LinkedList上,并在LinkedList上加以实现,这样Stack就被合并进了LinkedList,不需要再单独建立</p>","C":"<p>违反了LSP原则,应该将push、pop、peek三个接口添加到LinkedList上,并在LinkedList上加以实现,然后再用Stack继承LinkedList</p>","D":"<p>违反了组合优于继承原则,应该是Stack包含一个LinkedList对象,然后把具体接口的实现委托给该LinkedList对象</p>"},"answer":"D"},{"id":"learncoder_92_2237","stem":"<p>一个学校的学生管理系统有部分设计方案如下,Student有两种形式:全日制学生FullTimeStudent和在职学生PartTimeStudent。现在出现了一个新问题:有部分学生开始时是FullTimeStudent,但是他们毕业后选择继续在学校在职学习更多内容,所以他们需要转为PartTimeStudent,但是他们查看自己过去的历史学习记录时需要还保持是FullTimeStudent类型</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIsaeACH-0AAAetrFeXpU751.png\"><br></p><p>针对上述新问题,下面说法正确的是:</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"choice","options":{"A":"<p>继承机制难以解决子类型转换问题,应该使用组合优于继承原则加以改造</p>","B":"<p>因为没有违反LSP,所以可以基于原来的机制解决,在需要进行子类型转换时,使用旧类型数据创建新类型对象,然后再删除旧类型对象</p>","C":"<p>增加一种新类型FullTimeandPartTime</p>","D":"<p>因为没有违反LSP,所以可以基于原来的机制解决,在需要进行子类型转换时,先销毁就类型对象,然后再创建一个新类型对象</p>"},"answer":"A"},{"id":"learncoder_92_2236","stem":"<p>有设计图如下,因为Person可能同时是多种类型(Manager、Engineer、Salesman)所以这个继承方案看上去有明显的问题</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIspKASt1kAAEmJ3CyGKA788.png\"><br></p><p>你认为运用哪个面向对象设计原则可以很好地解决这个问题?请给出解决方案</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"short_answer","answer":"<p>组合优于继承原则。在同时是多种子类型的情景下,继承机制是失灵的,但各种不同工作之间关于Person的功能部分又是需要复用的,这是典型的适用组合优于继承原则的场景。<br>解决方案是新建类Job,Person聚合Job(基数0..3),Job有三个子类Manager、Engineer和Salesman</p>"},{"id":"learncoder_92_2235","stem":"<p>有一个设计类如下,该Lecture除了图中标明的属性和方法之外,没有其他额外的元素。</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyIs9uAdI6gAAbEg4sMP1s971.png\"><br></p><p>该类的设计违反了哪个面向对象设计原则?</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"Lecturer的属性中只有两个属性支持了方法,其他属性和它的方法并不是紧密联系的,所以不符合数据和行为相集中原则","type":"choice","options":{"A":"<p>数据与行为相集中原则</p>","B":"<p>单一职责SRP</p>","C":"<p>清晰原则</p>","D":"<p>开闭原则OCP</p>"},"answer":"A"},{"id":"learncoder_92_2234","stem":"<p>有个设计方案如下。每次Button被pressed,它就根据状态调用灯Lamp.turnOn和turnOff。</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyItBqAILCYAAAthwaUFiA985.png\"><br></p><p>现在需要考虑更复杂的情况,Button被用来控制Lamp之外的其他物品,上述设计就遇到了问题。该问题产生的根本原因是它违反了哪条面向对象设计原则?</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"<p>困难的原因是Lamp是具体类,所以在需要扩展时无法满足OCP。如果使用DIP,建立Lamp的接口类,就可以在扩展时实现OCP,所以违反的是DIP,导致的结果是无法实现OCP</p>","type":"choice","options":{"A":"<p>数据与行为相集中原则</p>","B":"<p>针对接口编程原则</p>","C":"<p>单一职责原则SRP</p>","D":"<p>依赖倒置原则DIP</p>","E":"<p>其他都不是</p>"},"answer":"D"},{"id":"learncoder_92_2233","stem":"<p>下面两个模块设计示意图,哪一个更符合依赖倒置原则DIP<br>方案一</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"依赖倒置要求不能依赖于具体,而是要依赖于抽象,方案二使用Interface是抽象的。","type":"choice","options":{"A":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyItJOACIRpAACIEcIO4Po457.png\"><br></p>","B":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyItJmALiOtAACV_9hsgIg861.png\"><br></p>"},"answer":"B"},{"id":"learncoder_92_2232","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyItN-AP75AAAFClF7p7xs067.png\"><br></p><p>从代码上看,ModuleA和ModuleB的代码各自独立,相互之间既没有导入/导出,更没有相互调用。那么它们之间存在耦合吗?</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"choice","options":{"A":"<p>不存在,没有任何物理链接</p>","B":"<p>以上说法都不正确</p>","C":"<p>存在,两个模块部分重复,会产生重复耦合</p>","D":"<p>存在,两个模块应该合并为一个</p>"},"answer":"C"},{"id":"learncoder_92_2231","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyItW6AYIsnAAEm5pYjwyQ524.png\"><br></p><p>分析该代码,它违反了哪条面向对象设计原则?请给出改正方案</p>","key_points":"知识点.练习.专业课练习.软件工程.OOP","analysis":"","type":"short_answer","answer":"<p>违反不要重复原则。改正后的方案如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFyItY2AJdQeAAEqqgh2Ats625.png\"><br></p>"},{"id":"learncoder_94_2409","stem":"模块化的本质是如何高质量地把一段复杂代码分割为多个简单片段","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"true_false","answer":true},{"id":"learncoder_94_2410","stem":"<p>有代码如下:</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-CxOAOlSDAABTo7eJPKI588.png\"><br></p><p>Receiver.message和MyType.doSomethingForMe方法之间是哪种类型的耦合?</p><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"它们之间只是传递了数据,没有其他更多的耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>数据耦合</p>","D":"<p>印记耦合</p>","E":"<p>控制耦合</p>","F":"<p>公共耦合</p>"},"answer":"C"},{"id":"learncoder_94_2408","stem":"最为理想中的模块化是将一段复杂代码分割为多个完全独立的片段,当然这在实践中是不可能做到的","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"true_false","answer":true},{"id":"learncoder_94_2407","stem":"内聚服从于耦合,高内聚是为了实现低耦合","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"true_false","answer":true},{"id":"learncoder_94_2406","stem":"按照功能分解的方式进行模块分割能够实现高内聚的软件设计","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"按照功能分解的方式能够建立功能内聚的设计方案,是高内聚的设计方案","type":"true_false","answer":true},{"id":"learncoder_94_2405","stem":"耦合是指两个模块之间存在着连接,体现为底层的指令地址跳转、数据标识访问等","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"true_false","answer":true},{"id":"learncoder_94_2404","stem":"时间内聚基于相同的时间、过程内聚基于相同的问题、通信内聚基于相同的数据,所以它们之间的内聚强度没有本质上的差异,都是可以接受的","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"除了功能内聚之外,上述几个基于相同特质建立的内聚类型本质上是没有差异的,只是适用于不同情景而已","type":"true_false","answer":true},{"id":"learncoder_94_2403","stem":"高耦合、低内聚是软件设计的一个基本要求","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"低耦合、高内聚才是正确的","type":"true_false","answer":false},{"id":"learncoder_94_2402","stem":"完全无耦合的模块化分割才是一个成功的软件设计应该做到的","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"完全无耦合的模块化分割是不可能做到的,所以应该追求的是低耦合","type":"true_false","answer":false},{"id":"learncoder_94_2401","stem":"因为功能内聚是最佳的内聚形式,所以按照功能分解进行模块划分的方式就是最佳的模块设计方式","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"功能分解的方式能够提升内聚,但并不一定能降低耦合。高内聚要从属于低耦合,低耦合才是设计的第一准则,所以按照功能分解并不是最佳的设计方式","type":"true_false","answer":false},{"id":"learncoder_94_2400","stem":"模块化就是将大量复杂的代码按照相应的尺寸(代码行)切割为多个简单代码片段","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"模块化的切割标准是低耦合、高内聚,不是代码行","type":"true_false","answer":false},{"id":"learncoder_94_2399","stem":"耦合是指两个模块之间存在着联系,例如模块A与B都调用了模块C,那么即使A与B相互之间没有访问,但它们之间也存在耦合,是公共耦合","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"公共耦合是指公共环境,是可以直接使用的环境,例如共享数据、文件IO、网络设备等等。而且耦合一般是指存在着连接,如果没有相互访问,就没有连接,也就没有耦合(隐式重复耦合例外)","type":"true_false","answer":false},{"id":"learncoder_94_2398","stem":"逻辑内聚是基于相同的逻辑、时间内聚是基于相同的时间,所以它们的内聚度没有本质差异,都是可以接受的","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"逻辑内聚是基于相似的逻辑,不是相同的逻辑<p><br></p>","type":"true_false","answer":true},{"id":"learncoder_94_2397","stem":"下列内聚类型中,最好的内聚是","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"choice","options":{"A":"过程内聚","B":"通信内聚","C":"功能内聚","D":"偶然内聚","E":"逻辑内聚","F":"时间内聚"},"answer":"C"},{"id":"learncoder_94_2396","stem":"在下列耦合类型中,最好的耦合是","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"choice","options":{"A":"控制耦合","B":"数据耦合","C":"印记耦合","D":"内容耦合","E":"公共耦合"},"answer":"B"},{"id":"learncoder_94_2395","stem":"在各种内聚形式中,哪些内聚类型是非常不理想,应该避免使用的?","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"multiple_choice","options":{"A":"过程内聚","B":"通信内聚","C":"偶然内聚","D":"逻辑内聚","E":"功能内聚","F":"时间内聚"},"answer":"C;D"},{"id":"learncoder_94_2394","stem":"下列哪些单位可以被看作是模块化中的模块,从而适用高内聚、低耦合设计思路","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"模块是代码段,包、类、方法都包含了一个代码段。语句块虽然也包括了代码段,但语句块是基于控制结构的,不适用内聚、耦合思想。界面、数据库、网络节点都不表现为代码段,所以不能算是模块","type":"multiple_choice","options":{"A":"方法Method","B":"数据库","C":"语句块Statement Block","D":"包Package","E":"界面","F":"类Class","G":"网络节点"},"answer":"A;D;F"},{"id":"learncoder_94_2393","stem":"下面哪些联系会产生耦合?","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"multiple_choice","options":{"A":"类A继承B","B":"类A访问类B的成员变量","C":"类A和B都包含类C","D":"类A包含B","E":"方法f和方法q调用同一个方法m","F":"方法f调用方法q","G":"方法f和方法q访问同一个公共数据"},"answer":"A;B;D;F;G"},{"id":"learncoder_94_2392","stem":"高内聚、低耦合的模块化方法是为了提高下列哪些质量","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"multiple_choice","options":{"A":"易修改","B":"易理解","C":"安全","D":"易使用","E":"可靠","F":"易复用"},"answer":"A;B;F"},{"id":"learncoder_94_2391","stem":"下面哪一个是模块化追求的效果","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"multiple_choice","options":{"A":"模块性能优异、可靠性高","B":"理解一个模块非常简单、清晰","C":"一个模块“显而易见”是正确的","D":"修改一个模块不会对外产生连锁反映","E":"模块是黑盒,而且非常安全"},"answer":"B;C;D"},{"id":"learncoder_94_2390","stem":"相比于数据耦合,无耦合才是最好的","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"无耦合是最理想的,只是实践中做不到完全无耦合,人们才追求最低的数据耦合","type":"true_false","answer":true},{"id":"learncoder_94_2389","stem":"方法f需要调用方法q,现在有两个方案:一是传递数据a、b;二是传递数据a、b、c、d、e。如果两个方案都是数据耦合,那么两个方案的质量是一样的","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"耦合强调的连接强度,强度首先取决于连接的性质(内容不独立、共享环境、控制信号、数据),在性质相同的情况下连接的数量也会影响强度,所以传递的数据应该越少越好(接口最简洁原则),方案一应该是优于方案二的","type":"true_false","answer":false},{"id":"learncoder_94_2388","stem":"区分控制耦合与数据耦合的关键是区分数据和控制信号。数据是有实际意义的信息,控制信号是人为设置的标记","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"true_false","answer":true},{"id":"learncoder_94_2387","stem":"如果方法f在调用方法q时,传递了一个flag标志,那么它们之间就是控制耦合。","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"flag标志是控制信号,但只有控制信号影响了被调用者执行路径分支选择的情况下,才是控制耦合。如果q只是简单加工flag标志,没有因为flag影响执行路径,就不构成控制耦合","type":"true_false","answer":false},{"id":"learncoder_94_2386","stem":"如果两个方法之间建立了印记耦合,那么它们之间肯定传递了复杂数据","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"印记耦合的关键是传递了过多的数据,所以一定不是简单数据,否则就不存在过多现象。常见的复杂数据是集合(数据、链表等)和复杂数据类型(结构体、自定义类等)","type":"true_false","answer":true},{"id":"learncoder_94_2385","stem":"如果方法f在调用方法q时,传递了一个复杂类型C的数据,那么它们之间就是印记耦合","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"印记耦合的构成要素有两个:一、传递复杂数据,二、只使用了数据的一部分。其关键点在于传递了过多的数据,所以仅仅是传递复杂类型构不成印记耦合的判定,还要看q是否会完全使用C的数据","type":"true_false","answer":false},{"id":"learncoder_94_2384","stem":"公共耦合要控制性使用,一是控制作用范围,二是控制参与数量","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"公共耦合,尤其是共享数据,是无法绝对禁止的,否则会使得接口的数据参数非常复杂和低效。所以在有限范围内(例如类内部)是可以控制性使用的。如果范围需要扩大(例如Static数据、全局共享数据),就要限制访问者数量,并加以集中注解","type":"true_false","answer":true},{"id":"learncoder_94_2383","stem":"对于不可避免的全局公共耦合代码,应该集中使用注解,帮助更好地控制公共耦合风险","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"公共耦合的最大坏处是所有访问点之间互相影响,而且访问点是散布于软件各处的,寻找起来非常费事。使用集中注解的好处是可以减少访问点寻找的负担,而且可以高度综合总结基本规则(例如有效值范围、处理规则等),这些都可以部分缓解公共耦合的弱点","type":"true_false","answer":true},{"id":"learncoder_94_2382","stem":"假设类A和B唯一的联系是都需要使用公共数据DATA。如果把DATA封装到一个类D中,并提供数据访问接口,那么A和B之间就不会出现耦合了","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"封装之后,存在A与D、B与D的耦合,但A与B之间不再有直接联系","type":"true_false","answer":true},{"id":"learncoder_94_2381","stem":"公共耦合就是两个模块之间共享数据","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"两个模块之间共享数据是公共耦合,但公开耦合还有其他情景,例如使用同一个文件、访问同一个设备等等。公共耦合的关键是公共环境","type":"true_false","answer":false},{"id":"learncoder_94_2380","stem":"公共耦合是应该绝对禁止使用的","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"公共耦合,尤其是共享数据,是无法绝对禁止的,否则会使得接口的数据参数非常复杂和低效。需要的是在有限范围内加以控制性使用,而不是完全禁止。例如类内部的所有方法共享成员变量","type":"true_false","answer":false},{"id":"learncoder_94_2379","stem":"类A和B都访问了类C。其中类C是JavaBean,只有私有成员变量和针对每一个变量的getter和setter,那么A和B之间是公共耦合","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"公共耦合是指共享了同样的外部环境,包括数据、文件、设备等等,但第三方模块不属于公共环境","type":"true_false","answer":false},{"id":"learncoder_94_2378","stem":"内容耦合是尽量避免使用的","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"内容耦合的模块分割还不如不分割,所以应该避免使用","type":"true_false","answer":true},{"id":"learncoder_94_2377","stem":"内部类是一种受控的内容耦合机制","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"内部类通常可以直接访问外部类的成员变量,所以通常是内容耦合。但内部类的定义比较特殊,在代码组织上就是没有分割的,使用规则也受限,所以是一种受控的内容耦合机制,是可以接受的","type":"true_false","answer":true},{"id":"learncoder_94_2376","stem":"如果一个类A的方法总是使用类B的数据,那么它们之间就是内容耦合","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"内容耦合强调的是耦合的形式,不是内聚性。A总使用B的数据,最多说明A与B之间出现了内聚问题(行为与数据没有相集中)。只要A使用B的数据时,都是通过B的public接口执行的,那么它们之间就是数据耦合,没有相互介入内部实现,不是内容耦合","type":"true_false","answer":false},{"id":"learncoder_94_2375","stem":"下列哪些情景会导致内容耦合?","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"multiple_choice","options":{"A":"类A直接使用编译目标码覆写了类B的代码","B":"类A访问类B的public成员变量","C":"类A是类B的内部类,从而直接使用B的成员变量","D":"方法f内部某行代码直接跳转到方法p的标记代码处","E":"类A访问类B的接口"},"answer":"A;B;C;D"},{"id":"learncoder_94_2374","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-JxmADj1tAABTo7eJPKI664.png\"><br></p><p>Receiver.message和MyType.doSomethingForMe方法之间是哪种类型的耦合?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"它们之间只是传递了数据,没有其他更多的耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>数据耦合</p>","D":"<p>印记耦合</p>","E":"<p>控制耦合</p>","F":"<p>公共耦合</p>"},"answer":"C"},{"id":"learncoder_94_2373","stem":"<p>有伪代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-KAuARJH3AADBFH0GPBs178.png\"><br></p><p>Process_customer_record与Calculate_sales_tax两个方法之间是哪种类型的耦合</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"它们之间只是传递了数据,没有其他更多的耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>数据耦合</p>","D":"<p>印记耦合</p>","E":"<p>控制耦合</p>","F":"<p>公共耦合</p>"},"answer":"C"},{"id":"learncoder_94_2372","stem":"<p>有代码如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-KKSARMc7AACWh1KO5sI922.png\"><br></p><p>validate_checkout_request和valid方法之间是哪种类型的耦合</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"STRING和DATE都是无意义的控制信息,不是实际数据,所以是控制耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>控制耦合</p>","D":"<p>印记耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>"},"answer":"C"},{"id":"learncoder_94_2371","stem":"<p>有如下代码所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-KRKAAqsDAAEA8uPj4co575.png\"><br></p><p>TightCoupling.showWelcomMsg与TightCoupling2. TightCoupling两个方法之间是哪种类型的耦合?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"GE不是实际的数据,是控制信号,所以是控制耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>控制耦合</p>","C":"<p>隐式耦合</p>","D":"<p>印记耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>"},"answer":"B"},{"id":"learncoder_94_2370","stem":"<p>有伪代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-KcuABraSAAC_4c7BFEw181.png\"><br></p><p>Process_input_code与Choose_appropriate_Action方法之间是哪种类型的耦合?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"input_code不是实际的数据,是控制信号,所以是控制耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>控制耦合</p>","C":"<p>隐式耦合</p>","D":"<p>印记耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>"},"answer":"B"},{"id":"learncoder_94_2369","stem":"<p>有如下两个代码方案,它们的功能是一样的<br>方案一:<br></p><pre><code>import java.util.ArrayList;<br>import java.util.Iterator;<br>public class NumbersStatsCommandV1 {<br> public static void main( String[] args ) {<br> NumberSequence seq = new NumberSequence();<br> int i;<br> for( i = 0 ; i &lt; args.length; i++ ) {<br> try {<br> seq.appendNumber( Double.parseDouble( args[i] ) );<br> }<br> catch( NumberFormatException ex ) {<br> break;<br> }<br> }<br> for(; i &lt; args.length; i++ ) {<br> if ( args[i].equals(\"sum\") ) {<br> System.out.println( \"sum: \" + seq.sum() );<br> }<br> else if ( args[i].equals(\"min\") ) {<br> System.out.println( \"min: \" + seq.min() );<br> }<br> else {<br> System.out.println( \"unknown command: \" + args[i] );<br> }<br> }<br> }<br>}<br>class NumberSequence {<br> private ArrayList&lt;Double&gt; list;<br><br> public NumberSequence() {<br> this.list = new ArrayList&lt;Double&gt;();<br> }<br><br> public void appendNumber( double d ) {<br> list.add( new Double( d ) );<br> }<br> public double sum() {<br> double s = 0.0;<br> Iterator&lt;Double&gt; dit = list.iterator();<br> while ( dit.hasNext() ) {<br> s += dit.next().doubleValue();<br> }<br> return s;<br> }<br> public double min() {<br> Iterator&lt;Double&gt; dit = list.iterator();<br> double m = dit.next().doubleValue();<br> while ( dit.hasNext() ) {<br> double d = dit.next().doubleValue();<br> if ( d &lt; m ) {<br> m = d;<br> }<br> }<br> return m;<br> }<br>}</code></pre><p><br></p><p>方案二:<br></p><pre><code>import java.util.ArrayList;<br>import java.util.Iterator;<br>public class NumbersStatsCommandV2 {<br> public static void main( String[] args ) {<br> NumberSequence seq = new NumberSequence();<br> int i;<br> for( i = 0 ; i &lt; args.length; i++ ) {<br> try {<br> seq.appendNumber( Double.parseDouble( args[i] ) );<br> }<br> catch( NumberFormatException ex ) {<br> break;<br> }<br> }<br> for(; i &lt; args.length; i++ ) {<br> System.out.println( args[i] + \" \" + seq.calculate( args[i] ) );<br> }<br> }<br>}<br>class NumberSequence {<br> private ArrayList&lt;Double&gt; list;<br> public NumberSequence() {<br> this.list = new ArrayList&lt;Double&gt;();<br> }<br> public void appendNumber( double d ) {<br> list.add( new Double( d ) );<br> }<br> public double calculate( String cmd ) {<br> if ( cmd.equals(\"sum\") ) {<br> double sum = 0.0;<br> Iterator&lt;Double&gt; dit = list.iterator();<br> while ( dit.hasNext() ) {<br> sum += dit.next().doubleValue();<br> }<br> return sum;<br> }<br> else if ( cmd.equals(\"min\") ) {<br> Iterator&lt;Double&gt; dit = list.iterator();<br> double min = dit.next().doubleValue();<br> while ( dit.hasNext() ) {<br> double d = dit.next().doubleValue();<br> if ( d &lt; min ) {<br> min = d;<br> }<br> }<br> return min;<br> }<br> return 0.0;<br> }<br>}</code></pre><p>下列说法正确的是:</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"方案二之中,NumbersStatsCommandV2与NumberSequence.calculate之间是控制耦合,方案一中是数据耦合,所以方案一质量更好","type":"choice","options":{"A":"<p>以上说法都不对</p>","B":"<p>两个方案一样好</p>","C":"<p>方案一的质量更好</p>","D":"<p>方案二的质量更好</p>"},"answer":"C"},{"id":"learncoder_94_2368","stem":"<p>有代码如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-MMCAVWdNAABhg-gj-1Y993.png\"><br></p><p>validate_checkout_request和valid_month之间是哪种类型的耦合?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"valid_month接收到的传递数据(date)比需要的多(date.month),所以是印记耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>"},"answer":"C"},{"id":"learncoder_94_2367","stem":"<p>有代码如下</p><pre><code>Class Employee{<br> private int id;<br> private String name;<br> private String email;<br> //……<br>}<br>Class WorkItem{<br> private Employee leader;<br> private String description;<br> private Emailer email;<br> ……<br> public notice(){<br> ……<br> email.senEmail(leader,description);<br> ……<br> }<br>}<br>Class Emailer{<br> Public void sendEmail(Employee e,String text){<br> EmailerService.send(e.getName(),e.getEmail(),text);<br> }<br> //……<br>}</code></pre><p><br></p><p>WorkItem.notice与Emailer.sendEmail之间是哪种类型的耦合关系?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"Emailer只使用了Employee传递的部分数据,所以是印记耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>"},"answer":"C"},{"id":"learncoder_94_2366","stem":"<p>有代码如下<br></p><pre><code>Struct User {<br> String name;<br> String email;<br>}<br>Class Log {<br> private User user;<br> private Emailer email;<br> ……<br> public notice() {<br> ……<br> email.senEmail(user, message);<br> ……<br> }<br>}<br>Class Emailer {<br> Public void sendEmail(user u, String text){<br> EmailerService.send(u.name, u.email, text);<br> }<br> //……<br>}</code></pre><p>Log.notice与Emailer.sendEmail之间是哪种类型的耦合关系?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"Emailer只使用了全部的User数据,所以不是印记耦合,而是数据耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>数据耦合</p>","D":"<p>印记耦合</p>","E":"<p>控制耦合</p>","F":"<p>公共耦合</p>"},"answer":"C"},{"id":"learncoder_94_2365","stem":"<p>有代码如下:<br></p><pre><code>Class Operator {<br> Private Calculator calculator;<br> ……<br> public int add() {<br> private String[] op = {“1” , ”2” , ”+”};<br> return calculator.add(op);<br> }<br>} <br>Class Calculator {<br> Public int add(String[] op){<br> return (Integer.parseInt(op[0]) + Integer.parseInt(op[1]));<br> }<br> //……<br>}</code></pre><p>Operator.add与Calculator.add之间是哪种类型的耦合关系?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"因为传递的数值是三个数据,只使用了二个,所以是印记耦合(传递的数据比需要的多)","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>"},"answer":"C"},{"id":"learncoder_94_2364","stem":"<p>有代码如下<br></p><pre><code>Public Store{<br> private List&lt;Order&gt; dailyOrders;//一个店铺每天的订单列表<br> ……<br> Public giveGift(){<br> Gift.topTen(dailyOrders);//给前10个订单发礼物<br> ……<br> }<br>}<br>Public Gift{<br> Public void topTen(List&lt;Order&gt; orders){<br> assert orders.size()&gt;=10:Order not Enough;<br> for(int i=0;i&lt;10;i++){<br> Order dest=orders.get(i);<br> ……//发放礼物省略<br> }<br> }<br>}</code></pre><p>Store. giveGift与Gift. topTen之间是哪种类型的耦合关系?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"在传递的列表中,topTen只使用了前10个,其他的都是多余数据,所以是印记耦合(传递的数据比需要的多)","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>"},"answer":"C"},{"id":"learncoder_94_2363","stem":"<p>有代码如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-NHyAM87pAAB2xUXVbng221.png\"><br></p><p>validate_checkout_request和valid_month之间是哪种类型的耦合?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"两个方法之间共享了数据checkout_date,所以是公共耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>数据耦合</p>","E":"<p>无耦合</p>","F":"<p>公共耦合</p>"},"answer":"F"},{"id":"learncoder_94_2362","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-NO2ACuf-AAA-gZEsfyU371.png\"><br></p><p>addValue和subtractValue方法之间是哪种耦合关系?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"两个方法共享了x变量,所以是公共耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>","G":"<p>没有耦合</p>"},"answer":"F"},{"id":"learncoder_94_2361","stem":"<p>有伪代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-NXqAXgx9AAB2m2Jrvb4603.png\"><br></p><p>该方法是哪种类型的耦合</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"两个方法共享了sales_tax变量,所以是公共耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>","G":"<p>没有耦合</p>"},"answer":"F"},{"id":"learncoder_94_2360","stem":"<p>有伪代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-NdeAEuzRAACkHZd15Cc511.png\"><br></p><p>该方法是哪种类型的耦合</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"两个方法共同使用了同一个文件customer record,所以是公共耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>","G":"<p>没有耦合</p>"},"answer":"F"},{"id":"learncoder_94_2359","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-NlKATTpzAABrC04DnwE393.png\"><br></p><p>.类One和Two是哪种类型的耦合关系</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"两个类共享了同一个变量todaysDow,所以是公共耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>","G":"<p>没有耦合</p>"},"answer":"F"},{"id":"learncoder_94_2358","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-NyOAPC2dAABu2pNn1W8057.png\"><br></p><p>Arch.slant和Vector3D之间是哪种类型的耦合关系?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"Arch.slant访问了Vector3D的内部(x、y),所以是内容耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>"},"answer":"A"},{"id":"learncoder_94_2357","stem":"<p>有代码如下<br></p><pre><code>class DoTaxes {<br> float rate;<br> float doColorado() {<br> SalesTaxRates str = new SalesTaxRates();<br> rate = str.salesRate; // ouch <br> // this should be a method call: <br> // rate = str.getSalesRate(\"CO\"); <br> // do stuff with rate <br> }<br>}<br>class SalesTaxRates {<br> public float salesRate; // should be private <br> public float adjustedSalesRate; // should be private<br> public float getSalesRate(String region) {<br> salesRate = new DoTaxes().doColorado(); // ouch again! <br> // do region-based calculations <br> return adjustedSalesRate;<br> }<br>}</code></pre><p>DoTaxer和SalesTaxRates之间是哪种类型的耦合关系</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"DoTaxer的doColorado方法访问了SalesTaxRates的内部(str.salesRate),所以是内容耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>"},"answer":"A"},{"id":"learncoder_94_2356","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-OAaAGiyLAAB0ktpX-so192.png\"><br></p><p>两个类之间是哪种类型的耦合关系?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"SneekyModifier访问了Person的内部成员变量,所以是内容耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>"},"answer":"A"},{"id":"learncoder_94_2355","stem":"<p>有代码如下<br></p><pre><code>class Circle {<br> private double radius = 0;<br> public static int count =1;<br> public Circle(double radius) {<br> this.radius = radius;<br> }<br> \tclass Draw { //内部类<br> public void drawSahpe() {<br> System.out.println(radius); //外部类的private成员<br> System.out.println(count); //外部类的静态成员<br> }<br> }<br>}</code></pre><p>类Circle与类Draw之间是哪种类型的耦合关系?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"内部类的Draw访问了外部类的成员变量,所以是内容耦合。内部类一般都与外部类构成内容耦合,但是一种受限和特殊标记的内容耦合","type":"choice","options":{"A":"<p>内容耦合</p>","B":"<p>隐式耦合</p>","C":"<p>印记耦合</p>","D":"<p>控制耦合</p>","E":"<p>数据耦合</p>","F":"<p>公共耦合</p>"},"answer":"A"},{"id":"learncoder_94_2354","stem":"功能内聚的要求是一个模块只能有一个","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"choice","options":{"A":"以上都不对","B":"计算","C":"操作","D":"目标"},"answer":"D"},{"id":"learncoder_94_2353","stem":"通信内聚的模块中,所有的代码都有一个相同的","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"choice","options":{"A":"问题","B":"数据","C":"目标","D":"时间"},"answer":"B"},{"id":"learncoder_94_2352","stem":"过程内聚的模块中,所有的代码都有一个相同的","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"choice","options":{"A":"数据","B":"问题","C":"目标","D":"时间"},"answer":"B"},{"id":"learncoder_94_2351","stem":"在软件设计中,应该避免使用时间内聚","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"因为软件自身的特点,时间内聚是无法避免要使用的,例如刚刚启动时的初始化、执行结束后的清理现场等等","type":"true_false","answer":false},{"id":"learncoder_94_2350","stem":"在程序设计语言提供的常用类库中,经常会出现逻辑内聚的类,例如数据计算、IO处理、时间处理、语言处理等等,但它们的逻辑内聚是可以接受的。","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"在类库中的确如此。高内聚、低耦合是为了提高易理解、可维护等特点。但是对于上述类库来说,基本不会发生修改,理解起来有常识知识也不需要细读代码,所以它们的逻辑内聚是可以接受的","type":"true_false","answer":true},{"id":"learncoder_94_2349","stem":"人们常见的归类安置思想如果放在函数/方法上,就容易导致逻辑内聚,例如数学计算、逻辑计算、界面逻辑、IO逻辑等等。","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"归类方法的一个思路就是相似性,这的确容易导致逻辑内聚。好的内聚至少要有“相同”(时间、问题、数据、目标)性,而不仅仅是相似性。","type":"true_false","answer":true},{"id":"learncoder_94_2348","stem":"只要使用了switch、case多分支判定语句,就会导致逻辑内聚","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"逻辑分支是把多个相似的功能集中到一起,使用时常常用switch、case进行路径选择。但反过来的说法是不正确的,switch、case适用于各类多分支判定,各个分支未必就是相似功能的选择","type":"true_false","answer":false},{"id":"learncoder_94_2347","stem":"有伪代码如下<div><pre><code>Process_purchases total_purchases=0;<br>get number_of_purchases;<br>DO loop_index=1 to number_of_purchases get purchase; <br> total_purchases+=purchase;<br>END DO <br> sales_tax=total_purchases*sales_tax_percent;<br> amount_due=total_purchases+sales_tax;<br>END</code></pre></div><div>&nbsp;该方法有可能是哪种类型的内聚?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"1、从开始计算total_purchases,到基于total_purchases计算sales_tax,再到基于total_purchases和sales_tax计算amount_due,构成了明显的问题解决过程,所以是过程内聚。\n2、几个行为始终都使用了total_purchases,这种使用相同数据的行为是通信内聚;\n3、既是过程的又是通信的,所以是顺序内聚","type":"choice","options":{"A":"过程内聚","B":"通信内聚","C":"偶然内聚","D":"逻辑内聚","E":"功能内聚","F":"顺序内聚","G":"时间内聚"},"answer":"F"},{"id":"learncoder_94_2346","stem":"下面是一个类的框架代码,该类可能是哪种类型的内聚?&nbsp;<pre><code>// 订单<br>class Order { public function setOrderInfo($info){/* ... */}<br>// 设定订单信息<br>public function getPaymentInfo(){/* ... */}<br>// 取得付款信息<br>public function saveOrder(){/* ... */}<br>// 保存订单<br>public function sendMail(){/* ... */}<br>// 发送订单确认邮件 }</code></pre><p><br></p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"","type":"choice","options":{"A":"过程内聚","B":"通信内聚","C":"功能内聚","D":"偶然内聚","E":"逻辑内聚","F":"顺序内聚","G":"时间内聚"},"answer":"C"},{"id":"learncoder_94_2345","stem":"有代码如下<div><pre><code>class BudgetReport {<br> void generateBudgetReport() { /*…*/}<br> void saveToFile() { /*…*/}<br> void print() { /*…*/}<br>}</code></pre></div><div>&nbsp;BudgetReport是哪种类型的内聚?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"不同方法的目标很明显是不同的,所以不是功能内聚。这些方法都需要访问BudgetReport数据(建报告、保存、打印),所以是通信内聚的","type":"choice","options":{"A":"过程内聚","B":"通信内聚","C":"偶然内聚","D":"逻辑内聚","E":"功能内聚","F":"时间内聚","G":"通信内聚"},"answer":"G"},{"id":"learncoder_94_2344","stem":"有伪代码如下:<div><pre><code>Read_student_records_and_total_student_ages /*本程序的目的是计算得到number_of_records 和 total_age,并打印*/<br>number_of_records = 0;<br>total_age = 0; 读取学生记录;<br>DO WHILE 还有记录 total_age += age;<br> number_of_records++; 读取学生记录;<br>END DO<br>打印number_of_records 和 total_age;<br>END</code></pre><div>该伪代码是哪种类型的内聚?<p><br></p></div></div>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"计算和打印是两种目的,所以不是功能内聚。两种目的构成了处理的先后顺序,所以是过程内聚。如果目的仅仅是打印,前面所有代码都是为了完成最终的打印任务,那么它就是功能内聚的","type":"choice","options":{"A":"过程内聚","B":"通信内聚","C":"偶然内聚","D":"逻辑内聚","E":"功能内聚","F":"时间内聚","G":"通信内聚"},"answer":"G"},{"id":"learncoder_94_2343","stem":"下面的SSN Check程序如下,它的目标是:检查SSN的合法性,并从数据库中查询合法SSN的数量。&nbsp;<div><pre><code>Procedure SSN Check <br>Begin <br> If is_Number(Left_Three_Chars) Then Result=0 Else Result =1 <br> If is_Number(Middle_Two_Chars) Then Result=0 Else Result =1 <br> If is_Number(Right_Three_Chars) Then Result=0 Else Result =1 <br> If Result=0 Then Count = “SELECT COUNT(SSN) FROM patients WHERE SocNum=SSN” <br> Else Print “This is not a valid SSN”<br>End</code></pre></div><div>该程序是哪种类型的内聚?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"<p>从描述看,方法有两个目的,所以不是功能内聚。它们使用了相同的数据,所以是通信内聚</p>","type":"choice","options":{"A":"过程内聚","B":"顺序内聚<p><br></p>","C":"偶然内聚","D":"逻辑内聚","E":"功能内聚","F":"时间内聚","G":"通信内聚"},"answer":"G"},{"id":"learncoder_94_2342","stem":"有伪代码如下:&nbsp;<div><pre><code>Initialisation 打开交易记录文件; <br>提示“输入今天的日期”; <br>读取键盘输入到totay_date; transaction_count = 0; <br>IF NOT EOF transaction_count++; <br> 读取一条交易记录; <br>ENDIF <br> 打开报表文件; <br> 打印页头; <br> report_total = 0;<br>END</code></pre></div><div>该伪代码是哪种类型的内聚?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"在同一时间(初始化时)执行了多个不同目的(交易记录数量、日期、报表)的活动,所以是时间内聚","type":"choice","options":{"A":"过程内聚","B":"通信内聚","C":"时间内聚","D":"偶然内聚","E":"逻辑内聚","F":"功能内聚"},"answer":"C"},{"id":"learncoder_94_2341","stem":"有代码如下:<div><pre><code>procedure initializeData() { <br> font = \"times\"; windowSize = \"200,400\"; <br> foo.name = \"Not Set\"; <br> foo.size = 12; <br> foo.location = \"/usr/local/lib/java\"; <br>}</code></pre></div><div>该代码是哪种类型的内聚?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"在同一时间(初始化时)执行了多个不同目的(字体和窗口尺寸是显示问题,foo的初始化时数据问题)的活动,所以是时间内聚","type":"choice","options":{"A":"过程内聚","B":"通信内聚","C":"时间内聚","D":"偶然内聚","E":"逻辑内聚","F":"功能内聚"},"answer":"C"},{"id":"learncoder_94_2340","stem":"有伪代码如下:<div><pre><code>Read_all_files(file_code)<br> Switch(file_code) Case 1 :<br> 读取交易记录;<br> IF NOT EOF transaction_count++;<br> ENDIF BREAK;<br> Case 2 :<br> 读取顾客记录;<br> IF NOT EOF custom_count++;<br> ENDIF BREAK;<br> Case 3 :<br> 读取产品记录;<br> IF NOT EOF product_count++;<br> ENDIF<br> ENDSWITCH<br>END</code></pre></div><div>该伪代码是哪种类型的内聚?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"基于switch对参数的判定执行不同的功能路径是典型的逻辑内聚,这些不同路径之间是完全不同的事情,它们之前只是相似而已。","type":"choice","options":{"A":"过程内聚","B":"通信内聚","C":"逻辑内聚","D":"偶然内聚","E":"功能内聚","F":"时间内聚"},"answer":"C"},{"id":"learncoder_94_2339","stem":"有程序的伪代码如下:<div><pre><code>File_processing 打开员工文件; <br> 读取员工记录; <br> 打印页头; <br> 打开雇主文件; <br> 将page_count设置为1; <br> 将error_flag设置为false;<br>END</code></pre></div><div>该伪代码是哪种类型的内聚?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"除了前两行有些相关性之外,其他行之间都没有明显的相关性,所以是偶然内聚","type":"choice","options":{"A":"过程内聚","B":"通信内聚","C":"偶然内聚","D":"逻辑内聚","E":"功能内聚","F":"时间内聚"},"answer":"C"},{"id":"learncoder_94_2338","stem":"有代码如下<div><pre><code>public class Magic { <br> public void PrintDocument(Document d) { … } <br> public void SendEmail(string recipient, string subject, string text) { … } <br> public void CalculateDistanceBetweenPoints(int x1, int y1, int x2, int y2) { … } <br>}</code></pre></div><div>Magic类是哪种类型的内聚?<p><br></p></div>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"三个方法都是不同的目的,相互也没有明显的联系","type":"choice","options":{"A":"过程内聚","B":"通信内聚","C":"偶然内聚","D":"逻辑内聚","E":"功能内聚","F":"时间内聚"},"answer":"C"},{"id":"learncoder_94_2337","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_ZjKAT_F2AAFOdYxnr8M989.png\"><br></p><p>ModuleA可能是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"“读取处理存储”是一件事情的处理过程,所以它可能是过程内聚。三个部分都在处理同一个数据Data,所以可能是通信内聚。联合起来就是顺序内聚的。","type":"choice","options":{"A":"<p>过程内聚</p>","B":"<p>时间内聚</p>","C":"<p>功能内聚</p>","D":"<p>偶然内聚</p>","E":"<p>逻辑内聚</p>","F":"<p>通信内聚</p>","G":"<p>顺序内聚</p>"},"answer":"G"},{"id":"learncoder_94_2336","stem":"<p>下面的方法gcd是哪种类型的内聚?</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_ZtOAY7iMAAAaREYnMCo627.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"整个方法只有一个目标","type":"choice","options":{"A":"<p>功能内聚</p>","B":"<p>时间内聚</p>","C":"<p>过程内聚</p>","D":"<p>偶然内聚</p>","E":"<p>通信内聚</p>","F":"<p>逻辑内聚</p>"},"answer":"A"},{"id":"learncoder_94_2335","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_Zy2Ae3oLAABFu6Z-xgs623.png\"><br></p><p>Commission方法是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"明显只有一个目的","type":"choice","options":{"A":"<p>功能内聚</p>","B":"<p>过程内聚</p>","C":"<p>时间内聚</p>","D":"<p>偶然内聚</p>","E":"<p>逻辑内聚</p>","F":"<p>通信内聚</p>"},"answer":"A"},{"id":"learncoder_94_2334","stem":"<p>有伪代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_Z3mAZX8KAACGijhhWKI515.png\"><br></p><p>该代码是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"明显只有一个目的——计算sales_tax","type":"choice","options":{"A":"<p>功能内聚</p>","B":"<p>时间内聚</p>","C":"<p>过程内聚</p>","D":"<p>偶然内聚</p>","E":"<p>通信内聚</p>","F":"<p>逻辑内聚</p>"},"answer":"A"},{"id":"learncoder_94_2333","stem":"<p>有伪代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_Z8qAX5oUAADjdsTNp4E105.png\"><br></p><p>该伪代码是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"代码的几个段落都是为了处理error_flag、error_message和error_report,所以是相同的数据,属于通信内聚","type":"choice","options":{"A":"<p>时间内聚</p>","B":"<p>过程内聚</p>","C":"<p>功能内聚</p>","D":"<p>偶然内聚</p>","E":"<p>通信内聚</p>","F":"<p>逻辑内聚</p>"},"answer":"E"},{"id":"learncoder_94_2332","stem":"<p>有设计类图如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_aBuAaaJJAACWtp-FFzQ389.png\"><br></p><p>ConnectionPool的行为包括:获得get和释放release connection;得到connection的统计数据(CountStats、TimeStats)、持久化使用数据(Requested、Released)<br>该类是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"有三个不同的职责,所以不是功能内聚。三个职责都使用相关的数据(Connection),所以是通信内聚","type":"choice","options":{"A":"<p>过程内聚</p>","B":"<p>时间内聚</p>","C":"<p>功能内聚</p>","D":"<p>通信内聚</p>","E":"<p>偶然内聚</p>","F":"<p>逻辑内聚</p>"},"answer":"D"},{"id":"learncoder_94_2331","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_aOWAAnY5AADB0yHGCIk857.png\"><br></p><p>仅从代码分析,MonthEnd方法最可能是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"从代码分析,方法是典型的过程三段式:初始化、数据处理、输出(打印),所以最可能是过程内聚","type":"choice","options":{"A":"<p>时间内聚</p>","B":"<p>功能内聚</p>","C":"<p>偶然内聚</p>","D":"<p>通信内聚</p>","E":"<p>逻辑内聚</p>","F":"<p>过程内聚</p>"},"answer":"F"},{"id":"learncoder_94_2330","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_aTWAJQw7AACnDYVaUAA092.png\"><br></p><p>init方法是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"在同一时间(初始化时)执行了多个不同目的的活动,所以是时间内聚","type":"choice","options":{"A":"<p>过程内聚</p>","B":"<p>功能内聚</p>","C":"<p>时间内聚</p>","D":"<p>偶然内聚</p>","E":"<p>逻辑内聚</p>","F":"<p>通信内聚</p>"},"answer":"C"},{"id":"learncoder_94_2329","stem":"<p>有代码如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_acaAAV5jAABku5P16OI249.png\"><br></p><p>请问sample方法最可能是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"从代码上判定,sample是把逻辑相似但目的不同的多个片段组合再了一起,然后通过flag选择实际执行路径。这是典型的逻辑内聚","type":"choice","options":{"A":"<p>过程内聚</p>","B":"<p>时间内聚</p>","C":"<p>功能内聚</p>","D":"<p>偶然内聚</p>","E":"<p>通信内聚</p>","F":"<p>逻辑内聚</p>"},"answer":"F"},{"id":"learncoder_94_2328","stem":"<p>有代码如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_ammAWNanAADNfNOfH0c947.png\"><br></p><p>请问sample方法最可能是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"从代码上判定,是把逻辑相似但目的不同的多个片段组合再了一起,然后通过param选择实际执行路径。这是典型的逻辑内聚","type":"choice","options":{"A":"<p>时间内聚</p>","B":"<p>过程内聚</p>","C":"<p>功能内聚</p>","D":"<p>偶然内聚</p>","E":"<p>通信内聚</p>","F":"<p>逻辑内聚</p>"},"answer":"F"},{"id":"learncoder_94_2327","stem":"<p>有代码如下所示</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_bNSAb-2iAAESFyJS27A151.png\"><br></p><p>类EmailMessage是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"Login和SendMessage之间没有任何关系,不是相同的问题,不是相同的目标,时间上也不要求同时发生,所以是耦合内聚","type":"choice","options":{"A":"<p>时间内聚</p>","B":"<p>过程内聚</p>","C":"<p>功能内聚</p>","D":"<p>通信内聚</p>","E":"<p>逻辑内聚</p>","F":"<p>偶然内聚</p>"},"answer":"F"},{"id":"learncoder_94_2326","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_beiAJZRSAACVCateKgs187.png\"><br></p><p>类Rous是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"三个方法之间明显是没有联系的","type":"choice","options":{"A":"<p>过程内聚</p>","B":"<p>时间内聚</p>","C":"<p>功能内聚</p>","D":"<p>逻辑内聚</p>","E":"<p>偶然内聚</p>","F":"<p>通信内聚</p>"},"answer":"E"},{"id":"learncoder_94_2325","stem":"<p>有一个电梯类的设计如下图所示。</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_bsGAbtCbAABgwSI--H4010.png\"><br></p><p>其基本职责是:<br>getFloor: 得到电梯当前所处的楼层<br>moveLift:(按照内部数据的规划)移动电梯<br>startEmergencyProcedure:启动应急程序<br>raiseAlarm:报警<br>updateLED:更新LED屏显示<br>openDoors:开门<br>closeDoors:关门<br>startup:启动控制系统<br>shutdown:关闭控制系统<br>displayLog:显示日志<br>该类是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"行为之间没有明显的绑定因素(时间、数据、问题、逻辑相似、目标),所以是偶然内聚","type":"choice","options":{"A":"<p>过程内聚</p>","B":"<p>时间内聚</p>","C":"<p>功能内聚</p>","D":"<p>偶然内聚</p>","E":"<p>逻辑内聚</p>","F":"<p>通信内聚</p>"},"answer":"D"},{"id":"learncoder_94_2324","stem":"<p>有设计如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_b3WAZ9RSAAHTmKvtNps208.png\"><br></p><p>图书租借店的顾客Customer有四个行为:租借图书rental;付费lateFee;建立界面编辑顾客信息infoEditor;保持数据save。<br>该类是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"编辑和保存还是基于相同数据的,但租借和付费并不基于顾客自己的数据,所以是偶然内聚的","type":"choice","options":{"A":"<p>过程内聚</p>","B":"<p>时间内聚</p>","C":"<p>功能内聚</p>","D":"<p>通信内聚</p>","E":"<p>偶然内聚</p>","F":"<p>逻辑内聚</p>"},"answer":"E"},{"id":"learncoder_94_2323","stem":"<p>有代码如下</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_cPqAAh0QAADLDtMJOXI075.png\"><br></p><p>类Utils是哪种类型的内聚?</p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"Utils、tools等公用代码库往往是偶然内聚的,它们可能就是把多个独立函数封装在一起而已,这些函数间没有什么联系","type":"choice","options":{"A":"<p>时间内聚</p>","B":"<p>过程内聚</p>","C":"<p>功能内聚</p>","D":"<p>逻辑内聚</p>","E":"<p>偶然内聚</p>","F":"<p>通信内聚</p>"},"answer":"E"},{"id":"learncoder_94_2322","stem":"<p>下面的方法validate_checkout_request可能是哪种类型的内聚?</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx_dB6AcVbwAABPNL3o0JI659.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.模块化","analysis":"1、如果size和month的检查联合起来构成了一个完整的需求要求,那么就可以是功能内聚\n如果\n2、如果不符合1,但这个检查需要在有个时间点一起执行,那么就是时间内聚\n3、如果1、2都不符合,仅仅是因为它们都是检查数据正确性而组织在一起,那么就是逻辑内聚","type":"multiple_choice","options":{"A":"<p>功能内聚</p>","B":"<p>过程内聚</p>","C":"<p>时间内聚</p>","D":"<p>偶然内聚</p>","E":"<p>通信内聚</p>","F":"<p>逻辑内聚</p>"},"answer":"A;C;F"},{"id":"learncoder_127_2536","stem":"<p>用例图中的Actor就是系统的用户。</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"一个用户会有多个角色,每个角色都是独立actor。而且非用户但需要与系统交互的其他软件系统也可能扮演actor的作用。","type":"true_false","answer":false},{"id":"learncoder_127_2535","stem":"<p>用例之间的<<include>>关系可以避免不同用例之间出现描述文本重复。</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"true_false","answer":true},{"id":"learncoder_127_2534","stem":"<p>真正让用例变得重要的是用例图后面的用例文本描述,而不是用例图。</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"用例文本描述是需求内容,所以它才变得重要","type":"true_false","answer":true},{"id":"learncoder_127_2533","stem":"<p>《extend》关系可以将一个非常复杂难以描述的用例合理分解为多个不同用例。</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"true_false","answer":true},{"id":"learncoder_127_2532","stem":"<p>在开发后期扩展前期用例时,《extend》关系可以让前期用例文本保持不变。</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"true_false","answer":true},{"id":"learncoder_127_2531","stem":"<p>复杂用例关系《include》、《extend》、继承等容易让用例模型变得难以理解,考虑到用例文本描述才是更重要的内容,所以应该尽量限制这些复杂关系的使用。</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"true_false","answer":true},{"id":"learncoder_127_2530","stem":"<p>主参与者和辅助参与者之间的关系是</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"choice","options":{"A":"主参与者是人,辅助参与者是硬件设备或其他软件系统。","B":"主参与者和辅助参与者有共同的目标,共同发起用例,但是主参与者更重要。","C":"主参与者拥有目标,发起一个用例,辅助参与者参与用例,帮助主参与者完成目标。","D":"主参与者和辅助参与者有各自不同的目标,参与同一个用例,但是主参与者的目标更重要。"},"answer":"C"},{"id":"learncoder_127_2529","stem":"<p>参与者和用例之间的关系实质是:</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"choice","options":{"A":"目标","B":"交互","C":"拥有","D":"创造"},"answer":"B"},{"id":"learncoder_127_2528","stem":"<p>下面哪些用例之间的关系是用例图支持的</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"choice","options":{"A":"聚合","B":"包含","C":"依赖","D":"前导和后续"},"answer":"B"},{"id":"learncoder_127_2527","stem":"<p>搜索用例和按照名称搜索、按照日期搜索这两个用例之间的关系是</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"choice","options":{"A":"包含","B":"扩展","C":"关联","D":"继承"},"answer":"D"},{"id":"learncoder_127_2526","stem":"<p>现金付款用例和代金券付款、刷卡付款这两个用例之间的关系是</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"choice","options":{"A":"包含","B":"继承","C":"扩展","D":"关联"},"answer":"C"},{"id":"learncoder_127_2525","stem":"<p>ATM机取款、存款、转账这三个用例和查看账户余额用例之间可能的关系是</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"choice","options":{"A":"包含","B":"扩展","C":"继承","D":"关联"},"answer":"A"},{"id":"learncoder_127_2524","stem":"<p>下面哪些内容可以建模为用例</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"multiple_choice","options":{"A":"一次数据库读取","B":"一次用户与系统的交互","C":"一个报表展示界面","D":"一次事件处理过程","E":"一个复杂的计算","F":"一个用户任务"},"answer":"D;F"},{"id":"learncoder_127_2523","stem":"<p>下面哪些可能会被建模为actor</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"multiple_choice","options":{"A":"其他软件系统","B":"特殊硬件","C":"网络","D":"用户"},"answer":"A;B;D"},{"id":"learncoder_127_2522","stem":"<p>下列用例间关系正确的是</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"multiple_choice","options":{"A":"退货用例 扩展 销售用例","B":"面试 继承 招聘用例","C":"考试用例 包含 身份验证用例","D":"开卷考试用例 继承 考试用例","E":"用户管理用例 包含 新用户注册用例","F":"退货用例 扩展 送货用例"},"answer":"A;C;D"},{"id":"learncoder_127_2521","stem":"<p>粒度恰当的用例具有下列哪些特点</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"multiple_choice","options":{"A":"同一类用户发起和参与","B":"同一个地点发生","C":"完成业务增值","D":"同一段时间内发生"},"answer":"A;C"},{"id":"learncoder_127_2520","stem":"<p>用例建模的主要目的是:</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"choice","options":{"A":"捕获用户","B":"捕获目标","C":"捕获非功能需求","D":"捕获功能需求"},"answer":"D"},{"id":"learncoder_127_2519","stem":"<p>下图是一个关于借书过程的用例描述,正确吗?</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxidIaAUL1EAAC2Gh4fYFs595.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"混淆了用例图与流程图,用例描述功能特性,不描述流程。","type":"true_false","answer":false},{"id":"learncoder_127_2518","stem":"<p>下图是一个借阅人搜索图书的用例描述,它正确吗?</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxidQqADF7CAADIWVSfH_I106.png\"><br></p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"应该是继承关系,继承代表特化,扩展是主流程中发生了新的分支。","type":"true_false","answer":false},{"id":"learncoder_127_2517","stem":"<p>很多人养猫。假设有一个系统帮助养猫人定位猫的位置,那么它的用例图应该是下面的哪一个?</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"choice","options":{"A":"<p>前面都不对</p>","B":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxidZ6AX5bSAAAXO0LThBU900.png\"><br></p>","C":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxidaOAJcMFAAAfuzosJRk652.png\"><br></p>","D":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxidZiADGIBAAAgOdbhMm0663.png\"><br></p>"},"answer":"C"},{"id":"learncoder_127_2516","stem":"<p>一个顾客与销售公司达成订单的步骤包括:<br>1、查看产品目录,选择产品;<br>2、选择一个销售代表<br>3、提供快递地址;<br>4、付款<br>5、从销售代表那里接受快递号。<br>请结合上面描述,为销售业务建立简单的用例图。</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxid_qARwZkAAD_EL0BtYk956.png\"><br></p>"},{"id":"learncoder_127_2515","stem":"<p>智能售货机的基本功能如下:<br>顾客购买产品<br>供货员补货<br>供货员拿走机器中的钱<br>请为此建立用例图</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxieD2ALX7HAACjgRRGF44537.png\"><br></p>"},{"id":"learncoder_127_2514","stem":"<p>为帮助人们更好地参加“Java程序员认证”考试,需要开发一个在线训练系统。<br>在系统中用户可以请求进行小测验。系统会从数据库中选择一些题目,组成一份试卷,进行测验。测验中,如果用户请求,系统会给出答题的线索提示。测验之后系统会自动批改用户答案,。<br>导师负责提供题目和线索。有检查人员检查题目的质量,判定题目是否合格。<br>请为这样一个在线训练系统建立简单的用例图。</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxieGCAVDxiAAC9HOsK2Tc296.png\"><br></p>"},{"id":"learncoder_127_2513","stem":"<p>一个博物馆需要开发一个软件系统跟踪博物馆的游览活动。在一个游客团到达后,一名员工必须要记下日期、开始时间、人员数量等游览活动信息。员工还要从可选的博物馆导游中为游客团分配一名导游。被分配的导游会及时得到工作分配通知。在一次游览中,导游要记录可能发生的意外事件,例如游客生病。事件要记清楚所发生的游览活动、时间和详细描述。意外事件报告要提交给博物馆的安全办公室。</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxieLqAKEM9AAB9825B5u8532.png\"><br></p>"},{"id":"learncoder_127_2512","stem":"<p>大学图书馆的简单版本。图书馆管理系统必须跟踪记录书的信息,包括书目和具体书。书目详细内容包括题目、作者、出版社、版本、出版日期、ISBN、类别号。具体书需要描述书号、状态(可用还是已借出)、应归还日期。<br>图书馆管理系统还需要跟踪记录借阅者信息。借阅者有多种类型——教师、研究生、本科生,每种类型有不同的权限。所有的借阅者都需要记录姓名、地址、电话号码。教师需要额外记录办公室地址和办公室电话。研究生需要额外记录专业和导师。本科生需要额外记录专业和学分级。<br>图书馆管理系统需要记录借阅信息。借阅者把一系列书拿到流转台,管理员把书记录出馆,即形成借阅。一个借阅者可以有多次借阅记录,一次借阅可以借多本书。<br>借阅者可以浏览馆藏书目,查看各书目是否有书可以借阅。如果借阅者想借的书已经借出,那么他可以订阅该书目,包括订阅日期、优先级、完成日期。一个借阅者一次只能订阅一个书目。<br>借阅者还书时把书带到流转台,放入归还槽。管理员归还借阅记录中的书,同时把书入馆。<br>管理还要跟踪记录新书信息。<br>图书馆的管理者需要打印书目单报告,查看被订阅的书、过期未还的书。如果书被损坏,管理者可以核销该书。</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxieTqAMNCzAAGEa2P2fZw566.png\"><br></p>"},{"id":"learncoder_127_2511","stem":"<p>一个诊所有三个牙医和许多牙医卫生员,想开发一个系统管理病人信息。系统不需要保持任何医疗记录,只需要处理病人事宜。每个病人建立一个记录,包括姓名、出生日期、性别、初诊日期、终诊日期。病人记录按家庭分组。每个家庭需要记录户主姓名、地址和电话。每个家庭联系一个保险员记录。保险员记录包括保险公司名称、地址、账单联系人、电话号码。<br>在诊所中,每个员工(牙医、牙医卫生员、X光技术员)都有一个记录,包括姓名、地址、电话。 <br>每一次办公室诊疗都要保存信息,包括日期、自付费用、预付保险账号、实付保险费用。一个病人可以有多次诊疗,一次诊疗只针对一个病人。一次诊疗需要多名工作人员共同参与一个或多个工作程序。工作程序的详细信息需要记录下来,包括程序类型、描述、针对的牙齿、自付费用、总费用、保险费用、保险公司拒付费用。<br><br>系统需要跟踪记录单据信息。有两种单据类型:给保险公司的单据和给家庭单据。两种单据有相类似的地方,都列出了每一次诊疗信息、工作程序信息。<br>单据还包括发送日期、总费用、已支付费用、支付日期、拒绝费用。家庭单据还需要记录自付费用和预期支付日期。保险单据还记录保险支付费用和预期支付日期。<br>接待员要跟踪和录入病人和家庭户主的信息,要记录病人的诊疗信息。病人信息也可以被业务管理者录入和维护。业务管理者还维护诊所员工的信息。业务管理者还要打印单据。<br>病人的单据每月打印一次,寄送给家庭户主。保险单据每周打印一次。单据打印之后,业务管理者会检查一部分单据以确保内容正确。<br>在收到付款时,业务管理员还需要输入付款信息,包括付款日期和数额。业务管理员可以打印一份逾期未付款的单据报告,列出这些单据的户主信息。<br>诊所员工负责录入他们参与的诊疗程序信息,有时会查看他们一周或一个月内参与的诊疗程序报告。</p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"","type":"short_answer","answer":"<p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFxieWuAarJTAAHcCrvvJy8690.png\"><br></p>"},{"id":"learncoder_127_2510","stem":"为什么在下列情况下使用A创建B的对象?\nA拥有(聚集)B\nA包含(关联)B\nA紧密关联B","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"创建者模式的本意是利用已存在的高强度耦合,但本身并不能降低已存在的耦合,更不影响内聚。如果使用A之外对象C创建B,就会在B与C之间建立强耦合,所以创建者模式是为了避免C和B之间强耦合的出现","type":"choice","options":{"A":"避免增加A、B与其他类之间的耦合","B":"以上都不对","C":"提高A、B的内聚","D":"可以减少A、B之间的耦合"},"answer":"A"},{"id":"learncoder_127_2509","stem":"为什么应该将“行为”分配给拥有“行为所需数据”的类?","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"行为与数据相集中才能产生信息内聚(高内聚)的结果。行为与数据相集中并不能保证单一职责,反而可能产生多个职责位于同一个类的现象。集中与隐藏是两个不同的事情,集中在线,隐藏在后,二者没有必然联系","type":"choice","options":{"A":"实现信息隐藏","B":"以上都不对","C":"保持单一职责原则","D":"实现高内聚"},"answer":"D"},{"id":"learncoder_127_2508","stem":"分配职责时,将界面、持久化等功能与业务功能分开有哪些好处?","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"界面、持久化等功能与业务功能分开并不能改变已存的耦合关系,所以没有降耦合效果。分解后增加了复杂度而不是降低了复杂度。分解后能让业务类更加集中于业务功能,所以是能够提高内聚的","type":"choice","options":{"A":"降低复杂度","B":"以上都不对","C":"实现高内聚","D":"降低耦合"},"answer":"C"},{"id":"learncoder_127_2507","stem":"分配职责时,使用controller隔离界面与业务逻辑有哪些好处?","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"Controller只是隔断了界面与业务逻辑的联系,但并没有影响界面和业务逻辑自身的设计,所以没有提高它们内聚的效果。隔离会让二者本来存在的耦合变为没有耦合,所以是减少耦合的效果。","type":"choice","options":{"A":"实现业务逻辑的高内聚","B":"以上都不对","C":"实现界面的高内聚","D":"减少界面与业务逻辑之间的耦合"},"answer":"D"},{"id":"learncoder_127_2506","stem":"<p>下图是一个填词游戏的简要类图</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-EteAKAp0AATky88jzss985.png\"><br></p><p>一个新的行为是Player要能够找到一个对手,该行为应该由谁负责?<br></p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"对手是另一个用户,用户的信息都由User负责,所以行为也应该由User负责","type":"choice","options":{"A":"<p>User<br></p>","B":"<p>Player<br></p>","C":"<p>Game<br></p>","D":"<p>以上都不是<br></p>"},"answer":"A"},{"id":"learncoder_127_2505","stem":"<p>下图是一个填词游戏的简要类图</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-Ew6AOZhAAATky88jzss240.png\"><br></p><p>初始化游戏的行为应该由谁负责?<br></p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"初始化游戏属于创建行为,能够创建主要游戏对象的应该由新建的Controller负责。Main方法负责启动的是整个程序,但不需要直接初始化一场Game","type":"choice","options":{"A":"<p>Main方法所在的类<br></p>","B":"<p>User<br></p>","C":"<p>Game<br></p>","D":"<p>新建Controller<br></p>","E":"<p>以上都不是<br></p>"},"answer":"D"},{"id":"learncoder_127_2504","stem":"<p>下图是一个填词游戏的简要类图</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-EymAUJGQAATky88jzss541.png\"><br></p><p>做出一个移动(Move)的行为应该由谁负责?<br></p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"行为的本质是新建一个Move对象,所以是创建问题,根据创建者模式,应该由Player负责(紧密关联)","type":"choice","options":{"A":"<p>User<br></p>","B":"<p>Player<br></p>","C":"<p>新建的Controller<br></p>","D":"<p>Word<br></p>","E":"<p>Game<br></p>","F":"<p>以上都不是<br></p>"},"answer":"B"},{"id":"learncoder_127_2503","stem":"<p>下图是一个填词游戏的简要类图</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-E0SAeqxZAATky88jzss616.png\"><br></p><p>当一个Move触发了游戏应该结束的规则后,结束游戏的行为应该由谁负责?<br></p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"结束游戏行为实质是创建一个FinishedGame,依据创建者模式应该由Game负责。","type":"choice","options":{"A":"<p>Main方法所在的类<br></p>","B":"<p>User<br></p>","C":"<p>新建Controller<br></p>","D":"<p>Player<br></p>","E":"<p>Game<br></p>","F":"<p>以上都不是<br></p>"},"answer":"E"},{"id":"learncoder_127_2502","stem":"<p>下图是一个填词游戏的简要类图</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-E3SAXkJSAATky88jzss659.png\"><br></p><p>图中省略了游戏的界面设计。如果现在需要考虑界面问题,界面行为(例如按钮点击)与逻辑类(类图中的具体类)之间的配合应该由谁负责?<br></p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"依据控制者模式,应该使用新建的controller负责联系用户行为和业务逻辑类","type":"choice","options":{"A":"<p>Main方法所在的类<br></p>","B":"<p>User<br></p>","C":"<p>Player<br></p>","D":"<p>Game<br></p>","E":"<p>新建Controller<br></p>","F":"<p>以上都不是<br></p>"},"answer":"E"},{"id":"learncoder_127_2501","stem":"<p>下图是一个填词游戏的简要类图</p><p><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/yuanketang/wKgAZFx-E5OAIKM2AATky88jzss065.png\"><br></p><p>游戏希望增加暂停存盘和事后复盘的功能,应该由哪个类负责?<br></p>","key_points":"知识点.练习.专业课练习.软件工程.未分类","analysis":"暂停存盘和事后复盘都是持久化行为,按照纯虚构模式应该设计专门的独立持久化类负责","type":"choice","options":{"A":"<p>以上都不是<br></p>","B":"<p>Main方法所在的类<br></p>","C":"<p>User<br></p>","D":"<p>新建Controller<br></p>","E":"<p>Player<br></p>","F":"<p>Game<br></p>"},"answer":"A"},{"id":"learncoder_161_23529","stem":"\t已知两个实数x=-68 y=-8.25,它们在C语言中定义为float型变量,分别存放在寄存器A和B中。另外,还有两个寄存器C和D。A、B、C、D都是32位寄存器。请问(要 求用十六进制表示二进制序列):1)寄存器A和B中的内容分别是什么?2)x和y相加后的结果存放在寄存器C中,寄存器C中的内容是什么?3)x和y相减后的结果存放在寄存器D中,寄存器D中的内容是什么?注:float型变量在计算机中都被表示成IEEE 754单精度格式。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"1)float型变量在计算机中都被表示成IEEE 754单精度格式 x=一68=一(1000100),=一1.0001×26,符号位为1,阶码为127+6=128+5=(1000 0101)2,尾数为1.0001,所以小数部分为000 1000 0000 0000 0000 0000,合起来整个浮点数表示为1 1000 0101 000 1000 00000000 000d 0000,写成十六进制为C2880000HoY=一8.25=一(1000.01)2=一1.00001×23,符号位为1,阶码为127+3=128+2=(1000 0010)2,尾数为1.00001,所以小数部分为000 0100 0000 0000 0000 0000,合起来整个浮点数表示为1 10000010 000 0100 0000 0000 0000 0000,写成十六进制为C1040000H 2)两个浮点数相加的步骤如下。①对阶: Ex=10000101, Ey=10000010,则[Ex-Ey]补=[Ex]补+[一Ey]补=1000 0101+0111 1110=0000 0011Ex大于Ey所以对y进行对阶。对阶后,y一0.00100001×26②尾数相加: x的尾数为一1.000 1000 0000 0000 0000 0000, y的尾数为一0.001 0000 10000000 0000 00000用原码加法运算实现,两数符号相同,做加法,结果为一1.001 1000 1000 00000000 0000 00000即x加y的结果为一1.001 1000 1×26,所以符号位为1,尾数为001 1000 1000 0000 00000000,阶码为127+6=128+5,即1000 0101,合起来为1 1000 0101 001 1000 1000 0000 00000000,转换为十六进制形式为C2988000Ho所以寄存器C中的内容是C2988000H 3)两个浮点数相减的步骤同加法,对阶的结果也一样,只是尾数相减。尾数相减: x的尾数为一1.000 1000 0000 0000 0000 0000, y的尾数为一0.001 0000 1000 0000 0000 00000用原码减法运算实现,两数符号相同,做减法。符号位取大数的符号,为1;数 值部分为大数加小数负数的补码,即1.000 1000 0000 0000 0000 0000+ 1.1101111 10000000000000000.111 0111 1000 0000 0000 0000x减y的结果为一0.111 01111×26=1.1101111×25,所以符号位为1,尾数为110 1111 00000000 0000 0000,阶码为127+5=128+4=(1000 0100)2,合起来为1 1000 0100 110 1111 0000 00000000 0000,转换为十六进制形式为C26F0000H 所以寄存器D中的内容是C26F0000H"},{"id":"learncoder_161_23523","stem":"浮点数的阶码为什么通常釆用移码?","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"假设采用n位数值位,由移码的定义可知,有如下关系<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第2章)/image6.png'/>因此,正数的移码一定大于负数的移码,这个是移码与原码、补码、反码的一个重要区 别。更重要的是,移码具有如下性质:当x>y时,[x]移>[y]移"},{"id":"learncoder_161_23526","stem":"假定在一个8位字长的计算机中运行如下类C程序段:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第2章)/image1.png'/>若编译器编译时将8个8位寄存器Rl-R8分别分配至变量x、 y、 m、 n、 Z1、 Z2、 k1和 k2,则回答下列问题(提示:带符号整数用补码表示):1)执行上述程序段后,寄存器R1、 R5和R6的内容分别是什么(用十六进制表示)?2)执行上述程序段后,变量m和kl的值分别是多少(用十进制表示)?3)上述程序段涉及带符号整数加/减、无符号整数加/减运算,这4种运算能否利用同一个加法器及辅助电路实现?简述理由。4)计算机内部如何判断带符号整数加/减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"1) 27/64=0.011011=0.11011×2-1当补码和尾数都采用补码表示时: 1,111; 0.11011000阶码采用移码、尾数采用补码表示时: 0,111; 0.110110002) -27/64=1.011011=1.11011×2-1当补码和尾数都采用补码表示时: 1,111; 1.00101000阶码采用移码、尾数采用补码表示时: 0,111; 1.00101000"},{"id":"learncoder_161_23525","stem":"写出浮点数补码规格化形式。当尾数出现什么形式时需要规格化?如何规格化?","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"设浮点数尾数采用双符号位,当尾数呈现00.1×××⋯ ×或者11.0×××⋯ ×时,即为补码规格化形式。 当尾数出现01.×××⋯ ×或10.×××⋯ ×时,需要右规一次,即尾数右移一位,阶码 加10当尾数出现00.0×××⋯×或11.1×××⋯×时,需要左规N次(N不定),尾数每 左移一位,阶码减1,直到尾数呈现规格化形式为止"},{"id":"learncoder_161_23528","stem":"假设机器字长为16位,其中阶码6位(包含两位阶符),尾数10位(包含两位数符)。 已知十进制数x=125, y=-18.125,试计算[x-y]补(其结果用二进制真值表示,舍入时采用0 舍1入法)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"首先将x和y转换成浮点数x=125=0.11111010×20111y=一18.125 =一0.10010001×20101由于jx=00,0111,因此故[jx]补=00,0111,同理[-jy]=11,1011 故 [x]补=00,0111;00.11111010[y]补=00,0101;11.01101111下面可以按照5个步骤来做:1)对阶。求阶差: [<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第2章)/image7.png'/>=000111+111011=000010所以y的阶码要低2,故应该y向x对齐, y尾数需要右移两位,阶码加2,如下:[y]]补=000111,11.110110112)尾数求差00.11111010+00.00100101 (这里加的是y尾数的负数补码)01.00011111即[x-y]补=00,0111;01.00011111 3)规格化。尾数出现01.×××….×,说明需要右规一次即可,阶码加1,最后可得[x一y]补=00,1000;00.100011114)舍入处理。由于右规低位丢1,因此尾数末位加1,即尾数变为00.1001000005)溢出判断。最后阶符为00,没有溢出,最后应将[x-y]补=001000,00.10010000转换为 二进制真值,即x-y=0.10010000×2001000 =0.10010000×28 =10010000"},{"id":"learncoder_161_23522","stem":"\t设浮点数字长为16位,其中阶码5位(含一位阶符),尾数11位(含一位数符), 将十进制数+13/128写成二进制定点数和浮点数,并分别写出它在定点机和浮点机中的机器数 形式。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"假设x=+13/128其二进制形式可以表示为: x=0.00011010000定点数表示: x=0.00011010000浮点数规格化表示: x≡0.1101000000×2-11定点机中: [x]原=[x]补=[x]反=0.00011010000 浮点机中:[x]原=1,0011;0.1101000000°[x]补=1,Ⅱ01;011010000000[x]反=1,1100;0.1101000000°"},{"id":"learncoder_161_23524","stem":"在定点机和浮点机中分别如何判断溢出?","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"(1)定点机 定点机中可分别采用单符号位和双符号位判断补码加/减运算是否溢出,其中单符号位又 分为两种方法: ' (1)若参加运算的两个操作数符号相同,结果的符号位又与操作数的符号不同,则为溢出2)若求和时最高进位与次高位进位″异或″结果为1,则为溢出。 双符号位判别方法:当最后的运算结果两位符号位为10或者01时,溢出, 10表示负溢出, 01表示正溢出。(2)浮点机 浮点机中的溢出根据阶码来判断。当阶码大于最大正阶码时,即为浮点数溢出;当阶码 小于最小负阶码时,按机器零处理"},{"id":"learncoder_161_23531","stem":"设浮点数字长32位,其中阶码部分8位(含1位阶符),尾数部分24位(含1位数 符),当阶码的基值分别是2和16时:1)说明基值2和16在浮点数中如何表示。2)当阶码和尾数均用补码表示,且尾数采用规格化形式时,给出这两种情况下所能表示 的最大正数真值和非零最小正数真值。3)\t在哪种基值情况下,数的表示范围大?4)\t两种基值情况下,对阶和规格化操作有何不同?","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"1)基值2和16在浮点数中是隐含表示的,并不出现在浮点数中2)最大正数,也就是,尾数最大且规格化,阶码最大的数;最小正数,也就是,尾数最小且规格化(t为基值时,尾数的最高10g2t位不全为0的数为规格化数),阶码最小的数。当阶码的基值是2时, 最大正数: 0,111 1111; 0,11⋯1 真值是(1-2-23)x2 127 当阶码的基值是16时,最大正数: 0,111 1111; 0,11⋯1,真值是(1-2-23)×16127;最小正数: 1,0000000; 0,0001⋯0,真值是16-1293)在浮点数表示中,基值越大,表示的浮点数范围就越大,所以基值为16的浮点数表 示范围大 4)对阶时,需要小阶向大阶看齐,若基值为2的浮点数尾数右移一位,阶码加1;而基 值为16的浮点数尾数右移4位,阶码加10 格式化时,若基值为2的浮点数尾数最高有效位出现0,则需要尾数向左移动一位,阶 码减1;而基值为16的浮点数尾数最高4位有效位全为0时,才需要尾数向左移动,每移动4位,阶码减1"},{"id":"learncoder_161_23527","stem":"将下列十进制数表示成浮点规格化数,阶码4位(包含一位阶符),分别用补码和移 码表示;尾数9位(包含一位数符),用补码表示。1)27/642)-27/64","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":""},{"id":"learncoder_161_23530","stem":"\t假设某字长为8位的计算机中,带符号整数采用补码表示,x=-68, y=~80, x和y 分别存放在寄存器A和B中。请回答下列问题(要求最终用十六进制表示二进制序列):1)\t寄存器A和B中的内容分别是什么?2)\t若x和y相加后的结果存放在寄存器C中,则寄存器C中的内容是什么?运算结果 是否正确?此时,溢出标志(OF)、符号标志(SF)和零标志(ZF)各是什么?加法器最高 位的进位Cn是什么?3)\t若x和y相减后的结果存放在寄存器D中,则寄存器D中的内容是什么?运算结果 是否正确?此时,溢出标志(OF)、符号标志(SF)和零标志(ZF)各是什么?加法器最高 位的进位Cn是什么?4)若将加法器最高位的进位Cn作为进位标志(CF),则能否直接根据CF的值对两个带符号整数的大小进行比较?","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"1) [一68]补=「1000100B]补=10111100B≒BCH[-80]补=「1010000B]补=101 10000B≒BOH゜ 所以,寄存器A和寄存器B中的内容分别是BCH和BOH2) ① [x+y]补=[x]补+[y]补=10111100B+10110000B=(1)01101100B=6CH,最高位前面的一位 1被丢弃,因此,寄存器C中的内容为6CH ② 寄存器C中的内容为6CH,对应的真值为+108,而x+y的正确结果应是一68十(-80)=一148,故结果不正确。 ③溢出标志位(OF)可采用以下任意一条规则判断得到。 规则1:若两个加数的符号位相同,但与结果的符号位相异,则溢出。 规则2:若最高位上的进位和次高位上的进位不同,则溢出。 通过这两个规则都能判断出结果溢出,即溢出标志位(OF)为1,说明寄存器C中的内 容不是正确的结果。结果的第一位0为符号标志(SF),表示结果为整数。因为结果不为0,所以零标志zF=0综上,溢出标志(OF)为1,符号标志(SF)为0,零标志(ZF)为0④加法器最高位向前的进位Cn为13 ) ①[x-y]补=[x]补+[一y]补=10111100B+01010000B=(1)00001100B=0CH,最高位前面的一位1被丢弃,因此,寄存器D中的内容为CH②对应的真值为+12,结果正确。 ③两个加数的符号位相异一定不会溢出,因此溢出标志(OF)为0,说明寄存器D中 的内容是真正的结果;结果的第一位0为符号标志(SF),表示结果为正数;因为结果不为0,所以零标志zF=00 综上,溢出标志(OF)为0,符号标志(SF)为0,零标志(ZF)为0④加法器最高位向前的进位Cn为14)从2)和3)的例子就可得出,带符号整数一68和一80时, Cn为1,而带符号数十68和 80时, Cn一样为1,所以若将加法器最高位的进位Cn作为进位标志(CF),无法直接根据 CF的值判断两个带符号整数的大小0"},{"id":"learncoder_161_23532","stem":" 一个程序员在一台字长为32位的计算机上,写出下面的代码,从计算机计算能力是否充分利用的角度来看,该代码是否高效,如果高效请说明原因,如果还有缺点请指出,并提出解决方法并附上改进后的代码。(char为8位存储空间, int为32位存储空间)\t__int compare(char *A char *B){if(A==B)return strlen(A);int len, i;if(strlen(A)>strlen(B))len=strlen(A);elselen=strlen(B);\t*for(i=0;i<len&&A[i]==B[i];i++);return i;}","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"本函数最主要的操作就是A[I]=B[i],但由于A[i]和B[i]都是char类型的,故每次用32 位的运算器来进行char变量的比较,都是将char变量转换为int类型后进行比较的。这其实 浪费了运算器3/4的运算能力。所以改进方法就是,一次比较连续的4个char变量,代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第2章)/image8.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第2章)/image9.png'/>"},{"id":"learncoder_161_23534","stem":"\t(2017年统考真题)已知,计算f (n)的C语言<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第2章)/image2.png'/>函数f1如下:int f1(unsigned n){int sum=1, power=1;for(unsigned i=0;i<=n~l;i++){power *= 2;sum += power;}}将f1中的int都改为float,可得到计算f(n)的另一个函数f2假设unsigned和int型数据int型数据都占32位,float采用IEEE 754单精度标准。请回答下列问题。(1)当n=0时,f1会出现死循环,为什么?若将f1中的变量i和变量n都定义为int型,则f1是否还会出现死循环?为什么?(2)f1(23)和f2 (23)的返回值是否相等?机器数格式是什么(用十六进制表示)?(3)f1 (24)和f2 (24)的返回值分别为33554431和33554432.0,为什么不相等?(4)\tf (31) =232-1,而f1 (31)的返回值却为-1,为什么?若使f1 (n)的返回值与f (n) 相等,则最大的n是多少?(5)\tf2 (127)的机器数为7F80 0000H,对应的值是什么?若使f2 (n)的结果不溢出,则最大的n是多少?若使f2 (n)的结果精确(无舍入),则最大的n是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"(1)由于i和n是unsigned型,故“i<=n-1”是无符号数比较, n=0时,n-1的机器数为全1;值是232-1,为unsigned型可表示的最大数,条件“i<=n-1”永真,因此出现死循环。 若i和n改为int类型,则不会出现死循环。因为″i<≒n-1”是带符号整型比较,当n=0时, n-1的值是一1,当i=0时,条件″i<=n-1”不成立,此时退出for循环。(2)f1(23)与f2(23)的返回值相等 f (23)=223+l-1=224-1,它的二进制形式是24个1 int型变量占32位,没有溢出。float有1个符号位, 8个指数位, 23个底数位, 23个 底数位可以表示24位的底数。所以两者返回值相等fl (23)的机器数是00FFFFFFHf2 (23)的机器数是4B7FFFFFH显而易见前者是24个1,即00000000 1111 1111 1111 1111 1111 1111(2),后者的符号位是0,指数位为23+127(10)=1001 0110(2),底数位是111 1111 1111 1111 1111 (2)。(3)当n=24时, f(24) =1 1111 1111 1111 1111 1111 1111B,而float型数只有24位有效位,舍入后数值增大,所以f2(24)比f1(24)大1(4)显然f(31)已超出了int型数据的表示范围,用f1(31)实现时得到的机器数为32个1,作为int型数解释时其值为一1,即f1 (31)的返回值为一1因为int型最大可表示数时0后面加31个1,故使f1(n)的返回值与f (n)相等的最大n是30(5) ⅢEE754标准用〃阶码余1,尾数余0″表示无穷大。F2返回值为float型,机器数7F80 0000H对应的值是+∞ 。`‘当n=126时, f (126)=2127-1=1.1⋯ 1×2126,对应的阶码为127+126=253,尾数部分舍入后阶码加1,最终阶码为2钟,是IEEE754单精度格式表示的最大阶码。故使f2结果不溢出 的最大n值为126当n≡23时, f (23)为24个1,float型数有24位有效位,所以不需舍入,结果精确。 故使f2获得精确结果的最大n值为23"},{"id":"learncoder_161_23533","stem":" 1991年2月25日,海湾战争中,美国在沙特阿拉伯的达摩地区设置了爱国者导弹,用以拦截伊拉克的飞毛腿导弹,结果失败了,致使飞毛腿导弹击中了美国的一个兵营,造成28名士兵死亡。拦截失败的原因是由于一个浮点数的精度问题造成的。爱国者导弹系统中有一个内置时钟,用计数器实现,每隔0.1S计数一次。程序用0.1乘以计数器的值得到以秒为单位的实际值。0.1的二进制表示一个无限循环序列:0.00011[0011]B (方括号中的序列是重复的)。请问:1)假定用一个类型为float的变量x来表示0.1,则变量x在机器中的机器数是什么(要求写成十六进制形式)?绝对值|x-0.1 |的值是什么(要求用十进制表示)?2)爱国者系统启动时计数器的初始值为0,并开始持续计数。假定当时系统运行了 200h, 则程序计算的时间和实际时间的偏差为多少?如果爱国者根据飞毛腿的速度乘以它被侦测到 的时间来预测位置,若飞毛腿的速度为2000m/s,则预测偏差的距离为多少?'","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"1) 0.1=0.0 0011[0011]B=+ 1.1 0011 0011 0011 0011 0011 00Bx2-4\tfloat类型采用IEE754单精度浮点数格式见表2-31 <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第2章)/image10.png'/>符号位s为0, 阶码e=127-4=123=0111 1011B,尾数的小数部分为0.1001 1001 1001 10011001 100B,因此,在机器中float 型变量x表示见表2-32 <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第2章)/image11.png'/>即0011 1101 1100 1100 1100 1100 1100B,用十六进制表示为3DCC CCCCH 由于float 类型的精度有限,只有24位有效位数,尾数从最前面的1开始一共只能表示24位,后面的有效数字全部被截断,故x与0.1的误差为Ix-0.11=0.000 0000 0000 0000 0000 0000 00001100[1100]B 该值约等于0.11Bx2-37,大约为5.59×10-9B2)爱国者系统运行200h后,共计数200×3600×10次=72×105次。因此,程序计算的时间和实际时间的偏差约为5.59×10-9×72×105s=0.0402so预测偏差距离约为2000m/sx0.0402s=80.4m"},{"id":"learncoder_161_23516","stem":"(2013年统考真题)某数采用LEEE 754标准中的单精度浮点数格式表示为C640 0000H,则该数的值是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"choice","options":{"A":"-1.5X(2^13)","B":"-1.5X(2^12)","C":"-0.5X(2^13)","D":"-0.5X(2^12)"},"answer":"A"},{"id":"learncoder_161_23521","stem":"\t写出一个定点8位字长的二进制数在下列情况中所能表示的真值(数值)范围:1)不带符号数表示。2)原码表示。3)补码表示。4)反码表示。5)移码表示。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"1)不带符号数表示范围: 0-2552)原码表示:一127一+1273)补码表示:一128一+1274)反码表示:一127一+1275)移码表示:一128一+127"},{"id":"learncoder_161_23515","stem":"串行运算器结构简单,其运算规律是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"串行运算器只有一个全加器,不存在先行进位,运算肯定是由低位到高位0","type":"choice","options":{"B":"由低位到高位先行进行借位运算","C":"由低位到高位逐位运算","A":"由低位到高位先行进行进位运算","D":"由高位到低位逐位运算"},"answer":"C"},{"id":"learncoder_161_23518","stem":"\t(2013年统考真题)用海明码对长度为8位的数据进行检/纠错时,若能纠正一位错,则校验位数至少为(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"直接套用公式即可,设校验位的位数为k,数据位的位数为n,应满足下述关系: 2k≧n+k+1 本题n=8,当k=4时, 24>8+4+1,符合要求,可得校验位至少是4位","type":"choice","options":{"D":"5","A":"2","C":"4","B":"3"},"answer":"C"},{"id":"learncoder_161_23517","stem":"(2013年统考真题)某字长为8位的计算机中,已知整型变量x、y的机器数分别为[x]补=1 1110100, [y]补=1 0110000。若整型变量z=2x+y/2,则z的机器数为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"choice","options":{"D":"溢出","C":"10101010","B":"0 0100100","A":"1 1000000"},"answer":"A"},{"id":"learncoder_161_23520","stem":"\t已知有效信息位为1100,试用生成多项式G(x)=10U将其编成CRC码。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"57.空","type":"short_answer","answer":"有效信息M(x)=1100=x3+x4,可知 n=4G(X)=1011=X3+X+1由于G(X)为k+1位,可知k=3 故将有效信息左移3位后再被G(X))模2除,即<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第2章)/image5.png'/>因此M(X) =x3十R(x)=1100000+010=1100010即为CRC码。 总的信息位为7位,有效信息位为4位,冗余位(检测位)为3位,上述1100010码又称为(7, 4)码"},{"id":"learncoder_161_23514","stem":"ALU 属于(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"ALU属于组合逻辑电路","type":"choice","options":{"B":"控制器","A":"时序电路","D":"寄存器","C":"组合逻辑电路"},"answer":"C"},{"id":"learncoder_161_23513","stem":"并行加法器中,每位全和的形成除与本位相加两数数值位有关外,还与(\t)有关。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":",每位全和 的形成除与本位相加两数数值位有关外,还与低位数送来的进位有关,","type":"choice","options":{"C":"高位数值大小","A":"低位数值大小","B":"低位数的全和","D":"低位数送来的进位"},"answer":"D"},{"id":"learncoder_161_23507","stem":"(2014年统考真题)float型数据常用IEEE 754单精度浮点格式表示。假设两个float 型变量x和y分别存放在32位寄存器fl和f2中,若(f1) =CC90 0000H, (f2) =B0C0 0000H, 则x和y之间的关系为()","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"(f1)和(f2)对应的二进制分别是(110011001001⋯⋯)2和(101100001100⋯⋯)2’根据IEEE754标准,可知(f1)的数符为1 阶码为10011001,尾数 为1.001,而(f2)的数符为1,阶码为01100001,尾数为1.1,则可知两数均为负数,符号相同, , (f1)的绝对值为1.001×226, (f2)的绝对值为1.1×2-30,则(f1)的绝对值大于(f2)的绝对值,符号为负,真值大小相反,故(f1)的真值小于(f2)的真值,即x<y","type":"choice","options":{"A":"x<y且符号相同","C":"x>y且符号相同","D":"x>y且符号不同","B":"x<y且符号不同"},"answer":"A"},{"id":"learncoder_161_23510","stem":"\t一个浮点数N可以用下式表示:N=mxrme,其中,e=reg;m:尾数的值,包括尾数采用的码制和数制;e:阶码的值,一般釆用移码或补码,整数;rm:尾数的基;re:,阶码的基;P:尾数长度,这里的P不是指尾数的二进制位数,当:rm=16时,每4个二进制位表示一位尾数;q:阶码长度,由于阶码的基通常为2,因此,在一般情况下,q就是阶码部分的二进制 位数。研究浮点数表示方式的主要目的是用尽量短的字长(主要是阶码字长q和尾数字长的和) 实现尽可能大的表述范围和尽可能高的表数精度。根据这一目的,上述6个参数中只有3个 参数是浮点数表示方式要研究的对象,它们是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"阶码基值通常取为2,在目前所有的计算机系统中已经成为定论,因为 在以二进制为基本计算单位的计算机系统中阶码采用其他进位制没有任何好处,所以不是 主要的研究对象。 阶码的值e通常采用整数、移码表示,只有极少数机器中采用补码表示,所以e不是主 要的研究对象。 尾数m在多数计算机中用纯小数表示,只有少数机器采用整数表示,而尾数的码制有原 码和补码两种,然而,尾数m的表示方法与浮点数的表述范围和表述精度基本无关,所以m 也不是主要的研究对象。","type":"choice","options":{"D":"rm, p,q","B":"rm,e, rm","C":"re, p, q","A":"m、e、rm"},"answer":"D"},{"id":"learncoder_161_23509","stem":"在C语言程序中,下列表达式中值为True的有(\t)。I 123456789=(int)(float)123456789II 123456=(int)(float)123456III 123456789=(int)(double)123456789","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"解答本题需要有一定的C语言基础。● 在C语言中,float类型对应IEEE 754标准的单精度浮点数格式,也即float型数据 的有效位数只有24位(相当于有7位十进制有效位数)。 .● double类型对应吧IEEE 754标准的双精度浮点数格式,有效位数有53位(相当于有17位十进制有效位数)。● int类型为32位整数,有31位有效位数(最大数为2147483648)。整数123456789的有效位数为9位,转换为float型数据后发生了有效位数丢失,再转换为int型数据时,已经不是123456789了,所以,选项I 两边的值不相等,故该表达式为False 数据改为123456后,有效位数只有6位,转换为float类数据后有效位数没有丢失,因而数值没变,再转换为int型数据时,还是123456,所以,选项″123456⋯(inO(丑o呐123456〃 两边的值相等,故该表达式为true整数123456789的有效位数为9位,转换为doub1e型数据后,不会发生有效位数丢失,再转换为int型数据时,还是123456789,所以,选项Ⅲ 两边的值相等,故该表达式为true综上所述, Ⅱ和iii的值都为true","type":"choice","options":{"D":"I 、 II、 III","C":"II、III","A":"I、II","B":"I、III"},"answer":"C"},{"id":"learncoder_161_23512","stem":"组成一个运算器需要多个部件,但下面所列(\t)不是组成运算器的部件。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"运算器中重点介绍了运算器的基本结构,地址寄存器并不是运算器的部件","type":"choice","options":{"D":"地址寄存器","B":"数据总线","A":"通用寄存器组","C":"ALU"},"answer":"D"},{"id":"learncoder_161_23508","stem":"(2015年统考真题)下列关于浮点数加减法运算的叙述中,正确的是(\t)。I 对阶操作不会引起阶码上溢或下溢II.右归和尾数舍入都可能引起阶码上溢III 左归时可能引起阶码下溢IV.尾数溢出时结果不一定溢出","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"对阶操作小阶向大阶看齐,不会引起阶码的上溢或下溢, Ⅰ正确;右归 需要阶码加1,有可能引起阶码上溢,尾数舍入时,若需在尾数的末位加1,有可能会使尾数 溢出,需再次右归,同样可能引起阶码上溢, Ⅱ正确;每次左归时阶码减1,有可能引起阶 码下溢, Ⅲ正确;尾数溢出时需要进行右归,只有当右归后阶码溢出,结果才真正溢出, Ⅳ正确","type":"choice","options":{"A":"仅II、III","D":"I、II、III、IV","B":"仅 I、II、III","C":"仅I、III、IV"},"answer":"D"},{"id":"learncoder_161_23511","stem":"加法器采用先行进位的根本目的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"用先行进位的根本目的就是让进位信号传递的时延更小","type":"choice","options":{"B":"快速传递进位信号","C":"增强加法器的功能","D":"以上都不是","A":"优化加法器的结构"},"answer":"B"},{"id":"learncoder_161_23500","stem":"在浮点机中,判断原码规格化的形式的原则是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"如果浮点数采用原码表示,则尾数的规格化形式为0.1×××⋯ ×或者1.1×××⋯× ","type":"choice","options":{"A":"尾数的符号位与第一数位不同","B":"尾数的第一数位为1,数符任意","D":"阶符与数符不同","C":"尾数的符号位与第一位相同"},"answer":"B"},{"id":"learncoder_161_23499","stem":"若浮点数用补码表示,则判断运算结果为规格化数的方法是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"断运算结果是否规格化和阶符没有关系。如果是双符号位,则规格化 的形式为符号位和小数部分最高位相异(由于任何正确的数,两个符号位的值总是相同的, 因此前提是两位符号位要相同)。此外,左规是当尾数运算后没有发生溢出但不符合规格化标 准时进行的操作,而右规是当尾数发生溢出时进行的操作","type":"choice","options":{"A":"阶符与数符相同,则为规格化数","D":"数符与小数点后第1位数字相同,则为规格化数","C":"数符与小数点后第1位数字相异,则为规格化数","B":"小数点后第一位为1,则为规格化数"},"answer":"C"},{"id":"learncoder_161_23501","stem":"\t在浮点机中,( )是隐藏的。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"在浮点机中,基数默认为2,故可以隐藏","type":"choice","options":{"A":"阶码","B":"数符","D":"基数","C":"尾数"},"answer":"D"},{"id":"learncoder_161_23503","stem":"\t(2009年统考真题)浮点数加/减运算过程一般包括对阶、尾数运算、规格化、舍入 和判断溢出等步骤。设浮点数的阶码和尾数均釆用补码表示,且位数分别为5位和7位(均 含两位符号位)。若有两个数,即X=27X29/32, y=25x5/8,则用浮点数加法计算x+y的最终结 果是()","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"首先,可将x、 y分别记为00,111; 00.11101和00,101; 00.10100,然后 根据浮点数的加法步骤进行计算。 ’第一步:对阶 x、 y阶码相减,即同0,111-00,101=00,111+11,011=00,010,当然这里就不 用计算了,从题目给出的条件也可以看出, x的阶码比y的阶码大20根据小阶向大阶看齐的原则,将y的阶码加2,尾数右移2位,即y变成00,111; 00.001010第二步:尾数相加,即00.11101+00.00101=01.00010,尾数相加结果符号位为01,故需 进行右规。第三步:规格化。将尾数右移1位,阶码加1,得x十y为01,000; 00.10001,阶码符号位 为01,说明发生溢出,且为正溢出","type":"choice","options":{"B":"00111 0100010","D":"发生溢出","A":"00111 1100010","C":"01000 0010001"},"answer":"D"},{"id":"learncoder_161_23506","stem":"(2012年统考真题)float类型(即IEEE 754标准中的单精度浮点数格式)能表示的「最大整数是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"首先,最大整数肯定是正数,取数符ms=0其次,要使得该数最大,尾数必须最大,即尾数m=.11⋯1,其值为1.11⋯1 (小数点前面的1隐藏),该数怎么转换为 十进制?因为尾数后面有23个1,显然加上一个2-23的结果为10.00⋯0,即2所以1.11⋯1=2-2-23由于采用单精度格式,因此阶码为8位(采用移码表示),最大是否为全1?显然不行, 阶码全0和全1都是不可取的,因此最大可以取到11111110,即十进制254,然后再减去偏移量127,最后可得最大指数127 综上所述,可以得到float类型(即IEEE 754单精度浮点数格式)能表示的最大整数是2127×(2-2-23),即2128-2104:","type":"choice","options":{"B":"(2^127)-(2^104)","D":"(2^128)-(2^104)","C":"(2^127)-(2^103)","A":"(2^126)-(2^103)"},"answer":"D"},{"id":"learncoder_161_23505","stem":"(2011年统考真题)float型数据通常用IEEE 754标准中的单精度浮点数格式表示。 如果编译器将float型变量x分配在一个32位浮点寄存器FR1中,且x=-8.25,则FR1的内 容是()","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题着重考查IEEE754单精度浮点数格式。只要知道格式,基本上就是硬套公式了。首先,将x表示成二进制,即一1000.01=一1.00001×23其次,应该计算阶码(不妨设为E),根据IEEE 754单精度浮点数格式有E-127=3,故E=130,换成二进制为1000 0010 最后要记住,最高位″1″是被隐藏的。因此 根据IEEE754格式:符号(1位) +偏移的阶码(8位)十尾数(23位),即1+1000 0010+0000 1000 0000 0000 000转换成十六进制: 1100 0001 0000 0100 0000 0000 0000 0000,即C1040000H","type":"choice","options":{"D":"C1C2 0000H","A":"C104 0000H","B":"C242 0000H","C":"C184 0000H"},"answer":"A"},{"id":"learncoder_161_23502","stem":"\t关于浮点数在IEEE754标准中的规定,下列说法中错误的是(\t)。I浮点数可以表示正无穷大和负无穷大两个值II.如果需要,也允许使用非格式化的浮点数III对任何形式的浮点数都要求使用隐藏位技术IV.对32位浮点数的阶码采用了偏移值为127的移码表示,尾数用原码表示","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"I :这个是规定的,浮点数可以表示正无穷大和负无穷大两个值。 Ⅱ :在特殊的场合当然可以使用非规格化的浮点数,只是在做加减运算时,如果不使用 规格化浮点数,就没有办法运算。 Ⅲ:只对规格化的浮点数才使用隐藏位技术(隐藏最高位1) 。 Ⅳ‥浮点数IEE 754标准规定,对32位浮点数的阶码用偏移值为127的移码表示,尾 数用原码表示","type":"choice","options":{"A":"I、III","C":"只有III","B":"II、III","D":"I、III、Iv"},"answer":"C"},{"id":"learncoder_161_23504","stem":"(2010年统考真题)假定变量i、f、d的数据类型分别为int、float, double (int用补码表示,float和double用IEEE 754标准中的单精度和双精度浮点数据格式表示),已知i=785, f=1.5678e3 d=1.5e100,若在32位机器中执行下列关系表达式,则结果为真的是(\t)。I . i==(int)(float)I \t II \tf==(float)(int)fIII. ==(float)(double)f\t IV.\t(d+f)-d==f","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"先应当明确, int一float-double,表达数据的精度是不断提高的, 并且从低到高的转换一般不损失精度,而从高到低的转换可能损失精度。此题中需要找出结 果为真的,按照前面说的规则, I 、 ⅠⅡ很容易就可以判断出,一定是真(此时便可以写出结 果,但出于严谨,继续判断);而Ⅱ因为先将一个浮点型数转换为整数,后又转为浮点型,那 么精度一定会有损失,必为假; Ⅳ看上去是相等的,但在计算机的执行中, dlf会被自动转换 为双精度浮点数格式,所以等式左边的精度最终为双精度,而等式右边的f为单精度,故Ⅳ为假","type":"choice","options":{"C":"仅II、III","B":"仅I、III","A":"仅I、II","D":"仅III、Iv"},"answer":"B"},{"id":"learncoder_161_23494","stem":"\t在补码一位乘中,若判断位YnYn+1=01,则应执行的操作为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"前面知识点讲解中,总结了该操作的简单记忆方式,即假设yi+1`-yi=a, 那么对应的操作就是部分积先加上a*[X]补,再右移一位。。","type":"choice","options":{"A":"原部分积加[-X]补,然后右移一位","C":"原部分积加[-x]补,然后左移一位•","B":"原部分积加[x]补,然后右移一位","D":"原部分积加[x]补,然后左移一位"},"answer":"B"},{"id":"learncoder_161_23493","stem":"下列关于定点数原码一位乘算法的描述正确的是(\t)。I符号位不参加运算,根据数值位的乘法运算结果确定结果的符号位II.在原码一位乘算法过程中,所有移位均是算术移位操作III.假设两个n位数进行原码一位乘,部分积至少需要使用n位寄存器","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"I :在原码一位乘中,符号位是不参加运算的,结果的符号位是被乘数的符号位和乘数 的符号位″异或”的结果,故1错误。 Ⅱ:在原码一位乘算法中,由于参与操作的数是真值的绝对值,因此没有正负可言,故 在原码一位乘法中运算过程中所有的移位均是逻辑移位操作,即在高位添加0,故Ⅱ错误。 Ⅲ:由于在部分积相加中,可能导致两个小数相加大于1,因此部分积至少需要使用n十1 位寄存器,故Ⅲ错误。","type":"choice","options":{"A":"II、III","B":"只有II","C":"只有III","D":"全错"},"answer":"D"},{"id":"learncoder_161_23496","stem":"在补码加减交替除法中,参加操作的数和商符分别是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"首先做补码除法时,符号位是和数值位一起参加运算的(故采用的肯定不是绝对值的补码),因此商符在形成商值的过程中自动形成","type":"choice","options":{"C":"补码\t由两数符号位“异或”形成","D":"绝对值的补码\t由两数符号位“异或”形成","B":"补码\t在形成商值的过程中自动形成","A":"绝对值的补码\t在形成商值的过程中自动形成"},"answer":"B"},{"id":"learncoder_161_23492","stem":"\t当定点运算发生溢出时,应()","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"定点数运算如果发生溢出,则必须发出出错信息进行中断处理,不要和 浮点数的尾数溢出混淆","type":"choice","options":{"D":"发出出错信息","B":"向右规格化","A":"向左规格化","C":"舍入处理"},"answer":"D"},{"id":"learncoder_161_23495","stem":"\t在原码两位乘中,符号位单独处理,参加操作的数是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题属于概念题,在前面知识点讲解中,多次强调原码乘法采用的是绝 对值的补码","type":"choice","options":{"B":"绝对值的补码","A":"原码","D":"绝对值","C":"补码"},"answer":"B"},{"id":"learncoder_161_23497","stem":"\t假设机器字长为8位(含两位符号位),若机器数DAH为补码,则算术左移一位和算术右移一位分别得()","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"先将机器数DAH表示成二进制,即11011010,在前面知识点讲解中,提 过两位符号位的算术移位思想,即高位符号位不参与移位,低位符号位需要参与移位,算术左移变成10110100(补码算术左移,低位补0),转成十六进制,即B4H;算术右移变成11101101 (补码算术右移,高位添加符号位,此题应该补1),转成十进制,即EDH","type":"choice","options":{"D":"B4H 6DH","A":"B4H EDH","B":"F4H 6DH","C":"B5H EDH"},"answer":"A"},{"id":"learncoder_161_23498","stem":"下列关于各种移位的说法中正确的是( )I假设机器数采用反码表示,当机器数为负时,左移时最高数位丢0,结果出错;右移时最低数位丢0,影响精度II.在算术移位的情况下,补码左移的前提条件是其原最高有效位与原符号位要相同III在算术移位的情况下,双符号位的移位操作中只有低符号位需要参加移位操作","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"choice","options":{"A":"I、III","B":"只有II","C":"只有III","D":"i、 II、III"},"answer":"D"},{"id":"learncoder_161_23491","stem":"\t在定点机中执行算术运算时会产生溢出,其根本原因是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"choice","options":{"A":"主存容量不够","C":"操作数地址过大","B":"运算结果无法表示","D":"栈溢出"},"answer":"B"},{"id":"learncoder_161_23487","stem":"(2009年统考真题)一个C语言程序在一台32位机器上运行,程序中定义了 3个变量x、y、z,其中x和z是int型,y为short型。当x=127, y=~9时,执行赋值语句z=x+y 后,x、y、z的值分别是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"x和z为int型,说明x和z都占32位的存储空间0 127换成二进制为00000000 0000 0000 0000 0000 0111 1111,对应的十六进制为0000007FH z进行运算后变成118,换成二进制为0000 0000 0000 0000 0000 0000 0111 0110,对应的十六进制为00000076H 另外,因为y为short型,所以y所占存储空间为16位,且在计算机中使用补码表示(默认的)。一9的二进制表示为100000000000 1001,因此一9的补码表示为1111 1111 1111 0111 (符号位不变,其余位取反加1),对应的十六进制为FFF7H ","type":"choice","options":{"B":"x=0000007FH, y=FFF9H, z=FFFF0076H","C":"x=0000007FH, y=FFF7H, z=FFFF0076H","D":"x=0000007FH, y=FFF7H, z=00000076H","A":"x=0000007FH, y=FFF9H, z=00000076H"},"answer":"D"},{"id":"learncoder_161_23490","stem":"\t假设寄存器的内容为00000000,若它等于-128,则该机器采用了(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"当使用8位补码来表示一128时,是10000000 (假设采用一位符号位,两位类似),而移码恰好是补码的符号位取反,结果为000000000","type":"choice","options":{"C":"反码","B":"补码","D":"移码","A":"原码"},"answer":"D"},{"id":"learncoder_161_23489","stem":"(2015年统考真题)由3个“1”和5个“0”组成的8位二进制补码,能表示的最 小整数是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"最小整数一定是一个负数,最高位符号位应该为10还剩2个″1″和5 个″0″用来组成绝对值最大的负数,用补码表示负数时,负数的绝对值越大,其对应的补码越小,故其补码表示应该为10000011 (含符号位),即十进制数一125","type":"choice","options":{"C":"-32","B":"-125","D":"-3","A":"-126"},"answer":"B"},{"id":"learncoder_161_23486","stem":"设X为整数,[x]补=1,X1X2X3X4X5,若要X<~16, X1〜X5应满足的条件是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"首先一16的补码是1,10000 (第一个1为符号位),再次引用该结论:当使用补码表示时,如果符号位相同,则数值位越大,码值越大。因此,要使得x<一16,第一位 必须为0,后面则可以任意,即1,0××××,","type":"choice","options":{"A":"X1~X5至少有一个为1","D":"X1必须为0, X2〜X5任意","B":"X1必须为1, X2~X5至少有一个为1","C":"X1必须为0, X2〜X5至少有一个为1"},"answer":"D"},{"id":"learncoder_161_23485","stem":"\t[x]补=1,x1x2x3x4,当满足下列(\t)时,x>-l/2 成立。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"首先,一1/2的补码表示为'1.1000其次,需要引出一个结论:当使用补码表示时,如果符号位相同,则数值位越大,码值越大(记住即可)。因此,要使得x>一1/2成立, x1必须为1, x2~X4至少有一个为1","type":"choice","options":{"A":"X1必须为1, X2〜X4至少有一个为1","B":"X1必须为1, X2~X4任意","D":"X1必须为0, X2〜X4任意","C":"X1必须为0, X2〜X4至少有一个为1"},"answer":"A"},{"id":"learncoder_161_23488","stem":"(2010年统考真题)假定有4个整数用8位补码分别表示:rl=FEH, r2=F2H, r3=90H,r4=F8H,若将运算结果存放在一个8位寄存器中,则下列运算会发生溢出的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"题看上去较为复杂,因为牵涉到乘法运算。但本题的考查目的在于对 补码的范围和溢出的理解。补码的最高位是符号位,相乘中只参与正负运算;溢出就是(本 题中是8位)无法表示得到的结果。因此,如果按照书本上的方式来算出每个结果再判定, 这肯定会浪费时间。正确的解题方法如下: 8位补码所表示的十进制范围为一128一+127,可把4个十六进制数全部转换为十进制, 进行口算相乘(适合数字很小的运算),得出的结果中,最大的就是会溢出的oRl=FEH=1111 1110 ,符号位为1,说明为负数。除符号位取反加1,即1000 00010,故rl=一2同理可得, r2=一14, r3=一112 ,r4=一8,故R1 xr2=28 r2×r3=1 568rl xr4=16 r2×r4=112因此,只有r2×r3超出了范围一128一+127, 总结:对于此种类型的题目,最重要的还是对基础知识的掌握,对各种进制的转换要熟 悉,并且对各种码制所能表达的范围要理解透彻","type":"choice","options":{"A":"rlxr2","B":"r2xr3","C":"rlxr4","D":"r2xr4"},"answer":"B"},{"id":"learncoder_161_23477","stem":"\t在C语言程序中,以下程序段最终的f值为(\t)。\t\t\t -\t_float f=2.5+1el0;f=f-1el0;","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"首先我们知道float类型釆用IEEE 754单精度浮点数格式表示, 下表给出了IEEE 754标准单精度浮点数格式。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第2章)/image3.png'/>其中尾数隐含了一位,即尾数有24位二进制有效位数。因为le10=1010≈10x230≈233, 在数量级大约为233 而2.5的数量级为21,因此在计算2.5+lelO进行对阶时,两数阶码的差 为32,也就是说,2.5的位数要右移32位,从而使得24位有效数字全部丢失,尾数变为全0。 然后再与lelO的俚数相加,结果就是lelO的尾数,因此42.5+lelO的运算结果仍为le10, 这样,再执行f=f-1elO时结果就为0","type":"choice","options":{"B":"250","A":"2.5","D":"3.5","C":"0"},"answer":"C"},{"id":"learncoder_161_23481","stem":"\t某机器字长为8位,采用原码表示法(其中一位为符号位),则机器数所能表示的范围是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"假设机器数字长为n位,包含一位符号位,则原码、补码、反码的表示 范围见表2-29:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第2章)/image4.png'/>","type":"choice","options":{"C":"-128~ +127","D":"-128~+128","A":"-127~+127","B":"-127~+128"},"answer":"A"},{"id":"learncoder_161_23484","stem":"对于相同位数(设为N位,且各包含1位符号位)的二进制补码小数和十进制小数,. (二进制小数所表示的数的个数)/ (十进制小数所能表示的数的个数)为( )","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"本题结果说明并不是任何十进制小数都可以用二进制表示,.仅有(0.2)N-1的概率可以精确地用二进制表示。N位二进制补码定点小数(含1位符号位)可以表示2N个数,十进制的可以表示2X10N-1 个数(最高位只能取0或1,以表示正负),两者的商为(0.2)N-1 ","type":"choice","options":{"B":"(0.2)^N-1","C":"(0.02)^N","D":"(0.02)^N-1","A":"(0.2)^N"},"answer":"B"},{"id":"learncoder_161_23478","stem":"\t下列说法正确的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"choice","options":{"D":"无论机器数采用何种码表示,0都有两种编码方式","A":"当机器采用补码表示时,0有两种编码方式","C":"当机器采用反码表示时,0有一种编码方式","B":"当机器采用原码表示时,0有两种编码方式"},"answer":"B"},{"id":"learncoder_161_23480","stem":"\t4位机器内的数值代码,则它所表示的十进制真值可能为(\t)I 16\tII 一1\tIII 一8\tIV. 8","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"题意已说明4位都是数值位,故不存在符号位,因此负数是无法表示出 来的,而4位的数值代码最多能表示0〜15 (24-1)","type":"choice","options":{"D":"只有IV","B":"II、 IV","A":"I 、 II、III","C":"II、III、IV"},"answer":"D"},{"id":"learncoder_161_23483","stem":"下列为8位移码机器数[x]移,当求[-X]移时,(\t)将会发生溢出。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"0000 0000移码表示的真值为-128,即x=-128;可以从补码的角度理解, 补码就是移码的符号位取反,即1000 0000,因此是-128。而-X=128,超出了 8.位移码所能 表示的最大正数+127,故溢出,其他选项以此类推","type":"choice","options":{"B":"0000 0000","C":"1000 0000","D":"0111 1111","A":"1111 1111"},"answer":"B"},{"id":"learncoder_161_23479","stem":"\t假设机器字长为16位,用定点补码小数表示时,一个字所能表示的范围是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"在小数定点机中,若采用补码表示,则0的编码是唯一的,因此补码可 以比原码和反码多表示一个-1,至于为什么,已经在前面知识点中很详细地讲解过了。另外, 假设机器字长为n位,不管原码、补码、反码,上限都是1-2^7","type":"choice","options":{"B":"-(1-(2^-15))~(1-(2^-15))","C":"-1~ 1","A":"0 ~(1-(2^15))","D":"-1 ~ (1-(2^15))"},"answer":"D"},{"id":"learncoder_161_23482","stem":"\t十进制数-0.3125的8位移码编码为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"首先写出0.3125的二进制表示形式为1010 1000 (首位为符号位,小数点隐藏在符号位之后),然后可以直接写出补码的表示形式为1101 1000,移码即为补码的符号 位取反,即0101 1000,转换成十六进制数为58H.","type":"choice","options":{"D":"28H","C":"A8H","A":"D8H","B":"58H"},"answer":"B"},{"id":"learncoder_161_23471","stem":"假设有7位信息码0110101,则低位增设偶校验位后的代码和低位增设奇校验位后的 代码分别为( )","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"只要清楚奇偶校验码的简单概念即可回答。假设有n位信息位,偶校验就是配置后的n+1位代码中“1”的个数为偶数;奇校验就是配置后的n+1位代码中“1”的个数为奇数","type":"choice","options":{"A":"01101010\t01101010","C":"01101011\t01101010","D":"01101011\t01101011","B":"01101010\t01101011"},"answer":"B"},{"id":"learncoder_161_23470","stem":"信息序列16位,若想构成能纠正一位错、发现两位错的海明码,至少需要加(\t)位校验位。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"假设需要加r位的校验位,则r必须满足不等式2r^16+l+r,解得r至少为5 但5只能纠正一位错误(这个可根据海明码的定义得知)。若要发现两位错误,则需要再增加一位校验位,故至少需要加6位校验位","type":"choice","options":{"C":"6","D":"7","A":"4","B":"5"},"answer":"C"},{"id":"learncoder_161_23472","stem":"假设在网络中传送采用偶校验码,当收到的数据位为10101010时,则可以得出结论 ()。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"如果采用偶校验码,当收到的数据位为偶数个1时,此时可能未出错,也可能出现偶数位错误;同理,如果采用奇校验码,当收到的数据位为奇数个1时,此时可能未出错,也可能出现偶数位错误","type":"choice","options":{"B":"出现偶数位错","D":"未出错或出现偶数位错","A":"传送过程中未出错","C":"出现奇数位错"},"answer":"D"},{"id":"learncoder_161_23475","stem":"(2012年统考真题)假设编译器规定int和short类型长度分别为32位和16位,若有下列C语言语句:\t\t \t\t\t__unsigned short x=65530;unsigned int y=x;","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"考查以下两个知识点。1)怎么快速地将65530转换成十六进制?这里主要考查考生的一个逆向思维过程。考生 应该记住对于16位无符号整数的最大值为65535 (216-1),其十六进制为FFFFH,那么就可 以很轻松地得到65530的十六进制为FFFAH (F-5=A)。2)\t无符号短整型转换成无符号整型只需在高位补0即可。所以,最终得到y的机器数为OOOOFFFAH","type":"choice","options":{"A":"0000 7FFAH","B":"0000FFFAH","D":"FFFFFFFAH","C":"FFFF 7FFAH"},"answer":"B"},{"id":"learncoder_161_23474","stem":"\t计算机中表示地址时,釆用( )","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"由于地址都是正数,肯定不需要浪费lbit来表示符号位,故采取无符号 数来表示内存的地址","type":"choice","options":{"D":"无符号数","C":"移码","B":"补码","A":"原码"},"answer":"D"},{"id":"learncoder_161_23473","stem":"下列编码中,能检测出所有长度小于或等于校验位(检测位)长度的突发错的校验码 是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"循环冗余校验码进行检错的重要特性1)\t具有r检测位的多项式能够检测出所有长度小于或等于r的突发错误。2)\t长度大于r+1的错误逃脱的概率是l/2r","type":"choice","options":{"C":"奇校验码","A":"循环冗余校验码","B":"海明码","D":"偶校验码"},"answer":"A"},{"id":"learncoder_161_23476","stem":"\t(2016年统考真题)有如下C语言程序段:short si=-32767;unsigned short\tusi=si ;执行上述两条语句后,usi的值为","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"考查强制类型转换,有符号变量si对应的二进制代码为100 0000 0000 0001, 赋值给无符号变量usi后,usi的对应的二进制代码仍然为100 0000 0000 0001,但由于无符号 变量没有符号位,因此变量usi的值为215+20=32769。注意:对于有符号变量与无符号变量之间的强制类型转换,变量所对应的二进制代码的 每一位都不改变,只是解释二进制代码的方式发生了变化,有符号变量最高位为符号位,无 符号变量无符号位。","type":"choice","options":{"A":"-32767","B":"32767","C":"32768","D":"32769"},"answer":"D"},{"id":"learncoder_161_23465","stem":"某机字长8位,含一位数符,采用原码表示,则定点小数所能表示的非零最小正数为(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"求最小的非零正数,符号位为0,数值位取非0中原码最小值,该8位数 据编码为0.0000001,表示的值是2一7","type":"choice","options":{"D":"2^-6","A":"2^-9","B":"2^-8","C":"2^-7"},"answer":"C"},{"id":"learncoder_161_23468","stem":"(2016年统考真题)某计算机字长为32位,按字节编址,采用小端(Little Endian)方式存放数据。假定有一个double型变量,其机器数表示为1122 3344 5566 7788H,存放在 0000 8040H开始的连续存储单元中,则存储单元0000 8046H中存放的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"choice","options":{"C":"66H","D":"77H","B":"33H","A":"22H"},"answer":"A"},{"id":"learncoder_161_23467","stem":"为了表示无符号十进制整数,下列哪些是合法的8421 BCD码?(\t)I .0111 1001 \tII.1101 0110III.0000 1100\t IV.\t1000 0101","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"考生应该稍微注意一下BCD码,可能出概念题。在8421 BCD码中,1010〜 1111是不使用的,故II、III都是不合法的BCD码","type":"choice","options":{"D":"I 、 II、 III","C":"I 、 IV","B":"II、 III","A":"I 、 II"},"answer":"C"},{"id":"learncoder_161_23469","stem":"常用的(n, k))海明码中,冗余位的位数为()","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"(n, k)海明码是指其数据位为k位,校验位(或称冗余位)为n-k位, 数据编码共n位","type":"choice","options":{"C":"n","A":"n+k","B":"n-k","D":"k"},"answer":"B"},{"id":"learncoder_161_23466","stem":"下列关于进制的说法中正确的是( )I任何二进制整数都可用十进制表示II.任何二进制小数都可用十进制表示III任何十进制整数都可用二进制表示IV.任何十进制小数都可用二进制表示","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"在计算机中,小数和整数不一样,整数可以连续地表示,但小数是离散的, 因此并不是每一个十进制小数都可以用二进制来表示","type":"choice","options":{"D":"II、 IV","A":"I 、III","C":"I 、 II、III、IV","B":"I 、 II、III"},"answer":"B"},{"id":"learncoder_161_20096","stem":"组成32位两级分组先行进位链的ALU,需要74181和74182的片数分别是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查两级分组先行进位链的概念。","type":"choice","options":{"D":"16、2","A":"8、4","C":"16、4","B":"8、2"},"answer":"B"},{"id":"learncoder_161_20100","stem":"在一个字长和地址位数均为32位、按字节编址、小端方式、浮点数采用IEEE 754标准(1位数符,8位阶码,23\"位尾数)的计算机上运行如下类C程序段:int x = 65535 ;int y =-65535 ;float f= (((float)) x;float g= ((float) )y;\t,int * p = &y ;若编译器编译时为上述变量分别分配了内存空间。执行上述程序段后,p的值为ABCDEF78H,请回答下列问题(提示滞符号整数用补码表示)。(1)\t执行上述程序段后,变量x、y、f和g的值分别是什么?(用十六进制表示)(2)\t执行上述程序段后,地址ABQDEF79H所对应存储单元的值是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"48. 空","type":"short_answer","answer":"(1)变量x的值65535,故其内容为:[[x]]原码=[x]]补码=0000 0000.0000 0000 1111 1111 1111 1111B = 0000 FFFF H.变量y的值-65535,故其内容为:\t[[y]原码= 1000 0000 0000 0000 1111 1111 1111 1111B,\t[[y]]补码= 1111 1111 1111 1111 0000 0000 0000 0001B=FFFF 0001 H 变量f的值65535.0,故其内容为:\t65535.0 = 0,0111 1111,[1] 111 1111 1111 1111. 0000 0000B(127)= 0,1000 1110,(1]. 111 1111 1111 1111 0000 0000B= 0100 0111 0111 1111 1111 1111 0000 0000B= 4 7 7 F F F 0\t0 H变量g的值-65535.0,故其内容为:-65535.0 = 1,0111 1111,[1] 111 1111 1111 1111. 0000 0000B= 1,1000 1110,(1].111 1111 1111 1111 0000 0000B= 1100 0111 0111 1111,1111 1111.0000 0000B=C 7 7 F F F 0 0 H(2)变量p的值(ABCDEF78H)为变量y(FFFF 0001 H)所在存储单元的地址。 由于按字节编址并采用小端方式,故ABCDEF78H所对应存储单元存储禹是:01H;ABCDEF79H所对应存储单元存储的是:OOH; ABCDEF7AH所对应存储单元存储的是:FFH; ABCDEF7BH所对应存储单元存储的是;FFH。则ABCDEF79H所对应存储单元存储的是:00Ho"},{"id":"learncoder_161_20097","stem":"4片74181ALU与1片74182BCLA组成的16位ALU具有(\t)功能。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查行波进位和先行进位的概念。","type":"choice","options":{"C":"组内先行进位,组间行波进位","A":"组内行波进位,组间行波进位","D":"组内行波进位,组间先行进位","B":"组内先行进位,组间先行进位"},"answer":"B"},{"id":"learncoder_161_20101","stem":"在一个字长为32位、按字节编址、小端方式的计算机上运行如下类C程序段:int x = 53191 ;short y = ((short)) x;int j = y;若编译器编译时为上述变量分别分配了内存空间(提示:带符号整数用补码表示)。执行上 述程序段后,内存中y和j的值是多少?(用十六进制表示)","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"x = 53191,则[x]原码=[x]补码= =00 00 CFC7 H。\t(short)x从4个字节的x中读(截下)低2个字节并赋给y。则[【[y]]补码=CFC7 H,y = -12345o\t语句“int j=y ; ”将2字节的y赋给4个字节的j,需要进行符号位扩展。则,[j 补码= FF FF CF C7- H, j =-12345。\t"},{"id":"learncoder_161_20095","stem":"已知SN74181和SN74182芯片分别是4位ALU部件和4位BCLA(成组先行进位)部 件,用它们构成64位快速ALU时,需要SN74181和SN74182的片数分别是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查74181和74182的功能及基于它们的ALU的基本组成。","type":"choice","options":{"B":"8、3","A":"8、2","C":"16、4","D":"16、5"},"answer":"D"},{"id":"learncoder_161_20102","stem":" 一个8位数据M为=01101010B,其对应的海明校验码为P = P4P3 P2P1O M和P被存储或传输的形式为o现得到新数据和校验码 为皿和P如下。请分别计算它们的故障字S二S4S3S2S],并进行纠错处理。(1)\tM ' = 01101010,M ''0011o(2) M '=01111.010B;M '' = 0011。(3)\tM '= 01101010B,,M ''= 1011。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"空","type":"short_answer","answer":"(1)数据M,的校验码严中各位分别!)为:P1'=M1]㊉M2㊉M4㊉M5㊉M7=0㊉1㊉1㊉0㊉1 = 1,\tP2'=m1㊉m3㊉M4㊉M4㊉M7=0㊉0㊉ 1㊉1 ㊉ 1 = 1,\tP3'=M2㊉M3㊉M4 ㊉M8 = 1 ㊉0 ㊉1 ㊉0 = 0,\tP4'=M5㊉M6㊉M7㊉M8=0㊉1㊉1㊉0 = 0。\t故障字S=S4S3S2S1=p':㊉p''=0011㊉0011=0000表明数据无错误。\t(2)数据M'的校验码p'中各位分别为:\tP1'=M1㊉M2㊉M4㊉M5㊉M7=0㊉1㊉1㊉1㊉1=0,P2'=M1㊉M3㊉M4㊉M6 ㊉M7 =0㊉0㊉1㊉1㊉1 = 1,\tP3'=M2㊉M3㊉M4㊉M8=1㊉0㊉1㊉0 = 0,P4'=M5㊉M6㊉M7㊉M8 = 1㊉1㊉1 ㊉0=1。故障字 S = S4S3S2S1=P'㊉ P\"=1010㊉0011= 1001。表明第9位数据,即M5出错。纠正M5,得到的数据为01101010\t(3)数据M'的校验码P'中各位分别为:P1'=M1㊉M2㊉M4㊉M5㊉M7=0㊉1㊉1㊉0㊉1=1,\tp2'=M1㊉M3㊉M4㊉M6㊉M7=0㊉0㊉1㊉1㊉1 = 1,P3'=M2 ㊉M3㊉M4㊉M8 = 1㊉0㊉1㊉0=0,\tP4'=M5 ㊉M6㊉M7㊉M8 = 1㊉0㊉1㊉0=0,\t故障字 S = S4S3S2S1=P'㊉ P\"=0011㊉1011= 1000\t表明第9位数据,即P4出错。由于是校验位出错,无需纠正,得到的数据正确。\t"},{"id":"learncoder_161_20090","stem":"下列关于浮点数的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"基数取2时,尾数(以原码表示)小数点后第一位不为0时即为规格化;取4时,小数 点后2位不为00时即为规格化;取8时,尾数小数点后3位不为000时即为规格化;取16时,小 数点后4位不为0000时即为规格化。","type":"choice","options":{"C":"浮点数加减运算的步骤是对阶、尾数求和、规格化、舍入处理.判断溢出","B":"阶码釆用移码的目的是便于移动浮点数的小数点位置以实现规格化","A":"无论基数取何值,当尾数(以原码表示)小数点后第一位不为0时即为规格化","D":"IEEE 754标准规定规格化数在二进制小数点后面隐含一位的\"1\""},"answer":"C"},{"id":"learncoder_161_20091","stem":"下列关于浮点数的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查的知识点:最简单的浮点数舍入处理方法是截断法;IEEE 754标准的浮点 数的尾数都是大于等于1的,所以乘法运算的结果也是大于等于1,故不需要做“左规”;对阶的 原则是小阶向大阶对齐;当补码表示的尾数的最高位与尾数的符号位(数符)相异时表示规 格化。","type":"choice","options":{"D":"当补码表示的尾数的最高位与尾数的符号位(数符)相同时表示规格化","B":"IEEE 754标准的浮点数进行乘法运算的结果肯定不需要做“左规”处理","A":"最简单的浮点数舍入处理方法是恒置“1”法","C":"浮点数加减运算的步骤中,,对阶的处理原则是大阶向小阶对齐"},"answer":"B"},{"id":"learncoder_161_20088","stem":"下列关于定点数与浮点数的说法,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查的知识点:浮点数所能表示数的范围和精度都要优于长度相同的定点数所 能表示数的范围和精度。\t","type":"choice","options":{"C":"在长度相同的情况下,定点数所表示数的精度要高于浮点数所表示数的精度","B":"长度相同的定点数与浮点数,所能表示数的精度与范围相同","D":"在长度相同的情况下,定点数所表示数的范围要低于浮点数所表示数的范围","A":"长度相同的定点数与浮点数,所能表示数的个数相同"},"answer":"D"},{"id":"learncoder_161_20089","stem":"下列关于浮点数基数的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查的知识点:在长度相同的情况下,基数越大,所能表示数的个数越多、所能 表示数的范围越大,但是所能表示数的精度降低。","type":"choice","options":{"D":"在长度相同的情况下,基数越大,所能表示数的范围越大","C":"在长度相同的情况下,基数越大,所能表示数的精度越高","B":"在长度相同的情况下,基数越大,所能表示数的个数越多","A":"当基数为8时,阶码变化1,尾数移动3位"},"answer":"C"},{"id":"learncoder_161_20093","stem":"处理器中的ALU采用( )来实现。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"ALU采用组合逻辑电路来实现。一旦输入改变,输出立即改变。","type":"choice","options":{"A":"时序电路","C":"控制电路","B":"组合逻辑电路","D":"模拟电路"},"answer":"B"},{"id":"learncoder_161_20094","stem":"不属于ALU的部件有()。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"ALU主要由加法器、乘法器、除法器、移位器和逻辑运算部件组成,指令寄存器和指 令译码器属于控制器CU","type":"choice","options":{"A":"加法器或乘法器或除法器","B":"移位器","D":"指令寄存器","C":"逻辑运算部件"},"answer":"D"},{"id":"learncoder_161_20092","stem":"在C语言中,变量i、j和k的数据类型分别为int、float和double(int用补码表示,float和 double分别用IEEE 754单精度和双精度浮点数据格式表示),它们可以取除+∞、-∞ 和NAN以 外的任意值。在32位机器中执行下列关系表达式,结果恒为真的是( )。I. i= = ( int) (float) i II.i = = (int) (double)i III.k== (float)kIV. j = = (double)j\t V. (j+i)-j==i\t VI. j= 4=-(-j)","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查的知识点:int型数据向float型转换时可能丢失有效数位,再回到int型数 值可能改变;int型数据向double型转换时不会丢失有效数位,再回到int型数值不变;double型 数据向float型转换时可能丢失有效数位,而float型数据向double型转换时不会丢失有效数位; 浮点数取负就是简单地将数符取反。\t","type":"choice","options":{"C":"II、IV和VI","A":"I,II,III","B":"II,III和V","D":"IV和VI"},"answer":"C"},{"id":"learncoder_161_20087","stem":"对于长度固定的浮点数,若尾数的位数增加、阶码的位数减少,则()。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查浮点数格式中尾数位数与所表示数据精度的关系以及阶码位数所表示数 据范围的关系。","type":"choice","options":{"D":"可表示浮点数的范围变小,但表示精度提高","A":"可表示浮点数的范围与表示精度不变","C":"可表示浮点数的范围增加,但表示精度降低","B":"可表示浮点数的范围与表示精度增加"},"answer":"D"},{"id":"learncoder_161_20084","stem":"下列关于机器零的说法,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查的知识点:只有以移码表示阶码时,才能用全0表示机器零的阶码。","type":"choice","options":{"B":"只有以移码表示阶码时,才能用全0表示机器零的阶码","C":"机器零属于规格化的浮点数","A":"发生“下溢”时,浮点数被当做机器零,机器将暂停运行,转去处理“下溢” 。","D":"定点数中的零也是机器零,"},"answer":"B"},{"id":"learncoder_161_20081","stem":"定点加法器完成加法操作时,若次高位的进位与最高位的进位不同,即这两个进位信号“异或”运算的结果为1,称发生了(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查的知识点:定点加法器判断溢出的规则;上溢与下溢是针对浮点数而言,定 点数只有溢出、正溢出与负溢岀的概念。","type":"choice","options":{"D":"溢出","C":"下溢","B":"上溢","A":"故障"},"answer":"D"},{"id":"learncoder_161_20085","stem":"当且仅当(\t)发生时,认为浮点数溢出。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"浮点数溢出是指阶码溢出(超出所能表示的最大值)。尾数上溢时,尾数将被右移1 位,阶码加1,这个操作被称为右规。","type":"choice","options":{"C":"尾数与阶码同时上溢","D":"尾数或阶码上溢","A":"阶码上溢","B":"尾数上溢,"},"answer":"A"},{"id":"learncoder_161_20082","stem":"下列关于机器零((0.0))的说法,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"机器零是针对浮点数而定义的。","type":"choice","options":{"A":"只要尾数为零,无论阶码为何值都被置为0,这个浮点数都被称为机器零","B":"只有运算结果的阶码和尾数同时为零,计算机才把这个结果当成机器零","C":"机器零的符号位可以是1","D":"当阶码发生下溢(即小于最小阶码),无论尾数取何值,这个浮点数都被当成机器零"},"answer":"B"},{"id":"learncoder_161_20086","stem":"在浮点数的表示中,()是隐含的。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"在浮点数的表示中,基数是隐含的,机器在设计与实现时就确定了。","type":"choice","options":{"A":"阶码","B":"数符","D":"尾数","C":"基数"},"answer":"C"},{"id":"learncoder_161_20083","stem":"下列关于机器零的说法,正确的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查的知识点:机器零的定义;机器零有“+0.0”和“-0.0”之分。\t","type":"choice","options":{"B":"计算机使用“000…000”来唯一地表示机器零","C":"机器零有“+0.0”和“-0.0”之分","D":"计算机可以表示的最小的浮点数是机器零","A":"两个相等的整数相减的结果就是机器零"},"answer":"C"},{"id":"learncoder_161_20080","stem":"采用双符号位(变形补码)判断溢岀时,当结果符号为01,称发生了()。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查的知识点有:双符号位(变形补码)判断溢出的规则,双符号位的最高位总 是数值的符号,正溢出与负溢出的概念。","type":"choice","options":{"D":"负溢出","A":"上溢","B":"下溢","C":"正溢出"},"answer":"C"},{"id":"learncoder_161_20077","stem":"有32位二进制数11111111 11111111 11111111 11111111,当其分别被理解成无符号整数、整数和IEEE 754标准的单精度浮点数时亍对应的真值分别是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查知识点:整数在机器内部以补码形式存储;当阶码为最大值11111111, 尾数不等于零,IEEE 754.标准下的浮点数为“NAN(非数)”。","type":"choice","options":{"D":"-(2^32-1)、-1、NAN((非数)","C":"2^32-1,-1,NAN((非数)","B":"2^32-l,-1、-1.lllllll 11111111 11111111x2^128","A":"2^32-1,2^31-l,-1.1111111 11111111 11111111X2^128"},"answer":"C"},{"id":"learncoder_161_20074","stem":"下列关于定点整数加法的说法,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查定点整数加法的基本概念。","type":"choice","options":{"A":"无符号定点整数的加法和带符号定点整数的加法分别在不同的加法器上进行","D":"执行带符号定点整数加法后,如果n位加法器输出的最高两位不同,则溢出","C":"无符号定点整数不能与带符号定点整数在一起进行加法运算的","B":"无符号定点整数的加法不判断溢出"},"answer":"B"},{"id":"learncoder_161_20078","stem":"有32位二进制数11111111 10000000 00000000 00000000,当其分别被理解成无符号整 数、整数和IEEE 754标准的单精度浮点数时,对应的真值分别是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查知识点:整数在机器内部以补码形式存储;当阶码为最大值11111111,而 尾数等于零,IEEE 754标准下的浮点数为“∞(无穷大)”","type":"choice","options":{"B":"(2^9-1)x2^23、-(2^8-1))x2^23、-1.0x2^128","D":"(2^9-1))x2^23、-(2^8-1))x2^23、- ∞(负无穷大)","A":"-(2^9-1) x2^23,、(2^9-1) x2^23、-1.0 x 2^128","C":"-(2^9-1)x2^23、(2^9-1)x2^23、∞(无穷大)"},"answer":"D"},{"id":"learncoder_161_20075","stem":"表示定点数时,若要求数值零在计算机中唯一表示成\"全0”,应采用(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查知识点:只有补码形式下数值零才能唯一表示成“全0”。","type":"choice","options":{"B":"补码","C":"反码","A":"原码","D":"移码"},"answer":"B"},{"id":"learncoder_161_20079","stem":"某浮点数采用IEEE754单精度格式表示为C5100000H,则该数的值是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"该浮点数的数符为1,阶码为1000 1010B(-127)=11,尾数为(1)).001B = 1.125.","type":"choice","options":{"C":"-O.125x2^11","B":"-1.125X2^11","D":"-0.125 x 2^10","A":"-1.125 x 2^10"},"answer":"B"},{"id":"learncoder_161_20076","stem":"机器内部的32位二进制数10000000 00000000 00000000 00000000,当分别理解成无符号整数、整数和IEEE 754标准的单精度浮点数时,对应的真值分别是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查知识点灌数在机器内部以补码形式存储;IEEE 754标准下的浮点数0.0 有“正” / “负”之分。","type":"choice","options":{"C":"-2^31、-2^31、-0.0","D":"-2^-31,2^-31、0.0","B":"2^-31、-2^-31、0.0","A":"2^31、-2^31、-0.0"},"answer":"A"},{"id":"learncoder_161_20068","stem":"采用补码表示时,16位二进制定点整数的表示范围是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查采用补码表示时16位二进制定点整数的表示范围。\t","type":"choice","options":{"B":"-32 768 ~32 767","C":"-32 767 ~32 767","A":"0 ~65 535","D":"-32 767 ~32768"},"answer":"B"},{"id":"learncoder_161_20066","stem":"设[【[x】]]补=0。0101B,【[[y]】]补=0.1001B,则计算[[x-y]]补后,状态寄存器中ZF(零标志)、VF(溢出标志)=NF(.符号标志)、CF(进位标志)的值为( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查基于补码的减法的实现以及ZF、VF、NF、CF的定义。","type":"choice","options":{"D":"0010","C":"1000","A":"0000","B":"1100"},"answer":"D"},{"id":"learncoder_161_20067","stem":"在定点小数计算机中,(\t)的原码与补码相同。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查定点小数原码与补码的基本概念。","type":"choice","options":{"C":"-0.1B","A":"0","B":"1","D":"-1"},"answer":"C"},{"id":"learncoder_161_20071","stem":"下列关于原码与补码的说法中,不正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"引入补码的目的是为了将加法和减法统一,扩大计算机的表数范围的手段:增加字 长、釆用浮点数表示。","type":"choice","options":{"A":"原码与补码是针对有符号定点数而言的,无符号定点数没有原码与补码的定义,","D":"引入补码的目的是为了扩大计算机的表数范围","C":"在相同字长的情况下,补码的表数精度与原码的表数精度相同","B":"在相同字长的情况下,补码的表数范围要大于原码的表数范围"},"answer":"D"},{"id":"learncoder_161_20072","stem":"下列关于原码加减交替除法(也叫不恢复余数除法)的说法,正确的是()","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查原码加减交替除法(也叫不恢复余数除法)的运算步骤。","type":"choice","options":{"C":"整个运算过程中不会做恢复余数操作","B":"当某一步的余数为正时,改为进行加法计算","A":"当某一步的余数为负时,停止计算","D":"仅当最后一步的余数为负时,需要将恢复为原先正的余数"},"answer":"D"},{"id":"learncoder_161_20069","stem":"在字长为8的定点整数计算机中,无符号整数X = 246,则[[-X]]补码为(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查无符号整数X的[[-X]]补码的计算方法。","type":"choice","options":{"C":"01110110b","A":".00001010b","D":"11111011b","B":"11110110b"},"answer":"A"},{"id":"learncoder_161_20073","stem":"下列关于移码的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查移码的基本概念。只有在偏移常数为2n-1时n位的移码和补码只是在符 号位上有差别。","type":"choice","options":{"A":"若一个数的移码的符号位是1,则该数为正数","B":"只有定点整数才有移码","D":"引入移码的目的主要是为了便于比较两个整数的大小","C":"任何情况下,移码和补码只是在符号位有差别"},"answer":"C"},{"id":"learncoder_161_20070","stem":"已知C程序中,某类型为int的变量x的值为-1088。程序执行时,x先被存放在16位的 寄存器R1中,然后被进行算术右移4位的操作。则此时R1中的内容(以十六进制表示) 是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"R1的内容先是x的补码FBC0H,算术右移4位后为FFBCH.算术移位规则:最高 位是符号位,保持符号位不变,补码右移空位补1、左移空位补0 ;逻辑移位规则:左移/右移空位 都补0。","type":"choice","options":{"D":"87BCH","A":"FBCOH","C":"OFBCH","B":"FFBCH"},"answer":"B"},{"id":"learncoder_161_20064","stem":"补码表示的16位二进制定点整数的表示范围是(\t汗","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"补码表示的16位二进制定点整数的表示范围是-32768 (-215) ~ 32767(215-1) .","type":"choice","options":{"A":"-32 767 ~ 32 767","B":"-32 767 ~ 32 768","D":"-32 768 ~32 768","C":"-32 768 ~ 32 767"},"answer":"C"},{"id":"learncoder_161_20061","stem":"下列定点小数与定点整数的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查定点小数与定点整数的基本概念。","type":"choice","options":{"A":"由于要存储小数点,存储定点小数要比相同字长的定点整数多花费硬件","C":"为了得到更多的有效数字,定点整数进行除法运算的结果必须精确到小数点后","D":"定点小数的运算结果绝对不能大于或等于1\t,","B":"在同一个ALU中,定点小数可以与定点整数进行算术运算"},"answer":"D"},{"id":"learncoder_161_20062","stem":"“0((零)”的表示不唯一的编码是(\t))o","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":".“0(零)”的表示不唯一的编码是原码。\t","type":"choice","options":{"C":"移码","B":"补码","D":"以上3种编码","A":"原码"},"answer":"A"},{"id":"learncoder_161_20063","stem":"补码表示的8位二进制定点小数所能表示数值的范围是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"补码表示的8位二进制定点小数所能表示数值的范围是-l.0000000B(-l)〜 0.1111111B((1-2-7)).","type":"choice","options":{"A":"-0.1111111B~ 0.1111111B","C":"-0.1111111B~1.0000000B","B":"-l.0000000B~0.1111111B","D":"-1.0000000B - 1.0000000B"},"answer":"B"},{"id":"learncoder_161_20060","stem":"已知CRC校验的一个数据字为:1001 0101 1001B;设采用的生成多项式为:G(x)=x^3 + 1则校验码为()","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"CRC校验码的位数等于采用的生成多项式的次数。本例中为3位。校验时,先在 数据字后面加上“多项式次数”个“0”(本例中为1001 0101 1001 000),再用生成多现式的系数 (本例中为1001)去除,所得余数为校验码。除法采用模2除法,即不考虑进位和借位的除法。","type":"choice","options":{"D":"010B","A":"0011B","B":"0010B","C":"011B"},"answer":"C"},{"id":"learncoder_161_20065","stem":"在字长为8的定点小数计算机中,-1的补码是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查的知识点是定点小数计算机中“-1”的补码为后面全0;定点整数计算 机中“-1”的补码为全1(例如11111111B).","type":"choice","options":{"D":"P0000001B","B":"11000000B","A":"10000000B","C":"10000001B"},"answer":"A"},{"id":"learncoder_161_20058","stem":"下列字符码中带有偶校验的信息是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"实行偶校验的信息中“ 1 ”的个数为偶数,奇校验为奇数。","type":"choice","options":{"C":"00010011B","A":"11001000B","B":"10010001B","D":"01010110B"},"answer":"D"},{"id":"learncoder_161_20059","stem":"接收到的(偶性)汉明码为1001101B,其中的信息为()","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查汉明码的纠错方法。根据接受到的(偶性)汉明码1\t2\t3\t4\t5\t6\t7Cl\tC2\tb4\tC3\tb3\tb2\tbl形成检测位P4P2P1。其中,P4=4㊉5㊉6㊉7,P2 = 2㊉3㊉6㊉7,P1 = 1㊉3㊉5㊉7。本题的检测位如下:P4 = 4㊉5㊉6㊉7 = 1㊉1㊉0㊉1 = 1 ;P2 =2㊉3㊉6㊉7 = 0㊉0㊉0㊉1 = 1; P1=1㊉3㊉3㊉3㊉5㊉3㊉7 = 1㊉0㊉1㊉1=1。则P4P2P1=111,则表示第7位在传输过程中出错。将其纠 正,得到正确的汉明码为1001100B,从中提取出信息位为0100Bo","type":"choice","options":{"D":"0100","B":"0011","C":"0110","A":"1001"},"answer":"D"},{"id":"learncoder_161_20056","stem":"汉字内码(两个字节长)的每个字节的最高位为(),以区别ascII码","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"汉字内码每个字节的最高位为1,以区别ASCII码。","type":"choice","options":{"B":"0","D":"海明码","C":"奇偶校验码","A":"1"},"answer":"A"},{"id":"learncoder_161_20057","stem":"Unicode编码占用(\t)字节。","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"旨在表示表示世界上所有字符或符号的Unicode的码长为2字节。\t","type":"choice","options":{"A":"1","B":"2","C":"3","D":"4"},"answer":"B"},{"id":"learncoder_161_20055","stem":"下列关于汉字编码的说法,错误的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"此题考查汉字编码的基本知识。","type":"choice","options":{"A":"用于输入汉字的编码称为输入码或外码","D":"输入码或外码与汉字字符的对应关系是一一对应的关系","B":"用于输出汉字的编码称为字模码","C":"计算机存储、处理汉字所使用的编码称为机内码或内码"},"answer":"D"},{"id":"learncoder_161_20053","stem":"下列数中最大的数是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"A = 128,其他那是85。","type":"choice","options":{"D":"55H","C":"10000110BCD","A":"1000000B","B":"1250"},"answer":"A"},{"id":"learncoder_161_20054","stem":"下列编码中,不用于表示字符的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.数据的表示和运算","analysis":"BCD码主要用于表示十进制数,4位二进制编码表示1位十进制数。EBCDIC和 ASCII码表示的是西文字符或符号,7位二进制编码表示1个字符。","type":"choice","options":{"D":"ASCII","A":"BCD","B":"EBCDIC","C":"Unicode"},"answer":"A"},{"id":"learncoder_160_23644","stem":"\t一个Cache-主存系统,采用50MHz的时钟,存储器以每一个时钟周期传输一个字的 速率连续传输8个字,以支持块长为8个字的Cache,且每个字长为32位。假设读操作所花 费的时间:1个周期接收地址,3个周期延迟,8个周期传输8个字;写操作所花费的时间:1个周期接收地址,2个周期延迟,8个周期传输8个字,3个周期恢复和写入纠错码。求下 述几种情况下的存储器的带宽。1)\t全部访问为读操作。2)\t全部访问为写操作。3)\t65%的访问为读操作,35%的访问为写操作。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"由于存储系统采用50MHz的时钟,因此每一个时钟周期为l/(50MHz)=20ns。1)\t当全部访问为读操作时,一次读操作所花费的时间为Tr=(1 + 3 + 8) x 20ns = 240ns故存储器的带宽为Br = 8/Tr = 8/(240 x 10~9) 33.3 x 106 字/S=133.2MB/S2)当全部访问为写操作时,一次写操作所花费的时间为Tw=(1 + 2 + 8 +3) x 20ns = 280ns故存储器的带宽为Bw =8/Tw = 8/(280 x 10-9) « 28.6 x 106字/s «114.4MB/s3)\t读/写操作合在一起的加权时间为T = 240ns x 0.65 + 280ns x 0.35 = 254ns故存储器的带宽为B = 8/T = 8/(254 x 10 -9) «31.5x 106 字/s «126MB/s"},{"id":"learncoder_160_23647","stem":"\t(2011年统考真题)某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为16MB, 主存(物理)地址空间大小为1MB,页面大小为4KB; Cache采用直接映射方式,共8行; 主存与Cache之间交换的块大小为32Bo系统运行到某一时刻时,页表的部分内容和Cache 的部分内容如图3-50和图3-51所示,图中页框号及标记字段的内容为十六进制形式。请回答下列问题:1)虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位?哪几位表示页框号(物理页号)?2)\t使用物理地址访问Cache时,物理地址应划分成哪几个字段?要求说明每个字段的位 数及在物理地址中的位置。3)\t虚拟地址001C60H所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物 理地址是什么?访问该地址时是否Cache命中?要求说明理由。4)\t假定为该机配置一个4路组相连的TLB,该TLB共可存放8个页表项,若其当前内 容(十六进制)如图3・52所示,则此时虚拟地址024BACH所在的页面是否在主存中?要求 说明理由。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image5.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"1)由于虚拟地址空间大小为16MB,且按字节编址,因此虚拟地址共有24 位(224=16M)。由于页面大小为4KB (212=4K),因此虚页号为前12位。由于主存(物理) 地址空间大小为1MB,因此物理地址共有20位(220=1M)。由于页内地址有12位,因此 20-12=8,即前8位为页框号。2)由于Cache采用直接映射方式,因此物理地址应划分成3个字段,如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image17.png'/>分析:由于块大小为32B,因此字块内地址占5位。又由于Cache共8行,因此字块标记占3位。综上所述,主存字块标记占20~~5_3=12位。3)\t虚拟地址001C60H的虚页号为前12位,即001H=lo查表可知,其有效位为1,故 在内存中。虚页号为1对应页框号为04H,故物理地址为04C60H 由于采用的是直接映射方 式,因此对应Cache行号为3。尽管有效位为1,但是由于标记位04CH不等于105H,故不命中。4)\t由于采用了 4路组相连的,因此TLB被分为2组,每组4行。因此,虚地址应划分 成3个字段,如下: <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image18.png'/>将024BACH转成二进制为0000 0010 0100 1011 1010 1100,可以看出组号为0。标记为 0000 0010 010,换成十六进制为0000 0001 0010 (高位补一个0),即012H,从图3.51中的0 组可以看出,标记为012H页面的页框号为1F,故虚拟地址024BACH所在的页面在主存中。"},{"id":"learncoder_160_23641","stem":"\t某Cache采用全相联映射,且此Cache有16块,每块8个字,主存容量为216个字 (按字寻址),Cache开始为空。Cache存取时间为40ns;主存与Cache间传送8个字需要1us1)\t计算Cache地址中标记位数和块内地址位数。2)\t程序首先访问主存单元20, 21, 22,…,45,然后重复访问主存单元28, 29, 30, …,45四次(假设没有命中Cache,将主存对应块一次全部读入Cache中,且第一块从0开 始计数),试计算Cache的命中率。3)\t计算上述程序总的存取时间。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"1) \tCache地址中块内地址位数为3位(23=8)O由于采用的是全相联映射,因此除去块内 地址剩下的就是标记位数。主存的标记位数为16-3=13,故Cache的标记位数为13位。2)\t首先,每块包含8个字(也就是8个主存单元),先访问20号单元,如果Cadhe不命 中(因为Cache开始时为空),那么Cache就调入包含此单元的块,此块包含20、21、22、 23单元,当接下来访问21〜23单元时都命中。其次,访问24号单元时又不命中,以此类推。 当访问20、24、32、40号单元时,不命中。也就是说,一共访问次数为26 + 18x4 = 98次, 其中有4次不命中,Cache的命中率为(98-4)/98 x100%=96%3)\t已知Cache命中率、访问Cache的时间、主存与Cache交换块的时间,总的存取时间 就很容易计算了,如下:40ns x 98 + 4 x 1us = 7920ns"},{"id":"learncoder_160_23643","stem":"\t用16Kx16位的SRAM芯片构成64KX32位的存储器。要求画出该存储器的组成逻 辑框图。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"所需芯片总数(64Kx32)/(16Kxl6)=8片,因此存储器可分为4个模块(图中用椭圆标示出来了),每个模块16Kx32位,各模块通过A15、A14进行24译码,如图 3.55所示<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image13.png'/>"},{"id":"learncoder_160_23646","stem":"\t(2010年统考真题)某计算机的主存地址空间大小为256MB,按字节编址。指令Cache 和数据Cache分离,均有8个Cache行,每个Cache行大小为64B,数据Cache采用直接映 射方式。现有两个功能相同的程序A和B,其伪代码如下所示:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image4.png'/>假定int类型数据用32位补码表示,程序编译时,i、j、sum均分配在寄存器中,数组a 按行优先方式存放,其首地址为320 (十进制)。请回答下列问题,要求说明理由或给出计算 过程。1)若不考虑用于Cache—致性维护和替换算法的控制位,则数据 Cache的总容量为多少?2)\t数组元素a[0][31]和a[l][l]各自所在的主存块对应的Cache行号分别是多少(Cache 行号从0开始)?3)\t程序A和B的数据访问命中率各是多少?哪个程序的执行时间更短?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"Cache结构如下。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image15.png'/>此处的行即为块(Block) 直接映射下,每块的Cache结构一般分为4个部分,其中,V: 1位,表示所在的块是否有效。…:表示用于Cache一致性维护和替换算法的控制位。TAG:地址转换标记。如果不计算“…”部分,则Cache的大小由V、Tag和Data (数据)3部分组成。在直 接映射中,可以将地址分为如下3个部分:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image16.png'/>本题中,总的寻址位数为28位(228=256M);块内位为6位(26=64), 5〜0位;块索引 为3位(23=8), 8〜6位。因此,Tag=28-6-3=19位,即27〜9位。每行(块)的大小=V+Tag+数据=1+19+64x8位。数据 Cache 有 8 行,总容量为(1+1.9+64X8)X8/8=532B2)\t由于数组在存储器中按行优先方式存放,因此每个数组元素占4B 数组首地址为320, 因此可知:a[0][31]在存储器中的地址为 320+31x4=444=0001 1011 1100Ba[l][l]在存储器中的地址为 320+(256+1)x4=1348=0101 0100 0100B按直接映射方式,地址分为3部分,块索引在地址的8〜6位,因此两地址所对应的块索引分别为 6 (110B)、5 (101B)\t'3)\t数组a中每个数据只用了一次,如果程序没有命中,则从主存中读入一块,大小64B, 相当于16个整数。对于程序A,如果是按行连续存放的,那么从主存读入一块到Cache (一 次失配)后,随后的15次便都Cache命中,读一次管16次,因此命中率为[(216-212)/216]X100%=93.75%程序B随列访问数组a,由于Cache的容量太小,读入的数据块留不到下次用便又被替 换,因此每次都失败,命中率为0%。另一种算法是,由于数组a—行的数据量为1 KB>64B,因此访问第0行时,每个元素都 不命中,由于数组有256列,数据Cache仅有8行,故访问数组后续列元素仍然不命中,于 是程序B的数据访问命中率为0%0由于从Cache读数据比从内存读数据快很多,因此程序A的执行时间更短。"},{"id":"learncoder_160_23649","stem":"在信号处理和科学的应用中,转置矩阵的行和列是一个很重要的问题。从局部性的 角度来看,它也很有趣,因为它的引用模式既是以行为主的,也是以列为主的,例如,考虑 下面的转置函数:1\ttypedef int array a[2][2];2\t*3\tvoid transposel(array dst,array src)4\t{5\tint i,j;6\tfor(i=0;i<2;i++){7\tfor(j=0;j<2;j++){8\tdst[j] [i]=src[i] [j];9\t}10\t}11\t}假设在一台具有如下属性的机器上运行这段代码:•\tsizeof(int)=4•\tsrc数组从地址0开始,dst数组从地址16开始(十进制)。•\t只有一个L1数据高速缓存,它是直接映射的、直写、写分配,块大小为8B。•\t这个高速缓存总的大小为16个数据字节,一开始是空的。•\t对src和dst数组的访问分别是读和写不命中的唯一来源。 问题如下:1)对每个row和col,指明对src[row][col]和dst[row][col]的访问是命中(h)还是不命中(m),例如,读src[0][0]会不命中,写dst[0][0]也不命中,并将结果填至下列表格中。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image6.png'/>2)对于一个大小为32数据字节的高速缓存,指明src和dst的访问命中情况,并将结果 填至下列表格中。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image7.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"1)解决这个问题的关键是想象出如图3・57所示的关系图。注意:每个高速缓存行只包含数组的一个行,高速缓存正好只够保存一个数组,而且对 于所有i, src和dst的行i都映射到同一个高速缓存行(0%2=0, 1%2=1, 2%2=0, 3%2=1)。 因为髙速缓存不够大,不足以容纳这两个数组,所以对一个数组的引用总是驱逐出另一个数组的有用的行。具体过程如下<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image19.png'/> dat[i][j]=src[i][j]语句先访问src[i][j],再将其存储到 dat[i][j] <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image20.png'/>说明如下‥①访问src[0][0],不命中,将sre[0]调入高速缓存的LineOo②访问dst[0][0],不命中,将dst[0]调入高速缓存的LineO,换出src[0]。③访问src[0Ⅲ],不命中,将src[0]调入高速缓存的LineO,换出dst[0]。 ④…<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image21.png'/>2)当高速缓存为32B时,它足够大,能容纳这两个数组。因此所有不命中都是开始时的不命中。关系如图3-58所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image22.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image23.png'/>"},{"id":"learncoder_160_23648","stem":"\t(2013年统考真题)某32位计算机,CPU主频为800MHz, Cache命中时的CPI为4,\tCache块大小为32B;主存采用8体交叉存储方式,每个体的存储字长为32位、存储周 期为40ns;存储器总线宽度为32位,总线时钟频率为200MHz,支持突发传送总线事务。每 次读突发传送总线事务的过程包括送首地址和命令、存储器准备数据和传送数据。每次突发 传送32B,传送地址或32位数据均需一个总线时钟周期。请回答下列问题,要求给出理由或 计算过程。1)\tCPU和总线的时钟周期各为多少?总线的带宽(即最大数据传输率)为多少?2)\tCache缺失时,需要用几个读突发传送总线事务来完成一个主存块的读取?3)\t存储器总线完成一次读突发传送总线事务所需的时间是多少?4)\t若程序BP执行过程中,共执行了 100条指令,平均每条指令需进行1.2次访存,Cache缺失率为5%,不考虑替换等开销,则BP的CPU执行时间是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"1)\tCPU的时钟周期为1/800MHz=1.25us。总线的时钟周期为1/200MHz=5nS总线带宽为 4Bx200MHz=800MB/s 或 4B/5ns=800MB/so2)\t因为每次读突发传送32B,而Cache块大小恰好是32B,所以只需要1个读突发传送 总线事务来完成一个主存块的读取。3)\t一次读突发传送总线事务包括一次地址传送和32B数据传送:用1个总线时钟周期传 输地址,即5ns;首先,根据低位交叉存储器的工作原理,数据全部读出需要40ns+ (8-1) x 5ns=75ns。但是,在第40ns时,数据的读取与传输是可以重叠的,所以只需要加上最后一个 体读出的数据的传输时间即可,即5ns。故读突发传送总线事物时间为5ns+75ns+5ns=85ns。4)\tBP的CPU执行时间包括Cache命中时的指令执行时间和Cache缺失时带来的额外开 销。命中时的指令执行时间:100x4xl.25ns=500ns 指令执行过程中Cache缺失时的额外开 销:1.2X100X5%X85HS=510nS。可得,BP 的 CPU 执行时间:500ns+510ns=1010ns"},{"id":"learncoder_160_23642","stem":"现有一 64Kx2位的存储器芯片,欲设计具有同样存储容量的存储器,应如何安排地址线和数据线引脚的数目,使两者之和最小,并说明有几种解法。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"不妨设地址线和数据线的数目分别为x和y。只需要满足2*xy = 64Kx2,有 如下方案:当 y=1时, x=17;当 y=2 时,x=16;当 y=4 时,x=15;当 y=8 时,x=14(可不用讨论y等于3、5、6这些情况,不然x就没法计算了)后面的就不用计算了,肯定比前面的引脚数目多。从以上分析可以看出,当数据线为1或2时,地址线和数据线引脚的数目之和为18,达到最小,并且有两种解答。"},{"id":"learncoder_160_23645","stem":"\t某机器中,配有一个ROM芯片,地址空间为0000H〜3FFFH。现在再用若干个16KX8 位的RAM芯片构成一个32KX8位的RAM区域,使其地址空间为8000H〜FFFFH。假设此RAM芯片有CS和WE信号控制端。CPU地址总线为A15〜A。,数据总线为D7〜D0°,控制信 号为RD (读)、WR (写)、MREQ (存储器请求信号),当且仅当MREQ和RD (或WR)同 时有效时,CPU才能对存储器进行读(或写),试画出此CPU与上述ROM芯片、RAM芯片 的连接图。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"答案如图3-56所示。选用两片16Rx8位的RAM芯片即可构成一个32Kx8 位的RAM区域。下面说明应该注意的一些细节问题<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image14.png'/>1) ROM芯片不要连接在R/w信号线上, RAM芯片一定要连 2)关于RAM的片选信号:由于地址范围应该是8000H-BFFFH (1000 0000 0000 0000一1011 1111 1111 1111),C000H-FFFFH (1100 0000 0000 0000一1111 1111 1111 1111),因此两片RAM的A15、 A14分别是10和11 对应了Y2 Y3"},{"id":"learncoder_160_23629","stem":"设有一个64Kx8位的RAM芯片,试问该芯片共有多少个基本单元电路、(简称存储 基元)?欲设计一种具有上述同样多存储基元的芯片,要求对芯片字长的选择应满足地址线 和数据线的总和为最小,试确定这种芯片的地址线和数据线,并说明有几种解答。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"48.空","type":"short_answer","answer":"存储基元总数=64Kx8位=512K位=219位。思路:如要满足地址线和数据线总和最小,应尽量把存储元安排在字向,因为地址位数 和字数成2的幕的关系,可较好地压缩线数。设地址线根数为a,数据线根数为b, 则片容量为2axb=219; b=219-a若 a=19, b=l,总和=19+1=20;a=l 8, b=2,总和=18+2=20 ;a=17, b=4,总和=17+4=21;a=16, b=8,总和=16+8=24;由上可看出,片字数越少,片字长越长,引脚数越多。片字数、片位数均按2的幕变化。 通过证明也是能得出结论的,我们要最小化a+b=a+219-a 令 F(a)=a+b=a+219~a,对 a 求导后,得到 1-In2xax219-a在1<=a<=18时,F是单调递减函数,所以在这个区间最小值为F(18)=20,剩下F(19)=20。 所以得出结论:如果满足地址线和数据线的总和为最小,这种芯片的引脚分配方案有两 种:地址线=19根,数据线=1根;地址线=18根,数据线=2根。"},{"id":"learncoder_160_23631","stem":"\t一台8位微机的地址总线为16条,其RAM存储器容量为32KB,首地址为4000H, 且地址是连续的,可用的最高地址是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"32KB存储空间共占用15条地址线,若32KB的存储地址起始单元为0000H,其范围应为0000H-7FFFH,但现在的首地址为4000H,即首地址后移了,因此最高地址也应该相应后移,故最高地址=4000H+7FFFH=BFFFH "},{"id":"learncoder_160_23638","stem":"\t某彩色图形显示器,屏幕分辨率为640像素x480像素,共有4色、16色、256色和 65 536色4种显示模式。1)\t试给出每个像素的颜色数m和每个像素所占用存储器的比特数n之间的关系。2)\t显示缓冲存储器的容量是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"1)在图形方式中,每个屏幕上的像素都由存储器中的存储单元的若干比特指定其颜色。 每个像素所占用的内存位数决定于能够用多少种颜色表示一个像素。表示每个像素的颜色数 m和每个像素占用的存储器的比特数n之间的关系由下面的公式给出‥n=log2m2)由于显示缓冲存储器的容量应按照最高灰度(65 536色)设计,故容量为640×480× (log2 65 536)bit/8 = 614 400B=615KB"},{"id":"learncoder_160_23634","stem":"\t(2016年统考真题)某计算机采用页式虚拟存储管理方式,按字节编址,虚拟地址 为32位,物理地址为24位,页大小为8KB;TLB采用全相联映射;Cache数据区大小为64KB, 按2路组相联方式组织,主存块大小为64BO存储访问过程的示意图如图3-49所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image3.png'/>1)\t图中字段A〜G的位数各是多少? TLB标记字段B中存放的是什么信息?2)\t将块号为4099的主存块装入到Cache中时,所映射的Cache组号是多少?对应的H 字段内容是什么?3)\tCache缺失处理的时间开销大还是缺页处理的时间开销大?为什么?4)\t为什么Cache可以采用直写(WriteThrough)策略,而修改页面内容时总是采用回写 (Write Back)策略?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"1)页大小为8KB,页内偏移地址为13位,故A=B=32-13=19; DM3; C=24-13=11;主 存块大小为64B,故G=6 2路组相联,每组数据区容量有64BX2=128B,共有64KB/128B=512 组,故 F=9; E=24-G-F=24-6-9=9因而 A=19, B=19, C=ll, DM3, E=9, F=9, G=6。TLB中标记字段B的内容是虚页号,表示该TLB项对应哪个虚页的页表项。2)\t块号 4099=00 0001 0000 0000 0011B,因此所映射的 Cache 组号是 0 0000 0011B-3, 对应的H字段内容为0 0000 1000B3)\tCache缺失带来的开销小,而处理缺页的开销大。因为缺页处理需要访问磁盘,而Cache缺失只访问主存。\t*4)\t因为采用直写策略时需要同时写快速存储器和慢速存储器,而写磁盘比写主存慢得多, 所以,在Cache—主存层次,Cache可以采用直写策略,而在主存——外存(磁盘)层次,修改页面内容时总是采用写回策略"},{"id":"learncoder_160_23637","stem":"\t某计算机的主存地址位数为32位,按字节编址。假定数据Cache中最多存放128个 主存块,采用4路组相联方式,块大小为64B,每块设置了 1位有效位。采用一次性写回策 略,为此每块设置了 1位“脏位”。要求:1)\t分别指出主存地址中标记(Tag)、组号(Index)和块内地址(Offset) 3部分的位置和位数。2)\t计算该数据Cache的总位数。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"主存地址由标记(Tag)、组号(Index)和块内地址(Offset) 3部分组成,标 记字段在前,组号字段居中,块内地址字段在后。1)\t因为块大小为64B,所以块内地址字段为6位;因为Cache中有128个主存块,采用4路 组相联,Cache分为32组(128/4-32),所以组号字段为5位;标记字段为剩余位,32-5-6=21位。2)\t数据Cache的总位数应包括标记项的总位数和数据块的位数。每个Cache块对应一个 标记项,标记项中应包括标记字段、有效位和“脏位”(仅适用于写回法)。因此,标记项的 总位数=128x(21+1+1)=128x23=2944位。又由于数据块位数=128x64x8=65 536位,因此数据 Cache 的总位数=2944+65 536=68 480 位。"},{"id":"learncoder_160_23636","stem":"\t设某机主存容量为16MB, Cache的容量为8KB,且按字节编址。每字块8个字, 每字32位。设计一个4路组相联映射的Cache组织。1)画出主存地址字段中各段的位数。2)\t设Cache初态为空,CPU依次从主存0, 1, 2,…,99号单元中读出100个字(主存 一次读出一个字),并重复此次序10次,问命中率是多少?3)\t若Cache速度是主存速度的5倍,试问有Cache和无Cache相比,速度提高多少倍?4)\t系统的效率是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"1) 主存地址字段如图3-54所示 <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image10.png'/>2)\t由于Cache初态为空,因此CPU读0号单元时不命中,必须访存,同时将该字所在的主存块调入Cache (调入内存一定是一整块调入,而一块\t包括8个单元),接着CPU读1〜7号单元均命中。同理,CPU读8, 16,…,96号单元均不命中。可见,CPU在连续读100个字中共有13次未命中,而后9次循环读100个字全部 命中,命中率为(100x10-13/(100x10)x100%)=98.7%3)\t设主存存储周期为5t, Cache的存储周期为t,没有Cache的访问时间是5tx1000,有 Cache存储周期为tx(1000-13)+5txl3,则有Cache和无Cache相比,速度提高的倍数为5tx1000/( tx(1000-13)+5tx13 )-1=3.754)\t系统的效率为t/(0.987xt+(1-0.987)x5t)x100%=95%"},{"id":"learncoder_160_23639","stem":"\t叙述带有Cache存储器的计算机,其CPU读内存一次的工作过程。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"1) CPU将内存地址加载到地址总线,并发出读信号2) Cache从地址总线截取内存地址,解析出该地址所在的内存块号3)查阅主存Cache地址映射变换机构,若该主存块已调入Cache,则为命中,进入4),否则,转入6)4)将对应的Cache块号与主存地址中的块内地址拼接,形成Cache地址,访问Cache存储体,同时阻断主存的读5)由Cache读出的数据经数据总线送往CPU6)在不命中的情况下,维持主存的读,由主存读出的数据经数据总线送往CPU7)同时查阅Cache是否有剩余的空间允许新的块调入,如有,则转入9)8)启动Cache替换机构,留出一个Cache块位置9) ″打通″直接调度通路,将该主存块调入Cache,并修改标记"},{"id":"learncoder_160_23630","stem":"\t设有一个1MB容量的存储器,字长为32位,问:1)\t若按字节编址,地址寄存器、数据寄存器各为几位?编址范围为多大?2)\t若按半字编址,地址寄存器、数据寄存器各为几位?编址范围为多大?3)\t若按字编址,地址寄存器、数据寄存器各为几位?编址范围为多大?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"字长为32位,若按半字编址,则每个存储单元存放16位;若按字编址,则 每个存储单元存放32位1)若按字节编址, 1MB≒220×8bit,地址寄存器为20位,数据寄存器为8位,编址范围为00000H-FFFFFH 2)若按半字编址, 1MB=220×8b正219×16抽,地址寄存器为19位,数据寄存器为16位,编址范围为00000H-7FFFFH 3)若按字编址, 1MB≒220×8biE218×32助,地址寄存器为18位,数据寄存器为32位,编址范围为00000H-3FFFFH "},{"id":"learncoder_160_23633","stem":"\t一个16Kx16位的存储器,有1KX4位的DRAM芯片,内部结构由64X64构成,试 问:1)\t采用异步刷新方式,如果最大刷新间隔为2ms,则相邻两行之间的刷新间隔是多少?2)\t如果采用集中刷新方式,则存储器刷新一遍最少用多少个存储周期?设存储器的存储周期为0.5US,“死区”占多少时间? “死时间率”为多少(刷新周期为2ms) ?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"论釆用何种刷新方式,刷新都是从单个芯片的存储容量着手。1)\t采用异步刷新方式,在2ms时间内把芯片的64行刷新一遍,相邻两行之间的刷新间 隔=2ms/64=31.25us,可取的刷新间隔为31us。2)\t如果采用集中刷新方式,则存储器刷新一遍最少用64个存储周期,因为存储器的存 储周期为 0.5us,则“死区” =0・5pusx64=32uis, “死时间率” =32)uS/2 000usxl00%=1.6%。归纳总结:常见的刷新方式有集中式、分散式和异步式3种。其中,集中刷新方式的“死 区”最大,而且随着存储容量的增大(存储矩阵的增大),“死区”也会增大;异步刷新方式 的“死区”最小,仅等于一个读写周期;分散刷新方式则没有“死区”"},{"id":"learncoder_160_23632","stem":"\t图3-48为由8片2114芯片构成的4Kx8位的存储器,与8位的一个微处理器相连, 2114芯片为1KX4位的静态RAM芯片。试问:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image2.png'/>1)\t每一组芯片组的地址范围和地址线数目。2)\t4KB的RAM寻址范围是多少?3)\t存储器有没有地址重叠?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"由两片2114芯片构成1Kx8位的芯片组,再由4个芯片组构成4Kx8位的存储器。由图3-48可以看出,地址线A13-A10 在图中没有出现,说明采用部分译码方式1)芯片组的容量为1024B,需要10根地址线(A9-Ao),故地址范围为000H-3FFHo2)根据图3-48所示的连线,各芯片组的片选端由地址线A15、 A14进行译码。芯片组内地址线为A9-Ao, A13-AlO空闲,即为任意态。假设A13-AlO为全0, 4KB RAM的寻址范围分别是:第0组为0000H-03FFH,第1组为4000H-43FFH,第2组为8000H-83FFH,第3组为C000H-C3FFH,可见这4KB存储器的地址空间是不连续的。 演示第2组的计算过程,其他类似。 .第2组的片选信号应该是10 (A15、 A14),接下来A13-A工0为全0,剩下的全1,即10000011 1111 1111,十六进制为83FFHo .3)由于A13-Al0没有参与译码(部分译码),因此存储器存在地址重叠现象。归纳总结:由于未用到地址线A13-AlO,因此无论A13-Al0取何值,只要A15=A14=0,则选中第0片;只要A15=0, A14=1,则选中第1片,依此类推"},{"id":"learncoder_160_23635","stem":"\t(2015年中科院真题)一个直接映射的Cache有128个字块,主机内存包含16K个 字块,每个块有16个字,访问Cache的时间是10ns,填充一个Cache字块的时间是200ns, Cache的初始状态为空。1)\t如果按字寻址,请定义主存地址字段格式,给出各字段的位宽;2)\tCPU从主存中依次读取位置16〜210的字,循环读取10次,则访问Cache的命中率是多少?3)\t10次循环中,CPU平均每次循环读取的时间是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"1)\t按字寻址,每个块有16个字,故字块内地址为4位。Cache有128个字块,故Cache 字块地址为7位。主存包含16K个字块,故主存字块地址14位,字块内地址4位,主存地 址总共18位。主存字块标记位数为14-7=7位。主存地址格式如图3-53所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image9.png'/>2)\tCache中每个块16个字,故16〜210位置的字,按照直接映射可分别放入Cache的 第1〜13块。由于Cache的初始状态为空,循环读取10次时,第一次循环第16、32、48、 64>…、208位置的字均未命中,共13次,其他位置均命中,后面9次循环每个字都命中。 故 Cache 的命中率为 1-13/ (195x10) =99.3%。3)\t第一次循环需要填充Cache 13次,访问Cache 195-13=182次,总时间为200nsxl3+ 10nsxl82=4420ns 其余 9 次循环只需访问 Cache 195 次,总时间为 195xl0nsx9= 17550ns。故石\t平均访问时间为(17550ns+4420ns) /10=2197ns"},{"id":"learncoder_160_23640","stem":"\t设主存容量为1MB, Cache容量为16KB,每字块有16个字,每字32位,且按字节编址。1)\t若Cache采用直接映射,试求主存地址字段中各段的位数。2)\t若Cache采用4路组相联映射,试求主存地址字段中各段的位数。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"1) 若Cache采用直接映射。由于每个字块含有16个字(64B),且按字节编址,因此字 块内的位数(块内地址位数)为6位。另外,由于Cache中含有256个块(16KB/16x4B), 因此字块地址位数为8位。主存容量1MB,说明总位数为20位,因此主存字块标记位数为 20-6-8=6位。主存的地址格式如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image11.png'/>2) 若Cache采用4路组相联映射。同理,块内地址位数为6位。由于釆用4路组相联映 射,即每组4块,因此一共有64组,即组号需要6位。很容易得到主存字块标记位数为20-6-6=8 位。主存的地址格式如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image12.png'/>"},{"id":"learncoder_160_23622","stem":"\t2015年统考真题)假定编译器将赋值语句“x=x+3;”转换为指令\"add xaddr, 3\", 其中xaddr是x对应的存储单元地址。若执行该指令的计算机采用页式虚拟存储管理方式, 并配有相应的TLB,且Cache使用直写(Write Trough)方式,则完成该指令功能需要访问主 存的次数至少是()","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"访存次数最少的情况即TLB命中的情况,此时直接在TLB中找到xaddr, 并在Cache中读取x的值,此时不需要访存,但由于需要进行x所在存储单元的写入,且Cache 使用直写策略,故写入时必须访存,因此访存次数至少为1","type":"choice","options":{"D":"3","A":"0","C":"2","B":"1"},"answer":"B"},{"id":"learncoder_160_23625","stem":"对36位虚拟地址的页式虚拟存储系统,每页8KB,每个页表项为32位,页表的总容量为( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"根据虚拟地址的位数,可以得出虚存的容量2%=64GB,又根据页面大小 为8KB,得出64GB/8KB=8M个页表项,每个页表项32位(4B),因此,页表的总容量为32MB。归纳总结:主存空间和虚存空间都划分成若干个大小相等的页。主存(即实存的页)称 为实页,虚存的页称为虚页。页表大小=页表项数x每个页表的字节数","type":"choice","options":{"B":"4MB","A":"1MB","C":"8MB.","D":"32MB"},"answer":"D"},{"id":"learncoder_160_23624","stem":"下列关于Cache和虚拟存储器的说法中.,错误的有(\t)。I.当Cache失效(即不命中)时,处理器将会切换进程,以更新Cache中的内容II.当虚拟存储器失效(如缺页)时,处理器将会切换进程,以更新主存中的内容III. Cache和虚拟存储器由硬件和OS共同实现,对应用程序员均是透明的IV.虚拟存储器的容量等于主存和辅存的容量之和","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"Cache和虚拟存储器的原理是基于程序访问的局部性原理,但它们实现的方法和作用均不相同。Cache失效与虚拟存储器失效的处理方法不同,Cache完全由硬件实现,不涉及软件端; 虚拟存储器由硬件和OS共同完成,缺页时才会发出缺页中断,故I错误,II正确 III错误。 在虚拟存储器中,主存的内容只是辅存的一部分,IV错误","type":"choice","options":{"A":"I、 IV","B":"III、IV","C":"I 、 II、 III","D":"I 、III、IV"},"answer":"D"},{"id":"learncoder_160_23627","stem":"(2013年统考真题)某计算机主存地址空间大小为256MB,按字节编址。虚拟地址空间大小为4GB,采用页式存储管理,页面大小为4KB, TLB (快表)采用全相联映射,有 4个页表项,内容见表3-4。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image1.png'/>则对虚拟地址03FF F180H进行虚实地址变换的结果是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"由于页面大小为4KB,因此页内地址为12位。于是可以得到虚拟地址03FF F180H的页内地址为180H,故页号为03FFFHo由表3・4可知,页标记为03FFFH所对应的 页框号为0153H,于是将页框号与页内地址进行拼接,即可以得到虚实地址变换的结果是015 3180H","type":"choice","options":{"A":"015 3180H","C":"TLB缺失","D":"缺页","B":"003 5180H"},"answer":"A"},{"id":"learncoder_160_23621","stem":"\t下列关于虚拟存储器的说法,错误的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"在虚拟存储器中,页面如果很小,虚拟存储器中包含的页面个数就会过 多,使得页表的体积过大,页表本身占据的存储空间过大,操作速度将变慢。,CPU 访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的 连续区域中,即局部性原理。虚拟存储器正是依据了这一原理来设计的;,当页面很 大时,虚拟存储器中的页面个数会变少。另外,主存的容量比虚拟存储器的容量更少,主存 中的页面个数就会更少,缺页率自然就很大,就会不断地调入/调出页面,降低操作速度;,段式虚拟存储器是按照程序的逻辑性来设计的,具有易于实现程序的编译、管理和保 护,也便于多道程序共享的优点","type":"choice","options":{"A":"虚拟存储器利用了局部性原理","D":"段式虚拟存储器中,段具有逻辑独立性,易于实现程序的编译、管理和保护,也便 于多道程序共享","B":"页式虚拟存储器的页面如果很小,主存中存放的页面数较多,导致缺页频率较低, 换页次数减少,可以提升操作速度","C":"页式虚拟存储器的页面如果很大,主存中存放的页面数较少,导致页面调度频率较 高,换页次数增加,降低操作速度"},"answer":"B"},{"id":"learncoder_160_23623","stem":"\t访问相联存储器时,()","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题属于概念题。访问相联存储器只需要给出内容,不需要给出地址, 因此,相联存储器又被称为按内容访问存储器","type":"choice","options":{"C":"既要内容,又要地址","D":"不要内容也不要地址","B":"不根据内容,只需要地址","A":"根据内容,不需要地址"},"answer":"A"},{"id":"learncoder_160_23626","stem":"\t下列关于页式虚拟存储器的论述,正确的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"页式虚拟存储器中页面的大小与程序的大小无关,;程序仅能从 页面的起始位置开始放置,;正在运行的程序未必能全部装入内存","type":"choice","options":{"B":"可以将程序放置在页面内的任意位置","D":"将正在运行的程序全部装入内存","A":"根据程序的模块性,确定页面大小","C":"可以从逻辑上极大地扩充内存容量,并且使内存分配方便、利用率高"},"answer":"C"},{"id":"learncoder_160_23615","stem":"\tCache用组相联映射,一块大小为128B, Cache共64块,4块分一组,主存有4096块,主存地址共需(\t)位。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"主存有4096块,每块大小128B,则主存容量共有4096xl28B = 512KB , 共需地址线19位。","type":"choice","options":{"B":"18","C":"17","D":"16","A":"19"},"answer":"A"},{"id":"learncoder_160_23616","stem":"\t有效容量为128KB的Cache,每块16B, 8路组相联。字节地址为1234567H的单元调入该Cache,其tag应为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"因为块的大小为16B,所以块内地址字段为4位;又因为Cache容量为 128KB, 8路组相联,所以可以分为1024组[128KB/(8xl6B) = 1024],对应的组号字段10 位;剩下为标记字段。1234567H=0001001000110100010101100111,标记字段为其中高14位, 00010010001101=048DH","type":"choice","options":{"B":"2468H","C":"048DH","A":"1234H","D":"12345H"},"answer":"C"},{"id":"learncoder_160_23618","stem":"(2015年统考真题)假定主存地址为32位,按字节编址,主存和Cache之间采用直 接映射方式,主存块大小为4个字,每字32位,采用写回(Write Back)方式,则能存放4K 字数据的Cache的总容量的位数至少是( )o","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"按字节编址且主存块大小等于Cache行,主存块大小为4个字,每字32位=4B, 故主存块位16B=24B,故字块内地址为4位。能存放4K字数据的Cache,故其总共有1K=1024°个 Cache行,Cache行地址为10位。主存地址为32位,故主存字块标记位=32-10-4=18位。每行 Cache有一个标记项,其中有效位lbit, —致性维护位1bit,替换算法控制位题目中没有提及, 不做计算,加上标记位18bit,总共18+l+l=20bito故Cache每一行总容量为20位x210+4Kx32 位=20K 位+128K 位 =148K 位","type":"choice","options":{"B":"147K","A":"146K","C":"148K","D":"158K"},"answer":"C"},{"id":"learncoder_160_23620","stem":"\t关于LRU算法,以下论述正确的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"LRU算法指近期最少使用算法,把在Cache中驻留时间最长而没有使用 的块作为被替换的块。","type":"choice","options":{"D":"LRU算法替换掉那些在Cache中驻留时间最短且仍在引用的块","B":"LRU算法替换掉那些在Cache中驻留时间最短且未被引用的块","C":"LRU算法替换掉那些在Cache中驻留时间最长且仍在引用的块","A":"LRU算法替换掉那些在Cache中驻留时间最长且未被引用的块"},"answer":"A"},{"id":"learncoder_160_23617","stem":"(2014年统考真题)采用指令Cache与数据Cache分离的主要目的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"。采用指令Cache和数据Cache分离之后,取指操作和取操 作数的操作分别到不同的Cache中进行寻找,指令流水线中的取指部分和取操作数的部分就可以 很好地避免冲突,即减少了指令流水线的冲突","type":"choice","options":{"C":"降低CPU平均访存时间","A":"降低Cache的缺失损失","D":"减少指令流水线资源冲突","B":"提高Cache的命中率"},"answer":"D"},{"id":"learncoder_160_23619","stem":"\t在全相联映射、直接映射和组相联映射中,块冲突概率最小的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"全相联映射就是让主存中任何一个块均可以装入到Cache中任何一个块 的位置上,块冲突概率最小","type":"choice","options":{"D":"不一定","C":"组相联映射","A":"全相联映射","B":"直接映射"},"answer":"A"},{"id":"learncoder_160_23612","stem":"(2017年统考真题)某C语言程序段如下:for (i=0; i<9; i++) {temp = 1;forG=0;j<=i;j++) temp+=a[j];sum += temp;}下列关于数组a的访问局部性的描述中,正确的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"时间局部性是指一旦一条指令执行了,则在不久的将来它可能再被执行。 空间局部性是指一个存储单元被访问了,那么它附近的存储单元也可能很快被访问。对于本 题中的循环指令来说,内层j变量的循环,体现了访问数组a的空间局部性,因为访问a[l] 之后a[2]、a[3]可能很快被访问;而外层i变量的循环,体现了时间的局部性,因为访问a[l] 之后,当i++, a[l]有可能再次被访问","type":"choice","options":{"C":"有时间局部性,无空间局部性","D":"时间局部性和空间局部性皆无","B":"无时间局部性,有空间局部性","A":"时间局部性和空间局部性皆有"},"answer":"A"},{"id":"learncoder_160_23609","stem":"\t局部性原理是一个持久的概念,对硬件和软件系统的设计和性能都有着极大的影响。 局部性通常有两种不同的形式:时间局部性和空间局部性。程序员是否编写出高速缓存友好,的代码,就取决于这两方面的问题。对于下面这个函数,说法正确的是(「)。\t,int sumvec (int v[N]){Int i,sum=0;\t*for(i=0;i<N;i++)sum+=v[i];return sum;}","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"对于局部变量i和sum,循环体有良好的时间局部性。实际上,因为它们都是局部变量,任何合理的优化编译器都会把它们缓存在寄存器文件中,也就是存储器层次 的最高层 在考虑对向量v的步长为1的应用。一般而言,如果一个高速缓存的块大小为B字节, 那么一个步长为k的引用模式(这里k是以字为单位的)平均每次循环迭代会有min(1,(wordsize Xk)/B)次缓存不命中。当k=l时,它取最小值,所以对v的步长为1的引用确实是 高速缓存“友好”的,即拥有良好的空间局部性","type":"choice","options":{"D":"对于变量i、sum和v[N],循环体具有良好的时间局部性","B":"对于变量i、sum和v[N],循环体具有良好的空间局部性","A":"对于变量i和sm,循环体具有良好的空间局部性","C":"对于变量i和sum,循环体具有良好的时间局部性"},"answer":"C"},{"id":"learncoder_160_23608","stem":"\t地址线A15〜A0 (低),若选取用16KX1位存储芯片构成64KB存储器,则应由地址码(\t)译码产生片选信号。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"用16KX1位芯片构成64KB的存储器,需要的芯片数量为(64Kx8)/(16Kx 1) = 32每8片一组分成4组,每组按位扩展方式组成一个16KX8位的模块,4个模块按字扩展 方式构成64KB的存储器。存储器的容量为64K=216,需要16位地址,选用A15-A0为地址 线;每个模块的容量为16K=214 (需要14位地址),选用A13-A0。为每个模块提供地址;A15 A14 通过2-4译码器对4个模块进行片选。","type":"choice","options":{"A":"A15、 A14","B":"A0、 A1","C":"A14、 A13","D":"Al、 A2"},"answer":"A"},{"id":"learncoder_160_23611","stem":"\t下面关于计算机Cache的论述中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"Cache不是介于主、辅存之间的存储器因此A选项错;访问 Cache不命中需要替换时的传送单位是数据块而不是字节,;在采用写回法时, Cache中的信息并非与主存中的信息时刻保持一致","type":"choice","options":{"B":"如果访问Cache不命中,则用从内存中取到的字节W Cache中最近访问过的字节","D":"Cache中的信息必须与主存中的信息时刻保持一致","A":"Cache是一种介于主存和辅存之间的存储器,用于主存和辅存之间的缓冲存储","C":"Cache的命中率必须很高,一般要达到90%以上"},"answer":"C"},{"id":"learncoder_160_23607","stem":"\t(2015年中科院真题)在一个容量为128KB的SRAM存储器芯片上,按字长32位编址,其地址范围可从0000H到( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"容量为128KB的SRAM存储器,按字长32位=4B编址,总共有 128KB/4B=32K=215个存储单元。故其地址范围从0000H开始,最多可以有15个1,即到7fHH 为止","type":"choice","options":{"C":"7ffffH","A":"3ffFH","D":"3ffffH","B":"7fff H"},"answer":"B"},{"id":"learncoder_160_23610","stem":"\t一个存储器系统中,常常同时包含ROM和RAM两种类型的存储器,如果用1Kx8 位的ROM芯片和1KX4位的RAM芯片,组成4Kx8位的ROM和1KX8位的RAM存储系统, 按先ROM后RAM进行编址。采用3-8译码器选片,译码信号输出信号为Y0〜Y7,其中Y4 选择的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"所需ROM的芯片数=(4Kx8位)/(1KX8位)=4片,字扩展。 所需RAM的芯片数=(1KX8位)/(1KX4位)=2片,位扩展。采用3・8译码器,又已知“按先ROM后RAM进行编址”,则Y0选中第一片ROM, Y3选中第四片ROM。两片RAM(lKx4位)作为一个存储体,Y4选中该存储体","type":"choice","options":{"B":"第五片ROM","D":"第一片RAM和第二片RAM","C":"第一片RAM","A":"第一片ROM"},"answer":"D"},{"id":"learncoder_160_23614","stem":"\t容量为64块的Cache采用组相联映射方式,字块大小为128个字,每4块为一组。如果主存为4K块,且按字编址,那么主存地址和主存标记的位数分别为(\t)。\t.","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"因为主存容量4Kx128=512K字,所以主存地址19位。又因为字块大小 为128个字,所以块内地址7位,Cache被分成64/4-16组,故组号4位,主存标记19-4-7=8位","type":"choice","options":{"B":"17, 6","C":"18, 8","A":"16, 6","D":"19, 8"},"answer":"D"},{"id":"learncoder_160_23613","stem":"\t若数据在存储器中采用以低字节地址为字地址的存放方式(小端存储),则十六进制数12345678H按自己地址由小到大依次存为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"choice","options":{"A":"12345678","C":"78563412","D":"34127856","B":"87654321"},"answer":"C"},{"id":"learncoder_160_23606","stem":"\t(2017年统考真题)某计算机主存按字节编址,由4个64Mx8位的DRAM芯片采用交叉编址方式构成,并与宽度为32位的存储器总线相连,主存每次最多读写32位数据。 若double型变量x的主存地址为804001AH,则读取x需要的存储周期数是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"4个DRAM芯片采用交叉编址方式构成多体存储器,总共有4体,故低 2位表示体号即芯片编号。double型变量占64位,共8B。主存地址为804001AH,低2位为 10,根据10 mod 4=2可知从编号为2的芯片开始存储(编号从0开始)。一个存储周期最多 可以对所有芯片各读取1B,总共需要3个存储周期才可以读取完x变量","type":"choice","options":{"B":"2","A":"1","C":"3","D":"4"},"answer":"C"},{"id":"learncoder_160_23602","stem":"一个存储器的容量假定为MxN,若要使用lxk的芯片(l<M, k<N),需要在字和位方向上同时扩展,此时共需要(\t)个存储芯片。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"用存储容量除以存储芯片容量,需要向上取整,因为M除以1和N除以k不一定是整数。","type":"choice","options":{"B":"(M/l)x(N/k)","D":"[M/I]xLN/kJ","A":"MxN","C":"「M/l]x「N/k」"},"answer":"C"},{"id":"learncoder_160_23605","stem":"\t(2016年统考真题)某存储器容量为64KB,按字节编址,地址4000H〜5FFFH为ROM区,其余为RAM区。若采用8Kx4位的SRAM芯片进行设计,则需要该芯片的数量是 (\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"存储器容量为64KB,按字节编址, 总共有64K个存储单元。ROM区 的地址为4000H-5FFFH总共8K个存储单元,故RAM区有64K-8K=56K个存储单元。采 用8Kx4位的SRAM芯片进行设计,首先进行位扩展,将4位扩展成8位需要2个DRAM芯 片,然后进行字扩展,将8K扩展成56K需要7个DRAM芯片,故总共需要7x2=14个DRAM 芯片","type":"choice","options":{"C":"14","A":"7","D":"16","B":"8"},"answer":"C"},{"id":"learncoder_160_23604","stem":"\t(2014年统考真题)某容量为256MB的存储器由若干4Mx8位的DRAM芯片构成,该DRAM芯片的地址引脚和数据引脚总数是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"4Mx8位的DRAM芯片组成256MB的存储器,只需要进行字扩展。数据 引脚的数目应该与存储器的存储字长相等,由于存储器由4MX8位的DRAM芯片组成,其存 储字长为8位,故数据引脚是8根。由于256MB的存储器有256M=28个存储单元即存储字 数,需要28根地址线进行寻址,.由于DRAM芯片采用地址复用技术,行列地址分两次传送, 只需要14根地址线即可实现寻址功能。故总共需要14+8=22根地址引脚和数据引脚","type":"choice","options":{"D":"36","C":"30","B":"22","A":"19"},"answer":"B"},{"id":"learncoder_160_23601","stem":"主存按字节编址,地址从0A4000H到0CBFFFH,共有(\t)字节;若用存储容量为32Kx8位的存储芯片构成该主存,至少需要(\t)片。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"CBFFFH+1-A4000H=28000H (可以换成二进制或者十进制计算),总共 有160KB (28000H转换成二进制为0010 1000 0000 0000 0000,转换成十进制为163 840, 163 840/1024=160,即 160KB),所需存储芯片数=(160K x 8)/(32K x8) = 5\t解题技巧:用末地址+1减去首地址,即可求出存储容量,然后用存储容量除以存储芯片容量,即可得出所需芯片数。","type":"choice","options":{"D":"192K,5\t.","A":"80K,2","B":"96K,2","C":"160K,5"},"answer":"C"},{"id":"learncoder_160_23600","stem":"某一计算机采用主存一Cache存储层次结构,主存容量有8个块,Cache容量有4个块,采取直接映射方式。若主存块地址流为0、1、2、5、4、6、4、7、1、2、4、1、3、7、 2, 一开始Cache为空,此期间Cache的命中率为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"直接映射方式中,存储块都唯一映射到一个Cache映像块中。.\tCache块号=主存块号 mod Cache块数于是,每次访问后,Cache中存放的主存块情况如下图所示<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第3章)/image8.png'/>底纹为灰色的部分为命中时刻。即有4次命中,那么命中率为(4门5)xl00%=26.7%,","type":"choice","options":{"C":"26.7%","A":"13.3%","B":"20%","D":"33.3%"},"answer":"C"},{"id":"learncoder_160_23603","stem":"\t存储器釆用部分译码法片选时,( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"部分译码即只用高位地址的一部分参与译码,而另一部分高位地址与译 码电路无关,因此出现一个存储单元对应多个地址的现象,这种现象被称为地址重叠(如00111 和0111L前两位不参与译码,导致一个存储单元对应多个地址)","type":"choice","options":{"A":"不需要地址译码器","B":"不能充分利用存储器空间","C":"会产生地址重叠","D":"CPU的地址线全参与译码"},"answer":"C"},{"id":"learncoder_160_23597","stem":"\t(2015年统考真题)某计算机使用4体交叉编址存储器,假定在存储器总线上出现的主存地址(十进制)序列为 8005, 8006, 8007, 8008, 8001, 8002, 8003, 8004, 8000, 则可能发生访存冲突的地址对是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"当采用低位交叉编址方式时,一共有4体,故8000, 8004, 8008 在同一体中,8001, 8005在同一体中,8002, 8006在同一体中,8003, 8007在同一体中。 再考虑访问序列,访问8004时,地址8008已经过四个访问地址,故已经访存完毕,不会产 生冲突,,由于访问8004之后立即访 问8000,且两个访问地址在同一体中,故会产生冲突","type":"choice","options":{"D":"8000 和 8004","C":"8001 和 8008","B":"8002 和 8007","A":"8004 和 8008"},"answer":"D"},{"id":"learncoder_160_23599","stem":"关于Cache的3种基本映射方式,下面叙述中错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"Cache存储器通常使用3种地址映射方式,它们是全相联映射、直接映射 和多路组相联映射方式。1)\t全相联映射方式。主存单元与Cache单元随意对应,有最大的使用灵活性,但地址标 志字段位数多,比较地址时可能要与所有单元比较,线路过于复杂,成本太高,只用于Cache 容量很小的情况。2)\t直接映射方式。一个主存单元只与一个Cache单元硬性对应,有点死板,影响Cache 容量的有效使用效率,即影响命中率,但地址比较线路最简单,比较常用。3)\t多路组相联映射方式。一个主存单元可以与多个Cache单元有限度地随意对应,是全 相联映射和直接映射的一种折中方案,有利于提高命中率,地址比较线路也不太复杂,是比 较好的_种选择","type":"choice","options":{"B":"全相联映射方式,即主存单元与Cache单元随意对应,线路过于复杂,成本太高","C":"多路组相联映射是全相联映射和直接映射的一种折中方案,有利于提高命中率","A":"Cache的地址映射有全相联、直接和多路组相联3种基本映射方式","D":"直接映射是全相联映射和组相联映射的一种折中方案,有利于提高命中率"},"answer":"D"},{"id":"learncoder_160_23598","stem":"设存储器容量为32字,字长为64位。模块数釆用低位交叉方式。存储周期T=200ns,数据总线宽度为64位,总线传输周期r=50ns。该交叉存储器的带宽是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"在低位交叉存储器中,连续的地址分布在相邻的块中,而同一模块内的地址都是不连续的。这种存储器采用分时启动的方法,可以在不改变每个模块存取周期的前 提下,提高整个主存的速度。低位交叉存储器连续读出4个字所需的时间为t=T+(m-l)xr=200ns+3x50ns=350ns=3.5x 10~7S 故带宽为 W=64x4bit/(3.5xl0~7s)=73xl07bit/s","type":"choice","options":{"C":"73x(l0^7)bit/s","D":"18x(l0^7)bit/s","B":"8x(l0^7)bit/s","A":"32x(l0^7)bit/s"},"answer":"C"},{"id":"learncoder_160_23596","stem":"\t采用八体并行低位交叉存储器,设每个体的存储容量为32KX16位,存储周期为 400ns,下述说法中正确的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"八体并行低位交叉存储器,存储周期和总线周期需要满足存 储周期=8x总线周期,因此得到总线周期为50nso对于单个个体而言,每个存储周期内仍然 只能取出16位,但是由于CPU交叉访问8个存储体,因此可以在一个存储周期内使8个存储体各传输16位,共16x8=128位, ","type":"choice","options":{"D":"在100ns内,每个体可向CPU提供28位二进制信息","B":"在100ns内,每个体可向CPU提供27位二进制信息","A":"在400ns内,存储器可向CPU提供27位二进制信息","C":"在400ns内,存储器可向CPU提供28位二进制信息"},"answer":"A"},{"id":"learncoder_160_23593","stem":"\t某机器的主存储器共32KB,由16片16Kxl位(内部采用128x128存储阵列)的 DRAM芯片字和位同时扩展构成。若采用集中式刷新方式,且刷新周期为2ms>那么所有存储单元刷新一遍需要(\t)个存储周期。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"因为芯片内部采用128x128存储阵列,刷新一行需要一个存储周期","type":"choice","options":{"C":"1024","B":"256","A":"128","D":"16 384"},"answer":"A"},{"id":"learncoder_160_23592","stem":"\t某SRAM芯片,其容量为512x8位,除电源和接地端外,该芯片引出线的最小数目应该是()","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"容量为512x8位,首先数据线是8位,因为29=512,所以地址线为9位, 再加上一根读控制线和一根写控制线(可能有些书上的答案还会有电源线、地线等,做题时 只算读、写线即可),一共是8+9+2=19","type":"choice","options":{"D":"19","B":"25","C":"50","A":"23"},"answer":"D"},{"id":"learncoder_160_23595","stem":"\t某机器字长32位,存储容量64MB,若按字编址,它的寻址范围是(\t)。、","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"首先需要分清MB和M的区别:M是一个数量级,如1M就是代表一个 数字,没有实际的物理意义;MB是一个单位,1MB表示的就是1M个字节。寻址范围,必 然应该是数量级。本题中,由于是按字编址,并且字长是32位,因此4个字节(4B)编一 个地址,一共有64MB/4B=16M个地址,寻址范围为16M","type":"choice","options":{"A":"8M","B":"16MB","D":"8MB","C":"16M"},"answer":"C"},{"id":"learncoder_160_23591","stem":"主存与Cache间釆用全相联映射方式,Cache容量4MB,分为4块,每块1MB,主 存容量256MB。若主存读/写时间为30ns, Cache的读/写时间为3ns,平均读/写时间为3.27ns, 则Cache的命中率为( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"题干中真正有意义的数据是主存读/写时间、Cache的读/写时间和平均读/写时 间,据此就可以求出Cache的命中率,其他数值属于干扰数据","type":"choice","options":{"C":"97%","D":"99%","A":"90%","B":"95%"},"answer":"D"},{"id":"learncoder_160_23594","stem":"若单译码方式的地址输入线为6,则译码输出线有(\t)根,那么双译码方式有输出线()根。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"单译码方式的译码输出线为64根,双译码方式的译码输出线为16根。归纳总结:,地址译码电路有单译码和双译码两种方式,单译码方式只有一个译码器,双 译码方式有两个译码器(X地址译码器和Y地址译码器),X和Y两个方向译码器的输出线 在存储体内部的一个记忆单元上交叉,以选择相应的记忆单元","type":"choice","options":{"D":"16, 64","B":"64, 32","C":"32, 16","A":"64, 16"},"answer":"A"},{"id":"learncoder_160_23586","stem":"\t(2015年中科院真题)根据存储内容来进行存取的存储器称为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"相联存储器即TLB,是通过存储内容来进行存取的存储器,相联存储器中 的任一存储项都可以直接用该项的内容作为地址来进行存取","type":"choice","options":{"D":"串行存储器","B":"相联存储器","C":"交叉存储器","A":"双端口存储器"},"answer":"B"},{"id":"learncoder_160_23585","stem":"(2015年统考真题)下列存储器中,在工作期间需要周期性刷新的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"需要周期性刷新的存储器是动态随机存取存储器DRAM,本题中A是静态 RAM, C是只读存储器ROM, D是闪存,属于只读存储器ROM的一种,故通过排除法可以 选出 B 选项。事实上,B 选项 SDRAM ( Synchronous Dynamic Random Access Memory)是同 步动态随机存储器,同步是指内存工作需要同步时钟,内部命令的发送与数据的传输都以它 为基准。","type":"choice","options":{"A":"SRAM","B":"SDRAM","D":"Flash","C":"ROM"},"answer":"B"},{"id":"learncoder_160_23590","stem":"某计算机的存储系统由Cache—主存系统构成,Cache的存取周期为10ns,主存的存取周期为50ns。在CPU执行一段程序时,Cache完成存取的次数为4800次,主存完成的存 取次数为200次,该Cache—主存系统的效率是(\t)。【注:计算机存取时,同时访问Cache和主存,Cache访问命中,则主存访问失效;Cache 访问未命中,则等待主存访问】","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"针对这类题,有两个公式,分别对应不同的前提。涉及的缩写说明有: h为Cache命中率,tc为一次Cache访问时间,tm为一次主存访问时间。①\t系统先进行Cache访问,Cache命中,则结束;Cache未命中,再进行主存访问。则 平均访问时间计算公式为hxtc+(l-h)x(tc+tm)。②\t系统同时进行Cache访问和主存访问,Cache命中,则主存访问失效;Cache未命中, 则等待主存访问。则平均访问时间计算公式为hxtc+(l-h)xtm本题属于第②种情况,命中率=4800/(4800+200)=0.96,平均访问时间=0.96xl0ns+(l- 0.96)x50ns=11.6ns,故 Cache—主存系统的效率=10/11.6=0.862。","type":"choice","options":{"B":"0.856","A":"0.833","D":"0.862","C":"0.958"},"answer":"D"},{"id":"learncoder_160_23589","stem":"在对破坏性读出的存储器进行读/写操作时,为维持原存信息不变,必须辅以的操作是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"对于破坏性读出的存储器,每当一次读出操作之后,必须紧接一个重写(再 生)操作,以便恢复被破坏的信息,保持原存信息不变","type":"choice","options":{"B":"再生","A":"刷新","D":"主存校验","C":"写保护"},"answer":"B"},{"id":"learncoder_160_23588","stem":"(2015年中科院真题)连续两次启动同一存储器所需的最小时间间隔称为( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"存储周期的定义即为连续两次启动同一存储器所需的最小时间间隔。存取 时间是从上一次启动存储器到完成读写操作为止,一般小于存储周期。存取时间又包括读出 时间和写入时间两种,存储时间即写入时间。没有访问周期这种说法","type":"choice","options":{"D":"访问周期","A":"存储周期","C":"存储时间","B":"存取时间"},"answer":"A"},{"id":"learncoder_160_23587","stem":"\t主存储器主要性能指标有( )oI 存储周期\tII 存储容量\t III存取时间 \tiv 存储器带宽","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"主存储器的主要性能指标包括存储容量、存取时间、存储周期和存储器带 宽。存储容量是指某计算机实际配置的容量,通常来说,它小于最大可配置容量(主存地址 空间大小)。存取时间是值执行一次读操作或写操作的时间,分读出时间和写入时间两种。存储周期是指存储器进行连续两次独立的读或写操作所需要的最小时间间隔,它通常大于存取时间。存储器带宽是指单位时间内从存储器读出或写入存储器的最大信息量","type":"choice","options":{"B":"I、 II、 IV","A":"I、 II","C":"I、III、IV","D":"全部都是"},"answer":"D"},{"id":"learncoder_160_23583","stem":"下述说法中正确的是(\t)。I半导体RAM信息可读可写,且断电后仍能保持记忆II动态RAM是易失性RAM,而静态RAM中的存储信息是不易失的III.半导体RAM是易失性RAM,但只要电源不断电,所存信息是不丢失的IV.半导体RAM是非易失性的RAM","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"半导体RAM,无论静态RAM还是动态RAM都是易失性的,即断电后存 储信息都将丢失。RAM是可读可写,而ROM只读。对于iii来讲,DRAM即使不断电,如果在规定的时间内没有及时刷新,则存储信息也会丢失","type":"choice","options":{"A":"I、 II","C":"II、IV","B":"只有III","D":"全错"},"answer":"D"},{"id":"learncoder_160_23584","stem":"下列关于ROM和RAM的说法中,错误的是(\t)ICD-ROM是ROM的一种,因此只能写入一次II. Flash快闪存储器属于随机存取存储器,具有随机存取的功能III RAM的读出方式是破坏性读出,因此读后需要再生IVSRAM读后不需要刷新,而DRAM读后需要刷新","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"CD-ROM属于光盘存储器,是一种机械式的存储器,和ROM有本质的区 别,I错误。Flash快闪存储器是EEPROM的改进产品,虽然它也可以实现随机存取,但从原理上讲 仍属于ROM,而且RAM是易失性存储器,II错误。SRAM的读出方式并不是破坏性的,读出后不需再生,iiI错误。SRAM采用双稳态触发器来记忆信息,因此不需要再生(刷新);而DRAM采用电容存 储电荷的原理来存储信息,只能维持1〜2ms,即使电源不掉电,信息也会自动消失,因此在 电荷消失之前必须要再生(刷新),IV正确","type":"choice","options":{"C":"II、 III","B":"I 、III、IV","A":"I 、 II","D":"I 、 II、III"},"answer":"D"},{"id":"learncoder_160_20186","stem":"一台机器具有24位地址A23~A0。其最大寻址能力配置了一个主存储器,主存采用字 节编址方式,问:(1)主存储器的容量是多少?(2)若用2Mxl位的存储器芯片构造主存储器,需多少个芯片?(3)主存储器需要多少个片选信号0用哪几位地址信号去生成这些片选信号?参看答案与解析","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"(1)存储器的容量为224 = 16MBO (2)共需16MB/2Mb = 8*8=64个芯片。(3)该存储器需要8个片选信号。用A23A22A21三位地址信号去生成这些片选信号。"},{"id":"learncoder_160_20184","stem":"某计算机的主存采用体宽为8 B的8体交叉存储器;数据总线的宽度为64位,读一个主 存块的步骤:(1)发送首地址到主存(一个总线时钟周期);(2)主存控制器接受到地址后,启动第一个模块准备数据,并每隔一个总线时钟启动下一个 模块准备数据。每个存储模块花4个总线时钟准备好64位数据,总线上传输一个64位数据花 一个总线时钟。请问:该计算机的Cache缺失损失(从主存中读一个主存块到Cache的时间)至少为多少总线时钟 周期?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"通常,存放主存数据块的Cache行(也叫槽)的大小定义为:用視同体内地址访问N体交叉存储器一次所能读出的数据总量°由题意知.,Caphe行的大小为8*8B = 64Bo没有 总线竞争时,Cache缺失损失是从主存中读一个主存块的时间,即l+4+l +(8-1)*l或(1+1*4 + 8*1)= 13个总线时钟周期,所以Cache缺失损失至少是13个'总线时钟周期。\t"},{"id":"learncoder_160_20185","stem":"在一个页面大小为1 KB请求页式系统中,允许用户编程空间为32个页面。主存空间 为16 KBO现有一个长度为4页的程序的当前页表如下。请问该程序访问3个虚地址0AC5H、 06C5H,,1AC5H时系统将分别做什么操作?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第9章/image2.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"页面大小为1KB,所以页内地址的长度为10位。用户编程空间为32 = 25个虚 页面,则虚页号的长度为5位°主存空间为16KB = 16 = 23个实页面,则实页号的长度为4位。则虚地址0AC5H = 0000 10 10 1100 0101B中后10位10 1100 0101B为页内地址,前6位(严 格来说前5位)000010B = 2为虚页号。查页表第三行,存在位为1,读出实页号4 = 0100(主存 有16页,实页号占4位),与页内地址拼接,得实地址0100 10 1100 0101B = 12C5Ho系统按实地 址12C5H访问主存。虚地址06C5H-0000 01 10 1100 0101B,其中虚页号为000001B = lo查页表第二行,存在位 为0,出现缺页故障或页面失效。虚地址1AC5H = OOO1 10 10 1100 0101B,其中虚页号为0001103 = 6。查页表第七行,超出了 页表长度,发出非法访问信号。"},{"id":"learncoder_160_20179","stem":"某计算机系统主存大小为32 K个字,Cache大小为4 K个字,采用组相联地址映像每组含4块,每块64字。假设Cache开始为空,CPU从主存地址单元0开始顺序读取4 352个字,重 复此过程10遍。若Cache的速度是主存的10倍,采用LRU替换算法。请画出主存和Cache的 地址格式,并求采用Cache后获得的加速比。 .\t'","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":" 已知主存大小为32K字,.Gache(高速缓存)大小为4K字,则圭存嘯Cache的地址长度分别为15位和12位。\t又已知:每组含4块,每块64字。则组内块号占2位,块:内地址占6位。\t所以主存和Cache的地址中组号分别占(15-2-6 )=7位和(12-2-6 )=4位。CPU访问主存地址单元0读一个Cache不命中,但是把该字所在在块装入Cache,以后访问 主存地址单元1.2…..63分别读一个字,Cache都命中,。Cache容量为4K字=4096个字;所以在CPU从主存地址单元0开始顺序读取4095个字的 过程中,每读64个字,不命中一次4096/6344=64,因此,共不命中64次。从访问主存地址单元4096开始,Cache不命中,要发生替换。由于采用组相联:所以主存地 址单元4096所存储的字将进入Cache中的第0组。由于采用LRU替换算法。所以替换的是 Cache中第0组第一块。在读入主存地址单元4096、4097、…、4351共256个字的过程中,共需要装入(4352-4096)/ 64 = 4块,替换的恰好是Cache中第0组的4块:在此过程中共发生4次不命中,所以在第一遍中,共访问了 4352次,其中不命中64+4 = 68次。\t在第二遍重复上述过程时,开始的256次访问,即访问主存地址单元0、1、…、255,共需要装 入256/64 = 4块,替换的恰好是Cache中第0组的4块。在此过程中共发生4次不命中。此后访 问主存地址单元256、257、…、4095全部命中。八在读入主存地址单元4096、4097、…、4351共256个字的过程中,共需要装入(4352-4096)/64 = 4块 潜换的恰好是Cache中第0组的4块。在此过程中共发生4次不命中。所以在第二遍中,共访问了 4352次,其中不命中8次。,\t第三遍到第十遍的情况与第二遍相同。\t因此重复此过程10遍,共访问4352*10二:43520次,其中不命中68+8*9 = 68+72 = 140次。“设Cache的存取周期为T,则采用Cache后获得的加速比:\tSP = (43520x 10T)/[ (43520-140) XT+140X1077]\t=435200/ (43380+1400) = 435200/44780 = 9.72 o\t"},{"id":"learncoder_160_20176","stem":"设某计算机采用8片8 KB的SRAM组成64 KB的存储系统,芯片的片选信号为CS。请 写出每一片芯片的地址空间。若在调试中发现:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第9章/image1.png'/>(1)无论往哪个芯片中存放8 KB的数据,以E000H为起始地址存储芯片中都有相同的 数据;(2)对第2、4、6、8片的访问总不成功;(3)对第1 ~4片的访问总不成功。*请分析原因。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"各芯片的地址空间依次为:00Q0H~lFFFH;2000H~3FFFH;4000H^5EFFH; 6000H ~7FFFH;8000H ~ 9FFFH ; AOOOH ~ BFFFH; COOOH ~ DFFFH ;JEOOOH ~ FFFFH分析原因:(1)第8片的片选信号为CS总是有效(为低电平),可能是线路接地,也可能是译码器出错Y7总为有效\t\t(2)Y1,Y3,Y5,Y7总是无效,这说明译码器的最低位输入A恒为低电位,可能是其接地,或者处理誦的地址管脚A15存在故障,总是输出0;\t(3)Y0,Y1,Y2,Y3总是无效,这说明译码器的最高位输入C恒为高电位,可能是其接Vcc,或者处理器的地址管脚A15存在故障,总是输出1.。\t"},{"id":"learncoder_160_20180","stem":"一个具有64个用户的页式虚拟存储器,页面大小为4 KB。每个用户最多占用1 024个 页面,主存容量64 KB。要求:(1)画图说明多用户虚地址格式和主存地址格式。(2)快表分哪几个字段?每个字段分别占几位?快表的字长是多少位?(3)慢表的容量是多少个存储字?每个存储字是多少位?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"(1)多用户虚地址格式:用户号(6位)+虚页号(10位)+页内偏移地址(12位)。主存地址格式:实页号(16-12 = 4位)+页内偏移地址(12位)。\t(2)快表分用户号、虚页号、实页号三个字段。用户号字段占6位,虚页号占10位,实页号 占4位。快表的字长是20位。(3)慢表的每个存储字=实页号(4位)+存在位(1位)+修改位(1位)=6位。单个用户的 慢表有1024行,即1024个存储字。全部用户的慢表有64xl024 = 64K个存储字。"},{"id":"learncoder_160_20177","stem":"设某处理器执行一段程徐的过程中,访问Cache 3 800次,访问主存200次。己知Cache 的访问周期Tc=50 ns,主存的访问周期Tm=250 ns。请计算命中率日、平均访问周期Ta、Cache- 主存层次的访问效率e = Tc/Ta以及使用Cache后访存加速比SpO","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"H=3800/(3800 +200) = 95% ,Ta =HxTc + ( 1-H) *Tm =50*0.95+(l-0. 95.) *250 = 60o e= Tc/Ta = 50/60 = 83.3%.Sp=Tm/Tn = 250/60 = 4.17.\t\t"},{"id":"learncoder_160_20181","stem":"采用组相联联映像的Cache存储器容量为512 KB。容量为16 MB的主存采用模8交叉, 每个分体宽度为8位。若采用按地址访问的存储器来构造相联目录表,实现主存地址到Cache 地址的变换,并约定采用8个外相等比较电路。请设计此相联目录表,求出该表的行数、每行的 总宽度及每个比较电路的位数。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"Cache 地址的长度:log512K=19 位。\t其中,组内块号占log 8 = 3位,块内偏移量log 8 = 3位。所以,组号占19-3-3 = 13位。\t*Cache地址的格式为:13位\t3位\t3位主存地址的长度Jog 16M = 2犷位,则相应的区号占:24-19 = 5位, 主存地址的格式为:则,相联目录表的行数213 = 8K.\t每行有8栏,每栏[(5+3) +3] =11位,行的总宽度为8*11=88位。 每个比较电路的位数:(5+3)= 8位。"},{"id":"learncoder_160_20178","stem":"某计算机采用直接映像Cache,已知主存容量为4 MB,Cache容量为4 096 B,字块长度为8个字(32位/字)。(1)画出反映主存与Cache映像关系的主存地址各字段分配框图,并说明每个字段的名称及位数。(2)设Cache的初态为空,若CPU依次从主存第0,1,-,99单元读出100个字(主存一次读一个字),并重复按此次序读10次,问命中率是多少?(3)如果Cache的存取周期是50ns,主存的存取周期是500 ns,根据(2)中求出的命中率, 求平均存取时间。(4)计算Cache-主存系统的效率。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"(1)主存地址的长度=log 4M=22位,Cache地址的长度=log4096 = 12位,所以 主存字块标记的长度=22-12 = 10位。\t每个字块的字节数为8x32/8=32,所以块内地址的长度=log32=5位\tCache字块地址(块号)的长度-12-5 = 7位。则反映主存与Cache映像关系的主存地址各字段分配框图如下。(2)由于Cache的初态为空,.所以读主存第0个单元时不命中,但是第0个单元所在的第.0 块被装入主存。由于每个字块有8个字,所以随后读主存第1,2......7单元时皆命中。依次类 推,读主存第8,16,…,96单元时不命中,其余均命中。故在第一次连续读100个字的过程中,共 不命中13次。此后重复按此次序读9次,皆命中。命中率=[(100x10-13 )/( 100x10) ]xl00% =98.7%(1)平均存取时间=50 ns*98.7%+500 ns*(l-98.7 % \")=55. 85 ns(2)Cache-主存系统的效率=Cache的存取周期/平均存取周期*100%=(50 ns / 55.85 ns) *l00% =89:5%\t"},{"id":"learncoder_160_20175","stem":"设处理器有18根地址线,8根数据线,并用IO/M作为访存控制信号,RD/WR读/写信号。已知:(1)\t现有下列芯片(如下图所示)及各种门电路(自定);(2)\t存储芯片地址空间分配:0-32767为系统程序区,32768-98303为用户程序区,最大 16K地址空间为系统程序工作区。要求:(1)\t指出选用存储芯片的类型、数量;(2)\t写出每片存储芯片的地址范围(用二进制形式表示)。(3)\t详细画出处理器与存储芯片的连接图。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"63. 空","type":"short_answer","answer":"(1) 0 ~ 32767为系统程序区,这是32KB的只读空间,选用一片32Kx8的 ROM。32768 ~ 98303为用户程序区,这是64KB的随机存取地址空间,选用两片32Kx8的 RAM。最大16KB地址空间为系统程序工作区,这是16KB的随机存取地址空间,选用一片 16Kx8 的 RAM。\t(2)一片 32K*8ROM 的地址范围是:00 0000 0000 0000 0000B ~ 00 0111 1111 1111 1111B. 两片 32K*8RAM 的地址范围是:00 1000 0000 0000 0000B ~ 01 0111 1111 1111 1111B. 一片 16K*8 RAM 的地址范围是11 1100 0000 0000 0000B ~ 11 1111 .1111 1111 1111B.(3)处理器与存储芯片的连接如下图所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第9章/image3.png'/>处理器与存储芯片的连接图、"},{"id":"learncoder_160_20183","stem":"设对应如下程序的进程int a [100] [100] ;\t/ int [ ] [ ] a = new int [100] [100]int i = 0 ,j;\t/* 一 个整数占 2B * /while(i++<100) {j = 0; while(j++< 100) a[i][j]=l;}运行在一个页面大小为1 KB、采用LRU替换算法的请求页式系统中,进程的代码占用逻辑 空间的第0页,数据存放在连续的页面中,循环下标i和j存储在寄存器中。问:(1)存放数据需要多少个页面?(2)运行该进程,将产生多少次缺页故障?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"(1))数组a有10000个整数,占用20000B的空间,20000/1024=20页°\t(2)每一页新调入时都产生一次缺页故障,进程顺序处理数据,页面没有被重复访问。,所以 产生1+20 = 21次缺页故障°, "},{"id":"learncoder_160_20182","stem":"设某癌序包含5个虚页,其页地址流为1、2、3、4、2、1、3、5、2、5、4、1。当使用LRU法替换时,为获得最高的命中率,至少应分配给该程序几个实页?其可能的最高的命中率 为多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"空","type":"short_answer","answer":"N =1\tN =2\tHN =3\tH H\t\tN =4\tH H\tH\tH\tH\tN =5\tH\t H\tH\tH\tH\tH H为获得最高的命中率,至少应分配给该程序5个实页,最高命中率为:7/12=58.3%"},{"id":"learncoder_160_20170","stem":"将一个主存块读入Cache所花费的时间称为缺失损失(Miss Penalty)。若Cache存取 1个字的时间是1个时钟周期,缺失损失为4个时钟周期。某顺序执行的程序有1 000条单字 长指令,共访问2 000次主存数据字。已知取指令共发生100次Cache缺失,访问数据共发生 200次Cache缺失访问,则执行该程序过程中,Cache-主存的平均访问时间是( )个时钟 周期。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"Cache 命中率 H= [ (1000+2000) -(100+200)]/ (1000+2000)= 2700/3000 = 90% , Cache-主存的平均访问时间=Tc + (l-H)Tm = l + (l-90% )*4=1.4(时钟周期)。","type":"choice","options":{"A":"1","C":"1.4","D":"1.6","B":"1.2"},"answer":"C"},{"id":"learncoder_160_20167","stem":"下列关于虚拟存储器的说法,正确的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查的知识点:页面大小只能是2的正整数次幂;虚拟存储器的访问速度是接 近主存的速度,容量等于辅存的容量;TLB缺失既可以由硬件也可以由软件来处理。","type":"choice","options":{"B":"虚拟存储器的容量等于主存的容量","A":"页面大小只能是2的正整数次幂","C":"TLB缺失只能由硬件来处理","D":"虚拟存储器的访问速度等于主存的速度"},"answer":"A"},{"id":"learncoder_160_20171","stem":"虚拟存储器不能达到的目的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"任何一个存储体系/存储层次解决的共性问题就是存储系统成本高。在此基础上, 虚拟存储器还解决“编程空间受限”和“多道程序共享主存而引发的信息安全”两个问题,其中后 一个问题是通过在地址变换增加地址检查功能来解决。“访存速度慢”属于Cache,而不是虚拟 存储器解决的问题。","type":"choice","options":{"A":"存储系统成本高","C":"访存速度慢","D":"多道程序共享主存而引发的信息安全","B":"编程空间受限"},"answer":"C"},{"id":"learncoder_160_20168","stem":"在页面尺寸为4 KB的页式存储管理中,页表中的内容依次是2、5、6、8、7、11。则物理地 址32773对应的逻辑地址为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"32773=32768+5 = 1000 0000 0000 0000B +1013 = 1000 0000 0000 0101B后12位为页内地址,前4位为页号。物理页号为8,对应逻辑页号为3 =llB.则逻辑地址=11 0000 0000 0101B = 3x4K+3 = 10240+2048+5 = 12288+5 = 12293","type":"choice","options":{"A":"32773","C":"12293","B":"42773","D":"62773"},"answer":"C"},{"id":"learncoder_160_20172","stem":"下列存储保护方案中,不是针对“地址越界”访存违例旳是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"设置访问权限位是针对“访问越权”访存违例。","type":"choice","options":{"A":"界限保护","B":"键保护","C":"环保护","D":"设置访问权限位"},"answer":"D"},{"id":"learncoder_160_20169","stem":"下列关于Cache和虚拟存储器的说法,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"Cache失效与虚拟存储器失效处理方法的不同。G项Cache的速度比主存的速度大 约快10倍;而D项主存的速度比辅存的速度大约快100倍也正确。","type":"choice","options":{"C":"Cache的速度比主存的速度大约快10倍","A":"当Cache失效(即不命中)时,处理器将会切换进程,以更新Cache中的内容","B":"当虚拟存储器失效(如缺页)时,处理器将会切换进程,以更新主存中的内容","D":"主存的速度比辅存的速度大约快100倍"},"answer":"A"},{"id":"learncoder_160_20166","stem":"当缺页故障处理完毕后,处理器将(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"处理完缺页故障后,处理器将重新执行引发缺页故障的指令。","type":"choice","options":{"D":"终止执行发生缺页故障的指令所在的进程","B":"执行导致发生缺页故障的指令的下一条指令","A":"重新执行引发缺页故障的指令","C":"重头开始执行发生缺页故障的指令所在的进程"},"answer":"A"},{"id":"learncoder_160_20158","stem":"LRU替换算法所基于的考虑是()","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查LRU算法的思想。","type":"choice","options":{"A":"在最近的过去用得少的信息,在最近的将来将会用得多","B":"在最近的过去用得多的信息,在最近的将来将会用得少","C":"在最近的过去很久未使用的信息,在最近的将来将会使用","D":"在最近的过去很久未使用的信息,在最近的将来也不会使用"},"answer":"D"},{"id":"learncoder_160_20163","stem":"下列关于段页式存储管理的地址映像表的描述中,正确的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查段页式存储管理的工作原理及其地址映像表的概念。","type":"choice","options":{"B":"每个作业/进程拥有一个独立的段表和一个独立的页表","C":"每个作业/进程拥有一个独立的段表,每个段拥有一个独立的页表","D":"每个作业/进程拥有一个独立的页表,每个段拥有一个独立的段表","A":"每个作业/进程拥有一个独立的页表"},"answer":"C"},{"id":"learncoder_160_20160","stem":"下列关于页式存储管理与段式存储管理的区别的论述中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查的知识点:段式存储管理更有利于存储保护;页式存储管理的存储空间利 用率较高。在段式存储管理中指令或数据不会跨段存储;段的尺寸可大可小,而于页的尺寸是固 定的。\t","type":"choice","options":{"D":"段的尺寸要大于页的尺寸","A":"页式存储管理更有利于存储保护","C":"在或式存储管理中,指令或数据不会跨段存储","B":"段式存储管理的存储空间利用率较高"},"answer":"C"},{"id":"learncoder_160_20164","stem":"下列关于“抖动”的描述中,错误的是)( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查出现“抖动”的原因及其解决办法。","type":"choice","options":{"A":"请求式页式存储管理系统可能会岀现“抖动\"((Thrashing))现象","C":"可以通过实行“对齐存储”来消除“抖动”","D":"可以通过减少页面尺寸,来消除“抖动”","B":"出现“抖动”的原因是指令或数据跨页存储,而分配给程序的页框数偏少"},"answer":"D"},{"id":"learncoder_160_20161","stem":"页式虚拟存储器中的页表设置“脏位/修改位”的目的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查页表设置“脏位/修改位”的目的。","type":"choice","options":{"B":"减少I/O传输量","C":"防止非法访问","D":"提高可靠性","A":"表示数据有错"},"answer":"B"},{"id":"learncoder_160_20165","stem":"“缺页故障(也叫页面故障)”的原因是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"当处理器欲访问的页面对应的页表项中的“存在位”为0,即表示该页面不在内存 中,则处理器发出“缺页故障”信号。","type":"choice","options":{"B":"页面中的数据有错","A":"页面不在内存中","D":"指令或数据跨页存储","C":"调页时I/O出错"},"answer":"A"},{"id":"learncoder_160_20162","stem":"下列关于页式存储管理与段式存储管理的区别的论述中,错误的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查的知识点:分页对程序员是透明的,而分段对程序员是不透明的;段式存储 管理通过“紧凑”来消除零头,而页式存储管理中的零头是无法消除的。\t","type":"choice","options":{"A":"分页对程序员是透明的","C":"分段对程序员是不透明的","B":"段式存储管理处理零头的方法是紧凑","D":"页式存储管理处理零头的方法是交换与覆盖"},"answer":"D"},{"id":"learncoder_160_20159","stem":"能够采用“紧凑/压缩/紧缩((Compaction))\"操作来消除内存“零头(碎片)”的前提是采 用(\t)来实现逻辑地址到物理地址的变换。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查消除内存零头的“紧凑”操作的原理。\t","type":"choice","options":{"B":"段表","C":"动态重定位","D":"静态重定位","A":"页表"},"answer":"C"},{"id":"learncoder_160_20154","stem":"虚拟存储器理论上的最大容量取决于( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"虞地址和实地址是虚拟存储器的两个基本概念,虚拟存储器的最大容量取决于虚地 址长度,主存属器的最大容量取决于实地址长度。虚拟存储器的实际容量等于辅存容量,主存储器的实际容量往往小于其最大容量。","type":"choice","options":{"B":"主存容量","C":"虚地址长度","D":"实地址长度","A":"辅存容量"},"answer":"C"},{"id":"learncoder_160_20152","stem":"访问转换旁视缓冲器(快表)命中,说明(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"TLB命中,仅能说明目标数据所在的页面在主存中。目标数据最近被访问过的证据 是Cache命中。\t","type":"choice","options":{"A":"目标数据在Cache中","B":"目标数据在主存中,而且最近被访问过","D":"目标数据在主存中,但最近是否被访问过不确定","C":"目标数据在TLB中"},"answer":"D"},{"id":"learncoder_160_20153","stem":"下列关于命中组合的情况中,一次访存过程中可能发生的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查的知识点:\"TLB命中”表示目标数据所在的页面在主存中,不可能对应 “Page未命中”。所以,C和D是不可能发生的。“Page未命中”表示目标数据所在的页面不在 主存中,不可能对应“Cache命中”。所以,A是不可能发生的。","type":"choice","options":{"B":"TLB未命中,Cache未命中,Page命中","A":"TLB未命中,Cache命中,Page未命中","C":"TLB命中,Cache命中,Page未命中","D":"TLB命中,Cache未命中,Page未命中"},"answer":"B"},{"id":"learncoder_160_20157","stem":"页式存储管理系统不会岀现()","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查的知识点:抖动是页式存储管理特有的现象,因为页式存储管理中指令或' 数据可能跨页存储;页式存储管理会出现内零头,段式存储管理会出现外零头;任何一种存储管 理都面临着越界访问的危险。\t","type":"choice","options":{"B":"内零头(内碎片)","A":"抖动/颠簸","C":"外零头(外碎片)","D":"越界访问"},"answer":"C"},{"id":"learncoder_160_20155","stem":"下面关于虚拟存储器的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"实现虚拟存储器同时需要软件(操作系统)和硬件(核心是处理器内部的TLB)的 支持。","type":"choice","options":{"A":"在虚拟存储器中,各个进程/作业占用的存储空间犬小是不相同的","D":"虚拟存储器的实际容量等于辅助存储器的容量","B":"虚拟存储器的引入是为了扩大程序所能够访问的存储空间","C":"实现虚拟存储器不需要硬件的支持\t-"},"answer":"B"},{"id":"learncoder_160_20156","stem":"某分页系统的逻辑地址长18位,其中高8位为页号,低10位为页内地址。则该分页系统的页面长度为( )字节。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查分页系统页面长度与页内地址位数的关系。","type":"choice","options":{"B":"512","A":"1024","C":"256","D":"128"},"answer":"A"},{"id":"learncoder_160_20147","stem":"Cache采用2路组相联映射,共有16个槽(第0槽到第15槽),每个主存块为32字节,主存按字节编址。请问主存第1 022号单元所在的主存块可以放到第(\t)槽中。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"2路组相连的Cache有16个槽,则表示分为8组(组号3位),每组两槽(组内槽号1 位)。每槽装一个主存块,块大小为32字节,则块内地址5位。Cache地址共9位。第1022号单 元的地址11111 11110B中,后5位为块内地址,倒数第7 ~9位为组号,倒数第6位为组内槽号。 根据组相联映像的规则,第1022号单元所在的主存块映射到Cache中,组号和块内地址不变,则 其Cache地址为111X 11110,所以,所在槽号只能是14或15。\t","type":"choice","options":{"D":"10","A":"15","C":"12","B":"13"},"answer":"A"},{"id":"learncoder_160_20144","stem":"为了有效发挥Cache的作用,设计程序时应尽可能(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查影响发挥Cache作用的因素。","type":"choice","options":{"B":"具有空间局部性或时间局部性","D":"程序大小不超过实际内存容量","A":"减少访存的次数","C":"减少I/O的次数"},"answer":"B"},{"id":"learncoder_160_20148","stem":"下列说法中,错误的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"引入虚拟存储器是为了给用户提供一个容量大(等于辅存)、速度快(接近主存)、价 格便宜(大大便宜于主存,仅比辅存略高)的存储器,即解决用户编程空间小的问题。","type":"choice","options":{"A":"引入多模块交叉存储器是为了主存带宽不足问题","D":"虚拟存储器是解决对内存的访问冲突问题","C":"引入Cache提高了访问内存的速度,解决了内存速度与处理器速度的不匹配问题","B":"引入双端口存储器是为了解决对同一个存储部件要求同时进行读写的问题"},"answer":"D"},{"id":"learncoder_160_20145","stem":"下列因素中,与Cache的命中率无关的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查影响Cache的命中率的因素。","type":"choice","options":{"B":"Cache 的容量","A":"构成Cache的存储芯片的存取周期","D":"Cache替换算法","C":"主存和Cache间交换的数据块的大小"},"answer":"A"},{"id":"learncoder_160_20149","stem":"在支持虚拟存储器的计算机中,指令中给出的访问存储器的地址是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查物理地址、实际地址、有效地址与虚拟地址的概念及区别。","type":"choice","options":{"C":"主存地址","D":"虚拟地址","B":"实际地址","A":"物理地址"},"answer":"D"},{"id":"learncoder_160_20146","stem":"主存地址位数为32位,按字节编址°容量为512 KB的采Cache用直接映射方式则“标志”字段占(\t)位。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"直接映射方式下,主存地址减去Cache地址,剩余的前面部分就是“标志”字段。现 在主存地址位数为32位,容量为512 KB的Cache地址位数为19位,则“标志”字段= 32-19 = 13 位。","type":"choice","options":{"B":"12","A":"11","C":"13","D":"14"},"answer":"C"},{"id":"learncoder_160_20150","stem":"为了充分发挥虚拟存储器的效用,应将程序设计成具有(\t)特性。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查虚拟存储器的工作原理。\t","type":"choice","options":{"C":"对存储器的访问具有局部性","A":"不应含有过多I/O操作","D":"指令间相关不应过多","B":"程序大小不应超过实际内存容量"},"answer":"C"},{"id":"learncoder_160_20151","stem":"实现虚拟存储器的关键是虚拟地址向实际地址的快速变换。为此,在处理器内部设置一个特殊的Cache,来记录最近使用页的页表项,以快速完成地址转换。不同文献对这个特殊的 Cache有不同的称呼。下列选项中,不属于这些称呼的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"不同文献对变换旁视缓冲器TLB有不同的称呼。\t","type":"choice","options":{"D":"慢表","A":"转换旁视缓冲器(TLB)","B":"转换后援缓冲器","C":"快表"},"answer":"D"},{"id":"learncoder_160_20141","stem":"一个带有Cache的计算机系统中,Cache容量为512 KB,主存容量为256 MB,则Cache- 主存层次的等效容量为(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查Cache-主存层次等效容量的概念。","type":"choice","options":{"A":"512 KB","B":"256 MB","D":"256 MB-512 KB","C":"256 MB+512 KB"},"answer":"B"},{"id":"learncoder_160_20138","stem":"下列关于Cache写策略的论述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"采用全写法时,主存-Cache数据始终一致,被替换的Cache行不必写回主存,所 以不需要为Cache行设置“脏位/修改位”。对安全性、可靠性要求高,不允许有主存-Cache数 据不一致现象发生的计算机系统(例如多处理器系统),它的Cache必须采用“写直达/全 写”法。\t","type":"choice","options":{"A":"全写法(写直达法)充分保证Cache^与主存的一致性","D":"多处理器系统通常采用写回法","C":"写回法(回写法)降低了主存带宽需求(即减少了 Cache与主存之间的通信量)","B":"采用全写法时,不需要为Cache行设置“脏位/修改位\""},"answer":"D"},{"id":"learncoder_160_20142","stem":"下例关于Cache的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查的知识点:由于主存块是在不命中时被装入Cache,所以Cache命中率不可 以达到100% ;命中率比Cache本身速度对Cache的等效访问速度影响更大。\t","type":"choice","options":{"C":"Cache本身的速度越快,则Cache存储器的等效访问速度就越快","D":"Cache的容量与主存的容量差别越大越好","B":"如果选用最优替换算法,则Cache的命中率可以达到100%","A":"采用直接映像时,Cache无需考虑替换问题"},"answer":"A"},{"id":"learncoder_160_20139","stem":"下列关于Cache写策略的论述中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"TLB命中、写回策略的Cache-命中时,执行Store指令不访问主存。写回法不保证 Cache与主存的一致性,所以要为Cache行设置“脏位/修改位”。发生替换时,需要将“脏位/修 改位”为1的Cache行写回主存。釆用全写法,CPI的增量等于:CPI访存周期TM*写主存指令 (如Store)的使用频度。\t\t","type":"choice","options":{"C":"采用全写法,CPI会增大","D":"面向包含大量写操作的数据密集型应用的单处理器系统通常采用全写法","B":"采用回写法时,无论被替换的Cache行是否“被写过”,都要将其写回主存","A":"带TLB和写回策略.Cache的CPU执行Store指令时,可能不访问主存"},"answer":"C"},{"id":"learncoder_160_20143","stem":"下列关于Cache的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查的知识点:读操作无需考虑Cache与主存的一致性问题。","type":"choice","options":{"C":"分离Cache(也称皓佛结构)是存放指令的Cache与存放数据Cache分开设置","A":"Cache对程序员是透明的","D":"读操作也要考虑Cache与主存的一致性问题","B":"Cache行/块/槽的大小为用相同体内地址访问孔体交叉存储器一次读出的数据量"},"answer":"D"},{"id":"learncoder_160_20140","stem":"关于Cache的更新,下列说法正确的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查的知识点:按写分配法或不按写分配法在写失效(不命中)时运用。","type":"choice","options":{"D":"读操作时,写直达法或写回法在命中时运用","A":"写操作时,写回法和按写分配法在命中时运用","C":"读操作时,写直达法和按写分配法在失效时运用","B":"写操作时,按写分配法或不按写分配法在失效时运用"},"answer":"B"},{"id":"learncoder_160_20131","stem":"双端口存储器在(\t)发生访问冲突。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查双端口存储器的特性","type":"choice","options":{"D":"任何情况下都不","C":"同时访问左端口与右端口的地址码相同的情况下","B":"同时访问左端口与右端口的地址码不同的情况下","A":"左端口与右端口同时被访问的情况下会"},"answer":"C"},{"id":"learncoder_160_20132","stem":"n体(模 n )交叉编址存储器在(\t)时,其存取带宽是单体存储器的n倍。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查\"体(模Q交叉编址存储器的特性。","type":"choice","options":{"D":"任何情况下都不能","B":"任何情况下都能","C":"连续访存的卩个地址是针对不同的存储模块","A":"连续访存的\"个地址是针对同一个存储模块"},"answer":"C"},{"id":"learncoder_160_20130","stem":"下列关于存储器的论述中,不正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查:半导体存储器的特性,双端口存储器的基本组成。","type":"choice","options":{"C":"擦除EPROM的方法是用紫外线照射","A":"半导体存储器都具有易失性,掉电后信息丢失","B":"常用的PROM是通过将内部的熔丝烧断来编程,出厂时存储内容为全“0”","D":"双端口存储器具有两套“ MAR+MDR+R/W+CE”"},"answer":"A"},{"id":"learncoder_160_20135","stem":"下列关于Cache地址映像算”法的论述中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查Cache地址映像算法的分类及其性能评价。","type":"choice","options":{"A":"全相联映像、组相联映像和直接映像都实际应用于Cache地址映像","B":"全相联映像发生块冲突的概率最低,变换速度最快,但是成本最高","C":"直接映像成本最低,但是变换速度最慢,发生块冲突的概率最高","D":"多路组相联映像是全相联映像与直接映像的折中,性能介于两者之间。"},"answer":"D"},{"id":"learncoder_160_20136","stem":"下列关于Cache中主存块的替换算法论述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查Cache中主存块替换算法的分类.实现及其性能评价。","type":"choice","options":{"C":"FIFO算法和LRU算法都属于堆栈(型)算法","B":"LRU算法中,每个Cache行设置一个计数器,选择计数值最高的Cache行替换","A":"FIFO算法、LRU算法和Random算法实际都应用于Cache中主存块的替换","D":"Random算法的实现成本低,而且性能接近LRU算法"},"answer":"C"},{"id":"learncoder_160_20133","stem":"设体交叉编址(低位交叉)存储器中每个体的存储字长等于数据总线宽度,每个体存 取一个字的存取周期为T,总线传输周期为t,T与t的关系以及读取地址连续的n个字需要的时 间分别是)( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查兀体交叉编址(低位交叉)存储器的性能分析。","type":"choice","options":{"B":"T = (n-1)) xt,T+nxt","D":"T=nxt, T+(( n-1)) x t","C":"T=nxt,T+nxt","A":"T=t,T+nxt"},"answer":"D"},{"id":"learncoder_160_20137","stem":"下列Cache替换算法中,利用了存储器访问的局部性原理的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查Cache替换算法的特性。","type":"choice","options":{"B":"Random算法","D":"OPT算法","C":"FIFO算法","A":"LRU算法"},"answer":"A"},{"id":"learncoder_160_20134","stem":"某程序访问一个4体交叉存储器的地址序列为:0、9、13、10、6、8、5、3。其中会发生“体冲突(也叫存储器碰头)”的地址是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查访问卩体交叉编址存储器时可能出现的“体冲突”现象。","type":"choice","options":{"B":"9 与 6与3","C":"9 与 13,10 与 6","A":"0 与 10,9 与10","D":"10 与 6 与 8"},"answer":"C"},{"id":"learncoder_160_20125","stem":"为了提高访问主存中信息的速度,要求“信息按整数边界存储(对齐方式存储)”,其含义是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查“信息按整数边界存储”的概念","type":"choice","options":{"D":"信息单元的存储地址必须是整数","A":"信息的字节长度必须是整薮","B":"信息单元的存储地址是其字节长度的整数倍","C":"信息单元的字节长度必须是整数"},"answer":"B"},{"id":"learncoder_160_20126","stem":"下列关于存储器的论述中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查的知识点:与SRAM相比,DRAM便宜,功耗较低,但需要刷新;EPROM采 用浮栅雪崩注入型MOS管构成,岀厂时存储内容为全“1”;双极型RAM存取速度-快,但集成 度低。\t","type":"choice","options":{"A":"与SRAM相比;DRAM由于需要刷新,所以功耗较高","D":"双极型RAM不仅存取速度快,而且集成度高","B":"常用的EPROM采用浮栅雪崩注入型M'OS管构成,出厂时存储内容为全“0”","C":"SRAM依靠基于MOS管的双稳态电路来存储信息,所以不需要刷新"},"answer":"C"},{"id":"learncoder_160_20123","stem":"在“小端次序”的机器上,四字节数据12345678H按字节地址由小到大依次存 为( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查小端次序的基本概念。\t","type":"choice","options":{"B":"56781234H","A":"12345678H","C":"34127856H","D":"78563412H"},"answer":"D"},{"id":"learncoder_160_20127","stem":"下列关于SRAM和DRAM的论述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"DRAM没有CS引脚,存储器扩展时用RAS代替CS作为片选。","type":"choice","options":{"D":"SRAM和DRAM芯片都有片选信号线CS","C":"控制线RAS和CAS是DRAM特有的,分别控制从地社线上读行地址和列地址","B":"由于容量大,DRAM采用行列地址复用技术,地址引脚数量仅为地址宽度的一半","A":"SRAM通常用于实现Cache,DRAM用于实现主存"},"answer":"D"},{"id":"learncoder_160_20124","stem":"某类型为float的C程序变量x = -1.5,存放于小端方式、按字节编址的主存中,地址为0000 1000Ho 则地址 0000 1000H 和 0000 1003H 中内容分别是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"x = -1.5 = l 0111 1111 1000000 00000000 00000000B(IEEE754)\t=1011 1111 1100 0000 0000 0000 0000 0000B=B F C O 0\t0\t0\t0 H 在小端次序的主存中,变量占据0000 1000H -0000 1003H共4个字节单元,最低单元(字地 址所在单元)存放最低字节00H,最高单元存放最高字节BFH。","type":"choice","options":{"D":"BOH 和 OFH","B":"BFH 和 00H","A":"00H 和 BFH","C":"0BH 和 OFH"},"answer":"A"},{"id":"learncoder_160_20128","stem":"某计算机中已配有00000H ~07FFFH的ROM区,地址线为20位,现在再用16Kx8位的RAM芯片构成剩下的RAM区08000H ~FFFFFH,则需要这样的RAM芯片(\t)片。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"RAM 区大小为 31x32KBo (((31*32KB)) ÷16KB = 62o","type":"choice","options":{"D":"64","C":"63","B":"62","A":"61"},"answer":"B"},{"id":"learncoder_160_20129","stem":"组成4M X 8位的主存,若选用1M X 4位的存储芯片,需(\t)片,该主存的地址总线至少是(\t)位。其中,(\t)位用于片选,(\t)位用于片内寻址。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查存储器扩展的基本概念与方法。","type":"choice","options":{"D":"16,23,4,18","C":"8,22,2,20","B":"16,21,4,18","A":"8,20,2,20"},"answer":"C"},{"id":"learncoder_160_20122","stem":"下列关于多字节数据存储次序的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查的知识点:小端次序与犬端次序;一台机器只能选择一种存储次序。","type":"choice","options":{"D":"汇编语言程序是在采用不同存储次序的机器上不具有可移植性","B":"大端次序是指数据地址对应的存储单元存放的是数据的最高字节","C":"在同一台机器上,不同的汇编语言程序可以选择使用不同的存储次序","A":"小端次序是指数据地址对应的存储单元存放的是数据的最低字节"},"answer":"C"},{"id":"learncoder_160_20119","stem":"下列关于相联存储器的说法中,错误的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查相联存储器的基本概念与组成原理。\t","type":"choice","options":{"C":"相联存储器结构简单,价格便宜.","D":"在存储单元数目不变的情况下,存储字长变长,相联存储器的访问速度下降","A":"相联存储器指的是按内容访问的存储器","B":"在实现技术相同的情况下,容量较小的相联存储器,速度较快"},"answer":"C"},{"id":"learncoder_160_20120","stem":"下列关于DRAM刷新的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查DRAM刷新的基本概念。","type":"choice","options":{"D":"刷新期间不允许访存,这段时间称为“访存死区(也叫死时间)”","B":"刷新是通过对、存储单元进行“读但不输出数据”的操作来实现","C":"由于DRAM内部设有专门的刷新电路,所以访存期间允许进行刷新","A":"刷新是指对DRAM中的存储电容重新充电"},"answer":"C"},{"id":"learncoder_160_20121","stem":"下列关于DRAM刷新的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查DRAM刷新的基本概念以及不同刷新方式的特点。","type":"choice","options":{"A":"刷新操作按行进行,一次刷新一行中的全部存储单元","D":"分散刷新方式同样存在“死时间”","B":"刷新所需的行地址是由DRAM内部的刷新计数器(行地址生成器)给出","C":"集中刷新的“死时间”要大于异步刷新的“死时间”"},"answer":"D"},{"id":"learncoder_160_20118","stem":"下列关于存储系统层次结构的说法申,错误的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查的知识点:存储系统层次结构的基本概念。Cache-主存层次对所有程序员 都是透明的。主存-辅存层次只对应用程序员透明,对系统程序员不透明。","type":"choice","options":{"A":"存储层次结构中,越靠近CPU,存储器的速度越快,但价格越贵,容量越小","D":"存储系统层次结构对程序员都是透明的","B":"Cache-主存层次的设置目的是为了提高主存的等效访问速度","C":"主存-辅存层次设置的目的是为了提高主存的等效存储容量"},"answer":"D"},{"id":"learncoder_160_20115","stem":"下列存储器中,具有易失(挥发)性的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查否同存储器的易失性。","type":"choice","options":{"A":"E2PROM","D":"CDROM(光盘)","B":"Cache","C":"Flash Memory(闪存)"},"answer":"B"},{"id":"learncoder_160_20116","stem":"存储器的存取周期亿与存储器的存取时间Ta的关系是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查存储器存取周期化与存取时间笃的概念及其关系。化是存储器进行连续 的读或写操作允许的最短时间间隔,Ta是存储器进.行:次读或写操作所需的平均时同。","type":"choice","options":{"C":"Tc<Ta","A":"Tc>Ta","D":"Tc与 Ta的关系不确定","B":"Tc = Ta"},"answer":"A"},{"id":"learncoder_160_20117","stem":"某计算机系统的物理地址空间大小为1 GB,按字节编址,每次读写操作最多可以存取64位。则存储器地址寄存器(MAR)和存储器数据寄存器(MDR)的位数分别为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"log2lG = 30,所以MAR有30位。由于一次最多存取64位,则用来作为读/写数据缓 冲的MDR的位数应该有64位。","type":"choice","options":{"D":"24、64","A":"30、8","B":"30、64","C":"24、8"},"answer":"B"},{"id":"learncoder_160_20114","stem":"下列存储层次结构中,存取速度最快的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器层次结构","analysis":"此题考查计算机系统中祥储器的分类及其特点。\t","type":"choice","options":{"A":"Cache","C":"内存","B":"寄存器","D":"光盘"},"answer":"B"},{"id":"learncoder_159_23871","stem":"某机器采用一地址格式的指令系统,允许直接和间接寻址(机器按字寻址)。机器配 有如下硬件:ACC、MAR、MDR、PC、X、MQ、IR以及变址寄存器Rx和基址寄存器Rb, 均为16位。1)若采用单字长指令,共能完成105种操作,则指令可直接寻址的范围是多少?一次间 接寻址的范围又是多少?2)若采用双字长指令,操作码位数及寻址方式不变,则指令可直接寻址的范围又是多少? 画出其指令格式并说明各字段的含义。3)若存储字长不变,可采用什么方法访问容量为8MB的主存?需增设哪些硬件?","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"1首先,由于MDR为16位,因此可以得出存储字长为16位。又由于采用了单字长指 令,因此指令字长为16位。根据题目知道需要实现105种操作,所以操作码需要7位。从题 意可以看出,需要实现直接寻址、间接寻址、变址寻址、基址寻址这4种寻址方式,故取两 位寻址特征位,最后得指令格式为<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image23.png'/>其中,操作码占7位,可完成105种操作;寻址方式I占2位,可实现4种寻址方式;形式 地址A占7位,故直接寻址的范围为2—128。由于存储字长为16位,因此一次间接寻址的 寻址范围为216=64Ko可能疑问点:为什么答案给出4种寻址方式?为何不包括相对寻址、先变址后基址 等这些寻址方式呢?解析:首先有变址寄存器和基址寄存器,就肯定是有变址寻址和基址寻址的,但PC不 一样,因为不管要不要相对寻址都是要PC的,所以题干没说有相对寻址就不能乱加,这个也算是做题的一个规则。2)双字长指令格式如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image24.png'/>形式地址A和E共同构成新的形式地址,故形式地址占23位,所以可直接寻址的范围 为 223=8M。3)容量为8MB,即8MX8位的存储器。由于现在的存储字长(或者因为MDR为16位) 为16位,因此可以将8MB写成4Mx 16位。从上面问题可以知道,双字长指令可以访问8MB 的容量,肯定可以满足要求,是一种不错的办法。还有一种方法就是将变址寄存器砥和基址 寄存器Rb取22位,那么就可以采用变址寻址和基址寻址来访问到4M的存储空间。思考:如果此题不加“若存储字长不变”这个限制条件,那么还有什么方式可以做到?如果此题没有该限制,则可以采用间接寻址,因为间接寻址的寻址范围取决于存储字长。 只要改变存储字长,就可改变间接寻址的寻址范围,从而满足题意。"},{"id":"learncoder_159_23874","stem":"在表4-5中的第2列、第3列填写简要文字对CISC和RISC的主要特征进行对比。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image5.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"填写后的表4-5如下所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image27.png'/>"},{"id":"learncoder_159_23870","stem":"某机器字长32位,CPU内有32个32位的通用寄存器,设计一种能容纳64种操作 的指令系统,设指令字长等于机器字长。1)如果主存可直接或间接寻址,采用寄存器存储器型指令,能直接寻址的最大存储空 间是多少?试画出指令格式。2)在1)的基础上,如果采用通用寄存器作为基址寄存器,则上述寄存器存储器型指令的指令格式又有何特点?画出指令格式并指出这类指令可访问多大的存储空间。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"1)根据题意,可设计出如下的指令格式:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image21.png'/>其中,操作码占6位,可容纳64种操作;I占1位,表示直接、间接寻址(1=0表示间接寻 址;1=1表示直接寻址);由于有32个寄存器,因此R需要占5位;形式地址A占剩下的位 数,即 32-6-1-5=20位。因此,直接寻址的最大存储空间为220。2)如果还需要增加基址寻址,且基址寻址采用通用寄存器,那么必须要增加一个字段来 表示基址寄存器到底使用3,个中的哪一个通用寄存器,故指令格式变为<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image22.png'/>其中,操作码占6位,可容纳64种操作;I占2位,表示直接、间接、基址(1=00表示间接 寻址;1=01表示直接寻址;1=10表示基址寻址);由于有32个寄存器,因此R需要占5位; 同理,皿需要5位;形式地址A占剩下的位数,即32-6-2-5-5=14位。因为通用寄存器为32位,用它做基址寄存器后,可得32位的有效地址,所以寻址范围 可达到232"},{"id":"learncoder_159_23877","stem":" (2017年统考真题)在按字节编址的计算机M上,第2章习题70中fl的部分源程 序(阴影部分)与对应的机器级代码(包括指令的虚拟地址)如下:其中,机器级代码包括行号、虚拟地址、机器指令和汇编指令。请回答下列问题(1)计算机M是RISC还是CISC,为什么?(2)fl的机器指令代码共占多少字节,要求给出计算过程。(3)第20条指令cmp通过i减n-l实现对i和nT的比较。执行fl (0)过程中,当i=0 时,cmp指令执行后,进/借位标志CF的内容是什么?要求给出计算过程。(4)第23条指令shl通过左移操作实现了 power*2运算,在f2中能否也用shl指令实现 power*2运算?为什么?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image12.png'/>参考答案及解析","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"(1)M 为 CISC。M的指令长短不一,不符合RISC指令系统特点。(2)fl的机器代码占96B。因为fl的第一条指令push ebp所在的虚拟地址为0040 1020H,最后一条指令ret所在的 虚拟地址为0040 107FH,所以,fl的机器代码长度为0040 107FH-0040 1020H=60H=96B。(3)CF=lcmp指令实现i与n-1的比较功能,进行的是减法运算。在执行fl(0)过程中,n=0,当i=0 时,1=0000 0000H,并且H-1=FFFFFFFFH。因此当执行第20条指令时,在补码加/减运算中 执行 “0 减 FFFF FFFFH” 的操作,即 0000 0000H+0000 0000HH=0000 0001H,此时进位输 出C=0,减法运算的借位标志CF=C © 1=1 。(4)\tf2中不能用shl指令实现power*2。因为shl指令用来将一个整数的所有有效数位作为一个整体左移,而f2中的变量power 是Hoat型,其机器数中不包含最高有效数位,但包含了阶码部分,将其作为一个整体左移时 并不能实现“乘2”的功能。因而f2中不能用shl指令实现power*2。浮点数运算比整型运算 要复杂,耗时也较长。"},{"id":"learncoder_159_23873","stem":"某16位机器所使用的指令格式和寻址方式如图4-13所示,该机器有两个20位基址 寄存器,4个16位变址寄存器,16个16位通用寄存器。指令汇编格式中的S (源)、D (目 标)都是通用寄存器,M是主存的一个单元,3种指令的操作码分别是MOV(OP)=(A)H、 STA(OP)=(1B)H、LDA(OP)=(3C)Ho其中,MOV是传送指令,SIA为写数指令,LDA为读 数指令。1)试分析3种指令的指令格式和寻址方式特点。2)处理器完成哪一种操作所花时间最短?完成哪一种操作所花时间最长?第2种指令的 执行时间有时会等于第3种指令的执行时间吗?3)下列情况中,每个十六进制指令字分别代表什么操作?简述此指令的作用。①(F0F1)H/(3CD2)H\t②(2856)H","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"1)第一种指令是单字长二地址指令,属于RR型。第二种指令是双字长二地址指令,属于RS型,其中S釆用基址寻址或变址寻址,R由 源寄存器决定。第三种也是双字长二地址指令,属于RS型,其中R由目标寄存器决定,S由20位地址 (直接寻址)决定。2)处理器完成第一种指令所花的时间最短,因为是RR型指令,不需要访问存储器。第 二种指令所花的时间最长,因为是RS型指令,需要访问存储器,同时要进行寻址方式的变 换运算(基址或变址),这也要时间。第二种指令的执行时间不会等于第三种指令,因为第三 种指令虽然也访问存储器,但是节省了求有效地址的时间开销。3)根据已知条件:MOV(OP)=001010; STA(OP)=011011; LDA(OP)=UUOO,将指令的 十六进制格式转换成二进制代码且比较后可知:①\t由于(F0F1)h/(3CD2)h前面六位为111100,因此该指令代表LDA指令。完整的二进制 代码为111100 00 1111 0001 0011 1100 1101 0010,前面111100代表操作码,00代表横线 的内容,1111代表目标寄存器,含义是把主存(13CD2)h地址单元的内容送至15号寄存器。②\t由于(2856辰前面6位为001010,因此该指令代表MOV指令。完整的二进制代码为 001010 00 0101 0110,其中后面的0101和0110分别代表目标寄存器和源寄存器,含义是把6 号源寄存器的内容传送至5号目标寄存器。"},{"id":"learncoder_159_23876","stem":"(2013年统考真题)某计算机采用16位定长 指令字格式,其CPU中有一个标志寄存器,其中包含 进位/借位标志CF、零标志ZF和符号标志NFo假定 为该机设计了条件转移指令,其格式如图4.15所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image9.png'/>其中,00000为操作码OP;C、Z和N分别为CF、ZF和NF的对应检测位,某检测位 为1时表示需检测对应标志,需检测的标志位中只要有一个为1就转移,否则不转移,例如, 若Ol, Z=0, N=l,则需检测CF和NF的值,当CF=1或NF=1时发生转移;OFFSET是相 对偏移量,用补码表示。转移执行时,转移目标地址为(PC)+2+2XOFFSET;顺序执行时,下条指令地址为(PC)+2。请回答下列问题。1)该计算机存储器按字节编址还是按字编址?该条件转移指令向后(反向)最多可跳转多少条指令。2)某条件转移指令的地址为200CH,指令内容 如图4-16所示,若该指令执行时CF=O, ZF=O, NF=1, 则该指令执行后PC的值是多少?若该指令执行时CF=1, ZF=0, NF=0,则该指令执行后PC的值又是多少?请给出计算过程。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image10.png'/>3)实现“无符号数比较小于等于时转移”功能的指令中,C、Z和N应各是什么?4)图4.17是该指令对应的数据通路示意图,要求给出图4.17中部件①〜③的名称或功 能说明。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image11.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"1)因为指令字长为16位,且下条指令地址为(PC) +2,故编址单位是字节。 偏移OFFSET为8位补码,范围为-128〜127,将-128代入转移目标地址计算公式,可以得 到(PC) +254= (PC) +127x2,故该条件转移指令向后(反向)最多可跳转127条指令。2)指令中C=0, Z=l, N=l,故应根据ZF和NF的值来判断是否转移。当CF=0, ZF=0, NF=1时,需转移。已知指令中偏移量为1110 0011B=E3H,符号扩展后为FF^3H,左移一位 (乘2)后为FFC6H,故PC的值(即转移目标地址)为200CH+2+FFC6H=lFD4Ho当CF=1, ZF=0, NF=0 时不转移。FC 的值为:200CH+2=200EHo3)指令中的C、Z和N应分别设置为C=Z=1, N=0 (参考常见寻址方式最后的补充知识 点)。4)部件⑪ 指令寄存器(用于存放当前指令);部件②:移位寄存器(用于左移一位); 部件③:加法器(地址相加)。"},{"id":"learncoder_159_23875","stem":"(2010年统考真题)某计算机字节长为16位,主存地址空间大小为128KB,按字编址。釆用单字长指令格式,指令各字段定义如图4.14所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image7.png'/>转移指令采用相对寻址方式,相对偏移用补码表示,寻址方式的定义见表4.6。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image8.png'/>回答下列问题:1)该指令系统最多可有多少指令?该计算机最多有多少个通用寄存器?存储地址寄存器 (MAR)和存储器数据寄存器(MDR)至少各需要多少位?2)转移指令的目标地址范围是多少?3)若操作码0010B表示加法操作(助记符为add),寄存器R4和R5的编号分别为100B 和101B,R4的内容为1234H,R5的内容为5678H,地址1234H中的内容为5678H,地址5678H中的内容为1234H,则汇编语句“add(R4),(R5)+”(逗号前为源操作数,逗号后为目的操作数) 对应的机器码是什么(用十六进制表示)?该指令执行后,哪些寄存器和存储单元中的内容 会改变?改变后的内容是什么?","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"1)指令操作码占4位,则该指令系统最多可以有24=16条指令。由于指令操作数占6位,其中3位指示寻址方式,寄存器编号占3位,因此该计算机最多可以有23=8个通用寄存器。由于计算机字长为16位,因此存储器数据寄存器(MDR)至少为16位。主存空间为128KB,按字(16位)编址,寻址范围为0〜64K,存储器地址寄存器(MAR) 需 16 位(216=64K)提醒:题目说的是定长指令格式,因此不要想得太复杂了。不少考生有答15的,留一条 进行扩充,也有答15+63+64的(扩展操作码)。2)寄存器为16位,指令中可寻址范围至少可达0〜2\"-1。主存地址空间为216=64K,寻 址范围也应该大于或等于64K。因此,转移指令的目标地址范围是0〜216 -1。提醒:求转移地址范围时不少考生答题不是很规范,有写正负的,也有以字节为单位的。3)\t汇编语句“add(R4), R5)+”对应的机器码见表4-8。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image28.png'/>对应的机器码写成十六进制为0010 0011 0001 0101B=2315H;该指令的功能是将R4内容 所指存储器单元的内容(源)与R5内容所指存储器单元(目标)的内容相加后,写到R5内 容所指的存储器单元。提醒:记住是源传到目标,该题的源是R4,目标是R5。R4的内容:1234H, R4内容所指存储器单元内容:5678H。R5的内容:5678H, R5内容所指存储器单元内容:1234H。两个存储器单元内容相加:5678H+1234H=68ACHo目标寄存器R5自加:5678H+l=5679Ho执行后,目标寄存器R5和存储单元5678H的内容会改变。执行后R5的内容从5678H 变为5679Ho存储单元5678H中的内容从1234H变为68ACH。"},{"id":"learncoder_159_23872","stem":"设某机器共能完成120种操作,CPU共有8个通用寄存器,且寄存器都为12位。 主存容量为16K字(机器采用按字寻址),采用寄存器存储器型指令。1)欲使指令可直接访问主存的任意地址,指令字长应取多少位?2)若在上述设计的指令字中设置一寻址特征位X,且X=0表示某个寄存器作为基址寄 存器,试画出指令格式。试问采用基址寻址可否访问主存的任意单元?为什么?如不能,提 出一种方案,使得指令可访问主存的任意位置。3)\t若存储字长等于指令字长,且主存容量扩大到64K字,在不改变硬件结构的前提下, 可采用什么方法使得指令可访问存储器的任意位置。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"1)首先,操作码可以确定为7位;8个通用寄存器需要3位来表示;访问16K字的主存 也需要14位,故指令字长需要7+3+14=24位,指令格式如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image25.png'/>注意:题目没有提到寻址方式,就不要画蛇添足。由于这里采用的是寄存器存储器型指 令,因此指令字中必须给出寄存器的编号。2)由于增加了一位寻址特征位,且基址寄存器使用了通用寄存器,因此除了加一位寻址 方式X,还得空一个字段(基址寄存器编号Ri)来表示使用哪一个通用寄存器作为基址寄存 器,故指令格式为<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image26.png'/>另外,由于覆盖主存的16K字需要14位的地址,而寄存器只有12位,因此釆用基址寻 址不可以访问主存的任意单元,但可以将通用寄存器的内容向左移动两位,低位补0,这样就 可以形成14位的基地址,然后与形式地址相加,得到的有效地址就可以访问16K字存储器 的任意单元。可能疑问点:寄存器既然是12位的,那么为什么可以向左移两位?这样不是溢出了吗?解析:这个其实也不要深究,知道概念就行,至于硬件怎么实现不需要知道。寄存器一 般分为基本寄存器和移位寄存器。基本寄存器就是前面一直说的那些寄存器,是用于存储一 组二进制代码的电路,而移位寄存器除了具有存储代码的功能以外,还具有移位功能。所谓 移位功能,是指寄存器里存储的代码能在移位脉冲的作用下依次左移或右移。它们被广泛地 用于各类数字系统和数字计算机中。3)首先,由于不能改变硬件结构,因此把寄存器的位数加长是不可行的。其次,因为指令字长为24位,而存储字长等于指令字长,所以恰好使用一次间接寻址就能达到16M字的 寻址范围,完全可以满足题目所要求的寻址范围,而且还超额完成任务。注意:考生千万要看清题意,不要只记住几种扩大寻址范围的方法。如果考试不仔细看题目给出的条件,直接套用,贝U容易出错。这种题型要重点研究!"},{"id":"learncoder_159_23863","stem":"\t(1)指令中一般含有哪些字段?分别有什么作用?如何确定这些字段的位数?(2)某机器字长、指令字长和存储字长均为16位,指令系统共能完成50种操作,采用相 对寻址、间接寻址、直接寻址。试问:①指令格式如何确定?各种寻址方式的有效地址如何形成?②在①中设计的指令格式,能否增加其他寻址方式?试说明理由。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"32.","type":"short_answer","answer":"1)指令字中一般有3种字段:操作码字段、寻址特征字段和地址码字段。操作码字段指 出机器完成某种操作(加、减、乘、除等),其位数取决于指令系统有多少种操作类型;寻址 特征字段指出该指令以何种方式寻找操作数的有效地址,其位数取决于寻址方式的种类;地 址码字段和寻址特征字段共同指出操作数或指令的有效地址,其位数与寻址范围有关。2)首先指令字由操作码字段、寻址特征字段和地址码字段组成。由于此指令系统能完成 50种操作,因此操作码需要6位(25<50<26)o由于此机器采用了相对寻址、间接寻址和直接 寻址3种寻址方式,因此需要两位来确定寻址方式,剩下8位(16-6-2=8)为指令的地址字 段,故指令格式为<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image15.png'/>寻址方式位可以这样来定义:当寻址方式位为00时,可作为直接寻址,EA=Ao当寻址方式位为01时,可作为相对寻址,EA=(PC)+A。当寻址方式位为10时,可作为间接寻址,EA=(A)由于上述指令格式中寻址方式位为11时没有使用,因此可以增加一种寻址方式。"},{"id":"learncoder_159_23862","stem":"(2013年统考真题)假设变址寄存器R的内容为1000H,指令中的形式地址为2000H; 地址1000H中的内容为2000H,地址2000H中的内容为3000H,地址3000H中的内容为4000H, 则变址寻址方式下访问到的操作数是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"变址寻址的有效地址是变址寄存器的内容与形式地址的内容相加,即3000Ho 而题干提到,地址3000H中的内容为4000H,所以变址寻址方式下访问到的操作数是4OOOHo简答题","type":"choice","options":{"B":"2000H","C":"3000H","A":"1000H","D":"4000H"},"answer":"D"},{"id":"learncoder_159_23865","stem":"设存储字长和指令字长均为24位,若指令系统可完成108种操作,且具有直接、一次间接寻址、多次间接寻址、变址、基址、相对和立即这7种寻址方式,则可在保证最大范 围内直接寻址的前提下,指令字中操作码占几位?寻址特征位占几位?可直接寻址的范围是 多少? 一次间接寻址的范围是多少?多次间接寻址的范围又是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"1)由于此指令系统可完成108种操作,因此指令字中的操作码占7位(2乙128)。2)由于指令系统中有7种寻址方式,因此寻址特征位占3位。3)由于地址码的位数为24-7-3=14位,因此直接寻址的范围为2叭4由于存储字长为24位,因此一次间接寻址的范围为22食5)由于多次间接寻址需要使用一位来标志是否间接寻址完毕,因此只有23位用作寻址, 寻址范围为2%"},{"id":"learncoder_159_23868","stem":"一条双字长的取数指令(LDA)存于存储器的200和201单元,其中第一个字为操 作码OP和寻址特征M,第二个字为形式地址A。假设PC当前值为200 (还没有取该条双字 长指令),变址寄存器IX的内容为100,基址寄存器的内容为200,存储器相关单元的内容见表4-3。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image3.png'/>表牛4的各列分别为寻址方式,该寻址方式下的有效地址以及取数指令执行结束后累加 器ACC的内容(ACC中存放的其实就是有效地址对应的操作数),试补全表4.4。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image4.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"直接寻址:由于直接寻址的有效地址EA为形式地址本身,因此直接寻址的有效地址为 300,根据题目给出的表格可知,地址为300对应的内容为400。间接寻址:间接寻址中根据形式地址寻找到的内容才是真正的有效地址,即根据存储器 的内容300找到的400才是间接寻址的有效地址,故有效地址为400,地址为400对应的内 容为700相对寻址:相对寻址中形式地址加上FC的内容为有效地址,PC当前值为200,当取出 一条指令后,变为202,故有效地址为202+300=502,地址为502对应的内容为900。变址寻址:变址寻址的有效地址为形式地址加上变址寄存器的内容,因此有效地址为 100+300=400,地址为400对应的内容为700。基址寻址:基址寻址的有效地址为形式地址加上基址寄存器的内容,因此有效地址为 200+300=500,地址为500对应的内容为600。先变址后间址:先变址,即先是形式地址加上变址寄存器的内容,即400;再间址,意 思就是根据地址400找到内容才是有效地址q因此,先变址后间址的有效地址为700o地址 为700对应的内容为401 先间址后变址:先间址,即先根据形式地址300找到间址的有效地址400;再变址,即 400再加上变址寄存器的内容,也就是400+100 = 500,地址为500对应的内容为600。综上所述,补全后的表4.4如下所示:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image19.png'/>"},{"id":"learncoder_159_23867","stem":"某指令系统字长12位,地址码取3位,试提出一种方案,使该系统有4条三地址指令、8条二地址指令、150条一地址指令。列出操作码的扩展形式并计算操作码的平均长度。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"这种类型的题目在本章例题中详细讲解过,在此不再赘述,只列出答案。1)4条三地址指令<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image16.png'/>2)8条二地址指令<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image17.png'/>3)150条一地址指令<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image18.png'/>以上答案不唯一,只要满足不包含就行,即没有前缀码。这个和数据结构中的赫夫曼树的编码是很类似的。操作码的平均长度=(3x4 + 6x8 + 9x 150)/162 ≈ 8.7"},{"id":"learncoder_159_23864","stem":"将指令按功能分类,一般可分为哪几类?按操作数个数分类,又可将指令分为哪几类?","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"1)按指令功能分类,一般可将指令分为以下几类:①算术和逻辑运算指令:每台计算机都不可或缺的指令,用来完成算术逻辑运算。②移位指令:用来完成算术移位和逻辑移位。③数据传送指令:用来完成CPU与主存储器之间的数据传送,在统一编址的机器中还 可以用来完成CPU与I/O设备的数据传送。注意:统一编址就是I/O设备和主存使用同一块地址空间,这样CPU就可以像访问内存 一样访问I/O设备。④转移指令、子程序调用与返回指令:主要用来改变指令执行次序的问题。⑤其他指令:停机指令,开、关中断指令等。2)按操作数个数分类,一般可分为:①零操作数指令。②单操作数指令。③双操作数指令。④多操作数指令。"},{"id":"learncoder_159_23866","stem":"假设指令字长为16位,操作数的地址码为6位,指令有零地址、一地址和二地址3 种格式。1)设操作码固定,若零地址指令有M种,一地址指令有N种,则二地址指令最多有多少种?2)采用扩展操作码技术,二地址指令最多有多少种?3)采用扩展操作码技术,若二地址指令有P条,零地址指令有Q条,则一地址指令最 多有几种?","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"1)由于操作数的地址码为6位,因此二地址指令中操作码的位数为16-6-6=4位,即操 作码只占4位。又由于操作码固定,因此零地址指令、一地址指令、二地址指令的总和不能 超过16。现已知零地址指令有M种,一地址指令有N种,所有二地址指令最多有16-M-N种。2)在1)中算得二地址指令的操作码为4位,即最多有2仁16条指令。但是绝对不能取 16o如果取了 16,就不能扩展成一地址指令和零地址指令了。因此,二地址指令最多只能有 15条。3)由于操作码位数可变,且二地址指令、一地址指令和零地址指令的操作码长度分别为 4位、10位、16位,因此二地址指令每减少一条,就可以多出条一地址指令;一地址指令 每减少一条,就可以多出条零地址指令。根据以上分析,假设一地址指令有X条,则一地 址指令最多有(24-P)x26^,零地址指令就应该最多有[(24-P)x26-R]x26<o根据题中给 出的零地址指令有Q条,则可以得出一个公式,如下:Q = [(24-P)x26-R]x26可解得:\tR = (24-P)x26-Qx2-6"},{"id":"learncoder_159_23869","stem":"\t某计算机的字长为16位,存储器按字编址,访存指令格式为16位,其中5位操作 码,3位寻址方式字段,分别表示立即寻址、直接寻址、间接寻址、变址寻址和相对寻址这5 种,8位地址码字段。设PC和Rx分别为程序计数器和变址寄存器(其中变址寄存器的位数 为16位)。试问:1)该格式能定义多少种指令?2)各种寻址方式的寻址范围大小是多少?3)写出各种寻址方式的有效地址EA的计算式。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"1)5位操作码可表示25=32种不同的指令。2)各种寻址方式的寻址范围大小如下。\"立即数寻址方式:只能访问唯一的一个数据。直接寻址方式:用地址码表示存储器地址,8位地址码可以有2匚256个数据字。 间接寻址方式需要分为两种(特别注意):①一次间接寻址:用地址码表示地址的存储位置,存储器中16位的地址可以有216=64K大小的寻址范围。②\t多次间接寻址:多次间接寻址需要使用一位来表示是否为最后一次间接寻址,可以有215=32K大小的寻址范围。变址寻址方式:用地址码表示地址的偏移量,地址在寄存器中,16位变址寄存器的寻址 范围是216相对寻址方式:寻址范围是PC值附近的字,8位地址偏移量可对PC附近的256个数据 字进行寻址,即寻址范围是256个数据字。3)设地址码位A,各寻址方式的有效地址见表 4-7导 可能疑问点:为什么立即数寻址的EA=PC?解析:其实这个不难理解,PC是存放当前执行指 令的地址,既然立即数是在指令自身中,自然此立即 数的地址就是当前指令的地址,故EA=PC。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image20.png'/>"},{"id":"learncoder_159_23858","stem":"某指令系统指令字长为8位,每一地址码长3位,用扩展操作码技术。若指令系统具有两条二地址指令、10条零地址指令,则最多有(\t)条一地址指令。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"扩展操作码技术即指令操作码长度不固定。有两条二地址指令,所以前2 位还剩下2条(余2X2J28),又有10条零地址指令,所以还剩下的可用空间为128-10=118, 即可设计出118/8=14条一地址指令。","type":"choice","options":{"D":"6","B":"14","A":"20","C":"10"},"answer":"B"},{"id":"learncoder_159_23857","stem":"在下列寻址中,(\t)寻址方式需要先运算再访问主存。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"这个应该比较简单,变址寻址的操作数计算方式是EA=A+QX),即需要 进行加法运算。","type":"choice","options":{"D":"直接","B":"变址","C":"间接","A":"立即"},"answer":"B"},{"id":"learncoder_159_23859","stem":"假设相对寻址的转移指令占两个字节,第一个字节为操作码,第二个字节为位移量(用补码表示),每当CPU从存储器取出一个字节时,即自动完成(PC) +l-PCo若当前指 令地址是3008H,要求转移到300FH,则该转移指令第二个字节的丙容应为(\t);若当前指令地址为300FH,,要求转移到3004H,则该转移指令第二字节的内容为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"由于相对寻址的转移指令占两个字节,因此每次取完指令,PC的值自动 加2。当前指令地址是3008H,取指结束后,PC的内容变为300AH,如果要求转移到300FH, 则第二个字节的位移量应该为+5 (A代表10, F代表15, 15-10=+5), +5的二进制表示为0000 0101,即 05H。如果当前指令地址为300FH,二进制为0011 0000 0000 1111,取指结束之后,PC的值加 2,即0011 0000 0001 0001,转换成十六进制为30UHo如果要求转移到3004H,其实只需要 比较最后一个字节即可,当前PC值是0001 0001,需要转移到0000 0100 (04H),前者十进 制为17,后者十进制为4,第二字节的位移量应该>-13o -13的二进制补码表示为1111 0011 (参见第2章相关内容),即F3H。这里还有一个极其重要的考点,就是如果这里的转移指令占3个字节,题目难度又提高 了,因为考查了补码的补位原则,即高位需要补符号位,参考下面的习题。习题:假设相对寻址的转移指令占3个字节,第一个字节为操作码,第二、三个字节为 相对位移量(补码表示),而且数据在存储器中采用以低字节地址为字地址的存放方式。每当 CPU从存储器取出一个字节时,即自动完成(PC)+l->PC。1)若PC当前值为240 (十进制),要求转移到290 (十进制),则转移指令的第二、三 个字节的机器代码是什么?2)若PC当前值为240 (十进制),.要求转移到200 (十进制),则转移指令的第二、三 个字节的机器代码是什么?PC当前值为240,该指令取出后PC的值为243,要求转移到290,即相对位 移量为290-243=47,转换成补码为2FH。由于数据在存储器中采用以低字节地址为字地址的 存放方式,因此该转移指令的第二个字节为2FH,第三个字节为00H。2)PC当前值为240,该指令取出后FC的值为243,要求转移到200,即相对位移量为 200-243=-43,转换成补码为D5H。由于数据在存储器中采用以低字节地址为字地址的存放 方式,因此该转移指令的第二个字节为D5H,第三个字节为FFH。疑问:1)为什么上面习题中第一个问题的第三个字节是00H,而第二个问题的第三个字节是 FFH?这里就涉及补码扩展高位的原则(即补符号位),第一个问题求出的是一个正数, 飞门 既然是正数,符号位应该为0,因此高位全部补0,即00H;而第二个问题求出的是一个负数, 」既然是负数,符号位应该为1,因此高位全部补1;即FFH。2)什么是存储器的大、小端法?其实大端法、小端法就是字节在内存中的存放顺序问题,如果某数据只有一个字 节,也就不存在什么大端法和小端法了。概念:小端法就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。大端法就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。举例说明:【例4-9】 16bit宽的数0x1234 (左边是高字节,右边是低字节),在小端法模式下,CPU 内存中的存放方式(假设从地址0x4000开始存放)如下。内存地址存放内容0x4001\t0x120x4000\t0x34 (低位字节存放在内存的低地址端)而在大端法模式下,CPU内存中的存放方式则为:内存地址存放内容0x4001\t0x340x4000\t0x12 (高位字节排放在内存的低地址端)【例440】32bit宽的数0x12345678在小端法模式下,CPU内存中的存放方式(假设从 地址0x4000开始存放)如下。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image13.png'/>而在大端法模式下,CPU内存中的存放方式则为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image14.png'/>注意:这里的小头端对应以低字节地址为字地址的存放方式;大头端对应以高字节地址 为字地址的存放方式。如果上面的例题是以高字节地址为字地址,则第二个字节应该和第三 个字节的内容互调。","type":"choice","options":{"C":"05H, F3H","A":"05H, F2H","B":"07H, F3H","D":"07H, F2H"},"answer":"C"},{"id":"learncoder_159_23856","stem":"下列关于各种寻址方式获取操作数快慢的说法中,正确的是( )。I.立即寻址快于堆栈寻址II.堆栈寻址快于寄存器寻址III.寄存器一次间接寻址快于变址寻址IV.变址寻址快于一次间接寻址","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"因为访问寄存器的速度通常是访问主存的数十倍,所以获取操作数的快 而 慢主要取决于寻址方式的访存次数。立即寻址操作数在指令中,不需要任何访问寄存器或内存,取数最快,I正确。堆栈寻 址可能是硬堆栈(寄存器)或软堆栈(内存),采用软堆栈时比寄存器寻址慢,II错误。寄存 器一次间接寻址先访问寄存器得到地址,然后再访问主存;而变址寻址访问寄存器IX后,还 要将A和(IX)相加(相加需要消耗时间),再根据相加的结果访存,显然后者要慢一点, HI正确。一次间接寻址需要两次访存,显然慢于变址寻址,IV正确。","type":"choice","options":{"C":"I、III、IV","A":"I 、 IV","B":"II、In","D":"III、IV"},"answer":"C"},{"id":"learncoder_159_23861","stem":"假定编译器对C源程序中的变量和MIPS中寄存器进行了以下对应:变量f、g、h、 i、j分别对应给寄存器$s0、$sl、$s2、$s3、$s4,并将一条C赋值语句编译后生成如下汇编 代码序列:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image2.png'/>请问这条C赋值语句是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"choice","options":{"C":"f=(g+h) + (i+j)","D":"f=(i+j) + (g+h)","B":"f=(g+j) + (h+j)","A":"f=(g+i) + (h+j)"},"answer":"C"},{"id":"learncoder_159_23860","stem":"下列对RISC的描述中,正确的有(\t)。I .支持的寻址方式更多II.大部分扌旨令在一个机器周期完成III.通用寄存器的数量多IV.指令字长不固定","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"I错误,RISC指令系统相对于CISC指令系统并没有产生出更多的寻址 方式,相反,其寻址方式种类更少。II正确,RISC指令是使用较多的简单指令条数去实现复杂的指令功能,潍大部分的指令 是在一个机器周期完成的。III正确,通用寄存器数量较多,可以提高指令的执行速度。IV错误,RISC的指令长度固定。","type":"choice","options":{"A":"I、 IV","C":"I 、 II、III","B":"II、III","D":"I 、 II、III、IV"},"answer":"B"},{"id":"learncoder_159_23855","stem":"一般来说,变址寻址经常和其他寻址方式混合在一起使用,设变址寄存器为IX,形 式地址为D,某机具有先间址寻址再变址寻址的方式,则这种寻址方式的有效地址为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"先间址后变址,这里需要理清“先间址”的这个间址指的是D,而不是 IX,如果是IX的话那就变成了寄存器间接寻址了。这里先把寄存器单元内容当作地址,再加上形式地址(D)得到操作数的地址,即 EA=(D)+(IX),所以正确答案是B。如果本题改为先变址寻址再间接寻址的方式,答案应该是EA=(D+(IX))这里的先后指的是表达式的先后计算顺序,记住这点,就不会出错了。比如EA=(D)+(IX) 这个表达式,需要先求(D),即先间址。而EA=(D+(IX))这个表达式,需要先求D+QX),即 先变址。知识点回顾:变址寻址的有效地址EA=A+(IX),其中A为形式地址,IX为变址寄存器。变址寻址中,变址寄存器的内容是由用户设定的,在程序执行过程中其值可变,而指令 字中的形式地址A是不可变的,这点恰好和基址寄存器相反。","type":"choice","options":{"A":"EA=D+(IX)","D":"EA=D+IX","B":"EA=(D)+(IX)","C":"EA=(D+(IX))"},"answer":"B"},{"id":"learncoder_159_23854","stem":"(2017统考真题)下列寻址方式中,最适合按下标顺序访问一维数组的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"在变址操作时,计算机指令中的地址与变址寄存器中的地址相加,得到有效地址,指令提供数组首地址,由变址寄存器来定位数据中的各元素。所以它最适合按下 标顺序访问一维数组元素,故选D。相对寻址以PC为基地址,以指令中的地址为偏移量确定有效地址,适合编制循环程序。寄存器寻址则是在指令中指出需要使用的寄存器。直接寻址是在指令的地址字段直接指出操 作数的有效地址。","type":"choice","options":{"D":"变址寻址","A":"相对寻址","B":"寄存器寻址","C":"直接寻址"},"answer":"D"},{"id":"learncoder_159_23853","stem":"(2016年统考真题)某指令格式如下所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第4章)/image1.png'/>其中M为寻址方式,I为变址寄存器编号,D为形式地址。若采用先变址后间址的寻址 方式,则操作数的有效地址是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"变址寻址其有效地址表示为EA1= (I) +D,再进行间址寻址,有效地址 EA= (EA1)=(①+D),故选 C。","type":"choice","options":{"B":"(I)+D","D":"((I))+D","A":"I+D","C":"((I)+D)"},"answer":"C"},{"id":"learncoder_159_23852","stem":"(2014年统考真题)某计算机有16个通用寄存器,采用32位定长指令字,操作码 字段(含寻址方式位)为8位,Store指令的源操作数和目的操作数分别采用寄存器直接寻址 和基址寻址方式。若基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则Store指令 中偏移量的取值范围是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"采用32位定长指令字,其中操作码为8位,两个地址码一共占用32-8=24 位,而Store指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址,机器中共有 16个通用寄存器,则寻址一个寄存器需要log216=4位,源操作数中的寄存器直接寻址用掉4 位,而目的操作数采用基址寻址也要指定一个寄存器,同样用掉4位,则留给偏移址的位数 为24-4-4=16位,而偏移址用补码表示,16位补码的表示范围为-32768〜+32767,选A。","type":"choice","options":{"D":"-65535〜+65536","C":"-65536〜+65535","B":"-32767〜+32768","A":"-32768〜+32767"},"answer":"A"},{"id":"learncoder_159_23851","stem":"假设寄存器R中的数值为200,主存地址为200和300的地址单元中存放的内容分别是300和400,则(\t)访问到的操作数为200。I.直接寻址200\t\t\tII.寄存器间接寻址(R)III.存储器间接寻址(200)\tIV.寄存器寻址\tR","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此类题建议考生画出草图。直接寻址200中,200就是有效地址,所访问 的主存地址200对应的内容是300, I错误。寄存器间接寻址(R)的访问结果与I 一样,II 错误。存储器间接寻址(200)表示主存地址200中的内容为有效地址,所以有效地址为300, 访问的操作数是400, HI错误。寄存器寻址R表示寄存器R的内容即为操作数,所以只有IV 正确。","type":"choice","options":{"A":"I、IV","B":"II 、V、 III","D":"只有IV","C":"III、IV"},"answer":"D"},{"id":"learncoder_159_23850","stem":"寄存器间接寻址方式中,操作数在(\t)中。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"采用寄存器间接寻址时,指令的地址码字段给出的是寄存器编号,而此 寄存器中所存储的内容即为操作数的有效地址,且此有效地址为主存单元地址。","type":"choice","options":{"D":"指令本身","B":"堆栈","C":"主存单元","A":"通用寄存器"},"answer":"C"},{"id":"learncoder_159_23847","stem":"\t直接寻址的无条件转移指令的功能是将指令中的地址码送入( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查无条件转移指令的操作原理,即需将待转移指令的地址送入程 序寄存器(PC),其他3个选项属于干扰选项。","type":"choice","options":{"A":"程序计数器(PC)","C":"指令寄存器(IR)","B":"累加器(ACC)","D":"地址寄存器(MAR)"},"answer":"A"},{"id":"learncoder_159_23846","stem":"假设某指令的一个操作数采用变址寻址方式,变址寄存器中的值为007CH,地址007CH中的内容为0124H,指令中给出的形式地址为BOOOH,地址BOOOH中的内容为COOOH, 则该操作数的有效地址为()。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"choice","options":{"A":"B124H","B":"C124H","D":"C07CH","C":"B07CH"},"answer":"C"},{"id":"learncoder_159_23849","stem":"执行操作的数据不可能来自(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"寄存器寻址中,操作数来自寄存器;立即寻址中,操作数来自指令本身; 间接寻址和直接寻址等操作数都是来自存储器。而控制存储器是用来存放实现全部指令系统 的所有微程序(第5章详细讲解)。","type":"choice","options":{"D":"存储器","C":"控制存储器","A":"寄存器","B":"指令本身"},"answer":"C"},{"id":"learncoder_159_23848","stem":"\t下列不属于程序控制指令的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"程序控制指令就是可以控制程序运行的指令。无条件转移、条件转移、 循环、子程序调用等都能够控制程序的执行。中断隐指令并不是指令系统中一条真正的指令,它没有操作码,因此它是一种不允许、 也不可能为用户使用的特殊指令。其所完成的操作主要有:1)保存断点。2)关闭中断。3)引出中断服务程序。以上仅仅是对中断隐指令做一个简单的介绍,第7章会详细讲解。E3补充知识点:条件转移指令和无条件转移指令的区别。条件转移指令指满足一定条件再转移,如运算结果为1,转移到哪里;运算 结果为0,转移到哪里。而无条件转移指令是强制性的,直接送一T地址到pc,然后下 命令:下一条指令转到这里,不管结果是什么。","type":"choice","options":{"D":"循环指令","A":"无条件转移指令","B":"条件转移指令","C":"中断隐指令"},"answer":"C"},{"id":"learncoder_159_23839","stem":"用二地址指令来完成算术运算时,其结果一般存放在( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"在讲解二地址指令时,讨论过怎样缩短指令长度,即以运算结果覆盖源操 作数的内容即可。指令的操作即为(A1)OP(A2)-Ai或(Ai)OP(A2)->A2,即Al或A2既代表源 操作数的地址,又代表存放本次运算结果的地址。","type":"choice","options":{"C":"累加器(ACC)中","B":"栈顶","D":"以上都不对","A":"其中一个地址码提供的地址中"},"answer":"A"},{"id":"learncoder_159_23842","stem":"某机器采用16位单字长指令,采用定长操作码,地址码为5位,现已定义60条二地址指令,那么单地址指令最多有(\t)条。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"首先可以计算出操作码字段的长度为16-5-5=6。因此,一共可以定义26=64 条指令,既然二地址指令占了 60条,且是定长操作码,故单地址指令最多可以有64-60=4 条。如果此题将条件改为采用不定长操作码,答案又是什么?分析如下:如果釆用不定长(扩展〉操作码,每条二地址指令可扩展为32条单地址指令,那么单地 址指令最多有32x4=128条。","type":"choice","options":{"C":"128","B":"32","A":"4","D":"256"},"answer":"A"},{"id":"learncoder_159_23845","stem":"(2017年统考真题)某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令29条,二地址指令107条,每个地址字段为6位,则指令字长至少应该是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"三地址指令有29条<2為故操作码字段至少为5位。以5位进行计算,它 剩余的32-29=3中操作码给二地址。而二地址另外多了 6位给操作码,因此它数量最大达 3x64=192。所以指令字长最少为23位,因为计算机按字节编址,需要是8的倍数,所以指令 字长至少应该是24位,选A。","type":"choice","options":{"A":"24位","C":"28位","D":"32位","B":"26位"},"answer":"A"},{"id":"learncoder_159_23841","stem":"某指令系统有200条指令,对操作码采用固定长度二进制编码时,最少需要用(\t)位。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"由于采用定长操作码,且27<200<28,因此最少需要用8位,故选B。","type":"choice","options":{"C":"16","B":"8","A":"4","D":"32"},"answer":"B"},{"id":"learncoder_159_23844","stem":"某机器字长为32位,存储器按半字编址,每取出一条指令后PC的值自动+2,说明 其指令长度是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"由于存储器按半字编址,即存储字长为16位,又由于每取出一条指令后 PC的值自动+2,说明指令字长等于两倍的存储字长,即32位。","type":"choice","options":{"D":"256位","A":"16位","B":"32位","C":"128位"},"answer":"B"},{"id":"learncoder_159_23843","stem":"(2016年统考真题)某计算机主存空间为4GB,字长为32位,按字节编址,采用32 位定长指令字格式。若指令按字边界对齐存放,则程序计数器(PC)和指令寄存器(IR)的 位数至少分别是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"主存空间为4GB,字长32位,故主存字数为4GB/32 ^=1G=230,程序计 数器PC用于给出下一条指令地址,故其需要30位寻址23°个主存字。指令寄存器(IR)用 于接收从主存中取到的指令,其长度等于扌旨令字长32位,故选B。","type":"choice","options":{"A":"30、30","B":"30、32","D":"32、32","C":"32、30"},"answer":"B"},{"id":"learncoder_159_23840","stem":"四地址指令OPA1A2A3A4的功能为(Ai) OP (A2)->A3,且A4给出下一条指令地址,假设Ai、A?、A3、他都为主存储器地址,则完成上述指令需要访存(\t)次。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"首先取指令需要1次访存(不少考生会忽略),然后取两个操作数两次访 存,保存运算结果1次访存,一共需要4次访存。","type":"choice","options":{"D":"5","A":"2","C":"4","B":"3"},"answer":"C"},{"id":"learncoder_159_23835","stem":"设指令由取指、分析、执行3个子部件完成,每个子部件的工作周期均为位,采用常 规标量流水线处理器。若连续执行10条指令,则需要的时间为( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"流水线在开始时需要一段建立时间,结束时需要一段排空时间,设m段流 水线的各段经过时间均为At,则需要T0=m△t的时间建立流水线,之后每隔但就可以流出一 条指令,完成n个任务共需时间T =m△t + (n-1)m△t。具有3个功能段的流水线连续执行10条指令共需时间=3m△t+9m△t=12m△t.","type":"choice","options":{"B":"10At","C":"12At","A":"8At","D":"14At"},"answer":"C"},{"id":"learncoder_159_23836","stem":"下列关于一地址指令的说法正确的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"如果此一地址指令执行的是逻辑操作(“与”、“非”等操作),即只需要一 个操作数即可,那么此一地址指令只需要一个操作数;如果是进行加、减、乘、除运算,因 为加、减、乘、除需要两个操作数,那么此一地址指令就需要两个操作数。.","type":"choice","options":{"C":"如果有两个操作数,则两个操作数相同,完成功能(A)OP(A)","A":"只有一个操作数","B":"一定有两个操作数,其中一个是隐含的,完成功能(A)OP(ACC)","D":"可能有两个操作数,也可能只有一个操作数"},"answer":"D"},{"id":"learncoder_159_23838","stem":"\t在各种寻址方式中,指令的地址码字段可能的情况有( )。I.寄存器编号\t II.设备端口地址III.存储器的单元地址\tIV.数值","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"在知识点讲解中强调述4种情况都有可能。","type":"choice","options":{"D":"I、II、III、IV","A":"I、II","B":"I、II、HI","C":"I、III"},"answer":"D"},{"id":"learncoder_159_23837","stem":"在通用计算机指令系统的二地址指令中,操作数的物理位置可安排在(\t)。I.一个主存单元和缓冲存储器II.两个数据寄存器III. —个主存单元和一个数据寄存器IV.一个数据寄存器和一个控制存储器V. —个主存单元和一个外存单元","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"对于二地址指令,若两个操作数都在寄存器中,称为RR型指令;若一个 操作数在寄存器中,另一个操作数在存储器中,称为RS型指令;若两个操作数都在存储器 中,则称为SS型指令。(一般用R表示寄存器,S表示存储器)RR型执行速度最快,SS型执行速度最慢,RS型执行速度介于RR型和SS型之间。而缓冲存储器(如Cache),用来存放最近使用的数据,其内容和调度都是由硬件或操作系 匕一 统完成的,因此不能作为指令的地址码。控制存储器采用ROM结构,存放旳是微程序,它 对软件开发人员是透明的,显然不能作为指令的地址码。CPU不能直接访问外存,如果所需 的数据存放在外存,则需要先调入主存,而指令中只能使用主存地址。","type":"choice","options":{"C":"I、II、III","A":"II、III、IV","B":"II、 HI","D":"I、 II、 III、 V"},"answer":"B"},{"id":"learncoder_159_23833","stem":"在下列寻址方式中,(\t)方式需要先计算,再访问主存。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"相对寻址:相对寻址的有效地址是将程序计数器PC的内容与指令字中的 形式地址A相加而成。相对寻址的有效地址为EA=(PC)+A.变址寻址:指令指定一个CPU寄存器(称为变址寄存器)和一个形式地址,操作数地址 是二者之和,需要先计算再访存。变址寻址的有效地址为EA=A+(IX)。间接寻址:指令给出存放操作数地址的存储单元地址,先得到操作数地址所在的存储单元的地址,再得到操作数的地址,然后才能取操作数。所以A和E都是符合的,选D。","type":"choice","options":{"B":"变址寻址","C":"间接寻址","A":"相对寻址","D":"A、 B"},"answer":"D"},{"id":"learncoder_159_23832","stem":"下列关于指令字长、机器字长和存储字长的说法中,正确的是( )。i.指令字长等于机器字长的前提下,取指周期等于机器周期II.指令字长等于存储字长的前提下,取指周期等于机器周期III.指令字长和机器字长的长度没有必然关系iv.为了硬件设计方便,指令字长都和存储字长一样大","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"指令字长是指指令中包含二进制代码的位数;机器字长是CPU—次能处理 的数据长度,通常等于内部寄存器的位数;存储字长是一个存储单元存储的二进制代码(存 储字)的长度。指令字长通常都是取存储字长的整数倍,如果指令字长等于存储字长的2倍,那么需要 2次访存,那么取指周期就等于机器周期的2倍;如果指令字长等于存储字长,那么取指周 期就等于机器周期,故I错误、II正确。指令字长取决于操作码的长度、操作数地址的长度 和操作数地址的个数,与机器字长没有必然的联系,但为了硬件设计方便,指令字长一般取 字节或存储字长的整数倍,故in正确。指令字长一般取字节或存储字长的整数倍,而不一定 都是和存储字长一样大,故IV错误。","type":"choice","options":{"C":"II、III","B":"I、IV","D":"ii、III、Iv","A":"I、III、IV"},"answer":"C"},{"id":"learncoder_159_23834","stem":"零地址双操作数指令不需要指出操作数地址,这是因为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"零地址运算指令在指令格式中不给出操作数的地址,它的操作数来自栈顶 和次栈顶。","type":"choice","options":{"D":"利用上一条指令的运算结果进行操作","C":"操作数地址隐含在堆栈指针中","B":"操作数隐含在累加器中","A":"操作数已在数据缓冲寄存器中"},"answer":"C"},{"id":"learncoder_159_20317","stem":"若基址寄存器的内容为2000H,变址寄存器的内容为26A2H,PC的内容为26B0H,指令 的地址码部分为003FHo若变址寻址用于取操作数,相对寻址用于实现条件转移,求出:(1)\t变址寻址和相对寻址的有效地址EA;-(2)\t操作数和转移目标地址。假设26DEH~26E2H单元存储的内容依次是F000H、F001H、 F002H、F003H 和 F004Ho","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"(1)变址寻址的有效地址EA = 26A0H+003FH = 26DFH,相对寻址的有效地址EA = 26A2H+003FH = 26E1 H(2)操作数为F001H,转移目标地址为F003H()"},{"id":"learncoder_159_20318","stem":"某计算机设有ACC、MAR、MDR、PC、IR以及基址寄存器Rb等。这些寄存器均为16位。 指令格式采用定长操作码、单地址制、设置寻址特征位,支持立即寻址(立即数为定点整数,以补 码表示)、直接寻址、(一次)间接寻址和基址寻址。(1)\t若采用单字长指令,指令集中共包含58条指令。则指令可使用立即数的最大范围是多 少?直接寻址和间接寻址的最大范围又是多少?(2)\t可若想访问容量为16 MB的按字节编址的主存?需在指令格式和计算机组成(硬件) 上做何改动?","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"(1)已知IR和MDR长度为16位,且采用单字长指令,所以指令字长为16位。 指令集中共包含58条指令,为了获得最大的直接寻址范围,指令的操作码取为log2【【[58]=6位。由于支持四种寻址方式,寻址特征至少取2位。最后指令格式为:则,指令可使用立即数的最大范围是-128 ~-127,指令可直接寻址的最大范围是28=256。一次间 址的寻址范围总是216=65 536。(2)如想访问容量为16MB的主存,首先需要将MAR设计为log2L16Mj =24位。然后对于 直接寻址,可采用基于双字长指令,指令格式如下:这样的指令可直接寻址的范围是28+16=2 24二\"MB。\t对于(一次)间接寻址,也要采用基于双字长指令,指令格式同上。在组成上需要改动的是: 在按照指令的地址码(主存地址)取操作数时,要读取一个双字类型的数据。从该数据、(32位) 中取出如 位,作为目标数据的存储地址,装入MAR。最后根据MAR访存,读出目标数据。对于基址寻址仍采用单字长指令,但需要将地址加法器设计成24位。此时,基址寄存器Rb有两种设计方案,一种是直接设计为24位,另一种是仍为16位。对于 前者,计算有效地址的方法不变,即将基址直接与指令中的8位长的偏移量相加,得到24位的地 址,送入24位的MAR;对于后者,有效地址的计算方法改为:将基址左移8位后与偏移量相加。"},{"id":"learncoder_159_20312","stem":"程序控制类指令可改变程序执行顺序。以下不属于程序控制类指令的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"访存指令不会改变程序执行顺序。","type":"choice","options":{"C":"无条件转移指令","B":"分支指令","A":"调用指令","D":"访存指令"},"answer":"D"},{"id":"learncoder_159_20319","stem":"为了减少指令条数,典型的面向定点数的RISC计算机不设置“清除寄存器(置0)指令” 和“寄存器之间的数据传送指令方,也不设置“将操作数(存放于寄存器中)取反”的指令。设 RISC计算机的算术运算指令均为“采用寄存器寻址的三操作数指令”,格式为:OP R1,R2,R3。它们的两个源操作数R1和R2必须来自不同的通用寄存器,运算结果(目的操作数)可以存 入第3个通用寄存器R3,也可以存入与某个源操作数相同的通用寄存器。(1)请问:这样的RISC计算机必须进行怎样特别的系统结构设计,才能用算术运算指令实 现“清除寄存器Ri”和“将寄存器斑的值送入寄存器Rj中”以及“将操作数(存放于寄存器Ri 中)取反”。(2)请依据设计结果,","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"空","type":"short_answer","answer":"(1)将一个特定的寄存器的值恒定为零/0,例如将R0恒定为零。(2) MUL RO,Ri,Ri\t将清除寄存器Ri。 ADD RO, Ri, Rj\t将寄存器Ri的值送入寄存器Rj中。SUB R0,Ri,Ri\t将操作数(存放于寄存器Ri中)取反。(3)请依据设计结果,写岀实现上述3项功能的具体办法。"},{"id":"learncoder_159_20316","stem":"某指令系统采用扩展操作码编码,有二地址指令、一地址指令和零地址指令3种地址制。已知该指令系统的定长指令字长16位,每个地址码长6位,有二地址指令15条,一地址指令34 条。问:零地址指令最多有多少条?","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"30. 空","type":"short_answer","answer":"二地址指令的地址码部分长2x6 = 12位,则操作码长度=16-12=4位,共有16 个码点。现二地址指令占用15个码点,则剩余一个码点(例如0000)用于向一地址操作码扩展。—地址指令的地址码部分长6位,则操作码长度=16-6 = 10位,其中高4位为二地址指令的 剩余码点,则只有操作码的低6位用于操作码编码,共有64个码点。现一地址指令占用其中的34个码点,则剩余64-34 = 30个码点用于向零地址操作码扩展。零地址指令的操作码长度为16位,其中高10位为一地址指令的剩余码点,只有操作码的低 6位用于操作码编码。则高10位剩余30个码点,低6位可提供64个码点,零地址指令共有30* 64 = 192个可用码点。即零地址指令最多有192条。\t"},{"id":"learncoder_159_20313","stem":"在I/O统一编址方式下,CPU通过(\t)指令来访问DMA控制器。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"在DO统一编址方式下,没有I/O指令,CPU通过“访存”指令来访问I/O端口(包 括DMA控制器)。有的处理器提供中断指令来实现软件中断,但DMA控制器涉及的是硬件中 断,与中断指令无关。“POP/PUSH”是访问堆栈的指令,与DMA控制器无关。\t","type":"choice","options":{"B":"I/O","A":"访存","D":"POP/PUSH","C":"中断指令"},"answer":"A"},{"id":"learncoder_159_20307","stem":"若指令中,地址码给出的是操作数有效地址,这种寻址方式称为(\t)方式。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查直接寻址的概念。","type":"choice","options":{"A":"基址寻址","D":"间接寻址","B":"立即寻址","C":"直接寻址"},"answer":"C"},{"id":"learncoder_159_20304","stem":"偏移寻址通过将某个寄存器内容与一个形式地址相加而生成有效地址。下列偏移寻址方式中,形式地址被认为带符号数的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"变址寻址的形式地址是一个数据段的基地址,地址肯定是无符号数;基址寻址的形 式地址是相对于基地址偏移量,肯定是正数;相对寻址的有效地址可能在当前指令之前或之后, 所以它的形式地址被认为带符号数。","type":"choice","options":{"D":"三个都不是","B":"基址寻址","C":"相对寻址","A":"变址寻址"},"answer":"B"},{"id":"learncoder_159_20305","stem":"下列关于与寄存器有关的寻址方式的说法中,正确的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查与寄存器有关的寻址方式的基本概念。采用寄存器寻址的好处是可以缩 短指令的长度。采用寄存器寻址方式的操作数一定在寄存器中。采用直接/间接寻址方式的操 作数一定在主存储器中。\t","type":"choice","options":{"C":"采用寄存器直接寻址方式的操作数一定在寄存器中","D":"采用寄存器间接寻址方式的操作数一定在主存储器中","B":"采用寄存器寻址方式的操作数一定在主存储器中","A":"采用寄存器寻址的好处是可以缩短程序的执行时间"},"answer":"D"},{"id":"learncoder_159_20306","stem":"若指令中,地址码给出的就是操作数本身的数值,这种寻址方式称为(\t)方式。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查立即寻址的概念。","type":"choice","options":{"B":"立即寻址","A":"基址寻址","D":"间接寻址","C":"直接寻址"},"answer":"B"},{"id":"learncoder_159_20310","stem":"根据指令的操作数是立即数(I)、来自通用寄存器(R)还是来自主存(S),将指令分成下 列类型。其中不可能出现在Load/Store风格指令集中的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"Load/Store风格指令集中不可能有两个操作数都来自主存的指令。\t","type":"choice","options":{"B":"RR","D":"SS","A":"RI","C":"RS"},"answer":"A"},{"id":"learncoder_159_20311","stem":"有一个含有100个元素的数组.A,其在内存中的首地址存放在寄存器$$3中。已知编译器给变量f分配的寄存器为$sl。则C语句f=A[10]编译后生成的汇编代码不可能 是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"“1W”是“Load a Word(装入一个字)”指令的助记符,“数字(寄存器号)”表示基址寻 址,其中数字等于欲访问的数组元素与数组在主存中起始地址的距离,这个距•离等于数组下标乘 以数组元素的长度。本题中数组下标为10,数组元素的长度可以是1、2或4,但基本上不可能 是 3 °\t\t","type":"choice","options":{"B":"lw$sl, 20($ s3)","A":"lw$sl, 10($s3)","D":"lw$sl, 40($ s3)","C":"lw$sl ,30(\t$s3)"},"answer":"C"},{"id":"learncoder_159_20308","stem":"下列关于指令设计的说法中,正确的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查的知识点包括:指令长度以字节为单位。每个地址码要指定一种寻址方 式,所以在多地址指令中可能有多个寻址方式。在指令格式中,通常不给出下条指令的地址,下 条指令的地址总是取自PC。在同一台的计算机上,指令的操作码只有唯一一种解释。但是在不 同的计算机上,指令的操作码可以有不同的解释。","type":"choice","options":{"B":"—条指令只能有一种寻址方式","C":"在设计指令格式时,应留出一个字段表示下条指令的地址","D":"即便在不同的机器上,指令的操作码总是只有唯一一种解释","A":"指令长度一般是8的整数倍"},"answer":"A"},{"id":"learncoder_159_20309","stem":"输入/输岀指令的功能是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"略","type":"choice","options":{"D":"进行主存和I/O设备之间的信息交换","B":"进行主存和I/O端口之间的信息交换","A":"进行CPU与I/O端口之间的信息交换","C":"进行CPU和I/O设备之间的信息交换"},"answer":"A"},{"id":"learncoder_159_20301","stem":"下列关于“变址寻址”的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"通常,变址/基址寻址属于显式寻址,必须在指令中明确给岀寻址特征。变址/基址 寻址的地址码分两个字段,一个是变址/基址寄存器字段,表示选择哪个寄存器作为变址/基址寄 存器;另一个是形式地址。如果指定一个寄存器专门作为变址/基址寄存器,则变址/基址寄存器 字段可以省略。以循环结构来处理同一个数组的不同元素时,必须采用变址寻址,因为循环结构 要求的是用相同的指令来处理不同的数据。数组的起始地址将作为变址寻址的形式地址保持不 变,可以修改的是保存在变址寄存器中的数组元素下标。","type":"choice","options":{"B":"每次变址寻址结束后,应该配套地有一个修改变址寄存器中变址值的操作","D":"以变址寻址方式访问一个数组的多个元素的指令在循环过程中,保持不变","A":"变址寻址时;指令中的地址码与变址寄存器中的变址值相加,得到有效地址","C":"如果指定-个寄存器专门作为变址寄存器,则指令中无需表明寻址特征"},"answer":"D"},{"id":"learncoder_159_20302","stem":"下列关于“变址寻址”的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"每次进行变址寻址后,变址寄存器中变址值都增/减量等于数组元素的长度(对于 按字节编址的存储器,为所占字节数);变址寄存器的位数不需要支持对整个存储空间寻址,但 基址寄存器的位数需要支持对整个存储空间寻址。以循环结构来访问不同数组的相同下标的元 素就要采用基址寻址。","type":"choice","options":{"B":"每次进行变址寻址后,变址寄存器中变址值都增1或减1","D":"变址寻址方式适合于以循环结构来访问不同数组的相同下标的元素","C":"变址寄存器的位数必须支持它对整个存储空间寻址,即与MAR的位数相等","A":"变址寄存器中变址值是一个无符号数"},"answer":"A"},{"id":"learncoder_159_20299","stem":"把逻辑地址转化为物理地址的过程称为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查“重定位”的概念。","type":"choice","options":{"A":"汇编","C":"装入","B":"链接","D":"重定位"},"answer":"D"},{"id":"learncoder_159_20303","stem":"下列关于基址寻址和变址寻址的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"基址寻址可以用来处理数组元素,只是不适于以循环结构来处理同一个数组的不同 元素。蚩址寻址主要用于程序或数据在主存中的浮动装入。","type":"choice","options":{"A":"基址寻址和变址寻址的计算有效地址的方式基本上相同","D":"基址寻址主要用于程序的重定位(逻辑地址转换为物理地址)","B":"采用基址寻址时,取岀基址寄存器的基址值后,通常保持基址寄存器不变","C":"无法釆用基址寻址来处理数组元素*"},"answer":"C"},{"id":"learncoder_159_20300","stem":"关于\"指令集体系结构(InstructioiL Set Architecture., ISA ) ”的说法,错误的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查的知识点包括:没有浮点指令的机器同样能够处理浮点数;没有乘/除法指 令的机器照样能够完成乘/除运算;只有操作系统内核进程或者系统管理员可以执行“特权”指 令;只要是指令对汇编程序员都是有用的,NOP(空操作)指令可以用来定时或者预留空间。","type":"choice","options":{"C":"用户进程不能执行“特权”指令(也叫“管态”指令)","A":"涉及浮点数处理的高级语言程序能够在没有浮点指令的机器上运行","D":"NOP(空操作)指令对汇编程序员是无用的","B":"没有乘/除法指令的机器照样能够完成乘/除运算"},"answer":"D"},{"id":"learncoder_159_20294","stem":"指令格式设计中,采用扩展操作码的目的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题君查的知识点是基于哈夫曼压缩编码而提出的扩展操作码。","type":"choice","options":{"A":"增加指令长度","C":"增加寻址空间","B":"缩短执行指令的时间","D":"减少机器语言程序(指令序列)所占的存储空间"},"answer":"D"},{"id":"learncoder_159_20298","stem":"下列关于“单地址指令”的说法中,正确的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考査“单地址指令”的概念。注意:有时零地址指令的长度很长。","type":"choice","options":{"C":"单地址指令中总有一个操作数采用隐含寻址","D":"单地址指令的长度大于零地址指令的长度","A":"单地址指令中只包含一个操作数或地址码","B":"单地址指令只处理一个操作数"},"answer":"A"},{"id":"learncoder_159_20295","stem":"设相对寻址的转移指令占两个字节,第一个字节为操作码,第二个字节为相对位移量。 现有一条该类型的转移指令在主存中的存储地址为2008H,欲转移到2001H处。则该转移指令 第二个字节的值为( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"2001-(2008+2)=-9 = F7HO要注意:相对位移量总是用补码表示。","type":"choice","options":{"A":"07H","C":"09H","B":"F7H","D":"89H"},"answer":"B"},{"id":"learncoder_159_20296","stem":"设变址寄存器为X,形式地址为D,某机具有先变址再间址的寻址方式,则这种寻址方式的有效地址EA%(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查变址寻址和间接寻址的有效地址的计算方法。","type":"choice","options":{"D":"((X)+(D))","A":"(X)+D","B":"(X)+(D)","C":"((X)+D)"},"answer":"C"},{"id":"learncoder_159_20297","stem":"下列关于“零地址指令”的说法中,正确的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查“零地址指令”的概念。\t\t","type":"choice","options":{"A":"零地址指令不处理任何操作数","B":"零地址指令的操作数隐含在寄存器中","C":"零地址指令中不包含任何操作数或地址码","D":"零地址指令的操作数隐含在堆栈中"},"answer":"C"},{"id":"learncoder_159_20291","stem":"下列关于返回指令RET和中断返回指令IRET的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查返回指令RET和中断返回指令IRET的异同。","type":"choice","options":{"D":"返回指令可以带一个操作数","A":"使用这两条指令眄,都无需明显给出返回地址","B":"返回指令绝对没有操作数","C":"中断返回指令IRET绝对没有操作数"},"answer":"B"},{"id":"learncoder_159_20292","stem":"数据寻址计算的是指令操作数的地址。下列寻址方式中,不属于数据寻址的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查数据寻址和指令寻址的概念与实例。","type":"choice","options":{"A":"间接寻址","D":"变址寻址","B":"基址寻址","C":"相对寻址"},"answer":"C"},{"id":"learncoder_159_20289","stem":"已知地址为3600H的内存单元中的内容为00FCH,地址为00FCH的内存单元的内容为 3200H,而3200H单元的内容为FC00H,某指令操作数寻址方式为变址寻址,执行该指令时变址 寄存器的内容为0400H,指令中给出的形式地址为3200H,则该指令操作数为( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查变址寻址的有效地址的计算方法。","type":"choice","options":{"A":"00FCH","C":"3600H","B":"3200H","D":"FCOOH"},"answer":"A"},{"id":"learncoder_159_20293","stem":"下列关于隐含寻址的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查隐含寻址的概念与实例。堆栈寻址/堆栈指令隐含使用栈顶单元,带操作 数的算术运算指令隐含使用累加器,采用相对寻址的指令隐含使用PC.","type":"choice","options":{"A":"隐含寻址是指寻址特征隐含在操作码中","D":"带操作数的指令也可以采用隐含寻址","C":"堆栈寻址/堆栈指令都采用隐含寻址","B":"隐含寻址是指寻址特征隐含在操作数中"},"answer":"B"},{"id":"learncoder_159_20290","stem":"下列关于无条件转移指令Jump(跳转指令)和转子指令Call(调用指令)的说法,错误的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查无条件转移指令Jump和转子指令Call的异同。","type":"choice","options":{"C":"无条件转移指令执行完跳转后也需要返回","A":"无条件转移指令和转子指令都会实现指令执行流的跳转","B":"转子指令在执行完.子程序后还会返回到转子指令的下条指令继续执行","D":"转子指令执行过程中要将返回地址保存到堆栈或某个特殊寄存器中"},"answer":"C"},{"id":"learncoder_159_20288","stem":"在计算机系统层次结构中,处于硬件和软件交界面的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.指令系统","analysis":"此题考查指令系统(也称为指令集、指令集体系结构ISA)的概念。","type":"choice","options":{"C":"操作系统","B":"指令系统","D":"编译系统","A":"汇编语言"},"answer":"B"},{"id":"learncoder_158_23971","stem":"假设指令流水线分为取指令(正)、指令译码/读寄存器(ID)、执行/有效地址计算(EX)、 存储器访问(MEM)、结果写回寄存器(WB)5个过程段。现有下列指令序列进入该流水线。①\tADDR1,R2,R;②\tSUBR4,R1,R5;③\tANDR6,R1,R7;④\tORR8,R1,R9;⑤\tXORR10,R1,R11;请回答以下问题:1)如果处理器不对指令之间的数据相关进行'特殊处理,而允许这些指令进入流水线,试 问上述指令中哪些将从未准备好数据的R1寄存器中取到错误的数据?2)假如采用将相关指令延迟到所需操作数被写回到寄存器后再执行的方式,以解决数据 相关的问题,那么处理器执行该指令序列需占用多少个时钟周期?","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"1)由题中指令序列可见,ADD指令后的所有指令都用到ADD指令的计算结果。表5.13 列出了未采用特殊处理的流水线示意,表中ADD指令在WB段才将计算结果写入寄存器Ri 中,但SUB指令在其ID段就要从寄存器R1中读取该计算结果。同样AND指令、OR指令 也将受到这种相关关系的影响。ADD指令只有到第5个时钟周期末尾才能结束对寄存器R1 的写操作,使XOR指令可以正常操作,因为它在第6个时钟周期才读寄存器R1的内容。2)\t表5-14是对上述指令进行延迟处理的流水线示意。由表可见,从第一条指令进入流 水线到最后一条指令流出流水线,共需12个时钟周期。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image26.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image27.png'/>"},{"id":"learncoder_158_23974","stem":"\t(2015年统考真题)某16位计算机的主存按字节编码,存取单位为16位;采用16 位定长指令字格式;CPU采用单总线结构,主要部分如下图所示。图中R0〜R3为通用寄存 器;T为暂存器;SR为移位寄存器,可实现直送(mov)、左移一位(left)和右移一位(right) 3种操作,控制信号为SRop, SR的输出由信号SRout控制;ALU可实现直送A (mova)、A 加 B (add)> A 减 B (sub)> A 与 B (and)、A 或 B (ot)、非 A (not)> A 加 1 (inc) 7 种操 作,控制信号为ALUop。请回答下列问题。1)图中哪些寄存器是程序员可见的?为何要设置暂存器T?2)控制信号ALUop和SRop的位数至少各是多少?3)控制信号SRout所控制部件的名称或作用是什么?4)端点①〜⑨中,哪些端点须连接到控制部件的输出端?5)为完善单总线数据通路,需要在端点①〜⑨中相应的端点之间添加必要的连线。写出 连线的起点和终点,以正确表示数据的流动方向。6)为什么二路选择器MUX的一个输入端是2?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image9.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"1)程序员可见寄存器为通用寄存器(R0〜R3)和PC。因为采用了单总线结构,因此, 若无暂存器T,则ALU的A、B端口会同时获得两个相同的数据,使数据通路不能正常工作。【评分说明】回答通用寄存器(R0〜R3),给分;回答PC,给分;部分正确,酌情给分。 设置暂存器T的原因若回答用于暂时存放端口 A的数据,则给分,其他答案,酌情给分。2)ALU共有7种操作,故其操作控制信号ALUop至少需要3位;移位寄存器有3种操 作,其操作控制信号SRop至少需要2位。3)信号SRout所控制的部件是一个三态门,用于控制移位器与总线之间数据通路的连接 与断开。【评分说明】只要回答出三态门或者控制连接/断开,即给分。4)端口①、②、③、⑤、⑧须连接到控制部件输出端。【评分说明】答案包含④、⑥、⑦、⑨中任意一个,不给分;答案不全酌情给分。5)连线1,⑥一⑨;连线2,⑦-④。【评分说明】回答除上述连线以外的其他连线,酌情给分。6)因为每条指令的长度为16位,按字节编址,所以每条指令占用2个内存单元,顺序 执行时,下条指令地址为(PC)+2o MUX的一个输入端为2,可便于执行(PC)+2操作。"},{"id":"learncoder_158_23972","stem":"(2014年统考真题)某程序中有如下循环代码段p: for(int i = 0; i < N; i++) sum+=A[i];”。假设编译时变量sum和i分别分配在寄存器R1和R2中。常量N在寄存器R6 中,数组A的首地址在寄存器R3中。程序段P起始地址为0804 8100H,对应的汇编代码和机器代码见下表。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image7.png'/>执行上述代码的计算机M采用32位定长指令字,其中分支指令bne采用如下格式:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image8.png'/>OP为操作码;Rs和Rd为寄存器编号;OFFSET为偏移量,用补码表示。请回答下列问 题,并说明理由。1)M的存储器编址单位是什么?2)已知sll指令实现左移功能,数组A中每个元素占多少位?3)表中bne指令的OFFSET字段的值是多少?已知bne指令采用相对寻址方式,当前 PC内容为bne指令地址,通过分析题44表中指令地址和bne指令内容,推断出bne指令的 转移目标地址计算公式。4)若M采用如下“按序发射、按序完成”的5级指令流水线:IF (取指)、ID (译码及 取数)、EXE (执行)、MEM (访存)、WB (写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起3个时钟周期的阻塞,则P中哪些指令的执行会由于数据相关而发生流 水线阻塞?哪条指令的执彳亍会发生控制冒险?为什么指令1的执行不会因为与指令5的数据相关而发生阻塞?","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"该题为计算机组成原理科目的综合题型,涉及指令系统、存储管理以及CPU 三个部分内容,考生应注意各章节内容之间的联系,才能更好的把握当前考试的趋势。1)已知计算机M采用32位定长指令字,即一条指令占4B,观察表中各指令的地址可 知,每条指令的地址差为4个地址单位,即4个地址单位代表4B, 一个地址单位就代表了 1B,所以该计算机是按字节编址的。(2分)2)在二进制中某数左移两位相当于以乘四,由该条件可知,数组间的数据间隔为4个地 址单位,而计算机按字节编址,所以数组A中每个元素占4B。(2分)3)由表可知,bne指令的机器代码为1446FFFAH,根据题目给出的指令格式,后2B的 内容为OFFSET字段,所以该指令的OFFSET字段为FFFAH,用补码表示,值为-6。(1分) 当系统执行到bne指令时,PC自动加4, PC的内容就为08048118H,而跳转的目标是 08048100H,两者相差了 18H,即24个单位的地址间隔,所以阿移址的一位即是真实跳转地 址的-24/(-6)=4位。(1分)可知bne指令的转移目标地址计算总式为(PC)+4+OFFSET*4。(1 分)4)由于数据相关而发生阻塞的指令为第2、3、4、6条,因为第2、3、4、6条指令都与 各自前一条指令发生数据相关。(3分)第6条指令会发生控制冒险。(1分)当前循环的第五 条指令与下次循环的第一条指令虽然有数据相关,但由于第6条指令后有3个时钟周期的阻 塞,因而消除了该数据相关。(1分)【评分说明】对于第1问,若考生回答:因为指令1和2、2和3、3和4、5和6发生数 据相关,因而发生阻塞的指令为第2、3、4、6条,同样给3分。答对3个以上给3分,部分 正确酌情给分。"},{"id":"learncoder_158_23975","stem":"(2015年统考真题)上题中描述的计算机,其部分指令执行过程的控制信号如下图 所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image10.png'/>该机指令格式如下图所示,支持寄存器直接和寄存器间接两种寻址方式,寻址方式位分 别为0和1,通用寄存器R0〜R3的编号分别为0、1、2和3。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image11.png'/>其中:Md、Msl; Ms2位寻址方式位,Rd、Rsl、Rs2位寄存器编号三地址指令:源操作数1 0P 源操作数2 ->目的操作数地址二地址指令(末3位均为0):OP 源操作数1->目的操作数地址单地址指令(末6位均为0):OP目的操作数->目的操作数地址请回答下列问题。1)该机的指令系统最多可定义多少条指令?2)假定inc、shl和sub指令的操作码分别为01H、02H和03H,则以下指令对应的机器 代码各是什么?① inc Rl ; Rl + 1->R1 ② shl R2,R1 ; (Rl) « 1—R2 ③ sub R3, (R1),R2 ; ((Rl)) - (R2) _R33)假设寄存器X的输入和输出控制信号分别为Xin和Xout,其值为1表示有效,为0 表示无效(例如,PCout=l表示PC内容送总线);存储器控制信号为MEMop,用于控制存 储器的读(read)和写(write)操作。写出题图a中标号①〜⑧处的控制信号或控制信号的取值。4)指令“subRl,R3,理)”和“incRl”的执行阶段至少各需要多少个时钟周期?参考答案及解析","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"1)\t指令操作码有7位,因此最多可定义27=128条指令。2)各条指令的机器代码分别如下:①“incRl” 的机器码为:0000001 0 01 0 00 0 00,即 0240H。②“shlR2, R1” 的机器码为:0000010 010 0 01 0 00,即 0488H。③“sub R3, (R1),R2” 的机器码为:0000011 0 11 1 010 10,即 06EAH。3)各标号处的控制信号或控制信号取值如下:①0;②mov; (§)mdva;④left; ©read; @sub; ®mov;⑧Srout。【评分说明】答对两个给分。4)指令\"sub Rl, R3, (R2)”的执行阶段至少包含4个时钟周期;指令“incRl”的执 行阶段至少包含2个时钟周期。"},{"id":"learncoder_158_23973","stem":"(2014年统考真题)假设对于上题中的计算机M和程序P的机器代码,M采用页式虚拟存储管理;卩开始执行时,(Rl)=(R2)=0, (R6)=1000,其机器代码已调入主存但不在Cache 中;数组A未调入主存,且所有数组元素在同一页,并存储在磁盘同一个扇区。请回答下列问题并说明理由。1)P执行结束时,R2的内容是多少?2)M的指令Cache和数据Cache分离。若指令Cache共有16行,Cache和主存交换的 块大小为32字节,则其数据区的容量是多少?若仅考虑程序段P的执行,则指令Cache的命 中率为多少?3)P在执行过程中,哪条指令的执行可能发生溢出异常?哪条指令的执行可能产生缺页 异常?对于数组A的访问,需要读磁盘和TLB至少各多少次?","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"该题继承了上题中的相关信息,统考中首次引入此种设置,具体考查到程序的运行结果、Cache的大小和命中率的计算以及磁盘和TLB的相关计算,是一题比较综合的题型。1)R2里装的是i的值,循环条件是i<N(1000),即当i自增到不满足这个条件时跳出循环,程序持束,所以此时i的值为1000(1分)2)Cache共有16行,每块32B,所以Cache数据区的容量为16x32B=512Bo (1分)P 共有6条指令,占24B,小于主存块大小(32B),其起始地址为0804 8100H,对应一块的开 始位置,由此可知所有指令都在一个主存块内。读取第一条指令时会发生Cache缺失,故将 P所在的主存块调入Cache某一行,以后每次读取指令时,都能在指令Cache中命中。因此 在1000次循环中,只会发生1次指令访问缺失,所以指令Cache的命中率为:(1000x6-1)/(1000 x6)=99.98%(2 分)【评分说明】若考生给出正确的命中率,而未说明原因和过程,给1分。若命中率计算错 误,但解题思路正确,可酌情给分…3)指令4为加法指令,即对应sum+=A[i],当数组A中元素的值过大时,则会导致这条 加法指令发生溢出异常;而指令2、5虽然都是加法指令,但它们分别为数组地址的计算指令 和存储变量i的寄存器进行自增的指令,而i最大到达1000,所以它们都不会产生溢出异常。 (2分)只有访存指令可能产生缺页异常,即指令3可能产生缺页异常。(1分)因为数组A在磁盘的一页上,而一开始数组并不在主存中,第一次访问数组时会导致访盘,把A调入内存,而以后数组A的元素都在内存中,则不会导致访盘,所以该程序一共访盘一次。(2分)每访问一次内存数据就会查TLB 一次,共访问数组1000次,所以此时又访问TLB1000 次,还要考虑到第一次访问数组A,即访问A[0]时,会多访问一次TLB (第一次访问A[0] 会先查一次TLB,然后产生缺页,处理完缺页中断后,会重新访问A[0],此时又查TLB), 所以访问TLB的次数一共是1001次。(2分)【评分说明】①对于第1问,若答案中除指令4外还包含其他运算类指令(即指令1、2、5),则给1 分,其他情况,则给0分②对于第2问,只要回答Toad指令”,即可得分。③对于第3问,若答案中给出的读TLB的次数为1002,同样给分。若直接给出正确的 TLB及磁盘的访问次数,而未说明原因,给3分。若给出的TLB及磁盘访问次数不正确,但 解题思路正确,可酌情给分。"},{"id":"learncoder_158_23968","stem":"设某机有4个中断源A、B、C、D,其硬件排队优先顺序为A>B>C>D,现要求将 中断处理顺序改为D>A>C>B。1)写出每个中断源对应的屏蔽字。2)按图5-42所示的时间轴给出的4个中断源的请求时刻,画出CPU执行程序的轨迹。 设每个中断源的中断服务程序时间均为20s<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image3.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":""},{"id":"learncoder_158_23965","stem":"某计算机采用5级指令流水线,如果每级执行时间是2ns,求理想情况下该流水线的 加速比和吞吐率。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"流水线的加速比指采用流水线技术时指令的执行速度与等效的不采用流水线 技术的指令执行速度之比,理想情况加速比等于流水线的级数。吞吐率指每秒钟能处理的指 令数量。本题中计算机采用5级指令流水线,所以理想情况下加速比等于5o现在每完成一条指 令的时间是2ns,则最大吞吐率等于1 /2ns=5xl08。归纳总结:若流水线各级的执行时间相同,都为位,则流水线的最大吞吐率=1△t。"},{"id":"learncoder_158_23969","stem":"现有4级流水线,分别完成取指、指令译码并取数、运算、回写4步操作,假设完 成各部操作的时间依次为100ns、l00ns、80ns、50ns试问:1)流水线的操作周期应设计为多少?2)试给出相邻两条指令发生数据相关的例子(假设在硬件上不釆取措施),试分析第2 条指令要推迟多少时间进行才不会出错?3)如果在硬件设计上加以改进,至少需要推迟多少时间?","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"1)\t流水线操作的时钟周期T应按4步操作中所需时间最长的一个步骤来考虑,所以T=100ns。2)两条指令发生数据相关冲突的例子如下:ADD\tRl, R2, R3\t(R2)+(R3)→R1(将寄存器R2和R3的内容相加存储到寄存器R1)SUB\tR4, Rl, R5\t(R1)-(R5)→R4(将寄存器R1的内容减去寄存器R5的内容,并将相减的结果存储到寄存器R4) 分析如下:首先这两条指令发生写后读(RAW)相关。两条指令在流水线中的执行情况见表5.9。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image21.png'/>ADD指令在时钟4时将结果写入寄存器堆(R1),但SUB指令在时钟3时读寄存器堆 (R1)。本来ADD指令应先写入Rl, SUB指令后读R1,结果变成SUB指令先读Rl, ADD 指令后写R1,因而发生数据冲突。如果硬件上不采取措施,则第2条指令SUB至少应该推 迟两个时钟周期(2x100ns),即SUB指令中的指令译码并取数周期应该在ADD指令的写回 周期之后才能保证不会出错,见表5-10。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image22.png'/>3)如果硬件上加以改进,则只延迟一个时钟周期即可(100ns)。因为在ADD指令中, 运算周期就已经将结果得到了,可以通过数据旁路技术在运算结果得到的时候将结果快速地 送入寄存器R1,而不需要等到写回周期完成,见表5.11。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image23.png'/>"},{"id":"learncoder_158_23966","stem":"假设指令流水线分取指(FI)、译码(ID)、执行(EX)、回写(WR) 4个过程段,共有10条指令连续输入此流水线。1)画出指令周期流程。2)画出非流水线时空图。3)画出流水线时空图。4)假设时钟周期为100ns,求流水线的实际吞吐率。5)求该流水处理器的加速比。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"1)指令周期包括FI、ID、EX和WR这4个子过程,则指令周期流程如图5.45a所示。2)非流水线时空图如图5.45b所示。假设一个时间单位为一个时钟周期,则每隔4个时 钟周期才有一个输出结果。3)流水线时空图如图5.45c所示。由图5.45c可见,第一条指令出结果需要4个时钟周 期。当流水线满载时,以后每一个时钟周期可以出一个结果,即执行完一条指令。4)由图5-45C所示的10条指令进入流水线的时空图可见,在13个时钟周期结束时,CPU 执行完10条指令,故实际吞吐率为10条指令/(100nsxl3)〜0.77xl07条指令/s。5)在流水处理器中,当任务饱满时,指令不断输入流水线,不论是几级流水线,每隔一 个时钟周期都输出一个结果。对于本题4级流水线而言,处理10条指令所需的时钟周期 =4+(10-1)=13,而非流水线处理10条指令需4x10=40个时钟周期,所以该流水处理器的加 速比为 40/13≈3.08。"},{"id":"learncoder_158_23967","stem":"在一个8级中断系统中,硬件中断响应从高到低的优先顺序是:1→2→3→4→5→6→7→8,设置中断屏蔽寄存器后,中断处理的优先顺序变为1→5→8→3→2→4→6→7。1)应如何设置屏蔽码?2)如果CPU在执行一个应用程序时有5、6、7级3个中断请求同时到达,中断请求8 在6没有处理完以前到达,在处理8时中断请求2又到达CPU,试画出CPU响应这些中断的 顺序示意图。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"1)在中断处理顺序改为D>A>C>B后,每个中断 源新的屏蔽字如图5.47所示。2)根据新的处理顺序,CPU执行程序的轨迹如图 5-48所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image19.png'/>"},{"id":"learncoder_158_23964","stem":"采用微程序控制器的某计算机在微程序级采用两级流水线,即取第i+1条微指令与 执行第i条微指令同时进行。假设微指令的执行时间需要40ns,试问:1)若控制存储器选用读出时间为30ns的ROM,在这种情况下微周期为多少?并画出微 指令执行时序图。2)若控制存储器选用读出时间为50ns的ROM,在这种情况下微周期为多少?并画出微 指令执行时序图。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"在执行本条微指令的同时,预 取下一条微指令。因为这两个操作是在两个完 全不同的部件中执行的,所以这种重叠是完全 可行的。取微指令的时间与执行微指令的时间 哪个长,就以它作为微周期。1)若控制存储器选用读出时间为30ns的ROM,微指令执行时序图如图5.44a所示。因 为取第i+1条微指令与执行第i条微指令同时进行,所以取微指令的读出时间为30ns,而微 指令的执行时间需要40ns。这种情况下微周期取最长的时间,即40ns。2)若控制存储器选用读出时间为50ns的ROM,微指令执行时序图如图5.44b所示。这 种情况下微周期需取50nso<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image15.png'/>归纳总结:微指令的执行方式可分为串行和并行两种方式。串行方式时,取微指令和执 行微指令是顺序进行的,而并行方式时可以将取微指令和执行微指令的操作重叠起来,从而 缩短微周期。"},{"id":"learncoder_158_23970","stem":"(2012年统考真题)某16位计算机中,带符号整数用补码表示,数据Cache和指令 Cache分离。表5-6给出了指令系统中部分指令格式,其中Rs和Rd表示寄存器,mem表示 存储单元地址,(X)表示寄存器X或存储单元X的内容。该计算机采用5段流水方式执行指令,各流水段分别是取指IF、译码/读寄存器ID、执 行/计算有效地址EX、访问存储器M、结果写回寄存器WB,流水线采用“按序发射,按序 完成”方式,没有采用转发技术处理数据相关,并且同一寄存器的读和写操作不能在同一个 时钟周期内进行。请回答下列问题。1)若int型变量x的值为-513,存放在寄存器R1中,则执行指令“SHR R1”后,R1的 内容是多少?要求用十六进制表示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image4.png'/>2)若某个时间段中,有连续的4条指令进入流水线,在其执行过程中没有发生任何指令 段阻塞,则执行这4条指令所需的时钟周期数为多少?3)\t若高级语言程序中某赋值语句为x=a+b, x、a和b均为int型变量,它们的存储单元 地址分别为[x]、[a]和[b]。该语句对应的指令序列如下,其在指令流水线中的执行过程见表5-7。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image5.png'/>这4条指令执行过程中,13的ID段和14的IF段被阻塞的原因各是什么?4)若高级语言程序中某赋值语句为x=2*x+a, x和a均为unsigned int型变量,它们的存 储单元地址分别表示为[x]、[a]o执行这条语句至少需要多少个时钟周期?要求模仿表5・7画 出这条语句对应的指令序列及其在流水线中的执行过程示意图。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"1)x的值为-513,可求得[x]原=1000 0010 0000 0001B,除符号位外,各位取反加1,可 以求得[x]补=1111 1101 1111 1111B,转换成十六进制表示为:FDFFHo可以得到,指令执行前 R1中存放的内容为:FDFFHo执行指令“SHRR1”,表示将寄存器R1的内容算术右移1位, 右移1位之后的结果为:1111 1110 1111 11UB,将其转换成十六进制表示为:FEFFHo所以, 执行指令\"SHRR1”后,R1的内容是FEFFH。2)除了第1条指令需要5个时钟周期输出结果外,后面的3条指令都只需要一个时钟周 期就可以输出结果,所以至少需要5+ (4-1) xl=8个时钟周期。3)各条指令语句的含义如下:I1\tLOADR1, [a]\t //将[a]单元中的内容取出,送入寄存器R1中I2\tLOADR2, [b] \t//将[b]单元中的内容取出,送入寄存器R2中I3\tADDR1, R2 \t\t//将R1与R2中的内容相加并送入寄存器R2中14\tSTORE R2, [x] //将寄存器R2中的內容取出并送入[x]单元很明显,指令13需要指令II与指令12的数据,所以存在数据相关,指令13必须等到指 令II、12的结果分别写回寄存器R1和R2,才能执行读寄存器操作,所以13的ID段被阻塞。 另外,由于指令13在ID段被阻塞,导致指令14不能完成取指令操作,因此指令14的IF段 被阻塞。4)该条语句对应的指令序列有两种情况,因为2x操作有加法(对应第一种)和左移(对 应第二种)两种方法实现。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image24.png'/>对应的执行过程示意图见表5.12。综上所述,执行这条语句至少需要17个时钟周期。"},{"id":"learncoder_158_23961","stem":"\t原理性地说明条件相对转移指令的指令格式和执行步骤。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"40.","type":"short_answer","answer":"条件相对转移指令,指令中给出操作码和相对转移偏移值,条件转移要依据 转移判断条件。指令的执行步骤如下:1)程序计数器(PC)的内容送地址寄存器。2)读内存,读出内容送指令寄存器(IR), PC内容自增1。3)执行条件转移指令时要判别指定的条件,若为真,则执行;尚未修改的PC (自增1 之前的值)内容送ALU,相对转移偏移值送ALU, ALU执行加操作,结果送入PC,否则顺 序地进入下一条指令的执行过程。"},{"id":"learncoder_158_23959","stem":"下面是一段MIPS指令序列:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image2.png'/>以上指令序列中,(\t)指令之间发生数据相关?","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"第1条和第2条指令之间关于$s3数据相关;第2条和第3条指令之间关于$t2数据相关;第2条和第4条指令之间关于$t2数据相关;第3条和第4条指令之间关于$t1数据相关。","type":"choice","options":{"C":"1和3、2和3、2和4、3和4","A":"1和2、2和3","B":"1和2、2和4","D":"1和2、2和3、2和4、3和4"},"answer":"D"},{"id":"learncoder_158_23962","stem":"\t简述计算机控制器的功能和执行一条指令所需的步骤。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"控制器部件是计算机的五大功能部件之一,其作用是向整机的每个部件(包 括控制器部件本身)提供协同运行所需要的控制信号。计算机最本质的功能是连续执行指令, 而每一条指令往往又要分成几个执行步骤才得以完成。因此又可以说,计算机控制器的基本 功能是依据当前正在执行的指令和它所处的执行步骤,形成(或称得到)并提供出在这一时 刻整机各部件要用到的控制信号。执行一条指令,要经过读取指令、分析指令、执行指令3 个阶段,控制器还要保证能按程序中设定的指令运行次序,自动地连续执行指令序列。"},{"id":"learncoder_158_23963","stem":"某机采用微程序控制方式,微指令字长为24位,采用水平型字段直接编码控制方式 和断定方式。共有微命令30个,构成4个互斥类,各包含5个、8个、14个和3个微命令, 外部条件共3个。1)控制存储器的容量应为多少?2)设计出微指令的具体格式。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"微指令字长为24位,操作控制字段被分为4组,第1组3位(表示5个微命 令),第2组4位(表示8个微命令),第3组4位(表示14个微命令),第4组2位(表示 3个微命令);判断测试条件字段2位,下地址字段9位。1)因为下地址字段有9位,所以控制存储器的容量为2,24位。2)微指令的具体格式如图5.43所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image14.png'/>"},{"id":"learncoder_158_23960","stem":"(2013年统考真题)某CPU主频为1.03GHz,采用4级指令流水线,每个流水段的 执行需要1个时钟周期。假定CPU执行了 100条指令,在其执行过程中,没有发生任何流水 线阻塞,此时流水线的吞吐率为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"由指令的流水线公式可知,当釆用4级流水执行100条指令,第1条指 令将在第4个时钟周期完成,以后的99条指令将在1个时钟周期内执行完成,所以在执行过 程中共用4+ (100-1) =103个时钟周期。由于CPU的主频是1.03GHz,也就是说,每秒钟有 1.03G个时钟周期,因此可以得到流水线的吞吐率(每秒执行的指令数)为1.03Gxl00/103=1.0xl09 条指令 /秒简答题","type":"choice","options":{"C":"l.Ox(10^9)条指令/秒","A":"0.25X(10^9)条指令/秒","B":"0.97x(10^9)条指令/秒","D":"1.03X(10^9)条指令/秒"},"answer":"C"},{"id":"learncoder_158_23957","stem":"流水线中有3类数据相关冲突:写后读相关、读后写相关、写后写相关。那么下列 3组指令中存在读后写相关的是()。I2\tADD R4,R5,R1;\t(R5)+(R1)→R4I2\tADD R2,R4,R5;\t(R4)+(R5)→R2I2\t SUB R3,R4,R5;\t(R4)-(R5)→R3","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"A选项,Ii指令运算结果应先写入Ri,然后在指令12中读出R]内容。由于b指令进入流 水线,使得b指令在h指令写入Ri前就读出Ri的内容,发生“写后读相关”。B选项,Ii指令应先读出R2内容并存入存储单元M中,然后b指令将运算结果写入R2 中。但由于12指令进入流水线,使得【2指令在II m 读出R2之前就写入R2,发生“读后写 相关”。C选项,【2指令应该在11指令写入R3之后,再写入R3。现由于【2指令进入流水线,如果 【2指令减法运算在11指令的乘法运算之前完成,使得【2指令在11指令写入R3之前就写入恥,导致R3内容错误,发生“写后写相关”。","type":"choice","options":{"D":"以上都不是","B":"Ii\tSTA M,R2;\t(R2)→M, M 为主存单元","C":"I1\tMUL R3,R2,R1;\t(R2)x(R1)→R3","A":"I1\tSUBR1,R2,R3;\t(R2)-(R3)→R1"},"answer":"B"},{"id":"learncoder_158_23952","stem":"(2016年统考真题)单周期处理器中所有指令的指令周期为一个时钟周期。下列关于单周期处理器的叙述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"单周期处理器即指所有指令的指令周期为一个时钟周期,D正确。因为 每条指令的CPI为1,要考虑比较慢的指令,所以处理器的时钟频率较低,B正确。单总线 结构将CPU、主存、I/O设备都挂在一组总线上,允许I/O设备之间、I/O设备与主存之间直 接交换信息,但多个部件只能争用唯一的总线,且不支持并发传送操作。单周期处理器并不 是可以采用单总线结构数据通路,故A错误。控制信号即指PC中的内容,PC用来存放当前 预执行指令的地址,可以自动+1以形成下一条指令的地址,在指令执行的过程中控制信号不 变化,C正确。","type":"choice","options":{"D":"每条指令的CPI为1","A":"可以采用单总线结构数据通路","B":"处理器时钟频率较低","C":"在指令执行过程中控制信号不变"},"answer":"A"},{"id":"learncoder_158_23953","stem":"(2017年统考真题)下列关于超标量流水线特性的叙述中,正确的是(\t)。I.能缩短流水线功能段的处理时间II.能在一个时钟周期内同时发射多条指令III.能结合动态调度技术提高指令执行并行性","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"超标量是指在CPU中有一条以上的流水线,并且每个时钟周期内可以完 成一条以上的指令,其实质是以空间换时间。I错误,影响流水线功能段的处理时间;II、 in正确,选c。","type":"choice","options":{"C":"仅II、III","B":"仅 I、III","A":"仅II","D":"I、II、III"},"answer":"C"},{"id":"learncoder_158_23954","stem":"(2017年统考真题)下列关于主存储器(MM)和控制存储器(CS)的叙述中,错误的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"主存储器就是我们通常说的主存,在CPU外,存储指令和数据,由RAM 和ROM来实现。控制存储器用来存放实现指令系统的所有微指令,是一种只读型存储器, 机器运行时只读不写,在CPU的控制器内。CS按照微指令的地址访问,B错误。","type":"choice","options":{"D":"MM用RAM和ROM实现,CS用ROM实现","B":"MM按地址访问,CS按内容访问","A":"MM在CPU外,CS在CPU内","C":"MM存储指令和数据,CS存储位置"},"answer":"B"},{"id":"learncoder_158_23956","stem":"在计算机体系结构中,CPU内部包括程序计数器(PC)、存储器数据寄存器(MDR)、指令寄存器(IR)和存储器地址寄存器(MAR)等。若CPU要执行的指令为MOVR0,#100 (即将数值100传送到寄存器R0中),则CPU首先要完成的操作是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"取指周期完成的微操作序列是公共的操作,与具体指令无关。CPU首先 需要取指令,取指令阶段的第一个操作就是将指令地址(PC中的内容)送往存储器地址寄 存器。题干中虽然给出了一条具体的指令“MOVR0,#100”,实际上CPU首先要完成的操作是 取指令,与具体指令没有关系。","type":"choice","options":{"D":"PC→IR","C":"PC→MAR","A":"100→R0","B":"100→MDR"},"answer":"C"},{"id":"learncoder_158_23958","stem":"\t某计算机的指令流水线由4个功能段组成,指令流经各功能段的时间(忽略各功能 段之间的缓存时间)分别为90ns、80ns、70ns和60ns,则该计算机的CPU时钟周期至少是 ( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"这个指令流水线的各功能段执行时间是不相同的。由于各功能段的时间 不同,计算机的CPU时钟周期应当以最长的功能段执行时间为准。也就是说,当流水线充满 之后,每隔90ns可以从流水线中流出一条指令(假设不存在断流)。归纳总结:对于各个功能段执行时间不同的流水线,受限于流水线中最慢子过程经过的 时间。","type":"choice","options":{"B":"80ns","D":"60ns","A":"90ns","C":"70ns"},"answer":"A"},{"id":"learncoder_158_23955","stem":"(2017年统考真题)下列关于指令流水线数据通路的叙述中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"五阶段流水线可分为取指IF、译码/取数ID、执行EXC、存储器读MEM、 写回Write Backo数字系统中,各个子系统通过数据总线连接形成的数据传送路径称为数据 通路,包括程序计数器、算术逻辑运算部件、通用寄存器组、取指部件等,不包括控制部件, 选A。","type":"choice","options":{"B":"包含算术逻辑运算部件ALU","A":"包含生成控制信号的控制部件","C":"包含通用寄存器组和取指部件","D":"由组合逻辑电路和时序逻辑电路组合而成"},"answer":"A"},{"id":"learncoder_158_23946","stem":"关于微指令操作控制字段的编码方法,下面叙述正确的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"直接编码无须进行译码,每个微命令对应并控制数据通路中的一个微操 作,所以微指令位数最多。归纳总结:对于相同的微命令数,微指令位数按字段间接编码、字段直接编码和直接编 码的顺序依次增加。","type":"choice","options":{"A":"直接编码、字段间接编码法和字段直接编码法都不影响微指令的长度","C":"一般情况下,字段间接编码法的微指令位数最多","B":"一般情况下,直接编码的微指令位数最多","D":"一般情况下,字段直接编码法的微指令位数最多"},"answer":"B"},{"id":"learncoder_158_23947","stem":"组合逻辑控制器和微程序控制器的主要区别在于( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"组合逻辑使用的是逻辑电路来实现微操作,而微程序控制器是使用微程 序来实现,所以主要的区别是位操作信号发生器的构成方法不同。","type":"choice","options":{"B":"数据通路不同","C":"CPU寄存器组织不同","D":"微操作信号发生器的构成方法不同","A":"ALU结构不同"},"answer":"D"},{"id":"learncoder_158_23944","stem":"微指令大体可分为两类:水平型微指令和垂直型微指令。下列几项中,不符合水平 型微指令特点的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"水平型微指令具有良好的并行性,每条微指令可以完成较多的基本微操 作,但垂直型微指令接近于机器指令的格式,每条微指令只能完成一个基本微操作。归纳总结:水平型微指令的特点包括并行操作能力强,效率高,灵活性强,执行一条机 器指令所需微指令的数目少,执行时间短,但微指令字较长,同时要求设计者熟悉数据通路。","type":"choice","options":{"C":"更多地体现了控制器的硬件细节","D":"微指令长度较长","B":"并行度较低","A":"执行速度快"},"answer":"B"},{"id":"learncoder_158_23948","stem":"指令从流水线开始建立时执行,设指令由取指、分析、执行3个子部件完成,并且 每个子部件的时间均为加,若采用常规标量单流水线处理器(即处理器的度为1),连续执行 12条指令,共需()。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"单流水线处理器执行12条指令的时间为[3+(12-l)]At=14Ato归纳总结:一个m段流水线的各段经过时间均为At,则需要T1=mxAt的流水建立时间, 之后每隔At就可流出一条指令,完成n个任务共需时间T = mxAt + (n-l)xAto","type":"choice","options":{"A":"12△t","D":"18△t","B":"14△t","C":"16△t"},"answer":"B"},{"id":"learncoder_158_23949","stem":"指令从流水线开始建立时执行,设指令流水线把一条指令分为取指、分析、执行三部分,且三部分的时间分别是2ns、2ns. 1ns,则100条指令全部执行完毕需要(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"此题综合考查了两个知识点。一个是指令流水线中机器周期的确定;另 外一个是流水线的时间计算(上题已经总结)。首先确定指令流水线的机器周期应以最长的执 行时间为准,即2ns。流水情况如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image12.png'/>执行第一条指令要2+2+2=6ns,以后每过2ns就完成一条指令,99条共要99x2=198ns。 但是因为最后一条指令的最后一个执行操作用时1ns,所以总时间为:2+2+2+99x2-1=203ns。","type":"choice","options":{"C":"193ns","D":"203ns","A":"163ns","B":"183ns"},"answer":"D"},{"id":"learncoder_158_23945","stem":"微指令操作控制字段的每一位代表一个控制信号,这种微程序的控制方式叫作(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"本题考查了微指令编码方式中直接编码的基本概念。","type":"choice","options":{"A":"字段直接编码","B":"字段间接编码","C":"混合编码","D":"直接编码"},"answer":"D"},{"id":"learncoder_158_23951","stem":"(2016年统考真题)在无转发机制的五段基本流水线(取指、译码/读寄存器、运算、 访存、写回寄存器)中,下列指令序列存在数据冒险的指令对是( )。I1:addRl5R25R3;(R2)+(R3)→RlI2:addR55R2?R4;(R2)+(R4)→R5I3:addR4,R5,R3;(R5)+(R3)→R4I4:addR55R23R6;(R2)+(R6)→R5","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"数据相关,指在一个程序中存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。当多条指令重叠处理时就会发生冲突。首先这 两条指令发生写后读相关,并且两条指令在流水线中执行情况如下图所示:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image13.png'/>指令12在时钟5时将结果写入寄存器(R5),但指令13在时钟3时读寄存器(R5)。本 来指令12应先写入R5,指令13后读R5,结果变成指令13先读R5,指令12后写入R5,因 而发生数据冲突。","type":"choice","options":{"B":"I2 和 I3","D":"I3 和 I4","C":"I2 和 I4","A":"I1 和 12"},"answer":"B"},{"id":"learncoder_158_23950","stem":"流水线计算机中,下列语句发生的数据相关类型是( )。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第5章)/image1.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"数据相关类型包括RAW (写后读)、WAW (写后写)、WAR (读后写)。 设有i和j两条指令,i指令在前,j指令在后,则3种相关的含义如下。.•RAW(写后读):指令j试图在指令i写入寄存器前就读出该寄存器的内容,这样指 令j就会错误地读出该寄存器旧的内容。•WAR(读后写):指令j试图在指令i读出该寄存器前就写入该寄存器,这样指令i 就会错误地读出该寄存器的新内容。•WAW(写后写):指令j试图在指令i写入寄存器前就写入该寄存器,这样两次写的 先后次序被颠倒,就会错误地使由指令i写入的值成为该寄存器的内容。在这两条指令中,都对R1进行操作,其中前面对R1写操作,后面对R1读操作,因此 发生写后读相关。","type":"choice","options":{"D":"读后读","B":"读后写","A":"写后写","C":"写后读"},"answer":"C"},{"id":"learncoder_158_23938","stem":"(2014年统考真题)某计算机采用微程序控制器,共有32条指令,公共的取指令微 程序包含2条微指令,各指令对应的微程序平均由4条微指令组成,采用断定法(下地址字 段法)确定下条微指令地址,则微指令中下地址字段的位数至少是","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"计算机共有32条指令,各个指令对应的微程序平均为4条,则指令对应的微指令为32x4=128条,而公共微指令还有2条,整个系统中微指令的条数一共为128+2=130 条,所以需Mlog2130>8位才能寻址到130条微指令,故选C。\t、","type":"choice","options":{"B":"6","A":"5","C":"8","D":"9"},"answer":"C"},{"id":"learncoder_158_23941","stem":"\t下列不属于微指令结构设计所追求的目标是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"首先D选项是明显错误的。微指令结构设计的目的之一是希望能够用最 短的微指令长度来实现最多的微操作,所以应该是减小控制存储器的容量才对。A、E、C选 项都是微指令结构设计所追求的目标。归纳总结:设计微指令结构时,所追求的目标为:有利于减小控制存储器的容量;有利 于提高微程序的执行速度;有利于微指令的修改;有利于微程序设计的灵活性;有利于缩短 微指令的长度。","type":"choice","options":{"D":"增大控制存储器的容量","B":"提高微程序设计的灵活性","A":"提高微程序的执行速度","C":"缩短微指令的长度"},"answer":"D"},{"id":"learncoder_158_23940","stem":"在微程序控制器中,微程序的入口微地址是通过(\t)得到的。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"每一条机器指令对应一段微程序,微程序的入口微地址是由机器指令的 操作码形成的。归纳总结:当公用的取指微程序从主存中取出机器指令之后,由机器指令的操作码字段 指出各个微程序的入口地址(初始微地址)。","type":"choice","options":{"B":"前条微指令","C":"PC+1","D":"指令操作码映射","A":"程序计数器PC"},"answer":"D"},{"id":"learncoder_158_23943","stem":"微程序控制器的速度比硬布线控制器慢,主要是因为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"由于微程序控制器增加了控制存储器,所以指令的执行速度比硬布线控 制器慢。解题技巧:微指令是存放在控制存储器中的,所以应当从控制存储器读取微指令。","type":"choice","options":{"D":"增加了从控制存储器读取微指令的时间","B":"增加了从主存储器读取微指令的时间","C":"增加了从指令寄存器读取微指令的时间","A":"增加了从磁盘存储器读取微指令的时间"},"answer":"D"},{"id":"learncoder_158_23942","stem":"在CPU的状态字寄存器中,若符号标志位SF为“1”,表示运算结果是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"状态字寄存器用来存放PSW, PSW包括两个部分:一是状态标志,如进位标志(C)、 结果为零标志(Z)等,大多数指令的执行将会影响到这些标志位;二是控制标志,如中断标志、陷阱标志等。SF符号标志位,当运算结果最高有效位是1, SF=1;否则,SF=Oo当此数是有符号数 时,该数是个负数;当此数为无符号数时,SF的值没有参考价值。","type":"choice","options":{"A":"正数","C":"非正数","D":"不能确定","B":"负数"},"answer":"D"},{"id":"learncoder_158_23939","stem":"微程序控制器中,机器指令与微指令的关系是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"通常,一条机器指令对应一段微程序,这段微程序是机器指令的实时解 释器。归纳总结:程序最终由机器指令组成,由软件设计人员事先编制好并存放在主存或辅存 中。微程序由微指令组成,用于描述机器指令,由计算机的设计者事先编制好并存放在控制 存储器中。","type":"choice","options":{"C":"一段机器指令组成的程序可由一个微程序来执行","A":"一条机器指令由一条微指令来执行","B":"一条机器指令由一段用微指令编成的微程序来解释执行","D":"每一条微指令由一条机器指令来解释执行"},"answer":"B"},{"id":"learncoder_158_23932","stem":"(\t)不是常用三级时序系统中的一级。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"三级时序系统包括机器周期、节拍和工作脉冲。归纳总结:三级时序系统是小型机常用的时序系统,在机器周期间〉节拍电位间、工作脉冲间既不允许有重叠交叉,也不允许有空隙,应该是一个接一个的准确连接。","type":"choice","options":{"A":"指令周期","D":"定时脉冲","C":"节拍","B":"机器周期"},"answer":"A"},{"id":"learncoder_158_23931","stem":"从一条指令的启动到下一条指令启动的时间间隔称为( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"指令周期指从取指令、分析、取数到执行完该指令所需的全部时间,即 两条指令的间隔时间。归纳总结:通常把一个指令周期划分为若干个机器周期,一个机器周期中又含有若干个 时钟周期。解题技巧:除去D选项外,其余的周期时间都小于完整地执行「条指令的时间间隔。","type":"choice","options":{"A":"时钟周期","D":"指令周期","C":"节拍","B":"机器周期"},"answer":"D"},{"id":"learncoder_158_23935","stem":"采用同步控制的目的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"同步控制采用统一的时钟信号,以最复杂指令的操作时间作为统一的时 间间隔标准。这种控制方式设计简单,容易实现。归纳总结:同步控制方式即固定时序控制方式,各项操作都由统一的时序信号控制,在 每个机器周期中产生统一数目的节拍电位和工作脉冲。这种控制方式设计简单,容易实现, 但是对于许多简单指令来说会有较多的空闲时间,造成大量的时间浪费,从而影响了指令的 执行速度。","type":"choice","options":{"B":"简化控制时序","A":"提高执行速度","C":"满足不同操作对时间安排的需要","D":"满足不同设备对时间安排的需要"},"answer":"B"},{"id":"learncoder_158_23934","stem":"同步控制是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"本题考查同步控制的基本概念。同步控制是由统一时序信号控制的方式。","type":"choice","options":{"A":"只适用于CPU控制的方式","C":"所有指令执行时间都相同的方式","D":"不强调统一时序信号控制的方式","B":"由统一时序信号控制的方式"},"answer":"B"},{"id":"learncoder_158_23937","stem":"下列说法中正确的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"微程序控制器比硬布线控制器的速度慢,所以A选项错;RPC是微程序 计数器,不能取代PC的功能,所以B选项错(一般来讲都不会使用pPC,而是使用CMAR 自加1来实现微指令的顺序执行);CPU周期又称为机器周期,而不是指令周期,所以D选 项错。","type":"choice","options":{"C":"控制存储器可以用掩膜ROM, EPROM或闪速存储器实现","A":"微程序控制方式与硬布线控制方式相比较,前者可以使指令.的执行速度更快","D":"指令周期也称为CPU周期","B":"若采用微程序控制方式,则可用piPC取代PC"},"answer":"C"},{"id":"learncoder_158_23933","stem":"下列说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"指令中给出了存储器地址,表明有操作数在存储器中,所以要访存,故 选Co归纳总结:加法指令的执行周期是否需要访存,取决于操作数放在哪里,操作数在主存 中就需要访存,操作数不在主存中就不需要访存。","type":"choice","options":{"C":"指令的地址码给出存储器地址的加法指令,在执行周期一定要访存","D":"指令的地址码给出存储器地址的加法指令,在执行周期一定不需要访存","B":"加法指令的执行周期一定不要访存","A":"加法指令的执行周期一定要访存"},"answer":"C"},{"id":"learncoder_158_23936","stem":"计算机执行乘法指令时,由于其操作复杂,需要更多的时间,通常采用(\t)控制方式。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"乘法指令属于中央控制与局部控制相结合的典型特例。归纳总结:中央控制与局部控制相结合的方式可以将执行周期需要更多时钟周期的指令 安排局部控制节拍,并将其插入到中央控制的执行周期内。","type":"choice","options":{"D":"同步控制与异步控制相结合","A":"异步控制","C":"中央控制与局部控制相结合","B":"延长机器周期内的节拍数"},"answer":"C"},{"id":"learncoder_158_23925","stem":"指令寄存器中寄存的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"指令寄存器用来存放从存储器中取出的指令。归纳总结:当指令从主存取出存于指令寄存器之后,在执行指令的过程中,指令寄存器 的内容不允许发生变化,以保证实现指令的全部功能。","type":"choice","options":{"A":"下一条要执行的指令","C":"正在执行的指令","B":"已执行完了的指令","D":"要转移的指令"},"answer":"C"},{"id":"learncoder_158_23928","stem":"在取指操作结束后,程序计数器中存放的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"在取指周期的微指令序列里面,总会看到有PC+1-PC,所以取指操作结 束后,程序计数器存放的是下一条指令的地址。","type":"choice","options":{"C":"下一条指令的地址","D":"已经执行指令的计数值","B":"程序中指令的数量","A":"当前指令的地址"},"answer":"C"},{"id":"learncoder_158_23924","stem":"(2015年中科院真题)在程序执行过程中,(\t)控制计算机的运行总是处于取指令、分析指令和执行指令的循环之中。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"CPU的功能包括指令控制、操作控制、时间控制、数据加工和中断处理, 其中指令控制功能即控制计算机的运行总是处于取指令、分析指令和执行指令的循环之中, 指令控制功能是由控制器来实现的。故选A。可能有的考生会误选B选项,认为题目描述属于CPU的功能,但CPU的功能不仅仅是 指令控制,选择控制器更准确。","type":"choice","options":{"C":"指令存储器","D":"指令译码器","A":"控制器","B":"CPU"},"answer":"A"},{"id":"learncoder_158_23927","stem":"已知一台时钟频率为2GHz的计算机的CPI为1.2o某程序P在该计算机上的指令条数为4x109。若在该计算机上,程序P从开始启动到执行结束所经历的时间是4s,则运行P 所用CPU时间占整个CPU时间的百分比大约是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"程序的执行时间1.2x4x(109/2)s=2.4s,所占百分比为(2.4/4)xl00%=60%。","type":"choice","options":{"D":"100%","C":"80%","B":"60%","A":"40%"},"answer":"B"},{"id":"learncoder_158_23926","stem":"\t关于通用寄存器,下列说法正确的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"存放指令的寄存器是指令寄存器(IR),存放程序状态字的寄存器是程序 状态学寄存器(PSWR),这些寄存器都不属于通用寄存器。其次,通用寄存器并不一定本身 都具有计数和移位功能。归纳总结:通常,CPU中设置有多个通用寄存器,通用寄存器可以由程序编址访问。通 用寄存器可用来存放原始数据和运算结果,有的还可以作为变址寄存器、计数器、地址指针 等。另外,通用寄存器的内容一般都是可被程序员改变的,并且改变之后并不影响机器的正 常运行,所以像指令寄存器、数据寄存器、状态寄存器都不属于通用寄存器。","type":"choice","options":{"C":"本身具有计数逻辑与移位逻辑的寄存器","D":"可存放运算结果的寄存器","B":"可存放程序状态字的寄存器","A":"可存放指令的寄存器"},"answer":"D"},{"id":"learncoder_158_23930","stem":"下列说法中正确的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"微程序控制器比硬布线控制器的速度慢,所以A选项错通常控制存储器 釆用ROM组成,所以B选项错;微指令计数器决定的是微指令的执行顺序,所以C选项错。","type":"choice","options":{"A":"采用微程序控制器是为了提高速度","C":"微指令计数器决定指令的执行顺序","B":"控制存储器采用高速RAM电路组成","D":"—条微指令放在控制存储器的一个单元中"},"answer":"D"},{"id":"learncoder_158_23929","stem":"指令译码器进行译码的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"指令译码器对存放在指令寄存器中指令的操作码部分进行蒔码,以识别出 具体的要做的操作,并产生相应的控制信号。归纳总结:指令译码器又称为操作码译码器,暂存在指令寄存器中的指令只有在其操作 码经过译码之后才能识别出这是一条什么样的指令;并产生相应的控制信号提供给微操作信 号发生器。解题技巧:通常一条指令由操作码字段和地址码字段组成,.指令译码器仅对其操作码字 段进行译码,而不是对整条指令进行译码。","type":"choice","options":{"C":"指令的地址","A":"整条指令","B":"指令的操作码字段","D":"指令的操作数字段"},"answer":"B"},{"id":"learncoder_158_23922","stem":"下列部件中不属于控制部件的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"CPU控制器主要由3个部件组成:指令寄存器、程序计数器和操作控制器。 状态条件寄存器通常属于运算器的部件,用以保存由算术指令和逻辑指令运行或测试的结果 建立的各种条件码内容,如运算结果进位标志(C)、运算结果溢出标志(V)、运算结果为零 标志(Z)、运算结果为负标志(N)、中断标志(T)、方向标志(D)和单步标识等。","type":"choice","options":{"B":"操作控制器","A":"指令寄存器","D":"状态条件寄存器","C":"程序计数器"},"answer":"D"},{"id":"learncoder_158_23923","stem":"下列部件中不属于执行部件的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":" 一台数字计算机基本上可以划分为两大部分:控制部件和执行部件。控制 器就是控制部件,而运算器、存储器、外部设备相对控制器来说就是执行部件。控制部件与 执行部件的一种联系就是通过控制线。控制部件通过控制线向执行部件发出各种控制命令, 通常这种控制命令叫作微命令,而执行部件接受微命令后所执行的操作就叫作微操作。控制 部件与执行部件之间的另一种联系就是反馈信息。执行部件通过反馈线向控制部件反映操作 情况,以便使得控制部件根据执行部件的状态来下达新的微命令,这也叫作“状态测试”。","type":"choice","options":{"B":"存储器","C":"运算器","D":"外部设备","A":"控制器"},"answer":"A"},{"id":"learncoder_158_20442","stem":"某计算机的字长为32位,指令采用等长指令字格式,指令字长为32位。若MAR长22 位,主存储器按字编址。(1)\t指岀主机中ACC、IR、MDR、PC等寄存器或部件的位数。(2)\t该计算机支持的最大主存储器容量为多少?(3)\t写出硬联线控制器完成STA Y指令需要发出的全部微操作命令及节拍安排。(4)\t若采用微程序控制,还需要增加哪些微操作?","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"27. 空","type":"short_answer","answer":"(1)主机中寄存器或部件的位数为:ACGJR和MDR均为32位,PC为22位。 (2)该计算机支持的最大主存储器容量为4Mx32位。(3)微操作命令及节拍安排:TO ‥PC一→MAR,1一→ RTl :M(MAR)一→MDR, (PC) +1-→PCT2 :MDR-→IR , OP(IR)一→IDTO‥Ad(IR)一→MAR,1一→ w Tl‥ACC一→MDR;(PC)+1→PC l ’ .T2‥MDR一→M(MAR)(4)若采用微程序控制,在取指阶段需要增加的微操作:Ad(CMDR)→CMAR, OP(IR)-→CMAR;在执行阶段需要增加的微操作:Ad( CMDR)→微地址形成部件→CMARo “"},{"id":"learncoder_158_20439","stem":"可改变程序执行顺序称为程序控制类指令。以下有关分支冒险和分支预测的叙述中,(\t)是正确的。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"程序控制类指令可能会由于控制(分支)冒险而产生阻塞。每次进行简单(静态) 预测的预测结果都是一样的。预测错误时必须把已取到流水线中的错取指令从流水线中 排出。","type":"choice","options":{"B":"每次进行简单(静态)预测的预测结果可能是不一样的","A":"程序控制类指令不会由于控制(分支)冒险而产生阻塞\t'","D":"如果预测错误,已取到流水线中的错取指令依然要在流水线中继续执行","C":"动态预测(根据分支指令历史记录进行预测)的成功率能达90%"},"answer":"D"},{"id":"learncoder_158_20443","stem":"某指令流水线分为五级,分别完成取址(IF),译码并取数(ID),执行(EX),访存 (MAN)写结果(WR)设完成各阶段操作的时间依次为90 ns、60 ns、70 ns、100 ns、50 ns。 试问流水线的时钟周期应取何值?若第一条和第二条指令发生数据相关,试问第二条指令需 推迟多少时间才能不发生错误?若相邻两条指令发生数据相关,而不推迟第二条指令的执行 可采取什么措施?","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"流水线的时钟周期应取其中最长的时闸段,即190.nso第二条指令需推迟300 ns(即等待上一条指令完成丑x、MEM、wR三个周期后才能开始ID) ,才能不发生错误。 . .若相邻两条指令发生数据相关,而不推迟第二条指令的执行可采取的措施是在访存与执行之间设置相关专用通路。"},{"id":"learncoder_158_20444","stem":"现有一个三段的指令流水线,各段经过时间依次为Δt,2Δt,Δt。请画出该流水线连续处 理三条不相关指令的时空图,并计算流水线的吞吐率、加速比和效率。三、答案","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第11章/image1.png'/>流水线的吞吐率TP=3/8×100%=37.5%加速比=(4x3)/8=1.5效率E=(4×3)/(8×3)× '100%=50%。"},{"id":"learncoder_158_20435","stem":"已知条件转移指令(即所谓分支指令)在条件成立时将在流水线的第4段改变PC的值(从而改变执行指令的顺序),则该流水线的分支延迟槽数为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"分支延迟槽是指延迟转移技术中在分支指令后面填写与分支指令无关的指令的位 置,其槽数(即填入无关指令的条数)等于延迟损失时间片(时钟周期数),而延迟损失时间片等 于为了避免出错应该插入空泡或者空指令NOP的数量。对于在第N段改变PC的流水线,其延 迟损失时间片等于C-1。","type":"choice","options":{"B":"2","A":"1","C":"3","D":"4"},"answer":"C"},{"id":"learncoder_158_20432","stem":"下列关于心指令流水线”的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"每个流水段之间的流水段寄存器的位数是不同的。","type":"choice","options":{"D":"指令流水线可以在一个时钟周期内读/写不同的通用寄存器","A":"随着流水段个数的增加,流水段之间缓冲开销的比例增大","C":"指令流水线可以同时访问指令Cache和数据Cache","B":"每个流水段之间的流水段寄存器的位数一定相同"},"answer":"B"},{"id":"learncoder_158_20436","stem":"下列各种指令流水线中,理想情况下,CPI等于1的()。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"对于采用普通指令流水线的处理器,在理想情况下(即不存在流水线冒险),它的 CPI等于1。如果存在流水线冒险,CPI将增大°超流水线是将流水线分得更细(例”如10段以 上),但它的CPI仍等于lo超长指令字(Very Long Instruction Word,VLIW )和超标量流水线都属 于多发射流水线。只要是多发射流水线,理想情况下,其CPI都小于1。VLIW属于静态多发射 流水线,而超标量流水线大多是动态多爱射流水线。所谓动态流水线是指指令在流水线中的执 行顺序是由流水线硬件实时调度或动态安排的。","type":"choice","options":{"D":"动态多发射流水线","A":"超流水线","B":"超长指令字(VLIW)","C":"超标量流水线"},"answer":"A"},{"id":"learncoder_158_20433","stem":"某包含M条指令的程序在一个五段的指令流水线上执行。假设流水线的时钟周期为 T,不考虑任何其他的额外开销和冲突,则执行完该程序所用的时间是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"此题考查程序在指令流水线上执行时间的计算。","type":"choice","options":{"B":"(4+M)×T","A":"(5+M)×T","C":"5+M×T","D":"4+M×T"},"answer":"B"},{"id":"learncoder_158_20434","stem":"解决数据相关(数据冒险)的措施中,(\t)不涉及改动、增加硬件。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"“数据旁路(转发)”和“插入空泡(停顿)”完全是由硬件来实现,而“插入空指令 NOP ”完全是由软件(编译器)来实现。","type":"choice","options":{"A":"数据旁路(转发)","C":"插入空指令(NOP)","B":"插入空泡(停顿)","D":"没有"},"answer":"C"},{"id":"learncoder_158_20431","stem":"下列关于“指令流水线”的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"此题考查的知识点包括:指令流水线将延长一条指令的执行时间。一个主要原因就 是尽管各个流水段处理指令的时间并不相同,但是只能取最长的时间作为流水线的工作周期;实 现指令流水线需要增加额外的硬件,至少在流水段之间增加锁存器。这也是指令流水线将延长 一条指令的执行时间的重要原因;指令流水线可以提高指令执行的吞吐率;指令流水线存在一个 建立时间,即第一条指令进入流水线到它流岀的时间间隔。即便是理想情况下,在第一条指令流 出之前,指令流水线在每个时钟内都没有完成任何一条指令。","type":"choice","options":{"C":"指令流水线可以提高指令执行的吞吐率","D":"理想情况下,每个时钟内都有一条指令在指令流水线中完成","B":"实现指令流水线并不需要增加额外的硬件","A":"指令流水线可以缩短一条指令的执行时间"},"answer":"C"},{"id":"learncoder_158_20438","stem":"以下是有关数据冒险和转发技术的叙述中.(\t)是正确的。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"相邻两条ALU运算指令之间,相隔一条的两条ALU运算指令之间和相隔一条的 Load指令与ALU运算指令之间的数据冒险能通过转发解决;单纯依靠“插入nop指令”就能消 除所有数据冒险,但是这样做效率太低。如果通过调整指令顺序,再加上插入nop指令,就能提 高流水线的效率;Load-Use数据冒险是由于Load指令的目的寄存器等于后一条指令的源寄存 器而导致的。对于五段流水线(取指、译码、执行、访存、写回),Load指令在最后一段写入目的寄 存器,而后继指令在第三段读寄存器源,所以Load-Use数据冒险至少要引起一个时钟周期的阻 塞;通常,分支指令并不改变任何寄存器的值,所以与紧随其后的ALU运算指令根本不会发生数 据冒险。","type":"choice","options":{"C":"五段流水线中Load-Use.数据冒险不会引起一个时钟周期的阻塞","A":"所有数据冒险都能通过转发解决","B":"可以通过调整指令顺序和插入nop指令消除所有数据冒险","D":"—条分支指令与紧随其后的一条.ALU运算指令肯定会发生数据冒险"},"answer":"B"},{"id":"learncoder_158_20437","stem":"下列关于“动态流水线和超标量处理器”的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"超标量技术是采用更多猪令执行部件来构成多条流水线的技术。","type":"choice","options":{"A":"超标量处理器中一定有多个不同的指令执行单元","C":"超标量处理器不一定都采用动态流水线","B":"动态流水线执行指令的顺序不一定是输入指令的顺序","D":"超标量技术是指采用更多流水段个数的流水线技术"},"answer":"D"},{"id":"learncoder_158_20425","stem":"下列选项中,不是用来解决分支相关(分支冒险)的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"分支相关(分支冒险)是由于条件转移指令(即所谓分支指令)在条件成立时改变执 行指令的顺序而导致需要取消已经进入流水线的指令而产生的。解决办法包括:分支预测、延迟 转移、提前形成条件码、插入空指令NOP、插入空泡(停顿)","type":"choice","options":{"A":"数据旁路(转发)","B":"分支预测","C":"插入空指令NOP","D":"延迟转移"},"answer":"A"},{"id":"learncoder_158_20429","stem":"通常情况下,微指令位数最长的编码方法是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"此题考查不同的微指令编码方法的特点:直接表示法/直接控制法速度最快,但位数 最长,编码空间利用率最低。\t","type":"choice","options":{"A":"直接表示法/直接控制法","B":"字段直接编码表示法","C":"字段间接编码表示法","D":"混合表示法"},"answer":"A"},{"id":"learncoder_158_20426","stem":"下列特征中,不属于有利于实现指令流水线的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"有利于实现流水线的指令特征微指令字等长.Load/Store指令风格(隐含寻址方式 简单)、指令格式规整统一、数据和指令在存储器中“对齐”存放。","type":"choice","options":{"D":"指令格式规整统一","B":"Load/Store指令风格","C":"寻址方式灵活多样","A":"指令字等长"},"answer":"C"},{"id":"learncoder_158_20430","stem":"下列关于“水平型微指令与垂直型微指令”的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"此题考查的知识点包括:水平型微指令的执行速度要快于垂直型微指令,水平型微 指令的长度要长于垂直型微指令,水平型微指令的编码空间利用率较低,垂直型微指令的格式与 普通机器指令的格式相仿。","type":"choice","options":{"B":"水平型微指令的长度要短于垂直型微指令","A":"水平型微指令的执行速度要慢于垂直型微指令","D":"垂直型微指令中包含微操作码字段","C":"水平型微指令的编码空间利用率高"},"answer":"D"},{"id":"learncoder_158_20427","stem":"一个四级流水线的处理器,连续向此流水线输入12条指令,则在第12个时钟周期技术时,共执行完的指令条数为(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"此题考查流水线的工作原理。共执行完的指令条数为1 + (12-4 )=9。","type":"choice","options":{"D":"10","A":"7","B":"8","C":"9"},"answer":"C"},{"id":"learncoder_158_20424","stem":"下列选项中,不是用来解决数据冒险(数据相关)的是()","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"数据冒险的解决办法包括:数据旁.路(转发)、插入空指令NOP、插入空泡(停顿)、 在编译时调整指令顺序。\t","type":"choice","options":{"A":"数据旁路(转发)","C":"插入空指令NOP","D":"插入空泡(停顿)","B":"分支预测"},"answer":"B"},{"id":"learncoder_158_20428","stem":"在微程序控制的机器中,机器指令与微指令的关系是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"每条机器指令由一段用微指令组成的微程序来解释执行。","type":"choice","options":{"C":"每条机器指令由一段用微潴令组成的微程序来解释执行","A":"每条机器指令由一条微指令来执行","D":"—段机器指令组成的程序由一条微指令来执行","B":"每一条微指令由若干条机器指令组成"},"answer":"C"},{"id":"learncoder_158_20419","stem":"已知一台时钟频率为2 GHz的计算机的CPI为1.2。某程序P在该计算机上的指令条数 为4xl09o若在该计算机上,程序P从开始启动到执行结束所经历的时间是4 s,则运行P所用 CPU时间占整个CPU时间的百分比大约是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"此题考查如何根据时钟频率、指令条数和CPI来计算程序执行时间. 1.2x4x109/ 2GHz = 2.4s, ((2.4/4))*100% =60% o\t","type":"choice","options":{"D":"100%","C":"80%","B":"60%","A":"40%"},"answer":"B"},{"id":"learncoder_158_20422","stem":"在遇到一些情况时,必须阻塞或停顿(Stall)指令流水线,否则后续指令将会被流水线错误地执行。这种现象称为“流水线冒险(Hazard)”或“流水线相关”。下列选项中,不属于“流水 线冒险”的(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"流水线冒险包括:结构冒险、数据冒险和控制冒险。其中,结构冒险(硬件资源冲 突)是由于不同指令同时想使用一个部件而造成的,数据冒险(数据相关)是指后面指令想使用 前面指令的结果时该结果还没有产生,控制冒险是指指令执行的顺序发生改变而引起的流水线 停顿,各类转移指令、分支指令以及中断或异常的出现都会引起控制冒险","type":"choice","options":{"B":"数据冒险","D":"控制冒险","A":"结构冒险","C":"指令冒险"},"answer":"C"},{"id":"learncoder_158_20423","stem":"下列选项中,用来解决结构冒险(硬件资源冲突)的是()","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"结构冒险的解决办法包•括:设置多端口的寄存器堆(也叫寄存器文件);采朋哈佛结 构存储器(例如分离型Cache)将指令和数据分开存储,预取指令,釆用Load/Store指令风格,多 体交叉存储器。","type":"choice","options":{"A":"数据旁路(转发)","C":"延迟转移","B":"插入空指令nop","D":"分离型Cache"},"answer":"D"},{"id":"learncoder_158_20420","stem":"控制器的功能是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"控制器的功能包括取指令和译码(含产生操作控制信号)。如果把解释指令仅分成 “取指令\"和“执行”两个阶段,那么“取指令”操作包括对指令进行译码「要注意审题:控制器与 指令译码器的区别,控制器包含指令译码器;指令译码器的功能就是对指令操作码进行译码,给 出当前指令的执行过程中所有到的操作控制信号。\t","type":"choice","options":{"D":"从主存取指令,并对指令操作码进行译码,生成相应的操作控制信号","C":"对指令操作码进行译码","B":"从主存取指令","A":"产生时序信号"},"answer":"D"},{"id":"learncoder_158_20421","stem":"相对于硬布线控制器,微程序控制器的特点是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"考察硬布线控制器和微程序控制器的特点。","type":"choice","options":{"A":"指令执行速度较快,修改指令的功能或扩展指令集难","C":"指令执行速度较慢,修改指令的功能或扩展指令集难","B":"指令执行速度较快,修改指令的功能或扩展指令集容易","D":"指令执行速度较慢,修改腊令的功能或扩展指令集容易"},"answer":"D"},{"id":"learncoder_158_20416","stem":"下列选项中,不属于CPU功能的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"DMA操作由DMA控制器来执行。CPU的动能还包括发现和处理“异常”。","type":"choice","options":{"A":"执行指令","B":"控制执行指令的顺序","D":"检测并响应中断","C":"执行DMA操作"},"answer":"C"},{"id":"learncoder_158_20417","stem":"已知一个多周期处理器各主要功能单元的操作时间如下:指令存储器和数据存储器 300 ps;ALU 200 ps;寄存器堆100 ps,不考虑多路选择器(MUX)、控制单元(CU)、PC、扩展单元 和传输线路的延迟,则该CPU的时钟周期(机器周期)应确定为( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"多周期处理器时钟周期的确定原则是完成一次主存访问/系统总线操作。","type":"choice","options":{"A":"300 ps","B":"200 ps","D":"600 ps","C":"100 ps"},"answer":"A"},{"id":"learncoder_158_20418","stem":"—个单周期处理器有以下几类MIPS指令:R型运算指令、I型运算指令.Load/Store指令、分支指令Beq、跳转指令JMP。若多路选择器:控制单元、PC、扩展单元和传输线路都不考虑 延迟,各主要功能单元的操作时间为:指令存储器和数据存储器为300 ps;ALU为200 ps;寄存需 文件为100 ps,则该CPU的时钟周期最少应该是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.中央处理器","analysis":"单周期处理器时钟周期取为“Load”指令的执行时间(最长),它等于读指令存储器 (取指)的时间、读寄存器堆(取形式地址)的时间、ALU(计算有效地址)的时间、读数据存储器 (取操作数)的时间与写寄存器堆(将操作数写入目的寄存器)的时间之和。1 ns =1000 ps。,","type":"choice","options":{"A":"400 ps","B":"300 ps","D":"1 ns","C":"200 ps"},"answer":"D"},{"id":"learncoder_157_24006","stem":"中断判优逻辑和总线仲裁方式相类似,下列说法中,正确的是(\t)。I.在总线仲裁方式中,独立请求方式响应时间最快,是以增加处理器开销和增加控制 线数为代价的II.在总线仲裁方式中计数器查询方式,若每次计数都从“0”开始,则所有设备使用总 线的优先级相等III.总线仲裁方式一般是指I/O设备争用总线的判优方式,而中断判优方式一般是指I/O 设备争用CPU的判优方式IV.中断判优逻辑既可以通过硬件实现,也可以通过软件实现","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":" I:独立请求方式中,每个I/O接口都有各自的总线请求和总线同意线, 共2n根控制线,以此来获得高响应速度,故I正确。II:计数器查询方式中,计数器有两种计数方式:①计数器每次判优都从“0”开始,此 时一旦设备的优先级次序被固定后,设备的优先级就按0, 1, 2,…,n的顺序降序排列, 永远不能改变;②计数器也可以从上一次的终点开始计数,即是一种循环方法,此时所有设 备使用总线的优先级相等,故II错误。III:总线仲裁方式是总线被争用的判优方式,从设备一般是I/O设备,但也可以是硬盘 (外存),故in正确。IV:叙述正确。","type":"choice","options":{"B":"I、III、IV","A":"I、III","D":"I、 IV","C":"I 、 II、 IV"},"answer":"B"},{"id":"learncoder_157_24009","stem":"假设一个32位的处理器配有16位的外部数据总线,时钟频率为50MHz,若总线传 输的最短周期为4个时钟周期,试问处理器的最大数据传输率是多少?若想提高一倍数据传 输率,可采用什么措施?(注:仅可改变一个指标)","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"34.","type":"short_answer","answer":"根据时钟频率可计算出总线传输的最短传输周期为T=4/ (50MHz) =80x10-9s对于总线宽度为16位的总线,最大数据传输率为16bit/T=2B/ (80x10-9s) =25MB/s若想提高一倍数据传输率,可采用两种方式:1)将总线宽度扩大为32bit, CPU时钟频率仍为50MHz,则数据传输率为32bit/T=4B/ (80xl0-9s) =50MB/s2)将时钟频率扩大为100MHz,总线宽度仍为16bit,根据时钟频率可计算出总线传输的 最短传输周期为T=4/ (100MHz) =40x10-9s此时最大数据传输率为16bit/T=2B/ (40x10-9s) =50MB/s"},{"id":"learncoder_157_24007","stem":"在下列各种情况中,最应采用异步传输方式的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"在异步定时方式中,没有统一的时钟,也没有固定的时间间隔,完全依 靠传送双方相互制约的\"握手”信号来实现定时控制。异步定时方式能保证两个工作速度相差很大的部件或设备之间可靠地进行信息交换。I/O 接口和打印机之间的速度差异较大,应采用异步传输方式来提高效率。","type":"choice","options":{"C":"CPU和PCI总线交换信息","A":"I/O接口与打印机交换信息","D":"由统一时序信号控制方式下的设备","B":"CPU与主存交换信息"},"answer":"A"},{"id":"learncoder_157_24010","stem":"某总线时钟频率为100MHz,在一个64位总线中,总线数据传输的周期是10个时 钟周期传输25个字的数据块,试问:1)总线的数据传输率是多少?2)如果不改变数据块的大小,而是将时钟频率减半,这时总线的数据传输率是多少?参考答案及解析","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"空","type":"short_answer","answer":"1)根据时钟频率为100MHz,可以计算出时钟周期为10%,则一个总线传输 周期为10±,也就是说,10±可以传送64x25bit的信息,即200Bo故总线的数据传输率为 200B/10-7s=2000MB/s2)如果将时钟频率减半,可以计算出时钟周期为2x10-8,则一个总线传输周期为2x10-7, 也就是说,2x10-7s可以传送200B的信息,故总线的数据传输率为 200B/2x10-7s=1000MB/s"},{"id":"learncoder_157_24008","stem":"某机器I/O设备采用异步串行传送方式传送字符信息,字符信息格式为1位起始位、 8位数据位、1位校验位和1位停止位。若要求每秒传送640个字符,那么该设备的有效数据 传输率应为()。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"尽管每个字符占用libit,但是有效数据只有8bito故该设备的有效数据 传输率=8x640bit/s=640B/s。简答题","type":"choice","options":{"C":"6400B/S","B":"640B/s","D":"6400b/s","A":"640b/s"},"answer":"B"},{"id":"learncoder_157_24003","stem":"在异步通信方式中,一个总线传输周期的过程是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"通常将完成一次总线操作的时间称为总线周期,其可分为以下4个阶段: 申请阶段、寻址阶段、传输阶段和结束阶段。而寻址阶段就是传送地址,传输阶段就是传送 数据。","type":"choice","options":{"B":"先传送地址,再传送数据","C":"只传输数据","A":"先传送数据,再传送地址","D":"无法确定"},"answer":"B"},{"id":"learncoder_157_24004","stem":"下列关于同步总线的说法中,正确的有(\t)。I.同步总线一般按最慢的部件来设置公共时钟II.同步总线一般不能很长III.同步总线一般采用应答方式进行通信IV.通常,CPU内部总线、处理器总线等采用同步总线","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"同步总线的特点是各部件釆用时钟信号进行同步,协议简单,因而速度 快,接口逻辑很少。但总线上的每个部件必须在规定的时间内完成要求的动作,所以一般按 最慢的部件来设计公共时钟。而且由于时钟偏移问题,同步总线一般不能很长。因此,一般 同步总线用在部件之间距离短、存取速度一致的场合。通常,CPU内部总线、处理器总线等 采用同步总线。因此I、II和IV都是正确的。III属于异步总线的特征。异步总线采用应答方式进行通信,允许各设备之间的速度有较大的差异,因此,通常用 于在具有不同存取速度的设备之间进行通信。通常连接外设或其他机器的通信总线采用异步 总线。","type":"choice","options":{"B":"I、 II、 IV","A":"I、 II","D":"II、III、Iv","C":"III、Iv"},"answer":"B"},{"id":"learncoder_157_24005","stem":"总线的半同步通信方式是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"总线的半同步方式就是同步方式和异步方式的结合。","type":"choice","options":{"A":"既不采用时钟信号,也不采用握手信号","C":"不采用时钟信号,只采用握手信号","B":"只采用时钟信号,不采用握手信号","D":"既采用时钟信号,又采用握手信号"},"answer":"D"},{"id":"learncoder_157_24000","stem":"为协调计算机系统各部件的工作,需要一种器件来提供统一的时钟标准,这个器件 是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"提供时钟标准的肯定是时钟发生器。总线控制器用来进行总线判优;总 线缓冲器在总线传输中起数据暂存缓冲的作用。","type":"choice","options":{"B":"总线控制器","A":"总线缓冲器","D":"以上器件都具备这种功能","C":"时钟发生器"},"answer":"C"},{"id":"learncoder_157_23998","stem":"总线的通信控制主要解决(\t)问题。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"总线控制包括两个方面:判优控制和通信控制。A选项属于判优控制; 而总线通信控制主要解决通信双方如何获知传输开始和传输结束,以及通信双方如何协调和 如何配合,故B和C选项属于总线通信控制。","type":"choice","options":{"D":"B和C","C":"通信过程中双方如何协调配合","A":"由哪个主设备占用总线","B":"通信双方如何获知传输开始和结束"},"answer":"D"},{"id":"learncoder_157_24001","stem":"关于总线的叙述,下列说法正确的是( )。I .总线忙信号由总线控制器建立II.计数器定时查询方式不需要总线同意信号III.链式查询、计数器查询、独立请求方式所需控制线路由少到多排序是:链式查询、独立请求方式、计数器查询","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"I:在总线控制中,申请使用总线的设备向总线控制器发出“总线请求”信号,由总线 控制器进行裁决。如果经裁决允许该设备使用总线,就由总线控制器向该设备发出“总线允许”信号,该设备收到信号后发出“总线忙”信号,用于通知其他设备总线已被占用。当该 设备使用完总线时,将“总线忙”信号撤销,释放总线。所以“总线忙”信号的建立者是获 得总线控制权的设备,故I错误rII:计数器定时查询方式只需要总线忙信号线和总线请求信号线,而不需要总线同意信 号线,所以II正确。III:链式查询仅用两根线即可确定总线使用权属于哪个设备(bs总线忙信号线不参加使 用权的确定,所以不是3根);在计数器查询中需要使用riog2nl+l根线(其中m表示允许接 纳的最大设备数);独立请求是每一台设备均有一对总线请求线和一对总线同意线,所以独立 请求方式需采用2N根线(其中N表示允许接纳的最大设备数),所以HI错误。","type":"choice","options":{"B":"仅II、III","A":"仅I、III","D":"仅II","C":"仅III"},"answer":"D"},{"id":"learncoder_157_23999","stem":"在(\t)结构中,外部设备可以和主存储器单元统一编址。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"单总线的特点:由于I/O设备与主存共用一组地址线,因此主存和I/O设 备是统一编址的,CPU就可以像访问内存一样访问外部设备。","type":"choice","options":{"A":"单总线","B":"双总线","C":"三总线","D":"以上都可以"},"answer":"A"},{"id":"learncoder_157_24002","stem":"关于同步控制说法正确的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"同步控制指由统一时序电路控制的通信方式。使用公共时钟信号,不采 用握手信号。同步控制一般不允许连接速度差别较大的设备,这样会降低整个通信的效率。","type":"choice","options":{"B":"由统一时序电路控制的方式","D":"B和C","C":"允许速度差别较大的设备一起接入工作","A":"采用握手信号"},"answer":"B"},{"id":"learncoder_157_23993","stem":"下列关于总线仲裁方式的说法中,正确的有( )。I.独立请求方式响应时间最快,是以增加处理器开销和增加控制线数为代价的II.计数器定时查询方式下,有一根总线请求(BR)线和一根设备地址线,若每次计数都从0开始,则设备号小的优先级高III.链式查询方式对电路故障最敏感Iv.分布式仲裁控制逻辑分散在总线各部件中,不需要中央仲裁器","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"独立请求方式中,每个设备均由一对总线请求线和总线允许线,总线控 制逻辑复杂,但响应速度快,I正确。计数器定时方式釆用一组设备地址线(「log2(n)]), II错误。链式查询方式对硬件电路故障敏感,且优先级不能改变,III正确。分布式仲裁方式不需要中央仲裁器,每个主模块都有自己的仲裁号和仲裁器,多个仲裁 器竞争使用总线,IV正确。","type":"choice","options":{"B":"I、III、IV","A":"III、IV","D":"II、III、IV","C":"I、 II、 W"},"answer":"B"},{"id":"learncoder_157_23996","stem":"为了对n个设备使用总线的请求进行仲裁,如果使用独立请求方式,贝懦要(\t)根控制线。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"知识点讲解中详细总结过,独立请求方式使用了 2n根控制线。","type":"choice","options":{"B":"log2n+2","A":"n","D":"3","C":"2n"},"answer":"C"},{"id":"learncoder_157_23991","stem":"\t在下面描述的FCI总线的基本概念中,不正确的表述是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"A和B选项在知识点讲解中列出过。另外,系统中肯定允许有多条PCI 总线,以此来提升计算机的效率;PCI设备指插在PCI插槽上的设备(如声卡、网卡、MODEM 等);主设备指获得总线控制权的设备,所以PCI设备不一定都是主设备。","type":"choice","options":{"B":"PCI总线可对传输信息进行奇偶校验","C":"系统中允许有多条PCI总线","D":"PCI设备一定是主设备","A":"PCI总线支持即插即用"},"answer":"D"},{"id":"learncoder_157_23994","stem":"在集中式总线控制中,响应时间最快的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"独立请求方式的每一个设备均有一对总线请求信号BRi和总线同意信号 BGi,故响应时间最快。D选项属于捏造出来的,没有此查询方式。","type":"choice","options":{"C":"独立请求","A":"链式查询","B":"计数器定时查询","D":"分组链式查询"},"answer":"C"},{"id":"learncoder_157_23997","stem":"在链式查询方式下,若有N个设备,则(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"链式查询下,一共有3条控制线:总线请求线、总线忙线和总线同意线, 故不管有多少设备,只有一条总线请求线。","type":"choice","options":{"B":"需要N条总线请求线","C":"视情况而定,可能一条,也可能N条","A":"只需一条总线请求线","D":"以上说法都不对"},"answer":"A"},{"id":"learncoder_157_23995","stem":"\t在计数器定时查询方式下,正确的描述是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"在知识点中讲过,计数器的初值可以由程序设置,故优先级次序可以改 变。B和D选项是链式查询的特点。C要看情况,计数器每次判优都从“0”开始,此时一旦 设备的优先顺序被固定,设备的优先级就按0, 1, 2,…,n的顺序降序排列,永远不能改 变;计数器也可以从上一次的终点开始计数,即是一种循环方法,此时所有设备使用总线的 优先级相等。","type":"choice","options":{"D":"对硬件电路故障敏感","B":"越靠近控制器的设备,优先级越高","A":"总线设备的优先级可变","C":"各设备的优先级相等"},"answer":"A"},{"id":"learncoder_157_23992","stem":"\t假设某存储器总线采用同步通信方式,时钟频率为50MHz,每个总线事务以突发方 式传输8个字,以支持块长为8个字的Cache行读和Cache行写,每字4B。对于读操作,方 式顺序是1个时钟周期接收地址,3个时钟周期等待存储器读数,8个时钟周期用于传输8个 字。请问若全部访问都为读操作,该存储器的数据传输速率为( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":" 一次总线事务传输的数据量为8x4B=32B所使用的时钟周期数为1+3+8=12,又每个时钟周期为(1/50MHZ),那么所使用的总时间 为 12x(l/50MHz)=0.24s。那么读操作的数据传输速率为32B/[(12x(l/50MHz))s]=133.3MB/S","type":"choice","options":{"A":"114.3MB/S","C":"133.3MB/s","B":"126.0MB/S","D":"144.3MB/s"},"answer":"C"},{"id":"learncoder_157_23987","stem":"系统总线中的数据线、地址线、控制线是根据(\t)来划分的。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"根据数据线、地址线、控制线的定义可知,根据传输的内容不同,可将总线划分为数据总线、地址总线和控制总线。","type":"choice","options":{"C":"总线传输的内容","D":"总线的材料","A":"总线所处的位置","B":"总线的传输方向"},"answer":"C"},{"id":"learncoder_157_23990","stem":"\t某总线共有88根信号线,其中数据总线为32根,地址总线为20根,控制总线36根,总线工作频率为66MHz,则总线宽度为(\t),传输速率为()。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"总线宽度即为数据线的根数,故总线宽度为32bit,总线的传输速率=总线 工作频率 x 总线宽度=66MHzx32bit= 66MHzx4B = 264MB/s。","type":"choice","options":{"D":"32bit 254MB/s","C":"20bit 264MB/S","A":"32bit 264MB/S","B":"20bit 254MB/s"},"answer":"A"},{"id":"learncoder_157_23984","stem":"(2016年统考真题)下列关于总线设计的叙述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"并行总线传输通常比串行总线传输速度快,但不是绝对的。在实际时钟频 率比较低的情况下,并行总线因为可以同时传输若干比特,速率确实比串行总线快。但是随 着技术的发展,时钟频率越来越高,并行导线之间的相互干扰越来越严重,当时钟频率高到 一定程度时,传输的数据已经无法恢复。而串行总线因为导线少,线间干扰容易控制,反而 可以通过不断提高时钟频率来提高传输速率,A错误。总线复用是指一种信号线在不同时间 传输不同的信息。可以使用较少的线路传输更多的信息,从而节省了空间和成本,B正确。 突发传输是在一个总线周期中,可以传输多个存储地址连续的数据,即一次传输一个地址和 一批地址连续的数据,C正确。分离事务通信即总线复用的一种,相比单一的传输线路可以 提高总线的利用率,D正确。","type":"choice","options":{"A":"并行总线传输比串行总线传输速度快","B":"采用信号线复用技术可减少信号线数量","C":"采用突发传输方式可提高总线数据传输率","D":"采用分离事务通信方式可提高总线利用率"},"answer":"A"},{"id":"learncoder_157_23985","stem":"(2017年统考真题)下列关于多总线结构的叙述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"多总线结构用速率高的总线连接高速设备,用速率低的总线连接低速设 备。一般来说,CPU是计算机的核心,是计算机中速度最快的设备之一,所以A正确。突发 传送方式把多个数据单元作为一个独立传输处理,从而最大化设备的看吐量。现实中一般用 支持突发传送方式的总线提高存储器的读写效率,B正确。各总线通过桥接器相连,后者起 流量交换作用。PCI-Express总线都采用串行数据包传输数据,故选D。","type":"choice","options":{"D":"PCI-Expressxl6采用并行传输方式","A":"靠近CPU的总线速度较快","B":"存储器总线可支持突发传送方式","C":"总线之间需通过桥接器相连"},"answer":"D"},{"id":"learncoder_157_23988","stem":"总线按连接部件不同可分为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"参考总线的分类总结可知,总线按连接部件不同可以分为片内总线、系 统总线和通信总线。B选项是按照传输内容不同的划分形式。C选项是三总线结构的3条总 线,和分类无关;D选项是总线标准。","type":"choice","options":{"D":"ISA总线、VESA总线、PCI总线","A":"片内总线、系统总线、通信总线","B":"数据总线、地址总线、控制总线","C":"主存总线、I/O总线、DMA总线"},"answer":"A"},{"id":"learncoder_157_23983","stem":"(2015年统考真题)下列有关总线定时的叙述中,错误的是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"在同步通信方式中,系统采用一个统一的时钟信号,而不是由各设备提供, 否则没法实现统一的时钟。","type":"choice","options":{"D":"半同步通信方式中,握手信号的采样由同步时钟控制","A":"异步通信方式中,全互锁协议最慢","C":"同步通信方式中,同步时钟信号可由各设备提供","B":"异步通信方式中,非互锁协议的可靠性最差"},"answer":"C"},{"id":"learncoder_157_23986","stem":"总线宽度与下列()有关。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"总线宽度指总线上能够同时传输的数据位数,通常是指数据总线的根数。","type":"choice","options":{"D":"以上都不对","B":"数据线根数","A":"控制线根数","C":"地址线根数"},"answer":"B"},{"id":"learncoder_157_23989","stem":"总线的数据传输速率可按公式Q=W饷 计算,其中Q为总线数据传输速率,W为总 线数据宽度(总线位宽/8), f为总线时钟频率,N为完成一次数据传送所需的总线时钟周期 个数。若总线位宽为16位,总线时钟频率为8MHz,完成一次数据传送需2个总线时钟周期, 则总线数据传输速率Q为()。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"W=16/8B=2B, N=2, f=8MHz,故 Q=[2x(8/2)]MB/s=8MB/so","type":"choice","options":{"C":"16MB/s","D":"8MB/s","B":"8Mbit/s","A":"16Mbit/s"},"answer":"D"},{"id":"learncoder_157_23980","stem":"(2012年统考真题)某同步总线的时钟频率为100MHz,宽度为32位,地址/数据线 复用,每传输一个地址或数据占用一个时钟周期。若该总线支持突发(猝发)传输方式,则 一次“主存写”总线事务传输128位数据所需要的时间至少是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"首先需要求出总线带宽,才能求得传输128位数据的传输时间。针对此题, 由于每传输一个地址或数据占用一个时钟周期,即总线周期等于时钟周期,因此总线工作频 率=总线时钟频率/l=100MHz,故总线带宽=总线工作频率*总线宽度=100MHzx32biA3200Mbit/s= 400MB/S。所以可以求得一次“主存写”总线事务传输128位数据所需要的传输时间为16B/(400MB/s) =40ns。另外,突发(猝发)传输方式只需要一次地址传输,时间为一个时钟周期,即l/100MHz= lOnso综上分析,总时间为40hs+10ds=50iis。可能疑问点:突发(猝发)传输方式与常规传输有什么区别?解析:一次传输一个地址和一个总线宽度的数据的方式称为常规传输。一次传输一个地 址和一批数据的方式称为突发(猝发)传输。针对此题,由于是突发(猝发)方式,因此传 输128位数据只需要传输一次地址即可。如果此题没有说明是突发(猝发)传输方式,则128 位数据需要4次总线传输,那么就需要传输4次地址,也就是传输数据需要40ns,传输地址 也需要40ns,共需要80ns,则应选D。","type":"choice","options":{"D":"80ns","B":"40ns","C":"50ns","A":"20ns"},"answer":"C"},{"id":"learncoder_157_23978","stem":"按数据传送格式,意线常被划分为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"并行总线是指一次能同时传送多个二进制数位的总线,而串行总线是指二 进制数的各位在一条线上是一位一位传送的。所以根据传送格式,总线可分为并行总线和串行总线。","type":"choice","options":{"A":"并行总线与串行总线","B":"同步总线与异步总线","D":"存储总线与I/O总线","C":"系统总线与外总线"},"answer":"A"},{"id":"learncoder_157_23981","stem":"(2014年统考真题)某同步总线采用数据线和地址线复用方式,其中地址/数据线有 32根,总线时钟频率为66MHz,每个时钟周期传送两次数据(上升沿和下降沿各传送一次数 据),该总线的最大数据传输率(总线带宽)是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"数据线有32根也就是一次可以传送32bit/8=4B的数据,66MHz意味着有 66M个时钟周期,而每个时钟周期传送两次数据,可知总线每秒传送的最大数据量为 66Mx2x4B=528MB,所以总线的最大数据传输率为528MB/S,故选C。","type":"choice","options":{"A":"132MB/S","D":"1056MB/s","C":"528MB/S","B":"264MB/S"},"answer":"C"},{"id":"learncoder_157_23979","stem":"内部总线(又称片内总线)是指()。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"如在CPU内部,寄存器之间以及算术逻辑部件(ALU)与控制部件之间 传输数据所用的总线称为片内总线(即芯片内部的总线)。","type":"choice","options":{"B":"CPU和计算机系统的其他高速功能部件之间互相连接的总线","D":"计算机系统和其他系统之间互相连接的总线","A":"CPU内部连接各寄存器及运算部件之间的总线","C":"多个计算机系统之间互相连接的总线"},"answer":"A"},{"id":"learncoder_157_23982","stem":"(2014年统考真题)一次总线事务中,主设备只需给出一个首地址,从设备就能从首地址开始的若干连续单元读出或写入多个数据。这种总线事务方式称为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"猝发(突发)传输是在一个总线周期中,可以传输多个存储地址连续的数据, 即一次传输一个地址和一批地址连续的数据,并行传输是在传输中有多个数据位同时在设备 之间进行的传输,串行传输是指数据的二进制代码在一条物理信道上以位为单位按时间顺序 逐位传输的方式,同步传输是指传输过程由统一的时钟控制,故选C。","type":"choice","options":{"D":"同步传输","A":"并行传输","B":"串行传输","C":"突发传输"},"answer":"C"},{"id":"learncoder_157_23977","stem":"控制总线主要用来传送( )。I.存储器和I/O设备的地址码II.所有存储器和\"0设备的时序信号III.所有存储器和i/o设备的控制信号IV.来自I/O设备和存储器的响应信号","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"存储器和I/O设备的地址码应该由地址线来传送,故I错误;控制线应该 用来传送来自存储器和I/O设备的时序信号、控制信号和响应信号。","type":"choice","options":{"A":"II、III","D":"II、III、IV","B":"I 、III、IV","C":"III、IV"},"answer":"D"},{"id":"learncoder_157_23976","stem":"下列关于总线说法中,正确的是(\t)。I.使用总线结构减少了信息传输量II.使用总线的优点是数据信息和地址信息可以同时传送III.使用总结结构可以提高信息的传输速度IV.使用总线结构可以减少信息传输线的条数","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"使用总线结构仅仅是减少了传输线的条数,从图6・1和图6・2中可以很直 观地看出。使用总线结构不可能减少信息的传输量和提高信息的传输速度。另外,总线上也 不能在同一时刻传输数据信息和地址信息,不然就全部混乱了,因为在总线传送中数据和地 址都是二进制。","type":"choice","options":{"A":"I、 II、III","D":"只有IV","B":"H、III、IV","C":"III、IV"},"answer":"D"},{"id":"learncoder_157_20537","stem":"下列说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"此题考查同步总线的总线带宽、串行总线的总线波特率和比特率的概念。","type":"choice","options":{"C":"串行总线的总线波特率=每秒钟通过信道传输的码元数(二进制位数)","A":"同步总线的总线带宽=总线线宽x总线时钟频率/完成一次数据传送所需的时钟周期数","D":"串行总线的总线比特率=每秒钟通过信道传输的信息量(有效数据位数)","B":"串行总线的总线波特率=每秒钟通过信道传输的信息量(有效数据位数)"},"answer":"B"},{"id":"learncoder_157_20541","stem":"假定在CPU和主存之间有一个同步总线相连,其时钟周期为50 ns,单独设有32位地址线和32 位数据线。主存读传输时,首先要花1个时钟周期发送地址和读命令,最终从总线取数要花一个时钟 周期,存储器的取数时间为220 ns;主存写操作时,先花一个时钟周期送地址擞据和写命令,在随后的 两个时钟周期内写入数据。要求分别求出该存储器进行连续读和写操作时的总线带宽。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"24. 空","type":"short_answer","answer":"存储器取数时间是220 ns, —个时钟周期是50 ns,所以存储器取数后送到总线上的 时间应确定为250 ns,必须是时钟周期的整数倍。(1)存储器读所花时间:50皿+250 ns+50 ns = 300 ns ”所以存储器进行连续读时的总线带宽为:4B/300 ns=13.3 MBps\t(2)存储器写所花时间:50 ns+50 ns+50 ns = 150 ns所以存储器进行连续写时的总线带宽为:4 B/150 ns-26.6 MBps\t注:1 s = 109ns\t\t"},{"id":"learncoder_157_20538","stem":"总线复用的目的是(\t)o","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"提高总线的负载能力的手段是增加总线驱动器,提高总线可靠性的一种办法是引入 多(冗余)总线。","type":"choice","options":{"B":"提高总线带宽","A":"提高总线的负载能力","C":"提高总线的可靠性","D":"在不增加总线线数的前提下,传输更多的信号"},"answer":"D"},{"id":"learncoder_157_20534","stem":"下列关于“速度差别较大的设备间数据传输”的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"速度差别较大的设备间数据传输既能采用异步定时方式,也能采用同步定时方式 (选择一个长的时钟周期)。只是采用同步定时方式时,不能发挥高速设备的能效。","type":"choice","options":{"A":"只能采用同步定时方式","C":"既能采用同步定时方式,也能采用异步定时方式","D":"不能直接通信","B":"只能采用异步定时方式"},"answer":"C"},{"id":"learncoder_157_20531","stem":"增加总线带宽的手段有很多,但是以下彳故法中不能提高总线带宽的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"此题考查的知识点是:总线复用是为了减少总线的线数,它将导致总线带宽下降。","type":"choice","options":{"B":"增加数据线的宽度","C":"采用突发传送(也叫猝发传送)方式,允许一次总线事务传送多个数据","A":"采用总线复用技术","D":"增高总线的时钟频率"},"answer":"A"},{"id":"learncoder_157_20535","stem":"采用“双总线结构”的计算机系统中,“双总线”指的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"只有系统总线和I/O总线可以组成计算机系统。其他是总线的不同类型;","type":"choice","options":{"B":"系统总线,1/0总线","C":"PCI总线,EISA总线","A":"地址总线,数据总线","D":"同步总线,异步总线"},"answer":"B"},{"id":"learncoder_157_20532","stem":"下列关于同步总线和异步总线的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"采用同步定时方式的总线称为同步总线,采用异步定时方式的总线称为异步总线。 I/O总线通常采用异步总线。","type":"choice","options":{"C":"异步总线没有公共的时钟信号,设备间的通信过程都由握手信号进行定时","B":"同步总线有一个公共的时钟信号,总线事务过程中的所有操作都由时钟信号定时","A":"同步总线的带宽比异步总线的带宽高","D":"I/O总线通常采用同步总线"},"answer":"D"},{"id":"learncoder_157_20536","stem":"采用“三总线结构”的计算机系统中,“三总线”指的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"三总线结构的计算机系统强调的是总线的层次结构。只有处理器总线、主存总线和 高速1/0总线可以组成一个完整的层次结构。其他是总线的不同类型。","type":"choice","options":{"B":"系统总线,1/0总线,控制总线","C":"处理器总线,主存总线,高速I/O总线","D":"数据总线,控制总线,局部总线。","A":"地址总线,数据总线,控制总线"},"answer":"C"},{"id":"learncoder_157_20533","stem":"下列关于同步总线和异步总线的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"速度相差较大设备之间的数据通信通常采用异步总线。由于时钟偏移问题,同步总 线不适合于长距离通信。\t","type":"choice","options":{"A":"同步总线适合于存取速度相差较大的设备之间的近距离的数据通信","D":"异步总线适合于存取速度相差较小的设备之间的长距离的数据通信","C":"异步总线适合于存取速度相差较大的设备之间的长距离的数据通信","B":"同步总线适合于存取速度相差较小的设备之间的近距离的数据通信"},"answer":"A"},{"id":"learncoder_157_20530","stem":"仲裁号为N位的并行竞争分布仲裁方案可以连接的最多设备数量是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"\"位的仲裁号线可对应2n个设备。","type":"choice","options":{"D":"2n","B":"N","C":"N+l","A":"N-l"},"answer":"D"},{"id":"learncoder_157_20528","stem":"下列关于“分布式总线仲裁”的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"并行竞争分布仲裁中,若仲裁号等于仲裁总线上的仲裁号,则总线请求成功,建立 “总线忙”信号。","type":"choice","options":{"D":"并行竞争分布仲裁中,若仲裁号小于仲裁总线上的仲裁号,则撤销请求","B":"自举分布仲裁和并行竞争分布仲裁的优先级是固定的","C":"并行竞争分布仲裁中,若仲裁号大于仲裁总线上的仲裁号,则总线请求成功","A":"每一个潜在的主设备拥有一个私有的仲裁逻辑电路"},"answer":"C"},{"id":"learncoder_157_20525","stem":"若CPU要读取主存单元中的内容,那么在取得总线控制权后,CPU将经第一个时钟周期内通过总线向主存发送(\t))oI .“主存读”控制信号\tII.“地址”信息 III“应答(ACK)”控制信号","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"无论同步通信或异步通信,第1个时钟周期都要发出读命令和地址。","type":"choice","options":{"B":"II","C":"III","D":"I,II","A":"I"},"answer":"D"},{"id":"learncoder_157_20529","stem":"带有N根总线请求信号线的自举分布仲裁方案可以连接的最多设备数量是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"一个请求信号线对应一个设备,优先级最低的设备不需要请求信号线。","type":"choice","options":{"D":"2n","B":"N","C":"N+1","A":"N-l"},"answer":"C"},{"id":"learncoder_157_20526","stem":"下列关于“集中式总线仲裁”的说法中,错误的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"计数器定时查询的优点是优先级灵活。\t","type":"choice","options":{"A":"链式查询需要的信号线数最少,但对电路故障敏感,可靠性差","C":"独立请求响应速度最快,但需要的信号线数最多","D":"计数器定时查询中设备的优先级是固定的","B":"计数器定时查询对电路故障不敏感,可靠性高"},"answer":"D"},{"id":"learncoder_157_20527","stem":"集中式总线仲裁方式中可能会发生“饥饿”现象的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"“饥饿”现象是设备的请求长时间得不到响应。链式查询中,排在后面的设备的请 求,可能会因前面设备频繁请求,而出现“饥饿”现象。","type":"choice","options":{"A":"链式查询","C":"独立请求","D":"3种方式都可能","B":"计数器定时查询"},"answer":"A"},{"id":"learncoder_157_20524","stem":"下列因素中,与总线带宽无关的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"总线事务是指总线上一对设备之间的一次信息交换过程,它与总线带宽无关。典型 的总线事务类型有:存储器读、存储器写、I/O读、I/O写、中断响应等。典型的总线事务处理过 程由“地址阶段”和“数据阶段”构成,但突发传送事务由一个“地址阶段”及随后的多个“数据阶 段”构成。所以,一个突发传送事务(也叫成组传送事务)可以传输一个首地址下连续存储的一 组数据。","type":"choice","options":{"D":"是否是突发传送","A":"总线时钟频率","B":"总线宽度","C":"支持的总线事务个数"},"answer":"C"},{"id":"learncoder_157_20521","stem":"“总线忙”信号是由(\t)建立的","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"申请总线的设备先发“总线请求”信号,然后总线仲裁器发出'总线允许”信号,其后 获得总线使用权的设备发岀“总线忙”信号,占用总线。","type":"choice","options":{"D":"GPU","A":"总线仲裁器","C":"总线从设备","B":"总线主设备"},"answer":"B"},{"id":"learncoder_157_20522","stem":"下列关于“总线主设备和总线从设备”的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"只要不是主设备,总线上的其他设备都可以作为从设备。","type":"choice","options":{"B":"一次总线传输可以有多个主设备和多个从设备","D":"—次总线传输只能有一个主设备,但可以有多个从设备","C":"一次总线传输可以有多个主设备,但只能有一个从设备","A":"一次总线传输只能有一个主设备和一个从设备"},"answer":"D"},{"id":"learncoder_157_20523","stem":"某宽度为32位的数据总线采用同步控制,其时钟频率为66 MHz,则该总线的最太数据 传输率为()。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"同步总线的数据传输率即为总线带宽。在一个时钟周期内,同步总线传输的数据量 (单位为字节)等于总线的线数时,数据传输率为最大值。本题最大数据传输率=32/8)x 66 MHz = 264 MBps。 ","type":"choice","options":{"C":"264 MBps","A":"64 MBps","B":"132 MBps","D":"528 MBps"},"answer":"C"},{"id":"learncoder_157_20518","stem":"相对于分散连接,总线连接的优点是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"总线连接(相对于分散连接,即设备之间两两相互直接连接)的优点:成本低、易扩 展,但是带宽不高。各种总线标准都对接入设备的数量有限制","type":"choice","options":{"B":"带宽高","C":"不易扩展","D":"对接入设备的数量无限制","A":"成本低"},"answer":"A"},{"id":"learncoder_157_20519","stem":"总线的一次传输过程通常是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"总线的一次传输过程是:传输请求〜总线仲裁-部件寻址I数据传输-总线释放异","type":"choice","options":{"C":"传输请求->部件寻址->总线仲裁->数据传输->总线释放","B":"总线仲裁->部件寻址->数据传输->总线释放","D":"传输请求->总线仲裁-> 部件寻址―>数据传输->总线释放","A":"部件寻址->总线仲裁->数据传输->总线释放"},"answer":"D"},{"id":"learncoder_157_20520","stem":"总线主设备是指(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.总线","analysis":"总线主设备是指总线上能申请并获得总线控制权的设备,总线从被主设备 访问的设备。","type":"choice","options":{"A":"总线上优先级高的设备","B":"总线驱动器","C":"总线上能申请并获得总线控制权的设备","D":"总线伊裁器"},"answer":"C"},{"id":"learncoder_156_24054","stem":"图7.21是从实时角度观察到的中断嵌套。试问:这个中断系统可实现几重中断?请分析图7.21中的中断过程。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第7章)/image1.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"空","type":"short_answer","answer":"该中断系统可以实现5重中断。中断优先级的顺序是,优先权1最高,而现 行程序运行于最低优先权(不妨设优先权为6)。图7-21,中出现了 4重中断,其中断过程如下: 现行程序运行到T1时刻,响应优先权4的中断源的中断请求并进行中断服务。到T3时刻, 优先权4的中断服务还未结束,但又出现了优先权3的中断源的中断请求,暂停优先权4的 中断服务,而响应优先权3的中断。到T4时刻,又被优先权2的中断源所中断,直至T6时 刻,返回优先权3的中断服务。到T7时刻,优先权1的中断源发出中断请求并被响应,到 T8时刻优先权1中断服务完毕,返回优先权3的服务程序。到T10时刻优先权3中断服务结 束,返回优先权4的中断服务。到T11时刻优先权4的中断服务结束,最后返回现行程序。 在图7-21中,优先权3的中断服务程序被中断2次,而优先权5的中断请求没有发生。归纳总结:多重中断在执行某个中断服务程序的过程中,CPU可去响应级别更高的中断 请求,又称为中断嵌套。"},{"id":"learncoder_156_24057","stem":"(2012年统考真题)假设某计算机的CPU主频为80MHz, CPI为4,并且平均每条 指令访存1.5次,主存与Cache之间交换的块大小为16B, Cache的命中率为99%,存储器总 线的宽度为32位。请回答以下问题:1)该计算机的MIPS数是多少?平均每秒Cache缺失的次数是多少?在不考虑DMA传 送的情况下,主存带宽至少达到多少才能满足CPU的访存要求?2)假定在Cache缺失的情况下访问主存时,存在0.0005%的缺页率,则CPU平均每秒 产生多少次缺页异常?若页面大小为4KB,每次缺页都需要访问磁盘,访问磁盘时DMA传 送采用周期挪用的方式,磁盘I/O接口的数据缓冲寄存器为32位,贝!J磁盘I/O接口平均每秒 发出的DMA请求次数至少是多少?3)CPU和DMA控制器同时要求使用总线传输数据时,哪个优先级更高?为什么?4)为了提高性能,主存采用4体低位交叉存储模式,工作时每1/4个存储周期启动1个 体,若每个体的存储周期为50ns,则该主存能够提供的最大带宽是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"空","type":"short_answer","answer":"1)题目告知CPU的主频为80MHz,表示每秒包含80M个时钟周期。而CPI 为4表明执行一条指令需要4个时钟周期,所以CPU平均每秒可以执行的指令数=80M/4= 20M。由于MIPS的含义是每秒可执行百万条指令数,而“M”代表的就是106;即百万,因 此 MIPS 为 20。由于平均每条指令访存1.5次,因此每秒平均访存次数为20MX1.5次=30M次,而Cache 的命中率为99%,所以访问30M次Cache不命中的次数为30Mx(l~99%)=300K次。当Cache 缺失时,CPU访问主存,主存与Cache之间以块为单位传送数据,块大小为16B,所以每秒 CPU与主存需要交换数据的大小为16Bx300K/s=4.8MB/so所以,在不考虑DMA传送的情况 下,主存带宽至少要达到4.8MB/S才能满足CPU的访存要求。2)由于每秒平均需要访问主存300K次,而缺页率为0.0005%,因此平均每秒“缺页” 异常次数=300Kx0.0005%=l.5次。由于存储器总线带宽为32位,因此每传送32位数据,磁 盘控制器就发出一次DMA请求,这样平均每秒磁盘DMA请求的次数至少为1.5次x4KB/4B= 1.5K 次=1536 次。3)CPU和DMA控制器同时要求使用存储器总线时,DMA请求优先级更高,因为若 DMA请求得不到及时响应,I/O传输数据就可能会丢失。4)当采用4体低位交叉存储模式时,每1/4周期的时间内就可以传送4B数据。若每个 体的存储周期为50ns,则4体低位交叉存储器模式能提供的最大带宽=4B/(50ns/4)=320MB/s。"},{"id":"learncoder_156_24060","stem":"(2016年统考真题)假定CPU主频为50MHz, CPI为4。设备D采用异步串行通信 方式向主机传送7位ASCH字符,通信规程中有1位奇校验位和1位停止位,从D接收怡动 命令到字符送入I/O端口需要0.5ms。请回答下列问题,要求说明理由。(1)每传送一个字符,在异步串行通信线上共需传输多少位?在设备D持续工作过程中,每秒钟最多可向I/O端口送入多少个字符?(2)设备D采用中断方式进行输入/输出,示意图如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第7章)/image2.png'/>I/O端口每收到一个字符申请一次中断,中断响应需10个时钟周期,中断服务程序共有 20条指令,其中第15条指令启动D工作。若CPU需从D读取1000个字符,则完成这一任 务所需时间大约是多少个时钟周期?CPU用于完成这一任务的时间大约是多少个时钟周期?在 中断响应阶段CPU进行了哪些操作?","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"空","type":"short_answer","answer":"(1)每传送一个ASCII字符,需要传输的位数有1位起始位,7位数据位(ASCII字符 占7位)、1位校验位和1位停止位,故总位数位1+7+1+1=10。(2分)I/O端口每秒钟最多可接收1000/0.5=2000个字符。(1分)【评分说明】对于第一问,若考生回答总位数位9,则给1分。(2)一个字符传送时间包括:设备D将字符送I/O端口的时间、中断响应时间和中断服务程序前15条指令的执行时间。时钟周期为1 /(50MHz)=20ns,设备D将字符送I/O端口的时间为0.5ms/20ns=2.5xl04个时钟周期。一个字符的传送时间大约2.5xl04+l0+15x4=25070个时钟周期。完成1000个字符传送所需时间大约为1000x25070=25070000个时钟周期。(3 分)CPU用于该任务的时间大约为1000X(10+24x4)=9xl04个时钟周期(1分)在中断响应阶段,CPU主要进行以下操作:关中断、保护断点和程序状态、识别中断源。 (2 分)【评分说明】对于第一问,若答案是25070020,则同样给分;若答案是25000000或25000020,则给2分。如果没有给出分步计算步骤,但算式和结果正确,同样给分。对于第三问,只要回答关中断和保护断点,就给2分,其他答案酌情给分。"},{"id":"learncoder_156_24058","stem":"某计算机的CPU主频为500MHz,所连接的某外设的最大数据传输率为20KB/s,该 外设接口中有一个16位的数据缓存器,相应的中断服务程序的执行时间为500个时钟周期。 请回答下列问题:1)是否可用中断方式进行该外设的输入输出?若能,在该设备持续工作期间,CPU用 于该设备进行输入/输出的时间占整个CPU时间的百分比大约为多少?2)若该外设的最大数据传输率是2MB/S,则可否用中断方式进行输入输出?","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"空","type":"short_answer","answer":"1)因为该外设接口中有一个16位数据缓存器,所以,若用中断方式进行输入/输出,可以每16位进行一次中断请求,因此,中断请求的时间间隔为2B/20KB/s=100|LiSo对应的中断服务程序的执行时间为:(l/500MHz)x500=l|iSo因为中断响应过程就是执行 一条隐指令的过程,所用时间相对于中断处理时间(执行中断服务程序的时间)而言,几乎 可以忽略不计,因而整个中断响应并处理的时间大约为1圉多一点,远远小于中断请求的间 隔时间。因此,可以用中断方式进行该外设的输入输出。若用中断方式进行该设备的输入/输出,则该设备持续工作期间,CPU用于该设备进行输入/输出的时间占整个CPU时间的百分比大约为l/100=l%。2)若外设的最大传输率为2MB/S,则中断请求的时间间隔为106x2B/2MB=lus。而整个 中断响应并处理的时间大约为lus多一点,中断请求的间隔时间小于中断响应和处理时间, 即中断处理还未结束就会有该外设新的中断到来,因此不可以用中断方式进行该外设的输入 输出。"},{"id":"learncoder_156_24052","stem":"某磁盘存储器转速为3 000r/min,共有4个记录面,5道/num每道记录信息为12288B,最小磁道直径为230mm,共有275道。试问:1)磁盘存储器的容量是多少?2)最高位密度与最低位密度是多少?3)磁盘数据传输率是多少?4)平均等待时间是多少?5)给出一个磁盘地址格式方案。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"42.","type":"short_answer","answer":"1)\t每道记录信息容量=12 288B,每个记录面信息容量=275x12 288B,共有4个记录面, 所以磁盘存储器的容量=4x275x12 288B=13 516 800B。2)假设最高位密度为Di (即最内圈磁道的位密度),Di=每道信息量十内圈圆周长 =12288B* (πx最小磁道直径)«17B/mmo假设最低位密度为D?(即最外”圈磁道的位密度),最大磁道半 径=最小磁道半径+(275/5 ) =115mm+55mm=170mm故。D2=每道信息量/外圈圆周长 =12 288B/ (πx最大磁道直径)=11.5B/mm。3)磁盘数据传输率C=转速x每道信息容量,转速r=3000/60r/s=50r/s,每道信息容量= 12 288B,故 C=50x12 288B=614 400B/s。4)平均等待时间=1/2r = 1/2 * 50r/s = 10 ms。5)磁盘地址格式为:柱面(磁道)号,磁头(盘面)号,扇区号。因为每个记录面有275个磁道,故磁道号占 9位,又因为有4个记录面,故盘面号占2位。假定每个 扇区记录1024个字节,则需要、12 288B-1024B=12个扇区, 扇区号占4位,如图7.22所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第7章)/image3.png'/>"},{"id":"learncoder_156_24055","stem":"假设硬盘传输数据以32位的字为单位,传输速率为IMB/s。CPU的时钟频率为 50MHzo1)采用程序查询的输入/输出方式,假设查询操作需要100个时钟周期,求CPU为I/O 查询所花费的时间比率,假定进行足够的查询以避免数据丢失。2)采用中断方式进行控制,每次传输的开销(包括中断处理)为100个时钟周期。求 CPU为传输硬盘数据花费的时间比率。3)采用DMA控制器进行输入/输出操作,假定DMA的启动操作需要1000个时钟周期, DMA完成时处理中断需要500个时钟周期。如果平均传输的数据长度为4KB,问在硬盘工 作时处理器将用多少时间比率进行输入/输出操作,忽略DMA申请使用总线的影响。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"空","type":"short_answer","answer":"1)假设采用程序查询方式,则可算出硬盘每秒进行查询的次数为:1MB/4B=25OK次,而查询250K次需要的时钟周期数为250KX 100=25 000K,则可算出CPU为I/O查询所花费的时间比率为25000 * 1000/50*106 * 100% = 50%2)假设采用中断方法进行控制,每传送一个字需要的时间为4B/1MB/s =4us,而每次传输的开销为100个时钟周期,还得先计算出时钟周期,即1/50MHz= 0.02us。所以,每次传输的2us,故cpu为传输硬盘数据花费的时间比率为2us/4us * 100% = 50%。3)解法一:假设采用DMA控制器进行传输,由于平均传输的数据长度为4KB,因此可以得到传输的时间为4KB/1MB/s = 4ms。因为在数据传输的过程中,CPU是不需要管的,只需要启动和完成时的处理(即1500个时钟周期),所以CPU为传输硬盘数据花费的时间比率为0.02 * 1500/4000 * 100% = 0.75%解法二:传送4KB的数据长度需要的时间为4B/1MB/s =4ms。如果磁盘不断进行传输,每 秒所需DMA辅助操作的时钟周期数为(1000 + 500) / 0.004 = 375 000所以CPU为传输硬盘数据花费的时间比率为375000 / 50 * 106 * 100% = 0.75%解法三:可算得每秒传输次数1MB/4KB=25O次,所以CPU为传输硬盘数据花费的时间 比率为(1000 + 500) * 250 / 50 * 106 = 0.75%"},{"id":"learncoder_156_24053","stem":"有一台磁盘机,其平均寻道时间为30ms,平均等待时间为10ms,数据传输率为 500B/ms,磁盘机中随机存放着1000块、每块为3000B的数据。现想把一块块数据取走,更 新后再放回原地。.假设一次取出或写入所需时间为:平均寻道时间+平均等待时间+数据传输 时间。另外,使用CPU更新信息所需时间为4ms,并且更新时间同输入/输出操作不相重叠。 试问:1)更新磁盘上的全部数据需多少时间?2)若磁盘机的旋转速度和数据传输率都提高一倍,更新全部数据需要多少时间?","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"空","type":"short_answer","answer":"由于数据块是随机存放的,因此每取出或写入一块均要定位。数据传输时间 =3000B/500B/ms=6ms。1)更新全部数据所需时间=2x1000x(平均寻道时间+平均等待时间+数据传输时 间)+1000xCPU更新信息时间=2xl000x(30+10+6)+1000x4=96 000ms=96so2)磁盘机旋转速度提高一倍后,平均等待时间为5mso数据传输率提高一倍,即1000B/ms, 数据传输时间变为30001000B/ms=3mSo更新全部数据所需时间=2x1000x(30+5+3)+1000x4-80 000ms=80so"},{"id":"learncoder_156_24056","stem":"假设磁盘存储器转速为3 000r/min,分8个扇区,每扇区存储1KB,主存与磁盘存 储器数据传送的宽度为16位(即每次传送16位)。假设一条指令最长执行时间为25s。试问:是否可采用一条指令执行结束时响应DMA请求的方案,为什么?若不行,应釆 用什么方案?","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"空","type":"short_answer","answer":"磁盘存储器转速为3000r/min,即50r/s每转传送的数据为8x1KB = 8KB ,所以数据传输率为8KBx50r/s=400KB/s。16位数据的传输时间=16位/(400KB/s)=2B/(400KB/s) =5us。由于5us远小于25s,因此不能釆用一条指令执行结束响应DMA的请求方案。应采用 每个CPU机器周期末查询及响应DMA的请求方案。"},{"id":"learncoder_156_24059","stem":"若某计算机有5级中断,中断响应优先级为1>2>3>4>5,而中断处理优先级为 1>4>5>2>3。要求:1)设计各级中断服务程序的中断屏蔽位(假设1为屏蔽,0为开放)。2)若在运行用户程序时,同时出现第2、4级中断请求,而在处理第2级中断过程中, 又同时出现1、3、级中断请求,试画出此时CPU运行过程示意图。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"空","type":"short_answer","answer":"1)中断屏蔽是用来改变中断处理优先级的,因此这里应该是使中断屏蔽位实现中断处理 优先级为1>4>5>2>3。也就是说,1级中断的处理优先级最高,说明1级中断对其他所有中 断都屏蔽,其屏蔽字为全1; 3级中断的处理优先级最低,所以除了 3级中断本身之外,对其 他中断全都开放,其屏蔽字为00100。以此类推,得到所有各级中断的中断服务程序中设置 的中断屏蔽字见下表。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第7章)/image4.png'/>2) CPU运行程序的执行过程如下图所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第7章)/image5.png'/>具体过程说明如下:在运行用户程序时,同时出现2、4级中断请求,因为用户程序对所有中断都开放,所以, 在中断响应优先级排队电路中,有2、4两级中断进行排队判优,根据中断响应优先级2>4, 因此先响应2级中断。在CPU执行2级中断服务程序过程中,首先保护现场、保护旧屏蔽字、 设置新的屏蔽字01100,然后,在具体中断处理前先开中断。一旦开中断,贝!J马上响应4级 中断,因为2级中断屏蔽字中对4级中断的屏蔽位是0,即对4级中断是开放的。在执行4级中断结束后,回到2级中断服务程序执行;在具体处理2级中断过程中,同时发生了1、3、5级中断请求,因为2级中断对1、5级中断开放,对3级中断屏蔽,所以只有1和5两级中 断进行排队判优,根据中断响应优先级1>5,所以先响应1级中断。因为1级中断处理优先 级最高,所以在其处理过程中不会响应任何新的中断请求,直到1级中断处理结束?然后返 回2级中断;因为2级中断对5级中断开放,所以在2级中断服务程序中执行一条指令后,又转去执行5级中断服务程序,执行完后回到2级中断,在2级中断服务程序执行过程中,虽然3级中断有请求,但是,因为2级中断对3级中断不开放,所以,3级中断一直得不到相应。直到2级中断处理完回到用户程序,才能响应并处理3级中断。"},{"id":"learncoder_156_24051","stem":"(2015年中科院真题)依赖硬件的数据传送方式是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"DMA方式依赖DMA控制器进行数据传送,DMA控制器是一种硬件设 备,C正确。程序查询和程序中断方式都是由CPU进行控制,不需要额外的硬件设备。简答题","type":"choice","options":{"B":"程序中断","C":"DMA","D":"无","A":"程序控制"},"answer":"C"},{"id":"learncoder_156_24049","stem":"(2017年统考真题)I/O指令实现的数据传送通常发生在( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":" I/O端口是CPU与设备之间的交接面。由于主机和I/O设备的工作方式和 工作速度有很大差异,I/O端口就应运而生。在执行一条指令时,CPU使用地址总线选择所 请求的I/O端口,使用数据总线在CPU寄存器和端口之间传输数据,故选D。","type":"choice","options":{"B":"通用寄存器和I/O设备之间","A":"I/O设备和I/O端口之间","C":"I/O端口和I/O端口之间","D":"通用寄存器和I/O端口之间"},"answer":"D"},{"id":"learncoder_156_24050","stem":"(2017年统考真题)下列关于多重中断系统的叙述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"多重中断系统在保护被中断进程现场时关中断,执行中断处理程序时开 中断,B错误。CPU—般在一条指令执行•结束的阶段采样中断请求信号,查看是否存在中断 请求,然后决定是否响应中断,A、D正确。中断请求一般来自CPU以外的事件,异常一般 发生在CPU内部,C正确。","type":"choice","options":{"A":"在一条指令执行结束时响应中断","D":"CPU通过采样中断请求信号检测中断请求","B":"中断处理期间CPU处于关中断状态","C":"中断请求的产生与当前指令的执行无关"},"answer":"B"},{"id":"learncoder_156_24048","stem":"(2016年统考真题)异常是指令执行过程中在处理器内部发生的特殊事件,中断是来自处理器外部的请求事件。下列关于中断或异常情况的叙述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"中断是指来自CPU执行指令以外事件的发生,如设备发出I/O结束中断, 表示设备输入/输出处理已经完成,希望处理器能够向设备发出下一个输入/输出请求,同时让 完成输入/输出后的程序继续运行。时钟中断,表示一个固定的时间片已到,让处理器处理计 时、启动定时运行的任务等。这一类中断通常是与当前程序运行无关的事件,即它们与当前 处理器运行的程序无关。异常也称内中断、例外或陷入,指源自CPU执行指令内部的事件, 如程序的非法操作码、地址越界、算术溢出、虚存系统的缺页以及专门的陷入指令等引起的 事件,A错误。","type":"choice","options":{"A":"“访存时缺页”属于中断","C":"“DMA传送结束*”属于中断","B":"“整数除以0”属于异常","D":"“存储保护错”属于异常"},"answer":"D"},{"id":"learncoder_156_24044","stem":"(2014年统考真题)若某设备中断请求的响应和处理时间为100ns,每400ns发出一 次中断请求,中断响应所允许的最长延迟时间为50ns,则在该设备持续工作过程中,CPU用 于该设备的I/O时间占整个CPU时间的百分比至少是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"每400ns发出一次中断请求,而响应和处理时间为100ns,其中容许的延 迟为干扰信息,因为在50ns内,无论怎么延迟,每400ns还是要花费100ns处理中断的,所 以该设备的I/O时间占整个CPU时间的百分比为100ns/400ns=25%,选B。","type":"choice","options":{"B":"25%","C":"37.5%","D":"50%","A":"12.5%"},"answer":"B"},{"id":"learncoder_156_24047","stem":"(2015年统考真题)内部异常(内中断)可分为故障(Fault)、陷阱(Trap)和终止(Abort)三类。下列有关内部异常的叙述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"内中断是指来自CPU和内存内部产生的中断,包括程序运算引起的各种 错误,如地址非法、校验错、页面失效、非法指令、用户程序执行特权指令自行中断(INT) 和除数为零等,以上都在指令的执行过程中产生,A正确。这种检测异常的工具肯定是由CPU (包括控制器和运算器)实现的,B正确。内中断不能被屏蔽,一旦出现应立即处理,C正确。 对于D,考虑特殊情况,如除数为零和自行中断(INT)都会自动跳过中断指令,所以不会返 回到发生异常的指令继续执行,故错误。","type":"choice","options":{"D":"内部异常处理后返回到发生异常的指令继续执行","B":"内部异常的检测由CPU内部逻辑实现","A":"内部异常的产生与当前执行指令相关","C":"内部异常的响应发生在指令执行过程中"},"answer":"D"},{"id":"learncoder_156_24042","stem":"(2013年统考真题)下列关于中断I/O方式和DMA方式比较的叙述中,错误的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"中断处理方式:在I/O设备输入每个数据的过程中,由于无需CPU干预, 因此可使CPU与I/O设备并行工作。仅当输完一个数据时,才需CPU花费极短的时间去做 些中断处理。因此中断申请使用的是CPU处理时间,发生的时间是在一条指令执行结束之后, 数据是在软件的控制下完成传送。DMA方式与之不同。DMA方式的数据传输的基本单位是数据块,即在CPU与I/O设备 之间,每次传送至少一个数据块;DMA方式每次申请的是总线的使用权,所传送的数据是从 设备直接送入内存的,或者相反;仅在传送一个或多个数据块的开始和结束时,才需CPU干 预,整块数据的传送是在控制器(硬件)的控制下完成的。中断I/O方式一般适用于数据传输率比较低的外部设备(不适合快速外部设备),而DMA 方式一般适用于快速外部设备,故D选项错误。","type":"choice","options":{"B":"中断响应发生在一条指令执行结束后,DMA响应发生在一个总线事务完成后","C":"中断I/O方式下数据传送通过软件完成,DMA方式下数据传送由硬件完成","D":"中断I/O方式适用于所有外部设备,DMA方式仅适用于快速外部设备","A":"中断I/O方式请求的是CPU处理时间,DMA方式请求的是总线使用权"},"answer":"D"},{"id":"learncoder_156_24045","stem":"(2015年统考真题)若磁盘转速为7200r/min,平均寻道时间为8ms,每个磁道包含1000个扇区,则访问一个扇区的平均存取时间大约是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"存取时间=寻道时间+延迟时间+传输时间。存取一个扇区的平均延迟时间为旋转半周的时间即(60/7200) /2=4・17ms,传输时间为(60/7200) /1000=0.01ms,因此访问 一个扇区的平均存取时间为4.17ms+0.01ms+8ms=12.18ms即12.2mso\t(","type":"choice","options":{"A":"8.1ms","D":"20.5ms","C":"16.3ms","B":"12.2ms"},"answer":"B"},{"id":"learncoder_156_24046","stem":"(2015年统考真题)在采用中断I/O方式控制打印输出的情况下,CPU和打印控制接口中的I/O端口之间交换的信息不可能是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"在程序中断I/O方式中,CPU和打印机直接交换,打印字符直接传输到打印机的I/O端口,不会涉及主存地址。而CPU和打印机通过I/O端口中状态口和控制口来 实现交互。","type":"choice","options":{"A":"打印字符","D":"控制命令","C":"设备状态","B":"主存地址"},"answer":"B"},{"id":"learncoder_156_24043","stem":"(2014年统考真题)下列有关I/O接口的叙述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"采用统一编址时,CPU访存和访问I/O端口用的是一样的指令,所以访 存指令可以访问DO端口,D选项错误,其他三个选项均为正确陈述,选D。","type":"choice","options":{"B":"I/O接口中CPU可访问的寄存器称为I/O端口","A":"状态端口和控制端口可以合用同一个寄存器","D":"采用统一编址方式时,CPU不能用访存指令访问I/O端口","C":"采用独立编址方式时,I/O端口地址和主存地址可能相同"},"answer":"D"},{"id":"learncoder_156_24038","stem":"在单级中断系统中,中断服务程序执行顺序是(\t)。a.保护现场;b.开中断;c.关中断;d.保存断点;e.中断事件处理;f.恢复现场;g.中断返回","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"在单级中断系统中,中断服务程序的执行顺序为:①保存现场;②中断 事件处理;③恢复现场;④开中断;⑤中断返回。归纳总结:程序中断有单级中断和多级中断之分,单级中断在CPU执行中断服务程序的 过程中不能被再打断,即不允许中断嵌套;而多级中断在执行某个中断服务程序的过程中, CPU可以去响应级别更高的中断请求,即允许中断嵌套。解题技巧:B、C、D 3个选项的第一个任务(保存断点或关中断)都是中断隐指令中的 操作,由硬件来完成,与中断服务程序无关,可以马上排除。","type":"choice","options":{"C":"c→d→e→f→g","A":"a→e→f→b→g","B":"c→a→e→g","D":"d→a→e→f→g"},"answer":"A"},{"id":"learncoder_156_24041","stem":"(2013年统考真题)某磁盘的转速为10000r/min,平均寻道时间是6ms,磁盘传输速率是20MB/S,磁盘控制器延迟为0.2ms,读取一个4KB的扇区所需平均时间约为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"\"首先,计算等待时间。由于磁盘的转速是10 000r/min,于是可得转一圈 的时间为6ms,于是可以得到平均等待时间为3ms;其次,由于磁盘传输速率为20MB/s,因 此读取4KB的信息需要0.2mso于是,可以得到读取一个4KB的扇区所需平均时间约为:平 均等待时间+寻道时间+读取时间+控制器延迟时间=3ms+6ms+0.2ms+0.2ms=9.4ms。","type":"choice","options":{"A":"9ms","B":"9.4ms","C":"12ms","D":"12.4ms"},"answer":"B"},{"id":"learncoder_156_24036","stem":"某计算机系统中,假定硬盘以中断方式与处理器进行数据输入/输出,以16位为传输单位,传输率为50KB/S,每次传输的开销(包括中断)为100个CPU时钟,处理器的主 频为50MHz,请问硬盘数据传送时占处理器时间的比例是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"由于处理器的主频为50MHz,则CPU时钟周期=l/(50x 106/s)=2x 10'8s=20ns□ 因此,每次进行硬盘数据传送(16位)时,CPU所花的时间=100x20ns=2 000nso而硬盘传输 16 位数据的总时间=16bit/(50KB/s)=2B/(50xl03B/s)=0.000 04s=40 OOOnSo 所以,硬盘 数据传送占处理器时间的比例=2 000ns/40 000ns=0.05=5%o","type":"choice","options":{"A":"10%","B":"56.8%","C":"5%","D":"50%"},"answer":"C"},{"id":"learncoder_156_24039","stem":"(2013年统考真题)下列选项中,用于设备和设备控制器(I/O接口)之间互连的接口标准是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"设备和设备控制器(I/O接口)之间互连的接口标准为USB接口标准; PCI和PCI-Express是新一代的总线接口; AGP的全称为加速图像处理端口 (Accelerated Graphics Port),是电脑主板上的一种高速点对点传输通道,供显卡使用,主要应用在三维电 脑图形的加速上。","type":"choice","options":{"B":"USB","A":"PCI","D":"PCI-Express","C":"AGP"},"answer":"B"},{"id":"learncoder_156_24037","stem":"下列选项中,能引起外部中断的事件是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"在这4个选项中,除键盘输入以外,其余3个选项都不是外部事件引起 的中断。选项B和C的中断源是运算器,选项D的中断源是存储器。","type":"choice","options":{"C":"浮点运算下溢","D":"访存缺页","B":"除数为0","A":"键盘输入"},"answer":"A"},{"id":"learncoder_156_24040","stem":"(2013年统考真题)下列选项中,用于提高RAED可靠性的措施有(\t)。I.磁盘镜像\tII.条带化III.奇偶校验\tIV.增加Cache机制","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"磁盘镜像就是将磁盘的数据复制到其他磁盘,如果某个磁盘出现问题,、 可以通过复制的数据来恢复,以此达到提高可靠性的目的。条带化技术主要用来解决磁盘冲突问题,因为条带化技术可以将_块连续的数据分成很 多小部分并把它们分别存储到不同的磁盘上去。这就能使多个进程同时访问数据的多个不同 部分且不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上 的I/O并行能力,从而获得非常好的性能。奇偶校验很明显可以提高RAID的可靠性。增加Cache mil顶多是提升了访问速度,与可靠性无关。综上所述,只有磁盘镜像和奇偶校验可以用于提高RAID的可靠性。","type":"choice","options":{"C":"仅I 、III、IV","D":"仅II、III、IV","B":"仅I、III","A":"仅I、II"},"answer":"B"},{"id":"learncoder_156_24035","stem":"传输一幅分辨率为640像素><480像素、65 536色的图片(采用无压缩方式),假设采用数据传输速度为56kbit/s,大约需要的时间是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"首先计算出每幅图的存储空间,然后除以数据传输率,就可以得出传输 一幅图的时间。图片的容量不仅与分辨率有关,还与颜色数有关,分辨率越高、颜色数越多, 图像所占的容量就越大。图像的颜色数为65 536色,意味着颜色深度为log265 536=16 (即用16位的二进制数表 示65 536种颜色),则一幅图所占据的存储空间为640x480xl6bit=4 915 200bito数据传输速 度为 56kbit/s,则传输时间=4 915 200bit/(56xl03bit/s)=87.77so","type":"choice","options":{"C":"85.71s","D":"87.77s","B":"42.86s","A":"34.82s"},"answer":"D"},{"id":"learncoder_156_24031","stem":"CPU在中断周期中( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"CPU在中断周期中执行中断隐指令,完成以下工作:1)保护程序断点。2)寻找中断服务程序的入口地址。3)关中断。","type":"choice","options":{"C":"与I/O设备传送数据","D":"处理异常情况","A":"执行中断服务程序","B":"执行中断隐指令"},"answer":"B"},{"id":"learncoder_156_24032","stem":"在DMA方式中,周期窃取是窃取总线占用权一个或者多个(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"这个属于概念题。在这种方式下,每当I/O设备发出DMA请求时,I/O 设备便挪用或窃取总线占用权一个或几个存取周期(或者称为主存周期),而DMA不请求时, CPU仍然继续访问主存。","type":"choice","options":{"C":"CPU周期","B":"指令周期","D":"总线周期","A":"存取周期"},"answer":"A"},{"id":"learncoder_156_24033","stem":"DMA方式的接口电路中有程序中断部件,其作用是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":" DMA控制器中的中断机构用于数据块传送完毕时向CPU提出中断请求, CPU将进行DMA传送的结尾处理。归纳总结:DMA控制器中的中断部件,仅当一个数据块传送完毕才被触发,向CPU提 出中断请求,以通知CPU进行DMA传送的结尾处理。它与中断控制器中的功能不相同。","type":"choice","options":{"C":"向CPU提出传输结束","A":"实现数据传送","D":"发中断请求","B":"向CPU提出总线使用权"},"answer":"C"},{"id":"learncoder_156_24034","stem":"在DMA传送方式中,发出DMA请求的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"在DMA传送方式中,首先由外部设备向DMA控制器发出DMA请求信 号,然后由DMA控制器向CPU发出总线请求信号。","type":"choice","options":{"B":"DMA控制器","A":"外部设备","C":"CPU","D":"主存"},"answer":"A"},{"id":"learncoder_156_24028","stem":"禁止中断的功能可以由(\t)来完成。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"当中断允许触发器为“1”时,某设备可以向CPU发出中断请求;当中断 允许触发器为“0”时,不能向CPU发出中断请求。所以说设置中断允许触发器的目的就是来控制是否允许某设备发出中断请求。","type":"choice","options":{"B":"中断允许触发器","D":"中断禁止触发器","C":"中断屏蔽触发器","A":"中断触发器"},"answer":"B"},{"id":"learncoder_156_24029","stem":"某机有4级中断,优先级从高到低为1-2->3->4o若将优先级顺序修改,修改后1级中断的屏蔽字为1011, 2级中断的屏蔽字为1111, 3级中断的屏蔽字为0011, 4级中断的 屏蔽字为0001,则修改后的优先顺序从高到低为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"每个中断源对应一个屏蔽字,由多个中断屏蔽触发器组成。某个中断屏蔽 触发器为“1”表示屏蔽,为“0”表示开放。通过改变中断屏蔽字可以动态地改变中断处理 的次序。解题技巧:优先级别越高,屏蔽字中“1”的个数就越多。在此题中有4级中断,贝!J最高 优先级的屏蔽字应为4个“1”,接下来“1”的个数将依次减少,据此很容易确定4级中断的 中断处理次序。","type":"choice","options":{"D":"2—3-> 1—4","B":"1—3->4—2","A":"3->2->1->4","C":"2->1->3->4"},"answer":"C"},{"id":"learncoder_156_24030","stem":"中断屏蔽字的作用是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"每个中断源都有一个中断屏蔽触发器,当其为“1”时,CPU不响应该中 断源的请求。将所有中断屏蔽触发器组合起来,构成一个中断屏蔽寄存器,而中断屏蔽寄存 器的内容即为中断屏蔽字,所以就可以通过改变屏蔽字来暂停对某些中断源的处理。","type":"choice","options":{"B":"暂停对某些中断源的处理","A":"暂停外设对主存的访问","D":"暂停CPU对主存的访问","C":"暂停对一切中断的处理"},"answer":"B"},{"id":"learncoder_156_24027","stem":"中断服务程序的最后一条指令是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"这个不用多解释了,执行完中断服务程序肯定是要返回的,即中断返回 指令。","type":"choice","options":{"A":"转移指令","C":"中断返回指令","B":"出栈指令","D":"开中断指令"},"answer":"C"},{"id":"learncoder_156_24025","stem":"\t中断响应是在(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"CPU响应中断必须满足以下3个条件;1)CPU接收到某个中断源的请求信号。2)CPU允许中断,即开中断。3)—条指令执彳丁完毕。","type":"choice","options":{"D":"一条指令执行的任何时刻","A":"一条指令执行开始","C":"一条指令执行之末","B":"一条指令执行中间"},"answer":"C"},{"id":"learncoder_156_24026","stem":"下列操作中,不属于“中断隐指令”所完成的是(\t)。I.关中断\tii.开中断\tIII.保护现场Iv.保存断点\tV.将中断服务程序首地址送PC","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"CPU响应中断之后,经过某些操作,转去执行中断服务程序。这些操作 是由硬件直接实现的,称为中断隐指令。中断隐指令并不是指令系统中的一条真正的指令, 它没有操作码,所以中断隐指令是一种不允许、也不可能为用户使用的特殊指令。它所完成 的操作如下:保存断点。为了保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须 将原来程序的断点(即程序计数器(PC)的内容)保存起来。关中断。在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期 间不被新的中断打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕之后能 接着正确地执行下去。引出中断服务程序。弓I出中断服务程序的实质就是去取中断服务程序的入口地址并 传送给程序计数器(PC)。剩下就是中断服务程序的操作:保护现场和屏蔽字。进入中断服务程序后首先要保存现场,现场信息一般指的是程 序状态字、中断屏蔽寄存器和CPU中某些寄存器的内容。开中断。这将允许更高级中断请求得到响应,实现中断嵌套。执行中断服务程序。这是中断系统的核心。关中断。保证在恢复现场和屏蔽字时不被打断。恢复现场和屏蔽字。将现场和屏蔽字恢复到原来的状态。开中断、中断返回。中断服务程序的最后一条指令通常是一条中断返回指令,使其 返回到原程序的断点处,以便继续执行原程序。","type":"choice","options":{"D":"III、v","C":"II、III","A":"I、II","B":"II、III、V"},"answer":"C"},{"id":"learncoder_156_24022","stem":"隐指令指()。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"隐指令不是指令系统中一条真正的指令,其没有操作码,例如,中断隐 指令就是一种不允许、也不可能为用户使用的特殊“指令”。","type":"choice","options":{"A":"操作数隐含在操作码中的指令","B":"在一个机器周期里完成全部操作的指令","D":"指令系统中没有的指令","C":"隐含地址码的指令"},"answer":"D"},{"id":"learncoder_156_24019","stem":"设一个磁盘盘面共有200个磁道,盘面总存储容量60MB,磁盘旋转一周的时间为 25ms,每个磁道有8个扇区,各扇区之间有一间隙,磁头通过每个间隙需1.25mso则磁盘通 道所需最大传输率是(","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"每个磁道的容量=60MB/200=0・3MB,读一个磁道数据的时间等于磁盘旋转 一周的时间减去经过扇区之间的间隙的时间(每个磁道有8个间隙),即读一个磁道数据的时 间=25ms-1.25msx8=15ms,磁盘的数据传输率=0・3MB/15ms=0・3MB/0・015s=20MB/s。","type":"choice","options":{"B":"60MB/s","D":"20MB/s","C":"83.3MB/s","A":"10MB/s"},"answer":"D"},{"id":"learncoder_156_24020","stem":"为提高存储器的存取效率,在安排磁盘上信息分布时,通常是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"磁盘各记录面上相同编号(位置)的磁道称为一个圆柱面。当主机存放 文件时,应尽可能地将它存放在同一圆柱面中。这是因为在同一圆柱面上各记录面的磁头已 同时定位,换道的时间只是磁头选择电路的译码时间,速度很快。若选择同一记录面上的不 同磁道,则每次换道时都要进行磁头定位操作,速度较慢。","type":"choice","options":{"D":"上述方法均有效","B":"尽量将同一文件存放在一个扇区或相邻扇区的各磁道上","C":"尽量将同一文件存放在不同面的同一磁道上","A":"存满一面,再存另一面"},"answer":"C"},{"id":"learncoder_156_24023","stem":"在中断周期,CPU主要完成以下工作(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":" 在中断周期,CPU完成的任务就是执行中断隐指令,其主要工作有3个, 正如A选项所示。解题技巧:中断隐指令完成的操作共有3个,C、D选项都只有两个操作,所以可以排 除掉。而B选项首先要开中断,显然这个操作是没有必要的,因为CPU响应中断的条件之一 就是开中断,只有开中断才有可能进入中断周期,因此只能选择A。\t.","type":"choice","options":{"B":"开中断,保护断点,发中断响应信号并形成中断服务程序入口地址","C":"关中断,执行中断服务程序","A":"关中断,保护断点,发中断响应信号并形成中断服务程序入口地址","D":"开中断,执行中断服务程序"},"answer":"A"},{"id":"learncoder_156_24021","stem":"下列选项中,(\t)不是发生中断请求的条件。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":" A选项不是发生中断请求的条件,而是CPU响应中断的条件。解题技巧:B选项是产生外部中断的条件;C选项是产生内部中断的条件;D选项是产 生DMA结束中断的条件。采用排除法可以方便地得到结果。","type":"choice","options":{"A":"一条指令执行结束","D":"—次DMA操作结束","C":"机器内部发生故障","B":"—次I/O操作结束"},"answer":"A"},{"id":"learncoder_156_24024","stem":"在具有中断向量表的计算机中,中断向量地址是( )。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":" 在具有中断向量表的计算机中,中断向量地址是中断向量表的地址,由 于中断向量表保存着中断服务程序入口地址,因此中断向量地址是中断服务程序入口地址的 地址。","type":"choice","options":{"A":"子程序入口地址","D":"例行程序入口地址","C":"中断服务程序入口地址的地址","B":"中断服务程序入口地址"},"answer":"C"},{"id":"learncoder_156_24015","stem":"某计算机的I/O设备采用异步串行传送方式传送字符信息,字符信息的格式为:1位 起始位、7位数据位、1位检验位、1位停止位。若要求每秒传送480个字符,那么该I/O设 备的数据传输率应为( )bit/s。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"由于每个字符都由10位组成(1+7+1+1),且每秒传送480个字符,故该 I/O设备的数据传输率应为4800bit/so","type":"choice","options":{"A":"1200","B":"4800","D":"2400","C":"9600"},"answer":"B"},{"id":"learncoder_156_24013","stem":"CRT的分辨率为1024x512像素,像素的颜色数为256,则刷新存储器的容量为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"刷新存储器的容量=分辨率x表示像素颜色数的位数。由于28=256,因此需 要8位来表示像素的颜色数。故刷新存储器的容量=1024x512x8biL512KB。","type":"choice","options":{"C":"512KB","D":"2MB","A":"256MB","B":"1MB"},"answer":"C"},{"id":"learncoder_156_24016","stem":"各种外部设备均通过(\t)电路,才能连接到系统总线上。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"本题考查接口的基本概念。接口就是为了主机和外部设备之间传送信息而 设置的硬件电路,其基本功能就是在系统总线和外部设备之间传输各种控制信号,并且提供 数据缓冲等作用。","type":"choice","options":{"A":"外设","D":"接口","B":"内存","C":"中断"},"answer":"D"},{"id":"learncoder_156_24014","stem":"若每个汉字用16x16的点阵表示,7500个汉字的字库容量是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"每个16x16点阵汉字需占用32B(256bit),汉字的字库容量=7500x32B=240 OOOBo","type":"choice","options":{"C":"320KB","A":"16KB","B":"240KB","D":"1MB"},"answer":"B"},{"id":"learncoder_156_24017","stem":"在统一编址的方式下,存储单元和I/O设备是靠(\t)来区分的。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"在统一编址情况下,尽管存储单元和I/O设备共用一个存储空间,但是一 般都会规定某块地址空间作为I/O设备的地址,凡是在这块地址范围内的访问,就是对I/O 设备的访问。","type":"choice","options":{"C":"不同的指令","D":"不同的数据线","A":"不同的地址码","B":"不同的地址线"},"answer":"A"},{"id":"learncoder_156_24018","stem":"在独立编址的方式下,存储单元和I/O设备是靠(\t)来区分的。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"独立编址指I/O端口地址与存储器地址无关,独立编址方式下CPU需要设置专门的输入/输出指令来访问端口。","type":"choice","options":{"C":"不同的指令","D":"不同的数据线","A":"不同的地址码","B":"不同的地址线"},"answer":"C"},{"id":"learncoder_156_24012","stem":"对于字符显示器,主机送给显示器的应是显示字符的(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"在字符显示器中,主机送给显示器的只是显示字符的ASCH码,然后由显 示器中的字库将其转换成相应字符的字形(模)点阵码。","type":"choice","options":{"D":"行点阵码","A":"ASCH码","B":"列点阵码","C":"BCD码"},"answer":"A"},{"id":"learncoder_156_24011","stem":"计算机的外部设备指()。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"外部设备的定义:除主机以外的硬件装置统称为外部设备,包括输入/输出 设备和外存储器。","type":"choice","options":{"A":"输入/输出设备","B":"外存储器","C":"输入瀚出设备和外存储器","D":"以上均"},"answer":"C"},{"id":"learncoder_156_20582","stem":"某计算机的CPU主频为500 MHz,MIPS为50(即每秒钟平均执行5千万条指令)。假定 某硬盘的数据传输率为4 Mbps且仅有10%的时间采用中断方式与主机进行数据传送,以128位 为传输单位,要求没有任何数据被错传。对应的中断服务程序包含19条指令,中断服务的其他 开销相当于1条指令•的执行时间。请回答下列问题,要求给出计算过程。(1)\t在中断方式下,CPU用于该硬盘数据传输的时间占整个CPU时间的百分比是多少?(2)\t现该硬盘改用DMA方式传送数据。假定每次DMA传送数据块的大小为8 000 B,且 DMA预处理和后处理的总开销为1 000个时钟周期,启动硬盘的开销为500个时钟周期。则在 硬盘100%的时间处于工作状态时,CPU用于该硬盘I/O的时间占整个CPU时间的百分比是多 少(假设DMA和CPU之间没有访存冲突)?","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"35. 空","type":"short_answer","answer":"(1)为了保证没有任何数据被错传海秒钟需要4 MB/(128b/8)=0.25M次中断。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第13章/header4.xml'/>由于执行1条指令平均所需的时钟周期CPI = 500 MHz/50MIPS = 10,则在一秒钟内完成这 么多次中断需要 0.25Mx[(19+l)xl0]/500 MHz = 0. ls已知硬盘仅有10%的时间进行数萝传送,则CPU用于该硬盘数据传输的时间占整个CPU 时间的百分比是0.1x10%=1%。\t(2)为了保证没有任何数据被错传,每秒钟需要DMA:4 MB/8 000 B = 500次。完成这么多次 DMA 需要:500x(l 000+500)/500 MHz = 0.001 5 so则在DMA方式下,CPU用于该硬盘I/O的时间占整个CPU时间的百分比是0.001 5 = 0.15%o\t"},{"id":"learncoder_156_20579","stem":"采用“周期挪用”方式进行DMA传送时,每传送一个数据要挪用一个(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"采用“周期挪用”时,每传送一个数据,DMA要挪用一个存储周期。","type":"choice","options":{"C":"时钟周期","A":"存储周期","B":"机器周期","D":"指令周期"},"answer":"A"},{"id":"learncoder_156_20576","stem":"某转速为7 200 rpm的磁盘共有1 024个磁道,道间移动时间为0. 01 mso .则该磁盘的平均存取时间(Average Access Time)为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"在忽略掉较短的数据传输时间的情况下,磁盘的平均存取时间近似等于平均寻道时 间和平均等待时间之和。平均寻遣时间等于移动一半磁道所花时间,本题为(1 024/2)* 0.01 ms = 512x 0.01 ms = 5.12 mso平均等待时间取为磁盘旋转一周所花时间的一半,本题为 (60x1 000/7 200)/2 = 4.16 mso 则磁盘的平均存取时间=5.12+4:16 = 9.28 ms","type":"choice","options":{"C":"19.56 ms","B":"9.28 ms","D":"14.4 ms","A":"13.45 ms"},"answer":"B"},{"id":"learncoder_156_20583","stem":"若机器共有5级中断,中断响应优先级由高到低的顺序为1->2->3->4->5,现要求实际的 中断处理优先级由高到低的顺序为4->1->3->5->2请设计各级中断的中断屏蔽字。若在运行 用户程序(主程序)时,同时出现第3、4级中断请求,而在处理第3级中断未完成时,又同时岀现 第1、2、5级中断请求,请画出CPU完成中断服务程序过程的示意图。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"空","type":"short_answer","answer":"设“0”代表屏蔽,\"1”代表开放,则各级中断的中断屏蔽字如下表所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第13章/image1.png'/>"},{"id":"learncoder_156_20577","stem":"中断隐指令负责保存存储在(\t)中的信息。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"中断隐指令负责保存断点信息,如JC和程序状态字寄存器PSWR。","type":"choice","options":{"C":"程序计数器(PG)","B":"指令寄存器(IR)","D":"变址寄存器","A":"累加器(ACC)"},"answer":"C"},{"id":"learncoder_156_20578","stem":"在()时,CPU会自动查询有无中断请求,进而可能进入中断响应周期。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"CPU在一条指令执行结束时查询有无中断请求。","type":"choice","options":{"A":"一条指令执行结束","C":"机器内部发生故障","D":"一次DMA操作结束","B":"一次1/0操作结束"},"answer":"A"},{"id":"learncoder_156_20572","stem":"下列关于中断与DMA的说法中,错误的是()","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查的知识点包括:只有外设向CPU发出“中断请求”信号,DMA控制器向 CPU发岀的是“总线请求”信号;DMA请求信号是外设发给DMA控制器的;中断请求的是CPU 的时间,若CPU响应中断则发出“中断响应”信号;DMA控制器向CPU请求的是总线控制权,若 CPU让出总线则发出“总线允许”信号。","type":"choice","options":{"C":"中断请求的是CPU的时间","B":"DMA请求信号是外设发给DMA控制器的","D":"DMA控制器向CPU请求的是总线控制权","A":"无论是外设还是DMA控制器,都向CPU发出“中断请求”信号"},"answer":"A"},{"id":"learncoder_156_20569","stem":"下列操作不属于“中断隐指令”所完成的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查“中断隐指令”的功能。","type":"choice","options":{"C":"保护现场","B":"保存断点","D":"将中断服务程序首地址送PC","A":"关中断"},"answer":"C"},{"id":"learncoder_156_20570","stem":"CPU是通过(),将DMA欲传送数据块在内存中的首地址写入DMA控制器的地址寄存器的。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查CPU对DMA控制器的操作原理。","type":"choice","options":{"D":"I/O总线","C":"数据总线","A":"地址总线","B":"控制总线"},"answer":"C"},{"id":"learncoder_156_20571","stem":"通道向CPU发出的信号是()","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查的知识点是:CPU首先执行“启动I/O”指令来启动通道,然后通道工作执 行I/O。I/O结束后,通道向CPU发出“中断请求”信号。CPU响应此中断请求,对I/O操作进行 统计、记账等后处理。","type":"choice","options":{"D":"I/O就绪","A":"启动I/O","C":"总线清求","B":"中断请求"},"answer":"B"},{"id":"learncoder_156_20575","stem":"下列说法中,正确的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查的知识点包括:一个I/O接口中有多个I/O端口,每个端口都有一个地址, 主机用多个地址来访问一个外设;输入/输出指令实现的是CPU和I/O端口之同的信息交换;异 步总线的带宽比同步总线的带宽低,同步总线的优点就是带宽高。采用MFM(改进调频制)记录 方式的磁表面存储器的记录密度比FM(调频制)方式的记录密度高一倍左右。","type":"choice","options":{"A":"每个外设用一个接口电路与主机连接,主机只能用唯一的地址来访问一个外设","D":"采用MFM记录方式的磁表面存储器的记录密度比FM方式的记录密度高一倍左右","C":"异步总线的带宽比同步总线的带宽高","B":"输入/输出指令实现的是主存和I/O端口之间的信息交换"},"answer":"D"},{"id":"learncoder_156_20573","stem":"下列关于DMA的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查的知识点包括:DMA方式用于在高速外设和主存之间直接进行成组数据 传送的;如果用“周期挪用”法,DMA控制器申请得到总线使用权后,每次占用一次总线事务进 •行一个数据传送,传送结束后立即释放总线;如果用“CPU停止”法,DMA控制器将在一批数据 传送完成后才释放总线;传送DMA的总线优先权比CPU高。","type":"choice","options":{"B":"DMA方式用于传送成组数据","A":"DMA方式适用无在高速外设和主存之间直接进行数据传送","D":"若DMA控制器与CPU同时请求总线,则DMA控制器将获得总线的使用权","C":"DMA控制器申请总线使用权后,总是要等一批数据传送完成后才释放总线"},"answer":"C"},{"id":"learncoder_156_20574","stem":"以下情况中,不会发出中断请求的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查的知识点包括:“ Cache失效”不会发出中断请求,DMA传送结束、存储保 护违例(即对内存访问类型不属于允许访问的类型)、非法指令操作码(即该指令操作码未定义 或当前用户没有使用该指令的权限)都会发出中断请求。","type":"choice","options":{"C":"存储保护违例","D":"非法指令操作码","A":"Cache失效","B":"DMA传送结束"},"answer":"A"},{"id":"learncoder_156_20566","stem":"要实现多重中断,中断服务程序执行顺序是(\t)I.保护现场\tII.开中断\tIII.关中断\tIV.保存断点V.中断事件处理 VI.恢复现场\tVII.中断返回","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查多重中断下中断服务程序执行顺序。","type":"choice","options":{"A":"I->II->V->III->VI->II->VII","C":"IV->I->II->V->III->VI->II->VII","B":"III->I->II->V->III->VI->II->VII","D":"III->IV->I->II->V->III->VI->II->VII"},"answer":"A"},{"id":"learncoder_156_20563","stem":" 下列I/O接口中,属于并行接口的是(\t)。I.Intel 8255 II. Intel 8251 III, USB IV. SCSI V. IDE VI IEEE 1394","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查并行接口与串行接口的实例。","type":"choice","options":{"A":"I、II、III、IV","C":"I、III、V、VI","B":"I、IV、V","D":"全部。"},"answer":"B"},{"id":"learncoder_156_20567","stem":"下列关于中断屏蔽的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查“中断屏蔽”的基本概念。","type":"choice","options":{"A":"中断屏蔽字改变了不同中断请求的响应优先级","D":"对于一个特定计算机的中断系统,它的中断屏蔽字是固定不变的","B":"中断屏蔽字改变了不同中断请求的处理优先级","C":"一个中断请求被屏蔽,意味着它的请求在得到响应后不能执行它对应的处理程序"},"answer":"B"},{"id":"learncoder_156_20564","stem":"下列关于“中断和异常”的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查“中断和异常”的基本概念及其区别。","type":"choice","options":{"C":"中断处理程序的执行是不能被中断的","A":"在执行指令的过程中,CPU时刻检测是否有中断请求","D":"中断处理中的“断点”是指当前指令的存储地址","B":"异常处理完毕后,CPU重新执行引起异常的指令"},"answer":"B"},{"id":"learncoder_156_20561","stem":"下列关于“I/O端口的编址方式”的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查I/O端口不同的编址方式的差别。","type":"choice","options":{"A":"当I/O端口采用独立编址方式,I/O端口的地址译码较简单,寻址速度快","B":"当I/O端口采用独立编址方式,CPU需要设置专门的区分访问主存或I/O的信号引脚","D":"当I/O端口采用统一编址方式时,CPU能够访问的主存空间变少","C":"当I/O端口采用统一编址方式时,CPU只能用访问主存的指令来访问I/O端口"},"answer":"C"},{"id":"learncoder_156_20565","stem":"下列关于“中断和异常”的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查“中断和异常”的基本概念及其区别。","type":"choice","options":{"D":"中断处理中的“断点”是指当前程序计数器PC中的值","B":"当前指令执行完毕后,CPU才去检测是否有中断请求","A":"与“中断”一样,“异常”也要经过“请求”、“判优”、“响应”后才得到处理","C":"“中断返回”指令与“返回”指令是两条不同的指令"},"answer":"A"},{"id":"learncoder_156_20562","stem":"下列关于“I/O端口的编址方式”的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查1/0端口不同的编址方式的差别。","type":"choice","options":{"D":"无论采用何种I/O端口编址方式,CPU能够访问的主存空间是一定的","C":"采用独立编址方式时,CPU需要为主存和I/O分别设置专门的地址总线","B":"采用统一编址方式时,CPU还可以用AND、OR或TEST指令访问I/O端口","A":"只有当I/O端口采用独立编址方式,CPU不需要提供专门的I/O指令"},"answer":"B"},{"id":"learncoder_156_20568","stem":"下列条件不是中断响应的前提条件的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查中断响应的前提条件。","type":"choice","options":{"D":"当前指令执行完毕","C":"至少有一个未被屏蔽的中断请求","B":"CPU处于“空闲”状态","A":"GPU处于“开中断”状态"},"answer":"B"},{"id":"learncoder_156_20559","stem":"下列关于I/O端口的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"有些I/O接口的命令(控制)端口和状态端口共用一个寄存器,但数据端口绝对应 该是一个独立的寄存器。","type":"choice","options":{"B":"I/O端口以分时复用的形式依次充当命令(控制)端口、状态端口和数据端口","C":"一个I/O端口要么是输入端口,要么是输出端口","A":"I/O端口就是I/O接口中用户可访问的寄存器","D":"无论采用何种I/O端口的编址方式,CPU都需要提供专门的I/O指令"},"answer":"A"},{"id":"learncoder_156_20556","stem":" 下列功能中,属于I/O接口的功能的是(\t)。I .数据缓冲 II .I/O过程中错误与状态检测 III. I/O操作的控制与定时 IV.数据格式转换 V数据查找或排序\tVI.与主机和外设通信","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查I/O接口的功能。","type":"choice","options":{"D":"全部","C":"I,II,III,IV,VI","B":"I,II,III,IV,V","A":"I,II,III,IV"},"answer":"C"},{"id":"learncoder_156_20560","stem":"下列关于I/O端口的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"只有当I/O端口采用独立编址方式,CPU才需要提供专门的I/O指令。","type":"choice","options":{"B":"一个I/O端口要么是命令/状态端口,要么是数据端口","D":"只有当I/O端口采用统一编址方式,CPU才需要提供专门的I/O指令","C":"一个I/O端曰或者是输入端口,或者是输出端口,或者是双向端口","A":"CPU向I/O设备发出命令是通过对I/O接口中命令端口进行写操作来实现的"},"answer":"D"},{"id":"learncoder_156_20557","stem":"下列关于I/O接口的说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查I/O接口的基本组成和基本概念。","type":"choice","options":{"B":"当I/O接口可以作为数据通信的主控设备时,它的地址总线是双向总线","A":"对I/O的系统调用(如创建文件、读写文件等)是由I/O接口中的程序来完成的","D":"CPU访问I/O接口时要给出I/O接口的地址","C":"一个I/O接口只能连接一个外部设备"},"answer":"B"},{"id":"learncoder_156_20558","stem":"下列关于I/O接口的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"I/O接口都要接受来自CPU的寻址,所以它的地址总线首先是输入的。但是,有些 I/O接口(例如DMA控制器)可以作为总线上的主设备,这样的I/O接口就要输出地址,它的地 址总线就是双向的。","type":"choice","options":{"D":"CPU访问I/O接口时要给出I/O端口的地址","A":"I/O接口不会执行指令","C":"一个I/O接口可以连接多个外部设备","B":"与CPU—样,1/0接口的地址总线都是单向总线"},"answer":"B"},{"id":"learncoder_156_20555","stem":"下列关于磁盘的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查不同磁盘的工作原理及其特点。","type":"choice","options":{"D":"计算磁盘的存取时间时,“寻道时间”和“旋转等待时间”常取其平均值","A":"本质上,优盘(U盘)是一种只读存储器","B":"冗余磁盘阵列(RAID))不能应用于对数据可靠性要求高的场合","C":"未格式化的硬盘容量要大于格式化后的实际容量"},"answer":"B"},{"id":"learncoder_156_20550","stem":"分辨率为1 024像素X768像素的逐行扫描的CRT显示器的帧频为60 Hz,已知水平回扫期占水平扫描周期的20%,则其每个像素点的读出时间是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查像素点读出时间的概念。此题的像素点读出时间等于:水平扫描周期x( 1-20% )/640。其中冰平扫描周期=1/行频,而行频等于:行数x帧频/(1-20%)。","type":"choice","options":{"B":"24.6","D":"57.6","A":"13.6","C":"33.6"},"answer":"A"},{"id":"learncoder_156_20551","stem":"分辨率为1 024像素x768像素的逐行扫描的CRT,像素的颜色数为256,则刷新存储器的容量至少应为(\t)o","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"表示每个像素颜色用8位,共1 024x768个像素,则刷新存储器的容量至少为 1024x768 B = 1 MB","type":"choice","options":{"A":"512 KB","B":"1 MB","D":"2 MB","C":"256 KB"},"answer":"B"},{"id":"learncoder_156_20552","stem":"下列关于显示器的说法中,正确的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查CRT一显示器和LCD显示器的工作原理及其特点","type":"choice","options":{"D":"LCD显示器分“逐行扫描”与“隔行扫描”两种,而CRT显示器无需“扫描”操作","B":"只有LCD显示器存在“屏幕闪烁”现象,而CRT显示器不存在","C":"CRT显示器和LCD显示器都需要“刷新”,刷新频率称为帧频","A":"CRT显示器的功耗比LCD显示器的功耗低"},"answer":"C"},{"id":"learncoder_156_20553","stem":"下列关于显示器的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查CRT显示器和LCD显示器的工作原理。","type":"choice","options":{"D":"若颜色深度为24位,则可表示16 M种颜色,称为真彩色","B":"显示器有两种不同的工作模式——字符模式和图形模式","C":"显示器工作于“图形模式”时,不能显示字符","A":"图形显示卡(简称显卡)采用的是专用的图形处理器(Graphics Processing Unit; GPU)"},"answer":"C"},{"id":"learncoder_156_20554","stem":"下列关于磁盘的说法中,正确的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"空","type":"choice","options":{"A":"在一个磁盘上可以同时采用“低密度存储方式”和“高密度存储方式”","B":"“低密度存储方式”下,内道与外道的位密度都是相同的","C":"“高密度存储方式”下,内道上的扇区数目比外道上的扇区数目多","D":"磁盘的存取时间由“寻道时间”、“旋转等待时间”和“数据传送时间“三部分组成"},"answer":"D"},{"id":"learncoder_156_20548","stem":"下列关于键盘的说法中,错误的是(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查键盘的工作原理。","type":"choice","options":{"B":"编码键盘发给主机的是用户所敲键对应的ASCII码","C":"非编码键盘发给主机的是用户所敲键对应的位置码","D":"键盘与主机之间采用的是串行通信","A":"键盘中没有可执行的程序,也就不存在任何的处理器"},"answer":"A"},{"id":"learncoder_156_20549","stem":"下列关于打印机的说法,正确的是(\t)o","key_points":"知识点.练习.专业课练习.计算机组成原理.输入/输出系统","analysis":"此题考查打印机的分类及其工作原理。激光打印机采用的是照相、转印技术。彩色 打印机需要把彩色图像分解成G、M、Y、K四种单色图像。","type":"choice","options":{"A":"主机传送给打印机的ASCII码都对应用户可见的字符","D":"点阵式串行打印机是逐列、逐行打印的","B":"激光打印机属于喷墨打印机的一种","C":"彩色打印机需要把彩色图像分解成R、G、B三种单色图像"},"answer":"D"},{"id":"learncoder_129_12865","stem":"一个磁盘组共有11片,每片有203道,数据传输率为983 040 Bps,磁盘组转速为 3 600 rpg假定每个记录块有1024 B,且系统可挂16台这样的磁盘机,计算磁盘存储器的总容 量并设计磁盘地址格式。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"由于数据传输速率=每-磁道的容量X磁盘转速,且磁盘转速为3 600 rpm =60r/s故 每一磁道的容量=(983 040 Bps)/(60r/s)=16 384B扇区数=16 384 B/1 024 B = 16.表示磁 盘地址格式的参数包括:台数16,记录面20(11个盘片共有20个记录面),磁道数203,扇区数 16,故磁盘地址格式如图4. 34所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image23.png'/>"},{"id":"learncoder_129_12867","stem":"一个Cache—主存系统,采用50 MHz出的时钟,存储器以每一个时钟周期(简称周期)传 输一个字的速率,连续传输8个字,以支持块长为8个字的Cache,每字4个字节。假设读操作所 花的时间是:1个周期接收地址,3个周期延迟花个周期传输8个字:写操作所花的时间是:1个 周期接受地址,2个周期延迟,8个周期传输8个字3个周期恢复和写入纠错码门求出对应下述几种情况的存储器最大带宽°(1)全部访间为读操作。(2)全部访问为写操作°(3)出%的访问为读操作,肪豁的访问为写操作。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"由于存储系统采用50 MHz的时钟,故每一个时钟周期为1/(50 MHz) =0.02μs=20 ns(1〉读操作的时间是Tn=(1+3+8) x 20 ns = 240 ns读操作的带宽是BR =8/Tr =8/(240 X10-9) =33.3x106字/秒≈133. 2 MBps (1M = 220)(2)写操作的时间是Tw=(1 + 2 + 8 + 3) x 20 ns = 280 ns写操作的带宽是Bw=8/Tw =8/(280 ns x lO-9) =28.6x106字/秒≈ 114.4 MBps (1M 二2鋼(3)读/写操作加权后的时间是240 ns xO. 65 + 280 ns xO. 35 =234 ns加权平均带宽是"},{"id":"learncoder_129_12866","stem":"一个1Kx4位的动态RAM芯片,若其内部结构排列成64 x 64形式,且存取周期为 0.1μs(1)若采用分散刷新和集中刷新相结合的方式,刷新信号周期应该取多少?(2)若采用集中刷新,则对该存储芯片刷新一遍需多少时间?死时间率是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"(1)釆用分散和集中刷新相结合的方式,对排列成64x64的存储芯片,需在2ms内将 64行各刷新一遍,则刷新信号的时间间隔为2ms/64=31.25μs故取刷新周期31μs(2)采用集中刷新,对64 x64的芯片,需在2 ms内集中64个存取周期刷新64行。根据题 中给出的存取周期为0.1μs,即在2ms内集6.4μs刷新,则死时间率为(64/20 000) x 100% -0.32%"},{"id":"learncoder_129_12852","stem":"在笳题给出的条件下須画出CPU与存储芯片的连接图,要求;(1)存储芯片地址空间分配为=0~8191为系统程序区;8192~32767为用户程序区。(2)指出选用的存储芯片类型及数量.(3)详细画出片选逻辑。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"根据主存地址空间分配,0-8191为系统程序区,选用1片8Kx8位ROM芯片8192 ~ 32767为用户程序区,选用3片8Kx8位RAM芯片,即<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image14.png'/>"},{"id":"learncoder_129_12855","stem":"设CPU共有16根地址线,8根数据线,并用MREQ作为访存控制信号(低电平有效),用 WR作为读/写控制信号(高电平为读”低电平为写儿现有芯片及各种门电路(门电路自定),如 图4.16所示。画出CPU与存储器的连接图,要求:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image3.png'/>(1)存储芯片地址空间分配为:最小4K地址空间为系统程序区;相邻的4K地址空间为系 统程序工作区;与系统程序丁作区相邻的是2AK用户程序区。(2)指出选用的存储芯片类型及数量(3)详细画岀片选逻辑。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"根据主存地址空间分配,最小4K地址空间为系统程序区,选用1片4 Kx8位ROM芯 片;相邻的4K地址空间为系统程序工作区,选用2片4Kx4位RAM芯片;与系统程序工作区相<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image17.png'/>图斗.29第4。题答图"},{"id":"learncoder_129_12858","stem":"设某微机的寻址范围为64K,接有8片8K的存储芯片#存储芯片的片选信号为 要求:(1)画出选片译码逻辑电路(可选用74138译码器)。(2)写出每片RAM的二进制地址范围。(3)如果运行时发现不论往哪片RAM存放8K数据,以AOOOH为起始地址的存储芯片都有 与之相同的数据,分析故障原因。(4)若出现译码中的地址线A13与CPU断线,并搭接到高电平上的故障,后果如何?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"(1) 8片8K存储芯片的选片逻辑电路如图4. 31所示。Yi(i=0~7)分别为每片RAM的片选信号。(2)8 片 RAM 的寻址范围分别是:OOOOH ~ 1FFFH;2000H - 3FFFH;4000H - 5FFFH? 6000H - 7FFFH ;8000H -9FFFH ; AO00H ~ BFFFH; C000H - DFFFH ; EOOOH - FFFFH。(3)说明74138译码器有误忑输出始终为低口因该输出接至第6片RAM的CS端,该片对<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image20.png'/>图4・3i第斗3题答图应的地址范围是AOOOH ~ BFFFH,故不论往哪片RAM存放8K数据,该片存储芯片始终被选中,所以都有与之相同的数据。\t\t(4)若出现A注搭接到高电平上的故障,则使Y„ J.\t无输出,故第1片RAM始终不被选中口"},{"id":"learncoder_129_12854","stem":"在36题给出的条件下,画出CPU与存储芯片的连接图,要求:(1)存储芯片地址空间分配为:最大4K地址空间为系统程序区;相邻的4K地址空间为系 统程序工作区;最小16K地址空间为用户程序区。(2)指出选用的存储芯片类型及数量。(3)详细画出片选逻辑。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"根据主存地址空间分配,最大4K地址空间为系统程序区,选用2片2K x8位ROIW芯片;相邻的4K地址空间为系统程序工作区,选用2片4Kx4位RAM芯片;最小16K地址空间为<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image16.png'/>"},{"id":"learncoder_129_12857","stem":"存储器的地址空间分布图和存储器的地址译码电路分别如图4. 17(a)和(b)所示,图 (b)中的A,B两组跨接端予可按要求分别进行接线,如1 ~ 4中的任一端子可以和5 ~ 7中的任端子跨接。74139是2线一4线译码器(译码输出低电平有效),便能端G接地表示译码器处 于正常译码狀态。试完成A组跨接端子与B组跨接端子内部的连接,以便使地址译码电路按图 (a)的要求进行正确寻址。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image4.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"根据图4.17(a)所示.ROM,的地址空间为OOOOH - 3FFFH,ROM2的地址空间为 4000H-7FFFH.RAM,的地址空间为 COOOH - DFFFH,RAM2的地址空间为 EOOOH ~ FFFFH.对 应上述空间,最高4位地址码A15~A12狀态如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image19.png'/>2线一4线译码器对A15A14,两位进行译码,四路输岀中Y0=00对应ROM1Y1=01对应 ROM2, Y3 = 11 对应 RAM1和 RAM2 并用A13区分 RAM1(A13 =0)和 RAM2(A13=1)由此可得两组跨接端子的连接方法是:1—5,2—6,3—7,8—12,9—13, 11—14"},{"id":"learncoder_129_12853","stem":"在36题给出的条件下,画出CPU与存储芯片的连接图,要求:(1)存储芯片地址空间分配为:0 ~ 8191为系统程序区;8192 ~ 32767为用户程序区;最大 4K地址空间为系统程序工作区°(2)指出选用的存储芯片类型及数量。(3)详细画出片选逻辑。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"根据主存地址空间分配,0~8191为系统程序区,选用1片8Kx8位ROM芯片;8192~ 32767为用户程序区*选用3片8Kx8位RAM芯片;最大4K地址空间为系统程序工作区,选用 2片4 Kx4位RAM芯片,即<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image15.png'/>图第27第38题答图"},{"id":"learncoder_129_12856","stem":"某小型计算机字长16位,常规的存储空间为64K字,若将存储空间扩充到256K字,请 提出一种可能实现的方案并画出框图。说明在使用时应注意什么问题?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"可采用多体交叉存取方案,用四个相互独立、容量均为64K x 16位的模块M0、M1、M2、M3和组成一个容量为256K x 16位的存储器,每个模块各自具备一套地址寄存器、数据缓冲寄存器,各自以同等的方式与CPU传递信息,其结构图如图4.30所示°CPU在一个存取周期内,分时访问每个体,即每经过1/4存取周期就访问一个模块。这样, 对每个模块而言,存取周期未变,而对CPU来说,它可以在一个存取周期内连续说问4个体,获 得16 h x4 =64 b信息,各个体的读/写过程是井行进行的。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image18.png'/>"},{"id":"learncoder_129_12859","stem":"设某微机的寻址范围为64K,接有8片8K的存储芯片,存储芯片的片选信号为CS,要求:(1)画出选片译码逻辑电路(可选用74138译码器)。(2)写出每片RAM的地址范围。(3)如果运行时发现不论往哪片RAM存放8K数据。以4000H为起始地址的存储芯片都有 与之相同的数据,分析故障原因。(4)若出现译码中的地址线A13与CPU断线,并搭接到地电平上的故障?后果如何?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"(1)选片译码逻辑电路如图4二1所示。(2)同本章第43题(2)答案。\t_(3)说明74138译码器有误*乞输岀始终为低。因该输出接至第3片RAM的屬端,该片对应的地址范围是4000H -5FFFH,故不论往哪片RAM存放8K数据,该存储芯片始终被选中「所 以都有与之相同的数据。\t_⑷ 若出现心搭接到地电平的故障侧使乂工工工均无输出*故第246&片RAM始 终不被选中。"},{"id":"learncoder_129_12862","stem":"在磁表面存储器中,设写人代码是11010011,试画出不归零制{NRZ),调相制(PM)和调 频制(FM)的写电流波形,并指岀哪些有自同步能力°","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"对应写入代码为11010011的不归零制(NRZ),调相制(PM)和调频制(FM)的写电流波 形如图4.32所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image21.png'/>"},{"id":"learncoder_129_12864","stem":"一个磁盘存储器共有右个盘片,每血有204条磁道,每条磁道有12个扇区,每个扇区:有 512B磁盘机以7 200 rpm速度旋转,平均定位(寻道)时间为8ms(D计算该磁盘存储器的存储容量.(2)计算该磁盘疗储器的平均寻址时间。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"(1)6个盘片共有10个记录面「磁盘存储器的总容量为512 Bxl2 x204 x 10 = 12 533 760 B(2)磁盘存储器的平均寻址时间二平均寻道时间+平均等待时间平均等侍时间二[60 s/(7200 rpm)] x0.5^4.165 ms"},{"id":"learncoder_129_12861","stem":"简要说明采用层次结构存储系统的目的,说明每•层次的存储器作用和存储介质的特 性以及采用层次结构存储器能达到预期目的的原理。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"反映存储器性能的三个描标(速度,容量和价格/位)是相互矛盾的,为了提高存储系统 的性能价格比,存储器采用层次结构,包括Cache一主存层次和主存一辅存层次。Cache和主存 均采用半导体存储器,通常Cache山静态RAM组成,主存由动态RAM组成口辅存通常采用磁性 材料为介质,在不同的载施林(如盘狀、带状)上涂有磁层,靠磁头对其读/写,这类辅存属于磁表 面存储器。也有利用激光对非磁性介质或磁性介质的盘面进行读/写,达到存储信息目的的,这 类辅存为光盘存储器。Cache —主存这一层次主要解决CPU与主存的速度差异「而主存一辅存这一层次主要解决存储器的容量问题,最终达到解决存储系统的性能价格比的目的。"},{"id":"learncoder_129_12860","stem":"设某微机的寻址范围为64K,接有8片8K的存储芯片,存储芯片的片选信号为CS, 要求:(1)画出选片译码逻辑电路(可选用74138译码器)(2)写出每片RAM的地址范围(3)如果运行时发现只有以0000H为起始地址的一片存储芯片不能读/写,分析故障原因, 如何解决?(4)如果发现只能对第1 ~ 4片RAM进行读/写,试分析故障原因。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"(1)选片译码逻辑电路如图4.31所示。(2)同本童第43题(2)答案口(3)说明741孔译码器的久输岀始终为高°因RAM的片选信号是低电平有效'故用忆作 为片选信号的存储芯片(对应0000H^3FFFH地址范围)不能读/写,而其他存储芯片可以读/ 写。解决办法可换一片74138译码器。(4)说明译码器C端始终为低,可检查一下人卩是否搭接到低电平上口"},{"id":"learncoder_129_12863","stem":"设某计算机采用直接映像Cache,已知主存容量为4MBrCache容量4096字块长度为 8个字(32位/字)(1)画岀反映主存与、Cache映像关系的主存地址各字段分配框图,并说明毎个字段的名称 及位数。(2)设Cache初态为空,若CPU依次从主存第0,1,…,99号单元读岀100个字(主存一次读 出一个字),并重复按此次序读10次,问命中率为多少?(3)如果Cache的存取时间是50 ns,主存的存取时间是500 ns,根据(2)求出的命中率,求 平均存取时间。(4)计算Cache—主存系统的效率。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"(1)根据字块长度为8,字长为32位,可求出主存字块内地址为5位。根据Cache容量 为4 096 B =212 字块大小为2'玖故Cache宇块地址为7位。根据主存容量为4 MB,则主存地 址共22位,去掉字块内地址5位和Cache字块地址7位,故主存字块标记为10位。如圏4*33 所示口<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image22.png'/>(2)由于Cache初态为空,且块长为“因此CPU第一次读100个字时,共有13次未被命中 (即读第0KJ6y96号单元时未命中),以后9次重复读这100个字时均命中,故命中率为[(100x10^-13)/100x10] X100% =98,7%(3)平均访问时间=0,987 x50 ns + (l -0.987) x500 ns =55. 85 射(4)Cache一主存系统的效率为(50 ns/55.85 ns) x 100% =89.5%"},{"id":"learncoder_129_12839","stem":"NRZ.NRZ] JM.MFM是哪四种记录方式?其写电流波形有何特点?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"NRZ是不归零制(见变就翻几其特点是磁头线圈中始终有电流,正向电流代表“1”,负 向电流代表NRZ1是不归零1制(见“1”就翻),其特点是磁头线圈中始终有电流,写“1”时改变电流方 向,写“0”时电流方向不变。\tFM是调频制,其特点是写“1”时在存储元的起始和中间位置均要改变电流方向,写“0”时只 在存储元起始位置改变电流方向。MFM是改进型调频制,其特点是保留记录“1”时在存储元的中间位置改变电流方向,面且不 论写“1”或写“0”在存储元的起始位置均不改变电流方向,只有当连续记录两个或两个以上的“0”时,在两个存储元之间改变电流方向。"},{"id":"learncoder_129_12842","stem":"判断下列叙述中哪些是正确的,哪些是错误的。为什么?(1)大多数个人计算机中可配置的最大主存容量受地址总线位数的限制.(2)大多数个人计算机中可配置的最大主存容量受指令中地址码位数的限制。(3)可编程逻辑阵列也是主存的一部分。(4)可编程的只读存储芯片不一定是可改写的°(5)双极型半导体存储芯片通常比金属氧化物半导体存储芯片存取速度快,但价格也贵。(6)磁盘上的信息必须定时刷新,否则无法长期保存。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"解答分析如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image7.png'/>图4.19第26题答图(1)正确。地址总线的位数决定了地址的取值范围,也就决定了主存的最大容量。(2)不正确。利用存储管理技术可以使实际主存容量大于指令中地址码的寻址范围。例如 在某些微型机中,机器指令的地址码字段较短「地址码的寻址范围为64K,而实际主存容量已达 640 KB以上。(3)不正确 可编程逻辑阵列(PLA)是一种特殊的只读存储器,不能作为主存的一 部旅(4)正确。可编程只读存储器PROM —般是不可诙写的。(5)正确&遠是由采用的物质材料的特性和工艺过程决定的。(6)不正确。磁盘存储器是永久性存備器,不需要刷新就可长期保存。"},{"id":"learncoder_129_12841","stem":"使用4 K x 8位的RAM芯片组成一个容量为8K x 16位的存储器,画岀结构框图,并标明 图中信号线的种类、方向及条数。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"用4片4 Kx8位的RAM芯片可组成容量为8K x 16位的存储器,其结构框图如图4.19 所示。"},{"id":"learncoder_129_12840","stem":"什么是“程序访问的局部性\"?存储系统中哪一级采用了程序访问的局部性原理?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"所谓程序访问的局部性即程序执行时对存储器的访问是不均匀的,这是由于指令和数 据在主存的地址分布不是随机的,而是相对地簇聚。存储系统的Cache一主存级和主存一辅存 级都用到程序访问的局部性原理。对Cache一主存级而言,把CPU最近期执行的程序放在容量 较小、速度较高的Cache中。对主存一辅存级而言#把稈序中访问频度髙、比较活跃的部分放在 主存中,这样既提髙了访存的速度又扩大了存储器的容量。"},{"id":"learncoder_129_12843","stem":"设有一个具有14位地址和8位字长的存储器[试问该存储器的存储容量晁多少?若存 储器用1K x 1位RAM芯片组成,需多少片?需要哪几位地址作芯片选择,如何选择?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"一个具有14位地址和8位字长的存储器容量为214x8 - 16KX8位,需用128片IK x 1 位的RAM芯片组成,地址线分配如下:A9~A0作为芯片本身的地址线;A13~A10作为片选地址,采用4线一16线译码器,16个输出 分别作为16组芯片(毎组内含8片)的片选信号,如图4.20所示,"},{"id":"learncoder_129_12846","stem":"在Cache管理申新的主存块需要调人Cache时,有几种替拱算法?各有何特点?哪 种算法平均命中率高?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"在Cache管理中,当新的主存块需调人Cache时,常用的有先进先出(FIFO)算法和 近期最少使用LRU算法。前者是把最先调人Cache的块替换出去,它不需随时记录各块的 使用情况「所以容易实现,且开销小;后者是把近期最少使用的块替换出去,这种算法需随 时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的。 LRU算法比FIFO 命中率高。"},{"id":"learncoder_129_12849","stem":"在137题给出的条件下#画出CPU与存储芯片的连接图”要求:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image1.png'/>(1)主存地址空间分配:最小2K地址空间为系统程序区;相邻2K地址空间为用户程序区。(2)合理选用上述存储芯片,说明各选几片.(3)详细画出存储芯片的片选逻辑。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"根据主存地址空间分配,最小2K地址为系统程序区,选用1片2K x 8位ROM芯片:相 邻2K地址为用户程序区?选用4片1Kx4位RAM芯片,即<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image11.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image12.png'/>"},{"id":"learncoder_129_12845","stem":"试比较Cache管理中各种地址映像的方法。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"具有Cache一主存层次的存储器,其Cache和主存都需按块存储,且每块内的字数相同存 Cache管理中地址映像方法主要有三种。(1)直接映像。假设缓存共有C块,每个主存块j只与一个缓存块i对应,而每个缓存块可 以和多个主存块对应,它们的映像关系是i=j mod CQ这种映像关系实现简单,但主存块只能固 定地对应某个缓存块,不够灵活,命中率低。(2)全相联映像。其特点是主存中的任一块都可映像到Cache中的任一块上,但所需的逻 辑电路甚多,成本高,但命中率高。(3)组相联映像口它是介于直接映像和全相联映像之间的一种方案。这种方案把Cache分 成组,每组内又包含若干块。假设Cache共有Q组,每组内有R块,并用i表示Cache的组号j 表示主存的块号,它们的映像关系是i =j modQ即某一主存块j按模Q映像到缓存第i组内的 任一块口这种方法比直接映像灵活,命中率高,比全相联映像成本低,是它们的折中#被广泛 应用°"},{"id":"learncoder_129_12848","stem":"在137题给出的条件下,画出CPU与存储芯片的连接图,要求:(])主存地址空间分配:A000H-A7FFH为系统程序区;A800H ~ AFFFH为用户程序区。(2)合理选用上述存储芯片,说明各选几片,并写出每片存储芯片的二进制地址范围。(3)详细画出存储芯片的片选逻辑。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"根据主存地址空间分配,对应AOOOH~A7FFH系统程序区,选用一片2Kx8位ROM芯 片;对应ASOOH~AFFFH用户程序区,选用4片1K x4位RAM芯片。每片存储芯片的地址范围 如下。CPU与存储芯片的连接图如图4.22所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image10.png'/>"},{"id":"learncoder_129_12851","stem":"设CPU共有16根地址线,8根数据线,并用MREQ为访存控制信号(低电平有效),用 WR作为读/写控制信号(高电平为读,低电平为写几现有芯片及各种门电路(门电路自定),如 图4.15所示。画出CPU与存储器的连接图,要求;(1)存储芯片地址空间分配为:0-2047为系统程序区;2048~8191为用户程序区。(2)摘出选用的存储芯片类型及数量。(3)详细画出片选逻辑。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image2.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"根据主存地址空间分配,0~2047为系统程序区,选用1片2Kx8位ROM芯片;2048 ~ 8191为用户程序区,选用3片2 Kx8位RAM芯片,即<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image13.png'/>"},{"id":"learncoder_129_12844","stem":"已知某8位机的主存采用半导体存储器,其地址码为18位採用4K x4位的静态RAM 芯片组成该机所允许的最大主存空间*并选用模块板形式,问:(1)若毎个模块板为32Kx8位,共需几个模块板?(2)每个模块板内共有多少片RAM芯片?(3)主存共需要多少RAM芯片? CPU如何选择各模块板?如何选择具体芯片(说明选用 的器件及地址码的分配)?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"地址线为18位的8位机主存容量为21S x8 B =256 KB0(1)若每个模块扳为32Kx8位,共需8个模块板。(2)每个模块板内有16片RAM芯片。(3)主存共霊128片RAM芯片,18根地址线分配如下:A11~A0九作为4Kx4位RAM芯片本身的地址线;A14 ~ A12作为模块板内片选地址。采用3<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image8.png'/>线一 8线译码器,共8个输出,毎个输出选2片4Kx4位的RAM芯片;A17~Al5作为模块板的地 址。采用3线一8线译码器,其每个输出分别选8个模块板中的任一块。"},{"id":"learncoder_129_12847","stem":"设CPU共有16根地址线,8根数据线,并用MREQ作为访存控制信号(低电平有效),用 WR作为读/写控制信号(高电平为读,低电平为写)。现有下列存储芯片:1Kx4位RAM,4K x 8 位RAM,2K x 8位ROM以及74138译码器和各种门电略,如图4.14所示。画出CPU与存储芯 片的连接图?要求:(1)主存地址空间分配:8000H-87FFH为系统程序区;8800H ~ 8BFFH为用户程序区口(2)合理选用上述存储芯片,说明各选几片。(3)详细画出存储芯片的片选逻辑。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"根据主存地址空间分配,选出所用芯片类型及数量。即<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image9.png'/>"},{"id":"learncoder_129_12850","stem":"在137题给出的条件下,画出CPU与存储芯片的连接图,要求:(1)主存地址空间分配;最大2K地址空间为系统程序区;相邻2K地址空间为用户程序区。(2)合理选用上述存储芯片,说明各选几片。(3)详细画出存储芯片的片选逻辑。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"根据主存地址空间分配,最大2K地址为系统程序区,选用一片2K x 8位ROM芯片;相邻2K地址为用户程序区,选用4片1K x 4 位RAM芯片,即:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image12.png'/>"},{"id":"learncoder_129_12826","stem":"什么是存储密度?什么是数据传输率?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"存储密度用来反映辅存(如磁盘)的记录密度,一般用道密度和位密度两个数值来表示。 道密度是磁盘沿半径方向单位长度的磁道数,记为tpm叫位密度是单位长度磁道上存储二进制信 息的位数,记为hpn。数据传输率是指一秒钟内存入或读出二进制代码的位数或字节数,通常用波持率这个参量 来描述,记为bps或Bps。"},{"id":"learncoder_129_12827","stem":"存储器的主要功能是什么?如何衡量存储器的性能?为什么要把存储系统分成若干不 同的层次?主要有哪些层次?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"存储器的主要功能是存放程序或各类数据口通常用存储容量,存取周期以及存储器的 带宽(毎秒从存储器读岀或写入二进制代码的位数)三项指标来反映存储器的性能。为了扩大 存储器容量和提髙访存速度,将存储系统分成若于不同层次,有Cache —主存层次和主存一辅存 层次。前者为使存储器与CPU速度匹配,在CPU和主存之间增设Cache高速缓冲存储器,其容量比主存小,速度比主存快,用来存放CPU最近期要用的倍息,CPU可直接从Cache中取到信 息,从而提高了访存速度。后者为扩大存储器容量,把主存和辅存统一成一个整体,从整体上看, 速度取决于主存,容量取决于辅存,称为虚存。CPU只与主存交换信息,但程序员可用常令地址 码进行编程,其位数与虚存的地址空间对应。"},{"id":"learncoder_129_12830","stem":"简述主存的读/写过程。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"主存储器的读出过程是:CPU先给岀地址信号,然后给岀片选(通常受CPU访存信号控 制)信号和读命令,这样就可将被选中的存储单元内的各位信息读至存储芯片的数据线上。主存储器的写入过程是CPU先给出地址信号,然后给出片选(通常受CPU访存信号控制) 信号和写命令,并将欲写入的信息送至存储器的数据线上,这样,信息便可写入到被选中的存储 单元中。"},{"id":"learncoder_129_12833","stem":"什么是快速缓冲存储器,它与主存有什么关系?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"快速缓冲存储器是为了提高访存速度,在CPU和主存之间增设的高速存储器,它对用 户是透明的。只要将CPU最近期需用的信息从主存调人缓存,这样CPU每次只需访问快速缓存就可达到访问主存的目的,从而提高了访存速度。主存的信息调入缓存要根据一定的算法,由 CPU自动完成。凡是主存和缓存已建立了对应关系的存储单元,它们的内容必须保持一致,故 凡是写人缓存的信息也必须写至与缓存单元对应的主存单元中。"},{"id":"learncoder_129_12836","stem":"设写人磁盘存储器的数据代码是1011011100^别画出归零制〈RZ)、不归零制(NRZ)、 调相制(PM)0调频制(FM)四种记录方式的写磁头电流波形「","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"按照各种记录方式的记录规则,数据代码1011011100的写电流波形如图4.18所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image5.png'/>"},{"id":"learncoder_129_12829","stem":"存储芯片内的地址译码有几种方式?试分析它们各自的特点及应用场合。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"存储芯片内的地址译码有两种方式,一种是线选法,适用于地址线较少的芯片。其特点 是地址信号只须经过一个方向的译码就可选中某一存储单元的所有位。另一种是重合法(双重 译码),适用于地址线较多的芯片乜其特点是地址线分成两组,分别经行、列两个方向译码,只有 行、列两个方向均选中的存储元才能进行读/写。"},{"id":"learncoder_129_12832","stem":"提高访存速度可釆取哪些措施。简要说明之。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"提高访存速度可采取三种措施。(1)\t采用高速器件,选用存取周期短的芯片,可提高存储器的速度。(2)\t采用Cache,CPU将最近期要用的信息先调入Cache,而Cache的速度比主存快得多,这 样CPU每次只需从Cache中取出(或存人)信息'从而缩短了访存时间,提高了访存速度。(3)\t调整主存结构,如采用单体多字结构(在一个存取周期内读出多个存储字,可增加存储 器的带宽),或采用多体结构存储器(参考第16题答案)"},{"id":"learncoder_129_12835","stem":"设有16个固定磁头的硬盘,每磁道存储容量为62 500乩嶽驱动器转速为2 400叩m,试 求最大数据传输率。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"磁盘转速为2400 rpm . 40 r/s。 16个固定磁头「每次读出16位,故每转一圈读出62 500 x 16 R,所以最大数据传输率为 62 500 x16 Bx40 r/a = 39 700 000 Bps"},{"id":"learncoder_129_12828","stem":"什么是刷新?刷新有几种方式?简要说明之。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"动态RAM靠电容存储电荷原理存储信息,电容上的电荷要放电,信息即丢失。为了维 持所存信息,需在一定时间(2ms)内,将所存信息读出再重新歸入(恢复),这一过程称为刷新, 刷新是一行 行进行的,由CPU自动完成。刷新通常可分集中刷新和分散刷新两种。集中刷新即在2ms时间内,集中一段时间对存储 芯片的毎行刷新一遍,在这段时间里不能对存储器进行访问,即所谓死时间。分散刷新是将存储 系统周期分为两半,前半段时间用来进行读/写操作,后半段时间用来进行刷新操作,显然整个系 统的速度降低了,但分散刷新没有存储器的死时间。还可将这两种刷新结合起来,即异步刷新, 这种刷新可在2ms时间内对存储芯片的每一行刷新一遍,两行之间的刷新间隔时间为2 ms/芯 片的行数。"},{"id":"learncoder_129_12831","stem":"为什么多体结构存储器可以提髙访存速度?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"多体结构存储器将存储器分成若干个(m个)独立的模块,每个模块的容量和存取周期 均相等,且它们可独立地进行读/写操作。若将这些独立的模块按高位交叉编址,而且使不同的 请求源同时访问不同的模块,便可提高访存速度。此外,若将这些独立的模块按低位交叉编址(即模m编址),便可使存储器在不改变存取周 期的前提下,增加存储器的带宽中,对m个模块而言,存储器的带宽可提高到m倍。"},{"id":"learncoder_129_12834","stem":"一个双^5 in软盘片,每面40道”毎道8个扇区,每扇区刃2艮试问盘片容蜃为多少? 该盘驱动器转速为600叩叫则平均等待时间为多少?最大传输速率为多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"软盘总容量=面数x每面道数x每道扇区数x每扇区字节数=2x40x8x512B=320 KB0 平均等待时间为转一圈所需时间的一半,即0. 5 x [ (60 s)/(6OO rpm) ] =50ms盘每秒转10圈,每圈读一个磁道,为512 Bx8 =4096 B,故最大数据传输率为4096 B x 10/s =40 KBps0"},{"id":"learncoder_129_12838","stem":"某磁盘存储器转速为3 000 rpm,共有4个记录盘面,道密度为5 tpm,每道记录信息12 288艮最小磁道直径为230皿叽共有275道*求:(1)磁盘存储器的存储容量。(2)最高位密度(最小磁道的位密度)籾最低位密度。(3)舷盘数据传输率口(4)平均等待时间。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"(1)每道记录信息容量=12 288 B\t每个记录面信息容t- 12 288 Bx2754 个记录面信息容量=12 288 B x275 x4 =.13 516 800 B |\t(2)最髙位密度已按最小磁道半径比R1=115mm计算。D1=12 288 B/2πR1 =17 Bpm\t最低位密度D2按最大磁道半径R2计算。\tR2=Rt + (275/5) =115 mm +55 mm =170 mm\t D2 =12 288 B/2πR2 =11.5 B/m\t(3)磁盘数据传输率C = NrN为每道信息容量=12 288 B\tr = 3000 rpm =50 r/sC=Nr = 12 288 Bx50=614 400 Bps<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch4/image6.png'/>"},{"id":"learncoder_129_12837","stem":"磁盘组有6片磁盘,每片有两个记录面,存储区域内径22在叫外径站c叫道密度为40 tpni(道/毫米)内层位密度为40切叫转速为2 400叩叫问:(1)共有多少存储面可用?(2)其有多少柱面?(3)盘组总存储容量是多少?(4)数据传输率是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"(1)共有10个存储面可用,最上、下两个面不可用。(2)有效存储区域为(16.5-11) em=5.5 cm = 55 mm 因为.道密度=4tpm所以,共有4tpmx55mm =220道,即220个圆柱面。(3)内层磁道周长为2πR=2x3.14x11 cm=69-08 cm =690. 8 mm毎道信息量=40 bpm x 690.8 mm = 27 632 b每面的信息量=27 632 bx220 =6 079 040 b盘组总容量=6 079 040 b x 10 =60 790 400 b(4)磁盘数据传输率C =Nrbps\tN为每条磁道的容量=27 632 br为磁盘每秒转速=2400 rpm =40 r/s\t所以,C=Nr= =27 632 b x 40 rpm = 1 105 280 bps"},{"id":"learncoder_129_12817","stem":"试比较RAM和ROM.","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"RAM是随机存取存储器,在程序的执行过程中既可读岀又可写入。ROM是只读存储器, 在程序执行过程中只能读出信息,不能写人信息。"},{"id":"learncoder_129_12820","stem":"名词解释:读时间和读周期。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"读周期是存储器进行两次连续读操作的最小间隔时间;读时间是从CPU给岀地址信号 到被选单元的内容读到数据线上的这段时间,读周期大于读时间。"},{"id":"learncoder_129_12816","stem":"试比较主存、辅存、缓存、控存、虚存。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"106.空","type":"short_answer","answer":"主存又称为内存,直接与CPU交换信息。辅存可作为主存的后备存储器,不直接与CPU 交换侑息,容量比主存大,速度比主存慢亡缓存是为了解决主存和CPU的速度匹配、提髙访存速 度的…种存储器。它设在主存和CPU之间,速度比主存快,容量比主存小,存放CPU最近期要 用的信息。控存是微程序控制器中用来存放微指令的存储器,通常由ROM组成衣速度应比主存 更快。虚存是为了解决扩大主存容量和地址分配问题,把主存和辅存统一成一个整体。从整体 上看,速度取决于主存,容量取决于辅存。实际上CFU仍然貝与主存交换信息,由操作系统和硬 件共同实现主存和辅存之间信息的自动交换。"},{"id":"learncoder_129_12819","stem":"名词解释! RAM .ROM .PROM .EPROM .EEPROM。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"RAM即随机存取存储器,在程序的执行过程中既可读出又可写人信息。ROM即只读存储器,在程序的执行过程中貝能读出信息,不能写入信息。PROM即可一次性编程的只读存储 器c EPROM即可擦洗的只读存储器,利用紫外线抹去原有信息,可多次编程.EEPROM即电可 改写型只读存储器,可多次编程。"},{"id":"learncoder_129_12822","stem":"名词解释:存取周期、存取时间、存储容量。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"存取周期是存储器进行两次连续、独立的操作(读或写)之间所需的最短时间。存取时间 又分读时间和写时间,读时间是从CPU给出地址信号到被选单元的内容读到数据线上的这段时 间;写时间是从EPU给出地址信号到数据线上的信息写入被选单元中所需的时间口存储容量是 存储器存放二进制代码的总数量。"},{"id":"learncoder_129_12815","stem":"低位交叉编址的存储器能够提高访存速度的原因是__1__,其地址的高位部分用于 __2__,低位部分用于__3__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"不改变每个体的存取周期的前提下,增加存储器的带宽","__2__":"选择存储体内的字","__3__":"选择体号"}},{"id":"learncoder_129_12818","stem":"试比较静态RAM和动态RAM.","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"静态KAM和动态KAM都属随机存储器,即在程序的执行过程中既可读岀又可写人信 息。但静态RAM靠触发器原理存储信息,只要电源不掉电,信息就不丢失;动态RAM靠电容存 储电荷原理疗储信息,即使电源不掉电,由于电容要放电,信息也会丢失,故需再生。"},{"id":"learncoder_129_12821","stem":"名词解释:写时间和写周期。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"写周期是存储器进行两次连续写操作的最小间隔时间;写时间是从CPU给出地址信号 斤,将数据线上的信息写入被选单元中所需的时间,写周期大于写时间。"},{"id":"learncoder_129_12823","stem":"名词解释:存储元、存储单元、存储单元地址、存储字、存储字长勺","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"存储元即存储一位二进制代码的基本单元电路。存储单元由若千个存储元组成*用来存放多位二进制代码。许多存储单元组成存储器。为 了便于访问存储器的任一单元,对每一个存储单元按一定顺序给予一个地址编号,称为存储单元 地址。存储单元中二进制代码的组合即为存储字。存储单元中二进制代码的位数称为存储字长。"},{"id":"learncoder_129_12825","stem":"辅存的技术指标一般包括哪些?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"辅存的技术指标一般包括:(1)记录密度(又分道密度和位密度两种)。(2)存储容量 (盘面数x每个盘面的磁道数x每个磁道记录的二进制代码数)。(3)平均访盘时间(包括寻找 时间、等待时间和传送时间几(4)数据传送速率(每秒钟内存入或读出二进制代码的位数 (5)误码率(出错信息位数和读岀信息的总位数之比)。"},{"id":"learncoder_129_12824","stem":"主存和辅存的速度指标有何不同?为什么会有这些不同?","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"short_answer","answer":"主存的速度指标用存取周期表示。辅存的速度指标,以磁盘为例,一般包括寻找(寻道) 时间、等待时间和数据传输时间三个量。因为主存是随机存取存储器,存取周期不随存储单元的 地址不同而改变。而磁盘存储器属磁表面存储器,其存取周期与存储单元的位置有关,不同位置 所需的寻道时间和等待时间(在磁道上找到指定扇区位置所需的时间)不同,故不能以一个物理 量来衡量。"},{"id":"learncoder_129_12811","stem":"层次化存储器结构设计的依据是__1__原理。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"程序访问的局部性"}},{"id":"learncoder_129_12807","stem":"在Cache主存的地址映像中,__1__灵活性强,__2__成本最髙。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"全相联映像","__2__":"全相联映像"}},{"id":"learncoder_129_12810","stem":"由容量为16 KB的Cache和容量为16 MB的主存构成的存储系统的总容量为__1__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"16M"}},{"id":"learncoder_129_12806","stem":"计算机的存储系统通常采用层次结构。在选择各层次所用的器件时,应综合考虑__1__,__2__,__3__,__4__,__5__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"速度","__2__":"容量","__3__":"成本","__4__":"密度","__5__":"能耗"}},{"id":"learncoder_129_12809","stem":"一个n路组相联映像的Cache中,共有M块数据。当n = 1时,该Cache变为__1__映 像;当n = M时,该Cache成为__2__映像。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"直接","__2__":"全相联"}},{"id":"learncoder_129_12812","stem":"一个四路组相联的Cache共有64块,主存共有8192块,每块32个字。则主存地址中 的主存字块标记为__1__位,组地址为__2__位,字块内地址__3__位。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"9","__2__":"4","__3__":"5"}},{"id":"learncoder_129_12808","stem":"在写操作时,对Cache与主存单元同时修改的方法称为__1__ ,若每次只暂时写人 Cache直到替换时才写人主存的方法称为__2__ 。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"写直达法","__2__":"写回法"}},{"id":"learncoder_129_12814","stem":"高位交叉编址的存储器能够提高访存速度的原因是__1__其地址的高位部分用于 __2__ ,低位部分用于__3__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"各个体分别响应不同请求源的请求,实现多体并行","__2__":"选择体号","__3__":"选择存储体内的字"}},{"id":"learncoder_129_12813","stem":"在虚拟存储器系统中,CPU根据指令生成的地址是__1__,经过转换后的地址是__2__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"逻辑地址(或虚拟地址)","__2__":"物理地址(或实际地址)"}},{"id":"learncoder_129_12801","stem":"一个完整的磁盘存储器由三部分组成,其中__1__是磁盘机与主机的接口部件,__2__是独立于主机的一个完整的设备;__3__ 用于保存信息。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"磁盘控制器","__2__":"磁盘驱动器","__3__":"盘片"}},{"id":"learncoder_129_12804","stem":"存储器的带宽是指 __1__如果存储周期为TM,存储字长为n位,则存储器带宽为 __2__,常用的单位是 __3__或 __4__。为了加大存储器的带宽可釆用__5__和__6__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"每秒从存储器中读出或写入的二进制代码位数","__2__":"n/TM","__3__":"bps或Bps","__4__":"字/秒","__5__":"单体多字结构","__6__":"低位交叉多体并行结构"}},{"id":"learncoder_129_12800","stem":"如果Cache的容量为128块,在貢接映像下,生存中第e块映像到缓存第 __1__ 块。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"i mod 128"}},{"id":"learncoder_129_12803","stem":"设有一个四体低位交叉的存储器,每个体的容量为256K x 64位,存取周期为200 ns 则数据总线的宽度为__1__位,总线传送周期的最大值是__2__ ns. CPU连续读4个字所需的最 多时间是__3__ns。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"64","__2__":"50","__3__":"350"}},{"id":"learncoder_129_12799","stem":"主存储器的技术指标有__1__、 __2__和 __3__ ;磁表面存储器的技术指标有 __4__、__5__、__6__、__7__和__8__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"存储容量","__2__":"存取周期","__3__":"存储器带宽","__4__":"记录密度","__5__":"存储容量","__6__":"平均寻址时间","__7__":"数据传输速率","__8__":"误码率"}},{"id":"learncoder_129_12802","stem":"硬磁盘机的磁头可分为__1__和__2__盘片结构可分为__3__和__4__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"固定磁头","__2__":"可移动磁头","__3__":"固定盘片","__4__":"可换盘片"}},{"id":"learncoder_129_12805","stem":"虚拟存储器通常由 __1__和__2__两级组成。为了要运行某个程序,必须把__3__映射 到主存的__4__空间上,这个过程叫__5__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"主存","__2__":"辅存","__3__":"逻辑地址","__4__":"物理地址","__5__":"地址映像"}},{"id":"learncoder_129_12792","stem":"Cache的命中率是指__1__,命中率与__2__有关。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"CPU要访问的信息已在Cache中的比率","__2__":"Cache的块长及容量"}},{"id":"learncoder_129_12795","stem":"虚拟存储器指的是__1__ ,它可给用户提供一个比实际__2__空间大得多的__3__空间。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"主存——辅存层次","__2__":"主存","__3__":"虚拟地址"}},{"id":"learncoder_129_12798","stem":"反映存储器性能的三个指标是__1__、__2__、和 __3__为了解决这三方面的矛盾,计算 机釆用__4__体系结构。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"速度","__2__":"容量","__3__":"价格/位","__4__":"多级存储"}},{"id":"learncoder_129_12794","stem":"在Cache一主存层次的存储系统中,存储管理常用的替换算法是 __1__ 和__2__,前者命 中率高。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"LRU","__2__":"FIFO"}},{"id":"learncoder_129_12797","stem":"计算机系统中常用到的存储器有:①SRAM,②DRAM,③Flash,® EPROM,⑤硬盘存 储器,⑥软盘存储器。其中非易失的存储器有__1__具有在线能力的有__2__可以単字节修 改的有 __3__ 可以快速读出的存储器包括__4__.","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"3456","__2__":"12356","__3__":"12","__4__":"1234"}},{"id":"learncoder_129_12793","stem":"Flash Memory具有高性能、低功耗、高可靠性以及__1__的能力,常作为__2__,用于便携 式电脑中。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"顺时启动","__2__":"固态盘"}},{"id":"learncoder_129_12796","stem":"Cache是一种__1__ 存储器,用来解决CPU与主存之间__2__不匹配的问题。现代的 C肌也可分为__3__ 和 __4__两级,并将__5__和__6__分开设置。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"高速缓存","__2__":"速度","__3__":"片载Cache","__4__":"片外Cache","__5__":"指令Cache","__6__":"数据Cache"}},{"id":"learncoder_129_12785","stem":"设有八体并行低位交叉存储器,每个模块的存储穽量是64K x 32位,存取周期是 500 ns则在500ns内,该存储器可向CPU提供__1__ 位二进制信息,比单个模块存储器的速度 提高了__2__倍。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"256","__2__":"7"}},{"id":"learncoder_129_12788","stem":"主存储器为1 MB即等于__1__ KB,又可表示为__2__ .","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"1024","__2__":"220B"}},{"id":"learncoder_129_12787","stem":"主存储器容量通常以KB为单位,其中K= __1__。硬盘的容量通常以GB为单位,其中G =__2__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"1024","__2__":"230"}},{"id":"learncoder_129_12786","stem":"使用高速缓冲存储器是为了解决__1__ 缓存的地址对用户是__2__,存储管理主要由__3__ 实现。使用虚拟存储器是为了解决__4__问题,存储管理主要由__5__实现。后一种情况 下,CPU__6__访问第二级存储器。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"CPU和主存速度匹配问题,提高访存速度","__2__":"透明的","__3__":"硬件","__4__":"扩大存储器容量","__5__":"硬件和操作系统","__6__":"不直接"}},{"id":"learncoder_129_12791","stem":"主存和Cache的地址映像方法很多,常用的有__1__、__2__和__3__三种,在存储管理上常用的替换算法是 __4__ 和__5__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"直接映像","__2__":"全相联映像","__3__":"组相联映像","__4__":"先进先出算法(FIFO)","__5__":"近期最少使用算法(LRU)"}},{"id":"learncoder_129_12790","stem":"将主存地址映射到Cache中定位祢为__1__,将主存地址变换成Cache地址称为__2__ 、 当新的主存块需要调人Cache中,而它的可用位置又被占用肘,需根据__3__解决调人问题。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"地址映像","__2__":"地址变换","__3__":"替换算法"}},{"id":"learncoder_129_12789","stem":"当我们说16位微机的主存储器容量是640 KB时,表示主存储器有__1__字节存储空 间,地址号从__2__ 到__3__(本题均要求写岀十进制各位数值几","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"655360","__2__":"0","__3__":"655359"}},{"id":"learncoder_129_12779","stem":"沿磁盘半径方向单位长度的磁道数称为 __1__,而单位长度磁道上记录二进制代码的付 数称为__2__两者总称为__3__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"道密度","__2__":"位密度或线密度","__3__":"记录密度"}},{"id":"learncoder_129_12782","stem":"主存可以和__1__ 、__2__ 和__3__交换信息,辅存可以和__4__交换信息,快速缓存可以 和__5__ 、 __6__交换信息。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"缓存","__2__":"辅存","__3__":"CPU","__4__":"主存","__5__":"主存","__6__":"CPU"}},{"id":"learncoder_129_12781","stem":"读/写磁头从一个磁道穆到另一个磁道所需要的__1__时间称为磁盘存储器的__2__当读/写磁头完成定位后,所要读/写的存储元可能在旋转磁道的其他地方*要等待一段时间才能 位于读/与磁头F面进行数据读/写,这种旋转等待所需的__3__时间称为磁盘存储器的__4__o","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"平均","__2__":"寻道时间","__3__":"平均","__4__":"等待时间"}},{"id":"learncoder_129_12784","stem":"存储器由m(m=1,2,4,8……)个模块组成,每个模块有自已的__1__和__2__寄存器, 若存储器采用__3__编址,存储器带宽可增加到原来的__4__倍。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"地址","__2__":"数据","__3__":"模m","__4__":"m"}},{"id":"learncoder_129_12780","stem":"单位时间从磁盘存储器读出或写人的二进制位数称为磁盘存储器的__1__如果不考虑 寻道时间和等待时间,假设位密度为T bpm(位/毫米),并且且V cm/宫的速度通过读/写磁头,则为__2__其单位是__3__ .","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"数据传输","__2__":"10VT","__3__":"bps"}},{"id":"learncoder_129_12783","stem":"缓存是设在__1__和__2__之间的一种存储器,其速度__3__匹配,其容量与__4__ 有关。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"CPU","__2__":"主存","__3__":"与CPU速度","__4__":"缓存中数据的命中率"}},{"id":"learncoder_129_12774","stem":"欲组成一个64K x 16位的存储器,若选用32Kx8位的存储芯片,共需__1__片;若选用 16K x 1位的存储芯片,则需__2__片;若选用IK x4位的存储芯片共需__3__片。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"4","__2__":"64","__3__":"256"}},{"id":"learncoder_129_12775","stem":"用1Kxl位的存储芯片组成容量为16K x8位的存储器,共需__1__片,若将这些芯片分 装在几块板上,设每块板的容量为4 Kx8位,则该存储器所需的地址码总位数是__2__,其中__3__位用于选板,__4__位用于选片,__5__ 位用于存储芯片的片内地址。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"128","__2__":"14","__3__":"2","__4__":"2","__5__":"10"}},{"id":"learncoder_129_12778","stem":"量基本的数字磁记录方式有__1__、__2__ 、__3__、 __4__、__5__和__6__六种。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"归零制(RZ)","__2__":"不归零制(NRZ)","__3__":"见“1”就翻的不归零制(NRZ1)","__4__":"调相制(PM)","__5__":"调频制(FM)","__6__":"改进型调频制(MFM)"}},{"id":"learncoder_129_12777","stem":"磁表面存储器的记录方式总体上可分为__1__和__2__两大类,前者的特点是__3__ 后 者的特点是__4__。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"归零制","__2__":"不归零制","__3__":"不论记录的代码是0或1,在记录下一个信息之前,记录电流要恢复到0电流","__4__":"磁头线圈中始终有电流"}},{"id":"learncoder_129_12776","stem":"用IK x4位的存储芯片组成容量为64Kx8位的存储器,共需__1__片,若将这些芯片 分装在几块板上,设每块板的容量为16KX8位,姻该存储器所需的地址码总位数是__2__ ,其中__3__位用于选板,__4__位用于选片.__5__位用于存储芯片的片内地址。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"128","__2__":"16","__3__":"2","__4__":"4","__5__":"10"}},{"id":"learncoder_129_12769","stem":"动态RAM依据__1__的原理存储信息,因此一般在__2__时间内必须刷新f次,刷新与__3__地址有关,该地址由__4__给出.","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"电容存储电荷","__2__":"2ms","__3__":"行","__4__":"刷新地址计数器"}},{"id":"learncoder_129_12772","stem":"半导体静态RAM进行读/写操作吋,必须先接受信号__1__,再接受__2__ 和__3__信号。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"地址","__2__":"片选","__3__":"读/写"}},{"id":"learncoder_129_12768","stem":"半导体静态RAM依据__1__存储信息,半导体动态RAM依据__2__存储信息。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"触发器原理","__2__":"电容存储电荷原理"}},{"id":"learncoder_129_12771","stem":"动态半导体存储器的刷新一般有__1__和__2__两种方式,之所以刷新是因为__3__","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"集中刷新","__2__":"分散刷新","__3__":"存储电荷的电容放电"}},{"id":"learncoder_129_12767","stem":"__1__、__2__和__3__组成三级存储系统,分级的目的是 __4____5__","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"Cache","__2__":"主存","__3__":"辅存","__4__":"提高访存速度","__5__":"扩大存储容量"}},{"id":"learncoder_129_12770","stem":"RAM的速度箱标一般用 __1__ 表,而磁盘存储器的速度指标一般包括 __2__、__3__和 __4__三项。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"存放周期","__2__":"寻找时间(寻道时间)","__3__":"等待时间","__4__":"数据传输时间"}},{"id":"learncoder_129_12773","stem":"欲组成一个32Kx8位的存储器,当分别选用1Kx4位J6K x 1位,2Kx8位的三种不同 规格的存储芯片时,各需__1__、__2__和 __3__片。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"blank","options":{"__1__":"64","__2__":"16","__3__":"16"}},{"id":"learncoder_129_12763","stem":"下列说法中正确的是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"Cache与生存统一编址.Cache的地址空间是主存地址空间的一部分","C":"单体多字存储器生要解决访存速度的问题","B":"主存储器只由易失性的随机读/写存储器构成"},"answer":"C"},{"id":"learncoder_129_12766","stem":"下列器件中存取速度最快的是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"寄存器","A":"Cache","B":"主存"},"answer":"C"},{"id":"learncoder_129_12759","stem":"设机器字长为64位,存储容量为128 MB,若按字編址,它的寻址范围是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"16 MB","B":"16M\tG 32M"},"answer":"B"},{"id":"learncoder_129_12762","stem":"若磁盘的转速提高一倍,则\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"平均定位时间不变","A":"平均等待时间和数据传送时间戚半","C":"平均寻道时间减半"},"answer":"B"},{"id":"learncoder_129_12765","stem":" Cache的地址映像中\t比较多的采用“按内容寻址”的相联存储器来实现。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"组相联映像","B":"全相联映像","A":"直接映像"},"answer":"B"},{"id":"learncoder_129_12758","stem":"磁盘的盘面上有很多半径不同的同心圆円这些同心圆称为\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"扇区","B":"磁道","C":"磁柱"},"answer":"B"},{"id":"learncoder_129_12761","stem":"设机器字长为32位,存储容量为16 MB,若按双字编址,其寻址范围是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"4M","A":"8 MB","B":"2M"},"answer":"B"},{"id":"learncoder_129_12764","stem":"Cache的地址映像中,若主存中的任一块均可映射到Cache内的任一块的位置上,称作。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"组相联映像。","A":"直接映像","B":"区全相联映像"},"answer":"B"},{"id":"learncoder_129_12760","stem":"在下列因素中,与Cache的命中率无关的是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"Cache的容量","C":"主存的存取时间","A":"Cache块的大小"},"answer":"C"},{"id":"learncoder_129_12750","stem":"下述说迭中 \t是错误的。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"虚存的目的是为了给每个用户提供独立的、比较大的编程空间","B":"虚存中每次访问一个虚地址,至少要访问两次主存","C":"虚存系统中,有时每个用户的编程空间小于实存空间"},"answer":"B"},{"id":"learncoder_129_12753","stem":"在下列磁性材料组成的存储器件中,―_不属于辅助存储器。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"磁盘","E":"光盘","D":"磁鼓","B":"磁芯\tC,磁带"},"answer":"B"},{"id":"learncoder_129_12756","stem":"在磁盘存储器中,査找时间是____。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"在磁道上找到要找的扇区所需的时间","A":"使磁头移动到要找的柱面上所需的时间","C":"在扇区中找到要找的数据所需的时间"},"answer":"A"},{"id":"learncoder_129_12752","stem":"软盘驱动器采用的磁头是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"接触式磁头","C":"固定式磁头","A":"浮动式磁头"},"answer":"B"},{"id":"learncoder_129_12755","stem":"虚拟存储管理系统的基础是程序访间的局部性理论,此理论的基本含义是","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"空间局部性","A":"在程序的执行过程中,程序对主存的访问是不均匀的","C":"代码的顺序执行"},"answer":"A"},{"id":"learncoder_129_12751","stem":"磁盘上的磁道是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"记录密度不同的同心圆","B":"记录密度相同的同心圆","C":"一条阿基米德螺线"},"answer":"A"},{"id":"learncoder_129_12754","stem":"程序员编程所用的地址叫做\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"真实地址","A":"逻辑地址","B":"物理地址"},"answer":"A"},{"id":"learncoder_129_12757","stem":"活动头磁盘存储器的平均寻址时间是指\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"平均等待时间","A":"平均寻道时间","B":"平均寻道时间加平均等待时间"},"answer":"B"},{"id":"learncoder_129_12742","stem":"—个四体并行低位交叉存储器,每个模块的容量是64K x 32位,存取周期为200ns,在 下述说法中 是正确的。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"在50ns内,每个模块能向CPU提供32位二进制信息","B":"在200ns内,存储器能向CPU提供128位二进制信息","A":"在200 ns内,存储器能向CPU提供256位二进制信息"},"answer":"B"},{"id":"learncoder_129_12741","stem":"交叉编址的存储器实质是一种\t存储器,它能\t执行 独立的读写操作.","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"模块式,串行,多个","C":"整体式,并行衣一个","A":"模块式,并行,多个"},"answer":"A"},{"id":"learncoder_129_12747","stem":"采用虛拟存储器的目的是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"扩大存储器的寻址空间","B":"扩大辅存的存取空间","A":"提高主存的速度"},"answer":"C"},{"id":"learncoder_129_12743","stem":"釆用四体并行低位交叉存储器,设每个体的存储容量为32K x 16位,存取周期为400 ns,在下述说法中\t是正确的灯","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"在0.1μs内,存储器可向CPU提供26位二进制信息","B":"在0.1μs内,毎个体可向CPU提供16位二进制信息","C":"在0.4 μs内,存储器可向CPU提供26位二进制信息"},"answer":"C"},{"id":"learncoder_129_12746","stem":"在程序的执行过程中,Cache与主存的地址映射是由。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"程序员调度的","C":"由硬件自动完成的","A":"操作系统来管理的"},"answer":"C"},{"id":"learncoder_129_12749","stem":"在虚拟存储器中,当程序正在执行时,由___完成地址映射。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"编译器","A":"程序员","C":"操作系统"},"answer":"C"},{"id":"learncoder_129_12745","stem":"主存和CPU之间增加高速缓冲存储器的目的是。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"解决CPU和主存之间的速度匹配问题","B":"扩大主存容量","C":"既扩大主存容量,又提高存取速度"},"answer":"A"},{"id":"learncoder_129_12748","stem":"常用的虚拟存储器寻址系统由\t两级存储器组成舟","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"Cache一主存","A":"主存一辅存","C":"Cache一辅存"},"answer":"A"},{"id":"learncoder_129_12744","stem":"采用八体并行低位交叉存储器,设每个体的存储容量为32K x 16位,存取周期为 400ns,在下述说法中正确的是\t.","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"在400ns内,存储器可向CPU提供27位二进制信息","B":"在100ns,内,每个体可向CPU提供27位二进制信息","C":"在400ns内,存储器可向CPU提供28位二进制信息"},"answer":"A"},{"id":"learncoder_129_12734","stem":"在磁盘和磁带两种磁表面存储器中,存取时间与存储单元的物理位置有关,按存储方式 分 。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"磁盘是部分串行存取,磁带是串行存取","C":"磁带是部分串行存取,磁盘是串行存取","A":"二者都是串行存取"},"answer":"B"},{"id":"learncoder_129_12733","stem":"和动态MOS存储器相比,双极型半导体存储器的性能是\t.","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"集成度低,存取周期快,位平均功耗大","A":"集成度高,存取周期快,位平均功耗少","B":"圧集成度高,存取周期快,位平均功耗大"},"answer":"C"},{"id":"learncoder_129_12735","stem":"在磁表面存储器的记录方式中, 。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"不归零制和归零制的记录密度是一样的","B":"不归零制的记录方式中不需要同步信号,故记录密度比归零制高","C":"不归零制记录方式由于磁头线圈中始终有电流,因此抗干扰性能好"},"answer":"C"},{"id":"learncoder_129_12737","stem":"活动头磁盘存储器的寻道时间通常是指\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"最大寻道时间和最小寻道时间之和","B":"最大寻道时间和最小寻道时间的平均值","A":"最大寻道时间"},"answer":"B"},{"id":"learncoder_129_12740","stem":"相联存储器与传统存储器的主要区别是前者又叫按\t寻址的存储器。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"堆栈","A":"地址","B":"内容"},"answer":"B"},{"id":"learncoder_129_12736","stem":"磁盘存储器的等待时间通常是指\t 。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"磁盘旋转半周所需的时间","C":"磁盘旋转2/3周所需的时间","A":"磁盘旋转一周所需的时间"},"answer":"B"},{"id":"learncoder_129_12739","stem":"磁盘转遠提高一倍,则\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"平均査找时间缩小一半","B":"其存取速度也提髙一倍","C":"不影响査找时间"},"answer":"C"},{"id":"learncoder_129_12738","stem":"活动头磁盘存储中,信息写入或读出磁盘是__进行的。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"串并方式","B":"串行方式","A":"并行方式"},"answer":"B"},{"id":"learncoder_129_12727","stem":"某存储器容量为32K x 16位侧\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"地址线为16根,数据线为32根","B":"地址线为32根,数据线为16根","C":"地址线为15根,数据线为16根"},"answer":"C"},{"id":"learncoder_129_12730","stem":"可编程的只读存储器\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"一定是可改写的","A":"不一定是可改写的","C":"一定是不可改写的"},"answer":"A"},{"id":"learncoder_129_12726","stem":"若主存每个存储单元为16位,则\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"其地址线数与16有关","B":"其地址线数与16无关","A":"其地址线为16根"},"answer":"B"},{"id":"learncoder_129_12729","stem":"EPROM 是指\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"可擦洗可编程的只渎存储器","B":"可编程的只读存储器","A":"只读存储器"},"answer":"C"},{"id":"learncoder_129_12728","stem":"下列叙述中 \t是正确的。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"主存可由RAM和ROM组成","B":"主存只能由ROM组成","C":"主存只能由RAM组成"},"answer":"A"},{"id":"learncoder_129_12731","stem":"下述说法中\t是正确的。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"半导体RAM是易失性RAM.而静态RAM中的存储信息是不易失的","C":"半导体RAM是易失性RAM,而静态RAM只有在电源不掉电时,所存信息是不易失的","A":"半导体RAM信息可读可写,且断电后仍能保持记忆"},"answer":"C"},{"id":"learncoder_129_12732","stem":"下述说法中\t是正确的。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"EPROM是可改写的,但它不能作为随机存储器","C":"EPROM只能改写一次,故不能作为随机存储器","A":"EPROM是可改写的,因而也是随机存储器的一种"},"answer":"B"},{"id":"learncoder_129_12721","stem":"某计算机字长是32位,它的存储容量是64 KB按字编址,它的寻址范围是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"16K","C":"32K","A":"16 KB"},"answer":"B"},{"id":"learncoder_129_12724","stem":"某一 RAM芯片,其容量为512 X 8位,除电源和接地端外,该芯片引出线的最少数目是。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"40","A":"25","C":"23"},"answer":"A"},{"id":"learncoder_129_12720","stem":"某计算机字长是16位,它的存储容量是1 MB,按字编址,它的寻址范围是","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"1M","A":"512K","C":"512 KB"},"answer":"A"},{"id":"learncoder_129_12723","stem":"某一RAM芯片,其容量为512x8位,除电源和接地端外,该芯片引出线的最少数目是。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"19","A":"21","B":"17"},"answer":"C"},{"id":"learncoder_129_12719","stem":"某计算机字长是16位,它的存储容量是64 KB,按字编址,它的寻址范围是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"C":"32K","B":"32 KB","A":"64K"},"answer":"C"},{"id":"learncoder_129_12722","stem":"某计算机字长是32位,它的存储容量是256 KB,按字编址,它的寻址范围是 \t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":", 128K\tB.64K\tC. 64 K","B":""},"answer":"B"},{"id":"learncoder_129_12725","stem":"某一 RAM芯片,其容量为128K x 16位,除电源和接地端外,该芯片引出线的最少数目。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"33","B":"35","C":"25"},"answer":"B"},{"id":"learncoder_129_12716","stem":"存取周期是指\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"存储器进行连续写操作允许的最短间隔时间","A":"存储器的写入时间","C":"存储器进行连续读或写操作所允许的最短间隔时间"},"answer":"C"},{"id":"learncoder_129_12718","stem":"—个16K x 32位的存储器,其地址线和数据线的总和是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"A":"48","C":"36","B":"46"},"answer":"B"},{"id":"learncoder_129_12717","stem":"和辅存相比,主存的特点是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.存储器","analysis":"空","type":"choice","options":{"B":"容量小,速度快,成本低","C":"容量大,速度烘,成本高","A":"容量小,速度快,成本髙"},"answer":"A"},{"id":"learncoder_128_7764","stem":"某总线在一个总线周期中可并行传送8个字节数据,假设一个总线周期等于一个时钟 周期,总线的时钟频率为66 MHz,求总线的带宽。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"short_answer","answer":"设总线的时钟频率为f。则总线的时钟周期T=1/f,根据在一个总线周期(即一个时钟周 期)内并行传输8B,得总线带宽为8 B/T = 8 Bxf=8 Bx66xl06 Hz≈52R MBps (1 M=220)"},{"id":"learncoder_128_7761","stem":"在高档PC机中,流行使用三总线(系统总线,PCI总线JSA或EISA总线)结构乜说明这 三种总线的连接关系,并举例说明每组总线上所连接的部件。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"short_answer","answer":"高档PC机中,系统总线主要连接CPU和存储器;PCI总线主要连接多媒体卡、高速局域 网适配器、高性能图形板等离速部件订SA或EISA总线连接图文传真机、调制解调器、打印机等 低速部件口系统总线和PCI总线通过PCI桥路相连,PCI总线又通拉标准总线控制器与ISA和 EISA总线相连。"},{"id":"learncoder_128_7758","stem":"什么是总线通信控制?为什么需要总线通信控制?","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"short_answer","answer":"总线通信主要解决通信双方如何获知传输开始和传输结東,以及通信双方如何协调配 合。因为总线是众多部件共享的,在传送时间上只能用分时方式来解决,所以通信双方必须按某 种约定的方式进行通信。"},{"id":"learncoder_128_7763","stem":"串行传输和并行传输有何区别?各应用于什么场合?","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"short_answer","answer":"串行传输是指数据在一条线路上按位依次进行传输,线路成本低,但速度慢,适合于远距 离的数据传输。并行传输是每个数据位都有一条独立的传输线,所有的数据位同时传输,其传输 速度快、成本髙》适合于近距离、高遠传输的场合&"},{"id":"learncoder_128_7760","stem":"异步通信与同步通信的主要区别是什么,说明通信双方如何联络。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"short_answer","answer":"同步通信和异步通信的主要区别是前者有公其时钟,总线上的所有设备按统一的时序” 统一的传输周期进行信息传输,通信双方按约定好的时序联络;后者没有公共时钟.没有固定的 传输周期,采用应答方式通信,具体的联络方式有不互锁、半互锁和全互锁三种。不互锥方式通 信双方没有相互制约关系;半互锁方式通信双方有简单的制约关系;全互锁方式通信双方有完全 的制约关系。其中全互锁通信可靠性最高。"},{"id":"learncoder_128_7757","stem":"什么是总线判优?为什么需要总线判优?","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"short_answer","answer":"总线判优就是当总线上各个主设备同时要求占用总线时,通过总线控制器,按一定的优 先等级顺序确楚某个主设备可以占用总线。因为总线传输的特点就是在某一肘刻,只允许一个 部件向总线发送信息,如果有两个以上的部件同时向总线发送信息,势必导致信号冲突传输无 效,故需用判优来解决。"},{"id":"learncoder_128_7759","stem":"什么是总线标准?为什么要制定总线标准?","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"short_answer","answer":"总线标准是国际公布或椎荐的互联各个模块的标准,这个标准为各模块互联提供一个标 准界面(接口),这个界面对它两端的模块都是透明的,即界面的任一方只需根撼总线标准的要 求来完成自身一方接口的功能,而不必考虑对方与界面的接口方式。制定总线标准使系统设计简化,便于模块生产批量化,确保基性能稳定,质量可靠,实现可移 化,便于维护等,较好地解决了系统、模块、设备与总线之间不适应、不通用及不匹配等问題"},{"id":"learncoder_128_7762","stem":"计算机中采用总线结构有何优点?","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"short_answer","answer":"计算机中采用总线结构便于故障诊断与维护'便于模块化结构设计和筒化系统设计,便于系统扩展和升级,便于生产各种兼容的软、硬件。"},{"id":"learncoder_128_7754","stem":"__1__通信既有统一的时钟信号,又允许不同速度的模块和谐工作。为此需增设一条__2__信号线。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"半同步","__2__":"\"等待\"(WAIT)响应"}},{"id":"learncoder_128_7756","stem":"总线管理包括哪些内容?简要说明各种管理措施口","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"short_answer","answer":"总线管理主要包括判优控制和通信揑制。判优控制又分集中式和分布式两种,集中式总线判优逻辑有链式査询、计数器査询和独立请求三种方式。链式査询方式只需I根总线请求线(BR)、1根总线忙线(BS)和1根总线同煮线(BG),BG 线像链条一样,串连所有的设备,设备的优先级是固定的,结构简单,容易扩充设备,但对电路故障十分敏感,一旦第i个设备的接口电路有故障,则第i个设备以后的设备都不能进行工作。计数器定时査询方式的总线请求(BR)和忙(BS)线是各设备共用的,但还需log2N(N为设 备数)狠设备地址线实现查询。设备的优先级可以不固定”控制比链式查询震杂,电路故障不如 链式査询方式敏感。独立请求方式控制线数量多,N个设备共有N根总线请求线和N根总线同意线。总线仲裁 线路更复杂,但响应时间快,且设备优先级的次序控制灵活,可以预先固定,也可通过程序来改变 优先次序,还可在必要时屏蔽某些设备的请求。通信控制有四种方式:同步通信、异步通信、半同步通信和分离式通信。同步通信采用公共 时钟,有统一的传输周期。异步通信没有公共时钟,采用应答方式通信,没有固定的传输周期。 半同步通信既有公共时钟,又允许速度不同的模块和谐工作,采用插人等待周期的措施来协调通 倍双方的配合问题。分离式通信总线上的每个模块都可以成为主模块,将总线传输周期分为两 个子周期,每个子周期可供不同模块占用,总线上无空闲等待时间,最充分地发挥了总线的有效 占用。"},{"id":"learncoder_128_7753","stem":"总线__1__技术是指不同的信号{如地址信号和数据信号)共用同一组物理线路,分时使用。此时需配置相应的电路。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"复用"}},{"id":"learncoder_128_7755","stem":"解释下列概念(1)总线\t(2)系统总线\t(3)通信总线(4)总线主设备\t(5)总线从设备\t(6)总线仲裁","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"45.空","type":"short_answer","answer":"(1)总线是连接多个部件(模块)的信息传输线,是各部件共享的传输介质。(2)系统总线是指CPU、主存J/0(通过1/0接口)各大部件之间的信息传输线。按传输内 容的不同,又分数据总线、地址总线和控制总线。(3)通信总线是连接计算机系统之间或计算机系统与其他系统(如控制仪表、移动通信等) 之间的倍息传输线。(4)总线主设备是指获得总线控制权的设备。(5)总线从设备是指被主设备访问的设备,只能响应从主设备发来的各种总线命令。(6)总线仲裁即总线判优,主要解决在多个主设备申请占用总线时,由总线控制器忡裁出优\t先级别最高的设备,允许其占用总线。"},{"id":"learncoder_128_7752","stem":"在计数器定时查询方式下,采用__1__计数的方式,可使每个设备使用总线的优先级 相等祥","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"每次从上一次计数的终止点开始"}},{"id":"learncoder_128_7751","stem":"在异步通信中須没有固定的总线传输周期,通信双方通过__1__信号联络。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"应答(握手}"}},{"id":"learncoder_128_7750","stem":"在同步通信中,设备之间__1__应答信号,数据传输在__2__下进行。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"没有","__2__":"公共时钟信号的控制"}},{"id":"learncoder_128_7749","stem":"总线的判优控制可分为 __1__式和__2__式两种。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"集中","__2__":"分布"}},{"id":"learncoder_128_7748","stem":"__1__只能将信息从总线的一端传到另一端,不能反向传输。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"单向总线"}},{"id":"learncoder_128_7745","stem":"在总线的异步通信方式中,通信的双方可以通过__1__、__2__和 __3__三种类型联络。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"不互锁","__2__":"半互处\t","__3__":"全互锁"}},{"id":"learncoder_128_7747","stem":"按数据传送方式不同,总线可分为__1__和__2__。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"串行传输总线","__2__":"并行传输总线"}},{"id":"learncoder_128_7744","stem":"总线同步通信影响总线效率的原因是__1__。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"必须按最慢遠度的部件来设计公共时钟"}},{"id":"learncoder_128_7746","stem":" ISA总线的最大数据宽度是__1__,EISA总线的最大数据宽度是__2__ ,PCI总线的数据 宽度为__3__,可扩充到__4__。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"16 位","__2__":" 32 位\t","__3__":"8位\t","__4__":" 64 位"}},{"id":"learncoder_128_7735","stem":"在做手术过程中,医生经常将手伸出,等护士将手术刀递上,待医生握紧后,护士才松手。 如果耙医生和护士看作是两个通信模块,上述一系列动作相当于__1__通信中的__2__方式。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"异步","__2__":"全互锁"}},{"id":"learncoder_128_7742","stem":"同步通信的主要特点是__1__,一般用于__2__场合;异步通信的特点是__3__,一般用于__4__场合。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"通信双方由统一时钟控制数攥的传输","__2__":"总线长度较短,总线上各部件存取时间比较一致的","__3__":"通信双方没有公共的时钟标准,采用应答方式通信","__4__":"总线上各部件逮度不一致的"}},{"id":"learncoder_128_7741","stem":"总线的通信控制主要解决__1__,通常有__2__、__3__ 、 __4__和__5__ 四种。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"通倍双方如何获知传输开始和传输结束,以及通信双方如何协调如何配合","__2__":"同步通信","__3__":"异步通信","__4__":"半同步通信","__5__":"分离式通信"}},{"id":"learncoder_128_7738","stem":"Plug and Play的含义是__1__ 、__2__总线标准具有这种功能总","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"即插即用","__2__":"PCI"}},{"id":"learncoder_128_7743","stem":"每个总线部件一般都配有__1__电路,以避免总线访问冲突,当某个部件不占用总线时, 由该电路禁止向总线输出信息。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"三态门"}},{"id":"learncoder_128_7740","stem":"总线上的主模块是指__1__,从模块是指__2__ 。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"对总线有控制权的模块、被主模块访问的模块","__2__":"只能响应从主模块发来的各种总线命令"}},{"id":"learncoder_128_7737","stem":"系统总线是连接__1__盘之间的信息传送线,按传输内容不同,又可分为__2__ 、__3__和__4__分别用来传送__5__ 、__6__和__7__ 。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"CPU、主存、I/O(通过I/O接口)","__2__":"地址线","__3__":"数据线","__4__":"控制线","__5__":"地址","__6__":"数据","__7__":"控制信号、响应信号、时序信号"}},{"id":"learncoder_128_7739","stem":"一个总线传输周期包括__1__、__2__、__3__ 和__4__ 四个阶段。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"申请分配阶段","__2__":"寻址阶段","__3__":"传输阶段","__4__":"结束阶段"}},{"id":"learncoder_128_7736","stem":"按连接部件不同,总线通常可分为__1__ 、__2__和__3__三种。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"blank","options":{"__1__":"片内总线","__2__":"系统总线","__3__":"通信总线"}},{"id":"learncoder_128_7732","stem":"不同的信号共用一组信号线,分时传送,这种总线传输方式是()传输。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"C":"复用","B":"并行","A":"猝发"},"answer":"C"},{"id":"learncoder_128_7729","stem":"在同步通信中,一个总线周期的传输过程是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"C":"只传输数据","B":"先传送地址,再传输数据","A":"先传送数据,再传输地址"},"answer":"B"},{"id":"learncoder_128_7731","stem":"总线复用方式可以()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"A":"提高总线的传输带宽","B":"增加总线的功能","C":"减少总线中信号线的数量"},"answer":"C"},{"id":"learncoder_128_7728","stem":"总线的独立请求方式优点是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"A":"速度高","B":"可靠性高","C":"成本低"},"answer":"A"},{"id":"learncoder_128_7727","stem":"在各种异步通信方式中,\t速度最快.","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"C":"不互锁","A":"全互锁","B":"半互锁"},"answer":"C"},{"id":"learncoder_128_7734","stem":"总线的半同步通信方式()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"A":"不采用时钟信号,只采用握手信号","B":"既采用时钟信号,又釆用握手信号","C":"既不釆用时钟信号,又不采用握手信号"},"answer":"B"},{"id":"learncoder_128_7733","stem":"总线的异步通信方式()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"A":"不采用时钟信号,只采用握手信号","B":"既釆用时钟信号,又采用握手信号","C":"既不采用时钟信号,又不采用握手信号"},"answer":"A"},{"id":"learncoder_128_7730","stem":"总线中数据宿号和地址信号分别用组线路传输,这种传输方式称为()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"C":"复用传输","B":"并行传输","A":"串行传输"},"answer":"B"},{"id":"learncoder_128_7726","stem":"总线通信申的同步控制是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"B":"由统一时序控制的方式","C":"只适合于外围设备控制的方式","A":"只适合于CPU控制的方式"},"answer":"B"},{"id":"learncoder_128_7725","stem":"系统总线中的数据线、地址线和控制线是根据()来划分的。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"C":"总线传输的内容","A":"总线所处的位置","B":"总线的传输方向"},"answer":"C"},{"id":"learncoder_128_7722","stem":"在计数器定时查询方式下,若计数从0开始,则()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"C":"设备号大的优先级髙","B":"每个设备使用总线的机会相等","A":"设备号小的优先级高"},"answer":"A"},{"id":"learncoder_128_7724","stem":"在链式査询方式下,若有N个设备,则()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"B":"无法确定有几条总线请求线","A":"有N条总线请求线","C":"只有一条总线请求线"},"answer":"C"},{"id":"learncoder_128_7721","stem":"在计数器定时查询方式下,若每次计数从上一次计数的终止点开始,则()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"C":"设备号大的优先级髙","B":"每个设备使用总线的机会相等","A":"设备号小的优先级高"},"answer":"B"},{"id":"learncoder_128_7723","stem":"在独立请求方式下,若有N个设备,则()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"A":"有一个总线请求信号和一个总线响应佶号","B":"有N个总线请求信号和N个总线响应信号","C":"有一个总线请求信号和N个总线响应信号"},"answer":"B"},{"id":"learncoder_128_7720","stem":"连接计算机与计算机之间的()总线属于总线。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"A":"内","B":"系统","C":"通信"},"answer":"C"},{"id":"learncoder_128_7719","stem":"以下描述PCI总线的基本概念中,正确的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"B":"PCI总线需要人工方式与系统配置","A":"PCI总线是一个与处理器时钟频率无关的高速外围总线","C":"系统中只允许有一条PS总线"},"answer":"A"},{"id":"learncoder_128_7718","stem":"三种集中式总线控制中()方式对电路故障最敏感。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"A":"链式査询","C":"独立请求","B":"计数器定时査询"},"answer":"A"},{"id":"learncoder_128_7716","stem":"在三种集中式总线控制中,独立请求方式响应时间最快I是以()为代价的。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"C":"增加处理机的开销和增加控制线数","A":"增加处理机的开销","B":"增加控制线数"},"answer":"B"},{"id":"learncoder_128_7715","stem":"在三种集中式总线控制中()方式响应时间最快。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"C":"独立请求","B":"计数器定时査询","A":"链式查询"},"answer":"C"},{"id":"learncoder_128_7717","stem":"所谓三总线结构的计算机是指()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"B":"I/O总线、主存总线和DMA总线三组传输线","A":"地址线、数据线和控制线三组传输线","C":"I/O总线、主存总线和系统总线三组传输线"},"answer":"B"},{"id":"learncoder_128_7714","stem":"总线中地址线的作用是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"B":"由设备向主机提供地址","A":"只用于选择存储器单元","C":"用于选择指定存储器单元和I/O设备接口电路的地址"},"answer":"C"},{"id":"learncoder_128_7713","stem":"微型计算机中控制总线提供的完整信息是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"E":"上述两项","A":"存储器和1/0设备的地址码","B":"所有存储器和I/O设备的时序信号和控制信号","F":"上述两项","D":"上述各项","C":"来自I/O设备和存储器的响应信号"},"answer":"E"},{"id":"learncoder_128_7712","stem":"计算机使用总线结构的主要优点是便于实现积木化,缺点是()","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"C":"两种信息源的代码在总线中不能同时传送","A":"地址信息、数据信息和控制信息不能同时出现","B":"地址信息与数据信息不能同时出现"},"answer":"C"},{"id":"learncoder_128_7711","stem":"计算机使用总线结构便于増减外设,同时()。","key_points":"知识点.练习.专业课练习.计算机组成原理.系统总线","analysis":"空","type":"choice","options":{"A":"减少了信息传输量","B":"提高了信息的传输速度","C":"减少了信息传输线的条数"},"answer":"C"},{"id":"learncoder_126_7709","stem":"电子计算机的英文名是__1__,世界上第一台电子计算机命名为__2__,它是由__3__大学制成。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":" Computer","__2__":"ENIAC","__3__":"美国宾夕医尼亚州立"}},{"id":"learncoder_126_7706","stem":"电子计算机按处理信息的形式分类,可分为 __1__,__2__和__3__ 三种。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":"数字计算机","__2__":"模拟计算机","__3__":"数字模拟混合式计算机"}},{"id":"learncoder_126_7708","stem":"计算机按其工艺和器件特点,大致经历了四代变化,第一代从__1__年开始,采用__2__;第二代从__3__年开始,采用__4__,第三代从__5__年开始,采用__6__第四代从__7__年开始,采用__8__ 。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":" 1946","__2__":"电子管","__3__":" 1958","__4__":"晶体管","__5__":"1965","__6__":"中小规模集成电路","__7__":"1971","__8__":"大规模和超大规模集成电路"}},{"id":"learncoder_126_7710","stem":" __1__计算机用来处理离散型的信息,而__2__计算机用来处理连续型的信息。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":"\t数字","__2__":"模拟"}},{"id":"learncoder_126_7707","stem":"计算机的发展是__1__越来越小,__2__越来越快,__3__越来越大,__4__越来越低。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":"体积","__2__":"速度","__3__":"容量","__4__":"价楷"}},{"id":"learncoder_126_7703","stem":"数控机床是计算机在__1__方面的应用,邮局实现信件自动分拣是计算机在__2__方面的应用。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":"过程控制","__2__":"模式识别"}},{"id":"learncoder_126_7705","stem":"计算机在过程控制应用中,除计算机外,__1__是重要部件,它能把转换成计算机 能识别的信号。__2__","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":" A/D转换器","__2__":"模拟量"}},{"id":"learncoder_126_7702","stem":"电子邮件是指__1__ 。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":"通过计算机网络收发消息"}},{"id":"learncoder_126_7701","stem":"集成电路的发展,到目前为止,依次经历了__1__,__2__,__3__和__4__四个阶段。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":"小规模集成(SSI)","__2__":"中规模集成(MSL) ","__3__":"中小规模集成电路","__4__":"大规模和超大规模集成电路"}},{"id":"learncoder_126_7704","stem":"人工智能研究,模式识别研究__1__。__2__","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":"用计算机摸拟人类智力活动的有关理论与技术","__2__":"用计算机对物体、图像、语言、文字等信息进行自动识别"}},{"id":"learncoder_126_7700","stem":"集成电路(IC)通常按集成度(每片上的逻辑门数)进行分类#51是指每片可达__1__个门,MSI 是指毎片可达__2__个门#,LSI是指每片可达__3__个门,VLSI是指单片上可以制造__4__个门。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":"几十","__2__":"上百","__3__":"上千","__4__":"几万以上"}},{"id":"learncoder_126_7699","stem":"__1__年研制成功的第一台电子计算机称为__2__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"blank","options":{"__1__":"A. 1946","__2__":"B. ENIAC"}},{"id":"learncoder_126_7696","stem":"“计算机辅助设计”的英文缩写为()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"C":"CAD","B":"CAM","D":"CAE","A":"CAI"},"answer":"C"},{"id":"learncoder_126_7698","stem":"目前大部分的微处理器使用的半导体工艺称为()。二、","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空填空题","type":"choice","options":{"D":"DMA","A":"TTL","B":"CMOS","C":"ECL"},"answer":"B"},{"id":"learncoder_126_7697","stem":"下列()是16位微处理机。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"A":"Zilog Z80","B":"Intel\t8080","D":"Mos Technology\t6502","C":"Intel\t8086"},"answer":"C"},{"id":"learncoder_126_7693","stem":"应用在飞机的导航系统上的计算机是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"D":"并行计算机","B":"一般用途计算机","A":"特殊用途计算机","C":"超级计算机"},"answer":"A"},{"id":"learncoder_126_7695","stem":"下列()为\"计算机辅助教学”的英文缩写。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"A":"CAD","C":"CAE","B":"CAM","D":"CAI"},"answer":"D"},{"id":"learncoder_126_7694","stem":"下列叙述中()是正确的。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"C":"导航用计算机属于一般用途计算机","A":"终端是计算机硬件的一部分,好比电视中的小屏幕","D":"80386处理器可以作为微型机的CPU","B":"ALU是代数逻辑单元的缩写"},"answer":"D"},{"id":"learncoder_126_7690","stem":"下列四种语言中()更适应网络环境。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"C":"C","A":"FORTRAN","B":"Java","D":"PASCAL"},"answer":"B"},{"id":"learncoder_126_7692","stem":"在北京利用检索系统能查阅美国的资料,是因为两地间通过()相连。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"B":"海底电缆","C":"光纤传输","A":"电脑电话","D":"电子邮政"},"answer":"B"},{"id":"learncoder_126_7691","stem":"现代计算机大多釆用集成电路,在集成电路生产中所采用的基本材料多数为()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"D":"硫化镉","A":"单晶硅","B":"非晶硅","C":"锑化钼"},"answer":"A"},{"id":"learncoder_126_7689","stem":"数控机床是计算机在()方面的应用。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"A":"数据处理","D":"实时控制","B":"人工智能","C":"辅助设计"},"answer":"D"},{"id":"learncoder_126_7688","stem":"微型计算机的发展通常以()为技术标志。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"C":"软件","B":"磁盘","D":"微处理器","A":"操作系统"},"answer":"D"},{"id":"learncoder_126_7687","stem":"邮局对信件进行自动分拣,使用的计算机技术是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"B":"自然语咅理解","C":"模式识别","A":"机器翻译","D":"网络通信"},"answer":"C"},{"id":"learncoder_126_7684","stem":"般用途计算机比特殊用途计算机()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"B":"用途广","D":"速度慢","A":"价格髙","C":"用途窄"},"answer":"B"},{"id":"learncoder_126_7686","stem":"对有关数据加以分类、统计、分析,这属于计算机在()方面的应用。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"A":"数值计算","B":"辅助设计","D":"实时控制","C":"数据处理"},"answer":"C"},{"id":"learncoder_126_7683","stem":"个人计算机(PC)属于()类计算机。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"A":"大型计算机","C":"微型计算机","B":"小型机","D":"超级计算机"},"answer":"C"},{"id":"learncoder_126_7685","stem":"通常计算机的更新划代以()为依据。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"B":"电子管","A":"电子器件","C":"半导体","D":"延迟线"},"answer":"A"},{"id":"learncoder_126_7682","stem":"目前被广泛使用的计算机是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"B":"模拟计算机","D":"特殊用途计算机","A":"数字计算机","C":"数字模拟混合式计算机"},"answer":"A"},{"id":"learncoder_126_7681","stem":"所谓超大规模集成电路(VLSI)是指1片IC芯片上能容纳()元件心。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"C":"数千个","B":"数百个","A":"数卜个","D":"数万个以上"},"answer":"D"},{"id":"learncoder_126_7680","stem":"ENIAC所用的主要元件是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"C":"电子管","D":"以上各项都不对","A":"集成电路","B":"址晶体管"},"answer":"C"},{"id":"learncoder_126_7679","stem":"耙电路中的所有元件如晶体管、电阻、二极管等都集成在一个芯片上的元件称为","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"B":"Integrated Circuit","A":"Transistpr","D":"Vacuum Tube","C":"Cormputers"},"answer":"B"},{"id":"learncoder_126_7678","stem":"第四代计算机以()为主要器件。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"D":"大规模和超大规模集成电路","A":"集成电路","C":"晶体管","B":"电子管"},"answer":"D"},{"id":"learncoder_126_7677","stem":"第三代计算机以()为主要器件。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"D":"超大规模集成电路","B":"电子管","C":"集成电路","A":"晶体管"},"answer":"C"},{"id":"learncoder_126_7676","stem":"所谓第二代计算机是以()为主要器件。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"C":",晶体管","D":"电子管","B":"集成电路","A":"超大规模集成电路"},"answer":"C"},{"id":"learncoder_126_7675","stem":"以真空管为主要器件的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机的发展及应用","analysis":"空","type":"choice","options":{"D":"第四代计算机","B":"第二代计算机","C":"第三代计算机","A":"第一代计算机"},"answer":"A"},{"id":"learncoder_125_21728","stem":"\t用一个时钟频率为40MHz的处理器执行标准测试程序,它所包含的混合指令数和响 应所需的时钟周期见表1・2。试求出有效的CPI、MIPS速率和程序的执行时间(假设有N条 指令)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第1章)/image3.png'/>","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"CPI即执行一条指令所需的时钟周期数。本标准测试程序共包含4种指令,那么CPI就是这4种指令的数学期望,故CPI=1x 60% +2xl8% + 4xl2% +8x10% =2.24MIPS即每秒执行百万条指令数。已知处理器的时钟频率为40MHz,即每秒包含40M个 时钟周期,故MIPS= 40/CPI = 40/2.24 »17.9程序执行时间自然就等于程序包含的指令数xCPIx时钟周期的长度,故程序执行时间=Nx2.24x 1/40MHz=5.6Nx10~8s"},{"id":"learncoder_125_21725","stem":" 已知计算机的字长为32位,存储器的容量为1MB,如果按字节、半字、字、 双字寻址,寻址范围各是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"27.空","type":"short_answer","answer":"首先1MB=8Mbit (为了在后面的计算中单位统一)按字节寻址时,寻址范围为:8MbiV8bit=1MB按半字寻址时,寻址范围为:8Mbit/16bit=512KB按字寻址时,寻址范围为:8Mbit/32bit=256KB按双字寻址时,寻址范围为:8Mbit/64bi1=128KB综合应用题"},{"id":"learncoder_125_21726","stem":" 假设CPU有20根地址线和32根数据线,试问按字节和字寻址,寻址范围分别是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"答这类题目时首先要清楚地址线的位数对应的都是按字节寻址,如果是按字寻址,则需要拿出地址线来做字内字节寻址。还有一点就是,不要一看到是按字节寻址,就马上从数据线拿出4给地址线,即220x32=222x8,得出按字节寻址是4MB,这是错误的。寻址本身和数据线没有任何关系。正确解题思路:首先,32根数据线可以看成存储字长是32位,那么一个存储字就有4个字节,如图1-3所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第1章)/image5.png'/>假设现在按字节寻址,20根地址线的寻址范围应该是22O=1MB,然后因为是按字节寻址,所以每个寻址单元已经是最小的,不需要字内寻址。如果是按字寻址,那么还有没有20位的地址线来寻址?没有,因为每个字有4个字节。这4个字节的区分,如图所示,字号为0的字里面有0号、1号、2号、3号共4个字节,只能从20根地址线里拿出两根来作为字内寻址。两根地址线的信号分别为00、01、10、11,分 别代表字内的0号、1号、2号、3号字节。这样,只剩18根地址线来寻址,按字寻址的寻址范围是218=256K"},{"id":"learncoder_125_21723","stem":"程序P在机器M上的执行时间是20s,编译优化后,P执行的指令数减少到原来的70%,而CPI增加到原来的1.2倍,则P在M上的执行时间是( \t)","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"CPI即执行一条指令所需的时钟周期数。假设M机器原时钟周期为x, 原CPI为y, P程序的指令数为z,可得P程序执行时间为xyz=20s编译优化后M机器的 CPI变为1.2y, P程序的指令数变为0.7z,则P程序执行时间为1.2x0.7xyz,故其执行时间为 16.8s","type":"choice","options":{"C":"14s","B":"11.7s","A":"8.4s","D":"16.8s"},"answer":"D"},{"id":"learncoder_125_21727","stem":"\t设有主频24MHz的CPU,平均每条指令的执行时间为两个机器周期,每个机器周期由两个时钟周期组成,试求:(1)\t机器的工作速度。(2)\t假如每个指令周期中有一个是访存周期,需插入两个时钟周期的等待时间,求机器的 工作速度。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"1)\t主频为24MHz的意思是每秒中包含24M个时钟周期,又因为执行一条指令需要4个 时钟周期,故机器每秒可以执行的指令数为24M/4=6M条(600万条)。2)\t插入两个时钟周期,即执行每条指令需要6个时钟周期,故机器每秒可以执行的指令数为24M76=4M条,即400万条"},{"id":"learncoder_125_21721","stem":"假设基准程序A在某计算机上的运行时间为100s,其中90s为 CPU时间,其余为I/O时间。若CPU速度提高50%, I/O速度不变,则运行基准程序A所耗费的时间是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"首先,需要计算CPU速度提高之后的CPU时间,即90/ (1+50%) =60s, 而I/O时间为10s是不变的,所以运行基准程序A所耗费的时间是60s+10s=70s","type":"choice","options":{"D":"70s","A":"55s","C":"65s","B":"60s"},"answer":"D"},{"id":"learncoder_125_21722","stem":"(2013年统考真题)某计算机主频为1.2GHz,其指令分为4类,它们在基准程序中所占比例及CPI如下表所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第1章)/image2.png'/>该机的MIPS数是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"首先,可以算得基准程序的CPI = 2x0.5 + 3x0.2 + 4x0.1 + 5x0.2 = 3;因为MIPS为每秒可执行的百万条指令数,为了方便计算可以将计算机的主频1.2GHz转换为 1200MHz,于是得到该机器的MIPS为1200/3=400","type":"choice","options":{"C":"400","D":"600","A":"100","B":"200"},"answer":"C"},{"id":"learncoder_125_21718","stem":"\tCPU中的译码器主要用于( )","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"CPU中的译码器主要用于指令译码,地址译码由存储器中的地址译码器 完成,数据和控制信号不需要译码","type":"choice","options":{"C":"数据译码","B":"指令译码","A":"地址译码","D":"控制信号译码"},"answer":"B"},{"id":"learncoder_125_21719","stem":"\t假定编译器对高级语言的某条语句可以编译生成两种不同的指令序列,A、B和C 三类指令的CPI和执行两种不同序列所含的三类指令条数见下表。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第1章)/image1.png'/>则以下结论错误的是(\t)I .序列一比序列二少1条指令II.序列一比序列二的执行速度快I.I.I 序列一的总时钟周期数比序列二多1个IV 序列一的CPI比序列二的CPI大","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"序列一的指令条数为5,序列二的指令条数为6,故I正确。序列一需要总时钟周期数为1x2+2x1+3x2=10,序列二需要总时钟周期数为1x4+2x14-3x1=9,故II正确。由于序列一和序列二都是由高级语言的某条语句编译而成的,序列一所用时间长,因此 序列一的速度比序列二的速度慢,故II错误。序列一的CPI为10/5=2,序列二的CPI为9/6=1.5,故IV正确","type":"choice","options":{"D":"II","A":"I、II","B":"I、I.I.I","C":"II、IV"},"answer":"D"},{"id":"learncoder_125_21716","stem":"\t已知计算机A的时钟频率为800MHz,假定某程序在计算机A上运行需要12s。现在硬件设计人员想设计计算机B,希望该程序在B上的运行时间能缩短为8s,使用新技术后 J 可使B的时钟频率大幅度提高,但在B上运行该程序所需要的时钟周期数为在A上的1.5倍。那么,机器B的时钟频率至少应为(\t)才能达到所希望的要求。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"设计算机i的时钟频率为时钟周期为T i,时钟周期数(CPI))为Ni<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_organization_2020/2020计算机组成原理(第1章)/image4.png'/>","type":"choice","options":{"D":"1.8GHz","B":"1.2GHz","A":"800MHz","C":"1.5GHz"},"answer":"D"},{"id":"learncoder_125_21720","stem":"(2010年统考真题)下列选项中,能缩短程序执行时间的措施是.(\t)I.提高CPU时钟频率\tII.优化数据通路结构\tI.I.I.对程序进行编译优化","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"“优化” 一般指对性能的提高,自然会使得计算机在执行程序时的用时缩短。从理论上来讲,程序执行时间=程序指令数x每条指令时钟(CPI)x时钟周期T,提高时钟 频率可以缩短时钟周期;编译优化可能减少程序的指令数或者优化指令结构;优化数据通路结构有可能减少指令时钟。","type":"choice","options":{"A":"仅 I、II","C":"仅II、I.I.I","D":"I、 II、I.I.I","B":"仅 I、I.I.I"},"answer":"D"},{"id":"learncoder_125_21717","stem":"(\t)可区分存储单元中存放的是指令还是数据。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"控制器可根据不同的周期(取指周期或者执行周期)来区分该地址的存 储单元存储的是数据还是指令","type":"choice","options":{"B":"运算器","D":"控制器","C":"用户","A":"存储器"},"answer":"D"},{"id":"learncoder_125_21715","stem":"(2016年统考真题)将高级语言源程序转换为机器目标代码文件的程序是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"编译程序把高级语言源程序作为输入,进行翻译转换,产生出机器语言 的目标程序,然后让计算机去执行这个目标程序,得到计算结果。解释程序不需要将源程序转换成机器目标代码,而是使用源程序进行解释,解释一句就执行一句","type":"choice","options":{"A":"汇编程序","C":"编译程序","B":"链接程序","D":"解释程序"},"answer":"C"},{"id":"learncoder_125_21712","stem":"假定机器M的时钟频率为200MHz,程序P在机器M上的执行时间为12s。对P优化时,将其所有乘4指令都换成了一条左移两位的指令,得到优化后的程序P。若在M上乘法指令的CPI为102,左移指令的CPI为2, F的执行时间是P执行时间的1.2倍,则P中的 乘法指令条数为( )","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"P的执行时间为10s,P的执行时间为P的1.2倍,即为12s,多了 2s,即多了 200Mx2=4xl08 个时钟周期,每条乘法指令比左移指令多100个时钟周期,即乘法指令数目为 4x108/100=4x106","type":"choice","options":{"D":"1600万","A":"200万","C":"800万","B":"400万"},"answer":"B"},{"id":"learncoder_125_21709","stem":"计算机中(\t)负责指令译码。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"存储器译码电路","D":"输入/输出译码电路","B":"控制单元(或者操作码译码器)","A":"算术逻辑单元"},"answer":"B"},{"id":"learncoder_125_21713","stem":"只有当程序要执行时,它才会去将源程序翻译成机器语言,而且一次只能读取、翻译并执行源程序中的一行语句,此程序称为(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"A":"目标程序","D":"汇编程序","B":"编译程序","C":"解释程序"},"answer":"C"},{"id":"learncoder_125_21710","stem":"在下列部件中,CPU存取速度由慢到快的排列顺序正确的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"一般来讲,容量越小的部件价格越昂贵,价格越昂贵速度就越快。容量从小到大的排列顺序:寄存器、Cache.主存、外存,因此速度由慢到快的排列顺序:外存、 主存、Cache、寄存器。","type":"choice","options":{"B":"外存、主存、寄存器、Cache","A":"外存、主存、Cache、寄存器","D":"主存、Cache、寄存器、外存","C":"外存、Cache、寄存器、主存"},"answer":"A"},{"id":"learncoder_125_21714","stem":"(2015年统考真题)计算机硬件能够直接执行的是( )I.机器语言程序\tI.I.汇编语言程序 I.I.I..硬件描述语言程序","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"计算机只能直接执行二进制代码,即机器语言程序","type":"choice","options":{"A":"仅I","C":"仅I、I.I.I.","B":"仅I、II","D":"I、II、I.I.I."},"answer":"A"},{"id":"learncoder_125_21711","stem":"下列关于配备32位微处理器的计算机的说法中,正确的是( )I.该机器的通用寄存器一般为32位II.该机器的地址总线宽度为32位III该机器能支持64位操作系统\t,IV. —般来说,64位微处理器的性能比32位微处理器的高","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"微处理器的位数是指该CPU—次能够处理的数据长度,称为机器字长。通常机器字长等于通用寄存器的长度。故I正确。\t’地址总线宽度决定了 CPU可以访问的物理地址空间,简单地说就是'CPU到底能够使用 多大容量的内存而CPU位数与地址字长无关,更不用说地址总线宽度了。故II错误。iii错误,64位操作系统(通常向下兼容)需要64位CPU的支持,64位操作系统不仅是 •寻址范围增加到26餐同时要求机器字长64位。IV正确,一般来说,计算机的字长越长,其性能越高。","type":"choice","options":{"A":"I、II","B":"I、III","D":"I 、 II、 IV","C":"I、 IV"},"answer":"C"},{"id":"learncoder_125_21708","stem":"指令寄存器的位数取决于( )","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"指令寄存器是用来存放当前正在执行的指令,因此指令寄存器的位数取决于指令字长。","type":"choice","options":{"B":"指令字长","C":"机器字长","D":"存储字长","A":"存储器的容量"},"answer":"B"},{"id":"learncoder_125_21705","stem":"完整的计算机系统应该包括(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"完整的计算机系统应该包括五大部件加配套的软件系统。A选项其实就是 主机,少了外部设备和软件系统;B选项五大部件齐全,缺少了软件系统;C选项缺少了外 部设备。","type":"choice","options":{"C":"主机和应用程序","A":"运算器、存储器、控制器","B":"外部设备和主机","D":"主机、外部设备、配套的软件系统"},"answer":"D"},{"id":"learncoder_125_21706","stem":"CPU中不包括(\t)","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"地址译码器在存储器中,而CPU不包含存储器","type":"choice","options":{"D":"通用寄存器","A":"操作码译码器","C":"地址译码器","B":"指令寄存器"},"answer":"C"},{"id":"learncoder_125_21707","stem":"在计算机系统中,表明系统运行状态的部件是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"程序状态字(PSW)是计算机系统的核心部件,属于控制器的一部分。PSW 用来存放两类信息:1)当前指令执行结果的各种状态信息,如有无进位、有无溢出、结果正负、结果是否为 零、奇偶标志位等。2)存放控制信息,如允许中断等。有些机器中将PSW称为标志寄存器(Flag Register, FR)。","type":"choice","options":{"D":"累加寄存器","A":"程序计数器","B":"指令寄存器","C":"程序状态字"},"answer":"C"},{"id":"learncoder_125_21704","stem":"下列描述中,正确的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"A选项错在存储结果,运算结果应该存储在存储装置,而不是控制器;所有运算应该在 运算器中完成,故B选项错误;ALU在第2章中会讲到,ALU属于组合逻辑电路,没有记 忆功能,故没有存储功能,运算结果应该存放在通用寄存器中","type":"choice","options":{"B":"所有数据运算都在CPU的控制器中完成","C":"ALU可存放运算结果","D":"输入、输出装置以及外界的辅助存储器称为外部设备,","A":"控制器能理解、解释并执行所有指令以及存储结果"},"answer":"D"},{"id":"learncoder_125_21702","stem":"下列关于计算机操作的单位时间的关系中,正确的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"指令周期:从一条指令的启动到下一条指令的启动所经历的时间,通常由多个机器周期组成。机器周期(CPU周期):在计算机中,为了便于管理,常把一条指令的执行过程划分为 若干个阶段,每一阶段完成一项工作,例如,取指令、存储器读、存储器写等,每一项工作 成为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器 周期由若干个时钟周期组成。综上所述,指令周期包含多个机器周期(CPU周期),机器周期包含多个时钟周期","type":"choice","options":{"B":"指令周期〉CPU周期〉时钟周期","A":"时钟周期〉指令周期〉CPU周期","D":"CPU周期〉时钟周期〉指令周期","C":"CPU周期〉指令周期〉时钟周期"},"answer":"B"},{"id":"learncoder_125_21699","stem":"冯•诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU区分它们的依据是(\t)。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"冯•诺依曼计算机中,指令和数据均以二进制形式存放在同一个存储器中。CPU可以根据指令周期的不同阶段来区分指令和数据,通常在取指阶段取出的 是指令,其他阶段取出的是数据。归纳总结:除去根据指令周期的不同阶段乘区分指令和数据外,还有一个方法,即取指 令和取数据时地址的来源是不同的,指令地址来源于程序计数器,而数据地址来源于地址形 成部件或指令的地址码字段。 '解题技巧:需要搞清楚的是,CPU只有在确定取出的是指令之后, 2D才会将其操作码部分送去译码,因此不可能依据译码的结果来区分指令和数据。可能疑问点:为什么有些书上说机器以存储器为中心?哪个正确?都正确。在微处理器问世之前,运算器和控制器是两个分离的功能部件,加上当 时的存储器还是以磁心存储器为主,计算机存储的信息量较少,因此早期冯•诺依曼提出的 计算机结构是以运算器为中心的,其他部件通过运算器完成信息的传递。","type":"choice","options":{"A":"指令操作码的译码结果","D":"指令和数据所在的存储单元","C":"指令周期的不同阶段","B":"指令和数据的寻址方式"},"answer":"C"},{"id":"learncoder_125_21703","stem":"在计算机系统中,作为硬件与应用软件之间的界面是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"操作系统(Operating System, OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的核心与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出装置、操作网络与管理文件系统等基本事务。应用程序需要通过操作系统来使用各种硬件资源。","type":"choice","options":{"D":"以上都不是","A":"操作系统","B":"编译程序","C":"指令系统"},"answer":"A"},{"id":"learncoder_125_21700","stem":"下列选项中,描述浮点数操作速度指标的是( )","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"MFLOPS表示每秒百万次浮点运算","type":"choice","options":{"C":"IPC","D":"MFLOPS","A":"MIPS","B":"CPI"},"answer":"D"},{"id":"learncoder_125_21701","stem":"冯•诺依曼型计算机的设计思想主要有( )I.存储程序\tII.二进制表示III微程序方式\tIV.局部性原理","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"冯•诺依曼型计算机设计思想主要有两项:一项是将十进制改为二进制,从而大大简化了计算机的结构和运算过程;另一项是存储程序的思想,即将程序与数据一起存储在计算机 内,使得计算机的全部运算成为真正的自动过程。I.I.I、IV都是干扰项。","type":"choice","options":{"D":"I、 II","A":"I、III","C":"II、 IV","B":"II、III"},"answer":"D"},{"id":"learncoder_125_19836","stem":"以下有关计算机运算速度衡量指标的描述中,正确的是()","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"机器执行程序的快慢还取决于程序在机器上的指令条数。同一个程序翻译成 MIPS数大的机器的目标代码中的指令条数可能要多于MIPS小的机器的目标代码中的指令条 数。CPU速度与CPU的主频有关,但并不是主频越高速度越快。一个用户程序执行过程中可能 会插入运行其他程序,所以通常观测到的用户程序执行时间要大于其真正的CPU执行时间。","type":"choice","options":{"A":"MIPS数大的机器一定比MIPS小的机器快","C":"IPC是指每个时钟周期内平均执行的指令条数","B":"CPU的主频越高速度越快","D":"观测到的用户程序执行时间就是CPU执行该程序的时间"},"answer":"C"},{"id":"learncoder_125_19840","stem":"已知计算机A有I1、I2、I3和I4 4条指令,其CPI分别为1、3、4和5。某程序先被编译成 \"目标代码01,01包含这4条指令的条数分别是3、6、9和2O采用优化编译后,该程序得到的目 标代码为02,02包含这4条指令的条数分别是8、6、6和2。问哪个目标代码包含的指令条数最 少?哪个目标代码的执行时间最短? 01和02的CPI分别是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"01包含的指令条数为:3+6+9+2=20。02包含的指令条数为:0+5+5+2 = 22。 所以,01包含的指令条数少。01 的时钟周期数为:3xl+6x3+9x4+2x5,= 67o 02 的时钟周期数为 40x1+5x3+5x4+2x5=: 55.可见,02的时钟周期数却少,02的执行时间短。程序的CPI二程序总的时钟周期数/程序包含的指令条数。所以,01的CPI = 67/20 = 3.35, 02 的 CPI = 55/22 = 2.5O"},{"id":"learncoder_125_19837","stem":"若某个基准测试程序在机器A上运行时需要200ms,而在机器B上的运行时间是0.16 s,则如下给出的结论中正确的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"A、B显然不正确。vB/vA = 200/160 = 1.25,vB = 1.25Va。C正确。机器A比机器B 大约慢0.25倍,故D不正确。","type":"choice","options":{"D":"机器A比机器B大约慢1.25倍","C":"机器B的速度大约是机器A的1.25倍","A":"所有程序在机器A上都比在机器B上运行速度慢","B":"机器A的速度大约是机器B的1.25倍"},"answer":"C"},{"id":"learncoder_125_19841","stem":"已知某程序编译得到的目标代码01包含4类指令I1、J2、I3和14,其CPI分别为2、3、4 和5.它们在目标代码中所占比例分别为40%、20%、30%、10%。采用优化编译后,该程序得到 的目标代码为02,02中13的指令条数减少了 20%,其他指令的条数没有变化。请问:(1)01和02的CPI分别是多少?(2)设机器的主频为1 GHz,基于01和02测得的机器MIPS分别是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"优化编译后,目标代码中各类指令所占比例分别为:13: [30 x (1-20% )] / { [30 x (1-20% )]+40+20+10[ xlOO% =25.53%11: 40 / (40+20+24+10)x100% =42.55%12: 20 / (40+20+24+10)x100% =21.28%14: 10 / (40+20+24+10) X100% = 10.64%(1)01 的 CPI = 2x40% +3x20% +4x30% +5x10% =3.1 。02 的 CPI = 2x42.55% +3x21.28% +4x25.53% +5x10.64% =3.04。(2)基于 01 测得的机器 MIPS = 1 GHz / 3.1 = 1000M/3.1 = 322.58 MIPS.基于 02 测得的机器 MIPS = lGHz /3.04 = 328.95 MIPS."},{"id":"learncoder_125_19835","stem":"设CPI为1.2的某计算机的时钟频率为2 GHz,程序A在该计算机上的指令条数为4x 109。已知某次在该计算机上运行程序A的周转时间(从开始启动到执行结束的时间)为4s,则该程序这次运行所用CPU时间占整个CPU时间的百分比大约是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查的知识点是程序执行所需的CPU时间=(指令条数*CPI)/时钟频率。 该程序这次运行所用CPU时间占整个CPU时间的百分比等于: [(指令条数 *CPI)/时钟频率]/周转时间*100% =[([(4xl09*l.2))/2GHz]]/4xl00% =60%","type":"choice","options":{"D":"100%","C":"80%","B":"60%","A":"40%"},"answer":"B"},{"id":"learncoder_125_19839","stem":"已知某程序在时钟频率为1 MHz的计算机A上运行需要100 s,在与#算机A具有相同 指令集的计算机B上运行需要50, s。由于采用了新技术,计算机B的时钟频率得到了提高,不过 执行一条指令所花费的平均时钟周期数CPI也有所增加,故该程序在计算机B上运行所花费的 时钟周期数是在计算机A上运行的时钟周期数的2倍。请问计算机B的时钟频率是多少?","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"36.空","type":"short_answer","answer":"程序在机器A上运行所花费的时钟周期数为:运行时间*时钟频率-100sxlMHz = 100M则程序在机器B上运行所花费的时钟周期数为:2xl00M = 200M机器B的时钟频率= 200M/50s = 4MHz"},{"id":"learncoder_125_19830","stem":"下列关于“程序计数器(PC)”的说法中,错误的是()。一条指令的存储地址","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查程序计数器PC的功能与用法。跳转指令的功能是修改PC,计算机总是根 据程序计数器PC的值来访问主存储器取出下一条指令。","type":"choice","options":{"C":"若跳转指令的操作数是转移目标指令的地址,则计算机直接从指令寄存揺IR中取出下","A":"程序计数器专门用于保存下一条指令的所在存储单元的地址","D":"不能通过指令来读出程序计数器的值","B":"即便是“NOP指令/空指令”,取指操作结束后,程序计数器的值也将增1"},"answer":"C"},{"id":"learncoder_125_19831","stem":"负责指令译码的是()","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查的知识点是指令译码的概念和控制单元CU的功能。","type":"choice","options":{"C":"存储器内部的译码电路","B":"CU","D":"I/O接口中的译码电路","A":"ALU"},"answer":"B"},{"id":"learncoder_125_19828","stem":"在计算机系统的层次结构中,位于硬件以上的所有层次统称为()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查计算机层次结构和虚拟机的概念。","type":"choice","options":{"C":"程序","D":"虚拟机","A":"应用软件","B":"系统软件"},"answer":"D"},{"id":"learncoder_125_19829","stem":"迄今为止,计算机中的所有信息仍是以二进制方式表示的,其理由是( )o","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"目前,计算机采用二进制的原因是由物理器件性能决定,电子器件只能稳定地表示 两种状态。","type":"choice","options":{"D":"物理器件性能决定,","C":"易于理解","B":"运算方法简单","A":"运算速度快"},"answer":"D"},{"id":"learncoder_125_19833","stem":"访存数据寄存器(MBR)的位数取决于( ) ,访存地址寄存器(MAR)的位数取决于( )。L.机器字长Ⅱ.指令字长 Ⅲ.存储宇长Ⅳ.主存地址空闸大小 Ⅳ.主存容量","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"访存数据寄存器有些文献称为MBR,有些文献称为MDR。访存地址寄存器MAR的 位数/地址总线宽度取决于主存地址空间大小,主存容量常指实际的主存储器容量,它一般小于 主存地址空间大小。","type":"choice","options":{"B":"Ⅱ、Ⅲ","D":"Ⅲ、Ⅳ","A":"1、Ⅱ","C":"Ⅱ、Ⅳ"},"answer":"D"},{"id":"learncoder_125_19834","stem":"下列关于计算机性能的说法中,正确的是().","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查指令条数、时钟频率和CPI的基本概念以及相互影响。","type":"choice","options":{"B":"同_个程序在时钟频率不同的系列机上运行,时钟频率提高的倍数等于执行速度提高的倍数","D":"执行不同程序,测得的同一条机器指令的CPI可能不同","C":"执行不同程序,测得的同一台计算机的CRT可能不同","A":"指令条数少的代码序列执行时间一定短"},"answer":"C"},{"id":"learncoder_125_19832","stem":"指令寄存器IR的位数取决于()机,程序计数器(PC)的位数取决于()I.机器字长 II.指令字长 III.存储字长 IV.主存地址空间大小V.主存容量","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查的知识点是指令寄存器IR和程序计数器PC的概念。","type":"choice","options":{"B":"II,III","C":"II,IV","D":"III,IV","A":"I,II"},"answer":"C"},{"id":"learncoder_125_19827","stem":"任何高级语言源程序或汇编语言源程序都必须翻译成机器代码才能在硬件上执行。下列程序中,不负责完成这种翻译转换任务的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"基准程序是专门用来测试、评价、比较计算机系统性能的一组典型应用程序。汇编 程序的功能是将汇编语言源程序翻译成机器代码。","type":"choice","options":{"A":"基准程序((Benchmarks))","C":"解释程序(或解释器)","B":"汇编程序","D":"编译程序(或编译器)"},"answer":"A"},{"id":"learncoder_125_19824","stem":"对汇编语言程序员而言,下列选项中不透明的是()I •主存储器的模m交叉存取II•指令寄存器III. Cache存储器IV・通用寄存器的个数 V.存储器的最小编址单位 VI・I/O系统是否采用通道方式VII.采用流水技术来加速指令的解释VIII.流水线中的相关专用通路的设计","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"透明性是指程序员无需关心、了解某些客观存在的事物。主存储器的模m交叉存 取、Cache、指令寄存器IR、采用流水技术来加速指令的解释以及在流水线中采用转发技术(设置 相关专用通路),对汇编语言程序员而言,是透明的。编写程序时,汇编语言程序员必须了解通 用寄存器的个数、存储器的最小编址单位以及I/O系统是否采用通道方式(涉及通道指令),所 以是不透明的。 ","type":"choice","options":{"A":"I,II,III","B":"IV, V, VI","C":"VII,VIII","D":"II,III,IV"},"answer":"B"},{"id":"learncoder_125_19825","stem":"下列关于“兼容”的说法中,正确的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查软件兼容和系列机的概念。","type":"choice","options":{"B":"指计算机软件或硬件在同一系列不同型号的计算机之间的通用性","A":"指计算机软件或硬件在不同计算机之间的通用性","C":"指计算机软件在同一系列不同型号的计算机之间的通用性","D":"指计算机硬件在不同厂家生产的计算机之间的通用性"},"answer":"B"},{"id":"learncoder_125_19822","stem":"下列关于计算机层次结构的说法,正确的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查的知识点是计算机层次结构和透明性的概念。在计算机层次结构中,越往 上层,功能越强,但性能下降,故选B.C和D是错误的,它们违反了计算机层次结构的特点和透 明性的要求°","type":"choice","options":{"B":"越往上层,功能越强","C":"下一层的实现可能会用到上一层的功能","A":"上一层以更高的性能实现了下一层的功能","D":"使用上一层的功能必须了解下一层的内部组成结构或者算法"},"answer":"B"},{"id":"learncoder_125_19826","stem":"计算机硬件能够直接识别的语言是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查机器语言与汇编语言的区别。","type":"choice","options":{"D":"自然语言","A":"高级语言","C":"汇编语言","B":"机器语言"},"answer":"B"},{"id":"learncoder_125_19823","stem":"下列关于计算机层次结构的说法中,不正确的是()","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查的知识点是计算机层次结构的概念。B违反了计算机层次结构的特点,是 错误的。故选B","type":"choice","options":{"B":"为了更好地实现一个功能;上一层既可调用下一层的接口,也可调用更下一层的接口","A":"对于都能实现的一个功能,调用上一层的接口比调用下一层的接口要花费更多的时间","D":"上一层的功能由下寸层的功能来实现","C":"下一层的实现与上一层无关"},"answer":"B"},{"id":"learncoder_125_19816","stem":"决定计算机计算精度的性能指标是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查计算机性能指标——字长、CPI、MIPS的概念,计算机组成部件MAR的概 念。其中,MAR的长度影响的是计算机能管理存储空间的大小。","type":"choice","options":{"D":"MIPS","C":"CPI","B":"MAR 的长度","A":"字长"},"answer":"A"},{"id":"learncoder_125_19820","stem":"下列特点中,不属于冯・诺依曼计算机的基本特点的是()","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查的知识点是冯・诺依曼计算机的特征。","type":"choice","options":{"D":"计算机采用“存储程序控制”","A":"存储器按地址访问","B":"既可以采用二进制,又可以采用十进制","C":"计算机分为五大功能模块"},"answer":"B"},{"id":"learncoder_125_19817","stem":"绝大多数性能指标是绝对的性能指标,即无需参照的性能指标。还有一些性能指标是相对的,即需要对应匚定的参照。下列计算机性能指标中,属于相对指标的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查计算机性能指标——吞吐率、响应时间、MTTR、加速比的概念。其中,MTTR为平均故障修复时间,加速比(Speedup Rate)是指解决某个问题,在原有的计算条件(算法、 程序或者硬件平台)下所花费的时间与在新的计算条件下所花费的时间的比值。","type":"choice","options":{"A":"吞吐率","B":"响应时间","D":"加速比","C":"MTTR"},"answer":"D"},{"id":"learncoder_125_19821","stem":"下列特点中,属于冯•诺依曼计算机的基本特点的是()","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查的知识点是冯•诺依曼计算机的特征。","type":"choice","options":{"A":"指令和数据混合存放在同一个存储器中","C":"存储器既可按地址访问,又可按内容访问","B":"指令的操作数至少有一个来自寄存器.","D":"操作数的类型取决于指令的操作码"},"answer":"A"},{"id":"learncoder_125_19818","stem":"冯•诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU区别它们的依据是()","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查计算机的基本组成结构和工作过程。指令操作码的译码结果只决定指令 的功能,指令和数据在主存储器中是混合存储的,指令和数据的寻址方式只决定访问哪个单元, 这些都不足以区分指令和数据。只有指令和数据被读入CPIT后,分别存入IR和通用寄存器,这 时CPU才能区分哪个是指令、哪个是数据。故选Do","type":"choice","options":{"C":"指令和数据的寻址方式","A":"指令操作码的译码结果","D":"它们被读入CPU后所处的位置","B":"它们在主存储器中所处的位置"},"answer":"D"},{"id":"learncoder_125_19819","stem":"下列关于“冯•诺依曼计算机”的说法中,错误的是()。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查冯•诺依曼计算机的特征。在冯•诺依曼计算机中,指令和数据是混合存 储在同一个存储器中。指令和数据分别存储在不同的存储器内的计算机结构被称为“哈佛结 构”。故选C。","type":"choice","options":{"D":"冯・诺依曼计算机只能处理以二进制形式表示的信息","C":"冯•诺依曼计算机的指令和数据分别存储在不同的存储器内","B":"在冯・诺依曼计算机中,下一条指令的地址只能由咚程序计数器”给出","A":"冯•诺依曼计算机所能完成的功能是由其所存储的程序决定的"},"answer":"C"},{"id":"learncoder_125_19814","stem":"下列技术中,有利于提高吞吐率的是()I・提高主频II・cpu中采用流水线技术,III.进程调度采用短作业优先策略IV.采用多级反馈队列来进行进程调度V.进程调度采用时间片轮流策略","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查计算机性能指标一一吞吐率、主频的概念,流水线的设置目的'操作系统中 进程调度的相关策略及其侧重点。其中,短作业优先策略侧重提高吞吐率,采用时间片轮流策略 侧重缩短响应时间,多级反馈队列兼顾吞吐率和响应时间。","type":"choice","options":{"D":"全部","C":"i、II、III,V","B":"I,II,III,IV","A":"I、II、II"},"answer":"B"},{"id":"learncoder_125_19815","stem":"下列技术中,有利于缩短响应时间的是()。I .提高主频II. cpu中采用流水线技术 III.提高I/O中断的优先级IV提高cpi v.控制器采用\"微程序\"控制技术","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查计算机性能指标——响应时间、主频、CPI的概念,流水线的设置目的,“微 程序”控制技术的优缺点。其中,“微程序”控制技术的优点是易于扩充或修改指令,缺点是导致 指令执行时间延长。","type":"choice","options":{"D":"全部","B":"I、II、III、IV","C":"I、II、III、V","A":"I、II、III"},"answer":"A"},{"id":"learncoder_125_19812","stem":"下列性能指标中,系统管理员最关心的是(),事务处理用户(J0I银行、证券等事务处理系统的用户)最关心的是()。I.吞吐率II・MIPS Ⅲ.响应时间 IV.CPID","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"CPI是Cycles Per Instruction(每条指令的平均时钟数)的缩写。","type":"choice","options":{"C":"I 、III","D":"I、IV","A":"I 、 II","B":"II 、III"},"answer":"C"},{"id":"learncoder_125_19813","stem":"评价计算机系统的指标中,越大越好的是()。I .字长 II.主存容量 III. cpi IV.主频 V.功耗 VI.MTTF","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查计算机性能指标的概念。","type":"choice","options":{"D":"I、III、VII","B":"I、II、IV","C":"I、II、VI","A":"I、II、III"},"answer":"C"},{"id":"learncoder_125_19808","stem":"第一代计算机采用的逻辑组件是(),第二代计算机采用的逻辑组件是(),第三代计算机采用的逻辑组件是(),第四代计算机采用的逻辑组件是()I.电子管 II.晶体管 III.二极管 IV.三极管 V.CMOS VI.中小规模集成电路VII.大规模集成电路","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查划分计算机发展代次的因素以及半导体元器件的名称,","type":"choice","options":{"A":"I、Ⅱ、Ⅲ、Ⅳ","C":"I、Ⅲ、Ⅳ、V","B":"I、Ⅲ、Ⅳ、V","D":"I、皿、Ⅵ、Ⅶ"},"answer":"D"},{"id":"learncoder_125_19811","stem":"硬件和软件在()是等价的在()是不等效的,这叫做软/硬件的等价性原理I.功能 II.性能 III.成本/价格 IV.可靠性","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查软/硬件的等价性原理。","type":"choice","options":{"D":"II、III","B":"I、III","A":"I、II","C":"I、IV"},"answer":"A"},{"id":"learncoder_125_19809","stem":"不再改变的软件存储在ROM中;称之为()","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查是固件的概念。","type":"choice","options":{"A":"BIOS","D":"中间件","C":"固件","B":"系统软件"},"answer":"C"},{"id":"learncoder_125_19810","stem":"下列”固件”的说法正确的是()","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查固件、时序逻辑、存储逻辑以及易失性的概念。","type":"choice","options":{"A":"固件是一种基于时序逻辑的硬件","D":"固件是将软件的功能用硬件来实现","C":"固件是一种基于存储逻辑的硬件","B":"固件具有易失性"},"answer":"C"},{"id":"learncoder_125_19807","stem":"()被称为计算机之父,他的贡献是将计算机设计成由5个模块组成并实现自动运算。()被称为现代计算机之父,他的贡献是将采用存储程序的思想来实现通用计算机。()提出了现代计算机的理论模型。每18个月,微处理器的集成度将翻一番,速度将提高一倍,而其价格将降低一半。这个规律被称为()定律I・巴贝奇(Babbage) II冯・诺依曼 III图灵 IV摩尔 v布尔","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"此题考查计算机的发展历程中做出重要贡献的人物。","type":"choice","options":{"A":"I、II、III、IV","C":"I、II、III、V","B":"I、II、IV、V","D":"II、III、IV、V"},"answer":"A"},{"id":"learncoder_125_7517","stem":"如何理解计算机体系结构和计算机组成?","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"计算机体系结构是指能够被程序员所见到的计算机系统的属性,即概念性的结构与功 能特性。通常是指用机器语言编程的程序员(也包括汇编语言程序设计者和汇編程序设计者) 所看到的传统机器的属性,包括指令集、数据类型、存储器寻址技术J/0机理等,大都属于抽象 的属性。计算机组成是指如何实现计算机体系结构所体现的属性,它包含了许多对程序员来说是透 明的(即程序员不知道的)硬件细节。例如,一台机器是否具备乘法指令是一个结构问题,而实 现乘法指令采用什么方式是一个组成问题。"},{"id":"learncoder_125_7514","stem":"计算机的硬件指标有哪些?","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"计算机的硬件指标主要有;(1)机器字长WPU —次能处理数据的位数,通常与CPV的寄存器位数有关口(2)存储容量:包括主存容量和辅存容量,是存放二进制代码的总和1可用位(bii)或字节 (byi£)来衡量。(3)运算速度:可用MIPS(每秒执行的百万条抬令数)、CPI(每执行一条指令所需的时钟周 期数)或FLOPS(每秒浮点运算次数)来衡量运算速度。"},{"id":"learncoder_125_7516","stem":"什么是机器字长、指令字长、存储字长?","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"机器字长是指CPU—次能处理数据的位数,通常与£PU的寄存器位数有关。指令字长 是指机器描令中二进制代码的总位数。存储字长是指存储单元中存放二进制代码的总位数。三 者可以相等也可以不等,视不同机器而定。"},{"id":"learncoder_125_7513","stem":"机器语言、汇编语言、高级语言有何区别?","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"机器语言由代码wjr”组成,是机器能直接识别的一种语言.汇編语言是面向机器的 语言,它用一些特殊的符号表示指令。高级语育是面向用户的语言,它是一种接近于人们使用习 惯的语言,直观歩通用,与具体机器无关。"},{"id":"learncoder_125_7518","stem":"解释英文缩写的含义:CPU,PCJR,CUsALU.ACC.MQ.X.MARaMDRJ/0o解释存储元件、存储元,存储基元、存储单元、存储字的概念。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"CPU (Central Processing Unit)\t中央处理器,包括控制器和运算器PC\t(Program Counter)\t程序计数器IR\t(Instraction Register)\t梢令寄存器CU\t(Control Unit)\t控制单元ALU ( Arithmetic Logic Unit)\t算术逻辑单元ACC\t(Accumulator)\t累加器MQ ( Multiplier-Quotient Rsgister)乘商帑存器X\t操作数奇存器WAR\t(Memory\tAdress Register)\t存储器地址寄徉器MDR\t(Memory\tData Register)\t存储器数据寄存器I/O\t(Input/Output equipment)\t输人输出设备存储元件(艮称存储基元、存储元)用来存放一位二进制信息。存储单元由若干个存储元件绢成,能存放多位二进制信息。许多个存储单元可组成存储矩阵(又称存储体)。每个存储 单元中二进制代码的组合即为存储宇,它可代表数值、指令、地址或逻辑数等。每个存储单元中 二进制代码的位数就是存储字长。"},{"id":"learncoder_125_7515","stem":"解释英文缩写的含义:MIPS.CPIxFL0PSo","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"MIPS( Million Insinjction Per Second)即每秒执行百万条指令数,如每秒能执行300万祭指 令,则记为3 MIP乩CPIfCycle Per Instrudion)即执行一条指令所需的时钟周期(时钟频率的倒 数)数。FLOPS(Floating Point Operation Per Second)即每秒浮点运算次数。"},{"id":"learncoder_125_7511","stem":"什么是硬件?什么是软件少两者谁更重要?为什么叩","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"硬件是计算机系统的实体部分,它由看得见摸得着的各种电子元器件及各类光、电、机设 备的实物组成,包括主机和外部设备等。软件是指用来充分发挥硬件功能,提高机器工作效率,便子人们使用机需,指挥整个计算机 系统工作的程序集合,是无形的。硬件和软件是不可分割的统一体,前者是后者的物质基础,后者是前者的“灵魂”,它们相辅 相成,互相促进。"},{"id":"learncoder_125_7510","stem":"计算机系统软件包括哪几类?各有何作用?","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"计算机系统软件包括:(1)标准程序库,如监控程序,用于监视计算机工作。(2)服务性程序,如连接、编辑、调试、诊断。(3)语言处理程序,如编译程序、汇编程序、解释程序,将各种语言转换成机器语言(4)操作系统,用来控制和管理计算机。(5)数据库管理系统。(6)各种计算机网络软件。"},{"id":"learncoder_125_7512","stem":"什么是指令?什么是程序?","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"指令是机器完成某种操作的命令,典型的指令通常包括操作码和地址码两部分。操作码 用来指出执行什么操作(如加、传送),地址码用来指出操作数在什么地方.程序是有序指令的集合,用来解决某一特定间题。"},{"id":"learncoder_125_7509","stem":"什么是主机?什么是CPU?什么是存储器?简述它们的功能。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"主机包括运算器、控制器和存储器。其功能是在控制器的指挥下,逐条地从存储器中取 岀指令,分析指令,发岀各种不同的命令,在运算器中完成各种算术逻辑运算#并将结果存于存储 器中口CPU包括运算器和控制器,又称为申央处理机,它具有运算器和控制器的功能。存储器用来存放程序和数据。"},{"id":"learncoder_125_7507","stem":"什么是计算机系统?说明计算机系统的层次结构。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"66.空","type":"short_answer","answer":"计算机系统包括硬件和软件。从计算机系统的层次结构来看,它通常可有五个以上的层 次,在每一层次(级)上都能进行稈序设计口由下至上可排序为;第一级微程序机器级,微指令由 硬件直接执行;第二级传统机器级,用微程序解释机器指令;第三级操作系统级,一般用机器语言 程序解释作取控制语句;第四级汇编语言机器级,这一级由汇编程序支持和执行;第五级髙级语 言机器级”釆用高级语言,由各种眉级语言编译程序支持和执行。还可以有第六级应用语言机器 级,采用各种面向问题的应用语昔。"},{"id":"learncoder_125_7506","stem":"计算机硬件的主要技术指标包括__1__,__2__,__3__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"机器字长","__2__":"存储容量","__3__":"运算速度"}},{"id":"learncoder_125_7508","stem":"画出计算机硬件基本组成框图,逋过解题过程说明每一功能部件的作用及它们之间的信 息流向。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"short_answer","answer":"让算机硬件系统由五大部件组成,如图1.3所示口控制器指挥各部件协调工作;运算器 能完成算术运算和逻辑运算;存储器用来存放程序和数据;輸入设备可将人们熟悉的宿息转换成 机器能识别的信息;输出设备可将机器运行结果转换成人们能接受的信息。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computereorganize-tsf/computereorganize-tsf-ch1/image1.png\">图1.3第2题答图解题过程说明如下:事先将需要解决的问题編制成解题程序,在控制器的指挥下”经输人设 备输入至存储器,然后启动机器运行程序,控制器从存储器中自动、逐条地取出指令,经分析,发 出各种不同的命令,执行指令,直至最终将运行结果通过输出设备显示或打印出来“部件之间的 信息流向如图中所示,其中实线表示控制信号,虚线表示反馈信号,宽线表示数据流(包括数据 和指令)。"},{"id":"learncoder_125_7505","stem":"存储器的容量可以用KB.MB和GB表示,它们分别代表__1__ , __2__和__3__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"216字节","__2__":"220字节","__3__":"230字节"}},{"id":"learncoder_125_7501","stem":"软件是各种指挥计算机工作的__1__总称,可大致分为__2__ 和__3__ 两大类。前者的 主要作用是充分发挥硬件功能及方便用户,最典型的如__4__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"程序","__2__":"系统软件","__3__":"应用软件","__4__":"操作系统"}},{"id":"learncoder_125_7498","stem":"1μs是__1__ 秒,其时间是1ns的__2__倍。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"10-6","__2__":"1 000"}},{"id":"learncoder_125_7500","stem":"指令的解释是由计算机的__1__来完成的,运算器用来完成__2__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"控制器","__2__":"算术和逻辑运算"}},{"id":"learncoder_125_7503","stem":"存储器可分为主存和__1__程序必须存于__2__内,CPU才能执行其申的指令。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"辅存","__2__":"主存"}},{"id":"learncoder_125_7502","stem":"若以电视来比喻计算机硬件和软件的关系,则电视机好比__1__,__2__好比软件。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"硬件","__2__":"电视节目"}},{"id":"learncoder_125_7499","stem":"计算机系统的软件可分为__1__和__2__,文本处理属于__3__软件,汇编程序属于__4__软件。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"系统软件","__2__":"应用软件","__3__":"应用","__4__":"系统"}},{"id":"learncoder_125_7504","stem":"常用的辅助存储器有__1__和__2__等。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"磁盘","__2__":"磁带(或光盘)"}},{"id":"learncoder_125_7495","stem":"汇编语言是一种面向__1__的语言,对__2__依赖性强,用汇编语盲编制的程序执行速 度比高级语言__3__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"机器","__2__":"机器","__3__":"快"}},{"id":"learncoder_125_7497","stem":"计算机将存储、算术逻辑运算和控制三个部分合称为__1__ 再加上__2__和__3__ 就组 成了计算机硬件系统。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"主机","__2__":"输入设","__3__":"输出设备"}},{"id":"learncoder_125_7494","stem":"电子计算机问世至今,计算机类型术断推陈出新,但依然保存”存储程序“的特点,最早 提出这种观念的是__1__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"冯•诺依曼"}},{"id":"learncoder_125_7491","stem":"计算机系统没有系统软件中的 __1__ ,就什么工作都不能做。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"擁作系统"}},{"id":"learncoder_125_7496","stem":"有些计算机将一部分软件永恒地存于只读存储器中,称为__1__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"固件"}},{"id":"learncoder_125_7493","stem":"计算机唯一能直接执行的语言是__1__ 语言。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"机器"}},{"id":"learncoder_125_7490","stem":"__1__和__2__都存放在存储器中,__3__能自动识别它们。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"指令","__2__":"数据","__3__":"控制器"}},{"id":"learncoder_125_7492","stem":"在用户编程所用的各种语言中,而计算机本身最为密切的语言是 __1__ 。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"汇编语言"}},{"id":"learncoder_125_7489","stem":"为了更好地发挥__1__效率和__2__ 20世纪50年代发展了技术,通过它对计算机__3__ 进行管理和调度。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"计算机","__2__":"方便用户","__3__":"操作系统"}},{"id":"learncoder_125_7488","stem":"计算机与日常使用的袖殄计算机的本质区别在__1__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"自动化程度的髙低"}},{"id":"learncoder_125_7485","stem":"基于__1__原理的冯·诺依曼计算机工作方式的基本特点是__2__ 。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"存储程序","__2__":"按地址访问并顺序执行指令"}},{"id":"learncoder_125_7482","stem":"在CPU中跟踪指令后继地址的寄存器是\t.","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"IR","A":"MAR","D":"MDR","C":"PC"},"answer":"C"},{"id":"learncoder_125_7484","stem":"计算机硬件包括__1__ 、__2__、__3__、__4__和__5__其中__6__、__7__和__8__组成__9__ ,__10__和__11__可统称为CPU.","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"运算器","__2__":"控制器","__3__":"存储器","__4__":"输入设备","__5__":"输出设备","__6__":"运算器","__7__":"控制器","__8__":"存储器","__9__":"主机","__10__":"运算器","__11__":"控制器"}},{"id":"learncoder_125_7487","stem":"系统程序是指__1__应用程序是指__2__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"用来对整个计算系统进行调度、管理、监视及服务的各种软件","__2__":"用户在各自的系统中开发和应用的各种程序"}},{"id":"learncoder_125_7486","stem":"计算机硬件是指__1__,软件是指__2__固件是指__3__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"计算机系统的实体部分,它由看得见摸得着的各种电子元器件及各类光、电,机设备的实物组成,包括主机、外设等","__2__":"人们事先编制的具有各类特殊功能的程序,是无形的","__3__":"具有某软件功能的硬件,一般用ROM实现"}},{"id":"learncoder_125_7483","stem":"完整的计算机系统应包括__1__和__2__。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"blank","options":{"__1__":"配套的硬件设备","__2__":"软件系统"}},{"id":"learncoder_125_7479","stem":"可区分存储单元中存放的是指令还是数据。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"D":"用户","C":"控制器","A":"存储器","B":"反运算器"},"answer":"C"},{"id":"learncoder_125_7481","stem":"将汇编语言翻译成机器语詳需借助于\t.","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"编辑程序","C":"汇编程序","D":"连接程序","A":"编译程序"},"answer":"C"},{"id":"learncoder_125_7478","stem":"存储字长是指\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"A":"存放在一个存储单元中的二进制代码组合","B":"存敵在一个存储単元中的二进制代码位数","D":"机器指令的位数","C":"存储单元的个数"},"answer":"B"},{"id":"learncoder_125_7480","stem":"存放欲执行指令的寄存器展\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"PC","D":"IR","C":"MDR","A":"MAR"},"answer":"D"},{"id":"learncoder_125_7475","stem":"将高级语言程序翻泽成机器语言程序需借助于","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"编辑程序","A":"连接程序","C":"编译程序","D":"汇编程序"},"answer":"C"},{"id":"learncoder_125_7477","stem":"存储字是指\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"存放在一个存储单元中的二进制代码位数","D":"机器指令","C":"存储单元的集合","A":"存放在-个存储单元中的二进制代码组合"},"answer":"A"},{"id":"learncoder_125_7476","stem":"存储单元是指\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"育放一个二进制信息位的存储元集合","D":"存放一条指令的存储元集合","B":"存放一个存储字的所有存储元集伶","A":"存放一个字节的所有存储元集合"},"answer":"B"},{"id":"learncoder_125_7474","stem":"下列说法中 不正确;","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"高级语言的执行速度比低级语言快","A":"高级语言的命令用英文单词来表示","B":"高级语言的语法很接近人类语言","D":"同一高级语言可在不同形式的计算机上执行"},"answer":"C"},{"id":"learncoder_125_7472","stem":"戏位的个人计算机,一个字节(byte)由\t位(曲)组成。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"16","B":"8","A":"4","D":"32"},"answer":"B"},{"id":"learncoder_125_7469","stem":"能直接让计算机接受的语言是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"D":"机器语言","C":"汇编语言","E":"高级语言","A":"C 语言","B":"BASIC"},"answer":"D"},{"id":"learncoder_125_7468","stem":"计算机中\t负责指令译码,","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"D":"输入输出译码电路","C":"存储器译码电路","B":"控制单元","A":"算术逻辑单元"},"answer":"B"},{"id":"learncoder_125_7471","stem":"下列 不属于系统程序。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"A":"数据库系统","C":"编译程序","B":"操作系统","D":"编辑程序"},"answer":"A"},{"id":"learncoder_125_7473","stem":"执行最快的语言是\t.","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"COBLE","C":"机器语言","D":"PASCAL","A":"汇编语言"},"answer":"C"},{"id":"learncoder_125_7470","stem":"80286是个人计算机中的\t器件。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"RAM","A":"EPROM","C":"ROM","D":"CPU"},"answer":"D"},{"id":"learncoder_125_7466","stem":"下列语旬中\t是正确的","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"1 MB=1024x1024B","D":"1MB = 1 024\tB","A":"1 KB =1024x1024B","B":"1 KB = 1 024\tMB"},"answer":"C"},{"id":"learncoder_125_7463","stem":"由0,1代码组成的语言,称为 \t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"机器语言","B":"人工语言","D":"高级语言","A":"汇编语言"},"answer":"C"},{"id":"learncoder_125_7465","stem":"一般8位的微型机系统以16位来表示地址,则该计算机系统有\t个地址空间.","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"A":"256","D":"131 072","B":"65 535","C":"65 536"},"answer":"C"},{"id":"learncoder_125_7462","stem":"H容量为640K存储器是指下列\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"640 x2!0位的存储器","D":"640x2\"字节的存储器","A":"640 xlO1字节的存储器","B":"640x10’位的存储器"},"answer":"D"},{"id":"learncoder_125_7464","stem":"卄算机存储数据的基本单位为\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"字节(Byte)","C":"字组(Word)","D":"以上都不对","A":"比特(Bit)"},"answer":"A"},{"id":"learncoder_125_7461","stem":"只有当程序要执行时,它才会去将源程序翻译成机器语肓,而且一次只能读取、翻译并 执行源程序中的一行语句,此程序称为\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"A":"目标程序","B":"编译程序","D":"汇编程序","C":"解释程序"},"answer":"C"},{"id":"learncoder_125_7467","stem":"一片1 MB的磁盘能存储\t的数据。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"D":"220字节","A":"106字节","B":"10-6字节","C":"109字节"},"answer":"D"},{"id":"learncoder_125_7456","stem":"下列各装置中,\t具有输人及输岀功能。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"磁盘驱动器","B":"显示器","D":"打印机","A":"键盘"},"answer":"C"},{"id":"learncoder_125_7459","stem":"计算机只懂机器语言,而人类熟悉高级语言,故入机通信必须借助\t0","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"D":"载人程序","A":"编译程序","B":"编辑程序","C":"连接程序"},"answer":"A"},{"id":"learncoder_125_7458","stem":"下列语句申\t是正确的。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"A":"激光打印机是击打式打印机","C":"评估计算机的执行速度可以用每秒执行的指令数为判断低据","B":"磁盘驱动器只有输入功能","D":"个人计算机是小型机"},"answer":"C"},{"id":"learncoder_125_7455","stem":"下列\t不是输入设备。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"D":"打印机","A":"画笔与图形板","B":"禮盘","C":"鼠标器"},"answer":"D"},{"id":"learncoder_125_7460","stem":"计算机的算术逻辑单元和控制单元合称为","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"D":"CAD","B":"UP","C":"CPU","A":"ALU"},"answer":"C"},{"id":"learncoder_125_7457","stem":"下列设备中—\t不属于输出设备。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"D":"绘图仪","A":",打印机","C":"光笔","B":"磁带机"},"answer":"C"},{"id":"learncoder_125_7454","stem":"下列 属于应用软件空","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"D":"文本处理","B":"编译程序","C":"连接程序","A":"操作系统"},"answer":"D"},{"id":"learncoder_125_7453","stem":"用户与计算机通信的界面是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"D":"系统程序","C":"应用程序","B":"外围设备","A":"CPU"},"answer":"B"},{"id":"learncoder_125_7452","stem":"冯•诺伊曼机工作方式的基本特点是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"堆栈操作","D":"存储器按内容选择地址","A":"案指令流单数据流","B":"按地址访问并顺序执行指令"},"answer":"B"},{"id":"learncoder_125_7450","stem":"用以指定待执行指令所在地址的是\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"数据计数器","A":"指令寄存器","D":"累加器","C":"程序计数器"},"answer":"C"},{"id":"learncoder_125_7449","stem":"计算机系统中的存储系统是指\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"主存","D":"主存和辅存","B":"ROM存储器","A":"RAM存储器"},"answer":"D"},{"id":"learncoder_125_7451","stem":"计算机与日常使用的袖珍计算器的本质区别在于","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"D":"自动化程度的髙低","B":"存储器容量的大小","C":"规模的大小","A":"运算速度的高低"},"answer":"D"},{"id":"learncoder_125_7447","stem":"输人、输岀装置以及外接的辅助存储器称为\t。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"主机","B":"存储器","D":"外围设备","A":"操作系统"},"answer":"D"},{"id":"learncoder_125_7446","stem":"有些计算机将一部分软件永恒地存于只读存储器中,称之为","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"软件","D":"辅助存储器","A":"硬件","E":"以上都不对","C":"固件"},"answer":"C"},{"id":"learncoder_125_7443","stem":"电子计算机问世至今,新型趋势不断推成出新,不管怎么更新,依然具有“存储程序的特点”最早提出这种概念的是\t.","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"C":"帕斯卡(Blaise Pascal)","A":"巴贝奇(Charles Babage)","B":"冯,诺伊曼(von Neumann)","D":"贝尔(Bell)"},"answer":"B"},{"id":"learncoder_125_7448","stem":"计算机中有关ALU的描述是正确的是","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"A":"只做算术运算,不做逻辑运算","D":"以上答案都不对","B":"只做加法","C":"能存放运算结果"},"answer":"D"},{"id":"learncoder_125_7445","stem":"电子计算机的算术/逻辑单元、控制单元及主存储器合称为","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"ALU","C":"主机","D":"UP","A":"CPU"},"answer":"C"},{"id":"learncoder_125_7444","stem":"下列描述中\t是正确的。","key_points":"知识点.练习.专业课练习.计算机组成原理.计算机系统概论","analysis":"空","type":"choice","options":{"B":"—台计算机包括输人、输出、控制、存储及算术逻辑运算五个部件","C":"所有的数据运算都在CPU的控制器中完成","D":"以上答案都正确","A":"控制器能理解、解释并执行所有的指令及存储结果"},"answer":"B"},{"id":"learncoder_36_19076","stem":"两个整数序列:A=a1,a2,a3,...,an和B=b1,b2,b3,...,bn,已经存入两个单链表中,设计一 个算法,判断序列B是否是序列A的子序列。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题实质上是一个模式匹配问题,这里匹配的元素是整数而不是字符。因两整数序 列已存入两个链表中,操作从两链表的第一个结点开始,若对应数据相等,则后移指针;若对应数 据不等,则链表A从上次开始比较结点的后继开始,链表B仍从第一结点开始比较,直到链表B 到尾表示匹配成功。链表A到尾链表B未到尾表示失败。操作中应记住链表A每次的开始结 点,以便下趟匹配时好从其后继开始。","type":"short_answer","answer":"int Pattern(LinkedList A,B)//A和B分别是数据域为整数的单链表,本算法判断链表B是否是链表A的子序列。如 是,返回1;否则,返回0表示失败。{p = A; //p为链表A的工作指针,本题假定链表A和链表B均无头结点pre = p; //pre记住每趟比较中链表A的开始结点q = B; //q是链表B的工作指针while(p && q)if(p->data= =q->data)\t( p = p->next;q = q->next; }else {pre = pre->next ;p = pre; //链表A新的开始比较结点q = B;}//q从链表B第一结点开始。if(q==null)retum(l); //链表B是链表A的子序列else return(O) ; //链表B不是链表A的子序列} //算法结束"},{"id":"learncoder_36_19077","stem":"已知3个带头结点的线性链表A、线性链表B和线性链表C中的结点均依元素值自小至 大非递减排列(可能存在两个以上值相同的结点),编写算法对链表A进行如下操作:使操作后 的链表A中仅留下3个表中均包含的数据元素的结点,且没有值相同的结点,并释放所有无用 结点。限定算法的时间复杂度为O(m+n+p),其中m,n和p分别为3个表的长度。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"留下3个链表中的公共数据,首先查找链表A和链表B中公共数据,再去链表C中 找有无该数据。要消除重复元素,应记住前驱,要求时间复杂度O(m+n+p),在查找每个链表时, 指针不能回溯。算法实现时,链表A、链表B和链表C均从头到尾(严格地说链表B、链表C中最多一个到 尾)遍历一遍,算法时间复杂度符合O(m+n+p) o算法主要有while (pa && pb && pc)。","type":"short_answer","answer":"LinkedList Common(LinkedList A,B,C)//链表A、链表B和链表C是三个带头结点且结点元素值非递减排列的有序表。本算法使 链表A仅留下三个表均包含的结点,且结点值不重复,释放所有结点{ pa = A - >next ; pb= B ->next ; pc = C - > next ; pa pb 和 pc 分别是链表 A、B 和 C 的工作指针。pre = A;//pre是链表A中当前结点的前驱结点的指针while (pa && pb && pc) //当链表A、B和C均不空时,查找三链表共同元素{ while(pa && pb)if(pa->data<pb->data) { u = pa;pa = pa->next;free(u) ;} //结点元素值小时,后移指针 else if(pa->data> pb->data) pb = pb->next;else if(pa && pb) //处理链表A和B元素值相等的结点{ while( pc && pc,->data<pa->data) pc = pc->next ;if (pc){if(pc->data>pa->data) //pc当前结点值与pa当前结点值不等,pa后移指针{ u = pa;pa = pa->next;free( u) ;}else//pc、pa和pb对应结点元素值相等{if(pre= =A) { pre->next = pa;pre = pa;pa = pa->next) //结果表中第一个结点 else if( pre->data= =pa->data) //(处理)重复结点不链入链表A{u = pa;pa = pa->next;free(u) ;}else { pre->next = pa;pre = pa;pa = pa->next;} //将新结点链入链表 A pb = pb->next ; pc = pc->next ; //链表的工作指针后移}//else pc、pa和pb对应结点元素值相等if( pa= =null) pre->next = null ; //原链表A已到尾,置新链表A表尾else//处理原链表A未到尾而链表B或链表C到尾的情况{ pre->next = null; //置链表A表尾标记\twhile (pa! =null) //删除原链表A剩余元素{u = pa;pa = pa->next;free(u) ; }"},{"id":"learncoder_36_19075","stem":"设有一个双链表,每个结点中除有prior、data和next这3个域外,还有一个访问频度域 freq,在链表被启用之前,其值均初始化为零。每当在链表进行一次LocateNode(L,x)运算时,令 元素值为X的结点中freq域的值加1,并调整表中结点的次序,使其按访问频度的递减序排列, 以便使频繁访问的结点总是靠近表头。试写一符合上述要求的LocateNode运算的算法。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"在算法中先查找数据x,查找成功时结点的访问频度域增1,最后将该结点按频度递 减插入链表中","type":"short_answer","answer":"DList locate ( DList L, ElemType x)// L是带头结点的按访问频度递减的双向链表{ DList p=L->next,q; //p为L表的工作指针,q为p的前驱,用于查找插入位置 while(p && p->data ! =x) p = p->next; // 查找值为 x 的结点if( ! p) {printf(\"不存在所查结点 \\n\" ) ; exit(0) ; }else { p->freq++;\t//令元素值为x的结点的freq域加1p->next->pred = p->pred ;\t//将p结点从链表上摘下p->pred->next = p->next;\trq = p->pred;\t//以下查找p结点的插入位置while(q ! =L && q_>freq<p_〉freq) q = q->pred; p->next = q->next ; q->next->pred = p; // 将 p 结点插入 p->pred = q; q->next=p;\t.Ireturn(p); //返回值为x的结点的指针I //算法结束"},{"id":"learncoder_36_19070","stem":"将下列函数,按它们在BT8时的无穷大阶数,从小到大排序。n,n-n3 +7n5 ,nlog2n,2n/2 ,n3 ,log2n,n1/2 +log2n, (3/2)n ,n!\t,n2 +log2n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此问题考查的知识点是算法时间复杂度的表示。其中常量阶<对数阶<线性阶<指 数阶 < 幕次阶 < 阶乘阶。","type":"short_answer","answer":"从小到大排列为:log2 n, nl/2 + log2 n, n, nlog2 n, n +log2 n, n3, n-n3 +7n , 2n/2 , (3/2)n,n!。"},{"id":"learncoder_36_19073","stem":"已知单链表L是一个递增有序表,试写一高效算法,删除表中值大于min且小于max的 结点(若表中有这样的结点),同时释放被删结点的空间,这里min和max是两个给定的参数。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"首先想到的是拿链表中的元素一个个地与max和min比较,然后删除这个结点。其. 实因为已知其是有序链表,所以只要找到大于min的结点的直接前趋结点,再找到小于max的结 点,然后一并把中间的全部摘掉就可以了。","type":"short_answer","answer":"struct node{\tDatatype data ;struct node * next;}ListNode ;typedef ListNode * LinkList ;void DeleteList ( LinkList L, DataType min , DataType max ){ ListNode * p , * q , * h;p = L->next; //采用代表头结点的单链表while( p && p->data < = min) //找比min大的前一个元素位置{q=p;p = p->next;}p=q;\t//保存这个元素位置while( q && q->data <max) //找比max小的最后一个元素位置{q = q->next;while(p->next! =q){h = p->next;p = p->next;free(h); //释放空间}p->next = q;//把断点链上\t} "},{"id":"learncoder_36_19067","stem":"对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是(\t)","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是带头结点的单链表操作。带头结点的单链表空的时候表示只有一个结点存在,但没有存信息。所以选B。A表示没有结点,C表示循环单链表,D表示有一 个指针不为空,所以都不对。","type":"choice","options":{"A":"head = = NULL","C":"head->next= =head","D":"head! =NULL","B":"head->next= =NULL"},"answer":"B"},{"id":"learncoder_36_19071","stem":"在单链表、双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将 结点*p从相应的链表中删去?若可以,其时间复杂度各为多少?","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此问题考查的知识点是各类链表的基本操作。需要了解各类链表的存储结构,单链 表只知P结点地址,无法知道其前驱地址,无法删除;双链表可以找到前驱地址为p->prior,能删 除;循环链表可以循环找到P的前驱,也能删除。","type":"short_answer","answer":"单链表不可以,其他可以。双链表时间复杂度为0(1),单循环链表时间复杂度 为 0(n)。"},{"id":"learncoder_36_19072","stem":"设有集合A和集合B,要求设计生成集合C = A∩B的算法,其中集合A、集合B和集合C 用链式存储结构表示。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"顺序扫描在链表A和链表B中找出相同元素,逐个插入到链表C中。","type":"short_answer","answer":"typedef struct node{ int data;\t\tstruct node * next;} lklist;\tvoid intersection (lklist * ha, lklist * hb, lklist * &hc){\tlklist *p,*q,*、t;\tfor ( p = ha, hc=NULL;p! = NULL; p=p->next ){ for ( q = hb; q! = NULL ; q = q->next)\tif (q->data= =p->data) break ;if(q!=NULL)\t{t= (lklist * ) malloc( sizeof(lklist));t->data = p->data ;\tt->next = hc; hc = t;}}}"},{"id":"learncoder_36_19066","stem":"在单链表指针为p的结点之后插入指针为s的结点,正确的操作是( )o","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是单链表的插入操作。要先保存P的后继结点,再连入s结点, 所以选B。A、C、D都将使地址丢失,连接失败。","type":"choice","options":{"A":"p->next = s ; s->next = p->next;","C":"p->next = s;p->next = s->next;","B":"s->next = p->next;p->next = s;","D":"p->next = s->next;p->next = s ;"},"answer":"B"},{"id":"learncoder_36_19069","stem":"运算是数据结构的一个重要方面。举例说明两个数据结构的逻辑结构和存储方式完全 相同,只是对于运算的定义不同,因而两个数据结构'具有显著不同的特性,是两个不同的结构。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此问题考查的知识点是数据结构的逻辑结构、物理结构的意义。","type":"short_answer","answer":"栈和队列的逻辑结构相同,其存储表示也可相同(顺序存储和链式存储),但由于 其运算集合不同而成为不同的数据结构。"},{"id":"learncoder_36_19074","stem":"试写出在单链表中搜索元素x的算法。若x存在链表中,则输出它在表中的序号,否则 将x插到表尾。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"顺序扫描单链表,找到返回,否则在尾部申请结点插入。","type":"short_answer","answer":"typedef struct node{int data;node * next;}node;void locate ( node * 1, int x){int p = 1, found = 0 ;node * q, * t ;q = l;while ( q ->next! = null){if( q->data= =x){ cout<<p ; found = 1; }else{q = q->next; p++;}if( ! found){t = new node; t->data = x; t->next = null; q->next=t;}}//locate"},{"id":"learncoder_36_19060","stem":"若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采 用(\t)存储方式最节省运算时间。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是线性表的存储结构对基本操作的时间影响。A、B、D每次都要 从头向后找到相应结点,而G就标识在最后一个结点,所以选Co","type":"choice","options":{"D":"带头结点的双循环","C":"单循环链表","B":"双链表","A":"单链表"},"answer":"B"},{"id":"learncoder_36_19063","stem":"线性表(a1,a2,...an)以链式存储方式存储时,访问第i位置元素的时间复杂度为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是线性表基本操作的时间复杂度。链式存储的线性表访问第i 个位置的元素时需要从头开始向后查找,平均查找次数为(n+1)/2,所以复杂性为0(n),选co","type":"choice","options":{"C":"0(n)","B":"0((1))","D":"0(i-1)()","A":"0((i)"},"answer":"C"},{"id":"learncoder_36_19064","stem":"非空的循环单链表head的尾结点p满足(\t)","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是循环单链表的存储定义。非空的循环单链表的尾结点的指针 指向头结点,所以选Ao B、C、D均不能构成非空的循环单链表。","type":"choice","options":{"A":"p->next = head","B":"p>next=NULL","C":"p = NULL","D":"p = head"},"answer":"A"},{"id":"learncoder_36_19061","stem":"静态链表中指针表示的是()。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是静态链表的定义。静态链表存储结构实际就是结构体数组,所 以其指针表示的就是数组下标。A、C、D描述的不准确,所以选B。","type":"choice","options":{"C":"下一元素地址","D":"左、右孩子地址","B":"数组下","A":"内存地址"},"answer":"B"},{"id":"learncoder_36_19062","stem":"若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为(\t)(1<=i<=n+1)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是线性表基本操作的时间复杂性。顺序存储的线性表插入元素 时需要从插入位置开始向后移动元素,腾出位置以便插入,平均移动次数为(n+1)/2,所以复杂 性为0(n),选C。","type":"choice","options":{"A":"0((0))","D":"0((n^2)","C":"0(n))","B":"0((1))"},"answer":"C"},{"id":"learncoder_36_19065","stem":"双向链表中有两个指针域,即prior和next,分别指回前驱及后继,设p指向链表中的一 个结点,q指向一个待插入结点,现要求在P前插入q,则正确的插入为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是双向链表的插人操作。在P前插入要修改P的prior指针,p的 prior所指结点的next指针,所以选A。B、C、D都将使地址丢失,连接失败。\t’","type":"choice","options":{"A":"p->prior = q ; q->next = p ;p->prior->next = q; q->prior=p->prior;","D":"p->prior->next=q;q->next = p;q->prior = p->prior;p->prior = q;","C":"q->next = p ;p->next = q ;p->prior->next = q; q->next = p ;","B":"q->prior=p->prior;p->prior->next=q;q->next=p;p->prior=q->next;"},"answer":"A"},{"id":"learncoder_36_19059","stem":"若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(\t)存储方式最节省时间。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是线性表的存储结构对基本操作的时间影响。根据题意用B、C、 D三种方法存储,在存取任一指定序号的元素时,要从头向后找,在最后进行插入和删除运算, B、D可以直接操作,C也要从头找。而A两种操作都可以直接操作,最省时间。所以选A。","type":"choice","options":{"D":"单循环链表","A":"顺序表","B":"双链表","C":"带头结点的双循环链表"},"answer":"A"},{"id":"learncoder_36_19054","stem":"以下数据结构中,(\t)是线性数据结构。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是线性结构的定义。线性结构的定义可简单地理解为元素只有 一个前导,一个后继,而A、B、C有多个后继,均错,所以选D。","type":"choice","options":{"C":"稀疏矩阵","B":"二叉树","D":"串","A":"广义表"},"answer":"D"},{"id":"learncoder_36_19053","stem":"以下与数据的存储结构无关的术语是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是数据结构和存储结构的理解。A、B、C描述的均为物理结构即 数据的存储结构,D是逻辑结构,所以选Do","type":"choice","options":{"A":"循环队列","B":"链表","D":"栈","C":"哈希表"},"answer":"D"},{"id":"learncoder_36_19057","stem":"以下属于逻辑结构的是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是对数据结构的逻辑结构理解。数据结构的逻辑结构是指数据 之间的逻辑关系,不涉及存储结构。A、B、D都是存储结构、C是逻辑结构,所以选Co","type":"choice","options":{"B":"哈希表","A":"顺序表","C":"线性表","D":"单链表"},"answer":"C"},{"id":"learncoder_36_19058","stem":"下面关于线性表的叙述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是线性表的存储结构及基本操作。线性表的顺序存储必须占用 一片连续的存储单元,不利于进行插入和删除操作,A描述正确,B不正确;而链式存储不一定占 连续的存储单元,利于插入和删除操作,所以C、D描述正确。根据题意选B。","type":"choice","options":{"A":"线性表采用顺序存储,必须占用一片连续的存储单元","B":"线性表采用顺序存储,便于进行插入和删除操作","D":"线性表采用链式存储,便于插入和删除操作","C":"线性表釆用链式存储,不必占用一片连续的存储单元"},"answer":"B"},{"id":"learncoder_36_19055","stem":"以下数据结构中,(\t)是非线性数据结构。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是非线性数据结构的定义。A是层次结构,为非线性数据结构; B、C、D均为线性数据结构,所以选Ao","type":"choice","options":{"D":"栈","A":"树","C":"队","B":"字符串"},"answer":"A"},{"id":"learncoder_36_19056","stem":"连续存储设计时,存储单元的地址(\t))o","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是存储单元问题。连续的存储单元一定连续,所以选A。B、C、D 都错。","type":"choice","options":{"C":"不一定连续","D":"部分连续,部分不连续","A":"一定连续","B":"一定不连续"},"answer":"A"},{"id":"learncoder_36_19051","stem":"下面说法错误的是()I・算法原地工作的含义是指不需要任何额外的辅助空间II・在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法III・所谓时间复杂度,是指在最坏情况下,估算算法执行时间的一个上界IV.同一个算法,实现语言的级别越高,执行效率就越低","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是算法时间复杂度的理解。算法原地工作的含义是指需要额外 的辅助空间为常量,所以I错,0(n)运行时间比O(2n)好,所以II是正确的,算法的执行效率与 语言级别无关,所以W是错误的,BI描述的是时间复杂度的上限定义,正确。根据题意选C。","type":"choice","options":{"C":"I、IV","A":"1","B":"I、II","D":"III"},"answer":"C"},{"id":"learncoder_36_19052","stem":"从逻辑上可以把蛹结构分为()两大类。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是基本的数据结构。从逻辑上可以把数据结构分为线性数据结 构、非线性数据结构两大类,所以选Co A、B描述的均为物理结构,而D描述的不是数据结构的 内容。","type":"choice","options":{"B":"顺序结构、链式结构","D":"初等结构、构造型结构","C":"线性结构、非线性结构","A":"动态结构、静态结构"},"answer":"C"},{"id":"learncoder_36_19050","stem":"—个算法应该是()","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是算法的定义。一个算法应该是问题求解步骤的描述,所以选 Bo算法必须有结束,而程序不一定,所以A错,C描述的是算法的特征不是定义,也错,D自然 错了。","type":"choice","options":{"C":"要满足5个基本特性","B":"问题求解步骤的描述","A":"程序","D":". A 和C"},"answer":"B"},{"id":"learncoder_36_19048","stem":"下面程序段中带下画线的语句的执行次数的数量级是()","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是语句执行的次数,即i的循环次数,设次数为t,也就是2^t<n,t< log2n,所以选B。A、C、D均错。","type":"choice","options":{"D":"O(nlog2n)","C":"0(n2)","B":"0((log2n))","A":"0((n))"},"answer":"B"},{"id":"learncoder_36_19049","stem":"算法的时间复杂度取决于()","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"此题考查的知识点是算法时间复杂度的定义。算法的时间复杂度取决于输入问题 的规模和待处理数据的初态,所以选C、A和B都不全面。","type":"choice","options":{"D":"以上都不正","A":"问题的规模","C":"A和B","B":"待处理"},"answer":"C"},{"id":"learncoder_36_17506","stem":"已知一个整数序列A= (ao, al, ⋯ , an_1),其中0≦ai<n (0≦i<n)。若存在apl=ap2=⋯=ap皿=X且m>山2(0≦pk<n, 1≦k≦皿),则称x为A的主元素。例如, A=(0, 5, 5, 3, 5, 7, 5, 5),则5为主元素;又如, A=(0, 5, 5, 3, 5, 1, 5, 7),则A中没有主元素。假设A中的n个元素保存在一 个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素;否则输出一10要求:(1)给出算法的基本设计思想。(2)根据设计思想,采用C、 C++或Java语言描述算法,关键之处给出注释。(3)说明你所设计算法的时闸复杂度和空闸复杂度。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第2章)/image10.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第2章)/image11.png'/>"},{"id":"learncoder_36_17504","stem":" 已知一个带有表头结点的单链表,结点结构为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第2章)/image4.png'/>假设该链表只给出了头指针heado在不改变链表的前提下,请设计一个尽可能高效的算法,查找链 表中倒数第k(k为正整数)个位置上的结点。若查找成功,算法输出该结点的data值,并返回1;否则,只返回0要求:(1)描述算法的基本设计思想。(2)描述算法的详细实现步骤。(3)根据设计思想和实现步骤,采用程序设计语言描述算法(使用c或c++语言实现),关键之处 请给出简要注释.","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"空","type":"short_answer","answer":"\t本算法简单,由图2-20即可说明问题,两个变量i、 j指示 顺序表的第一个元素和最后一个元素,交换i、 j所指元素,然后 i向后移动一个位置, j向前移动一个位置,如此循环,直到i与 j相遇时结柬,此时顺序表L中的元素已经逆置。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第2章)/image8.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第2章)/image9.png'/>"},{"id":"learncoder_36_17498","stem":" 已知两个长度分别为皿和n的升序链表,若将它们合并为一个长度为皿十n的降序链表,则最坏 情况下的时间复杂度是( )。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"这个题目就和对顺序数组的merge操作一样,都可以把移动元素选作基本操作,只是变成了移动链 表结点。因为是两升序表皿erge成一降序链表,所以要采用头插法。因此两表中的所有结点必须一个一 个地链接到结果表中(不存在一个链表处理完毕,直接移动一步指针就把另一个链表的剩余部分链接到 合并结果链表尾部的情况,必须一个一个结点来链接),这样的话,任何视情况下都需要移动皿+n个元素。因此在最好、最坏的情况下都是o(皿+可。 因为题干没有说两表中元素是否有重复,所以不能保证合并成降序链表,估计是题干少印刷了一个 “非”字,正确的应该是合并成一个非降序链表,并且把最坏的改成最好的。假如题干改为合并成非降序链表,则最坏的情况下也是O(皿+n)。例如, A:(1,3,5);B:(2,4,6)所有结点都需要挨个链接。最好的情况下是o(皿in(皿心),也很容易举例,只要找一个可以先处理完较短表的情况的例子即可,如A:(1,2,3);B:(4允6,7),待A处理完之后, B直接一步链接到结果表的尾部.","type":"choice","options":{"A":"O(n)","C":"O(min(m,n))","B":"O(m×n)","D":"O(max(m,n))"},"answer":"C"},{"id":"learncoder_36_17503","stem":"(1)有N个个位正整数存放在血t型数组A[0, ⋯, N-1呻, N为已定义的常量且N≦9,数组AⅡ的长度为N,另给一个int型变量i,要求只用上述变量(A[0]一A即一1]与i,这N+1个整型变量)写一 个算法,找出这N个整数中的最小者,并且要求不能破坏数组AⅡ中的数据。(2)写一个函数,逆序打印单链表中的数据,假设指针L指向了单链表的开始结点。(3)试编写一个函数,以不多于3山2的平均比较次数,在一个有n个整数的顺序表A中找出最大值 和最小值。(4)设A= (al, a2, ⋯, am)和B= (bl, b2, ⋯, bn)均为顺序表, A'和B'分别是除去最大公共前缀后的子表。例如, A=(b, e, i,j, i, n, g), B=(b, e, i, f, a, n, g),则两者的最大公共前缀为b、 e、 i,在两个顺序表中除去最大公共前缀后的子表分别为A'= (j, i, n, g), B'= (f, a, n, g)若A'=B'=空表,则A=Bo若A'=空表且B'≠空表,或两者均不为空且A'的第一个元素值小于B'的第一个 元素值,则A<B,否则A>Bo试编写一个函数,根据上述方法比较A和B的大小。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"空","type":"short_answer","answer":"\t尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都 很方便。设一个带头结点的单循环链表,其尾指针是re狐,则开始结点和终端结点分别为指针rear所指结点的后继结点的后继结点和指针rear所指的结点,即rear->next一>next和rear,查找时间均为O(1)。若用头指针来表示该链表,则查找开始结点为o(1),终端结点为o(n)。"},{"id":"learncoder_36_17497","stem":" 求整数n (n≧0)阶乘的算法如下,其时间复杂度是( )。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第2章)/image1.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第2章)/image2.png'/>","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题是简单的递归框架下时间复杂度的计算问题。假设fact(n)的基本操作执行次数为T(n),则可以得到递推公式: T(h)=T(n-1)十1,因为得到fact(n-1)的结果后,计算fact怔)只需要再做一次乘法即可。 将递推公式展开:T(n)=T(n- 1 )十1=T(n-2)+ 1 + 1 =T(n-2)+2=T(n-3)十1+1+1=T(n-3)+3:=T(n一α一1 ))+n-1=T(1)+n- 1因此时间复杂度为o(n),故本题选B","type":"choice","options":{"B":"O(n)","D":"O(n2)","A":"O(log2n)","C":"0(nlog2n)"},"answer":"B"},{"id":"learncoder_36_17496","stem":"若设一个顺序表的长度为n。那么,在表中顺序查找一个值为x的元素时,在等概率的情况下, 查找成功的数据平均比较次数为()0在向表中第i (lWiWn+1)个元素位置插入一个新元素时,为 保持插入后表中原有元素的相对次序不变,需要从后向前依次后移()个元素。在删除表中第i (lWiWn)个元素时,为保持删除后表中原有元素的相对次序不变,需要从前向后依次前移()个元素。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第2章)/image7.png'/>","type":"choice","options":{"D":"n+1、n-i-1、i","C":"(n+1)/2、n-i+1、n-i","B":"n、n-i+1、i","A":"n、n-i-1、i"},"answer":"C"},{"id":"learncoder_36_17499","stem":" 下列程序段的时间复杂度是( )。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第2章)/image3.png'/>","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查时闸复杂度计算的基本知识。外层循环的时间复杂度是O(10g2dy,内层循环的时间复杂度为000因此时闸复杂度为O(nlog2n).","type":"choice","options":{"D":"O(n2)","C":"0(nlog2n)","B":"O(n)","A":"O(log2n)"},"answer":"C"},{"id":"learncoder_36_17502","stem":" (1)线性表可用顺序表或链表存储。试问:1)如果有n个表同时并存,并且在处理过程中各表的长度会动态发生变化,表的总数也可能自动改 变,在此情况下,应选用哪种存储表示?为什么?2)若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元素,这时应采 用哪种存储表示?为什么?(2)为什么在单循环链表中设置尾指针比设置头指针更好?(3)设计一个算法,将顺序表中的所有元素逆置。(4)设计一个算法,从一给定的顺序表L中删除下标i-j (i<j,包括i、 j)的所有元素,假定i、 j 都是合法的。(5)有一个顺序表L,其元素为整型数据,设计一个算法,将L中所有小于表头元素的整数放在前 半部分,大于表头元素的整数放在后半部分。(6)有一个递增非空单链表,设计一个算法删除值域重复的结点。例如, (1, 1, 2, 3, 3, 3, 4, 4,7, 7, 7, 9, 9, 9)经过删除后变成(1, 2, 3,生7, 9)。(7)设计一个算法删除单链表工(有头结点)中的一个最小值结点。(8)有一个线性表,采用带头结点的单链表L来存储。设计一个算法将其逆置。要求不能建立新结 点,只能通过表中已有结点的重新组合来完成。(9)设计一个算法,将一个头结点为A的单链表(其数据域为整数)分解成两个单链表A和B,使 得A链表只含有原来链表中data域为奇数的结点,而B链表只含有原链表中data域为偶数的结点,且 保持原来的相对顺序.","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"空","type":"short_answer","answer":"\t1)采用链表。如果采用顺序表,在多个表并存的情况下,在问题求解的过程中,一旦发现某个表有 存满并溢出的情况,很可能需要移动其他表以腾出位置为其扩充空闸,导致不断地把大片数据移来移去。 不但时间耗费很多,而且操作复杂,容易出错。如果表的总数还要变化,则还会带来需要在不影响其他 表工作的情况下开辟新表空闸或者释放旧表空间的操作上的麻烦。如果采用链表就没有这些问题,一般 在内存空间足够的情况下,各个表的空间分配或释放不受其他表的影响。 2)采用顺序表。若表的总数基本稳定,且很少进行插入和删除,则顺序表可以充分发挥其存取速度 快、存储利用率高的优点。"},{"id":"learncoder_36_17505","stem":"设将n (n>1)个整数存放到一维数组R中。设计一个在时间和空间两方面尽可能高效的算法。将R中保存的序列循环左移P (0←P<n)个位置,即将R中的数据由(xo, xl, ⋯,汛_1)变换为(xo,Xptl’ ⋯, Xud’Xo, Xl’ ⋯, Xp-1)o要求:(1)给出算法的基本设计思想。(2)根据设计思想,采用C或c++语言描述算法,关键之处给出注释。 (3)说明你所设计的算法的时间复杂度和空闸复杂度","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"空","type":"short_answer","answer":"(1)算法设计思想,请看1.1工节中的例子。(2)使用C语言描述的算法,请看1.1.1节中的例子。(3)单层允r循环,只有temp为额外辅助空间,因此所设计的算法的时闸复杂度为o①,空间复杂度为o(1)."},{"id":"learncoder_36_17495","stem":"设有两个长度为n的单链表(带头结点),结点类型相同,若以hl为头结点指针的链表是非循环的,以h2为头结点指针的链表是循环的,则(\t).","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查链表的综合知识。 对于两个链表来说,要删除开始结点,其时间复杂度都为o(1)。因为已知开始结点的前驱结点地址, 即头结点地址。 对于两个链表来说,要删除终端结点,都需要从头结点开始找到终端结点的前驱结点,其时间复杂度都是o(n)。 两个链表占用内存空间相同。不要误以为循环链表比非循环链表多一个指向头结点的指针,其实非 循环链表也有这个指针,只是它没有指向头结点而已o hl和h2指向相同类型的结点,因此是相同类型的变量。单链表和循环单链表结点类型相同,只是 表中结点的组织方式不同","type":"choice","options":{"A":"对于两个链表来说,删除开始结点的操作,其时间复杂度分别为0(1)和0@)","B":"对于两个链表来说,删除终端结点的操作,其时间复杂度都是0@)","C":"循环链表要比非循环链表占用更多的内存空间","D":"hl和h2是不同类型的变量"},"answer":"B"},{"id":"learncoder_36_17489","stem":"与单链表相比,双链表的优点之一是( ).","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查双链表的特点。在双链表中可以快速访问任何一个结点的前后相邻结点,而单链 表中只能快速访问任何一个结点的后继结点。因此本题选D","type":"choice","options":{"D":"访问前后相邻结点更灵活","B":"可以进行随机访问","A":"插入、删除操作更简单","C":"可以省略表头指针或表尾指针"},"answer":"D"},{"id":"learncoder_36_17491","stem":"在顺序表中删除一个元素的时间复杂度为( ).","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查顺序表删除算法的效率。顺序表删除算法的基本操作是元素的移动。在一个长度 为n的顺序表中的i位置上删除一个元素,需要进行元素移动的次数大约为n-i次,删除算法平均元素移动次数大约为山2次,因此时间复杂度为o(n)","type":"choice","options":{"A":"0(1)","C":"0(n)","B":"O(log2n)","D":"0(n2)"},"answer":"C"},{"id":"learncoder_36_17494","stem":"线性表最常用的操作是在最后一个结点之后插入一个结点或删除第一个结点,则采用(\t)存储方式最节省时间。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查链表的基本操作。在有尾结点指针r的循环单链表中,在最后一个结点之后插入结点s的操作是s ̄→nextT一>next; r->next=S; r=S;,删除第一个结点的操作是p=r->next; r>next可一→next;free(p);,其时闸复杂度均为O(1)。因此本题选D","type":"choice","options":{"A":"单链表","D":"仅有尾结点指针的单循环链表","C":"双链表","B":"仅有头结点的单循环链表"},"answer":"D"},{"id":"learncoder_36_17490","stem":"在顺序表中插入一个元素的时间复杂度为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查顺序表插入算法的效率。顺序表插入算法的基本操作是元素的移动。在一个长度 为n的顺序表中的位置i上插入一个元素,需要进行元素移动的次数大约为n-i次,插入算法元素平均移动次数大约为山2次,因此时间复杂度为o(n).","type":"choice","options":{"C":"O(n)","A":"0(1)","B":"O(log2n)","D":"0(n2)"},"answer":"C"},{"id":"learncoder_36_17493","stem":"\t若某表最常用的操作是在最后一个结廉之后插入一个结点或删除最后一个结点,则采用(\t)存储结构最节省运算时间。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查链表的基本操作。在链表中插入或删除一个结点,需要修改相邻结点的指针域。 如不特别指明,通常只给出链表头结点的地址,其他结点的地址只能从它的前驱或者后继得到。只有D 选项能通过头结点指针直接获得最后一个结点的相邻结点的地址,因此本题选D","type":"choice","options":{"A":"单链表","B":"给出表头指针的循环单链表","D":"带头给点的循环双链表","C":"双链表"},"answer":"D"},{"id":"learncoder_36_17492","stem":"对于一个具有EL个元素的线性表,建立其单链表的时间复杂度为( )o","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查链表的建立。链表建立的过程即将结点逐个插入链表的过程,因此链表建立的时间复杂度即为链表规模n乘以链表插入操作的时间复杂度o(1),即nxO(1),即O(n)。因此本题选C","type":"choice","options":{"A":"0(1)","C":"0(n)","B":"O(log2n)","D":"0(n2)"},"answer":"C"},{"id":"learncoder_36_17488","stem":"如果最常用的操作是取第i个元素的前驱结点,则采用(\t)存储方式最节省时间。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查顺序表的特点。较之其他三种存储结构,顺序表找到表中第i个元素的时间复杂度最小,为o(1);取第i个元素前驱的时间复杂度也是最小的,为o(1)。因此本题选D","type":"choice","options":{"C":"单循环链表","A":"单链表","B":"双链表","D":"顺序表"},"answer":"D"},{"id":"learncoder_36_17487","stem":"需要分配较大的连续空间,插入和删除不需要移动元素的线性表,其存储结构为( ).","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查静态链表的特点。静态链表用数组来表示,因此需要分配较大的连续空间。静态 链表同时还具有一般链表的特点,即插入和删除操作不需要移动元素。因此本题选B","type":"choice","options":{"D":"双链表","A":"单链表","C":"顺序表","B":"静态链表"},"answer":"B"},{"id":"learncoder_36_17486","stem":"对于一个线性表,既要求能够快速地进行插入和删除,又要求存储结构能够反映数据元素之间的逻辑关系,则应采用(\t)存储结构。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查链表的特点。链表较之本题选项中其他两种存储结构的最大优点就是能够快速地 进行插入和删除操作,当然,链表也能反映数据元素之闸的逻辑关系, H拇h表中各元素之间不存在逻辑 关系,因此本题选Bo","type":"choice","options":{"A":"顺序","C":"散列(Hash表)","B":"链式"},"answer":"B"},{"id":"learncoder_36_17482","stem":"线性表是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查线性表的定义。线性表是具有相同特性数据元素的 一个有限序列。该序列中所含元素的个数叫作线性表的长度,用n (n≧0) 表示。注意, n可以等于零,表示线性表是一个空表。空表也可以作为一 图2-19 头结点形态 个线性表。因此本题选A","type":"choice","options":{"D":"一个无限序列,不可以为空","C":"一个无限序列,可以为空","A":"一个有限序列,可以为空","B":"一个有限序列,不可以为空"},"answer":"A"},{"id":"learncoder_36_17485","stem":"设线性表有n个元素,以下操作中,(\t)在顺序表上实现比在链表上实现效率更高。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查顺序表与链表的特点。 顺序表支持随机存储,链表不支持,因此顺序表输出第i个元素值的时闸复杂度为o(1),链表则为o(n),因此A选项正确。 交换第1个与第2个元素的值,对于顺序表与链表,时间复杂度均为o(1),因此B选项错误。 输出n个元素的值,两者时间复杂度均为o(n),因此C选项错误。 输出与给定值x相等的元素在线性表中的序号,对于顺序表和链表,都需要搜索整个表,因此时间复杂度均为o(n), D选项错误","type":"choice","options":{"C":"顺序输出这n个元素的值","B":"交换第1个元素与第2个元素的值","D":"输出与给定值x相等的元素在线&表中的序号","A":"输出第i (lWiWn)个元素值"},"answer":"A"},{"id":"learncoder_36_17484","stem":"线性表的静态链表存储结构与顺序存储结构相比,其优点是( ).","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查静态链表与顺序表的特点。静态链表具有链表的插入和删除方便的特点,也不需 要移动较多的元素,这是优于顺序表的地方,因此本题选C","type":"choice","options":{"D":"便于利用零散的存储空间","A":"所有的操作算法实现简单","B":"便于随机存取","C":"便于插入和删除"},"answer":"C"},{"id":"learncoder_36_17483","stem":"线性表采用链表存储时,其结点地址( ).","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查链表存储结构的特点。一般链表结点在内存中是分散存在的,因此可以是不连续 的。当然,如果连续地申请一片存储空间来存储链表结点也未尝不可。因此本题选D","type":"choice","options":{"D":"连续与否均可以","A":"必须是连续的","C":"部分地址必须是连续的","B":"一定是不连续的"},"answer":"D"},{"id":"learncoder_36_17475","stem":"在一个具有n个结点的有序单链表中插入一个新结点仍然保持有序的时间复杂度是()。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查链表的查找与插入操作。这里假设单链表递增有序(递减的情况同理),在插入数 据为x的结点之前,先要在单链表中找到第一个大于x的结点的直接前驱p,在p之后插入该结点。查找过程的时间复杂度为0(ri),插入过程的时间复杂度为O(1),整个过程的时间复杂度为O(n)。","type":"choice","options":{"C":"O(n2)","A":"0(1)","D":"O(nlog2n)","B":"O(n)"},"answer":"B"},{"id":"learncoder_36_17478","stem":"在一个双链表中,在p结点之前插入q结点的操作是( ).","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查双链表的插入操作.A选项执行完第一旬时, p的前驱结点地址丢失,插入不能完成,B选项最后一旬p一>prior=q一>next;应该改为p-aprior=q; o C选项破坏了p和其后继结点的联系","type":"choice","options":{"D":"p->prior->next=q; q->next=p; q->prior=p->prior; p->prior=q;","C":"q->next=p; p->next=q; q->prior->next=q; q->next=p;","A":"p->prior=q; q->next=p; p->prior->next=q; q->prior=p->prior;","B":"q->prior=p->prior; p->prior->next=q; q->next=p; p->prior=q->next;"},"answer":"D"},{"id":"learncoder_36_17481","stem":"带头结点的双循环链表L为空的条件是( ).","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查双循环链表的判空条件。当双循环链表为空时,头结点体现图2-19所示的形态。可见当满足L->prior==L&&L ̄>next==L时,链表为空,并且循环双链 表同循环单链表一样,没有空指针域,因此本题选D<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第2章)/image6.png'/>","type":"choice","options":{"C":"L->prior==NULL","B":"L->next->prior==NULL","D":"L->prior==L&&L->next=L","A":"L==NULL"},"answer":"D"},{"id":"learncoder_36_17480","stem":"非空的单循环链表L (带头结点)的终端结点(由p所指向)满足(\t)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查单循环链表的判空条件。 . 带头结点的单循环链表中没有空指针域,因此A选项错误。 当终端结点与头结点为同一个结点,即满足p==L时,链表为空,因此B选项错误。当链表为空时, P指向头结点,同时也是终端结点,此时一定满足p->next==Lo当链表不空时, P 指向终端结点,同样满足p一>next==L,因此C选项恒成立,不能作为判断链表非空的条件。 因此本题答案为D","type":"choice","options":{"A":"p->next==NULL","D":"p->next=L&&p!=L","B":"p==L","C":"p->next==L"},"answer":"D"},{"id":"learncoder_36_17477","stem":"在一个双链表中,在p结点之后插入结点q的操作是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查双链表的插入操作。 参见之前双链表插入操作执行图(见图2-16)可知本题应选BoA选项执行完第二旬时, p的后继结点地址丢失,插入不能完成o C选项执行完第一旬时, p的后继结点地址丢失,插入不能完成o D选项执行完第二旬时, p的后继结点地址丢失,插入不能完成","type":"choice","options":{"D":"q->prior=p; p->next=q; q->next=p->next; p->next->prior=q;","A":"q->prior=p; p->next=q; p->next->prior=q; q->next=p->next;","C":"p->next=q; q->prior=p; q->next=p->next; p->next->prior=q;","B":"q->next=p->next; p->next->prior=q; p->next=q; q->prior=p;"},"answer":"B"},{"id":"learncoder_36_17476","stem":"在一个长度为n (n>l)的带头结点的单链表h±,另设有尾指针r (指向尾结点),执() 操作与链表的长度有关。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查链表的删除操作。在带有头结点的链表中要删除一个结点,必须知道其前驱结点 的位置。由题干知,第一个结点的前驱结点位置已知,为h所指的头结点,因此无论链表多长,删除其中第一个结点的操作都是p=h一>next;、 h一>next=P ̄>next;和freetO);这3条语旬。尾结点的前驱结点地址未 知,因此要删除链表中的最后一个结点,需要从头结点开始遍历整个链表来找到最后一个结点的前驱结 点,链表越长,执行操作的循环次数越多,即删除最后一个结点的操作与链表长度有关。 要在某一个结点后插入一个结点,则必须知道这个结点的地址, C选项中在第一个元素前插入一个 新结点,等价于在头结点后插入一个新结点,头结点地址已知,插入操作与链表长度无关。同样,对于 D选项,尾结点地址已知,在其后插入新结点的操作与链表长度也无关","type":"choice","options":{"D":"在单链表最后一个元素后插入一个新结点","A":"删除单链表中的第一个结点","B":"删除单链表中的最后一个结点","C":"在单链表第一个元素前插入一个新结点"},"answer":"B"},{"id":"learncoder_36_17479","stem":"在一个双链表中,删除p结点的操作是(\t)(结点空间释放语句省略)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查双链表的删除操作。 参见之前双链表删除算法执行图(见图2-i7)可知本题应选AB选项第一旬执行完之后, p的后继结点和前边的所有结点都失去联系o c选项第一旬为废操作,第二旬执行完, p的后继结点地址丢失o D选项将p结点的next指针指向了其前驱的前驱,不满足删除要求0","type":"choice","options":{"D":"p->next=p->prior->prior; p->prior=p->prior->prior;","C":"p->next->prior=p; p->next=p->next->next;","B":"p->prior=p->prior->prior; p->prior->prior=p;","A":"p->prior->next=p->next; p->next->prior=p->prior;"},"answer":"A"},{"id":"learncoder_36_17472","stem":"链表不具有的特点是( )。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查顺序表和链表的比较。显然随机存储是顺序表的特性,而不是链表的特性","type":"choice","options":{"D":"所需空间与线性长度成正比。","C":"不必事先估计存储空间","B":"可随机访问任一元素","A":"插入、删除不需要移动元素"},"answer":"B"},{"id":"learncoder_36_17469","stem":"若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(\t)存储方式最节省时间。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查顺序表的特点。顺序表进行插入或者删除操作时需要移动的元素是待插或者待删位 置之后的元素,因此当插入或者删除操作发生在顺序表的表尾时,不需要移动元素。顺序表支持随机存 储,方便于存取任意指定序号的元素,因此在本题情况下顺序表最节省时间","type":"choice","options":{"C":"双循环链表","D":"单循环链表","A":"顺序表","B":"双链表"},"answer":"A"},{"id":"learncoder_36_17468","stem":"线性表是具有n个(\t)的有限序列。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查线性表的定义。线性表是具有相同特性数据元素的一个有限序列","type":"choice","options":{"D":"数据项","A":"表元素","C":"数据元素","B":"字符"},"answer":"C"},{"id":"learncoder_36_17471","stem":"静态链表中指针指示的是( )。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"题考查静态链表中指针的作用。虽然静态链表用数组来存储,但其指针域和一般单链表一 样,指出了表中下一个结点的位置o B选项可以这么理解,静态链表中存储的是数组下标,指示的是下 一个结点的位置,而不是指示的数组下标","type":"choice","options":{"B":"数组下标","C":"链表中下一元素在数组中的地址","D":"左、右孩子地址","A":"内存地址"},"answer":"C"},{"id":"learncoder_36_17474","stem":"单链表L (带头结点)为空的判断条件是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查带头结点的单链表和不带头结点的单链表基本操作的区别。带头结点的单链表的判空条件是看head->next是否为NULL,不带头结点的单链表是看头指针head是否为NULL","type":"choice","options":{"C":"L->next!=NULL","B":"L->next=NULL","D":"L!≒NULL","A":"L=NULL"},"answer":"B"},{"id":"learncoder_36_17470","stem":"某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(\t)存储方式最节省运算时间。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查几种链表的插入和删除操作。 对于A选项,单链表要在最后一个元素后插入一个元素,需要遍历整个链表才能找到插入位置,时间复杂度是o(可。删除第一个元素时间复杂度是o(1)。 对于B选项,不带头结点的单循环链表在最后一个元素之后插入一个元素的情况和单链表相同,时 间复杂度是o(n)。对于删除表中第一个元素的情况,同样需要找到终端结点,即删除结点的时间复杂度 也是O(n),因为终端结点的指针next指向开始结点,首先需要遍历整个链表找到终端结点,然后执行p->next=q一→next;、 r=q;、 q=q一→next;和freeO;4句才满足删除要求(其中p指向终端结点, q指向起始结 点, f用来帮助释放结点空间)。删除过程如图2-18所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第2章)/image5.png'/>说明‥本选项的讲解中顺便给出了不带头结点的单循环链表中删赊开始结点的算法过程,供考生参考。对于C选项,双链表的情况和单链表相同,一个为o(n),一个为o(1)。 对于D选项,有尾指针(指向表中终端结点的指针),因为已经知终端结点的位置,所以省去了B 选项中链表的遍历过程,因此删除和插入结点的时间复杂度为o(1)。 综上所述,本题选D","type":"choice","options":{"A":"单链表","D":"不带头结点且有尾指针的单循环链表","B":"不带头结点的单循环链表","C":"双链表"},"answer":"D"},{"id":"learncoder_36_17473","stem":"将两个有n个元素的有序表归并成一个有序表,其最少比较次数为( )。","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查线性表的归并算法。在归并算法中,当Ll表中的所有元素均小于L2表中的所有元 素时,比较次数最少,为n.因为此时Ll中的元素在比较了n次后已经全部被并入顺序表,剩下的L2 中的元素就不需要再比较了。","type":"choice","options":{"D":"n-l","B":"2n-l","A":"n","C":"2n"},"answer":"A"},{"id":"learncoder_36_17466","stem":"下述各项中属于顺序存储结构优点的是(\t).","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查顺序表与链表的对比。数据域所占总空间的比例越多,存储密度越大。顺序表不像 链表一样在结点中存在指针域,因此存储密度大, A正确o B、 C两选项描述的是链表的优点。对于选项D,顺序存储结构最适用于一对一的线性逻辑结构,显然对于树或者图这类一对多或多对多的逻辑结构, 在多数情况下,用顺序存储结构来存储是不方便的0","type":"choice","options":{"B":"插入运算方便","D":"可方便地用于各种逻辑结构的存储表示","A":"存储密度大","C":"删除运算方便"},"answer":"A"},{"id":"learncoder_36_17467","stem":"下面关于线性表的叙述中,错误的是(\t)","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"本题考查线性表两种存储结构的特点。线性表的顺序存储结构必须占用一片连续的存储空间, 而链表不需要这样,这在顺序存储结构中已经讲过。顺序表不便于元素的插入和删除,因为要移动多个 元素。链表在插入和删除的过程中不需要移动元素,只需修改指针。因此本题选B","type":"choice","options":{"A":"线性表采用顺序存储,必须占用一片连续的存储单元","B":"线性表采用顺序存储,便于进行插入和删除操作","C":"线性表采用链接存储,不必占用一片连续的存储单元","D":"线性表采用链接存储,便于插入和删除操作"},"answer":"B"},{"id":"learncoder_36_772","stem":"在非空双向循环链表中q所指的节点后插入一个由p所指的链节点的过程依次为rlink(p)<-rlink(q);rlink(q)<-p;llink(p)<-q;( )。[中国科学院大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"假谢亥非空双向循爾连表如下图(a)所示,插入p所指的链节点后,链表如下图(b)所示。分析上图可知,插入p所指的链节点的过程:删除图(a)中的链①和链②,添加图(b)中的链①、链②、链③和链④。\n","type":"choice","options":{"B":"rlink(llink(p))<-p;","C":"llink(rlink(p))<-p;","A":"rlink(q)<-p;","D":"rlink(rlink(p))<~p;"},"answer":"C"},{"id":"learncoder_36_770","stem":"在已知头指针的单链表中,要在其尾部插入一新节点,其算法的时间复杂度为( )。[桂林电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"要在单链表的尾部插入一个新节点,需要获取终端节点的地址。对单链表的遍历只能从头指针指示的首元节点开始,因此已知头指针的单链表,在尾部插入一个新节点的时间复杂度为O(n)。","type":"choice","options":{"D":"O{n2)","C":"O(n)","A":"O(1)","B":"O(log2n)"},"answer":"C"},{"id":"learncoder_36_769","stem":"指针p和p分别指向两个无头节点的非空单循环链表中的尾节点,要将两个链表链接成一个新的单循环链表,应执行的操作为( )。[桂林电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"引入指针p用于保存p1的后继节点,即p=p1->next;再将p1的后继节点指向p2的后继节点,即p1->next=p2->next;最后将p2的后继节点指向p,即p2→>next=p。这样就可以将两个非空单循环链表链接成一个新的单循环链表。","type":"choice","options":{"B":"p2->next=p1->next;p1->next=p2->next;","C":"p=p2->next;p1->next=p;p2->next=p1->next;","D":"p=p1->next;p1->next=p2->next;p2->next=p;","A":"p1->next=p2->next;p2->next=p1->next;"},"answer":"D"},{"id":"learncoder_36_773","stem":"下图中,图(a)是节点结构,图(b)是指针s指向的待插入节点,图(c)是双向链表片段,则在图(c)中指针p指向的节点前面插入指针s指向的节点的操作是( )。[桂林电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"在指针p指向的节点前面插入指针s指向的节点后,如下图所示。首先将指针s的rlink:域指向指针p,s->rlink=p;再将指针s的llink域指向节点a,即指针s的llink域指向指针p的llink域,s->llink=p->llink;然后将指针p的llink域指向指针s,p->llink=s;最后将节点a的rlink域指向指针s,即指针p的llink域的rlink域指向指针s,p->llink->rlink=s。这样便实现了在双向链表中插入指针s指向的节点的操作。\n","type":"choice","options":{"B":"p->llink=s;s->rlink=p;s->llink=p->llink;p~>llink->rlink=s;","C":"p->llink->rlink=s;p->llink=s;s->rlink=p;s->llink=p->llink;","D":"s->rlink=p;s->llink=p->llink;p->llink=s;p->llink->rlink=s;","A":"s->rlink=p;s->llink=p->llink;p->llink->rlink=s;p->llink=s;"},"answer":"D"},{"id":"learncoder_36_767","stem":"每个节点有多个后继节点的数据结构有( )。[桂林电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"线性结构的元素之间是一对一联系,由于线性表、队列和栈都是线性结构,因此它们的元素之间是一对一联系,每个节点最多只有一个后继节点。图结构的元素之间是多对多联系,每个节点可以有多个后继节点。","type":"choice","options":{"C":"图","D":"栈","B":"队列","A":"线性表"},"answer":"C"},{"id":"learncoder_36_771","stem":"在单链表中,存储每个节点有两个域,一个是数据域,另一个是指针域,指针域指向该节点的( )。[桂林电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"在单链表中,指针域指向该节点的直接后继。","type":"choice","options":{"B":"直接后继","D":"终端节点","A":"直接前趋","C":"开始节点"},"answer":"B"},{"id":"learncoder_36_776","stem":"具有n个元素的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法时间复杂度为( )(≤i≤n+)。[电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"在顺序表中插入一个新元素,需要将第i个至第n个元素全部向后移动一个元素位置,然后在空出来的第i个位置插入新元素。在最好的情况下,新元素插在第n+1个位置,移动0个元素;在最差的情况下,新元素插在第1个位置,移动n个元素;平均移动n/2个元素。因此,在顺序表中插入一个新元素的时间复杂度为O(n)。","type":"choice","options":{"D":"O(n2)","C":"O(n)","B":"O(i)","A":"O(1)"},"answer":"C"},{"id":"learncoder_36_774","stem":"在单链表中,若需在p所指节点之后插入s所指节点,可执行语句是( )。[广东工业大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"在单链表中插入s所指节点,先将s的后继节点指向P的后继节点,即s->next=p->next;再将p的后继节点指向s,即p->next=s。","type":"choice","options":{"B":"s->next=p->next;p=s;","D":"p->next=s;s->next=p;","C":"s->next=p->next;p->next=s;","A":"s->next=p;p->next=s;"},"answer":"C"},{"id":"learncoder_36_775","stem":"关于顺序表和链接表的描述,错误的是( )。[桂林电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"分别在具有n个数据元素的顺序表和链接表中查找数据元素K,链接表的查找效率要低于顺序表。顺序表可以按照元素下标直接查找元素,因此查找效率更高。","type":"choice","options":{"A":"顺序表和链接表是线性表的不同存储结构实现","D":"数组可以作为线性表的一种顺序表实现","B":"顺序表将线性表中数据元素之间的相邻关系映射为数据物理位置上的相邻关系","C":"分别在具有n个数据元素的顺序表和链接表中查找数据元素K,链接表的查找效率要高于顺序表"},"answer":"C"},{"id":"learncoder_36_777","stem":"线性表采用顺序存储结构时,其元素地址( )。[广东工业大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"顺序表是采用顺序存储结构的线性表。在顺序表中,元素的逻辑地址与其物理地址一致,即逻辑上相邻的元素物理位置上也相邻。顺序表按照逻辑顺序将所有元素存储在一块连续的存储空间中,因此元素地址必须是连续的。","type":"choice","options":{"C":"一定是不连续的","A":"必须是连续的","D":"连续不连续都可以","B":"部分地址必须是连续的"},"answer":"A"},{"id":"learncoder_36_778","stem":"下述哪一条是链式存储结构的优点?( )[电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"链式存储时,需要分配指针域,因此比顺序存储的存储密度小;链式存储进行插入、删除运算时,只需要修改相关节点的指针域即可,十分方便;链式存储数据元素的逻辑顺序可能与物理顺序不一致,存储单元可能不连续;链式存储时无法随机存取某一个元素。","type":"choice","options":{"C":"存储单元连续","A":"存储密度大","B":"插入、删除运算方便","D":"随机存取第i个元素方便"},"answer":"B"},{"id":"learncoder_36_784","stem":"具有线性结构的数据结构是( )。[桂林电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"树、图和广义表都是非线性结构,栈和队列是线性结构。","type":"choice","options":{"B":"图","D":"广义表","A":"树","C":"栈和队列"},"answer":"C"},{"id":"learncoder_36_783","stem":"链表不具有的特点是( )。[中国科学院大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"在链表中进行插入和删除操作,只需要修改链中节点指针的值,不需要移动元素,就能高效地实现插入和删除操作。顺序表中的所有元素,既可以进行顺序访问,也可以进行随机访问;链表中的所有元素,只可以进行顺序访问,不可以进行随机访问。链表采用链接方式存储线性表,适用于存储空间需求不确定的情形,不必事先估计存储空间。链表和顺序表一样,所需空间与线性表长度成正比。","type":"choice","options":{"A":"插入、删除操作不需要移动元素","D":"所需空间与线性表长度成正比","C":"不必事先估计存储空间","B":"可随机访问任一元素"},"answer":"B"},{"id":"learncoder_36_785","stem":"以下数据结构中,属于非线性数据结构的是( )。[常州大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"根据数据的逻辑结构不同,数据结构可以分为线性结构和非线性结构。线性结构包括线性表、栈、队列等,非线性结构包括树结构和图结构。字符串是由若干个字符的顺序排列所组成的线性表,因此字符串属于线性结构。","type":"choice","options":{"A":"栈","D":"树","B":"队列","C":"字符串"},"answer":"D"},{"id":"learncoder_36_779","stem":"在顺序表(长度为)中插入一个元素平均要移动( )个元素。[武汉科技大学年]\n某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( )存储方式最节省运算时间。[电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"采用带有尾指针链表可以快速找到尾节点,方便在线性表的最后一个元素之后插入一个元素。采用仅有尾指针的单循环链表,尾节点的下一个节点就是头节点,可以快速删除第一个元素。因此,采用仅有尾指针的单循环链表时,在最后一个元素之后插入一个元素和删除第一个元素的时间性能都是O(1)","type":"choice","options":{"B":"仅有头指针的单循环链表","A":"单链表","D":"仅有尾指针的单循环链表","C":"双链表"},"answer":"D"},{"id":"learncoder_36_781","stem":"已知一个带有表头节点的双向循环链表L,节点结构为\n其中,prev和next分别是指向其直接前趋和直接后继节点的指针。现要删除指针p所指的节点,正确的语句序列是( )。[全国联考年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"双向循环链表的删除与单链表类似,都是使得链表不断开。双向循环链表删除指针p,先将p的后继指针的前趋指针指向P的前趋指针,即p->next->prev=p->prev;再将p的前趋指针的后继指针指向p的后继指针,即P->prev→>next=p->next;最后删除指针p,即free(p)。","type":"choice","options":{"D":"p->next->prev=:p->prev;p->prev->next=p->next;free(p);","B":"p->next—>prev=:p->next;p—>prev—>next=p->next;free(p);","C":"p->next->prev=p->next;p->prev->next=p->prev;free(p);","A":"p->next->prev=p->prev;p->prev->next=p->prev;free(p);"},"answer":"D"},{"id":"learncoder_36_782","stem":"已知表头元素为c的单链表在内存中的存储状态如下表所示。\n现将f存放于H处并插入到单链表中,若f在逻辑上位于a和e之间,则a,e,f的“链接地址”依次是( )。[全国联考年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"单链表的每个节点包含数据域和指针域,其中链接地址存放指针域中,即下一节点的内存地址。根据题意可画出表头元素为c的单链表结构如下图所示。在插入f后的单链表结构如下图所示。\n","type":"choice","options":{"B":"1010H,1004H,1014H","A":"1010H,1014H,1004H","D":"1014H,1004H,1010H","C":"1014H,1010H,1004H"},"answer":"D"},{"id":"learncoder_36_780","stem":"在包含个元素的线性表中实现如下各运算,所需执行时间最长的是( )。[中国科学院大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"由于线性表按顺序方式存储,是用一维数组作为其存储结构的,因此对线性表进行插入和删除操作时,可能需要移动大量的节点。A选项中,删除线性表的第900个节点,后面的100个节点都要往前移动;C选项中,在线性表的第100个节点后面插入一个新节点,后面的900个节点都要往后移动。线性表按链式方式存储,对线性表进行插入和删除操作时,只需要修改链中节点指针的值,不需要移动元素。因此,C选项所需执行时间最长。","type":"choice","options":{"B":"线性表按链式方式存储,删除指针p所指向的节点","D":"线性表按链式方式存储,在线性表的第100个节点后面插入一个新节点","C":"线性表按顺序方式存储,在线性表的第100个节点后面插入一个新节点","A":"线性表按顺序方式存储,删除线性表的第900个节点"},"answer":"C"},{"id":"learncoder_36_787","stem":"下列关于数据的逻辑结构的叙述中,不正确的是( )。[中国科学院大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"数据的逻辑结构是依据具体问题的需要而建立的数据元素和他们之间的关系,它只抽象地反映数据元素之间的逻辑关系,而与其在计算机中的存储方式无关。数据的存储结构是依据具体问题所要求的响应速度、处理时间、修改时间、存储空间等来实现数据的逻辑结构,是指数据逻辑结构的存储方式。数据的逻辑结构分为线性结构和非线性结构。线性结构包括线性表、栈、队列等,非线性结构包括树结构和图结构。","type":"choice","options":{"A":"数据的逻辑结构是数据间关系的描述","D":"数据的逻辑结构不仅反映数据间的逻辑关系,而且包含其在计算机中的存储方式","C":"数据的逻辑结构分为线性结构和非线性结构","B":"线性表是典型的线性结构"},"answer":"D"},{"id":"learncoder_36_786","stem":"关于数据结构的描述,正确的是( )。[桂林电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"数据的逻辑结构分为线性结构、树形结构、图结构和集合结构;一种逻辑结构可以采用多种不同的存储结构实现,比如线性表可以采用顺序存储方式和链接存储方式;一种存储结构可以实现多种逻辑结构,如链接存储结构可以实现单链表、二叉链表等;线性结构的元素之间是一对一联系,而树形结构的元素之间是一对多联系,图结构的元素之间是多对多联系。","type":"choice","options":{"C":"一种存储结构只能实现一种逻辑结构","A":"数据的逻辑结构可以划分为线性结构、树形结构和索引结构","D":"现实世界中数据对象的一对多联系可以采用线性结构表达","B":"—种逻辑结构可采用多种存储结构实现"},"answer":"B"},{"id":"learncoder_36_788","stem":"若一个算法的时间复杂度用T(n)表示,其中n的含义是( )。[桂林电子科技大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"当问题的规模从1增加到n时,为了解决这个问题所需的时间也从1增加到了T(n),则称此算法的时间复杂度为T(n),其中,n为问题规模。","type":"choice","options":{"D":"函数数量","B":"语句条数","A":"问题规模","C":"循环层数"},"answer":"A"},{"id":"learncoder_36_792","stem":"下列程序段的时间复杂度是( )。[广东工业大学年]\nx=;\nfor(i=;i<n;i++)\nfor(j=i;j<n;j++)\nx++;\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"该程序段为双重for循环,循环共执行n(n+1)/2次,因此时间复杂度为O(n2)。","type":"choice","options":{"A":"O{log2n)","D":"O(n2)","B":"O(n)","C":"O(nlog2n)"},"answer":"D"},{"id":"learncoder_36_789","stem":"计算机算法指的是( )。[广东工业大学年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"程序的核心是算法和数据结构。计算机算法是指解决某一问题的有序运算序列。","type":"choice","options":{"C":"解决某一问题的有限运算序列","A":"计算方法","D":"调度方法","B":"排序方法"},"answer":"C"},{"id":"learncoder_36_790","stem":"下列函数的时间复杂度是( )。[全国联考年]\nInt func(int n){\ninti=,sum=;\nwhile(sum<n)\nsum+=++i;\nReturn i;\n}\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"sum+=++i可分解为两条语句,即++i和sum=sum+i,则该while()循环中,1+2+3+…+i<n,即i(i+l)/2<n,因此时间复杂度为O(n1/2)。","type":"choice","options":{"D":"O(nlog2n)","C":"O(n)","B":"O(n1/2)","A":"O(log2n)"},"answer":"B"},{"id":"learncoder_36_791","stem":"已知两个长度分别为m和n的升序链表,若将它们合并为一个长度为m+n的降序链表,则最坏情况下的时间复杂度是( )。[全国联考年]\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"将两个升序链表合并,最坏的情况是依次比较两个链表中的元素,直到两个链表都到表尾,因此比较次数最多是两个链表长度的最大值。","type":"choice","options":{"A":"O(n)","C":"O(min(m,n))","B":"O(m×n)","D":"O(max(m,n))"},"answer":"D"},{"id":"learncoder_36_793","stem":"设n是描述问题规模的非负整数。下面程序片段的时间复杂度是( )[全国联考年]\nx=;\nwhile(x<n/)\nx=*x;\n","key_points":"知识点.练习.专业课练习.数据结构.线性表","analysis":"T(n)=log2(n/2)-1=log2n-2,则T(n)=O(log2n)。","type":"choice","options":{"A":"O(log2n)","B":"O(n)","C":"O(nlog2n)","D":"O(n)"},"answer":"A"},{"id":"learncoder_37_19108","stem":"设有一个长度为n的由“0”和“1”元素组成的输入序列,存于数组A[n]中。设计一个 算法,依次让每个元素通过一个栈s(容量>=n)而得到一个输出序列,使得输出序列中“0”元素都 出现在“1”元素之前。输出序列存入数组B[n]中。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是栈的操作问题。通过对栈顶元素的判断,决定是否出栈。","type":"short_answer","answer":"void sorder(int A[ ] ,int B[])\t{int i, j = 0; stack s;for(i = 0 ;i<n;i++){push(A[i] ,s);if (A[i]==0)\t{pop(s,B[j]) ;J++;}\twhile( ! empty( s))\t{pop(s,B[j]) ;j++; |}"},{"id":"learncoder_37_19115","stem":"给定有m个整数的递增有序数组A[l...m]和有n个整数的递减有序数组B[l... n],试 写出算法:将数组A和B归并为递增有序数组C[l..m+n]。(要求:算法的时间复杂度为O(m+ n))","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是线性结构的查找。数组A和数组B的元素分别有序,欲将 两数组合并到数组C,使数组C仍有序,应将数组A和数组B复制到数组C,只要注意数组A和 数组B数组指针的使用,以及正确处理一个数组读完数据后将另一个数组余下的元素复制到数 组C中即可.\t因为不允许另辟空间,而是利用数组A(空间足够大) ,则初始 k=m+n-1","type":"short_answer","answer":"void union(int A[ ] ,B[ ] ,C[ ] ,m,n)//整型数组A.和B各有m和n个元素,前者递增有序,后者递减有序,本算法将A和 B归并为递增有序的数组C{i = 0; j = n-l; k = 0;// i,j,k分别是数组A、B和C的下标,因用C描述,下标从0 开始while (i<m && j> = 0 )\tif(a[i] <b[j] ) c[k++] =a[i++] else c[k++] =b[j—];while(i<m) c[ k++]= a[ i++] ; while(j> = 0) c[k++]=b[j--];}//算法结束\t"},{"id":"learncoder_37_19109","stem":"给定一个整数数组B[N],数组B中连续的相等元素构成的子序列称为平台。试设计 算法,求出B中最长平台的长度。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是线性结构的查找问题。可以用t代表最长平台的长度,用k 指示最长平台在数组B中的起始位置(下标).用j记住局部平台的起始位置,用i指示扫描b 数组的下标,i从0开始,依次和后续元素比较,若局部平台长度(i-j)大于1时,则修改最长平台 的长度k(l = i-j)和其在B中的起始位置(k=j),直到B数组结束,t即为所求。","type":"short_answer","answer":"void Platform (int B [ ] , int N)\t//求具有N个元素的整型数组B中最长平台的长度{t=l;k = O;j = O;i = O;\twhile (i<n-l)\tj while(i<n-l && B[i] = =B[i+1 ] ) i++ ;if(i-j+l>t) {t = i-j+l;k=j; } //局部最长平台\ti++; j = i; }//新平台起点 printf(\"最长平台长度%也在B数组中起始下标为% d\",t,k);} // Platform\t\t"},{"id":"learncoder_37_19112","stem":"已知两个定长数组A、B,它们分别存放两个非降序有序序列,请编写程序把数组B序列 中的数逐个插入到数组A序列中,完成后两个数组中的数分别有序(非降序)并且数组A申所有 的数都不大于数组B中的任意一个数。要求,不能另开辟空间,也不能对任意一个数组进行排 序操作。例如,数组 A 为:4,12,28;\t.数组 B 为:1,7,9,29,45输出结果为:1,4,7(数组A)9,12,28,29,45(数组 B)\t.","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是线性结构的查找。题目要求调整后数组A中所有数均不大 于数组B中所有数。因两数组分别有序,实际是要求数组A的最后一个数不大于数组 B的第一个数B[0]。由于要求将数组B的数插入到数组A中。因此比较和B[0],如 A[m-1]>B[0],则交换。交换后仍保持数组A和数组B有序。重复以上步骤,直到A[m-l]<= B[0]为止。\t","type":"short_answer","answer":"void ReArranger (int A[ ] ,B[ ] ,m,n)//A和B是各有m个和n个整数的非降序数组,本算法将B数组元素逐个插入到A 中,使A中各元素均不大于B中各元素,且两数组仍保持非降序排列{ while (A[m-1 ] >B[0])\t{x = A[m-l] ;A[m-l] =B[0]; 〃交换 A[m-1]和 B[0]\tj=l; \twhile(j<n && B[j] <x) B[ j-1] =B[ j++] ; //寻找 A[m-1 ]的插入位置B[j-1]=x;x = A[m-1 ] ;i = m-2;while(i> = 0 && A[i] >x) A[i+1] =A[i--] ; //寻找 B[0]的插入位置 A[ i+1 ] =x;}}//算法结束"},{"id":"learncoder_37_19113","stem":"设数组A[n]中,A[n-2k+l... n-k]和A[n-k+1...n]中元素各自从小到大排好序,试设 计一个算法使A[n-2k+1...n]按从小到大次序排好序。要求空间复杂度为0(1),并分析算法所 需的计算时间。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是合并两个有序序列。题目中数组A的相邻两段分别有序, 要求将两段合并为一段有序。由于要求附加空间复杂度为0(1),所以将前段最后一个元素与 后段第一个元素比较,若正序,则算法结束;若逆序则交换,并将前段的最后一个元素插入到后段 中,使后段有序。重复以上过程直到正序为止。最佳情况出现在数组第二段[n-k+1...n]中值最小元素A[n-k+1]大于等于第一段值最大 元素A[n-k],只比较一次无须交换。最差情况出现在第一段的最小值大于第二段的最大值,两 段数据间发生了k次交换,而且每次段交换都在段内发生了平均(k-1)次交换,时间复杂度 为05)","type":"short_answer","answer":"void adjust(int A[ ] ,int n)\t//数组 A[n-2k+l.. n-k]和[n-k+1.. n]中元素分别升序,算法使 A[n-2k+l.. n]升序{i = n-k;j = n-k+l;while(A[i]〉A[j]){x = A[i]; A[i]=A[j]; //值小者左移,值大者暂存于xk=j+l;while (k<n && x>A[k]) A[k-1] =A[k++] ; //调整后段有序\tA[k-1]=x;\ti--; j--; 〃修改前段最后元素和后段第一元素的指针\t}\t}//算法结束,"},{"id":"learncoder_37_19107","stem":"设数组A[2n]中存放有兀个负数和n个正数,且随机存放。现要求按负数、正数相间存放,请写出实现此要求的算法。算法要求:不能使用额外的存储空间,但可使用少量工作单元,算 法的时间复杂度应为”O(n)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是顺序存放数据的查找问题。相间存放,说明如果所有负数在 奇数位置上,则所有正数在偶数位置上,反之亦然。假设把所有负数都在奇数位置上,所有正数 都在偶数位置上,则A[0] ,A[2] ,......,A[2n-2]位置应该都存放负数,A[1].......,A[3],A[2n—l] 位置上应该存放正数。可以设计两个索引forwanl和1back,初始分别执行第一个位置和最后一个 位置,forwand每次都递增2,back每次都递减2,直到forward所指位置的元素为正数,back所指 元素为负数,然后交换forward和back所指元素。一直到遍历完数组中的所有元素。","type":"short_answer","answer":"void arrange(int A[ ] , int n){ int forwad, back;forward = 0 ;back= 2 * n-1 ;while(forward V 2 * n - 1 && back > 0){while (forward V 2 * n - 1 && A [forward] < 0)forward += 2;while ( back > 0 && A [ back ] > 0)back = 2;if(back > 0){int temp ;\ttemp= A [forward];A [forward] = A [ back ];A [ back ] = temp ;"},{"id":"learncoder_37_19110","stem":"给定n x m 矩阵A[a.... b,c... d],并设A[i,j]<=A[i,j+1](a<=i<=b,c<=j<=d-1)和 A [i,j]<=A[i+l,j] (a<=i<=b-1,c<=j<=d)。设计一算法判定x的值是否在A中,要求时间复杂度 为 0(m+n) o\t>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是矩阵的查找。由于矩阵中元素按行和按列都已排序,要求查 找时间复杂度为0(m+n),因此不能采用常规的二层循环的查找。可以先从右上角(i = a,j=d) 元素与x比较,只有三种情况:一是A [i,j] >x,这情况下向j小的方向继续查找;二是A[i,j]<x, 下一步应向i大的方向查找;三是A[i,j]=x,查找成功。否则,若下标已超出范围,则查找失败。算法中查找x的路线从右上角开始,向下(当x>A[i,j]或向左(当x<A[i,j].向下最多是 m,向左最多是n.最佳情况是在右上角比较一次成功,最差是在左下角(A[ b,c]),比较m+n 次,故算法最差时间复杂度是O(m+n).","type":"short_answer","answer":"void search(datatype A[ ].[ ] , int a,b,c,d, datatype' x)//nxm矩阵A,行下标从a到b,列下标从c到d,本算法查找x是否在矩阵A中 (i = a; j = d; flag = 0; //flag是成功查到x的标志 ,while(i< = b && j> = cif(A[i][j] = =x) {flag=l;break;}else if ( A[i] [ j] >x) j―; else i++;if (flag) printfCnA[%d] [%d] =%d\",i,j,x; //假定 x 为整型else printf( \"矩阵 A 中无%d元素”,x);} //算法search结束\t"},{"id":"learncoder_37_19111","stem":"设二维数组A[1...m,1...n]含有mxn个整数,(1)写出算法(Pascal过程或C函数):判断二维数组A中所有元素是否互不相同并输出相 关信息(yes/no)(2)试分析算法的时间复杂度。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是矩阵的查找。要判断二维数组中元素是否互不相同,只有逐 个比较,找到一对相等的元素,就可得结论:不是互不相同。如何达到每个元素同其他元素比较 一次且只一次?在当前行,每个元素要同本行后面的元素比较一次(下面第一个循环控制变量P 的for循环),然后同第i+1行及以后各行元素比较一次,这就是循环控制变量k和p的二层for 循环。\t","type":"short_answer","answer":"(1)int JudgEqual(ing A[m] [n] ,int m,n)//判断二维数组中所有元素是否互不相同,如是,返回1 ;否则,返回0{for( i = 0 ;i<m;i++)(for(j = 0;j<n-l ;j++){ for(p=j+l;p<n.;p++) //和同行其他元素比较<if(A[i][j] = =A[i][p] ) {printf(”no”); return(0) ; }//只要有一个相同的,就结论不是互不相同for(k = i+l;k<m;k++) //和第i+1行及以后元素比较for(p = 0 ;p<n;p++)if( A[i] [ j] = =A[k] [p] ) ( printf( \" no\" ) ; return(0) ; }}// for(j = 0;j<n-l ;j++)printf( \" yes\" ) ; return(l) ; //元素互不相同}//算法JudgEqual结束(2)二维数组中的每一个元素同其他元素都比较一次,数组中共个元素,第1个元素 同其他7n*n-l个元素比较,第2个元素同其他m*n-2个元素比较,…,第m*n-1个元素同最后 一个元素(m*n)比较一次,所以在元素互不相等时总的比较次数为(7n*n-1) +(7n*n-2) +•••+2 + 1 = (m*n) (7n*n-l)/2在有相同元素时,可能第一次比较就相同,也可能最后一次比较时相同,设在(m*n-1)这个 位置上均可能相同,这时的平均比较次数约为(7n*n)(7n*n-l)/4,总的时间复杂度是0(n4)o"},{"id":"learncoder_37_19114","stem":"设A[100]是一个记录构成的数组,B[100]是一个整数数组,其值介于1-100,现要求 按B[100]的内容调整A中记录的次序,比如,当B[l]=ll时,则要求将A[l]的内容调整到 A[ll]中去。规定可使用的附加空间为0(1)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是线性结构的查找。题目要求按数组B内容调整数组A中记 录的次序,可以从开始,检查是否B[i]=io如是,则A[i]恰为正确位置,不需再调;否则, B[i]=k!=i则将A[i]和A[k]对调,B[i]和B[k]对调,直到B[i]=i\"为止。\t","type":"short_answer","answer":"\tvoid CountSort ( rectype A [ ] , int B [ ] )\t//A是100个记录的数组,B是整型数组,本算法利用数组B对A进行计数排序\t) int i,j,n= 100;\ti= 1;\t\twhile (i<n)\t\t\t\t{if( B[i]=i) //若B[i]=i则A[ i]正好在自己的位置上,则不需要调整{ j = i;while (B[j] ! =i){ k=B[j] ; B[j] =B[k] ; B[k] =k; // B[j]和 B[k]交换r0=A[j];A[j]=A[k]; A[k]=r0; } //r0 是数组 A 的元素类型,A[j]和 A[k]交换i++;}完成了一个小循环,第i个已经安排好}//算法结束"},{"id":"learncoder_37_19096","stem":"有5个元素,其入栈次序为:A,B,C,D,E,在各种可能的出栈次序中,以元素C,D最先出 栈(即C第一个且D第二个出栈)的次序有哪几个?","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是栈的后进先出特点。按题意,C先出,说阴A、B已入栈,D.出 栈,再出栈,E可以入栈就出栈,可以有序列C,D,E,B,A;也可以B先出“E”再入,再出,得序列 C,D,B,E,A;还可以B、A都出栈后,E再入栈出栈,得序列C,D,B,A,EO只有这三种情况。","type":"short_answer","answer":"3 个:C,D,E,B,A;C,D,B,E,A;C,D,B,A,E"},{"id":"learncoder_37_19105","stem":"已知q是一个非空队列,s是一个空栈。仅用队列和栈的ADT()函数和少量工作变量, 使用Pascal或C语言编写一个算法,将队列Q中的所有元素逆置。(1)栈的ADT()函数有:makeEmpty (s);置空栈push(s,value);新元素 value 进栈pop(s);出栈,返回栈顶值isEmpty( s);判栈空否(2)队列的ADT()函数有:enQueue( q, value);元素 value 进队deQueue(q);出队列,返回队头值\t\"isEmpty( q);判队列空否","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是队列和栈的特点和操作。根据队列先进先出和栈后进先出 的性质,先将非空队列中的元素出队,并压入初始为空的栈中。这时栈顶元素是队列中最后出队 的元素。然后将栈中元素出栈,依次插入到初始为空的队列中。栈中第一个退栈的元素成为队 列中第一个元素,最后退栈的元素(出队时第一个元素)成了最后入队的元素,从而实现了原队 列的逆置。","type":"short_answer","answer":"void invert( queue q)//q是一个非空队列,本算法利用空栈s和已给的几个栈和队列的ADT()函数,将队列q 中的元素逆置{ makeEmpty( s) ; //置空栈\twhile ( ! isEmpty(q)) 〃队列q中元素出队{ value = deQueue(q) ; push(s,value) ; }〃将出队元素压入栈中while( ! isEmpty(s)) //栈中元素退栈(value = pop(s) ; enQueue(q,value) ; }//将出栈元素入队列 q}//算法invert结束"},{"id":"learncoder_37_19099","stem":"顺序队列一般应该组织成为环状队列的形式,而且一般队列头或尾其中之一应该特殊处 理。例如,队列为listarray[n-1],列队头指针为front,队列尾指针为rear,则listarray rear表示 下一个可以插入队列的位置。请解释其原因。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是顺序存放的队列数据量问题。循环队列解决了用向量表示 队列所出现的“假溢出”问题,但同时又出现了如何判断队列的满与空问题。例如:在队列长10 的循环队列中,若假定队头指针丘。址指向队头元素的前一位置,而队尾指针指向队尾元素,则 front = 3 ,rear = 7的情况下,连续出队4个元素,则front = =rear为队空;如果连续入队6个元素, 则front= =rear为队满。如何判断这种情况下的队满与队空,一般采取牺牲一个单元的做法或设 标记法。即假设front = =rear为队空,而(rear+1)%表长==front为队满,或通过设标记tag。若 tag = 0,front = = rear则为队空;若tag=l,因入队而使得front = = rear,则为队满。本题中队列尾指 针rear,指向队尾元素的下一位置,listarray[ rear]表示下一个入队的元素。在这种情况下,我们 可规定,队头指针front,指向队首元素 当front = =rear时为队空,当(rear+1) % n = front时为队 满。出队操作(在队列不空情况下)队头指针是front(front+1) % no","type":"short_answer","answer":"栈的特点是后进先出,队列的特点是先进先出。初始时设栈s1和栈s2均为空。(1)用栈s1和s2模拟一个队列的输入。设s1和s2容量相等。分以下三种情况讨论:若s1 未满,则元素入s1栈;若s1满,s2空,则将s1全部元素退栈,再压栈入s2,之后元素入s1栈;若 s1满,s2不空(已有出队列元素),则不能入队。(2)用栈s1和s2模拟队列出队(删除)o若栈s2不空,退栈,即是队列的出队;若s2为空且 s1不空,则将s1栈中全部元素退栈,并依次压入s2中,s2栈顶元素退栈,这就是相当于队列的出 队。若栈s1为空并且s2也为空,队列空,不能出队。(3)判队空。若栈s1为空,并且s2也为空,才是队列空。"},{"id":"learncoder_37_19102","stem":"设有两个栈sl、s2都采用顺序栈方式,并且共享一个存储区[maxsize-1]为了尽量利用 空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式.。试设计sl、s2有关人栈和岀栈 的操作算法。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是栈的基本操作。两栈共享向量空间,将两栈栈底设在向量两 端,初始时,si栈顶指针为-l,s2栈顶为m axsizeo两栈顶指针相邻时为栈满。两栈顶相向,迎面 增长,栈顶指针指向栈顶元素。实现时请注意算法中两栈入栈和退栈时的栈顶指针的计算,可以 用两栈共享空间示意图表示,si栈是通常意义下的栈,而s2栈入栈操作时,其栈顶指针左移(减 1),退栈时,栈顶指针右移(加1)。","type":"short_answer","answer":"#define .maxsize两栈共享顺序存储空间所能达到的最多元素数#define elemtp int //假设元素类型为整型\ttypedef struct{ elemtp stack[ maxsize] ; //栈空间int top[2] ;//top为两个栈顶指针}stk;\tstk s;//s是如上定义的结构类型变量,为全局变量(1)入栈操作int push (int i, int x )//入栈操作。 i为栈号,i = 0表示左边的栈sl,i=l表示右边的栈s2,x是入栈元素。 入栈成功返回否则返回0{if(i<0 || i>l) { printf(\"栈号输入不对\");exit(0) ;}if( s. top[ 1 ] -s. top[0] = = 1) { printf( n 栈已满 \\n\" ) ;return(0) ;}\tswitch (i){ case 0: s.stack[ ++s. top[0] ] =x; return(1) ; break;case 1: s. stack[——s. top[ 1 ] ] =x; retum( 1);}}//push(2)退栈操作elemtp pop(int i)//退栈算法。i代表栈号,i = 0时为s1栈,i=l时为s2栈。退栈成功返回退栈元素,否 则返回-1.{if(i<0 || i> 1>{ printf( *'栈号输入错误\\n\" ) ;exit(0);(switch (i){case 0: if(s.top[0] = =-l) { printf( “栈空 \\n\" ) ;return( -1) ; }else return(s. stack[s. top[0]--]);case 1: if( s.top)[ 1 ] == maxsize { printf( \"栈空 \\n\", ) ; return( -1) ; }else return( s. stack[ s. top[ 1 ] ++]);}//算法结束"},{"id":"learncoder_37_19103","stem":"请利用两个栈s1和s2来模拟一个队列。已知栈的三个运算定义如下:PUSH(ST,x):元素 x 入ST 栈;POP( ST ,x) : ST桟顶元素出栈,赋给变量x ;Sempty(ST):判ST栈是否为空。那么,如何利用栈的运算来实现该队列的3个运算:(1)enqueue:插入一个元素入队列;(2)dequeue:删除一个元素出队列;(3) q_ empty.:判队列为空。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是栈、队列的基本操作。用两个栈s1和s2模拟一个队列时, s1作输入栈,逐个元素压栈,以此模拟队列元素的入队。当需要出队时,将栈s1退栈并逐个压入 栈s2中,s1中最先入栈的元素,在s2中处于栈顶。s2退栈,相当于队列的出队,实现了先进先 出。显然,只有栈s2为空且s1也为空,才算是队列空。实现时可以假定栈s1和栈s2容量相同。出队从栈s2出,当s2为空时,若s1不空,则将s1 倒入s2再出栈。入队在s1,当s1满后,若s2空,则将s1倒入s2,之后再入队。因此队列的容量 为两栈容量之和。元素从栈s1倒入s2,必须在s2空的情况下才能进行,即在要求出队操作时, 若s2空,则不论s1元素多少(只要不空),就要全部倒入s2中。","type":"short_answer","answer":"(1)int enqueue( stack s1, elemtp x)//s1是容量为n的栈,栈中元素类型是elemtpo本算法将x入栈,若入栈成功返回1, 否则返回0(if( top1 = =n && ! Sempty(s2)) //top1是栈s1的栈顶指针,是全局变量{ printf(\"栈满\");return(0) ; ( //s1满s2非空,这时s1不能再入栈if(top1 = = n && Sempty(s2))//若s2为空,先将s1退栈,元素再压栈到s2{ while( ! Sempty( s1) ) { POP( s1 ,x) ;PUSH( s2 ,x) ;}PUSH(sl,x); return(l) ; //x入栈,实现了队列元素的入队}(2)void dequeue( stack s2,s1)//s2是输出栈,本算法将s2栈顶元素退栈,实现队列元素的出队{if(! Sempty(s2) )//栈s2不空,则直接出队{P0P(s2,x); printf( “岀队元素为”,x) ; }else//处理s2空栈if(Sempty(s1)) { printf(\"队列空”);exit(0) ; }//若输入栈也为空,则判定队空 else//先将栈s1倒入s2中,再作出队操作{ while( ! Sempty( s1) ) { POP(s1 ,x) ;PUSH(s2 ,x) ;}P0P(s2,x);//s2退栈相当队列出队printf( ”出队元素”,x);} //结束算法dequue\t(3)int q_empty()//本算法判用栈s1和s2模拟的队列是否为空{if(Sempty ( s1) &&Sempty (s2) ) return (1) ; // 队列空else return(O) ;//队列不空}"},{"id":"learncoder_37_19106","stem":"线性表中元素存放在数组A(1...n)中,元素是整型数。试写出递归算法求出数组A.中 的最大和最小元素。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是递归算法的编写。主要特点是数组的划分及递归结束的条 件。本算法函数调用的格式是MinMaxValue(arr,n,&max,&min);其中,arr是具有n个整数的一 维数组,max = -32768是最大数的初值,min = 32767是最小数的初值。","type":"short_answer","answer":"int MinMaxValue(int A[ ] ,int n,int * max,int * min)\t//一维数组A中存放有n个整型数,本算法递归地求出其中的最小数{if(n>0){if( * max<A[ n] ) * max = A[ n];if( * min>A[ n] ) * min = A[ n];MinMaxValue(A,n-1,max,min);}//算法结束"},{"id":"learncoder_37_19097","stem":"如果输入序列为1,2,3,4,5,6,试问能否通过栈结构得到以下两个序列:4,3,5,6,1,2和 1,3 ,5,4,2,6;请说明为什么不能或如何才能得到。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是栈的后进先出特点。输入序列为1,2,3,4,5,6,不能得出4,3,5,6,1,2,其理由是,输出序列最后两元素是1,2,前 面4个元素(4,3,5,6)得到后,栈中元素剩1,2两个元素,且2在栈顶,不可能栈底元素1在栈顶 元素2之前出栈。得到1,3,5,4,2,6的过程如下:入栈并出栈,得到部分输出序列1;然后2和 3入栈,3出栈,部分输岀序列变为1,3;接着4和5入栈,5,4和2依次出栈,部分输出序列变为 1,3,5,4,2 ;最后6入栈并退栈,得最终结果为1,3 ,5,4,2,6。","type":"short_answer","answer":"只能得到序列1,3,5,4,2,6,原因见解析。"},{"id":"learncoder_37_19100","stem":"一个nxn的对称矩阵,如果以行或列为主序存入内存,则其容量为多少?","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是数组的存放问题。对称矩阵可以只存上三角或下三角。所 用空间为1,2,3,...n之和。\t ","type":"short_answer","answer":"n(n+1)/2(压缩存储)或n^2(不采用压缩存储)。"},{"id":"learncoder_37_19101","stem":"设有上三角矩阵(aij)nxn,将其上三角中的元素按先行后列的顺序存于数组B[m]中,使 得B【[k]=aij】且k=f1(i)+f2(j)+c,请推导出函数f1,f2和常数C,要求f1和f2中不含常数项。.","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是上三角矩阵的存储方式。","type":"short_answer","answer":"上三角牡阵第1行有n个元素,第i-1行有n-(i-1)+1个元素,第1行到第i-1 行是等腰梯形,而第i行上第j个元素(即aij)是第i行上第j-i+1 个元素,故元素aij在一维数组 中的存储位置(下标k)为:k=(n+(n-(i-1)+1))(i-1)/2+(j-i+1)=(2n-i+2)(i-1)/2+j-i+1进一步整理为:k(n+1/2)i-i^2/2+j-n。则得f1(i)=(n+1/2)i-i^2/2,f2(j)=j,c=-n。"},{"id":"learncoder_37_19104","stem":"双端队列(duque)是一个可以在任一端进行插入和删除的线性表。现采用一个一维数组 作为双端队列的数据存储结构,使用C语言描述如下:#define maxsize ”32 {数组中可容纳的元素个数}typedef struct{ datatype elemf maxsize];int endl, end2 ;} duque;试编写两个算法 add(duque Qu,datatype x,int tag)'和 delete( duque Qu, datatype &x,int tag) 用以在此双端队列的任一端进行插入和删除。当tag = O时在左端endl端操作,当tag=1时在右 端end2端操作。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此问题考查的知识点是队列的基本操作,只是变了一个形态。双端队列示意图如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第2章/image1.png'/>用上述一维数组作存储结构,把它看作首尾相接的循环队列。可以在任一端(end1或end2) 进行插入或删除。初始状态end1 + 1 =end2被认为是队空状态;end1 = end2被认为是队满状态。 (左端队列)end1指向队尾元素的前一位置。end2指向(右端队列)队尾元素的后一位置。入队 时判队满,岀队(删除)时判队空。删除一个元素时,首先查找该元素,然后,从队尾将该元素前 的元素依次向后或向前(视end1端或end2端而异)移动。\t.实现时请注意下标运算。i+l) MOD maxsize容易理解,考虑到可能为负的情况,所以 求下个 i时用了 (i-1+maxsize) MOD maxsizeo 。","type":"short_answer","answer":"int add (eque Qu, datatype x, int tag )//在双端队列Qu中插入元素x,若插入成功,返回插入元素在Qu中的下标;插入失败返回 -lotag = 0表示在endl端插入;tag=l表示在end2端插入{ if Qu. endl = Qu. end2 ( prinft (\"队满\");return( -1) ; }switch (tag)case 0: //在endl端插入{ Qu. endl =x;//插入 xQu. endl = ( Qu. end1-1) MOD maxsize ; //修改 end1return (Qu. endl+1) MOD maxsize) ; //返回插入元素的下标case 1: //在end2端插入(Qu. end2 = x;\tQu. end2 = ( Qu. end2+l) MOD maxsize ;return( Qu. end2-l) MOD maxsize ;}\t} //addint delete ( eque Qu, datatype x, int tag 1)//本算法在双端队列Qu中删除元素x,tag = 0时从endl端删除,tag=l时从end2端删除。 删除成功返回1,否则返回0{if(Qu. endl + 1) MOD maxsize = Qu. end2 ( printf(\"队空'* ) ;return(0) ; }switch ( tag)\tcase 0: //从endl端删除{ i = (Qu. endl + 1) MOD maxsize; //i是end1端最后插入的元素下标while(i! =Qu. end2) && (Qu. elem[i]! =x)i==(i+l) MOD maxsize;//查找被删除元素x的位置if (Qu. elem[i]!=x) && (i! = Qu. end2){ j = i;while( (j-l+maxsize) MOD maxsize! = Qu. endl)Qu. elem[j] = Qu.'elem[ (j-l+maxsize) MOD maxsize;j= (j-l+maxsize) MOD maxsize; //移动元素,覆盖达到删除Qu. endl = ( Qu. endl +1) MOD maxsize ; //修改 endl 指针return(l);}else return ( 0 );}//结束从endl端删除case 1: //从end2端删除{ i = ( Qu. end2-1 +maxsize) MOD maxsize ; //i 是 end2 端最后插入的元素下标 while(i! = Qu. endl)&&(Qu. elem[i] ! =x)i= (i-l+maxsize) MOD maxsize;//查找被删除元素x的下标if (Qu. elem[i] =x) && (i! =Qu. endl) //被删除元素找到{ j = i;while( (j+1) MOD maxsize ! = Qu. end2)Qu. elem[ j ] =Qu. elem[ ( j+1) MOD maxsize ;j = (j+l) MOD maxsize; //移动元素,覆盖达到删除Qu. end2= ( Qu. end2-1 +maxsize) MOD maxsize; //修改 end2 指针 return(l) ;//返回删除成功的信息else return(0) ;//删除失败\t} //结束在end2端删除}//结束delete"},{"id":"learncoder_37_19098","stem":"利用两个栈sl、s2模拟一个队列时,如何用栈的运算实现队列的插入、删除以及判队空的 运算。请简述这些运算的算法思想。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"21. 空","type":"short_answer","answer":"此问题考查的知识点是栈的后进先出特点,队列的先进先出特点及它们的基本 操作。队列的插入在队尾,删除在队首,可以用栈s1的栈顶作为队尾,另一个栈s2的栈顶作为 对首。s1和s2容量之和是队列的最大容量。其操作是,s1栈满后,全部退栈并压栈入s2 (设s1 和s2容量相等)。再入栈s1直至s1满。这相当队列元素“入队”完毕。出队时,s2退栈完毕后, s1栈中元素依次退栈到s2,s2退栈完毕,相当于队列中全部元素岀队。在栈s2不空情况下,若要求入队操作,只要s1不满,就可压入s1中。若s1满和s2不空状 态下要求队列的入队时,按出错处理。"},{"id":"learncoder_37_19092","stem":"A[n][n]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组 T[[n(n+l)/2]]中,则对任一上三角元素a[i][j]对应T[[k]]的下标k是( )。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是顺序存储数组的地址计算。从0存起时,a[i][j]对应的 T[k] = j x (j-1)/2 + i - 1(i < j),从 1 存起时 T[[k] = j x (j-l)/2+i(i<j),应选 B。","type":"choice","options":{"A":"i(i-l)/2+j","D":"j(j-l)/2+1","C":"i(j-i)/2+l.","B":"j(j-l)/2+i"},"answer":"B"},{"id":"learncoder_37_19093","stem":"有一个100x90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是(\t)","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是稀疏矩阵的压缩存储。按三元组的定义,该矩阵大小为11x3, 每个整型数占2字节,.总字节数为33 x2 = 66,应选B。","type":"choice","options":{"C":"18 000","A":"60","D":"33","B":"66"},"answer":"B"},{"id":"learncoder_37_19090","stem":"若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3 ,当从队列中删除一个元素,再加入两个元素后,rear和丘front的值分别为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是队列的特征。此题考查顺序存取时的位置计算,按顺时针计 算,所以删除front+1,插入rear+1,计算后rear = 2,front = 4,应选Bo","type":"choice","options":{"C":"4 和 2","D":"5 和1","B":"2 和 4","A":"1 和 5"},"answer":"B"},{"id":"learncoder_37_19091","stem":"设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的存储地址为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是顺序存储数组的地址计算。从0存起时,公式为aij = ix(i-l)/ 2+j-1 (i>=j).本题从1开始存,通过计算a85 =33 ,应选Bo","type":"choice","options":{"C":"18","D":"40","B":"33","A":"13"},"answer":"B"},{"id":"learncoder_37_19089","stem":"递归过程或函数调用时,处理参数及返回地址,要用一种称为(\t)的数据结构。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是栈的应用。要处理参数及返回地址,需要后进先出规则,应选 Go A是先进先出规则,B是普通的存储结构,D是普通的逻辑结构。","type":"choice","options":{"A":"队列\t“","D":"线性表","C":"栈","B":"多维数组"},"answer":"C"},{"id":"learncoder_37_19086","stem":"一个递归算法必须包括(\t)","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是递归算法的组成部分。一个递归算法主要包括终止条件和递 归部分,所以选B。A不全面,C、D不是递归算法。","type":"choice","options":{"C":"迭代部分","B":"终止条件和递归部分","A":"递归部分","D":"终止条件和迭代部分"},"answer":"B"},{"id":"learncoder_37_19087","stem":"执行完下列语句段后,i值为(\t)。int f( int x){return ((((x>0)) ? x* f((x-l)) :2)) ;int i;i=f(f(1))","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是递归算法的分析。根据题意可计算f(0)=2,f(l)=2,f(2) = 4,所以选B。\t","type":"choice","options":{"D":"无限递归","B":"4","C":"8","A":"2"},"answer":"B"},{"id":"learncoder_37_19085","stem":"栈在(\t)中应用。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是栈的应用。由于栈的特殊性质,所以在递归调用、子程序调用、 表达式求值时都要用到,所以选D。A、B、C不全面。","type":"choice","options":{"B":"子程序调用","A":"递归调用","D":"A,B,C","C":"表达式求值"},"answer":"D"},{"id":"learncoder_37_19088","stem":"表达式a*(b+c)-d的后缀表达式是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是利用栈完成表达式的中后缀转换。顺序扫描表达式,操作数顺 序输出,而运算符的输出顺序根据算术运算符的优先级确定。保证栈外运算符优先级比栈内低, 若高则入栈,否则出栈输出。本题中输出顺序为a输出,*进栈,(进栈,b输出,+进栈,c输出, 此时)低于+,所以“+”输出。“)”与“(”相等,出栈删除,-低于*,所以*出栈,此时输出序列 为abc+ *,-入栈,输岀d,输出-,结束。所以选Bo\t、","type":"choice","options":{"B":"abc+*d-","A":"abcd*+-","D":"-+*abcd","C":"abc*+d-"},"answer":"B"},{"id":"learncoder_37_19081","stem":"若已知一个栈的入栈序列是1,2,3,…其输出序列为P1,P23,P3,…,Pn,若Pn 是n则Pi 是()","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是栈的后进先出特点。输出序列的最后一个元素是n,其前面的 序列是不确定的。比如入栈序列为1,2,3,出栈序列可以是1,2,3,也可以是2,1,3,所以pi不确 定,应选D。","type":"choice","options":{"D":"不确定","C":"n-i+1","A":"i","B":"n-i"},"answer":"D"},{"id":"learncoder_37_19083","stem":"若一个栈以向量V[n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作 是( )","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是入栈的具体操作。操作时要看栈顶的地址,先取得空间,再入 栈。本题栈顶为n+1,应该用减法,所以选C。D是先存入,破坏原有数据,所以错。","type":"choice","options":{"C":"top = top-1;V[top] =x","B":"V[top] =x;tdp=top+l","A":"top = top+l ;V[ top] =x","D":"V[top] =x;top = top-l"},"answer":"C"},{"id":"learncoder_37_19084","stem":"若栈采用顺序存储方式存储,现两栈共享空间V [l..m],top[i]代表第i个栈(i=1,2)栈顶,栈1的底在V[l],栈2的底在V[m],则栈满的条件是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是入栈的具体操作。判断栈是否满要看两个栈顶是否相邻,当 top[l]+l=iop[2],或top[2]-1= top[1]时都表示栈满,所以选B,而A、C没有任何意义。D表 示已经出现覆盖了,也是错的。","type":"choice","options":{"C":"top[ 1 ] +top[2] = 7n","D":"top[ 1 ] =tbp[2]","A":"Itop[2]-top[l] I =0","B":"top[ 1 ] +1 =top[2]"},"answer":"B"},{"id":"learncoder_37_19082","stem":"有6个元素6,5,4,3,2,1的顺序进栈,下列不合法的出栈序列是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是栈的后进先出特点。考查岀栈序列,要保证先入栈的-定不能 在后入栈的前面出栈,C选项中的6在5前入栈,5没有出栈,6却出栈了,所以不合法。其他都 符合规律。所以选C。","type":"choice","options":{"C":"3,4,6,5,2,1","B":"4,5,3,1,2,6","A":"5,4,3,6,1,2","D":"2,3,4,1,5,6"},"answer":"C"},{"id":"learncoder_37_19080","stem":"若一个栈旳输入序列为1,2,3,...,心输出序列的第一个元素是则第j个输出元素是 ()","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是栈的后进先出特点。若输出序列的第一个元素是i,只能说明 前i-1个元素均入栈,而第j个元素何时入、出栈并不能确定,所以选D。","type":"choice","options":{"B":"i-j","D":"不确定","C":"j-i+1","A":"i-j-1"},"answer":"D"},{"id":"learncoder_37_19079","stem":"一个栈的输入序列为1,2,3,…n,若输岀序列的第一个元素是S输出第个元素是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"此题考查的知识点是栈的后进先出特点。若输出序列的第一个元素是n,说明前 n-l个元素均入栈,出栈时只能按入栈顺序后进先出,所以选B。因为是从后向前数,所以出栈的 第i个元素并不是入栈时的i,而n-i是第i-1元素,所以C、D都错,因为能确定出栈元素,所以 A也错°","type":"choice","options":{"D":"n-i","A":"不确定","C":"i","B":"n-i+1"},"answer":"B"},{"id":"learncoder_37_17548","stem":"(1)铁路进行列车调度时,常把站台设计成栈式结构,试问:1)设有编号为1, 2, 3, 4, 5, 6的6辆列车,顺序开入栈式结构的站台,则可能的出栈序列有多少种?2)若进站的6辆列车顺序如上所述,那么是否能够得到435612、 326541、 154623和135426的出站 序列?如果不能,说明为什么不能;如果能,说明如何得到(写出进栈或出栈的序列)。(2)试证明:若借助栈可由输入序列1, 2, 3, ⋯,n得到一个输出序列pl, P2, P3, ⋯, Pn (它是输入序列的某一种排列),则在输出序列中不可能出现以下情况‥存在玛<k,使得pj<耻<pi (提示: 用反证法)。 (3)假设以1和o分别表示入栈和出栈操作。若栈的初态和终态均为空,入栈和出栈的操作序列可 表示为仅由1和o组成的序列,则称可以操作的序列为合法序列,否则称为非法序列。 1)试指出判别给定序列是否合法的一般规则゜ 2)两个不同的合法序列(对两个具有同样元素的输入序列)能否得到相同的输出元素序列?如能得 到,请举例说明0 3)写出一个算法,判定所给的操作序列是否合法。若合法,返回1,否则返回0 (假定被判定的操作序列已存入一维char型数组chⅡ中,操作序列以“\\0”为结柬符)。 (4)有5个元素,其入栈次序为A, B, C, D, E,在各种可能的出栈次序中,以元素C, D最先出 栈(C第一个且D第二个出栈)的次序有哪几个? (5)写出下列中缀表达式的后缀形式.1)A*B*C2)一A+B-C+D3) C-A*B4 ) (A+B)*D+E/(F十A*D)+C5) (A&&B)||( !(E>F) )6) ( !(A&&( !( (B<C)||(C>D) ) ) ) ||(C<E)(6)假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针,请写 出相应的入队列和出队列算法。(7)如果允许在循环队列的两端都可以进行插入和删除操作,要求: 1)写出循环队列的类型定义0 2)分别写出从队尾删除和从队头插入的算法。(8)设计一个循环队列,用front和rear分别作为队头和队尾指针,另外用一个标志tag表示队列是空还是不空,约定当tag为0时队空,当tag为1时队不空,这样就可以用缸on由ear作为队满的条件。 要求,设计队列的结构和相关基本运算算法(队列元素为int型)。(9)编写一个算法,将一个非负的十进制整数N转换为一个二进制数。(10)试编写一个算法,检查一个程序中的花括号、方括号和圆括号是否配对,若全部配对,则返回 1,否则返回00对于程序中出现的一对单引号或双引号内的字符不进行括号配对检查0 39为单引号的 ASCⅡ值, 34为双引号的ASCⅡ值,单引号和双引号如果出现则必成对出现。 假设stack是已经定义的顺序栈结构体。可以直接调用的元素进栈/出栈、取栈顶元素、判断栈空的 函数定义如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image5.png'/>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"空","type":"short_answer","answer":"\t(1)答1)编号为1, 2, 3, 4, 5, 6的6辆列车顺序开入栈式结构站台,可能的不同出栈序列有士平:÷c扫322)不能得到435612和154623这样的出栈序列。因为若在4, 3, 5, 6之后再将1, 2出栈,则1,2必须一直在栈中,此时1先进栈, 2后进栈, 2应在1的上面,不可能1先于2出栈0 154623也是这种情况。出栈序列326541和135426可以得到。(2)证明1)必要性°按照题意,当i<=k时,进栈顺序是i、j、 k’这3个元素出栈的相对顺序是pi` Pj` Pk゜例如’当ifi’j=2’k=3时’一个合理的出栈序列是pi=2’Pj=3’Pk=10如果pj=pk=pi成立,意味着 出栈顺序为3、 1、 2,这恰恰是不可能的。当较大的数首先出栈时,那些较小的数都是降序压在栈内的, 如2、 1,这些数不可能如1、 2那样正序出栈02)充分性。如果pj=pk=pi成立,表明当iq=k时各元素进栈、出栈后的相对顺序为.pj、 Pk、 Pi゜ 下面做具体分析。当iq时' Pj=pi’表明pj在pi进栈后进栈并压在pi±面,并且pj在pi出栈前出栈。当j<k时, Pj<pk’表明pj必须在pk进栈之前就出栈’否则pj就被压在pk下面了゜ 当i<k时, pk<pi,表明pi是先于耻进栈的。综上所述可知’这与正确的出栈顺序pi<pj<耻相矛盾。 (3)答 1)通常有两条规则,第一条是给定序列中, I的个数和o的个数相等;第二条是从给定序列的开始 到给定序列中的任一位置, I的个数要大于或等于o的个数0 2)可以得到相同的输出元素序列。例如,输入元素为A, B, C,则两个输入序列A、 B、 C和B、A、 C均可得到输出元素序列A、 B、 Co对于输入序列A、 B、 C,我们使用本题约定的IOIOIO操作序列;对于输入序列B、 A、 C,我们使用IIOOIO操作序列0 3)由1)中分析可以写出以下代码;<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image9.png'/>(4)分析 C, D最先出栈,并且C先于D,则A, B的相对顺序已经确定,必为B先于Ao而E的位置可以 在B前、 B与A中间或者A后。因此所得序列有3种,具体如下:C, D, E, B, A; C, D, B, E, A; C, D, B, A, E(5)解1)AB*C*2) A三B+C-D+3) CAB*一4) AB+D*EFAD* +/+C十5) AB&&EF >!∥6) ABC<CD> ∥! &&! CE< ∥ 前5道题都很简单,这里只讲第6)题,见表3-30注意按照括号层次,从内到外的转化过程以及括 号消除过程。表中方框内为本步要转换的表达式,右边为其转换中间结果,将中间结果置换原被转换表 达式并结合新的待转换项即为下一步要转换的表达式。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image10.png'/>(6)分析 本题是链队基本操作的扩展,知道尾指针后,要实现元素入队,则直接用链表的插入操作即可。要 实现出队操作,则需要根据尾指针找出头结点和开始结点,然后进行删除。要注意的是,尾指针应始终 指向终端结点,并且当删除结点后队列为空时,必须特殊处理。具体算法如下<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image11.png'/>(7)分析用一维数组data[0'二,皿aXSize-1]实现循环队列,其中皿aXSize是队列长度゜设置队头指针front 和队尾指针rear,约定front指向队头元素的前一位置, rear指向队尾元素。定义满足front==rear时为队空。从队尾删除元素,则rear向着下标减小的方向行走;从队头插入元素, front同样向着下标减小的方向行走。因此,当满足rear==(front-1+maxSize)%皿aXSize时队满。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image12.png'/>(8)分析本题为循环队列基本算法操作的扩展。在队列结构体定义中加入tag,用tag判断队列是否为空,用front==rear判断是否队满。具体过程如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image13.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image14.png'/>(9)分析可以利用栈解决数制转换问题。例如, (49)10=1×2叶1×24+1×20=(Ⅱ0001)2,其转换规则是N:甘(2怔 0≦国式中, bi表示二进制数的第i位上的数字。这样,十进制数N可以用长度为Llog2NJ+1位的二进制数表示成bLbe2叫⋯b2blbo ゜若令j=LIognd’则有N=砷+矿屯_1+ ⋯ +21bl+20bo=(矿1屿+矿2叶l+ ⋯ +bl)×2+bo=W2)×2+N%2 (“/”表示整除运算) 因此,可以先通过N%2求出bo,然后令N司w2,再对新的N做除2求模运算,可求出bl, ⋯,如 此重复,直到某个N等于零结柬。这个计算过程是从低位到高位逐个进行的,但输出过程是从高位到低 位逐个打印的,因此需要利用栈来实现。实现代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image15.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image16.png'/>(10)分析 在算法中,扫描程序中的每一个字符,当扫描到每个左花括号、左方括号、左圆括号时,令其进栈; 当扫描到右花括号、右方括号、右圆括号时,则检查栈顶是否为相应的左括号,若是则做退栈处理,若 不是则表明出现了语法错误,返回00当扫描到程序文件结尾后,若栈为空,则表明没有发现括号配对 错误,返回1;否则表明栈中还有未配对的括号,返回00另外,对于一对单引号或双引号内的字符不进 行括号配对检查。 由此可以写出以下代码:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image17.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image18.png'/>"},{"id":"learncoder_37_17543","stem":"已知循环队列存储在一维数组A[0, ⋯ , n一Ⅱ中,且队列非空时正o血和rear分别指向队头和队 尾元素。若初始时队列为空,且要求第1个进入队列的元素存储在A[0]处,则初始时front和rear的值 分别是( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"插入元素时, front不变, rear加10而插入第一个元素后,队尾要指向尾元素,显然rear初始应该为n-1,而缸ont为0","type":"choice","options":{"A":"0, O","B":"0, n二1","D":"n-1, n-1","C":"n-1, 0"},"answer":"B"},{"id":"learncoder_37_17545","stem":"一个栈的入栈序列为1, 2, 3, ⋯, n,其出栈序列是pl, P2, P3, ⋯, Pno若p2=3,则p3可能取值的个数是( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"除了3本身以外,其他值均可以取到,因此可能取值的个数为n-1.","type":"choice","options":{"B":"n-2","C":"n-1","A":"n-3","D":"无法确定"},"answer":"C"},{"id":"learncoder_37_17539","stem":"设栈S和队列Q的初始状态均为空,元素a, b, C, d, e, f, g依次进入栈So若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是b, d, C, f, b, a, g,则栈S的容量至少是( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"当a’C, d同时在S中及a, e, f同时在S中时,栈的存储量达到最大值,因此容量至少为3","type":"choice","options":{"B":"2","A":"1","C":"3","D":"4"},"answer":"C"},{"id":"learncoder_37_17542","stem":"元素a, b, C, d, e依次进入初始为空的栈中,若元素进栈后可停留、可出栈,直到所有元素都 出栈,则在所有可能的出栈序列中,以元素d开头的序列个数是( )。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"若要保证出栈序列以d开头,则前3个元素必须连续进栈,中间不能出现出栈的情况,然后d出栈,此时栈内元素由底到顶为a, b, C,栈外元素为e,出栈序列中的元素为do 因为a, b, c这3个元素在栈内的顺序已定,由栈的先进后出原则,其在出栈序列中的相对位置必 为⋯C⋯b⋯a⋯;加上d的位置已定,所以出栈待定序列必为d⋯C⋯b⋯a⋯。显然在栈外的e可 以在任何时候出栈入栈,即可以出现在以上待定序列中的任何一个省略号的位置处,因此出栈序列可为‥d, e, C,b, a; ②d, c, e,b, a; ③d, C,b, e, a; ④d, c,b, a, e","type":"choice","options":{"B":"4","D":"6","C":"5","A":"3"},"answer":"B"},{"id":"learncoder_37_17541","stem":"某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作,若元素a, b, C, d, e依次 入此队列后再进行出队操作,则不可能得到的出队序列是( )。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"无论哪种入队方式(先从左边入队还是先从右边入队), a和b都应该相邻,这是出队序列合 理的必要条件。只有选项C所给序列中, a与b不相邻0 4个选项所给序列的进队操作序列分别为(L代表左入, R代表右入):A. aL (或aR), bL, CR, dR, eRB. aL(或aR), bL, CR, dL, eRC.不可能出现D. aL (或aR), bL, CL, dR, eL","type":"choice","options":{"A":"b, a, C, d, e","B":"d, b, a, c, e","D":"e, C, b, a, d","C":"d, b, C, a, e"},"answer":"C"},{"id":"learncoder_37_17544","stem":".已知操作符包括“+” “一” “*” “/” “(”和″)”。将中缀表达式a+b-a*(te+d)/e-D+g转换为等价的 后缀表达式加+ac出e什*一g+时,用栈来存放暂时还不能确定运算次序的操作符。若栈初始的时候为空, 则转换过程中同时保存在栈中的操作符的最大个数是( )o","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"由表3-4可以看出,栈内最多有5个操作符。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image8.png'/>","type":"choice","options":{"B":"7","A":"5","C":"8","D":"11"},"answer":"A"},{"id":"learncoder_37_17538","stem":"为解决计算机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区,主机将要输出的 数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"打印机取出数据的顺序与数据被写入缓冲区的顺序相同,为先进先出结构,即队列","type":"choice","options":{"D":"图","A":"栈","B":"队列","C":"树"},"answer":"B"},{"id":"learncoder_37_17540","stem":"若元素a、 b、 C、 d、e、 f依次进栈,允许进栈、退栈操作交替进行,但不允许连续3次进行退 栈操作,则不可能得到的出栈序列是( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"选项所给序列中出现长度大于等于3的连续逆序子序列即为不符合要求的出栈序列0 4个选 项所给序列的进出栈操作序列分别为:A. push'PuSh'PuSh〕PuSh,POP,POP'PuSh,POP,POP,PuSh,POP,POP;B .Puch,PtrSh,PuSh,POP,POP,Puch,POP,POP,PuSh,POP,PuSh,PQP ;C. pushpush;POP,PuSh,POP,POP,PuSh,PuSh,POP,PuSh,POP,POP;D. push,POP,PuSh,PuSh,PuSh,PuSh,PuSh,POP,POP,POP,POP,POP; 按照题意要求,选项D所给序列即为不可能得到的出栈顺序","type":"choice","options":{"A":"d, C, e, b, f, a","D":"a, f, e, d, C, b","B":"c, b, d, a, e, f","C":"b, C, a, e, f, d"},"answer":"D"},{"id":"learncoder_37_17533","stem":"设循环队列的下标范围是0〜n-1,其头、尾指针分别为f和r,则其元素个数为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查循环队列的性质。要计算当前队列内的元素个数,可以分两种情况讨论‥ ①当r大于f时,栈内元素为rf; ②当r<f时,栈内元素为n一(午D(其中, Fr为数组内空位置的个数,则n一(午D 为数组内元素的个数)。将①②合并得元素个数为(广针n)%n,因此本题选D","type":"choice","options":{"B":"r-f-l","A":"r-f","D":"(r-fl-n)%n","C":"(r-f)%n+l"},"answer":"D"},{"id":"learncoder_37_17536","stem":" (多选)用单链表(含有头结点)表示的队列的队头在链表的( )位置。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查链表在队列上的应用。当带有头结点的链表用作队列的存储结构时,链表的头 结点不存储信息,链表的开始结点存有队头信息。因此,当队列中的元素多于1个时,队头在链表的链 中位置(链中位置是指除去表头结点和表尾结点以外的结点位置);当队列中的元素只有1个时,队头结 点在链表的链尾位置。因此本题选B、 C","type":"choice","options":{"B":"链尾","C":"链中","A":"链头","D":"以上都可以"},"answer":"B"},{"id":"learncoder_37_17535","stem":"最不适合用作队列的链表是( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查链表的操作及其在队列上的应用。只带队首指针的非循环双链表在入队操作时的时闸复杂度为o(n),而其他选项中,入队、出队操作的时闸复杂度都是o(1)。因此本题选A.","type":"choice","options":{"A":"只带队首指针的非循环双链表","B":"只带队首指针的循环双链表","D":"只带队尾指针的循环单链表","C":"只带队尾指针的循环双链表"},"answer":"A"},{"id":"learncoder_37_17537","stem":"用单链表(含有头结点)表示的链队的队尾在链表的(\t)位置。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查链表在队列上的应用。当带有头结点的链表用作队列的存储结构时,链表的链尾 即为队列的队尾,因此本题选B","type":"choice","options":{"B":"链尾","C":"链中","A":"链头","D":"以上都可以"},"answer":"B"},{"id":"learncoder_37_17534","stem":"最适合用作链队的链表(链表有头结点,有队首指针则指向头结点,有队尾指针则指向终端结","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查链表的操作及其在队列上的应用。对于A选项,只带队首指针的循环单链表,入队操作需要找到队尾指针,时闸复杂度为o(n);出队操作时间复杂度为o(1)。 对于B选项,入队操作和出队操作时间复杂度都是o(1)。因知道终端结点的位置,入队直接插入即 可;出队时,只需队尾指针后移一位即可找到头结点,然后直接删除即可。 对于C选项,同A选项。 对于D选项,只有队尾指针,又是非循环链表,所以无法找到头结点,因此不能完成出队操作。 综上分析,本题应选B.","type":"choice","options":{"B":"只带队尾指针的循环单链表","C":"只带队首指针的非循环单链表","D":"只带队尾指针的非循环单链表","A":"只带队首指针的循环单链表"},"answer":"B"},{"id":"learncoder_37_17532","stem":"一个队列的入队列序列为1, 2, 3, 4,则可能的出队序列为( )。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查队列的性质。队列先进先出,由入队序列1, 2, 3, 4知出队序列必为1, 2, 3, 4, 因此本题选B","type":"choice","options":{"C":"1, 4, 3, 2","A":"4,3,2,1","D":"3, 2, 4, 1","B":"1, 2, 3, 4"},"answer":"B"},{"id":"learncoder_37_17530","stem":"最不适合用作链栈的链表是(以下链表没有头结点)(\t).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查链栈的存储结构的选取。链栈在链表的头部进行操作(插入和删除结点),需要找 到链表开始结点的前驱结点。只有表头指针、没有表尾指针的循环单链表,不方便查找开始结点的前驱结点(查找时间复杂度为o(n)),因此本题选D","type":"choice","options":{"D":"只有表头指针、没有表尾指针的循环单链表","B":"只有表尾指针、没有表头指针的循环双链表","C":"只有表尾指针、没有表头指针的循环单链表","A":"只有表头指针、没有表尾指针的循环双链表"},"answer":"D"},{"id":"learncoder_37_17531","stem":"如果以链表作为栈的存储结构,则元素出栈的时候( )。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈的基本操作。若栈空则无法进行出栈操作,因此本题选c.","type":"choice","options":{"B":"必须判断链栈元素的类型","C":"必须判断链栈是否为空","D":"无须做任何判断","A":"必须判断链栈是否为满"},"answer":"C"},{"id":"learncoder_37_17527","stem":"经过以下栈的操作后,x的值为( ).initStack(st); push(st,a); push(st,b); pop(st,x); getTop(st,x);","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈的基本操作。执行前3旬后,栈st内的值为a、 b,其中b为栈顶元素;执行第 4旬后, x的值为b;执行最后一旬后, x的值为ao 因此本题选A.","type":"choice","options":{"C":"1","B":"b","D":"0","A":"a"},"answer":"A"},{"id":"learncoder_37_17529","stem":"设BL个元素进栈序列是1, 2, 3,…,m其输出序列是Pi,p2,P3,…,Pn 0若Pl =3,则 P2的值( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查根据入栈序列对出栈序列的判断。当pl=3时,说明l, 2, 3都已进栈。立即出栈3,然后可能出栈的为2;也可能4或者后面的元素进栈,再出栈。因此, p2可能是2,也可能是4, ⋯, n中的任何一个,但一定不是10所以答案为C","type":"choice","options":{"C":"不可能是1","A":"一定是2","D":"以上都不对","B":"一定是1"},"answer":"C"},{"id":"learncoder_37_17526","stem":"元素A, B, C, D依次进顺序栈后,栈顶元素是( ),栈底元素是( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"A本题考查栈的性质 A, B, C, D依次进栈,则从栈顶到栈底的元素序列为D, C, B,A,因此本题选D","type":"choice","options":{"A":"A","C":"C","B":"B","D":"D"},"answer":"D"},{"id":"learncoder_37_17525","stem":"栈和队都是( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈和队列的概念与比较。栈和队列都是限制存取点的线性结构.","type":"choice","options":{"A":"顺序存储的线性结构","B":"链式存储的非线性结构","D":"限制存取点的非线性结构","C":"限制存取点的线性结构"},"answer":"C"},{"id":"learncoder_37_17528","stem":"经过以下栈的操作后,isEmpty(st)的返回值为(\t)。initStack(st); push(st,a); push(st,b);pop(st,x); pop(st,y);","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈的基本操作。由题意可知,先经过两次进栈操作,后经过两次出栈操作,此时栈必为空,因此判断栈空函数isE皿PtyO的返回值为10故本题选Co","type":"choice","options":{"A":"a","B":"b","C":"1","D":"0"},"answer":"C"},{"id":"learncoder_37_17517","stem":"设计一个判别表达式中左、右括号是否配对出现的算法,采用(\t)数据结构最佳。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈的应用。在栈的众多应用中,括号匹配是一个重要的体现","type":"choice","options":{"D":"栈","C":"线性表的链式存储结构","B":"队列","A":"线性表的顺序存储结构"},"answer":"D"},{"id":"learncoder_37_17520","stem":"递归过程或函数调用时,处理参数及返回地址要用一种称为(\t)的数据结构。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈的应用。函数的递归调用过程要用到系统栈.","type":"choice","options":{"A":"队列","D":"线性表","C":"栈","B":"多维数组"},"answer":"C"},{"id":"learncoder_37_17523","stem":"最大容量为皿aXSize的循环队列,队尾指针是rear,队头是front,则队空的条件是( )o","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查循环队列的判空条件。当首尾指针重合时队空。因此本题选B","type":"choice","options":{"D":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image4.png'/>","C":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image3.png'/>","A":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image1.png'/>","B":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image2.png'/>"},"answer":"B"},{"id":"learncoder_37_17519","stem":"用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行出队操作时( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"题又是一个基本知识的扩展。用单链表来表示队列,当队列中有多个元素的时候,出队 操作只改变头指针即可;当队列中只有一个元素时,头尾指针都指向这个元素,出队的话显然两指针都 要置NULLo本题与12题类似,因此本题选D","type":"choice","options":{"D":"队头、队尾指针都可能要修改","A":"仅修改队头指针","C":"队头、队尾指针都要修改","B":"仅修改队尾指针"},"answer":"D"},{"id":"learncoder_37_17522","stem":"若用一个大小为6的数组来实现循环队列,并且当前rear和fhmt的值分别为0和3,当从队列 中删除一个元素,再加入两个元素后,rear和fhmt的值分别为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查循环队列的基本操作。在循环队列中入队执行rear=(rea叶1)%maxSize;,出队执行front=(fron计1)%皿aXSize;,将本题数据代入其中,可以算出rear为2, frout为4,因此答案选B","type":"choice","options":{"A":"1和 5","C":"4 和 2","D":"5 和 1","B":"2 和 4"},"answer":"B"},{"id":"learncoder_37_17521","stem":"循环队列存储在数组A[0,…,ni]中,则入队时的操作为( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查队列的基本操作。入队时队尾变化为rear=(rea叶1)%maxSize,其中maxsize是数 组元素最大个数,题干中数组最大个数为皿+1,因下标从0开始。因此答案为D","type":"choice","options":{"A":"rear=reat+l","C":"rear=(rear+l)%m","B":"rear=(rear+1 )%(m-1)","D":"rear=(rear+l)%(m+l)"},"answer":"D"},{"id":"learncoder_37_17524","stem":"栈和队列的共同点是( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈和队列的比较。两者共同点即为只允许在端点处插入和删除元素.","type":"choice","options":{"A":"都是先进先出","C":"只允许在端点处插入和删除元素","D":"没有共同点","B":"都是先进后出"},"answer":"C"},{"id":"learncoder_37_17518","stem":"对于链队,在进行出队操作时()","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查链队的塞本操作及其存储结构。图3-11所示为链队示意图<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image7.png'/>","type":"choice","options":{"A":"仅修改头指针","C":"头、尾指针都要修改","D":"头、尾指针可能都要修改","B":"仅修政尾指针"},"answer":"D"},{"id":"learncoder_37_17512","stem":"输入序列为A, B, C,当可以变为C, B, A时,经过的栈操作为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈的基本操作。若要用栈使得输入序列A, B, C的输出序列为C, B, A,即将原 序列逆序,则只需将所有元素入栈,然后全部出栈即可。","type":"choice","options":{"A":"push,POP,PuSh,POP,PuSh,POP","C":".PuSh,PuSh,POP,PQP,PuSh,POP","D":"push,POP,PuSh,PuSh,POP,POP","B":"push,PuSh,PuShpop,POP,POP"},"answer":"B"},{"id":"learncoder_37_17515","stem":"栈在(\t)中应用。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈的应用。这里只说明一下A选项和B选项,两者类似, A是函数调用自己, B是 函数调用其他函数。只要调用函数,就得在调用前保存现场,在调用后恢复现场,这就要用到栈(前边 讲过栈有记忆当前状态的功能)。","type":"choice","options":{"B":"子程序调用","A":"递归调用","D":"A, B,- C","C":"表达式求值"},"answer":"D"},{"id":"learncoder_37_17511","stem":"有6个元素以6, 5, 4, 3, 2, 1的顺序进栈,(\t)不是合法的出栈序列。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈的基本操作。解这类题目,就是按照题干所给序列去挨个检查选项。选项c, 3 第一个出栈,说明6, 5, 4都已进栈,.4第二个出栈可以, 6第三个出栈显然不可以,因为如果6要出栈 必须5已经出栈。其他选项自行检查,都是可以出现的序列。因此本题选C","type":"choice","options":{"C":"3, 4, 6, 5, 2, 1","B":"4, 5, 3, 1, 2, 6","D":"2, 3, 4, 1, 5, 6","A":"5, 4, 3, 6, 1, 2"},"answer":"C"},{"id":"learncoder_37_17514","stem":"若栈采用顺序存储方式存储,现两栈共享空间V[l,…,m], top[i]代表第i (i=l, 2)个栈的栈顶,栈1的底在V[l],栈2的底在V[m],则栈满的条件是(\t).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈基本概念的扩展。两栈共享空间,栈满的时候应该是两栈顶指针相遇的时候,相遇但不能相等,相等意味着两栈有共同的栈顶元素,不合理。因此栈满条件为topl+1=toP2,故本题选B","type":"choice","options":{"D":"top[l]=top[2]","A":"|top⑵-top[1]|=0","B":"top[l]+l=top⑵","C":"top[l]+top⑵=m"},"answer":"B"},{"id":"learncoder_37_17513","stem":"若一个栈以向量V[1,…, n]存储,初始栈顶指针top为n+1,则x进栈的正确操作是( ).","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈基本概念的扩展。栈基本概念中规定top初始指针为一1,本题只不过是把top规 定在了数组的另一端。因此进栈操作只需将栈基本算法中进栈操作的top++改为top一一即可,又因top初 值在数组下标范围之外,所以必须先变指针再进元素,故本题选C","type":"choice","options":{"D":"V[top]=X; toP=toP-1;","B":"V[top]=X; toP=toP+1;","C":"top=toP-1;V[top]=X;","A":"top=toP+1; V[top]=X;"},"answer":"C"},{"id":"learncoder_37_17516","stem":"表达式a*(b+c)-d的后缀表达式是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查中缀表达式转化成后缀表达式的方法。 本题转化过程如图3-9所示。 由图3-9可以写出以下转化过程。第一步: b+c一>bc+ (令x=\"bc+\")。第二步: a*x一>ax* (令y=\"孤*\")。第三步; y-d一>yd一。 将坤还原后得到扼c+*d一,因此本题选B<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第3章)/image6.png'/>","type":"choice","options":{"B":"abc+*d-","A":"abcd*+-","D":"-+*abcd","C":"abc*+d-"},"answer":"B"},{"id":"learncoder_37_17510","stem":"若一个栈的输入序列为1, 2, 3,…,n,输出序列的第一个元素是i,则第j个输出元素是( )0","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"题考查栈的基本操作3假如输入序列为1, 2, 3, 4, 5,第一个出栈元素为3,如果进栈出栈操作为IHOOII(I代表进栈操作,O代表出栈操作),则第二个出栈元素为2;如果操作序列为IHOIOI, 则第二个出栈元素为40 因此不确定。","type":"choice","options":{"B":"i-j","D":"不确定的","C":"j-i+1","A":"i-j-1"},"answer":"D"},{"id":"learncoder_37_17508","stem":"在做进栈运算时,应先判别栈是否();在做退栈运算时,应先判别栈是否().当栈中 元素为n个,做进栈运算时发生上溢,则说明该栈的最大容量为().","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查对栈概念的理解。根据栈算法的讲解内容可以得出答案","type":"choice","options":{"B":"满、空、n","A":"满、上溢、n+1","C":"满、下溢、n+1","D":"空、上溢、n+1"},"answer":"B"},{"id":"learncoder_37_17507","stem":"栈操作数据的原则是( )","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈的性质。栈的最大特点就是栈操作数据遵循后进先出的原则.","type":"choice","options":{"B":"后进先出","C":"后进后出","A":"先进先出","D":"不分顺序"},"answer":"B"},{"id":"learncoder_37_17509","stem":"一个栈的输入序列为1, 2, 3,…,n,若输出序列的第一个元素是m则输出序列的第i(lWi Wn)个元素是( )。","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"本题考查栈的性质由栈的即LO性质可知,如果第一个出栈元素是n,则之前的1-n-1个 元素都已经依次进栈,因此第i个出栈元素就是从第n个元素往前数i个元素,为n-i+10因此本题选B","type":"choice","options":{"D":"n-i","C":"i","A":"不确定","B":"n-i+1"},"answer":"B"},{"id":"learncoder_37_358","stem":"<p>已知广义表(a,(b,(a,b)),((a,b),(a,b))),计算广义表的表头、表尾和深度。[常州大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p>栈、队列和数组——广义表<br>  【参考答案】广义表的表头为a,表尾为((b,(a,b)),((a,b),(a,b)))。该广义表有3重括号,因此深度为3。</p>","type":"short_answer","answer":""},{"id":"learncoder_37_357","stem":"<p>顺序栈的类型定义为:<br>  typedef struct{<br>  ElemType *elem;//存储空间的基址<br>  int top;//栈顶元素的下一个位置,简称栈顶位标<br>  int size;//当前分配的存储容量<br>  int increment;//扩容时,增加的存储容量<br>  }SqStack;//顺序栈<br>  算法Pop→Sq(SqStack&amp;S,Elemtype&amp;e)实现顺序栈的出栈操作,请在空缺处填写合适的内容,使其成为完整的算法。[广东工业大学2017年]<br>  statusPop→Sq(SqStack&amp;S,ElemType&amp;e)<br>  /*顺序栈S的栈顶元素出栈到e,并返回OK;*/<br>  /*若失败,则返回ERROR。*/<br>  {<br>  if(S.top==0)<br>  return(1);<br>  (2)=S.elem[--S.top];<br>  return(3);<br>  }</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p>栈、队列和数组——栈和队列的顺序存储结构<br>  【参考答案】(l)ERROR。<br>  (2)e。<br>  (3)OK。</p>","type":"short_answer","answer":"<p>(l)ERROR。<br>(2)e。<br>(3)OK。&nbsp;&nbsp;<br></p>"},{"id":"learncoder_37_356","stem":"<p>—个链串的节点类型定义为<br>  #defineNodeSize6<br>  typedef struct node{<br>  char data[NodeSize];<br>  struct node*next;<br>  }LinkNode;<br>  如果每个字符占1个字节,指针占2个字节,该链串的存储密度是多少?<br>  [常州大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p>栈、队列和数组——字符串<br>  【参考答案】存储密度=该串的串值占用的存储字节数/为该串分配的最大字节数<br>  =(6×1)/(6×1+2)=6/8=3/4。</p>","type":"short_answer","answer":"<p>存储密度=该串的串值占用的存储字节数/为该串分配的最大字节数<br>  =(6×1)/(6×1+2)=6/8=3/4。</p>"},{"id":"learncoder_37_355","stem":"<p>循环队列结构定义如下:<br>  typedef struct squeue{<br>  Data Typedata [QueueSize];<br>  int front;//队头<br>  int rear;//队尾<br>  }squeue;<br>  分别给出队列判空、判满条件及长度计算方法。[常州大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p>栈、队列和数组栈和队列的基本概念<br>  【参考答案】出队列的判空条件:rear==front。<br>  出队列的判满条件:(rear+1)%maxSize==front。<br>  队列长度:QueueSize==(rear-front+maxSize)%maxSize。</p>","type":"short_answer","answer":"<p>出队列的判空条件:rear==front。<br>出队列的判满条件:(rear+1)%maxSize==front。<br>队列长度:QueueSize==(rear-front+maxSize)%maxSize。</p>"},{"id":"learncoder_37_354","stem":"<p>设以带头节点的循环链表表示队列,并且只设一个指针指向队尾元素节点(注意不设头指针),循环链表的类型定义如下:<br>  typedef struct Lnode{<br>  Elem Type data;<br>  struct LNode*next;<br>  }LNode,*LinkList;<br>  算法f4实现相应的出队操作。请在空缺处填入合适内容,使其成为完整的算法。<br>  [广东工业大学2017年]<br>  statusf4(LinkList&amp;rear,ElemType&amp;e){<br>  if( (1) )<br>  return ERROR;<br>  p=rear-&gt;next-&gt;next;<br>   (2) =p-&gt;next;<br>  if( (3) )<br>  rear= (4) ;<br>  e=p-&gt;data;<br>  free(p);<br>  return OK;<br>  }</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p>栈、队列和数组——栈和队列的基本概念<br>  【参考答案】(1)rear-&gt;next==rear。<br>  (2)rear-&gt;next-&gt;next。<br>  (3)rear==p。<br>  (4)rear-&gt;next。</p>","type":"short_answer","answer":"<p>(1)rear-&gt;next==rear。<br>  (2)rear-&gt;next-&gt;next。<br>  (3)rear==p。<br>  (4)rear-&gt;next。</p>"},{"id":"learncoder_37_353","stem":"<p>在栈的输入端元素的输入顺序为1,2,3,4,5,6,进栈过程中可以退栈,则退栈时能否<br>  排成序列3,2,5,6,4,1和1,5,4,6,2,3。若能,写出进栈、退栈过程[用push(x)表示x进栈,pop(x)表示x退栈];若不能,简述理由。[桂林电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p>栈、队列和数组——栈和队列的基本概念<br>  【参考答案】退栈时能排成序列3,2,5,6,4,1,不能排成序列1,5,4,6,2,3。<br>  退栈时排成序列3,2,5,6,4,1的进栈、退栈过程如下。<br>  push(1);<br>  push(2);<br>  push(3);<br>  pop(3);<br>  pop(2);<br>  push(4);<br>  push(5);<br>  pop(5);<br>  push(6);<br>  pop(6);<br>  pop(4);<br>  pop(1);<br>  退栈时不能排成序列1,5,4,6,2,3的理由:在退栈序列中,第一个退栈的是1,第二个退栈的是5,说明2和3都在栈中,且2先进栈,3后进栈,由栈的先进后出特点可知,3先出栈,2后出栈,因此退栈时不能排成序列1,5,4,6,2,3。</p>","type":"short_answer","answer":"<p>退栈时能排成序列3,2,5,6,4,1,不能排成序列1,5,4,6,2,3。<br>  退栈时排成序列3,2,5,6,4,1的进栈、退栈过程如下。<br>  push(1);<br>  push(2);<br>  push(3);<br>  pop(3);<br>  pop(2);<br>  push(4);<br>  push(5);<br>  pop(5);<br>  push(6);<br>  pop(6);<br>  pop(4);<br>  pop(1);<br>  退栈时不能排成序列1,5,4,6,2,3的理由:在退栈序列中,第一个退栈的是1,第二个退栈的是5,说明2和3都在栈中,且2先进栈,3后进栈,由栈的先进后出特点可知,3先出栈,2后出栈,因此退栈时不能排成序列1,5,4,6,2,3。</p>"},{"id":"learncoder_37_352","stem":"<p>解答下列有关栈的问题:[常州大学2015年]<br>  (1)一个入栈序列是al,a2,…,an,其出栈序列为P1,P2,…,Pn。若Pi=a/i,则Pi是什么?<br>  (2)写出算术表达式a+b/(c+d*e-f)-g的后缀表达式,并简述后缀表达式的栈操作实现过程。</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p>栈、队列和数组——栈和队列的基本概念<br>  【参考答案】(1)pi=an-1+1。<br>  (2)后缀表达式:abcde*+f-/+g-。<br>  使用栈可以将算术表达式转换成它的后缀表达式,对于转换过程的处理如下:从左向右扫描算术表达式;访问到数字,加入后缀表达式;访问到左括号“(”,立即进栈;访问到右括号“)”,栈中运算符依次出栈并加入后缀表达式,直到出现左括号“(”,并删除“(”;访问到除括号之外的其他运算符,当其优先级比栈顶除“(”之外的运算符高时入栈,否则比当前运算符优先级高或者优先级相等的运算符依次出栈。<br>  利用栈将算术表达式转换为等价后缀表达式的过程如下表所示。<br>  扫描项<br>  动作<br>  栈的变化<br>  后缀表达式<br>  a<br>  a加人后缀表达式<br>  空<br>  a<br>  +<br>  +入栈<br>  +<br>  a<br>  b<br>  6加人后缀表达式<br>  +<br>  ab<br>  /<br>  /入栈<br>  +/<br>  ab<br>  (<br>  (入桟<br>  +/(<br>  ab<br>  c<br>  c加入后缀表达式<br>  +/(<br>  abc<br>  +<br>  +人栈<br>  +/(+<br>  abc<br>  d<br>  d加入后缀表达式<br>  +/(+<br>  abed<br>  *<br>  *入栈<br>  +/(+*<br>  abed<br>  e<br>  e加入后缀表达式<br>  +/(+*<br>  abede<br>  -<br>  *出栈,+出栈,-入栈<br>  +/(-<br>  abede*+<br>  f<br>  /加入后缀表达式<br>  +/(-<br>  abede*+/<br>  )<br>  -出栈,删除(<br>  +/<br>  abede*+f-<br>  -<br>  /出栈,+出栈,-入栈<br>  -<br>  abede*+/-/+<br>  g<br>  g加人后缀表达式<br>  -<br>  abede*+f-/+g<br>  <br>  -出栈<br>  空<br>  abede*+f-/+g-<br>  </p>","type":"short_answer","answer":"<p>(1)pi=an-1+1。<br>  (2)后缀表达式:abcde*+f-/+g-。<br>  使用栈可以将算术表达式转换成它的后缀表达式,对于转换过程的处理如下:从左向右扫描算术表达式;访问到数字,加入后缀表达式;访问到左括号“(”,立即进栈;访问到右括号“)”,栈中运算符依次出栈并加入后缀表达式,直到出现左括号“(”,并删除“(”;访问到除括号之外的其他运算符,当其优先级比栈顶除“(”之外的运算符高时入栈,否则比当前运算符优先级高或者优先级相等的运算符依次出栈。<br>  利用栈将算术表达式转换为等价后缀表达式的过程如下表所示。<br>  扫描项<br>  动作<br>  栈的变化<br>  后缀表达式<br>  a<br>  a加人后缀表达式<br>  空<br>  a<br>  +<br>  +入栈<br>  +<br>  a<br>  b<br>  6加人后缀表达式<br>  +<br>  ab<br>  /<br>  /入栈<br>  +/<br>  ab<br>  (<br>  (入桟<br>  +/(<br>  ab<br>  c<br>  c加入后缀表达式<br>  +/(<br>  abc<br>  +<br>  +人栈<br>  +/(+<br>  abc<br>  d<br>  d加入后缀表达式<br>  +/(+<br>  abed<br>  *<br>  *入栈<br>  +/(+*<br>  abed<br>  e<br>  e加入后缀表达式<br>  +/(+*<br>  abede<br>  -<br>  *出栈,+出栈,-入栈<br>  +/(-<br>  abede*+<br>  f<br>  /加入后缀表达式<br>  +/(-<br>  abede*+/<br>  )<br>  -出栈,删除(<br>  +/<br>  abede*+f-<br>  -<br>  /出栈,+出栈,-入栈<br>  -<br>  abede*+/-/+<br>  g<br>  g加人后缀表达式<br>  -<br>  abede*+f-/+g<br>  <br>  -出栈<br>  空<br>  abede*+f-/+g-<br>  &nbsp;&nbsp;<br></p>"},{"id":"learncoder_37_351","stem":"<p>五个元素的入栈顺序为A,B,C,D,E,在各种可能的出栈顺序中,C第一个出栈,D第二个出栈的顺序有哪些?[常州大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p>栈、队列和数组——栈和队列的基本概念<br>  【参考答案】元素C第一个出栈,元素D第二个出栈,说明此时元素A和B已经在栈中了,因此除元素E之外的元素的出栈顺序可以确定为C,D,B,A。出栈的顺序取决于元素E的入栈时间,如果在元素D出栈之后,元素E立即人栈,那么出栈顺序为C,D,E,B,A;如果在元素D出栈之后,元素B先出栈,元素E再入栈,那么出栈顺序为C,D,B,E,A;如果在元素D出栈之后,元素B和A依次出栈,元素E再入栈,那么出栈顺序为C,D,B,A,E。综上所述,在各种可能的出栈顺序中,C第一个出栈,D第二个出栈的顺序有3种,分别是C,D,E,B,A;C,D,B,E,A;C,D,B,A,E。</p>","type":"short_answer","answer":"<p>元素C第一个出栈,元素D第二个出栈,说明此时元素A和B已经在栈中了,因此除元素E之外的元素的出栈顺序可以确定为C,D,B,A。出栈的顺序取决于元素E的入栈时间,如果在元素D出栈之后,元素E立即人栈,那么出栈顺序为C,D,E,B,A;如果在元素D出栈之后,元素B先出栈,元素E再入栈,那么出栈顺序为C,D,B,E,A;如果在元素D出栈之后,元素B和A依次出栈,元素E再入栈,那么出栈顺序为C,D,B,A,E。综上所述,在各种可能的出栈顺序中,C第一个出栈,D第二个出栈的顺序有3种,分别是C,D,E,B,A;C,D,B,E,A;C,D,B,A,E。</p>"},{"id":"learncoder_37_350","stem":"<p>设将n(n&gt;1)个整数存放到一维数组R中。试设计一个在时间和空间两方面都尽可<br>  能高效的算法。将R中保存的序列循环左移p(0&lt;p&lt;n)个位置,即将R中的数据由(X0,X1,…,Xn-1)变换为(Xp,Xp+1,…,Xn-1,X0,X1,…Xp-1)。要求:[全国联考2010年]<br>  (1)给出算法的基本设计思想。<br>  (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。<br>  (3)说明你所设计算法的时间复杂度和空间复杂度。</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p>栈、队列和数组——数组<br>  【参考答案】(1)算法的基本设计思想如下:<br>  依据题意,将问题转化为一维数组R划分为两个数组a和b,将ab转换ba,其中,a为数组R中前P个元素,b为数组中其余n-p个元素。先将a逆置,即a-1b,再将b逆置,即a-1b-1;最后将a-1b-1逆置,即(a-1b-1)=ba。<br>  (2)采用Java描述算法,代码如下:<br>  public void reverse(int[ ] R,intstart,intend){ //逆置数组<br>  int temp;//用于交换兀素的辅助变量<br>  int len=start-end+1;<br>  for(int i=0;i&lt;len/2;i++){ //交换元素<br>  temp=R[start+i];<br>  R[start+i]=R[end-i];<br>  R[end-i]=temp;<br>  }<br>  }<br>  public void revertseR (int[ ] R,int n,int p){<br>  reverse(R,0,p-l);//逆置数组a<br>  reverse(R,p,n-1);//逆置数组b<br>  reverse(R,0,n-1);//将a-1b-1逆置成ba<br>  }<br>  (3)上述算法的时间复杂度为O(n),空间复杂度为O(1)。</p>","type":"short_answer","answer":"<p>(1)算法的基本设计思想如下:<br>  首先遍历整个数组,找出可能作为主元素的待确定主元素再重新计数,验证M是否为A中的主元素。<br>  算法分如下两个步骤进行。<br>  ①找出A中可能作为主元素的待确定主元素M:遍历数组A中的所有元素,将首个元素M存储在int型变量m中,计数为1。若后续元素的值等于M,将计数加1,否则减1。若计数变为0,则将下一个整数存储在m中,重新计数,从当前位置开始,重新遍历整个数组。<br>  ②验证m的值是否为要得到的主元素:重新遍历数组A,'统计m中元素出现的总次数,若出现次数大于数组A的一半,则判定M为数组A的主元素,否则A中无主元素。<br>  (2)采用C语言描述算法,代码如下:<br>  int MainElement(int A[ ],int n){<br>  int i,m,count=l;//m用于存储待确定的主元素M,count统计M出现的次数<br>  m=A[0];//首先将A[0]设置为数组A的主元素<br>  for(i=1;i&lt;n;i++){//寻找待确定的主元素M<br>  if(A[0]==m){<br>  count++;//计算待确定的主元素M的出现次数<br>  }<br>  else if(count&gt;0){//非主元素的处理<br>  count--;<br>  }<br>  else{ //选择新的待确定主元素<br>  m=A[i];<br>  count=1;<br>  }<br>  if(count&gt;0){<br>  for(i=count=0;i&lt;n,i++){//计算最终待确定主兀素的出现次数<br>  if(A[i]==m){<br>  count++;<br>  }<br>  if(count&gt;n/2){<br>  return m;//锁定数组A的主元素<br>  }(1)算法的基本设计思想如下:</p><p>  依据题意,将问题转化为一维数组R划分为两个数组a和b,将ab转换ba,其中,a为数组R中前P个元素,b为数组中其余n-p个元素。先将a逆置,即a-1b,再将b逆置,即a-1b-1;最后将a-1b-1逆置,即(a-1b-1)=ba。<br>  (2)采用Java描述算法,代码如下:<br>  public void reverse(int[ ] R,intstart,intend){ //逆置数组<br>  int temp;//用于交换兀素的辅助变量<br>  int len=start-end+1;<br>  for(int i=0;i&lt;len/2;i++){ //交换元素<br>  temp=R[start+i];<br>  R[start+i]=R[end-i];<br>  R[end-i]=temp;<br>  }<br>  }<br>  public void revertseR (int[ ] R,int n,int p){<br>  reverse(R,0,p-l);//逆置数组a<br>  reverse(R,p,n-1);//逆置数组b<br>  reverse(R,0,n-1);//将a-1b-1逆置成ba<br>  }<br>  (3)上述算法的时间复杂度为O(n),空间复杂度为O(1)。</p>"},{"id":"learncoder_37_349","stem":"<p>已知一个整数序列A=(a0,a1,…,an+1),其中,0&lt;ai&lt;n(0≤i&lt;n)。若存在ap1= ap2=…=apn=x且m&gt;n/2(0≤pk≤n,1≤k≤m),则称x为A的主元素。假如A=(0,5,5,3,5,7,5,5),则5为主元素;又如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设A中的n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素;否则,输出-1。要求:[全国联考2013年]<br>  (1)给出算法的基本设计思想。<br>  (2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。<br>  (3)说明你所设计算法的时间复杂度和空间复杂度。</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p>栈、队列和数组——数组【参考答案】(1)算法的基本设计思想如下:<br>  首先遍历整个数组,找出可能作为主元素的待确定主元素再重新计数,验证M是否为A中的主元素。<br>  算法分如下两个步骤进行。<br>  ①找出A中可能作为主元素的待确定主元素M:遍历数组A中的所有元素,将首个元素M存储在int型变量m中,计数为1。若后续元素的值等于M,将计数加1,否则减1。若计数变为0,则将下一个整数存储在m中,重新计数,从当前位置开始,重新遍历整个数组。<br>  ②验证m的值是否为要得到的主元素:重新遍历数组A,'统计m中元素出现的总次数,若出现次数大于数组A的一半,则判定M为数组A的主元素,否则A中无主元素。<br>  (2)采用C语言描述算法,代码如下:<br>  int MainElement(int A[ ],int n){<br>  int i,m,count=l;//m用于存储待确定的主元素M,count统计M出现的次数<br>  m=A[0];//首先将A[0]设置为数组A的主元素<br>  for(i=1;i&lt;n;i++){//寻找待确定的主元素M<br>  if(A[0]==m){<br>  count++;//计算待确定的主元素M的出现次数<br>  }<br>  else if(count&gt;0){//非主元素的处理<br>  count--;<br>  }<br>  else{ //选择新的待确定主元素<br>  m=A[i];<br>  count=1;<br>  }<br>  if(count&gt;0){<br>  for(i=count=0;i&lt;n,i++){//计算最终待确定主兀素的出现次数<br>  if(A[i]==m){<br>  count++;<br>  }<br>  if(count&gt;n/2){<br>  return m;//锁定数组A的主元素<br>  }<br>  }<br>  }<br>  else<br>  return-1;//A中无主元素<br>  }<br>  }<br>  (3)上述算法的时间复杂度是O(n),空间复杂度是O(1)。</p>","type":"short_answer","answer":"<p>(1)算法的基本设计思想如下:<br>  首先遍历整个数组,找出可能作为主元素的待确定主元素再重新计数,验证M是否为A中的主元素。<br>  算法分如下两个步骤进行。<br>  ①找出A中可能作为主元素的待确定主元素M:遍历数组A中的所有元素,将首个元素M存储在int型变量m中,计数为1。若后续元素的值等于M,将计数加1,否则减1。若计数变为0,则将下一个整数存储在m中,重新计数,从当前位置开始,重新遍历整个数组。<br>  ②验证m的值是否为要得到的主元素:重新遍历数组A,'统计m中元素出现的总次数,若出现次数大于数组A的一半,则判定M为数组A的主元素,否则A中无主元素。<br>  (2)采用C语言描述算法,代码如下:<br>  int MainElement(int A[ ],int n){<br>  int i,m,count=l;//m用于存储待确定的主元素M,count统计M出现的次数<br>  m=A[0];//首先将A[0]设置为数组A的主元素<br>  for(i=1;i&lt;n;i++){//寻找待确定的主元素M<br>  if(A[0]==m){<br>  count++;//计算待确定的主元素M的出现次数<br>  }<br>  else if(count&gt;0){//非主元素的处理<br>  count--;<br>  }<br>  else{ //选择新的待确定主元素<br>  m=A[i];<br>  count=1;<br>  }<br>  if(count&gt;0){<br>  for(i=count=0;i&lt;n,i++){//计算最终待确定主兀素的出现次数<br>  if(A[i]==m){<br>  count++;<br>  }<br>  if(count&gt;n/2){<br>  return m;//锁定数组A的主元素<br>  }<br>  }<br>  }<br>  else<br>  return-1;//A中无主元素<br>  }<br>  }<br>  (3)上述算法的时间复杂度是O(n),空间复杂度是O(1)。</p>"},{"id":"learncoder_37_343","stem":"<p>循环队列的容量为MAXSIZE,采用牺牲一个存储空间进行构造,队头指针是front,队尾指针是rear,则队空的条件是__1__。[电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p>【答案】hear==front。<br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】循环队列队空时,rear==front。</p>","type":"blank","options":{"__1__":"hear==front"}},{"id":"learncoder_37_342","stem":"<p>广义表((),(a),b,(c,d),f)的深度是__1__[电子科技大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队约和数组——广义表<br>  【解析】广义表的深度为表中括号的重数,广义表有3重括号,因此深度为3。</p>","type":"blank","options":{"__1__":"3"}},{"id":"learncoder_37_341","stem":"<p>把一个n阶上三角矩阵存储在一维数组中,如果元素aij(n≥j≥i≥1)对应数组中的B[k],则k的值为( )。[常州大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——特殊矩阵的压缩存储<br>  【解析】将上三角矩阵行优先压缩存储在一维数组中,当i≤j时,矩阵的元素aij数组B中<br>  存放位置为,即。</p>","type":"choice","options":{"A":"0","B":"0"},"answer":"B"},{"id":"learncoder_37_340","stem":"<p>A[N,N]是对称矩阵,将下三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是( )。[中国科学院大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——特殊矩阵的压缩存储<br>  【解析】由于A[N,N]是对称矩阵,因此a[i][j]=a[j][i],求任一上三角元素a[i][j]对应T[k]的下标k,则转换成求元素a[j][i]对应的下标。</p>","type":"choice","options":{"A":"0","B":"0"},"answer":"B"},{"id":"learncoder_37_338","stem":"<p>已知字符串S为“abaabaabacacaabaabcc”,模式串T为“abaabc”。采用KMP算法进行匹配,第一次出现“失配”(S[i]≠T[j])时,i=j=5,则下次开始匹配时,i和j的值分别是( )。[全国联考2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  字符串——串的模式匹配<br>  【解析】因为“失配”时,i=j=5,所以字符串S与模式串T的位序都是从0开始。模式串T的next失配函数如下表所示。<br>  j<br>  0<br>  1<br>  2<br>  3<br>  4<br>  5<br>  T<br>  a<br>  b<br>  a<br>  a<br>  b<br>  c<br>  next(j)<br>  -1<br>  0<br>  0<br>  1<br>  1<br>  2<br>  在KMP算法中,字符串S在第S趟比对失败时,它的扫描指针在下一趟比对时不必回退,模式串T的扫描指针应退回到next(j)位置重新比较。“失配”时,i=j=5,根据next失配函数可得next(j)=next(5)=2,因此i=5,j=2。</p>","type":"choice","options":{"A":"i=5,j=2","B":"i=5,j=0","C":"i=1,j=0","D":"i=6,j=2"},"answer":"A"},{"id":"learncoder_37_337","stem":"<p>.广义表((a,(b,c)),d,e)的表头是( )。[电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——广义表<br>  【解析】广义表的表头为(a,(b,c)),表尾为(d,e)。</p>","type":"choice","options":{"A":"(b,c)","B":"(a,(b,c))","C":"a","D":"(a)"},"answer":"B"},{"id":"learncoder_37_336","stem":"<p>广义表L=((),(e),(a,(b,c,d))的表尾和深度为( )。[常州大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——广义表<br>  【解析】广义表的第一个表元素为表头,除表头之外的其他元素组成的表为表尾。广义表L的表头为(),表尾为((e),(a,(b,c,d)))。广义表的深度为表中括号的重数,广义表L有3重括号,因此深度为3。</p>","type":"choice","options":{"A":"tail(L)=((e),(a,(b,c,d))),depth(L)=3","B":"tail(L)=((a,(b,c,d))),depth(L)=3","C":"tail(L)=(a,(b,c,d)),depth(L)=2","D":"tail(L)=((e),(a,(b,c,d))),depth(L)=2"},"answer":"A"},{"id":"learncoder_37_335","stem":"<p>下列关于数组的描述,正确的是( )。[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——数组<br>  【解析】根据数组的定义,数组的大小是固定的,在声明数组时需要给定数组大小,并且数组中数据元素应当是相同数据类型的。</p>","type":"choice","options":{"A":"数组的大小是可变的,可以有不同的类型的数组元素","B":"数组的大小是固定的,所有数组元素的类型必须相同","C":"数组的大小是固定的,但可以有不同的类型的数组元素","D":"数组的大小是可变的,所有数组元素的类型必须相同"},"answer":"B"},{"id":"learncoder_37_334","stem":"<p>若6行5列的数组以行序为主序顺序存储,基地址为1000,每个元素占2个存储单元,则第3行第4列的元素(假定无第0行第0列)的地址是( )。[中国科学院大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——特殊矩阵的压缩存储<br>  【解析】无第0行第0列,则行号和列标都是从1开始的,因此第3行第4列元素的地址是<br>  1000+2×(5×2+4-l)=1026。</p>","type":"choice","options":{"A":"1042","B":"1026","C":"1040","D":"以上答案都不对"},"answer":"B"},{"id":"learncoder_37_333","stem":"<p>有一个100阶的三对角矩阵M,其元素mi,j(1≤i≤100,1≤j≤100)按行优先依次压缩存入下标从0开始的一维数组N中。元素m30,30在N中的下标是( )。[全国联考2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——特殊矩阵的压缩存储<br>  【解析】三对角矩阵是指在一个方阵中,所有非零元素集中在主对角线和主对角线相邻两侧的对角线上。本题中的三对角矩阵为<br>   <br>  按行优先的原则依次将三对角矩阵M中的元素压缩存人一维数组,数组的下标从0开始,则N[0]存放m1,1,存储形式如下图所示。<br>  m1,1<br>  m1,2<br>  m2,1<br>  m2,2<br>  m2,3<br>  …<br>  m100,99<br>  m100,100<br>  <br>  计算可得出三对角矩阵M的元素在一维数组N中的下标为2×i+j-3。元素m30,30在N中的下标是2×30+30-3=87。</p>","type":"choice","options":{"A":"86","B":"88","C":"87","D":"89"},"answer":"C"},{"id":"learncoder_37_332","stem":"<p>适用于压缩存储稀疏矩阵的两种存储结构是( )。[全国联考2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——特殊矩阵的压缩存储<br>  【解析】稀疏矩阵是一种特殊矩阵,其非零元素的个数远远小于零元素的个数。采用三元组&lt;行下标,列下标,值&gt;来唯一确定一个非零元素,因此稀疏矩阵需要使用一个三元组表来表示。矩阵三元组表的顺序存储结构称为三元组顺序存储,而它的链式存储结构是十字链表。</p>","type":"choice","options":{"A":"三元组表和十字链表","B":"邻接矩阵和十字链表","C":"十字链表和二叉链表","D":"三元组表和邻接矩阵"},"answer":"A"},{"id":"learncoder_37_331","stem":"<p>队列的特点是( )。[桂林电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】队列是一种限制存取位置的线性表,它只允许在表的一端进行插入操作,在表的另一端进行删除操作,允许插入的一端称为表尾,允许删除的一端称为表头。栈只允许在表的一端进行插入和删除操作。</p>","type":"choice","options":{"A":"只允许在表的一端进行插入,在另一端进行删除","B":"只允许在表的一端进行插入和删除","C":"允许在表的任何位置进行插入和删除","D":"允许在表的两端进行插入和删除"},"answer":"A"},{"id":"learncoder_37_330","stem":"<p>最大容量为n的循环队列,队尾指针是rear,队头指针是front,则队满的条件是( )。[电子科技大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】在循环队列中,需要判断队空与队满。队满为了区别于队空,用(rear+1)modn==front来判断是否队满,即队满时,指针rear指向front的前一个位置。此时,队满时实际空了一个元素位置,因为队尾指向rear指向的是实际队尾的后一个位置。</p>","type":"choice","options":{"A":"rear==front","B":"(rear-1)modn==front","C":"rear+1==front","D":"(rear+1)modn==front"},"answer":"D"},{"id":"learncoder_37_329","stem":"<p>下列操作中,不属于队列基本操作的是( )。[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】队列只允许在队尾插入元素,在队头删除元素。删除队头元素即出队列,插入队尾元素即进队列,队列可以读取队头元素而不出队列,但是队列的基本操作不包括取队尾元素。</p>","type":"choice","options":{"A":"取队尾元素","B":"插入队尾元素","C":"取队头元素","D":"删除队头元素"},"answer":"A"},{"id":"learncoder_37_328","stem":"<p>往队列中输入序列{1,2,3,4},然后出队1个数字,则出队的数字是( )。[中国计量大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】队列是先进先出表,数字1最先入队,则最先出队的数字是1。</p>","type":"choice","options":{"A":"3","B":"1","C":"不确定","D":"4"},"answer":"B"},{"id":"learncoder_37_327","stem":"<p>已知循环队列存储在一维数组A[0…n-1]中,且队列非空时,front和rear分别指向队头元素和队尾元素。若初始时队列为空,且要求第1个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是( )。[全国联考2011年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】在循环队列中,需要判断队空与队满。入队时执行(rear+1)%/n操作,所以如果入队后指针指向0,rear初始时的值为n-1。第1个进入队列的元素存储在A[0]处,则插入元素时只需要移动rear的位置,而不需要移动front的位置。</p>","type":"choice","options":{"A":"n-1,n-1","B":"n-1,0","C":"0,0","D":"n-1"},"answer":"D"},{"id":"learncoder_37_326","stem":"<p>循环队列存放在一组数组A[0…M-1]中,end1指向队头元素,end2指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳M-1个元素,初始时为空。下列判断队空和队满的条件中,正确的是( )。[全国联考2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的顺序存储结构<br>  【解析】循环队列初始时为空,队头指针end1和队尾指针end2初始化时都置为0。队尾入<br>  队和队头出队时,end1和end2都按顺时针方向进1。如果循环队列取出元素比存入元素的速度快,队头指针end1便会追上队尾指针end2,一旦到达end1==end2,队空;反之,如果循环队列存入元素比取出元素的速度快,队尾指针end2便会追上队头指针end1,队满。为了区别队空与队满,使用end1==(end2+1)mod M来判断是否队满,即end2指向end1的前一位置就认为队满。</p>","type":"choice","options":{"A":"队空:end1==end2队满:end2==(end1+1)mod(M-1)","B":"队空:end1==end2队满:end1==(end2+1)modM","C":"队空:end1==(end2+1)modM队满:end2==(end1+1)mod(M-1)","D":"队空:end2==(end1+1)modM队满:end1==(end2+1)modM"},"answer":"B"},{"id":"learncoder_37_325","stem":"<p>设有如下图所示的火车车轨,入口到出口之间有n条轨道,列车的行进方向均为从左到右,列车可驶入任意一条轨道。现有编号为1?9的9列列车,驶入的次序依次是8,4,2,5,3,9,1,6,7。若期望驶出的次序依次为1?9,则n至少有( )。[全国联考2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】依据题意,可将本题中的火车轨道看作队列,需遵循队列先进先出的原则。期望驶出的次序依次为1?9,则要求每条轨道上列车编号依次增大。本题求最少的轨道数量,则可以进行如下推演:8号列车驶入轨道1;4号列车由于编号比8小,因此驶入轨道2;2号列车由于编号比8和4都小,因此驶入轨道3;5号列车由于编号比4大,因此驶入轨道2(当然也可以驶入轨道3,但是这时下一个3号列车只能驶入新的轨道,因此不满足题中“至少”的要求);3号列车由于编号比2大,因此驶入轨道3;9号列车由于编号比8大,因此驶入轨道1;1号列车由于编号最小,因此驶人轨道4;6号列车和7号列车可以驶入轨道2或轨道3。由此可得最少需要4条轨道,即n=4。</p>","type":"choice","options":{"A":"4","B":"2","C":"5","D":"3"},"answer":"A"},{"id":"learncoder_37_324","stem":"<p>假设栈的入栈序列为1,2,3,…,n,出栈序列为pl,p2,p3,…,pn。若p2=2,则p3可能取值的个数是( )。[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】本题分为两种情况分析:第一种情况,1人栈,2人栈,3人栈,3出栈,2出栈,此时,Pl=3,p2=2,p3可能为1,也可能为4?n中的任意一个元素(一直入栈直到该元素人栈后立即出栈)。第二种情况,1入栈,1出栈,2入栈,2出栈,此时,Pl=1,P2=2,p3可能为3?n中的任意一个元素(一直入栈直到该元素人栈后立即出栈)。综上所示,p3可能取值为除2以外的任意一个元素,则p3可能取值的个数是n-1。</p>","type":"choice","options":{"A":"无法确定","B":"n-3","C":"n-1","D":"n-2"},"answer":"C"},{"id":"learncoder_37_323","stem":"<p>一个栈的输入序列为1,2,3,4,5,则下列序列中不可能是栈的输出序列的是( )。[电子科技大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组栈和队列的基本概念<br>  【解析】选项A,元素1入栈,元素2入栈后立即出栈,元素3人栈后立即出栈,元素4入栈后立即出栈,元素1出栈,元素5入栈后立即出栈,输出序列为2,3,4,1,5,因此选项A可能是栈的输出序列;选项B,第一个入栈的是元素5,第一个出栈的也是元素5,说明元素全部人栈后再依次出栈的,则输出序列为5,4,3,2,1,因此选项B不可能是栈的输出序列;选项C,元素1入栈,元素2入栈后立即出栈,元素3入栈后立即出栈,元素1出栈,元素4入栈后立即出栈,元素5入栈后立即出栈,输出序列为2,3,1,4,5,因此选项(:可能是找的输出序列;选项0,1入栈后立即出栈,元素2,3,4,5全部人栈,再依次出栈,输出序列为1,5,4,3,2,因此选项D可能是栈的输出序列。</p>","type":"choice","options":{"A":"1,5,4,3,2","B":"2,3,4,l,5","C":"5,4,1,3,2","D":"2,3,l,4,5"},"answer":"C"},{"id":"learncoder_37_322","stem":"<p>若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3。当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( )[南京理工大学2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组栈和队列的基本概念<br>  【解析】在循环队列中,先删除一个元素,即队头元素出队列,队头指针进1,front=(front+1)%maxSize=(3+l)%6=4;再加入一个元素,队尾指针进1,real=(real+1)%maxSize=(0+1)%6=1;最后加入一个元素,队尾指针进1,real=(real+1)%maxSize=(2+1)%6=2。</p>","type":"choice","options":{"A":"5和1","B":"4和2","C":"2和4","D":"1和5"},"answer":"C"},{"id":"learncoder_37_321","stem":"<p>一个栈的输入序列为1,2,3,…,n,若输出序列的第一个元素是n,输出第i(1≤i≤n)个元素是( )。[电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  【解析】由输出序列的第一个元素是n可知,该栈是所有元素都入栈之后才开始出栈的,因此出栈顺序与入栈顺序完全相反。分析输入序列可知,输出的第i个元素是n-i+1。</p>","type":"choice","options":{"A":"n-i+1","B":"n-i-1","C":"n-i","D":"i"},"answer":"A"},{"id":"learncoder_37_320","stem":"<p>常用于函数调用的数据结构是( )。[桂林电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的应用<br>  【解析】栈是一种特殊的线性表,它只允许在一端进行插入和删除操作,因此具有先进后出的特点。函数调用是一个递归过程,可以使用栈来实现。</p>","type":"choice","options":{"A":"栈","B":"链表","C":"队列","D":"数组"},"answer":"A"},{"id":"learncoder_37_319","stem":"<p>若出栈的顺序是a,b,c,d,e,则入栈的顺序不可能是( )。[桂林电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】选项A,每个元素入栈后立即出栈,则出栈顺序是a,b,c,d,e,与题意符合;选项B,元素全部入栈,再依次出栈,则出栈顺序是a,b,c,d,e,与题意符合;选项C,最后一个入栈的元素是a,而第一个出栈的元素也是a,说明元素全部入栈会后再依次出栈的,则出栈顺序是^与题意不符合;选项D,元素a入栈后立即出栈,其余4个元素全部入栈之后,再依次出栈,则出栈顺序为a,b,c,d,e,与题意符合。</p>","type":"choice","options":{"A":"e,d,c,b,a","B":"d,e,c,b,a","C":"a,b,c,d,e","D":"a,e,d,c,b"},"answer":"B"},{"id":"learncoder_37_318","stem":"<p>若一个栈以向量V[1…n]存储,初始栈顶指针top为n+1,则下面x入栈的正确操作是( )。[中国科学院大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】初始栈如下图(a)所示,x入栈后栈如下图(b)所示。<br>  <br>  本题中初始栈顶指针为n+1,说明该向量将栈顶放在了下标大的一端,是向下存储的,所以在进行入栈操作时,先移动栈顶指针,top指针应该进行减1操作,再存入元素x。</p>","type":"choice","options":{"A":"top=top+1;V[top]=x;","B":"V[top]=x;top=top-1;","C":"top=top-1;V[top]=x;","D":"V[top]=x;top=top+1;"},"answer":"C"},{"id":"learncoder_37_317","stem":"<p>设栈S和队列Q的初始状态均为空,元素a,b,c,d,e,f,g依次进入栈S,若每个元素出栈后立即进入队列Q,且7个元素出队的顺序b,d,c,f,e,a,g,则栈S的容量至少是( )。[全国联考2009年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】队列是先进先出表,因此7个元素的出队顺序便是入队顺序,也是出栈顺序,即7个元素的进栈顺序是心a,b,c,d,e,f,g,心出栈顺序是b,d,c,f,e,a,g,进栈、出栈过程如下表所示。<br>  编号<br>  动作<br>  栈内<br>  桟外<br>  1<br>  a进栈<br>  a<br>  空<br>  2<br>  b进栈<br>  a,b<br>  空<br>  3<br>  b出栈<br>  a<br>  b<br>  4<br>  c进栈<br>  a,c<br>  b<br>  5<br>  d进栈<br>  a,c,d<br>  b<br>  6<br>  d出栈<br>  a,c<br>  b<br>  7<br>  c出栈<br>  a<br>  b,d,c<br>  8<br>  e进栈<br>  a,e<br>  b,d,c<br>  9<br>  f进栈<br>  a,e,f<br>  b,d,c<br>  10<br>  f出栈<br>  a,e<br>  b,d,c,f<br>  11<br>  e出栈<br>  a<br>  b,d,c,f,e<br>  12<br>  a出栈<br>  空<br>  b,d,c,f,e,a<br>  13<br>  g进栈<br>  g<br>  b,d,c,f,e,a<br>  14<br>  g出栈<br>  空<br>  b,d,c,f,e,a,g<br>  由上表可知,栈S的容量至少是3。</p>","type":"choice","options":{"A":"2","B":"3","C":"1","D":"4"},"answer":"B"},{"id":"learncoder_37_316","stem":"<p>为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是( )。[全国联考2009年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的应用<br>  【解析】缓冲区的作用是解决计算机主机与打印机之间速度不匹配问题,应保证打印数据的顺序不被改变,因此具有先进先出的特点,逻辑结构应该是队列。</p>","type":"choice","options":{"A":"图","B":"树","C":"栈","D":"队列"},"answer":"D"},{"id":"learncoder_37_315","stem":"<p>某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作。若元素a,b,c,d,e依次入此队列后再进行出队操作,则不可能得到的出队序列是( )。[全国联考2010年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】依据题意分析这种特殊队列可知,该队列的出队序列中,以元素a为中心点,无论是元素a向左或者向右,都是有序的序列,选项C不符合,其他三项均符合。<br>  本题也可以采用更加简便的方法快速选出正确答案,由于5个元素依次入此队列后再进行出队操作,因此无论元素a与元素b是用从一端进行入队操作的,还是分别从两端进行入队操作的,在出队序列中元素a与元素b都是相邻的,只有选项C不符合要求,因此不可能的出队序列是选项C。</p>","type":"choice","options":{"A":"d,b,c,a,e","B":"d,b,a,c,e","C":"e,c,b,a,d","D":"b,a,c,d,e"},"answer":"A"},{"id":"learncoder_37_314","stem":"<p>若元素a,b,c,d,e,f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈操作,则不可能得到的出栈序列是( )。[全国联考2010年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】栈具有先进后出的特点。由于不允许连续三次进行退栈操作,因此在出栈序列中不允许存在三个连续元素的逆序子序列,选项D中f,e便是d,e,f三个连续元素的逆序子序列,因此选项D不可能是出栈序列。</p>","type":"choice","options":{"A":"d,c,e,b,f,a","B":"c,b,d,a,e,f","C":"b,c,a,e,f,d","D":"a,f,e,d,c,b"},"answer":"D"},{"id":"learncoder_37_313","stem":"<p>元素a,b,c,d,e依次进入初始为空的栈中,若元素进栈后可停留、可出栈,直到所有元素都出栈,则在所有可能的出栈序列中,以元素d开头的序列个数是( )。[全国联考2011年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】出栈序列以元素d开头,表示第一个出栈的是元素d,这时栈中从栈底到栈顶的元素分别为a,6,c,元素e未进栈。出栈序列取决于元素e在何时进栈。当元素出栈后,元素e进栈,则出栈序列为d,e,c,b,a;当元素d出栈后,元素c出栈,元素e进栈,则出栈序列为心c,当元素d出栈后,元素c出栈,元素6出栈,元素e进栈,则出栈序列为d,c,b,e,a;当元素d出栈后,元素c出栈,元素b出栈,元素a出栈,元素e进栈,则出栈序列为d,c,b,a,e。因此以元素d开头的出栈序列可能有4个。</p>","type":"choice","options":{"A":"4","B":"5","C":"3","D":"6"},"answer":"A"},{"id":"learncoder_37_312","stem":"<p>假设栈初始为空,将中缀表达式a/b+(c*d-e*f)/g转换为等价后缀表达式的过程中,当扫描到f时,栈中的元素依次是( )。[全国联考2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的应用<br>  【解析】中缀表达式:〈操作数〉〈操作符〉〈操作数〉。后缀表达式:〈操作数〉〈操作数〉〈操作符>。使用栈可以将中缀表达式转换成它的后缀表达式,对于转换过程的处理如下:从左向右扫描中缀表达式;访问到数字,加人后缀表达式;访问到左括号“(”,立即进栈;访问到右括号“)”,栈中运算符依次出栈并加入后缀表达式,直到出现左括号“(”,并删除“(”;访问到除括号之外的其他运算符,当其优先级比栈顶除“(”之外的运算符高时入栈,否则比当前运算符优先级高或者优先级相等的运算符依次出栈。<br>  利用栈将中缀表达式转换为等价后缀表达式的过程如下表所示。<br>  扫描项<br>  动作<br>  栈的变化<br>  后缀表达式<br>  a<br>  a加人后缀表达式<br>  空<br>  a<br>  /<br>  /入栈<br>  /<br>  a<br>  b<br>  6加入后缀表达式<br>  /<br>  ab<br>  +<br>  /出栈,+入栈<br>  +<br>  ab/<br>  (<br>  (入栈<br>  +(<br>  ab/<br>  c<br>  c加入后缀表达式<br>  +(<br>  ab/c<br>  *<br>  *人栈<br>  +(*<br>  ab/c<br>  d<br>  d加入后缀表达式<br>  +(*<br>  ab/cd<br>  -<br>  *出栈,-人栈<br>  +(-<br>  ab/cd*<br>  e<br>  e加入后缀表达式<br>  +(-<br>  ab/cd*e<br>  木<br>  *入栈<br>  +(-*<br>  ab/cd*e<br>  /<br>  /加人后缀表达式<br>  +(-*<br>  ab/cd*ef<br>  )<br>  *出栈,-出栈,删除(<br>  +<br>  ab/cd*ef*-<br>  (续表)<br>  扫描项<br>  动作<br>  栈的变化<br>  后缀表达式<br>  /<br>  /入栈<br>  +/<br>  ab/cd*ef*-<br>  g<br>  g加入后缀表达式<br>  +/<br>  ab/cd*ef*~g<br>  <br>  /出栈,+出栈<br>  空<br>  ab/cd*ef*-g/+<br>  依据上表可知,当扫描到/时,栈中的元素依次是+(-*。</p>","type":"choice","options":{"A":"+(-*","B":"/+—*","C":"+(*-","D":"/+(*—*"},"answer":"A"},{"id":"learncoder_37_311","stem":"<p>已知操作符包括和“+”“-”“*”“/”(”和“)”。将中缀表达式a+b-a*((c+d)/e-f)+g转换为等价的后缀表达式ab+acd+e/f-*-g+时,用栈来存放暂时还不能确定运算次序的操作符。若栈初始时为空,则转换过程中同时保存在栈中的操作符的最大个数是( )。[全国联考2012年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组栈和队列的应用<br>  【解析】利用栈将中缀表达式转换为等价后缀表达式的过程如下表所示。<br>  扫描项<br>  动作<br>  栈的变化<br>  后缀表达式<br>  a<br>  a加入后缀表达式<br>  空<br>  a<br>  +<br>  +入栈<br>  +<br>  a<br>  b<br>  b加入后缀表达式<br>  +<br>  ab<br>  -<br>  +出栈,-入钱<br>  -<br>  ab+<br>  a<br>  a加入后缀表达式<br>  -<br>  ab+a<br>  *<br>  *入栈<br>  一*<br>  ab+a<br>  (<br>  (入栈<br>  -*(<br>  ab+a<br>  (<br>  (入栈<br>  -*((<br>  ab+a<br>  c<br>  c加入后缀表达式<br>  →*((<br>  ab+ac<br>  +<br>  +入栈<br>  -*((+<br>  ab+ac<br>  d<br>  d加入后缀表达式<br>  -*((+<br>  ab+acd<br>  )<br>  +出栈,删除(<br>  -*(<br>  ab+acd+<br>  /<br>  /入栈<br>  -*(/<br>  ab+acd+<br>  e<br>  e加人后缀表达式<br>  -*(/<br>  ab+acd+e<br>  -<br>  /出栈,-人栈<br>  --<br>  ab+acd+e/<br>  f<br>  /加入后缀表达式<br>  <br>  ab+acd+e/f<br>  )<br>  -出栈,删除(<br>  <br>  ab+acd+e/f-<br>  +<br>  *出栈,-出栈,+入栈<br>  +<br>  ab+acd+e/f-*-<br>  g<br>  g加入后缀表达式<br>  +<br>  ab+acd+e/f-*-g<br>  <br>  +出栈<br>  空<br>  ab+acd+e/f-*-g+<br>  依据上表可知,转换过程中同时保存在栈中的操作符的最大个数是5。</p>","type":"choice","options":{"A":"11","B":"7","C":"5","D":"8"},"answer":"C"},{"id":"learncoder_37_308","stem":"<p>元素a,b,c,d,e依次进入初始为空的栈中,若元素进栈后可停留、可出栈,直到所有元素都出栈,则在所有可能的出栈序列中,以元素d开头的序列个数是( )。[全国联考2011年]</p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】出栈序列以元素d开头,表示第一个出栈的是元素d,这时栈中从栈底到栈顶的元素分别为a,6,c,元素e未进栈。出栈序列取决于元素e在何时进栈。当元素出栈后,元素e进栈,则出栈序列为d,e,c,b,a;当元素d出栈后,元素c出栈,元素e进栈,则出栈序列为心c,当元素d出栈后,元素c出栈,元素6出栈,元素e进栈,则出栈序列为d,c,b,e,a;当元素d出栈后,元素c出栈,元素b出栈,元素a出栈,元素e进栈,则出栈序列为d,c,b,a,e。因此以元素d开头的出栈序列可能有4个。</p>","type":"choice","options":{"A":"4","B":"5","C":"3","D":"6"},"answer":"A"},{"id":"learncoder_37_307","stem":"<p>已知操作符包括和“+”“-”“*”“/”(”和“)”。将中缀表达式a+b-a*((c+d)/e-f)+g转换为等价的后缀表达式ab+acd+e/f-*-g+时,用栈来存放暂时还不能确定运算次序的操作符。若栈初始时为空,则转换过程中同时保存在栈中的操作符的最大个数是( )。[全国联考2012年]</p><p><span></span></p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组栈和队列的应用<br>  【解析】利用栈将中缀表达式转换为等价后缀表达式的过程如下表所示。<br>  扫描项<br>  动作<br>  栈的变化<br>  后缀表达式<br>  a<br>  a加入后缀表达式<br>  空<br>  a<br>  +<br>  +入栈<br>  +<br>  a<br>  b<br>  b加入后缀表达式<br>  +<br>  ab<br>  -<br>  +出栈,-入钱<br>  -<br>  ab+<br>  a<br>  a加入后缀表达式<br>  -<br>  ab+a<br>  *<br>  *入栈<br>  一*<br>  ab+a<br>  (<br>  (入栈<br>  -*(<br>  ab+a<br>  (<br>  (入栈<br>  -*((<br>  ab+a<br>  c<br>  c加入后缀表达式<br>  →*((<br>  ab+ac<br>  +<br>  +入栈<br>  -*((+<br>  ab+ac<br>  d<br>  d加入后缀表达式<br>  -*((+<br>  ab+acd<br>  )<br>  +出栈,删除(<br>  -*(<br>  ab+acd+<br>  /<br>  /入栈<br>  -*(/<br>  ab+acd+<br>  e<br>  e加人后缀表达式<br>  -*(/<br>  ab+acd+e<br>  -<br>  /出栈,-人栈<br>  --<br>  ab+acd+e/<br>  f<br>  /加入后缀表达式<br>  <br>  ab+acd+e/f<br>  )<br>  -出栈,删除(<br>  <br>  ab+acd+e/f-<br>  +<br>  *出栈,-出栈,+入栈<br>  +<br>  ab+acd+e/f-*-<br>  g<br>  g加入后缀表达式<br>  +<br>  ab+acd+e/f-*-g<br>  <br>  +出栈<br>  空<br>  ab+acd+e/f-*-g+<br>  依据上表可知,转换过程中同时保存在栈中的操作符的最大个数是5。</p><p><span></span></p>","type":"choice","options":{"A":"11","B":"7","C":"5","D":"8"},"answer":"C"},{"id":"learncoder_37_306","stem":"<p>一个栈的入栈序列为1,2,3,…,n,其出桟序列是p1,p2,p3,…,pn。若p2=3,则p3可能取值的个数是( )。[全国联考2013年]</p><p><span></span></p>","key_points":"知识点.练习.专业课练习.数据结构.栈队列和数组","analysis":"<p><br>  栈、队列和数组——栈和队列的基本概念<br>  【解析】当p1=1时,1入栈立即出栈,2入栈,3入栈立即出栈,则化可能为2,即2出栈。当p1=2时,1入栈,2入栈立即出栈,3入栈立即出栈,则p3可能为1,即1出栈。在3之后入栈的4,5,…,n都有可能是p3的取值,一直入栈直到该元素入栈时立即出栈。</p><p><span></span></p>","type":"choice","options":{"A":"无法确定","B":"n-3","C":"n-1","D":"n-2"},"answer":"C"},{"id":"learncoder_38_22457","stem":" (1)设二叉树根结点所在层次为1,树的深度d为距离根最远的叶结点所在的层次.1)试精确给出深度为d的完全二叉树的不同二叉树棵数.2)试精确给出深度为d的满二叉树的不同二叉树棵数。 (2)假设二叉树采用二叉链存储结构,设计一个算法,计算一棵给定二叉树的所有结点数。 (3)假设二叉树采用二叉链存储结构,设计一个算法,计算一棵给定二叉树的所有叶子结点数。 (4)假设二叉树采用二叉链存储结构,设计一个算法,利用结点的右孩子指针rchild将一棵二叉树的叶子结点按照从左往右的顺序串成一个单链表(在题目中定义两个指针, head与tail,其中head指向第一个叶子结点, head初值为NULL, tail指向最后一个叶子结点)。(5)在二叉树的二叉链存储结构中,增加一个指向双亲结点的p狐ent指针,设计一个算法,给这个 指针赋值,并输出所有结点到根结点的路径。(6)假设满二叉树b的先序遍历序列已经存在于数组中(在解题过程中,此数组名称可自定义,长 度为n),设计一个算法将其转换为后序遍历序列。(7)假设二叉树采用二叉链存储结构,设计一个算法,求二叉树b中值为x的结点的层号。(8)以数据集合(2, 5, 7, 9, 13)为权值构造一棵赫夫曼树,并计算其带权路径长度。(9)对于一个堆栈,若其入栈序列为1, 2, 3, ⋯, n,不同的出入栈操作将产生不同的出栈序列。 其出栈序列的个数正好等于结点个数为n的二叉树的个数,且与不同形态的二叉树一一对应。请简要叙述一种从堆栈输入(圃定为1, 2, 3, ., n)和输出序列对应一种二叉树形态的方法,并以入栈序列1,2, 3 (n=3)为例确定所有的二叉树。(10)二叉树的双序遍历是指:对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的 左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树。试写出执行这种双序遍历的算法。( 11)设中序线索二叉树的类型为TBTNode* InThItee; 1)设计算法,在一棵中序线索二叉树中寻找结点t的子树上中序下的最后一个结点0 2)设计算法,在一棵中序线索二叉树中寻找结点t的中序下的前驱0 3)设计算法,在一棵中序线索二叉树中寻找结点t的前序下的后继.","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"\t(1)答 1)根据二叉树的性质,在第d层最多有2^(d-1)个结点。因此,深度为d的不同完全二叉树有2^(d-1)棵.2)深度为d的满二叉树只有1棵。(2)分析<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image26.png\">(3)分析<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image27.png\"><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image28.png\">(4)分析<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image29.png\"><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image30.png\">(5)<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image31.png\"><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image32.png\">(6)分析<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image33.png\">(7)分析<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image34.png\">(8)分析 此题是简单题,按照赫夫曼二叉树的构造过程直接构造即可,如图6-51所示WPL(2+5) ×3+(7+9+1 3) ×2=79 说明:在赫夫曼二叉树的构造过程中,每次需要选取权值最 小的两个结点来生成新结点。如果有3个以上的结点值相同,则 可以任取两个来生成新结点,虽然得到的二叉树不同,但是其带 权路径长度总是相同的。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image35.png\">(9)分析我们讲过的二叉树的遍历都是递归的,递归要用到系统栈。其实在二叉树的遍历序列中,先序遍历 序列即为各结点在入栈时进行打印所得的序列,中序遍历序列即为各结点在出栈时进行打印所得的序列, 明自了这一点,本题就容易解决了。答: 1)由于二叉树先序遍历序列和中序遍历序列可唯一确定一棵二叉树,因此若入栈序列为1, 2, 3, ⋯, n,相当于先序遍历序列是1, 2, 3, ⋯, n,出栈序列就是对应的二叉树的中序遍历序列。有了进栈和出栈序列,就相当于知道了一棵二叉树的先序和中序遍历序列,即确定了对应的二叉树。2)当结点入栈序列为(1, 2, 3)时,出栈序列可能为(3, 2, 1)、 (2, 3, 1)、 (2, 1, 3)、 (1, 3,2〕、 (1, 2, 3)。因此,依次构造的二叉树如图6-52所示(树下方为生成这棵树的两个序列)。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image36.png\">(10)解只要稍改一下二叉树的前序或中序遍历算法即可。算法代码如下: <img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image37.png\">(11)解 1)在一棵中序线索二叉树中,寻找某结点t为根的子树上中序的最后一个结点。 算法的思路:沿结点t的右子树链一直走下去,直到遇到其右指针为右线索的结点为止,该结点即 为所求。 算法代码如下:<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image38.png\">2)在一棵中序线索二叉树中,寻找某结点t的中序下的前驱。 算法的思路:若结点t有左线索,则其左线索所指结点即为其中序前驱;若无左线索,则其左子树 中中序的最后一个结点即为它的中序前驱。 算法代码如下: <img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image39.png\"><img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image40.png\">3)在一棵中序线索二叉树中,寻找结点t的前序下的后 继。图6-53所示的二叉树是一棵中序线索二叉树,前序遍历的结果是abdgcehfo分析这个示例可知:① a有左子女b, a的前序下的后继为b② d无左子女但有右子女g, d的前序下的后继是g③ g既无左子女又无右子女, g的前序下的后继为c, C 可从g沿右线索链到a, a的右子女即为g的前序下的后继。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image41.png\">算法代码如下:<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image42.png\">"},{"id":"learncoder_38_22452","stem":"若X是后序线索二叉树中的叶结点,且X存在左兄弟结点Y,则x的右线索指向的是( ).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"根据后序线索二叉树的定义, x结点为叶子结点且有左兄弟,那么这个结点为右孩子结点, 利用后序遍历的方式可知x结点的后继是其父结点,即其右线索指向的是父结点.","type":"choice","options":{"A":"X的父结点","B":"以Y为根的子树的最左下结点","C":"X的左兄弟结点Y","D":"以Y为根的子树的最右下结点"},"answer":"A"},{"id":"learncoder_38_22451","stem":"已知三叉树丁中6个叶结点的权分别是2, 3, 4, 5, 6, 7, T的带权(外部)路径长度最小是( ).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"本题考查赫夫曼n叉树的构造方法。赫夫曼二叉树是赫夫曼n叉树的一种特例,对于结点 数目大于等于2的待处理序列,都可以构造赫夫曼二叉树,但是不一定能构造赫夫曼n叉树。当发现无 法构造时,需要补上权值为0的结点让整个序列凑成可以构造赫夫曼n叉树的序列。例如,序列2, 3,4, 5, 6, 7就不能直接构造赫夫曼三叉树,需要补上一个权值为0的结点。此时结点序列为: 0, 2, 3,4, 5, 6, 70这样就可以类比赫夫曼二叉树的构造方法,每次挑选权值最小的三个结点构造一棵三叉树, 根结点权值取为这三个结点的权值之和,从原结点集删除这三个结点,并将树根结点加入结点集;重复 上述过程,从新的结点集中选取结点构造三叉树,直到所有结点都被加入生成树中。本题具体求解过程如下‥1)选取结点0, 2, 3构造三叉树,根权值为5.2)选取结点5, 4, 5构造三叉树,根权值为14.3)选取结点14, 6, 7构造三叉树,根权值为27,构造过程结束,生成树如图6-62所示。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image24.png\">","type":"choice","options":{"C":"54","D":"56","B":"46","A":"27"},"answer":"B"},{"id":"learncoder_38_22454","stem":"若对图6-41所示的二叉树进行中序线索化,则缉点x的左、右 线索指向的结点分别是( )。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"如图6-63所示,二叉树进行中序线索化,则元素x的左、右线索指向的元素为b和a,因 此本题选D<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image25.png\">","type":"choice","options":{"A":"c,c","C":"d,c","B":"c, a.","D":"b, a"},"answer":"D"},{"id":"learncoder_38_22453","stem":"在任意一棵非空二叉排序树Tl中,删除某结点v之后形成二叉排序树T2,再将v插入T2形成 二叉排序树T30下列关于Tl与T3的叙述中,正确的是( )。I.若v是丁工的叶结点,则Tl与≠不同II.若v是Tl的叶结点,则Tl与T3相同Ⅲ.若v不是Tl的叶结点,则Tl与T3不同 Ⅳ.若v不是Tl的叶结点,则Tl与T3相同","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"在一棵二叉排序树中删除一个结点后再将此结点插入到二叉排序树中,如果删除的结点是 叶子结点,那么在插入结点后,后来的二叉排序树与删除结点之前相同。如果删除的结点不是叶子结点, 那么再插入这个结点后,后来的二叉树可能发生变化,不完全相同","type":"choice","options":{"A":"仅Ⅰ、Ⅲ","B":"仅I、 Ⅳ","D":"仅Ⅱ、 Ⅳ","C":"仅Ⅱ、Ⅲ"},"answer":"C"},{"id":"learncoder_38_22445","stem":"若一棵二叉树的前序遍历序列和后序遍历序列分别为1, 2, 3, 4和4, 3, 2, 1,则该二叉树 的中序遍历序列不会是( )。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"满足题干的二叉树必须满足树中不存在双分支结点,则可以画出图6-57所示的3种二叉树 来排除选项。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image19.png\">","type":"choice","options":{"D":"4, 3, 2, 1","C":"3, 2, 4, 1","A":"1, 2, 3, 4","B":"2, 3, 4, 1"},"answer":"C"},{"id":"learncoder_38_22448","stem":"若一棵二叉树的前序遍历序列为a、 e、 b、 d、 C,后序遍历序列为b、 C、 d、 e、 a,则根结点的 孩子结点( ).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"根据题干的前序和后序遍历序列很容易看出选项C是不可能的。做出满足先序遍历序列的 选项A和选项B的所有情况,如图所示。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image22.png\">可以看出图中,第一棵二叉树是不符合遍历序列的,因此本题选A","type":"choice","options":{"C":"只有e、 C","A":"只有e","D":"无法确定","B":"只有e、b"},"answer":"A"},{"id":"learncoder_38_22447","stem":"对于下列关键字序列,不可能构成某二叉排序树中一条查找路径的序列是( )。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"由选项A做出查找路径的一部分,如图所示,发现在91的左子树中出现了大于91的 94,因此选项A不可能。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image21.png\">","type":"choice","options":{"D":"12, 25, 71, 68, 33, 34","A":"95, 22, 91, 24, 94, 71","B":"92, 20, 91, 34, 88, 35","C":"21, 89, 77, 29, 36, 38"},"answer":"A"},{"id":"learncoder_38_22444","stem":"若一棵完全二叉树有768个结点,则该二叉树中叶子结点的个数是( ).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"由完全二叉树的高度和结点个数的关系,可得本题完全二叉树的高度为10.第10层上的结点个数为768一((2^9)-1)=257 (这些全为叶子结点),第9层上的非叶结点为(257-1)/2+1= 129,则第9层上的叶子结点个数为(2^(9-1))-129=127,则叶子结点总数为257+127=384.","type":"choice","options":{"C":"384","B":"258","D":"385","A":"257"},"answer":"C"},{"id":"learncoder_38_22446","stem":"已知一棵有2011个结点的树,其叶结点个数为116,该树对应的二叉树中无右孩子的结点的个数是( ).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"可以采用特殊情况法来解此题。可举以下特例: 如图6-58所示,则对应的二叉树中仅有前115个结点有右孩子<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image20.png\">","type":"choice","options":{"C":"1895","D":"1896","A":"115","B":"116"},"answer":"D"},{"id":"learncoder_38_22450","stem":"若将关键字1, 2, '3, 4, 5, 6, 7依次插入到初始为空的平衡二叉树丁中,则丁中平衡因子为 0的分支结点的个数是( )。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"利用7个关键字构建平衡二叉树T,平衡因子为0的分支结点个数为3,构建的平衡二叉树如图6-61所示<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image23.png\">","type":"choice","options":{"D":"3","B":"1","C":"2","A":"O"},"answer":"D"},{"id":"learncoder_38_22449","stem":"若平衡二叉树的高度为6,且所有非叶结点的平衡因子均为1,则该平衡二叉树的结点总数为 ( )。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"高度为6的平衡二叉树最少有20个结点,题干指出每个非叶子结点的平衡因子均为1,即暗示了这种最少结点的极端情况,因为增加一个结点可以使得 某个结点的平衡因子变为0,而不会破坏平衡性。因此本题选B","type":"choice","options":{"B":"20","C":"32","D":"33","A":"12"},"answer":"B"},{"id":"learncoder_38_22442","stem":"在一棵度数为4的树丁中,若有20个度为4的结点, 10个度为3的结点, 1个度为2的结点, 10个度为1的结点,则树丁的叶结点个数是( )。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"设树中度(指的是子树根结点的分支数)为i (i=0, 1, 2, 3, 4)的结点数为Ni,树中总结 点数为N,则树中各结点的度之和等于N二1,即有<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image18.png\">","type":"choice","options":{"A":"41","D":"122","B":"82","C":"113"},"answer":"B"},{"id":"learncoder_38_22443","stem":"对n (n≧2)个权值均不相同的字符构成赫夫曼树,下列关于该赫 夫曼树的叙述中,错误的是( )。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"赫夫曼树为带权路径长度最小的二叉树,但不一定是完全二叉树。赫夫曼树中没有度为1的 结点,故选项B正确。构造赫夫曼树时,最先选取两个权值最小的结点作为左、右子树,构造一棵新的二叉树,故选项C正确。赫夫曼树中任一非叶结点P的权值为其左、右子树根结点权值之和,其权值不 小于其左、右子树根结点的权值, 在与结点P的左、右子树根结点处于同一层的结点中,若存在权值大于结点P权值的结点Q,那么结点Q与其兄弟结点中权值较小的一个应该与结点P作为左、右子树构造 新的二叉树,综上可知,赫夫曼树中任一非叶结点的权值一定不小于下一层任一结点的权值,故选项D正确。因此选项A是错误的","type":"choice","options":{"B":"树中一定没有度为1的结点","D":"树中任一非叶结点的权值一定不小于下一层任一结点的权值","A":"该树一定是一棵完全二叉树","C":"树中两个权值最小的结点一定是兄弟结点"},"answer":"A"},{"id":"learncoder_38_22439","stem":"在图6-38所示的二叉排序树中,满足平衡二叉树定义的是( )。 (此题可在读完第9章查找 的相关内容后再做)","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"根据平衡二叉树的定义,任意结点左、右子树的高度差的绝对值不超过10选项A、 C、 D的根结点左、右子树差都不满足定义。因此本题选B","type":"choice","options":{"D":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image6.png\">","B":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image4.png\">","A":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image3.png\">","C":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image5.png\">"},"answer":"B"},{"id":"learncoder_38_22441","stem":"将森林转换为对应的二叉树,若在二叉树中,结点u是结点v的父结点的父结点,则在原来的森 林中, u和v可能具有的关系是( ).I.父子关系 Ⅱ.兄弟关系 Ⅲ. u的父结点与v的父结点是兄弟关系","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"若u和v的关系如图6-54所示,则根据左孩子右兄弟原则, v跟自己的父结点是兄弟关系, 都是u的孩子。所以图6-54对应的是父子关系。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image16.png\">若在森林中(注意不是在二叉树中), u的父结点与v的父结点是兄弟关系,则转换成二叉树后,它们形成单边右斜的关系,而u和v分别在它们各自的左子树内,不可能在同一条路径上,所以Ⅲ是不可能的","type":"choice","options":{"B":"1和II","A":"只有Ⅱ","C":"1和Ⅲ","D":"1、 II和Ⅲ"},"answer":"B"},{"id":"learncoder_38_22438","stem":"给定二叉树如图6-37所示。设N代表二叉树的根, L代表根结点的左子树, R代表根结点的右子树。若遍历后的结点序列为3, 1, 7, 5,6, 2, 4,则其遍历方式是( ).<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image2.png\">","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"根据遍历结果,很容易看出右子树先被访问,相当于左、右颠倒的中序遍历","type":"choice","options":{"B":"NRL","C":"RLN","A":"LRN","D":"RNL"},"answer":"D"},{"id":"learncoder_38_22437","stem":"若度为M的赫夫曼树中,叶子结点个数为n,则非叶子结点的个数为( )。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"在构造度为m的赫夫曼树的过程中,每次把皿个叶子 结点合并为一个父结点(第一次合并可能少于皿个子结点),每次合并减少m十个结点,从n个叶子结点减少到最后只剩一个父结点共需要「(n-1)/(m-1)「次合并,每次合并增加一个非叶子结点。因此本题选c","type":"choice","options":{"C":"[(n-1)/(m-1)]","D":"[n/(m-1)]-1","B":"[n/m]一1","A":"n-1"},"answer":"C"},{"id":"learncoder_38_22440","stem":"已知一棵完全二叉树的第6层(设根.为第1层)有8个叶结点,则该完全二叉树的结点个数最多是( ).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"根据完全二叉树的定义,此树的前6层应该是满二叉树,共有(2^6)-1=63个结点。第.6层有8 个叶子结点,说明另外32-8=24个结点不是叶子结点,最多各有2个孩子结点。而该树不可能有第8层存在,所以结点总数最多是63+24×2=111个","type":"choice","options":{"D":"119","B":"52","C":"111","A":"39"},"answer":"C"},{"id":"learncoder_38_22432","stem":"一棵髙度为h的完全二叉树至少有(\t)个结点。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"高度为h的完全二叉树,结点最少时即为最底层只有1个结 点的情况,因此只需求前h-1层的结点数,然后对结果加1即可。前h-1层的结点数为2h ̄Ll个,因此 高度为h的完全二叉树,结点最少为2b-1","type":"choice","options":{"C":"( 2^(h-1))","D":"2^h","B":"(2^(h-1))-1","A":"(2^h)-1"},"answer":"C"},{"id":"learncoder_38_22436","stem":"判断线索二叉树中p结点有右孩子结点的条件是( ).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"在线索二叉树中:1)如果1Tg等于0,则表示Ichild为指针,指向结点的左孩子;如果1Tag等于1,则表示1child为 线索,指向结点的直接前驱02)如果rTag等于0,则表示rchild为指针,指向结点的右孩子;如果rTag等于1,则表示rchild为 线索,指向结点的直接后继。 因此本题选C.","type":"choice","options":{"B":"p->rchild!=NULL","D":"p->rtag=l","A":"p! =NULL","C":"p->rtag=0"},"answer":"C"},{"id":"learncoder_38_22435","stem":"对一棵满二叉树,共有n个结点和个叶子结点,高度为h,则(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"对于高度为h的满二叉树, n=2^0+2^1+2^2+⋯ +2^(h-1)=2^(h-1), m=2^(h-1).因此本题选D.","type":"choice","options":{"D":"n=(2^h)-l","B":"h+m=2h","C":"m=h-l","A":"n=h+m"},"answer":"D"},{"id":"learncoder_38_22434","stem":"一棵具有1025个结点的二叉树高度h,为(\t).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"当每层只有一个结点时,二叉树高度最高,为1025;当每层结点 数与同高度的完全二叉树对应层的结点数相同时,二叉树高度最低。完全二叉树结点数与高度的关系为h=「log2(n+1)甘Iog2(1025+1)「=11 0因此本题选C.","type":"choice","options":{"B":"10","D":"12-1024","A":"11","C":"11-1025"},"answer":"C"},{"id":"learncoder_38_22433","stem":"一棵高度为h的完全二叉树至多有(\t)个结点。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"高度为h的完全二叉树,结点最多时,其结点数等于同高度 的满二叉树的结点数,因此高度为h的完全二叉树结点最多为2b-1个.","type":"choice","options":{"A":"(2^h)-1","C":"( 2^(h-1))","D":"2^h","B":"(2^(h-1))-1"},"answer":"A"},{"id":"learncoder_38_22429","stem":" n个结点的线索二叉树上含有的线索数为(\t).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"n+1","A":"2n","B":"n-1","D":"n"},"answer":"C"},{"id":"learncoder_38_22426","stem":"在二叉树结点的先序序列、中序序列和后序序列中,所有叶子结点在遍历序列中的先后顺序(\t).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"不论哪一种遍历方式,所得遍历序列中叶子结点的相对位置是不变的.","type":"choice","options":{"C":"先序和中序相同,而与后序不同","A":"都不相同","B":"完全相同","D":"中序和后序相同,而与先序不同"},"answer":"B"},{"id":"learncoder_38_22425","stem":"若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用()遍历方法最合适。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"要实现交换所有分支结点左、右子树的位置,可以递归地进 行如下操作:先递归交换左子树中的所有分支结点,再递归交换右子树中的所有分支结点,最后对根结 点交换其所有子树位置。这对应了先遍历左子树,再遍历右子树,最后访问根结点的后序遍历方式。因 此本题选C.","type":"choice","options":{"B":"中序","A":"前序","D":"按层次","C":"后序"},"answer":"C"},{"id":"learncoder_38_22428","stem":"引入二叉线索树的目的是( ).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"在一般的二叉树中,我们只知道某个结点的左、右孩子,并 不能知道某个结点的直接前驱和直接后继,如果能够知道″前驱″和″后继”信息,就可以把二叉树看 作一个链表结构,从而可以像遍历链表那样来遍历二叉树,提高效率。因此本题选A.","type":"choice","options":{"B":"为了能在二叉树中方便地进行插入与删除","D":"使二叉树的遍历结果唯一","C":"为了能方便地找到双亲","A":"加快查找结点的前驱或后继的速度"},"answer":"A"},{"id":"learncoder_38_22427","stem":"若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则X的前驱为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"在中序线索二叉树中, x的前驱即为 中序遍历序列中x的前驱。对于中序遍历,要访问x,必须把x左子树中的结点都访问完才可以,因此 x左子树中最后一个被访问的结点即为x的前驱结点;而x左子树中的最右边的结点即为左子树中最后 一个被访问的结点。因此本题选c","type":"choice","options":{"B":"X的右子树中最左边的结点","A":"X的双亲","D":"X的左子树中最右边的叶结点","C":"X的左子树中最右边的结点"},"answer":"C"},{"id":"learncoder_38_22424","stem":"树的后序遍历序列等同于该树对应的二叉树的( )","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"树的先序遍历对应于二叉树的先序遍历。树 的后序遍历对应于二叉树的中序遍历。因此本题选B","type":"choice","options":{"C":"后序遍历序列","B":"中序遍历序列","A":"先序遍历序列"},"answer":"B"},{"id":"learncoder_38_22431","stem":"设n与m为一棵二叉树上的两个结点,在中序遍历时,n在m前的条件是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"本题用排除法比较好。通过反例排除了A、 B、 D3个选项,如图6-49所示。如图6-49a所示, n在皿的右方,遍历序列中皿与n的相对位置为: ⋯m⋯n⋯,因此选项A错, 将其排除。 如图6-49b所示, n是m的祖先,遍历序列中皿与n的相对位置为: ⋯m⋯n⋯,因此选项B错, 将其排除。 如图6-49c所示, n是m的子孙,遍历序列中m与n的相对位置为: ⋯m⋯n⋯,因此选项D错, 将其排除。 因此本题选C.<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image15.png\">","type":"choice","options":{"A":"n在m的右方","C":"n在m的左方","D":"n是m的子孙","B":"n是皿的祖先"},"answer":"C"},{"id":"learncoder_38_22430","stem":"在一棵非空二叉树的中序遍历序列中,根结点的右边(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"中序遍历的规则为:先中序遍历左子树,然后访问根结点, 最后中序遍历右子树。在中序遍历序列中,根结点将左子树上的所有结点与右子树上的所有结点分割开 来。根左边的序列包含左子树上的所有结点,根右边的序列包含右子树上的所有结点。因此本题选A","type":"choice","options":{"C":"只有左子树上的部分结点","B":"只有右子树上的部分结点","D":"只有左子树上的所有结点","A":"只有右子树上的所有结点"},"answer":"A"},{"id":"learncoder_38_22423","stem":"有关二叉树下列说法正确的是( )","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"由树的度的定义可知,树中各个结点度的最大值为树的度, 单个结点也可以称为一棵树。因此,对于一棵二叉树,当只有一个结点的时候,其度为00因此本题选B","type":"choice","options":{"C":"二叉树中至少有一个结点的度为2","B":"一棵二叉树的度可以小于2","A":"二叉树的度为2","D":"二叉树中任何一个结点的度都为2"},"answer":"B"},{"id":"learncoder_38_22420","stem":"设森林F对应的二叉树为B,它有ni个结点,E的根为p, p的右子树结点个数为m森林F中第一棵树的结点个数是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"由转换规则可知,二叉 树中除了左子树和根结点来源于原森林中第一棵树,其余结点来源于 森林中的其他树,其他树的结点总数为n,则第一棵树的结点个数为 m-no 因此本题选A","type":"choice","options":{"A":"m-n","C":"n+1","D":"条件不足,无法确定","B":"m-n-1"},"answer":"A"},{"id":"learncoder_38_22419","stem":"设树T的度为4,其中度为1、2、3和4的结点个数分别为4、2、1、1,则T中的叶子数为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"直接套用二叉树性质1扩展部分所讲的公式: no=1+n2+2n3+⋯ +(m-1)n血,可得丁中叶子结点数为 1+2+2×1+3×1=80 因此本题选D.","type":"choice","options":{"D":"8","B":"6","A":"5","C":"7"},"answer":"D"},{"id":"learncoder_38_22422","stem":"\t假设赫夫曼二叉树中只有度为0或2的结点,有n个叶子的赫夫曼树的结点总数为()。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"本题考查赫夫曼树的性质。赫夫曼树中只有度为2与度为0的结点,由二叉树性质1可知, n个叶子结点的赫夫曼树有n-1个度为2的结点,则总结点数为2n二10 因此本题选D","type":"choice","options":{"B":"2n","A":"不确定","C":"2n+1","D":"2n-1"},"answer":"D"},{"id":"learncoder_38_22421","stem":"在一棵三叉树中,度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点数为()个。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"由公式no=1+n计2n3+⋯ +(m-1)n皿可知,度为0的结点个数为1+1+2×2=6.因此本题选. C","type":"choice","options":{"C":"6","D":"7","A":"4","B":"5"},"answer":"C"},{"id":"learncoder_38_22418","stem":"已知一算术表达式的中缀形式为A+BxC-D/E,后缀形式为ABCx+DE/-,其前缀形式为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"平时用的中 缀式其实是一棵以运算符为双分支结点,以操作数为叶子结点的二叉 树按照中序遍历所得的序列。对应的后缀式是这个二叉树按照后序遍 历所得的序列,相应的前缀式即为其先序遍历所得的序列。根据两序 列做出相应的二叉树,对其进行先序遍历,就可得到其前缀式的形式。 所做的二叉树如图6-48所示。对这棵二叉树进行先序遍历得一十AxBC/DE,因此本题选D<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image14.png\">","type":"choice","options":{"C":"一+XABC/DE","B":"-A+BxCD/E","D":"-+AxBC/DE","A":"-A+BxC/DE"},"answer":"D"},{"id":"learncoder_38_22417","stem":"设有13个值,用它们组成一棵赫夫曼树,则赫夫曼树共有(\t)个结点。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"13个值肯定是13个叶子结点, 又因为赫夫曼树没有单分支结点,所以双分支结点的个数为13-1=12个,因此总结点数为13+1?=25个,本题选D","type":"choice","options":{"B":"12","C":"26","A":"13","D":"25"},"answer":"D"},{"id":"learncoder_38_22409","stem":" 假设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为( )。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"高度一定,结点最少的情况如图6-42所示。除了最上层有一个结点以外,其余hl层均有两个结点,结点总数为2(h-1)+1≒2h-10因此本题选B<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image9.png\">","type":"choice","options":{"B":"2h-1","D":"h+1","C":"2h+1","A":"2h"},"answer":"B"},{"id":"learncoder_38_22413","stem":"\t一棵二叉树的后序遍历序列为D, A, B, E, C,中序遍历序列为D, E, B, A, C,则先序遍 历序列为( ).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"做法类似于第Ⅱ题,后序序列中的最后一个结点为整 棵树的根结点,根据中序序列判断左、右子树中结点的情况。最终做出的二叉树如图6-46所示。由图6-46可知,先序遍历序列为c, E, D, B, A,因此本题选D<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image12.png\">","type":"choice","options":{"A":"A, C, B, E, D","C":"D, E, A, B, C","D":"C, E, D, B, A","B":"D, E, C, B, A"},"answer":"D"},{"id":"learncoder_38_22410","stem":"如果图6-36所示的二叉树是由森林转化而来的,那么原森林有(\t)个叶子结点。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image1.png\">","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"由二叉树与森林的转化方法可知其中C、 D、 F、 G、 I、 J是叶子结点。因此本题选C","type":"choice","options":{"C":"6","D":"7","A":"4","B":"5"},"answer":"C"},{"id":"learncoder_38_22416","stem":"假设赫夫曼二叉树中只有度为0或2的结点,根据使用频率为5个字符设计的赫夫曼编码,不可能的是(本题与14题不同)(\t).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"赫夫曼树中只有度为0或2 的结点,由选项D可以做出如图6-47所示的二叉树。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image13.png\">","type":"choice","options":{"B":"0000, 0001, 001, 01, 1","D":"00, 100, 101, 110, 111","C":"000, 001, 01, 10, 11","A":"000, 001, 010, O11, 1"},"answer":"D"},{"id":"learncoder_38_22415","stem":"根据使用频率为5个字符设计的赫夫曼编码,不可能的是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"赫夫曼编码为前缀码,即编码中任何一个序列都不是另一个序列的前缀。选项C中, 10是100的前缀,不是赫夫曼编码","type":"choice","options":{"A":"111,110, 10, 01, 00","D":"001,000,01, 11,10","B":"000,001,010, O11, 1","C":"100,11, 10, 1,0"},"answer":"C"},{"id":"learncoder_38_22412","stem":"一棵二叉树的先序遍历序列为A, B, C, D, E, F,中序遍历序列为C, B, A, E, D, F,则 后序遍历序列为( ).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"根据题目中的 两个遍历序列确定二叉树的过程如下: 1)先序序列第一个结点即为整棵树的根结点。在中序序列中, 根结点左边为左子树上的结点,右边为右子树上的结点。由此得到如图6-44所示的结果2)对于左子树中的结点C、 B,由先序序列可知, B是根结 点;由中序序列可知, C是B的左子树根结点。对于右子树中的结点E、 D、 F,由先序序列可知, D是根结点;由中序序列可知, E是其左子树根结点, F是其右子树根结点。由此可得到如图6-45所示的结果。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image11.png\">","type":"choice","options":{"D":"不确定","A":"C, B, E,F9 D,A","B":"F,E, D, C, B, A","C":"C, B, E, D, F, A"},"answer":"A"},{"id":"learncoder_38_22411","stem":"\t一棵二叉树的先序遍历序列和其后序遍历序列正好相反,则该二叉树一定是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"对于高度等于其结点数的二叉树,每层只有一个结点,假设从上向下分别为A, B, c, D,E, F,则其先序遍历序列为A, B, c, D, E,耽后序遍历序列为F, E, D, C, B, A,如图6-43所示。<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image10.png\">","type":"choice","options":{"D":"高度等于其结点数","B":"完全二叉树","A":"空树或者只有一个结点","C":"二叉排序树"},"answer":"D"},{"id":"learncoder_38_22414","stem":"一棵二叉树的先序遍历序列为E, F, H, I, G, J, K,中序遍历序列为H, F, I, E, J, K, G, 则该二叉树根结点的右孩子为( ).","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"本题考查根据遍历序列确定二叉树。","type":"choice","options":{"C":"G","D":"H","B":"F","A":"E"},"answer":"C"},{"id":"learncoder_38_22404","stem":"有10个叶子结点的二叉树中有(\t)个度为2的结点。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"叶子结点个数比度为2的结点的个数多1,可知本题选B","type":"choice","options":{"A":"8","B":"9","C":"10","D":"11"},"answer":"B"},{"id":"learncoder_38_22403","stem":"按照二叉树的定义,具有3个结点的二叉树有(\t)种","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<img src=\"https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第6章)/image8.png\">","type":"choice","options":{"D":"6","C":"5","A":"3","B":"4"},"answer":"C"},{"id":"learncoder_38_22402","stem":"树最适合用来表示(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"本题考查树的基本概念","type":"choice","options":{"C":"元素之间具有分支层次关系的数据","A":"有序元素","B":"无序元素","D":"元素之间无联系的数据"},"answer":"C"},{"id":"learncoder_38_22407","stem":"一棵高度为4的完全二叉树至少有\t(\t)个结点。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"其1-3层是一个满二叉树,结点数为7,而第4层至 少有1个结点,因此本题选C","type":"choice","options":{"B":"7","A":"15","C":"8","D":"16"},"answer":"C"},{"id":"learncoder_38_22406","stem":"一棵完全二叉树上有1001个结点,其中叶子结点的个数是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"本题可分两种情况讨论:.①没有单分支结点,设叶子结点的个数为n, n为整数,则有n+n-1=1001,解得n=501; ②有1个单分支结点,则有n+n-1+1=1001, n无解。 综上可知此题选D","type":"choice","options":{"D":"501","C":"505","A":"250","B":"500"},"answer":"D"},{"id":"learncoder_38_22405","stem":"如果一棵二叉树有10个度为2的结点,5个度为1的结点,则度为0的结点个数为()。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"叶子结点个数比度为2的结点的个数多1,可知本题选B","type":"choice","options":{"D":"不确定","B":"11","A":"9","C":"15"},"answer":"B"},{"id":"learncoder_38_22408","stem":"一棵高度为5的完全二叉树至多有\t(\t)个结点。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"高度二定,结点数最多的完全二叉树即为同高度的满 二叉树。高度为5的完全二叉树结点最多有(2^5)-1=31个,因此本题选C","type":"choice","options":{"D":"10","B":"32","C":"31","A":"16"},"answer":"C"},{"id":"learncoder_38_19150","stem":"什么是前缀编码?举例说明如何利用二叉树来设计二进制的前缀编码。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"前缀码是一编码,不是任何其他编码前缀的编码。例如,0和01就不是前缀码,因 为编码0是编码01的前缀。仅从编码来看,0和01是前缀码,但因历史的原因,它不被称为前 缀码,而是把一编码不是另一编码前缀的编码称为前缀码。利用二叉树可以构造前缀码,例如, 以A、B、C、D为叶子可构成二叉树,将左分支解释为0,右分支解释成1,从根结点到叶子结点的 0、1串就是叶子的前缀码。用哈夫曼树可构造出最优二叉树,使编码长度最短。","type":"short_answer","answer":"见解析。"},{"id":"learncoder_38_19153","stem":"要求二叉树按二叉链表形式存储,编写算法实现:(1)建立二叉树的算法。(2)判别给定的二叉树是否是完全二叉树的算法。(完全二叉树的定义为:深度为K,具有N个结点的二叉树的每个结点都与深度为K的满二 叉树中编号从的结点一一对应。此题以此定义为准)","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是二叉树的建立算法。二叉树是递归定义的,以递归方式建立 最简单。判定是否是完全二叉树,可以使用队列,在遍历中利用完全二叉树“若某结点无左子女 就不应有右子女”的原则进行判断。完全二叉树证明还有很多方法。判断时易犯的错误是证明 其左子树和右子数都是完全二叉树,由此推出整棵二叉树必是完全二叉树的错误结论。","type":"short_answer","answer":"\ttypedef struct BiNode {ElemType data ;BiNode * lchild ;BiNode * rchild ;\t}* BiTree ; BiTree Great( ) //建立二叉树的二叉链表形式的存储结构 { ElemType x ; BiTree bt ;scanf( \" % d\",&x) ; //本题假定结点数据域为整型if(x = = 0) bt = null;else if(x>0){ bt= ( BiNode * ) malloc( sizeof( BiNode));\tbt->data = x; bt->lchild = creat( ) ; bt->rchild = creat();else error(\"输入错误\");return (bt);}//结束 BiTreeint JudgeComplete(BiTree bt) //判断二叉树是否是完全二叉树,如是,返回1,否则, 返回0{int tag = 0; BiTree p = bt, Q[]; //Q是队列,元素是二叉树结点指针,容量足够大 if(p= = null) return (1);QueueInit(Q) ; QueueIn(Q,p) ; //初始化队列,根结点指针入队 while ( ! QueueEmpty ( Q )) { p = QueueOut( Q) ;//出队 if(p->lchild && ! tag) QueueIn( Q ,p->lchild) ; //左子女入队 else {if(p->lchild) return 0,;//前边已有结点为空,本结点不空 else tag=1;//首次出现结点为空\tif (p->rchild && ! tag) Queuein( Q,p->rchild) ; //右子女入队 else if(p->rchild) return 0 ; else tag= 1 ;}//while return 1 ; ( //JudgeComplete"},{"id":"learncoder_38_19147","stem":"用一维数组存放的一棵完全二叉树:ABCDEFGHIJKLo请写出后序遍历该二叉树的访 问结点序列。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是二叉树的遍历。完全二叉树的数组存放形式可以按从左到 右,从上到下画出该二叉树,对其进行后序遍历即可得到后序序列。","type":"short_answer","answer":"HIDJKEBLFGCA"},{"id":"learncoder_38_19154","stem":"假设以双亲表示法作树的存储结构,写出双亲表示的类型说明,并编写求给定的树的深 度的算法。(注:已知树中的结点数)","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是树的不同形式的存储结构,求树的高度。由于以双亲表示法 作树的存储结构,找结点的双亲容易。因此我们可求出每一结点的层次,取其最大层次就是树有 深度。对每一结点,找其双亲,双亲的双亲,直至(根)结点双亲为0为止。","type":"short_answer","answer":"int Depth(Ptree t) //求以双亲表示法为存储结构的树的深度{int maxdepth = 0 ;for(i= 1 ;i< = t. n;i++){temp = 0; f=i;while(f>0) j temp++; f=t. nodes[f].parent;} //深度加1,并取新的双亲 if( temp>maxdepth) maxdepth = temp ; //最大深度更新 }return ( maxdepth) ; //返回树的深度} //结束 Depth"},{"id":"learncoder_38_19148","stem":"已知一棵二叉树的先序、中序和后序序列如卞,其中有部分空缺,请画出该二叉树。先序序列:_B C_EFG_IJK_中序序列:CBED_GA J_H_L后序序列:_E_FD_J_L_HA","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是二叉树的遍历。由题意在后续序列中找到根结点为A,在中 序中知左子树的序列,在前序中知左子树的根为B,以此不断重复推导可以得到结论。","type":"short_answer","answer":"前序序列:ABCDEFGHIJKL中序序列:CBEDFGAJIHKL后序序列:CEGFDBJILKHA"},{"id":"learncoder_38_19151","stem":"如果一棵哈夫曼树T有n0个叶子结点,那么,树T有多少个结点?(要求给出求解过程)","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是哈夫曼树的性质。哈夫曼树只有度为0的叶子结点和度为 2的分支结点,设数量分别为n0和n2,则树的结点数n= n0+n2另根据二叉树性质:任意二叉树 中度为0的结点数n0和度为2的结点数n2间的关系是n2 =n0-1,代入上式,则n = n0+n2 =2n0-l .","type":"short_answer","answer":"见解析。 "},{"id":"learncoder_38_19152","stem":"已知字符及其权值如下A(6) ,B(7),C(1),D(5)・,E(2) ,F(8),给出构造哈夫曼树和 哈夫曼编码的过程,并计算带权路径长度。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是哈夫曼树构造过程。假设有几个权值,则构造出的哈夫曼树 有n个叶子结点。n个权值分别设为w1,w2.....wn,则哈夫曼树的构造规则为:(1)将w1,w2,w3....wn叫看成是有n棵树的森林(每棵树仅有一个结点)。如下图所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第3章/image1.png'/>(2)在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的 根结点权值为其左、右子树根结点权值之和。如下图所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第3章/image2.png'/>(3)从森林中删除选取的两棵树,并将新树加入森林。如下图所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第3章/image4.png'/>(4)重复(2)、、,(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。如下图<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第3章/image8.png'/>","type":"short_answer","answer":"见解析。\t"},{"id":"learncoder_38_19155","stem":"叉树采用二文链表存储:(1)编写计算整个二叉树高度的算法(二叉树的高度也叫二叉树的深度)。(2)编写计算二叉树最大宽度的算法(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是二叉树的递归算法。二叉树高度可递归计算如下:若二叉树 为空,则高度为0,否则,二叉树的高度等于左右子树高度的大者加1。这里二叉树为空的标记不 是null而是0。设根结点层号为1,则每个结点的层号等于其双亲层号加l.二叉树的存储结构定义如下:typedefstruct node{ int L[ ] ;//编号为i的结点的左儿子int R[ ] ;//编号为i的结点的右儿子int D[ ] ;//编号为i的结点的层号int i;//存储结点的顺序号(下标)}tnode;(1)int Height(tnode f,int i)//求二叉树高度,调用时 i= 1 { int lh, rh ;if(i = = 0) return (0);\telse\t{lh = Height( t,t. L[i]);rh = Height (t,,t. R[i] ) ;\tif(lh>rh) return (lh+1) ; else return (rh+1);} //结束 Height求最大宽度可采用层次遍历的方法,记下各层结点数,每层遍历完毕,若结点数大于原先最 大宽度,则修改最大宽度。(2)int Width(BiTree bt)//求二叉树 bt 的最大宽度{if(bt= =null) return (0); 、、//空二叉树宽度为 0else{ BiTree Q[];//Q是队列,元素为二叉树结点指针,容量足够大front = 1;rear = 1 ;last = 1 ;//front队头指针,Tear队尾指针,last同层最右结点在队列中的 位置temp = 0 ; maxw = 0 ; //temp记局部宽度,maxw记最大宽度\tQ[rear] =bt;//根结点入队列while ( front < = last){ p = Q[front++] ; temp++; //同层元素数加 1if (p->lchild[ =null) Q[-b+rear] =p->lchild; //左子女入队if (p->rchild! =null) Q[++rear] =p->rchild; //右子女入队if ( front>last) //一层结束{last = rear ;if.( temp>maxw) maxw = temp;//last指向下层最右元素,更新当前最大宽度temp = 0';| //if} //whilereturn (maxw);}//结束 width","type":"short_answer","answer":"见解析。"},{"id":"learncoder_38_19146","stem":"如果给岀了一个二叉树结点的前序序列和对称序序列,能否构造出此二叉树?若能,请证明之。若不能,请给出反例。如果给出了一个二叉树结点的前序序列和后序序列,能否构造出 此二文树?若能,请证明之。若不能,请给出反例。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是二叉树的遍历思想。给定二叉树结点的前序序列和对称序 (中序)序列,可以唯一确定该二叉树。因为前序序列的第一个元素是根结点,该元素将二叉树 中序序列分成两部分,左边(设l个元素)表示左子树,若左边无元素,则说明左子树为空;右边 (设r个元素)是右子树,若为空,则右子树为空。根据前序遍历中“根一左子树一右子树”的顺 序,则由从第二元素开始的1个结点序列和中序序列根左边的l个结点序列构造左子树,由前序 序列最后r个元素序列与中序序列根右边的r个元素序列构造右子树。由二叉树的前序序列和后序序列不能唯一确定一棵二叉树,因无法确定左右子树两部分。 例如,任何结点只有左子树的二叉树和任何结点只有右子树的二叉树,其前序序列相同,后序序 列相同,但却是两棵不同的二叉树。","type":"short_answer","answer":"见解析。"},{"id":"learncoder_38_19149","stem":"对于二叉树T的两个结点加和n1,n2我们应该选择树T结点的前序、中序和后序中哪两个 序列来判断结点n1必定是结点n2的祖先?试给出判断的方法。(不需证明判断方法的正确性)","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是二叉树的遍历及祖先的定义。采用前序和后序两个序列来 判断二叉树上结点心必定是结点n2的祖先。在前序序列中某结点的祖先都排在其前。若结点 n1是n2的祖先,则n1必定在n2之前。而在后序序列中,某结点的祖先排在其后,即若结点叭是血 的祖先,则n1必在n2之后。根据这条规则来判断若结点n1在前序序列中在n2之前,在后序序列 中又在n2之后,则它必是结点n2的祖先。","type":"short_answer","answer":"见解析。"},{"id":"learncoder_38_19157","stem":"在二叉树中查找值为x的结点,试编写算法(用C语言)打印值为x的结点的所有祖先, 假设值为x的结点不多于一个,最后试分析该算法的时间复杂度。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是后序遍历的思想。后序遍历最后访问根结点,当访问到值为 x的结点时,栈中所有元素均为该结点的祖先。","type":"short_answer","answer":"void Search ( BiTree bt, ElemType x)\t//在工叉树bt中,查找值为x的结点,并打印其所有祖先{ typedef struct { BiTree t;int tag;}stack ; //tag 标志stack s[ ] ;//栈容量足够太top = 0 ;while ( bt ! = null || top>0){while(bt! =null && bt->data! =x){s[++top].t = bt; s[top]. tag = 0; bt = bt->lchild;} //结点入栈,沿左分支向下 if(bt->data= =x) { printf(\"所查结点的所有祖先结点的值为:\\n\");//找到x for(i = 1 ;i< = top;i++) printf( s[ i] . t->data) ;return; ( //输出祖先值后结束\twhile (top! =0 && s[ top]・ tag= =1) top--;//退栈(空遍历)if (top! =0 ){ s [ top ].tag = 1 ; bt = s [ top ]. t->rchild;} //沿右分支向下遍历} // while(bt! = null ||top>0)\t}结束 Search因为查找的过程就是后序遍历的过程,使用的栈的深度不超过树的深度,算法复杂度 为 0(log2n)."},{"id":"learncoder_38_19156","stem":"父已知一棵二叉树按顺序方式存储在数组A [n]中。设计算法,求出下标分别为i和j的 两个结点的最近的公共祖先结点的值。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是二叉树顺序存储相应算法。该题是按完全二叉树的格式存 储,利用完全二叉树双亲结点与子女结点编号间的关系,求下标为i和j的两结点的双亲,双亲的 双亲,等等,直至找到最近的公共祖先。","type":"short_answer","answer":"void Ancestor( ElemType A[ ] , int n, int i, int j)//二叉树顺序存储在数组 A[ n]中,求下标 分别为i和j的结点的最近公共祖先结点的值。{ while(i! =j)if(i>j) i=i/2; //下标为i的结点的双亲结点的下标else j=j/2;//下标为j的结点的双亲结点的下标'printf(\"所查结点的最近公共祖先的下标是%d,值是%d ,i,A[i]) ;//设元素类型整型} // Ancestor"},{"id":"learncoder_38_19137","stem":"一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是()。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是线索二叉树的定义。根据二叉树线索化的概念,其先序序列中 的第一个为根结点,最后一个结点为其最右下的叶结点。因为其左、右子树都不为空,所以该结 点无空指针域;而对最后一个结点,该节点为叶子结点,即左、右子树都为空,那么该结点在先序 序列中必然有一个前驱,因此该结点就只有一个空指针域。共1个空链域,应选Bo","type":"choice","options":{"D":"不确定","A":"0","C":"2","B":"1"},"answer":"B"},{"id":"learncoder_38_19144","stem":"试求有n个叶结点的非满的完全二叉树的高度。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是完全二叉树的性质。设完全二叉树中叶子结点数为n,则根 据完全二叉树的性质,度为2的结点数是而完全二叉树中,度为1的结点数至多为1,所以 具有n个叶子结点的完全二叉树结点数是n+(n-1)+1=2n或2n-1(有或无度为1的结点)。由 于具有2n(或2n-1))个结点的完全二叉树的深度是log2(2n+l(或log2(2n-1)+1,即 log2n+l),故n个叶结点的非满的完全二叉树的高度是log2n+l (最下层结点数>=2)。","type":"short_answer","answer":"n个叶结点的非满的完全二叉树的高度是log2n+1。(最下层结点数>=2))。"},{"id":"learncoder_38_19138","stem":"(\t)的遍历仍需要栈的支持。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"后序线索二叉树仍需要栈的支持。因后序遍历先访问子树,后访问根,本质上要求 运行栈中存放祖先信息,故即使对二叉树进行了后序线索化,仍然不能脱离栈的支持独立遍历。 而前序线索和中序线索不用。所以应选C。","type":"choice","options":{"A":"前序线索树","B":"中序线索树","D":"以上都不是","C":"后序线索树"},"answer":"C"},{"id":"learncoder_38_19145","stem":"对于一个堆栈,若其入栈序列为1,2,3,…n,不同的出入栈操作将产念不同的出栈序 列。其出栈序列的个数正好等于结点个数为n的二叉树的个数,且与不同形态的二叉树一一对 应。请简要叙述一种从堆栈输入(固定为1,2,3,...n)/输出序列对应一种二叉树形态的方法, 并以入栈序列1,2,3(即n = 3)为例加以说明。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是二叉树的遍历思想。由于二叉树前序遍历序列和中序遍历 序列可唯一确定一棵二叉树,'因此,若入栈序列为1,2,3,…n,相当于前序遍历序列是1,2, 3,…n,出栈序列就是该前序遍历对应的二叉树的中序序列的数目。因为中序遍历的实质就是 一个结点进栈和出栈的过程,二叉树的形态确定了结点进栈和出栈的顺序,也就确定了结点的中 序序列。当结点入栈序列为{1,2,3}时,出栈序列可能为:{3,2,1} ,{2,3,1} ,{2,1,3} , {1,3, 2},{1,2,3}。","type":"short_answer","answer":"见解析。"},{"id":"learncoder_38_19139","stem":"n个结点的线索U叉树上含有的线索数为( )","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是线索二叉树的定义。根据二叉树线索化的概念,只有空链才是 线索,n个结点有n-1个实链,2n个链,空链数为n+1,所以有n+1个线索。应选Co","type":"choice","options":{"C":"n+l","A":"2n","D":"n","B":"n-1"},"answer":"C"},{"id":"learncoder_38_19140","stem":"下面几个符号串编码集合中,不是前缀编码的是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是前缀编码的定义。前缀编码就是任一字符的编码不能是另一 字符编码的前缀,选项B中10是101的前缀。应选Bo填空题","type":"choice","options":{"C":"{00,010,0110,1000}","A":"{0,10,110,1111}","D":"{b,c,aa, ac,aba,abb,abc}","B":"{11,10,001,101,0001}"},"answer":"B"},{"id":"learncoder_38_19143","stem":"对于任何一棵非空的二叉树,假设叶子结点.的个数为n0。,而次数为2的结点个数为n2,请 给出n0和n2之间所满足的关系式n0=f(n2)。要求给出推导过程。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此问题考查的知识点是二叉树的性质。设度为1和2及叶子结点数分别为n0,n1和n2,则二叉树结点数n为\tn = n0+n1+n2\t\t((1))再看二叉树的分支数,除根结点外,其余结点都有一个分支进入,设B为分支总数,则n = B +1。度为1和2的结点各有1个和2个分支,度为0的结点没有分支,故n= n1+2 n2 + 1\t((((2))由式(1))和式(2)),得n0=n2 + l.","type":"short_answer","answer":"见解析。"},{"id":"learncoder_38_19130","stem":"一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是对前序遍历、中序遍历算法的理解。据题意,根为A、B或为左 子树,或为右子树,中序遍历的序列前两个字符要么AB,要么BA,所以选项A、C、D均错。应选 选项B,即为右单链树。","type":"choice","options":{"D":"ADCFEG","B":"ABGDEFG","A":"CABDEFG","C":"DACEFBG"},"answer":"B"},{"id":"learncoder_38_19134","stem":"在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是对二叉树遍历算法的理解。前序序列是“根左右”,后序序列 是“左右根”,中序序列是“左根右”,所以叶结点顺序不变,应选Bo","type":"choice","options":{"A":"都不相同","B":"完全相同","C":"先序和中序相同,而与后序不同","D":"中序和后序相同,而与先序不同"},"answer":"B"},{"id":"learncoder_38_19131","stem":"某二叉树中序序列为ABCDEFG,后序序列为BDCAFGE,则前序序列是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是树的应用及遍历。用树表示表达式,前缀是前序遍历,中缀是 中序遍历,后缀是后序遍历,本题就是已知中序遍历和后序遍历,,求前序遍历的问题。按规则后 缀最后一个元素是树的根结点,在中缀中“-”的左边(A+B*C)为左子树,右边(D/E)为右子 树,据此再查后缀的倒数第二个元素其为右子树的根,再到中缀中“ /”左D是左子树,右E 是右子树,以此类推即可构造出该树,前序遍历序列即为所求。所以选择D。","type":"choice","options":{"A":"EGFACDB","D":"上面的都不对","B":"EACBDGF","C":"EAGCFBD"},"answer":"B"},{"id":"learncoder_38_19132","stem":"某二叉树中序序列为ABCDEFG,后序序列为BDCAFGE,该二叉树对应的森林包括多少棵树( )","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是对后序遍历冲序遍历算法的理解。根据序列构造出二叉树, 按转换规则,二叉树的根结点的右子树,及右子树的右子树等个树为森林中树的个数。构造方法 参见第1题。应选择B.","type":"choice","options":{"D":"概念上是错误的","A":"1","B":"2","C":"3"},"answer":"B"},{"id":"learncoder_38_19135","stem":"某二叉树的前序序列和后序序列正好相反,则该二叉树一定是(\t)的二叉树。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题是第18题的另一种说法。","type":"choice","options":{"B":"任一结点无左子树","A":"空或只有一个结点","D":"任一结点无右子树","C":"高度等于其结点数"},"answer":"C"},{"id":"learncoder_38_19136","stem":"一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是( ))o","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是线索二叉树的定义。根据二叉树线索化的概念,其先序序列中 的第一个为根结点,最后一个结点为其最右下的叶结点。左子树为空的二叉树的根结点的左线 索为空(无前驱),先序序列的最后结点的右线索为空(无后继),共2个空链域,应选Do","type":"choice","options":{"B":"0","C":"1","A":"・不确定","D":"2"},"answer":"D"},{"id":"learncoder_38_19133","stem":"—棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是对后序遍历、前序遍历算法的理解。前序序列是“根左右”,后 序序列是“左右根”,若要这两个序列相反,只有单支树,所以本题的选项A和选项B均对,单支 树的特点是只有一个叶子结点,故选项C是最合适的,故选C。选项A或选项B都不全。","type":"choice","options":{"D":"是任意一棵二叉树","A":"所有的结点均无左孩子","C":"只有一个叶子结点","B":"所有的结点均无右孩子"},"answer":"C"},{"id":"learncoder_38_19125","stem":"若度为m的哈夫曼树中,其叶结点个数为n则非叶结点的个数为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是哈夫曼树的定义。哈夫曼树都是尬叉正则树。可以这样计 算:设分支节点数为亍,则总结点数= i*m+l(i*m没有带根结点,所以加1))又总结点数= i+n两式 相减就能得到i=(i-1))/((m-1))。应选C。","type":"choice","options":{"B":"n/m-1","D":"(n+1)(m+1)-1","C":"( (n-1)/(m-1))","A":"n-1"},"answer":"C"},{"id":"learncoder_38_19126","stem":"一个具有1 025个结点的二叉树的高度h为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是二叉树的性质。根据题意二叉树最高是单链树,高度为1025, 最矮为h=logn+l,n=1025, h=11,应选 C。","type":"choice","options":{"B":"10","A":"11","C":"11 ~1 025","D":"10 ~1 024"},"answer":"C"},{"id":"learncoder_38_19123","stem":"一棵完全二叉树上有1 001个结点,其中叶子结点的个数是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"由二叉树结点的公式:n = n0+n1+n2=n0+n1+((n0-l))= 2n0+n1-1,因为n=1001,所以 1002 = 2n+n1,在完全二叉树树中只能取0或1,在本题中只能取0,故n = 501,因此选Do","type":"choice","options":{"C":"254","D":"501","A":"250","B":"500"},"answer":"D"},{"id":"learncoder_38_19124","stem":"设给定权值总数有n个,其哈夫曼树的结点总数为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是哈夫曼树的定义。没有特殊说明表示该树只有高度为0和2 的结点,且满足n0=n2 + l,总数= no+n2,给定的权值个数n即为叶结点数,所以应选D。","type":"choice","options":{"B":"2n","A":"不确定","D":"2n-l","C":"2n+l"},"answer":"D"},{"id":"learncoder_38_19128","stem":"对于有个结点的二叉树,其高度为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是二叉树的性质。根据题意二叉树最高是单链树,高度为n,最 矮为h= 1+log2n,所以不确定,应选Do","type":"choice","options":{"A":"nlog2n","D":"不确定","B":"log2n","C":"log2n+l"},"answer":"D"},{"id":"learncoder_38_19129","stem":"若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用(\t)遍历方法最合适。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是对四种遍历算法的理解。前序遍历是“根左右”;后序遍历是 “左右根”;中序遍历是“左根右”;层序遍历是“从上到下从左到右”。后序遍历符合题意,所以 选C。","type":"choice","options":{"B":"中序","A":"前序","D":"按层次","C":"后序"},"answer":"C"},{"id":"learncoder_38_19127","stem":"一棵二叉树高度为h所有结点的高度或为0,或为2,则这棵二叉树最少有(\t)结点","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是二叉树的结点个数与高度的关系。根据题意当时,一个 结点,h=2时,最少3个,h=3时,最少5个,…,最少结点为2*h-l,应选B.","type":"choice","options":{"D":"h+l","C":"2h+l","B":"2h一 1","A":"2h"},"answer":"B"},{"id":"learncoder_38_19118","stem":"在下述结论中,正确的是(\t)①只有一个结点的二叉树的度为0;②二叉树的度为2;③二叉树的左右子树可任意交换; ④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是二叉树的定义与性质。在二叉树中没有分支的结点度数为0, 二叉树最大度数为2,左右子树不可以任意交换,完全二叉树与满二叉树的区别就是完全二叉树 最后一层结点不满,且若有一个结点应是左子树,所以应选Do","type":"choice","options":{"C":"②④","A":"①②③","B":"②③④","D":"①④"},"answer":"D"},{"id":"learncoder_38_19121","stem":"在一棵三叉树中度为3的结点数为2个,度为2的结点数为1个;度为1的结点数为2个,则度为0的结点数为(\t)个。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是树的结点个数与分支数的关系。设B为分支数,N为结点总 数,则 B = N-1,N=n0+n1+n2+n3,已知 n3+n2+n1=2+1+2 = 5 ,B = 3x2+2xl + lx2 = 10,所以 n0 = 115 = 6,应选Co","type":"choice","options":{"C":"6","D":"7","A":"4","B":"5"},"answer":"C"},{"id":"learncoder_38_19122","stem":"设森林F中有3棵树,第一、第二、第三棵树的结点个数分别为M1,M2和M3。与森林F对应的二叉树根结点的右子树上的结点个数是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是二叉树与森林的转换。根据转换规则,森林中的第一棵树为二 叉树的左子树,其余为右子树,所以应选Do","type":"choice","options":{"B":"M1+M2","A":"M1","C":"M3","D":"M2+M3"},"answer":"D"},{"id":"learncoder_38_19119","stem":"设森林F对应的二叉树为B,它有m个结点,二叉树B的根为p,p的右子树结点个数为,森林F中第一棵树的结点个数是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是二叉树与森林的转换。根据转换规则,森林中的第一棵树为二 叉树的左子树,其余为右子树,所以应选Ao","type":"choice","options":{"A":"m-n","C":"n+1","D":"无法确定","B":"m-n-1"},"answer":"A"},{"id":"learncoder_38_19120","stem":"若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是二叉树的性质。n0=n2 + l;n0 = 10+1 = 11,所以选B。","type":"choice","options":{"D":"不确定","B":"11","A":"9","C":"15"},"answer":"B"},{"id":"learncoder_38_19116","stem":"已知一算术表达式的中缀形式为A+B * C-D/E,后缀形式为ABC * +DE/-,其前缀形式为( )。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是树的应用及遍历。用树表示表达式,前缀是前序遍历,中缀是 中序遍历,后缀是后序遍历,本题就是已知中序遍历和后序遍历,,求前序遍历的问题。按规则后 缀最后一个元素是树的根结点,在中缀中“-”的左边(A+B*C)为左子树,右边(D/E)为右子 树,据此再查后缀的倒数第二个元素其为右子树的根,再到中缀中“ /”左D是左子树,右E 是右子树,以此类推即可构造出该树,前序遍历序列即为所求。所以选择D。","type":"choice","options":{"C":"-+*ABC/DE","A":"-A+B * C/DE","D":"-+A* BC/DE","B":"-A+ B* CD/E"},"answer":"D"},{"id":"learncoder_38_19117","stem":"设树T的度为4,其中度为1、2、3和4的结点个数分别为4、2、1、1,则树T中的叶子数 为( )。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"此题考查的知识点是树的结点个数与分支数的关系。设B为分支数,N为结点总 数,则 B = N-1,N= n0+n1+n2 +n3 +n4 , n1+n2+n3 +n4 = 8,B= 4*1+2*2+3*l+4x1 = 15 ,所以 n0 = 8 ,应选D。","type":"choice","options":{"D":"8","B":"6","A":"5","C":"7"},"answer":"D"},{"id":"learncoder_38_16375","stem":"二叉树 T 的中序遍历序列和层次遍历序列分别是 BAFDGCE 和 ABCDEFG,试画出该二叉树(3 分),并写出由二叉树的中序遍历序列和层次遍历序列确定二叉树的算法(5 分)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 二叉树的层次遍历序列的第一个结点是二叉树的根。实际上,层次遍历序列中的每个结点都是“局部根”。确定根后,到二叉树的中序序列中,查到该结点,该结点将二叉树分为“左根右”三部分。若左、右子树均有,则层次序列根结点的后面应是左右子树的根;若中序序列中只有左子树或只有右子树,则在层次序列的根结点后也只有左子树的根或右子树的根。这样,定义一个全局变量指针 R,指向层次序列待处理元素。算法中先处理根结点,将根结点和左右子女的信息入队列。然后,在队列不空的条件下,循环处理二叉树的结点。队列中元素的数据结构定义如下:typedef struct{ int lvl; //层次序列指针,总是指向当前“根结点”在层次序列中的位置int l,h; //中序序列的下上界int f; //层次序列中当前“根结点”的双亲结点的指针int lr; // 1—双亲的左子树 2—双亲的右子树}qnode;BiTree Creat(datatype in[],level[],int n)//由二叉树的层次序列 level[n]和中序序列 in[n]生成二叉树。 n 是二叉树的结点数{if (n<1) {printf(“参数错误\\n”); exit(0);}qnode s,Q[]; //Q 是元素为 qnode 类型的队列,容量足够大init(Q); int R=0; //R 是层次序列指针,指向当前待处理的结点BiTree p=(BiTree)malloc(sizeof(BiNode)); //生成根结点p->data=level[0]; p->lchild=null; p->rchild=null; //填写该结点数据for (i=0; i<n; i++) //在中序序列中查找根结点,然后,左右子女信息入队列if (in[i]==level[0]) break;if (i==0) //根结点无左子树,遍历序列的 1—n-1 是右子树{p->lchild=null;s.lvl=++R; s.l=i+1; s.h=n-1; s.f=p; s.lr=2; enqueue(Q,s);}else if (i==n-1) //根结点无右子树,遍历序列的 1—n-1 是左子树{p->rchild=null;s.lvl=++R; s.l=1; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s);}else //根结点有左子树和右子树{s.lvl=++R; s.l=0; s.h=i-1; s.f=p; s.lr=1;enqueue(Q,s);//左子树有关信息入队列s.lvl=++R; s.l=i+1;s.h=n-1;s.f=p; s.lr=2;enqueue(Q,s);//右子树有关信息入队列}while (!empty(Q)) //当队列不空,进行循环,构造二叉树的左右子树{ s=delqueue(Q); father=s.f;for (i=s.l; i<=s.h; i++)if (in[i]==level[s.lvl]) break;p=(bitreptr)malloc(sizeof(binode)); //申请结点空间p->data=level[s.lvl]; p->lchild=null; p->rchild=null; //填写该结点数据if (s.lr==1) father->lchild=p;else father->rchild=p; //让双亲的子女指针指向该结点if (i==s.l){p->lchild=null; //处理无左子女s.lvl=++R; s.l=i+1; s.f=p; s.lr=2; enqueue(Q,s);}else if (i==s.h){p->rchild=null; //处理无右子女s.lvl=++R; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s);}else{s.lvl=++R; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s);//左子树有关信息入队列s.lvl=++R; s.l=i+1; s.f=p; s.lr=2; enqueue(Q,s); //右子树有关信息入队列}}//结束 while (!empty(Q))return(p);}//算法结束"},{"id":"learncoder_38_16374","stem":"给定一组项及其权值,假定项都存放于二叉树的树叶结点,则具有最小带权外部路径长度的树称为 huffman 树。给定项及相应的权如下表:画出执行上述算法后得到的 huffman 树。用 c 语言编写构造 huffman 树的程序.<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image13.png'/>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"(1)哈夫曼树的构造过程① 根据给定的 n 个权值{W1,W2,W3,…,Wn}构成 n 棵二叉树的集合 F={T1,T2,…,Tn},其中每棵二叉树 Ti只有权值为 Wi的根结点,其左右子树均为空。② 在 F 中选取两棵根结点的权值最小的树作左右子树构造一棵新二叉树,新二叉树根结点的权值为其左右子树上根结点的权值之和。③ 在 F 中删除这两棵树,同时将新得到的二叉树加入 F 中。④ 重复②和③,直到 F 中只剩一棵树为止。这棵树便是哈夫曼树。(2)含有 n 个叶子结点的哈夫曼树共有 2n-1 个结点,采用静态链表作为存储结构,设置大小为 2n-1 的数组。现将哈夫曼树的结点及树的结构定义如下:typedef struct{float weight ; //权值int parent,lc,rc;//双亲、左、右子女 }node ;typedef node HufmTree[2*n-1];void Huffman(int n,float w[n],HufmTree T)//构造 n 个叶子结点的哈夫曼树 T,n 个权值己放在 W[n]数组中{int i,j,p1,p2 //p1,p2 为最小值和次最小值的坐标float small1,small2; //small1 和 small2 为权值的最小值和次小值for(i=0;i<2*n-1;i++) //置初值,结点的权、左、右子女,双亲{T[i].parent=-1; T[i].lc=-1; T[i].rc=-1;if(i<n) T[i].weight=w[i]; else T[i].weight=0;}for (i=n ;i<2*n-1;i++) //构造新二叉树{p1=p2=0;small1=small2=maxint; //初值for(j=0;j<i;j++)if(T[j].weight<small1 && T[j].parent==-1) //最小值{p2=p1; small2=small1; p1=j; small1=T[j].weight;}else if(T[j].weight<small2 && T[j].parent==-1) //次小值{p2=j;small2=T[j].weight;}T[i].weight=T[p1].weight+T[p2].weight; //合并成一棵新二叉树T[i].lc=p1; T[i].rc=p2; //置双亲的左右子女T[p1].parent=i; T[p2].parent=i; //置左、右子女的双亲}//for(i=0;i<2*n-1;i++) }//结束 huffman求哈夫曼编码的算法typedef struct {char bit[n]; int start;}codetype;void HuffmanCode(CodeType code[n],HufmTree T) //哈夫曼树 T 已求出,现求其哈夫曼编码{int i,j,c,p;CodeType cd;for(i=0;i<n;i++){cd.start=n;c=i;p=T[i].parent;while(p!=-1){cd.start--;if(T[p].lc==c) cd.bit[cd.start]=‘0’//左分枝生成代码‘0’else cd.bit[cd.start]=‘1’; // 右分枝生成代码‘1’c=p; p=T[p].parent; //双亲变为新子女,再求双亲的双亲}code[i]=cd; //成组赋值,求出一个叶子结点的哈夫曼编码}//for }//结束 HuffmanCode"},{"id":"learncoder_38_16372","stem":"设中序穿线二叉树的结点由五个域构成:info:给出结点的数据场之值。LL:当 LT 为 1 时,则给出该结点的左儿子之地址中序遍历的前驱结点的地址。LT:标志域,为 1 或为 0。RL:当 RT 为 1 时,则给出该结点的右儿子的地址;当 RT 为 0 时,地址。RT: 标志域为 0 或为 1。请编写程序,在具有上述结点结构的中序穿线二叉树上,求某一结点 p 的按后序遍历次序的后继结点的地址 q,设该中序穿线二叉树的根结点地址为r。另外,请注意必须满足:(1)额外空间的使用只能为 O(1),(2)程序为非递归。【上海交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"在中序穿线二叉树中,求某结点 p 的后序后继 q,需要知道 p 的双亲结点 f 的信息。(中序线索树的性质;若 p 是 f 的左子女,则 f 是 p 的最右子孙的右线索;若 p 是 f 的右子女,则 f 是 p 的最左子孙的左线索。)找到 f 后,若 p 是 f 的右子女,则 p 的后继是 f;若 p 是 f 的左子女,且 f 无右子女,则 p 的后继也是 f;若 p 是 f的左子女,且 f 有右子女,则 f 的右子树中最左边的叶子结点是 p 的后继。因此,算法思路是,先找 p 的双亲 f,根据 p 是 f 的左/右子女再确定 p 的后序后继。BiThrTree InThrPostSucc(BiThrTree r,p)//在中序线索二叉树 r 上,求结点 p(假定存在)的后序后继结点 q){if(p==r)return(null) //若 p 为根结点,后序后继为空T=pwhile(T->LT==1) T=T->LL; //找 p 的最左子孙的左线索q=T->LL; //q 是 p 最左子孙的左线索,是 p 的祖先if(q->RL==p) return(q); //p 是 q 的右子女,则 q 是 p 后序后继。T=p;while(T->RT==1) T=T->RL; //找 p 的最右子孙的右线索q=T->RL; //q 是 p 最右子孙的右线索if(q->LL=p) //若 p 是 q 的左子女if(q->RT==0) return(q);//若 p 是 q 的左子女且 q 无右子女,则 p 的后序后继是 qelse //p 的双亲 q 有右子树,则 q 的右子树上最左下的叶子结点是 p 的后继{q=q->RL;while(q->LT==1||q->RT==1) //找 q 右子树中最左下的叶子结点{while(q->LT==1) q=q->LL; //向左下if(q->RT==1) q=q->RL; //若 q 无左子女但有右子女,则向右下,直到叶子结点}return(q); //q 是的 p 后继}} //结束 InThrPostSucc"},{"id":"learncoder_38_16371","stem":"写出在中序线索二叉树里;找指定结点在后序下的前驱结点的算法。【河海大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"在后序序列中,若结点 p 有右子女,则右子女是其前驱,若无右子女而有左子女,则左子女是其前驱。若结点 p 左右子女均无,设其中序左线索指向某祖先结点 f(p 是 f 右子树中按中序遍历的第一个结点),若 f有左子女,则其左子女是结点 p 在后序下的前驱;若 f 无左子女,则顺其前驱找双亲的双亲,一直继续到双亲有左子女(这时左子女是 p 的前驱)。还有一种情况,若 p 是中序遍历的第一个结点,结点 p 在中序和后序下均无前驱。BiThrTree InPostPre (BiThrTree t,p)//在中序线索二叉树 t 中,求指定结点 p 在后序下的前驱结点 q{BiThrTree q;if (p->rtag==0) q=p->rchild; //若 p 有右子女,则右子女是其后序前驱else if (p->ltag==0) q=p->lchild; //若 p 无右子女而有左子女,左子女是其后序前驱。else if(p->lchild==null) q=null;//p 是中序序列第一结点,无后序前驱else //顺左线索向上找 p 的祖先,若存在,再找祖先的左子女{while(p->ltag==1 && p->lchild!=null) p=p->lchild;if(p->ltag==0) q=p->lchild; //p 结点的祖先的左子女是其后序前驱else q=null; //仅右单枝树(p 是叶子),已上到根结点,p 结点无后序前驱}return(q); }//结束 InPostPre"},{"id":"learncoder_38_16368","stem":"写出算法,求出中序线索二叉树中给定值为 x 的结点之后继结点,返回该后继结点的指针。线索树中结点结构为:(ltag,lc,data,rc,rtagdata 存放结点的值;lc,rc 为指向左、右孩子或该结点前驱或后继的指针;ltag,rtag 为标志域,各值为:0,则 lc,rc为 1,则 lc,rc 为指向某前驱后继结点的指针。【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"BiThrTree InOrder(BiThrTree T,ElemType x)//先在带头结点的中序线索二叉树 T 中查找给定值为 x 的结点,假定值为 x 的结点存在{p=T->lchild;//设 p 指向二叉树的根结点while(p!=T){while(p->ltag==0 && p-data!=x) p=p->lc;if(p->data==x)return(p);while(p->rtag==1 && p->rc!=T) {p=p->rc; if(p->data== x) return(p);}p=p->rc; }}//结束 InOrderBiThrTree AfterXNode(BiThrTree T)//在中序线索二叉树 T 中,求给定值为 x 的结点的后继结点{BiThrTree p=InOrde(T,x); //首先在 T 树上查找给定值为 x 的结点,由 p 指向if(p->rtag==1) return(p->rc); //若 p 的左标志为 1,则 p 的 rc 指针指向其后继else {q=p->rc; while(q->ltag==0)q=q->lc; return(q); }//结点 p 的右子树中最左面的结点是结点 p 的中序后继} }//结束 AfterXnode"},{"id":"learncoder_38_16373","stem":"写出按后序序列遍历中序线索树的算法。【东南大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"已讨论了在中序线索树中查找结点 p 的后序后继问题,本题要求在中序线索树上进行后序遍历。因后序遍历是“左右根”,最后访问根结点,即只有从右子树返回时才能访问根结点,为此设一标志 returnflag, 当其为 1 时表示从右侧返回,可以访问根结点。为了找当前结点的后继,需知道双亲结点的信息,在中序线索树中,某结点最左子孙的左线索和最右子孙的右线索均指向其双亲,因此设立两个函数 LeftMost 和 RightMost 求结点的最左和最右子孙,为了判定是否是从右子树返回,再设一函数 IsRightChild。BiThrTree LeftMost(BiThrTree t) //求结点 t 最左子孙的左线索{BiThrTree p=t;while(p->ltag==0) p=p->lchild; //沿左分枝向下if (p->lchild!=null) return(p->lchild); else return(null);}//LeftMostBiThrTree RightMost(BiThrTree t)//求结点 t 最右子孙的右线索{BiThrTree p=t;while(p->rtag==0) p=p->rchild; //沿右分枝向下if (p->rchild!=null) return (p->rchild); else return(null);}//RightMostint IsRightChild(BiThrTree t,father) //若 t 是 father 的右孩子,返回 1,否则返回 0{father=LeftMost(t);if(father &&f ather->rchild==t) return(1); else return(0);}//Is RightChild;void PostOrderInThr (BiThrTree bt) //后序遍历中序线索二叉树 bt{BiThrTree father, p=bt;int flag;while(p!=null){while(p->ltag==0 ) p=p->lchild; // 沿左分枝向下if(p->rtag==0) flag=0;//左孩子为线索,右孩子为链,相当从左返回else flag=1; //p 为叶子,相当从右返回while(flag==1){visit(*p);//访问结点if(IsRightChild(p,father)) {p=father; flag=1;} //修改 p 指向双亲else //p 是左子女,用最右子孙的右线索找双亲{p=RightMost(p);if(p&&p->rtag==1) flag=1; else flag=0;}}// while(flag==1)if(flag==0 && p!=null) p=p->rchild; //转向当前结点右分枝} }//结束 PostOrderInThr"},{"id":"learncoder_38_16370","stem":"用算法说明在对称序穿线树中,如何对任意给定的结点直接找出该结点的对称序后继。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"BiThrTree InSucc(BiThrTree T,p) //在对称序穿线树 T 中,查找给定结点 p 的中序后继{if(p->rtag==1)q=p->rchild; //若 p 的右标志为 1,用其右指针指向后继else {q=p->rchild; while(q->ltag==0) q=q->lchild; }//p 的后继为其右子树中最左下的结点return (q);}//结束 InSucc"},{"id":"learncoder_38_16367","stem":"已知中序线索二叉树 T 右子树不空。设计算法,将 S 所指的结点作为 T 的右子树中的一个叶子结点插入进去,并使之成为第一个结点(同时要修改相应的线索关系)。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"若使新插入的叶子结点 S 成 T 右子树中序序列的第一个结点,则应在 T 的右子树中最左面的结点(设为 p)处插入,使 S 成为结点 p 的左子女。则 S 的前驱是 T,后继是 p.void ThrTreeInsert(BiThrTree T,S)//在中序线索二叉树 T 的右子树上插入结点 S,使 S 成为 T 右子树中序遍历第一个结点{p=T->rchild; //用 p 去指向 T 的右子树中最左面的结点while(p->ltag==0) p=p->lchild;S->ltag=1;S->rtag=1; //S 是叶子,其左右标记均为 1S->lchild=T;S->rchild=p;//S 的前驱是根结点 T,后继是结点 pp->lchild=S;p->ltag=0; //将 p 的左子女指向 S ,并修改左标志为 0}//结束 ThrTreeInsert"},{"id":"learncoder_38_16369","stem":"设后序线索树中结点构造为(Ltag,Lchild,Data,Rchild,Rtag)。其中:Ltag,Rtag 值为 0 时,Lchild、Rchild 分别为儿子指针直接后继的线索。请写出在后序线索树上找给定结点 p^ 的直接前驱 q 的算法。【武汉交通科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"后序遍历是“左-右-根”,因此,若结点有右子女,则右子女是其后序前驱,否则,左子女(或左线索)指向其后序前驱。BiThrTree PostSucc (BiThrTree T,p)//在后序线索二叉树 T 中,查找指定结点 p 的直接前驱 q{if(p->Rtag==0) q=p->Rchild;//若 p 有右子女,则右子女为其前驱else q=p->Lchild; //若 p 无右子女,左子女或左线索就是 p 的后序前驱return (q);}//结束 PostSucc"},{"id":"learncoder_38_16365","stem":"写出中序线索二叉树的线索化过程(已知二叉树 T)。【山东大学】【长沙铁道学院】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" BiThrTree pre==null;void InOrderThreat(BiThrTree T)//对二叉树进行中序线索化{if (T){InOrderThreat(T->lchild); //左子树中序线索化if (T->lchild==null) {T->ltag=1; T->lchild=pre; } //左线索为 pre;if (pre!=null && pre->rtag==1) pre->rchild=T;} //给前驱加后继线索if (T->rchild==null) T->rtag=1; //置右标记,为右线索作准备pre=BT;//前驱指针后移InOrderThreat(T->rchild); //右子树中序线索化} }//结束 InOrderThreat"},{"id":"learncoder_38_16362","stem":"已知指针 p 指向带表头的中根次序穿线二叉树中的某结点,试写一算法 FFA(p,q),该算法寻找结点 p 的父亲结点 q。头结点结构和空树结构分别为(LTAG,LLINK,INFO,RLINK,RTAG),且规定穿线树的最左下结点的LLINK 域和最右下结点的 RLINK","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"在中序穿线树中找结点的双亲,最简单情况是顺线索就可找到。例如,结点的左子女的右线索和右子女的左线索都指向双亲。但对于有左右子女的结点来说,则要利用中序穿线树中线索“向上”指向祖先的特点:若结点 p 是结点 q 右子树中中序遍历最左下的结点,p 的左线索指向 q;若结点 p 是结点 q 左子树上中序遍历最右下的结点,p 的右线索指向是 q。反过来,通过祖先找子女就容易了。另外,若结点 q 的后继是中序穿线树的头结点,则应特殊考虑。void FFA(BiThrTree t,p,q)//在中序穿线树 t 上,求结点 p 的双亲结点 q{q=p; //暂存while(q->RTAG==0) q=q->RLINK; //找 p 的中序最右下的结点q=q->RLINK; //顺右线索找到 q 的后继(p 的祖先结点)if (q==t) q=t->LLINK; //若后继是头结点,则转到根结点if (q==p) {printf(“根结点无双亲\\n”);return; }if (q->LLINK==p) return(q); else q=q->LLINK; //准备到左子树中找 pwhile (q->RLINK!=p) q=q->RLINK;return(q); } //找最右结点的过程中回找到 p}//结束 FFA"},{"id":"learncoder_38_16359","stem":"编写一算法,利用叶子结点中的空指针域将所有叶子结点链接为一个带有头结点的双链表,算法返回头结点的地址。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" “双链”就利用二叉树结点的左右指针,重新定义左指针为指向前驱的指针,右指针是指向后继的指针,链表在遍历中建立,下面采用中序遍历二叉树。BiTree head=null,pre; //全局变量链表头指针 head,prevoid CreatLeafList(BiTree bt) //将 BiTree 树中所有叶子结点链成带头结点的双链表,{if(bt) //若 bt 不空{CreatLeafList(bt->lchild); //中序遍历左子树if(bt->lchild==null && bt->rchild==null) //叶子结点if(head==null)//第一个叶子结点{head=(BiTree)malloc(sizeof(BiNode)); //生成头结点head->lchild=null; head->rchild=bt; //头结点的左链为空,右链指向第一个叶子结点bt->lchild=head; pre=bt; //第一个叶子结点左链指向头结点,pre 指向当前叶子结点}else //已不是第一个叶子结点{pre->rchild=bt; bt->lchild=pre; pre=bt;} //当前叶子结点链入双链表CreatLeafList(bt->rchild); //中序遍历右子树pre->rchild=null; //最后一个叶子结点的右链置空(链表结束标记)}//if(bt) }//结束 CreatLeafList;"},{"id":"learncoder_38_16361","stem":"已知一个二叉树如下图,修改结点(node)的连接方式,以致可以不借助辅助堆栈实现中序遍历的非递归方法。画出修改后的结点连接图并写出其实现中序遍历的非递归算法。【浙江大学】<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image12.png'/>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 不借助辅助堆栈实现中序遍历,必须解决如何查找后继的问题。使用线索树就行。为此,将结点结构修改为(ltag,lchild,data,rchild,rtag)。各字段的含义在上面已多次使用,不再介绍。设二叉树已中序线索化。下面首先编写一查中序后继的函数,接着是中序遍历的非递归算法。BiTree After(BiThrTree t) //查中序线索二叉树上结点 t 的后继{if (t->rtag==1) return(t->rchild);p=t->rchild;while(p->ltag==0) p=p->lchild; //p 右子树中最左下的结点是 p 的中序后继return(p); } //ifvoid InOrder(BiThrTree bt)//非递归中序遍历带头结点的中序线索二叉树 bt{p=bt->lchild; //p 指向原二叉树的根结点if (p!=bt) //二叉树非空{while (p->ltag==0) p=p->lchild; //找中序遍历的第一个结点while (p!=bt) //没回到头结点,就一直找后继并遍历{visit(*p); p=After(p); }}//if }结束算法 InOrder"},{"id":"learncoder_38_16364","stem":"设有二叉树 BT,每个结点包括 ltag、lchild、data、rchild、rtag 五个字段,依次为左标志、左儿子、数据、右儿子建成前序(即先序)线索二叉树的递归算法。【四川联合大】【东南大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"线索化是在遍历中完成的,因此,对于二叉树进行前序、中序、后序遍历,在“访问根结点”处进行加线索的改造,就可实现前序,中序和后序的线索化BiThrTree pre=null;//设置前驱void PreOrderThreat(BiThrTree BT)//对以线索链表为存储结构的二叉树 BT 进行前序线索化{if (BT!=null){if (BT->lchild==null){BT->ltag=1; BT->lchild=pre;}//设置左线索if (pre!=null && pre->rtag==1) pre->rchild=BT; //设置前驱的右线索;if (BT->rchild==null) BT->rtag=1; //为建立右链作准备pre=BT;//前驱后移if (BT->ltag==0) PreOrderThreat(BT->lchild); //左子树前序线索化PreOrderThreat(BT->rchild); //右子树前序线索化}//if (BT!=null) }结束 PreOrderThreat"},{"id":"learncoder_38_16366","stem":"已知一中序线索二叉树,写一算法完成对它的中序扫描。【山东大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"void InOrderThreat(BiThrTree thrt)//thrt 是指向中序全线索化头结点的指针,本算法中序遍历该二叉树{p=thrt->lchild; //p 指向二叉树的根结点,当二叉树为空时,p 指向 thrtwhild(p!=thrt){while(p->ltag==0) p=p->lchild;//沿左子女向下visit(*p);//访问左子树为空的结点while(p->rtag==1 && p->rchild!=thrt){p=p->rchild;visit(*p);}//沿右线索访问后继结点p=p->rchild;//转向右子树} }//结束 InOrderThread"},{"id":"learncoder_38_16363","stem":"给出中序线索树的结点结构并画出一个具有头结点的中序线索树,使其树结点至少应有 6 个。写一算法在不使用栈和递归的情况下前序遍历一中序线索树,并分析其时间复杂性。【东南大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"带头结点的中序线索树,其头结点的 lchild 指向二叉树的根结点,头结点的 rchild 域指向中序遍历的最后一个结点。而二叉树按中序遍历的第一个结点的 lchild 和最后一个结点的 rchild 指向头结点。故从头结点找到根结点后,顺“后继”访问二叉树。void PreorderInThreat(BiTrhTree tbt)//前序遍历一中序全线索二叉树 tbt,tbt 是头结点指针{bt=tbt->lchild;while(bt){while(bt->ltag==0){printf(bt->data); bt=bt->lchild;}//沿左分枝向下printf(bt->data); //遍历其左标志为 1 的结点,准备右转while(bt->rtag==1 && bt->rchild!=tbt) bt=bt->rchild;//沿右链向上if (bt->rchild!=tbt) bt=bt->rchild;//沿右分枝向下}}//结束 PreorderInThreat时间复杂度 O(n)。"},{"id":"learncoder_38_16360","stem":"编写程序段,利用中序全线索树求其中任意结点 p^的前序后继结点,结果仍用 p 指出。要求先描述结构和算法思路。序列第一结点的左标志和最后结点的右标志皆为0(非线索),对应指针皆为空。【北京工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"求中序全线索树任意结点 p 的前序后继,其规则如下:若 p 有左子女,则左子女就是其前序后继;若 p 无左子女而有右子女,则 p 的右子女就是 p 的前序后继;若 p 无左右子女,这时沿 p 的右线索往上,直到p 的右标志为 0(非线索),这时若 p 的右子女为空,则表示这是中序遍历最后一个结点,故指定结点无前序后继,否则,该结点就是指定结点的前序后继。程序段如下:if(p->ltag==0 && p->lchild!=null) return(p->lchild); //p 的左子女是 p 的前序后继else if(p->rtag==0) && p->rchild!=null) return(p->rchild);//p 右子女是其前序后继else //p 无左右子女,应沿右线索向上(找其前序后继),直到某结点右标记为 0{while (p->rtag==1) p=p->rchild;if (p->rchild) return(p->rchild);else return(null); }//指定结点的前序后继"},{"id":"learncoder_38_16355","stem":"设二叉树的结点结构是(Lc,data,Rc),其中 Lc、Rc 分别为指向左、右子树根的指针,data 是字符型数据。试写出算法长的路径长度,并输出此路径上各结点的值。【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"因为后序遍历栈中保留当前结点的祖先的信息,用一变量保存栈的最高栈顶指针,每当退栈时,栈顶指针高于保存最高栈顶指针的值时,则将该栈倒入辅助栈中,辅助栈始终保存最长路径长度上的结点,直至后序遍历完毕,则辅助栈中内容即为所求。void LongestPath(BiTree bt)//求二叉树中的第一条最长路径长度{BiTree p=bt,l[],s[]; //l, s 是栈,元素是二叉树结点指针,l 中保留当前最长路径中的结点int i,top=0,tag[],longest=0;while(p || top>0){ while(p) {s[++top]=p;tag[top]=0; p=p->Lc;} //沿左分枝向下if(tag[top]==1) //当前结点的右分枝已遍历{if(!s[top]->Lc && !s[top]->Rc) //只有到叶子结点时,才查看路径长度if(top>longest) {for(i=1;i<=top;i++) l[i]=s[i]; longest=top; top--;}//保留当前最长路径到 l 栈,记住最高栈顶指针,退栈}else if(top>0) {tag[top]=1; p=s[top].Rc;} //沿右子分枝向下}//while(p!=null||top>0)}//结束 LongestPath"},{"id":"learncoder_38_16354","stem":"设二叉树的结点具有如下的结构:(lchild,info,rchild),指针变量 BT 指向该树的根结点,试设计一个算法打印出由根结点出发到达叶结点的所有路径。【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"上题是打印从根结点到某结点 p 的路径上所有祖先结点,本题是打印由根结点到叶子结点的所有路径。只要在上题基础上把 q 是否等于 p 的判断改为 q 是否是叶子结点即可。其语句段如下:if(q->lchild==null&&q->rchild==null) //q 为叶子结点{printf(“从根结点到 p 结点的路径为\\n”);for(i=1;i<=top;i++) printf(s[i]->data);//输出从根到叶子路径上,叶子 q 的所有祖先printf(q->data); }"},{"id":"learncoder_38_16351","stem":"设一棵二叉树中各结点的值互不相同,其前序序列和中序序列分别存于两个一维数组 pre[1..n ]和 mid[1..n ]中,试遍写算法建立该二叉表。【南京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"下面给出递归算法。void PreInCreat(BiTree root,ElemType pre[],in[],int l1,h1,l2,h2)//根据二叉树前序序列 pre 和中序序列 in 建立二叉树。l1,h1,l2,h2 是序列第一和最后元素下标。{root=(BiTree)malloc(sizeof(BiNode)); //申请结点root->data=pre[l1]; //pre[l1]是根for(i=l2;i<=h2;i++) if(in[i]==pre[l1]) break; //在中序序列中,根结点将树分成左右子树if(i==l2) root->lchild=null; //无左子树else PreInCreat(root->lchild,pre,in,l1+1,l1+(i-l2),l2,i-1); //递归建立左子树if(i==h2) root->rchild=null; //无右子树else PreInCreat((root)->rchild,pre,in,l1+(i-l2)+1,h1,i+1,h2) //递归建立右子树}//结束 PreInCreat"},{"id":"learncoder_38_16348","stem":"用类 PASCAL 语言编写一非递归算法,求二叉树上叶子结点的数量。二叉树用二叉链表存贮,左指针定义为 lchild,右指针定义为类似本题的另外叙述有:(1)用递归方法求已知二叉树的叶结点个数。【天津大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"int Count (BiTree bt) // 非递归遍历求二叉树上的叶子结点个数{int num=0;BiTree s[]; //s 是栈,栈中元素是二叉树结点指针,栈容量足够大whlie(bt!=null || top>0){while(bt!=null) {push(s,bt);bt=bt->lchild;} //沿左分支向下if(!StackEmpty(s)){bt=pop(s);if(bt->lchild==null && bt->rchild==null) num++;//叶子结点bt=bt->rchild;}} return(num);}//结束 Count"},{"id":"learncoder_38_16353","stem":"假设二叉树采用链式存储结构进行存储,root^为根结点,p^为任一给定的结点,请写出求从根结点到 p^之间路径的非递归算法","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"采用后序非递归遍历二叉树,栈中保留从根结点到当前结点的路径上的所有结点。void PrintPath(BiTree bt,p) //打印从根结点 bt 到结点 p 之间路径上的所有结点{BiTree q=bt,s[]; //s 是元素为二叉树结点指针的栈,容量足够大int top=0; tag[];//tag 是数组,元素值为 0 或 1,访问左、右子树的标志,tag 和 s 同步if (q==p) {printf(q->data); return;} //根结点就是所找结点while(q!=null || top>0){while(q!=null) //左子女入栈,并置标记if(q==p) //找到结点 p,栈中元素均为结点 p 的祖先{printf(“从根结点到 p 结点的路径为\\n”);for(i=1;i<=top;i++) printf(s[i]->data); printf(q->data); return;}else {s[++top]=q; tag[top]=0; q=q—>lchild;} //沿左分支向下while(top>0 && tag[top]==1)) top--;//本题不要求输出遍历序列,这里只退栈if (top>0) {q=s[top]; q=q->rchild; tag[top]=1; } //沿右分支向下}//while(q!=null || top>0)}//结束算法 PrintPath"},{"id":"learncoder_38_16350","stem":"二叉树采用二叉链表方式存放,对二叉树从 1 开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一个结点的左右孩子中子的编号小于其右孩子的编号,请回答采用什么次序的遍历方式实现编号?并给出在二叉树中结点的数据域部分填写实现如上要求编号的非递归算法【西北大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"按题目要求,每个结点的编号大于其左右孩子的编号,结点左孩子的编号小于右孩子的编号。由此看出,从小到大按“左右根”顺序,这正是后序遍序的顺序,故对二叉树进行后序遍历,在遍历中对结点进行编号,现将二叉树结点结构定义如下:typedef struct node{ElemType data; int num; struct node *lchild, *rchild; }Bnode,*Btree;void PostOrder(Btree t)//对二叉树从 1 开始编号,结点编号大于其左右子女结点编号,结点的左子女编号小于其右子女编号{typedef struct {Btree t; int tag; }node;Btree p=t; node sn,s[]; //s 为栈,容量足够大int k=0,top=0; //k 为结点编号,top 为栈顶指针while(p!=null || top>0){while(p) {sn.t=p; sn.tag=0; s[++top]=sn; p=p->lchild;} //沿左分枝向下while(top>0 && s[top].tag==1){sn=s[top--];sn.t->num=++k;}//左右孩子已遍历,结点赋编号if (top>0) {s[top].tag=1; p=s[top].t->rchild;}}//while(p!=null || top>0)}结束 PostOrder"},{"id":"learncoder_38_16347","stem":"设计算法:统计一棵二叉树中所有叶结点的数目及非叶结点的数目。【南开大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"void Count(BiTree bt,int *n0,*n) //统计二叉树 bt 上叶子结点数 n0 和非叶子结点数 n{if(bt){if (bt->lchild==null && bt->rchild==null) *n0++;//叶子结点else *n++; //非叶结点Count(bt->lchild,&n0,&n);Count(bt->rchild,&n0,&n);} }//结束 Count"},{"id":"learncoder_38_16343","stem":"已知二叉树以二叉链表存储,编写算法完成:对于树中每一个元素值为 x 的结点,删去以它为根的子树,并释放相应的空间。类似本题的另外叙述有:(1)设 T 是一棵给定的查找树,试编写一个在树中删除根结点为 a 的子树的程序,要求在删除的过程中释放该子树所有结点所占有的存储空间T 中结点所占有的存储空间是通过动态存储分配取得的,其结点的形式为:(lchild,data,rchild)","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 删除以元素值 x 为根的子树,只要能删除其左右子树,就可以释放值为 x 的根结点,因此宜采用后序遍历。删除值为 x 结点,意味着应将其父结点的左(右)子女指针置空,用层次遍历易于找到某结点的父结点。本题要求删除树中每一个元素值为 x 的结点的子树,因此要遍历完整棵二叉树。void DeleteXTree(BiTree bt) //删除以 bt 为根的子树{DeleteXTree(bt->lchild); DeleteXTree(bt->rchild);//删除 bt 的左子树、右子树free(bt); }// DeleteXTree //释放被删结点所占的存储空间void Search(B:Tree bt,ElemType x)//在二叉树上查找所有以 x 为元素值的结点,并删除以其为根的子树{BiTree Q[];//Q 是存放二叉树结点指针的队列,容量足够大if(bt){if(bt->data==x) {DeleteXTree(bt); exit(0);}//若根结点的值为 x,则删除整棵树{QueueInit(Q); QueueIn(Q,bt);while(!QueueEmpty(Q)){p=QueueOut(Q);if(p->lchild) // 若左子女非空if(p->lchild->data==x) //左子女结点值为 x,应删除当前结点的左子树{DeleteXTree(p->lchild); p->lchild=null;} //父结点的左子女置空else Enqueue (Q,p->lchild);// 左子女入队列if(p->rchild) // 若右子女非空if(p->rchild->data==x) //右子女结点值为 x,应删除当前结点的右子树{DeleteXTree(p->rchild); p->rchild=null;} //父结点的右子女置空else Enqueue (Q,p->rchild);// 右子女入队列}//while}//if(bt) }//search"},{"id":"learncoder_38_16345","stem":"设一棵二叉树的根结点指针为 T,C 为计数变量,初值为 0,试写出对此二叉树中结点计数的算法:BTLC(T,C)。【北京科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"int BTLC(BiTree T,int *c)//对二叉树 T 的结点计数{if(T){*c++;BTLC(T->lchild,&c); //统计左子树结点BTLC(T->rchild,&c); //统计右子树结点} }//结束 Count,调用时*c=0"},{"id":"learncoder_38_16344","stem":"试为二叉树写出一个建立三叉链表的算法,并在此三叉链表中删去每一个元素值为 x 的结点,以及以它为根的子树,且三叉链表的描述为:TYPE bitreptr=^nodetp;nodetp=RECORD data:char; lchild,rchild,parent:bitreptr END;VAR bt:bitreptr; 【同济大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"在二叉树上建立三叉链表,若二叉树已用二叉链表表示,给每个结点加上指向双亲的指针(根结点的双亲指针为空)。至于删除元素值为 x 的结点以及以 x 为根的子树,下面给出建立用三叉链表表示的二叉树的算法。二叉树按完全二叉树格式输入,对非完全二叉树,要补上“虚结点”。按完全二叉树双亲和子女存储下标间的关系,完成双亲和子女间指针的链接。‘#’是输入结束标志,‘$’是虚结点标志。BiTree creat()/ /生成三叉链表的二叉树(题目给出 PASCAL 定义,下面的用类 C 书写){BiTree p,Q[],root; //Q 是二叉树结点指针的一维数组,容量足够大char ch; int rear=0; //一维数组最后元素的下标scanf(&ch);while(ch!=‘#’){p=null;if(ch!=‘$’){p=(BiTree)malloc(sizeof(nodetp));p->data=ch; p->lchild=p->rchild=null; }Q[++rear]=p; //元素或虚结点if(p){if(rear==1) {root=p;root->parent=null; } //根结点else{Q[rear]->parent=Q[rear/2]; /双亲结点和子女结点用指针链上if (rear%2==0) Q[rear/2]->lchild=Q[rear]; else Q[rear/2]->rchild=Q[rear];}scanf(“%c”,&ch);}//whilereturn(root); }//结束 creat"},{"id":"learncoder_38_16358","stem":"有中序穿索树T,结点形式为:(LL,LT,D,RT,RL),试编写非递归算法找到数据域为A的结点,并在其左子树中插入已注意:可能A有左孩子或无左孩子,插入后考虑穿索的状态应作何修改。【上海大学】<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image11.png'/>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"在中序线索树中,非递归查找数据域为 A 的结点(设该结点存在,其指针为 P)并将数据域为 x 的 Q结点插入到左子树中。若 P 无左子女,则 Q 成为 P 的左子女,原 P 的左线索成为 Q 的左线索,Q 的右线索为 P;若 P有左子树,设 P 左子树中最右结点的右线索是结点 Q,结点 Q 的右线索是 P。void InThrInsert(BiThrTree T,Q; ElemType A)//在中序线索二叉树 T 中,查找其数据域为 A 的结点,并在该结点的左子树上插入结点 Q{BiThrTree P=T;while(P){while(P->LT==0 && P->data!=A) P=P->LL; //沿左子树向下if (P->data==A) break; //找到数据域为 A 的结点,退出循环while(P->RT==1) P=P->RL; //还没找到数据域为 A 的结点沿右线索找后继P=P->RL; //沿右子树向下}if(P->LT==1) //P 没有左子树,Q 结点插入作 P 的左子女{Q->LL=P->LL; Q->LT=1; //将 P 的左线索作为 Q 的左线索}else //P 有左子树,应修改 P 的左子树最右结点的线索{Q->LL=P->LL;Q->LT=0; //Q 成为 P 的左子女s=Q->LL; //s 指向原 P 的左子女while(s->RT==0) s=s->RL; //查找 P 的左子树最右边的结点s->RL=Q; //原 P 左子树上最右结点的右线索是新插入结点 Q}P->LT=0;P->LL=Q; //修改 P 的标记和指针Q->RT=1;Q->RL=P; //将 Q 链为 P 的左子女,其中序后继是 P;}//结束 InThrInsert"},{"id":"learncoder_38_16357","stem":"请用类 C 或用类 PASCAL 语言编写算法。请编写在中序全线索二叉树 T 中的结点 P 下插入一棵根为 X 的中序全线索二叉树的算法存在,则插入失败并返回 FALSE;如果 P 没有左孩子,则 X 作为 P 的左孩子插入;否则 X 作为 P 的右孩子插入。插入完成后要求二叉树保持中序全线索并返回 TRUE。【上海大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"在中序全线索化 T 树的 P 结点上,插入以 X 为根的中序全线索化二叉树,要对 X 有无左右子树进行讨论,并修改 X 左(右)子树上最左结点和最右结点的线索。在中序线索树上查找某结点 p 的前驱的规律是:若p->ltag=1,则 p->lchild 就指向前驱,否则,其前驱是 p 的左子树上按中序遍历的最后一个结点;查找某结点 p的后继的规律是:若 p->rtag=1,则 p->rchild 就指向后继,否则,其后继是 p 的右子树上按中序遍历的第一个结点。int TreeThrInsert(BiThrTree T,P,X)//在中序全线索二叉树 T 的结点 P 上,插入以 X 为根的中序全线索二叉树,返回插入结果信息。{if(P->ltag==0 && P->rtag==0) {printf(“P 有左右子女,插入失败\\n”); return(0); }if(P->ltag==0) //P 有左子女,将 X 插为 P 的右子女{if(X->ltag==1) X->lchild=P; //若 X 无左子树, X 的左线索(前驱)是 Pelse //寻找 X 的左子树上最左(下)边的结点{q=X->lchild;while(q->ltag==0) q=q->lchild;q->lchild=P;}if(X->rtag==1) //修改 X 的右线索X->rchild=P->rchild; //将 P 的右线索改为 X 的右线索else //找 X 右子树最右面的结点{q=X->rchild; while(q->rtag==0) q=q->rchild;q->rchild=P->rchild;}P->rtag=0;P->rchild=X; //将 X 作为 P 的右子树} //结束将 X 插入为 P 的右子树else //P 有右子女,将 X 插入为 P 的左子女{if(X->ltag==1) //X 无左子女X->lchild=P->lchild; //将 P 的左线索改为 X 的左线索else //X 有左子女,找 X 左子树上最左边的结点{q=X->lchild;while(q->ltag==0) q=q->lchild;q->lchild=P->lchild;}if(X->rtag==1) X->rchild=P; //若 X 无右子树,则 X 的右线索是 Pelse //X 有右子树,查其右子树中最右边的结点,将该结点的后继修改为 P{q=X->rchild;while(q->rtag==0) q=q->rchild;q->rchild=P;}P->ltag=0; //最后将 P 的左标记置 0P->lchild=X; //P 的左子女链接到 X} //结束将 X 插入为 P 的左子女} //结束 Tree Thrfnsert"},{"id":"learncoder_38_16349","stem":"一棵二叉树以二叉链表来表示,求其指定的某一层 k(k>1)上的叶子结点的个数。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"对二叉树的某层上的结点进行运算,采用队列结构按层次遍历最适宜。int LeafKlevel(BiTree bt, int k) //求二叉树 bt 的第 k(k>1) 层上叶子结点个数{if(bt==null || k<1) return(0);BiTree p=bt,Q[]; //Q 是队列,元素是二叉树结点指针,容量足够大int front=0,rear=1,leaf=0; //front 和 rear 是队头和队尾指针, leaf 是叶子结点数int last=1,level=1; Q[1]=p; //last 是二叉树同层最右结点的指针,level 是二叉树的层数while(front<=rear){p=Q[++front];if(level==k && !p->lchild && !p->rchild) leaf++; //叶子结点if(p->lchild) Q[++rear]=p->lchild; //左子女入队if(p->rchild) Q[++rear]=p->rchild; //右子女入队if(front==last) {level++; //二叉树同层最右结点已处理,层数增 1last=rear; } //last 移到指向下层最右一元素if(level>k) return (leaf); //层数大于 k 后退出运行}//while }//结束 LeafKLevel"},{"id":"learncoder_38_16346","stem":"试编写算法,对一棵以孩子—兄弟链表表示的树统计叶子的个数。【北京轻工业学院】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"int Count(CSTree t)//统计以孩子兄弟链表表示的树的叶子结点个数{if(t==null) return(0);else if(t->firstlchild==null) //左子女为空,结点必为叶子return(1+Count(t->nextsibling)); //(叶子)+兄弟子树上的叶子结点else return(Count(t->firstchild)+Count(t->nextsibling));//子女子树+兄弟子树}//Count"},{"id":"learncoder_38_16356","stem":"设 t 是一棵按后序遍历方式构成的线索二叉树的根结点指针,试设计一个非递归的算法,把一个地址为 x 的新结点插到右侧作为结点 y 的右孩子,并使插入后的二叉树仍为后序线索二叉树。【东北大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"在线索二叉树上插入结点,破坏了与被插入结点的线索。因此,插入结点时,必须修复线索。在结点 y的右侧插入结点 x,因为是后序线索树,要区分结点 y 有无左子树的情况。void TreeInsert(BiTree t,y,x)//在二叉树 t 的结点 y 的右侧,插入结点 x{if(y->ltag==0) //y 有左子女{p=y->lchild; if (p->rtag==1) p->rchild=x; //x 是 y 的左子女的后序后继x->ltag=1; x->lchild=p; //x 的左线索是 y 的左子女}else //y 无左子女{x->ltag=1; x->lchild=y->lchild;//y 的左线索成为 x 的左线索if(y->lchild->rtag==1) //若 y 的后序前驱的右标记为 1y->lchild->rchild=x; //则将 y 的后序前驱的后继改为 x}x->rtag=1; x->rchild=y; y->rtag=0; y->rchild=x; //x 作 y 的右子树}//结束 TreeInsert"},{"id":"learncoder_38_16340","stem":"已知二叉树 T 采用二叉链表结构存储,每个结点有三个字段:data,Lchild 和 Rchild 。设计算法求出 T 的顺序存储结构 A[1..n],并给出初始调用形式。要求:如某位置为空,将其置为 null;如超出下标范围 n,则报错;最后返回实际的最大下标.右图所示为 n=15时一个二叉树及所对应的输出结果示例(空缺表示 null)。输出结果(表结构的值和最大下标):=12(最大下标为 12)【合肥工业大学】<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image10.png'/>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"本题应采用层次遍历方式。若树不空,则二叉树根结点入队,然后当队列不空且队列长不超过 n,重复如下操作:出队,若出队元素不为空,则记住其下标,且将其左右子女入队列;若出队元素为空,当作虚结点,也将其“虚子女”入队列。为节省空间,就用树 T 的顺序存储结构 A[1..n]作队列,队头指针 front,队尾指针 rear,元素最大下标 last.void Traverse(BiTree bt ,int n)// 求二叉树 bt 的顺序存储结构 A[1..n],下标超过 n 报错,给出实际的最大下标{BiTree A[], p;if(bt!=null){int front=0,rear=1,last=1; A[1]=bt;while(front<=rear){p=A[++front]; if(p) last=front; // 出队;用 last 记住最后一个结点的下标rear=2*front;//计算结点(包括虚结点)“左子女”下标if (p) //二叉树的实际结点{if(rear>n) printf(“%c 结点无左子女”); else A[rear]=p->lchild;if(rear+1>n) printf(“%c 结点无右子女”); else A[rear+1]=p->rchild;}else //p 是虚结点{ if(rear<=n) A[rear]=null; if(rear+1<=n) A[rear+1]=null; }}// while(front<=rear)printf(“实际的最大下标是%d”,last);}//if(bt!=null) }//Traverse"},{"id":"learncoder_38_16342","stem":"编写递归算法,依据树的双亲表示法及其根结点创建树的孩子-兄弟链表存储结构。要求写算法以前先写出这两种存储结构的类型说明","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 根据树的双亲表示法创建树的孩子兄弟链表表示法,首先给出根结点在双亲表示法中的下标,但找根结点的子女要遍历双亲表示法的整个静态链表,根结点的第一个子女是孩子兄弟表示法中的孩子,其它子女结点作兄弟。对双亲表示法中的任一结点,均递归建立其孩子兄弟链表子树。CSTree PtreeToCstree (PTree pt,int root)//本算法将双亲表示法的树 pt 转为孩子兄弟链表表示的树,root 是根结点在双亲表示法中的下标。{CSTree child , sibling; int firstchild;CSTree cst=(CSTree)malloc(sizeof(CSNode)); //申请结点空间cst->data=pt.nodes[root].data; cst->firstchild=null; cst->nextsibling=null;//根结点firstchild=1;for(i=1;i<=pt.n;i++) //查找 root 的孩子if(pt.nodes[i].parent==root){child=PtreetoCstree(pt,i);if(firstchild) {cst->firstchild=child; firstchild=0;sibling=cst->firstchild;}else //child 不是 root 的第一个孩子,作兄弟处理{sibling->nextsibling=child; sibling=sibling->nextsibling;}}//if}//end forreturn cst; }//结束 PtreetoCstree"},{"id":"learncoder_38_16339","stem":"二叉树结点的平衡因子(bf)定义为该结点的左子树高度与右子树高度之差。设二叉树结点结构为:(lchild,data,bf,rchild),lchild,rchild 是左右儿子指针;data 是数据元素;bf 是平衡因子,编写递归算法计算二叉树中各个结点的平衡因子。【石油大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 由定义,结点的平衡因子 bf 等于结点的左子树高度与右子树高度之差,设计一遍历算法,在遍历结点时,求结点的左子树和右子树的高度,然后得到结点的平衡因子。int Height(BiTree bt)//求二叉树 bt 的深度{int hl,hr;if (bt==null) return(0);else {hl=Height(bt->lchild); hr=Height(bt->rchild);if(hl>hr) return (hl+1); else return(hr+1);} }// Heightvoid Balance(BiTree bt)//计算二叉树 bt 各结点的平衡因子{if (bt){Balance(bt->lchild); //后序遍历左子树Balance(bt->rchild); //后序遍历右子树hl=Height(bt->lchild); hr=Height(bt->rchild);//求左右子树的高度bt->bf=hl-hr; //结点的平衡因子 bf} }//算法结束"},{"id":"learncoder_38_16336","stem":"请设计一个算法,要求该算法把二叉树的叶子结点按从左到右的顺序连成一个单链表,表头指针为 head。 二叉树按二叉链表方式存储子结点的右指针域来存放单链表指针。分析你的算法的时、空复杂度。【华南师范大学】(1)已知二叉树的链表存储结构定义如下:TYPE bitreptr=^bitrenode;bitrenode=RECORD data:char; lchild,rchild:bitreptr END;编写一个递归算法,利用叶结点中空的右链指针域 rchild,将所有叶结点自左至右链接成一个单链表,算法返回最左叶结点的地址。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"叶子结点只有在遍历中才能知道,这里使用中序递归遍历。设置前驱结点指针 pre,初始为空。第一个叶子结点由指针 head 指向,遍历到叶子结点时,就将它前驱的 rchild 指针指向它,最后叶子结点的 rchild 为空。LinkedList head,pre=null; //全局变量LinkedList InOrder(BiTree bt)//中序遍历二叉树 bt,将叶子结点从左到右链成一个单链表,表头指针为 head{if(bt){InOrder(bt->lchild); //中序遍历左子树if(bt->lchild==null && bt->rchild==null) //叶子结点if(pre==null) {head=bt; pre=bt;} //处理第一个叶子结点else{pre->rchild=bt; pre=bt; } //将叶子结点链入链表InOrder(bt->rchild); //中序遍历左子树pre->rchild=null; //设置链表尾}return(head); } //InOrder时间复杂度为 O(n),辅助变量使用 head 和 pre,栈空间复杂度 O(n)"},{"id":"learncoder_38_16341","stem":"设两棵二叉树的的根结点地址分别为 p 和 q,采用二叉链表的形式存储这两棵树上所有的结点。请编写程序,判断它们是否相似类似本题的另外叙述有:(1)编写一个函数或过程判定两棵二叉树是否相似,所谓两棵二叉树 s 和 t 相似,即是要么它们都为空或都只有一个结点,要么它们的左右子树都相似。【厦门大学】(2)设计判断两棵二叉树是否相似的算法。【中国矿业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"两棵空二叉树或仅有根结点的二叉树相似;对非空二叉树,可判左右子树是否相似,采用递归算法。int Similar(BiTree p,q) //判断二叉树 p 和 q 是否相似{if(p==null && q==null) return (1);else if(!p && q || p && !q) return (0);else return(Similar(p->lchild,q->lchild) && Similar(p->rchild,q->rchild))}//结束 Similar"},{"id":"learncoder_38_16338","stem":"写一非递归遍历算法,使右图树遍历输出顺序为字母顺序。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image9.png'/>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"此树看作度为 2 的有序树,先将根结点入队列。当队列不空,重复以下动作:结点出队;若结点有两个子女,先将第二(右)子女入队列,并转向第一子女;若结点有一个子女,则入队列;如此下去,直到碰到叶子结点或只有一个子女的结点,再重复上述动作,直至队列为空。定义树结构如下:typedef struct node{ElemType data; struct node *firstchild, *secondchild; }*Tree;void TreeTravers(Tree t) //按字母顺序输出树中各结点的值{Tree p,Q[]; //Q 为队列,元素是树结点指针,容量是够大if (t){QueueInit(Q); QueueIn(Q,t); //根结点入队while(!QueueEmpty(Q)){p=QueueOut(Q); //出队while (p->firstchild && p->secondchild) //当有双子女时{QueueIn(Q,p->secondchild);printf(p->data);//访问结点p=p->firstchild;}// 沿第一子女向下if (p->firstchild){printf(p->data); QueueIn(Q,p->firstchild)} //一个子女树入队if (!p->firstchild && !p->secondchild) printf(p->data);//访问叶子结点}//while(!QueueEmpty(Q))}//if}//算法结束"},{"id":"learncoder_38_16337","stem":"设二叉树以二叉链表示。使用类 PASCAL 语言编一过程,输出二叉树中各结点的数据及其所在的层数(已知一棵二叉树按中序遍历时各结点被访问的次序和这棵二叉树按后序遍历时各结点被访问的次序,是否唯一确定这棵二叉树的结构?为什么?若已知一棵二叉树按先序遍历时各结点被访问的次序和这棵二叉树按后序遍历时各结点访问的次序,能否唯一确定这棵二叉树的结构?为什么?)【南开大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 层次遍历。中序遍历序列和后序序列可确定一棵二叉树,详见上面应用题第 40 题。先序序列和后序序列无法确定一棵二叉树,因为无法将二叉树分成左右子树。如先序序列 AB 和后序序列 BA,A 是根,但 B 可以是左子女,也可以是右子女。"},{"id":"learncoder_38_16333","stem":"已知一具有 n 个结点的二叉树的中序遍历序列与后序遍历序列分别存放于数组 IN[1:n]和 POST[1:n]中,(设该二叉树各结点的数据值均不相同请写一建立该二叉树的二叉链表结构的非递归算法。该二叉链表的链结点结构为(lchild,data,rchild),其中 data 为数据域向该结点左、右孩子的指针域(当孩子结点不存在时,相应指针域为空,用 nil 表示)。【北京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"知二叉树中序序列与后序序列,第 30 题以递归算法建立了二叉树,本题是非递归算法。void InPostCreat(ElemType IN[],POST[],int l1,h1,l2,h2)//由二叉树的中序序列 IN[]和后序序列 POST[]建立二叉树,l1,h1 和 l2,h2 分别是中序序列和后序序列第一和最后元素的下标,初始调用时,l1=l2=1,h1=h2=n。{typedef struct {int l1,h1,l2,h2; BiTree t; }node;node s[],p;//s 为栈,容量足够大BiTree bt=(BiTree)malloc(sizeof(BiNode)); int top=0,i;p.l1=l1; p.h1=h1; p.l2=l2; p.h2=h2; p.t=bt; s[++top]=p;//初始化while(top>0){p=s[top--]; bt=p.t; l1=p.l1; h1=p.h1; l2=p.l2; h2=p.h2;//取出栈顶数据for(i=l1;i<=h1;i++) if(IN[i]==POST[h2]) break;//在中序序列中查等于 POST[h2]的结点bt->data=POST[h2]; //根结点的值if(i==l1) bt->lchild=null; //bt 无左子树else //将建立左子树的数据入栈{bt->lchild=(BiTree)malloc(sizeof(BiNode)); p.t=bt->lchild;p.l1=l1; p.h1=i-1; p.l2=l2; p.h2=l2+i-l1-1; s[++top]=p; }if(i==h1) bt->rchild=null; //bt 无右子树else {bt->rchild=(BiTree)malloc(sizeof(BiNode)); p.t=bt->rchild;p.l1=i+1; p.h1=h1; p.l2=l2+i-l1; p.h2=h2-1; s[++top]=p; }//右子树数据入栈}// while(top>0)}结束 InPostCreat"},{"id":"learncoder_38_16330","stem":"二叉树排序方法如下:(1)将第一个数据放在树根。(2)将随后读入的数据与树根中的数据相比较,若比树根大,则置于右子树,反之则置于左子树,建成一棵二叉树;(3)利用中序遍历打印排序结果。试用 PASCAL 或 C 语言编写二叉树的排序程序,并分析其算法复杂性。【浙江大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"BiTree creat()//生成并中序输出二叉排序树{scanf(“%c”,&ch) //ch 是二叉排序树结点值的类型变量,假定是字符变量BiTree bst=null,f=null;while(ch!=‘#’) //‘#’是输入结束标记{s=(BiTree)malloc(sizeof(BiNode)); //申请结点s->data=ch; s->lchild=s->rchild=null;if (bst==null) bst=s; //根结点else //查找插入结点{p=bst;while(p)if (ch>p->data) {f=p; p=p->rchild;} //沿右分枝查,f 是双亲else {f=p; p=p->lchild;} //沿左分枝查if(f->data<ch) f->rchild=s; else f->lchild=s;}//将 s 结点插入树中scanf(“%c”,&ch); //读入下一数据} //while (ch!=‘#’)return(bst); } //结束 creatvoid InOrder(BiTree bst) //bst 是二叉排序树,中序遍历输出二叉排序树{if(bst){InOrder (bst->lchild); printf(bst->data); InOrder(bst->rchild); }}//结束 InOrder"},{"id":"learncoder_38_16329","stem":"编写递归程序将二叉树逆时针旋转 90 度打印出来。如右图:(要求用类 PASCAL 语言,并描述结构)。【北京工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"PROC print(bt:BiTree;xy:integer)//将二叉树逆时针旋转 90 度打印,xy 是根结点基准坐标,调用时 xy=40IF bt<>NIL THEN [ print(bt↑.rchild,xy+5); //中序遍历右子树writeln(bt->data:xy); //访问根结点print(bt↑.lchild,xy+5);] //中序遍历左子树ENDP;"},{"id":"learncoder_38_16335","stem":"假设一维数组 H[1:n]存放森林 F 的每个结点的地址,且序列 H[1],H[2],…,H[n]正好是森林 F 在先根次序下结点地址的排列且当 1<=i<=n 时,E[i]是 H[i]所指结点的次数(即儿子结点的个数)。试给出一个算法,该算法计算森林 F 的树形个数,并计算森林根结点地址。【吉林大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"森林在先根次序遍历时,首先遍历第一棵子树的根,接着是第一棵子树的结点;之后是第二棵树,……,最后一棵树。本题中 E[i]是 H[i]所指结点的次数,次数就是结点的分支个数 B,而分支数 B 与树的结点数N的关系是 N=B+1(除根结点外,任何一个结点都有一个分支所指)。所以,从 E[i]的第一个单元开始,将值累加,当累加到第 i 个单元,其值正好等于 i-1 时,就是第一棵树。接着,用相同方法,将其它树分开,进行到第 n个单元,将所有树分开。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image14.png'/>void Forest(ElemType H[],int E[],int,n)// H[i]是森林 F 在先根次序下结点的地址排列,E[i]是 H[i]所指结点的次数,本算法计算森林//F 的树形个数,并计算森林 F 的最后一个树形的根结点地址{int i=1,sum=0,j=0,m=0; //sum 记一棵树的分支数,j 记树的棵数,m 记一棵树的结点数int tree[]; //tree 记每棵树先序遍历最后一个结点在 H[i]中的地址while (i<=n) //n 是森林中结点个数,题目已给出{sum+=E[i]; m++;if (sum+1==m && i<=n) //记树先序最后结点的地址,为下步初始化{sum=0; m=0; tree[++j]=i;}i++;}//whileif (j==1)return (1); //只有一棵树时,第一个结点是根else return(tree[j-1]+1)}//forest"},{"id":"learncoder_38_16332","stem":"已知二叉树 T 的结点在先根次序下的排列为 A[1],A[2],…,A[n],在中根次序下的排列为 B[1],B[2],…,B[n]数组元素的值为 T 中相应的结点的 INFO 字段的值,并假定二叉树 T 中结点的 INFO 字段的值互不相同,n>=0。试解答:(1)证明由 A[1:n]和 B[1:n]能唯一的确定二叉树 T 的结构;(2)给出建造二叉树 T 的算法,要求所建造的二叉树以 LLINK/RLINK 链接结构表示,且该算法是非递归算法;(3) 分析你所给算法的时间复杂性,该过程包括如何确定基本运算如何推导出期望复杂性和最坏复杂性。【吉林大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"(1)由先序序列 A[1..n]和中序序列 B[1..n],可以确定一棵二叉树(2)void PreInCreat( ElemTypeA[],B[],int l1,h1,l2,h2)//由二叉树前序序列 A[1..n]和中序序列 B[1..n]建立二叉树,l1,h1,和 l2,h2 分别为先序序列和中序序列第一和最后结点的下标.初始调用时 l1=l2=1,h1=h2=n 。{typedef struct {int l1,h1,l2,h2; BiTree t; }node;BiTree bt;int top=0,i; node s[],p; //s 为栈,容量足够大bt=(BiTree)malloc(sizeof(BiNode)); //申请结点空间p.l1=l1; p.h1=h1; p.l2=l2; p.h2=h2; p.t=bt; s[++top]=p; //初始化while(top>0){p=s[top--]; bt=p.t; l1=p.l1; h1=p.h1; l2=p.l2 ;h2=p.h2;//取出栈顶数据for(i=l2;i<=h2;i++) if(B[i]==A[l1]) break; //到中序序列中查根结点的值bt->data=A[l1]; //A[l1]为根结点的值if(i==l2) bt->lchild=null; //bt 无左子树else //将建立左子树的数据入栈{bt->lchild=(BiTree)malloc(sizeof(BiNode)); p.t=bt->lchild;p.l1=l1+1; p.h1=l1+i-l2; p.l2=l2; p.h2=i-1; s[++top]=p; }if(i==h2) bt->rchild=null; //bt 无右子树else {bt->rchild=(BiTree)malloc(sizeof(BiNode)); p.t=bt->rchild;p.l1=l1+i-l2+1; p.h1=h1; p.l2=i+1; p.h2=h2; s[++top]=p; }//右子树数据入栈}//while}结束 PreInCreat(3)当二叉树为单支树时,栈深 n;,当二叉树左右子树高相等时,栈深 logn。时间复杂度 O(n)。"},{"id":"learncoder_38_16334","stem":"试写出复制一棵二叉树的算法。二叉树采用标准链接结构。【山东大学】。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"BiTree Copy(BiTree t)//复制二叉树 t{BiTree bt;if (t==null) bt=null;else{bt=(BiTree)malloc(sizeof(BiNode)); bt->data=t->data;bt->lchild=Copy(t->lchild);bt->rchild=Copy(t->rchild);}return(bt); }//结束 Copy"},{"id":"learncoder_38_16331","stem":"已知一二叉树中结点的左右孩子为 left 和 right,p 指向二叉树的某一结点。请用 C 或 PASCAL 编一个非递归函数树的第一个后序遍历结点。【浙江大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"二叉树结点 p 所对应子树的第一个后序遍历结点 q 的求法如下:若 p 有左子树,则 q 是 p 的左子树上最左下的叶子结点;若 p 无左子树,仅有右子树,则 q 是 p 的右子树上最左下的叶子结点。BiTree PostFirst(p){BiTree q=p;if (!q) return(null); elsewhile(q->lchild || q->rchild); //找最左下的叶子结点if(q->lchild) q=q->lchild; //优先沿左分枝向下去查“最左下”的叶子结点else q=q->rchild; //沿右分枝去查“最左下”的叶子结点return(q);}"},{"id":"learncoder_38_16328","stem":"设某二叉树结点结构为:TYPE bitreptr=^bnodetp;bnodetp=RECORD data:integer; lchild,rchild:bitreptr END;试编写算法,计算每层中结点 data 域数值大于 50 的结点个数,并输出这些结点的 data 域的数值和序号。【北京工业大学】<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image8.png'/>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 计算每层中结点值大于 50 的结点个数,应按层次遍历。设一队列 Q,用 front 和 rear 分别指向队头和队尾元素,last 指向各层最右结点的位置。存放值大于 50 的结点结构为typedef struct {int level,value,idx; }node;//元素所在层号、值和本层中的序号node a[],s;void ValueGT50(BiTree bt)//查各层中结点值大于 50 的结点个数,输出其值及序号{if(bt!=null){int front=0,last=1,rear=1,level=1,i=0,num=0;//num 记>50 的结点个数BiTree Q[];Q[1]=bt;//根结点入队while(front<=last){bt=Q[++front];if(bt->data>50){s.level=level; s.idx=++i; s.value=bt->data; a[++num]=s;}if(bt->lchild!=null) Q[++rear]=bt->lchild;//左子女入队列if(bt->rchild!=null) Q[++rear]=bt->rchild;//右子女入队列if(front==last) {last=rear; level++; i=0;} //本层最后一个结点已处理完} //初始化下层:last 指向下层最右结点,层号加 1,下层>50 的序号初始为 0}//whilefor(i=1;i<=num;i++) //输出 data 域数值大于 50 的结点的层号、data 域的数值和序号printf(“层号=%3d,本层序号=%3d,值=%3d”,a[i].level,a[i].idx,a[i].value);}//算法 ValueGT50 结束"},{"id":"learncoder_38_16327","stem":"已知深度为 h 的二叉树以一维数组 BT(1:2h-1)作为其存储结构。请写一算法,求该二叉树中叶结点的个数。【北京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"二叉树采取顺序结构存储,是按完全二叉树格式存储的。对非完全二叉树要补上“虚结点”。由于不是完全二叉树,在顺序结构存储中对叶子结点的判定是根据其左右子女为 0。叶子和双亲结点下标间的关系满足完全二叉树的性质。int Leaves(int h) //求深度为 h 以顺序结构存储的二叉树的叶子结点数{int BT[]; int len=2h-1, count=0; //BT 是二叉树结点值一维数组,容量为 2hfor (i=1;i<=len;i++) //数组元素从下标 1 开始存放if (BT[i]!=0) //假定二叉树结点值是整数,“虚结点”用 0 填充if(i*2)>len) count++; //第 i 个结点没子女,肯定是叶子else if(BT[2*i]==0 && 2*i+1<=len && BT[2*i+1]==0) count++; //无左右子女的结点是叶子return (count)} //结束 Leaves"},{"id":"learncoder_38_16326","stem":"设二叉树采用二叉链表作为存储结构。试用类 PASCAL 语言实现按前序遍历顺序输出二叉树中结点的非递归算法。要求定义所用结构义:inits(S),empty(S) push(S,P),pop(S),top(S)分别为栈初始化,判栈空,入栈,出栈,看栈顶等操作。【北京大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"TYPE bitreptr=^binode;binode=RECORD data:ElemType; lchild,rchlid:bitreptr END;PROC PreOrder(bt:bitreptr); //非递归前序遍列二叉树VAR S:ARRAY[1..max] OF bitreptr; //max 是栈容量,足够大inits(S);//栈初始化WHILE (bt<>NIL) OR (NOT empty(S)) DO[WHILE (bt<>NIL )DO[write(bt↑data); push(S,bt->rchild); bt:=bt↑.lchild;]//访问结点,右子女进栈WHILE (NOT empty(S) AND top(S)=NIL) bt:=pop(S);// 退栈IF NOT empty(S) THEN bt:=pop(S);] ENDP;"},{"id":"learncoder_38_16317","stem":"设计算法返回二叉树 T 的先序序列的最后一个结点的指针,要求采用非递归形式,且不许用栈。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"二叉树先序序列的最后一个结点,若二叉树有右子树,则是右子树中最右下的叶子结点;若无右子树,仅有左子树,则是左子树最右下的叶子结点;若二叉树无左右子树,则返回根结点。BiTree LastNode(BiTree bt)//返回二叉树 bt 先序序列的最后一个结点的指针{BiTree p=bt;if(bt==null) return(null);else while(p)if (p->rchild) p=p->rchild; //若右子树不空,沿右子树向下else if (p->lchild) p=p->lchild; //右子树空,左子树不空,沿左子树向下else return(p); //p 即为所求}//结束 lastnode"},{"id":"learncoder_38_16324","stem":"设 T 是一棵满二叉树,编写一个将 T 的先序遍历序列转换为后序遍历序列的递归算法。【东北大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"对一般二叉树,仅根据一个先序、中序、后序遍历,不能确定另一个遍历序列。但对于满二叉树,任一结点的左右子树均含有数量相等的结点,根据此性质,可将任一遍历序列转为另一遍历序列(即任一遍历序列均可确定一棵二叉树)。void PreToPost(ElemType pre[] ,post[],int l1,h1,l2,h2)//将满二叉树的先序序列转为后序序列,l1,h1,l2,h2 是序列初始和最后结点的下标。{if(h1>=l1){post[h2]=pre[l1]; //根结点half=(h1-l1)/2; //左或右子树的结点数PreToPost(pre,post,l1+1,l1+half,l2,l2+half-1) //将左子树先序序列转为后序序列PreToPost(pre,post,l1+half+1,h1,l2+half,h2-1) //将右子树先序序列转为后序序列} }//PreToPost"},{"id":"learncoder_38_16323","stem":"设一棵二叉树以二叉链表为存贮结构,结点结构为(lchild, data,rchild),设计一个算法将二叉树中所有结点的学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"void exchange(BiTree bt)//将二叉树 bt 所有结点的左右子树交换{if(bt){BiTree s;s=bt->lchild; bt->lchild=bt->rchild; bt->rchild=s; //左右子女交换exchange(bt->lchild); //交换左子树上所有结点的左右子树exchange(bt->rchild); //交换右子树上所有结点的左右子树} }"},{"id":"learncoder_38_16320","stem":"已知二叉树用下面的顺序存储结构,写出中序遍历该二叉树的算法。TYPE ARRAY [1..maxn] OF RECORD data:char; //存储结点值Lc,Rc;integer; END; //存左孩子右孩子的下标,0 表示无左、右孩子。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image7.png'/>如树 T=A(B(D,E,(#,G)),C(#,F(H,I)))存储如上图。【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 二叉树用顺序方式存储,其遍历方法与用二叉链表方式存储类似。判空时,在二叉链表方式下用结点指针是否等于 null,在顺序存储方式下, 一是下标是否是“虚结点”,二是下标值是否超过最大值(高为 H 的二叉树要有 2H-1 个存储单元,与实际结点个数关系不大)。当然,顺序存储方式下,要告诉根结点的下标。void InOrder(int i) //对顺序存储的二叉树进行中序遍历,i 是根结点的下标{if(i!=0){InOrder(ar[i].Lc); //中序遍历左子树printf(ar[i].data); //访问根结点InOrder(ar[i].Rc); //中序遍历左子树} } // 结束 InOrder"},{"id":"learncoder_38_16325","stem":"已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法。【东北大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"BiTree IntoPost(ElemType in[],post[],int l1,h1,l2,h2)//in 和 post 是二叉树的中序序列和后序序列,l1,h1,l2,h2 分别是两序列第一和最后结点的下标{BiTree bt=(BiTree)malloc(sizeof(BiNode));//申请结点bt->data=post[h2];//后序遍历序列最后一个元素是根结点数据for(i=l1;i<=h1;i++) if(in[i]==post[h2])break;//在中序序列中查找根结点if(i==l1) bt->lchild=null; //处理左子树else bt->lchild=IntoPost(in,post,l1,i-1,l2,l2+i-l1-1);if(i==h1) bt->rchild=null; //处理右子树else bt->rchild=IntoPost(in,post,i+1,h1,l2+i-l1,h2-1);return(bt); }"},{"id":"learncoder_38_16322","stem":"在一棵以二叉链表表示的二叉树上,试写出用按层次顺序遍历二叉树的方法,统计树中具有度为 1 的结点数目的算法链表的类型定义为:TYPE bitreptr=^bnodetp;bnodetp=RECORD data:char; lchild,rchild:bitreptr END;【同济大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"int Level(BiTree bt) //层次遍历二叉树,并统计度为 1 的结点的个数{int num=0; //num 统计度为 1 的结点的个数if(bt){QueueInit(Q); QueueIn(Q,bt);//Q 是以二叉树结点指针为元素的队列while(!QueueEmpty(Q)){p=QueueOut(Q); printf(p->data); //出队,访问结点if(p->lchild && !p->rchild ||!p->lchild && p->rchild)num++;//度为 1 的结点if(p->lchild) QueueIn(Q,p->lchild); //非空左子女入队if(p->rchild) QueueIn(Q,p->rchild); //非空右子女入队} }//if(bt)return(num); }//返回度为 1 的结点的个数"},{"id":"learncoder_38_16319","stem":"对于二叉树的链接实现,完成非递归的中序遍历过程。 【中山大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" void InOrder(BiTree bt){BiTree s[],p=bt; //s 是元素为二叉树结点指针的栈,容量足够大int top=0;while(p || top>0){while(p) {s[++top]=p; bt=p->lchild;} //中序遍历左子树if(top>0){p=s[top--]; printf(p->data); p=p->rchild;} //退栈,访问,转右子树} }"},{"id":"learncoder_38_16316","stem":"若二叉树用以下存储结构表示,试给出求前序遍历的算法:TYPE Tree:=ARRAY[1..max] OF RECORD data:char;parent:integer; END;<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image6.png'/>【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 本题使用的存储结构是一种双亲表示法,对每个结点,直接给出其双亲(的下标),而且用正或负表示该结点是双亲的右子女或左子女。该类结构不适于直接进行前序遍历(即若直接前序遍历,算法要很复杂),较好的办法是将这类结构转为结点及其左右子女的顺序存储结构,即Tree2=ARRAY[1..max] OF RECORD data: char; //结点数据lc,rc: integer; END;//结点的左右子女在数组中的下标void Change (Tree t, Tree2 bt, int *root) //先将 t 转为如上定义类型的变量 bt;{for(i=1;i<=max;i++) {bt[i].lc=bt[i].rc=0;} //先将结点的左右子女初始化为 0for(i=1;i<=max;i++) //填入结点数据,和结点左右子女的信息{bt[i].data=t[i].data;if(t[i].parent<0) bt[-t[i].parent].lc=i; //左子女else if(t[i].parent>0) bt[t[i].parent].rc=i; //右子女else *root=i; //root 记住根结点} }//changevoid PreOrder(Tree2 bt) //对二叉树进行前序遍历{int *root,top=0; int s[]; //s 是栈change(t,bt,root); int i=*root;while(i!=0||top>0){while (i!=0){printf (bt[i].data);if(bt[i].rc!=0) s[++top]=bt[i].rc; //右子女进栈i=bt[i].lc;}if (top>0) i=s[top--];} }//结束 preorder"},{"id":"learncoder_38_16321","stem":"试给出二叉树的自下而上、自右而左的层次遍历算法。【吉林大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 借助队列和栈,最后弹出栈中元素实现对二叉树按自下至上,自右至左的层次遍历void InvertLevel(biTree bt) // 对二叉树按自下至上,自右至左的进行层次遍历{if(bt!=null){StackInit(s); //栈初始化,栈中存放二叉树结点的指针QueueInit(Q); //队列初始化。队列中存放二叉树结点的指针QueueIn(Q,bt);while(!QueueEmpty(Q)) //从上而下层次遍历{p=QueueOut(Q); push(s,p); //出队, 入栈if(p->lchild) QueueIn(Q,p->lchild); //若左子女不空,则入队列if(p->rchild) QueueIn(Q,p->rchild);} //若右子女不空,则入队列while(!StackEmpty(s)) {p=pop(s); printf(p->data);} //自下而上,从右到左的层次遍历}//if(bt!=null)} //结束 InvertLevel"},{"id":"learncoder_38_16318","stem":"已知一棵高度为K具有n个结点的二叉树,按顺序方式存储:(1)编写用先根遍历树中每个结点的递归算法;(2)编写将树中最大序号叶子结点的祖先结点全部打印输出的算法。【东北大学】。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"高度为 K 的二叉树,按顺序方式存储,要占用 2K –1 个存储单元,与实际结点个数 n 关系不大,对不是完全二叉树的二叉树,要增加“虚结点”,使其在形态上成为完全二叉树。int m=2K –1; //全局变量void PreOrder(ElemType bt[],i )//递归遍历以顺序方式存储的二叉树 bt, i 是根结点下标(初始调用时为 1)。{if (i<=m) //设虚结点以 0 表示{printf(bt[i]); //访问根结点if(2*i<=m && bt[2*i]!=0) PreOrder(bt,2*i); //先序遍历左子树if(2*i+1<=m && bt[2*i+1]!=0) PreOrder(bt,2*i+1);// 先序遍历右子树} }//结束 PreOrder二叉树中最大序号的叶子结点,是在顺序存储方式下编号最大的结点void Ancesstor(ElemType bt[]) //打印最大序号叶子结点的全部祖先{c=m; while(bt[c]==0) c--; //找最大序号叶子结点,该结点存储时在最后f=c/2; //c 的双亲结点 fwhile(f!=0) //从结点 c 的双亲结点直到根结点,路径上所有结点均为祖先结点{printf(bt[f]); f=f/2; }//逆序输出,最老的祖先最后输出} //结束"},{"id":"learncoder_38_16314","stem":"利用栈的基本操作写出先序遍历二叉树的非递归算法要求进栈的元素最少,并指出下列(最右图)二叉树中需进栈的元素。 【山东科技大学】<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image5.png'/>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 先序遍历二叉树的非递归算法,要求进栈元素少,意味着空指针不进栈。void PreOrder(Bitree bt)//对二叉数 bt 进行非递归遍历{int top=0; Bitree s[]; //top 是栈 s 的栈顶指针,栈中元素是树结点指针,栈容量足够大while(bt!=null || top>0){while(bt!=null){printf(bt->data); //访问根结点if(bt->rchlid) s[++top]=bt->rchild; //若有右子女,则右子女进栈bt=bt->lchild; }if (top>0) bt=s[top--];}本题中的二叉树中需进栈的元素有 C,H,K,F。"},{"id":"learncoder_38_16313","stem":"在二叉树中查找值为 x 的结点,试编写算法(用 C 语言)打印值为 x 的结点的所有祖先,假设值为 x 的结点不多于一个后试分析该算法的时间复杂度(若不加分析,直接写出结果,按零分算)。【上海交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"后序遍历最后访问根结点,当访问到值为 x 的结点时,栈中所有元素均为该结点的祖先。void Search(BiTree bt,ElemType x) //在二叉树 bt 中,查找值为 x 的结点,并打印其所有祖先{typedef struct{BiTree t; int tag; }stack;//tag=0 表示左子女被访问,tag=1 表示右子女被访问stack s[]; //栈容量足够大top=0;while(bt!=null||top>0){while(bt!=null && bt->data!=x) //结点入栈{s[++top].t=bt; s[top].tag=0; bt=bt->lchild;} //沿左分枝向下if(bt->data==x){ printf(“所查结点的所有祖先结点的值为:\\n”); //找到 xfor(i=1;i<=top;i++) printf(s[i].t->data); return; } //输出祖先值后结束while(top!=0 && s[top].tag==1) top--; //退栈(空遍历)if(top!=0) {s[top].tag=1;bt=s[top].t->rchild;} //沿右分枝向下遍历}// while(bt!=null||top>0)}结束 search因为查找的过程就是后序遍历的过程,使用的栈的深度不超过树的深度,算法复杂度为 O(logn)。"},{"id":"learncoder_38_16315","stem":"设一棵完全二叉树使用顺序存储在数组 bt[1..n]中,请写出进行非递归的前序遍历算法【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"二叉树的顺序存储是按完全二叉树的顺序存储格式,双亲与子女结点下标间有确定关系。对顺序存储结构的二叉树进行遍历,与二叉链表类似。在顺序存储结构下,判二叉树为空时,用结点下标大于 n(完全二叉树)或 0(对一般二叉树的“虚结点”)。本题是完全二叉树。void PreOrder(ElemType bt,int n)//对以顺序结构存储的完全二叉树 bt 进行前序遍历{int top=0,s[]; //top 是栈 s 的栈顶指针,栈容量足够大while(i<=n||top>0){while(i<=n){ printf(bt[i]); //访问根结点;if (2*i+1<=n) s[++top]=2*i+1; //右子女的下标位置进栈i=2*i; } //沿左子女向下if(top>0) i=s[top--]; } //取出栈顶元素}//结束 PreOrder"},{"id":"learncoder_38_16311","stem":"已知一棵二叉树按顺序方式存储在数组 A[1..n]中。设计算法,求出下标分别为 i 和 j 的两个结点的最近的公共祖先【武汉大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"二叉树顺序存储,是按完全二叉树的格式存储,利用完全二叉树双亲结点与子女结点编号间的关系,求下标为 i 和 j 的两结点的双亲,双亲的双亲,等等,直至找到最近的公共祖先。void Ancestor(ElemType A[],int n,i,j)//二叉树顺序存储在数组 A[1..n]中,本算法求下标分别为 i 和 j 的结点的最近公共祖先结点的值。{while(i!=j)if(i>j) i=i/2; //下标为 i 的结点的双亲结点的下标else j=j/2; //下标为 j 的结点的双亲结点的下标printf(“所查结点的最近公共祖先的下标是%d,值是%d”,i,A[i]);//设元素类型整型。}// Ancestor"},{"id":"learncoder_38_16308","stem":"二叉树采用二叉链表存储:(1)编写计算整个二叉树高度的算法(二叉树的高度也叫二叉树的深度)。(2)编写计算二叉树最大宽度的算法(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 求二叉树高度的算法见上题。求最大宽度可采用层次遍历的方法,记下各层结点数,每层遍历完毕,若结点数大于原先最大宽度,则修改最大宽度。int Width(BiTree bt)//求二叉树 bt 的最大宽度{if (bt==null) return (0); //空二叉树宽度为 0else{BiTree Q[];//Q 是队列,元素为二叉树结点指针,容量足够大front=1;rear=1;last=1;//front 队头指针,rear 队尾指针,last 同层最右结点在队列中的位置temp=0; maxw=0; //temp 记局部宽度, maxw 记最大宽度Q[rear]=bt; //根结点入队列while(front<=last){p=Q[front++]; temp++; //同层元素数加 1if (p->lchild!=null) Q[++rear]=p->lchild; //左子女入队if (p->rchild!=null) Q[++rear]=p->rchild; //右子女入队if (front>last) //一层结束,{last=rear;if(temp>maxw) maxw=temp;//last 指向下层最右元素, 更新当前最大宽度temp=0;}//if}//whilereturn (maxw);}//结束 width"},{"id":"learncoder_38_16310","stem":"设一棵二叉树的结点结构为 (LLINK,INFO,RLINK),ROOT 为指向该二叉树根结点的指针,p 和 q 分别为指向该二叉树中任意两个结点的指针,试编写一算法 ANCESTOR(ROOT,p,q,r),该算法找到 p 和 q 的最近共同祖先结点 r。【吉林大学】【中山大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"后序遍历最后访问根结点,即在递归算法中,根是压在栈底的。采用后序非递归算法,栈中存放二叉树结点的指针,当访问到某结点时,栈中所有元素均为该结点的祖先。本题要找 p 和 q 的最近共同祖先结点r ,不失一般性,设 p 在 q 的左边。后序遍历必然先遍历到结点 p,栈中元素均为 p 的祖先。将栈拷入另一辅助栈中。再继续遍历到结点 q 时,将栈中元素从栈顶开始逐个到辅助栈中去匹配,第一个匹配(即相等)的元素就是结点 p 和q 的最近公共祖先。typedef struct{BiTree t;int tag;//tag=0 表示结点的左子女已被访问,tag=1 表示结点的右子女已被访问}stack;stack s[],s1[];//栈,容量够大BiTree Ancestor(BiTree ROOT,p,q,r)//求二叉树上结点 p 和 q 的最近的共同祖先结点 r。{top=0; bt=ROOT;while(bt!=null ||top>0){while(bt!=null && bt!=p && bt!=q) //结点入栈{s[++top].t=bt; s[top].tag=0; bt=bt->lchild;} //沿左分枝向下if(bt==p) //不失一般性,假定 p 在 q 的左侧,遇结点 p 时,栈中元素均为 p 的祖先结点{for(i=1;i<=top;i++) s1[i]=s[i]; top1=top; }//将栈 s 的元素转入辅助栈 s1 保存if(bt==q) //找到 q 结点。for(i=top;i>0;i--)//;将栈中元素的树结点到 s1 去匹配{pp=s[i].t;for (j=top1;j>0;j--)if(s1[j].t==pp) {printf(“p 和 q 的最近共同的祖先已找到”);return (pp);}}while(top!=0 && s[top].tag==1) top--; //退栈if (top!=0){s[top].tag=1;bt=s[top].t->rchild;} //沿右分枝向下遍历}//结束 while(bt!=null ||top>0)return(null);//q、p 无公共祖先}//结束 Ancestor"},{"id":"learncoder_38_16307","stem":"试编写算法求出二叉树的深度。二叉树的存储结构为如下说明的二叉链表: 【北京轻工业学院】【南京航空航天大学】【北京理工大学】TYPE btre=↑bnodebnode=RECORD data:datatype; lch,rch:btre END;","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 二叉树是递归定义的,其运算最好采取递归方式int Height(btre bt)//求二叉树 bt 的深度{int hl,hr;if (bt==null) return(0);else {hl=Height(bt->lch); hr=Height(bt->rch);if(hl>hr) return (hl+1); else return(hr+1);} }"},{"id":"learncoder_38_16309","stem":"以孩子兄弟链表为存储结构,请设计递归和非递归算法求树的深度。【北方交通大学】类似本题的另外叙述有:(1)设 T 是一棵 n 元树,Tb 是 T 的孩子兄弟表示(二叉链表)的二叉树,试编程,由 Tb 计算 T 的高度(要求用非递归方法实现【南京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"由孩子兄弟链表表示的树,求高度的递归模型是:若树为空,高度为零;若第一子女为空,高度为1 和兄弟子树的高度的大者;否则,高度为第一子女树高度加 1 和兄弟子树高度的大者。其非递归算法使用队列,逐层遍历树,取得树的高度。int Height(CSTree bt) //递归求以孩子兄弟链表表示的树的深度{int hc,hs;if (bt==null) return (0);else if (!bt->firstchild) return (1+height(bt->nextsibling);//子女空,查兄弟的深度else // 结点既有第一子女又有兄弟,高度取子女高度+1 和兄弟子树高度的大者{hc=height(bt->firstchild); //第一子女树高hs=height(bt->nextsibling);//兄弟树高if(hc+1>hs)return(hc+1); else return (hs);}}//结束 heightint height(CSTree t) //非递归遍历求以孩子兄弟链表表示的树的深度{if(t==null) return(0);else{int front=1,rear=1; //front,rear 是队头队尾元素的指针int last=1,h=0; //last 指向树中同层结点中最后一个结点,h 是树的高度Q[rear]=t; //Q 是以树中结点为元素的队列while(front<=last){t=Q[front++]; //队头出列while(t!=null) //层次遍历{if (t->firstchild) Q[++rear]=t->firstchild; //第一子女入队t=t->nextsibling; //同层兄弟指针后移}if(front>last) //本层结束,深度加 1(初始深度为 0){h++;last=rear;} //last 再移到指向当前层最右一个结点}//while(front<=last)}//else}//Height"},{"id":"learncoder_38_16306","stem":"假设以双亲表示法作树的存储结构,写出双亲表示的类型说明,并编写求给定的树的深度的算法。(注:已知树中结点数)","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":" 由于以双亲表示法作树的存储结构,找结点的双亲容易。因此我们可求出每一结点的层次,取其最大层次就是树有深度。对每一结点,找其双亲,双亲的双亲,直至(根)结点双亲为 0 为止。int Depth(Ptree t) //求以双亲表示法为存储结构的树的深度,Ptree 的定义参看教材{int maxdepth=0;for(i=1;i<=t.n;i++){temp=0; f=i;while(f>0) {temp++; f=t.nodes[f].parent; } // 深度加 1,并取新的双亲if(temp>maxdepth) maxdepth=temp; //最大深度更新}return(maxdepth);//返回树的深度} //结束 Depth"},{"id":"learncoder_38_16312","stem":"设计这样的二叉树,用它可以表示父子、夫妻和兄弟三种关系,并编写一个查找任意父亲结点的所有儿子的过程。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"用二叉树表示出父子,夫妻和兄弟三种关系,可以用根结点表示父(祖先),根结点的左子女表示妻,妻的右子女表示子。这种二叉树可以看成类似树的孩子兄弟链表表示法;根结点是父,根无右子女,左子女表示妻,妻的右子女(右子女的右子女等)均可看成兄弟(即父的所有儿子),兄弟结点又成为新的父,其左子女是兄弟(父的儿子)妻,妻的右子女(右子女的右子女等)又为儿子的儿子等等。首先递归查找某父亲结点,若查找成功,则其左子女是妻,妻的右子女及右子女的右子女等均为父亲的儿子。BiTree Search(BiTree t,ElemType father)//在二叉树上查找值为 father 的结点{if(t==null) return (null); //二叉树上无 father 结点else if(t->data==father) return(t); //查找成功p=Search(t->lchild,father); p=Search(t->rchild,father); }}//结束 Searchvoid PrintSons(BiTree t,ElemType p) //在二叉树上查找结点值为 p 的所有的儿子{p=Serach(t,p); //在二叉树 t 上查找父结点 pif(p!=null) //存在父结点{q=p->lchild; q=q->rchild; //先指向其妻结点,再找到第一个儿子while(q!=null) {printf(q->data); q=q->rchild;} //输出父的所有儿子}}//结束 PrintSons"},{"id":"learncoder_38_16301","stem":"要求二叉树按二叉链表形式存储,(1)写一个建立二叉树的算法。(2)写一个判别给定的二叉树是否是完全二叉树的算法。完全二叉树定义为:深度为 K,具有 N 个结点的二叉树的每个结点都与深度为 K 的满二叉树中编号从 1 至 N 的结点一一对应。此题以此定义为准。【西北大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"二叉树是递归定义的,以递归方式建立最简单。判定是否是完全二叉树,可以使用队列,在遍历中利用完全二叉树“若某结点无左子女就不应有右子女”的原则进行判断。BiTree Creat() //建立二叉树的二叉链表形式的存储结构{ElemType x;BiTree bt;scanf(“%d”,&x); //本题假定结点数据域为整型if(x==0) bt=null;else if(x>0){bt=(BiNode *)malloc(sizeof(BiNode));bt->data=x; bt->lchild=creat(); bt->rchild=creat();}else error(“输入错误”);return(bt);}//结束 BiTreeint JudgeComplete(BiTree bt) //判断二叉树是否是完全二叉树,如是,返回 1,否则,返回 0{int tag=0; BiTree p=bt, Q[]; // Q 是队列,元素是二叉树结点指针,容量足够大if(p==null) return (1);QueueInit(Q); QueueIn(Q,p); //初始化队列,根结点指针入队while (!QueueEmpty(Q)){p=QueueOut(Q); //出队if (p->lchild && !tag) QueueIn(Q,p->lchild); //左子女入队else {if (p->lchild) return 0; //前边已有结点为空,本结点不空else tag=1; //首次出现结点为空if (p->rchild && !tag) QueueIn(Q,p->rchild); //右子女入队else if (p->rchild) return 0; else tag=1;} //whilereturn 1; } //JudgeComplete"},{"id":"learncoder_38_16298","stem":" 用 PASCAL 语言(或类 PASCAL 语言)完成下列各题:(1)设表达式 a+b*(c-d)-e/f 可以表示成如下二叉树结构:其中 t 为根结点指针,试运用后序遍历二叉树的规则,写出对表达式求值的算法:EXPVALUE<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image2.png'/>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"首先通过对二叉树后序遍历形成后缀表达式,这可通过全局变量的字符数组存放后缀表达式;接着对后缀表达式求值,借助于一栈存放运算结果。从左到右扫描后缀表达式,遇操作数就压入栈中,遇运算符就从栈中弹出两个操作数,作运算符要求的运算,并把运算结果压入栈中,如此下去,直到后缀表达式结束,这时栈中只有一个数,这就是表达式的值。char ar[maxsize];//maxsize 是后缀表达式所能达到的最大长度int i=1;void PostOrder(BiTree t )//后序遍历二叉树 t,以得到后缀表达式{if(t){PostOrder(t->lchild); PostOrder(b->rchild);ar[i++]=b->data; }}//结束 PostOrdervoid EXPVALUE()//对二叉树表示的算术表达式,进行后缀表达式的求值{ar[i]=‘\\0’; //给后缀表达式加上结束标记char value[]; //存放操作数及部分运算结果i=1; ch=ar[i++];while(ch!=‘\\0’){switch(ch){case ch in op: opnd1=pop(value);opnd2=pop(value); //处理运算符push(operate(opnd2,ch,opnd1));break;default: push(value,ch); //处理操作数,压入栈中}ch=ar[i++]; //读入后缀表达式} printf(value[1]); //栈中只剩下一个操作数,即运算结束。} //结束 EXPVALUE"},{"id":"learncoder_38_16304","stem":"已知深度为 h 的二叉树采用顺序存储结构已存放于数组 BT[1:2h-1]中,请写一非递归算法,产生该二叉树的二叉链表结构二叉链表中链结点的构造为(lchild,data,rchild),根结点所在链结点的指针由 T 给出。【北京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"二叉树采用顺序存储结构(一维数组)是按完全二叉树的形状存储的,不是完全二叉树的二叉树顺序存储时,要加“虚结点”。数组中的第一个元素是根结点。本题中采用队列结构。typedef struct{BiTree bt; //二叉树结点指针int num; }tnode // num 是结点在一维数组中的编号tnode Q[maxsize]; //循环队列,容量足够大void creat(BiTree T,ElemType BT[ ])//深度 h 的二叉树存于一维数组 BT[1:2h-1]中,本算法生成该二叉树的二叉链表存储结构{tnode tq; //tq 是队列元素int len=2h-1; //数组长度T=(BiTree)malloc(sizeof(BiNode)); //申请结点T->data=BT[1]; //根结点数据tq.bt=T; tq.num=1;Q[1]=tq; //根入队列front=0;rear=1; //循环队列头、尾指针while(front!=rear) //当队列不空时循环{front=(front+1) % maxsize ;tq=Q[front] ; p=tq.bt; i=tq.num ; //出队,取出结点及编号if (BT[2*i]==‘#’||2*i>len) p->lchild=null; //左子树为空,‘#’表示虚结点else //建立左子女结点并入队列{p->lchild=(BiTree) malloc(sizeof(BiNode)); //申请结点空间p->lchild‡data=BT[2*i]; // 左子女数据tq.bt=p->lchild; tq.num=2*i; rear=(rear+1) % maxsize ;//计算队尾位置Q[rear]=tq; //左子女结点及其编号入队}if(BT[2*i+1]==‘#’|| 2*i+1>len) p->rchild=null; //右子树为空else //建立右子女结点并入队列{p->rchild=(BiTree)malloc(sizeof (BiNode); //申请结点空间p->rchild->data=BT[2*i+1]; tq.bt=p->rchild; tq.num=2*i+1;rear=(rear+1)%maxsize; Q[rear]=tq; //计算队尾位置,右子女及其编号入队}} //while}//结束 creat"},{"id":"learncoder_38_16303","stem":"设任意非空二叉树中结点按层次顺序依次编号为 1,2,…,n(n>0),其存储结构采用下图所示形式,其中 i 表示结点的编号的值是 i 的左儿子的编号,R(i)的值是 i 的右儿子的编号。若 L(i),R(i)的值为 0,表示结点 i 无左儿子或右儿子。试设计<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image3.png'/>(1)求出二叉树的高度。(2)求出每个结点的层号(根结点层号为 1),并填入 D(i)中。(可采用任何高级语言,但要注明你所采用的语言名称","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"二叉树高度可递归计算如下:若二叉树为空,则高度为零,否则,二叉树的高度等于左右子树高度的大者加 1。这里二叉树为空的标记不是 null 而是 0。设根结点层号为 1,则每个结点的层号等于其双亲层号加 1。现将二叉树的存储结构定义如下:typedef struct node{int L[];//编号为 i 的结点的左儿子int R[];//编号为 i 的结点的右儿子int D[];//编号为 i 的结点的层号int i; //存储结点的顺序号(下标)}tnode;(1)int Height(tnode t,int i)//求二叉树高度,调用时 i=1{int lh,rh;if (i==0) return (0);else{lh=Height(t,t.L[i]); rh=Height(t,t.R[i]);if(lh>rh) return(lh+1); else return(rh+1);}}//结束 Height(2)int Level(tnode t)//求二叉树各结点的层号,已知编号为 1 的结点是根,且层号为 1{t.D[1]=1;for(i=1;i<=n;i++) {depth=t.D[i]; //取出根结点层号if(t.L[i]!=0) t.D[t.L[i]]=depth+1; //i 结点左儿子层号if(t.R[i]!=0) t.D[t.R[i]]=depth+1; }//i 结点右儿子层号}结束 level"},{"id":"learncoder_38_16300","stem":"假定用两个一维数组 L[N]和 R[N]作为有 N 个结点 1,2,…, N 的二元树的存储结构。L[i]和 R[i]分别指示结点 i 的左儿子和右儿子;L[i]=0(R[i]=0)表示 i 的左(右)儿子为空。试写一个算法,由 L 和 R 建立一个一维数组 T[n],使 T[i]存放结点 i 的父亲;然后再写一个判别结点 U 是否为结点 V 的后代的算法。【哈尔滨工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"由指示结点 i 左儿子和右儿子的两个一维数组 L[i]和 R[i],很容易建立指示结点 i 的双亲的一维数组 T[i],根据 T 数组,判断结点 U 是否是结点 V 后代的算法,转为判断结点 V 是否是结点 U 的祖先的问题。int Generation (int U,V,N,L[],R[],T[])//L[]和 R[]是含有 N 个元素且指示二叉树结点 i 左儿子和右儿子的一维数组,//本算法据此建立结点 i 的双亲数组 T,并判断结点 U 是否是结点 V 的后代。{for(i=1;i<=N;i++) T[i]=0; //T 数组初始化for (i=1;i<=N;i++) //根据 L 和 R 填写 Tif(L[i]!=0) T[L[i]]=i; //若结点 i 的左子女是 L,则结点 L 的双亲是结点 ifor(i=1;i<=N;i++)if (R[i]!=0) T[R[i]]=i; //i 的右子女是 r,则 r 的双亲是 iint parent=U; //判断 U 是否是 V 的后代while (parent!=V && parent!=0) parent=T[parent];if (parent==V){printf(“结点 U 是结点 V 的后代”);return(1);}else{ printf(“结点 U 不是结点 V 的后代”);return(0);}}结束 Generation"},{"id":"learncoder_38_16305","stem":"二叉树的动态二叉链表结构中的每个结点有三个字段:data,lchild,rchild。其中指针 lchild<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image4.png'/>和 rchild 的类型为 bitre。静态二叉链表是用数组作为存储空间,每个数组元素存储二叉树的一个结点,也有三个字段:datarchild。所不同的是,lchild 和 rdhild 为 integer 型,分别用于存储左右孩子的下标,如果没有左右孩子,则相应的值为下面左图所示的二叉树的静态二叉链表如右图所示。编写算法由二叉树的动态二叉链表构造出相应的静态二叉链表 a[1..n],并写出其调用形式和有关的类型描述。其中 n的整数。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"本题静态链表中结点是按动态二叉链表的前序遍历顺序存放的。首先对动态二叉链表的二叉树进行前序遍历,填写静态链表的“下标”和 data 域,再对动态二叉链表的二叉树进行层次遍历,设队列 Q,填写静态链表的 lchild 域和 rchild 域。typedef struct node //静态链表结点结构{ElemType data; //结点数据int row,lchild,rchild ; //下标,左右子女}component;component st[]; //st 容量足够大struct node {BiTree t; int idx; }qbt;static int num=0;void PreOrder(BiTree bt);// 前序遍历二叉树,填写静态链表的“下标”和 data 域{if (bt){st[++num].data=bt->data; st[num].row=num;PreOrder(bt->lchild); PreOrder(bt->rchild);} }int Locate(ElemType x)//在静态链表中查二叉树结点的下标{for (i=1;i<=num;i++) if (st[i].data==x) return (i);}void DynaToST (BiTree bt) //将二叉树的动态二叉链表结构转为静态链表结构{int i=0; //i 为静态链表 st 的下标if (bt!=null){QueueInit(Q); //Q 是队列,容量足够大,队列元素是 qbtqbt.t=bt; qbt.idx=1; QueueIn(Q,qbt); st[1].data=bt->data;while(!QueueEmpty(Q)){qbt=QueueOut(Q); //出队列p=qbt.t; i=qbt.idx; //二叉树结点及在静态链表中的下标if (p->lchild!=null) //若左子女存在,查其在静态链表中的下标, 填 lchild 域值{lch=Locate(p->lchild->data);st[i].lchild=lch;qbt.t=p->lchild; qbt.idx=lch; QueueIn(Q,qbt); }else st[i].lchild=0; //无左子女,其 lchild 域填 0if (p->rchild!=null) //若右子女存在,查其在静态链表中的下标,填 rchild 域值{rch=Locate(p->->rchild->data);st[i].rchild=rch;qbt.t=p->rchild; qbt.idx=rch; QueueIn(Q,qbt); }else st[i].rchild=0; //无左子女,其 lchild 域填 0}//while}//结束 DynaToST"},{"id":"learncoder_38_16302","stem":"有 n 个结点的完全二叉树存放在一维数组 A[1..n]中,试据此建立一棵用二叉链表表示的二叉树 ,根由 tree 指向。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"BiTree Creat(ElemType A[],int i)//n 个结点的完全二叉树存于一维数组 A 中,本算法据此建立以二叉链表表示的完全二叉树{BiTree tree;if (i<=n){tree=(BiTree)malloc(sizeof(BiNode)); tree->data=A[i];if(2*i>n) tree->lchild=null;else tree->lchild=Creat(A,2*i);if(2*i+1>n) tree->rchild=null;else tree->rchild=Creat(A,2*i+1); }return (tree); }//Creat"},{"id":"learncoder_38_16299","stem":"编程求以孩子—兄弟表示法存储的森林的叶子结点数。要求描述结构。【北京工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"当森林(树)以孩子兄弟表示法存储时,若结点没有孩子(fch=null),则它必是叶子,总的叶子结点个数是孩子子树(fch)上的叶子数和兄弟(nsib)子树上叶结点个数之和。typedef struct node{ElemType data;//数据域struct node *fch, *nsib;//孩子与兄弟域 }*Tree;int Leaves (Tree t)//计算以孩子-兄弟表示法存储的森林的叶子数{if(t)if(t->fch==null) //若结点无孩子,则该结点必是叶子return(1+Leaves(t->nsib)); //返回叶子结点和其兄弟子树中的叶子结点数else return (Leaves(t->fch)+Leaves(t->nsib)); //孩子子树和兄弟子树中叶子数之和}//结束 Leaves"},{"id":"learncoder_38_16287","stem":"高度为 10 的二叉树,其结点最多可能为多少?【首都经贸大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"1023(=210-1)"},{"id":"learncoder_38_16289","stem":"已知 A[1..N]是一棵顺序存储的完全二叉树,如何求出 A[i]和 A[j]的最近的共同祖先?【中国人民大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"根据顺序存储的完全二叉树的性质,编号为 i 的结点的双亲的编号是 i/2 ,故 A[i]和 A[j]的最近公共祖先可如下求出:while(i/2!=j/2)if(i>j) i=i/2; else j=j/2;退出 while 后,若 i/2=0,则最近公共祖先为根结点,否则最近公共祖先是 i/2。"},{"id":"learncoder_38_16296","stem":"假设一个仅包含二元运算符的算术表达式以链表形式存储在二叉树 BT 中,写出计算该算术表达式值的算法。【东北大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"以二叉树表示算术表达式,根结点用于存储运算符。若能先分别求出左子树和右子树表示的子表达式的值,最后就可以根据根结点的运算符的要求,计算出表达式的最后结果。typedef struct node{ElemType data; float val;char optr; //只取‘+’, ‘-’, ‘*’,‘/’struct node *lchild,*rchild }BiNode,*BiTree;float PostEval(BiTree bt) // 以后序遍历算法求以二叉树表示的算术表达式的值{float lv,rv;if(bt!=null){lv=PostEval(bt->lchild); // 求左子树表示的子表达式的值rv=PostEval(bt->rchild); // 求右子树表示的子表达式的值switch(bt->optr){case ‘+’: value=lv+rv; break;case ‘-’: value=lv-rv;break;case ‘*’: value=lv*rv;break;case ‘/’: value=lv/rv;} } return(value); }"},{"id":"learncoder_38_16285","stem":"有 n 个结点并且其高度为 n 的二叉树的数目是多少?【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"2n-1(本题等价于高度为 n 的满二叉树有多少叶子结点,从根结点到各叶子结点的单枝树是不同的二叉树。)"},{"id":"learncoder_38_16284","stem":"证明任一结点个数为 n 的二叉树的高度至少为 O(logn).【浙江大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"最低高度二叉树的特点是,除最下层结点个数不满外,其余各层的结点数都应达到各层的最大值。设 n 个结点的二叉树的最低高度是 h,则 n 应满足 2h-1<n<=2h-1 关系式。解此不等式,并考虑 h 是整数,则有 h= logn +1,即任一结点个数为 n 的二叉树的高度至少为 O(logn)。"},{"id":"learncoder_38_16286","stem":"已知完全二叉树的第七层有 10 个叶子结点,则整个二叉树的结点数最多是多少?【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"235。由于本题求二叉树的结点数最多是多少,第 7 层共有 27-1=64 个结点,已知有 10 个叶子,其余 54 个结点均为分支结点。它在第八层上有 108 个叶子结点。所以该二叉树的结点数最多可达(27-1+108)=235。"},{"id":"learncoder_38_16297","stem":"给出算法将二叉树表示的表达式二叉树按中缀表达式输出,并加上相应的括号。【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"本题是将符号算术表达式用二叉树表示的逆问题,即将二叉树表示的表达式还原成原表达式。二叉树的中序遍历序列与原算术表达式基本相同,差别仅在于二叉树表示中消除了括号。将中序序列加上括号就恢复原貌。当根结点运算符优先级高于左子树(或右子树)根结点运算符时,就需要加括号。int Precede(char optr1,optr2)// 比较运算符级别高低,optr1 级别高于 optr2 时返回 1,相等时返回 0,低于时返回-1{switch(optr1){case‘+’:case‘-’:if(optr2==‘+’||optr2==‘-’)return(0);else return(-1);case‘*’:case‘/’:if(optr1==‘*’||optr2==‘/’)return(0);else return(1);} }void InorderExp (BiTree bt)//输出二叉树表示的算术表达式,设二叉树的数据域是运算符或变量名{int bracket;if(bt){if(bt->lchild!=null){bracket=Precede(bt->data,bt->lchild->data)//比较双亲与左子女运算符优先级if(bracket==1) printf(‘(’);InorderExp(bt->lchild); //输出左子女表示的算术表达式if(bracket==1)printf(‘)’); //加上右括号}printf(bt->data); //输出根结点if(bt->rchild!=null) //输出右子树表示的算术表达式{bracket=Precede(bt->data,bt->rchild->data)if (bracket==1)printf(“(”); //右子女级别低,加括号InorderExp (bt->rchild);if(bracket==1)printf(“)”);} }}//结束 Inorder Exp"},{"id":"learncoder_38_16295","stem":"设二叉树 T 中有 n 个顶点,其编号为 1,2,3,…,n,若编号满足如下性质:(1)T 中任一顶点 v 的编号等于左子树中最小编号减 1;(2)对 T 中任一顶点 v,其右子树中最小编号等于其左子树中的最大编号加 1。试说明对二叉树中顶点编号的规则(按何种顺序编号)。【山东大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"按前序遍历对顶点编号,即根结点从1开始,对前序遍历序列的结点从小到大编号。"},{"id":"learncoder_38_16292","stem":"一棵共有 n 个结点的树,其中所有分支结点的度均为 K,求该树中叶子结点的个数。【东北大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"设分枝结点和叶子结点数分别是为 nk和 n0,因此有 n=n0+nk (1)另外从树的分枝数 B 与结点的关系有 n=B+1=K*nk +1 (2)由(1)和(2)有 n0=n-nk=(n(K-1)+1)/K"},{"id":"learncoder_38_16294","stem":"求含有 n 个结点、采用顺序存储结构的完全二叉树中的序号最小的叶子结点的下标。要求写出简要步骤。【北京工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"根据完全二叉树的性质,最后一个结点(编号为 n)的双亲结点的编号是 n/2 ,这是最后一个分枝结点,在它之后是第一个终端(叶子)结点,故序号最小的叶子结点的下标是 n/2 +1。"},{"id":"learncoder_38_16291","stem":"已知一棵满二叉树的结点个数为 20 到 40 之间的素数,此二叉树的叶子结点有多少个?【东北大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"结点个数在 20 到 40 的满二叉树且结点数是素数的数是 31,其叶子数是 16。"},{"id":"learncoder_38_16288","stem":"任意一个有 n 个结点的二叉树,已知它有 m 个叶子结点,试证明非叶子结点有(m-1)个度为 2,其余度为1。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"证明:设度为 1 和 2 的结点数是 n1 和 n2,则二叉树结点数 n 为 n=m+n1+n2………… (1)由于二叉树根结点没有分枝所指,度为 1 和 2 的结点各有 1 个和 2 个分枝,度为 0 的结点没有分枝,故二叉树的结点数 n 与分枝数 B 有如下关系n=B+1=n1+2*n2+1……………………….(2)由(1)和(2),得 n2=m-1。即 n 个结点的二叉树,若叶子结点数是 m,则非叶子结点中有(m-1)个度为 2,其余度为 1。"},{"id":"learncoder_38_16293","stem":"如在内存中存放一个完全二叉树,在树上只进行下面两个操作:(1)寻找某个结点双亲(2)寻找某个结点的儿子;请问应该用何种结构来存储该二叉树?","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"用顺序存储结构存储 n 个结点的完全二叉树。编号为 i 的结点,其双亲编号是 i/2 (i=1 时无双亲),其左子女是 2i(若 2i<=n,否则 i 无左子女),右子女是 2i+1(若 2i+1<=n,否则无右子女)。"},{"id":"learncoder_38_16290","stem":"给定 K(K>=1),对一棵含有 N 个结点的 K 叉树(N>0)、请讨论其可能的最大高度和最小高度。【大连海事大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"N 个结点的 K 叉树,最大高度 N(只有一个叶结点的任意 k 叉树)。设最小高度为 H,第 i(1<=i<=H)层的结点数Ki-1,则 N=1+k+k2+…+ kH-1,由此得 H= logK(N(K-1)+1)"},{"id":"learncoder_38_16282","stem":"一棵二叉树中的结点的度或为 0 或为 2,则二叉树的枝数为 2(n0-1),其中 n0 是度为 0 的结点的个数。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"证明:设二叉树度为 0 和 2 的结点数及总的结点数分别为 n0,n2 和 n,则 n=n0+n2 …(1)再设二叉树的分支数为 B, 除根结点外,每个结点都有一个分支所指,则 n=B+1… … …(2)度为零的结点是叶子,没有分支,而度为 2 的结点有两个分支,因此(2)式可写为n=2*n2+1 ……………(3)由(1)、(3)得 n2=n0-1,代入(1),并由(1)和(2)得 B=2*(n0-1)。 证毕。"},{"id":"learncoder_38_16279","stem":"设有一棵算术表达式树,用什么方法可以对该树所表示的表达式求值?【中国人民大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"方法有二。一是对该算术表达式(二叉树)进行后序遍历,得到表达式的后序遍历序列,再按后缀表达式求值;二是递归求出左子树表达式的值,再递归求出右子树表达式的值,最后按根结点运算符(+、-、*、/ 等)进行最后求值。"},{"id":"learncoder_38_16276","stem":"从概念上讲,树,森林和二叉树是三种不同的数据结构,将树,森林转化为二叉树的基本目的是什么,并指出树和二叉树的主要区别。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"147.空","type":"short_answer","answer":"树的孩子兄弟链表表示法和二叉树二叉链表表示法,本质是一样的,只是解释不同,也就是说树(树是森林的特例,即森林中只有一棵树的特殊情况)可用二叉树唯一表示,并可使用二叉树的一些算法去解决树和森林中的问题。树和二叉树的区别有三:一是二叉树的度至多为 2,树无此限制;二是二叉树有左右子树之分,即使在只有一个分枝的情况下, 也必须指出是左子树还是右子树,树无此限制;三是二叉树允许为空,树一般不允许为空(个别书上允许为空)。"},{"id":"learncoder_38_16281","stem":"一棵有 n(n>0)个结点的 d 度树, 若用多重链表表示, 树中每个结点都有 d 个链域, 则在表示该树的多重链表中有多少个空链域? 为什么? 【长沙铁道学院】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"n(n>0)个结点的 d 度树共有 nd 个链域,除根结点外,每个结点均有一个指针所指,故该树的空链域有nd-(n-1)=n(d-1)+1 个。"},{"id":"learncoder_38_16278","stem":"请分析线性表、树、广义表的主要结构特点,以及相互的差异与关联。【大连海事大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"线性表属于约束最强的线性结构,在非空线性表中,只有一个“第一个”元素,也只有一个“最后一个”元素;除第一个元素外,每个元素有唯一前驱;除最后一个元素外,每个元素有唯一后继。树是一种层次结构,有且只有一个根结点,每个结点可以有多个子女,但只有一个双亲(根无双亲),从这个意义上说存在一(双亲)对多(子女)的关系。广义表中的元素既可以是原子,也可以是子表,子表可以为它表共享。从表中套表意义上说,广义表也是层次结构。从逻辑上讲,树和广义表均属非线性结构。但在以下意义上,又蜕变为线性结构。如度为 1的树,以及广义表中的元素都是原子时。另外,广义表从元素之间的关系可看成前驱和后继,也符合线性表,但这时元素有原子,也有子表,即元素并不属于同一数据对象。"},{"id":"learncoder_38_16275","stem":"如下的算法分别是后序线索二叉树求给定结点 node 的前驱结点与后继结点的算法,请在算法空格处填上正确的语句。设线索二叉树的结点数据结构为(lflag,left,data,right,rflag),其中: lflag= 0,left 指向其左孩子,lflag= 1,left 指向其前驱;rflag=0,right 指向其右孩子,rflag=1,right 指向其后继。prior(node,x){ if (node !=null)if (__1__ ) *x=node->right; else *x=node->left;}next(bt, node, x) /*bt 是二叉树的树根*/{__2__;if (node!=bt && node!=null)if (node->rflag) __3__ ;else {do t=*x;","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"ode->rflag==0","__2__":"*x=bt","__3__":"*x=node->right"}},{"id":"learncoder_38_16277","stem":"树和二叉树之间有什么样的区别与联系?【西北工业大学】【厦门大学】【燕山大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"树和二叉树逻辑上都是树形结构,区别有以上题 1 所述三点。二叉树不是树的特例。"},{"id":"learncoder_38_16274","stem":"下面的算法在中序线索树中找由指针所指结点的后继并由指针指向该后继结点,试补充完整(线索树的结点有五个域 data,lchild,rchild,左、右标志域 ltag、rtag,并规定标志 0 指向孩子,1 指向线索。PROC inorder_next(p);__1__ ;IF p^.rtag=0 THEN WHILE__2__DO q:= __3__;return(q)ENDP;【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"若 p^.rtag=1,则 p^.rchild 为后继,否则 p 的后继是p的右子树中最左下的结点","type":"blank","options":{"__1__":"q=p^.rchild","__2__":"q^.ltag=0","__3__":"q^.lchild"}},{"id":"learncoder_38_16283","stem":"一个深度为 L 的满 K 叉树有以下性质:第 L 层上的结点都是叶子结点,其余各层上每个结点都有 K 棵非空子树,如果按层次顺序从 1 开始对全部结点进行编号,求:1)各层的结点的数目是多少? 2)编号为 n 的结点的双亲结点(若存在)的编号是多少?3)编号为 n 的结点的第 i 个孩子结点(若存在)的编号是多少?4)编号为 n 的结点有右兄弟的条件是什么?如果有,其右兄弟的编号是多少?","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"short_answer","answer":"(1)kh-1(h 为层数)(2)因为该树每层上均有 Kh-1个结点,从根开始编号为 1,则结点 i 的从右向左数第2个孩子的结点编号为 ki。设 n 为结点 i 的子女,则关系式(i-1)k+2<=n<=ik+1 成立,因 i 是整数,故结点 n 的双亲 i 的编号为 n-2)/k +1。(3) 结点 n(n>1)的前一结点编号为 n-1(其最右边子女编号是(n-1)*k+1),故结点 n 的第 i 个孩子的编号是(n-1)*k+1+i。(4) 根据以上分析,结点 n 有右兄弟的条件是,它不是双亲的从右数的第一子女,即 (n-1)%k!=0,其右兄弟编号是 n+1。"},{"id":"learncoder_38_16269","stem":"二叉树存储结构同上题,以下程序为求二叉树深度的递归算法,请填空完善之。int depth(bitree bt) /*bt 为根结点的指针*/{int hl,hr;if (bt==NULL) return(__1__);hl=depth(bt->lchild); hr=depth(bt->rchild);if(__2__) __3__;return(hr+1);} 【西南交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"0","__2__":"hl>hr","__3__":"hr=hl"}},{"id":"learncoder_38_16272","stem":"已给如下关于二叉树的类型说明:TYPE tree=^node ;node=RECORD data :integer; left ,right:tree END;以下过程实现对二叉树 t 前序遍历的非递归算法:PROCEDURE preorder(t:tree );VAR stack: ARRAY [1..100] OF tree; nd: tree; top: integer;BEGIN top:=1; stack[top]:=t;WHILE__1__ DOBEGIN nd:=stack[top];top:=top -1; write (nd^.data);IF (nd^.right<>NIL) THEN BEGIN top:=top +1; __2__ END;IF __3__THEN BEGIN (4) ;stack[top]:= nd^.left;ENDENDEND; 【厦门大学】__4__","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"top>0","__2__":"stack[top]:=nd^.right","__3__":"nd^.left<>NIL","__4__":"top:=top+1 (左子树非空)"}},{"id":"learncoder_38_16271","stem":"由二叉树的前序遍历和中序遍历序列能确定唯一的一棵二叉树,下面程序的作用是实现由已知某二叉树的前序遍历和中序遍历序列,生成一棵用二叉链表表示的二叉树并打印出后序遍历序列,请写出程序所缺的语句。#define MAX 100typedef struct Node{char info; struct Node *llink, *rlink; }TNODE;char pred[MAX],inod[MAX];main(int argc,int **argv){ TNODE *root;if(argc<3) exit 0;strcpy(pred,argv[1]); strcpy(inod,argv[2]);root=restore(pred,inod,strlen(pred));postorder(root);}TNODE *restore(char *ppos,char *ipos,int n){ TNODE *ptr; char *rpos; int k;if(n<=0) return NULL;ptr->info=__1__;for(__2__ ; rpos<ipos+n;rpos++) if(*rpos==*ppos) break;k=__3__;ptr->llink=restore(ppos+1, __4__,k );ptr->rlink=restore (__5__+k,rpos+1,n-1-k);return ptr;}postorder(TNODE*ptr){ if(ptr=NULL) return;postorder(ptr->llink); postorder(ptr->rlink); printf(“%c”,ptr->info);} 【中科院计算所】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"*ppos","__2__":"rpos=ipos","__3__":"rpos–ipos","__4__":"ipos","__5__":"ppos+1"}},{"id":"learncoder_38_16268","stem":"以下程序是二叉链表树中序遍历的非递归算法,请填空使之完善。二叉树链表的结点类型的定义如下:typedef struct node /*C 语言/{char data; struct node *lchild,*rchild;}*bitree;void vst(bitree bt) /*bt 为根结点的指针*/{ bitree p; p=bt; initstack(s); /*初始化栈 s 为空栈*/while(p || !empty(s)) /*栈 s 不为空*/if(p) { push (s,p); __1__; } /*P 入栈*/else { p=pop(s); printf(“%c”,p->data); __2__; } /*栈顶元素出栈*/} 【西南交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"p=p->lchild","__2__":"p=p->rchild"}},{"id":"learncoder_38_16273","stem":"下面是中序线索树的遍历算法,树有头结点且由指针 thr 指向。树的结点有五个域,分别为数据域 data,左、右孩子域 lchild、rchild 和左、右标志域 ltag,rtag。规定,标志域为 1 是线索,O 是指向孩子的指针。inordethread(thr){p=thr->lchild;while (__1__){ while(__2__) p= __3__;printf(p->data);while(__4__) { p=__5__;printf(p->data);}p= __6__;}} 【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"p<>thr","__2__":"p->ltag=0","__3__":"p->lchild","__4__":"p->rtag=1 && p->rchild!=thr","__5__":"p=p->rchild","__6__":"p=p->rchild"}},{"id":"learncoder_38_16270","stem":"n 个结点的完全二叉树存储在数组 a 中,下面为非递归的先序遍历算法。PROC preorder(a);BEGIN top:=0; t:=1;WHILE (t<=n) OR__1__DOBEGIN WHILE t<=n DO BEGIN write(a[t]); top:=top+1; s[top]:=t; t:= __2__;END;IF top>0 THEN BEGIN t:=s[top]*2+1; top:= __3__; END;END;END; 【中山大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"top>0","__2__":"t*2","__3__":"top-1"}},{"id":"learncoder_38_16266","stem":"下述是一个由二叉树的前序序列和中序序列构造该二叉树的算法,其中,数组A[1..n]存放前序序列,数组B[1..n]存放中序序列,s 为根结点指针,i,j 为树 s 的前序序列在 A[1..n]中的开始位置和结束位置,x,y 为树 s 的中序序列 在 B[1..n] 中的 开始 位置和 结束 位置。 所生成 的二 叉树采 用二 叉链 表存储 结构 ,其结 点的 形式 为(lchild,data,rchild)。请在算法的空框中填入适当语句,使其成为一个完整的算法。PROCEDURE creatBT(i,j,x,y: integer; VAR s: link);VAR k,L: integer;BEGIN s:= NIL;IF__1__THENBEGIN new (s); s^.data:=a[i]; k:=x;WHILE__2__DO k:=k+1;L:=__3__;IF k=x THEN s^.lchild:=NIL; ELSE__4__;IF k=y THEN s^.rchild:=NIL; ELSE__5__;ENDEND; 【西安交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":" (i<=j) AND (x<=y)","__2__":"A[i]<>B[k]","__3__":"k-x","__4__":"creatBT(i+1,i+L,x,k-1,s^.lchild)","__5__":" creatBT(i+L+1,j,k+1,y,s^.rchild)"}},{"id":"learncoder_38_16267","stem":"已知中序遍历 bt 所指二叉树算法如下,s 为存储二叉树结点指针的工作栈,请在划线处填入一条所缺语句。PROC inorder (bt:bitreptr);inistack(s);__1__;WHILE NOT empty(s) DO[WHILE gettop(s)<>NIL DO push(s,gettop(s)↑.lchild); __2__;IF NOT empty(s) THEN [visit (gettop(s)^); p:=pop(s); __3__ ] ]ENDP;{inorder} 【北京轻工业学院】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"push(s,bt)","__2__":"pop(s)","__3__":"push(s,p^.rchild)"}},{"id":"learncoder_38_16263","stem":"设一棵二叉树的结点定义为struct BinTreeNode{ElemType data; BinTreeNode *leftchild,*rightchild; }现采用输入广义表表示建立二叉树。具体规定如下:(1)树的根结点作为由子树构成的表的表名放在表的最前面;(2)每个结点的左子树和右子树用逗号隔开。若仅有右子树没有左子树,逗号不能省略。(3)在整个广义表输入的结尾加上一个特殊的符号(例如“#”)表示输入结束。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第6章/image1.png'/>例如,对于如上图所示的二叉树,其广义表表示为 A(B(D,E(G)),C(,F))。此算法的基本思路是:依次从保存广义表的字符串 ls 中输入每个字符。若遇到的是字母(假设以字母作为结点的值),则表示是结点的值,应为它建立一个新的结点,并把该结点作为左子女(当 k=1)或右子女(当 k=2)链接到其双亲结点上。若遇到的是左括号“(”,则表明子表的开始,将 k 置为 1;若遇到的是右括号“)”,则表明子表结束。若遇到的是逗号“,”,则表示以左子女为根的子树处理完毕,接着处理以右子女为根的子树,将 K 置为 2。在算法中使用了一个栈 s,在进入子表之前,将根结点指针进栈,以便括号内的子女链接之用。在子表处理结束时退栈。相关的栈操作如下:MakeEmpty(s) 置空栈 Push(s,p) 元素 p 入栈Pop(s) 退栈 Top(s) 存取栈顶元素的函数下面给出了建立二叉树的算法,其中有 5 个语句缺失,请阅读此算法并把缺失的语句补上。(每空 3 分)void CreatBinTree(BinTreeNode *&BT,char ls){Stack<BinTreeNode*>s; MakeEmpty(s);BT=NULL; //置空二叉树BinTreeNode *p;int k; istream ins(ls); //把串 ls 定义为输入字符串流对象 ins ;char ch; ins>>ch; //从 ins 顺序读入一个字符while (ch != ‘#’){ //逐个字符处理,直到遇到‘#’为止switch(ch){case ‘(’:__1__;k=1; break;case ‘)’: pop(s); break;case’,’ :__2__; break;default :p=new BinTreeNode; __3__;p->leftChild=NULL;p->rightChild=NULL;if(BT==NULL) __4__;else if (k==1) top(s)->leftChild=p;else top(s)->rightChild=p;}__5__; } } 【清华大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"Push(s,p)","__2__":"K=2","__3__":"p->data=ch","__4__":"BT=p","__5__":" ins>>ch"}},{"id":"learncoder_38_16265","stem":"下列是先序遍历二叉树的非递归子程序,请阅读子程序(C 语言与 PASCAL 语言过程功能完全相同,任选其一),填充空格,使其成为完整的算法。C 语言函数:void example(b)btree *b;{ btree *stack[20], *p;int top;if (b!=null){ top=1; stack[top]=b;while (top>0){ p=stack[top]; top--;printf(“%d”,p->data);if (p->rchild!=null){__1__; __2__;}if (p->lchild!=null)__3__; __4__;}}}}PASCAL 语言过程PROCEDURE example(b:btree);VAR stack:ARRAY[1..20] OF btree;top:integer; p:btree;BEGINIF b<>NIL THENBEGIN top:=1; stack[top]:=b;WHILE top>0 DOBEGIN p:=stack[top];top:=top-1;write(p^.data);IF p^.rchild<>NILTHEN BEGIN","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"top++","__2__":"stack[top]=p->rchild","__3__":"top++","__4__":"stack[top]=p->lchild"}},{"id":"learncoder_38_16262","stem":"具有 n 个结点的完全二叉树,已经顺序存储在一维数组 A[1..n]中,下面算法是将 A 中顺序存储变为二叉链表存储的完全二叉树。请填入适当的语句在下面的横线上,完成上述算法。TYPE ar=ARRAY[1..n] OF datatype;pointer=RECORD data:datatype; lchild, rchild: pointer; END;PROCEDURE btree(VAR a: ar; VAR p:pointer);VAR i:integer;PROCEDURE createtree(VAR t: pointer;i: integer)BEGIN __1__; t^.data=a[i];IF__2__THEN creattree(__3__) ELSE t^.lchild:=NIL;IF__4__THEN createtree(__5__) ELSE t^.rchild:=NIL;END;BEGINj:=__6__; createtree(p,j)END; 【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"new(t)","__2__":"2*i≤n","__3__":"t^.lchild,2*i","__4__":"2*i+1≤n","__5__":"t^.rchild,2*i+1","__6__":"1"}},{"id":"learncoder_38_16264","stem":"判断带头结点的双向循环链表 L 是否对称相等的算法如下所示,请在划线处填上正确的语句FUNCTION equal(l:pointer) :boolean;VAR p,q:pointer; result: Boolean;BEGIN result =true ; p:= l^.link; q:=l^.pre ;WHILE (p<>q) AND (__1__)DOIF p^.data=q^.data THEN BEGIN __2__; __3__; END;ELSE result=false ;return(result);END; 【华南师范大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"result","__2__":"p:=p^.link","__3__":"q:=q^.pre"}},{"id":"learncoder_38_16260","stem":"阅读下列程序说明和程序,填充程序中的__1__【程序说明】本程序完成将二叉树中左、右孩子交换的操作。交换的结果如下所示(编者略)。本程序采用非递归的方法,设立一个堆栈 stack 存放还没有转换过的结点,它的栈顶指针为 tp。交换左、右子树的算法为:(1)把根结点放入堆栈。(2)当堆栈不空时,取出栈顶元素,交换它的左、右子树,并把它的左、右子树分别入栈。(3)重复(2)直到堆栈为空时为止。typedef struct node *tree;struct node{int data; tree lchild,rchildexchange(tree t){tree r,p; tree stack [500]; int tp=0;__2__while (tp>=0){__3__if(__4__){r=p->lchild; p->lchild=p->rchild; p->rchild=rstack[","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"stack[tp]=t","__2__":"p=stack[tp--]","__3__":"p","__4__":"++tp"}},{"id":"learncoder_38_16259","stem":"二叉树以链方式存储,有三个域,数据域 data,左右孩子域 lchild,rchild。树根由 tree 指向 。现要求按层次从上到下,同层次从左到右遍历树。下面算法中用到 addx(p),将指针 p 进队,delx( )将队头元素返回并退队,notempty 在队不空时返回 true,否则为 false,将算法补充完整:PROC processnode(p);IF__1__THEN [write(p^.data); __2__]ENDP;PROC trave(tree);write(tree^.data);__3__;WHILE notempty() DO[ r:=delx( ); processnode(r^.lchild); processnode(__4__)]ENDP; 【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"p<>NIL","__2__":"addx(p)","__3__":"addx(tree)","__4__":"r^.rchild"}},{"id":"learncoder_38_16256","stem":"将二叉树 bt 中每一个结点的左右子树互换的 C 语言算法如下,其中 ADDQ(Q,bt),DELQ(Q),EMPTY(Q)分别为进队,出队和判别队列是否为空的函数,请填写算法中得空白处,完成其功能。typedef struct node{int data ; struct node *lchild, *rchild; }btnode;void EXCHANGE(btnode *bt){btnode *p, *q;if (bt){ADDQ(Q,bt);while(!EMPTY(Q)){p=DELQ(Q); q=__1__; p->rchild=__2__; __3__=q;if(p->lchild) __4__; if(p->rchild)__5__}} }//【北京科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"p->rchild","__2__":"p->lchild","__3__":"p->lchild","__4__":"ADDQ(Q,p->lchild)","__5__":"ADDQ(Q,p->rchild)"}},{"id":"learncoder_38_16261","stem":"下面使用类 pascal 语言写的对二叉树进行操作的算法,请仔细阅读TYPE pointer=^tnodetp;tnodetp=RECORD data: char; llink,rlink: pointer;END;linkstack=^linknodet;linknodet=RECORD data:pointer; next;linkstack;END;PROC unknown (VAR t:pointer);VAR p,temp:pointer;BEGIN p:=t;IF p<> NIL THEN[temp:=p^.llink ;p^.llink:=p^.rlink;;p^.rlink:=temp;unknown(p^.llink); unknown(p^.rlink); ]END;① 指出该算法完成了什么功能。__1__② 用栈将以上算法改为非递归算法unknown1,其中有若干语句或条件空缺请在空缺处填写上适当的语句或条件PROC inistack(VAR s:linkstack);__2__; s^.next:=NIL;ENDP;FUNC empty (s:linkstack):boolean;IF __3__THEN empty:=true ELSE empty:=false;ENDF;FUNC gettop(s:linkstack):pointer;gettop:=__4__;ENDF;FUNC pop(VAR s:linkstack):pointer;VAR p:linkstack;pop:=s^.next^.data; p:=s^.next; __5__;__6__;ENDF;PROC push (VAR s:linkstack;x:pointer);VAR p:linkstack;new(p); p^.data:=x; __7__; s^.next:=p;ENDP;PROC unknown1(VAR t:pointer);VAR p,temp: pointer; finish: boolean;BEGINinistack(s); finish:=false; p:=t;REPEATWHILE p<> NIL DO[temp:=p^.llink; p^.llink:=p^.rlink; p^.rlink:=temp;__8__; p:=p^.llink; ];IF __9__THEN [p:=gettop(s);temp;=pop(s);] ELSE__10__UNTIL__11__ENDP; 【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"本算法将二叉树的左右子树交换","__2__":"new (s)","__3__":" s^.next=NIL","__4__":"s^.next^.data","__5__":" s^.next:= p^.next","__6__":"dispose(p)","__7__":"p^.next:=s^.next","__8__":"push(s,p^.rchil d) ","__9__":"NOT empty(s)","__10__":" finishe:=true","__11__":"finish=true(或s^.next=NIL)"}},{"id":"learncoder_38_16258","stem":"下面是求二叉树高度的类 PASCAL(注:编者略)及类 C 写的递归算法试补充完整[说明](1)考生可根据自己的情况任选一个做(都选不给分)(2)二叉树的两指针域为 lchild 与 rchild, 算法中 p 为二叉树的根,lh 和 rh 分别为以 p 为根的二叉树的左子树和右子树的高,hi 为以 p 为根的二叉树的高,hi 最后返回。height(p){if (__1__){if(p->lchild==null) lh=__2__; else lh=__3__;if(p->rchild==null) rh=__4__; else rh=__5__;if (lh>rh) hi=__6__;else hi=__7__;}else hi=__8__;return hi;}// 【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"p","__2__":"0","__3__":"height(p->lchild)","__4__":"0","__5__":"height(p->rchild)","__6__":"lh+1","__7__":"rh+1","__8__":"0"}},{"id":"learncoder_38_16257","stem":"设 t 是给定的一棵二叉树,下面的递归程序 count(t)用于求得:二叉树 t 中具有非空的左,右两个儿子的结点个数 N2;只有非空左儿子的个数 NL;只有非空右儿子的结点个数 NR 和叶子结点个数 N0。N2、NL、NR、N0 都是全局量,且在调用 count(t)之前都置为 0.typedef struct node{int data; struct node *lchild,*rchild;}node;int N2,NL,NR,N0;void count(node *t){if (t->lchild!=NULL) if __1__ N2++; else NL++;else if __2__NR++; else __3__ ;if(t->lchild!=NULL) __4__; if (t->rchild!=NULL) __5__} /*call form :if(t!=NULL) count(t);*/","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"t->rchild!=null","__2__":"t->rchild!=null","__3__":"N0++","__4__":"count(t->lchild)","__5__":"count(t->rchild)"}},{"id":"learncoder_38_16253","stem":"设 n0为哈夫曼树的叶子结点数目,则该哈夫曼树共有__1__个结点。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"2n0-1"}},{"id":"learncoder_38_16252","stem":"有一份电文中共使用 6 个字符:a,b,c,d,e,f,它们的出现频率依次为 2,3,4,7,8,9,试构造一棵哈夫曼树,则其加权路径长度 WPL 为__1__,字符 c 的编码是__2__。【中国矿业】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"80","__2__":"001"}},{"id":"learncoder_38_16254","stem":"①二叉树用来表示表达式,因为需要保存各子树的值,修改二叉树的结点结构为(Lchild,Data,Val,Rchild)。其中 Lchild,Rchild 的意义同前,Val 用来存放以该结点为根的子树的值,值的类型依具体情况而定。为了简便起见,算法假定所考虑的表达式只有+,-,*,/ 四种二目运算,且已表示成相应的二叉树。算法所计算的表达式值放在根结点的 Val 域中。PROC Postorder-eval(t:ptrType)BEGIN IF (t!=NULL)BEGIN__1__; __2__;CASE t^.data: ‘+’: t^.Val:=t^. Lchild^. Val + t^. Rchild ^. Val; BREAK; ‘-’: t^.Val:=t^. Lchild^. Val - t^. Rchild ^. Val; BREAK; ‘*’: t^.Val:=t^. Lchild^. Val * t^. Rchild ^. Val; BREAK; ‘/’: t^.Val:=t^. Lchild^. Val / t^. Rchild ^. Val; BREAK;otherwise: __3__; BREAK;ENDCASE ENDEND;②PROC Delete(x:datatype,A:tree)BEGIN tempA:= __4__;WHILE (tempA^.Item!=x) AND (tempA!=NULL) DOIF (x<tempA^.item) BEGIN r:=tempA; tempA:=__5__; ENDELSE BEGIN r:=tempA;tempA:=tempA^.Rchild;END;//tempA 为要删结点,r 为 tempA 的父亲IF __6__ return(x);IF (tempA^.Lchild!=NULL) AND (tempA^.rchild!=NULL)BEGIN t:=tempA; q:=tempA^.Rchild;WHILE (q^.Lchild!=NULL) DO BEGIN t:=q; q:=q^.Lchild; END;t^.Lchild:=__7__; //删去 qq^.Lchild :=tempA^.Lchild; q^.Rchild:=tempA^.Rchild;IF (tempA^.item< r^.item) r^.Lchild :=__8__ ELSE r^.Rchild:=q //用 q 代替 tempAEND;ELSE IF(tempA^.Lchild!=NULL) IF(tempA^.item<r^.item) r^.Lchild:=tempA^.LchildELSE r^.Rchild:=tempA^.LchildELSE IF(tempA^.Rchild!=NULL) IF(tempA^.item<r^.item) r^.Rchild:=__9__ELSE r^.Lchild:=tempA^.RchildELSE //tempA 为树叶IF__10__ r^.Lchild:=NULL ELSE r^.Rchild:=NULLEND; 【中山大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"本题①是表达式求值,②是在二叉排序树中删除值为 x 的结点。首先查找 x,若没有 x,则结束。否则分成四种情况讨论:x 结点有左右子树;只有左子树;只有右子树和本身是叶子。","type":"blank","options":{"__1__":"Postoder_eval(t^.Lchild)","__2__":"Postorder_eval(t^.Rchild)","__3__":"ERROR(无此运算符)","__4__":"A","__5__":"tempA^.Lchild","__6__":"tempA=NULL","__7__":"q^.Rchild","__8__":"q","__9__":"tempA^.Rchild","__10__":"tempA^.Item<r^.Item"}},{"id":"learncoder_38_16251","stem":"有数据 WG={7,19,2,6,32,3,21,10},则所建 Huffman 树的树高是__1__,带权路径长度 WPL 为__2__。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"6","__2__":"261"}},{"id":"learncoder_38_16250","stem":"若以{4,5,6,7,8}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是__1__。【西安电子科技大学】【厦门大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"69"}},{"id":"learncoder_38_16249","stem":"哈夫曼树是__1__。【北京理工大学】【 长沙铁道学院】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"带权路径长度最小的二叉树,又称最优二叉树 "}},{"id":"learncoder_38_16247","stem":"线索二元树的左线索指向其__1__,右线索指向其__2__。【哈尔滨工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"前驱","__2__":"后继"}},{"id":"learncoder_38_16244","stem":"一棵左子树为空的二叉树在先序线索化后,其中的空链域的个数为:__1__。【厦门大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"2"}},{"id":"learncoder_38_16246","stem":"设一棵后序线索树的高是 50,结点 x 是树中的一个结点,其双亲是结点 y,y 的右子树高度是 31,x 是 y 的左孩子。则确定 x 的后继最多需经过__1__中间结点(不含后继及 x 本身)【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"31(x 的后继是经 x 的双亲 y 的右子树中最左下的叶结点) "}},{"id":"learncoder_38_16245","stem":"具有 n 个结点的满二叉树,其叶结点的个数是__1__。【北京大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"(n+1)/2"}},{"id":"learncoder_38_16248","stem":"设 y 指向二叉线索树的一叶子,x 指向一待插入结点,现 x 作为 y 的左孩子插入,树中标志域为 ltag 和 rtag,并规定标志为 1 是线索,则下面的一段算法将 x 插入并修改相应的线索,试补充完整:(lchild,rchild 分别代表左,右孩子)x^.ltag:=__1__; x^.lchild:= __2__; y^.ltag:= __3__;y^.lchild:= __4__; x^.rtag:= __5__; x^.rchild:= __6__;IF (x^.lchild<>NIL) AND (x^lchild^.rtag=1) THEN x^.lchild^.rchild:= __7__;【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"1","__2__":"y^.lchild","__3__":"0","__4__":"x","__5__":"1","__6__":" y","__7__":"x"}},{"id":"learncoder_38_16243","stem":"在一棵存储结构为三叉链表的二叉树中,若有一个结点是它的双亲的左子女,且它的双亲有右子女,则这个结点在后序遍历中的后继结点是__1__。【中国人民大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"双亲的右子树中最左下的叶子结点 "}},{"id":"learncoder_38_16240","stem":"利用树的孩子兄弟表示法存储,可以将一棵树转换为__1__。【重庆大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"二叉树"}},{"id":"learncoder_38_16242","stem":"先根次序周游树林正好等同于按__1__周游对应的二叉树;后根次序周游树林正好等同于__2__周游对应的二叉树。【山东大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"先根次序","__2__":"中根次序"}},{"id":"learncoder_38_16239","stem":"一个无序序列可以通过构造一棵__1__树而变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"二叉排序树 "}},{"id":"learncoder_38_16241","stem":"若一个二叉树的叶子结点是某子树的中序遍历序列中的最后一个结点,则它必是该子树的__1__序列中的最后一个结点。【武汉大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"前序"}},{"id":"learncoder_38_16238","stem":"现有按中序遍历二叉树的结果为 abc,问有__1__种不同的二叉树可以得到这一遍历结果,这些二叉树分别是__2__。【中国矿业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"5","__2__":"略 "}},{"id":"learncoder_38_16237","stem":"已知二叉树前序为 ABDEGCF,中序为 DBGEACF,则后序一定是__1__。【青岛大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"DGEBFCA "}},{"id":"learncoder_38_16236","stem":"设二叉树中每个结点均用一个字母表示,若一个结点的左子树或右子树为空,用 .表示,现前序遍历二叉树,访问的结点的序列为 ABD.G...CE.H..F..,则中序遍历二叉树时,访问的结点序列为__1__;后序遍历二叉树时,访问的结点序列为__2__。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":" .D.G.B.A.E.H.C.F. ","__2__":"...GD.B...HE..FCA"}},{"id":"learncoder_38_16235","stem":"已知一棵二叉树的前序序列为 abdecfhg,中序序列为 dbeahfcg,则该二叉树的根为__1__,左子树中有__2__,右子树中有__3__。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"a","__2__":"dbe","__3__":"hfcg "}},{"id":"learncoder_38_16234","stem":"二叉树的先序序列和中序序列相同的条件是__1__。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"任何结点至多只有右子女的二叉树。"}},{"id":"learncoder_38_16231","stem":"每一棵树都能唯一的转换为它所对应的二叉树。若已知一棵二叉树的前序序列是BEFCGDH,对称序列是FEBGCHD,则它的后序序列是__1__。设上述二叉树是由某棵树转换而成,则该树的先根次序序列是__2__。【山东工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"该二叉树转换成森林,含三棵树,其第一棵树的先根次序是 BEF","type":"blank","options":{"__1__":"FEGHDCB","__2__":"BEF"}},{"id":"learncoder_38_16233","stem":"二叉树结点的对称序序列为 A,B,C,D,E,F,G,后序序列为 B,D,C,A,F,G,E,则该二叉树结点的前序序列为__1__,则该二叉树对应的树林包括__2__棵树。【北京大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"EACBDGF","__2__":"2 "}},{"id":"learncoder_38_16230","stem":"n(n 大于 1)个结点的各棵树中,其深度最小的那棵树的深度是__1__。它共有__2__个叶子结点和__3__个非叶子结点,其中深度最大的那棵树的深度是__4__,它共有__5__个叶子结点和__6__个非叶子结点。【山东大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"2","__2__":"n-1","__3__":"1","__4__":"n","__5__":"1","__6__":"n-1"}},{"id":"learncoder_38_16232","stem":"先根次序周游树林正好等同于按__1__周游对应的二叉树,后根次序周游树林正好等同于按__2__周游对应的二叉树。【山东工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"先序","__2__":"中序"}},{"id":"learncoder_38_16228","stem":"含 4 个度为 2 的结点和 5 个叶子结点的二叉树,可有__1__个度为 1 的结点。【北京工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"任意二叉树,度为1的结点个数没限制。只有完全二叉树,度为1的结点个数才至多为 1。","type":"blank","options":{"__1__":"0 至多个。"}},{"id":"learncoder_38_16227","stem":"8 层完全二叉树至少有__1__个结点,拥有 100 个结点的完全二叉树的最大层数为__2__。【西南交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"128","__2__":"7"}},{"id":"learncoder_38_16229","stem":"一棵树 T 中,包括一个度为 1 的结点,两个度为 2 的结点,三个度为 3 的结点,四个度为 4 的结点和若干叶子结点,则 T 的叶结点数为__1__。【山东大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"21 "}},{"id":"learncoder_38_16221","stem":"如果结点 A 有 3 个兄弟,而且 B 是 A 的双亲,则 B 的度是__1__。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":" 4 "}},{"id":"learncoder_38_16224","stem":"设一棵完全二叉树叶子结点数为 k,最后一层结点数>2,则该二叉树的高度为__1__。【北京科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"log2k +1"}},{"id":"learncoder_38_16226","stem":"具有 N 个结点的二叉树,采用二叉链表存储,共有__1__个空链域。【重庆大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"N+1 "}},{"id":"learncoder_38_16223","stem":"完全二叉树中,结点个数为 n,则编号最大的分支结点的编号为__1__。【北京轻工业学院】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":" n/2 "}},{"id":"learncoder_38_16220","stem":"如某二叉树有 20 个叶子结点,有 30 个结点仅有一个孩子,则该二叉树的总结点数为__1__。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"69"}},{"id":"learncoder_38_16225","stem":"对于一个具有 n 个结点的二元树,当它为一棵__1__二元树时具有最小高度,当它为一棵__2__时,具有最大高度。【哈尔滨工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"完全二叉树","__2__":"单枝树"}},{"id":"learncoder_38_16222","stem":"高度为 h 的 2-3 树中叶子结点的数目至多为__1__。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"3h-1 "}},{"id":"learncoder_38_16219","stem":"一个深度为 k 的,具有最少结点数的完全二叉树按层次,(同层次从左到右)用自然数依此对结点编号,则编号最小的叶子的序号是__1__;编号是 i 的结点所在的层次号是__2__(根所在的层次号规定为 1 层)。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"2k-2+1","__2__":"log2i +1 "}},{"id":"learncoder_38_16218","stem":"设 F 是由 T1,T2,T3 三棵树组成的森林,与 F 对应的二叉树为 B,已知 T1,T2,T3 的结点数分别为 n1,n2 和 n3 则二叉树 B 的左子树中有__1__个结点,右子树中有__2__个结点。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"n1-1","__2__":"n2+n3"}},{"id":"learncoder_38_16215","stem":"高度为 8 的完全二叉树至少有__1__个叶子结点。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"64"}},{"id":"learncoder_38_16212","stem":"设只含根结点的二叉树的高度为 0,则高度为 k 的二叉树的最大结点数为__1__,最小结点数为__2__。【北京大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"2K+1-1","__2__":"k+1 "}},{"id":"learncoder_38_16217","stem":"一个有 2001 个结点的完全二叉树的高度为__1__。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"11"}},{"id":"learncoder_38_16214","stem":"高度为 K 的完全二叉树至少有__1__个叶子结点。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"2k-2"}},{"id":"learncoder_38_16213","stem":"设有 N 个结点的完全二叉树顺序存放在向量 A[1:N]中,其下标值最大的分支结点为__1__。【 长沙铁道学院】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"N/2"}},{"id":"learncoder_38_16216","stem":"已知二叉树有 50 个叶子结点,则该二叉树的总结点数至少是__1__。 【厦门大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"99"}},{"id":"learncoder_38_16211","stem":"在一棵二叉树中,度为零的结点的个数为 N0,度为 2 的结点的个数为 N2,则有 N0 =__1__【北方交通大学】【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":" N2+1"}},{"id":"learncoder_38_16205","stem":"深度为 k 的完全二叉树至少有__1__个结点,至多有__2__个结点。 【厦门大学 2001 一、4 (14%/5 分)】 【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"2k-1","__2__":"2k-1"}},{"id":"learncoder_38_16202","stem":"二叉树中某一结点左子树的深度减去右子树的深度称为该结点的__1__。【燕山大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"平衡因子"}},{"id":"learncoder_38_16208","stem":"在完全二叉树中,编号为 i 和 j 的两个结点处于同一层的条件是__1__。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"log2i = log2j "}},{"id":"learncoder_38_16210","stem":"假设根结点的层数为1,具有n个结点的二叉树的最大高度是__1__。【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"n"}},{"id":"learncoder_38_16207","stem":"在顺序存储的二叉树中,编号为 i 和 j 的两个结点处在同一层的条件是__1__。【厦门大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"用顺序存储二叉树时,要按完全二叉树的形式存储,非完全二叉树存储时,要加“虚结点”。设编号为 i 和 j的结点在顺序存储中的下标为 s 和 t ,则结点 i 和 j 在同一层上的条件是 log2s = log2t","type":"blank","options":{"__1__":"log2s = log2t"}},{"id":"learncoder_38_16204","stem":"已知一棵度为 3 的树有 2 个度为 1 的结点,3 个度为 2 的结点,4 个度为 3 的结点,则该树有__1__个叶子结点。【厦门大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":" 12 "}},{"id":"learncoder_38_16209","stem":"一棵有 n 个结点的满二叉树有__1__个度为 1 的结点、有__2__个分支 (非 终端)结点和__3__个叶子,该满二叉树的深度为__4__。【华中理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"0 ","__2__":"(n-1)/2","__3__":"(n+1)/2","__4__":"log2n +1 "}},{"id":"learncoder_38_16206","stem":"深度为 H 的完全二叉树至少有__1__个结点;至多有__2__个结点;H 和结点总数 N 之间的关系是 __3__。 【中科院计算所】【中国科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"2H-1","__2__":"2H-1","__3__":"H= log2N +1"}},{"id":"learncoder_38_16203","stem":"具有 256 个结点的完全二叉树的深度为__1__。【燕山大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"9 "}},{"id":"learncoder_38_16195","stem":"当一棵有n个结点的二叉树按层次从上到下,同层次从左到右将数据存放在一维数组A[l..n]中时,数组中第i个结点的左孩子为(\t)【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"无法确定","C":"A[i/2]","A":"A[2i](2i=〈n)","B":"A[2i+1](2i+1=〈 n)"},"answer":"D"},{"id":"learncoder_38_16199","stem":"树在计算机内的表示方式有__1__,__2__,__3__。【哈尔滨工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"双亲链表表示法","__2__":"孩子链表表示法","__3__":"孩子兄弟表示法"}},{"id":"learncoder_38_16201","stem":"中缀式 a+b*3+4*(c-d)对应的前缀式为__1__,若 a=1,b=2,c=3,d=4,则后缀式 db/cc*a-b*+的运算结果为__2__。【西南交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"++a*b3*4-cd","__2__":"18 "}},{"id":"learncoder_38_16196","stem":"一棵有n个结点的二叉树,按层次从上到下,同一层从左到右顺序存储在一维数组A[1..n]中,则二叉树中第i个结点(i从1开始用上述方法编号)的右孩子在数组A中的位置是()【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"A[2i](2i<=n)","C":"A[i-2]","D":"条件不充分,无法确定","B":"A[2i+1] (2i+1<=n)"},"answer":"D"},{"id":"learncoder_38_16198","stem":"二叉树由__1__,__2__,__3__三个基本单元组成。【燕山大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"根结点","__2__":"左子树","__3__":"右子树 "}},{"id":"learncoder_38_16197","stem":"从下列有关树的叙述中,选岀5条正确的叙述(共5分) ()【山东工业大学】34689(1)二叉树中每个结点有两个子结点,而树无此限制,因此二叉树是树的特殊情况。(2)当KM1时高度为K的二叉树至多有2k-1个结点。(3)用树的前序周游和中序周游可以导岀树的后序周游。(4)线索二叉树的优点是便于在中序下查找前驱结点和后继结点。(5)将一棵树转换成二叉树后,根结点没有左子树。(6)一棵含有N个结点的完全二叉树,它的高度是LOG2N +1。(7)在二叉树中插入结点,该二叉树便不再是二叉树。(8)采用二叉树链表作树的存储结构,树的前序周游和其相应的二叉树的前序周游的结果是一样的。(9)哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。(10)用一维数组存储二叉树时,总是以前序周游存储结点。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"(1)(3)(4)(6)(9)","D":"(1)(2)(3)(5)(6)","B":"(2)(4)(5)(6)(8)","C":"(3)(4)(6)(8)(9)"},"answer":"C"},{"id":"learncoder_38_16194","stem":"下面几个符号串编码集合中,不是前缀编码的是(\t)。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"{00,010,0110,1000}","A":"{0,10,110,1111}","D":"{b,c,aa,ac,aba,abb,abc}","B":"{11,10,001,101,0001}"},"answer":"B"},{"id":"learncoder_38_16200","stem":"在二叉树中,指针 p 所指结点为叶子结点的条件是__1__。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"blank","options":{"__1__":"p->lchild==null && p->rchlid==null "}},{"id":"learncoder_38_16192","stem":"最优二叉树(哈夫曼树)、最优查找树均为平均查找路径长度i=1 最小的树,其中对最优二叉树,n表示(),对最优查找树,n表示(),构造这两种树均()。【中科院计算所】(1)结点数\t\t(2)叶结点数\t\t(3)非叶结点数(4)度为2的结点数\t\t(5)需要一张n个关键字的有序表(6)需要对n个关键字进行动态插入(7)需要n个关键字的查找概率表\t\t\t(8)不需要任何前提","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"(2)(3)(5)","C":"(3)(2)(6)","B":"(2)(1)(7)","A":"(3)(1)(6)"},"answer":"B"},{"id":"learncoder_38_16189","stem":"由3 个结点可以构造岀多少种不同的二叉树?()【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"5","C":"4","A":"2","B":"3"},"answer":"D"},{"id":"learncoder_38_16187","stem":"如果T2是由有序树T转换而来的二叉树,那么T中结点的后序就是T2中结点的()。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"后序","B":"中序","D":"层次序","A":"先序"},"answer":"B"},{"id":"learncoder_38_16190","stem":"下述二叉树中,哪一种满足性质:从任一结点岀发到根的路径上所经过的结点序列按其关键字有序()。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"哈夫曼树","D":"堆","C":"AVL树","A":"二叉排序树"},"answer":"D"},{"id":"learncoder_38_16193","stem":"下述编码中哪一个不是前缀码(\t)。【中科院计算所】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"(0,10,110,111)","A":"(00,01,10,11)","B":"(0,1,00,11)","D":"(1,01,000,001)"},"answer":"B"},{"id":"learncoder_38_16188","stem":"由3个结点可以构造岀多少种不同的有向树?()【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"2","C":"4","D":"5","B":"3"},"answer":"A"},{"id":"learncoder_38_16191","stem":"在叶子数目和权值相同的所有二叉树中,最优二叉树一定是完全二叉树,该说法(\t)。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"错误","A":"正确"},"answer":"B"},{"id":"learncoder_38_16186","stem":"设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有()个。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"n+1","D":"n+2","B":"n","A":"n-1"},"answer":"C"},{"id":"learncoder_38_16182","stem":"线索二叉树是一种( )结构。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"逻辑","D":"线性","C":"物理","B":"逻辑和存储"},"answer":"C"},{"id":"learncoder_38_16185","stem":"二叉树在线索后,仍不能有效求解的问题是()。【武汉大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"前(先)序线索二叉树中求前(先)序后继","D":"后序线索二叉树中求后序后继","C":"中序线索二叉树中求中序前驱","B":"中序线索二叉树中求中序后继"},"answer":"D"},{"id":"learncoder_38_16183","stem":"n个结点的线索二叉树上含有的线索数为()【中山大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"n+l","B":"n-l","A":"2n","D":"n"},"answer":"C"},{"id":"learncoder_38_16184","stem":"()的遍历仍需要栈的支持。【中科院计算所】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"前序线索树","B":"中序线索树","C":"后序线索树"},"answer":"C"},{"id":"learncoder_38_16181","stem":"引入二叉线索树的目的是( )【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"为了能在二叉树中方便的进行插入与删除","C":"为了能方便的找到双亲","D":"使二叉树的遍历结果唯一","A":"加快查找结点的前驱或后继的速度"},"answer":"A"},{"id":"learncoder_38_16179","stem":"一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是:()。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"不确定","A":"0","C":"2","B":"1"},"answer":"B"},{"id":"learncoder_38_16180","stem":"若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为() 【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"X的左子树中最右结点","A":"X的双亲","D":"X的左子树中最右叶结点","B":"X的右子树中最左的结点"},"answer":"C"},{"id":"learncoder_38_16178","stem":"一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是:()【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"0","A":"不确定","C":"1","D":"2"},"answer":"D"},{"id":"learncoder_38_16177","stem":"在下列情况中,可称为二叉树的是()【西安交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"每个结点只有一棵右子树","E":"以上答案都不对","A":"每个结点至多有两棵子树的树","C":"每个结点至多有两棵子树的有序树","B":"哈夫曼树"},"answer":"B"},{"id":"learncoder_38_16173","stem":"一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足()【南开大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"是任意一棵二叉树","A":"所有的结点均无左孩子","C":"只有一个叶子结点","B":"所有的结点均无右孩子"},"answer":"C"},{"id":"learncoder_38_16171","stem":"下面的说法中正确的是()【南京理工大学】(1)任何一棵二叉树的叶子结点在三种遍历中的相对次序不变;(2)按二叉树定义,具有三个结点的二叉树共有6种。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"(1)(2)","C":"(2)","B":"(1)","D":"(1)、(2)都错"},"answer":"B"},{"id":"learncoder_38_16174","stem":"在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序()【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"先序和中序相同,而与后序不同","A":"都不相同","B":"完全相同","D":"中序和后序相同,而与先序不同"},"answer":"B"},{"id":"learncoder_38_16172","stem":"对于前序遍历与中序遍历结果相同的二叉树为();对于前序遍历和后序遍历结果相同的二叉树为()。【中科院计算所】(1)一般二叉树(2)只有根结点的二叉树(3)根结点无左孩子的二叉树(4)根结点无右孩子的二叉树(5)所有结点只有右子树的二叉树","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"(5)(2)","A":"(4)(1)","D":"(3)(2)","C":"(4)(2)"},"answer":"B"},{"id":"learncoder_38_16175","stem":"某二叉树的前序序列和后序序列正好相反,则该二叉树一定是()的二叉树。【武汉大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"任一结点无左子树","A":"空或只有一个结点","D":"任一结点无右子树","C":"高度等于其结点数"},"answer":"C"},{"id":"learncoder_38_16176","stem":"在完全二叉树中,若一个结点是叶结点,则它没()。【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"左子结点","D":"左子结点,右子结点和兄弟结点","C":"左子结点和右子结点","B":"右子结点"},"answer":"C"},{"id":"learncoder_38_16164","stem":"己知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()。【浙江大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"不定","C":"CBEDFA","B":"FEDCBA","A":"CBEFDA"},"answer":"A"},{"id":"learncoder_38_16167","stem":" 某二叉树中序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E,对应的森林包括多少棵树()【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"概念上是错误的","B":"2","C":"3","A":"l"},"answer":"B"},{"id":"learncoder_38_16170","stem":"某二叉树T有n个结点,设按某种顺序对T中的每个结点进行编号,编号为1, 2,…,n,且有如下性质:T 中任一结点V,其编号等于左子树上的最小编号减1,而V的右子树的结点中,其最小编号等于V左子树上结点的 最大编号加1。这时是按()编号的。【长沙铁道学院】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"后序遍历序列","A":"中序遍历序列","D":"层次顺序","B":"前序遍历序列"},"answer":"B"},{"id":"learncoder_38_16168","stem":"二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG。该二叉树根的右子树的根是:() 【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"G","D":"H","B":"F","A":"E"},"answer":"C"},{"id":"learncoder_38_16165","stem":"己知某二叉树的后序遍历序列是dabec,中序遍历序列是debac ,它的前序遍历是()。【山东大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"decab","C":"deabc","D":"cedba","A":"acbed"},"answer":"D"},{"id":"learncoder_38_16163","stem":"一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是()【北京工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"ADCFEG","B":"ABCDEFG","A":"CABDEFG","C":"DACEFBG"},"answer":"B"},{"id":"learncoder_38_16166","stem":"某二叉树中序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E则前序序列是:()【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"E, A, C, B, D, G, F","C":"E, A, G, C, F, B, D","D":"上面的都不对","A":"E, G, F, A, C, D, B"},"answer":"B"},{"id":"learncoder_38_16169","stem":"将一棵树t转换为孩子一兄弟链表表示的二叉树h,则t的后根序遍历是h的()【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"中序遍历","C":"后序遍历","A":"前序遍历"},"answer":"B"},{"id":"learncoder_38_16160","stem":"树的后根遍历序列等同于该树对应的二叉树的()。【北京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"先序序列","C":"后序序列","B":"中序序列"},"answer":"B"},{"id":"learncoder_38_16157","stem":"将有关二叉树的概念推广到三叉树,则一棵有244个结点的完全三叉树的高度()【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"6","D":"7","A":"4","B":"5"},"answer":"C"},{"id":"learncoder_38_16155","stem":"高度为K的二叉树最大的结点数为()。【山东大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"2k-1","A":"2k","C":"2k -1","D":"2k-1-1"},"answer":"C"},{"id":"learncoder_38_16158","stem":"利用二叉链表存储树,则根结点的右指针是()。【青岛大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"指向最右孩子","C":"空","A":"指向最左孩子","D":"非空"},"answer":"C"},{"id":"learncoder_38_16161","stem":"若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用()遍历方法最合适。【北京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"中序","A":"前序","D":"按层次","C":"后序"},"answer":"C"},{"id":"learncoder_38_16156","stem":"一棵树高为K的完全二叉树至少有()个结点【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"2k-1","D":"2k","A":"2k - 1","B":"2k-1 - 1"},"answer":"C"},{"id":"learncoder_38_16159","stem":"对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子 中,其左孩子的编号小于其右孩子的编号,可采用()次序的遍历实现编号。【北京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"中序","D":"从根开始按层次遍历","A":"先序","C":"后序"},"answer":"C"},{"id":"learncoder_38_16162","stem":"在下列存储形式中,哪一个不是树的存储形式?()【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"孩子链表表示法","D":"顺序存储表示法","C":"孩子兄弟表示法","A":"双亲表示法"},"answer":"D"},{"id":"learncoder_38_16150","stem":"一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有()结点【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"2h-1","D":"h+1","C":"2h+1","A":"2h"},"answer":"B"},{"id":"learncoder_38_16153","stem":" 深度为h的满m叉树的第k层有()个结点。(1=〈k=〈h)【北京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"mh-1","A":"mk-1","B":"mk-1","C":"mh-1"},"answer":"A"},{"id":"learncoder_38_16151","stem":"对于有n个结点的二叉树,其高度为()【武汉交通科技大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"nlog2n","C":"log2n | +1","D":"不确定","B":"log2n"},"answer":"D"},{"id":"learncoder_38_16154","stem":"在一棵高度为k的满二叉树中,结点总数为()【北京工商大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"2k-1","C":"2k-1","D":"log2k +1","B":"2k"},"answer":"C"},{"id":"learncoder_38_16152","stem":"一棵具有n个结点的完全二叉树的树高度(深度)是()【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"logn +1","C":"logn","D":"logn-1","B":"logn+1"},"answer":"A"},{"id":"learncoder_38_16148","stem":"二叉树的第I层上最多含有结点数为()【中山大学】【北京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"2I-1-1","A":"2I","C":"2I-1","D":"2I -1"},"answer":"C"},{"id":"learncoder_38_16149","stem":" 一个具有1025个结点的二叉树的高h为()【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"10","A":"11","C":"11 至 1025 之间","D":"10 至 1024 之间"},"answer":"C"},{"id":"learncoder_38_16147","stem":"有关二叉树下列说法正确的是()【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"二叉树中至少有一个结点的度为2","A":"二叉树的度为2","B":"一棵二叉树的度可以小于2","D":"二叉树中任何一个结点的度都为2"},"answer":"B"},{"id":"learncoder_38_16145","stem":"有n个叶子的哈夫曼树的结点总数为()。【青岛大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"2n","A":"不确定","C":"2n+1","D":"2n-1"},"answer":"D"},{"id":"learncoder_38_16146","stem":"若度为m的哈夫曼树中,其叶结点个数为n,则非叶结点的个数为()。【中科院计算所】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"n/m -1","D":"n/(m-1) -1","E":"(n+1)/(m+1)-1","A":"n-1","C":"(n-1)/(m-1)"},"answer":"C"},{"id":"learncoder_38_16144","stem":"设给定权值总数有n个,其哈夫曼树的结点总数为()【福州大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"2n","A":"不确定","C":"2n+1","D":"2nT"},"answer":"D"},{"id":"learncoder_38_16141","stem":"设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1, M2和M3。与森林F对应的二叉 的右子树上的结点个数是( )。【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"M1+M2","A":"M1","C":"M3","D":"M2+M3"},"answer":"D"},{"id":"learncoder_38_16142","stem":"具有10个叶结点的二叉树中有()个度为2的结点,【北京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"8","B":"9","D":"ll","C":"10"},"answer":"B"},{"id":"learncoder_38_16140","stem":"在一棵三元树中度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点数为()个【哈尔滨工业大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"6","D":"7","A":"4","B":"5"},"answer":"C"},{"id":"learncoder_38_16143","stem":"一棵完全二叉树上有1001个结点,其中叶子结点的个数是()【西安交通大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"254","E":"以上答案都不对","A":"250","B":"500","D":"505"},"answer":"E"},{"id":"learncoder_38_16134","stem":"算术表达式a+b* (c+d/e)转为后缀表达式后为()【中山大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"B":"abcde/+*+","C":"abcde/*++","D":"abcde*/++","A":"ab+cde/*"},"answer":"B"},{"id":"learncoder_38_16137","stem":"设森林F对应的二叉树为B,它有m个结点,B的根为p, p的右子树结点个数为n,森林F中第一棵树的结点个数是() 【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"A":"m-n","C":"n+1","D":"条件不足,无法确定","B":"m-n-1"},"answer":"A"},{"id":"learncoder_38_16135","stem":"设树T的度为4,其中度为1, 2, 3和4的结点个数分别为4, 2, 1 , 1则T中的叶子数为() 【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"8","B":"6","A":"5","C":"7"},"answer":"D"},{"id":"learncoder_38_16138","stem":"树是结点的有限集合,它((1))根结点,记为T。其余结点分成为m (m>0)个((2))的集合T1, T2,…, Tm,每个集合又都是树,此时结点T称为Ti的父结点,Ti称为T的子结点(1《=i《=m)。一个结点的子结点个数称 为该结点的( (3) )。二叉树与树是两个不同的概念,二叉树也是结点的有限集合,它((4))根结点。可以把树 的根结点的层数定义为1,其他结点的层数等于其父结点所在层数加上1。令T是一棵二叉树,Ki和Kj是T中子结 点数小于2的结点中的任意两个,它们所在的层数分别为入Ki和入Kj,当关系式| 入Ki- 入Kj | 《=1 —定成立时, 则称T为一棵((5))。供选择的答案:()【上海海运学院】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"有且只有一个、互不相交、次数、有0个或1个、平衡树","D":"有0个或多个、允许叶结点相交、维数、有0个或1个、丰满树","B":"有0个或多个、允许叶结点相交、维数、有0个或多个、查找树","A":"有且只有一个、互不相交、次数、有1个或1个以上、完全树"},"answer":"C"},{"id":"learncoder_38_16136","stem":"在下述结论中,正确的是()【南京理工大学】①只有一个结点的二叉树的度为0;②二叉树的度为2;\t③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"②④","A":"①②③","B":"②③④","D":"①④"},"answer":"D"},{"id":"learncoder_38_16139","stem":"若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()【北京工商大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"D":"不确定","B":"11","A":"9","C":"15"},"answer":"B"},{"id":"learncoder_38_16133","stem":"己知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为()【北京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"空","type":"choice","options":{"C":"-+*ABC/DE","D":"-+A*BC/DE","B":"-A+B*CD/E","A":"-A+B*C/DE"},"answer":"D"},{"id":"learncoder_38_434","stem":"<p>已知一棵树采用下列节点结构用孩子兄弟法表示.[中国科学院大学2013年]<br>  FirstChild<br>  hd<br>  data<br>  hx<br>  NextSibling<br>  其中,data为数据域,FirstChild为左链域,NextSibling为右链域,hd域用于存放该节点的后代节点数,hx域用于存放该节点所有右边的兄弟节点数。hd和hx的初值都为0。编写算法,将每个节点的后代节点数存入hd域,将每个节点所有右边的兄弟节点数存入hx域。</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——树、森林<br>  【参考答案】采用C语言实现功能,代码如下:<br>  Void func(Tree&amp;mytree){<br>  Stack sta;<br>  Queue qu;<br>  qu.in(mytree);<br>  while(!qu.empty()){<br>  Tree*node=qu.out();<br>  Tree*p=node;<br>  init=0;<br>  while(p-&gt;nextSibling!=NULL){<br>  i++;<br>  p=p-&gt;nextSibling;//遍历该节点所有兄弟节点<br>  }<br>  node-&gt;hx=i;//给兄弟节点数量赋值<br>  qu.in(node-&gt;firstChild);//第一个子节点入队<br>  sta.push(node-&gt;firstChild);//第一个子节点入栈<br>  p=node-&gt;nextSibling;<br>  while(p-&gt;nextSibling){<br>  qu.in(p-&gt;nextSibling);//所有子节点入队<br>  p=p-&gt;nextSibling;<br>  sta.push(p-〉nextSibling);//所有子节点入栈<br>  }<br>  }<br>  while(!sta.empty()){<br>  Tree*node=sta.pull();<br>  if(node-&gt;firstChild==NULL)<br>  node-&gt;hd=0;<br>  else<br>  //节点的第一个子节点的兄弟数就是它的子节点数减1<br>  node-&gt;hd=node-〉firstChild-&gt;hx+1;<br>  }<br>  }</p>","type":"short_answer","answer":"采用C语言实现功能,代码如下:<br>  Void func(Tree&amp;mytree){<br>  Stack sta;<br>  Queue qu;<br>  qu.in(mytree);<br>  while(!qu.empty()){<br>  Tree*node=qu.out();<br>  Tree*p=node;<br>  init=0;<br>  while(p-&gt;nextSibling!=NULL){<br>  i++;<br>  p=p-&gt;nextSibling;//遍历该节点所有兄弟节点<br>  }<br>  node-&gt;hx=i;//给兄弟节点数量赋值<br>  qu.in(node-&gt;firstChild);//第一个子节点入队<br>  sta.push(node-&gt;firstChild);//第一个子节点入栈<br>  p=node-&gt;nextSibling;<br>  while(p-&gt;nextSibling){<br>  qu.in(p-&gt;nextSibling);//所有子节点入队<br>  p=p-&gt;nextSibling;<br>  sta.push(p-〉nextSibling);//所有子节点入栈<br>  }<br>  }<br>  while(!sta.empty()){<br>  Tree*node=sta.pull();<br>  if(node-&gt;firstChild==NULL)<br>  node-&gt;hd=0;<br>  else<br>  //节点的第一个子节点的兄弟数就是它的子节点数减1<br>  node-&gt;hd=node-〉firstChild-&gt;hx+1;<br>  }<br>  }<p></p>"},{"id":"learncoder_38_433","stem":"<p>设有一家谱树T,用二叉链表结构存储(孩子兄弟表示法),树中的节点信息为成员名字。编写函数,输出家谱中共有多少代,以及最后一代人数和成员名字。要求先给出算法思想,再写出相应代码。[南京航空航天大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>考点】树与二叉树——二叉树<br>  【参考答案】算法的基本设计思想如下:<br>  家谱中代数就是树的高度,最后一代人就是树的最后一层;在二叉链表法中,根据孩子兄弟表示法的特性,因为第i个节点的左子树是它的孩子,代数必须+1,而右子树是和第i节点同辈份的(堂兄弟),因此不能加1。本质来说就是往左走代数+1,向右走代数不变。再次遍历树把最后一代的节点输出即可。<br>  采用C语言描述算法,代码如下:<br>  Struct node{<br>  Char name[8];//成员名字<br>  Struct node*firstchild,*nextsibling;//孩子、兄弟域<br>  }*CSTree;<br>  /*由孩子兄弟二叉链表存储的家谱树,求家谱中共有多少代即求树的高度。采用递归算法,若树为空,高度为0;否则,高度为第一个子女树高度加1和兄弟子树高度的最大者*/<br>  Int familyHeight(CSTreebt){<br>  //递归求以孩子兄弟二叉链表表示的家谱树的代数,即求树的深度<br>  Int hc,hs;//hc孩子,hs兄弟<br>  if(bt==NULL)<br>  Return 0;//空家谱树<br>  else{//高度取子女高度+1和兄弟子树高度大者<br>  hc=familyHeight(bt-&gt;firstchild);//第一个子女树高<br>  hs=familyHeight(bt-&gt;nextsibling);//兄弟树高<br>  if(hc+1&gt;hs)<br>  Return hc+1;<br>  else<br>  Return hs;<br>  }<br>  }<br>  //计算家谱树种最后一代人数,即叶节点数<br>  Int lastChild(CSTreebt){<br>  if(bt==NULL)<br>  return0;<br>  if(bt-&gt;firstchild==NULL){//无孩子,必是最后一代<br>  return1+lastChild(bt-&gt;nextsibling);//返回最后一代人数<br>  }<br>  else{<br>  //返回最后一代人数<br>  Return lastChild(bt-&gt;nextsibling)+lastChild(bt-&gt;nextsibling);<br>  }<br>  }<br>  //输出最后一代成员名字<br>  Void print→lastgener(CSTreebt,int n){<br>  if(n==1)<br>  printf(\"%s\",bt--&gt;name);<br>  if(bt-&gt;child!=NULL)<br>  print→lastgener(root-&gt;child,n-1);<br>  if(bt-&gt;brother!=NULL)<br>  print→lastgener(root-&gt;brother,n);<br>  }<br>  Void func(){<br>  CSTree bt;<br>  Int height=familyHeight(bt);<br>  Int lastNum=lastChild(bt);<br>  printf(”家谱树中共有%d代人”,height);<br>  printf(n家谱树中最后一代有%d人”,lastNum);<br>  Print→lastgener(bt,height);<br>  }<br>  CSTree p;<br>  Int depth,max=0;<br>  for(p=T-&gt;firstChild;p;){<br>  depth=TreeDepth(p);<br>  if(depth&gt;max)<br>  max=depth;<br>  p=p—&gt;nextsbling;<br>  }<br>  Return max+1;//当前层的下一层<br>  }</p>","type":"short_answer","answer":"<p>构造的哈夫曼树如下图所算法的基本设计思想如下:</p>  家谱中代数就是树的高度,最后一代人就是树的最后一层;在二叉链表法中,根据孩子兄弟表示法的特性,因为第i个节点的左子树是它的孩子,代数必须+1,而右子树是和第i节点同辈份的(堂兄弟),因此不能加1。本质来说就是往左走代数+1,向右走代数不变。再次遍历树把最后一代的节点输出即可。<br>  采用C语言描述算法,代码如下:<br>  Struct node{<br>  Char name[8];//成员名字<br>  Struct node*firstchild,*nextsibling;//孩子、兄弟域<br>  }*CSTree;<br>  /*由孩子兄弟二叉链表存储的家谱树,求家谱中共有多少代即求树的高度。采用递归算法,若树为空,高度为0;否则,高度为第一个子女树高度加1和兄弟子树高度的最大者*/<br>  Int familyHeight(CSTreebt){<br>  //递归求以孩子兄弟二叉链表表示的家谱树的代数,即求树的深度<br>  Int hc,hs;//hc孩子,hs兄弟<br>  if(bt==NULL)<br>  Return 0;//空家谱树<br>  else{//高度取子女高度+1和兄弟子树高度大者<br>  hc=familyHeight(bt-&gt;firstchild);//第一个子女树高<br>  hs=familyHeight(bt-&gt;nextsibling);//兄弟树高<br>  if(hc+1&gt;hs)<br>  Return hc+1;<br>  else<br>  Return hs;<br>  }<br>  }<br>  //计算家谱树种最后一代人数,即叶节点数<br>  Int lastChild(CSTreebt){<br>  if(bt==NULL)<br>  return0;<br>  if(bt-&gt;firstchild==NULL){//无孩子,必是最后一代<br>  return1+lastChild(bt-&gt;nextsibling);//返回最后一代人数<br>  }<br>  else{<br>  //返回最后一代人数<br>  Return lastChild(bt-&gt;nextsibling)+lastChild(bt-&gt;nextsibling);<br>  }<br>  }<br>  //输出最后一代成员名字<br>  Void print→lastgener(CSTreebt,int n){<br>  if(n==1)<br>  printf(\"%s\",bt--&gt;name);<br>  if(bt-&gt;child!=NULL)<br>  print→lastgener(root-&gt;child,n-1);<br>  if(bt-&gt;brother!=NULL)<br>  print→lastgener(root-&gt;brother,n);<br>  }<br>  Void func(){<br>  CSTree bt;<br>  Int height=familyHeight(bt);<br>  Int lastNum=lastChild(bt);<br>  printf(”家谱树中共有%d代人”,height);<br>  printf(n家谱树中最后一代有%d人”,lastNum);<br>  Print→lastgener(bt,height);<br>  }<br>  CSTree p;<br>  Int depth,max=0;<br>  for(p=T-&gt;firstChild;p;){<br>  depth=TreeDepth(p);<br>  if(depth&gt;max)<br>  max=depth;<br>  p=p—&gt;nextsbling;<br>  }<br>  Return max+1;//当前层的下一层<br>  }"},{"id":"learncoder_38_432","stem":"<p>给定叶子节点的权值集合{15,3,14,2,6,9,16,17},构造相应的哈夫曼树,并计算其带权路径长度。[桂林电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>考点】树与二叉树——树与二叉树的应用<br>  【参考答案】构造的哈夫曼树如下图所示。<br>  <br>  带权路径长度=2×5+3×5+6×4+9×3+14×3+15v3+16×2+17×2=229。</p>","type":"short_answer","answer":"<p>构造的哈夫曼树如下图所示。<br>  <br>  带权路径长度=2×5+3×5+6×4+9×3+14×3+15v3+16×2+17×2=229。</p>"},{"id":"learncoder_38_431","stem":"<p>请证明:任意一棵具有N个节点的满二叉树(N&gt;0)的叶节点数目为(N+1)/2。[桂林电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——二叉树<br>  【参考答案】证明:在满二叉树中,不存在度为1的节点。设度为2的节点个数为n2,度为0的叶节点个数为n0因此N=N0+N2。根据二叉树的性质,度为0的叶节点比度为2的节点多1个,即N0=N2+1,联立可得N=N0+(N0z-1),解得N0=(N+1)/2即任意一棵具有N个节点的满二叉树(N&gt;o)的叶节点数目为(N+l)/2。结论成立。</p>","type":"short_answer","answer":"<p>证明:在满二叉树中,不存在度为1的节点。设度为2的节点个数为n2,度为0的叶节点个数为n0因此N=N0+N2。根据二叉树的性质,度为0的叶节点比度为2的节点多1个,即N0=N2+1,联立可得N=N0+(N0z-1),解得N0=(N+1)/2即任意一棵具有N个节点的满二叉树(N&gt;o)的叶节点数目为(N+l)/2。结论成立。&nbsp;&nbsp;<br></p>"},{"id":"learncoder_38_430","stem":"<p>已知某系统在通信中只使用五种字符,其频率分别为A(0.2),B(0.1),C(0.2)D(0.15),F(0.35)。请画出由此构造的哈夫曼树(要求树中所有节点的左、右孩子必须是左大右小),并计算该哈曼夫树的带权路径长度WPL。[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——树与二叉树的应用<br>  【参考答案】(1)定长编码和变长编码的二叉树如下图所示。<br>  <br>  依据上图,可得出两种编码方案如下表所示。<br>  字符<br>  概率<br>  定长编码<br>  变长编码<br>  A<br>  0.2<br>  010<br>  10<br>  B<br>  0.1<br>  011<br>  011<br>  C<br>  0.2<br>  000<br>  11<br>  D<br>  0.15<br>  001<br>  010<br>  E<br>  0.35<br>  100<br>  00<br>  图(a)所示的定长编码的平均编码长度为<br>  0.2×3+0.1×3+0.2×3+0.15×3+0.35×3=3<br>  图(b)所示的变长编码的平均编码长度为<br>  0.2×2+0.1×3+0.2×2+0.15×3+0.35×2=2.25<br>  显然,变长编码的效率高于定长编码。由前缀编码的定义可知,该变长编码为前缀编码。因此图(b)得到的变长编码就是哈夫曼编码,对应的哈夫曼树如下图所示。<br>  <br>  带权路径长度WPL=0.2×2+0.1×3+0.2×2+0.15×3+0.35×2=2.25.</p>","type":"short_answer","answer":"<p>(1)定长编码和变长编码的二叉树如下图所示。<br>  <br>  依据上图,可得出两种编码方案如下表所示。<br>  字符<br>  概率<br>  定长编码<br>  变长编码<br>  A<br>  0.2<br>  010<br>  10<br>  B<br>  0.1<br>  011<br>  011<br>  C<br>  0.2<br>  000<br>  11<br>  D<br>  0.15<br>  001<br>  010<br>  E<br>  0.35<br>  100<br>  00<br>  图(a)所示的定长编码的平均编码长度为<br>  0.2×3+0.1×3+0.2×3+0.15×3+0.35×3=3<br>  图(b)所示的变长编码的平均编码长度为<br>  0.2×2+0.1×3+0.2×2+0.15×3+0.35×2=2.25<br>  显然,变长编码的效率高于定长编码。由前缀编码的定义可知,该变长编码为前缀编码。因此图(b)得到的变长编码就是哈夫曼编码,对应的哈夫曼树如下图所示。<br>  <br>  带权路径长度WPL=0.2×2+0.1×3+0.2×2+0.15×3+0.35×2=2.25.&nbsp;&nbsp;<br></p>"},{"id":"learncoder_38_429","stem":"<p>已知某二叉树的中序遍历序列为D,E,B,A,F,C,G,后序遍历序列为E,D,B,F,G,C,A,请画出此二叉树。,[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——二叉树<br>  【参考答案】根据后序遍历序列可知,最后一个节点A是根节点;根据中序遍历序列可知,DEB是左子树,FCG是右子树;根据中序遍历序列的子序列FCG和后序遍历序列的子序列FGC可知,C为根节点的右孩子节点,F为C的左孩子节点,G为C的右孩子节点;根据中序遍历序列的子序列DEB和后序遍历序列的子序列EDB可知,B为根节点的左孩子节点,D为B的左孩子节点,E为D的右孩子节点。综上所述,可得出此二叉树如下图所示。<br>  </p>","type":"short_answer","answer":"<p>根据后序遍历序列可知,最后一个节点A是根节点;根据中序遍历序列可知,DEB是左子树,FCG是右子树;根据中序遍历序列的子序列FCG和后序遍历序列的子序列FGC可知,C为根节点的右孩子节点,F为C的左孩子节点,G为C的右孩子节点;根据中序遍历序列的子序列DEB和后序遍历序列的子序列EDB可知,B为根节点的左孩子节点,D为B的左孩子节点,E为D的右孩子节点。综上所述,可得出此二叉树如下图所示。&nbsp;&nbsp;<br>  &nbsp;&nbsp;<br></p>"},{"id":"learncoder_38_428","stem":"<p>下图所示的平衡二叉树中,插入节点48,请画出插入位置及插入后每个节点的平衡因子,并调整为新的平衡二叉树。[电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——树与二叉树的应用<br>  【参考答案】插入位置及插入后每个节点的平衡因子如下图所示。<br>  <br>  在上图所示的二叉树中,存在平衡因子为-2的节点,因此不是平衡二叉树,需要进行调<br>  整。调整后的平衡二叉树如下图所示。<br>  </p>","type":"short_answer","answer":"<p>插入位置及插入后每个节点的平衡因子如下图所示。<br>  <br>  在上图所示的二叉树中,存在平衡因子为-2的节点,因此不是平衡二叉树,需要进行调<br>  整。调整后的平衡二叉树如下图所示。<br>  &nbsp;&nbsp;<br></p>"},{"id":"learncoder_38_427","stem":"<p>对任何一棵二叉树T,如果其终端节点数为n0,度为2的节点数为n2,推导n0与n2的关系。[电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——二叉树<br>  【参考答案】n0=n2+1。<br>  证明:设二叉树中度为1的节点数为n1。在二叉树中,只有三种不同类型的节点,分别是度为2的节点、度为1的节点、度为0的节点,因此二叉树的节点总数为n=n2+n1+n0.二叉树中,除了根节点没有双亲节点之外,其余节点都有且只有一个双亲节点,则进入根节点的边数为0,进入其余节点的边数均为1,因此二叉树的总边数为e=n-1=n2+n1+n0-1。由于度为2的<br>  节点发出2条边,度为1的节点发出1条边,度为0的节点发出0条边,因此总边数为e=2×n2+1×n1+0×n0=2n2+n1。联立可得n2+n1+n0-1=2n2+n1,解得n0=n2+1。结论成立。</p>","type":"short_answer","answer":"<p>n0=n2+1。<br>  证明:设二叉树中度为1的节点数为n1。在二叉树中,只有三种不同类型的节点,分别是度为2的节点、度为1的节点、度为0的节点,因此二叉树的节点总数为n=n2+n1+n0.二叉树中,除了根节点没有双亲节点之外,其余节点都有且只有一个双亲节点,则进入根节点的边数为0,进入其余节点的边数均为1,因此二叉树的总边数为e=n-1=n2+n1+n0-1。由于度为2的<br>  节点发出2条边,度为1的节点发出1条边,度为0的节点发出0条边,因此总边数为e=2×n2+1×n1+0×n0=2n2+n1。联立可得n2+n1+n0-1=2n2+n1,解得n0=n2+1。结论成立。&nbsp;&nbsp;<br></p>"},{"id":"learncoder_38_426","stem":"<p>输入一个正整数序列(45,14,11,52,63,32,56,24)。[电子科技大学2014年]<br>  (1)按此次序构造一棵二叉排序树。<br>  (2)如果删除52,画出删除后的二叉树结构。</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——树与二叉树的应用<br>  【参考答案】(1)按此次序构造一棵二叉排序树的过程如下图所示。<br>  <br>  <br>  (2)删除52后的二叉树如下图所示。<br>  </p>","type":"short_answer","answer":"<p>(1)按此次序构造一棵二叉排序树的过程如下图所示。<br>  <br>  <br>  (2)删除52后的二叉树如下图所示。<br>  &nbsp;&nbsp;<br></p>"},{"id":"learncoder_38_425","stem":"<p>若通信系统中只可能出现5种字符A,B,C,D和E,其概率分别为0.12/0.15、0.19、0.21和0.33. [电子科技大学2014年]<br>  (1)试设计哈夫曼编码。<br>  (2)画出相应的哈夫曼树。</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——树与二叉树的应用<br>  【参考答案】(1)定长编码和变长编码的二叉树如下图所示。<br>  <br>  根据上图,可得出两种编码方案如下表所示。<br>  字符<br>  概率<br>  定长编码<br>  变长编码<br>  A<br>  0.12<br>  000<br>  000<br>  B<br>  0.15<br>  001<br>  001<br>  (续表)<br>  字符<br>  概率<br>  定长编码<br>  变长编码<br>  C<br>  0.19<br>  010<br>  10<br>  D<br>  0.21<br>  011<br>  11<br>  E<br>  0.33<br>  100<br>  01<br>  图(a)所示的定长编码的平均编码长度为<br>  =0.12×3+0.15×3+0.19×3+0.21×3+0.33×3=3<br>  图(b)所示的变长编码的平均编码长度为<br>  =0.12×3+0.15×3+0.19×2+0.21×2+0.33×2=2.27<br>  显然,变长编码的效率高于定长编码。由前缀编码的定义可知,该变长编码为前缀编码。因此图(b)得到的变长编码就是哈夫曼编码,如下表所示。<br>  字符<br>  A<br>  B<br>  C<br>  D<br>  E<br>  哈夫曼编码<br>  000<br>  001<br>  10<br>  11<br>  01<br>  <br>  (2)相应的哈夫曼树如下图所示。<br>  </p>","type":"short_answer","answer":"<p>(1)定长编码和变长编码的二叉树如下图所示。<br>  <br>  根据上图,可得出两种编码方案如下表所示。<br>  字符<br>  概率<br>  定长编码<br>  变长编码<br>  A<br>  0.12<br>  000<br>  000<br>  B<br>  0.15<br>  001<br>  001<br>  (续表)<br>  字符<br>  概率<br>  定长编码<br>  变长编码<br>  C<br>  0.19<br>  010<br>  10<br>  D<br>  0.21<br>  011<br>  11<br>  E<br>  0.33<br>  100<br>  01<br>  图(a)所示的定长编码的平均编码长度为<br>  =0.12×3+0.15×3+0.19×3+0.21×3+0.33×3=3<br>  图(b)所示的变长编码的平均编码长度为<br>  =0.12×3+0.15×3+0.19×2+0.21×2+0.33×2=2.27<br>  显然,变长编码的效率高于定长编码。由前缀编码的定义可知,该变长编码为前缀编码。因此图(b)得到的变长编码就是哈夫曼编码,如下表所示。<br>  字符<br>  A<br>  B<br>  C<br>  D<br>  E<br>  哈夫曼编码<br>  000<br>  001<br>  10<br>  11<br>  01<br>  <br>  (2)相应的哈夫曼树如下图所示。<br>  &nbsp;&nbsp;<br></p>"},{"id":"learncoder_38_424","stem":"<p>画出算术表达式(a+b)*(c-d)-(e/f+g)转换的二叉树。[电子科技大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——二叉树<br>  【参考答案】将运算数作为叶节点,转换成二叉树如下图所示。</p>","type":"short_answer","answer":"<p>将运算数作为叶节点,转换成二叉树如下图所示。</p><p>  &nbsp;&nbsp;<br>  <br></p>"},{"id":"learncoder_38_423","stem":"<p>—棵树的先根遍历序列为A,B,E,C,F,H,G,D,后根遍历序列为E,B,H,F,G,C,D,A。[常州大学2015年]<br>  (1)画出该树的结构图。<br>  (2)利用孩子-兄弟表示法画出该树的二叉链结构图。</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——树、森林<br>  【参考答案】(1)根据先根遍历序列与后根遍历序列可以确定该树如下图所示。<br>  <br>  (2)利用孩子-兄弟表示法将一棵树用二叉链表示,实质是左子女-右兄弟表示,则该树的二叉链结构图如下图所示。<br>  </p>","type":"short_answer","answer":"<p>(1)根据先根遍历序列与后根遍历序列可以确定该树如下图所示。<br>  <br>  (2)利用孩子-兄弟表示法将一棵树用二叉链表示,实质是左子女-右兄弟表示,则该树的二叉链结构图如下图所示。<br>  &nbsp;&nbsp;<br>  <br></p>"},{"id":"learncoder_38_422","stem":"<p>以数据集{4,7,6,5,12,10,18}为节点权值构造哈夫曼树:[常州大学2015年]<br>  (1)画出哈夫曼树。<br>  (2)计算带权路径长度。</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——树与二叉树的应用<br>  【参考答案】(1)构造的哈夫曼树如下图所示。<br>  <br>  (2)带权路径长度=4×4+5×4+10×3+18×2+6×3+7×3+12×2=165。</p>","type":"short_answer","answer":"<p>(1)构造的哈夫曼树如下图所示。<br>  <br>(2)带权路径长度=4×4+5×4+10×3+18×2+6×3+7×3+12×2=165。&nbsp;&nbsp;<br>  <br>  <br></p>"},{"id":"learncoder_38_421","stem":"<p>解答下列有关二叉树的问题:[常州大学2015年]<br>  (1)简述中序遍历的递归算法。<br>  (2)分别给出下图所示的二叉树的先序遍历、后序遍历的序列。<br>  (3)由两种遍历序列能确定一棵二叉树吗?举例说明。</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——二叉树<br>  【参考答案】(1)中序遍历的递归算法:先中序遍历左子树,再访问根节点,最后中序遍历右子树,直到树为空时递归终止。<br>  (2)先序遍历序列:A,B,D,E,H,I,K,C,F,G,J.<br>  后序遍历序列:D,H,K,I,E,B,F,J,G,C,A.<br>(3) 已知先序遍历序列和中序遍历序列能唯一确定一棵二叉树,已知中序遍历序列和后序遍历序列能唯一确定一棵二叉树,已知先序遍历序列和后序遍历序列不能唯一确定一棵二叉树。<br>  例如,先序遍历序列为A,B,D,C中序遍历序列为D,B,A,C;后序遍历序列为D,B,C,A.<br>  根据先序遍历序列可知,第一个节点A为根节点;根据中序遍历序列可知,DB为A的左子树,C为A的右子树;根据先序遍历序列的子序列和中序遍历序列的子序列DB可知,D为B的左孩子节点。综上所述,可构造唯一的二叉树如下图所示。<br>  <br>  根据后序遍历序列可知,最后一个节点A为根节点,根据中序遍历序列可知,DB为A的左子树,C为A的右子树;根据中序遍历序列的子序列BD和后序遍历序列的子序列DB可知,D为B的左孩子节点。综上所述,可构造唯一的二叉树如上图所示。<br>  根据先序遍历序列或者后序遍历序列都可知,A为根节点;根据先序遍历序列的子序列BDC和后序遍历序列的子序列DBC可知,B是A的左孩子节点,C是A的右孩子节点,D是B的左孩子节点还是右孩子节点无法确定。因此可以构造出如下图所示的两种不同形态的二叉树。<br>  </p>","type":"short_answer","answer":"<p>(1)中序遍历的递归算法:先中序遍历左子树,再访问根节点,最后中序遍历右子树,直到树为空时递归终止。<br>(2)先序遍历序列:A,B,D,E,H,I,K,C,F,G,J.<br>  后序遍历序列:D,H,K,I,E,B,F,J,G,C,A.<br>(3)已知先序遍历序列和中序遍历序列能唯一确定一棵二叉树,已知中序遍历序列和后序遍历序列能唯一确定一棵二叉树,已知先序遍历序列和后序遍历序列不能唯一确定一棵二叉树。<br>  例如,先序遍历序列为A,B,D,C中序遍历序列为D,B,A,C;后序遍历序列为D,B,C,A.<br>  根据先序遍历序列可知,第一个节点A为根节点;根据中序遍历序列可知,DB为A的左子树,C为A的右子树;根据先序遍历序列的子序列和中序遍历序列的子序列DB可知,D为B的左孩子节点。综上所述,可构造唯一的二叉树如下图所示。<br>  <br>  根据后序遍历序列可知,最后一个节点A为根节点,根据中序遍历序列可知,DB为A的左子树,C为A的右子树;根据中序遍历序列的子序列BD和后序遍历序列的子序列DB可知,D为B的左孩子节点。综上所述,可构造唯一的二叉树如上图所示。<br>  根据先序遍历序列或者后序遍历序列都可知,A为根节点;根据先序遍历序列的子序列BDC和后序遍历序列的子序列DBC可知,B是A的左孩子节点,C是A的右孩子节点,D是B的左孩子节点还是右孩子节点无法确定。因此可以构造出如下图所示的两种不同形态的二叉树。<br>  &nbsp;&nbsp;<br></p>"},{"id":"learncoder_38_420","stem":"<p>(1)如果一棵哈夫曼树有n_0个叶子节点,那么该树共有多少个节点?<br>(2)计算以{2,5,7,9,13}为权值构造的哈夫曼树的带权路径长度。[常州大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——树与二叉树的应用<br>  【参考答案】(1)根据哈夫曼树的构造过程可知,需要扩充n0-1个节点将n0个叶节点构造成哈夫曼树,因此该树共有2n0-1个节点。<br>  (2)构造的哈夫曼树如下图所示。<br>  <br>  同上图可知,带权路径长度=2×3+5×3+7×2+9×2+13×2=79</p>","type":"short_answer","answer":"<p>(1)根据哈夫曼树的构造过程可知,需要扩充n0-1个节点将n0个叶节点构造成哈夫曼树,因此该树共有2n0-1个节点。<br>(2)构造的哈夫曼树如下图所示。<br>  <br>  同上图可知,带权路径长度=2×3+5×3+7×2+9×2+13×2=79</p>"},{"id":"learncoder_38_419","stem":"<p>—棵二叉树的先序序列为A,B, D,K,I,C,E,H,J,G中序序列为D,B,K,F,I,A,H,E,J,C,G.画出该二叉树对应的森林。[常州大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——二叉树<br>  【参考答案】已知一棵二叉树的先序序列和中序序列,能够唯一确定一棵二叉树。该二叉树如下图所示。<br>  <br>  将二叉树从根节点开始,沿着兄弟链逐个断开,形成一组树的二叉树表示,如下图所示。<br>  <br>  将每棵分离后的二叉树转换为树,即可得到该二叉树对应的森林,如下图所示。<br>  </p>","type":"short_answer","answer":"<p>已知一棵二叉树的先序序列和中序序列,能够唯一确定一棵二叉树。该二叉树如下图所示。<br>  <br>  将二叉树从根节点开始,沿着兄弟链逐个断开,形成一组树的二叉树表示,如下图所示。<br>  <br>  将每棵分离后的二叉树转换为树,即可得到该二叉树对应的森林,如下图所示。&nbsp;&nbsp;<br></p>"},{"id":"learncoder_38_418","stem":"<p>设树的存储采用孩子-兄弟表示法表示,定义如下:<br>  Typedef struct TNode{<br>  char data;<br>  struct TNode*firstchild,*nextsibling;<br>  }TNode,*Tree;<br>  编写函数nodedepth() 计算并输出树中每个叶子节点的data域值与所在的层数(根节点所在的层数为1)。[上海海事大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——树、森林<br>  【参考答案】采用C语言实现功能,代码如下:<br>  /*计算所在层数*/<br>  Int nodedepth(constCSTree&amp;T){<br>  //树T存在,返回树的深度<br>  if(!T)//树空<br>  return0;<br>  if(!T-&gt;firstChild)//无长子<br>  Return1;<br>  CSTreep;<br>  Int depth,max=0;<br>  for(p=T-&gt;firstChild;p;){<br>  depth=TreeDepth(p);<br>  if(depth&gt;max)<br>  max=depth;<br>  p=p-&gt;nextsbling;<br>  }<br>  Return max+1;//当前层的下一层<br>  }<br>  /*层序遍历树*/<br>  Status LevelOrderTraverse(constCSTree&amp;T){<br>  LinkQueueQ;<br>  InitQueue(Q);<br>  If(T){<br>  printf(\"%c\",T-&gt;data);//访问节点<br>  EnQueue(Q,T);//根节点排队<br>  while(!QueueEmpty(Q)){<br>  QElemType e,p;<br>  DeQueue(Q,e);<br>  p=e-&gt;firstChild;<br>  while(p){<br>  printf(\"%c\",p--&gt;data);<br>  EnQueue(Q,p);<br>  p=p-&gt;nextsbling;<br>  }<br>  }<br>  Return OK;<br>  }<br>  Return ERROR;<br>  }</p>","type":"short_answer","answer":"<p>采用C语言实现功能,代码如下:<br>  /*计算所在层数*/<br>  Int nodedepth(constCSTree&amp;T){<br>  //树T存在,返回树的深度<br>  if(!T)//树空<br>  return0;<br>  if(!T-&gt;firstChild)//无长子<br>  Return1;<br>  CSTreep;<br>  Int depth,max=0;<br>  for(p=T-&gt;firstChild;p;){<br>  depth=TreeDepth(p);<br>  if(depth&gt;max)<br>  max=depth;<br>  p=p-&gt;nextsbling;<br>  }<br>  Return max+1;//当前层的下一层<br>  }<br>  /*层序遍历树*/<br>  Status LevelOrderTraverse(constCSTree&amp;T){<br>  LinkQueueQ;<br>  InitQueue(Q);<br>  If(T){<br>  printf(\"%c\",T-&gt;data);//访问节点<br>  EnQueue(Q,T);//根节点排队<br>  while(!QueueEmpty(Q)){<br>  QElemType e,p;<br>  DeQueue(Q,e);<br>  p=e-&gt;firstChild;<br>  while(p){<br>  printf(\"%c\",p--&gt;data);<br>  EnQueue(Q,p);<br>  p=p-&gt;nextsbling;<br>  }<br>  }<br>  Return OK;<br>  }<br>  Return ERROR;<br>  }</p>"},{"id":"learncoder_38_417","stem":"<p>设计并编程实现链式存储结构上交换二叉树中所有节点左、右子树的算法。(注:用C/C++,Pascal等编程语言书写)[中国科学院大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——二叉树<br>  【参考答案】采用C语言描述算法,代码如下:<br>  Typedef struct node {<br>  Int data;//数据域<br>  Struct node*lchlld,*rchild;//左右孩子节点域<br>  }bitree;<br>  Void swapbitree(bitree*bt){<br>  bitree*p;<br>  if(bt==0)<br>  return;<br>  swapbitree(bt-&gt;lchild);//交换左子树<br>  swapbitree(bt-&gt;rchild);//交换右子树<br>  p=bt-&gt;lchild;<br>  bt-&gt;lchild=bt-&gt;rchild;<br>  bt-&gt;rchild=p;<br>  }</p>","type":"short_answer","answer":""},{"id":"learncoder_38_413","stem":"<p>二叉树的带权路径长度(WPL)是二叉树中所有叶节点的带权路径长度之和。给定一棵二叉树T,采用二叉链表存储,节点结构为<br>  <br>  其中,叶节点的weight域保存该节点的非负权值。设root为指向T的根节点的指针,请设计求T的WPL的算法。要求:[全国联考2014年]<br>  (1)给出算法的基本设计思想。<br>  (2)使用C或C++语言,给出二叉树节点的数据类型定义。<br>  (3)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——树与二叉树的应用<br>  【参考答案】(1)算法的基本设计思想如下:<br>  本例采用先序遍历的方法,用static类型的变量wpl来记录WPL,将每个节点深度作为参数传递给递归函数。<br>  具体步骤如下:<br>  ①若当前遍历的节点为叶节点,则变量wpl加上此节点的深度与权值的乘积。<br>  ②若当前遍历的节点为非叶节点,如果其左子树不为空,则对左子树进行递归运算;如其右子树不为空,则对右子树进行递归运算,深度参数全为此节点的深度参数加1。<br>  ③最终得出wpl的值。<br>  (2)二叉树节点数据类型定义如下:<br>  Type struct BiTNode{<br>  Int weight;<br>  Struct BiTNode*lchild,*rchild;<br>  }BiTNode,*BiTree;<br>  (3)用C语言描述算法,代码如下:<br>  Int WPL(BiTree node){<br>  Return WPLPreorder(node,0);<br>  }<br>  Int WPLPreOrder(BiTree node,int deep){<br>  Static int wpl=0;//定义static类型变量wpl存储WPL<br>  if(node--&gt;lchild==NULL&amp;&amp;node-&gt;rchild==NULL){<br>  //如果root为叶节点,累计wpl<br>  wpl+=deep*node--&gt;weight;<br>  if(node--&gt;rchild!=NULL)丨//如果mot的左子树不为空<br>  WPLPreOrder(node-&gt;lchild,deep+1);//递归,遍历左子树<br>  1<br>  if(node-&gt;rchild!=NULL){//如果root的右子树不为空<br>  WPLPreOrder(node--&gt;rchild,deep+1);//递归,遍历右子树<br>  }<br>  Return wpl;<br>  }</p>","type":"short_answer","answer":"<p>(1)算法的基本设计思想如下:<br>  本例采用先序遍历的方法,用static类型的变量wpl来记录WPL,将每个节点深度作为参数传递给递归函数。<br>  具体步骤如下:<br>  ①若当前遍历的节点为叶节点,则变量wpl加上此节点的深度与权值的乘积。<br>  ②若当前遍历的节点为非叶节点,如果其左子树不为空,则对左子树进行递归运算;如其右子树不为空,则对右子树进行递归运算,深度参数全为此节点的深度参数加1。<br>  ③最终得出wpl的值。<br>  (2)二叉树节点数据类型定义如下:<br>  Type struct BiTNode{<br>  Int weight;<br>  Struct BiTNode*lchild,*rchild;<br>  }BiTNode,*BiTree;<br>  (3)用C语言描述算法,代码如下:<br>  Int WPL(BiTree node){<br>  Return WPLPreorder(node,0);<br>  }<br>  Int WPLPreOrder(BiTree node,int deep){<br>  Static int wpl=0;//定义static类型变量wpl存储WPL<br>  if(node--&gt;lchild==NULL&amp;&amp;node-&gt;rchild==NULL){<br>  //如果root为叶节点,累计wpl<br>  wpl+=deep*node--&gt;weight;<br>  if(node--&gt;rchild!=NULL)丨//如果mot的左子树不为空<br>  WPLPreOrder(node-&gt;lchild,deep+1);//递归,遍历左子树<br>  1<br>  if(node-&gt;rchild!=NULL){//如果root的右子树不为空<br>  WPLPreOrder(node--&gt;rchild,deep+1);//递归,遍历右子树<br>  }<br>  Return wpl;<br>  }</p>"},{"id":"learncoder_38_412","stem":"<p>如果一棵非空k(k≥2)叉树T中每个非叶节点都有k个孩子,则称T为正则k叉树.<br>  请回答下列问题,并给出推导过程。[全国联考2016年]<br>  (1)若T有m个非叶节点,则T中的叶节点有多少个?<br>  (2)若T的高度为h(单节点的树h=1),则T的节点数最多为多少个?最少为多少个?</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——二叉树<br>  【参考答案】(1)对于任一棵树,它的节点总数等于总度数加1。T共有两种节点,度为左的非叶节点和度为0的叶节点,其中非叶节点有m个,设叶节点有n个,则T的节点总数为(m+n)个。由于可以列出方程为m+n=m×k+n×0+1,化简为m+m=mk+1,解得n=mk-m+1.因此T中的叶节点有(mk-m+1)个。<br>   高度为h的k叉树T节点数最多的情况:第1层至第h-1层都是度为k的非叶节点,第k层都是叶节点,即为满k叉树。根据二叉树的性质可以推导出k叉树中第i(1≤i≤h)层的节点数为ki-1,则T的节点总数为2i-1,因此可求出T的节点数最多为<br>  <br>  高度为h的k叉树T节点数最少的情况:第1层只有根节点,第2层至第h-1层只有一个非叶节点,其余k-1个节点都是叶节点,第h层有k个叶节点,树形如下图所示。<br>  <br>  由上图可知,第1层有1个节点,其余h-1层都有k个节点,因此可求出T的节点数最少为<br>  Mmin=l+(h-l)×k</p>","type":"short_answer","answer":"<p>1)对于任一棵树,它的节点总数等于总度数加1。T共有两种节点,度为左的非叶节点和度为0的叶节点,其中非叶节点有m个,设叶节点有n个,则T的节点总数为(m+n)个。由于可以列出方程为m+n=m×k+n×0+1,化简为m+m=mk+1,解得n=mk-m+1.因此T中的叶节点有(mk-m+1)个。<br>   高度为h的k叉树T节点数最多的情况:第1层至第h-1层都是度为k的非叶节点,第k层都是叶节点,即为满k叉树。根据二叉树的性质可以推导出k叉树中第i(1≤i≤h)层的节点数为ki-1,则T的节点总数为2i-1,因此可求出T的节点数最多为<br>  <br>  高度为h的k叉树T节点数最少的情况:第1层只有根节点,第2层至第h-1层只有一个非叶节点,其余k-1个节点都是叶节点,第h层有k个叶节点,树形如下图所示。<br>  <br>  由上图可知,第1层有1个节点,其余h-1层都有k个节点,因此可求出T的节点数最少为<br>  Mmin=l+(h-l)×k</p>"},{"id":"learncoder_38_411","stem":"<p>请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。例如,当下列两棵表达式树作为算法的输入时:<br>  <br>  输出的等价中缀表达式分别为(a+b)*(c*(-d))和(a*b)+(-(c-d))。<br>  二叉树节点定义如下:<br>  typedef struct node{<br>  char data[10];//存储操作数或操作符<br>  struct node*left,*right;<br>  }BTree;<br>  要求:[全国联考2017年]<br>  (1)给出算法的基本设计思想。<br>  (2)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——二叉树<br>  【参考答案】(1)算法的基本设计思想如下:<br>  ①表达式树中的中序序列加上必要的括号即为等价的中缀表达式。使用二叉树的中序遍历即可得到中缀表达式。<br>  ②表达式树中分支点所对应的子表达式的计算顺序,由该分支点所处的位置决定,为得到正确的中缀表达式,需要在生成遍历序列的同时,在适当位置增加必要的括号,显然表达式最外层(对应根节点)及操作数(对应叶节点)不需要加括号。<br>  (2)采用C语言描述算法,代码如下:<br>  Void bitreeToE(BTree*root){<br>  bitreeToExp(root,1);//根的高度为1<br>  }<br>  Void bitreeToExp(BTree*root,int deep){<br>  if(root==NULL)<br>  return;<br>  Else if(root-&gt;left==NULL&amp;&amp;root-&gt;right==NULL)//叶节点时<br>  printf(\"%s\",root-&gt;data);//输出操作数<br>  else{<br>  if(deep&gt;1)<br>  printf(\"(\");//含子表达式时,外加一层括号<br>  bitreeToExp(root-&gt;left,deep+1);<br>  printf(\"%s\",root&gt;data);//输出操作符<br>  bitreeToExp(root-&gt;right,deep+1);<br>  if(deep〉1)<br>  printf(\")\");//含子表达式时,外加一层括号<br>  }<br>  }</p>","type":"short_answer","answer":"<p>(1)算法的基本设计思想如下:<br>  ①表达式树中的中序序列加上必要的括号即为等价的中缀表达式。使用二叉树的中序遍历即可得到中缀表达式。<br>  ②表达式树中分支点所对应的子表达式的计算顺序,由该分支点所处的位置决定,为得到正确的中缀表达式,需要在生成遍历序列的同时,在适当位置增加必要的括号,显然表达式最外层(对应根节点)及操作数(对应叶节点)不需要加括号。<br>  (2)采用C语言描述算法,代码如下:<br>  Void bitreeToE(BTree*root){<br>  bitreeToExp(root,1);//根的高度为1<br>  }<br>  Void bitreeToExp(BTree*root,int deep){<br>  if(root==NULL)<br>  return;<br>  Else if(root-&gt;left==NULL&amp;&amp;root-&gt;right==NULL)//叶节点时<br>  printf(\"%s\",root-&gt;data);//输出操作数<br>  else{<br>  if(deep&gt;1)<br>  printf(\"(\");//含子表达式时,外加一层括号<br>  bitreeToExp(root-&gt;left,deep+1);<br>  printf(\"%s\",root&gt;data);//输出操作符<br>  bitreeToExp(root-&gt;right,deep+1);<br>  if(deep〉1)<br>  printf(\")\");//含子表达式时,外加一层括号<br>  }<br>  }</p>"},{"id":"learncoder_38_410","stem":"<p>名词解释:二叉排序树。[常州大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>树与二叉树——树与二叉树的应用<br>  【参考答案】二叉排序树又称二叉查找树,它或者是一棵空树,或者是具有如下性质的二叉树:<br>  ①每个节点都有关键字作为查找依据,并且所有节点的关键字互不相同。<br>  ②左子树(如果非空)上的所有节点的关键字都小于根节点的关键字。<br>  ③右子树(如果非空)上的所有节点的关键字都大于根节点的关键字。<br>  ④左子树和右子树也是二叉排序树。</p>","type":"short_answer","answer":"<p>二叉排序树又称二叉查找树,它或者是一棵空树,或者是具有如下性质的二叉树:<br>  ①每个节点都有关键字作为查找依据,并且所有节点的关键字互不相同。<br>  ②左子树(如果非空)上的所有节点的关键字都小于根节点的关键字。<br>  ③右子树(如果非空)上的所有节点的关键字都大于根节点的关键字。<br>  ④左子树和右子树也是二叉排序树。&nbsp;&nbsp;<br></p>"},{"id":"learncoder_38_409","stem":"<p>二叉平衡树中节点的平衡因子定义为__1__。[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>【答案】该节点右子树高度减去左子树高度所得到的高度差。<br>  树与二叉树——树与二叉树的应用<br>  【解析】二叉平衡树中节点的平衡因子是指该节点右子树高度减去左子树高度所得到的高度差。根据二叉平衡树的定义,任一节点的平衡因子取值只能为-1、0、1即平衡因子的绝对值不大于1。</p>","type":"blank","options":{"__1__":"该节点右子树高度减去左子树高度所得到的高度差"}},{"id":"learncoder_38_408","stem":"<p>若以{5,6,7,8,9}作为叶节点的权值构造哈夫曼树,则其带权路径长度是__1__。[电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>【答案】81。<br>  树与二叉树——树与二叉树的应用<br>  【解析】构造的哈夫曼树如下图所示。<br>  <br>  由上图可知,带权路径长度=5×3+6×3+9×2+7×2+8×2=81。</p>","type":"blank","options":{"__1__":"81"}},{"id":"learncoder_38_407","stem":"<p>具有512个节点的完全二叉树的深度为__1__。[电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>【答案】10。<br>  树与二叉树——树与二叉树的应用<br>  【解析】根据二叉树的性质,具有n个节点的完全二叉树的深度为「log2(n+l)1」。其中n=512,则深度d=「log2(512+l)」=「lo2513」=10。</p>","type":"blank","options":{"__1__":"10"}},{"id":"learncoder_38_406","stem":"<p>二叉树上有一个节点的平衡因子的绝对值大于__1__,则该二叉树就是不平衡的。[电子科技大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>【答案】1.<br>  树与二叉树——树与二叉树的应用<br>  【解析】平衡二叉树中,任一节点的平衡因子的绝对值不能超过1,可能的取值为-1、0、1.</p>","type":"blank","options":{"__1__":"1"}},{"id":"learncoder_38_405","stem":"<p>遍历二叉树实质上是对一个非线性结构进行__1__操作。[电子科技大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p>【答案】线性化。<br>  树与二叉树——二叉树<br>  【解析】遍历二叉树是按照一定次序,访问二叉树中的所有节点,并且每个节点被访问一次,且只访问一次。对于线性表,遍历只需要进行扫描一趟即可,但是二叉树是非线性结构,因此遍历二叉树实质上是进行线性化操作,最后得到该二叉树节点的线性序列。</p>","type":"blank","options":{"__1__":"线性化"}},{"id":"learncoder_38_404","stem":"<p>在平衡二叉树中,节点的平衡因子的绝对值不能超过( )。[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树与二叉树的应用<br>  【解析】平衡二叉树中,任一节点的平衡因子的绝对值不能超过1,可能的取值为-1、0、1。</p>","type":"choice","options":{"A":"2","B":"0","C":"3","D":"1"},"answer":"B"},{"id":"learncoder_38_403","stem":"<p>n个节点的线索二叉树中,线索数目是( )个。[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树与二叉树的应用<br>  【解析】指示前趋与后继的指针叫作线索,加上了线索的二叉树叫作线索二叉树。在线索二叉树中,n个节点之间用n-1条线索链接,并且第一个访问的节点的前趋线索为空,最后访问的节点的后继线索为空,因此n个节点的线索二叉树,有n+1个线索。</p>","type":"choice","options":{"A":"n+l","B":"n-1","C":"n","D":"n+2"},"answer":"A"},{"id":"learncoder_38_402","stem":"<p>分别用下列序列构造一棵二叉排序树,与用其他三个序列构造结果不同的是( )。[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树与二叉树的应用<br>  【解析】各选项构造的二叉排序树分别如下图(a)(b)(c)(d)所示。<br>  <br>  (a)(b)(c)(d)<br>  由上图可知,(b)(c)(d)都是单支树,而(a)不是单支树,因此与用其他三个序列构造结果不同的是选项A。</p>","type":"choice","options":{"A":"(4,2,3,7,5,6)","B":"(4,6,5,2,7,3)","C":"(4,6,2,7,5,3)","D":"(4,2,6,3,5,7)"},"answer":"D"},{"id":"learncoder_38_401","stem":"<p>若X是后序线索二叉树中的叶子节点,且X存在左兄弟节点Y,则X的前驱线索指向( )。[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树树与二叉树的应用<br>  【解析】对后序遍历过程中,对二叉线索化所得到的线索二叉树即为后序线索二叉树。在后序线索二叉树中,叶节点的前序线索指向其左兄弟节点。</p>","type":"choice","options":{"A":"X的双亲节点","B":"X的左兄弟节点Y","C":"以Y为根的子树的最左下方节点","D":"以Y为根的子树的最右下方节点"},"answer":"B"},{"id":"learncoder_38_400","stem":"<p>—棵二叉树的前序遍历序列为A,B,C,D,E,F,G,它的中序遍历序列可能是( )。[中国科学院大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】根据前序遍历序列可知,根节点为4。A选项,根节点4前面的序列为左子树,即根节点A的左子树只有节点C,前序遍历序列为AC……,与题中已知的前序遍历序列不符。B选项,当该二叉树所有节点只有右子树时,中序遍历序列与前序遍历序列相同。C选项,根节点A的左子树只有节点D,前序遍历序列为AD……,与题中已知的前序遍历序列不符。D选项,中序遍历序列的第一个节点为根节点,则说明该二叉树的根节点没有左子树,前遍历子序列BCDEFG为根节点的右子树;中序遍历子序列为DFCEGB,前序遍历子序列的第一个节点是中序遍历子序列的最后一个节点,则根节点的右孩子节点为B,节点B没有右子树;节点B的左子树前序遍历子序列为CDEFG,中序遍历子序列为DFCEG,节点B的左孩子节点为C,DF为节点C的左子树,EG为节点C的右子树,但是前序遍历序列中,E在F的前面,不符合前序遍历的规律。</p>","type":"choice","options":{"A":"D,A,C,E,F,B,G","B":"A,D,F,C,E,G,B","C":"C,A,B,D,E,F,G","D":"A,B,C,D,E,F,G"},"answer":"D"},{"id":"learncoder_38_399","stem":"<p>一棵度为4的树,n1, n2 ,n3,n4分别是度为1,2,3,4的节点个数,终端节点个数为n0,则有( )。[桂林电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】对于任一棵树,它的节点总数等于总度数加1。故设此树的节点总数为n,总度数为k。由此可列出等式为n=k+l。其中,n=n0+n1+n2+n3+n4,k=n0×0+n1×1+n2×2+n3×3+n4×4=n1+2n2+3n3+4n4.整理可得n0+n1+n2+n3+n4=n1+2n2+3n3+4n4+1,解得n0=n2+2n3+3n4+l。</p>","type":"choice","options":{"A":"n0=4n4+3n3+2n2+nl","B":"n0=2n4+n3+l","C":"n0=n1+n2+n3+n4","D":"n0=3n4+2n3+n2+l"},"answer":"D"},{"id":"learncoder_38_398","stem":"<p>—棵非空二叉树的前序序列和中序序列正好相同,则该二叉树一定满足( )。[桂林电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】如果该非空二叉树中任意一节点均无左孩子,那么前序遍历便是先访问根节点,再前序遍历右子树,中序遍历便是先访问根节点,再中序遍历右子树,因此前序序列和中序序列正好相同。</p>","type":"choice","options":{"A":"是任意一棵二叉树","B":"其中任意一节点均无右孩子","C":"其中任意一节点均无左孩子","D":"是一棵完全二叉树"},"answer":"C"},{"id":"learncoder_38_397","stem":"<p>下列4棵二叉树中,( )不是完全二叉树。[桂林电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】完全二叉树的第1层至倒数第二层的所有各层的节点数都是满的,仅最后一层或是满的,或从右向左连续缺若干节点。</p>","type":"choice","options":{"A":"0","B":"0"},"answer":"B"},{"id":"learncoder_38_396","stem":"<p>在有n个叶子节点的哈夫曼树中,其节点总数为( )。[西北师范大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树与二叉树的应用<br>  【解析】哈夫曼树又称为最优二叉树。根据哈夫曼树的构造过程可知,它的节点总数为<br>  2n-1.</p>","type":"choice","options":{"A":"2n—1","B":"2n +1","C":"不确定","D":"2n"},"answer":"A"},{"id":"learncoder_38_395","stem":"<p>二叉树的前序序列是A,B,D,C,G,E,F,中序遍历序列是D,B,C,G,A,E,F,则该二叉树的叶子节点数目是( ).[桂林电子科技大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】已知一棵二叉树的前序遍历序列和中序遍历序列,可以唯一确定这棵二叉树。该二叉树如下图所示。<br>  <br>  由上图可知,该二叉树有3个叶节点。</p>","type":"choice","options":{"A":"2","B":"5","C":"3","D":"4"},"answer":"C"},{"id":"learncoder_38_394","stem":"<p>已知某二叉树的中序遍历序列是D,E,A,B,C,前序遍历序列是B,A,E,D,C,则其后序遍历序列是( )。[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】已知一棵二叉树的中序遍历序列和前序遍历序列,可以唯一确定这棵二叉树。该二叉树如下图所示。<br>  <br>  根据该二叉树可知其后序遍历序列为D,E,A,C,B.</p>","type":"choice","options":{"A":"D,E,A,C,B","B":"B,D,A,E,C","C":"D,E,B,A,C","D":"B,A,E,C,D"},"answer":"A"},{"id":"learncoder_38_393","stem":"<p>二叉树先序遍历x在y之前,后序遍历x在y之后,则x是y的( )。[武汉科技大学2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】如果x是y的左兄弟,则无论哪种遍历,都在y之前;如果x是y的右兄弟,则无论哪种遍历,x都在y之后;如果x是y的后裔,则在先序遍历时,x在y之后;只有x是y的祖先,且y在x的左子树上,先序遍历x在y之前,后序遍历x在y之后。</p>","type":"choice","options":{"A":"右兄弟","B":"左兄弟","C":"祖先","D":"后裔"},"answer":"C"},{"id":"learncoder_38_392","stem":"<p>有n(n&gt;0)个分支节点的满二叉树的深度是( )。[中国科学院大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】分支节点是指除叶节点之外的其他节点。在深度为k(k≥1)的满二叉树中,第1层(根节点)至第k-1层的节点均为分支节点,第k层的节点均是叶节点,因此均不是分支节点。根据满二叉树的性质可知,第1层(根节点)至第k-1层的节点个数为2k-1-1,可列方程式2k-1-1=n,解得,k=log2(n+1)+1。</p>","type":"choice","options":{"A":"n2 -1 ","B":"log2(n+l)+1","C":"log2(n -1)","D":"log2(n+l)"},"answer":"B"},{"id":"learncoder_38_391","stem":"<p>深度为6的二叉树最多( )个节点。[广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】根据二叉树的性质,深度为k(k≥0)的二叉树最少有k个节点(单支树),最多有2k-l个节点(满二叉树)。</p>","type":"choice","options":{"A":"32","B":"63","C":"31","D":"64"},"answer":"B"},{"id":"learncoder_38_390","stem":"<p>在一棵二叉树中,度为2的节点有15个,度为1的节点有2个,则度为0的节点数为( ). [广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】度为2的节点有15个,则度为0的节点有16个。</p>","type":"choice","options":{"A":"13","B":"16","C":"17","D":"15"},"answer":"B"},{"id":"learncoder_38_389","stem":"<p>—棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定是( )。[电子科技大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】若要先序遍历序列与后序遍历序列正好相反,只有单支树满足要求,单支树的特点是只有一个叶节点。</p>","type":"choice","options":{"A":"高度等于其节点数","B":"完全二叉树","C":"二叉排序树","D":"只有一个叶节点"},"answer":"D"},{"id":"learncoder_38_388","stem":"<p>二叉树的第i层上最多有( )个节点。[电子科技大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】根据二叉树的性质,在二叉树的第i(i≥1)层最多有2i-1个节点。</p>","type":"choice","options":{"A":"2i -1-1","B":"2i -1","C":"2i","D":"2i-l"},"answer":"B"},{"id":"learncoder_38_387","stem":"<p>若一棵二叉树具有20个度为2的节点,10个度为1的节点,则度为0的节点个数是( )。[电子科技大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】根据二叉树的性质,对于任一棵非空二叉树,度为0的叶节点个数比度为2的节点个数多1。度为2的节点有20个,则度为0的节点有21个。</p>","type":"choice","options":{"A":"30","B":"11","C":"21","D":"10"},"answer":"C"},{"id":"learncoder_38_386","stem":"<p>将森林转换为对应的二叉树,若在二叉树中,节点u是节点v的父节点的父节点,则在原来的森林中,u和v可能具有的关系是( )。[全国联考2009年]<br>  Ⅰ.父子关系<br>  Ⅱ.兄弟关系<br>  Ⅲ.u的父节点与v的父节点是兄弟关系</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树、森林<br>  【解析】如果节点u和节点v是父子关系,且节点u是节点v的第二个孩子节点,那么当森林转换为二叉树时,节点v转换成了节点u的左孩子节点的右孩子节点,如下图所示。<br>  <br>  如果节点u和节点v是兄弟关系,且节点u是其父节点的第一个孩子节点,节点v是其父节点的第三个孩子节点,那么当森林转换为二叉树时,节点v转换成了节点u的右孩子节点的右孩子节点,如下图所示。<br>  <br>  如果节点u的父节点与节点v的父节点是兄弟关系,那么当森林转换为二叉树时,节点u和节点v分别在它们各自的最左父节点的两棵子树中,因此节点u不可能是节点v的父节点的父节点,如下图所示。<br>  </p>","type":"choice","options":{"A":"I和Ⅲ ","B":"I和Ⅱ","C":"I、Ⅱ和Ⅲ","D":"只有Ⅱ"},"answer":"B"},{"id":"learncoder_38_385","stem":"<p>已知一棵完全二叉树的第6层(设根为第1层)有8个叶节点,则该完全二叉树的节点个数最多是( )。[全国联考2009年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】如果一棵高度为h二叉树的第1层至第h-1层的各层节点数都是满的,只有第h层不是满的,则这样的二叉树为完全二叉树。完全二叉树中,存在叶节点的可能是第h层,也可能是第h-1层,因此本题中的完全二叉树的高度为6或7,显然当高度为7时,该完全二叉树的节点数最多。第6层有8个叶节点,则前6层是满二叉树,第7层缺8×2=16个节点。高度为h的满二叉树具有2h-1个节点,因此该完全二叉树的节点个数最多是27-1-16=111。</p>","type":"choice","options":{"A":"39","B":"111","C":"52","D":"119"},"answer":"B"},{"id":"learncoder_38_384","stem":"<p>下列二叉排序树中,满足平衡二叉树定义的是( )。[全国联考2009年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>   树与二叉树——树与二叉树的应用<br>  【解析】平衡二叉树的左子树和右子树的高度之差的绝对值不超过1,并且它的左子树和右子树都是平衡二叉树。选项A,二叉树的左子树和右子树的高度之差的绝对值为2,不符合平衡二叉树的定义,因此不是平衡二叉树。选项B,二叉树的左子树和右子树的高度之差为0,且左子树和右子树也都符合平衡二叉树的定义,因此是平衡二叉树。选项C,二叉树的左子树和右子树的高度之差的绝对值为2,不符合平衡二叉树的定义,因此不是平衡二叉树。选项D,二叉树的左子树和右子树的高度之差的绝对值为3,不符合平衡二叉树的定义,因此不是平衡二叉树。</p>","type":"choice","options":{"A":"0","B":"0"},"answer":"B"},{"id":"learncoder_38_383","stem":"<p>给定二叉树如下图所示。设N代表二叉树的根,L代表根节点的左子树,R代表根节点的右子树。若遍历后的节点序列是3,1,7,5,6,2,4,则其遍历方式是( )。[全国联考2009年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】二叉树的前序遍历(NLR)是先访问根节点,再前序遍历左子树,最后前序遍历右子树。中序遍历(LNR)是先中序遍历左子树,再访问根节点,最后中序遍历右子树。后序遍历(LRN)是先后序遍历左子树,再后序遍历右子树,最后访问根节点。如图所示的二叉树,前序遍历序列为1,2,4,5,6,7,3,中序遍历序列为4,2,6,5,7,1,3,后序遍历序列为4,6,7,5,2,3,1,均与题中遍历后的节点序列不吻合,选项A不正确。NRL遍历是先访问根节点,再NRL遍历右子树,最后NRL遍历左子树。如图所示的二叉树,NRL遍历序列为1,3,2,5,7,6,4,与题中遍历后的节点序列不吻合,选项B不正确。RLN遍历是先RLN遍历右子树,再RLN遍历左子树,最后访问根节点。如图所示的二叉树,RLN遍历序列为3,7,6,5,4,2,1,与题中遍历后的节点序列不吻合,选项C不正确。RNL遍历是先RNL遍历右子树,再访问根节点,最后RNL遍历左子树。如图所示的二叉树,RNL遍历序列为3,1,7,5,6,2,4,与题中遍历后的节点序列吻合,选项D正确。<br>  该题也可以采用简便的方法直接选出答案。依据LRN遍历的特点,最后一个访问的节点为根节点1,与题中遍历后的节点序列不吻合,排除选项A。依据NRL遍历的特点,第一个访问的节点为根节点1,与题中遍历后的节点序列不吻合,排除选项B。依据RLN遍历的特点,最后一个访问的节点为根节点1,与题中遍历后的节点序列不吻合,排除选项C。因此本题答案选D。</p>","type":"choice","options":{"A":"RNL","B":"NRL","C":"LRNB","D":"RLND"},"answer":"A"},{"id":"learncoder_38_382","stem":"<p>对n(n≥2)个权值均不相同的字符构造成哈夫曼树。下列关于该哈夫曼树的叙述中,错误的是( )。[全国联考2010年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树与二叉树的应用<br>  【解析】哈夫曼树是带权路径长度最小的扩充二叉树,但不一定是完全二叉树。依据哈夫曼树的特性,在哈夫曼树中,没有度为1的节点。<br>  假设有n个权值,分别w1w2,…,wn,构造成哈夫曼树的过程如下:<br>  ①将n个权值看作有n棵树的森林,其中每棵树只有一个节点。<br>  ②在森林中选取两棵根节点的权值最小的树作为左、右子树,构造一棵新的二叉树,并且新二叉树的根节点权值为其左、右子树根节点权值之和。<br>  ③从森林中删除这两棵二叉树。<br>  ④把新二叉树加人森林。<br>  ⑤重复②、③、④,直到森林中仅剩下一棵树为止,这棵树就是哈夫曼树。<br>  在构造哈夫曼树过程中,首先选取权值最小的两个节点作为左、右子树,构造一棵新的二叉树,因此树中两个权值最小的节点一定是兄弟节点。哈夫曼树中任一非叶节点的权值一定不小于下一层任一节点的权值。</p>","type":"choice","options":{"A":"该树一定是一棵完全二叉树","B":"树中两个权值最小的节点一定是兄弟节点","C":"树中任一非叶节点的权值一定不小于下一层任一节点的权值","D":"树中一定没有度为1的节点"},"answer":"A"},{"id":"learncoder_38_381","stem":"<p>在一棵度为4的树T中,若有20个度为4的节点,10个度为3的节点,1个度为2的节点,10个度为1的节点,则树T的叶节点个数是( )。[全国联考2010年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树的基本概念<br>  【解析】对于任一棵树,它的节点总数等于总度数加1。故设此树的节点总数为n,度为4的节点有n4个,度为3的节点有n3个,度为2的节点有n2个,度为1的节点有n1个,度为0的节点有n0个,并设总度数为k:。由此可列出等式为n=k+l。其中,n=n0+n1+n2+n3+n4=n0+10+1+10+20=N0+41,k=n0×0+n1×1+n2×2+n3×3+n4×4=10×1+1×2+10×3+20×4=122。整理可得n0+41=122+1,解得n0=82。故度为0的节点有82个。</p>","type":"choice","options":{"A":"122","B":"41","C":"113","D":"82"},"answer":"D"},{"id":"learncoder_38_380","stem":"<p>在下图所示的平衡二叉树中,插入关键字48后得到一棵新平衡二叉树。在新平衡二叉树中,关键字37所在节点的左、右子节点中保存的关键字分别是( )。[全国联考2010年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树与二叉树的应用<br>  【解析】在插入关键字48之后,该二叉树如下图所示。<br>  <br>  平衡二叉树的左子树和右子树的高度之差的绝对值不超过1,并且它的左子树和右子树都是平衡二叉树。上图不符合平衡二叉树的定义,因此需要进行调整,调整之后的平衡二叉树如下图所示。<br>  <br>  如上图所示,关键字37所在节点的左、右子节点中保存的关键字分别是24和53。</p>","type":"choice","options":{"A":"24,90","B":"24,48","C":"13,48","D":"24,53"},"answer":"D"},{"id":"learncoder_38_379","stem":"<p>下列线索二叉树中(用虚线表示线索),符合后序线索树定义的是( )。[全国联考2010年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】该线索二叉树的后序遍历序列是d,b,c,a.节点d是叶节点,其左右链域都为空,在转换成线索二叉树后,其左链域指向前趋节点,但是节点d没有前趋节点,因此左链域为Null,排除选项B和C,右链域指向后继节点b,排除选项A。</p>","type":"choice","options":{"A":"0","B":"0"},"answer":"B"},{"id":"learncoder_38_378","stem":"<p>对于下列关键字序列,不可能构成某二叉排序树中一条查找路径的序列是( )。[全国联考2011年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树与二叉树的应用<br>  【解析】各选项的查找过程如下图所示。<br>  <br>   选项A的查找过程(b)选项B的查找过程(c)选项C的查找过程(d)选项D的查找过程<br>  二叉排序树中,左子树上所有节点的关键字都小于根节点的关键字,右子树上所有节点的关键字都大于根节点的关键字,并且左子树和右子树也是二叉排序树。结合上图和二叉排序树的定义可知,在选项A中,在91的左子树中出现了94大于91,因此不符合。</p>","type":"choice","options":{"A":"21,89,77,29,36,38","B":"12,25,71,68,33,34","C":"92,20,91,34,88,35","D":"95,22,91,24,94,71"},"answer":"D"},{"id":"learncoder_38_377","stem":"<p>已知一棵有2011个节点的树,其叶节点个数为116,该树对应的二叉树中无右孩子的节点个数是( )。[全国联考2011年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树、森林<br>  【解析】在树转换为对应的二叉树时,树中的每一个非叶节点的所有子节点中的最右子节点无右孩子节点,根节点也无右孩子节点,因此该树对应的二叉树中无右孩子的节点个数=2011-116+1=1896。<br>  本题也可以采用特殊情况去求解,假设该树如下图所示。<br>  <br>  该树对应的二叉树中,只有最后115个叶节点有右孩子,那么无右孩子的节点个数=<br>  2011-115=1896.</p>","type":"choice","options":{"A":"116","B":"1896","C":"115","D":"1895"},"answer":"B"},{"id":"learncoder_38_376","stem":"<p>若一棵二叉树的前序遍历序列和后序遍历序列分别为1,2,3,4和4,3,2,1,则该二叉树的中序遍历序列不会是( )。[全国联考2011年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】已知前序遍历序列与中序遍历序列,或者已知后序遍历序列和中序遍历序列,可以唯一确定一棵二叉树。如果该二叉树的中序遍历序列是选项A,则根据前序遍历序列和中序遍历序列确定的二叉树如下图(a)所示。同理,根据选项B确定的二叉树如下图(b)所示,根据选项C确定的二叉树如下图(c)所示,根据选项D确定的二叉树如下图(d)所示。<br>  <br>  <br>  这四棵二叉树中,(a)(b)(d)的后序遍历序列都为4,3,2,1,而(c)的后序遍历序列为3,4,2,1,因此选项C不会是该二叉树的中序遍历序列。</p>","type":"choice","options":{"A":"4,3,2,1","B":"2,3,4,1","C":"1,2,3,4","D":"3,2,4,1"},"answer":"D"},{"id":"learncoder_38_375","stem":"<p>若一棵完全二叉树有768个节点,则该二叉树中叶节点的个数是( )。[全国联考2011年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】设节点总数为n,度为0的节点数为n0,度为1的节点数为n1,度为2的节点数为n2。依据二叉树的性质可得,n=n0+n1+n2,n0=n2+1,整理得2n0+n1=n,即2n0+n1-1=768。在完全二叉树中,度为1的节点至多有1个,因此该完全二叉树中度为1的节点有1个,即n1=1,代入公式解得n0=384,则叶节点有384个。</p>","type":"choice","options":{"A":"384","B":"258","C":"385","D":"257"},"answer":"A"},{"id":"learncoder_38_374","stem":"<p>若平衡二叉树的高度为6,且所有非叶节点的平衡因子均为1,则该平衡二叉树的节点总数为( )。[全国联考2012年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树与二叉树的应用<br>  【解析】如题所示为高度为6的平衡二叉树最少节点的情况。节点最少的平衡二叉树如下图所示。<br>  <br>  <br>  如上图所示,CN= CN-1+ CN-2+1,其中C1 =1, C2=2,C3=2+l+l=4,C4=4+2+l=7,C5=7+4+1=12,C6=12+7+1=20。</p>","type":"choice","options":{"A":"32","B":"20","C":"10","D":"33"},"answer":"B"},{"id":"learncoder_38_373","stem":"<p>若一棵二叉树的前序遍历序列为a,e,b,d,c,后序遍历序列为b,c,d,e,a,则根节点的孩子节点( )。[全国联考2012年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】前序遍历是先访问根节点,再前序遍历左子树,最后前序遍历右子树。后序遍历是先后序遍历左子树,再后序遍历右子树,最后访问根节点。已知一棵二叉树的前序遍历序列和后序遍历序列,无法唯一确定这棵二叉树,但是可以确定这棵二叉树节点的祖先关系:在前序遍历序列中两个节点的关系为在后序遍历序列中它们的关系为BA,则可以确定A是B的祖先。依据前序遍历序列可知,a为根节点,e为根节点的孩子节点。依据前序遍历序列e,b,d,c和后序遍历序列b,C,d,e可知,e为bdc的祖先。因此,根节点的孩子节点只有e。<br>  本题也可以采用排除法找出正确答案。如果根节点的孩子节点为e和b,那么依据前序遍历序列可知,e为根节点的左孩子节点,且e为叶节点,那么在后序遍历中,第一个访问的节点是e,与后序遍历序列不符,排除选项B。如果根节点的孩子节点为e和c,那么依据前序遍历序列可知,c为根节点的右孩子节点,且c为叶节点,那么在后序遍历中,倒数第二个访问的节点是c,与后序遍历序列不符,排除选项C。依据前序遍历序列和后序遍历序列可以确定a为根节点,e为根节点的孩子节点,排除选项D。</p>","type":"choice","options":{"A":"有e、c","B":"无法确定","C":"只有e ","D":"有e、b"},"answer":"C"},{"id":"learncoder_38_372","stem":"<p>在任意一棵非空二叉排序树T1中,删除某节点v之后形成二叉排序树T2,再将v插入T2形成二叉排序树T3。下列关于T1与T3的叙述中,正确的是( )。[全国联考2013年]<br>  I.若v是T1的叶节点,则T1与T3不同<br>  Ⅱ. 若v是T1的叶节点,则T1与T3相同<br>  Ⅲ.若v不是T1的叶节点,则T1与T3不同<br>  IV. 若v不是T1的叶节点,则T1与T3相同</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树与二叉树的应用<br>  【解析】根据二叉排序树的插人与删除节点的规律,如果在二叉排序树中删除叶节点,再插入该节点,删除前的T1与删除后的T3相同;如果在二叉排序树中删除非叶节点,再插入该节点,删除前的T1与删除后的T3不同。</p>","type":"choice","options":{"A":"仅I、Ⅲ","B":"仅I、IV","C":"仅Ⅱ、Ⅲ","D":"仅Ⅱ、IV"},"answer":"C"},{"id":"learncoder_38_371","stem":"<p>若X是后序线索二叉树中的叶节点,且X存在左兄弟节点Y,则X的右线索指向的是( )。[全国联考2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】后序遍历是先后序遍历左子树,再后序遍历右子树,最后访问根节点。如图所示的后序线索二叉树部分节点所下图所示。<br>  <br>  X的右线索指向的是后序遍历时在X右边的元素,因此依据后序遍历的性质,X的右线索指向的是X的父节点。</p>","type":"choice","options":{"A":"X的左兄弟节点Y","B":"以Y为根的子树的最右下节点","C":"以Y为根的子树的最左下节点","D":"X的父节点"},"answer":"D"},{"id":"learncoder_38_370","stem":"<p>已知三叉树T中6个叶节点的权分别是2,3,4,5,6,7,T的带权(外部)路径长度最小是( )。[全国联考2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树树与二叉树的应用<br>  【解析】利用三叉树的特性可得出带权路径长度最小的三叉树如下图所示。<br>  <br>  最小的带权路径长度=(2+3)x3+(4+5)x2+6+7=46。</p>","type":"choice","options":{"A":"56","B":"54","C":"46","D":"27"},"answer":"C"},{"id":"learncoder_38_369","stem":"<p>若将关键字1,2,3,4,5,6,7依次插入到初始为空的平衡二叉树T中,则T中平衡因子为0的分支节点的个数是( )。[全国联考2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树树与二叉树的应用<br>  【解析】构建的平衡二叉树如下图所示。<br>  <br>  由上图可知,T中平衡因子为〇的分支节点有3个,分别是2,4,5。</p>","type":"choice","options":{"A":"2","B":"0","C":"1","D":"3"},"answer":"D"},{"id":"learncoder_38_368","stem":"<p>5个字符有如下4种编码方案,不是前缀编码的是( )。[全国联考2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树树与二叉树的应用<br>  【解析】在前缀编码中,所有字符编码都不是其他字符的前缀。选项D,编码110是编码1100的前缀,因此编码110不是前缀编码。</p>","type":"choice","options":{"A":"000,001,010,011,100","B":"011,000,001,010,1","C":"01,0000,0001,001,1","D":"0,100,110,11110,1100"},"answer":"D"},{"id":"learncoder_38_367","stem":"<p>将森林F转换为对应的二叉树T,F中叶节点的个数等于( )。[全国联考2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树树、森林<br>  【解析】将树转换成二叉树的过程:对于树的每一个节点,仅将第一个子女节点的链接指针保留在节点的lchild域中作为左子树,将其他子女节点的链接指针断开;同时将它的其他所有子女节点通过它们的右兄弟指针rsibling链接起来,再顺时针旋转45°作为右子树,便可将树转换成对应的二叉树。<br>  将森林转换成二叉树的过程:先将森林中的每一棵树转换为二叉树,再将第一棵树的根节点作为转换后二叉树的根节点,第一棵树的左子树作为转换后二叉树的左子树,第二棵树作为转换后二叉树的右子树,第三棵树作为转换后二叉树根节点的右子树的右子树,以此类推,通过根节点的兄弟链将各棵树转换成的二叉树链接起来,森林便可以转换成一棵二叉树。<br>  由于森林中的叶节点没有子女节点,则转换成二叉树后没有左子树,所以森林中叶节点的个数等于二叉树中左孩子指针为空的节点个数。</p>","type":"choice","options":{"A":"T中度为1的节点个数","B":"T中叶节点的个数","C":"T中左孩子指针为空的节点个数","D":"T中右孩子指针为空的节点个数"},"answer":"C"},{"id":"learncoder_38_366","stem":"<p>若对如下图所示的二叉树进行中序线索化,则节点x的左、右线索指向的节点分别是( )。[全国联考2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】指示前趋和后继的指针叫作线索,加上了线索的二叉树叫作线索二叉树。题中的二叉树进行中序遍历的序列为d,e,b,x,a,c,中序遍历序列中在x左、右边的元素分别是节点x的左、右线索,则节点x的左线索是b,右线索是a.</p>","type":"choice","options":{"A":"e、c","B":"e、a","C":"b、a","D":"d、c"},"answer":"C"},{"id":"learncoder_38_365","stem":"<p>现有一棵无重复关键字的平衡二叉树(AVL树),对其进行中序遍历可得到一个降序序列。下列关于该平衡二叉树的叙述中,正确的是( )。[全国联考2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树与二叉树的应用<br>  【解析】中序遍历是先中序遍历左子树,再访问根节点,最后中序遍历右子树。根节点的度可能不为2,例如只有2个节点的平衡二叉树的度为1。平衡二叉树的中序遍历结果为降序序列,树中的最小元素不一定是叶节点,可能是只有左子树没有右子树的非叶节点。最后插入的元素可能会使二叉树的平衡得到调整,而不一定是叶节点。树中最大元素是中序遍历第一个访问的节点,根据中序遍历的原则,第一个访问的节点一定没有左子树。</p>","type":"choice","options":{"A":"最后插入的元素一定是叶节点","B":"树中最小元素一定是叶节点","C":"树中最大元素一定无左子树","D":"根节点的度一定为2"},"answer":"C"},{"id":"learncoder_38_364","stem":"<p>下列选项给出的是从根分别到达两个叶节点路径上的权值序列,能属于同一棵哈夫曼树的是( )。[全国联考2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树树与二叉树的应用<br>  【解析】根据哈夫曼树的性质可知,树中节点的权值等于其左、右子树的权值之和。选项A,若两个10属于同一棵子树,其权值不等于其左、右子树的权值之和,不符合;若两个10属于不同的两棵子树,则其父节点的权值不等于这两棵子树的权值之和,不符合。选项B和C同理可得出不属于同一棵哈夫曼树。选项D,权值为10的子树与权值为14的子树的权值之和等于其父节点的权值,因此属于同一棵哈夫曼树。</p>","type":"choice","options":{"A":"24,10,5和24,14,6","B":"24,10,10和24,14,11","C":"24,10,5和24,12,7","D":"24,10,5和24,10,7 "},"answer":"A"},{"id":"learncoder_38_363","stem":"<p>先序序列为a,b,c,d的不同二叉树的个数是( )。[全国联考2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】二叉树的先序遍历与中序遍历需要使用栈,先序遍历是入栈的过程,中序遍历是出栈的过程,因此得知二叉树的先序序列和中序序列,便可确定唯一一棵二叉树。本题中,进栈序列为a,b,c,d元素个数n为4,则出栈序列的个数为。</p>","type":"choice","options":{"A":"13","B":"16","C":"14","D":"15"},"answer":"C"},{"id":"learncoder_38_362","stem":"<p>若森林F有15条边,25个节点,则F包含树的个数是( )。[全国联考2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树、森林<br>  【解析】树的节点数比边数多1,而森林F的节点数比边数多10,则森林F包含10棵树。</p>","type":"choice","options":{"A":"9","B":"11","C":"8","D":"10"},"answer":"D"},{"id":"learncoder_38_361","stem":"<p>已知字符集{a,b,c,d,e,f,g,h},若各字符的哈夫曼编码依次是0100,10,0000,0101,001,011,11,0001,则编码序列0100011001001011110101的译码结果是( )。[全国联考2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——树与二叉树的应用<br>  【解析】编码的前缀性质是指在变长编码集中必须保证任一字符编码都不是其他字符的前缀。满足前缀性质的编码称为前缀编码。哈夫曼编码是前缀编码,因此满足前缀性质。根据编码序列可得译码过程如下图所示。<br>  a<br>  b<br>  C<br>  d<br>  e<br>  f<br>  g<br>  h<br>  0100<br>  10<br>  0000<br>  0101<br>  001<br>  Oil<br>  11<br>  0001<br>  <br>  因此,译码结果是a,f,e,e,f,g,d。</p>","type":"choice","options":{"A":"a,f,e,e,f,g,d","B":"a,d,b,a,g,b,b","C":"a,f,b,e,a,g,d","D":"a,c,g,a,b,f,h"},"answer":"A"},{"id":"learncoder_38_360","stem":"<p>已知一棵二叉树的树形如下图所示,其后序序列为e,a,c,b,d,g,f,树中与节点a同层的节点是( )。[全国联考2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】根据二叉树的树形和后序序列,可以得出该二叉树如下图所示。<br>  <br>  因此,树中与节点a同层的节点是d.</p>","type":"choice","options":{"A":"f","B":"c","C":"g","D":"d"},"answer":"D"},{"id":"learncoder_38_359","stem":"<p>要使一棵非空二叉树的先序序列与中序序列相同,其所有非叶节点必须满足的条件是( )。[全国联考2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.树和二叉树","analysis":"<p><br>  树与二叉树——二叉树<br>  【解析】先序序列是先序遍历二叉树的序列,中序序列是中序遍历二叉树的序列。先序遍历是先访问根节点,再先序遍历左子树,最后先序遍历右子树。中序遍历是先中序遍历左子树,再访问根节点,最后中序遍历右子树。如果所有非叶节点只有右子树,先序遍历和中序遍历都是先访问根节点,然后遍历右子树,递归进行。例如,下图所示的二叉树。<br>  <br>  先序序列是a,b,c,中序序列是b,a,c.由序列可知,C的位置是固定的,a与b的位置颠倒了,因此根节点a与右孩子节点c的相对位置是固定的,即所有非叶节点都只有右子树的非空二叉树的先序序列与中序序列相同。</p>","type":"choice","options":{"A":"只有左子树","B":"节点的度均为2","C":"只有右子树","D":"节点的度均为1"},"answer":"C"},{"id":"learncoder_39_22703","stem":" 带权图(权值非负,表示边连接的两顶点间的距离)的最短路径 问题是找出从初始顶点到目标顶点之闸的一条最短路径。假定从初始顶 点到目标顶点之间存在路径,现有一种解决该问题的方法:①设最短路径初始时仅包含初始顶点,令当前顶点u为初始顶点;②选择离u最近且尚未在最短路径中的一个顶点v,加入到最短路径中,修改当前顶点u=v;③重复步骤②,直到u是目标顶点时为止。请问上述方法能否求得最短路径?若该方法可行,请证明之;否则,请举例说明.2).已知有一个6个顶点(顶点编号0-5)的有向带权图G,其邻接矩阵A为上三角矩阵,它的压缩存储为,<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image16.png'/>要求:(1)写出图G的邻接矩阵A;(2)画出有伺带权图G;(3)求图G的关键路径,并计算关键路径的长度。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"空","type":"short_answer","answer":"\t1.解析 该方法求得的路径不一定是最短路径。例如,对于图7-53所示的带权图,如 4 果按照题中的原则,从A到C的最短路径为A-B-C,事实上其最短路径为A→D→C<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image35.png'/>2.解析 (1)由题意可以写出待定上三角矩阵如下(其中″? ″为待定元素):<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image36.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image37.png'/>"},{"id":"learncoder_39_22698","stem":"图7-39所示的AOE网表示一项包含8个活动的工程。通过同时加快若干活动的进度可以缩短 整个工程的工期。下列选项中,加快其进度就可以缩短工程工期的是( ).<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image10.png'/>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"根据AOE网的定义可知,关键路径上的活动时闸同时减少,可以缩短工期","type":"choice","options":{"D":"f和h","C":"f和d","B":"d和e","A":"c和e"},"answer":"C"},{"id":"learncoder_39_22695","stem":"下列关于最小生成树的叙述中,正确的是( )。I.最小生成树的代价唯一Ⅱ.所有权值最小的边一定会出现在所有的最小生成树中Ⅲ.使用普里姆算法从不同顶点开始得到的最小生成树一定相同Iv.使用普里姆算法和克鲁斯卡尔算法得到的最小生成树总不相同","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"空","type":"choice","options":{"A":"仅I","B":"仅Ⅱ","C":"仅I、IⅡ","D":"仅Ⅱ、IV"},"answer":"A"},{"id":"learncoder_39_22697","stem":"若对图7-38所示的无向图进行遍历,则下列选项中,不是广度优先遍历序列的是( )。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"空","type":"choice","options":{"D":"a,b, c, d, h, e, f, g","C":"d,b, c, a, h, e, f, g","B":"e,a,f,g, b, h, C, d","A":"h, c, a, b, d, e, g, f"},"answer":"D"},{"id":"learncoder_39_22696","stem":"设图的邻接矩阵A如下所示,则各顶点的度依次是( )。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image9.png'/>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"各顶点的度是矩阵中此结点对应的横行和纵列非零元素之和","type":"choice","options":{"C":"3, 4, 2, 3","D":"4, 4, 2, 2","B":"2, 2, 1, 1","A":"1, 2, 1, 2"},"answer":"C"},{"id":"learncoder_39_22702","stem":"(1)用邻接矩阵表示图时,矩阵元素的个数与顶点个数是否有关?与边的条数是否有关?(2)请回答关于图的下列问题:1)有n个顶点的有向强连通图最多有多少条边?最少有多少条边?2)对于一个有向图,不用拓扑排序,如何判断图中是否存在环?(3)设G=(V, E)以邻接表存储,如图7-32所示,试画出图的深度优先和广度优先生成树。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image12.png'/>(4)7-33所示为一个地区的通信网,边表示城市间的通信线路,边上的权表示架设线路花费的代价,如何选择能沟通每个城市且总代价最省的n-1条线路,画出所有可能的选择。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image13.png'/>(5)有一图的邻接矩阵A如下。顶点编号从0开始,试给出用弗洛伊德算法求各点间最短距离的矩阵序列A0, A1 A2, A3,其中矩阵下标代表当前所取的中间顶点,如A2即为将顶点2作为中闸顶点时 已求出的最短路径矩阵。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image14.png'/>(6)对于图7-34所示的带权有向图,采用迪杰斯特拉算法求出从 顶点1到其他顶点的最短路径,要求给出求解过程。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image15.png'/>(7)写出从图的邻接表表示转换成邻接矩阵表示的算法。(8)设有向图用邻接表表示,图有n个顶点,表示为1~n,试写 一个算法求顶点k的入度。(9)写出以邻接表为存储结构的图的深度优先搜索DFs算法的非递归算法","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"空","type":"short_answer","answer":"\t(1)答:用邻接矩阵表示图时,矩阵元素个数为n^2,这个表达式中只涉及一个自变量n, n是图中 顶点个数,因此矩阵元素只与顶点个数有关,而与边数无关。(2)分析:1)强连通图的定义:图中任意两个顶点vi和平之间都连通,即从vi到平和从平到vi都有路径,则 称图为强连通图。在保证图是连通的情况下, n个顶点的有向图中,边最多的情况就是每两个顶点之间 都有两条边,最少的情况是图中所有顶点通过边串成一个环。答:最多有n(n-1)条边,最少有n条边由深度优先搜索算法可知,在一个顶点v的所有边都被检查过之后,则要返回顶点v,进而退回 上一个顶点,重新开始检查上一个顶点的其他边。假如图中不存在回路,则在v处遍历v的其他邻接顶 点的过程结束前,不会出现一条指向v的边,可以通过检查是否有这样一条边来判断是否存在回路。 答:如果从有向图中的某个顶点v出发选择一个邻接顶点a进行深度优先遍历,若在顶点v处开始 遍历除了a之外的其他邻接顶点过程之前出现一条从顶点u指向v的回边,因为u在生成树上是v的子孙, 则有向图必定存在包含v和u的环。(3)分析<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image26.png'/>(4)分析本题为最小生成树问题,可以采取普里姆或者克鲁斯卡尔算法来求最小生成树,这里采用克鲁斯卡尔算法。题目中要求画出所有可能的情况,通过观察可知,图7-33中除了权值为6的边之外,其余边都 各不相同。并权值为6的边有两条,并且在求解过程中,这两条边不可能同时被选为最小生成树的分支, 因此最小生成树有两种可能,差别只在权值6的边这里。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image27.png'/>(5)分析<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image28.png'/>(6)分析用数组dist[]存放最短路径长度,用数组pathH存放最短路径。具体求解过程见表7-80<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image29.png'/>(7)分析<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image30.png'/>(8)分析要求顶点k的入度,必须检查表中所有的边结点,看边结点所指顶点是否为k,若是则证明k有一 个入度,做一次统计。因此,还要设置一个计数器sum来统计k的入度。 由以上分析可写出如下算法代码:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image31.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image32.png'/>(9)分析<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image33.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image34.png'/>"},{"id":"learncoder_39_22699","stem":"对图7-40所示的有向图进行拓扑排序,得到的拓扑序列可能是( )。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image11.png'/>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"本题较简单,拓扑排序可能的结果为3, 1, 4, 2, 6, 5,因此选D","type":"choice","options":{"B":"3, 1, 2, 4, 6, 5","A":"3, 1, 2, 4, 5, 6","D":"3, 1, 4, 2, 6, 5","C":"3, 1, 4, 2, 5, 6"},"answer":"D"},{"id":"learncoder_39_22689","stem":"下列关于无向连通图特性的叙述中,正确的是( ).I.所有顶点的度之和为偶数 Ⅱ.边数大于顶点个数减1Ⅱ.至少有一个顶点的度为1","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"3个命题中, Ⅱ显然不对,当图是一棵树的时候,正好有边数等于顶点个数减1. III也不对三 例如,一个连接所有顶点的环,边数等于顶点个数,每个顶点的度都是2","type":"choice","options":{"C":"I和Ⅱ","B":"只有Ⅱ","D":"I和III","A":"只有I"},"answer":"A"},{"id":"learncoder_39_22688","stem":"若一个有向图中的顶点不能排成一个拓扑序列,则断定该有向图(\t)。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"本题考查拓扑排序。若有向图中的顶点不能排成一个拓扑序列,则该有向图中一定含有环。 顶点数目大于1的强连通图一定含有环,因此本题选D。 A、 C两选项显然不对。对于B选项,顶点数 目为1的图也是强连通图,这是一种特例。","type":"choice","options":{"D":"含有顶点数目大于1的强连通分量","B":"是个强连通图","A":"含有多个出度为0的顶点","C":"含有多个入度为0的顶点"},"answer":"D"},{"id":"learncoder_39_22690","stem":"对图7-36进行拓扑排序,可以得到不同的拓扑序列的个数是( )。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image8.png'/>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"拓扑排序的步骤如下: 1)在有向图中选一个没有前驱的顶点并输出2)从图中删除该顶点和所有以它为尾的弧。 重复上述两步,直至全部顶点均已输出。由于没有前驱的顶点可能不唯一,所以拓扑排序的结果也 不唯一。题中所给的图有3个不同的拓扑排序序列,分别为a, b, C, e, d; a, b, e, C, d; a, e, b, C, d","type":"choice","options":{"D":"1","B":"3","C":"2","A":"4"},"answer":"B"},{"id":"learncoder_39_22692","stem":"对有n个顶点、e条边且使用邻接表存储的有向图进行广度优先遍历,其算法时间复杂度是( )。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"空","type":"choice","options":{"A":"O(n)","D":"O(nxe)","B":"O(e)","C":"O(n+e)"},"answer":"C"},{"id":"learncoder_39_22694","stem":"对图7-37所示的有向带权图,若采用迪杰斯特拉算法求从源点a到其他各顶点的最短路径,则得到的第一条最短路径的目标顶点是b,第二条最短路径的目标顶点是c,后续得到的其余各最短路径的 目标顶点依次是( )。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"空","type":"choice","options":{"D":"f、 e、d","B":"e、d、f","A":"d、e、f","C":"f、 d、e"},"answer":"C"},{"id":"learncoder_39_22691","stem":"下列关于图的叙述中,正确的是( )。①回路是简单路径②存储稀疏图,用邻接矩阵比邻接表更省空闸若有向图中存在拓扑序列,则该图不存在回路","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"l)若路径中除了开始点和结柬点可以相同以外,其余顶点均不相同,则称这条路径为简单路径2)若一条路径中第一个顶点和最后一个顶点相同,则这条路径是一条回路(回路中可能存在既不是 起点也不是终点的相同点) 3)邻接铝阵不管图是稀疏还是稠密,取的都是最大的存储空间,因此不如邻接表更适合存储稀疏矩阵 4)用拓扑排序的方法可以判断图中是否存在回路,如果对一个图可以完成拓扑排序,则此图不存在回路","type":"choice","options":{"A":"仅①","D":"仅①、③","C":"仅③","B":"仅①、 ②"},"answer":"C"},{"id":"learncoder_39_22693","stem":"若用邻接矩阵存储有向图,矩阵中主对角线以下的元素均为零,则关于该图拓扑序列的结论是( )。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"空","type":"choice","options":{"D":"无法确定是否存在","B":"存在,且不唯一","C":"存在,可能不唯一","A":"存在,且唯一"},"answer":"C"},{"id":"learncoder_39_22682","stem":"图的深度优先遍历算法类似于二叉树的(\t)算法","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"本题考查图与二叉树遍历方式的理解与联系。图7-45a所示是一个无向图,图7-45b所示为对图7-45a进行深度优先搜索的过程,得深度优先搜索遍历序列为1, 2, 5, 6, 3, 4. 图7-45c所示为 对应的深度优先搜索生成树,将其转化为二叉树如图7-45d所示。对图7-45d进行先序遍历,可以得到<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image25.png'/>一个与原图进行深度优先搜索遍历相同的序列: 1, 2, 5, 6, 3, 40这就是图的深度优先搜索与树的先 序遍历的相似之处之一","type":"choice","options":{"B":"中序遍历","C":"后序遍历","A":"先序遍历","D":"层次遍历"},"answer":"A"},{"id":"learncoder_39_22685","stem":"对于图7-31进行从顶点1开始的深度优先搜索遍历,可得到的顶点访问序列是(\t)<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image7.png'/>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"图的深度优先搜索遍历并不一定唯一,因此解此类题目 的快速做法为:当遍历完图中某一顶点之后,参照题目中的选项来选择下一顶点进行访问。选项中对于 1、 2两顶点已经确定。从2开始,下一步只有一个顶点4可以选择,因此排除选项Do访问完4之后,待选顶点为3、 5、 6,此时A、 B、 C3选项都可以,因A、 B两选项在4之后都选择了3进行访问(如 果访问3是错误的,则可以同时排除两个选项),因此此步访问30 3访问过之后, 3的邻接点都已经被 访问,退回4,此时只有5、 6两个待选顶点,同上一步,选择5进行访问0 5访问完之后,只有7可供 选择,而B选项中在5之后却选择了访问6,因此排除B选项o A选项中选择了7进行访问,满足要求。之后访问最后一个顶点6,完成遍历","type":"choice","options":{"C":"1, 2, 4, 5, 3","A":"1,2, 3, 4, 5","B":"1, 2, 3, 5, 4","D":"1, 2, 5, 3, 4"},"answer":"A"},{"id":"learncoder_39_22684","stem":"一个有向图G的邻接表存储结构如图7-30所示,现按深度优先搜索遍历,从1出发,所得到的 顶点序列是( )。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image6.png'/>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"本题遍历过程如下:起点为1, 1 先输出;与1的第一个邻接点为2, 2输出;与2的第一个邻接点为3, 3输出;与3的第一个邻接点为5, 5输出;与5的第一个邻接点为4, 4输出;所有顶点遍历完全。因此遍历序列为1, 2, 3, 5, 4","type":"choice","options":{"C":"1, 2, 4, 5, 3","B":"1, 2, 3, 5, 4","A":"1, 2, 3, 4, 5","D":"1, 2, 5, 3, 4"},"answer":"B"},{"id":"learncoder_39_22681","stem":"如果从无向图的任一顶点出发,进行一次深度优先搜索即可访问所有顶点,则该图一定是(\t).","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"图的一次深度优先搜索遍历,可以遍历完图中一个连 通分量中所有的顶点。如果图是连通的,则图只含有一个连通分量,即图本身,这样一次深度优先搜索 遍历即可遍历完图中所有的顶点。因此本题选Bo无向完全图相当于在连通图上加上了更严格的条件, 即任意两个顶点间都存在边。对于满足本题的要求不需要完全图,条件到达连通图的强度就足够了","type":"choice","options":{"B":"连通图","D":"一棵树","A":"完全图","C":"有回路"},"answer":"B"},{"id":"learncoder_39_22686","stem":"对图7-31所示的图进行从顶点1开始的广度优先搜索遍历,可得到的顶点访问序列为( )<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image7.png'/>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"空","type":"choice","options":{"A":"1, 3, 2, 4, 5, 6, 7","B":"1, 2, 4, 3, 5, 6, 7","D":"2, 5, 1, 4, 7, 3, 6","C":"1, 2, 3, 4, 5, 7, 6"},"answer":"A"},{"id":"learncoder_39_22683","stem":"对图进行广度优先搜索遍历类似于二叉树的(\t)算法。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"答案为D","type":"choice","options":{"B":"中序遍历","A":"先序遍历","C":"后序遍历","D":"层次遍历"},"answer":"D"},{"id":"learncoder_39_22687","stem":"对于含有n个顶点的带权连通图,它的最小生成树是指图中任意一个( ).","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"一个连通图的最小生成树一定包含图中的n个顶点, A B、 c3选项不一定包含n个顶点","type":"choice","options":{"D":"由n个顶点构成的边的权值之和最小的连通子图","B":"由n-l条权值之和最小的边构成的子图","C":"由n-1条权值之和最小的边构成的连通子图","A":"由n-l条权值最小的边构成的子图"},"answer":"D"},{"id":"learncoder_39_22676","stem":"关键路径是事件结点图中(\t).","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"在AOE网中,从源点到汇 点的所有路径中,具有最大路径长度的路径称为关键路径。完成整 个工程的最短时间就是网中关键路径的长度,也就是网中关键路径 上各种活动持续时闸的总和。把关键路径上的活动称为关键活动.","type":"choice","options":{"A":"从源点到汇点的最长路径","C":"最长回路","B":"从源点到汇点的最短路径","D":"最短回路"},"answer":"A"},{"id":"learncoder_39_22679","stem":"带权有向图G用邻接矩阵A存储,则顶点i的入度等于A中( ).","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"有向图的邻接矩阵中, 0和∞表示的都不是有向边,而入 度是由邻接矩阵的列中元素计算出来的。某一列中,非0和非∞元素的个数即为该列所表示的顶点的入度","type":"choice","options":{"C":"第i行非∞且非0元素个数","D":"第i列非∞且非0的元素个数","B":"第i列非∞的元素之和","A":"第i行非∞的元素之和"},"answer":"D"},{"id":"learncoder_39_22678","stem":"对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是( ).","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"图的邻接矩阵规模为图中顶点数的二次方,顶点有n个, 因此邻接矩阵大小为n^2","type":"choice","options":{"C":"n-1","A":"n","B":"(n-1)^2","D":"n^2"},"answer":"D"},{"id":"learncoder_39_22675","stem":"在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是( ).","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"在拓扑排序过程中,在一条路径上的顶点,总是按照由路径尾到路径头(假如有路径<a, b>、 <b, C>、 <c, d>,则规定a是路径尾, d是路径头)的顺序依次出现在拓扑排序序列中,因为拓扑排序每次都是选出入度为0的顶点,并在图中删除这个顶点及和它相连 的边。只有路径尾先被选出来,后序结点才可能变成入度为0的结点,才有可能被选出来。由此可知, 对于一条路径,路径尾结点总是先于路径头结点出现在拓扑排序序列中.A、 B两选项的描述是可能出现的, D选项的描述是不可能出现的, C选项也是可能出现的。如图7-44所示,拓扑排序序列可以是vi,vj,v3, V4而vi之间没有边.<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image24.png'/>","type":"choice","options":{"B":"G中有一条从Vi到Vj的路径","D":"G中有一条从Vj到Vi的路径","C":"G中没有边<Vi,Vj>","A":"G中有边<Vi,Vj>"},"answer":"D"},{"id":"learncoder_39_22674","stem":"—个有向无环图的拓扑排序序列()是唯一的。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"如果在拓扑排序过程中,当删除一个入度为0的顶点时, 出现了多个入度为0的顶点,这时其中任何一个入度为0的顶点都可以作为当前删除的顶点在拓扑排序 序列中的后继顶点,因此拓扑排序序列不一定是唯一的","type":"choice","options":{"B":"不一定","A":"一定"},"answer":"B"},{"id":"learncoder_39_22680","stem":"无向图的邻接矩阵是一个( ).","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"图的邻接矩阵存储结构中,行中1的个数为该行所对应 顶点的出度,列中1的个数为该列所对应顶点的入度。对于无向图,与顶点相连的每一条边相当于同时 存在一条入边和一条出边,即无向图相当于每个顶点的入度等于出度的有向图。反映在邻接矩阵中即为 每个顶点所对应的行中1的个数等于该顶点所对应的列中1的个数,这样的邻接矩阵必为对称矩阵","type":"choice","options":{"B":"零矩阵","C":"上三角矩阵","A":"对称矩阵","D":"对角矩阵"},"answer":"A"},{"id":"learncoder_39_22677","stem":"下列关于AOE网的叙述中,\t不正确的是(\t).","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"关键活动组成了关键路径, 关键路径是图中的最长路径,关键路径长度代表整个工期的最短完成时间。关键活动延期完成,必将导致关键路径长度增加,即整个工期的最短完成时间增加,因此A选项正确。关键路径并不唯一,当有多条关键路径存在时,其中一条关键路径上的关键活动时间缩短,只 能导致本条关键路径变成非关键路径,而无法缩短整个工期,因为其他关键路径没有变化,因此B选项 不正确。对于A、B两选项要搞懂的是,任何一条关键路径上的关键活动变长了,都会使这条关键路径 变成更长的关键路径,并且导致其他关键路径变成非关键路径(如果关键路径不唯一),因此整个工期延 长。而某些关键活动缩短,则不一定缩短整个工期。理解了A、B两选项, C D两选项就很容易理解了.","type":"choice","options":{"A":"关键活动延期完成就会影响整个工程的完成时间","C":"所有的关键活动提前完成,那么整个工程将会提前完成","D":"某些关键活动提前完成,那么整个工程可能提前完成","B":"任何一个关键活动提前完成,那么整个工程将会提前完成"},"answer":"B"},{"id":"learncoder_39_22668","stem":"\t如图7-29所示,在下面的5个序列中,符合深度优先遍历的序 列有( ).序列为:a, e, b, d, f, c; a, c, f, d, e, b; a, e, d, f, c, b; a, e, f, d, c, b; a,. e, f, d, b, c。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"由深度优先搜索遍历的方式特征可知第一个和最后一个序列 满足条件,因此选D从本题也可以看出深度优先搜索遍历产生的顶点序列不一定是唯一的。","type":"choice","options":{"A":"5个","B":"4个","C":"3个","D":"2个"},"answer":"D"},{"id":"learncoder_39_22667","stem":"无向图 G=(V, E),其中:V={a, b, c, d, e, f}, E={(a, b),(a, e),(a, c),(b, e),(c, f),(f, d),(e, d)},以顶点a为源点,对该图进行深度优先遍历,得到的顶点序列正确的是()。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"依照题目给出的顶点和边的信息将图画出,然后根据深度优先搜索的过程可知序列a, e, d, f, C, b是深度优先搜索的结果,因此答案选D","type":"choice","options":{"B":"a, c, f, e, b, d","A":"a, b, e, c, d, f","D":"a, e, d, f, c, b","C":"a, e, b, c, f, d"},"answer":"D"},{"id":"learncoder_39_22673","stem":"若一个有向图的邻接矩阵中,主对角线以下的元素均为零,则该图的拓扑有序序列( )","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"拓扑排序序列存在的条件是图中不存在环。如果 邻接矩阵主对角线以下的元素均为零,则代表图中只存在由编号小的顶点指向编号大的顶点的边,不存 在由编号大的顶点指向编号小的顶点的边,这样图中就不可能出现环.如邻接矩阵:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image23.png'/>所表示的图中的边为<0, 1>, <0, 2>, <0, 3>, <1, 2>, <1, 3>, <2, 3>,图中不存在环,因此一定 存在拓扑排序序列(通过本题可以联想到在操作系统中,给资源编号,按序分配,可以破坏环路,不会产生死锁)","type":"choice","options":{"A":"一定存在","B":"不一定存在","C":"一定不存在"},"answer":"A"},{"id":"learncoder_39_22672","stem":"已知有向图 G=(V, E),其中 V={V1,V2, V3, V4, V5, V6, V7}, E={<V1 V2>, <V1, V3>, <V1,V4>, <V2, V5>, <V3, V5>, <V3, V6>, <V4, V6>, <V5, V7>, <V6, V7>}, G 的拓扑序列是().","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"这类题的解法是,根据题目中给出的顶点和边的关系画出 图,然后按照拓扑排序的过程算出拓扑排序序列。要注意,拓扑排序序列不一定唯一,因此需要结合题目,在排序过程中排除错误选项,这样能提高做题速度","type":"choice","options":{"A":"V1,V3, V4, V6, V2, V5, V7","C":"V1,V3, V4, V5, V2, V6, V7","B":"V1 V3, V2, V6, V4, V5, V7","D":"V1 V2, V5, V3, V4, V6,V7"},"answer":"A"},{"id":"learncoder_39_22669","stem":"(多选题)(\t)方法可以判断出一个有向图是否有环。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"用两者都可以判断有向图中是否有回路。用深度优先搜索的方法,如果从有向图上某个顶点v出发的遍历,在dfs(v)结束之前出现一条从顶点j到v 的边,由于j在生成树上是v的子孙,则图中必定存在包含v和j的环,因此A正确。用拓扑排序的方 法,在拓扑排序过程中,每次要删去一个没有前驱的顶点,如果最后图中所有的顶点都被删除,则表示 没有环,否则有环,因此B正确","type":"choice","options":{"C":"求最短路径","D":"求关键路径","B":"拓扑排序","A":"深度优先遍历"},"answer":"A"},{"id":"learncoder_39_22671","stem":"求解最短路径的弗洛伊德算法的时间复杂度为()。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"以下代码是弗洛伊德算法的主体部分,可知基本操作为最内层循环中if语句内的部分,基本操作外有3层n次循环,因此时间复杂度为O(n^3),故本题选D<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image22.png'/>","type":"choice","options":{"C":"0(N2)","D":"O(N3)","B":"O(n+e)","A":"O(n)"},"answer":"D"},{"id":"learncoder_39_22670","stem":"当各边上的权值(\t)时,BFS算法可用来解决单源最短路径问题。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"对于无权图,广度优先搜索总是按照距离源点由近到远来遍 历图中每个顶点(这里的距离是指当前顶点到源点路径上顶点的个数),如图7-43所示。图中各顶点分布在3个层上,同一层上的顶点距离源点的距离是相同的。广度优 先搜索就是沿着从1到3的层次顺序来遍历各个顶点,并在遍历的 过程中形成了一棵树,称为广度优先搜索生成树,树的分支总是连 接不同层上的顶点,如图中粗线所连。由源点沿生成树分支到达其 余顶点的距离都是最近的(可以用层号来描述其远近)。对于无权 图,可用广度优先搜索遍历的方法来求最短路径。而对于有权图, 当图中各个边的权值相同的时候,就可以类比为无权图(无权图可 理解为各边权值为1),因为各边没有了权的大小之分,同样可以用 广度优先搜索遍历的方式来求最短路径,因此本题选A<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image21.png'/>","type":"choice","options":{"B":"均互不相等","A":"均相等","C":"不一定相等"},"answer":"A"},{"id":"learncoder_39_22660","stem":"在一个无向图中,所有顶点的度数之和等于所有边数的(\t)倍;在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的(\t)倍。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"在无向图中,每一条边连接着两个顶点,这两个顶点因这 条边而各有一个度,对于整个图,各个顶点度数的总和是图中边数总和的两倍。在有向图中,一条边使 一个顶点产生一个出度,则必使另一个顶点产生一个入度,即出度和入度是成对出现的,因此两者总数相等。因此本题选B","type":"choice","options":{"B":"2","C":"1","A":"1/2","D":"4"},"answer":"B"},{"id":"learncoder_39_22663","stem":"(\t)的邻接矩阵是对称矩阵。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"无向图采用邻接矩阵做存储结 构,则邻接矩阵一定是对称的,无向图中两顶点间的边相当于有向图中两顶点间的两条边,即(vi,vj)等价于<vi,vj>并上<vj,vi>,因此反映在邻接矩阵中必定有:如果aij=1,则aji=1. A、 C、 D 3个选项都是有向图,邻接矩阵不一定对称,因此本题选B","type":"choice","options":{"A":"有向图","B":"无向图","C":"AOV网","D":"AOE网"},"answer":"D"},{"id":"learncoder_39_22662","stem":"用DFS遍历一个无环有向图,并在DFS算法退栈返回时打印相应的顶点,则输出的顶点序列是 ( ).","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"当有向图中不存在环的时候,也可以采用深度优先遍历的方法来进行拓扑排序。由于图中 无环,当从图中某顶点出发进行深度优先遍历时,最先退出算法的顶 点即为出度为零的顶点。它是拓扑有序序列中的最后一个顶点,因此 按照深度优先搜索遍历的先后次序记录下的顶点序列即为逆向的拓 扑有序序列","type":"choice","options":{"A":"逆拓扑有序","C":"无序的","B":"拓扑有序"},"answer":"A"},{"id":"learncoder_39_22659","stem":"一个有n个结点的无向图,最少有(\t)个连通分量,最多有(\t)个连通分量。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"图的连通分量为图的极大连通子图,如果图中没有边,则 单个顶点就是一个连通分量,此时有n个连通分量。如果图是连通的,则图只有1个连通分量,就是它本身。因此本题选B、 D","type":"choice","options":{"C":"n-1","A":"0","B":"1","D":"n"},"answer":"B"},{"id":"learncoder_39_22661","stem":"用有向无环图描述表达式(A+B)*((A+B)/A),至少需要顶点的数目为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"用图可以表示表达式,图中顶点表示参与运算的一种操作数和运算符(注意是一种而不是一个),用边来确定各种运算以及运算优先顺序。(A十B)*((A+B)/A)表达式中有3种运算 符:十、 *、 /,有两种操作数: A、 B,因此图中顶点数至少为50表示表达式的图如图7-42所示,图中 A与B结合运算符″+”做运算,将所得结果与″A”结合运算符″/”做运算,上两步的结果再结合运 算符″*”做运算,得到最终结果。本题比较灵活,属于在掌握基础后的能力扩展。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image19.png'/>","type":"choice","options":{"A":"5","B":"6","C":"8","D":"9"},"answer":"A"},{"id":"learncoder_39_22666","stem":"下列说法不正确的是().","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"本章中所讲的两种图的遍历方法--广度优先搜索遍历和深度优先搜 索遍历,对于任何图都是适用的,并没有限制是针对有向图还是无向图的遍历.","type":"choice","options":{"A":"图的遍历是从给定的源点出发,每一个顶点仅被访问一次","B":"图的深度优先遍历不适用于有向图","C":"遍历的基本算法有两种:深度优先搜索遍历和广度优先搜索遍历","D":"图的深度遍历是一个递归过程"},"answer":"B"},{"id":"learncoder_39_22665","stem":"\t当一个顶点数为n的有向图用邻接矩阵A表示时,顶点i的度是()","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"有向图中,一个顶点的度是它的入度和出度之和,反映在邻接矩<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image20.png'/>","type":"choice","options":{"D":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image5.png'/>","A":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image2.png'/>","B":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image3.png'/>","C":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image4.png'/>"},"answer":"D"},{"id":"learncoder_39_22664","stem":"由邻接矩阵可以看出,该图共有①中的(\t)个顶点;如果是有向图,该图共有②中的(\t)条边;如果是无向图,则共有③中的(\t)条边。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image1.png'/>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"对于邻接矩阵,行数或者列数代表其所表示的图的顶点数, 因此①处选B。邻接矩阵如果是对称的,则它所表示的既可能是有向图,又可能是无向图。表示有向图的时候,邻接矩阵中1的个数就是有向图中的边数;表示无向图的时候,邻接矩阵中1的个数正好是图 中边数的两倍,因此②处选B, ③处选D。","type":"choice","options":{"D":"5,2,1","A":"9,3,5","B":"3,4,2","C":"1,3,2"},"answer":"A"},{"id":"learncoder_39_22657","stem":"要连通具有n个顶点的有向图,至少需要(\t)条边。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"在有向图中,若从vi到平有路径,则称vi与平是连通的。有 向图是连通图要求任意两个顶点之间都有路径,即vi到平有路径,同时平到vi也有路径.图7-41所示 即为有向图是连通的且边的数目是最少的情况。从图中可以看出,有n个顶点的有向图正好需要n条边来实现整个图的连通。例如, Vl到vn有路径<v工, Y2>, <v2, V3>, ⋯, <vud, Vri>,而vn到vl也有路径<w vl>。因此本题选B<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image18.png'/>","type":"choice","options":{"D":"2n","C":"n+1","A":"n-1","B":"n"},"answer":"B"},{"id":"learncoder_39_22656","stem":"含有n个顶点的连通无向图,其边的个数至少为( )。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"一个连通图边数最少的情况就是这个图中没有回路的情况, 实际上这个图是一棵树。对于树,分支和结点的关系为:分支数比结点数少1. 因此本题应选A","type":"choice","options":{"C":"n+1","A":"n-1","B":"n","D":"nlog2n"},"answer":"A"},{"id":"learncoder_39_22658","stem":"n个结点的完全有向图含有边的数目为( )。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"若图中的 每两个顶点之间都存在一条边,则称该图为完全图。完全无向图有n(n-1)/2条边,完全有向图有n(n-1)条边。因此本题选D","type":"choice","options":{"D":"n(n-l)","B":"n(n+l)","A":"N^2","C":"n/2"},"answer":"D"},{"id":"learncoder_39_22655","stem":"设无向图的顶点个数为m则该图最多有(\t)条边。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"对于无向图,边数最多的情况就是任意两个顶点之恫都有一条边,即n个顶点里面任取两个顶点的组合数: ,此时的无向图也叫完全无向图。因此本题选B<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第7章)/image17.png'/>","type":"choice","options":{"E":"n^2","B":"n(n-l)/2","C":"n(n+l)/2","D":"0","A":"n-1"},"answer":"B"},{"id":"learncoder_39_22654","stem":"图中有关路径的定义是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"在一个图中,一条路径是由相邻顶点序偶所形成的序列。因此本题选A","type":"choice","options":{"D":"上述定义都不是","A":"由相邻顶点序偶所形成的序列","C":"由不同边所形成的序列","B":"由不同顶点所形成的序列"},"answer":"A"},{"id":"learncoder_39_19179","stem":"试写一算法,判断以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径 (i≠j)。注意:算法中涉及的图的基本操作必须在存储结构上实现。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是图的遍历。在有向图中,判断顶点vi和顶点vj间是否有路 径,可采用搜索的方法,从顶点vi出发,不论是深度优先搜索(DFS)还是宽度优先搜索(BFS),在 未退岀DFS函数或BFS函数前,若访问到vj则说明有通路,否则无通路。设一全程变量flag. 初始化为0,若有通路,则flag=l.","type":"short_answer","answer":"算法一int visited[ ] = 0; //全局变量,访问数组初始化int dfs( AdjList g , vi)//以邻接表为存储的有向图g,判断vi到vj是否有通路,返回1或无0 .{ visited[vi] = 1 ; //visited是访问数组,设顶点的信息就是顶点编号P = g[vi]. firstarc; //第一个邻接点while ( p! =null){ j = p->adjvex;if ( vj= =j) { flag = 1; return(1) ;} //vi 和 vj 有通路if (visited]j] = =0)dfs(g,j);p = p->next;(//whileif ( ! flag) return(O);}//结束算法2:输出vi到vj的路径,其思想是用一个栈存放遍历的顶点,遇到顶点vj时输出路径。 void dfe( AdjList g , int i)//顶点vi和顶点vj间是否有路径,如有,则输出{ int top = 0, stack[ ] ; //stack是存放顶点编号的栈visited[i]=1 ;//visited数组在进入dfs前已初始化stack [ ++top] = i;p = g[i]. firstarc; /求第一个邻接点while (p){if (p->adjvex= =j){ stack[ ++top] =j ; printf(\"顶点 vi 和 vj 的路径为:\\n” ) ;for (i= 1 ; i< = top; i++) printf( \" %4d\" ,stack[i]);exit(O);(//ifelse if ( visited[p->adjvex] = =0) { dfs(g,g->adjvex) ; top--; p = p->next; }} //while}//结束算法2算法3:非递归算法求解。int Judge (AdjList g , int i , j )//判断n个顶点以邻接表示的有向图g中,顶点vi各vj是否有路径,有则返回1,否则 返回0.{ for (i=l ;i< = n;i++) visited[i] =0; //访问标记数组初始化int stack [ ] , top 0 ; stack [ ++top ] = vi ;while,(top>0){ k = stack[ top] ; p = g[k] . firstarc ;while(p! = null && visited[p->adjvex] = = 1) p = p->next;//查第k个链表中第一个未访问的弧结点if(p= =null) top--;else {i = p->adjvex ;if(i==j) return(l); //顶点 vi 和 vj 间有路径else { visited[i] = 1 ; stack[ ++top] =i; (//else} //else\\ whileretum(0) ;}//顶点vi和vj间无通路"},{"id":"learncoder_39_19182","stem":"\"破圈法”是“任取一圈,去掉圈上权最大的边?',反复执行这一步骤;,直到没有圈为止。 请给出用“破圈法”求解给定的带权连通无向图的一棵最小代价生成树的详细算法,并用程序实 现你所给出的算法。(注:圈就是回路)","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是最小生成树的定义。连通图的生成树包括图中的全部n个 顶点和足以使图连通的n-1条边,最小生成树是边上权值之和最小的生成树。故可按权值从大 到小对边进行排序,然后从大到小将边删除。每删除一条当前权值最大的边后,就去测试图是否 仍连通,若不再连通,则将该边恢复。若仍连通,继续向下删;直到剩n-1条边为止。","type":"short_answer","answer":"void SpnTree (AdjList g)//用“破圈法”求解带权连通无向图的一棵最小代价生成树{ typedef struct j int i, j, w }node; //设顶点信息就是顶点编号,权是整数 node edge[ ] ;scanf( ,,%d%dn,&e,&n) ;//输入边数和顶点数。for (i = l ;i< = e;i++)//输入e条边:顶点,权值scanf( \" %d%d%d\" , &edge[i].i,& edge[i]. j,&edge [ i] . w) ;for (i = 2;i< = e;i++) //按边上的权值大小,对边进行逆序排序{edge[0] =edge[i] ; j = i-l;while (edge] j]. wVedge[0]. w) edge[j+l] =edge[j--] ;edge[j+l] =edge[0] ; }//fork = 1 ; eg = e;while (eg> = n) /破圈,直到边数 e = n-1{if (connect(k) ) //删除第k条边若仍连通jedge[k].w = 0; eg--; }//测试下一条边edge[k],权值置0表示该边被删除 k++;//下条边(/ /while }//算法结束connect()是测试图是否连通的函数,可用DFS函数或BFS函数实现,若是连通图,一次进入 DFS函数或BFS函数就可遍历完全部顶点,否则,因为删除该边而使原连通图成为两个连通分 量时,该边不应删除。“破圈”结束后,可输出edge中w不为0的n-1条边。"},{"id":"learncoder_39_19176","stem":"G=(V,E)是一个带有权的连通图,如图所示。(1)什么是G的最小生成树?(2)G如图所示,请找出G的所有最小生成树。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是最小生成树的定义。该题说明图的最小生成树不唯一,但权 值和唯一,出现两个或以上的情况是因为有权值相同的边。牢记 Prim(选图的顶点),Kruscal(选 图的边,边上权值排序))两种算法的区别及算法步骤。","type":"short_answer","answer":"(V)无向连通图的生成树包含图中全部n个顶点,以及足以使图连通的n-1条边。而最小 生成树则是各边权值之和最小的生成树。「(2)最小生成树有两棵。下面给出顶点集合和边集合,边以三元组(Vi,Vj,W)形式,其中W 代表权值。V(G)= {1,2,3,4,5}E1(G)={(4,5,2), (2,5,4), (2,3,5), (1,2,7)};E2(G)= { (4,5,2) ,(2,4,4) ,(2,3,5) ,(1,2,7) }"},{"id":"learncoder_39_19183","stem":"自由树(即无环连通图)T(V,E)的直径是树中所有点对间最短路径长度的最大值,即T的直径定义为MAX D(u,v),这里D(u,v)(u,v∈V)表示顶点u到顶点v的最短路径长度(路径长度为路径中所包含的边数)。写一算法求自由树T的直径,并分析算法的时间复杂度。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是图的遍历。对于无环连通图,顶点间均有路径,树的直径是 生成树上距根结点最远的两个叶子间的距离,利用深度优先遍历可求出图的直径","type":"short_answer","answer":"int dfs( Graph g vertype parent , vertype child ,int len)//深度优先遍历,返回从根到结点child所在的子树的叶结点的最大距离{ current_len = len ; maxlen = len ;v = GraphFirstAdj ( g , child );while (v! =0) //邻接点存在if (v! = parent){ len = len+length( g ,child ,c) ; dfs(g , child ,v ,len);if(len>maxlen) .maxlen=len;v = GraphNextAdj ( g , child ,v) ; len = current_len ; ( //iflen = maxlen ;return(len);}//结束dfsint Find_Diamenter (Graph g)//求无向连通图的直径,图的顶点信息为图的编号{maxlenl = 0 ; maxlen2 = 0 ;//存放目前找到的根到叶结点路径的最大值和次大值len = 0; //深度优先生成树根到某叶结点间的距离w = GraphFirstAdj(g, 1); //顶点 1 为生成树的根while (w! =0) //邻接点存在(len = length(g ,1 ,w)if (len>maxlenl) ( maxlen2 = maxlenl ; maxlenl = len ; }else if (len>maxlen2 ) maxlen2 = len ;w = GraphNextAdj(g ,1 ,w) ;//找顶点 1 的下一邻接点(//whileprintf(\"无向连通图g的最大直径是%d\\n”,maxlenl+maxlen2) ;return (maxlenl +maxlen2) (//结束find_maxlen2\t算法主要过程是对图进行深度优先遍历。若以邻接表为存储结构,则时间复杂度为0(n + e)."},{"id":"learncoder_39_19177","stem":"对于如下的加权有向图,给出算法Dijkstra产生的最短路径的支 撑树,设顶点A为源点,并写出生成过程。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第4章/header1.xml'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第4章/image2.png'/>第8题图 第9题图","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的\"知识点是最短路径.","type":"short_answer","answer":"顶点A到顶点B、C、D、E的最短路径依次是3、18、38、43,按Dijkstra所选顶点过 程是 B、C、D、E。支撑树的边集合为{<A,B>,<B,C>,<C,D>,<B,E>}具体分析如表所示。表 Dykstra算法的执行过程"},{"id":"learncoder_39_19180","stem":"假设以邻接矩阵作为图的存储结构,编写算法判别在给定的有向图中是否存在一个简单有向回路,若存在,则以顶点序列的方式输出该回路(找到一条即可:)。(注:图中不存在顶点 到自己的弧)","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是图的遍历。有向图判断回路要比无向图复杂6利用深度优 先遍历,将顶点分成三类:未访问;已访问但其邻接点未访问完;已访问且其邻接点已访问完。下 面用0、1、2表示这三种状态。前面已提到,若dfs(v)结束前出现顶点u到p的回边,则图中必有 包含顶点v和u的回路。对应程序中v的状态为1,而u是正访问的顶点,若找出u的下一邻接点的状态为1,就可以输出回路了。\t\t","type":"short_answer","answer":"用邻接矩阵存储void Print(int v,int start ) //输出从顶点 start 开始的回路{ for(i = 1 ;i< = n;i++)i£(g[v] [i] ! =0 && visited[i]==1 ) //若存在边(v,i),且顶点 i 的状态为 1(printf( \"% d\",v) ; if( i = = start) printf(\" \\n\" ) ; else Print(i, start) ; break ; (//if}//Printvoid dfs(int v){visited [v] = 1 ;fbr(j = l;j< = n;j++ )if(g[v][j]! =0) //存在边(v,j)if (visited[j] ! =1) (if ( ! visited[j]) dfs(j) ; }//ifelse j cycle = 1 ; Print(j ,j);}visited[ v] =2;(//dfsvoid find_cycle()//判断是否有回路,有则输岀邻接矩阵。visited数组为全局变量{ for (i= 1 ;i< = n;i-h+) visited[i] = 0;for (i= 1 ;i< = n;i++ ) if ( ! visited[i])dfs(i) ;} //find_cycle"},{"id":"learncoder_39_19181","stem":"已有邻接表表示的有向图,请编程判断从第u顶点至第v顶点是否有简单路径,若有则 印出该路径上的顶点。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是图的遍历。算法思想同第10题,利用深度优先搜索来实现。","type":"short_answer","answer":"void Allpath( AdjList g,vertype u,vertype v)//求有向图g中顶点u到顶点v的所有简单路径,初始调用形式{int top = 0, s [ ];s[++top]=u; visited[u] = 1 ;while (top>0 || p){p = g[s[top] ].firstarc; //第一个邻接点while (p! = null && visited]p->adjvex] = = 1) p = p—>next;//下一个访问邻接点表if (p = =null) top一一 ; //退栈else { i = p->adjvex; //取邻接点(编号)if (i= =v) //找到从u到v的一条简单路径,输岀{for (k = 1 ;k< = top;k++) printf( \" %3d\",s[ k] ) ; printf( \" % 3d\\n\" , v);//ifelse { visited[i] =1 ; s[++top]=i; } //else 深度优先遍历} //else }//while(// AllSPdfs"},{"id":"learncoder_39_19184","stem":"对于一个使用邻接表存储的有向图C,可:以利用深度优先遍历方法,对该图中结点进行 拓扑排序。其基本思想是:在遍历过程中,每访问一个顶点,就将其邻接到的顶点的入度减一,并 对其未访问的、入度为0的邻接到的顶点进行递归。(1)给出完成上述功能的图的邻接表定义。(2)定义在算法中使用的全局辅助数组。(3)写出在遍历图的同时进行拓扑排序的算法。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是图的遍历。对有向图进行深度优先遍历可以判定图中是否 有回路。若从有向图某个顶点v出发遍历,在dfs(v)结束之前,出现从顶点u到顶点v的回边, 图中必存在环。由于dfs、产生的是逆拓扑排序,故设一类型是指向邻接表的边结点的全局指针 变量final,在dfs函数退出时,把顶点v插入到final所指的链表中,链表中的结点就是一个正常的拓扑序列。","type":"short_answer","answer":"\t(1)邻接表定义:typedef struct ArcNode {int adj vex ;struct ArcNode * next ;} ArcNode ; Typedef struct VNode { vertype data;\tArcNode * fir^tarc;\t} VNode, AdjList[MAX];\t(2)全局数组定义:int visited[ ] =0; finished[ ] =0; flag=l ; //flag测试拓扑排序是否成功ArcNode * final = null; //final是指向顶点链表的指针,初始化为0\t(3)算法\t\tvoid dfs(AJjList g,vertype v) //以顶点v开始深度优先遍历有向图g,顶点信息就是顶点编号\t{ArcNode * t; //指向边结点的临时变量\tprintf(\"%d\" ,v) ; visited [v] =1; p = g[ v] . firstarc; while (*p! =null)\t\t{j = p->adjvex;\tif(visited[j] = =1 && finished[j] = = 0) flag = 0 //dfs 结束前出现回边 else if(visited[j]==0) { dfs(g,j) ; finished[j]=1 ;} //if\tp = p->next} / / while\t\t t = ( ArcNode *)malloc ( sizeof( ArcNode).) ; //申请边结点\tt->adjvex = v; t->next = final;;;;;final = t;//将该顶点插入链表\t} //dfs结束\tint dfs-Topsort(Adjlist g)\t //对以邻接表为存储结构的有向图进行拓扑排序,拓扑成功返回1,否则返回a{i = 1;\twhile (flag && i < = n)\t\t if (visited[i] = = 0) { dfs( g,i );finished[ i] =1 }//if\treturn (flag);\t}// dfs-Topsort\t"},{"id":"learncoder_39_19175","stem":"对一个图进行遍历可以得到不同的遍历序列,那么导致得到的遍 历序列不唯一的因素有哪些?","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是图的遍历。遍历不唯一的因素有:开始遍历的顶点不同;存 储结构不同;在邻接表情况下邻接点的顺序不同。","type":"short_answer","answer":"见解析。"},{"id":"learncoder_39_19178","stem":"(1)对于有向无环图,叙述求拓扑有序序列的步骤。(2)对于以下的图,写出它的4个不同的拓扑有序序列。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是拓扑排序.","type":"short_answer","answer":"(1)对有向图,求拓扑序列步骤为:在有向图中选一个没有前驱(即入度为零)的顶点并输出。在图中删除该顶点及所有以它为尾的弧。重复①和②步,直至全部顶点输出,这时拓扑排序完成;否则,图中存在环,拓扑排序失败。(2)从入度为0的顶点开始,当有多个顶点可以输出时,将其按序从上往下排列,这样不会 丢掉一种拓扑序列。从顶点1开始的所有可能的拓扑序列为12345678, 12354678, 13456278,13546278."},{"id":"learncoder_39_19173","stem":"如何对有向图中的顶点号重新安排可使得该图的邻接矩阵中所有的1都集中到对角线以上?","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是图顶点度数。可以按各顶点的出度进行排序。几个顶点的 有向图,其顶点最大出度是n-1,最小出度为0,这样排序后,出度最大的顶点编号为1,出度最 小的顶点编号为%之后,进行调整,即若存在弧<i,j>,而顶点j的出度大于顶点i的出度,则将 把j编号在顶点i的编号之前。","type":"short_answer","answer":"见解析。"},{"id":"learncoder_39_19170","stem":"证明具有n个顶点和多于n-1条边的无向连通图G 一定不是树。\t・","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是图的定义。具有n个顶点n-1条边的无向连通图是自由 树,即没有确定根结点的树,每个结点均可当根。若边数多于n-1条,因一条边要连接两个结 点,则必因加上这一条边而使两个结点多了一条通路,即形成回路。形成回路的连通图不再是树 (在图论中树定义为无回路的连通图)。","type":"short_answer","answer":"见解析。"},{"id":"learncoder_39_19171","stem":"证明:对有向图的顶点适当的编号,可使其邻接矩阵为下三角形且主对角线为全0的充要条件是该图为无环图。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是无环图的定义。据题意该有向图顶点编号的规律是让弧尾 顶点的编号大于弧头顶点的编号。由于不允许从某顶点发出并回到自身顶点的弧,所以邻接矩 阵主对角元素均为0。先证明该命题的充分条件。由于弧尾顶点的编号均大于弧头顶点的编 号,在邻接矩阵中,非零元素(A[i][j]=1)落到下三角矩性中;命题的必要条件是要使上 三角为则示允许出现弧头顶点编号大于弧尾顶点编号的弧,否则,就必然存在环路。(对该类 有向无环图顶点编号,应按顶点出度顺序编号。)","type":"short_answer","answer":"见解析。"},{"id":"learncoder_39_19174","stem":"假定图G=(V,E)是有向图,V{1,2,…,N}N>=1,G以邻接矩阵方式存储,G的邻接矩阵为A,即A是一个二维数组,如果i到j有边,则A[i,j] = 1,否则A[i,j] = 0,请给出一个算法思 想,该算法能判断G是否是非循环图(即G中是否存在回路),要求算法的时间复杂性 为O(nxn)o","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是图的遍历。采用深度优先遍历算法,在执行DFS(v)时,若在 退出DFS3(v)前,碰到某顶点u,其邻接点是已经访问的顶点v,则说明v的子孙u有到v的回边,即说明有环;否则,无环。","type":"short_answer","answer":"见解析。"},{"id":"learncoder_39_19172","stem":"关于图(Graph)的一些问题:(1)有n个顶点的有向强连通图最多有多少条边?最少有多少条边?(2)表示有1 000个顶点、1000条边的有向图的邻接矩阵有多少个矩阵元素?是否为稀疏矩阵?(3)对于一个有向图,不用拓扑排序,如何判断图中是否存在环?","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此问题考查的知识点是图的相关术语。(1)在有向图G中,如果对于每一对vi,vj 属于V,vi不等于vj,从vi到vj和从vi到vj都存在路径,则称G是强连通图。最多边是所有的顶点 每对之间都有边,边数为,最少只有—个方向有边为n0,(2)素个数为矩阵的大小,即 106,稀疏矩阵的定义是非零个数远小于该矩阵元素个数,且分布无规律,不一定稀疏。(3 )使用 深度优先遍历,按退出DFS过程的先后顺序记录下的顶点是逆向拓扑有序序列。若在执行DFS (v)未退出前,出现顶点u到v的回边,则说明存在包含顶点v和顶点u的环。","type":"short_answer","answer":"(1))))n((n-l)), n\t((2)) 106,不一定是稀疏矩阵 \t((3))“同解析。"},{"id":"learncoder_39_19166","stem":"下列关于A0E网的叙述中,不正确的是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此题考查的知识点是图的关键路径。在AOE网中,从始点到终点具有最大路径长 度(该路径上的各个活动所持续的时间之和)的路径称为关键路径,并且不只一条。关键路径上 的活动称为关键活动。A、B、C的说法都正确。但任何一个关键活动提前完成,不一定会影响关 键路径,所以B不正确。根据题意,应选B。","type":"choice","options":{"D":"某些关键活动提前完成,那么整个工程将会提前完成","B":"任何一个关键活动提前完成,那么整个工程将会提前完成","A":"关键活动不按期完成就会影响整个工程的完成时间","C":"所有的关键活动提前完成,那么整个工程将会提前完成"},"answer":"D"},{"id":"learncoder_39_19167","stem":"一个二部图的邻接矩阵A是一个(\t)类型的矩阵。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此题考查的知识点是二部图的定义与存储。二部图定义为:若能将无向图G = <V, E>的顶点集V划分成两个子集V1和V2(V1∩V2=Ø),使得G中任何一条边的两个端点一个属 于V1,另一个属于V2,则称G为二部图。由于其特点,其存储矩阵必为分块对称的,所以选B。","type":"choice","options":{"D":"下三角矩阵","B":"分块对称矩阵","C":"上三角矩阵","A":"n×n矩阵"},"answer":"B"},{"id":"learncoder_39_19165","stem":"\t在,有向图G的拓扑序列中,若顶点vi在顶点vj之前,则下列情形不可能出现的是(\t)","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此题考查的知识点是图的拓扑排序。根据拓扑排序的定义,若顶点久与顶点勺有一 条弧,则拓扑序列中顶点vi务必在顶点vj之前。若有一条从vi到vj的路径,则顶点vi不可能在顶点 vj之前。所以应选D。","type":"choice","options":{"A":"G中有弧<vi,vj>","C":"G中没有弧<vi,vj>","B":"G中有一条从vi到vj的路径","D":"G中有一条从vj到vi的路径"},"answer":"D"},{"id":"learncoder_39_19160","stem":"一个有n个顶点的图,最少有(\t)个连通分量,最多有()个连通分量。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此题考查的知识点是连通分量的定义。在无向图中,如果从顶点兔到顶点兮•有路 径,则称vi和vj连通。如果图中任意两个顶点之间都连通,则称该图为连通图,否则,将其中的极 大连通子图称为连通分量。本题中最少的连通分量个数就是几个顶点均连通,只有1个。最多 是n个顶点都不连通,有n个。所以选b、d。","type":"choice","options":{"C":"n-1","A":"0","B":"1","D":"n"},"answer":"B"},{"id":"learncoder_39_19161","stem":"用有向无环图描述表达式((A+B))x((((A+B))/A)),至少需要顶点的数目为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此题考查的知识点是有向无环图的定义。有向无环图是一个无环的有向图,可以用 来表示公共子表达式,本题中出现的5个字符作为5个顶点,其中A+B和A可共用,所以至少5 个即可,选A。","type":"choice","options":{"A":"5","B":"6","C":"8","D":"9"},"answer":"A"},{"id":"learncoder_39_19163","stem":"用邻接矩阵A表示图,判定任意两个顶点vi和vj•之间是否有长度为m的路径相连,则只 要检查(\t)的第i行第j列的元素是否为零即可。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此题考查的知识点是图的邻接矩阵存储。在图的邻接矩阵中,两点之间有边,则值 为1,否则为0。本题只要考虑Am=A*A*...*A(m个A矩阵相乘后的乘积矩阵)中(i,j)的元素 值是否为0就行了。","type":"choice","options":{"D":"Am-1","A":"mA","C":"Am","B":"A"},"answer":"C"},{"id":"learncoder_39_19164","stem":"当各边上的权值(\t)时,BFS算法可用来解决单源最短路径问题。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此题考查的知识点是图的BFS算法。BFS是从根结点开始,沿着树的宽度遍历树的 结点,如果所有结点均被访问,则算法中止。当各边上的权值相等时,计算边数即可,所以选A。","type":"choice","options":{"B":"均互不相等","D":"不确定","A":"均相等","C":"不一定相等"},"answer":"A"},{"id":"learncoder_39_19162","stem":"用DFS,遍历一个无环有向图,并在DFS算法退栈返回时打印相应的顶点,则输出的顶点序列是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此题考查的知识点是图DFS的遍历及拓扑分类。在DFS算法退栈返回时,输出的 是出度为0的顶点,所以为逆拓扑有序,应选Ao","type":"choice","options":{"D":"不确定","A":"逆拓扑有序","C":"无序的","B":"拓扑有序"},"answer":"A"},{"id":"learncoder_39_19158","stem":"设无向图的顶点个数为S则该图最多有()条边。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此题考查的知识点是完全无向图的定义。具有n个结点的无向图边最多的图是无 向完全图,设n阶无向完全图的边数为叫则图中所有点的度数和为2m。而n阶无向完全图的 每个顶点都与其他顶点相邻,故图中每个点度数都为兀-1,进而所有点的度数和为n(n-1)因 此 2m=n(n-1)),故 m =n(n-1)/2。所以选 B。","type":"choice","options":{"B":"n(n-1)/2","D":"0","A":"n-1","C":"n((n+l))/2"},"answer":"B"},{"id":"learncoder_39_19159","stem":"一个n顶点的连通无向图,其边的个数至少为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"此题考查的知识点是无向图的性质。根据无向图的性质可知,对于一个有n个顶点 的连通无向图,只需要n-1条边即可成为连通无向图。","type":"choice","options":{"C":"n+1","A":"n-1","B":"n","D":"nlog2n"},"answer":"A"},{"id":"learncoder_39_467","stem":"<p>.编写函数,判断一个有向图是否存在回路。要求先给出算法思想,再写出相应代码。[南京航空航天大学2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的基本概念<br>  【参考答案】算法的基本设计思想如下:<br>  利用拓扑排序的思想,重复寻找一个入度为0的顶点,将该顶点从图中删除,并将该顶点及其所有的出边从图中删除(与该点相应的顶点的入度减1),最终若途中全为入度为1的点,则这些点至少组成一个回路。<br>  采用C语言描述算法,代码如下:<br>  /*有向图存储结构*/<br>  typedef struct{<br>  VertexType Vex[ Max VertexNum];/顶点表<br>  EdgeType Edge[ MaxVertexNum][ MaxVertexNum];//邻接矩阵,边表<br>  int vexnum,arcnum,indegree[ MaxVertexNum];//图中顶点数、弧数、入度数<br>  }Graph;<br>  /*拓扑排序判断是否存在回路*/<br>  bool topoSort(Graph G){<br>  stack&lt;int&gt;s;/初始化栈,存放入度为0的顶点<br>  for(int i=0;i&lt;G.vexnum;i++){<br>  int indegree=0;//入度<br>  if(G.indegree[i]==0)//将入度为0的顶点进栈<br>  s.push(G.Vex[i]);<br>  }<br>  int cnt=0;/输出顶点数计数器<br>  while(!s.empty()){/栈中含有入度为0的顶点时<br>  int vex=s.top()-1;<br>  printf(\"%d\",s.top());<br>  cnt++;<br>  s.pop();<br>  for(int i=0;i&lt;G.vexnum;i++)<br>  /将被顶点vex指向且入度减1后为0的顶点入栈<br>  if(G.Edge[ vex][i]==1&amp;&amp;!(--G.indegree[i]))<br>  s.push(G.Vex[i]);<br>  }<br>  }<br>  if(cnt&lt;G.vexnum)<br>  return false;//有向图中存在回路<br>  else<br>  return true;//有向图不存在回路<br>  }</p>","type":"short_answer","answer":"<p>算法的基本设计思想如下:<br>  利用拓扑排序的思想,重复寻找一个入度为0的顶点,将该顶点从图中删除,并将该顶点及其所有的出边从图中删除(与该点相应的顶点的入度减1),最终若途中全为入度为1的点,则这些点至少组成一个回路。<br>  采用C语言描述算法,代码如下:<br>  /*有向图存储结构*/<br>  typedef struct{<br>  VertexType Vex[ Max VertexNum];/顶点表<br>  EdgeType Edge[ MaxVertexNum][ MaxVertexNum];//邻接矩阵,边表<br>  int vexnum,arcnum,indegree[ MaxVertexNum];//图中顶点数、弧数、入度数<br>  }Graph;<br>  /*拓扑排序判断是否存在回路*/<br>  bool topoSort(Graph G){<br>  stack&lt;int&gt;s;/初始化栈,存放入度为0的顶点<br>  for(int i=0;i&lt;G.vexnum;i++){<br>  int indegree=0;//入度<br>  if(G.indegree[i]==0)//将入度为0的顶点进栈<br>  s.push(G.Vex[i]);<br>  }<br>  int cnt=0;/输出顶点数计数器<br>  while(!s.empty()){/栈中含有入度为0的顶点时<br>  int vex=s.top()-1;<br>  printf(\"%d\",s.top());<br>  cnt++;<br>  s.pop();<br>  for(int i=0;i&lt;G.vexnum;i++)<br>  /将被顶点vex指向且入度减1后为0的顶点入栈<br>  if(G.Edge[ vex][i]==1&amp;&amp;!(--G.indegree[i]))<br>  s.push(G.Vex[i]);<br>  }<br>  }<br>  if(cnt&lt;G.vexnum)<br>  return false;//有向图中存在回路<br>  else<br>  return true;//有向图不存在回路<br>  }&nbsp;&nbsp;<br></p>"},{"id":"learncoder_39_466","stem":"<p>编写函数,给有向无环图G的每一个顶点赋以一个整数编号,要求:若顶点v到顶点w之间有一条弧,则顶点v的编号小于顶点w的编号。先给出算法思想,再写出相应代码。[南京航空航天大学2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的基本概念<br>  【参考答案】算法的基本设计思想如下:<br>  使用深度优先搜索遍历有向图的各个节点,置vexNo数组初始化为0,当深度优先搜索遍历一个连通分量时,依次将各个节点的vexNo数组赋上一个节点的vexNo值加1,当深度优先搜索遍历结束时,即得到顶点v编号小于顶点w编号的vexNo数组。<br>  采用C语言描述算法,代码如下:<br>  #include &lt;stdio.h&gt;<br>  #include &lt;stdlib.h&gt;<br>  using namespace std;<br>  typedef char VertexType;//顶点的数据类型<br>  typedef int EdgeType;//边值数据类型<br>  /*有向图存储结构*/<br>  typedef struct{<br>  VertexType Vex[ max VertexNum];//顶点表<br>  EdgeType Edge[ max VertexNum][maxVertexNum];//邻接矩阵,边表<br>  int vexnum,arcnum,indegree[ maxVertexNum];∥图中顶点数、弧数、入度数<br>  }Graph;<br>  bool visited[ maxVertexNum];<br>  int vexNo[ maxVertexNum];<br>  for(int i=0;i&lt;G.vexnum;i++){}<br>  visited[i]=false;<br>  vexNo[i]=0;<br>  }<br>  int cnt=U;<br>  /*深度优先搜索*/<br>  void DFS(Graph G,int node){<br>  visited[ node]=true<br>  for(inti=0;i&lt;G.vexnum;i++){<br>  if(visited[i]==false &amp;&amp; G.Edge[ node][i]==1){<br>  vexNo[i]=vexNo[ node]+1;<br>  DFS(G,i);<br>  }<br>  }<br>  }<br>  void DFS_Traverse(Graph G,int node){<br>  visited[ node]=true;<br>  for(int i=0;i&lt;G.vexnum;i++){<br>  if(visited[i]==false){<br>  vexNo[i]++;<br>  dfs(G,i);<br>  }<br>  }<br>  }<br>  int main(){<br>  char a[5]={'A','B','C','D','E'};//顶点集<br>  int b[5][5]={{0,1,0,1,0},{0,0,1,1,0},{0,0,0,1,1},<br>  {0,0,0,0,1},{0,0,0,0,0}};//邻接矩阵边表<br>  Graph G;<br>  G.vexnum=5,G.arcnum=0;<br>  for(inti=0;i&lt;5;i++){<br>  G.Vex[i]=a[i];<br>  for(int j=0;j&lt;5;j++){<br>  G.Edge[i][j]=b[i][j];<br>  if(G.Edge[j][i]==1)//计算当前顶点的入度<br>  G.indegree[i]++;<br>  if(G.Edge[i][j]==1)//计算有向图的弧数<br>  G.arcnum++;<br>  }<br>  }<br>  for(int i=0;i&lt;G.vexnum;i++){<br>  DFS_Traverse(G,i);<br>  }<br>  for(inti=0;i&lt;G.vexnum;i++){<br>  printf(\"%d\",vexNo[i]);<br>  }<br>  return0;<br>  }</p>","type":"short_answer","answer":"<p>算法的基本设计思想如下:<br>  使用深度优先搜索遍历有向图的各个节点,置vexNo数组初始化为0,当深度优先搜索遍历一个连通分量时,依次将各个节点的vexNo数组赋上一个节点的vexNo值加1,当深度优先搜索遍历结束时,即得到顶点v编号小于顶点w编号的vexNo数组。<br>  采用C语言描述算法,代码如下:<br>  #include &lt;stdio.h&gt;<br>  #include &lt;stdlib.h&gt;<br>  using namespace std;<br>  typedef char VertexType;//顶点的数据类型<br>  typedef int EdgeType;//边值数据类型<br>  /*有向图存储结构*/<br>  typedef struct{<br>  VertexType Vex[ max VertexNum];//顶点表<br>  EdgeType Edge[ max VertexNum][maxVertexNum];//邻接矩阵,边表<br>  int vexnum,arcnum,indegree[ maxVertexNum];∥图中顶点数、弧数、入度数<br>  }Graph;<br>  bool visited[ maxVertexNum];<br>  int vexNo[ maxVertexNum];<br>  for(int i=0;i&lt;G.vexnum;i++){}<br>  visited[i]=false;<br>  vexNo[i]=0;<br>  }<br>  int cnt=U;<br>  /*深度优先搜索*/<br>  void DFS(Graph G,int node){<br>  visited[ node]=true<br>  for(inti=0;i&lt;G.vexnum;i++){<br>  if(visited[i]==false &amp;&amp; G.Edge[ node][i]==1){<br>  vexNo[i]=vexNo[ node]+1;<br>  DFS(G,i);<br>  }<br>  }<br>  }<br>  void DFS_Traverse(Graph G,int node){<br>  visited[ node]=true;<br>  for(int i=0;i&lt;G.vexnum;i++){<br>  if(visited[i]==false){<br>  vexNo[i]++;<br>  dfs(G,i);<br>  }<br>  }<br>  }<br>  int main(){<br>  char a[5]={'A','B','C','D','E'};//顶点集<br>  int b[5][5]={{0,1,0,1,0},{0,0,1,1,0},{0,0,0,1,1},<br>  {0,0,0,0,1},{0,0,0,0,0}};//邻接矩阵边表<br>  Graph G;<br>  G.vexnum=5,G.arcnum=0;<br>  for(inti=0;i&lt;5;i++){<br>  G.Vex[i]=a[i];<br>  for(int j=0;j&lt;5;j++){<br>  G.Edge[i][j]=b[i][j];<br>  if(G.Edge[j][i]==1)//计算当前顶点的入度<br>  G.indegree[i]++;<br>  if(G.Edge[i][j]==1)//计算有向图的弧数<br>  G.arcnum++;<br>  }<br>  }<br>  for(int i=0;i&lt;G.vexnum;i++){<br>  DFS_Traverse(G,i);<br>  }<br>  for(inti=0;i&lt;G.vexnum;i++){<br>  printf(\"%d\",vexNo[i]);<br>  }<br>  return0;<br>  }&nbsp;&nbsp;<br></p>"},{"id":"learncoder_39_465","stem":"<p>基于图的广度优先搜索策略,编写函数,判别以邻接表存储的有向图G中,是否存在由顶点Vi到顶点Vj的路径(i≠j要求先给出算法思想,再写出相应代码。[南京航空航天大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的遍历<br>  【参考答案】算法的基本设计思想如下:<br>  ①从图中某顶点v出发,在访问了v之后,依次访问v的各个未曾访问过的邻接顶点,然后分别从这些邻接顶点出发,依次访问它们的邻接顶点。<br>  ②使得先被访问的顶点的邻接顶点先于后被访问的顶点的邻接顶点被访问,直至图中所有已被访问的顶点的邻接顶点都被访问到。<br>  ③如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点。<br>  ④重复①②③过程,直至图中所有顶点都被访问到为止。<br>  采用C语言描述算法,代码如下:<br>  #include\"ALGraph.h:<br>  typedef int VertexType;<br>  /*邻接表存储结构*/<br>  typedef struct ArcNod{//边表节点<br>  int adjvex;//该弧所指向的顶点的位置<br>  struct ArcNode*nextarc;//指向下一条弧的指针<br>  {ArcNode;<br>  typedef struct VNode{//顶点表节点<br>  VertexType data;∥顶点信息<br>  ArcNode *firstarc;//指向第一条依附该顶点的指针<br>  {VNode,AdjList[ maxVertexNum];<br>  typedef struct Graph{<br>  int vexnum,arcnum;//图的顶点数和弧数<br>  {Graph;<br>  bool visited[ maxVertexNum];//访问标记数组<br>  /*广度优先搜索*/<br>  queue&lt;int&gt;q;∥初始化辅助队列Q<br>  void BFS(ALGraph&amp;G,int v){//从顶点v出发,广度优先遍历图G,借助一个辅助队列<br>  printf(\"-&gt;%c\",getvalue(G,v));//访问初始顶点v<br>  visited[v]=true;/标记已访问顶点v<br>  q.push(v);/顶点v入队<br>  while!q.empty()){<br>  q-pop();<br>  for(w=FirstNeighbor(G,v);w&gt;=0;w=NextNeighor(G,v,w)){<br>  //检测v所有邻接顶点<br>  if(! visited[w]){<br>  printf(\"-&gt;%c\",getvalue(G,w));//访问顶点w<br>  visited[w]=true;//标记已访问顶点w<br>  q.push(w);/顶点w入队<br>  }<br>  }<br>  }<br>  }<br>  void BFS_Traverse(ALGraph&amp; G){<br>  for(int i=0;i&lt;G.vexnum;i++)<br>  visited[i]=false;/访问标记数组初始化<br>  for(int i=0;i&lt;G.vexnum;i++){//从0号顶点开始遍历<br>  if(visited[i])<br>  BFS(G,i);<br>  }<br>  }</p>","type":"short_answer","answer":"<p>算法的基本设计思想如下:<br>  ①从图中某顶点v出发,在访问了v之后,依次访问v的各个未曾访问过的邻接顶点,然后分别从这些邻接顶点出发,依次访问它们的邻接顶点。<br>  ②使得先被访问的顶点的邻接顶点先于后被访问的顶点的邻接顶点被访问,直至图中所有已被访问的顶点的邻接顶点都被访问到。<br>  ③如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点。<br>  ④重复①②③过程,直至图中所有顶点都被访问到为止。<br>  采用C语言描述算法,代码如下:<br>  #include\"ALGraph.h:<br>  typedef int VertexType;<br>  /*邻接表存储结构*/<br>  typedef struct ArcNod{//边表节点<br>  int adjvex;//该弧所指向的顶点的位置<br>  struct ArcNode*nextarc;//指向下一条弧的指针<br>  {ArcNode;<br>  typedef struct VNode{//顶点表节点<br>  VertexType data;∥顶点信息<br>  ArcNode *firstarc;//指向第一条依附该顶点的指针<br>  {VNode,AdjList[ maxVertexNum];<br>  typedef struct Graph{<br>  int vexnum,arcnum;//图的顶点数和弧数<br>  {Graph;<br>  bool visited[ maxVertexNum];//访问标记数组<br>  /*广度优先搜索*/<br>  queue&lt;int&gt;q;∥初始化辅助队列Q<br>  void BFS(ALGraph&amp;G,int v){//从顶点v出发,广度优先遍历图G,借助一个辅助队列<br>  printf(\"-&gt;%c\",getvalue(G,v));//访问初始顶点v<br>  visited[v]=true;/标记已访问顶点v<br>  q.push(v);/顶点v入队<br>  while!q.empty()){<br>  q-pop();<br>  for(w=FirstNeighbor(G,v);w&gt;=0;w=NextNeighor(G,v,w)){<br>  //检测v所有邻接顶点<br>  if(! visited[w]){<br>  printf(\"-&gt;%c\",getvalue(G,w));//访问顶点w<br>  visited[w]=true;//标记已访问顶点w<br>  q.push(w);/顶点w入队<br>  }<br>  }<br>  }<br>  }<br>  void BFS_Traverse(ALGraph&amp; G){<br>  for(int i=0;i&lt;G.vexnum;i++)<br>  visited[i]=false;/访问标记数组初始化<br>  for(int i=0;i&lt;G.vexnum;i++){//从0号顶点开始遍历<br>  if(visited[i])<br>  BFS(G,i);<br>  }<br>  }&nbsp;&nbsp;<br></p>"},{"id":"learncoder_39_464","stem":"<p>.已知无向图G有n个顶点(用1,2,…,n表示),采用邻接表存储方式,试编写求图G的连通分量的算法。要求输出每一连通分量的顶点值。 [中国科学院大学2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的存储及基本操作<br>  【参考答案】采用C语言描述算法,代码如下:<br>  #include\"ALGraph.h\"<br>  /*求连通分量*/<br>  void connComponent(ALGraph&amp; G)1<br>  int count=NumberOfVertices(G);//用count保存图中顶点个数<br>  bool visited[maxSize];//使用布尔型辅助数组标记已访问顶点<br>  for(int i=0;i&lt;count;i++)<br>  visited[i]=flase;//初始化辅助数组visited<br>  intj=0;//变量j记录连通分量<br>  for(int i=0;i&lt;count;i++){/遍历无向图中每个顶点<br>  if(!visited[i])//访问未访问过的顶点<br>  printf(“输出第%d个连通分量的边:\\n\",++k);<br>  DFS(G,i,visited);//深度优先遍历一个连通分量<br>  }<br>  }<br>  }<br>  /*深度优先搜索*/<br>  void DFS(ALGraph&amp; G,int v)1<br>  int count=NumberOfVertices(G);/∥用count保存图中顶点个数<br>  bool visited[ maxSize];<br>  for(int i=0;i&lt;count;i++)<br>  visited[i]=flase;<br>  DFS_Visit(G,v,visited);<br>  printf(\"\\n\");<br>  }<br>  /*从顶点v出发,以深度优先的次序访问所有尚未访问过的邻接顶点,使用布尔型辅助数组visited对标记顶点是否被访问过*/<br>  void DFS_Visit(ALGraph&amp; G,int v;bool visited[]){<br>  printf(\"-&gt;%c\",getValue(G,v));//访问顶点v<br>  visited[v]=true;//标记顶点v<br>  int w=FirstNerighbor(G,v);//用w存放v的第一个邻接顶点<br>  while(w!=-1){//如果w存在<br>  if(!visited[w])<br>  DFS_Visit(G,w,visited);//如果w未访问,访问w<br>  w=NextNerighbor(G,v,w);//用w存放v的下一个邻接顶点<br>  }<br>  }</p>","type":"short_answer","answer":"<p>采用C语言描述算法,代码如下:<br>  #include\"ALGraph.h\"<br>  /*求连通分量*/<br>  void connComponent(ALGraph&amp; G)1<br>  int count=NumberOfVertices(G);//用count保存图中顶点个数<br>  bool visited[maxSize];//使用布尔型辅助数组标记已访问顶点<br>  for(int i=0;i&lt;count;i++)<br>  visited[i]=flase;//初始化辅助数组visited<br>  intj=0;//变量j记录连通分量<br>  for(int i=0;i&lt;count;i++){/遍历无向图中每个顶点<br>  if(!visited[i])//访问未访问过的顶点<br>  printf(“输出第%d个连通分量的边:\\n\",++k);<br>  DFS(G,i,visited);//深度优先遍历一个连通分量<br>  }<br>  }<br>  }<br>  /*深度优先搜索*/<br>  void DFS(ALGraph&amp; G,int v)1<br>  int count=NumberOfVertices(G);/∥用count保存图中顶点个数<br>  bool visited[ maxSize];<br>  for(int i=0;i&lt;count;i++)<br>  visited[i]=flase;<br>  DFS_Visit(G,v,visited);<br>  printf(\"\\n\");<br>  }<br>  /*从顶点v出发,以深度优先的次序访问所有尚未访问过的邻接顶点,使用布尔型辅助数组visited对标记顶点是否被访问过*/<br>  void DFS_Visit(ALGraph&amp; G,int v;bool visited[]){<br>  printf(\"-&gt;%c\",getValue(G,v));//访问顶点v<br>  visited[v]=true;//标记顶点v<br>  int w=FirstNerighbor(G,v);//用w存放v的第一个邻接顶点<br>  while(w!=-1){//如果w存在<br>  if(!visited[w])<br>  DFS_Visit(G,w,visited);//如果w未访问,访问w<br>  w=NextNerighbor(G,v,w);//用w存放v的下一个邻接顶点<br>  }<br>  }&nbsp;&nbsp;<br></p>"},{"id":"learncoder_39_463","stem":"<p>已知一个有n个顶点的有向图,采用邻接矩阵AdjMatriX[n][n]表示各顶点之间的邻接关系(其中,AdjMtrix[i][j]等于1,表示从顶点i到顶点j有一条弧;AdjMatrix[i][y]等于0,表示顶点i到顶点j之间没有弧),请编程实现该有向图的拓扑排序算法。[深圳大学2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的基本应用<br>  【参考答案】算法的基本设计思想如下:<br>  ①从有向图中选择一个没有前趋顶点并输出。<br>  ②从图中删除该顶点和其相关联的边。<br>  ③重复①和②直到当前的有向图为空或当前图中不存在无前驱的顶点为止。<br>  采用c语言描述算法,代码如下:<br>  /*拓扑排序算法*/<br>  void topoSort(GraphG){<br>  stack&lt;int&gt;s;//初始化栈,存放入度为0的顶点<br>  for(int i=0;i&lt;G.vexnum;i++){<br>  int indegree=0;//入度<br>  if(G.indegree[i]==0)<br>  s.push(G.Vex[i]);//将入度为0的顶点进栈<br>  }<br>  int cnt=0;//输出顶点数计数器<br>  while(!s.empty()){//栈中含有入度为0的顶点时<br>  int vex=s.top()-1;<br>  printf(\"%d\",s.top());<br>  cnt++;<br>  s.pop();<br>  for(inti=0;i&lt;G.vexnum;i++)1<br>  /将被顶点vex指向且入度减1后为0的顶点入栈<br>  if(G.Edge[ vex][i]==1&amp;&amp;!(--G.indegree[i]))<br>  s.push(G.Vex[i]);<br>  }<br>  }<br>  if(cnt&lt;G.vexnum)<br>  printf(“图中有环,拓扑排序失败”);<br>  }</p>","type":"short_answer","answer":"<p>算法的基本设计思想如下:<br>  ①从有向图中选择一个没有前趋顶点并输出。<br>  ②从图中删除该顶点和其相关联的边。<br>  ③重复①和②直到当前的有向图为空或当前图中不存在无前驱的顶点为止。<br>  采用c语言描述算法,代码如下:<br>  /*拓扑排序算法*/<br>  void topoSort(GraphG){<br>  stack&lt;int&gt;s;//初始化栈,存放入度为0的顶点<br>  for(int i=0;i&lt;G.vexnum;i++){<br>  int indegree=0;//入度<br>  if(G.indegree[i]==0)<br>  s.push(G.Vex[i]);//将入度为0的顶点进栈<br>  }<br>  int cnt=0;//输出顶点数计数器<br>  while(!s.empty()){//栈中含有入度为0的顶点时<br>  int vex=s.top()-1;<br>  printf(\"%d\",s.top());<br>  cnt++;<br>  s.pop();<br>  for(inti=0;i&lt;G.vexnum;i++)1<br>  /将被顶点vex指向且入度减1后为0的顶点入栈<br>  if(G.Edge[ vex][i]==1&amp;&amp;!(--G.indegree[i]))<br>  s.push(G.Vex[i]);<br>  }<br>  }<br>  if(cnt&lt;G.vexnum)<br>  printf(“图中有环,拓扑排序失败”);<br>  }&nbsp;&nbsp;<br></p>"},{"id":"learncoder_39_462","stem":"<p>有向图如下图所示,请完成以下问题。[中国计量大学2017年]<br>  (1)请画出邻接矩阵。<br>  (2)请画出邻接表。<br>  (3)请写出以A为起点的深度优先搜索结果。</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的存储及基本操作;图的遍历【参考答案】<br>(1)该有向图的邻接矩阵为<br>  <br><br>(2)该有向图的邻接表为<br>  <br>  (3)以A为起点的深度优先搜索结果有以下五种:<br>  ①A,C,B,E,D,F。<br>  ②A,C,F,D,E,B。<br>  ③A,C,F,E,D,B。<br>  ④A,D,C,B,E,F。<br>  ⑤A,D,C,F,E,B。<br>  第一种结果搜索过程如下:<br>  ①首先访问A,A为当前顶点。<br>  ②A有尚未访问过的邻接顶点C,D选择访问C,C为当前顶点。<br>  ③C有尚未访问过的邻接顶点B、F,选择访问B,B为当前顶点。<br>  ④B有尚未访问过的邻接顶点E,访问E,E为当前顶点。<br>  ⑤E有尚未访问过的邻接顶点D,访问D,D为当前顶点。<br>  ⑥D没有尚未访问过的邻接顶点,回溯到E,E为当前顶点。<br>  ⑦E没有尚未访问过的邻接顶点,回溯到B,B为当前顶点。<br>  ⑧B方没有尚未访问过的邻接顶点,回溯到C,C为当前顶点。<br>  ⑨C有尚未访问过的邻接顶点F,访问f,遍历结束。深度优先搜索结果为A,C,B,E,D,F。<br>  第二种结果搜索过程如下:<br>  ①首先访问为当前顶点。<br>  ②A有尚未访问过的邻接顶点C、D,选择访问C,C为当前顶点。<br>  ③c有尚未访问过的邻接顶点B,F,选择访问F,F为当前顶点。<br>  ④F有尚未访问过的邻接顶点D、E,选择访问D,D为当前顶点。<br>  ⑤D没有尚未访问过的邻接顶点,回溯到F,F为当前顶点。<br>  ⑥F有尚未访问过的邻接顶点E,访问E,E为当前顶点。<br>  ⑦E没有尚未访问过的邻接顶点,回溯到F,F为当前顶点。<br>  ⑧F没有尚未访问过的邻接顶点,回溯到C,C为当前顶点。<br>  ⑨C有尚未访问过的邻接顶点圮访问圮遍历结束。深度优先搜索结果为第三种结果搜索过程如下:<br>  ①首先访问为当前顶点。<br>  ②A有尚未访问过的邻接顶点C、D,选择访问C,C为当前顶点。<br>  ③C有尚未访问过的邻接顶点B、F,选择访问F,F为当前顶点。<br>  ④F有尚未访问过的邻接顶点D、E,选择访问E,E为当前顶点。<br>  ⑤E有尚未访问过的邻接顶点D,访问D,D为当前顶点。<br>  ⑥D有尚未访问过的邻接顶点,回溯到E,E为当前顶点。<br>  ⑦E没有尚未访问过的邻接顶点,回溯到F,F为当前顶点。<br>  ⑧F没有尚未访问过的邻接顶点,回溯到C,C为当前顶点。<br>  ⑨C有尚未访问过的邻接顶点B,访问B,遍历结束。深度优先搜索结果为A,C,F,E,D,B。<br>  第四种结果搜索过程如下:<br>  ①首先访问A,A为当前顶点。<br>  ②A有尚未访问过的邻接顶点C、D,选择访问D,D为当前顶点。<br>  ③D没有尚未访问过的邻接顶点,回溯到A,A为当前顶点。<br>  ④A有尚未访问过的邻接顶点C,访问C,C为当前顶点。<br>  ⑤C有尚未访问过的邻接顶点B、F,选择访问B,B为当前顶点。<br>  ⑥B有尚未访问过的邻接顶点E,访问E,E为当前顶点。<br>  ⑦E没有尚未访问过的邻接顶点,回溯到B,B为当前顶点。<br>  ③B没有尚未访问过的邻接顶点,回溯到C,C为当前顶点。<br>  OC有尚未访问过的邻接顶点F,访问F,遍历结束。深度优先搜索结果为A,D,C,B,E,F。<br>  第五种结果搜索过程如下:<br>  ①首先访问A,A为当前顶点。<br>  ②A有尚未访问过的邻接顶点C、D,选择访问D,D为当前顶点。<br>  ③D没有尚未访问过的邻接顶点,回溯到A,A为当前顶点。<br>  ④A有尚未访问过的邻接顶点C,访问C,C为当前顶点。<br>  ⑤C有尚未访问过的邻接顶点B、F,选择访问F,F为当前顶点。<br>  ⑥F有尚未访问过的邻接顶点E,访问E,E为当前顶点。<br>  ⑦E没有尚未访问过的邻接顶点,回溯到F,F为当前顶点。<br>  ③F没有尚未访问过的邻接顶点,回溯到C,C为当前顶点。<br>  OC有尚未访问过的邻接顶点B,访问B,遍历结束。深度优先搜索结果为A,D,C,F,E,B。</p>","type":"short_answer","answer":"<p>(1)该有向图的邻接矩阵为<br>  <br><br>(2)该有向图的邻接表为<br>  <br>  (3)以A为起点的深度优先搜索结果有以下五种:<br>  ①A,C,B,E,D,F。<br>  ②A,C,F,D,E,B。<br>  ③A,C,F,E,D,B。<br>  ④A,D,C,B,E,F。<br>  ⑤A,D,C,F,E,B。<br>  第一种结果搜索过程如下:<br>  ①首先访问A,A为当前顶点。<br>  ②A有尚未访问过的邻接顶点C,D选择访问C,C为当前顶点。<br>  ③C有尚未访问过的邻接顶点B、F,选择访问B,B为当前顶点。<br>  ④B有尚未访问过的邻接顶点E,访问E,E为当前顶点。<br>  ⑤E有尚未访问过的邻接顶点D,访问D,D为当前顶点。<br>  ⑥D没有尚未访问过的邻接顶点,回溯到E,E为当前顶点。<br>  ⑦E没有尚未访问过的邻接顶点,回溯到B,B为当前顶点。<br>  ⑧B方没有尚未访问过的邻接顶点,回溯到C,C为当前顶点。<br>  ⑨C有尚未访问过的邻接顶点F,访问f,遍历结束。深度优先搜索结果为A,C,B,E,D,F。<br>  第二种结果搜索过程如下:<br>  ①首先访问为当前顶点。<br>  ②A有尚未访问过的邻接顶点C、D,选择访问C,C为当前顶点。<br>  ③c有尚未访问过的邻接顶点B,F,选择访问F,F为当前顶点。<br>  ④F有尚未访问过的邻接顶点D、E,选择访问D,D为当前顶点。<br>  ⑤D没有尚未访问过的邻接顶点,回溯到F,F为当前顶点。<br>  ⑥F有尚未访问过的邻接顶点E,访问E,E为当前顶点。<br>  ⑦E没有尚未访问过的邻接顶点,回溯到F,F为当前顶点。<br>  ⑧F没有尚未访问过的邻接顶点,回溯到C,C为当前顶点。<br>  ⑨C有尚未访问过的邻接顶点圮访问圮遍历结束。深度优先搜索结果为第三种结果搜索过程如下:<br>  ①首先访问为当前顶点。<br>  ②A有尚未访问过的邻接顶点C、D,选择访问C,C为当前顶点。<br>  ③C有尚未访问过的邻接顶点B、F,选择访问F,F为当前顶点。<br>  ④F有尚未访问过的邻接顶点D、E,选择访问E,E为当前顶点。<br>  ⑤E有尚未访问过的邻接顶点D,访问D,D为当前顶点。<br>  ⑥D有尚未访问过的邻接顶点,回溯到E,E为当前顶点。<br>  ⑦E没有尚未访问过的邻接顶点,回溯到F,F为当前顶点。<br>  ⑧F没有尚未访问过的邻接顶点,回溯到C,C为当前顶点。<br>  ⑨C有尚未访问过的邻接顶点B,访问B,遍历结束。深度优先搜索结果为A,C,F,E,D,B。<br>  第四种结果搜索过程如下:<br>  ①首先访问A,A为当前顶点。<br>  ②A有尚未访问过的邻接顶点C、D,选择访问D,D为当前顶点。<br>  ③D没有尚未访问过的邻接顶点,回溯到A,A为当前顶点。<br>  ④A有尚未访问过的邻接顶点C,访问C,C为当前顶点。<br>  ⑤C有尚未访问过的邻接顶点B、F,选择访问B,B为当前顶点。<br>  ⑥B有尚未访问过的邻接顶点E,访问E,E为当前顶点。<br>  ⑦E没有尚未访问过的邻接顶点,回溯到B,B为当前顶点。<br>  ③B没有尚未访问过的邻接顶点,回溯到C,C为当前顶点。<br>  OC有尚未访问过的邻接顶点F,访问F,遍历结束。深度优先搜索结果为A,D,C,B,E,F。<br>  第五种结果搜索过程如下:<br>  ①首先访问A,A为当前顶点。<br>  ②A有尚未访问过的邻接顶点C、D,选择访问D,D为当前顶点。<br>  ③D没有尚未访问过的邻接顶点,回溯到A,A为当前顶点。<br>  ④A有尚未访问过的邻接顶点C,访问C,C为当前顶点。<br>  ⑤C有尚未访问过的邻接顶点B、F,选择访问F,F为当前顶点。<br>  ⑥F有尚未访问过的邻接顶点E,访问E,E为当前顶点。<br>  ⑦E没有尚未访问过的邻接顶点,回溯到F,F为当前顶点。<br>  ③F没有尚未访问过的邻接顶点,回溯到C,C为当前顶点。<br>  OC有尚未访问过的邻接顶点B,访问B,遍历结束。深度优先搜索结果为A,D,C,F,E,B。&nbsp;&nbsp;<br></p>"},{"id":"learncoder_39_461","stem":"<p>假设有如下图所示的有向图。[中国科学院大学2015年]<br>  (1)请给出从顶点A出发得到深度优先遍历的顶点序列。(遍历过程中存在多种选择时,请以字母表顺序访问)<br>  (2)请给出从顶点A出发得到广度优先遍历的顶点序列?(遍历过程中存在多种选择时,请以字母表顺序访问)</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的遍历<br>  【参考答案】(1)深度优先遍历序列为A,B,D,E,G,H,J,I,F,C。<br>  深度优先遍历过程如下:<br>  ①首先访问A为当前顶点。<br>  ②A有尚未访问过的邻接顶点B,C、D),以字母表顺序选择B,访问B,B为当前顶点。<br>  ③B有尚未访问过的邻接顶点D,访问D,D为当前顶点。<br>  ④D有尚未访问过的邻接顶点E、F、G,以字母表顺序选择E,访问E,E为当前顶点。<br>  ⑤E有尚未访问过的邻接顶点G,访问G,G为当前顶点。<br>  ⑥G有尚未访问过的邻接顶点H、I、J,以字母表顺序选择H,访问H,H为当前顶点。<br>  ⑦H有尚未访问过的邻接顶点J,访问J,J为当前顶点。<br>  ⑧J没有尚未访问过的邻接顶点,回溯到H,H为当前顶点。<br>  ⑨H没有尚未访问过的邻接顶点,回溯到G,G为当前顶点。<br>  ⑩G有尚未访问过的邻接顶点I,访问I,I为当前顶点。<br>  ?I没有尚未访问过的邻接顶点,回溯到G,G为当前顶点。<br>  ?G没有尚未访问过的邻接顶点,回溯到E,E为当前顶点。<br>  ?E没有尚未访问过的邻接顶点,回溯到D,D为当前顶点。<br>  ?D有尚未访问过的邻接顶点F,访问F,F为当前顶点。<br>  ?F没有尚未访问过的邻接顶点,回溯到D,D为当前顶点。<br>  ?D没有尚未访问过的邻接顶点,回溯到B,B为当前顶点。<br>  ?B没有尚未访问过的邻接顶点,回溯到A,A为当前顶点。<br>  ?A有尚未访问过的邻接顶点C,访问C,遍历结束。<br>   广度优先遍历序列为A,B,C,D,E,F,E,H,I,J<br>  广度优先遍历是一个逐层遍历的过程。该有向图从顶点A出发经过广度优先遍历可得到如下图所示的层次划分。<br>  </p>","type":"short_answer","answer":"<p>(1)深度优先遍历序列为A,B,D,E,G,H,J,I,F,C。<br>  深度优先遍历过程如下:<br>  ①首先访问A为当前顶点。<br>  ②A有尚未访问过的邻接顶点B,C、D),以字母表顺序选择B,访问B,B为当前顶点。<br>  ③B有尚未访问过的邻接顶点D,访问D,D为当前顶点。<br>  ④D有尚未访问过的邻接顶点E、F、G,以字母表顺序选择E,访问E,E为当前顶点。<br>  ⑤E有尚未访问过的邻接顶点G,访问G,G为当前顶点。<br>  ⑥G有尚未访问过的邻接顶点H、I、J,以字母表顺序选择H,访问H,H为当前顶点。<br>  ⑦H有尚未访问过的邻接顶点J,访问J,J为当前顶点。<br>  ⑧J没有尚未访问过的邻接顶点,回溯到H,H为当前顶点。<br>  ⑨H没有尚未访问过的邻接顶点,回溯到G,G为当前顶点。<br>  ⑩G有尚未访问过的邻接顶点I,访问I,I为当前顶点。<br>  ?I没有尚未访问过的邻接顶点,回溯到G,G为当前顶点。<br>  ?G没有尚未访问过的邻接顶点,回溯到E,E为当前顶点。<br>  ?E没有尚未访问过的邻接顶点,回溯到D,D为当前顶点。<br>  ?D有尚未访问过的邻接顶点F,访问F,F为当前顶点。<br>  ?F没有尚未访问过的邻接顶点,回溯到D,D为当前顶点。<br>  ?D没有尚未访问过的邻接顶点,回溯到B,B为当前顶点。<br>  ?B没有尚未访问过的邻接顶点,回溯到A,A为当前顶点。<br>  ?A有尚未访问过的邻接顶点C,访问C,遍历结束。<br>   广度优先遍历序列为A,B,C,D,E,F,E,H,I,J<br>  广度优先遍历是一个逐层遍历的过程。该有向图从顶点A出发经过广度优先遍历可得到如下图所示的层次划分。<br>  &nbsp;&nbsp;<br></p>"},{"id":"learncoder_39_460","stem":"<p>已知带权图如下所示,用Krnskal算法产生最小生成树,并说明算法思想。[南京航空航天大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的基本应用<br>  【参考答案】利用Kruskal算法,对于任一有n个顶点的带权连通图G={V,E},构造最小生成树,算法思想如下:<br>  ①构造一个只有〃个顶点但是不含有任何边的图T={V,?},其中每一个顶点都是一个连通分量。<br>  ②不断从E中选取出权值最小的一条边(如果有多条权值最小的边,任意选择一条边),如果该边的两个端顶点来自不同的连通分量,则将该边加入到T中。<br>  ③重复步骤②,直到所有顶点都在同一个连通分量中为止。<br>  该带权图构造最小生成树的过程如下图所示。<br><br>  用Kruskal算法产生最小生成树如图(f)所示。</p>","type":"short_answer","answer":"<p>利用Kruskal算法,对于任一有n个顶点的带权连通图G={V,E},构造最小生成树,算法思想如下:<br>  ①构造一个只有〃个顶点但是不含有任何边的图T={V,?},其中每一个顶点都是一个连通分量。<br>  ②不断从E中选取出权值最小的一条边(如果有多条权值最小的边,任意选择一条边),如果该边的两个端顶点来自不同的连通分量,则将该边加入到T中。<br>  ③重复步骤②,直到所有顶点都在同一个连通分量中为止。<br>  该带权图构造最小生成树的过程如下图所示。<br><br>  用Kruskal算法产生最小生成树如图(f)所示。&nbsp;&nbsp;<br></p>"},{"id":"learncoder_39_459","stem":"<p>25.带权图(权值非负,表示边连接的两顶点间的距离)的最短路径问题是找出从初始顶点到目标顶点之间的一条最短路径。假设从初始顶点到目标顶点之间存在路径,现有一种解决该问题的方法:[全国联考2009年]<br>  ①设最短路径初始时仅包含初始顶点,令当前顶点u为初始顶点;<br>  ②选择离最近且尚未在最短路径中的一个顶点v,加入到最短路径中,修改当前顶点u=v;<br>  ③重复步骤②,直到u是目标顶点时为止。<br>  请问上述方法能否求得最短路径?若该方法可行,请证明之;否则,请举例说明。</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的基本应用<br>  【参考答案】上述方法不可行,该方法不一定能求出最短路径,使用该方法求出的路径也不一定是最短路径。举例说明如下。<br>  举例一:如下图所示,顶点1为初始顶点,顶点3为目标顶点。令当前顶点u为初始顶点1,选择离顶点1最近且尚未在最短路径中的顶点2,加入到最短路径中,修改当前顶点u为顶点2,重复步骤②时发现,没有离顶点2最近且尚未在最短路径中的顶点,因此无法求出从初始顶点1到目标顶点3的最短路径。<br>  <br>  举例二:如下图所示,顶点1为初始顶点,顶点4为目标顶点。在没有使用上述方法求最短路径之前,根据下图可知最短路径为&lt;1,4&gt;,最短路径长度为2。令当前顶点u为初始顶点1,选择离顶点1最近且尚未在最短路径中的顶点2,加入到最短路径中,修改当前顶点u为顶点2;选择离顶点2最近且尚未在最短路径中的顶点3,加入到最短路径中,修改当前顶点u为顶点3;选择离顶点3最近且尚未在最短路径中的顶点4,加入到最短路径中,修改当前顶点u为顶点4,此时u是目标顶点,因此得出使用该方法求出的最短路径是&lt;1,2,3,4&gt;,最短路径长度为3。比较可知,使用该方法求出的路径&lt;1,2,3,4&gt;不是最短路径。</p>","type":"short_answer","answer":"<p>上述方法不可行,该方法不一定能求出最短路径,使用该方法求出的路径也不一定是最短路径。举例说明如下。<br>  举例一:如下图所示,顶点1为初始顶点,顶点3为目标顶点。令当前顶点u为初始顶点1,选择离顶点1最近且尚未在最短路径中的顶点2,加入到最短路径中,修改当前顶点u为顶点2,重复步骤②时发现,没有离顶点2最近且尚未在最短路径中的顶点,因此无法求出从初始顶点1到目标顶点3的最短路径。<br>  <br>  举例二:如下图所示,顶点1为初始顶点,顶点4为目标顶点。在没有使用上述方法求最短路径之前,根据下图可知最短路径为&lt;1,4&gt;,最短路径长度为2。令当前顶点u为初始顶点1,选择离顶点1最近且尚未在最短路径中的顶点2,加入到最短路径中,修改当前顶点u为顶点2;选择离顶点2最近且尚未在最短路径中的顶点3,加入到最短路径中,修改当前顶点u为顶点3;选择离顶点3最近且尚未在最短路径中的顶点4,加入到最短路径中,修改当前顶点u为顶点4,此时u是目标顶点,因此得出使用该方法求出的最短路径是&lt;1,2,3,4&gt;,最短路径长度为3。比较可知,使用该方法求出的路径&lt;1,2,3,4&gt;不是最短路径。&nbsp;&nbsp;<br></p>"},{"id":"learncoder_39_458","stem":"<p>已知有6个顶点(顶点编号为0~5)的有向带权图G,其邻接矩阵A为上三角矩阵,按<br>  行为主序(行优先)保存在如下图所示的一维数组中。<br>  <br>  要求:[全国联考2011年]<br>  (1)写出图6的邻接矩阵A。<br>  (2)画出有向带权图G。<br>  (3)求图G的关键路径,并计算该关键路径的长度。</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的存储及基本操作;图的基本应用<br>  【参考答案】(1)有6个顶点的有向带权图C的邻接矩阵是一个6x6的矩阵,结合上三角矩阵的特点,主对角线上的元素全部为〇,第1行到第5行主对角线上方的元素个数分别为5、<br>  4、3、2、1,因此对于一维数组中的元素的所属行可以划分如下图所示。<br>  将一维数组中各行元素填入上三角矩阵A的主对角线右边的行上,得出C的邻接矩阵为<br>  <br>  (2)根据邻接矩阵A可以画出有向带权图如下图所示。<br>  <br>  (3)从源点0到各个顶点的最早可能开始时间计算如下:<br>  Ve[0]=0<br>  Ve[1]=Ve[e[0]+a0→1=0+4=4<br>  Ve[2]=max|Ve[0]+a0→2,Ve[1]+a1→3}=max(0+6,4+4)=9<br>  Ve[3]=Ve[2]+a2→3=9+4=13<br>  Ve[4]=Ve[2]+a2→4=9+3=12<br>  Ve[5]=max{Ve[3]+a3→5,Ve[4]+a4→5}=max(13+3,12+3)=16<br>  从源点0到各个顶点的最迟允许开始时间计算如下:<br>  V1[5]=Ve[5]=16<br>  V1[4]=V1[5]-a4→5=16-3=13<br>  V1[3]=V1[5]5-a3→5=16-3=13<br>  V1[2]=min{V1[3]3-a2→3,V1[4]-a2→4}=min(13-4,13-3)=9<br>  V1[1]=V1[2]-a1→2=9-5=4<br>  V1[0]=min{V1[l]-a0→1,V1[2]-a0→2}=min(4-4,9-6)=0<br>  Ve[i]V1[i]如下表所示。<br>  <br>  各个活动最早可能开始时间计算如下:<br>  Ae[a0→1]=Ae[a0→2]=Ve[0]=0<br>  Ae[a1→2]=Ve[1]=4<br>  Ae[a2→3]=Ae[a2→4J=Ve[2]=9<br>  Ae[a3→5]=Ve[3]=13<br>  Ae[a4→5]=Ve[4]=12<br>  Al[a4→5]=V1[5]-a4→5=16-3=13<br>  Al[a3→5]=Vl[5]-a3→5=16-3=13<br>  Al[a2→4]=Vl[4]-a2→4=13-3=10<br>  Al[a2→3]=Vl[3]-a2→3=13-4=9<br>  Al[a1→2]=Vl[2]-a1→2=9-5=4<br>  Al[a0→2]=Vl[2]-a0→2=9-6=3<br>  Al[a0→1]=V1[1]-a0→1=4-4=0<br>  Al[k]-Ae[k]表示活动ak的最早可能开始时间和最迟允许开始时间的时间余量。Ae[k]<br>  和Al[k]及它们之间的时间余量A1[k]-Ae[k]如下表所示。<br>  <br>  其中,A1[k]-Ae[k]=0表示活动ak是没有时间余量的关键路径。由上表可知,关键路径是a0→1,a1→2,a2→3,a3→5。该有向带权图G的关键路径如下图所示,其中,关键路径为实线箭头所标识的4个活动组成。<br>  <br>  由上图可知,关键路径长度为4+5+4+3=16。</p>","type":"short_answer","answer":"<p><span></span>(1)有6个顶点的有向带权图C的邻接矩阵是一个6x6的矩阵,结合上三角矩阵的特点,主对角线上的元素全部为〇,第1行到第5行主对角线上方的元素个数分别为5、<br></p>  4、3、2、1,因此对于一维数组中的元素的所属行可以划分如下图所示。<br>  将一维数组中各行元素填入上三角矩阵A的主对角线右边的行上,得出C的邻接矩阵为<br>  <br>  (2)根据邻接矩阵A可以画出有向带权图如下图所示。<br>  <br>  (3)从源点0到各个顶点的最早可能开始时间计算如下:<br>  Ve[0]=0<br>  Ve[1]=Ve[e[0]+a0→1=0+4=4<br>  Ve[2]=max|Ve[0]+a0→2,Ve[1]+a1→3}=max(0+6,4+4)=9<br>  Ve[3]=Ve[2]+a2→3=9+4=13<br>  Ve[4]=Ve[2]+a2→4=9+3=12<br>  Ve[5]=max{Ve[3]+a3→5,Ve[4]+a4→5}=max(13+3,12+3)=16<br>  从源点0到各个顶点的最迟允许开始时间计算如下:<br>  V1[5]=Ve[5]=16<br>  V1[4]=V1[5]-a4→5=16-3=13<br>  V1[3]=V1[5]5-a3→5=16-3=13<br>  V1[2]=min{V1[3]3-a2→3,V1[4]-a2→4}=min(13-4,13-3)=9<br>  V1[1]=V1[2]-a1→2=9-5=4<br>  V1[0]=min{V1[l]-a0→1,V1[2]-a0→2}=min(4-4,9-6)=0<br>  Ve[i]V1[i]如下表所示。<br>  <br>  各个活动最早可能开始时间计算如下:<br>  Ae[a0→1]=Ae[a0→2]=Ve[0]=0<br>  Ae[a1→2]=Ve[1]=4<br>  Ae[a2→3]=Ae[a2→4J=Ve[2]=9<br>  Ae[a3→5]=Ve[3]=13<br>  Ae[a4→5]=Ve[4]=12<br>  Al[a4→5]=V1[5]-a4→5=16-3=13<br>  Al[a3→5]=Vl[5]-a3→5=16-3=13<br>  Al[a2→4]=Vl[4]-a2→4=13-3=10<br>  Al[a2→3]=Vl[3]-a2→3=13-4=9<br>  Al[a1→2]=Vl[2]-a1→2=9-5=4<br>  Al[a0→2]=Vl[2]-a0→2=9-6=3<br>  Al[a0→1]=V1[1]-a0→1=4-4=0<br>  Al[k]-Ae[k]表示活动ak的最早可能开始时间和最迟允许开始时间的时间余量。Ae[k]<br>  和Al[k]及它们之间的时间余量A1[k]-Ae[k]如下表所示。<br>  <br>  其中,A1[k]-Ae[k]=0表示活动ak是没有时间余量的关键路径。由上表可知,关键路径是a0→1,a1→2,a2→3,a3→5。该有向带权图G的关键路径如下图所示,其中,关键路径为实线箭头所标识的4个活动组成。<br>  <br>  由上图可知,关键路径长度为4+5+4+3=16。"},{"id":"learncoder_39_457","stem":"<p>已知含有5个顶点的图G如下图所示。[全国联考2015年]<br>  <br>  请回答下列问题:<br>  (1)写出图G的邻接矩阵A(行、列下标从0开始)。<br>  (2)求A2,矩阵A2中位于0行3列元素值的含义是什么?<br>  (3)若已知具有n(n≥2)个顶点的图的邻接矩阵为B,'则Bm(2≤m≤n)中非零元素的含义是什么?</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的存储及基本操作<br>  【参考答案】(1)<br>  (2)<br>  (3)矩阵A2中位于0行3列元素值的含义是顶点0到顶点3长度为2的路径有3条。<br>   Bm中第〖行第y’列的非零元素的含义是该图中顶点〖到顶点y长度为w的路径数量。</p>","type":"short_answer","answer":"<p>(1)<br>(2)矩阵A2中位于0行3列元素值的含义是顶点0到顶点3长度为2的路径有3条。<br>(3) Bm中第〖行第y’列的非零元素的含义是该图中顶点〖到顶点y长度为w的路径数量。&nbsp;&nbsp;<br> <br></p>"},{"id":"learncoder_39_456","stem":"<p>使用Prim(普里姆)算法求带权连通图的最小(代价)生成树(MST)。请回答下列问题:[全国联考2017年]<br>  (1)对下列图G,从顶点A开始求C的MST,依次给出按算法选出的边。<br>  (2)图G的MST是唯一的吗?<br>  (3)对任意的带权连通图,满足什么条件时,其MST是唯一的?</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p>图——图的基本应用<br>  【参考答案】(1)Prim算法是将起始节点当作一棵树,依次在与该树相连的所有未选中边中选取权值最小的边,再将这条边与这个节点加入这棵树,直到所有的节点都在同一棵树中。使用Prim算法求图G的MST过程如下图所示。<br>  <br>  ①把起始节点A当作一个连通图,该连通图之外的节点与该连通图相连的所有未选中边为候选边,则候选边为(A,B)、(A,D)、(A,E),选取权值最小的边(A,D),再将这条边与节点D加入连通图,如图(a)所示。<br>  ②此时连通图中包含节点A和D,候选边为(A,B)、((A,E)、(D,C)、(E,C),选取权值最小的边(D,E),再将这条边与节点E加入连通图,如图(b)所示。<br>  ③此时连通图中包含节点A,D和E候选边(A,B)、(D,C)、(E,C),选取权值最小的边(E,C),再将这条边与节点C加入连通图,如图(c)所示。<br>  ④此时连通图中包含节点A,D,E和C,候选边为(A,B)、(C,B),选取权值最小的边((C,B),再将这条边与节点B加入连通图,如图(d)所示。<br>  因此,按算法选出的边依次为(A,D)、(D,E)、(E,C)、(C,B)。<br>  (2)使用Prim算法得到的图G的MST是唯一的。<br>  因此由题(1)中的构造MST过程可知,每次选取的最小权值的边都是唯一的,因此图G的MST是唯一的。<br>  (3)在带权连通图中,当任意一个环中所包含的边的权值均不相同时,其MST是唯一的。</p>","type":"short_answer","answer":"<p>1)Prim算法是将起始节点当作一棵树,依次在与该树相连的所有未选中边中选取权值最小的边,再将这条边与这个节点加入这棵树,直到所有的节点都在同一棵树中。使用Prim算法求图G的MST过程如下图所示。<br>  <br>  ①把起始节点A当作一个连通图,该连通图之外的节点与该连通图相连的所有未选中边为候选边,则候选边为(A,B)、(A,D)、(A,E),选取权值最小的边(A,D),再将这条边与节点D加入连通图,如图(a)所示。<br>  ②此时连通图中包含节点A和D,候选边为(A,B)、((A,E)、(D,C)、(E,C),选取权值最小的边(D,E),再将这条边与节点E加入连通图,如图(b)所示。<br>  ③此时连通图中包含节点A,D和E候选边(A,B)、(D,C)、(E,C),选取权值最小的边(E,C),再将这条边与节点C加入连通图,如图(c)所示。<br>  ④此时连通图中包含节点A,D,E和C,候选边为(A,B)、(C,B),选取权值最小的边((C,B),再将这条边与节点B加入连通图,如图(d)所示。<br>  因此,按算法选出的边依次为(A,D)、(D,E)、(E,C)、(C,B)。<br>  (2)使用Prim算法得到的图G的MST是唯一的。<br>  因此由题(1)中的构造MST过程可知,每次选取的最小权值的边都是唯一的,因此图G的MST是唯一的。<br>  (3)在带权连通图中,当任意一个环中所包含的边的权值均不相同时,其MST是唯一的。&nbsp;&nbsp;<br></p>"},{"id":"learncoder_39_455","stem":"<p>设有6个顶点的有向图,该图至少应有( )条边才能确保是一个连通图。[杭州师范大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本概念<br>  【解析】有6个顶点的有向图,至少有5条边就可以形成一个连通图。但是本题的关键词是“确保”,需要考虑最坏的情况,即其中5个顶点两两相连,此时只需要再加一条边即可确保6个顶点一定连通。5个顶点的全连通图需要的边数为n(n-1)/2=10,再加一条边与另一个顶点相连接,总共11条边。</p>","type":"choice","options":{"A":"11","B":"5","C":"8","D":"6"},"answer":"A"},{"id":"learncoder_39_454","stem":"<p>如果G是一个共有n个顶点的有向完全图,则该图中共有( )条弧。[杭州师范大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本概念<br>  【解析】在有n个顶点的有向图中,如果每两个顶点之间都有方向相反的两条有向边,则这样的有向图称为有向完全图,共有n(n-1)条弧。在有n个顶点的无向图中,如果每两个顶点之间都有一条边,则这样的无向图称为无向完全图,共有n(n-1)/2条弧。</p>","type":"choice","options":{"A":"n(n-l)/2","B":"n(n-l)","C":"n2-l","D":"(n2-l)/2"},"answer":"B"},{"id":"learncoder_39_453","stem":"<p>无向图G=(V,E),其中V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),(b,e),(c,f/),<br>  (f,d,(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是( )。[中国科学院大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的遍历<br>  【解析】由题意可画出该无向图G如下图所示。<br>  <br>  深度优先遍历是一个不断探查和回溯的过程。A选项,由a出发,依次访问b和e,由于e有邻接顶点d且尚未访问过,因此接下来访问d而不是c。B选项,由a出发,依次访问c和f,由于f有邻接顶点d且尚未访问过,因此接下来访问d而不是e。C选项,由a出发,依次访问e和6,由于6没有邻接顶点且尚未访问过,因此回溯到e;由于e有邻接顶点d且尚未访问过,因此接下来访问d而不是c。D选项,由a出发,依次访问e,d,f和c,由于c没有邻接顶点且尚未访问过,因此回溯到f;由于f有邻接顶点且尚未访问过,因此回溯到d;由于d没有邻接顶点且尚未访问过,因此回溯到e;由于e有邻接顶点b且尚未访问过,于是最后访问b,因此得到的顶点序列为a,e,d,f,C,b。</p>","type":"choice","options":{"A":"a,e,d,f,c,b","B":".a,b,e,c,d,f","C":"a,e,b,c,f,d","D":"a,c,f,e,b,d"},"answer":"A"},{"id":"learncoder_39_452","stem":"<p>对下图进行拓扑排序,可以得到不同的拓扑序列的个数是( )。[全国联考2010年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本应用<br>  【解析】在该图中,只有顶点a入度为0,删除顶点a和其相关联的边,如下图所示。<br>  <br>  由上图可知,顶点6和顶点e入度都为0,如果先删除顶点6和其相关联的边,如下图所示。<br>  <br>  由上图可知,顶点c和顶点e入度都为0。如果先删除顶点c和其相关联的边,顶点e入度为0,删除顶点e和其相关联的边,删除顶点d得到的拓扑序列是a,b,c,e,d;如果先删除顶点e和其相关联的边,顶点c入度为0,删除顶点c和其相关联的边,删除顶点辱到的拓扑序列是a,b,e,c,d。<br>  如果先删除顶点e和其相关联的边,如下图所示。<br>  <br>  由上图可知,顶点b入度为0,删除顶点b和其相关联的边,顶点C入度为0,删除顶点C和其相关联的边,删除顶点d得到的拓扑序列是a,e,b,C,d。<br>  综上所述,可以得到3种不同的拓扑序列。</p>","type":"choice","options":{"A":"2","B":"1","C":"3","D":"4"},"answer":"C"},{"id":"learncoder_39_451","stem":"<p>若无向图G=(V,E)中含有7个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是( )。[全国联考2010年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本概念<br>  【解析】要保证无向图G在任何情况下都是连通的,表示G中的边经过任意变动,G始终保持着连通。首先需要C中任意6个节点构成完全连通子图,再添加一条边将第7个节点与该子图连接,因此至少需要的边数是C3?+l=16。</p>","type":"choice","options":{"A":"21","B":"16","C":"6","D":"15"},"answer":"B"},{"id":"learncoder_39_450","stem":"<p>下列关于无向连通图特性的叙述中,正确的是( )。[全国联考2009年]<br>  I.所有顶点的度之和为偶数II.边数大于顶点个数减1<br>  III至少有一个顶点的度为1</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本概念<br>  【解析】无向连通图中,每条边连接两个顶点,则所有顶点的度之和为所有边数的两倍,因此所有顶点的度之和为偶数。一个无向连通图的生成树是它的极小连通子图,如果图中含有n个顶点,则其生成树由n-1条边构成。无向连通图中不存在度为1的顶点。</p>","type":"choice","options":{"A":"只有II","B":"I和III","C":"只有I","D":"I和II"},"answer":"C"},{"id":"learncoder_39_449","stem":"<p>下列关于图的叙述中,正确的是( )。.[全国联考2012年]<br>  I.回路是简单路径<br>  II..存储稀疏图,用邻接矩阵比邻接表更省空间<br>  III.若有向图中存在拓扑序列,则该图不存在回路</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本概念;图的存储及基本操作;图的基本应用<br>  【解析】路径上各个顶点均不互相重复,则称这样的路径为简单路径。如果路径上第一个顶点与最后一个顶点重合,则称这样的路径为回路。由此可见,回路不是简单路径。<br>  稀疏图是指边数远远小于顶点数的平方的图,使用邻接表可以获得较高的空间利用率。稀疏图采用邻接表的空间复杂度为0(n+e),采用邻接矩阵的空间复杂度为0(n?),此用邻接表比邻接矩阵更省空间。<br>  如果有向图存在回路,那么该有向图不存在拓扑序列,因此如果有向图中存在拓扑序列,则该图不存在回路。</p>","type":"choice","options":{"A":"仅I","B":"仅I、II","C":"仅I、III","D":"仅III"},"answer":"D"},{"id":"learncoder_39_448","stem":"<p>下列关于最小生成树的叙述中,正确的是( )。.[全国联考2012年]<br>  I.最小生成树的代价唯一<br>  II.所有权值最小的边一定会出现在所有最小生成树中<br>  III.使用普里姆(Prim)算法从不同顶点开始得到的最小生成树一定相同<br>  IV.使用普里姆算法和克鲁斯卡尔(Kruskal)算法得到的最小生成树总不相同</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本应用<br>  【解析】由于连通图中可能会存在权值相同的边,因此最小生成树是不唯一的,但是构造最小生成树的代价是唯一的。在任一带权图中,权值最小的边一定会被至少一棵最小生成树采用,权值次小的边也会被至少一棵最小生成树采用,但是所有权值最小的边不一定会被全部最小生成树采用。使用普里姆算法从不同顶点开始得到的最小生成树可能不相同,比如在连通图中存在n个顶点构成环,n-1条边权值相等,则从不同顶点开始得到的最小生成树有n-1种。使用普里姆算法和克鲁斯卡尔算法得到的最小生成树可能相同,比如连通图的各条边的权值都各不相同时,最小生成树是相同的。</p>","type":"choice","options":{"A":"仅II、IV、","B":"仅I、II","C":"仅I","D":"仅II"},"answer":"C"},{"id":"learncoder_39_447","stem":"<p>对如下有向带权图,若采用迪杰斯特拉(Dijkstra)算法求从源点a到其他各顶点的最短路径,则得到的第一条最短路径的目标顶点是b,第二条最短路径的目标顶点是c,后续得到的其余各最短路径的目标顶点依次是( )。.[全国联考2012年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本应用<br>  【解析】根据迪杰斯特拉(Dijkstra)算法,可以得到以下过程:从a出发,与其直接相邻的是b(2)、C(5),因此可以得到第一条最短路径的目标顶点是b。从&lt;a,6&gt;出发,与其相邻的是c(3)、d(5),因此可以得到第二条最短路径的目标顶点是c。从&lt;a,b,c&gt;出发,与其相邻的是d(6)、e(6)、f(4),因此可以得到第三条最短路径的目标顶点是f。从&lt;a,b,c,f&gt;出发,与其相邻的是d(9)、e(5),因此可以得到第四条最短路径的目标顶点是d,第五条最短路径的目标顶点是e。因此最短路径的目标顶点的顺序依次为b,c,f,d,e,即选项C正确。</p>","type":"choice","options":{"A":"f,d,e","B":"d,e,f","C":"f,e,d","D":"e,d,f"},"answer":"A"},{"id":"learncoder_39_446","stem":"<p>若用邻接矩阵存储有向图,矩阵中主对角线以下的元素均为0,则关于该图拓扑序列的结论是( )。.[全国联考2012年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本应用<br>  【解析】有向图使用邻接矩阵存储时,矩阵中主对角线以下的元素均为0,表示顶点a到顶点b(a&gt;b)可能有边(矩阵中相应位置为非0元素),也可能无边(矩阵中相应位置为0),而顶点b到顶点a—定无边,因此该有向图为无环图,一定存在拓扑序列,但拓扑序列不唯一</p>","type":"choice","options":{"A":"存在,可能不唯一","B":"无法确定是否存在","C":"存在,且唯一","D":"存在,且不唯一"},"answer":"A"},{"id":"learncoder_39_445","stem":"<p>对有n个节点、e条边且使用邻接表存储的有向图进行广度优先遍历,其算法时间复杂度是( )。[全国联考2012年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的遍历<br>  【解析】在有向图的广度优先遍历中,需要借助队列来实现,每个顶点进队列一次且仅一次,时间复杂度为O(n),每条边至少访问一次,时间复杂度为O(e),因此算法总的时间复杂度为O(n+e).</p>","type":"choice","options":{"A":"0(n+e)","B":"0(n)","C":"0(e)","D":"O(n*e)"},"answer":"A"},{"id":"learncoder_39_444","stem":"<p>下图所示AOE网表示一项包含8个活动的工程。通过同时加快若干活动的进度可以缩短整个工程的工期。下列选项中,加快其进度就可以缩短工程工期的是( )。[全国联考2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本应用<br>  【解析】整个工程只有一个开始点和一个完成点,其中入度为0的顶点为开始点,出度为0的点为完成点。该工程中,顶点1为开始点,顶点6为完成点。整个工程的工期取决于从开始点到完成点的最长路径长度,这条最长路径叫作关键路径。在全部路径中,最长的路径长度为27,关键路径为(b,f,h)、(b,d,c,g)和(b,d,e,h)。只有所有关键路径上的活动时间同时减少,才能缩短工期,即选项中的路径必须涵盖在所有关键路径之中。选项A不涵盖关键路径(b,f,h)选项B不涵盖关键路径(b,f,h),选项C涵盖全部关键路径;选项D不涵盖关键路径(b,d,c,g)和(b,d,e,h)</p>","type":"choice","options":{"A":"f和h","B":"f和d","C":"d和e","D":"c和e"},"answer":"B"},{"id":"learncoder_39_443","stem":"<p>若对如下无向图进行遍历,则下列选项中,不是广度优先遍历序列的是( )。[全国联考2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的遍历<br>  【解析】广度优先遍历是一个逐层遍历的过程。依据起始顶点的不同,可将该无向图等效变换为如下图所示的无向图表示。<br><br>  <br>  根据图(a)可知选项A中的遍历序列是广度优先遍历序列;根据图(b)可知选项B中的遍历序列是广度优先遍历序列;根据图(c)可知选项C中的遍历序列是广度优先遍历序列;根据图(d)可知选项D中的遍历序列不是广度优先遍历序列,而是深度遍历序列。</p>","type":"choice","options":{"A":"e,a,f,g,b,h,c,d","B":"h,c,a,b,d,e,g,f ","C":"d,b,c,a,h,e,f,g","D":"a,b,c,d,h,e,f,g"},"answer":"D"},{"id":"learncoder_39_442","stem":"<p>设图的邻接矩阵A如下所示。各顶点的度依次是( )。[全国联考2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的存储及基本操作<br>  【解析】根据图的邻接矩阵的性质可知,如果该图为无向图,则其邻接矩阵为对称矩阵。矩阵A不是对称矩阵,说明该图是有向图,各顶点的度为其入度与出度之和,即矩阵A中各顶点在其对应行和列中非零元素个数之和。</p>","type":"choice","options":{"A":"1,2,1,2","B":"2,2,1,1","C":"3,4,2,3","D":"4,4,2,2"},"answer":"C"},{"id":"learncoder_39_441","stem":"<p>对如下图所示的有向图进行拓扑排序,得到的拓扑序列可能是( )。[全国联考2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本应用<br>  【解析】对有向图进行拓扑排序,入度为0的顶点成为可输出的候选顶点,每次选择入度为0的顶点输出,并删除该顶点和其相关联的边,直到所有顶点都已输出,或者剩下的图中不存在入度为0的顶点。在该图中,只有顶点3人度为0,删除顶点3和其相关联的边,如下图(a)所示;顶点1入度为0,删除顶点1和其相关联的边,如下图(b)所示;顶点4入度为0,删除顶点4和其相关联的边,如下图(c)所示;顶点2和顶点6入度都为0,则可以先删除顶点2和其相关联的边,再删除顶点6和其相关联的边,也可以先删除顶点6和其相关联的边,再删除顶点2和其相关联的边;删除顶点5。因此得到的拓扑序列可能是3,1,4,2,6,5或者3,1,4,6,2,5。<br>  </p>","type":"choice","options":{"A":"3,1,2,4,6,5","B":"3,1,2,4,5,6","C":"3,1,4,2,6,5","D":"3,1,4,2,5,6"},"answer":"C"},{"id":"learncoder_39_440","stem":"<p>求如右图所示带权图的最小(代价)生成树时,可能是克鲁斯卡尔(Kruskal)算法第2次选中,但不是普里姆(Prim)算法(从V4开始)第2次选中的是( )。[全国联考2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本应用<br>  【解析】由连通图得到最小生成树的算法主要为克鲁斯卡尔算法和普里姆算法。克鲁斯卡尔算法是依次选取权值最小的边。克鲁斯卡尔算法第1次选中的边是(R,F4),第2次选中的边可能是(V1,V3)、(V2,V3)、(V3,V4)。普里姆算法是将起始节点当作一棵树,依次在与该树相连的所有未选中边中选取权值最小的边,再将这条边与这个节点加入这棵树,直到所有的节点都在同一棵树中。普里姆算法第1次选中的边是(V1,V4,第2次选中的边可能是(V1、V3)、(V3,V4),因此,可能是克鲁斯卡尔算法第2次选中,但不是普里姆算法第2次选中的边是(v2,v3)。</p>","type":"choice","options":{"A":"(V1,V4)","B":"(V1,V3)","C":"(V2,V3)","D":"(V3,V4)"},"answer":"C"},{"id":"learncoder_39_439","stem":"<p>设有向图C=(V,E),顶点集V={v1,v2,v3,v4},边集E={&lt;v0,v1&gt;,&lt;v0,v2&gt;,&lt;v0,v3&gt;,&lt;v1,v3&gt;}。,若从顶点V0开始对图进行深度优先遍历,则可能得到的不同遍历序列个数是( )[全国联考2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的遍历<br>  【解析】根据顶点集V和边集心可画出该有向图G如下图所示。<br><br>  有向图G的深度优先遍历序列可能为&lt;V0,V1,V3,V2&gt;,&lt;V0,V2、V1,V3&gt;,&lt;V0,V2、V3,V1&gt;&lt;V0,V3、V1,V2&gt;&lt;V0,V3、V2,V1&gt;</p>","type":"choice","options":{"A":"2","B":"3","C":"5","D":"4"},"answer":"C"},{"id":"learncoder_39_438","stem":"<p>使用迪杰斯特拉(Dijkstra)算法求下图中从顶点1到其他各顶点的最短路径,依次得到的各最短路径的目标顶点是( )。[全国联考2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p></p><p>考点】图——图的基本应用</p><p>  【解析】使用迪杰斯特拉算法求最短路径的步骤如下表所示。<br>  <br>  故顶点查找顺序为5,2,3,6,4。</p>","type":"choice","options":{"A":"5,2,6,3,4","B":"5,2,4,3,6","C":"5,2,3,6,4","D":"5,2,3,4,6"},"answer":"C"},{"id":"learncoder_39_437","stem":"<p>若将n个顶点、e条弧的有向图采用邻接表存储,则拓扑排序算法的时间复杂度是是( )。[全国联考2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本应用<br>  【解析】分析拓扑排序算法可知,如果有向图有n个顶点、e条弧,每个顶点一次进栈、一次出栈,输出n次,顶点人度减1的运算共e次,所以拓扑排序算法的时间复杂度是0(n+e)。</p>","type":"choice","options":{"A":"0(n+e)","B":"0(n)","C":"0(n2)","D":"0(n*e)"},"answer":"A"},{"id":"learncoder_39_436","stem":"<p>下列选项中,不是下图深度优先搜索序列的是( )。 [全国联考2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的遍历<br>  【解析】深度优先搜索从起始顶点开始,首先将起始顶点作为当前顶点进行访问,再在当前顶点所有邻接顶点中找出一个未访问顶点作为下一个当前顶点,继续向下访问。若当前顶点的所有邻接顶点都被访问过,则采用回溯的方法。在本题中,四个选项均是选取顶点V1作为起始顶点,首先访问V1,V1的邻接顶点有、V3和V5。选项A选择了未访问的V5作为下一个当前顶点,访问V5;V5的邻接且未被访问的顶点为V4,访问V4;V4的邻接且未被访问的顶点为V3,访问V3,,V3的邻接且未被访问的顶点为V2访问V2,遍历结束。选项B选择了未访问的V3作为下一个当前顶点,访问V3,V3的邻接且未被访问的顶点为V2,访问V2;V2的邻接且未被访问的顶点为访问V5;V5的邻接且未被访问的顶点为V4,访问V4,遍历结束。选项C选择了未访问的V2作为下一个当前顶点,访问V2;V2的邻接且未被访问的顶点为V5,访问V5;V5的邻接且未被访问的顶点为V4,访问y4;y4的邻接且未被访问的顶点为V3,访问v3,遍历结束。选项D选择了未访问的v2作为下一个当前顶点,访问v2,接下来没有访问v2的邻接且未被访问的顶点V5,而且采用回溯的方法,回到顶点V1,访问V1的邻接且未被访问的顶点v3,因此没有采用深度优先搜索的方法。</p>","type":"choice","options":{"A":"v1,v5,v4,v3,v2","B":"v1,v3,v2,v5,v4","C":"v1,v2,v3,v4,v5","D":"v1,v2,v5,v4,v3"},"answer":"C"},{"id":"learncoder_39_435","stem":"<p>.已知无向图G含有16条边,其中度为4的顶点个数为3,度为3的顶点个数为4,其他顶点的度均小于3。图C所含的顶点个数至少是( )。[全国联考2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.图","analysis":"<p><br>  图——图的基本概念<br>  【解析】由无向图的性质可知,图G含有16条边,则总度数为16x2=32。设度为2的顶点个数为x,度为1的顶点个数为y,度为0的顶点个数为z由此可列出三元一次方程式为3x4+4x3+2xx+lxy+0xz=32,化简得2x+y=8。要使图G所含的顶点个数最少,则x=4,y-0,此时顶点个数为3+4+4=11,因此图G至少含有11个顶点。</p>","type":"choice","options":{"A":"13","B":"11","C":"10","D":"15"},"answer":"B"},{"id":"learncoder_99_23197","stem":"将关键字序列{7、8、30、11、18、9、14}散列存储到散列表中,散列表的存储空间是一个下标从0开始的一维数组,散列函数为H(key)=(keyx3)Mod7,处理冲突釆用线性探测再散列法,要求装填因子为0.7.(1)请画出所构造的散列表。(2)分别计算等概率情况下,查找成功和查找不成功时的平均查找长度。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"空","type":"short_answer","answer":"(1)因为装填因子为0.7,数据总数为7,所以存储空间长度为7/0.7=10o因此可选表长m=10分别计算各个数据元素的散列地址:H(7)=(7x3)%7=0, —次比较到位。H(8)=(8x3)%7=3, 一次比较到位。H(30)=(30x3)%7=6, 一次比较到位。H(ll)=(llx3)%7=5, —次比较到位。H(18)=(18x3)%7=5,冲突;探测下一位置6,冲突;探测下一位置7, 3次比较到位。 H(9)=(9X3)%7=6,冲突;根据上一步的探测结果可知,最终位置为8, 3次比较到位。H(14)=(14X3)%7=0,冲突;探测下一位置1,两次比较到位。根据以上分析得到关键字的散列地址,可以得到散列表为<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image32.png'/>(2)由(1)中结果可以计算出查找成功和不成功时的平均查找长度,具体如下: 查找成功时的平均查找长度为:ASL(成功)=(1+1+1+1 七 3+3+2)/7 = 12/7 查找不成功时的平均查找长度为:ASL(不成功)=(3+2+1+2+1+5+4)/7 = 18/7说明:此题与空位置的比较也娶计算在内。这里可以做一个小的总结:当题目无特殊说明,在以顺序 表为存储结构的情况下,如果空位置作为结束标记,则与空位置的比较次数也要计算在内;在以链表为 存储结构的情况下,与空指针的比较次数不计算在内。"},{"id":"learncoder_99_23196","stem":" (1)设在一棵二叉排序树的每个结点中,含有关键字值key域和统计相同关键字值结点个数的count 域,当向该树插入一个元素时,若树中已存在与该元素的关键字值相同的结点,则使该结点的count域 增1,否则就由该元素生成一个新结点并插入到树中,然后使其count域置为1,试按照这种插入要求编写一个算法。(2)编写一个算法,判定给定的关键字值序列(假定关键字值互不相同)是否是二叉排序树的查找序列。若是则函数返回1,否则返回0。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"空","type":"short_answer","answer":"(1)解析向以t为根的二叉排序树中插入一个元素x (假设x用int型来表示),若树中已经有该元素,则将 匹配结点中的count域的值加1,否则该元素作为新结点插入。算法描述如下<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image28.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image29.png'/>(2)根据二叉排序树的特点,查找路径只可能沿某一结点的左分支或右分支逐层向下查找,而不可能在 两个分支之间横向跳跃或往上回溯。查找范围应在给定关键字值的上下波动,不断接近给定关键字值, 并且在结点左子树上的关键字值不会大于结点的关键字值,右子树上的关键字值不会小于结点的关键字值。例如,给定一个值60,在二叉排序树上寻找关键字值为60的结点时,访问的关键字值序列S={20,30,\t90, 80, 40, 50, 70, 60}。若将S分为两个子序列,S1所包含的都是小于或等于60的数据,Sl={20, 30, 40, 50, 60}; S2所包含的都是大于60的数据,S2={90, 80, 70}。如此可得判断是否是查找序列 的原则:如果从S所生成的S1单调递增,S2单调递减,且除待查元素外,S1中的每个数据都小于给定 值,S2中的每个数据都大于给定值,则S是一个查找序列,否则不是查找序列。算法描述如下<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image30.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image31.png'/>"},{"id":"learncoder_99_23195","stem":" (1)将二叉排序树T的前序序列中的关键字依次插入到一棵空的二叉排序树中,得到二叉排序树T’, T’与T是否相同?为什么?(2)设二叉排序树中的关键字互不相同;则其中的最小元素必无左子女,最大元素必无右子女。此命题是否正确?最小元素和最大元素一定是叶结点吗 一个新元素总是作为叶结点插入二叉排序树吗?(3)\t若对于大小均为n的有序顺序表和无序顺序表分别进行顺序查找,试在下列3种情况下分别讨论两者在等概率时平均查找长度是否相同(在表的尾部有一个查找结束标记关键字)。1)\t查找不成功,即表中没有关键字等于给定值Key。2)\t查找成功,且表中只有一个关键字等于给定值key。3)\t查找成功,且衣中有若丰关键字等于给定值Key;要求找出所有这些记录。(4)\t已知一组关键字为{26, 36, 41, 38, 44, 15, 68, 12, 6, 51, 25},用链地址法解决冲突。假 丧装填因子a=0.75, Hash函数的形式为H(Key)=Key Mod P。1)构造Hash函数。2)计算等概率情况下查找成功时的平均查找长度ASL1。3)计算等概率情况下查找失败时的平均查找长度ASL2(只将与关键字的比较次数计算在内)。(5)已知记录关键字集合为{53, 17, 19, 61, 98; 75, 79, 63, 46, 49},要求用除留余数法将关键字散列到地址区间{100, 101, 102, 103, 104, 105, 106, 107, 108, 109}内,若产生冲突,则用开放定址法的线性探查法解决。要求写出选用的Hash函数及形成的Hash表,计算出查找成功时的平均查找长度(设等概率情况)。\t'(6)\t设有一棵空的3阶B-树,依次插入关键字{30, 20, 10, 40, 80, 58, 47, 50, 29, 22, 56, 98, 99},请画出该树。(7)\t高度为h的m阶B-树至少有多少个结点?(8)直接在平衡二叉树中查找关键字Key与在对其进行中序遍历输出的有序序列中查找关键字Key, 其效率是否相同?按关键字有序序列输入关键字,构造一棵二叉排序树,然后对此树进行查找,其效率如何?为什么?(9)\t已知长度为11的表{xal, wan, wil, zol, yo, xul, yum, wen, wim, zi, yon},按表中元素顺 序依次插入一棵初始为空的平衡二叉排序树(单词的大小按字典顺序来决定,即在字典中靠前的小、靠后的大),画出插入完成后的平衡二叉树,并求其在等概率的情况下查找成功时的平均查找长度。(10)\t在平衡二叉树的每个结点中增设一个域lsize,存储以该结点为根的左子树中的结点个数加1。编写一个算法,确定树中第k (>=1)个结点的位置。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"空","type":"short_answer","answer":"(1)构造出来的二叉排序树与原来的相同。因为二叉排序树是二叉树,它的前序序列的第一个元素一定是二叉排序树的根,而对应前序序列的 根后面的所有元素分为两组:从根的后一元素开始,其值小于根的值的一组元素就是树的左子树的.结点 的前序序列,剩下的元素的值大于根的值,即为树的右子树的结点的前序序列。在把前序序列的元素依 次插入初始为空的二叉排序树时,第一个元素就成为树的根,它后面第一组元素的值都小于根结点的值, 可以递归建立根的左子树;第二组元素的值都大于根结点的值,可以递归地建立根的右子树。最后插入 的结果就是一棵与原来二叉排序树相同的二叉排序树(2)1)最小元素必无左子女,最大元素必无右子女,此命题正确。根据二叉排序树的定义,二叉排序树的根结点的关键字值一定大于左子树(若非空)上所有结点的 关键字值,同时一定小于右子树(若非空)上所有结点的关键字值,而根结点的左、右子树也是二叉排 序树。这是一个递归的定义。因此寻找最小元素的过程可以是一个递归的过程,逐层查找树(或子树) 根结点的左子树,直至根结点的左子树空为止,这个子树的根结点就是最小元素所在结点,它无左子女; 同样,寻找最大元素的过程也可以是一个递归的过程,逐层查找树(或子树)根结点的右子树,直至根 结点的右子树空为止,这个子树的根结点就是最大元素所在结点,它无右子女、。2)\t最小元素和最大元素不一定是叶结点。\t具有最小关键字值的结点可以有右子树,具有最大关键字值的结点可以有左子树。(3)分析1)\t查找长度不同。原因:扫描有序表,只要发现第一个比关键字大的值,即可结束扫描,无须扫描 整个表,因此平均查找长度与无序表不同。2)\t查找成功时,对于两种表都是逐个扫描关键字,直到找到与给定的Key相同的关键字为止,因 此平均查找长度均为(n+1)/2。3)\t有序表中相同关键字在表中的位置一定是相邻的,而无序表中相同关键字是随机散落在表中的因此,对于有序表,找到第一个与Key相同的元素后,只需继续扫描,找到最后一个与Key不相同的元 素即可;而对于无序表,则需要扫描整个表。对于无序表的平均查找长度为n+1,而对于有序表则小于 n+l.答:1)\t不同,有序顺序表为(n+1)/2,无序顺序表为n+1。2)\t相同,有序顺序表为(n+1)/2,无序顺序表也为(n+l)/23)\t不同,有序顺序表小于n+1,无序顺序表为n+1(4)分析此题为简单的Hash构造题目,按照之前所讲的方法直接构造即可。1)由装填因子a=0.75,表中元素个数n=ll,得表长为[n/a]=15.p取不大于表长的最大素数,因此 p 为 13.所构造的Hash函数为H(Key)=Key Mod 13。由Hash函数求各关键字的Hash地址如下:{26, 36, 41, 38, 44, 15, 68, 12, 6, 51, 25}H(26)=0, H(36)=10, H(41)=2, H(38)=12, H(44)=5, H(15)=2, H(68)=3, H(12)=12, H(6)=6, H(51)=12, H(25)=12。由此可以构造出用链地址法处理冲突的Hash表<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image16.png'/>2)\t由图可知,ASL1=(1+1+2+1+1+1+1+1+2+3+4)/1 1=18/11。3)\tASL2=(1+0+2+1+0+1+1+0+0+0+l+0+4)/13=11/13(5)\t分析本题是一般的除留余数法的变形,可以先将关键字散列到0〜9的范围内,然后向右平移100个单位 即可散列到100〜109内。设Hash函数为H(key)=key Mod p+100,因表长为10, p取不大于表长的最大素数即7,因此得Hash 函数为 H(key)=key Mod 7+100。所得的Hash表见表<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image17.png'/>(6)分析 本题考查一般的B-树建立,3阶B-树的结点中,关键字个数范围为1〜2。按照关键字序列逐个插入后所得的B-树如图。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image18.png'/>(7)分析由B-树的定义可知,根结点最少有两个分支,其余结点分支数为「m/2]〜m个。因此,第一层有1个结点,第二层至少有2个结点,第三层有2x「m/2」个结点,第四层有2x「m/2」2个结点……第h+1层 至少有2x「m/2」h- 1个结点(h>=2)。结点总数为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image19.png'/>(8)在平衡二叉树上查找关键字Key,走了一条从根到叶子的路径,时间复杂度可以通过树的高度来反映,是O(log2n)。在中序遍历输出的序列中查找关键字Key,如果采用顺序查找, 则时间复杂度是O(n);如果采用折半查找,则时间复杂度是 O(log2n)按序输入建立的二叉排序树,因为插入元素是有序的,因此所有的插入操作都会发生在最左边的叶子结点的左指针上,或者最右边的叶子结点的右指针上,这样所形成的二叉排序树 蜕变为单枝树,折半查找也蜕变成了顺序查找,如图所示,其平均查找长度是(n+1)/2,时间复杂度是O(n))(9)按照二叉排序树的插入算法将关键字逐个插入树中,在发生不平衡现象的时候进行平衡调整,最后 即可得到平衡二叉树,操作步骤如下:1)插入关键字xal、wan、wil后发生不平衡现象,进行调整,如图所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image20.png'/>2)插入关键字zol、yo后发生不平衡现象,进行调整,如图所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image21.png'/>3)\t插入关键字xul后发生不平衡现象,进行调整,要特别注意结点xul的连接,调整后wil和yo两个结点都有空闲指针,xul应该连接在yo的左指针上,因为xul大于xal,结果如图所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image22.png'/>4)插入关键字yum、wen后发生了不平衡现象,调整后如图所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image23.png'/>5)插入关键字zi后发生了不平衡现象,调整后如图所示<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image24.png'/>6)插入最后一个关键字yon,发生了不平衡现象,进行调整。要特别注意的是,调整后yon应该连 接在yo的右指针上,而不是zi的左指针上,因为yon比yum小。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image25.png'/>由图图可得各个关键字的比较次数为<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image26.png'/>则查找成功时的平均查找长度ASL=(l+3+3+4+3+4+2+2+4+3+4)/l 1=33/11=3(10)解析实际上,增设的lsize域里面记入的就是以该结点为根的子树中该结点的次序。含有lsize域的结点 定义如下<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image27.png'/>"},{"id":"learncoder_99_23198","stem":"设包含4个数据元素的集合S={”do”,\"repeat”, \"while”},各元素的查找概率依次为:p1=0.35,p2=0.15,p3=0.15,p4=0.35将S保存在一个长度为4的顺序表中,采用折半查找法,查找成功时的平均查找长度为2.2请回答:(1)若采用顺序存储结构保存S,且要求平均查找长度更短,则元素应如何排列?应使用何种查找方法?查找成功时的平均查找长度是多少?(2)若采用链式存储结构保存S,且要求平均查找长度更短,则元素应如何列?应使用何种查找方法?查找成功时的平均查找长度是多少?","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"空","type":"short_answer","answer":"(1)采用顺序存储结构,数据元素按其查找概率降序排列。采用顺序查找方法。查找成功时的平均查找长度=0.35x1+0.35x2+0.15x3+0.15x4=2.1⑵ ・答案一: 采用链式存储结构,数据元素按其查找概率降序排列,构成单链表。 釆用顺序查找方法。查找成功时的平均查找长度=035xl+0.35x2+0.15x3+0.15x4=2.1答案二:\t采用二叉链表存储结构,构造二叉排序树,元素存储方式如图所示<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image33.png'/>采用二叉排序树的查找方法。查找成功时的平均查找长度=0.15x1+0.35x2+0.35x2+0.15x3=2.0"},{"id":"learncoder_99_23192","stem":"在一株高度为2的5阶B-树中,所含关键字的个数最少是( )","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"棵高度为2的5阶B-树,根结点只有到达5个关键字的时候才能产生分裂,成为高度为2 的B-树。注意:B-树的阶数是人为规定的,而不是因当前B-树中结点所含有的最大分支数而定。严格来说, 本题B-树画出来应该如图9-48所示,每个结点都最多可以包含4个关键字,只是当前状态中还没有一 个结点达到这个关键字个数<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image15.png'/>","type":"choice","options":{"B":"7","A":"5","C":"8","D":"14"},"answer":"A"},{"id":"learncoder_99_23191","stem":"设有一棵3阶B-树,如图9・30所示。删除关键字78得到一棵新B-树,其最右终端结点所含的关键字是(\t)","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"题目在不同版本的试卷中可能有不同的题干描述,即有的会把本题题干中的终端结点说成叶 子结点,其实指的就是图中画出的最底层的结点","type":"choice","options":{"B":"60, 62","A":"60","D":"65","C":"62, 65"},"answer":"D"},{"id":"learncoder_99_23184","stem":"\t 在含有15个结点的平衡二叉树上,查找关键字为28的结点,则依次比较的关键字可能是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"根据公式Nh=Nh-1+Nh-2 有N3=4, N4=7, N5=12, N6=20>15也 就是说,高度为6的平衡二叉树最少有20个结点,因此15个结点的平衡二叉树的最大高度为5,而最 小叶子结点的层数为3","type":"choice","options":{"B":"38,\t48,\t28","C":"48,\t18,\t38,\t28","D":"60,\t30,\t50,\t40,\t38, 28","A":"30,\t36"},"answer":"C"},{"id":"learncoder_99_23183","stem":"在含有12个结点的平衡二叉树上,查找关键字35 (树中存在该结点)的结点,则依次比较的关键字序列有可能是(\t)","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"由Nh=Nh-1+Nh-2, 可以算出N3=4, N4=7, N5=12也就是说,12个结点的平衡二叉树中叶子结点的最小层数为3,最大层 数为5,又由于35是存在的,因此最多查找5次就一定能找到","type":"choice","options":{"C":"27,\t48,\t39,\t43,\t37","A":"46,\t36,\t18,\t20,\t28, 35","B":"47,\t37,\t18,\t27,\t36","D":"15,\t25,\t55,\t35"},"answer":"D"},{"id":"learncoder_99_23186","stem":"\t查找效率最高的二叉排序树为(\t)","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"二叉排序树的查找效率取决于其高度。对于结点个数相 同的二叉排序树,平衡二叉树的高度最小,因此效率最高。","type":"choice","options":{"C":"平衡二叉树","B":"所有结点的右子树都为空的二叉排序树","A":"所有结点的左子树都为空的二叉排序树","D":"没有左子树的二叉排序树"},"answer":"C"},{"id":"learncoder_99_23185","stem":"\t一棵高度为k的平衡二叉树,其每个非叶子结点的平衡因子均为0,则该树共有(\t)个结点。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"由于每个非叶子结点的平衡因子均为0,也 即每个非终端结点都有左子树和右子树,且高度相等,因此这样的平衡二叉树为满二叉树,而高度为k 的满二叉树的结点为2^k-1","type":"choice","options":{"D":"(2^k)-1","A":"2^(k-1)-1","C":"2^(k-1)+1","B":"2^(k-1)"},"answer":"D"},{"id":"learncoder_99_23187","stem":"\t设有n个关键字,Hash查找法的时间复杂度是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"Hash查找法是由关键字结合Hash函数和冲突处理方法直接 算出关键字在表中的位置,与表的长度n无关,其查找的时间复杂度对于R为常量级,即O(1)","type":"choice","options":{"C":"O(log2n)'","D":"O(n^2)","B":"O(n)","A":"O(1)"},"answer":"A"},{"id":"learncoder_99_23190","stem":"为提高散列(Hash)表的查找效率,可采取的正确措施是(\t)。①增大装填因子②设计冲突少的散列函数③处理冲突时避免产生聚集堆积现象","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"要提高查找效率,就要减少Hash表的冲突,因此②是正确的措施。对于①,装填因子增大, 则相应的表中空闲位置就少,更容易发生冲突,因此①不对。堆积现象是不可避免的,因此③不对","type":"choice","options":{"C":"仅①②","A":"仅①","D":"仅②③","B":"仅②"},"answer":"B"},{"id":"learncoder_99_23189","stem":"已知一个长度为16的顺序表L,其元素按关键字有序排列,若采用折半查找法查找一个L中不存在的元素,则关键字的比较次数最多是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"折半查找法在查找不成功时和给定值进行比较的关键字个数最多为Llog2nJ+1,即折半查找判定树的高度。在本题中,n=16,故比较次数最多为5","type":"choice","options":{"C":"6","D":"7","A":"4","B":"5"},"answer":"B"},{"id":"learncoder_99_23188","stem":"下列叙述中,不符合m阶B-树定义要求的是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"描述的是B+树的特点,而不是B-树的特点","type":"choice","options":{"A":"根结点最多有m棵子树","D":"叶结点之间通过指针链接","C":"各结点内关键字均升序或降序排列","B":"所有叶结点都在同一层上"},"answer":"D"},{"id":"learncoder_99_23181","stem":"\t在如图所示的树中,属于平衡二叉树的是()","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"计算出各结点的平衡因子如图。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image14.png'/>","type":"choice","options":{"D":"如图 <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image5.png'/>","A":"如图 \t<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image2.png'/>","B":"如图 <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image3.png'/>","C":"如图 \t<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image4.png'/>"},"answer":"B"},{"id":"learncoder_99_23180","stem":"在一棵平衡二叉树中,每个结点的平衡因子的取值范围()","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"结点的平衡因子为其左子树与右子树的 高度之差。平衡二叉树其左、右子树都是平衡二叉树,且左、右子树高度之差的绝対值不超过1","type":"choice","options":{"C":"1〜2","B":"-2〜2","D":"0〜1","A":"-1〜1"},"answer":"A"},{"id":"learncoder_99_23179","stem":" 如图所示的二叉排序树查找不成功时的平均查找长度为(只将与关键字的比较次数计算在内)(\t)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image1.png'/>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"由题意进行如下分析: 查找成功 <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image12.png'/> 查找成功时的平均查找长度=(l+2+2+3+3+4)/6=15/6 查找失败 <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image13.png'/>查找失败时的平均查找长度=(3+3+4+4+3+2+2)/7=21/7","type":"choice","options":{"C":"15/6","B":"28/7","A":"21/7","D":"21/6"},"answer":"A"},{"id":"learncoder_99_23182","stem":"\t具有5层结点的平衡二叉树至少有( )个结点。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"设Nh表示高度为h的平衡二 叉树中含有的最少结点数,则有N0=0, N1=1, N2=2, …… Nh=Nh-1+Nh-2由以上递推公式可知N5=12","type":"choice","options":{"B":"12","D":"17","A":"10","C":"15"},"answer":"B"},{"id":"learncoder_99_23178","stem":"如图所示的二叉排序树查找成功时的平均查找长度为(\t),<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image1.png'/>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"由题意进行如下分析: 查找成功<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image12.png'/>查找成功时的平均查找长度=(l+2+2+3+3+4)/6=15/6 查找失败<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image13.png'/>查找失败时的平均查找长度=(3+3+4+4+3+2+2)/7=21/7","type":"choice","options":{"B":"28/7","C":"15/6","D":"21/6","A":"21/7"},"answer":"C"},{"id":"learncoder_99_23170","stem":"\tHash表的地址区间为0〜16, Hash函数为H(K)=Kmodl7。釆用线性探查法处理冲突,并将关键字序列{26, 25, 72, 38, 8, 18, 59}依次存储到Hash表中。关键字59存放在Hash表中的地址是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"先用59之前的关键字建表过程如下:.H(26)=9,不冲突;H(25)=8,不冲突;H(72)=4,不冲突;H(38)=4,冲突,冲突处理后地址为5; H(8)=8,,冲突,冲突处理后地址为10; H(18)=1,不冲突。当放入关键字59时,H(59)=8,冲突,后移 一位得地址9也冲突,继续后移得地址10也冲突,继续后移得地址11不冲突。因此59在表中的地址为 11,共探查4次","type":"choice","options":{"A":"8","B":"9","D":"11","C":"10"},"answer":"D"},{"id":"learncoder_99_23171","stem":"\tHash表的地址区间为0〜16, Hash函数为H(K)=Kmodl7。釆用线性探查法处理冲突,并将关键字序列{26, 25, 72, 38, 8, 18, 59}依次存储到Hash表中存放关键字59需要探查的次数是( )","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"先用59之前的关键字建表过程如下:.H(26)=9,不冲突;H(25)=8,不冲突;H(72)=4,不冲突;H(38)=4,冲突,冲突处理后地址为5; H(8)=8,,冲突,冲突处理后地址为10; H(18)=1,不冲突。当放入关键字59时,H(59)=8,冲突,后移 一位得地址9也冲突,继续后移得地址10也冲突,继续后移得地址11不冲突。因此59在表中的地址为 11,共探查4次","type":"choice","options":{"D":"5","A":"2","C":"4","B":"3"},"answer":"C"},{"id":"learncoder_99_23174","stem":"\t对线性表进行二分查找时,要求线性表必须()","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"二分查找要求查找对象采用顺序存储结构,并且元素有序","type":"choice","options":{"A":"以顺序方式存储","D":"以链表方式存储,且关键字要有序","C":"以顺序方式存储,且关键字要有序","B":"以链表方式存储"},"answer":"C"},{"id":"learncoder_99_23177","stem":"\t在一棵二叉排序树上,查找关键字为33的结点,依次比较的关键字有可能是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"可以根据选项画出查找路线上的结点,根据二叉排序树 的规定来排除不满足条件的选项。根据题目选项所得查找路线如图所示。选项A中28的右子树中出现了小于它的18,不满足二叉排序树规定,排除。选项B中36的左子树中出现了大于它的46,不满足二叉排序树规定,排除。选项C中28的左子树中出现了大于它的36,不满足二叉排序树规定,排除。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image11.png'/>","type":"choice","options":{"B":"18, 36,\t28,\t46,\t35","A":"28, 36,\t18,\t46,\t35","C":"46, 28,\t18,\t36,\t35","D":"46, 36,\t18,\t28,\t35"},"answer":"D"},{"id":"learncoder_99_23173","stem":"顺序查找法适合于存储结构为(\t)的线性表","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"顺序查找方法适应于线性表,用顺序表或者链表来 表示的线性表它都适应","type":"choice","options":{"C":"压缩存储","A":"散列存存储","D":"索引存储","B":"顺序存储或者链式存储"},"answer":"B"},{"id":"learncoder_99_23176","stem":"\t对有18个元素的有序表R[1,…,18]进行二分查找,则查找R[3]的比较序列下标为()。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"本题可以通过构造二分查找判定树来解决,这里采用另一种方法,直接计算比较序列下标。第一次:L(l+18)/2j=9,下一次查找子区间为1〜8;第二次:L(l+8)/2j=4,下一次查找子区间为1〜3;第三次:L(l+3)/2j=2,下一次查找子区间为3〜3;第四次:L(3+3)/2」=3。因 此,比较序列下标为9, 4, 2, 3,","type":"choice","options":{"C":"9, 5, 3","D":"9, 4, 2,\t3","A":"1, 2, 3","B":"9, 5, 2,\t3"},"answer":"D"},{"id":"learncoder_99_23175","stem":"\t有一个有序表为{1, 3, 9, 12, 32, 41, 45, 62, 75, 77, 82, 95, 99},釆用二分查找法,找到82共进行(\t)比较。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"解决此类题目最保险的方法是构造二分查找判定树,虽然这样 速度有点慢,但是不容易出错,本题的判定树如图, 由图9-35所示的判定树可知,找到82时,共进行了4次比较<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image10.png'/>","type":"choice","options":{"B":"2次","C":"4次","A":"1次","D":"8次"},"answer":"C"},{"id":"learncoder_99_23172","stem":"\t将10个元素散列到100 000个单元的Hash表中,则(\t)产生冲突。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"装填因子越大,则越可能发生冲突(这是显而易见的,装填因子大,证明表中的关键字多,而空位置少,所以冲突容易发生);装填因子越小,则冲突发生的可能性越 小。但是不论什么情况都不能绝对避免冲突","type":"choice","options":{"B":"一定不会","A":"一定会","C":"仍可能会","D":"不能确定"},"answer":"C"},{"id":"learncoder_99_23165","stem":" \t若采用链地址法构造散列表,Hash函数为H(key)=key Mod 17,需要使用一些链表,这些链的链首指针构成一个指针数组,数组的下标范围为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"本题考查用链地址法处理冲突。由Hash函数可知,地址范围为0〜16,有17个地址,需要17个链表","type":"choice","options":{"A":"0〜17","D":"1〜16","B":"1〜17","C":"0〜16"},"answer":"C"},{"id":"learncoder_99_23164","stem":"\t若采用链地址法构造散列表,Hash函数为H(key)=key Mod 17,则需(\t)个链表。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"由Hash函数可知,地址范围为0〜16,有17个地址,需要17个链表","type":"choice","options":{"C":"16","A":"17","D":"任意","B":"13"},"answer":"A"},{"id":"learncoder_99_23163","stem":"\t设有一组记录的关键字为{19, 14, 23, 1, 68, 20, 84, 27, 55, 11, 10, 79},用链地址法构造Hash表,Hash函数为H(key)=key Mod 13,散列地址为1的链中有(\t)个关键字。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"Hash函数以及链地址法的冲突解决方法来建立Hash表的过程。只需用各个关键字与13做取余运算,结果为1的就是地址为1的链中的关键字,经运算可知14、1、27, 79将被插入到地址为1的链中","type":"choice","options":{"B":"2","A":"1","C":"3","D":"4"},"answer":"D"},{"id":"learncoder_99_23168","stem":"\t假定有k个关键字互为同义词,若用线性探查法把这k个关键字存入散列表中,至少要进行(\t)探测。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"在不发生堆积现象的时候,k个互为同义词 的关键字中,第一个关键字需要探查一次,以后的关键字均比前一个关键字要多探查一次,则每个关键 字需要探查的次数构成一个首项为1、公差为1、项数为k的等差数列,因此总共需要k(k+1)/2次探查, 如果在这个过程中发生了堆积现象,则会发生更多的探查,因此至少需要探查k(k+1)/2次","type":"choice","options":{"C":"k+1 次","B":"k 次","D":"k(k+l)/2 次","A":"k-1 次"},"answer":"D"},{"id":"learncoder_99_23167","stem":"\t设Hash表长为14, Hash函数是H(key)=key Mod 11,表中已有数据的关键字为15、38、61、 84,共4个,现要将关键字为49的结点添加到表中,用平方探查法解决冲突,则放入的位置是( )","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"本题考查Hash表的构造方法,以及冲突处理方法。已含有关键字15、38、61、84的Hash 表如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image9.png'/>因H(49)=49 Mod 11=5,地址5处已经存在关键字,发生冲突,则另探查起始位置d=5并按照以下 地址序列进行探查:d+1^2, d-1^2, d+2^2, d-2^2……经探查知d+2^2=9处有空位置,因此49最终在Hash 表中的位置为9处,","type":"choice","options":{"A":"8","C":"5","D":"9","B":"3"},"answer":"D"},{"id":"learncoder_99_23166","stem":"\t关于Hash查找以下说法不正确的有(\t)个。①采用链地址法解决冲突时,查找任一个元素的时间都是相同的②采用链地址法解决冲突时,若插入规定总是在链首,则插入任一个元素的时间都是相同的③用链地址法解决冲突易引起堆积现象④线性探查法不易产生堆积现象","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"如果两个元素在同一个链表中,查找时间肯定不相同,因此①不正确。若插入规定在链首,则插入操作不需要查找插入位置即可直接进行,因此插入任何一个元素的时间 均相同,因此②正确。这是相对于链表的尾插法而言的,在尾插法中,需要找到链表的尾部,因此链表 的长度决定了插入元素的执行时间。所谓堆积问题,即在Hash表的建立过程中,某些Hash地址是由冲突处理产生的,而不是由Hash 函数直接产生的,这就可能造成原本Key1与Key2虽然不是同义词,但是最后却得出了相同的Hash地址。 例如,在线性探查法处理冲突的过程中,设第一个同义词占用单元d,这之后连续的若干同义词将占用 Hash表的d、d+1、d+2等单元,此时随后任何d+1、d+2等单元上的Hash映射都会由于前面的同义词堆积而产生冲突,尽管随后的这些关键字并没有同义词,因此④不正确。显然链地址法不会产生堆积现象,因为多个同义词只会占用表中的一个地址,因此③不正确","type":"choice","options":{"B":"2","A":"1","C":"3","D":"4"},"answer":"C"},{"id":"learncoder_99_23169","stem":"\tHash函数有一个共同的性质,即函数值应当尽量以(\t)取其值域的每个值。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"这个原则在知识点讲解中弄没有明确提到,但是应该知道,Hash函数要尽可能地减少冲突的发生来提高查找的效率。如何减少冲突的发生呢?所谓冲突,通俗来讲就是关键字在表中扎堆,即关键字经Hash函数处理后落在表中各个位置上的概率不相等。因此要减少冲突,应当使得函数值以等概率取其值域中的每个值","type":"choice","options":{"C":"平均概率","D":"同等概率","A":"最大概率","B":"最小概率"},"answer":"D"},{"id":"learncoder_99_23155","stem":"具有12个关键字的有序表,对每个关键字的查找概率相同,折半查找成功的平均查找长度ASL为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"我们可以假设关键字序列为{1, 2, 3, 4, 5, 6, 7,8, 9, 10, 11, 12},只要表中的关键字个数相同,就一 定会生成形状相同的判定树。这里的形状相同是指两棵 树的结构是一样的,但同一位置上的结点的值可以不一 样。判定树只要形状相同,平均查找长度就相同,含有 12个关键字的有序表必然可以生成与图所示的树形状相同的判定树。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image6.png'/>由图所示的判定树可以得出各关键字的比较次数,关键字的比较次数即为关键字在树中的层数。由此可以得出:因此ASL=(3+4+2+3+4+1+3+4+2+4+3+4)/12=37/12,","type":"choice","options":{"A":"37/12","C":"39/12","B":"35/12.","D":"43/12"},"answer":"A"},{"id":"learncoder_99_23158","stem":"在平衡二叉树中插入一个结点后造成了不平衡,设最小不平衡子树根为A,并已知A的左孩子的平衡因子为0,右孩子的平衡因子为1,则应做(\t)型调整以使其平衡。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"由题意可知,在插入前,A的平衡因子为A酌右孩子(左图中的结点C)的平衡因子为0;插入结点后(新结点插入在D的子树上,图中没有画出)A 的平衡因子变为-2, C的变为1。结点必插入到C的左子树上,A、C、D是需要进行平衡调整的3个结 点。图中虚线框内所示的A、C、D,3个结点构成的子树需要进行RL型平衡调整<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image7.png'/>结点D中关键字大于A小于C,因此将D作为根,A、C分别为其左、右子树。此时A空出来一个 右指针,C空出来一个左指针,而③、④变成了两棵独立的树。③中关键字都小于④中关键字,即在最终树中,③应该在④的左边。因此,③应该挂在A的右指针上,④应该挂在C的左指针上,最终结果如图所示。","type":"choice","options":{"B":"LR","D":"RR","A":"LL","C":"RL"},"answer":"C"},{"id":"learncoder_99_23154","stem":"对于同一个表,用二分(折半)法查找表的元素的速度比用顺序法( )","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"对于同一个表,如果找的是表中的第一个元素,则用顺序查找方法一定比折半查找快;如果找的是表中的最后一个元素,则用顺序查找方法一定比折半查找方法慢.","type":"choice","options":{"C":"相等","A":"必然快","D":"不能确定,","B":"必然慢"},"answer":"D"},{"id":"learncoder_99_23157","stem":"分别用以下序列构造二叉排序树,与用其他3个序列所构造的结果不同的是( ).","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"过观察可知,选项A、 B、 D中根结点的左孩子结点为80而选项C中根结点的左孩子结点为60,至此即可判断选项c所构造的二叉排序树一定和其他3项不同, 因此本题选C.","type":"choice","options":{"B":"{100, 120, 110, 130, 80, 60, 90}","C":"{100, 60, 80, 90, 120, 110, 130}","D":"{100, 80, 60, 90, 120, 130, 110}","A":"{100, 80, 90, 60, 120r 110, 130}\t”"},"answer":"C"},{"id":"learncoder_99_23159","stem":"下面关于m阶B-树说法正确的是()①每个结点至少有两棵非空子树②树中每个结点至多有m-l个关键字③所有叶子在同一层上④当插入一个数据项引起B-树结点分裂后,树长高一层 .","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"m阶B-树的根结点至少有两棵子树,并且这两颗子树可以是空树,其余结点至少有「m/2l个分支,即[M/2]棵子树,因此①不对。每个结点中关键字的个数比分支数少1, m阶B-树的一个结点中至多有m个分支,因此最多有m-1 个关键字,因此②正确。B-树是平衡的多路查找树,叶子结点均在同一层上,因此③正确。发生结点分裂的时候不一定会使树长高。例如,向图中的B-树插入一个关键字10,变成图中的B-树,使得第二层右端的一个结点分裂成两个,但是树并没有长高,因此④不对<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第9章)/image8.png'/>","type":"choice","options":{"D":"③","B":"②③","A":"①②③","C":"②③④"},"answer":"B"},{"id":"learncoder_99_23156","stem":"折半查找的时间复杂度为( )","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"由第2题的讲解可知,对规模为n的有序表进行折半查找的平均查找长度不大于[log2n]+1在不做特殊说明的情况下,算法的时间复杂度就是最坏情况下基本运算的执行次数f(n)查找中基本运算为关键字的比较,因此对于折半查找,最坏情况下的比较次数 f(n)=Llog2n]+1,折半查找算法的时间复杂度为O(log2n)","type":"choice","options":{"A":"O(n^2)","D":"O(log2n)","B":"O(n)","C":"O(nlog2n)"},"answer":"D"},{"id":"learncoder_99_23161","stem":"\tm阶B-树是一棵(\t)","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"m阶B-树说明每个结点至多有m个分支,B-树的所有叶子结点都 在同一层上。因此,m阶B-树是一棵m叉平衡排序树","type":"choice","options":{"A":"m叉查找树","B":"m叉平衡查找树","D":"m+1叉平衡查找树","C":"m-l叉平衡查找树"},"answer":"B"},{"id":"learncoder_99_23160","stem":"\t下面关于B-树和B+树的叙述中,不正确的是(\t)","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"由定义知选项A、B、D正确。B+树所有的叶子结点包含了 全部的关键字信息,且叶子结点本身依照关键字的大小自小而大顺序连接,可以进行顺序查找,而B- 树则不可以","type":"choice","options":{"C":"B-树和B+树都能有效地支持顺序查找","D":"B-树的叶子结点不包含关键字,而B+树的叶子结点包含关键字","A":"B-树和B+树都是平衡的多叉树","B":"B-树和B+树都可用于文件的索引结构"},"answer":"C"},{"id":"learncoder_99_23162","stem":"在一棵m阶的B-树中,除根结点以外的结点的分支数S应满足( )","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"在m阶B-树中,除了根结点以外,其余结点的分支数为m/2<=S<=m","type":"choice","options":{"C":"「m/2l<=S<=m—1","B":"「m/2」-1 <=S<=m-1","D":"「m/2l一1<=S<=m","A":"「m/2l<=S<=m"},"answer":"A"},{"id":"learncoder_99_23152","stem":" 二分法查找的平均查找长度为 ( ), 假定n为线性表中关键字的个数,且每次查找都是成功的。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"根据折半查找法的执行过程可以做出一棵二叉树,即折半查找判定树,如果将这个二叉树的最底 层结点去掉,则这棵二叉树是一棵满二叉树,而査找过程就是走了从根结点到树中某一结点的一条路径, 路径上结点的个数就是关键字的比较次数。对于这棵二叉树,其高度为Llog2n]+1,这是表中关键字的最 大比较次数,则折半査找的平均查找长度应该不大于[log2n]+1","type":"choice","options":{"A":"n+1","B":"21og2n","C":"log2n","D":"(n+l)/2"},"answer":"C"},{"id":"learncoder_99_23151","stem":"顺序查找法的平均查找长度为( ), 假定n为线性表 中关键字的个数,且每次查找都是成功的。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"空","type":"choice","options":{"D":"(n+l)/2","A":"n+1","B":"21og2n","C":"log2n"},"answer":"D"},{"id":"learncoder_99_23150","stem":"若查找每个关键字的概率均等,则在具有n个关键字的顺序表中釆用顺序查找法查找一个记录,其查找成功的平均查找长度ASL为(\t)。\t”","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"由题干知查找n个关键字的概率是相等的,因此对于 每个关键字的查找概率均为1/n。在表中第一个关键字的比较次数为1,以后的每个关键字的比较次数比 前一个多1,一共n个记录,因此由等差数列求和公式可得所有记录比较次数的总和为(1+n)n/2,则平均 -查找长度为(17n)x(l+n)n/2=(n+l)/2","type":"choice","options":{"C":"(n+l)/2","A":"(n-l)/2","B":"n/2","D":"n"},"answer":"C"},{"id":"learncoder_99_23153","stem":"下面关于折半查找的叙述正确的是( )","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"折半查找是基于随机存储方式的算法,必须用顺序表而不能用链表, 折半查找表要求元素有序,但没有要求其表中元素是递增有序还是递减有序。由折半查找 的判定树也可以看出,只要根结点能将树中结点分为两部分,一部分结点值大于根结点值,一部分结点 值小于根结点值即可,而没有左子树结点值必须小于右子树结点值这样的特殊规定, 折半查找方法只要求关键字有序,而对关键字的数据类型没有规定","type":"choice","options":{"B":"表必须有序,而且只能从小到大排列","C":"表必须有序,且表中关键字必须是整型、实型或字符型","A":"表必须有序,表可以顺序方式存储,也可以链表方式存储","D":"表必须有序,且表只能以顺序方式存储"},"answer":"D"},{"id":"learncoder_99_19210","stem":"编写对有序表进行顺序查找的算法。假设每次查找时的给定值为随机值,又查找成 功和不成功的概率也相等,试求进行每一次查找时和给定值进行比较的关键字个数的期 望值。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是顺序查找算法。在等概率情况下,则查找成功的平均查找长度 为(n+1)/2,查找失败的平均查找长度为(n+2)/2(失败位置除小于每一个;还存在大于最后一 个)。若查找成功和不成功的概率也相等,则查找成功时和关键字比较的个数的期望值约为(n+ 1)/4。","type":"short_answer","answer":"\tint Search(rectype R[ ] ,int n,K)//在具有n个元素的有序表R中,顺序查找值为K的结点,查找成功返回其位置,//否则返回-1表示失败{i = 0;while (i<n){if(R[i]=K) return (i);\telse if(R[i]〉K) return ( -1);i++;(// whilereturn ( -1);} //结束 search\t"},{"id":"learncoder_99_19211","stem":"已知顺序表中有m个记录,表中记录不依关键字有序排列,编写算法为该顺序表建立一个有序的索引表,索引表中的每一项含记录的关键字和该记录在顺序表中的序号,要求算法的时 间复杂度在最好的情况下能达到0(m)o","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是排序问题。因涉及顺序表和索引表而放在这里。顺序表无序, 索引表有序。由顺序表中的关键字及其下标地址组成索引表中的一项。顺序表有m个记录,索 引表应有m项。建立索引表宜采用“直接插入排序”,这样才能在顺序表有序时,,算法复杂度达 到最好 0(m).","type":"short_answer","answer":" #4efine m顺序表中记录个数typedef struct node{ keytype key;//关键字int adr; //该关键字在顺序表中的下标}idxnode; //索引表的一项typedef struct node{ keytype key; //关键字anytype other;//记录中的其他数据} datatypevoid IndexT(idxnode index[ m+1 ] ,datatyp seq[ m+1 ])//给有个m记录的顺序表seq建立索引表index{index[ 1 ] . key = seq[ 1 ] . key; index[ 1 ] . adr= 1 ;for (i = 2,i< = m,i++){j = i-l;index [ 0 ] . key = seq [i].key; //监视哨while (index[ j]. key<index[ 0 ] . key){index[j+l]=index[j];j--} index[j+1 ] . key = index[0] . key; //关键字放入正确位置index[j+l ].adr=i;//第i个记录的下标\t"},{"id":"learncoder_99_19209","stem":"设从键盘输入一个整数的序列:n,a1,a2,…,an,其中n表示连续输入整数的个数。(1)试编写一程序按整数值建立一个二叉排序树。(2)在题(1)的基础上将此二叉树上的各整数按降序写入一磁盘文件中。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是二叉排序树的建立方法,并掌握文件操作的相关语句。","type":"short_answer","answer":"(1)非递归建立二叉排序树,在二叉排序树上插入的结点都是叶子结点。void Creat_BST(BiTree bst,datatypeK[ ] ,int n)\t//以存储在数组K中的n个关键字,建立一棵初始为空的二叉排序树\t{ for( i = 1 ;i <=n;i++){ p = bst ; f = null ;//在调用 Creat_BST 时,bst = nullwhile(p! =null)if(p->data<K[i]){f=p;p=p->RLINK;}(//f是p的双亲 else if(p->data>K[i]){ f=p;p = p->LLINK;} s= (BiTree)malloc(sizeof (BiNode) ) ;// 申请结点空间 s->data=K[ i] ; s->LLINK=null ; s->RLINK = null ;\tif(f= =null)bst = s;//根结点\telse if( s->data<f->data) f->LLINK= s ;//左子女elsef->RLINK = s ;//右子树根结点的值大于等于根结点的值}//算法结束(2)将二叉排序树上的各整数按降序写入磁盘的问题,要对二叉排序树进行“中序遍历”。 为了降序,“中序遍历”要采取“右根左”。为方便实现,先将整数写入一全局变量数组中,再写入 磁盘文件中。int i = 0,a[n] ;//长度为n的整型数组void InOrder( BSTree t)\t//先右后左的中序遍历二叉排序树t,假定该树t已生成{if(t){ InOrder (t->rchild)a[ i++] =t->key ;InOrder (t->lchild)}} //InOrdervoid SaveToDisk ()//将二叉排序树上的各整数按降序写入磁盘(FILE *fp;if ( ( fp = fopen( '* filel.dat\" , \"wb\" ) ) = = null){ printf( \"file can not open! \\n\" ) ;exit(0) ; }fwrite(a,sizeof (int) ,n,fp) ;//将数组a中的n个整数写入磁盘fclose(fp) ;//关闭文件}//SaveToDisk"},{"id":"learncoder_99_19201","stem":"在一棵表示有序集S的二叉搜索树(binary search tree)中,任意一条从根到叶结点的路径将S分为三部分:在该路径左边结点中的元素组成的集合S1在该路径上的结点中的元素组成 的集合S2;在该路径右边结点中的元素组成的集合S3。S=S1US2US3。若对于任意的awS3, 6∈S2,c∈S、3是否总有a《【《<=b<=c?为什么?","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是二叉排序树的定义。二叉排序树(Binary Sort Tree)又称二叉 查莪树。它或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所 有结点的值均小于它的根结点的值(2)若右子树不空,则右子树上所有结点的值均大于它的根 结点的值;(3 )左、右子树也分别为二叉排序树。","type":"short_answer","answer":"该结论不成立。对于任一a∈A,可在B中找到最近祖先fo a在f的左子树上。 对于从f到根结点路径上所有b∈B,有可能f在b的右子树上,因而a也就在b的右子树上, 这时a>b,因此不成立。同理可以证明b<c不成立。而对于任何a∈ A, c∈ C有a<c."},{"id":"learncoder_99_19204","stem":"设有5个数据do,for,if,repeat, while,它们排在一个有序表中,其査我概率分别为p1 = 0.2,p2=0.15,p3 = 0. l,p4 = 0.03,p5=0.016而查找它们之间不存在数据的概率分别为q0=0.2,q1=0.15 ,q2 =0.1 ,q3 =0.03 ,q4 = 0.02 ,q5=0.01o\t-<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第5章/image1.png'/>(1)试画出对该有序表采用顺序查找时的判定树和采用折半查找时的判定树。。(2)分别计算顺序查找时的查找成功和不成功的平均查找长度,以及折半查找时的查找成 功和不成功的平均查找长度。(3)判定是顺序查找好,还是折半查找好。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是分块查找\t","type":"short_answer","answer":"(1)顺序查找判定树\t<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第5章/image5.png'/>r[ik-1]*key进行比较,找到合适的块以后在块内顺序查找;若N很大,也可用折半查找,以确定 x所在块,在块内顺序查我。\t"},{"id":"learncoder_99_19205","stem":"请编写一个判别给定二叉树是否为二叉排序树的算法,设二叉树用左右链法存储。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是二叉排序树的特点及遍历算法。根据二叉排序树中序遍历所 得结点值为增序的性质,在遍历中将当前遍历结点与其前驱结点值比较,即可得出结论,为此设 全局指针变量pre (初值为null)和全局变量flag,初值为true。若非二叉排序树,则置flag为 false .\t","type":"short_answer","answer":"typedef struct node{ datatype data ;\tstruct node * lchild, * rchild ;} * BTree ;\tvoid JudgeBST(BTree t, int flag)\t判断二叉树是否是二叉排序树\t{ if(t! =null && flag)\t{ Judgebst( t->lchild, flag) ;// 中序遍历左子树if(pre = = null) pre =t ;;;//中序遍历的第一个结点不必判断else if ( pre->data<t->data) pre = t;// 前驱指针指向当前结点\telse if { flag =flase; } //不是二叉排序树\tJudgebst (t->rchild,flag) ;// 中序遍历右子树 \t}//JudgeBST算法结束本题的另一算法是照定义,二叉排序树的左右子树都是二叉排序树,根结点的值大于左子树 中所有值而小于右子树中所有值,即根结点大于左子树的最大值而小于右子树的最小值。算法 如下: int JudgeBST( BTree t)\t//判断二叉树t是否是二叉排序树{ if( t = = null) return true;\tif( Judgebst( t->lchild )&& Judgebst(t->rchild) )/、/若左右子树均为二叉排序树{ m = max(t->lchild) ; n = min(t->rchild) ;//左子树中最大值和右子树中最小值 return(t->data>m && t->data<n);(else return false;// 不是二叉排序树\t} //结束 judgebst\tint max(BTree p)//求二叉树左子树的最大值{ if(p= =null) return -maxint;//返回机器最小整数\telse{ while(p->rchild! = null)p = p->rchild;return p->data;(\tint min( BTree p)//求二叉树右子树的最小值{ if( p = = null) return maxint ;//返回机器最大整数\telse{ while(p->lchild! = null)p = p->lchild;\treturn p->data;}}"},{"id":"learncoder_99_19199","stem":"HASH方法的平均查找路长决定于什么?是否与结点个数N有关?处理冲突的方法主要有哪些?","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是HASH(哈希)查找。HASH方法的平均查找路长主要取决于 负载因子(表中有元素数与表长之比),它反映了哈希表的装满程度,该值一般取0. 65~0. 9与 结点个数N有关。解决冲突方法:(1)开放定址法。形成地址序列的公式是Hi=(H(key)+di)%m\t其中m是表长,di是增量。\t(2)链地址法。将关键字为同义词的记录存储在同一链表中,散列表地址区间用H[m-1]表示,分量初始值为空指针。\t","type":"short_answer","answer":" 见解析。\t"},{"id":"learncoder_99_19202","stem":"试画出从空树开始,由字符序列(t,d,e,s,u,g,b,j,a,k,r,i)构成的二叉平衡树,并为每 一次的平衡处理指明旋转类型。\t-","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是平衡二叉树的建立。平衡二叉树(Balanced Binary Tree)又被 称为AVL树,是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差 的绝对值不超过1,并且左右两个子树都是r棵平衡二叉树。建立方法从根结点开始,小于插在 左边,大于插在右边,不平衡则旋转。","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第5章/image3.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第5章/image4.png'/>"},{"id":"learncoder_99_19203","stem":"在数轴上有N个彼此相临不交的区间,每个区间下界上界都是整数。N个区间顺序为1-No要查找给定的x落入的区间号,你认为应怎样组织数据结构?选择什么方法最快?并简述 其原因","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是分块查找\t","type":"short_answer","answer":"按索引顺序查找分块组织数据。N个区间分块有序;区间(块)内无序,将块内最大关键字 置于块内最后一个位置,即向量下标为—其中上1,2,,,,N-1’为每区,,间的长度(最后一个 区间的最大关键字置于向量最后一个位置)。查找时,若N较小,可用顺序查找,依次将x与r[ik-1]*key进行比较,找到合适的块以后在块内顺序查找;若N很大,也可用折半查找,以确定 x所在块,在块内顺序查我。\t"},{"id":"learncoder_99_19200","stem":"对下面'的关键字集{30,15,21,40,25,26,36,37}若查找表的装填因子为0. 8,采用线性探 测再散列方法解决冲突,完成下列内容:(1)设计哈希函数;(2)画出哈希表;(3)计算查找成功和查找失败的平均查找长度。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是HASH函数的设计、地址计算、冲突处理、查找效率。","type":"short_answer","answer":"由于装填因子为0.8,关键字有8个,所以表长为8/0.8 = 10。\t(1)用除留余数法,哈希函数为H(key)=% 7-\t哈希表如下:\t(2)计算查找失败时的平均查找长度,必须计算不在表中的关键字,当其哈希地址为i( 0<= i<=m-1)时的查找次数。本例中m = 10o故查找失败时的平均查找长度为:ASLunsucc = (9+84-7+6+5+4+3+2+1+1)/10 = 4.6\tASLsucc = 16/8 =2,((16为比较次数之和)"},{"id":"learncoder_99_19207","stem":"写出从哈希表中删除关键字为K的一个记录的算法,设哈希函数为H,解决冲突的方法 为链地址法。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是HASH表基本算法。用链地址法解决冲突的哈希表是一个指 针数组,数组分量均是指向单链表的指针,(第i个)单链表结点有两个域,一个是哈希地址为i 的关键字,另一个是指向同义词结点的指针。删除算法与单链表上删除算法类似。","type":"short_answer","answer":"typedef struct node{ keytype key;struct node * next;(HSNode; * HSListtypedef struct node * HLK;void Delete(HLK HT[ ] ,keytype K)//用链地址法解决冲突,从哈希表中删去关键字为K的记录{ i = H(K);//用哈希函数确定关键字K的哈希地址if(HT[i] = =null) { printf(”无被删除记录\\n”);exit(0) ;}HLKp,q; p = H[i];q = p; //p指向当前记录(关键字),q是p的前驱while(p && p->key! =k) { q = p;p = p->next;}if(p= = null) ( printf( \"无被删除记录\");exit(0);}if(q = =H[i]) //被删除关键字是链表中第一个结点{ HT[ i] =HT[ i] . next;free(p);}else) q->next = p->next;free(p) ; }} //结束 Delete"},{"id":"learncoder_99_19208","stem":"假设一棵平衡二叉树的每个结点都标明了平衡因子b,试设计一个算法,求平衡二叉树的高度。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是平衡二叉树的算法。因为二叉树各结点已标明了平衡因子b 故从根结点开始记树的层次。根结点的层次为1,每下一层,层次加1,直到层数最大的叶子结 点,这就是平衡二叉树的高度。当结点的平衡因子b为0时,任选左右一分支向下查找,若b不 为0,则沿左(当b=1时)或右(当b=-1时)向下查找。","type":"short_answer","answer":"int Height(BSTree t)//求平衡二叉树t的高度{level = 0 ;p = t;while (p)(level++; //树的高度增1if(p->bf<0) p = p->rchild;//bf= -1 沿右分枝向下else p = p->lchild ; //bf> = 0 沿左分枝向下} //whilereturn (level) ;//平衡二叉树的高度}//算法结束"},{"id":"learncoder_99_19206","stem":"写出在二叉排序树中删除一个结点的算法,使删除后仍为二叉排序树。设删除结点由指针P所指,其双亲结点由指针f所指,并假设被删除结点是其双亲结点的右孩子。用高级语言将 上述算法写为过程形式。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是二叉排序树的基本算法。","type":"short_answer","answer":"void Delete(BSTree t,p)//在二叉排序树t中,删除f所指结点的右孩子(由p所指向)的算法{if(p->lchild= =null) {f->rchild = p->rchild ;free( p) ;} //p 无左子女else //用p左子树中的最大值代替p结点的值\t{ q = p->lchild; s = q ;\twhile(q->rchild) { s = q;q = q->rchild ; }//查 p 左子树中序序列最右结点if(s==p->lchild) //p左子树的根结点无右子女 { p->data = s->data;p->lchild = s->lchild;free(s);}else { p->data = q->data; s->rchild = q->lchild ;free( q) ;}\t}}//Delete"},{"id":"learncoder_99_19194","stem":"设哈希表长为14,哈希函数是H(key) = key% 11,表中已有数据的关键字为15、38、61、84 共4个,现要将关键字为49的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是 ()( )","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是散列法查找。地址计算公式为\t(Hi(key) =(H(key) )+di)% B,\t其中di±12,±22,…,土k2称为二次探测再散列。先计算加,后计算减,计算后选D。","type":"choice","options":{"A":"8","C":"5","D":"9","B":"3"},"answer":"D"},{"id":"learncoder_99_19195","stem":"散列函数有一个共同的性质,即函数值应当以(\t)取其值域的每个值。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是散列函数性质。为保证其地址的随机性,函数值应当以何等概 率取其值域的每个值。所以应选D\t.","type":"choice","options":{"C":"平均概率","D":"同等概率","A":"最大概率","B":"最小概率"},"answer":"D"},{"id":"learncoder_99_19192","stem":"下面关于B和B+树的叙述中,不正确的是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是B-树和B+树的定义。B-树定义见第8题,B+树是应文件系统 所需而出的一种矿树的变型树。一棵m阶的B+树和m阶的B-树的差异在于 ⑴有n棵子树的结点中含有n个关键字。(2)所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。\t(3)所有的非终端结点可以看成是索引部分,结点中仅含其子树(根结点)中的最大(或最 小)关键字。通常在B+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。 所以B+树能有效地支持随机检索和序检索。显然应选Co","type":"choice","options":{"B":"B树和B+树都可用于文件的索引结构","C":"B树和B+树都能有效地支持顺序检索","D":"B树和B+树都能有效地支持随机检索","A":"B树和B+树都是平衡的多叉树"},"answer":"C"},{"id":"learncoder_99_19193","stem":"在一棵含有n个关键字的m阶Bˉ树中进行查找,至多读盘(\t)次。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是B-树的查找。在B-树上进行查找需比较的结点数最多为B- 树的高度,B-树的髙度与B-树的阶m和键值总数n有关⑴设B-树某结点的子树数为Ci,则该结点的关键字数Ni=Ci-1对于有k个结点的B- 树,有\t ∑Ni=∑()(Ci-1)=∑Ci-k (1<=i<=k)\t\t(1)因为B树上的关键字数,即 ∑Ni=n (1<=i<=k)\t(2)而B-树上的子树数可这样计算:每个结点(除根结点)都是一棵子树,设叶子(子树)数为 s;则 \t ∑Ci=(k-1)+s (1<=i<=k)\t(3)综合式(1)、式(2)、式(3),有h= n+l.(2)根据B-树的定义,B-树的第一层(即根结点)的结点数至少为1个,第二层的结点数至 少为2,第三层的结点数至少为2(m/2),第四层的结点数至少为2(m/2 ),2,以此类推,第h+1 层的结点数至少为2(m/2)h-1。综上所述,可得到如下不等式:h<=l+log[m/2](n+l)/2,所以选 C\t","type":"choice","options":{"D":"1+logn.2(m+1/2)","A":"log2n","C":"1+logm/2(n+1/2)","B":"l+log2n"},"answer":"C"},{"id":"learncoder_99_19196","stem":"将10个元素散列到100 000个单元的哈希表中,则()产生冲突","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是散列法查找特点。由于散列函数的,选取,仍然有可能产生地址 冲突,所以应选C。","type":"choice","options":{"D":"不确定","B":"-定不会","C":"仍可能会","A":"一定会"},"answer":"C"},{"id":"learncoder_99_19188","stem":"折半查找的时间复杂性为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是折半查找的效率。其查找效率与比较次数有关,折半查找成功 时,关键字比较次数最多不超过[[log2n]+l,所以其效率为0(log2n),应选D。\t","type":"choice","options":{"C":"O(nlog2n)","D":"O(log2n)","B":"0(n)","A":"0(n2)"},"answer":"D"},{"id":"learncoder_99_19187","stem":"具有12个关键字的有序表,折半查找的平均查找长度为(\t)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第5章/header4.xml'/>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是折半查找的思想。把关键字按完全二叉树的形式画岀查找树, 按结点高度计算比较次数。12个结点可以画出高度为4的完全二叉树,1层1个结点比较1次, 2层2个结点比较2次,3层4个结点比较3次,4层5个结点比较4次,35/12=3.1,应选A。","type":"choice","options":{"B":"LR","D":"RR","C":"RL","A":"LL"},"answer":"A"},{"id":"learncoder_99_19191","stem":"下列关于m阶B树的说法错误的是( )。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是m阶B-树的定义。一棵m阶的B-树或为空,或满足下列条 件:(1)树中每个结点至多有m个孩子;(2)除根结点和叶子结点外,其他每个结点至少有m/2 个孩子(3)若根结点不是叶子结点,则至少有2个孩子;(4)所有叶子结点都出现在同一层,叶 子结点不包含任何关键字信息;(5)所有的非叶结点都包含下列数据:(n,A0,K1,A1,K2....Kn,An)。且Ki<Ki+1综上所述,只有D不全面,所以应选D。","type":"choice","options":{"D":"根结点中的数据是有序的","C":"非叶结点至少有m/2(m为偶数)或m/2+l((m为奇数)棵子树","A":"根结点至多有m棵子树","B":"所有叶子都在同一层次上"},"answer":"D"},{"id":"learncoder_99_19189","stem":"既希望较快地查找又便于线性表动态变化的查找方法是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是各类查找的特点。顺序査找,算法简单,且对表的结构无任何 要求,无论是用向量还是用链表来存放结点,也无论结点之间是否按关键字有序,它都同样适用, 但查找效率低。\t折半查找要求线性表中结点按关键字有序,并且要用数组作为表的存储结构,其不适合动态 变化O\t索引顺序查找分为两部分,.由\"分块有序”的线性表和索引表组成,查找效率较高,又便于线 性表动态变化。哈希法查找以结点的关键字K为自变量,通过一个确定的函数(即映射)关系H,计算岀对 应的函数值H(K),然后把这个值解释为结点的存储地址,将结点存入H( K)所指的存储位置上. 在查找时,根据要查找的关键字用同一函数H计算出地址,再到相应的单元里去取要找的结点。 根据题意,应选C。\t","type":"choice","options":{"C":"索引顺序查找","D":"哈希法查找","B":"折半查找","A":"顺序查找"},"answer":"C"},{"id":"learncoder_99_19190","stem":"在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A的 左孩子的平衡因子为0,右孩子的平衡因子为1,则应作()型调整以使其平衡。","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是平衡二叉树的旋转。因为不平衡点A的左予树平衡因子为0, 若插入到左子树上不会影响4的平衡因子,所以只能插入到仏的右子树上,而右子树的因子为 1,所以只能是插在其左子树上,应该是RL型,所以选择C\t\t","type":"choice","options":{"B":"LR","D":"RR","A":"LL","C":"RL"},"answer":"C"},{"id":"learncoder_99_19185","stem":"若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为(\t)","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是顺序查找长度ASL的计算。假设列表长度为n那么查找第亍 个数据元素时需进行n-i+1次比较,即Ci=n-i+1.又假设查找每个数据元素的概率相等,即 Pi=1/n,则顺序查找算法的平均查找长度为: , <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第5章/image2.png'/>所以应选C。\t\t","type":"choice","options":{"C":"(n+l)/2","B":"n/2","A":"(n-1)/2","D":"n"},"answer":"C"},{"id":"learncoder_99_19186","stem":"适用于折半查找的表的存储方式及元素排列要求为(\t)","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"此题考查的知识点是折半查找的特点,折半查找要求顺序存储且元素有序,所以应 选D。\t","type":"choice","options":{"D":"顺序方式存储,元素有序","C":"顺序方式存储,元素无序","A":"链接方式存储,元素无序","B":"链接方式存储,元素有序"},"answer":"D"},{"id":"learncoder_99_487","stem":"<p>分别设计有序表的折半查找(用递归实现),有序表的折半查找(用非递归实现)的算法。待查找的元素的关键字为整数,用户可由键盘输入表中元素和待查找的元素,要求输入的数据以“0”标志结束。[扬州大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p>查找——折半查找法<br>  【参考答案】用C语言实现功能,代码如下:<br>  #include&lt;stdio.h&gt;<br>  #include&lt;stdlib.h&gt;<br>  #define N100<br>  Typede fint Status;<br>  Typedef int ElemType;<br>  typedef struct{//创建有序表<br>  Elem Type*list;<br>  Int length;<br>  {SqList;<br>  Status Creat—SearchTable(SqList&amp;st){//创建查找表<br>  ElemType a[N];<br>  Printf(\"请输入您要输入的数据总数:(不大于100)\");<br>  scanf(\"%d\",&amp;st.length);<br>  st.list=(ElemType*)malloc(st.length*sizeof(ElemType));<br>  if(!st.list)<br>  exit(-1);<br>  for(inti=0;i&lt;st.length;i++))<br>  printf(\"请输入第%d个数据\",i+1);<br>  scanf(\"%d\",&amp;a[i]);<br>  }<br>  int j,k,t,p;<br>  for(j=0;j&lt;st.length-l;j++){/选择法对数据进行排序<br>  P=j;<br>  for(k=j;k&lt;st.length;k++))if(a[k]&lt;a[p])<br>  p=k;<br>  t=a[p];a[p]=a[j];a[j]=t;<br>  }<br>  }<br>  for(inti=0;i&lt;st.length;i++){//把已经排好序的数据放入表中<br>  st.list[i]=a[i];<br>  }<br>  }<br>  Status Binary→Search(SqListst,ElemTypekey){//非递归的折半查找<br>  Int low,mid,high;<br>  low=0;<br>  high=st.length-1;<br>  while(low&lt;=high){<br>  mid=(low+high)/2;<br>  if(key==st.list[mid])<br>  return mid;<br>  else if(key&lt;st.list[mid])<br>  high=mid-1;<br>  else<br>  low=mid+1;<br>  }<br>  return 0;<br>  }<br>  Status Binary→Search→recur(SqListst,intlow,inthigh,ElemType key){<br>  Int mid=(low+high)/2;<br>  if(low&gt;high)<br>  return0;<br>  if(key==st.list[mid])<br>  return mid;<br>  else if(key&lt;st.list[mid])<br>  Binary→Search→recur(st,low,mid-1,key);<br>  else<br>  Binary→Search一recur(st,mid+1,high,key);<br>  }<br>  Int main(){<br>  ElemType key;<br>  int flag,p=0;<br>  SqList st;<br>  if(!Creat→SearchTable(st))<br>  return 0;<br>  Printf(\"请输入您要查找的数据:\");<br>  scanf(\"%d\",&amp;key);<br>  while(!p){<br>  printf(\"请选择您想使用的折半查找方式,“1”代表非递归的折半查找方式,“2”表示递归的折半查找方式。“0”表示退出\");<br>  scanf(\"%d\",&amp;flag);<br>  if(flag==0llflag==11Iflag==2)<br>  p=l;<br>  }<br>  if(flag==l){<br>  if(!Binary→Search(st,key))<br>  Printf(\"您要查找的数据不存在\");<br>  else<br>  printf(\"值为%d的数据在表中\",key);<br>  }<br>  if(flag==2){<br>  if(!Binary→Search→recur(st,0,st.length,key))<br>  printf(\"您要查找的数据不存在\");<br>  else<br>  printf(\"值为%d的数据在表中\",key);<br>  }<br>  system(\"pause\");<br>  return 0;</p>","type":"short_answer","answer":"<p>用C语言实现功能,代码如下:<br>  #include&lt;stdio.h&gt;<br>  #include&lt;stdlib.h&gt;<br>  #define N100<br>  Typede fint Status;<br>  Typedef int ElemType;<br>  typedef struct{//创建有序表<br>  Elem Type*list;<br>  Int length;<br>  {SqList;<br>  Status Creat—SearchTable(SqList&amp;st){//创建查找表<br>  ElemType a[N];<br>  Printf(\"请输入您要输入的数据总数:(不大于100)\");<br>  scanf(\"%d\",&amp;st.length);<br>  st.list=(ElemType*)malloc(st.length*sizeof(ElemType));<br>  if(!st.list)<br>  exit(-1);<br>  for(inti=0;i&lt;st.length;i++))<br>  printf(\"请输入第%d个数据\",i+1);<br>  scanf(\"%d\",&amp;a[i]);<br>  }<br>  int j,k,t,p;<br>  for(j=0;j&lt;st.length-l;j++){/选择法对数据进行排序<br>  P=j;<br>  for(k=j;k&lt;st.length;k++))if(a[k]&lt;a[p])<br>  p=k;<br>  t=a[p];a[p]=a[j];a[j]=t;<br>  }<br>  }<br>  for(inti=0;i&lt;st.length;i++){//把已经排好序的数据放入表中<br>  st.list[i]=a[i];<br>  }<br>  }<br>  Status Binary→Search(SqListst,ElemTypekey){//非递归的折半查找<br>  Int low,mid,high;<br>  low=0;<br>  high=st.length-1;<br>  while(low&lt;=high){<br>  mid=(low+high)/2;<br>  if(key==st.list[mid])<br>  return mid;<br>  else if(key&lt;st.list[mid])<br>  high=mid-1;<br>  else<br>  low=mid+1;<br>  }<br>  return 0;<br>  }<br>  Status Binary→Search→recur(SqListst,intlow,inthigh,ElemType key){<br>  Int mid=(low+high)/2;<br>  if(low&gt;high)<br>  return0;<br>  if(key==st.list[mid])<br>  return mid;<br>  else if(key&lt;st.list[mid])<br>  Binary→Search→recur(st,low,mid-1,key);<br>  else<br>  Binary→Search一recur(st,mid+1,high,key);<br>  }<br>  Int main(){<br>  ElemType key;<br>  int flag,p=0;<br>  SqList st;<br>  if(!Creat→SearchTable(st))<br>  return 0;<br>  Printf(\"请输入您要查找的数据:\");<br>  scanf(\"%d\",&amp;key);<br>  while(!p){<br>  printf(\"请选择您想使用的折半查找方式,“1”代表非递归的折半查找方式,“2”表示递归的折半查找方式。“0”表示退出\");<br>  scanf(\"%d\",&amp;flag);<br>  if(flag==0llflag==11Iflag==2)<br>  p=l;<br>  }<br>  if(flag==l){<br>  if(!Binary→Search(st,key))<br>  Printf(\"您要查找的数据不存在\");<br>  else<br>  printf(\"值为%d的数据在表中\",key);<br>  }<br>  if(flag==2){<br>  if(!Binary→Search→recur(st,0,st.length,key))<br>  printf(\"您要查找的数据不存在\");<br>  else<br>  printf(\"值为%d的数据在表中\",key);<br>  }<br>  system(\"pause\");<br>  return 0;&nbsp;&nbsp;<br></p>"},{"id":"learncoder_99_486","stem":"<p>已知输入数据序列为(58,68,42,10,88,32,70,52,55,46),给出建立3阶B^-树示意图,再给出删除55,70后的B^-树。[南京航空航天大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p>查找——B树及其基本操作,B^+树的基本概念<br>  【参考答案】(1)建立3阶B^-树的步骤如下:<br>   插入58,68,节点内关键字个数不超过「m/2」=2,不会引起分裂。<br>  ②继续插人42,引起分裂,节点内第「m/2」个关键字58上升为父节点。<br>  ③将输入数据序列中的其余元素依次按照①和②的规则进行插入,直到输入数据序列中的元素全部插人。<br>  该输入数据序列建立3阶B^-树的过程如下图(a)?(n)所示,最终建立的3阶B^-树如下图(n)所示。<br>  <br>  <br>  <br>  (2)在B^-树中删除55,70的步骤如下:<br>  ①因为55在终端节点,且兄弟节点够借,所以删除55,46上升为父节点,52下降为子节点。<br>  ②因为70不在终端节点,所以删除70,68上升为父节点。<br>  删除55,70的过程如下图(A)?(E)所示,删除后调整为3阶B^-树如下图(E)所示。<br>  <br>  </p>","type":"short_answer","answer":"<p>(1)建立3阶B^-树的步骤如下:<br>   插入58,68,节点内关键字个数不超过「m/2」=2,不会引起分裂。<br>  ②继续插人42,引起分裂,节点内第「m/2」个关键字58上升为父节点。<br>  ③将输入数据序列中的其余元素依次按照①和②的规则进行插入,直到输入数据序列中的元素全部插人。<br>  该输入数据序列建立3阶B^-树的过程如下图(a)?(n)所示,最终建立的3阶B^-树如下图(n)所示。<br>  <br>  <br>  <br>  (2)在B^-树中删除55,70的步骤如下:<br>  ①因为55在终端节点,且兄弟节点够借,所以删除55,46上升为父节点,52下降为子节点。<br>  ②因为70不在终端节点,所以删除70,68上升为父节点。<br>  删除55,70的过程如下图(A)?(E)所示,删除后调整为3阶B^-树如下图(E)所示。<br>  <br>  &nbsp;&nbsp;<br></p>"},{"id":"learncoder_99_485","stem":"<p>将关键字序列(7,8,30,11,18,9,14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组,散列函数为H(key)=(key * 3)mod7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。[全国联考2010年]<br>  (1)请画出所构造的散列表。<br>  (2)分别计算等概率情况下查找成功和查找不成功的平均查找长度。</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p>查找——散列(Hash)表<br>  【参考答案】(1)关键字序列中有7个元素,装填因子为0.7,则散列表的长度为7/0.7=10。<br>  散列表存储在一维数组中,所以一维数组的大小为10,数组下标为0?9。计算7个关键字在散列表中的存储位置的过程如下表所示。<br>  关键字<br>  函数<br>  结果<br>  7<br>  H(7)=(7x3)mod1=0<br>  存放散列表,下标为0<br>  8<br>  H(8)=(8x3)mod7=3<br>  .存放散列表,下标为3<br>  30<br>  H (30)=(30x3)mod7=6<br>  存放散列表,下标为6<br>  11<br>  H(11)=(11x3)mod7=5<br>  存放散列表,下标为5<br>  18<br>  d(5)=(18x3)mod7=5<br>  发生冲突<br>  18<br>  d(5)=(5+1)mod10=6<br>  线性探测法处理冲突,再次发生冲突<br>  18<br>  d(6)~(6+1)mod10=7<br>  线性探测法处理冲突,存放散列表,下标为7<br>  9<br>  H(9)=(9x3)mod7=6<br>  发生冲突<br>  9<br>  d(6)=(6+1)mod10=7<br>  线性探测法处理冲突,再次发生冲突<br>  9<br>  d(7)=(7+1)mod10=8<br>  线性探测法处理冲突,存放散列表,下标为8<br>  14<br>  H(14)=(14x3)mod7=0<br>  发生冲突<br>  14<br>  d(0)=(0+1)mod10=1<br>  线性探测法处理冲突,存放散列表,下标为1<br>  构造出的散列表如下表所示。<br>  下标<br>  0<br>  1<br>  2<br>  3<br>  4<br>  5<br>  6<br>  7<br>  8<br>  9<br>  关键字<br>  7<br>  14<br>  <br>  8<br>  <br>  11<br>  30<br>  18<br>  9<br>  <br>  探测次数<br>  1<br>  2<br>  <br>  1<br>  <br>  1<br>  1<br>  3<br>  3<br>  <br>  (2)查找成功的平均查找长度S_n是指查找到散列表中已有元素的平均探测次数,它是找到散列表中各个已有元素的探测次数的平均值。等概论情况下,查找成功的平均查找长度为<br>  <br>  查找不成功的平均查找长度U_n是指在散列表中查找不到待查的元素,但是找到插入位置的平均探测次数,它是要插入新元素时为找到空闲地址的探测次数的平均值。对于任意关键字key,H(key)都在0?6范围内取值。在查找不成功的情况下,当H(key)=0时,先比较7与14,直到比较到下标为2的空闲单元时,确定查找不成功。其他同理,如下表所示。<br>  散列函数<br>  比较次数<br>  H(key)=0<br>  3<br>  H(key)=1<br>  2<br>  H(key)=2<br>  1<br>  H(key)=3<br>  2<br>  (续表)<br>  散列函数<br>  比较次数<br>  H(key)=4<br>  1<br>  H(key)=5<br>  5<br>  H(key)=6<br>  4<br>  由上表可知,等概论情况下,查找不成功的平均查找长度为<br>  </p>","type":"short_answer","answer":"<p>(1)关键字序列中有7个元素,装填因子为0.7,则散列表的长度为7/0.7=10。<br>  散列表存储在一维数组中,所以一维数组的大小为10,数组下标为0?9。计算7个关键字在散列表中的存储位置的过程如下表所示。<br>  关键字<br>  函数<br>  结果<br>  7<br>  H(7)=(7x3)mod1=0<br>  存放散列表,下标为0<br>  8<br>  H(8)=(8x3)mod7=3<br>  .存放散列表,下标为3<br>  30<br>  H (30)=(30x3)mod7=6<br>  存放散列表,下标为6<br>  11<br>  H(11)=(11x3)mod7=5<br>  存放散列表,下标为5<br>  18<br>  d(5)=(18x3)mod7=5<br>  发生冲突<br>  18<br>  d(5)=(5+1)mod10=6<br>  线性探测法处理冲突,再次发生冲突<br>  18<br>  d(6)~(6+1)mod10=7<br>  线性探测法处理冲突,存放散列表,下标为7<br>  9<br>  H(9)=(9x3)mod7=6<br>  发生冲突<br>  9<br>  d(6)=(6+1)mod10=7<br>  线性探测法处理冲突,再次发生冲突<br>  9<br>  d(7)=(7+1)mod10=8<br>  线性探测法处理冲突,存放散列表,下标为8<br>  14<br>  H(14)=(14x3)mod7=0<br>  发生冲突<br>  14<br>  d(0)=(0+1)mod10=1<br>  线性探测法处理冲突,存放散列表,下标为1<br>  构造出的散列表如下表所示。<br>  下标<br>  0<br>  1<br>  2<br>  3<br>  4<br>  5<br>  6<br>  7<br>  8<br>  9<br>  关键字<br>  7<br>  14<br>  <br>  8<br>  <br>  11<br>  30<br>  18<br>  9<br>  <br>  探测次数<br>  1<br>  2<br>  <br>  1<br>  <br>  1<br>  1<br>  3<br>  3<br>  <br>  (2)查找成功的平均查找长度S_n是指查找到散列表中已有元素的平均探测次数,它是找到散列表中各个已有元素的探测次数的平均值。等概论情况下,查找成功的平均查找长度为<br>  <br>  查找不成功的平均查找长度U_n是指在散列表中查找不到待查的元素,但是找到插入位置的平均探测次数,它是要插入新元素时为找到空闲地址的探测次数的平均值。对于任意关键字key,H(key)都在0?6范围内取值。在查找不成功的情况下,当H(key)=0时,先比较7与14,直到比较到下标为2的空闲单元时,确定查找不成功。其他同理,如下表所示。<br>  散列函数<br>  比较次数<br>  H(key)=0<br>  3<br>  H(key)=1<br>  2<br>  H(key)=2<br>  1<br>  H(key)=3<br>  2<br>  (续表)<br>  散列函数<br>  比较次数<br>  H(key)=4<br>  1<br>  H(key)=5<br>  5<br>  H(key)=6<br>  4<br>  由上表可知,等概论情况下,查找不成功的平均查找长度为<br>  &nbsp;&nbsp;<br></p>"},{"id":"learncoder_99_484","stem":"<p>设包含4设包含4个数据元素的集合S={\"do\",\"for\",\"rept\",\"while\"},各元素的查找概率依次为p1=0.35,p2=0.15,p3=0.15,p4=0.35。将S保存在一个长度为4的顺序表中,采用折半查找法,查找成功时的平均查找长度为2.2。请回答:[全国联考2013年]</p><p>  (1)若采用顺序存储结构保存S,且要求平均查找长度更短,则元素应如何排列?应使用何种查找方法?查找成功时的平均查找长度是多少?<br>  (2)若采用链式存储结构保存且要求平均查找长度更短,则元素应如何排列?应使用何种查找方法?查找成功时的平均查找长度是多少?</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p>考点】查找折半查找法<br>  【参考答案】(1)采用顺序存储结构,S中的数据元素按照查找概率的降序排列,使用顺序查找法。<br>  查找成功时的平均查找长度=0.35x1+0.35x2+0.15x3+0.15x4=2.1。<br>  (2)答案一:采用链式存储结构,S中的数据元素构成单链表,按照查找概率的降序排列,使用顺序查找法。<br>  查找成功时的平均查找长度=0.35xl+0.35x2+0.15x3+0.15x4=2.1。<br>  答案二:构造二叉排序树,采用二叉链表存储,使用二叉排序树的查找方法,其结构有两种,如下图所示。<br>  <br>  查找成功时的平均查找长度=0.15xl+0.35x2+0.35x2+0.15x3=2.0。</p>","type":"short_answer","answer":"<p>(1)采用顺序存储结构,S中的数据元素按照查找概率的降序排列,使用顺序查找法。<br>  查找成功时的平均查找长度=0.35x1+0.35x2+0.15x3+0.15x4=2.1。<br>  (2)答案一:采用链式存储结构,S中的数据元素构成单链表,按照查找概率的降序排列,使用顺序查找法。<br>  查找成功时的平均查找长度=0.35xl+0.35x2+0.15x3+0.15x4=2.1。<br>  答案二:构造二叉排序树,采用二叉链表存储,使用二叉排序树的查找方法,其结构有两种,如下图所示。<br>  <br>  查找成功时的平均查找长度=0.15xl+0.35x2+0.35x2+0.15x3=2.0。&nbsp;&nbsp;<br></p>"},{"id":"learncoder_99_483","stem":"<p>设线性表的长度为n,则顺序查找成功的平均比较次数为( )。[杭州师范大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——顺序查找法<br>  【解析】顺序查找又称为线性查找,主要用于在线性表中进行查找。顺序查找的算法思想如下:<br>  ①从线性表中的第一个元素开始,顺序用表中各个元素的关键码依次与关键字比较。<br>  ②如果某个元素的关键码匹配关键字,则查找成功。<br>  ③如果查找到最后一个元素还没有匹配关键字,则查找失败。<br>  线性表的长度为n,设在线性表中第i个元素的查找概率为pi(0≦i≦n-1),在查找概率相等时,pi=1/n,则顺序查找成功的平均比较次数为</p>","type":"choice","options":{"A":"n","B":"( n+1)/2","C":"n/2","D":"(n-l)/2"},"answer":"B"},{"id":"learncoder_99_482","stem":"<p>高度为2的4阶B树,所含关键字个数至少是( ). [广东工业大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——B树及其基本操作、B^+树的基本概念<br>  【解析】一棵高度为2的4阶B树,根节点只有到达4个关键字的时候才能产生分裂,成为高度为2的B树。</p>","type":"choice","options":{"A":"4","B":"5","C":"3","D":"8"},"answer":"A"},{"id":"learncoder_99_481","stem":"<p>下列叙述中,不符合m阶B树定义要求的是( )。[全国联考2009年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——B树及其基本操作、B^+树的基本概念<br>  【解析】一棵m阶B树是一棵高度平衡的m叉排序树,或者是空树。在m阶B树中,每个节点最多有m棵子树,因此根节点最多有m棵子树,并且根节点至少有两个子女节点;所有的叶节点都出现在同一层上,并且不带信息;B树是排序树,因此各节点内关键字均升序或降序排列。在B^+树中,叶节点之间通过指针链接,而B树的叶节点之间不是通过指针链接的。</p>","type":"choice","options":{"A":"所有叶节点都在同一层上","B":"叶节点之间通过指针链接","C":"根节点最多有m棵子树","D":"各节点内关键字均升序或降序排列"},"answer":"B"},{"id":"learncoder_99_480","stem":"<p>已知一个长度为16的顺序表L,其元素按关键字有序排列。若采用折半查找法查找一个L中不存在的元素,则关键字的比较次数最多的是( )。[全国联考2010年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找折半查找法<br>  【解析】折半查找法的查找性能可以使用二叉判定树进行分析。当在顺序表中查找一个不存在的元素时,会查找失败,关键字的比较次数最多是log2(n+1),题中n=16,「log2(16+l)」=5,则最多比较5次。<br>  本题也可以画出草图找出答案。当待查找元素总是在最长的子查找区间中,关键字的比较次数最多,举例如下图所示。<br>  </p>","type":"choice","options":{"A":"7","B":"5","C":"6","D":"4"},"answer":"B"},{"id":"learncoder_99_479","stem":"<p>为提高散列(Hash)表的查找效率,可以采取的正确措施是( )。[全国联考2011年]<br>  Ⅰ.增大装填(载)因子<br>  Ⅱ.设计冲突(碰撞)少的散列函数<br>  Ⅲ.处理冲突(碰撞)时避免产生聚集(堆积)现象</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找一一散列(Hash)表<br>  【解析】散列表的查找效率与散列函数、处理冲突的方法及装填(载)因子有关。在散列表中,增大装填(载)因子会导致更加容易发生冲突,使散列表的查找效率降低;冲突越少,查找效率越高,因此设计冲突(碰撞)少的散列函数会提高散列表的查找效率;聚集(堆积)是指不同探查序列的关键字占据了可利用的空间地址,这时寻找某一关键字,不仅需要探查同义词的探查序列,也要探查其他非同义词的探查序列,导致探查时间增长,因此在处理冲突(碰撞)时避免产生聚集(堆积)现象。</p>","type":"choice","options":{"A":"仅I","B":"仅I、II","C":"仅II、III","D":"仅II"},"answer":"C"},{"id":"learncoder_99_478","stem":"<p>设有一棵3阶B树,如下图所示。删除关键字78得到一棵新B树,其最右叶节点所含的关键字是( )。[全国联考2012年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——B树及其基本操作、B^+树的基本概念<br>  【解析】被删关键字所在叶节点删除前关键字个数为「3/2」-1=1,这时与该节点相邻的左兄弟节点的关键字个数为「3/2」&gt;2,在这种情况下,删除关键字78后,把该节点的左兄弟节点中最大的关键字62移到双亲节点,并且把双亲节点中比被移关键字大的关键字65移到被删除节点处,达成新的平衡,如下图所示。<br>  </p>","type":"choice","options":{"A":"60","B":"65","C":"60,62","D":"62,65"},"answer":"B"},{"id":"learncoder_99_477","stem":"<p>在一株高度为2的5阶B树中,所含关键字的个数最少是( )。[全国联考2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——B树及其基本操作、B^+树的基本概念<br>  【解析】根据B树的性质,高度为2的5阶B树最少含有5个关键字。</p>","type":"choice","options":{"A":"7","B":"5","C":"14","D":"8"},"answer":"B"},{"id":"learncoder_99_476","stem":"<p>在一棵具有15个关键字的4阶B树中,含有关键字的节点个数最多是( )。 [全国联考2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——B树及其基本操作、B^+树的基本概念<br>  【解析】4阶B树是指一棵局度平衡的4叉查找树。在4阶B树中,根节点最少含有1个关键字,非根节点最少含有1个关键字,因此含有关键字的节点最多有15个。</p>","type":"choice","options":{"A":"15","B":"5","C":"10","D":"6"},"answer":"A"},{"id":"learncoder_99_475","stem":"<p>用哈希(散列)方法处理冲突(碰撞)时可能出现堆积(聚集)现象,下列选项中,会受堆积现象直接影响的是( )。[全国联考2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——散列(Hash)表<br>  【解析】线性探测方法容易产生“堆积(聚集)”的问题,即可利用的空闲地址被不同探查序列的关键字占用了,这时寻找某一关键字,不仅需要探查同义词的探查序列,也要探查其他非同义词的探查序列,导致探查时间增长,影响平均查找长度。</p>","type":"choice","options":{"A":"散列函数","B":"装填(装载)因","C":"存储效率","D":"平均查找长度"},"answer":"D"},{"id":"learncoder_99_474","stem":"<p>下列选项中,不能构成折半查找中关键字比较序列的是( )。[全国联考2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——折半查找法<br>  【解析】折半查找的判定树是一棵二叉查找树(二叉排序树),因此关键字比较序列构成的判定树应满足二叉查找树的要求。二叉查找树进行中序遍历,遍历序列是将二叉树各节点的关键字值按从小到大的顺序进行排列而成的序列。四个选项的查找路径构成的判定树如下图所示。<br>  <br>  由此可判断选项A不满足二叉查找树的要求,不能构成折半查找中关键字比较序列。</p>","type":"choice","options":{"A":"500,200,450,180","B":"180,200,500,450","C":"180,500,200,450","D":"500,450,200,180"},"answer":"A"},{"id":"learncoder_99_473","stem":"<p>B^+树不同于B树的特点之一是( )。[全国联考2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——B树及其基本操作、B^+树的基本概念<br>  【解析】B^+树是B树的一种特殊形式,它与B树的不同之处在于:①B^+树的所有关键字都在叶节点中;②叶节点包含所有关键字及其指针,且叶节点本身按照关键字值升序排列。因此,B^+树支持顺序查找,而B树不支持顺序查找。</p>","type":"choice","options":{"A":"0","B":"根节点至少有两个分支D.所有叶节点都在同一层上","C":"能支持顺序查找B.节点中含有关键字"},"answer":"C"},{"id":"learncoder_99_472","stem":"<p>在有n(n&gt;l000)个元素的升序数组A中查找关键字x,查找算法的伪代码如下所示。k=0;while(k&lt;n且A[k]&lt;x)k=k+3;<br>  if(k&lt;n且A[k]==x)查找成功;<br>  else if(k-l&lt;n且A[k-l]==x)查找成功;<br>  else if(k-2=n且A[k-2]==x)查找成功;<br>  else查找失败;<br>  本算法与折半查找算法相比,有可能具有更少比较次数的情形是( )。[全国联考2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——顺序查找法;折半查找法<br>  【解析】本题所述算法是对顺序查找法的改进,对于升序数组而言,关键字越靠前,比较次数越少。</p>","type":"choice","options":{"A":"0","B":"0","C":"当x接近数组结尾处D.当x位于数组中间位置","D":"当x不在数组中B.当x接近数组开头处"},"answer":"B"},{"id":"learncoder_99_469","stem":"<p>下列应用中,适合使用B^+树的是( )。[全国联考2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——B树及其基本操作、B^+树的基本概念<br>  <br>  【解析】B^+树的所有叶节点在同一层,按从小到大的顺序存放全部关键码,各个叶节点顺序链接。所有非叶节点可以看作是叶节点的索引,节点中的关键码与指向子树的指针构成对子树(下一层索引块)的索引项。叶节点中存放的是对实际数据记录的索引,每个索引项给出数据记录的关键码及实际存储地址。因此关系数据库系统中的索引适合使用B^+树。</p>","type":"choice","options":{"A":"网络中的路由表快速查找","B":"关系数据库系统中的索引","C":"编译器中的词法分析","D":"操作系统的磁盘空闲块管理"},"answer":"B"},{"id":"learncoder_99_468","stem":"<p>下列二叉树中,可能成为折半查找判定树(不含外部节点)的是( )。[全国联考2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.查找","analysis":"<p><br>  查找——折半查找法<br> 【解析】折半查找又称为二分法查找。在折半查找的过程中,总是以有序表的中间记录作为比较对象,并在中间记录处将表分割为两个子表,对子表继续上述操作。因此,根据折半查找的性质可知,折半查找的过程可用二叉树来描述,有序表中的每个记录对应着二叉树中的一个节点,该记录在有序表中的位置对应着节点中的值。通常称这个描述折半查找过程的二叉树为折半查找判定树。折半查找判定树是一棵二叉排序树,因此满足二叉排序树的性质。在折半查找判定树中,每个节点的值均大于其左子树上所有节点的值,小于其右子树上所有节点的值。如果四个选项的二叉树都是折半查找判定树,则加入简单的有序表后如下图所示。<br>  A选项,5和6相加再除以2,是向上取整;1和2相加再除以2,是向上取整;4和5相加再除以2,是向上取整;8和9相加再除以2,是向上取整;7和8相加再除以2,是向上取整。因此选项A是折半查找判定树。<br>  B选项,4和5相加再除以2,是向上取整;1和2相加再除以2,是向上取整;7和8相加再除以2,是向下取整;10和11相加再除以2,是向下取整。因此选项B不是折半查找判定树。<br>  C选项,2和3相加再除以2,是向下取整;3和4相加再除以2,是向上取整;7和8相加再除以2,是向上取整;6和7相加再除以2,是向下取整。因此选项C不是折半查找判定树。<br>  D选项,5和6相加再除以2,是向下取整;2和3相加再除以2,是向上取整;1和2相加再除以2,是向上取整;6和7相加再除以2,是向上取整;9和10相加再除以2,是向上取整。因此选项D不是折半查找判定树。</p>","type":"choice","options":{"A":"0","B":"0"},"answer":"B"},{"id":"learncoder_149_16131","stem":"给定有 m 个整数的递增有序数组 a[1..m]和有 n 个整数的递减有序数组 b[1..n],试写出算法:将数组 a 和 b 归并为递增有序数组 c[l..m+n]。(要求:算法的时间复杂度为 O(m+n))【华中理工大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"数组 A 和 B 的元素分别有序,欲将两数组合并到 C 数组,使 C 仍有序,应将 A 和 B 拷贝到 C,只要注意 A 和 B 数组指针的使用,以及正确处理一数组读完数据后将另一数组余下元素复制到 C 中即可。void union(int A[],B[],C[],m,n)//整型数组 A 和 B 各有 m 和 n 个元素,前者递增有序,后者递减有序,本算法将 A 和 B 归并为递增有序的数组C。{i=0; j=n-1; k=0;// i,j,k 分别是数组 A,B 和 C 的下标,因用 C 描述,下标从 0 开始while(i<m && j>=0)if(a[i]<b[j]) c[k++]=a[i++] else c[k++]=b[j--];while(i<m) c[k++]=a[i++];while(j>=0) c[k++]=b[j--];}算法结束"},{"id":"learncoder_149_16128","stem":"已知两个定长数组,它们分别存放两个非降序有序序列,请编写程序把第二个数组序列中的数逐个插入到前一个数组序列中,完成后两个数组中的数分别有序(非降序)并且第一数组中所有的数都不大于第二个数组中的任意一个数。注意,不能另开辟数组,也不能对任意一个数组进行排序操作。例如,第一个数组为:4,12,28第二个数组为:1,7,9,29,45输出结果为:1,4,7--------------第一个数组9,12,28,29,45---------第二个数组 【上海大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"题目要求调整后第一数组(A)中所有数均不大于第二个数组(B)中所有数。因两数组分别有序,这里实际是要求第一数组的最后一个数 A[m-1]不大于第二个数组的第一个数 B[0]。由于要求将第二个数组的数插入到第一个数组中。因此比较 A[m-1]和 B[0],如 A[m-1]>B[0],则交换。交换后仍保持 A 和 B 有序。重复以上步骤,直到 A[m-1]<=B[0]为止。void ReArranger (int A[],B[],m,n)//A 和 B 是各有 m 个和 n 个整数的非降序数组,本算法将 B 数组元素逐个插入到 A 中,使 A 中各元素均不大于B 中各元素,且两数组仍保持非降序排列。{ while (A[m-1]>B[0]){x=A[m-1];A[m-1]=B[0]; //交换 A[m-1]和 B[0]j=1;wkile(j<n && B[j]<x) B[j-1]=B[j++]; //寻找 A[m-1]的插入位置B[j-1]=x;x=A[m-1];i=m-2;wkile(i>=0 && A[i]>x) A[i+1]=A[i--]; //寻找 B[0]的插入位置A[i+1]=x;}}算法结束"},{"id":"learncoder_149_16129","stem":"设数组A[1..n]中,A[n-2k+1..n-k]和[n-k+1..n]中元素各自从小到大排好序,试设计一个算法使A[n-2k+1..n]按从小到大次序排好序。并分析算法所需的计算时间。【福州大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"本题中数组 A 的相邻两段分别有序,要求将两段合并为一段有序。由于要求附加空间为 O(1),所以将前段最后一个元素与后段第一个元素比较,若正序,则算法结束;若逆序则交换,并将前段的最后一个元素插入到后段中,使后段有序。重复以上过程直到正序为止。void adjust(int A[],int n)//数组 A[n-2k+1..n-k]和[n-k+1..n]中元素分别升序,算法使 A[n-2k+1..n]升序{i=n-k;j=n-k+1;while(A[i]>A[j]){x=A[i]; A[i]=A[j]; //值小者左移,值大者暂存于 xk=j+1;while (k<n && x>A[k]) A[k-1]=A[k++]; //调整后段有序A[k-1]=x;i--; j--; //修改前段最后元素和后段第一元素的指针}}算法结束"},{"id":"learncoder_149_16132","stem":"在数组 A[1..n]中有 n 个数据,试建立一个带有头结点的循环链表,头指针为 h,要求链中数据从小到大排列,重复的数据在链中只保存一个。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"本题要求建立有序的循环链表。从头到尾扫描数组 A,取出 A[i](0<=i<n),然后到链表中去查找值为 A[i]的结点,若查找失败,则插入。LinkedList creat(ElemType A[],int n)//由含 n 个数据的数组 A 生成循环链表,要求链表有序并且无值重复结点{LinkedList h;h=(LinkedList)malloc(sizeof(LNode));//申请结点h->next=h; //形成空循环链表for(i=0;i<n;i++){pre=h;p=h->next;while(p!=h && p->data<A[i]){pre=p; p=p->next;} //查找 A[i]的插入位置if(p==h || p->data!=A[i]) //重复数据不再输入{s=(LinkedList)malloc(sizeof(LNode));s->data=A[i]; pre->next=s; s->next=p;//将结点 s 链入链表中}}//forreturn(h);}算法结束"},{"id":"learncoder_149_16130","stem":"设 A[1..100]是一个记录构成的数组,B[1..100]是一个整数数组,其值介于 1 至 100 之间,现要求按 B[1..100]的内容调整 A 中记录的次序,比如当 B[1]=ll 时,则要求将 A[1]的内容调整到 A[11]中去。规定可使用的附加空间为 O(1)。【中科院计算所】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"题目要求按 B 数组内容调整 A 数组中记录的次序,可以从 i=1 开始,检查是否 B[i]=i。如是,则A[i]恰为正确位置,不需再调;否则,B[i]=k≠i,则将 A[i]和 A[k]对调,B[i]和 B[k]对调,直到 B[i]=i 为止。void CountSort (rectype A[],int B[])//A 是 100 个记录的数组,B 是整型数组,本算法利用数组 B 对 A 进行计数排序{int i,j,n=100;i=1;while(i<n){if(B[i]!=i) //若 B[i]=i 则 A[i]正好在自己的位置上,则不需要调整{ j=i;while (B[j]!=i){ k=B[j]; B[j]=B[k]; B[k]=k; // B[j]和 B[k]交换r0=A[j];A[j]=A[k]; A[k]=r0; } //r0 是数组 A 的元素类型,A[j]和 A[k]交换i++;} //完成了一个小循环,第 i 个已经安排好}//算法结束"},{"id":"learncoder_149_16121","stem":"设任意 n 个整数存放于数组 A(1:n)中,试编写程序,将所有正数排在所有负数前面(要求算法复杂性为 0( n))。【山东大学】. 类似本题的另外叙述有:(1)已知数组 A[1..n]的元素类型为整型,设计算法调整 A,使其左边的所有元素小于零,右边的所有元素大于等于零。(要求算法的时间复杂度和空间复杂度均为 0(n))【北京理工大学】(2)设计一个算法,把整数数组中所有的偶数放到所有的奇数之前。要求时间、空间效率尽可能高。【华南师范大学】(3)设一系列正整数存放在一个数组中,试设计算法,将所有奇数存放在数组的前半部分,将所有的偶数存放在数组的后半部分。要求尽可能少用临时存储单元并使时间最少。请试着分析你实现的算法的时间复杂度和空间复杂度。 【南开大学】(4)设计算法将数组 A[1..n]调整为左右两部分,使的左边所有的元素小于右边的所有元素,并给出这一划分的分界位置。要求算法的时间复度为 O(n)。 【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"本题属于排序问题,只是排出正负,不排出大小。可在数组首尾设两个指针 i 和 j,i 自小至大搜索到负数停止,j 自大至小搜索到正数停止。然后 i 和 j 所指数据交换,继续以上过程,直到 i=j 为止。void Arrange(int A[],int n)//n 个整数存于数组 A 中,本算法将数组中所有正数排在所有负数的前面{int i=0,j=n-1,x; //用类 C 编写,数组下标从 0 开始while(i<j){while(i<j && A[i]>0) i++;while(i<j && A[j]<0) j--;if(i<j) {x=A[i]; A[i++]=A[j]; A[j--]=x; }//交换 A[i] 与 A[j]}}//算法 Arrange 结束."},{"id":"learncoder_149_16124","stem":"试编写建立广义表存储结构的算法,要求在输入广义表的同时实现判断、建立。设广义表按如下形式输入(a1,a2,a3,…,an) n>=0,其中 ai 或为单字母表示的原子或为广义表,n=0 时为只含空格字符的空表。(注:算法可用类 pascal 或类 c 书写) 【北京工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"广义表的元素有原子和表。在读入广义表“表达式”时,遇到左括号‘(’就递归的构造子表,否则若是原子,就建立原子结点;若读入逗号‘,’,就递归构造后续子表;若 n=0,则构造含空格字符的空表,直到碰到输入结束符号(‘#’)。设广义表的形式定义如下:typedef struct node{int tag; //tag=0 为原子,tag=1 为子表struct node *link; //指向后继结点的指针union {struct node *slink; //指向子表的指针char data; //原子}element;}Glist;Glist *creat ()//建立广义表的存储结构{char ch; Glist *gh;scanf(“%c”,&ch);if(ch==’’) gh=null;else {gh=(Glist*)malloc(sizeof(Glist));if(ch==‘(’){gh->tag=1; //子表gh->element.slink=creat(); } //递归构造子表else {gh->tag=0;gh->element.data=ch;} //原子结点}scanf(“%c”,&ch);if(gh!=null) if(ch==‘,’) gh->link=creat(); //递归构造后续广义表else gh->link=null;return(gh);}}算法结束"},{"id":"learncoder_149_16119","stem":"设二维数组 a[1..m, 1..n] 含有 m*n 个整数。(1) 写出算法(pascal 过程或 c 函数):判断 a 中所有元素是否互不相同?输出相关信息(yes/no);(2) 试分析算法的时间复杂度。【华中理工大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"判断二维数组中元素是否互不相同,只有逐个比较,找到一对相等的元素,就可结论为不是互不相同。如何达到每个元素同其它元素比较一次且只一次?在当前行,每个元素要同本行后面的元素比较一次(下面第一个循环控制变量 p 的 for 循环),然后同第 i+1 行及以后各行元素比较一次,这就是循环控制变量 k 和 p 的二层 for循环。int JudgEqual(ing a[m][n],int m,n)//判断二维数组中所有元素是否互不相同,如是,返回 1;否则,返回 0。{for(i=0;i<m;i++)for(j=0;j<n-1;j++){ for(p=j+1;p<n;p++) //和同行其它元素比较if(a[i][j]==a[i][p]) {printf(“no”); return(0); }//只要有一个相同的,就结论不是互不相同for(k=i+1;k<m;k++) //和第 i+1 行及以后元素比较for(p=0;p<n;p++)if(a[i][j]==a[k][p]) {printf(“no”); return(0); }}// for(j=0;j<n-1;j++)printf(yes”); return(1); //元素互不相同}//算法 JudgEqual 结束(2)二维数组中的每一个元素同其它元素都比较一次,数组中共 m*n 个元素,第 1 个元素同其它 m*n-1 个元素比较,第 2 个元素同其它 m*n-2 个元素比较,……,第 m*n-1 个元素同最后一个元素(m*n)比较一次,所以在元素互不相等时总的比较次数为 (m*n-1)+(m*n-2)+…+2+1=(m*n)(m*n-1)/2。在有相同元素时,可能第一次比较就相同, 也可能最后一次比较时相同,设在(m*n-1)个位置上均可能相同,这时的平均比较次数约为(m*n)(m*n-1)/4,总的时间复杂度是 O(n4)。"},{"id":"learncoder_149_16122","stem":"若 S 是 n 个 元 素 的 集 合 , 则 S 的 幂 集 P(S) 定 义 为 S 所 有 子 集 的 集 合 。 例 如 ,S=(a,b,c),P(S)={() ,(a),(b),(c),(a,b),(a,c),(b,c),(a,b,c)}给定 S,写一递归算法求 P(S)。【东南大学】【东南大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"设 n 个元素存放在数组 A[1..n]中。设 S 初始为空集,可依次将数组 A 的每一个元素并入 S,产生了含一个元素的若干集合,再以含一个元素的集合为初始集合,依次并入 A 的第二个(异于 S 的那个元素)元素并入 S,形成了含两个元素的若干集合,……,如此下去,直至 A[i]的全部元素并入。CONST n=10;TYPE datatype=char;VAR A: array[1..n] OF datatype;PROC powerset(s:set OF datatype)[outset(s); //输出集合 SFOR i:=1 TO n DO powerset(S+A[i]);]ENDP;调用本过程时,参数 S 为空集[]。"},{"id":"learncoder_149_16125","stem":"广义表是 n(n>=0)个数据元素 a1,a2,a3,…,an的有限序列。其中 ai (1<=i<=n)或者是单个数据元素(原子),或仍然是一个广义表。广义表的结点具有不同的结构,即原子结点和子表元素结点,为了将两者统一,用了一个标志tag,当其为 0 时表示是原子结点,其 data 域存储结点值,link 域指向下一个结点,当其 tag 为 1 时表示是子表结点,其 sublist 为指向子表的指针。因此,广义表可采用如下结构存储:TYPE glist=^gnode;gnode=RECORDlink:glist;CASE tag:0..1 OF0:(data:char);1:(sublist:glist)END;(1)画出广义表((a,b),c)的存储结构;(2)写出计算一个广义表的原子结点个数的递归算法表示式;(3)编写实现上述算法的过程或函数程序。【厦门大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)略(2)求广义表原子个数的递归模型如下f(p)= + =+ =f(p^.sublist) f(p^.link ) p^.tag 11 f(p^.link ) p^.tag 0如果PROC Number(p:glist; VAR n: integer)VAR m:integer;n:=0;IF p<>NIL THEN[IF p^.tag=0 THEN n:=1 ELSE Number(p^.sublist,m)n:=n+m; Number(p^.link,m); n:=n+m; ]ENDP;"},{"id":"learncoder_149_16123","stem":"编写算法打印出由指针 Hm 指向总表头的以十字链表形式存储的稀疏矩阵中每一行的非零元的个数。注意:行、列及总表头结点的形式为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image11.png'/>它们已用 val 域链接成循环链表。非零元的结点形式也同上,每一行(列)的非零元由 right(down)域把它们链接成循环链表,该行(列)的表头结点即为该行(列)循环链表的表头。【上海大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"设稀疏矩阵是 Amxn,Hm 是总表头指针。设 rch 是行列表头指针,则 rch->right=rch 时该行无非零元素,用 i 记行号,用一维数组元素 A[i]记第 i 行非零元个数。(为方便输出,设元素是整数。)int MatrixNum(Olink Hm)//输出由 Hm 指向的十字链表中每一行的非零元素个数{Olink rch=Hm->uval.next, p;int A[]; i=1;//数组 A 记各行非零元个数,i 记行号while(rch!=Hm)//循环完各行列表头{p=rch->right; num=0; //p 是稀疏矩阵行内工作指针,num 记该行非零个数while(p!=rch)//完成行内非零元的查找{printf(“M[%d][%d]=%d”,p->row,p->col,p->uval.e);num++;p=p->right; printf(“\\n”);//指针后移 }A[i++]=num;//存该行非零元个数rch=rch->uval.next;//移到下一行列表头}num=0for(j=1;j<i;j++)//输出各行非零元个数{num+=A[j]; printf(“第%d 行非零元个数为%d\\n”,j,A[j]); }return(num);//稀疏矩阵非零元个数}算法结束"},{"id":"learncoder_149_16126","stem":" 广义表 GL=(a1,a2 ,…,an),其中 ak(k=1,2,...,n)或是单个数据元素(原子),或仍然是个广义表。给定如下有关广义表的类型定义:TYPE tagtype=0..1;glist=^gnode;gnode=RECORDlink:glist; {link 域指向下一个结点}CASE tag:tagtype OF {tag=0 表示原子结点}0: (data :integer);1:(sublist: glist)END;编写一个过程或函数计算一个广义表的所有原子结点数据域之和,例如对广义表(3,(2,4,5),(6,3)) 数据域之和为 23。【厦门大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":" int Count(glist *gl)//求广义表原子结点数据域之和,原子结点数据域定义为整型{if(gl==null) return(0);else if (gl->tag==0) return((p->data)+count(gl->link));else return(count(gl->sublist)+count(gl->link)); }}// Count"},{"id":"learncoder_149_16127","stem":"数组 H[ 1:1000] 中存放着 1000 个大小不同的正整数;(1) 选择一分类算法使能最快地得到其中 10 个最大的数,简要说明理由;(2) 编写一程序 seek() ,执行该程序时,在命令行中提供二个参数;seek a n<enter> 表示需打印 H[ ]中 n 个最大数。seek I n<enter> 表示需打印 H[ ]中 n 个最小数。 【浙江大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)在 n 个正整数中,选出 k(k<<m)个最大的数,应使用堆排序方法。对深度为 h 的堆,筛选算法中关键字的比较次数至多为 2(h-1)次。建堆总共进行的关键字比较次数不超过 4n,堆排序在最坏情况下的时间复杂度是O(nlogn)。int r[1000]; // r[1000]是整型数组(2)void sift(int r[],int k,m,tag)//已知 r[k+1..m]是堆,本算法将 r[k..m]调整成堆,tag=1 建立大根堆,tag=2 建立小根堆{i=k;j=2*i;x=r[k];while (j<=m){if (tag==2) //建立小根堆{if (j<m && r[j]>r[j+1]) j++;//沿关键字小的方向筛选if(r[j]<x)) {r[i]=r[j];i=j;j=2*i;}else break;}else //建立大根堆{if (j<m && r[j]<r[j+1]) j++;//沿关键字小的方向筛选if(r[j]>x) {r[i]=r[j];i=j;j=2*i;}else break;}}r[i]=x;}//siftmain(int argc,char *argv[])//根据命令行中的输入,从 1000 个数中选取 n 个最大数或 n 个最小数{int m=1000,i,j;n=augv[2]; //从命令行输入的第二个参数是需要输出的数的个数if(n>m){printf(“参数错误\\n”);exit(0);}for(i=0;i<m;i++) scanf(“%d”,&r[i]); //输入 1000 个大小不同的正整数if (augv[1]==‘a’) //输出 n 个最大数,要求建立大根堆{for(i=m/2;i>0;i--) sift(r,i,m,1)printf(“%d 个最大数依次为\\n”,n);for(i=m;i>m-n+1;i--) //输出 n 个最大数{printf(“%5d”,r[i]); j++; if((j+1)%5==0) printf(“\\n”);//一行打印 5 个数sift(r,1,i-1,1); } //调堆}else //(augv[1]==‘i’) //输出 n 个最小数,要求建立小根堆{for(i=m/2;i>0;i--) sift(r,i,m,2)printf(“%d 个最小数依次为\\n”,n);for(i=m;i>m-n+1;i--) //输出 n 个最小数{printf(“%5d”,r[i]); j++; if((j+1)%5==0) printf(“\\n”);//一行打印 5 个数sift(r,1,i-1,2); } //调堆}}//main"},{"id":"learncoder_149_16120","stem":"二项式(a+b)n展开式的系数为C(n,0)=1,C(n,n)=1,对于 n>=0C(n,k)=C(n-1,k)+C(n-1,k-1),对于 0<k<n 形成著名的杨辉三角形,如图所示。(1)试写一个递归算法,根据以上公式生成 C(n,k)(2)试画出计算 C(6,4)的递归树。(3)试写一个非递归算法,既不用数组也不用栈,对于任意的 0<=k<=n 计算 C(n,k)<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image10.png'/>【清华大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"二项式(a+b)n展开式的系数的递归定义为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image22.png'/>(1)int BiForm(int n,k) //二项式展开式的系数的递归算法{if(n<0 || k<0 || k>=n) {printf(“参数错误\\n ”);exit(0);}if(k==0 || k==n) return(1);else return(BiForm(n-1,k)+BiForm(n-1,k-1);}(2)C(6,4)的递归树<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image23.png'/>(3)计算 C(n,k)(0<=k<=n)的非递归算法int cnk(int n,int k){int i; long x=1,y=1;for (i=1;i<=k;i++) x*=i;for (i=n-k+1;i<=n;i++) y*=i;return(y/x)}//cnk"},{"id":"learncoder_149_16115","stem":"请编写完整的程序。如果矩阵 A 中存在这样的一个元素 A[i,j]满足条件:A[i,j]是第 i 行中值最小的元素,且又是第 j 列中值最大的元素,则称之为该矩阵的一个马鞍点。请编程计算出 m*n 的矩阵 A 的所有马鞍点。 【上海大学】【中科院自动化所】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"寻找马鞍点最直接的方法,是在一行中找出一个最小值元素,然后检查该元素是否是元素所在列的最大元素,如是,则输出一个马鞍点,时间复杂度是 O(m*(m+n)).本算法使用两个辅助数组 max 和 min,存放每列中最大值元素的行号和每行中最小值元素的列号,时间复杂度为 O(m*n+m),但比较次数比前种算法会增加,也多使用向量空间。int m=10, n=10;void Saddle(int A[m][n])//A 是 m*n 的矩阵,本算法求矩阵 A 中的马鞍点.{int max[n]={0}, //max 数组存放各列最大值元素的行号,初始化为行号 0;min[m]={0}, //min 数组存放各行最小值元素的列号,初始化为列号 0;i, j;for(i=0;i<m;i++) //选各行最小值元素和各列最大值元素.for(j=0;j<n;j++){if(A[max[j]][j]<A[i][j]) max[j]=i; //修改第 j 列最大元素的行号if(A[i][min[i]]>A[i][j]) min[i]=j; //修改第 i 行最小元素的列号.}for (i=0;i<m;i++){j=min[i]; //第 i 行最小元素的列号if(i==max[j])printf(“A[%d][%d]是马鞍点,元素值是%d”,i,j,A[i][j]); //是马鞍点}}// Saddle"},{"id":"learncoder_149_16118","stem":"编写算法,将自然数 1~n 按“蛇形”填入 n×n 矩阵中。例(1~4 )如图所示:(用程序实现)<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image9.png'/>【南京航空航天大学】 【中科院计算所】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"本题的一种算法前面已讨论(请参见本章三、填空题 38)。这里给出另一中解法。分析数的填法,是按“从右上到左下”的”蛇形”,沿平行于副对角线的各条对角线上,将自然数从小到大填写。当从右上到左下时,坐标 i 增加,坐标 j 减小,当 j 减到小于 0 时结束,然后 j 从 0 开始增加,而 i 从当前值开始减少,到 i<0 时结束。然后继续如此循环。当过副对角线后,在 i>n-1 时,j=j+2,开始从左下向右上填数;而当 j>n-1 时 i=i+2,开始从右上向左下的填数,直到 n*n 个数填完为止。void Snake_Number(int A[n][n],int n)//将自然数 1..n*n,按”蛇形”填入 n 阶方阵 A 中.{i=0; j=0; k=1; //i,j 是矩阵元素的下标,k 是要填入的自然数.while(i<n && j<n){while(i<n && j>-1) //从右上向左下填数,{A[i][j]=k++; i++ ;j--;}if((j<0)&&(i<n)) j=0; //副对角线及以上部分的新 i,j 坐标.else {j=j+2; i=n-1;} // 副对角线以下的新的 i,j 坐标.while(i>-1 && j<n) //从左下向右上{A[i][j]=k++; i--; j++;}if(i<0 && j<n) i=0;else{i=i+2; j=n-1;}}//最外层 while}//Snake_Number"},{"id":"learncoder_149_16116","stem":"给定一个整数数组 b[0..N-1],b 中连续的相等元素构成的子序列称为平台。试设计算法,求出 b 中最长平台的长度。【中科院计算所】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"我们用 l 代表最长平台的长度,用 k 指示最长平台在数组 b 中的起始位置(下标)。用 j 记住局部平台的起始位置,用 i 指示扫描 b 数组的下标,i 从 0 开始,依次和后续元素比较,若局部平台长度(i-j)大于 l时,则修改最长平台的长度 k(l=i-j)和其在 b 中的起始位置(k=j),直到 b 数组结束,l 即为所求。void Platform (int b[ ], int N)//求具有 N 个元素的整型数组 b 中最长平台的长度。{l=1;k=0;j=0;i=0;while(i<n-1){while(i<n-1 && b[i]==b[i+1]) i++;if(i-j+1>l) {l=i-j+1;k=j;} //局部最长平台i++; j=i; } //新平台起点printf(“最长平台长度%d,在 b 数组中起始下标为%d”,l,k);}// Platform"},{"id":"learncoder_149_16114","stem":"设原来将 N 个自然数 1,2,…,N 按某个顺序存于数组 A 中,经过下面的语句计算,使 A[I]的值变为 A[1]到 A[I-1]中小于原 A[I]值的个数。FOR I:=N DOWNTO 1 DOBEGINC:=0;FOR J:=1 TO I-1 DOIF A[J]<A[I] THEN C:=C+1;A[I]:=CEND;编程将经过上述处理后的 A 还原成原来的 A。 【上海大学 1996】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"因为数组中存放的是从 1 到 N 的自然数,原程序运行后,数组元素 A[i](1<=i<=N)中存放的是 A[1]到 A[i-1]中比原 A[i]小的数据元素的个数。易见 A[N]+1 就是原 A[N]的值(假定是 j,1<=j<=N)。设一元素值为 1 的辅助数组 flag,采用累加,确定一个值后,flag 中相应元素置零。下面程序段将 A 还原成原来的 A:VAR flag:ARRAY[1..N] OF integer;FOR i:=1 TO N DO flag[i]:=1; //赋初值FOR i:=N DOWNTO 1 DOBEGIN sum:=0; j:=1; found:=false;WHILE j<=N AND NOT found DOBEGIN sum:=sum+flag[j];IF sum=A[i]+1 THEN BEGIN flag[j]:=0; found:=true; END;END;A[i]:=j;END;"},{"id":"learncoder_149_16117","stem":"给定 nxm 矩阵 A[a..b,c..d],并设 A[i,j]≤A[i,j+1](a≤i≤b,c≤j≤d-1)和 A[i,j]≤A[i+1,j](a≤i≤b-1,c≤j≤d).设计一算法判定 X 的值是否在 A 中,要求时间复杂度为 O(m+n)。【东南大学】类似本题的另外叙述有:(1)给定整型数组 B[0..m,0..n] 。已知 B 中数据在每一维方向上都按从小到大的次序排列,且整型变量 x 在 B中存在。试设计一个程序段找出一对满足 B[i,j]=x 的(i,j)值,要求比较次数不超过 m+n.。【清华大学】(2) 给 定 n × m 矩 阵 A[a..b,c..d] , 并 设 A[i,j]<=A[i,j+1] ( a<=i<=b,c<=j<=d-1 ) 知A[i,j]<=A[i+1,j],(a<=i<=b-1, c<=j<=d)。设计一算法以比 O(n*m)小的最坏时间复杂性判定值 x 是否在 A 中。【东南大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"矩阵中元素按行和按列都已排序,要求查找时间复杂度为 O(m+n),因此不能采用常规的二层循环的查找。可以先从右上角(i=a,j=d)元素与 x 比较,只有三种情况:一是 A[i,j]>x, 这情况下向 j 小的方向继续查找;二是 A[i,j]<x,下步应向 i 大的方向查找;三是 A[i,j]=x,查找成功。否则,若下标已超出范围,则查找失败。void search(datatype A[ ][ ], int a,b,c,d, datatype x)//n*m 矩阵 A,行下标从 a 到 b,列下标从 c 到 d,本算法查找 x 是否在矩阵 A 中.{i=a; j=d; flag=0; //flag 是成功查到 x 的标志while(i<=b && j>=c)if(A[i][j]==x) {flag=1;break;}else if (A[i][j]>x) j--; else i++;if(flag) printf(“A[%d][%d]=%d”,i,j,x); //假定 x 为整型.else printf(“矩阵 A 中无%d 元素”,x);}算法 search 结束。"},{"id":"learncoder_149_16112","stem":"设整数 x1,x2,…,xN已存放在数组 A 中,编写一 PASCAL 递归过程,输出从这 n 个数中取出所有 k 个数的所有组合(k<=n)。例:若 A 中存放的数是 1,2,3,4,5,k 为 3,则输出结果应为:543,542,541,532,531,521,432,431,421,321。 【山东大学】类似本题的另外叙述有:(1)题目基本相同,只是叙述不同,要求用 PASCAL 语言。【东南大学 2001 三 (10 分)】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"从 n 个数中,取出所有 k 个数的所有组合。设数已存于数组 A[1..n]中。为使结果唯一,可以分别求出包括 A[n]和不包括 A[n]的所有组合。即包括 A[n]时,求出从 A[1..n-1]中取出 k-1 个元素的所有组合,不包括A[n]时,求出从 A[1..n-1]中取出 k 个元素的所有组合。CONST n=10;k=3;TYPE ARR=ARRAY[1..n] OF integer;VAR A,B:ARR;// A 中存放 n 个自然数,B 中存放输出结果。PROC outresult;//输出结果FOR j:=1 TO k DO write(B[j]);writeln;ENDP;PROC nkcombination(i,j,k:integer);//从 i 个数中连续取出 k 个数的所有组合,i 个数已存入数组 A 中,j 为结果数组 B 中的下标。IF k=0 THEN outresultELSE IF(i-k≥0)THEN [ B[j]:=A[i];j:=j+1;nkcombination(i-1,k-1,j);nkcombination(i-1,k,j-1);]ENDP;"},{"id":"learncoder_149_16113","stem":"编写一个过程,对一个 n×n 矩阵,通过行变换,使其每行元素的平均值按递增顺序排列。【中科院软件所】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"题目中要求矩阵两行元素的平均值按递增顺序排序,由于每行元素个数相等,按平均值排列与按每行元素之和排列是一个意思。所以应先求出各行元素之和,放入一维数组中,然后选择一种排序方法,对该数组进行排序,注意在排序时若有元素移动,则与之相应的行中各元素也必须做相应变动。void Translation(float *matrix,int n)//本算法对 n×n 的矩阵 matrix,通过行变换,使其各行元素的平均值按递增排列。{int i,j,k,l;float sum,min; //sum 暂存各行元素之和float *p, *pi, *pk;for(i=0; i<n; i++){sum=0.0; pk=matrix+i*n; //pk 指向矩阵各行第 1 个元素.for (j=0; j<n; j++){sum+=*(pk); pk++;} //求一行元素之和.*(p+i)=sum; //将一行元素之和存入一维数组.}//for ifor(i=0; i<n-1; i++) //用选择法对数组 p 进行排序{min=*(p+i); k=i; //初始设第 i 行元素之和最小.for(j=i+1;j<n;j++) if(p[j]<min) {k=j; min=p[j];} //记新的最小值及行号.if(i!=k) //若最小行不是当前行,要进行交换(行元素及行元素之和){pk=matrix+n*k; //pk 指向第 k 行第 1 个元素.pi=matrix+n*i; //pi 指向第 i 行第 1 个元素.for(j=0;j<n;j++) //交换两行中对应元素.{sum=*(pk+j); *(pk+j)=*(pi+j); *(pi+j)=sum;}sum=p[i]; p[i]=p[k]; p[k]=sum; //交换一维数组中元素之和.}//if}//for ifree(p); //释放 p 数组.}// Translation"},{"id":"learncoder_149_16102","stem":"知广义表 A=(((a)),(b),c,(a),(((d,e))))(1)画出其一种存贮结构图;(2)写出表的长度与深度;(3)用求头部,尾部的方式求出 e。【东北大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)略(2)表的长度为 5,深度为 4(3)head(tail(head(head(head(tail(tail(tail(tail(A)))))))))"},{"id":"learncoder_149_16105","stem":"写出对广义表 A=(x,((a,b),c,d))作运算 head(head(tail(A)))后的结果。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(a,b) "},{"id":"learncoder_149_16108","stem":"给出下列所示的 3 元多项式的广义表表示(分别以 X1,X2,X3第一到第三层变元)P(X1X2X3)=X15X23X3+2X15X22X34+5X15X23X33+3X1X24X32+X2X3+6【华南理工大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"p(x1 x2 x3)=2 x15 x22 x34+5 x15 x23 x33+3 x1 x24 x32+(x15 x23+ x2)x3+6<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image21.png'/>"},{"id":"learncoder_149_16103","stem":"画出具有共享结构广义表(((b,c),d),(a),((a),((b,c),d)),e,())的存贮表示。【北京工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"共享结构广义表 A=(((b,c),d),(a),((a),((b,c),d)),e,())的存储表示:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image19.png'/>"},{"id":"learncoder_149_16106","stem":"写出广义表的运算结果: TAIL[HEAD[TAIL[((a,b),(c,d))]]]=?【武汉交通科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(d)"},{"id":"learncoder_149_16109","stem":"设某表 H 如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image7.png'/>其中 A,B,C 为子表名,a1,a2,b1,c1,c2,x 为其元素。(1)试用广义表形式表示 H,并写出运算 HEAD(H)和 TAIL(H) 函数从 H 中取出单元素 a2 的运算;(2)画出表 H 的链式存储结构;【北京科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)H(A(a1,a2),B(b1),C(c1,c2),x)HEAD(TAIL(HEAD(H)))=a2 (2)略"},{"id":"learncoder_149_16107","stem":"广义表中原子个数是否即为广义表的长度? 【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"否。广义表的长度不是广义表中原子个数,而是指广义表中所含元素的个数,广义表中的元素可以是原子,也可以是子表。广义表元素多于 1 个时,元素间用逗号分开。"},{"id":"learncoder_149_16110","stem":" 设有大小不等的 n 个数据组(n 个数据组中数据的总数为 m),顺序存放在空间区 D 内,每个数据占一个存储单元,数据组的首地址由数组 S 给出,(如下图所示),试编写将新数据 x 插入到第 i 个数据组的末尾且属于第 i 个数据组的算法,插入后,空间区 D 和数组 S 的相互关系仍保持正确。【东北大学】<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image8.png'/>","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"本题是在向量 D 内插入元素问题。首先要查找插入位置,数据 x 插入到第 i 个数据组的末尾,即是第i+1 个数据组的开始,而第 i(1≤i≤n)个数据组的首地址由数组 s(即数组元素 s[i])给出。其次,数据 x 插入后,还要维护数组 s,以保持空间区 D 和数组 s 的正确的相互关系。void Insert(int s[],datatype D[],x,int i,m)//在 m 个元素的 D 数据区的第 i 个数据组末尾,插入新数据 x,第 i 个数据组的首址由数组 s 给出。{if(i<1|| i>n){printf(“参数错误”);exit(0);}if(i==n) D[m]=x; // 在第 n 个数据组末尾插入元素。else{for(j=m-1;j>=s[i+1];j--)D[j+1]=D[j]; // 第 i+1个数据组及以后元素后移D[s[i+1]]=x; // 将新数据 x 插入for(j=i+1;j<=n;j++) s[j]++; // 维护空间区 D 和数组 s 的的关系。} //结束元素插入m++; //空间区 D 的数据元素个数增 1。}// 算法 Insert 结束"},{"id":"learncoder_149_16111","stem":"以三元组表存贮的稀疏矩阵 A,B 非零元个数分别为 m 和 n。试用类 PASCAL 语言编写时间复杂度为 O(m+n)的算法将矩阵 B 加到矩阵 A 上去。A 的空间足够大,不另加辅助空间。要求描述所用结构。【北京工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"设稀疏矩阵的非零元素的三元组以行序为主存储在三元组表中。矩阵的相加是对应元素的相加。对两非零元素相加,若行号不等,则行号大者是结果矩阵中的非零元素。若行号相同,则列号大者是结果中一非零元素;若行号列号相同,若对应元素值之和为零,不予存储,否则,作为新三元组存到三元组表中。题目中要求时间复杂度为 O(m+n)。因此需从两个三元组表的最后一个元素开始相加。第一个非零元素放在 A 矩阵三元组表的第 m+n位置上。结果的三元组至多是 m+n 个非零元素。最后若发生对应元素相加和为零的情况,对三元组表中元素要进行整理,以便使第一个三元组存放在下标 1 的位置上。CONST maxnum=大于非零元素数的某个常量TYPE tuple=RECORDi,j:integer; v:elemtp;END;sparmattp=RECORDmu,nu,tu:integer;data: ARRAY[1..maxnum] OF tuple;END;PROC AddMatrix(VAR A:sparmattp;B:sparmattp);// 稀疏矩阵 A 和 B 各有 m 和 n 个非零元素,以三元组表存储。A 的空间足够大,本算法实现两个稀疏矩阵相加,结果放到 A 中。L:=m;p:=n;k:=m+n;// L,p 为 A,B 三元组表指针,k 为结果三元组表指针(下标)。A.tu:=m+n;// 暂存结果矩阵非零元素个数WHILE(L≥1)AND(p≥1)DO[CASE // 行号不等时,行号大者的三元组为结果三元组表中一项。A.data[L].i>B.data[p].i:A.data[k]:=A.data[L];L:=L-1;// A 中当前项为结果项A.data[L].i<B.data[p].i:A.data[k]:=B.data[p];p:=p-1;//B 中当前项为结果当前项A.data[L].i=B.data[p].i:CASE //行号相等时,比较列号A.data[L].j>B.data[p].j:A.data[k]:=A.data[L];L:=L-1;A.data[L].j<B.data[p].j:A.data[k]:=B.data[p];p:=p-1;A.data[L].j=B.data[p].j:IF A.data[L].v+B.data[p].v≠0 THEN[A.data[L].v=A.data[L].v+ B.data[p].v;A.data[k]:= A.data[L];]L:=L-1;p:=p-1;ENDC; //结束行号相等时的处理ENDC; //结束行号比较处理。k:=k-1; //结果三元组表的指针前移(减 1)]//结束 WHILE 循环。WHILE p>0 DO[A.data[k]:=B.data[p];k:=k-1;p:=p-1;] //处理 B 的剩余部分。WHILE L>1 DO[A.data[k]:=A.data[L];k:=k-1;L:=L-1;] //处理 A 的剩余部分。IF k>1 THEN //稀疏矩阵相应元素相加时,有和为零的元素,因而元素总数<m+n。[FOR p:=k TO m+n DO A[p-k+1]:=A[p];// 三元组前移,使第一个三元组的下标为 1。A.tu=m+n-k+1;] // 修改结果三元组表中非零元素个数。ENDP; // 结束 addmatrix"},{"id":"learncoder_149_16104","stem":"广义表的结点结构如下:(TAG,DATA,LINK)。其中 LINK 为指向表中下一元素的指针;TAG 为标志域;DATA 为数据域,具体含义如下: TAG=0 表示该结点为原子结点,DATA 为其数据;TAG=1 表示该结点为一个子表,DATA 为指向该子表的指针。(1)说明下列算法 A 的功能(注:算法中 p,t,m,n,r,q 为指针;算法中的 NIL 对应图中的^)PROCEDURE A(p,t)BEGINq:=NIL;WHILE p<>NIL DOBEGINIF p^.TAG<>0 THENBEGINm:=p^.DATA;A(m,n);p^.DATA:=n;END;r:=p^.LINK;p^.LINK:=q;q:=p;p:=rEND;t:=q;END.(2)对于 p 所指的广义表,画出执行算法 A 后的表结构以及 p,t 的值:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image6.png'/>【北方交通大学】类似本题的另外叙述有:题目基本相同,差别仅在于子表(b,c)与原子 d 的前后顺序颠倒。【浙江大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)算法 A 的功能是逆置广义表 p(即广义表由 p 指针所指)。逆置后的广义表由 t 指向。(2)逆置后的广义表由 t 指向,这时 p=nil。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image20.png'/>"},{"id":"learncoder_149_16101","stem":"假设采用以下两种结点的链表作为广义表的存贮结构,表结点:(tag=1,hp,tp), 元素结点;(tag=0,data)。请画出下列广义表的存储结构图,并求它的深度和长度。( ( ) , ( ( ( ) ) , ( ( ( ) ) ) ) )【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"深度为 5,长度为 2"},{"id":"learncoder_149_16091","stem":"设有一个三维数组 a[c1:d1,c2:d2,c3:d3],其中 ci:di 是第 i 维的界偶,如该数组在内存中按行排列,且a[c1,c2,c3]的地址为 a0,那么请导出下标变量 a[i1,i2,i3]的地址,假设每个元素占 L 个单元。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image4.png'/>","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"各维的元素数为 di-ci+1,则 a[i1,i2,i3]的地址为:a0+[(i1-c1)(d3- c3+1)(d2- c2+1)+(i2-c2)(d2- c2+1)+(i3-c3)]*L"},{"id":"learncoder_149_16094","stem":"用三元数组表示稀疏矩阵的转置矩阵,并简要写出解题步骤。【山东工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"设用 mu,nu 和 tu 表示稀疏矩阵行数,列数和非零元素个数,则转置矩阵的行数,列数和非零元素的个数分别是nu,mu 和 tu。转置可按转置矩阵的三元组表中的元素顺序进行,即按稀疏矩阵的列序,从第 1 列到第 nu 列,每列中按行值递增顺序,找出非零元素,逐个放入转置矩阵的三元组表中,转时行列值互换,元素值复制。按这种方法,第 1 列到第 1 个非零元素一定是转置后矩阵的三元组表中的第 1 个元素,第 1 列非零元素在第 2 列非零元素的前面。这种方法时间复杂度是 O(n*P),其中 p 是非零元素个数,当 p 和 m*n 同量级时,时间复杂度为 O(n3)。另一种转置方法称作快速转置,使时间复杂度降为 O(m*n)。它是按稀疏矩阵三元组表中元素的顺序进行。按顺序取出一个元素,放到转置矩阵三元组表的相应位置。这就要求出每列非零元素个数和每列第一个非零元素在转置矩阵三元组表中的位置,设置了两个附加向量。"},{"id":"learncoder_149_16095","stem":"简述广义表属于线性结构的理由。【西北大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"广义表中的元素,可以是原子,也可以是子表,即广义表是原子或子表的有限序列,满足线性结构的特性:在非空线性结构中,只有一个称为“第一个”的元素,只有一个成为“最后一个”的元素,第一元素有后继而没有前驱,最后一个元素有前驱而没有后继,其余每个元素有唯一前驱和唯一后继。从这个意义上说,广义表属于线性结构。"},{"id":"learncoder_149_16099","stem":"利用广义表的 Head 和Tail 运算,把原子 d 分别从下列广义表中分离出来,L1=(((((a),b),d),e));L2=(a,(b,((d)),e))。 【北方交通大学】类似本题的另外叙述有:(1) 已知广义表 L=((((a))),((b)),(c),d),试利用 head 和 tail 运算把原子项 c 从 L 中分离出来。【北京邮电大学】【青岛海洋大学】(2) 画出下列广义表的存储结构图,并利用取表头和取表尾的操作分离出原子 e。( a,((),b),(((e))))。 【清华大学】(3) 已知广义表 A=((a,b,c),(d,e,f)) 试写出从表 A 中取出原子元素 e 的运算。【西安电子科技大学】(4)请将香蕉 banana 用工具 H( )—Head( ),T( )—Tail( )从 L 中取出。L=(apple,(orange,(strawberry,(banana)),peach),pear)【北京邮电大学】(5) 试利用广义表取表头 head(ls)和取表尾 tail(ls)的基本运算,将原子 d 从下列表中分解出来,请写出每一步的运算结果。L=((a,(b)),((c,d)),(e,f)) 【北京工商大学】(6) 画出广义表 A=(a,(b,()),(((),c)))的第一种存储结构(表结点第二指针指向余表)图,并用取首元(head())和取尾元(tail())函数表示原子 c。【北京工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"Head(Tail(Head(Head(L1))))Head(Head(Head(Tail(Head(Tail(L2))))))类似本题的另外叙述的几个题解答如下:(1)head(head(tail(tail(L)))),设 L=(a,(c),b),(((e))))(2)head(head(head(head(tail(tail(L))))))<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image16.png'/>(3)head(tail(head(tail(A))))(4)H(H(T(H(T(H(T(L)))))))(5)tail(L)=(((c,d)),(e,f))head(tail(L))=((c,d))head(head(tail(L)))=(c,d)tail(head(head(tail(L))))=(d)head(tail(head(head(tail(L)))))=d(6)head(tail(head(head(tail(tail(A))))))"},{"id":"learncoder_149_16097","stem":"什么是广义表?请简述广义表和线性表的主要区别。 【北京大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"线性表中的元素可以是各种各样的,但必须具有相同性质,属于同一数据对象。广义表中的元素可以是原子,也可以是子表。其它请参见 38"},{"id":"learncoder_149_16100","stem":"画出下列广义表的两种存储结构图((),A,(B,(C,D)),(E,F))。【南京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"广义表的第一种存储结构的理论基础是,非空广义表可唯一分解成表头和表尾两部分,而由表头和表尾可唯一构成一个广义表。这种存储结构中,原子和表采用不同的结点结构(“异构”,即结点域个数不同)。原子结点两个域:标志域 tag=0 表示原子结点,域 DATA 表示原子的值;子表结点三个域:tag=1 表示子表,hp 和tp 分别是指向表头和表尾的指针。在画存储结构时,对非空广义表不断进行表头和表尾的分解,表头可以是原子,也可以是子表,而表尾一定是表(包括空表)。上面是本题的第一种存储结构图。广义表的第二种存储结构的理论基础是,非空广义表最高层元素间具有逻辑关系:第一个元素无前驱有后继,最后一个元素无后继有前驱,其余元素有唯一前驱和唯一后继。有人将这种结构看作扩充线性结构。这种存储结构中,原子和表均采用三个域的结点结构(“同构”)。结点中都有一个指针域指向后继结点。原子结点中还包括标志域 tag=0 和原子值域 DATA;子表结点还包括标志域 tag=1 和指向子表的指针 hp。在画存储结构时,从左往右一个元素一个元素的画,直至最后一个元素。下面是本题的第二种存储结构图。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image17.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image18.png'/>由于存储结构图占篇幅较大,下面这类题均不再解答。"},{"id":"learncoder_149_16098","stem":"求下列广义表的运算结果。【南京航空航天大学】(1)CAR(CDR(((a,b),(c,d),(e,f))))(2)CDR(CAR(((a,b),(c,d),(e,f))))(3)CAR(CDR(CAR(((a,b),(e,f)))))(4)CDR(CAR(CDR(((a,b),(e,f)))))(5)CDR(CDR(CAR(((a,b),(e,f)))))注:CAR 运算相当于有些教材中的 Head 运算,CDR 运算相当于 Tail 运算。","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)(c,d) (2)(b) (3)b (4)(f) (5)()"},{"id":"learncoder_149_16089","stem":"设对称矩阵 A=2050(1)若将 A 中包括主对角线的下三角元素按列的顺序压缩到数组 S 中, 即 S:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image2.png'/>试求出 A 中任一元素的行列下标[i,j](1<=i,j<=4)与 S 中元素的下标 K 之间的关系. (2)若将 A 视为稀疏矩阵时,画出其三元组表形式压缩存储表。【北京科技大学】12000101000210000001","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)k=(2n-j+2)(j-1)/2+i-j+1 (当 i≥j 时,本题 n=4)k=(2n-i+2)(i-1)/2+j-i+1 (当 i<j 时,本题 n=4)(2)稀疏矩阵的三元组表为:s=((4,4,6),(1,1,1),(1,4,2),(2,2,3),(3,4,5),(4,1,2),(4,3,5)。其中第一个三元组是稀疏矩阵行数、列数和非零元素个数。其它三元组均为非零元素行值、列值和元素值。"},{"id":"learncoder_149_16092","stem":"假定有下列 nⅹn 矩阵(n 为奇数)A=如果用一维数组 B 按行主次序存储 A 的非零元素,问:(1)A 中非零元素的行下标与列下标的关系;(2)给出 A 中非零元素 aij 的下标(i,j)与 B 中的下标 R 的关系;(3)假定矩阵中每个元素占一个存贮单元且 B 的起始地址为 A0,给出利用 aij的下标(i,j)定位在 B 中的位置公式。 【上海交通大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"主对角线上元素的坐标是 i=j,副对角线上元素的坐标 i 和 j 有 i+j=n+1 的关系(1)i=j 或 i=n+1-j (1≤i,j≤n) (2)非零元素分布在两条主、副对角线上,除对角线相交处一个元素(下称“中心元素”)外,其余每行都有两个元素。主对角线上的元素,在向量 B 中存储的下标是 k=2i-1(i=j, 1≤i,j≤n,1<=k<=2n-1)。副对角线上的元素,在中心元素前,在向量 B 中存储的下标是 k=2i(i<>j, 1≤i,j≤n/2);在中心元素后,其下标是 k=2(i-1)(i<>j,n/2+1≤i,j≤n, 1<=k<=2n-1)。 A0+2(i-1) (i=j,1<i,j<n) A0+2(i-1)+1 (i<j,1<i,j<n/2)(3)aij在 B 中的位置 K= A0+2(i-1)-1 (i<j,n/2+1<i,j<n)"},{"id":"learncoder_149_16090","stem":"设对角线矩阵 A=00035( 行列下标 i ,j 满足:1≤i,j≤5)(1)若将矩阵 A 压缩存储到数组 S 中:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image3.png'/>试求出 A 中已存储之元素的行列下标(i, j)与 S 中元素的下标 K 之间的关系(2)若将 A 视为稀疏距阵时,请画出其行逻辑链接顺序表。【北京科技大学 2000 三(10 分)】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)k=2(i-1)+j (1≤i,j≤n,|i-j|≤1)i=floor(k/3)+1 // floor(a)是取小于等于 a 的最大整数j=k-2(i-1)(2)行逻辑链接顺序表是稀梳矩阵压缩存储的一种形式。为了随机存取任意一行的非零元,需要知道每一行第一个非零元在三元组表中的位置。为此,除非零元的三元组表外,还需要一个向量,其元素值是每行第一个非零元在三元组表中的位置。其类型定义如下:typedef struct{ int mu,nu,tu; //稀梳矩阵的行数、列数和非零元素个数int rpos[maxrow+1]; //行向量,其元素值是每行第一个非零元在三元组表中的位置。Triple data[maxsize];}SparsMatrix;"},{"id":"learncoder_149_16093","stem":"对于一个对称矩阵采用压缩存储,只存放它的上三角部分,并按列存放。例如对于一个 n*n 的对称矩阵 A (如右图) ,用一个一维数组 B 来存放它的上三角部分:B=[A11,A12,A22,A13,A23,A33,A14,…,A1n,A2n,…,Ann]同时有两个函数:MAX(i,j)和 MIN(i,j),分别计算下标 i 和j 中的大者与小者。试利用它们给出求任意一个 Aij 在 B 中存放位置的公式。(若式中没有 MAX(I,j)和 MIN(i,j)则不给分)【清华大学】<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image5.png'/>","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"由于对称矩阵采用压缩存储,上三角矩阵第一列一个元素,第二列两个元素,第 j 列 j 个元素。上三角矩阵共有 n (n+1)/2 个元素。我们将这些元素存储到一个向量 B[n(n+1)/2+1]中。可以看到 B[k]和矩阵中的元素 aij之间存在着一一对应关系:当i<j时k=j(j 1)/2+i,当i>j时k=i(i 1)/2+j则其对应关系可表示为:k=MAX(i, j) * (MAX(i, j) -1)/2+min(i,j) ( 1<=i,j<=n, 1<=k<=n(n+1)/2)int MAX(int x,int y){ return(x>y?x:y);}int MIN(int x,int y){ return(x<y?x:y);}"},{"id":"learncoder_149_16096","stem":"数组,广义表与线性表之间有什么样的关系?【西北工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"数组是具有相同性质的数据元素的集合,同时每个元素又有唯一下标限定,可以说数组是值和下标偶对的有限集合。n 维数组中的每个元素,处于 n 个关系之中,每个关系都是线性的,且 n 维数组可以看作其元素是 n-1 维数组的一个线性表。而广义表与线性表的关系,见上面 38 题的解释。"},{"id":"learncoder_149_16086","stem":"上三角阵 A(N*N)按行主序压缩存放在数组 B 中,其中 A[i,j]=B[k].写出用 i,j 表示的 k。【北京工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"上三角矩阵第一行有 n 个元素,第 i-1 行有 n-(i-1)+1 个元素,第一行到第 i-1 行是等腰梯形,而第 i 行上第 j 个元素(即 aij)是第 i 行上第 j-i+1 个元素,故元素 Aij在一维数组中的存储位置(下标 k)为:k=(n+(n-(i-1)+1))(i-1)/2+(j-i+1)=(2n-i+2)(i-1)/2+j-i+1"},{"id":"learncoder_149_16087","stem":"设有上三角矩阵(aij)n*n,将其上三角中的元素按先行后列的顺序存于数组 B(1:m)中,使得 B[k]= aij 且k=f1(i)+f2(j)+c,请推导出函数 f1,f2 和常数 c,要求 f1 和 f2 中不含常数项。【中科院自动化所】 【山东科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"k=(n+1/2)i-i2/2+j-n,则得 f1(i)=(n+1/2)i-i2/2,f2(j)=j,c=-n。"},{"id":"learncoder_149_16081","stem":" 现有算法及正整数 n 和数组 A 如下,求数组 C 的值。VAR A,B,C:Array[1..100] of integer;FUNC AAA(s,t:integer):integer;IF s=t THEN IF B[s]=0 THEN AAA:=S ELSE AAA:=-s ELSEBEGINl:=AAA(s,(s+t) DIV 2);r:=AAA((s+t) DIV 2+1,t);IF l>0 THEN AAA:=l ELSE AAA:=r;IF (r>0) AND (A[l]>A[r]) THEN AAA:=rENDENDF;PROC BBB;FOR i:=1 TO n DO B[i]:=0;FOR i:=1 TO n DO B[AAA(1,n)]:=i;FOR i:=1 TO n DO C[B[i]]:=A[i];ENDP;初始值:n=10,A={121,22,323,212,636,939,828,424,55,262};【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"这是一个排序程序。运行后 B 数组存放 A 数组各数在排序后的位置。结果是:A={121,22,323,212,636,939,828,424,55,262}B={3,1,6,4,8,10,9,7,2,5}C={22,55,121,212,262,323,424,639,828,939}"},{"id":"learncoder_149_16084","stem":" 指出下列算法中错误、低效之处,并将其改成一个正确且高效的算法。PROCEDURE delk(A, m , last,i, k) ;{从数组 A[1..last]中删除第 i 个元素起的 k 个元素,m 为 A 上限}BEGINIF(i<1) OR (i>last) OR(k<0) OR(last>m)THEN write ('error')ELSE FOR count: = 1 TO k TO[FOR j:=last DOWNTO i+1 DOA[j-1]:=A[j];last:=last-1]ENDP;{delk} 【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"错误有以下几处:(1)过程参数没有类型说明; (2)出错条件判断:缺少 OR(i+k>last+1);(3)删除元素时 FOR 循环应正向,不应用反向 DOWNTO; (4)count 没定义;低效体现在两处:1)删除 k 个元素时,不必一个一个元素前移,而应一次前移 k 个位置;2)last 指针不应一次减 1,而应最后一次减 k。正确的高效算法如下:const m=64;TYPE ARR=ARRAY[1..m] OF integer;PROCEDURE delk(VAR A:ARR;VAR last:integer;i,k:integer);{从数组 A[1..last]中删除第 i 个元素起的 k 个元素,m 为 A 的上限}VAR count:integer;BEGINIF(i<0)OR(i>last)OR(k<0)OR(last>m)OR(i+k>last+1)THEN write(’error’)ELSE[FOR count:= i+k TO last DO A[count-k]:=A[count];last:=last-k;]END;"},{"id":"learncoder_149_16082","stem":" 设有矩阵a且 a= 121执行下列语句后,矩阵c和a的结果分别是什么?(1) FOR i:=1 TO 3 DOFOR j:=1 TO 3 DO c[i,j]:=a[a[i,j],a[j,i]](2) FOR i:=1 TO 3 DOFOR j:=1 TO 3 DO a[i,j]:=a[a[i,j],a[j,i]]【浙江大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)c= 3 3 21 1 13 3 1(2)a= 3 3 31 1 33 3 1"},{"id":"learncoder_149_16085","stem":" 设输入为整数数组 A[1..n],其中 1<=A[i]<=k(1<=i<=n);输出数组为 b[1..n];c[1..k]是临时工作空间;阅读下述算法后,回答下列问题:PROC Demo(A,B,k){(1)FOR i:=1 TO k DO C[i]:=0;(2)FOR j:=1 TO n DO C[A[j]]:= C[A[j]]+1;(3)FOR i:=2 TO k DO C[i]:= C[i]+ C[i-1](4)FOR j:=n DOWNTO 1 DO {(5) B[C[A[j]]]:=A[j];(6)C[A[j]]:=C[A[j]]-1 } }(a).当标号(2)行的循环执行完后,C[i](1<=i<=n)的值有何意义?(b).当标号(3)行的循环执行完后,C[i](1<=i<=n)的值有何意义?(c).算法执行后,B 的内容有何特点?(d).当 k=O(n)时,算法的时间复杂度是多少? 【中科院软件所】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"这是计数排序程序。(a)c[i](1<=i<=n)中存放 A 数组中值为 i 的元素个数。(b)c[i](1<=i<=n)中存放 A 数组中小于等于 i 的个数。(c)B 中存放排序结果,B[1..n]已经有序。(d)算法中有 4 个并列 for 循环语句,算法的时间复杂度为 O(n)。"},{"id":"learncoder_149_16088","stem":" 设矩阵 A=4000(1) 若将 A 视为对称矩阵,画出对其压缩存储的存储表,并讨论如何存取 A 中元素 aij (0<=i,j<4);(2) 若将 A 视为稀疏矩阵,画出 A 的十字链表结构。 【北京科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)将对称矩阵对角线及以下元素按行序存入一维数组中,结果如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image14.png'/>(2)因行列表头的“行列域”值用了 0 和 0,下面十字链表中行和列下标均从 1 开始。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image15.png'/>"},{"id":"learncoder_149_16076","stem":" 给出数组 A∶ARRAY[3..8,2..6] OF INTEGER;当它在内存中按行存放和按列存放时,分别写出数组元素 A[i,j]地址计算公式(设每个元素占两个存储单元)。【南开大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"LOC(A[i,j])=LOC(A[3,2])+[(i-3)*5+(j-2)]×2 (按行存放)LOC(A[i,j])=LOC(A[3,2])+[(j-2)*6+(i-3)]×2 (按列存放)"},{"id":"learncoder_149_16077","stem":" 已知 n 阶下三角矩阵 A(即当 i<j 时,有 aij=0),按照压缩存储的思想,可以将其主对角线以下所有元素(包括主对角线上元素 )依次存放于一维数组 B 中,请写出从第一列开始采用列序为主序分配方式时在 B 中确定元素 aij的存放位置的公式。【北京航空航天大学】 【中山大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"n 阶下三角矩阵元素 A[i][j](1<=i,j<=n,i>=j)。第 1 列有 n 个元素,第 j 列有 n-j+1 个元素,第 1 列到第 j-1列是等腰梯形,元素数为(n+(n-j+2)(j-1)/2,而 aij在第 j 列上的位置是为 i-j+1。所以 n 阶下三角矩阵 A 按列存储,其元素 aij在一维数组 B 中的存储位置 k 与 i 和 j 的关系为:k=(n+(n-(j-1)+1)(j-1)/2+(i-j+1)=(2n-j)(j-1)/2+i"},{"id":"learncoder_149_16080","stem":" 设数组 A 的长度为 2N,前 N 个元素 A[1..N]递减有序,后 N 个元素 A[N+1.. 2N]递增有序,且 2N 是 2 的整数次幂,即 k=log22N 为整数。例如 A[1..8]=[90,85,50,10,30,65,80,100]满足上述要求,这里 N=4,k=3,A 的前 4 个元素和后 4 个元素分别递减和递增有序。用此例调用如下的 Demo 过程,并要求:(1)给出 for 循环中每次执行 PerfectShuffle(A,N)和 CompareExchange(A,N)的结果;(2)解释 Demo 的功能; (3)给出 Demo 的时间复杂度。PROCEDURE PerfectShuffle(VAR A:arraytype; N:integer)[ i:=1; j:=1;WHILE i<=N DO[ B[j]:=A[i]; B[j+1]:=A[i+N]; i:=i+1; j:=j+2; ]A[1..2N]:=B[1..2N]; //B copy to A]PROCEDURE CompareExchange(VAR A:arraytype; N:integer)[ j:=1;WHILE j<2N DO[ IF A[j]>A[j+1] THEN A[j]←→A[j+1]; //交换 A[j]和 A[j+1]j:=j+2; ]]PROCEDURE Demo (VAR A:arraytype;N:integer)//A 的长度为 2N,k=log22N 为整数[ FOR i:=1 TO log22N DO[ PerfectShuffle(A,N); CompareExchange(A,N); ]] 【中科院计算所】 【中国科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)FOR 循环中,每次执行 PerfectShuffle(A,N)和 CompareExchange(A,N)的结果:第 1 次:A[1..8]=[90,30,85,65,50,80,10,100]A[1..8]=[30,90,65,85,50,80,10,100]第 2 次:A[1..8]=[30,50,90,80,65,10,85,100]A[1..8]=[30,50,80,90,10,65,85,100]第 3 次:A[1..8]=[30,10,50,65,80,85,90,100]A[1..8]=[10,30,50,65,80,85,90,100](2)Demo 的功能是将数组 A 中元素按递增顺序排序。(3)PerfectShuffle 中 WHILE 循环内是赋值语句,共 2N 次,WHILE 外成组赋值语句,相当 2N 个简单赋值语句;CompareExchange 中 WHILE 循环内是交换语句,最好情况下不发生交换,最差情况下发生 N 次交换,相当于 3N 个赋值语句;Demo 中 FOR 循环循环次数 log22N,故按赋值语句次数计算 Demo 的时间复杂度为:最好情况:O(4N*log22N) ≈O(Nlog(2*N));最差情况:O((4N+3N)*log22N)≈O(Nlog(2*N))。"},{"id":"learncoder_149_16075","stem":" 一个 n*n 的对称矩阵,如果以行或列为主序存入内存,则其容量为多少?【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"n(n+1)/2(压缩存储) 或 n^2(不采用压缩存储)"},{"id":"learncoder_149_16078","stem":"设有三对角矩阵(aij)n*n,将其三条对角线上的元素逐行地存于数组 B(1:3n-2)中,使得 B[k]=aij,求:(1)用i,j 表示 k 的下标变换公式;(2)用 k 表示 i,j 的下标变化公式。【山东科技大学】【长沙铁道学院】【东北大学】【北京工业大学】【南京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"三对角矩阵第一行和最后一行各有两个非零元素,其余每行均有三个非零元素,所以共有 3n-2 个元素。(1)主对角线左下对角线上的元素下标间有 i=j+1 关系,k 与 i 和 j 的关系为 k=3(i-1);主对角线上元素下标间有关系 i=j,k 与 i 和 j 的关系为 k=3(i-1)+1; 主对角线右上那条对角线上元素下标间有关系 i=j-1,k 与 i 和 j的关系为 k=3(i-1)+2。综合以上三等式,有 k=2(i-1)+j (1<=i,j<=n, |i-j|<=1)(2)i=k/3+1;(1≤k≤3n-2) // k/3 取小于 k/3 的最大整数。下同j=k-2(i-1)=k-2(k/3)=k%3+k/3"},{"id":"learncoder_149_16079","stem":"算法 Print 及所引用的数组 A 的值如下,写出调用 Print(1)的运行结果(其中 n=15)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image1.png'/>PROCEDURE print(i:integer);BEGINIF(i<=n〉 AND (A[i] <>‘0’) THENBEGIN Print(2*i);write(A[i]);Print(2*i+1); END;END;【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"这是一个递归调用问题,运行结果为:DBHEAIFJCKGL"},{"id":"learncoder_149_16067","stem":" 设 m×n 阶稀疏矩阵 A 有 t 个非零元素,其三元组表表示为 LTMA[1..(t+1),1..3],试问:非零元素的个数 t达到什么程度时用 LTMA 表示 A 才有意义?【北京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"稀疏矩阵 A 有 t 个非零元素,加上行数 mu、列数 nu 和非零元素个数 tu(也算一个三元组),共占用三元组表 LTMA的 3(t+1)个存储单元,用二维数组存储时占用 m*n 个单元,只有当 3(t+1)<m*n 时,用 LTMA 表示 A 才有意义。解不等式得 t<m*n/3-1。"},{"id":"learncoder_149_16070","stem":" 有一个二维数组 A[0:8,1:5],每个数组元素用相邻的 4 个字节存储,存储器按字节编址,假设存储数组元素A[0,1]的第一个字节的地址是 0,那么存储数组的最后一个元素的第一个字节的地址是多少?若按行存储,则 A[3,5]和 A[5,3]的第一个字节的地址是多少?若按列存储,则 A[7,1]和 A[2,4]的第一个字节的地址是多少?【上海海运学院】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)176 (2)76 和 108 (3)28 和 116。"},{"id":"learncoder_149_16073","stem":" 特殊矩阵和稀疏矩阵哪一种压缩存储后失去随机存取的功能?为什么?【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"特殊矩阵指值相同的元素或零元素在矩阵中的分布有一定规律,因此可以对非零元素分配单元(对值相同元素只分配一个单元),将非零元素存储在向量中,元素的下标 i 和 j 和该元素在向量中的下标有一定规律,可以用简单公式表示,仍具有随机存取功能。而稀疏矩阵是指非零元素和矩阵容量相比很小(t<<m*n),且分布没有规律。用十字链表作存储结构自然失去了随机存取的功能。即使用三元组表的顺序存储结构,存取下标为 i 和 j 的元素时,要扫描三元组表,下标不同的元素,存取时间也不同,最好情况下存取时间为 O(1),最差情况下是 O(n),因此也失去了随机存取的功能。"},{"id":"learncoder_149_16071","stem":" 设有三对角矩阵(ai,j)m╳n,将其三条对角线上的元素逐行的存于数组 B(1:3n-2)中,使得 B[k]=ai,j,求:(1)用 i,j 表示 k 的下标变换公式;(2)若 n=103,每个元素占用 L 个单元,则用 B[K]方式比常规存储节省多少单元。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)k = 3(i-1) (主对角线左下角,即 i=j+1)k = 3(i-1)+1 (主对角线上,即 i=j)k = 3(i-1)+2 (主对角线上,即 i=j-1)由以上三式,得 k=2(i-1)+j (1 i,j n; 1 k 3n-2)(2)103*103-(3*103-2)"},{"id":"learncoder_149_16074","stem":" 试叙述一维数组与有序表的异同。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"一维数组属于特殊的顺序表,和有序表的差别主要在于有序表中元素按值排序(非递增或非递减),而一维数组中元素没有按元素值排列顺序的要求。"},{"id":"learncoder_149_16068","stem":" 利用三元组存储任意稀疏数组时,在什么条件下才能节省存储空间。【西北工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"稀疏矩阵 A 有 t 个非零元素,加上行数 mu、列数 nu 和非零元素个数 tu(也算一个三元组),共占用三元组表 LTMA的 3(t+1)个存储单元,用二维数组存储时占用 m*n 个单元,只有当 3(t+1)<m*n 时,用 LTMA 表示 A 才有意义。解不等式得 t<m*n/3-1。"},{"id":"learncoder_149_16066","stem":" 若按照压缩存储的思想将 n×n 阶的对称矩阵 A 的下三角部分(包括主对角线元素)以行序为主序方式存放于一维数组 B[1..n(n+1)/2]中,那么,A 中任一个下三角元素 aij(i≥j),在数组 B 中的下标位置 k 是什么?【北京航空航天大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":" k=i(i-1)/2+j"},{"id":"learncoder_149_16069","stem":" 对一个有 t 个非零元素的 Amn 矩阵, 用 B[0..t][1..3]的数组来表示,其中第 0 行的三个元素分别为 m,n,t, 从第一行开始到最后一行,每行表示一个非零元素;第一列为矩阵元素的行号,第二列为其列号,第三列为其值。对这样的表示法,如果需要经常进行该操作---确定任意一个元素 A[i][j]在 B 中的位置并修改其值,应如何设计算法可以使时间得到改善?【长沙铁道学院】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"题中矩阵非零元素用三元组表存储,查找某非零元素时,按常规要从第一个元素开始查找,属于顺序查找,时间复杂度为 O(n)。若使查找时间得到改善,可以建立索引,将各行行号及各行第一个非零元素在数组 B 中的位置(下标)偶对放入一向量 C 中。若查找非零元素,可先在数组 C 中用折半查找到该非零元素的行号,并取出该行第一个非零元素在 B 中的位置,再到 B 中顺序(或折半)查找该元素,这时时间复杂度为 O(logn)。"},{"id":"learncoder_149_16072","stem":"已知 A 为稀疏矩阵,试从空间和时间角度,比较采用两种不同的存储结构(二维数组n和三元组表)完成求 ∑ aiii = 1运算的优缺点。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"稀疏矩阵 A 采用二维数组存储时,需要 n*n 个存储单元,完成求Σaii(1<=i<=n)时,由于 a[i][i]随机存取,速度快。但采用三元组表时,若非零元素个数为 t,需 3(t+1)个存储单元(第一个分量中存稀疏矩阵 A 的行数,列数和非零元素个数,以后t个分量存各非零元素的行值、列值、元素值),比二维数组节省存储单元;但在求Σaii(1<=i<=n)时,要扫描整个三元组表,以便找到行列值相等的非零元素求和,其时间性能比采用二维数组时差。"},{"id":"learncoder_149_16064","stem":" 设有五对角矩阵 A=(aij)20*20,按特殊矩阵压缩存储的方式将其五条对角线上的元素存于数组 A[-10:m]中,计算元素 A[15,16]的存储位置。【东北大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"五对角矩阵按行存储,元素在一维数组中下标(从 1 开始)k 与 i,j 的关系如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image13.png'/>A[15,16]是第 71 个元素,在向量[-10:m]中的存储位置是 60 。"},{"id":"learncoder_149_16065","stem":"数组 A[0..8, 1..10] 的元素是 6 个字符组成的串,则存放 A 至少需要多少个字节? A 的第 8 列和第 5 行共占多少个字节?若 A 按行优先方式存储,元素 A[8,5]的起始地址与当 A 按列优先方式存储时的哪个元素的起始地址一致? 【厦门大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"(1)540 (2)108 (3)i=3,j=10,即 A[3,10] "},{"id":"learncoder_149_16063","stem":"三维数组 A[1..10,-2..6,2..8]的每个元素的长度为 4 个字节,试问该数组要占多少个字节的存储空间?如果数组元素以行优先的顺序存贮,设第一个元素的首地址是 100,试求元素 A[5,0,7] 的存贮首地址。【上海海运学院】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"数组占的存储字节数=10*9*7*4=2520;A[5,0,7]的存储地址=100+[4*9*7+2*7+5]*4=1184"},{"id":"learncoder_149_16057","stem":"设有一个背包可以放入的物品重量为S,现有n件物品,重量分别为W1,W2,...,W”。问能否从这n件物品中 选择若干件放入背包,使得放入的重量之和正好是S。设布尔函数Knap(S, n)表示背包问题的解,Wi(i=1,2,..., n)均为正整数,并己顺序存储地在数组W中。请在下列算法的下划线处填空,使其正确求解背包问题。Knap(S,n)若S=0则 Knap — true否则若(S〈0)或(S〉>0且n<1)则 Knap — false否则若 Knap__1__ ,\t=true则 print (W[n]); Knap <—true否则 Knap<—Knap__2__,【山东工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"若第n件物品能放入背包,则问题变为能否再从n-1件物品中选岀若干件放入背包(这时背包可放入物品的重 量变为s-w[n])。若第n件物品不能放入背包,则考虑从n-1件物品选若干件放入背包(这时背包可放入物品仍为 s)。若最终s=0,则有一解;否则,若s<0或虽然s>0但物品数n<1,则无解。","type":"blank","options":{"__1__":"s-w[n],n-1","__2__":"s, n-1\t"}},{"id":"learncoder_149_16060","stem":" 数组 A 中,每个元素 A[i,j]的长度均为 32 个二进位,行下标从-1 到 9,列下标从 1 到11,从首地址 S 开始连续存放主存储器中,主存储器字长为 16 位。求:(1)存放该数组所需多少单元?(2)存放数组第 4 列所有元素至少需多少单元?(3)数组按行存放时,元素 A[7,4]的起始地址是多少?(4)数组按列存放时,元素 A[4,7]的起始地址是多少? 【大连海事大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"每个元素 32 个二进制位,主存字长 16 位,故每个元素占 2 个字长,行下标可平移至 1 到 11。(1)242 (2)22 (3)s+182 (4)s+142"},{"id":"learncoder_149_16058","stem":"数组 A[1..8,-2..6,0..6]以行为主序存储,设第一个元素的首地址是 78,每个元素的长度为 4,试求元素 A[4,2,3]的存储首地址。【厦门大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"68.空","type":"short_answer","answer":"958 三维数组以行为主序存储,其元素地址公式为:LOC(Aijk)=LOC(Ac1c2c3)+[(i-c1)V2V3+(j-c2)V3+(k-c3)]*L+1其中 ci,di是各维的下界和上界,Vi=di-ci+1 是各维元素个数,L 是一个元素所占的存储单元数。"},{"id":"learncoder_149_16061","stem":"假设按低下标优先存储整型数组 A(-3:8,3:5,-4:0,0:7)时,第一个元素的字节存储地址是 100,每个整数占 4个字节,问 A(0,4,-2,5)的存储地址是什么?【清华大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"1784 (公式:Loc(Aijkl)=100(基地)+[(i-c1)v2v3v4+(j-c2)v3v4+(k-c3)v4+(l-c4)]*4"},{"id":"learncoder_149_16059","stem":" 已知 b 对角矩阵(aij)n*n,以行主序将 b 条对角线上的非零元存储在一维数组中,每个数据元素占L个存储单元,存储基地址为S,请用 i,j 表示出 aij的存储位置。【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":" b 对角矩阵的 b 条对角线,在主对角线上方和下方各有 b/2 条对角线(为叙述方便,下面设 a= b/2 )。从第 1行至第 a 行,每行上的元素数依次是 a+1,a+2,...,b-2,b-1,最后的 a 行上的元素个数是 b-1,b-2,...,a+1。中间的(n-2a )行,每行元素个数都是b。故b条对角线上元素个数为 (n-2a)b+a*(a+b)。存放在一维数组V[1..nb-a(b-a)]中,其下标 k 与元素在二维数组中下标 i 和 j 的关系为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第5章/image12.png'/>"},{"id":"learncoder_149_16062","stem":"设有三维数组 A[-2:4,0:3,-5:1]按列序存放,数组的起始地址为 1210,试求 A(1,3,-2)所在的地址。【长沙铁道学院】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"short_answer","answer":"1210+108L (LOC(A[1,3,-2])=1210+[(k-c3)v2v1+(j-c2)v1+(i-c1)]*L(设每个元素占L个存储单元)"},{"id":"learncoder_149_16056","stem":"约瑟夫环问题:设有n个人围坐一圈,并按顺时针方向1—n编号。从第s个人开始进行报数,报数到第m个 人,此人岀圈,再从他的下一个人重新开始从1到m的报数进行下去,直到所有的人都岀圈为止。PROCEDURE Josef (A:ARRAY [1..n] OF integer; s,m:integer);BEGINFOR i:= 1 TO n DO A[i]:=i;sl:=s;FOR i:=n DOWNTO 2 DOBEGIN sl:= __1__; //计算岀圈人 s1IF sl=0 THEN __2__;w:=A[sl] ;\t//A[s1]岀圈FOR j:= __3__DO A[j]:=A[j+1]; A[i]:=w;END;write(‘岀圈序列为:’);//输岀岀圈序列FOR i :=n DOWNTO 1 DO write(A[i]); writeln ;END; 【华南师范大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"本题难点有二:一是如何求下一出圈人的位置,二是某人出圈后对该人的位置如何处理。按题中要求,从第s个人开始报数,报到第m个人,此人岀圈。n个人围成一圈,可看作环状,则下个岀圈人, 其位置是(s+m-1)%n,n是人数,是个变量,岀圈一人减1,算法中用i表示。对第二个问题,算法中用岀圈人后面人的位置依次前移,并把岀圈人的位置(下标)存放到当时最后一个人的位置(下标)。算法最后打印岀圈人的顺序。","type":"blank","options":{"__1__":"(s+m-1) MOD i ","__2__":"s1:=i","__3__":"s1 TO i-1"}},{"id":"learncoder_149_16055","stem":"完善下列程序,每小题在PASCAL语言(a)和C语言(b)中任选一题。下面的程序将数列1,2,3,…,n*n,依次 按蛇型方式存放在二维数组A[1..n,1..n]中。(a)算法的PASCAL语言程序描述(编者略):(b)算法的C语言程序描述: #define NMAX 10#include \"stdio.h”main(){ int i,j,n,k,p,q,m;int a [NMAX][NMAX];scanf(\"%d”,&n);m=1;for(k=1;__1__; k++){if (k<n) q=k;\telse __2__;for(p=1;p<=q;p++){if__3__\t{i=q-p+1; j=p; }else{i=p;j=q-p+1;} if__4__\t{i=i+n-q; j=j+n-q; }a[i][j]=m;__5__;}for(i=1;i<=n;i++){ for(j=1;j<=n;j++) printf(“%4d”,a[i][j]);printf(“\\n”);} }} 【上海大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"本题要求将1, 2, ...,n*n个自然数,按蛇型方式存放在二位数组A[n] [n]中。“蛇型”方式,即是按“副对角线”平行的各对角线,从左下到右上,再从右上到左下,存放n2个整数。对角线共2n-1条,在副对角线上方的对 角线,题目中用k表示第k条对角线(最左上角k=1),数组元素x和y方向坐标之和为k+1 (即题目中的i+j=k+1)。副对角线下方第k条对角线与第2n-k条对角线对称,其元素的下标等于其对称元素的相应坐标各加(k-n)。","type":"blank","options":{"__1__":"k〈=2*nT","__2__":" q=2*n-k","__3__":"k%2! =0","__4__":"k〉=n","__5__":"m++或m=m+1"}},{"id":"learncoder_149_16051","stem":"利用广义表的Get Head和Get Tail操作,从广义表L=( (apple, pear), (banana, orange))中分离岀原子banana的函数表达式是__1__。 【山东大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"GetHead(GetHead(GetTail(L)))"}},{"id":"learncoder_149_16054","stem":"完善下列程序,每小题在PASCAL语言(a)和C语言(b)中任选一题。下面是一个将广义表逆置的过程。例 如原来广义表为((a,b) , c, (d,e)),经逆置后为:((e,d) , c, (b,a))。(a)算法的PASCAL语言过程描述(编者略):(b)算法的C语言过程描述:typedef struct glistnode{int tag;struct glistnode *next;union{char data; struct{struct glistnode *hp,*tp;}ptr;}val; }*glist,gnode;glist reverse(p)glist p;{glist q,h,t,s;if(p==NULL) q=NULL;else{if__1__ { q=(glist)malloc(sizeof(gnode)); q-〉tag=0;q->val.data=p->val.data; }else {__2__ if __3__{t=reverse(p-〉val.ptr.tp); s=t;while(s-〉val.ptr.tp!=NULL) s=s-〉val.ptr.tp; s-〉val.ptr.tp=(glist)malloc(sizeof(gnode)); s=s-〉val.ptr.tp;s-〉tag=1;s-〉val.ptr.tp=NULL;s-〉val. ptr. hp=h;__4__\t }else {q=(glist)malloc(sizeof(gnode));q-〉tag=1; q-〉val. ptr. Tp=NULL; __5__; }}}return(q);}","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"(p->tag==0)","__2__":"h=reverse(p->val.ptr.hp)","__3__":"(p->val.ptr.tp)\t","__4__":"s->val.ptr.tp=t","__5__":"q->val.ptr.hp=h\t"}},{"id":"learncoder_149_16052","stem":"己知a数组元素共5个,依次为12, 10, 5, 3, 1; b数组元素共4个,依次为4,6,8,15,则执行如下所示的 过程语句sort后得到c数组各元素依次为15, 12, 10, 8, 6, 5, 4, 3, 1;数组a, b, c的长度分别为l=5, m=4, n=9请在程 序中方框内填入正确的成分,完成上述要求。PROCEDURE sort;VAR i, j, k, x: integer; d: ARRAY[1..m] OF integer;BEGINFOR i:=1 TO m DO d[i]:=__1__;i:=1; j:=1; k:=1;WHILE (i<=l) AND (j<=m) DOBEGINIF a[i]>d[j] THEN BEGIN__2__ ;__3__ ENDELSE BEGIN __4__\t; __5__END;c[k]:=x;__6__END;WHILE__7__\tDOBEGIN c[k]:=a[i]; k:=k+1; i:=i+1;END;WHILE__8__\tDOBEGIN c[k]:=d[j]; k:=k+1; j:=j+1;END;END. {sort}","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"b[m-i+1]","__2__":"x:=a[i]","__3__":"i:=i+1","__4__":"x:=d[j]","__5__":"j:=j+1 ","__6__":"k:=k+1","__7__":"i<=l","__8__":"j<=m"}},{"id":"learncoder_149_16050","stem":"己知广义表 A= (((a, b), (c), (d, e))), head (tail (tail (head (A))))的结果是__1__。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"(d,e)"}},{"id":"learncoder_149_16053","stem":"下列程序段search(a, n, k)在数组a的前n(n>=1)个元素中找岀第k(1<=k<=n)小的值。这里假设数组a中各元 素的值都不相同。#define MAXN 100int a[MAXN],n,k;int search_c(int a[], int n, int k){int low, high, i, j, m, t;k--,;low=0 ;high=n-1;do {i=low; j=high ; t=a[low];do{while (i<j && t<a[j]) j--;if (i<j)\ta[i++]=a[j];while (i<j && t>=a[i])\ti++if (i<j) a[j--]=a[i];} while (i<j);a[i]=t;if __1__\t;if (i<k) low=__2__\t; else high=__3__;}while__4__;return(a[k]);}","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"本算法利用快速排序思想,找到第k个元素的位置(下标k-1因而开初有k—)。内层do循环以t(t=a[low])为 “枢轴”找到其应在i位置。这时若i等于k,则算法结束。(即第一个空格处if(i==k) return) o否则,若i<k, 就在i+1至high中间去查;若i〉k,则在low到i-1间去找,直到找到i=k为止。","type":"blank","options":{"__1__":"(i==k) return","__2__":"i+1","__3__":"i-1","__4__":"i!=k"}},{"id":"learncoder_149_16048","stem":"广义表 A((( ), (a, (b), c))), head(tail(head(tail(head(A))))等于__1__\t。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":" (b)"}},{"id":"learncoder_149_16049","stem":"广义表运算式 HEAD(TAIL(((a, b, c), (x, y, z))))的结果是\t__1__。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"(x,y,z)"}},{"id":"learncoder_149_16047","stem":"设某广义表H=(A, (a,b,c)),运用head函数和tail函数求岀广义表H中某元素b的运算式__1__。【北京科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":" head(tail(head(tail(H)))) "}},{"id":"learncoder_149_16044","stem":"广义表(a, (a, b),d, e, ((i,j),k))的长度是__1__,深度是__2__。","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"5","__2__":"3"}},{"id":"learncoder_149_16045","stem":"己知广义表LS=(a, (b, c, d), e),运用head和tail函数取岀LS中原子b的运算是__1__。【燕山大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":" head(head(tail(LS)))"}},{"id":"learncoder_149_16046","stem":"广义表A= (((a, b), (c, d, e))),取岀A中的原子e的操作是:__1__。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":" head(tail(tail(head(tail(head(A))))))"}},{"id":"learncoder_149_16041","stem":"设广义表L=((), ()),则head(L)是__1__;tail(L)是__2__; L的长度是__3__;深度是__4__【中科院计算所】【中国科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"()","__2__":"(())","__3__":"2","__4__":"2"}},{"id":"learncoder_149_16039","stem":"广义表简称表,是由零个或多个原子或子表组成的有限序列,原子与表的差别仅在于__1__。为了区分原子和表,一般用__2__表示表,用__3__表示原子。一个表的长度是指__4__,而表的深度是__5__。【山东工业大学】\t【山东大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"原子(单元素)是结构上不可再分的,可以是一个数或一个结构,而表带结构,本质就是广义表,因作为广义表的元素故称为子表","__2__":"大写字母","__3__":"小写字母","__4__":"表中元素的个数","__5__":"表展开后所含括号的层数"}},{"id":"learncoder_149_16042","stem":"己知广义表A=(9,7, ( 8,10, (99)), 12),试用求表头和表尾的操作Head()和Tail()将原子元素99从A中取出来。【西安交通大学】__1__","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"head(head(tail(tail(head(tail(tail(A)))))))"}},{"id":"learncoder_149_16043","stem":"广义表的深度是__1__。【北京轻工业学院】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"表展开后所含括号的层数 "}},{"id":"learncoder_149_16040","stem":"广义表的__1__定义为广义表中括弧的重数。 【重庆大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"深度"}},{"id":"learncoder_149_16038","stem":"广义表的表尾是指除第一个元素之外,__1__。 【中山大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"其余元素组成的表"}},{"id":"learncoder_149_16035","stem":"假设一个15阶的上三角矩阵A按行优先顺序压缩存储在一维数组B中,则非零元素A-在B中的存储位置k=__1__。(注:矩阵元素下标从1开始)【北京工商大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"93"}},{"id":"learncoder_149_16032","stem":"所谓稀疏矩阵指的是__1__。【厦门大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"非零元很少(t<<m*n)且分布没有规律\t"}},{"id":"learncoder_149_16033","stem":"对矩阵压缩是为了__1__。 【北京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"节省存储空间。"}},{"id":"learncoder_149_16036","stem":"设下三角矩阵A= an1 an2 ..\t.. ann如果按行序为主序将下三角元素Ai j (i, j)存储在一个一维数组B[ 1..n(n+1)/2 ]中,对任一个三角矩阵元素Aij, 它在数组B中的下标为__1__。【北方交通大学2001】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"i(i-1)/2+j"}},{"id":"learncoder_149_16031","stem":"设有一个10阶对称矩阵A采用压缩存储方式(以行为主序存储:an=1),则如的地址为__1__。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"33 (k=i(i-1)/2+j) (1<=i,j<=n)"}},{"id":"learncoder_149_16034","stem":"上三角矩阵压缩的下标对应关系为:__1__。【福州大学 1998 二、6 (2分)】【南京大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"上三角矩阵中,主对角线上第r(1 r n)行有n-r+1个元素,如所在行的元素数是j-i+1。所以,元素在一维 数组的下标 k 和二维数组下标关系:k=((i-1)*(2n-i+2))/2+(j-i+1) = (i-1) (2n-i)/2+j (i j)"}},{"id":"learncoder_149_16037","stem":"当广义表中的每个元素都是原子时,广义表便成了__1__。【长沙铁道学院】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"线性表"}},{"id":"learncoder_149_16022","stem":"二维数组a[4] [5] [6](下标从0开始计,a有4*5*6个元素),每个元素的长度是2,则a[2] [3] [4]的地址是__1__。(设a[0] [0] [0]的地址是1000,数据以行为主方式存储)【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"公式:LOC(aijk)=LOC(aoo0)+ [v2*v3*(i-C1)+v3*(j-C2)+ (k-C3)]*l (l 为每个元素所占单元数)","type":"blank","options":{"__1__":"1164"}},{"id":"learncoder_149_16025","stem":"己知二维数组A[1.. 10, 0.. 9]中每个元素占4个单元,在按行优先方式将其存储到起始地址为1000的连续存储 区域时,A[5, 9]的地址是:__1__。【厦门大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"1196"}},{"id":"learncoder_149_16028","stem":"设n行n列的下三角矩阵A己压缩到一维数组B[1..n* (n+1) /2]中,若按行为主序存储,则A[i,j]对应的B中存储位置为__1__。 【武汉大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":" i(i-1)/2+j (1<=i,j<=n)"}},{"id":"learncoder_149_16023","stem":"设有二维数组A[0..9, 0..19],其每个元素占两个字节,第一个元素的存储地址为100,若按列优先顺序存储,则元素A[6,6]存储地址为__1__。【北京工商大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"232"}},{"id":"learncoder_149_16026","stem":"用一维数组B与列优先存放带状矩阵A中的非零元素A[i,j] (1<=i<=n,i-2<=j <=i+2),B中的第8个元素是A中 的第__1__行,第","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"第1行第3列"}},{"id":"learncoder_149_16027","stem":"设数组A[0.. 8, 1. . 10],数组中任一元素A[i, j]均占内存48个二进制位,从首地址2000开始连续存放在主内 存里,主内存字长为16位,那么(1)存放该数组至少需要的单元数是__1__(2)存放数组的第8列的所有元素至少需要的单元数是__2__(3)数组按列存储时,元素A[5,8]的起始地址是__3__。【中国矿业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"270","__2__":"27","__3__":"2204"}},{"id":"learncoder_149_16030","stem":"己知三对角矩阵A【1..9,1..9】的每个元素占2个单元,现将其三条对角线上的元素逐行存储在起始地址为1000的连续的内存单元中,则元素A[7,8]的地址为__1__。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"三对角矩阵按行存储:k=2(i-1)+j (1〈=i,j〈=n)","type":"blank","options":{"__1__":"1038"}},{"id":"learncoder_149_16024","stem":"己知数组A[0..9, 0.. 9]的每个元素占5个存储单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[6, 8]的地址为。【合肥工业大学】__1__","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"1340"}},{"id":"learncoder_149_16019","stem":"设二维数组A [-20... 30, -30... 20],每个元素占有4个存储单元,存储起始地址为200.如按行优先顺元素A[25, 18]的存储地址为__1__;如按列优先顺序存储,则元素A[-18, -25]的存储地址为__2__。【交通大学1999】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"9572","__2__":"1228 "}},{"id":"learncoder_149_16017","stem":"下面说法不正确的是( )。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"A":"广义表的表头总是一个广义表","D":"广义表可以是一个多层次的结构","C":"广义表难以用顺序存储结构","B":"广义表的表尾总是一个广义表"},"answer":"A"},{"id":"learncoder_149_16020","stem":"设数组a[1.. 50, 1.. 80]的基地址为2000,每个元素占2个存储单元,若以行序为主序顺序存储,则元素的存储地址为__1__;若以列序为主序顺序存储,则元素a[45, 68]的存储地址为__2__。【华中理工大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"9174","__2__":"8788"}},{"id":"learncoder_149_16018","stem":"数组的存储结构采用存储方式__1__。【中山大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"顺序存储结构 "}},{"id":"learncoder_149_16021","stem":"将整型数组A[1..8, 1..8]按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[7, 3]的地址是:__1__。【合肥工业大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"blank","options":{"__1__":"1100"}},{"id":"learncoder_149_16016","stem":"设广义表1= ((a,b,c)),则L的长度和深度分别为()。【武汉大学2000】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"C":"1和2","B":"1和3","D":"2和3","A":"1和1"},"answer":"C"},{"id":"learncoder_149_16014","stem":"广义表((a,b,c,d))的表头是(),表尾是()。【青岛大学200】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"D":"(b,c,d)","A":"a","B":"()","C":"(a,b,c,d)"},"answer":"C"},{"id":"learncoder_149_16015","stem":"广义表(a, (b, c), d, e)的表头为()。【中山大学1998】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"D":"(a)","A":"a","B":"a,(b,c)","C":"(a,(b,c))"},"answer":"A"},{"id":"learncoder_149_16009","stem":"己知广义表L= ((x,y,z), a, (u, t, w)),从L表中取岀原子项t的运算是()。【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"A":"head(tail(tail(L)))","D":"head(tail(head(tail(tail(L)))))","B":"tail(head(head(tail(L))))","C":"head(tail(head(tail(L))))"},"answer":"D"},{"id":"learncoder_149_16012","stem":"广义表运算式Tail(((a,b),仏d)))的操作结果是()。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"B":"c,d","D":"d","A":"(c,d)","C":"((c,d))"},"answer":"C"},{"id":"learncoder_149_16010","stem":"己知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取岀LS中原子e的运算是()。【西安电子科技大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"B":"tail(head(LS))","A":"head(tail(LS))","D":"head(tail(tail(head(LS))))","C":"head(tail(head(tail(LS)))"},"answer":"C"},{"id":"learncoder_149_16013","stem":"广义表L= (a, (b, c)),进行Tail (L)操作后的结果为()。【中山大学1999】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"A":"c","C":"(b,c)","B":"b,c","D":"((b,c))"},"answer":"D"},{"id":"learncoder_149_16011","stem":"广义表A=(a, b,(c,d), (e, (f, g))),则下面式子的值为()。【北京邮电大学】Head(Tail(Head(Tail(Tail(A)))))","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"B":"(d)","A":"(g)","D":"d","C":"c"},"answer":"D"},{"id":"learncoder_149_16003","stem":"A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N (N+1) /2]中,则对任一上三角元素a[i] [j]对应T[k ]的下标k是(\t)。【青岛大学2002】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"D":"j(i-1)/2+1","A":"i(i-1)/2+j","B":"j(j-1)/2+i","C":"i(j-i)/2+1"},"answer":"B"},{"id":"learncoder_149_16006","stem":"数组A[0..4,-1..-3,5……7]中含有元素的个数()。【中山大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"B":"45","D":"16","C":"36","A":"55"},"answer":"B"},{"id":"learncoder_149_16007","stem":"用数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使j沿链移动的操作为()。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"D":"j=r[j]-> next","A":"j=r[j].next","C":"j=j->next","B":"j=j+1"},"answer":"A"},{"id":"learncoder_149_16001","stem":"若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B [1..(n(n+1))/2]中,则在B中确定九(i<j)的位置k的关系为()。","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"B":"j*(j-1)/2+i","A":"i*(i-1)/2+j","D":"j*(j+1)/2+i","C":"i*(i+1)/2+j"},"answer":"B"},{"id":"learncoder_149_16004","stem":"设二维数组A[1…… m, 1……n](即m行n列)按行存储在数组B[1……m*n]中,则二维数组元素A[i, j]在一维 数组B中的下标为()。【南京理工大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"B":"(i-1)*n+j-1","A":"(i-1)*n+j","D":"j*m+i-1","C":"i*(j-1)"},"answer":"A"},{"id":"learncoder_149_16002","stem":"设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1. . n(n+1)/2] 中,对上述任一元素aj(1<=i, j<=n,且i<=j)在B中的位置为()。","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"A":"i(i-l)/2+j","D":"i(i-l)/2+j-1","B":"j(j-l)/2+i","C":"j(j-l)/2+i-1"},"answer":"B"},{"id":"learncoder_149_16005","stem":"有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是( )。【南京理工大学 1999】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"C":"18000","A":"60","D":"33","B":"66"},"answer":"B"},{"id":"learncoder_149_16008","stem":"对稀疏矩阵进行压缩存储目的是( )。【北京工商大学】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"D":"降低运算的时间复杂度","C":"节省存储空间","A":"便于进行矩阵运算","B":"便于输入和输岀"},"answer":"C"},{"id":"learncoder_149_15996","stem":"数组A[0..5, 0..6 ]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5, 5]的地址是(\t)。【南京理工大学2001】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"D":"1210","A":"1175","C":"1205","B":"1180"},"answer":"A"},{"id":"learncoder_149_15994","stem":"设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8 , j的值为1到10,数组从内存首地址BA 开始顺序存放,当用以列为主存放时,元素A[5, 8]的存储首地址为()。","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"A":"BA+141","B":"BA+180","C":"BA+222","D":"BA+225"},"answer":"B"},{"id":"learncoder_149_15997","stem":"有一个二维数组A[0:8, 1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组元素A[0, 1] 的第一个字节的地址是0,存储数组A的最后一个元素的第一个字节的地址是()。若按行存储,和A[5,3]的第一个字节的地址是()和()。若按列存储,则A[7, 1]和A[2,4]的第一个字节()和()。 ().【上海海运学院】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"B":"76、92、132、176、184","A":"176、76、108、28、116","D":"76、92、132、176、116","C":"176、76、12、176、192"},"answer":"A"},{"id":"learncoder_149_16000","stem":"二维数组A的每个元素是由6个字符组成的串,其行下标i=0,1,……8,列下标j=1,2,,……10。若A按行先存储,元素A[8, 5]的起始地址与当A按列先存储时的元素( )的起始地址相同。设每个字符占一个字节。","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"B":"A[3,10]","D":"A[0,9]","A":"A[8,5]","C":"A[5,8]"},"answer":"B"},{"id":"learncoder_149_15995","stem":"假设以行序为主序存储二维数组A=array[1.. 100, 1.. 100],设每个数据元素占2个存储单元,基地址为10,则L0C[5, 5]=(\t)。【福州大学1998】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"D":"1020","B":"818","C":"1010","A":"808"},"answer":"B"},{"id":"learncoder_149_15998","stem":"将一个A[1. . 100, 1. . 100]的三对角矩阵,按行优先存入一维数组B[1……298]中,A中元素A6666(即i有表达式( A+A*2 )+2*B*3#,则将生成如下TOKENL:i=66, j=65),在B数组中的位置K为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"A":"198","C":"197","B":"195"},"answer":"B"},{"id":"learncoder_149_15999","stem":"二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。从供选择的 答案中选出应填入下列关于数组存储叙述中( )内的正确答案。(1)存放A至少需要( )个字节;(2)A的第8列和第5行共占( )个字节;(3)若A按行存放,元素A[8, 5]的起始地址与A按列存放时的元素()的起始地址一致。供选择的答案:()","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"D":"240、540、A[8,5]","A":"540、108、A[3,10]","C":"240、540、A[0,9]","B":"540、108、A[5,8]"},"answer":"A"},{"id":"learncoder_149_15993","stem":"有一个二维数组A[1:6, 0:7]每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组的体积 是()个字节。假设存储数组元素A[1, 0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字 节的地址是()。若按行存储,则A[2, 4]的第一个字节的地址是()。若按列存储,则A[5, 7]的第一个字节 的地址是()就一般情况而言,当()时,按行存储的A[I, J]地址与按列存储的A[J, I]地址相等。()","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"C":"12、276、96、114、行与列的上界相同","D":"11、276、234、115、行的元素个数与列的元素个数相同","B":"12、234、96、114、行与列的下界相同","A":"288、282、72、276、行与列的上、下界都相同"},"answer":"A"},{"id":"learncoder_149_15992","stem":"设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,弧为第一元素,其存储地址为1,每个元素 占一个地址空间,则a85的地址为()。【燕山大学2001】","key_points":"知识点.练习.专业课练习.数据结构.数组矩阵和广义表","analysis":"空","type":"choice","options":{"C":"18","D":"40","B":"33","A":"13"},"answer":"B"},{"id":"learncoder_153_17431","stem":"如下函数mergesort()执行的时间复杂度为多少?假设函数调用被写为mergesoct(1,n),函数merge()的时间复杂度为o(n).<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第1章)/image1.png'/>","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"空","type":"short_answer","answer":"\t<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第1章)/image3.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第1章)/image4.png'/>"},{"id":"learncoder_153_17427","stem":"以下属于逻辑结构的是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"本题考查数据的逻辑结构。有序表指出了表中数据是根据一定逻辑顺序排列的,是一种逻辑结构","type":"choice","options":{"B":"散列表","C":"有序表","A":"顺序表","D":"单链表"},"answer":"C"},{"id":"learncoder_153_17430","stem":"有下列运行时间函数:( 1)f1(n)=1000; (2)f2(n)=n2+1000n; (3)f3(n)=3n3+100n2十n十1; 分别写出相应的以o表示的运算时间","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"空","type":"short_answer","answer":"\t<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第1章)/image2.png'/>"},{"id":"learncoder_153_17425","stem":"以下数据结构中,(\t)是非线性数据结构。","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"本题考查基本数据结构。树是一种分支结构,显然不属于线性结构.","type":"choice","options":{"B":"队","C":"栈","A":"树"},"answer":"A"},{"id":"learncoder_153_17422","stem":"下述(\t)与数据的存储结构无关。","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"本题考查基本数据结构\t选项A,栈是逻辑结构。选项B,双向链表也说明线性表是以链式结构存储的。 选项c,散列是算法,散列存储方法本质上是顺序存储方法的扩展。散列表本质上是顺序表的扩展。 选项D,线索树是在链式存储结构的基础上对树进行线索,与链式存储结构有关。 选项E,循环队列是建立在顺序存储结构上的。","type":"choice","options":{"D":"线索树","A":"栈","B":"双向链表","C":"散列表","E":"循环队列"},"answer":"A"},{"id":"learncoder_153_17421","stem":"从逻辑上可以把数据结构分为()","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"","type":"choice","options":{"D":"初等结构、构造型结构","B":"顺序结构、链式结构","C":"线性结构、非线性结构","A":"动态结构、静态结构"},"answer":"C"},{"id":"learncoder_153_17424","stem":"程序段for (i=n-l; i>=l;--i)for (j=l; j<=i; ++j)if (A[j]>A[j+l] ) A[j]与A[j+1]对接;其中n为正整数,则最后一行的语句频度在最坏情况下是()。","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"本题考查算法时闸复杂度的计算。此算法为冒泡排序算法的核心语旬,最坏情况下的时间复杂度为o(N2).","type":"choice","options":{"D":"O(n2)","B":"O(nlog2n)","A":"0(n)","C":"0(n3)"},"answer":"D"},{"id":"learncoder_153_17420","stem":"下面说法错误的是(\t)。(1)算法原地工作的含义是指不需要任何额外的辅助空间(2)在相同的规模n下,复杂度0(n)的算法在时间上总是优于复杂度0(2\")的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界(4)同一个算法,实现语言的级别越高,执行效率就越低","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"本题考查算法的时间复杂度和空闽复杂度的相关知识。(1)一个可执行程序除了需要内存空间来寄存本身的指令、′常数、变量和输入数据外,还需要额外 的空间,如果这个额外空间相对于问题的规模(输入数据)来说是个常数,我们就称之为原地工作。因 此(1)不对。(2) 1.2.1考研中的算法时间复杂度分析中已经讲过。(3)对于O(1)、 O(16g2h)、 O(h)等, O的形式定义为:若坏n)是正数n的一个函数,则O(坏n))表示存在一个正常数M,使得当n≧no时满足IO(耿n))l≦Mx瞅n)l,也就是o(ftn))给出了函数坏n)的一个上界。 (4)这旬话是严版数据结构中的原旬,大多数情况下应该是这样,但是不能说得这么绝对,而需要 看编译链接后最终的机器指令,这些指令操作的次数越少,说明该语言在某种编译链接环境下的效率越 高。实际上即使同一种语言在不同的编译环境下,也有可能不同。综上所述,本题答案为c","type":"choice","options":{"B":"(1), (2)","A":"(1)","C":"(1), (4)","D":"(3)"},"answer":"C"},{"id":"learncoder_153_17423","stem":"在下面的程序段中,对x的赋值语句的频度为(\t)。for(i=0;i<n; ++i)for(j=0;j<n; ++j)++x;","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"本题考查算法时闸复杂度的计算。坷n)刊2,因此时间复杂度是o(N2)","type":"choice","options":{"C":"0(12)","B":"0(n)","A":"0(2n)","D":"O(1og2n)"},"answer":"C"},{"id":"learncoder_153_17426","stem":"连续存储设计时,存储单元的地址(\t).","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"本题考查数据的物理结构。顺序存储结构要开辟一片连续的存储空间,可知本题选A","type":"choice","options":{"C":"不一定连续","A":"—定连续","B":"—定不连续","D":"部分连续,部分不连续"},"answer":"A"},{"id":"learncoder_153_17419","stem":"下面关于算法说法正确的是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"选项A,计算机程序只是实现算法的一种手段,手工也可以完成。 选项B,算法可以理解为由基本运算及规定的运算顺序所构成的完整的解题步骤。程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。两者显然是不同的概念。 选项C,明显错误,本章算法的基本概念中已经讲过","type":"choice","options":{"C":"算法的可行性是指指令不能有二义性","A":"算法最终必须由计算机程序实现","D":"以上几个都是错误的","B":"为解决某问题的算法同为该问题编写的程序含义是相同的"},"answer":"D"},{"id":"learncoder_153_17415","stem":"算法的计算量的大小称为算法的(\t)","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"本题考查算法时闸复杂度的定义。算法中基本操作的重复执行次数就是算法的计算量,将其 大小作为算法的时间复杂度,因此选B","type":"choice","options":{"D":"难度","C":"现实性","B":"复杂性","A":"效率"},"answer":"B"},{"id":"learncoder_153_17418","stem":"一个算法应该是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"空","type":"choice","options":{"D":"A和C","B":"问题求解步骤的描述","C":"要满足5个基本特性","A":"程序"},"answer":"B"},{"id":"learncoder_153_17417","stem":"计算机算法是指(),它必须具备()这3个特性。","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"空","type":"choice","options":{"B":"计算方法;可执行性、可移植性、可扩充性","A":"计算方法;可执行性、可移植性、可扩充性","C":"解决问题的步骤序列;可执行性、确定性、有穷性","D":"确定性、有穷性、稳定性;易读性、稳定性、安全性"},"answer":"C"},{"id":"learncoder_153_17416","stem":"算法的时间复杂度取决于( )","key_points":"知识点.练习.专业课练习.数据结构.绪论","analysis":"本题考查算法时间复杂度的定义。算法时间复杂度即为基本操作执行次数,显然问题规模越 大,基本操作的次数越多,因此时闸复杂度与规模有关。在相同的规模下,与数据初态也有关,如两个 数相乘,有一个因子为0时的计算速度显然要比两个因子都非0的情况要快。因此本题选C","type":"choice","options":{"B":"待处理数据的初态","A":"问题的规模","C":"A和B"},"answer":"C"},{"id":"learncoder_152_16958","stem":"已知两个各包含N和M个记录的排好序的文件能在O(N+M)时间内合并为一个包含N+M个记录的排好,当有多于两个排好序的文件要被合并在一起时,只需重复成对地合并便可完成。合并的步骤不同,所需花费的记录 移动次数也不同。现有文件F1, F2, F3, F4, F5,各有记录数为20, 30, 10, 5和30,试找岀记录移动次数最少的合并步骤。","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"类似最优二叉树(哈夫曼树),可先合并含较少记录的文件,后合并较多记录的文件,使移动次数减少。见下面的哈夫曼树。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第10章/image2.png'/>"},{"id":"learncoder_152_16957","stem":"试比较顺序文件,索引非顺序文件,索引顺序文件,散列文件的存储代价,检索,插入,删除记录时的优点和 缺点。【西北工业大学 1999 四 】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"(1)顺序文件只能顺序查找,优点是批量检索速度快,不适于单个记录的检索。顺序文件不能象顺序表那样插入、删除和修改,因文件中的记录不能象向量空间中的元素那样“移动”,只能通过复制整个文件实现上述操作。(2)索引非顺序文件适合随机存取,不适合顺序存取,因主关键字未排序,若顺序存取会引起磁头频繁移动。索引顺序文件是最常用的文件组织,因主文件有序,既可顺序存取也可随机存取。索引非顺序文件是稠密索引,可以“预查找”,索引顺序文件是稀疏索引,不能“预查找”,但由于索引占空间较少,管理要求低,提高了索引的查找速度。(3)散列文件也称直接存取文件,根据关键字的散列函数值和处理冲突的方法,将记录散列到外存上。这种文件组织只适用于像磁盘那样的直接存取设备,其优点是文件随机存放,记录不必排序,插入、删除方便,存取速度快,无需索引区,节省存储空间。缺点是散列文件不能顺序存取,且只限于简单查询。经多次插入、删除后,文件结构不合理,需重组文件,这很费时。"},{"id":"learncoder_152_16959","stem":"已知职工文件中包括职工号、职工姓名、职务和职称 4 个数据项(见下表)。职务有校长、系主任、室主任和 教员;校长领导所有系主任,系主任领导他所在系的所有室主任,室主任领导他所在室的全体教员;职称有教授、 副教授和讲师 3 种。请在职工文件的数据结构中设置若干指针和索引,以满足下列两种查找的需要:(1)能够检索岀全体职工间领导与被领导的情况;(2)能够分别检索岀全体教授、全体副教授、全体讲师。 要求指针数量尽可能少,给岀各指针项索引的名称及含义即可。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第10章/image1.png'/>","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"在职务项中增加一个指针项,指向其领导者。因题目中未提岀具体的隶属关系,如哪个系的系主任, 哪个系哪个室的室主任,哪个室的教员等。这里假设每个室主任隶属于他前边离他最近的那个系主任,每个教员隶 属于他前边离他最近的那个室主任,见下面多重表文件。在职称项中增加一个指针项,指向同一职称的下一个职工, 增加一个次关键字索引表:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第10章/image3.png'/>"},{"id":"learncoder_152_16951","stem":"一个ISAM文件除了主索引外,还包括哪两级索引?【北京科技大学1999 一、8 】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"ISAM文件有三级索引:磁盘组、柱面和磁盘,柱面索引存放在某个柱面上,若柱面索引较大,占多个磁道时,可建立柱面索引的索引—主索引。故本题中所指的两级索引是盘组和磁道。"},{"id":"learncoder_152_16954","stem":"简单比较文件的多重表和倒排表组织方式各自特点。【东南大学 2000 一、2】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"多重表文件是把索引与链接结合而形成的组织方式。记录按主关键字顺序构成一个串联文件,建立主关键字的索引(主索引)。对每一次关键字建立次关键字索引,具有同一关键字的记录构成一个链表。主索引为非稠密索引,次索引为稠密索引,每个索引项包括次关键字,头指针和链表长度。多重表文件易于编程,也易于插入,但删除繁锁。需在各次关键字链表中删除。"},{"id":"learncoder_152_16956","stem":"为什么文件的倒排表比多重表组织方式节省空间? 【东南大学 2001 一、2 】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"排表有两项,一是次关键字值,二是具有相同次关键字值的物理记录号,这些记录号有序且顺序存储,不使用多重表中的指针链接,因而节省了空间。"},{"id":"learncoder_152_16953","stem":"为什么在倒排文件(inverted files)组织中,实际记录中的关键字域(key fields)可删除以节约空间?而在多表(multilists)结构中这样做为什么要牺牲性能?","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"因倒排文件组织中,倒排表有关键字值及同一关键字值的记录的所有物理记录号,可方便地查询具有同一关键字值的所有记录;而多重表文件中次关键字索引结构不同,删除关键字域后查询性能受到影响。"},{"id":"learncoder_152_16950","stem":"分析 ISAM 文件(INDEXED SEQUENTIAL ACCESS METHORD)和 VSAM 文件(VIRTUAL STORAGE ACCESS METHORD) 的应用场合、优缺点等。【华南理工大学 2001 一、4 】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"ISAM是一种专为磁盘存取设计的文件组织形式,采用静态索引结构,对磁盘上的数据文件建立盘组、柱面、磁道三级索引。ISAM文件中记录按关键字顺序存放,插入记录时需移动记录并将同一磁道上最后的一个记录移至溢岀区,同时修改磁道索引项,删除记录只需在存储位置作标记,不需移动记录和修改指针。经过多次插入和删除记录后,文件结构变得不合理,需周期整理ISAM文件。VSAM文件采用B+树动态索引结构,文件只有控制区间和控制区域等逻辑存储单位,与外存储器中柱面、磁道等具体存储单位没有必然联系。VSAM文件结构包括索引集、顺序集和数据集三部分,记录存于数据集中,顺序集和索引集构成B+树,作为文件的索引部分可实现顺链查找和从根结点开始的随机查找。与ISAM文件相比,VSAM文件有如下优点:动态分配和释放存储空间,不需对文件进行重组;能保持较高的查找效率,且查找先后插入记录所需时间相同。因此,基于B+树的VSAM文件通常作为大型索引顺序文件的标准组织。"},{"id":"learncoder_152_16955","stem":"组织待检索文件的倒排表的优点是什么?【北京科技大学 2001 一、10 】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"倒排表作索引的优点是索引记录快,因为从次关键字值直接找到各相关记录的物理记录号,倒排因此而得名(因通常的查询是从关键字查到记录)。在插入和删除记录时,倒排表随之修改,倒排表中具有相同次关键字的记录号是有序的。"},{"id":"learncoder_152_16952","stem":"倒排文件 【山东工业大学 1998 一、1-3】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"倒排文件是一种多关键字的文件,主数据文件按关键字顺序构成串联文件,并建立主关键字索引。对次关键字也建立索引,该索引称为倒排表。倒排表包括两项,一项是次关键字,另一项是具有同一次关键字值的记录的物理记录号(若数据文件非串联文件,而是索引顺序文件一如ISAM,则倒排表中存放记录的主关键字而不是物理记录号)。倒排表作索引的优点是索引记录快,缺点是维护困难。在同一索引表中,不同的关键字其记录数不同,各倒排表的长度不同,同一倒排表中各项长度也不相等。"},{"id":"learncoder_152_16948","stem":"什么是索引顺序文件? 【哈尔滨工业大学2001三、 5 】 【山东工业大学1998一、 1-2 】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"在索引文件中,若(数据区)主文件中关键字有序,则文件称为索引顺序文件 "},{"id":"learncoder_152_16945","stem":"文件【山东工业大学 1998 一、1-1】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"22.空","type":"short_answer","answer":"文件是由大量性质相同的记录组成的集合,按记录类型不同可分为操作系统文件和数据库文件。"},{"id":"learncoder_152_16942","stem":"散列检索技术的关键是__1__和__2__。【山东工业大学 1995 一、2 】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"构造散列函数","__2__":"解决冲突的方法\t"}},{"id":"learncoder_152_16947","stem":"名词解释:索引文件【哈尔滨工业大学 2000 一、4 】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"在主文件外,再建立索引表指示关键字及其物理记录的地址间一一对应关系。这种由索引表和主文件一起 构成的文件称为索引文件。索引表依关键字有序。主文件若按关键字有序称为索引顺序文件,否则称为索引非顺序 文件(通常简称索引文件)。索引顺序文件因主文件有序,一般用稀疏索引,占用空间较少。常用索引顺序文件有 ISAM和VSAM。ISAM采用静态索引结构,而VSAM采用B+树的动态索引结构。索引文件既能顺序存取,也能随机存取。"},{"id":"learncoder_152_16944","stem":"VSAM(虚拟存储存取方法)文件的优点是:动态地\t,不需要文件进行\t,并能较快地__1__进行查找。【山东大学 2001 三、4 】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"分配和释放存储空间,重组对插入的记录"}},{"id":"learncoder_152_16943","stem":"VSAM系统是由\t__1__、__2__、__3__构成的。【北京科技大学1997 一、9】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"索引集","__2__":"顺序集","__3__":"数据集"}},{"id":"learncoder_152_16949","stem":"索引顺序存取方法(ISAM)中,主文件已按关键字排序,为何还需要主关键字索引?【东南大学 1995 四】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"ISAM是专为磁盘存取设计的文件组织方式。即使主文件关键字有序,但因磁盘是以盘组、柱面和面)三级地址存取的设备,因此通常对磁盘上的数据文件建立盘组、柱面和磁道(盘面)三级索引。在 上检索记录时,先从主索引(柱面索引的索引)找到相应柱面索引。再从柱面索引找到记录所在柱面的磁道索引,最后从磁道索引找到记录所在磁道的第一个记录的位置,由此岀发在该磁道上进行顺序查找直到查到为止;反之,若找遍该磁道而未找到所查记录,则文件中无此记录。"},{"id":"learncoder_152_16946","stem":"文件存储结构的基本形式有哪些?一个文件采用何种存储结构应考虑哪些因素?【燕山大学 1999 二、4】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"short_answer","answer":"文件的基本组织方式有顺序组织、索引组织、散列组织和链组织。文件的存储结构可以采用将基本组织结 合的方法,常用的结构有顺序结构、索引结构、散列结构。(1)顺序结构,相应文件为顺序文件,其记录按存入文件的先后次序顺序存放。顺序文件本质上就是顺序表。 若逻辑上相邻的两个记录在存储位置上相邻,则为连续文件;若记录之间以指针相链接,则称为串联文件。顺序文 件只能顺序存取,要更新某个记录,必须复制整个文件。顺序文件连续存取的速度快,主要适用于顺序存取,批量 修改的情况。(2)带索引的结构,相应文件为索引文件。索引文件包括索引表和数据表,索引表中的索引项包括数据表中 数据的关键字和相应地址,索引表有序,其物理顺序体现了文件的逻辑次序,实现了文件的线性结构。索引文件只 能是磁盘文件,既能顺序存取,又能隋机存取。(3)散列结构,也称计算寻址结构,相应文件称为散列文件,其记录是根据关键字值经散列函数计算确定其 地址,存取速度快,不需索引,节省存储空间。不能顺序存取,只能随机存取。其它文件均由以上文件派生而得。 文件采用何种存储结构应综合考虑各种因素,如:存储介质类型、记录的类型、大小和关键字的数目以及对文 件作何种操作。"},{"id":"learncoder_152_16941","stem":"检索是为了在文件中寻找满足一定条件的记录而设置的操作。检索可以按__1__检索,也可以按__2__检索;按\t检索又可以有__3__检索和__4__检索。【山东大学 1999 一、1 】__5__","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"关键字","__2__":"记录号","__3__":"记录号","__4__":"顺序","__5__":"直接"}},{"id":"learncoder_152_16938","stem":"建立索引文件的目的是__1__。【中山大学 1998 一、12 】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"提高查找速度"}},{"id":"learncoder_152_16940","stem":"倒排序文件的主要优点在于__1__。【山东工业大学1995一、3】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"检索记录快"}},{"id":"learncoder_152_16937","stem":"索引顺序文件既可以顺序存取,也可以__1__存取。【武汉大学2000 一、10】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"随机"}},{"id":"learncoder_152_16939","stem":"索引顺序文件是最常用的文件组织之一,通常用__1__结构来组织索引。","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"树"}},{"id":"learncoder_152_16935","stem":"物理记录之间的次序由指针相链表示的顺序文件称为__1__。【燕山大学 1998 一、11】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"串联文件\t"}},{"id":"learncoder_152_16936","stem":"顺序文件中,要存取第I个记录,必须先存取__1__个记录。","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"第I-1\t"}},{"id":"learncoder_152_16932","stem":"数据库文件按记录中关键字的多少可分成__1__和__2__\t两种文件。","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"单关键字文件","__2__":"多关键字文件"}},{"id":"learncoder_152_16931","stem":"文件可按其记录的类型不同而分成两类,即__1__和__2__文件。","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"操作系统文件","__2__":"数据库 "}},{"id":"learncoder_152_16934","stem":"文件由__1__组成;记录由__2__组成。","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"记录","__2__":"数据项"}},{"id":"learncoder_152_16933","stem":"从用户的观点看,文件的逻辑结构通常可以区分为两类:一类是如 dBASE 中数据库文件那样的文件组织结构, 称为__1__文件;另一种是诸如用各种文字处理软件编辑成的文本文件,称为__2__文件。从文件在存储器上的存 放方式来看,文件的物理结构往往可区分为三类,即__3__,__4__和__5__。B+树适用于组织__6__的索引结构,m 阶B+树每个结点至多有__7__个儿子,除根结点外每个结点至少有__8__个儿子,根结点至少有__9__个儿子,有 k个儿子的结点必有__10__个关键码。","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"blank","options":{"__1__":"数据库","__2__":"文本","__3__":"顺序组织","__4__":"随机组织","__5__":"链组织","__6__":"随机组织","__7__":"m","__8__":"m/2","__9__":"2","__10__":" k"}},{"id":"learncoder_152_16929","stem":"ISAM文件和VASM文件属于(\t)。【山东大学2001二、5\t】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"choice","options":{"C":"顺序文件","D":"散列文件","B":"索引顺序文件","A":"索引非顺序文件"},"answer":"B"},{"id":"learncoder_152_16928","stem":"用ISAM和VSAM组织文件属于(\t)。","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"choice","options":{"B":"索引文件","C":"散列文件","A":"顺序文件"},"answer":"B"},{"id":"learncoder_152_16927","stem":"下述文件中适合于磁带存储的是(\t)。【中科院计算所 2000 一、7】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"choice","options":{"B":"索引文件","D":"多关键字文件","C":"散列文件","A":"顺序文件"},"answer":"A"},{"id":"learncoder_152_16930","stem":"B+树应用在(\t)文件系统中。【北京邮电大学2001 一、1 】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"choice","options":{"A":"ISAM","B":"VSAM"},"answer":"B"},{"id":"learncoder_152_16926","stem":"用ISAM组织文件适合于(\t)。【中科院软件所1998】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"choice","options":{"B":"磁盘","A":"磁带"},"answer":"B"},{"id":"learncoder_152_16925","stem":"顺序文件采用顺序结构实现文件的存储,对大型的顺序文件的少量修改,要求重新复制整个文件,代价很高, 采用( )的方法可降低所需的代价。【北京邮电大学 2000 二、8】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"choice","options":{"C":"按记录输入先后排序","D":"连续排序","B":"按关键字大小排序","A":"附加文件"},"answer":"A"},{"id":"learncoder_152_16924","stem":"散列文件使用散列函数将记录的关键字值计算转化为记录的存放地址,因为散列函数是一对一的关系,则选择 好的( )方法是散列文件的关键。【哈尔滨工业大学 2001二、5】","key_points":"知识点.练习.专业课练习.数据结构.文件","analysis":"空","type":"choice","options":{"C":"冲突处理","B":"除余法中的质数","A":"散列函数","D":"散列函数和冲突处理"},"answer":"D"},{"id":"learncoder_151_16922","stem":"设散列表为HT [0..12],即表的大小为m=13。现采用双散列法解决冲突。散列函数和再散列函数分别为:H0(key)=key % 13;\t注:% 是求余数运算(=mod)Hi=(Hi-1+REV(key+1)%11+1) % 13;\ti=1,2, 3,…,m-1其中,函数REV (x)表示颠倒10进制数x的各位,如REV (37) =73, REV (7) =7等。若插入的关键码序列为 (2,8,31,20,19,18,53,27)。(1) (8分)试画岀插入这8个关键码后的散列表;(2) (5分)计算搜索成功的平均搜索长度ASL。清华大学2000 八】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image19.png'/>"},{"id":"learncoder_151_16921","stem":"对以下关键字序列建立哈希表:(SUN, MON, TUE, WED, THU, FRI, SAT),哈希函数为H(K) = (关键字中第一个字母在字母表中的序号)MOD 7,用线性探测法处理冲突,求构造一个装填因子为0.7的哈希表;并分别计算岀在等概率 情况下查找成功与不成功的平均查找长度。【西北大学 2000 二、3】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"a=0.7,所以表长取m=7/0.7=10<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image18.png'/>"},{"id":"learncoder_151_16923","stem":"设一个散列表含hashsize=13个表项,其下标从0到12,采用线性探查法解决冲突。请按以下要求,将关键码 {10,100,32,45,58,126,3,29,200,400,0}散列到表中。(1)散列函数采用除留余数法,用%hashsize (取余运算)将各关键码映像到表中,请指岀每一个产生冲突的关 键码可能产生多少次冲突。 (7分)(2)散列函数采用先将关键码各位数字折叠相加,再用%hashsize将相加的结果映像到表中的办法。请指岀每一 个产生冲突的关键字码可能产生多少次冲突。【清华大学 2001 五)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image20.png'/>"},{"id":"learncoder_151_16920","stem":"设a, b, c, d, e五个字符的编码分别为1, 2, 3, 4, 5,并设标识符依以下次序岀现:ac, bd, aa, be, ab, ad, cd, be, ae, ce。 要求用哈希(Hash)方法将它们存入具有10个位置的表中。(1)将上述关键字(标识符)构造一个哈希函数,使得发生冲突尽可能地少;(2)线性探测再散列法解决冲突。 写岀上述各关键字在表中位置。【南开大学 1998 六 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"(1)哈希函数H (key)=(关键字各字符编码之和)MOD 7(2)<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image17.png'/>"},{"id":"learncoder_151_16919","stem":"试为下列关键字设计哈希表,要求所设计的表在查找成功时的平均查找长度不超过2.0。并请验证你造的哈希 表的实际平均查找长度是否满足要求。(CHA,CAI,LAN,WEN,LONG,ZHAO,WU,LIU,CHEN,LI,WANG,CAO,YUN,CHANG,YANG)【清华大学 1996 五】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"设用线性探测再散列解决冲突,根据公式Snl≈ (1+1/ (1-a) ) /2。可求岀负载因子为a=0.67。再根据数据个数和装载因子,可求岀表长m=15/0. 67,取m=23。设哈希函数H (key)=(关键字首尾字母在字母表中序号 之和)MOD 23。从上表求岀查找成功时的平均查找长度为ASLsucc=19/15〈2. 0,满足要求。"},{"id":"learncoder_151_16916","stem":"己知散列表的地址空间为A[0..11],散列函数H (k) =k mod 11,采用线性探测法处理冲突。请将下列数据 {25,16,38,47,79,82,51,39,89,151,231}依次插入到散列表中,并计算岀在等概率情况下查找成功时的平均查找长 度。【合肥工业大学 2000 四、】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image12.png'/>"},{"id":"learncoder_151_16913","stem":"设散列函数H(k)=K mod 7,散列表的地址空间为0-6,对关键字序列{32, 13, 49, 18, 22, 38, 21}按链地址法处理 冲突的办法构造哈希表,并指岀查找各关键字要进行几次比较。 【西安电子科技大学1999计应用 一、5 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image10.png'/>"},{"id":"learncoder_151_16918","stem":"设哈希(Hash)表的地址范围为0~17,哈希函数为:H (K)=K MOD 16, K为关键字,用线性探测再散列法处理 冲突,输入关键字序列: (10,24,32,17,31,30,46,47,40,63,49)造岀哈希表,试回答下列问题:(1) 画岀哈希表示意图; (2) 若查找关键字63,需要依次与哪些关键字比较?(3)若查找关键字60,需要依次与哪些关键字比较?(4)假定每个关键字的查找概率相等,求查找成功时的平均查找长度。【华中理工大学 1999 三 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"(1)<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image15.png'/>(2)查找天键字 63, H (k) =63 MOD 16=15,依次与 31, 46, 47, 32, 17, 63 比较。(3)查找关键字60, H (k) =60 MOD 16=12,散列地址12内为空,查找失败。(4)ASLsucc=23/11<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image16.jpeg'/>"},{"id":"learncoder_151_16915","stem":"设散列函数为 H(K)=K MOD 11,解决冲突的方法为链接法,试将下列关键字集合 {35, 67, 42, 21, 29, 86, 95, 47, 50, 36, 91}依次插入到散列表中(画岀散列表的示意图)。并计算平均查找长度ASL。【首 都经贸大学 1997 三 (10分)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"ASLsucc=16/11<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image11.png'/>"},{"id":"learncoder_151_16914","stem":"选取哈希函数H (key) =key mod 7,用链地址法解决冲突。试在0-6的散列地址空间内对关键字序列 {31,23,17,27,19,11,13,91,61,41}构造哈希表,并计算在等概率下成功查找的平均查找长度。【大连海事大学2001 八 (10分)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"ASLsucc=15/10"},{"id":"learncoder_151_16917","stem":"设输入的关键字序列为:22, 41, 53, 33, 46, 30, 13, 01, 67, Hash 函数为:H (key) =key MOD 11。HASH 表长度为11。试用线性探测法解决冲突,将各关键字按输入顺序填入Hash表中。【南京航空航天大学1998二】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image13.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image14.png'/>"},{"id":"learncoder_151_16912","stem":"设散列函数为H (K) =K MOD 13,给定的键值序列为13, 41, 15, 44, 06, 68, 12, 25, 38, 64, 19, 49,画岀用链地址 法处理冲突构造得的哈希表。【福州大学 1998 三、3 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image9.png'/>"},{"id":"learncoder_151_16909","stem":"设哈希函数H (k) =3 K mod 11,散列地址空间为0〜10,对关键字序列(32,13,49,24,38,21,4,12)按下述 两种解决冲突的方法构造哈希表(1)线性探测再散列(2)链地址法,并分别求岀等概率下查找成功时和查找失败 时的平均查找长度ASLsucc和ASLunsucc。【北方交通大学1998三(18分)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"(1)<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image6.jpeg'/>(2)图 ASLsucc =11/8 ASLunsucc=19/11 14 题(2) ASLsucc=13/8 ASLunsucc=19/11值得指出,对用拉链法求查找失败时的平均查找长度有两种观点。其一,认为比较到空指针算失败。以本题为 例,哈希地址0、2、5、7、9和10均为比较1次失败,而哈希地址1和3比较2次失败,其余哈希地址均为比较3 次失败,因此,查找失败时的平均查找长度为19/11,我们持这种观点。还有另一种理解,他们认为只有和关键字 比较才计算比较次数,而和空指针比较不计算。照这种观点,本题的ASLunsucc= (1+1+2+2+2) /11=8/11"},{"id":"learncoder_151_16911","stem":"己知长度为 12 的表(Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct,Nov, Dec)(1)试按表中元素的顺序依次插入一棵初始为空的分类二叉树,试画岀插入完成之后的分类二叉树并计算其在 等概率查找情况下,查找成功的平均查找长度。(2)试用以下两种方法构造两个Hash表,Hash函数H(K) = [i/2],其中i为关键字K中第一个字母在 的序号,[x]表示取整数。a. 用线性探测开放定址法处理冲突(散列地址空间为0~16);b.用链地址法处理,然后分别求岀这两个Hash表在等概率查找情况下,查找成功的平均查找长【上海海运学院 1996 五 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image8.png'/>"},{"id":"learncoder_151_16908","stem":"常用的构造哈希函数的方法有哪些?若在哈希表中删除一个记录,应如何操作?为什么?已知一组关键字为 (19,14,23,01,68,20,84,27,55,11,10,79)按哈希函数 H(Key)=Key MOD 13和线性探测再散列处理冲突的方法在地址空间A[0. . 15]中构造哈希表。【燕山大学1999八】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"常用构造哈希函数的方法有:(1)数字分析法 该法事先需知道关键字集合,且关键字位数比散列表地址位数多,应选数字分布均匀的位。(2)平方取中法 将关键字值的平方取中间几位作哈希地址。(3)除留余数法H (key) =key%p,通常p取小于等于表长的最大素数。(4)折叠法 将关键字分成长度相等(最后一段可不等)的几部分,进行移位叠加或间界叠加,其值作哈希地址。(5)基数转换法 两基数要互素,且后一基数要大于前一基数。在哈希表中删除一个记录,在拉链法情况下可以物理地删除。在开放定址法下,不能物理地删除,只能作删除标记。该地址可能是该记录的同义词查找路径上的地址,物理的删除就中断了查找路径。因为查找时碰到空地址就认为是查找失败。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image5.png'/>"},{"id":"learncoder_151_16910","stem":"使用散列函数 hashf(x)=x mod 11,把一个整数值转换成散列表下标,现要把数据:1,13,12,34,38,33,27,22 插入到散列表中。 (1)使用线性探查再散列法来构造散列表。(5分) (2)使用链地址法构造散列表。(5分)针对这两种情况,确定其装填因子,查找成功所需的平均探查次数,以及查找不成功所需的平均探查次数。(5 分)【清华大学 1998 五】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"由hashf(x)=x mod 11可知,散列地址空间是0到10,由于有8个数据,装载因子取0.7。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image7.png'/>"},{"id":"learncoder_151_16907","stem":"设散列表长度为14 ,散列函数h(x)= i/2,其中i为健值中第一个字母在字母表中的序号,若健值的输入顺 序为 Jan, Feb,Mar, Apr, May, Jun, Jul, Aug, Sep, Oct,Nov,Dec,用拉链法处理冲突,要求:(1)构造散列表 (2)求岀在等概率情况下,查找成功的平均查找长度。【厦门大学 2001 二、2】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"ASLsucc=19/12"},{"id":"learncoder_151_16906","stem":"设一组数据为{1, 14,27, 29, 55, 68, 10,11,23},现采用的哈希函数是H(key)=key MOD 13,即关键字对13取模, 冲突用链地址法解决,设哈希表的大小为13(0..12),试画岀插入上述数据后的哈希表。【南京理工大学 1996 三、 3 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"空"},{"id":"learncoder_151_16903","stem":"对下面的关键字集{30, 15, 21, 40, 25, 26, 36, 37}若查找表的装填因子为0. 8,采用线性探测再散列方法解决冲突,做:(1)设计哈希函数; (2)画岀哈希表;(3)计算查找成功和查找失败的平均查找长度;(4)写岀将哈希表中某个数据元素删除的算法;【东北大学 2001 六 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"由于装填因子为0.8,关键字有8个,所以表长为8/0.8=10。(1)用除留余数法,哈希函数为H (key) =key % 7(2)<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image2.png'/>(3)计算查找失败时的平均查找长度,必须计算不在表中的关键字,当其哈希地址为i (0WiWm-1)时的查找次 数。本例中m=10o故查找失败时的平均查找长度为:ASLunsucc=(9+8+7+6+5+4+3+2+1+1)/10=4.6 ASLsucc =16/8=2(4)int\tDelete(int h[n],int k)//从哈希表h[n]中删除元素k,若删除成功返回1,否则返回0{i=k%7; // 哈希函数用上面(1),即 H (key) =key % 7if (h[i]== maxint) //maxint 解释成空地址prin tf (\"无关键字 %d\\n” , k) ; re turn (0) ; }if(h[i]==k){h[i]=-maxint ;return (1);} //被删元素换成最大机器数的负数 else // 采用线性探测再散列解决冲突{j=i;平均查找长度:ASLsucc= (1+1+1+2+3+4+1+2) /8=15/8以关键字27为例:H (27) =27%7=6 (冲突)\tH1=(6+1) %10=7 (冲突)H2= (6+22)%10=0 (冲突) H3= (6+33)%10=5 所以比较了 4 次。"},{"id":"learncoder_151_16900","stem":"HASH方法的平均查找路长决定于什么?是否与结点个数N有关?处理冲突的方法主要有哪些?【中国人民大学 2000 一、4 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"哈希方法的平均查找路长主要取决于负载因子(表中实有元素数与表长之比),它反映了哈希表的装满程度, 该值一般取0. 65~0. 9。"},{"id":"learncoder_151_16902","stem":"设有一组关键字{9,01,23, 14, 55, 20, 84,27},采用哈希函数:H (key) =key mod 7 ,表长为10,用开放地址法 的二次探测再散列方法Hi=(H(key)+di) mod\t10(di=12,22,32,…,)解决冲突。要求:对该关键字序列构造哈希表, 并计算查找成功的平均查找长度。【东北大学 2002 二 、2 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image1.png'/>平均查找长度:ASLsucc= (1+1+1+2+3+4+1+2) /8=15/8以关键字27为例:H (27) =27%7=6 (冲突)\tH1=(6+1) %10=7 (冲突)H2= (6+22)%10=0 (冲突) H3= (6+33)%10=5 所以比较了 4 次。"},{"id":"learncoder_151_16899","stem":"如何衡量hash函数的优劣?简要叙述hash表技术中的冲突概念,并指岀三种解决冲突的方法。【南京航空航天大学 1996 九、2 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"评价哈希函数优劣的因素有:能否将关键字均匀影射到哈希空间上,有无好的解决冲突的方法,计算哈希函数 是否简单高效。由于哈希函数是压缩映像,冲突难以避免。"},{"id":"learncoder_151_16898","stem":"回答问题并填空(1)散列表存储的基本思想是什么?(2)散列表存储中解决碰撞的基本方法有哪些?其基本思想是什么?(3)用分离的同义词子表解决碰撞和用结合的同义词表解决碰撞属于哪种基本方法?他们各有何特点?(4)(用线性探查法解决碰撞时,如何处理被删除的结点?为什么?(5)(散列法的平均检索长度不随()的增加而增加,而是随()的增大而增加。 【山东工业大学 1999 四(15分)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"(1)散列表存储的基本思想是用关键字的值决定数据元素的存储地址 (2)散列表存储中解决碰撞的基本方法:① 开放定址法\t形成地址序列的公式是:Hi= (H (key) +di) % m,其中m是表长,di是增量。根不同,又分为三种:a.di =1, 2,…,m-1称为线性探测再散列,其特点是逐个探测表空间,只要散列表中有空闲空间,就可解决 碰撞,缺点是容易造成“聚集”,即不是同义词的关键字争夺同一散列地址。b.di =12, -12, 22, -22,…,±k2 (kWm/2)称为二次探测再散列,它减少了聚集,但不容易探测到全部表 空间,只有当表长为形如4j+3 (j为整数)的素数时才有可能。c.di =伪随机数序列,称为随机探测再散列。②再散列法 Hi=RHi (key) i=1, 2,…,k,是不同的散列函数,即在同义词产生碰撞时,用另一散列函 数计算散列地址,直到解决碰撞。该方法不易产生“聚集”,但增加了计算时间。③链地址法将关键字为同义词的记录存储在同一链表中,散列表地址区间用H[0..m-1]表示,分量初始值 为空指针。凡散列地址为i (0WiWm-1)的记录均插在以H[i]为头指针的链表中。这种解决方法中数据元素个数 不受表长限制,插入和删除操作方便,但增加了指针的空间开销。这种散列表常称为开散列表,而①中的散列表称 闭散列表,含义是元素个数受表长限制。④建立公共溢岀区设H [0..m-1]为基本表,凡关键字为同义词的记录,都填入溢岀区O[0..m-1]。(3)用分离的同义词表和结合的同义词表解决碰撞均属于链地址法。链地址向量空间中的每个元素不是简单的地 址,而是关键字和指针两个域,散列地址为i (0WiWm-1)的第一个关键字存储在地址空间向量第i个分量的“关 键字”域。前者的指针域是动态指针,指向同义词的链表,具有上面③的优缺点;后者实际是静态链表,同义词存 在同一地址向量空间(从最后向前找空闲单元),以指针相连。节省了空间,但易产生“堆积”,查找效率低。(4)要在被删除结点的散列地址处作标记,不能物理的删除。否则,中断了查找通路。(5)记录 负载因子"},{"id":"learncoder_151_16905","stem":"采用哈希函数H(k)=3*k mod\t13并用线性探测开放地址法处理冲突,在数列地址空间[0..12]中对关键字序 列22,41,53,46,30,13,1,67,51(1)构造哈希表(画示意图);(2)装填因子;等概率下(3)成功的和(4)不成功的平均查找长度。 【北京工业大学 2000 三 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image4.jpeg'/>"},{"id":"learncoder_151_16904","stem":"设哈希表a、b分别用向量a[0..9],b[0..9]表示,哈希函数均为H(key)=key MOD\t7,处理冲突使用开放定 址法,Hi=[H(key)+Di] MOD\t10,在哈希表a中Di用线性探测再散列法,在哈希表b中Di用二次探测再散列法,试将 关键字{19, 24, 10, 17, 15, 38, 18, 40}分别填入哈希表a, b中,并分别计算岀它们的平均查找长度ASL。【北京工业大 学 1998 三 (8分)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第8章/image3.png'/>"},{"id":"learncoder_151_16901","stem":"在采用线性探测法处理冲突的散列表中,所有同义词在表中是否一定相邻?【西安电子科技大学2000计应用一、8 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"short_answer","answer":"不一定相邻。哈希地址为i (0<=i<=m-1)的关键字,和为解决冲突形成的探测序列i的同义词,都争夺哈希地址io"},{"id":"learncoder_151_16897","stem":"名词解释:哈希表同义词: 叙述B-树定义,主要用途是什么?它和B+树的主要差异是什么?B-树【南开大学1996五、4(3分)1998五、4 (4分)2000二、2(2)】【山东大学2000三,八分)】平衡二叉树(AVL树)?【南开大学1996五、3 (3分)1998五、3 (】【厦门大学1998分)】平衡因子【西北工业大学1999 一、2 (3分)】平均查找长度(ASL)。【西北工业大学1999 一、3 trie树。【中山大学1997 一、3\t(3分)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"75.空","type":"short_answer","answer":"概念是基本知识的主要部分,要牢固掌握。这里只列出一部分,目的是引起重视。 "},{"id":"learncoder_151_16896","stem":"已知N元整型数组a存放N个学生的成绩,已按由大到小排序,以下算法是用对分(折半。查找方法统计成绩 大于或等于X分的学生人数,请填空使之完善。(C语言,PASCAL语言的考生不填)#define N /*学生人数*/int uprx(int a[N], int x )\t/*函数返回大于等于X分的学生人数*/{ int head=1,mid,rear=N;do {mid=(head+rear)/2;if(x<=a[mid])\t__1__ else __2__ ;}while__3__;if (a[head]<x) return head-1;return head; } 【西南交通大学 2000 一、12】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"rear=mid-1","__2__":"head=mid+1","__3__":"head>rear"}},{"id":"learncoder_151_16895","stem":"顺序查找FUNC seq(a,n,k):integer;BEGIN I:=1;\tA[n+1]=\t__1__\t;WHILE a[I]<>k DO I:=I+1;IF__2__THEN return (I) ELSE return(0);END;【中山大学1998四、4)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"k","__2__":" I<n+1"}},{"id":"learncoder_151_16890","stem":"可以唯一的标识一个记录的关键字称为__1__。【燕山大学 1998 一、7 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"主关键字"}},{"id":"learncoder_151_16893","stem":"127阶B-树中每个结点最多有__1__个关键字;除根结点外所有非终端结点至少有__2__棵子树;65阶B+ 树中除根结点外所有结点至少有__3__个关键字;最多有__4__棵子树;【北方交通大学 1999 二、5 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"126","__2__":"64","__3__":"33","__4__":"65"}},{"id":"learncoder_151_16892","stem":"对于具有144 个记录的文件,若采用分块查找法,且每块长度为8,则平均查找长度为__1__【北方交通大学 2001 二、8】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"14"}},{"id":"learncoder_151_16889","stem":"假定查找有序表A[1..12]中每个元素的概率相等,则进行二分查找时的平均查找长度为__1__【燕山大学 2001 二、4 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"37/12\t"}},{"id":"learncoder_151_16894","stem":"若静态查找表的类型定义如下:TYPE rectype=RECORD key:keytype; ……; END; ordlisttp=ARRAY[1..n] OF rectype; 请完成以下二分查找的算法:FUNC binsrch(r:ordlisttp;k:keytype):integer;BEGIN low:=1;hig:=n;suc:=false;WHILE .__1__AND NOT (suc) DO [mid: = __2__;CASEk>r[mid].key:low:=mid+1; k=r[mid].key:suc:=true; k<r[mid].key:hig:=mid-1END;] IF suc THEN__3__ELSE __4__END;\t【福州大学1998二、8】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"low<=high","__2__":"(low+hig) DIV 2","__3__":" binsrch:=mid","__4__":"binsrch:=0"}},{"id":"learncoder_151_16891","stem":"动态查找表和静态查找表的重要区别在于前者包含有__1__和__2__运算,而后者不包含这两种运算。【厦门大学 2001 一、3 (14%/5分)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"左子树","__2__":"右子树"}},{"id":"learncoder_151_16888","stem":"高度为5 (除叶子层之外)的三阶B-树至少有__1__个结点。【武汉大学2000 一、4】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"31"}},{"id":"learncoder_151_16887","stem":"高度为8的平衡二叉树的结点数至少有__1__个。【武汉大学 2000 一、6】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"54"}},{"id":"learncoder_151_16884","stem":"具有N个关键字的B树的查找路径长度不会大于__1__。【中科院计算机1999二、2】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"log m/2 (n+1/2)+1"}},{"id":"learncoder_151_16881","stem":"平衡因子的定义是__1__【北京轻工业学院 2000 一、2】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"结点的左子树的高度减去结点的右子树的高度"}},{"id":"learncoder_151_16886","stem":"假设有n个关键字,它们具有相同的Hash函数值,用线性探测方法解决冲突,把这n个关键字散列到大小为n的地址空间中,共计需要做__1__次插入和探测操作。【武汉大学2000 一、8】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"n(n+1)/2"}},{"id":"learncoder_151_16883","stem":"__1__法构造的哈希函数肯定不会发生冲突。【重庆大学2000 一、3】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"直接定址法"}},{"id":"learncoder_151_16880","stem":"如果关键码按值排序,而后用二分法依次检索这些关键码,并把检索中遇到的在二叉树中没有岀现的关键码依次插入到二叉排序树中,则对这样的二叉排序树检索时,平均比较次数为__1__。【山东大学 1999 二、2\t】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"(n+1)/n*log2(n+1)-1 "}},{"id":"learncoder_151_16882","stem":"查找是非数值程序设计的一个重要技术问题,基本上分成__1__查找,__2__查找和__3__查找。处理哈希冲突的方法有__4__、__5__、__6__和__7__。【华北计算机系统工程研究所1999 一】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"顺序表","__2__":"树表","__3__":"哈希表","__4__":"开放定址方法","__5__":"链地址方法","__6__":"再哈希","__7__":"建立公共溢出区"}},{"id":"learncoder_151_16885","stem":"在一棵有 N 个结点的非平衡二叉树中进行查找,平均时间复杂度的上限(即最坏情况平均时间复杂度)为__1__【西南交通大学 2000 一、8】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"O(N)"}},{"id":"learncoder_151_16877","stem":"分块检索中,若索引表和各块内均用顺序查找,则有900个元素的线性表分成\t块最好:若分成25块,其平均查找长度为__1__。【北京工业大学 1999 一、 5\t()】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"31.5(块内顺序查找)"}},{"id":"learncoder_151_16879","stem":"如果按关键码值递增的顺序依次将关键码值插入到二叉排序树中,则对这样的二叉排序树检索时,平均比较次数为__1__。【山东大学1999二、1】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"(n+1)/2"}},{"id":"learncoder_151_16878","stem":"执行顺序查找时,储存方式可以是__1__,二分法查找时,要求线性表__2__,分块查找时要求线性表 __3__,而散列表的查找,要求线性表的存储方式是 __4__。【山东大学1998 一、1】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"顺序存储或链式存储","__2__":"顺序存储且有序","__3__":"块内顺序存储,块间有序","__4__":"散列存储"}},{"id":"learncoder_151_16874","stem":"在n个记录的有序顺序表中进行折半查找,最大比较次数是__1__。【中国科技大学1998 —、4 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"log2n+1"}},{"id":"learncoder_151_16876","stem":"假定有k个关键字互为同义词,若用线性探测再散列法把这k个关键字存入散列表中,至少要进行__1__次探测。【西安电子科技大学2001软件一、7)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"k(k+1)/2"}},{"id":"learncoder_151_16873","stem":"对于长度为255的表,采用分块查找,每块的最佳长度为__1__。【青岛大学 2002 三、10 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"16\t"}},{"id":"learncoder_151_16875","stem":"有一个2000项的表,欲采用等分区间顺序查找方法进行查找,则每块的理想长度是__1__,分成__2__块最为理想,平均查找长度是__3__。【中国矿业大学2000 一、6 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"45","__2__":"45","__3__":"46(块内顺序查找)\t"}},{"id":"learncoder_151_16872","stem":"在哈希函数H (key) =key%p中,p值最好取__1__。【青岛大学2002三、9)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"小于等于表长的最大素数或不包含小于20的质因子的合数\t"}},{"id":"learncoder_151_16871","stem":"平衡二叉树又称__1__,其定义是","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"AVL树(高度平衡树,高度平衡的二叉排序树),或为空二叉树,或二叉树中任意结点左子树高度与右子树高 度差的绝对值小于等于1。"}},{"id":"learncoder_151_16870","stem":"哈希表是通过将查找码按选定的__1__和 __2__,把结点按查找码转换为地址进行存储的线性表的关键是__3__和__4__。一个好的哈希函数其转换地址应尽可能__5__,而且函数运算应尽可能【青岛大学 2000 六、2 ()】__6__","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"哈希函数","__2__":"解决冲突的方法","__3__":"选择好的哈希函数","__4__":"处理冲突的方法","__5__":"均匀","__6__":"简单"}},{"id":"learncoder_151_16869","stem":"己知有序表为(12, 18, 24, 35, 47, 50, 62, 83, 90, 115, 134)当用二分法查找90时,需__1__次查找成功, 47时__2__成功,查100时,需__3__次才能确定不成功。【南京理工大学 2000 二、7 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"2","__2__":"4","__3__":"3"}},{"id":"learncoder_151_16868","stem":"在一棵m阶B-树中,若在某结点中插入一个新关键字而引起该结点分裂,则此结点中原有的关键字的个数是 __1__,若在某结点中删除一个关键字而导致结点合并,则该结点中原有的关键字的个数是__2__。【中国科技大学 1998 一、5 】【南京理工大学 2001 二、4 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"m-1","__2__":"m/2-1 "}},{"id":"learncoder_151_16865","stem":"高度为4的3阶b-树中,最多有__1__个关键字。【合肥工业大学2000三、9 (2分)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"第4层是叶子结点,每个结点两个关键字","type":"blank","options":{"__1__":"26 "}},{"id":"learncoder_151_16867","stem":"给定一组数据{6, 2, 7, 10, 3, 12}以它构造一棵哈夫曼树,则树高为__1__\t,带权路径长度WPL的值为__2__【南京理工大学 1997 三、4 (2分)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"5","__2__":"96 "}},{"id":"learncoder_151_16864","stem":"在有序表A[1..20]中,按二分查找方法进行查找,查找长度为5的元素个数是__1__【合肥工业大学 1999 三、9 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"5"}},{"id":"learncoder_151_16866","stem":"在有序表A[1......20]中,按二分查找方法进行查找,查找长度为4的元素的下标从小到大依次是__1__【合肥工业大学 2000 三、10 (2分)】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"1,3,6,8,11,13,16,19"}},{"id":"learncoder_151_16861","stem":"顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为__1__次;当使用监视哨时,若查找失败,则比较关键字的次数为__2__。【华中理工大学2000 一、8 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"n","__2__":"n+1"}},{"id":"learncoder_151_16863","stem":"在有序表A[1..12 ]中,采用二分查找算法查等于A[12 ]的元素,所比较的元素下标依次为__1__\t。【中国人民大学 2001 一、2 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"6,9,11,12 "}},{"id":"learncoder_151_16860","stem":"将10个元素散列到100000个单元的哈希表中,则( )产生冲突。","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空填空题","type":"choice","options":{"B":"一定不会","C":"仍可能会","A":"一定会"},"answer":"C"},{"id":"learncoder_151_16862","stem":"在顺序表(8, 11, 15, 19, 25, 26, 30, 33, 42, 48, 50)中,用二分(折半)法查找关键码值20,需做的关键码比较次数为__1__.【北方交通大学 2001 二、2】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"blank","options":{"__1__":"4"}},{"id":"learncoder_151_16859","stem":"散列表的地址区间为0-17,散列函数为H(K)=K mod 17。采用线性探测法处理冲突,并将关键字序列26, 25, 72, 38, 8, 18, 59依次存储到散列表中。元素59存放在散列表中的地址是(\t)。\t存放元素59需要搜索的次数是(\t)","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"D":"11,5","B":"9,2","A":"11, 4","C":"10,3"},"answer":"D"},{"id":"learncoder_151_16858","stem":"散列函数有一个共同的性质,即函数值应当以( )取其值域的每个值。","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"C":"平均概率","D":"同等概率","A":"最大概率","B":"最小概率"},"answer":"D"},{"id":"learncoder_151_16857","stem":"哈希查找中k个关键字具有同一哈希值,若用线性探测法将这k个关键字对应的记录存入哈希表中,至少要进行( )次探测。","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"B":"k+1","A":"k","D":"1+k(k+1)/2","C":"k(k+1)/2"},"answer":"C"},{"id":"learncoder_151_16855","stem":"设哈希表长为14,哈希函数是H(key)=key%11,表中己有数据的关键字为15, 38, 61, 84共四个,现要将关键字为49的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是( )【南京理工大学 2001 一、 15 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"A":"8","C":"5","D":"9","B":"3"},"answer":"D"},{"id":"learncoder_151_16852","stem":"下面关于哈希(Hash,杂凑)查找的说法正确的是()【南京理工大学1998 一、10 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"B":"除留余数法是所有哈希函数中最好的","C":"不存在特别好与坏的哈希函数,要视情况而定","A":"哈希函数构造的越复杂越好,因为这样随机性好,冲突小","D":"若需在哈希表中删去一个元素,不管用何种方法解决冲突都只要简单的将该元素删去即可"},"answer":"C"},{"id":"learncoder_151_16854","stem":"关于杂凑查找说法不正确的有几个( )(1)采用链地址法解决冲突时,查找一个元素的时间是相同的(2)采用链地址法解决冲突时,若插入规定总是在链首,则插入任一个元素的时间是相同的(3)用链地址法解决冲突易引起聚集现象(4)再哈希法不易产生聚集","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"A":"1","B":"2","C":"3","D":"4"},"answer":"B"},{"id":"learncoder_151_16856","stem":"假定有k个关键字互为同义词,若用线性探测法把这k个关键字存入散列表中,至少要进行多少次探测?()","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"C":"k+1 次","B":"k 次","D":"k (k+1) /2 次","A":"k-1 次"},"answer":"D"},{"id":"learncoder_151_16853","stem":"若采用链地址法构造散列表,散列函数为H (key) =key MOD 17,则需()个链表。这些链的链首指针构成一个指针数组,数组的下标范围为 ()","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"C":"16, 1 至\t17","D":"任意, 1 至 16","B":"13, 0至17","A":"17, 0至16"},"answer":"A"},{"id":"learncoder_151_16851","stem":"设有一组记录的关键字为{19,14,23,1,68,20,84,27,55,11,10,79},用链地址法构造散列表,散 列函数为H (key) =key MOD 13,散列地址为1的链中有( )个记录。【南京理工大学1997】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"B":"2","A":"1","C":"3","D":"4"},"answer":"D"},{"id":"learncoder_151_16849","stem":"m路B+树是一棵(),其结点中关键字最多为()个,最少()个。【中科院计算机1999 一、5】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"A":"m路平衡索引树, m, m/2","D":"m路键树, m/2 -1, m/2 +1","B":"m路平衡查找树, m, m/2","C":"m路Ptrie树, m-1, m+1"},"answer":"A"},{"id":"learncoder_151_16848","stem":"在一棵含有n个关键字的m阶B-树中进行查找,至多读盘()次。【中科院计算所2000 一、6 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"A":"log2n","D":"1+log m/2 m+1/2/","B":"1+log2n","C":"1+log m/2 n+1/2/"},"answer":"C"},{"id":"learncoder_151_16845","stem":"下面关于m阶B树说法正确的是()【南京理工大学1999 一、5】①每个结点至少有两棵非空子树;\t②树中每个结点至多有m一1个关键字;③所有叶子在同一层上;\t④当插入一个数据项引起B树结点分裂后,树长高一层。","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"D":"③","B":"②③","A":"①②③","C":"②③④"},"answer":"B"},{"id":"learncoder_151_16850","stem":"在一棵m阶的B+树中,每个非叶结点的儿子数S应满足()。","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"D":"1<=S<=m/2","A":"m+1/2 <=S<=m","C":"1<=S<=m+1/2","B":"m/2<=S<=m"},"answer":"A"},{"id":"learncoder_151_16847","stem":"m阶B-树是一棵()【北京邮电大学2000二、2 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"C":"m-1叉平衡排序树","B":"m叉平衡排序树","D":"m+1叉平衡排序树","A":"m叉排序树"},"answer":"B"},{"id":"learncoder_151_16844","stem":"下列关于m阶B-树的说法错误的是()【南京理工大学1997 一、9 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"D":"根结点中的数据是有序的","C":"非叶结点至少有m/2 (m为偶数)或m/2+1 (m为奇数)棵子树","A":"根结点至多有m棵子树","B":"所有叶子都在同一层次上"},"answer":"D"},{"id":"learncoder_151_16846","stem":"下面关于B和B+树的叙述中,不正确的是()【北方交通大学2001 一、17 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"B":"B树和B+树都可用于文件的索引结构","A":"B树和B+树都是平衡的多叉树。","C":"B树和B+树都能有效地支持顺序检索。","D":"B树和B+树都能有效地支持随机检索。"},"answer":"C"},{"id":"learncoder_151_16843","stem":"在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并己知A的左孩子的平衡因子为0 右孩子的平衡因子为1,则应作( ) 型调整以使其平衡。【合肥工业大学 2001 一、4 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"B":"LR","D":"RR","A":"LL","C":"RL"},"answer":"C"},{"id":"learncoder_151_16842","stem":"分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是(\t)","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"B":"(100,120,110,130,80, 60, 90)","C":"(100,60, 80, 90, 120,110,130)","A":"(100,80, 90, 60, 120,110,130)","D":"(100,80, 60, 90, 120,130,110)"},"answer":"C"},{"id":"learncoder_151_16839","stem":"对大小均为n的有序表和无序表分别进行顺序查找,在等概率查找的情况下,对于查找失败,它们的平均查找长 度是((1)) ,对于查找成功,他们的平均查找长度是((2))供选择的答案:","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"D":"相同的,不同的","A":"相同的\t 相同的","B":"不同的 不同的","C":"不同的 相同的"},"answer":"C"},{"id":"learncoder_151_16836","stem":"二叉查找树的查找效率与二叉树的( (1))有关, 在 ( (2) )时其查找效率最低【武汉交通科技大学1996 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"A":"高度, 结点太多","C":"树型, 呈单枝树","B":"结点的多少, 完全二叉树","D":"结点的位置, 结点太复杂"},"answer":"C"},{"id":"learncoder_151_16838","stem":"在等概率情况下,线性表的顺序查找的平均查找长度ASL为((1)),有序表的折半查找的ASL为((2)), 对静态树表,在最坏情况下,ASL为((3)),而当它是一棵平衡树时,ASL为((4)),在平衡树上删除一个结点 后可以通过旋转使其平衡,在最坏情况下需( (5) )次旋转。供选择的答案:","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"A":"O(n), O( log2n ), O(n), O( log2n), O( log2n)","C":"O((log2n)2), A. O(1), O((log2n)2), O(1), O(1)","B":"O(nlog2n), O((log2n)2), O(nlog2n), O((log2n)2), O((log2n)2)","D":"O(1), O( log2n ), O(1), O( log2n ), O( log2n )"},"answer":"A"},{"id":"learncoder_151_16841","stem":"既希望较快的查找又便于线性表动态变化的查找方法是 (\t)","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"C":"索引顺序查找","D":"哈希法查找","B":"折半查找","A":"顺序查找"},"answer":"C"},{"id":"learncoder_151_16840","stem":"如果要求一个线性表既能较快的查找,又能适应动态变化的要求,则可采用(\t)查找法","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"C":"折半查找","A":"分快查找","D":"基于属性","B":"顺序查找"},"answer":"A"},{"id":"learncoder_151_16837","stem":"要进行顺序查找,则线性表(1);要进行折半查询,则线性表(2);若表中元素个数为n,则顺序查找比较次数为(3);折半查找的平均比较次数为(4)。【北方交通大学 1999 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"A":"必须以顺序方式存储;必须以链式方式存储;C.既可以以顺序方式存储,也可以链式方式存储; n, n/2","D":"必须以顺序方式存储,且数据已按递增或递减顺序排好, 必须以链式方式存储,且数据已按递增或递减的次序排好 .log2n, nlog2n","C":"既可以以顺序方式存储也可以链式方式存储, 必须以顺序方式存储,且数据已按递增或递减顺序排好, (n+1)/2, log2(n+1)","B":"必须以链式方式存储, 既可以以顺序方式存储也可以链式方式存储;n*n, n*n/2"},"answer":"C"},{"id":"learncoder_151_16833","stem":"具有12个关键字的有序表,折半查找的平均查找长度( )【中山大学 1998 二、10 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"A":"3.1","B":"4","D":"5","C":"2.5"},"answer":"A"},{"id":"learncoder_151_16835","stem":"当采用分快查找时,数据的组织方式为 (\t) 【南京理工大学 1996 一、7】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"A":"数据分成若干块,每块内数据有序","C":"数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块","B":"数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块","D":"数据分成若干块,每块(除最后一块外)中数据个数需相同"},"answer":"B"},{"id":"learncoder_151_16832","stem":"当在一个有序的顺序存储表上查找一个数据时,即可用折半查找,也可用顺序查找,但前者比后者的查找速度 ( )","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"A":"必定快","C":"在大部分情况下要快","D":"取决于表递增还是递减","B":"不一定"},"answer":"C"},{"id":"learncoder_151_16834","stem":"折半查找的时间复杂性为( )【中山大学 1999 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"B":"O(n)","D":"O(logn)","C":"O(nlogn)","A":"O(n2)"},"answer":"D"},{"id":"learncoder_151_16831","stem":"用二分(对半)查找表的元素的速度比用顺序法( ) 【南京理工大学 1998 一、11】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"C":"相等","A":"必然快","D":"不能确定","B":"必然慢"},"answer":"D"},{"id":"learncoder_151_16829","stem":"对线性表进行二分查找时,要求线性表必须( )【燕山大学 2001 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"A":"以顺序方式存储","D":"以链接方式存储,且数据元素有序","B":"以顺序方式存储,且数据元素有序","C":"以链接方式存储"},"answer":"B"},{"id":"learncoder_151_16830","stem":"适用于折半查找的表的存储方式及元素排列要求为(\t) 【南京理工大学 1997 一、6 】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"D":"顺序方式存储,元素有序","C":"顺序方式存储,元素无序","A":"链接方式存储,元素无序","B":"链接方式存储,元素有序"},"answer":"D"},{"id":"learncoder_151_16826","stem":"对N个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为()【南京理工大学1998】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"C":"N","B":"N/2","D":"[(1+N)*N ]/2","A":"(N+1)/2"},"answer":"A"},{"id":"learncoder_151_16828","stem":"下面关于二分查找的叙述正确的是 (\t) 【南京理工大学 1996】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"B":"表必须有序,而且只能从小到大排列","C":"表必须有序且表中数据必须是整型,实型或字符型","A":"表必须有序,表可以顺序方式存储,也可以链表方式存储","D":"表必须有序,且表只能以顺序方式存储"},"answer":"D"},{"id":"learncoder_151_16825","stem":"若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为( )。【北京航空航天大学2000】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"C":"(n+1)/2","B":"n/2","A":"(n-1)/2","D":"n"},"answer":"C"},{"id":"learncoder_151_16827","stem":"顺序查找法适用于查找顺序存储或链式存储的线性表,平均比较次数为((1)),二分法查找只适用于查找顺序 存储的有序表,平均比较次数为((2))。在此假定N为线性表中结点数,且每次查找都是成功的。【长沙铁道学 院 1997】","key_points":"知识点.练习.专业课练习.数据结构.集合","analysis":"空","type":"choice","options":{"D":"2log2N, N2","B":"N+1, logN","C":"N/2,Nlog2N","A":"N/2, logN"},"answer":"A"},{"id":"learncoder_150_16387","stem":"下图所示的伙伴系统中,回收两块首地址分别为768和128,大小为2的存储块,请画出回收后伙伴系统的状态图。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第7章/image1.png'/>","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"空","type":"short_answer","answer":"(1)系统回收一个起始地址为559,大小为45的空闲块后,因右侧起始地址604为空闲块,应与之合并。合并 后,起始地址为559,大小为167的空闲块。链表状态如图 10.(1)所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第7章/image4.png'/>(2)系统在接受存储块大小为100的请求后,将大小为117的空闲块分出100给予用户。在回收一个起始地址 为515,大小为44的空闲块之后,因左侧起始地址462大小53和右侧起始地址559大小167均为空闲块,应与之 合并。合并后,起始地址为462,大小为264的空闲块。链表状态如图 10.(2)所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第7章/image5.png'/>"},{"id":"learncoder_150_16381","stem":"计算起始二进制地址为011011110000,长度为4 (十进制)的块的伙伴地址是多少?【中山大学】","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"空","type":"short_answer","answer":"011011110100\t"},{"id":"learncoder_150_16378","stem":"二进制地址为0 1 1 0 1 1 1 1 0000 ,大小为( 4 )10和( 1 6 )10块的伙伴地址分别为:__1__ 、__2__ 。【上海大学】","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"空","type":"blank","options":{"__1__":"011011110100","__2__":"011011100000"}},{"id":"learncoder_150_16377","stem":"起始地址为 480,大小为 8 的块,其伙伴块的起始地址是__1__;若块大小为 32,则其伙伴块的起始地址为__2__。【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"空","type":"blank","options":{"__1__":"480+8=488(480 %23+1=0)","__2__":"480-32=448"}},{"id":"learncoder_150_16384","stem":"试叙述动态存储分配伙伴系统的基本思想,它和边界标识法不同点是什么?【青岛大学】【中国人民大学】","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"空","type":"short_answer","answer":"动态存储分配伙伴系统的基本思想请参见上面题1。边界标识法在每块的首尾均有“占用” / “空闲”标志,空 闲块合并方便。伙伴系统算法简单,速度快,但只有互为伙伴的两个空闲块才可合并,因而易产生虽空闲但不能 归并的碎片。"},{"id":"learncoder_150_16386","stem":"已知一个大小为512个字长的存储,假设先后有6个用户申请大小分别为23,45,52,100,11和19的存储空 间,然后再顺序释放大小为45, 52, 11的占用块。假设以伙伴系统实现动态存储管理。(1)画岀可利用空间表的初始状态。(2)画岀为6个用户分配所需要的存储空间后可利用空间表的状态以及每个用户所得到的存储块的起始地址。(3)画岀在回收3个占用块之后可利用空间表的状态。","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"空","type":"short_answer","answer":"因为768 % 27+1=0,所以768和768+27=896互为伙伴, 伙伴合并后,首址为768,块大小为28。因为768 % 28+1=28, 所以,所以首址768大小为28的块和首址512大小为28的块合并,成为首址512大小为29的空闲块。因为128 % 27+1=27 其伙伴地址为128-27=0, 将其插入可利用空间表中。回收后该伙伴系统的状态图如下。"},{"id":"learncoder_150_16383","stem":"(1)地址为(1664) 10大小为(128)10的存储块的伙伴地址是什么?(2)地址为(2816) 10大小为(64)10的存储块的伙伴地址是什么? 【清华大学】","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"空","type":"short_answer","answer":"(1)buddy(1664,7)=1664-128=1536\t(2)buddy(2816,6)=2816+64=2880"},{"id":"learncoder_150_16380","stem":"设内存中可利用空间已连成一个单链表,对用户的存储空间需求,一般有哪三种分配策略?【北京科技大学】","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"空","type":"short_answer","answer":"首次拟合法;从链表头指针开始查找,找到第一个$所需空间的结点即分配。最佳拟合法:链表结点大小增序排列,找到第一个$所需空间的结点即分配。最差拟合法:链表结点大小逆序排列,总从第一个结点开始分配,将分配后结点所剩空间插入到链表适当位置。首次拟合法适合事先不知道请求分配和释放信息的情况,分配时需查询,释放时插在表头。 最佳拟合法适用于 请求分配内存大小范围较宽的系统,释放时容易产生存储量很小难以利用的内存碎片,同时保留那些很大的内存块 以备将来可能发生的大内存量的需求,分配与回收均需查询。 最差拟合法适合请求分配内存大小范围较窄的系统, 分配时不查询,回收时查询,以便插入适当位置。"},{"id":"learncoder_150_16385","stem":"组织成循环链表的可利用空间表附加什么条件时,首次适配策略就转变为最佳适配策略?【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"空","type":"short_answer","answer":"组织成循环链表的可利用空间表的结点大小按递增序排列时, 首次适配策略就转变为最佳适配策略。因为512=29,可利用空间表的初始状态图如8-1所示。当用户申请大小为23的内存块时,因24<23<=25,但没有大小为25的块,只有大小为29的块,故将29的块分裂成两 个大小为28的块,其中大小为28的一块挂到可利用空间表上,另一块再分裂成两个大小为27的块。又将其中大小为 27的一块挂到可利用空间表上,另一块再分裂成两个大小为26的块,一块26的块挂到可利用空间表上,另一块分裂成 两个大小为25的块,其中一块挂到可利用空间表上,另一块分给用户(地址0—31) 。如此下去,最后每个用户得到的 存储空间的起始地址如图8-2, 6个用户分配所需要的存储空间后可利用空间表的状态如图8-3。在回收时,因为给申请45的用户分配了26,其伙伴地址是0,在占用中,不能合并,只能挂到可利用空间表上。在 回收大小为52的占用块时,其伙伴地址是192,也在占用。回收大小为11的占用块时,其伙伴地址是48,可以合并为 大小25的块, 挂到可利用空间表上。回收3个占用块之后可利用空间表的状态如图8-4。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第7章/image2.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第7章/image3.png'/>图8-3 图8-4"},{"id":"learncoder_150_16382","stem":"在一个伙伴系统中,己知某存储块的始址X=(011011110000)2,大小为24,则它的伙伴块的始址是多少?【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"空","type":"short_answer","answer":"011011100000"},{"id":"learncoder_150_16379","stem":"伙伴空间(名词解释)【西北工业大学】","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"5.空","type":"short_answer","answer":"在伙伴系统中,无论占用块或空闲块,其大小均为2的k(k为$0的正整数)次幕。若内存容量为2\",则空闲块 大小只能是20, 21, 22,…,2n。由同一大块分裂而得的两个小块互称“伙伴空间”,如内存大小为210的块分裂 成两个大小为29的块。只有两个“伙伴空间”才能合并成一个大空间。起始地址为p,大小为2k的内存块,其伙伴的起始地址为:buddy(p,k)=p+2k (若 p % 2k+1=0),或 buddy(p,k)=p-2k (若 p % 2k+1=2k)"},{"id":"learncoder_150_16376","stem":" 动态存储管理系统中,通常可有( )种不同的分配策略。【长沙铁道学院】","key_points":"知识点.练习.专业课练习.数据结构.动态存储管理","analysis":"空","type":"choice","options":{"B":"2","A":"1","C":"3","E":"5","D":"4"},"answer":"C"},{"id":"learncoder_148_17565","stem":"采用顺序存储方式存储串,编写一个函数,将串strl中的下标i到下标j之间的字符(包括i和 j两个位置上的字符)用str2串替换。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":".本题算法思想:取strl中0到iT位置上的子串strll,取strl中j+1到串尾的子串strl2,最后 连接strll、str2、strl2即可。算法实现代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image12.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image13.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image14.png'/>"},{"id":"learncoder_148_17564","stem":"釆用定长顺序存储表示串,编写一个函数,删除串中从下标为i的字符开始,如果第i个字符后 没有足够的j个字符,则有几个删除几个。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"本题算法思想:从下标为i+j个字符开始,将所有的字符都向前移动j个单位,然后将字符串长 度缩减为被删除字符的个数即可。算法实现代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image11.png'/>"},{"id":"learncoder_148_17567","stem":"构造串的链表结点数据结构(每个结点内存储一个字符),编写一个函数,找出串strl中第一个 不在str2中出现的字符。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"本题算法思想:从头到尾扫描strl,对于strl中的每一个结点判断是否在str2中出现,若出现, 则继续扫描strl中的下一个字符,否则返回当前检测字符,如果strl中的所有字符都在str2中出现,则 返回’\\0’。结点数据结构构造比较简单,只需把链表结点数据项类型改写成char型即可:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image18.png'/>本算法用不带头结点的单链表来表示串,实现函数如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image19.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image20.png'/>"},{"id":"learncoder_148_17560","stem":"在用KMP算法进行模式匹配时,模式串\"ababaaababaa”的nextval数组值为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"写出模式串、对应字符下标和next数组的值,见表4-10。nextval[l]=O,特殊标记;<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image1.png'/>p2为 b, Pnext⑵为 a,两者不等,nextval⑵=next[2]=1;P3为 a, pnext[3]为 a,两者相等,nextval⑶=mextval[iiext⑶]=0;P4为 b, Pnext[4]为 b,两者相等,nextval[4]=nextval[next[4]]=l;P5为 a, pnext[5]为 a,两者相等,nextval[5]=nextval[next[5]]=0;p6为 a, pnext[6]为 b,两者不等,nextval[6]=next[6]=4;P7为 a, Pnext[7]为 b,两者不等,nextval[7]=next⑺=2;P8为 b, Pnext[8]为 b,两者相等,nextval[8]=nextval[next[8]]=l;P9为,a, pnext[9]为 a,两者相等,nextval[9]=nextval[next[9]]=0;P10为 b, Pnext[io]为 b,两者相等,nextval[10]=nextval[next[10]]=l ;P11为 a, pnext[n]为 a,两者相等,nextval[ 11 ]=nextval[next[ 11 ]]=0;P12为 a, Pnext[i2]为 a,两者相等,nextvalf 12]=nextval[next[ 12]]=4o说明:本章存储串的数组从下标1开始,而有的教材中从0开始,因此在这两种设定下求得的next 数组值相差1,此时考生需根据题目判断属于哪种设定。","type":"choice","options":{"A":"0,1, 0, 1, 0, 4, 2, 1, 0, 1, 0, 4","C":"0, 1, 0, 1, 1, 2, 0, 1, 0, 1, 0, 2","D":"0, 1, 1, 1, 0,2, 1, 1, 0, 1, 0, 4","B":"0, 1, 0, 1, 1,4, 1,1, 0, 1, 0, 2"},"answer":"A"},{"id":"learncoder_148_17563","stem":"编写下列算法。(1)将串str中所有值为chi的字符转换成ch2的字符,如果str为空串,或者串中不含值为chi的 字符,则什么都不做。(2)实现串str的逆转函数,如果str为空串,则什么都不做。(3)删除str中值为ch的所有字符,如果str为空串,或者串中不含值为ch的字符,则什么都不做。(4)从串str中的pos位置起,求出与substr串匹配的子串的位置,如果str为空串,或者串中不含 与substr匹配的子串長则返回做标记。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"(1)本题较为简单,只需扫描str串,发现值为chi的字符用值为ch2的字符覆盖即可,代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image2.png'/>(2)本题也很简单,只需用两个指针指向串首和串尾,然后相向而行,且交换其经过的字符,两指针相遇时算法结束,代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image3.png'/>(3)解法:开辟一个新串空间,将原串中未删除的字符复制到这片新空间上,释放原串空间。算法实现代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image4.png'/>解法二:本题如果采用定长顺序串作为串的存储结构,则可以通过移动覆盖元素实现删除,算法描述为:当发现值等于ch的字符时,将其后所有的字符向前移动一个位置。算法实现代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image5.png'/>图4.1展示了解法二中的处理过程,可以看出x字符被移动了两次,y字符被移动了 3次才到答案 最终位置,这显然是多余的操作(图中灰色块表示每次移动腾出的空位置)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image6.png'/>改进方法:只需将每个待删字符到后一个待删字符之间的子串前移i个位置即可,其中i是目前扫 描到的待删字符的个数。改进算法如图4.2所示,第一个ch到第二个ch之间的字符全部往前移动一个位置,删除了第一个 ch (这里之所以说删除而不是覆盖,是因为可能出现没有用其他字符覆盖掉ch的情况,但ch —定会从 当前串中删除),并出现了一个空位;此时将第二个ch到第三个ch之间的字符向前移动两个位置,即可删除ch和空位上的字符;以此类推,直到处理完所有字符即可。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image7.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image8.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image9.png'/>(4)修改KMP算法,使起始匹配检测位置从pos开始即可。假设next数组已经构建完毕。具体代 码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image10.png'/>"},{"id":"learncoder_148_17559","stem":"在用KMP算法进行模式匹配时,模式串\"ababaaababaa”的next数组值为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"按照前边介绍的next数组的手工求法可以容易求得答案为C。","type":"choice","options":{"D":"0, 1, 2, 3, 0, 1, 2, 3, 2, 2, 3, 4","C":"09 1, 1, 2, 3, 4, 2, 2, 3, 4, 5,6","B":"0, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2","A":"0, 1, 2, 3, 4, 5, 6, 7, & 9, 9, 9"},"answer":"C"},{"id":"learncoder_148_17566","stem":"编写一个函数,计算一个子串在一个主串中出现的次数,如果该子串不出现,则返回0。本题不 需要考虑子串重叠,如:主串为aaaa,子串为aaa,考虑子串重叠结果为2,不考虑子串重叠结果为1。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"本题为模式串匹配算法的扩展。在之前关于模式串匹配算法的讲解中,如果匹配成功,则算法结 束,这里只需修改为匹配成功计数黑加1并且继续进行匹配检测即可。算法代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image15.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image16.png'/>当然本题也可以用KMP算法来实现,假设next数组已经求得,代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第4章)/image17.png'/>"},{"id":"learncoder_148_17558","stem":"若串S= \"software”,则其子串的数目是(\t),其中空串和S串本身这两个字符串也算S的子串。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"设待求串长度为n,则:长度为0的子串,1个,即空串; 长度为n的子串,即S串本身,1个;长度为1的子串,n-(l-l)=n个; 长度为2的子串,n-(2-l)=n-1个; 长度为3的子串,n-(3-l)=n-2... ...长度为n-1的子串,n-(nTT)=2个;因此,所有子串个数为]+1+2+・・・+n-2+ir~l+iT=n(ii+l)/2+1个。 综上可知本题选B。","type":"choice","options":{"A":"8","B":"37","C":"36","D":"9"},"answer":"B"},{"id":"learncoder_148_17554","stem":"两个串相等的充分必要条件是( )。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"D":"两串长度相等且所包含的字符集合相等","B":"两串所包含的字符集合相等","A":"两串长度相等","C":"两串长度相等且对应位置的字符相等"},"answer":"C"},{"id":"learncoder_148_17557","stem":"设 strl 为\"Demon”,str2 为”_”,str3 为 “Hunter”,则 strl、 str2 和 str3 依次连接后的结果是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"A":"\"DemonHunter”","B":"\"_DemonHunter\"","C":"''DemonHunteT_”","D":"\"Demon_Huiiter”"},"answer":"D"},{"id":"learncoder_148_17556","stem":"设字符串str为“I_AM_A_ _TEACHER”(其中代表空格字符),则str的长度为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"注意空格字符也是串中的一个字符,因此本题选C。","type":"choice","options":{"B":"14","A":"13","D":"16","C":"15"},"answer":"C"},{"id":"learncoder_148_17552","stem":"设串si为\"ABCDEFG”,s2为\"PQRST”,函数con(x,y)返回x和y串的连接串,subs(s,i,j)返回 s的从序号i (0≤i≤len(s-1))处字符开始的j个字符组成的子串,len(s)返回串s的长度,则 con(subs(s1, 1 ,len(s2)),subs(s1, len(s2)-l,2))的结果是( )。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"本题只需将各个中间结果展开即可很容易地得到答案:len(s2)返回5subs(sl, 1, len(s2))=>subs(sl, 1, 5)返回“BCDEF”。subs(sl, len(s2)-l, 2)=>subs(sl ,4, 2)返回“EF”。con(subs(sl, 1, len(s2)), subs(sl, len(s2)-l, 2))=>con( “BCDEF”,“EF”)返回 “BCDEFEF”。因此答案选D。","type":"choice","options":{"A":"BCDEF","D":"BCDEFEF","B":"BCDEFG","C":"BCPQRST"},"answer":"D"},{"id":"learncoder_148_17551","stem":"设有两个串p和q,求q在p中首次出现的位置的运算称为( )。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"根据4.2节所讲解的模式匹配算法可知本题选B。","type":"choice","options":{"D":"求串长","C":"求子串","B":"模式匹配","A":"连接"},"answer":"B"},{"id":"learncoder_148_17553","stem":"串的两种最基本的存储方式是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"串的两种最基本存储方式是顺序存储方式和链式存储方式。","type":"choice","options":{"A":"顺序存储方式和链式存储方式","B":"顺序存储方式和堆存储方式","C":"堆存储方式和链式存储方式","D":"堆存储方式和数组存储方式"},"answer":"A"},{"id":"learncoder_148_17555","stem":"空格串是(①),其长度等于(②),正确选项是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"由空格串的定义可知本题选E,注意空格串和空串的区别。","type":"choice","options":{"C":"①空串,②未定义","D":"①由一个或者多个空格组成的字符串,②未定义","B":"①由一个或者多个空格组成的字符串,②其包含的空格个数","A":"①空串,②0"},"answer":"B"},{"id":"learncoder_148_17549","stem":"空格串与空串是相同的,这种说法( )。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"B":"错误","A":"正确"},"answer":"B"},{"id":"learncoder_148_17550","stem":"串是一种特殊的线性表,其特殊性体现在( )。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"串是限定了数据元素是字符的线性表,串的数据元素必须是单个字符,因此选B","type":"choice","options":{"D":"数据元素是多个字符","A":"可以顺序存储","B":"数据元素是一个字符","C":"可以链式存储"},"answer":"B"},{"id":"learncoder_148_15990","stem":"S=“S1S2…Sn”是一个长为N的字符串,存放在一个数组中,编程序将S改造之后输出:(1)将S的所有第偶数个字符按照其原来的下标从大到小的次序放在S的后半部分;(2)将S的所有第奇数个字符按照其原来的下标从小到大的次序放在S的前半部分;例如:S=‘ABCDEFGHIJKL’则改造后的S为‘ACEGIKLJHFDB’。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"对读入的字符串的第奇数个字符,直接放在数组前面,对第偶数个字符,先入栈,到读字符串结束,再将栈中字符出栈,送入数组中。限于篇幅,这里编写算法,未编程序。voidRearrangeString()//对字符串改造,将第偶数个字符放在串的后半部分,第奇数个字符前半部分。{charch,s[],stk[];//s和stk是字符数组(表示字符串)和字符栈inti=1,j;//i和j字符串和字符栈指针while((ch=getchar())!=’#’)//’#’是字符串结束标志s[i++]=ch;//读入字符串s[i]=’\\0’;//字符数组中字符串结束标志i=1;j=1;while(s[i])//改造字符串{if(i%2==0)stk[i/2]=s[i];elses[j++]=s[i];i++;}//whilei--;i=i/2;//i先从’\\0’后退,是第偶数字符的个数while(i>0)s[j++]=stk[i--]//将第偶数个字符逆序填入原字符数组}"},{"id":"learncoder_148_15987","stem":"编写程序,统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A-Z这26个字母和0-9这10个数字)。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"由于字母共26个,加上数字符号10个共36个,所以设一长36的整型数组,前10个分量存放数字字符出现的次数,余下存放字母出现的次数。从字符串中读出数字字符时,字符的ASCII代码值减去数字字符‘0’的ASCII代码值,得出其数值(0..9),字母的ASCII代码值减去字符‘A’的ASCII代码值加上10,存入其数组的对应下标分量中。遇其它符号不作处理,直至输入字符串结束。voidCount()//统计输入字符串中数字字符和字母字符的个数。{inti,num[36];charch;for(i=0;i<36;i++)num[i]=0;//初始化while((ch=getchar())!=‘#’)//‘#’表示输入字符串结束。if(‘0’<=ch<=‘9’){i=ch-48;num[i]++;}//数字字符elseif(‘A’<=ch<=‘Z’){i=ch-65+10;num[i]++;}//字母字符for(i=0;i<10;i++)//输出数字字符的个数printf(“数字%d的个数=%d\\n”,i,num[i]);for(i=10;i<36;i++)//求出字母字符的个数printf(“字母字符%c的个数=%d\\n”,i+55,num[i]);}//算法结束。"},{"id":"learncoder_148_15988","stem":"写一个递归算法来实现字符串逆序存储,要求不另设串存储空间。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"实现字符串的逆置并不难,但本题“要求不另设串存储空间”来实现字符串逆序存储,即第一个输入的字符最后存储,最后输入的字符先存储,使用递归可容易做到。voidInvertStore(charA[])//字符串逆序存储的递归算法。{charch;staticinti=0;//需要使用静态变量scanf(\"%c\",&ch);if(ch!='.')//规定'.'是字符串输入结束标志{InvertStore(A);A[i++]=ch;//字符串逆序存储}A[i]='\\0';//字符串结尾标记}//结束算法InvertStore。"},{"id":"learncoder_148_15991","stem":"编一程序,对输入的一表达式(字符串),输出其TOKEN表示。表达式由变量A,B,C,常数(数字)0,1,…,9,运算符+,*和括号“(”,“)”组成。首先定义符号的类码:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第4章/image2.png'/>其次定义符号的TOKEN表示:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第4章/image3.png'/>其中NAMEL是变量名表(不允许有相同名),CONST是常量表(不允许有相同数)。例如,假设有表达式(A+A*2)+2*B*3#则将生成如下TOKENL:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第4章/image4.png'/>","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"本题是对字符串表达式的处理问题,首先定义4种数据结构:符号的类码,符号的TOKEN表示,变量名表NAMEL和常量表CONSL。这四种数据结构均定义成结构体形式,数据部分用一维数组存储,同时用指针指出数据的个数。算法思想是从左到右扫描表达式,对读出的字符,先查出其符号类码:若是变量或常量,就到变量名表和常量表中去查是否已有,若无,则在相应表中增加之,并返回该字符在变量名表或常量表中的下标;若是操作符,则去查其符号类码。对读出的每个符号,均填写其TOKEN表。如此下去,直到表达式处理完毕。先定义各数据结构如下。struct//定义符号类别数据结构{chardata[7];//符号charcode[7];//符号类码}TYPL;typedefstruct//定义TOKEN的元素{inttyp;//符号码intaddr;//变量、常量在名字表中的地址}cmp;struct{cmpdata[50];//定义TOKEN表长度<50intlast;//表达式元素个数}TOKEN;struct{chardata[15];//设变量个数小于15个intlast;//名字表变量个数}NAMEL;struct{chardata[15];//设常量个数小于15个intlast;//常量个数}CONSL;intoperator(charcr)//查符号在类码表中的序号{for(i=3;i<=6;i++)if(TYPL.data[i]==cr)return(i);}voidPROCeString()//从键盘读入字符串表达式(以‘#’结束),输出其TOKEN表示。{NAMEL.last=CONSL.last=TOKEN.last=0;//各表元素个数初始化为0TYPL.data[3]=‘*’;TYPL.data[4]=‘+’;TYPL.data[5]=‘(’;TYPL.data[6]=‘)’;//将操作符存入数组TYPL.code[3]=‘3’;TYPL.code[4]=‘4’;TYPL.code[5]=‘5’;TYPL.code[6]=‘6’;//将符号的类码存入数组scanf(“%c”,&ch);//从左到右扫描(读入)表达式。while(ch!=‘#’)//‘#’是表达式结束符{switch(ch)of{case‘A’:case‘B’:case‘C’://ch是变量TY=0;//变量类码为0for(i=1;i<=NAMEL.last;i++)if(NAMEL.data[i]==ch)break;//已有该变量,i记住其位置if(i>NAMEL.last){NAMEL.data[i]=ch;NAMEL.last++;}//变量加入case‘0’:case‘1’:case‘2’:case‘3’:case‘4’:case‘5’://处理常量case‘6’:case‘7’:case‘8’:case‘9’:TY=1;//常量类码为1for(i=1;i<=CONSL.last;i++)if(CONSL.data[i]==ch)break;////已有该常量,i记住其位置if(i>CONSL.last){CONSL.data[i]=ch;CONSL.last++;}//将新常量加入default://处理运算符TY=operator(ch);//类码序号i=’\\0’;//填入TOKEN的addr域(期望输出空白)}//结束switch,下面将ch填入TOKEN表TOKEN.data[++TOKEN.last].typ=TY;TOKEN.data[TOKEN.last].addr=i;scanf(“%c”,&ch);//读入表达式的下一符号。}//while}//算法结束"},{"id":"learncoder_148_15986","stem":"串以静态存储结构存储,结构如下所述,试实现串操作equal算法.CONSTmaxlen=串被确认的最大长度TYPEstrtp=RECORDch:ARRAY[1..maxlen]OFchar;curlen:0..maxlenEND;(以一维数组存放串值,并设指示器curlen指示当前串长)","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"两个串的相等,其定义为两个串的值相等,即串长相等,且对应字符相等是两个串相等的充分必要条件。因此,首先比较串长,在串长相等的前提下,再比较对应字符是否相等。intequal(strtps,strtpt)//本算法判断字符串s和字符串t是否相等,如相等返回1,否则返回0{if(s.curlen!=t.curlen)return(0);for(i=0;i<s.curlen;i++)//在类C中,一维数组下标从零开始if(s.ch[i]!=t.ch[i])return(0);return(1);//两串相等}//算法结束"},{"id":"learncoder_148_15989","stem":"已知三个字符串分别为s=’ab…abcaabcbca…a’,s’=’caab’,s’’=’bcb’。利用所学字符串基本运算的函数得到结果串为:s’’’=’caabcbca…aca…a’,要求写出得到上结果串S’’’所用的函数及执行算法。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"串s'''可以看作由以下两部分组成:'caabcbca...a'和'ca...a',设这两部分分别叫串s1和串s2,要设法从s,s'和s''中得到这两部分,然后使用联接操作联接s1和s2得到s'''。i=index(s,s');//利用串s'求串s1在串s中的起始位置s1=substr(s,i,length(s)-i+1);//取出串s1j=index(s,s'');//求串s''在串s中的起始位置,s串中'bcb'后是'ca...a')s2=substr(s,j+3,length(s)-j-2);//形成串s2s3=concat(s1,s2);"},{"id":"learncoder_148_15977","stem":"已知:s='(xyz)+*',t='(x+z)*(x+z)*y'。试利用联结、求子串和置换等基本运算,将s转化为t。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"题中所给操作的含义如下://:连接函数,将两个串连接成一个串substr(s,i,j):取子串函数,从串s的第i个字符开始,取连续j个字符形成子串replace(s1,i,j,s2):置换函数,用s2串替换s1串中从第i个字符开始的连续j个字符本题有多种解法,下面是其中的一种:(1)s1=substr(s,3,1)//取出字符:‘y’(2)s2=substr(s,6,1)//取出字符:‘+’(3)s3=substr(s,1,5)//取出子串:‘(xyz)’(4)s4=substr(s,7,1)//取出字符:‘*’(5)s5=replace(s3,3,1,s2)//形成部分串:‘(x+z)’(6)s=s5//s4//s1//形成串t即‘(x+z)*y’"},{"id":"learncoder_148_15980","stem":"以顺序存储结构表示串,设计算法。求串S中出现的第一个最长重复子串及其位置并分析算法的时间复杂度。类似本题的另外叙述有:(1)如果字符串的一个子串(其长度大于1)的各个字符均相同,则称之为等值子串。试设计一算法,输入字符串S,以“!”作为结束标志。如果串S中不存在等值子串,则输出信息“无等值子串”,否则求出(输出)一个长度最大的等值子串。例如:若S=“abc123abc123!”,则输出“无等值子串”;若S=“abceebccadddddaaadd!”,则输出“ddddd”。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"设以字符数组s表示串,重复子串的含义是由一个或多个连续相等的字符组成的子串,其长度用max表示,初始长度为0,将每个局部重复子串的长度与max相比,若比max大,则需要更新max,并用index记住其开始位置。intLongestString(chars[],intn)//串用一维数组s存储,长度为n,本算法求最长重复子串,返回其长度。{intindex=0,max=0;//index记最长的串在s串中的开始位置,max记其长度intlength=1,i=0,start=0;//length记局部重复子串长度,i为字符数组下标while(i<n-1)if(s[i]==s[i+1]){i++;length++;}else//上一个重复子串结束{if(max<length){max=length;index=start;}//当前重复子串长度大,则更新maxi++;start=i;length=1;//初始化下一重复子串的起始位置和长度}printf(“最长重复子串的长度为%d,在串中的位置%d\\n”,max,index);return(max);}//算法结束"},{"id":"learncoder_148_15983","stem":"设计一个二分检索的算法,在一组字符串中找出给定的字符串,假设所有字符串的长度为4。(1)简述算法的主要思想;(2)用PASCAL语言分别对算法中用到的类型和变量作出说明;(3)用类PASCAL语言或自然语言写算法的非递归过程;(4)分析该算法的最大检索长度;(5)必要处加上中文注释。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"本题属于查找,待查找元素是字符串(长4),将查找元素存放在一维数组中。二分检索(即折半查找或对分查找),是首先用一维数组的“中间”元素与被检索元素比较,若相等,则检索成功,否则,根据被检索元素大于或小于中间元素,而在中间元素的右方或左方继续查找,直到检索成功或失败(被检索区间的低端指针大于高端指针)。下面给出类C语言的解法typedefstructnode{chardata[4];//字符串长4}node;非递归过程如下:intbinsearch(nodestring[];intn;charname[4])//在有n个字符串的数组string中,二分检索字符串name。若检索成功,返回name在string中的下标,否则返回-1。{intlow=0,high=n-1;//low和high分别是检索区间的下界和上界while(low<=high){mid=(low+high)/2;//取中间位置if(strcmp(string[mid],name)==0)return(mid);//检索成功elseif(strcmp(string[mid],name)<0)low=mid+1;//到右半部分检索elsehigh=mid-1;//到左半部分检索}return0;//检索失败}//算法结束最大检索长度为log2n。"},{"id":"learncoder_148_15978","stem":"设s、t为两个字符串,分别放在两个一维数组中,m、n分别为其长度,判断t是否为s的子串。如果是,输出子串所在位置(第一个字符),否则输出0。(注:用程序实现)","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"判断字符串t是否是字符串s的子串,称为串的模式匹配,其基本思想是对串s和t各设一个指针i和j,i的值域是0..m-n,j的值域是0..n-1。初始值i和j均为0。模式匹配从s0和t0开始,若s0=t0,则i和j指针增加1,若在某个位置si!=tj,则主串指针i回溯到i=i-j+1,j仍从0开始,进行下一轮的比较,直到匹配成功(j>n-1),返回子串在主串的位置(i-j)。否则,当i>m-n则为匹配失败。intindex(chars[],t[],intm,n)//字符串s和t用一维数组存储,其长度分别为m和n。本算法求字符串t在字符串s中的第一次出现,如是,输出子串在s中的位置,否则输出0。{inti=0,j=0;while(i<=m-n&&j<=n-1)if(s[i]==t[j]){i++;j++;}//对应字符相等,指针后移。else{i=i-j+1;j=0;}//对应字符不相等,I回溯,j仍为0。if(i<=m-n&&j==n){printf(“t在s串中位置是%d”,i-n+1);return(i-n+1);}//匹配成功elsereturn(0);//匹配失败}//算法index结束main()//主函数{chars[],t[];intm,n,i;scanf(“%d%d”,&m,&n);//输入两字符串的长度scanf(“%s”,s);//输入主串scanf(“%s”,t);//输入子串i=index(s,t,m,n);}//程序结束"},{"id":"learncoder_148_15981","stem":"假设串的存储结构如下所示,编写算法实现串的置换操作。“abceebccadddddaaadd!”,则输出“ddddd”。TYPEstrtp=RECORDch:ARRAY[1..maxlen]OFchar;curlen:0..maxlenEND;","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"教材中介绍的串置换有两种形式:第一种形式是replace(s,i,j,t),含义是将s串中从第i个字符开始的j个字符用t串替换,第二种形式是replace(s,t,v),含义是将s串中所有非重叠的t串用v代替。我们先讨论第一种形式的替换。因为已经给定顺序存储结构,我们可将s串从第(i+j-1)到串尾(即s.curlen)移动t.curlen-j绝对值个位置(以便将t串插入):若j>t.curlen,则向左移;若j<t.curlen,则向右移动;若j=t.curlen,则不必移动。最后将t串复制到s串的合适位置上。当然,应考虑置换后的溢出问题。intreplace(strtps,t,inti,j)//s和t是用一维数组存储的串,本算法将s串从第i个字符开始的连续j个字符用t串置换,操作成功返回1,否则返回0表示失败。{if(i<1||j<0||t.curlen+s.curlen-j>maxlen){printf(“参数错误\\n”);exit(0);}//检查参数及置换后的长度的合法性。if(j<t.curlen)//若s串被替换的子串长度小于t串长度,则s串部分右移,for(k=s.curlen-1;k>=i+j-1;k--)s.ch[k+t.curlen-j]=s.ch[k];elseif(j>t.curlen)//s串中被替换子串的长度小于t串的长度。for(k=i-1+j;k<=s.curlen-1;k++)s.ch[k-(j-t.curlen)]=s.ch[k];for(k=0;k<t.curlen;k++)s.ch[i-1+k]=t.ch[k];//将t串复制到s串的适当位置if(j>t.curlen)s.curlen=s.curlen-(j-t.curlen);elses.curlen=s.curlen+(t.curlen-j);}//算法结束"},{"id":"learncoder_148_15984","stem":"设计一PASCAL或C语言的函数atoi(x).其中X为字符串,由0--9十个数字符和表示正负数的‘-’组成,返回值为整型数值。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"设字符串存于字符数组X中,若转换后的数是负数,字符串的第一个字符必为'-',取出的数字字符,通过减去字符零('0')的ASCII值,变成数,先前取出的数乘上10加上本次转换的数形成部分数,直到字符串结束,得到结果。longatoi(charX[])//一数字字符串存于字符数组X中,本算法将其转换成数{longnum=0;inti=1;//i为数组下标while(X[i]!='\\0')num=10*num+(X[i++]-'0');//当字符串未到尾,进行数的转换if(X[0]=='-')return(-num);//返回负数elsereturn((X[0]-'0')*10+num);//返回正数,第一位若不是负号,则是数字}//算法atoi结束"},{"id":"learncoder_148_15982","stem":"函数voidinsert(char*s,char*t,intpos)将字符串t插入到字符串s中,插入位置为pos。请用c语言实现该函数。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"本题是字符串的插入问题,要求在字符串s的pos位置,插入字符串t。首先应查找字符串s的pos位置,将第pos个字符到字符串s尾的子串向后移动字符串t的长度,然后将字符串t复制到字符串s的第pos位置后。对插入位置pos要验证其合法性,小于1或大于串s的长度均为非法,因题目假设给字符串s的空间足够大,故对插入不必判溢出。voidinsert(char*s,char*t,intpos)//将字符串t插入字符串s的第pos个位置。{inti=1,x=0;char*p=s,*q=t;//p,q分别为字符串s和t的工作指针if(pos<1){printf(“pos参数位置非法\\n”);exit(0);}while(*p!=’\\0’&&i<pos){p++;i++;}//查pos位置//若pos小于串s长度,则查到pos位置时,i=pos。if(*p=='/0'){printf(\"%d位置大于字符串s的长度\",pos);exit(0);}else//查找字符串的尾while(*p!='/0'){p++;i++;}//查到尾时,i为字符‘\\0’的下标,p也指向‘\\0’。while(*q!='\\0'){q++;x++;}//查找字符串t的长度x,循环结束时q指向'\\0'。for(j=i;j>=pos;j--){*(p+x)=*p;p--;}//串s的pos后的子串右移,空出串t的位置。q--;//指针q回退到串t的最后一个字符for(j=1;j<=x;j++)*p--=*q--;//将t串插入到s的pos位置上"},{"id":"learncoder_148_15985","stem":"已知字符串S1中存放一段英文,写出算法format(s1,s2,s3,n),将其按给定的长度n格式化成两端对齐的字符串S2,其多余的字符送S3。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"本题要求字符串s1拆分成字符串s2和字符串s3,要求字符串s2“按给定长度n格式化成两端对齐的字符串”,即长度为n且首尾字符不得为空格字符。算法从左到右扫描字符串s1,找到第一个非空格字符,计数到n,第n个拷入字符串s2的字符不得为空格,然后将余下字符复制到字符串s3中。voidformat(char*s1,*s2,*s3)//将字符串s1拆分成字符串s2和字符串s3,要求字符串s2是长n且两端对齐{char*p=s1,*q=s2;inti=0;while(*p!='\\0'&&*p=='')p++;//滤掉s1左端空格if(*p=='\\0'){printf(\"字符串s1为空串或空格串\\n\");exit(0);}while(*p!='\\0'&&i<n){*q=*p;q++;p++;i++;}//字符串s1向字符串s2中复制if(*p=='\\0'){printf(\"字符串s1没有%d个有效字符\\n\",n);exit(0);}if(*(--q)=='')//若最后一个字符为空格,则需向后找到第一个非空格字符{p--;//p指针也后退while(*p==''&&*p!='\\0')p++;//往后查找一个非空格字符作串s2的尾字符if(*p=='\\0'){printf(\"s1串没有%d个两端对齐的字符串\\n\",n);exit(0);}*q=*p;//字符串s2最后一个非空字符*(++q)='\\0';//置s2字符串结束标记}*q=s3;p++;//将s1串其余部分送字符串s3。while(*p!='\\0'){*q=*p;q++;p++;}*q='\\0';//置串s3结束标记}"},{"id":"learncoder_148_15976","stem":"设S1,S2为串,请给出使S1//S2=S2//S1成立的所有可能的条件(//为连接符)。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"(1)s1和s2均为空串;(2)两串之一为空串;(3)两串串值相等(即两串长度相等且对应位置上的字符相同)。(4)两串中一个串长是另一个串长(包括串长为1仅有一个字符的情况)的数倍,而且长串就好象是由数个短串经过连接操作得到的。"},{"id":"learncoder_148_15979","stem":"输入一个字符串,内有数字和非数字字符,如:ak123x45617960?302gef4563,将其中连续的数字作为一个整体,依次存放到一数组a中,例如123放入a[0],456放入a[1],……。编程统计其共有多少个整数,并输出这些数。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"在一个字符串内,统计含多少整数的问题,核心是如何将数从字符串中分离出来。从左到右扫描字符串,初次碰到数字字符时,作为一个整数的开始。然后进行拼数,即将连续出现的数字字符拼成一个整数,直到碰到非数字字符为止,一个整数拼完,存入数组,再准备下一整数,如此下去,直至整个字符串扫描到结束。intCountInt()//从键盘输入字符串,连续的数字字符算作一个整数,统计其中整数的个数。{inti=0,a[];//整数存储到数组a,i记整数个数scanf(“%c”,&ch);//从左到右读入字符串while(ch!=‘#’)//‘#’是字符串结束标记if(isdigit(ch))//是数字字符{num=0;//数初始化while(isdigit(ch)&&ch!=‘#’)//拼数{num=num*10+‘ch’-‘0’;scanf(“%c”,&ch);}a[i]=num;i++;if(ch!=‘#’)scanf(“%c”,&ch);//若拼数中输入了‘#’,则不再输入}//结束while(ch!=‘#’)printf(“共有%d个整数,它们是:”i);for(j=0;j<i;j++){printf(“%6d”,a[j]);if((j+1)%10==0)printf(“\\n”);}//每10个数输出在一行上}//算法结束"},{"id":"learncoder_148_15974","stem":"在模试匹配KMP算法中所用失败函数f的定义中,为何要求p1p2……pf(j)为p1p2……pj两头匹配的真子串?且为最大真子串?","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"失败函数(即next)的值只取决于模式串自身,若第j个字符与主串第i个字符失配时,假定主串不回溯,模式串用第k(即next[j])个字符与第i个相比,有‘p1…pk-1’=‘pj-k+1…pj-1’,为了不因模式串右移与主串第i个字符比较而丢失可能的匹配,对于上式中存在的多个k值,应取其中最大的一个。这样,因j-k最小,即模式串向右滑动的位数最小,避免因右移造成的可能匹配的丢失。"},{"id":"learncoder_148_15972","stem":"在字符串模式匹配的KMP算法中,求模式的next数组值的定义如下:next[j]=0j=1时Max{k|1<k<j且‘p1...pk1’=’pjk+1...pj1’}1\t其他情况请问:(1)当j=1时,为什么要取next[1]=0?(2)为什么要取max{K},K最大是多少?(3)其它情况是什么情况,为什么取next[j]=1?【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"(1)当模式串中第一个字符与主串中某字符比较不等(失配)时,next[1]=0表示模式串中已没有字符可与主串中当前字符s[i]比较,主串当前指针应后移至下一字符,再和模式串中第一字符进行比较。(2)当主串第i个字符与模式串中第j个字符失配时,若主串i不回溯,则假定模式串第k个字符与主串第i个字符比较,k值应满足条件1<k<j并且‘p1…pk-1’=‘pj-k+1…pj-1’,即k为模式串向后移动的距离,k值有多个,为了不使向右移动丢失可能的匹配,k要取大,由于max{k}表示移动的最大距离,所以取max{k},k的最大值为j-1。(3)在上面两种情况外,发生失配时,主串指针i不回溯,在最坏情况下,模式串从第1个字符开始与主串第i个字符比较,以便不致丢失可能的匹配。"},{"id":"learncoder_148_15975","stem":"如果两个串含有相等的字符,能否说它们相等?","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"仅从两串含有相等的字符,不能判定两串是否相等,两串相等的充分必要条件是两串长度相等且对应位置上的字符相同(即两串串值相等)。"},{"id":"learncoder_148_15973","stem":"给出KMP算法中失败函数f的定义,并说明利用f进行串模式匹配的规则,该算法的技术特点是什么?","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"进行模式匹配时,若主串第i个字符与模式串第j个字符发生失配,主串指针i不回溯,和主串第i个字符进行比较的是模式串的第next[j]个字符。模式串的next函数值,只依赖于模式串,和主串无关,可以预先求出。该算法的技术特点是主串指针i不回溯。在经常发生“部分匹配”和主串很大不能一次调入内存时,优点特别突出。"},{"id":"learncoder_148_15967","stem":"设目标为t=‘abcaabbabcabaacbacba’,模式为p=‘abcabaa’(1)计算模式p的naxtval函数值;(5分)(2)不写出算法,只画出利用KMP算法进行模式匹配时每一趟的匹配过程。(5分)","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"(1)p的nextval函数值为0110132。(p的next函数值为0111232)。(2)利用KMP(改进的nextval)算法,每趟匹配过程如下:第一趟匹配:abcaabbabcabaacbacbaabcab(i=5,j=5)第二趟匹配:abcaabbabcabaacbacbaabc(i=7,j=3)第三趟匹配:abcaabbabcabaacbacbaa(i=7,j=1)第四趟匹配:abcaabbabcabaacbacba(成功)abcabaa(i=15,j=8)"},{"id":"learncoder_148_15968","stem":"模式匹配算法是在主串中快速寻找模式的一种有效的方法,如果设主串的长度为m,模式的长度为n,则在主串中寻找模式的KMP算法的时间复杂性是多少?如果,某一模式P=’abcaacabaca’,请给出它的NEXT函数值及NEXT函数的修正值NEXTVAL之值。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"KMP算法的时间复杂性是O(m+n)。p的next和nextval值分别为01112212321和01102201320。"},{"id":"learncoder_148_15971","stem":"在改进了的(无回溯)字符串模式匹配中,要先求next数组的值。下面是求nextval值的算法。TYPESAR=ARRA\tY[1..m]\tOF\tINTEGER;PTY=ARRA\tY[1..m]\tOF\tCHAR;PROCEDUREnext2(P:PTY;VARNEXTVAL:SAR);{在模式P中求nextval数组的值}1BEGIN2J:=1;NEXTVAL[1]:=0;K:=03REPEAT4IF(K=0)OR(P[J]=P[K])5THEN[J:=J+1;K:=K+1;6IFP[J]=P[K]7THENNEXTVAL[J]:=NEXTVAL[K]8ELSENEXTVAL[J]:=K]9ELSEK:=NEXTVAL[K]10UNTILJ=m11END;算法中第4行有P[J]=P[K],第六行中也有P[J]=P[K]。两处比较语句相同。请分析说明此两处比较语句的含义是什么?分析此算法在最坏情况下的时间复杂度是多少?","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"第4行的p[J]=p[K]语句是测试模式串的第J个字符是否等于第K个字符,如是,则指针J和K均增加1,继续比较。第6行的p[J]=p[K]语句的意义是,当第J个字符在模式匹配中失配时,若第K个字符和第J个字符不等,则下个与主串匹配的字符是第K个字符;否则,若第K个字符和第J个字符相等,则下个与主串匹配的字符是第K个字符失配时的下一个(即NEXTVAL[K])。该算法在最坏情况下的时间复杂度O(m2)。"},{"id":"learncoder_148_15969","stem":"设目标为S=‘abcaabbcaaabababaabca’,模式为P=‘babab’,(1)手工计算模式P的nextval数组的值;(5分)(2)写出利用求得的nextval数组,按KMP算法对目标S进行模式匹配的过程。(5分)","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"(1)p的nextval函数值为01010。(next函数值为01123)(2)利用所得nextval数值,手工模拟对s的匹配过程,与上面16题类似,为节省篇幅,故略去。"},{"id":"learncoder_148_15970","stem":"用无回溯的模式匹配法(KMP法)及快速的无回溯的模式匹配法求模式串T的next[j]值,添入下面表中:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第4章/image1.png'/>","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"模式串T的next和nextval值分别为0121123和0021002。"},{"id":"learncoder_148_15958","stem":"已知模式串t=‘abcaabbabcab’写出用KMP法求得的每个字符对应的next和nextval函数值。【北京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"模式串的next函数定义如下:0\t当j=1时Max{k\t|1<k<j且‘p1…pk1’=‘pjk+1…pj1’}当此集合不空时next[j]=1其他情况根据此定义,可求解模式串t的next和nextval值如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第4章/image5.png'/>"},{"id":"learncoder_148_15961","stem":"已知字符串‘cddcdececdea’,计算每个字符的next和nextval函数的值。【南京邮电大学】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"其next和nextval值分别为011123121231和011013020131。"},{"id":"learncoder_148_15964","stem":"求模式串T=‘abcaabbac'的失败函数Next(j)值。【西安交通大学】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"011122312。"},{"id":"learncoder_148_15962","stem":"试利用KMP算法和改进算法分别求p1=‘abaabaa’和p2=‘aabbaab’的next函数和nextval函数。【东南大学1999】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"p1的next和nextval值分别为:0112234和0102102;p2的next和nextval值分别为:0121123和0021002。"},{"id":"learncoder_148_15965","stem":"字符串的模式匹配KMP算法中,失败函数(NEXT)是如何定义的?计算模式串p=‘aabaabaaabc’中各字符的失败函数值.【石油大学1998】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"串p的next函数值为:01212345634。"},{"id":"learncoder_148_15966","stem":"设字符串S=‘aabaabaabaac',P=‘aabaac'(1)给出S和P的next值和nextval值;(2)若S作主串,P作模式串,试给出利用BF算法和KMP算法的匹配过程。【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"(1)S的next与nextval值分别为012123456789和002002002009,p的next与nextval值分别为012123和002003。(2)利用BF算法的匹配过程:利用KMP算法的匹配过程:第一趟匹配:aabaabaabaac第一趟匹配:aabaabaabaacaabaac(i=6,j=6)aabaac(i=6,j=6)第二趟匹配:aabaabaabaac第二趟匹配:aabaabaabaacaa(i=3,j=2)(aa)baac第三趟匹配:aabaabaabaac第三趟匹配:aabaabaabaaca(i=3,j=1)(成功)(aa)baac第四趟匹配:aabaabaabaacaabaac(i=9,j=6)第五趟匹配:aabaabaabaacaa(i=6,j=2)第六趟匹配:aabaabaabaaca(i=6,j=1)第七趟匹配:aabaabaabaac(成功)aabaac(i=13,j=7)"},{"id":"learncoder_148_15959","stem":"给出字符串‘abacabaaad’在KMP算法中的next和nextval数组。【北京邮电大学2000】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"其next和nextval值分别为0112123422和0102010422。"},{"id":"learncoder_148_15957","stem":"KMP算法(字符串匹配算法)较Brute(朴素的字符串匹配)算法有哪些改进?","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"KMP算法主要优点是主串指针不回溯。当主串很大不能一次读入内存且经常发生部分匹配时,KMP算法的优点更为突出."},{"id":"learncoder_148_15960","stem":"令t=‘abcabaa’,求其next函数值和nextval函数值。【北方交通大学】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"t串的next和nextval函数值分别为0111232和0110132。"},{"id":"learncoder_148_15963","stem":"已知KMP串匹配算法中子串为babababaa,写出next数组改进后的next数组信息值(要求写出数组下标起点)。【西南交通大学】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"next数组值为011234567改进后的next数组信息值为010101017。"},{"id":"learncoder_148_15955","stem":"两个字符串S1和S2的长度分别为m和n。求这两个字符串最大共同子串算法的时间复杂度为T(m,n)。估算最优的T(m,n),并简要说明理由。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"最优的T(m,n)是O(n)。串S2是串S1的子串,且在S1中的位置是1。开始求出最大公共子串的长度恰是串S2的长度,一般情况下,T(m,n)=O(m*n)。"},{"id":"learncoder_148_15956","stem":"设主串S=‘xxyxxxyxxxxyxyx’,模式串T=‘xxyxy’。请问:如何用最少的比较次数找到T在S中出现的位置?相应的比较次数是多少?【大连海事大学2001】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"朴素的模式匹配(Brute-Force)时间复杂度是O(m*n),KMP算法有一定改进,时间复杂度达到O(m+n)。也可采用从后面匹配的方法,即从右向左扫描,比较6次成功。另一种匹配方式是从左往右扫描,但是先比较模式串的最后一个字符,若不等,则模式串后移;若相等,再比较模式串的第一个字符,若第一个字符也相等,则从模式串的第二个字符开始,向右比较,直至相等或失败。若失败,模式串后移,再重复以上过程。按这种方法,本题比较18次成功。"},{"id":"learncoder_148_15954","stem":"描述以下概念的区别:空格串与空串。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"short_answer","answer":"空格是一个字符,其ASCII码值是32。空格串是由空格组成的串,其长度等于空格的个数。空串是不含任何字符的串,即空串的长度是零。"},{"id":"learncoder_148_15951","stem":"阅读下列程序说明和pascal程序,把应填入其中的()处的字句写在答题纸上。 程序说明:本程序用于判别输入的字符串是否为如下形式的字符串:W&M$其中,子字符串M是子字符串W的字符反向排列,在此假定W不含有字符&和字符$,字符&用作W与M 的分隔符,字符$用作字符串的输入结束符。例如,对输入字符串ab&ba$、11&12$、ab&dd$、&$,程序将分别输岀Ok.(是),No.(不是)程序PROGRAM accept(input,output);CONST midch='&'; endch='$';VAR an:boolean; ch:char;PROCEDURE match(VAR answer: boolean);VAR ch1,ch2:char; f:boolean;BEGINread(ch1);IF ch1<>endchTHEN IF __1__THEN BEGIN match(f);IF f THEN BEGIN read(ch2);answer:=","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空ch1<>midch ;ch1=ch2;answer:=true;answer:=false;read(ch);ch=endch","type":"blank","options":{"__1__":"程序中递归调用"}},{"id":"learncoder_148_15949","stem":"下列算法实现求采用顺序结构存储的串s和串t的一个最长公共子串。程序(a)PROCEDURE maxcomstr(VAR s,t : orderstring; VAR index,length : integer); VAR i,j,k,length1:integer; con:boolean;BEGINindex :=0; length :=0; i :=1;WHILE(i<=s.len) DO[j:=1;WHILE (j<=t.len) DO[ IF (s[i]=t[j]) THEN[ k:=1; length1:=1; con:=true;WHILE con DOIF __1__ THEN [length1:=length1+1;k:=k+1;] ELSE","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{}},{"id":"learncoder_148_15952","stem":"试利用下列栈和串的基本操作完成下述initstack(s)置s为空栈;push(s,x)元素x入栈;pop(s)出栈操作;gettop(s) 返回栈顶元素;sempty(s) 判栈空函数;setnull(st)置串st为空串; length(st) 返回串st的长度;equal(s1,s2) 判串si和s2是否相等的函数;concat(s1,s2) 返回联接 s1和s2之后的串;sub(s,i,1) 返回s中第i个字符; empty(st) 判串空函数\tFUNC invert(pre:string; VAR exp:string):boolean;{若给定的表达式的前缀式 pre 正确,本过程求得和它相应的表达式 exp并返回“true”,否则 exp为空串,并返回“false”。已知原表达式中不包含括弧,opset为运算符的集合。}VAR s:stack; i,n:integer; succ:boolea n;\tch:char;BEGINi:=1; n:=length(p re);succ:=true;__1__; __2__;WHILE\t(i<n)AND\tsuccDOBEGIN ch:=sub (pre,i,l);IF__3__ THEN__4__ELSE\tIF__5__THEN__6__ELSE BEGINe xp:=concat(__7__, __8__ ;e xp:=concat(__9__, __10__);__11__);END;i:=i+1END;IF__12__THENBEGIN \texp:=concat \t(exp,sub(pre,n,1)); \tinvert:=true ENDELSEBEGIN setnull(exp);invert:=falseENDEND;","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"initstack(s)","__2__":" etnull(exp)","__3__":"chinopset","__4__":"push(s,ch)","__5__":"sempty(s)","__6__":"succ:=false","__7__":"exp","__8__":"ch","__9__":"exp","__10__":"gettop(s)","__11__":"pop(s)","__12__":"sempty(s)"}},{"id":"learncoder_148_15950","stem":"完善算法:求KMP算法中next数组。PROC get _next(t:string,VAR next:ARRAY[1..t.len] OF integer); BEGINj:=1; k:=__1__; next[1]:=0;WHILE j<t.len DOIF k=0 OR t.ch[j]=t.ch[k] THEN BEGIN j:=j+1; k:=k+1; next[j]:=k;END ELSE k:=","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"无"}},{"id":"learncoder_148_15953","stem":"名词解释:串","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"29.空","type":"short_answer","answer":"串是零个至多个字符组成的有限序列。从数据结构角度讲,串属于线性结构。与线性表的特殊性在于串的元素是字符。"},{"id":"learncoder_148_15945","stem":"两个字符串相等的充分必要条件是__1__。【西安电子科技大学)】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"两串的长度相等且两串中对应位置的字符也相等。"}},{"id":"learncoder_148_15948","stem":"下列程序判断字符串s是否对称,对称则返回1,否则返回0;如f(\"abba\")返回1, f(\"abab\")返0;int f (__1__){int i=0,j=0;while (s[j])__2__;__3__for(j--; i<j && s[i]==s[j]; i++,j--); return ()}","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"chars[]","__2__":"j++","__3__":"i〉=j"}},{"id":"learncoder_148_15946","stem":"知 U= 'xyxyxyxxyxy,; t= 'xxy,;ASSIGN(S,U);ASSIGN(V,SUBSTR(S,INDEX(s,t),LEN(t)+1));ASSIGN(m,'ww')求 REPLACE (S,V,m) = __1__。【东北大学 1997】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"'xyxyxywwy'"}},{"id":"learncoder_148_15944","stem":"串是一种特殊的线性表,其特殊性表现在__1__;串的两种最基本的存储方式是__2__ 、__3__。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"其数据元素都是字符","__2__":"顺序存储","__3__":"链式存储。"}},{"id":"learncoder_148_15947","stem":"实现字符串拷贝的函数strcpy为:void strcpy(char *s , char *t) /*copy t to s*/{ while (__1__)} 【浙江大学 1999】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"*s++=*t++或(*s++=*t++)!='\\0'"}},{"id":"learncoder_148_15942","stem":"字符串'ababaaab'的nextval函数值为__1__。【北京邮电大学2001】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"01010421"}},{"id":"learncoder_148_15939","stem":"INDEX('DATASTRUCTURE', 'STR')=__1__。【福州大学 1998】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"5"}},{"id":"learncoder_148_15937","stem":"组成串的数据元素只能是__1__。【中山大学1998 】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"字符"}},{"id":"learncoder_148_15940","stem":"设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为__1__。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"O(m+n)"}},{"id":"learncoder_148_15943","stem":"设T和P是两个给定的串,在T中寻找等于P的子串的过程称为__1__,又称P为__2__。【西安电子科技大学1998】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"模式匹配","__2__":"模式串"}},{"id":"learncoder_148_15938","stem":"一个字符串中__1__称为该串的子串 。 【华中理工大学 2000】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"任意个连续的字符组成的子序列"}},{"id":"learncoder_148_15941","stem":"模式串P= 'abaabcac'的next函数值序列为__1__。【西安电子科技大学2001】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"01122312"}},{"id":"learncoder_148_15935","stem":"串的长度是指(\t)【北京工商大学】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"D":"串中所含非空格字符的个数","C":"串中所含不同字符的个数","A":"串中所含不同字母的个数","B":"串中所含字符的个数"},"answer":"B"},{"id":"learncoder_148_15936","stem":"空格串是指 __1__,其长度等于__2__。【西安电子科技大学2001】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"blank","options":{"__1__":"由空格字符(ASCII值32)所组成的字符串","__2__":"空格个数"}},{"id":"learncoder_148_15932","stem":"模式串t=\t'abcaabbcabcaabdab',该模式串的next数组的值为(),nextval数组的值为 ()。","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"C":"0 1 1 1 0 0 1 3 1 0\t 1 1\t0 0 7 0 1","E":"0 1 1 0 2 1 3 1 0 1\t 1 0 2 1 7 0 1","D":"0 1 1 1 2 2 3 1 1 2\t 3 4\t5 6 7 1 2","A":"0 1 1 1 2 2 1 1 1 2 3 4 5 6 7 1 2","B":"0 1 1 1 2 1 2 1 1 2\t 3 4\t5 6 1 1 2"},"answer":"D"},{"id":"learncoder_148_15930","stem":"串'ababaaababaa'的next数组为(\t)。【中山大学1999】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"B":"012121111212","D":"0123012322345","C":"011234223456","A":"012345678999"},"answer":"C"},{"id":"learncoder_148_15933","stem":"若串S='software',其子串的数目是(\t)。【西安电子科技大学2001】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"A":"8","B":"37","C":"36","D":"9"},"answer":"B"},{"id":"learncoder_148_15934","stem":"设S为一个长度为n的字符串,其中的字符各不相同,则S中的互异的非平凡子串(非空且不同于S本身)的 个数为( )。【中科院计算所 1997 】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"A":"2n-1","D":"(n2/2)+(n/2)-1","C":"(n2/2)+(n/2)","B":"n2"},"answer":"D"},{"id":"learncoder_148_15931","stem":"字符串'ababaabab' 的 nextval 为( )","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"C":"(0,1,0,1,0,0,0,1,1)","A":"(0, 1, 0, 1, 04, 1, 0, 1)","B":"(0, 1, 0, 1, 0, 2, 1, 0, 1)","D":"(0,1,0,1,0,1,0,1,1 )"},"answer":"A"},{"id":"learncoder_148_15926","stem":"下面关于串的的叙述中,哪一个是不正确的?( )【北方交通大学 2001】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"D":"串既可以采用顺序存储,也可以采用链式存储","C":"模式匹配是串的一种重要运算","B":"空串是由空格构成的串","A":"串是字符的有限序列"},"answer":"B"},{"id":"learncoder_148_15929","stem":"己知串S= 'aaab',其Next数组值为(\t)。【西安电子科技大学1996】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"D":"1211","A":"0123","C":"1231","B":"1123"},"answer":"A"},{"id":"learncoder_148_15927","stem":"若串 S1= 'ABCDEFG' , S2= '9898', S3= '###' , S4= '012345',执行concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8'),length(S2))) 其结果为( )【北方交通大学 1999】","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"B":"ABCD###2345","D":"ABC###2345","C":"ABC###G2345","E":"ABC###G1234","A":"ABC###G0123"},"answer":"E"},{"id":"learncoder_148_15928","stem":"设有两个串p和q,其中q是p的子串,求q在p中首次岀现的位置的算法称为(\t)","key_points":"知识点.练习.专业课练习.数据结构.串","analysis":"空","type":"choice","options":{"A":"求子串","B":"联接","D":"求串长","C":"匹配"},"answer":"C"},{"id":"learncoder_106_22878","stem":" 如果在快速排序过程中,每趟总能把当前子序列划分为长度相等的两个子序列,请分析这种情况下 的时间复杂度与空间复杂度。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"分析:(1)时间复杂度分析1)对长度为L的子序列进行一次划分,其基本操作可取为两指针的移动,显然总共移动L-1次。2)\t假设执行k趟排序结束,每次划分中基本操作的实行次数(子序列个数)如下。第1次:子序列长度为n/20,每个子序列基本操作执行n/1-1次,子序列有1个。第2次:子序列长度为n/21,每个子序列基本操作执行n/2-1次,子序列有2个。第3次:子序列长度为n/22,每个子序列基本操作执行n/4-1次,子序列有4个。第k次:子序列长度为n/2k-1,每个子序列基本操作执行2^(k-1)次,子序列有2^(k-1)个。 由算法可知,最后一趟子序列长度为1,因此有n/2^(k-1)-1=1,解得k=log2m即一共执行log2n趟划分。 由各趟分析结果可知,基本操作执行的总次数为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image17.png'/>因此,时间复杂度为O(nlog2n)。(2)空间复杂度分析因快速排序是一个递归的过程,递归需要用到系统栈。栈在快速排序中用来存放每次划分后子序列 在整个序列中的上下界,因此栈的最大深度取决于划分最大次数。由(1)知,划分最大次数为log2n+l 次,因此空间复杂度为O(log2n)。"},{"id":"learncoder_106_22877","stem":" (1)有一种简单的排序算法叫作计数排序。这种算法对一个待排序表(用数组A[]表示)进行排序, 排序结果存储在另一个新的表中(用数组B[]表示),表中关键字为int型。必须注意的是,表中所有待 排序的关键字互不相同,计数排序算法针对表中的每个关键字,扫描待排序表一趟,统计表中有多少个 关键字比该关键字小。假设对某一个关键字,统计出数值为c,那么这个关键字在新的有序表中的位置 即为c。1)设计实现计数排序算法。2)对于有n个关键字的表,比较次数是多少?3)与简单选择排序相比,这种方法是否更好?为什么?(2)\t有如下快速排序算法,指出该算法是否正确,若不正确,请说明错误的原因。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image1.png'/>(3)设计一个双向冒泡排序算法,即在排序过程中交替改变扫描方向(4)在堆排序、快速排序和归并排序中:1)若只从存储空间考虑,则应首选哪种排序算法,其次选取哪种排序算法,最后选取哪种排序算法?2)若只从排序结果的稳定性考虑,应选取哪种排序算法?3)若只从平均情况下排序最快考虑,应选取哪种排序算法?4)若只从最坏情况下排序最快并且要节省内存考虑,应选取哪种排序算法?(5)\t给出一组关键字:{29, 18, 25, 47, 58, 12, 51, 10},分别写出按下列各种排序算法进行排 序时的变化过程。1)\t归并排序,每归并一次书写一个次序。2)\t快速排序,每划分一次书写一个次序。3)\t堆排序,先建成一个堆(写出一个序列),然后每从堆顶取下一个关键字后,将堆调整一次(每次都写出一个序列),直到排序完成。(6)\t给出关键字序列{321, 156, 57, 46, 28, 7, 331, 33, 34, 63},釆用最低位优先算法对其进行基数排序,列出每趟分配和收集的结果。(7)给出关键字序列{4, 5, 1, 2, 8, 6, 7, 3, 10, 9}的希尔排序过程,对壬每一个增量写出一次 排序后的序列。(8)给定一组关键字,创建一个带头结点的链表,设计一个直接插入排序算法,对这个单链表进行 递增排序。(9)已知关键字序列为{53, 87, 12, 61, 90, 10, 97, 25, 53, 46},设增量序列为{5, 3, 1},请 画出希尔排序(递增排序)过程的分析图。(10)假设内存缓冲区可容纳4个记录,设有一组记录为10, 20, 15, 25, 12, 13, 21, 30, 8, 16, 10。请建立初始归并段(段内递增排序),列表写出求解过程。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)1)\t本题算法如下<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image6.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image7.png'/>2).对于n个关键字,每个关键字都要与n个关键字(含自身)进行比较,因此比较次数为n2。3)简单选择排序比这种计数排序好,因为对有n个关键字的序列进行简单排序,只需要进行1+2+ 3+-+(n-l)=n(n-l)/2次比较,并且可在原地进行排序(空间复杂度为常量级)。(2)\t这个算法是错误的。与正确的快速排序算法进行比较发现,本算法将原来temp保存划分关键字的值 改为保存划分关键字的下标,由于在后边的比较移动过程中可能改变该temp下标所指位置上的关键字, 造成了 R[i]=R[temp];这句赋值错误,从而引起排序失败。(3)\t分析本算法可以这样进行:先从底向上从无序区冒出一个最小的关键字,再从上向底从无序区冒出一个最大的关键字。双向冒泡排序的算法代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image8.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image9.png'/>(4)1)\t若只从存储空间考虑,则应首选堆排序(0(1)),其次选取快速排序(O(log2n)),最后选取归并排序(O(n))2)若只从排序结果的稳定性来考虑,则应该选取归并排序。3)若只从平均情况下排序最快考虑,则应选取快速排序。说明:从平均情况下来看,在时间复杂度同为O(nlog2ii)的所有算法中,快速排序的基本操作执行 次数是最少的,虽然数量级是一样的,因此它是最快的。4)若只从最坏情况下排序最快并且节省内存来考虑,则应选取堆排序。(5)\t,1)二路归并。第一趟:18,\t29,\t25,\t47,\t12,\t58,\t10,\t51第二趟:18,\t25,\t29,\t47,\t10,\t12,\t51,\t58第三趟:10,\t12,\t18,\t25,\t29,\t47,\t51,\t582)快速排序。\t\"第一趟:10,\t18,\t25,\t12,\t29,\t58,\t51,\t47第二趟:10,\t18,\t25,\t12,\t29,\t47,\t51,\t58第三趟:10,\t12,\t18,\t25,\t29,\t47,\t51,\t583)堆排序。建大堆:58, 47, 51, 29, 18, 12, 25, 10\t排序:①\t51,\t47,\t25,\t29,\t18,\t12,\t10,\t58②\t47,\t29,\t25,\t10,\t18,\t12,\t51,\t58③\t29,\t18,\t25,\t10,\t12,\t47,\t51,\t58④\t25,\t18,\t12,\t10,\t29,\t47,\t51,\t58⑤\t18,\t10,\t12,\t25,\t29,\t47,\t5L\t58⑥\t12,\t10,\t18,\t25,\t29,\t47,\t51,\t58⑦\t10,\t12,\t18,\t25,\t29,\t47,\t51,\t58(6)解将不足3位的关键字前边补0,使各关键字位数相同。原始序列链:321->156->057->046->028->007->331—033->034->063第1趟:分配(按最低位)结果为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image10.png'/>收集‥ 321→331-033-063→舵4-156→046-057-007-028第2趟: 分配(按中间位,依照第1趟中结果)结果为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image11.png'/>收集: 007-321-028→331→033-034→046土56-057-063第3趟: 分配(按最高位,依照第2趟中结果)结果为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image12.png'/>收集:007-028~033-034~046-057-063—156->321~331因此最终排序结果为:7, 28, 33, 34, 46, 57, 63, 156, 321, 331。(7)\t由待排序列知增量序列为5, 2,1.对应于每个增量,排序序列为:增量 d=5: 4,\t5,\t1,\t2,\t8,\t6,\t7,\t3,\t10, 9增量 d=2: 1,\t2,\t4,\t3,\t7,\t5,\t8,\t6,\t10, 9增量 d=l: 1,\t2,\t3,\t4,\t5,\t6,\t7,\t8,\t9, 10(8)\t分析本题的排序思想和对用数组存储的关键字序列进行插入排序的情况一样,只不过是将对数组的操作改为对链表的操作。具体算法如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image13.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image14.png'/>(9)希尔排序过程如图8-29所示<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image15.png'/>(10)初始归并段生成过程见表8-2<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image16.png'/>本题较简单,每次从缓冲区中选出最小且比当前归并段最大的关键字还要大的输出,空出来的位置 读入新的关键字"},{"id":"learncoder_106_22879","stem":"设有6个有序表A、B、C、D、E、F,分别含有10、35、40、50、60和200个关键字,各表中关键字按升序排列。要求通过5次两两合并,将6个表最终合并成1个升序表并在最坏情况下比较的总次 数达到最小,请回答以下问题:(1)给出完整的合并过程,并求出最坏情况下比较的总次数。(2)根据你的合并过程,描述n (n>=2)个不等长升序表的合并策略,并说明理由。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"本题可以采用构造赫夫曼二叉树的方法来解决,这里给出构造赫夫曼二叉树的方法。(1)以每个表的长度为赫夫曼二叉树的叶子结点,可以构造出一棵指示归并顺序的赫夫曼二叉树, 如图8-33所示。\t*根据图8・33中的赫夫曼树,6个序列的合并过程如下。第1次合并:表A与表B合并,生成含45个关键字的表AB。第2次合并:表AB与表C合并,生成含85个关键字的表ABC。第3次合并:表D与表E合并,生成含110个关键字的表DE。第4次合并:表ABC与表DE合并,生成含195个关键字的表ABCDE。第5次合并:表ABCDE与表F合并,生成含395个关键字的最终表。由于合并两个长度分别为m和n的有序表,最坏情况下需要比较m+n-1次,故最坏情况下比较的 总次数计算如下。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image18.png'/>第1次合并:最多比较10+35-1=44次。第2次合并:最多比较45+40-1=84次。第3次合并:最多比较50+60-1=109次。第4次合并:最多比较85+110-1=194次。第5次合并:最多比较195+200-1=394次。综上,比较的总次数最多为825次。(2)各表的合并策略可以描述为:借用赫夫曼树的构造思想,依次选择当前最短的两个归并段进行 合并,这样可以获得最少的总i/o次数。因为赫夫曼二叉树有:最小的带权路径长度,以归并段长度为叶 结点权值的赫夫曼二叉树的带权路径长度值代表了总的I/O次数,同时也是最少的I/O次数。"},{"id":"learncoder_106_22872","stem":"对给定的关键字序列110, 119, 007, 911, 114, 120, 122进行基数排序,则第2趟分配收集后得到的关键字序列是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"基数排序的第1趟排序是按照个位数字来排序的,第2趟排序是按照十位数字的大小进行排 序的。","type":"choice","options":{"B":"007, 110,119,114,911,122,120","D":"110,120,911,122,114,007,119","C":"007,110,911,114,119,\t120,\t122","A":"007,110,119,114,911,120,\t122"},"answer":"C"},{"id":"learncoder_106_22874","stem":"\t下列选项中,不可能是快速排序第2趟排序结果的是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"正确选项序列中不存在至少两个关键字,左边的关键字都小于它,右边的关键字都大于它,因 此不可能是快速排序第二趟的排序结果","type":"choice","options":{"C":"3, 2, 5, 4, 7, 6, 9","A":"2,,3, 5, 4, 6, 7, 9","D":"4, 2, 3, 5, 7, 6, 9","B":"2, 7, 5, 6, 4, 3, 9"},"answer":"C"},{"id":"learncoder_106_22871","stem":"对同一待排序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是(\t()。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"排序的总趟数","C":"使用辅助空间的数量","D":"关键字之间的比较次数","B":"关键字的移动次数"},"answer":"D"},{"id":"learncoder_106_22870","stem":"排序过程中,对尚未确定最终位置的所有关键字进行一遍处理称为一趟排序。下列排序算法中, 每一趟排序结束时都至少能够确定一个关键字最终位置的方法是(\t)I.简单选择排序\tII.希尔排序\tiiL快速排序IV.堆排序\tV.归并排序","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"仅iii、iv、v","C":"仅 ii、iii、iv","A":"仅 I、iii、IV","B":"仅 I、iii、V"},"answer":"A"},{"id":"learncoder_106_22873","stem":"\t用希尔排序算法对一个关键字序列进行排序时,若第一趟排序结果为9, 1, 4, 13, 7, 8, 20,23, 15,则该趟排序采用的增量可能是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"按照希尔排序规则","type":"choice","options":{"C":"4","B":"3","D":"5","A":"2"},"answer":"B"},{"id":"learncoder_106_22869","stem":"已知序列25,. 13, 10, 12, 9是大根堆,在序列尾部插入新关键字18,将其再调整为大根堆, 调整过程中关键字之间进行的比较次数是(\t)次。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"在序列尾部插入18后,当前堆如图8.31所示。可见10<18 (第一次比较),需要调整,因此交换10和18,得\t到如图8.32所示的堆。可见18<25 (第二次比较),不需要再次调整,因此只需要调整\t两次。、<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image5.png'/>","type":"choice","options":{"A":"1","B":"2","C":"4","D":"5"},"answer":"B"},{"id":"learncoder_106_22863","stem":"\t归并排序有两个基本阶段,第一个阶段是(\t)","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"进行多遍归并","B":"从归并序列选出最小值(最大值)","C":"将记录读入内存","A":"生成初始归并段"},"answer":"A"},{"id":"learncoder_106_22865","stem":"若关键字序列11, 12, 13, 7, 8, 9, 23, 4, 5是采用下列排序算法之一得到的第二趟排序后的结果,则该排序算法只能是(\t)","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"若是起泡排序或者选择排序,则第二趟后应有两个最大或者最小的关键字正确排列,而结果 不符。二路归并排序第二趟后,应形成两个长度为4的有序子序列,结果也不符合。所以答案只能是插 入排序。两次插入后,前3个数字的顺序是对的","type":"choice","options":{"B":"插入排序","A":"起泡排序","D":"归并排序","C":"选择排序"},"answer":"B"},{"id":"learncoder_106_22868","stem":"为实现快速排序算法,待排序序列宜釆用的存储方式是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"快速排序采用顺序结构存储","type":"choice","options":{"B":"散列存储","A":"顺序存储","D":"索引存储","C":"链式存储"},"answer":"A"},{"id":"learncoder_106_22864","stem":"已知关键序列5, 8, 12, 19, 28, 20, 15, 22是小根堆(最小堆),插入关键字3,调整后得到 的小根堆是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"如图<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image3.png'/>","type":"choice","options":{"C":"3, 8, 12, 5, 20, 15, 22, 28, 19","A":"3, 5, 12, 8, 28, 20, 15, 22, 19","D":"3, 12, 5, 8, 28, 20, 15, 22, 19","B":"3, 5, 12, 19, 20, 15, 22, 8, 28"},"answer":"A"},{"id":"learncoder_106_22867","stem":"对一组关键字(2, 12, 16, 88, 5, 10)进行排序,若前三趟排序结果如下:第一趟:2, 12, 16, 5, 10, 88第二趟:2, 12, 5, 10, 16, 88第三趟:2, 5, 10, 12, 16, 88则采用的排序算法可能是(\t)","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"本题考查起泡排序算法的执行过程","type":"choice","options":{"D":"基数排序","C":"归并排序","A":"起泡排序","B":"希尔排序"},"answer":"A"},{"id":"learncoder_106_22866","stem":"采用递归方式对顺序表进行快速排序。下列关于递归次数的叙述中,正确的是(\t)","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"快速排序的效率与初始序列有关这是显然的快速排序的算法可以简写为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image4.png'/>快速排序的递归次数由low和high决定(low和high决定了要处理问题的规模)。将快速排序的递归次数设为F(low,high),则按照上述代码中①、 ②句的执行次序有: 递归次数F(low,high)=F(low,i-11 )+F(i+1,high) ③如果将①、 ②句颠倒,则有:递归次数F(low,high)=F(i+1 ,high)+F(low十1 ) ④ 显然式③和式④是相等的,因此递归次数与每次划分后得到的分区处理顺序无关","type":"choice","options":{"A":"递归次数与初始关键字的排列次数无关","B":"每次划分后,先处理较长的分区可以减少递归次数","D":"递归次数与每次划分后得到的分区的处理顺序无关","C":"每次划分后,先处理较短的分区可以减少递归次数"},"answer":"D"},{"id":"learncoder_106_22859","stem":"\t归并排序中归并的趟数为()","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"归并排序中 排序趟数为log2n","type":"choice","options":{"A":"n","B":"[log2n]","C":"nlog2n","D":"n^2"},"answer":"B"},{"id":"learncoder_106_22856","stem":"\t以下算法中,(\t)算法在关键字基本有序的时候效率最高。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"堆排序和简单选择排序的时间复杂度都与初始序列无关。而快 速排序在序列有序的情况下退化成起泡排序,即序列越接近有序,快速排序越慢","type":"choice","options":{"C":"堆排序","A":"快速排序","B":"冒泡排序","D":"简单选择排序"},"answer":"B"},{"id":"learncoder_106_22855","stem":"\t有一组关键字{15, 9, 7, 8, 20, -1, 7, 4},对其进行建堆,则初始堆为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"由题目选项观察,应该是建立小顶堆,根据小顶堆的定义进行建堆","type":"choice","options":{"A":"{-1, 4, 8, 9, 20, 7, 15, 7}","D":"以上都不是","C":"{-1, 4, 7, 8, 20, 15, 7, 9}","B":"{-1, 7, 15, 7, 4, 8, 20, 9}"},"answer":"C"},{"id":"learncoder_106_22858","stem":"下列排序算法中,辅助空间为O(n)的是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"堆排序","A":"希尔排序","D":"归并排序","B":"冒泡排序"},"answer":"D"},{"id":"learncoder_106_22857","stem":"\t对关键字序列{28, 16, 32, 12, 60, 2, 5, 72}进行递增快速排序,第一趟划分的结果为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"根据划分方法进行一趟排序","type":"choice","options":{"C":"{2, 16, 12, 5}28{60, 32, 72}","D":"{5, 16, 2, 12}28{32, 60, 72}","A":"{2, 5, 12, 16}28{60, 32, 72}","B":"{5, 16, 2, 12}28{60, 32, 72}"},"answer":"B"},{"id":"learncoder_106_22862","stem":"\t文件有m个初始归并段,采用k路归并时,所需的归并趟数是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"本题考査归并排序时间复杂度相关问题","type":"choice","options":{"B":"log2m","A":"log2k","C":"logkm","D":"「logkm]"},"answer":"D"},{"id":"learncoder_106_22861","stem":"\t外排序是指( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"CPU不能直接操作外存","type":"choice","options":{"D":"排序前后记录在外存,排序时记录调入内存的排序算法","A":"在外存上进行的排序算法","C":"数据量大,需要人工干预的排序算法","B":"不需要使用内存的排序算法"},"answer":"D"},{"id":"learncoder_106_22860","stem":"\t以下排序算法中,(\t)不需要进行关键字的比较。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"基数排序","A":"快速排序","D":"堆排序","B":"归并排序"},"answer":"C"},{"id":"learncoder_106_22849","stem":"\t不稳定的排序算法是()。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"归并排序","A":"冒泡排序\tB直接插入排序","C":"希尔排序"},"answer":"C"},{"id":"learncoder_106_22852","stem":"\t采用简单选择排序,比较次数与交换次数满足()","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"本题考查简单选择排序的时间复杂度。简单选择排序算法,如果每趟挑出的最小关键字不 是在待排序列第一的位置上,则对每个关键字都需要进行交换一次,关键字个数为m交换次数也是n, 因此交换次数满足0(n);每交换一次之前,査找无序序列中的最小关键字所需的比较次数满足0(n),有 n个关键字,则总的比较次数满足nxO(n),即O(n^2)。","type":"choice","options":{"C":"O(n^2), O(n)","B":"O(log2n), O(n^2)","D":"O(nlog2n), O(n)","A":"O(n), O(log2n)"},"answer":"C"},{"id":"learncoder_106_22851","stem":"\t在以下排序算法中,关键字比较的次数与初始排列次序无关的是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"起泡排序","D":"简单选择排序","A":"希尔排序","C":"插入排序"},"answer":"D"},{"id":"learncoder_106_22848","stem":"\t用直接插入排序对下面4个序列进行递增排序,关键字比较次数最少的是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"对于直接插入排序,原始序列越接近有序,则比较次数越少","type":"choice","options":{"B":"32,40,\t21,\t46,\t69,\t94,\t90,\t80","A":"94,32,\t40,\t90,\t80,\t46,\t21,\t69","C":"21,32,\t46,\t40,\t80,\t69,\t90,\t94","D":"90, 69, 80, 46, 21, 32, 94, 40"},"answer":"C"},{"id":"learncoder_106_22854","stem":"对n个关键字进行堆排序,最坏情况下的时间复杂度为(\t)","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"堆排序算法每次调整堆,相当于从一棵完全二叉树的 根走到叶子结点的过程,时间复杂度为0(log2n),初始建堆需要n次调整,每趟排序需要一次调整,有n 趟排序,因此基本操作的执行次数为2nxO(log2n),即时间复杂度为O(nlog2n)。初始序列如何,对排序 过程都没有影响,因此任何情况下堆排序的时间复杂度都是O(nlog2n)","type":"choice","options":{"C":"O(nlog2n)","D":"0(n^2)","A":"O(log2n)","B":"O(n)"},"answer":"C"},{"id":"learncoder_106_22853","stem":"\t以下序列不是堆的是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"假设序列存在数组a[]中,序列首关键字存在a[1]上,如果是大顶堆, 则满足a[i]>a[2*i]且a[i]>a[2*i+l];如果是小顶堆,则满足a[i]<a[2*i]且a[i]<a[2*i+l]","type":"choice","options":{"B":"{100, 98, 85, 82, 80, 77, 66, 60, 40, 20, 10}","D":"{100, 85, 40, 77, 80, 60, 66, 98, 82, 10, 20}","A":"{100, 85, 98, 77, 80, 60, 82, 40, 20, 10, 66}","C":"{10, 20, 40, 60, 66, 77, 80, 82, 85, 98, 100}"},"answer":"D"},{"id":"learncoder_106_22850","stem":"\t以下排序算法中,()不能保证每趟排序至少能将一个关键字放在其最终位置上。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"快速排序,每趟排序后将当前子序列划分为画部分的那个关键字(“枢轴”)到达了其最终位置.堆排序,每趟排序后,当前待排序列中的最大或者最小关键字到达其最终位置冒泡排序,每趟排序后,当前待排序列中的最大或者最小关键字到达其最终位置尔排序是直接插入排序的改进,每趟排序后不能保证一定有关键字到达最终位置","type":"choice","options":{"D":"冒泡排序","A":"快速排序","C":"堆排序","B":"希尔排序"},"answer":"B"},{"id":"learncoder_106_22843","stem":"\t关键字序列{8, 9, 10, 4, 5, 6, 20, 1, 2}只能是(\t)算法中两趟排序后的结果。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"已知排序结果求排序算法,没有告诉初始序列,只告诉排序结果,根据排序原理即可解答。还是采用代入选项的方法。简单选择排序,两趟后应该选出两个最小的在最前面,或者两个最大的在最后面,观察序列发现不符合。冒泡排序,两趟后应该有最大的两个数沉底,或者最小的两个数上浮,观察序列发现不符合。直接插入排序,两趟后插入两个数,那 么前三个数应该是有序的,观察序列发现符合,堆排序,和简单选择排序一样,两趟后 应该选出两个最大或最小的数,序列也不符合","type":"choice","options":{"A":"简单选择排序","B":"冒泡排序","D":"堆排序","C":"直接插入排序"},"answer":"C"},{"id":"learncoder_106_22840","stem":"下面给出的4种排序算法中,排序过程中的比较次数与初始序列无关的是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"比较次数与序列原始状态无关的是简单选择排序,因为无论序列初始 状态如何,每趟排序选择最小值(或最大值)时,都要顺序扫描序列,依次用当前最小值和序列中的当前关键字进行比较","type":"choice","options":{"A":"简单选择排序","D":"冒泡排序","B":"直接插入排序","C":"快速排序"},"answer":"A"},{"id":"learncoder_106_22846","stem":"直接插入排序在最好的情况下的时间复杂度为(\t)","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"当序列已经有序时,直接插入排序的时间复杂度为O(n)","type":"choice","options":{"A":"O(n)","B":"O(nlog2n)","C":"O(log2n)","D":"O(n^2)"},"answer":"A"},{"id":"learncoder_106_22845","stem":"\t下列4个序列中,(\t)是堆。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"题目中4个选项所表示的完全二叉树如图8-28所示,由图可知选项C,满足堆的定义。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/data_structure2020/2020数据结构(第8章)/image2.png'/>","type":"choice","options":{"C":"{75,45,\t65,\t30,\t15,\t25,\t20,10}","A":"{75, 65, 30, 15, 25, 45, 20, 10}","B":"{75,65,\t45,\t10,\t30,\t25,\t20,15}","D":"{75,45,\t65,\t10,\t25,\t30,\t20,15}"},"answer":"C"},{"id":"learncoder_106_22842","stem":"\t有一组关键字{46, 79, 56, 38, 40, 84}利用快速排序,以第一个关键字为基准得到的一次划 分结果为( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"根据快速排序的执行过程,可以选出答案为C。这类题是已知排序算法求排序结果","type":"choice","options":{"B":"{40, 38, 46, 79, 56, 84}","A":"{38, 40, 46, 56, 79, 84}","D":"{40, 38, 46, 84, 56, 79}","C":"{40, 38, 46, 56, 79, 84}"},"answer":"C"},{"id":"learncoder_106_22841","stem":"\t对一组关键字{84, 47, 25, 15, 21}排序,关键字的排列次序在排序过程中的变化为:(1) {84, 47, 25, 15, 21}\t(2) {15, 47, 25, 84, 21}(3) {15, 21, 25, 84, 47}\t(4) {15, 21, 25, 47, 84}则采用的排序是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"这类题是已知排序结果求排序算法,可以釆用两种方法:一种是直接 观察序列,另一种是将序列用每个选项的排序算法执行,看哪个选项符合。第二种方法较好°因为有时 候直接观察是困难的,当然若能直接观察出来更好,这样更快","type":"choice","options":{"A":"简单选择排序","D":"直接插入排序","C":"快速排序","B":"冒泡排序"},"answer":"A"},{"id":"learncoder_106_22847","stem":"\t对于关键字序列{15, 9, 7, 8, 20, -1, 4}进行排序,进行一趟后关键字序列变为{9, 15, 7, 8, 20, -1, 4},则釆用的是( )算法。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"","type":"choice","options":{"A":"简单选择排序","D":"堆排序","B":"冒泡排序","C":"直接插入排序"},"answer":"C"},{"id":"learncoder_106_22844","stem":"\t下列序列中,( )是执行第一趟快速排序后所得的序列。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"快速排序第一趟结束后,整个序列会出现以下特点:在序列中 一定存在这样一个关键字a,比a大的关键字与比a小的关键字分别出现在a的两边","type":"choice","options":{"D":"{68, 11,69,\t23,\t18,\t73,\t93}","A":"{68, 11, 18,\t69,\t23,\t93,\t73}","B":"{68, 11,\t69,\t23,\t18,\t93,\t73}","C":"{93, 73, 68,\t11,\t69,\t23,\t18}"},"answer":"C"},{"id":"learncoder_106_22833","stem":"若要求尽可能快地对序列进行稳定的排序,应该选择( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"快速排序","B":"归并排序","C":"冒泡排序","D":"堆排序"},"answer":"B"},{"id":"learncoder_106_22832","stem":"下列排序算法中,平均时间复杂度为O(nlog2n)的有( )I .冒泡排序 II .快速排序\tiii.堆排序 \tIV.简单选择排序","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"I 和Ⅱ","B":"II和III","C":"III和iv","D":"Iv和 I"},"answer":"B"},{"id":"learncoder_106_22839","stem":"排序趟数与序列的原始状态有关的排序算法是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"交换类的排序,其趟数和原始序列状态有关,故选C。顺便分析一下其 他选项。直接插入排序,每趟排序都是插入一个关键字,所以排序趟数固定为n-1 (n为关键 字数);简单选择排序,每趟排序都是选出一个最小(或最大)的关键字,所以排序趟数固定 为n-1(n为关键字数);基数排序,每趟排序都要进行“分配”和“收集”,排序趟数固定为d d为关键字位数)","type":"choice","options":{"B":"简单选择排序","D":"基数排序","A":"直接插入排序","C":"冒泡排序"},"answer":"C"},{"id":"learncoder_106_22836","stem":"\t如果只想得到1000个关键字组成的序列中第5个最小关键字之前的部分排序的序列,用(\t)最快。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"题意是从1000个关键字中选出前5个最小的,应该用堆排序","type":"choice","options":{"B":"快速排序","A":"起泡排序","D":"堆排序","C":"希尔排序"},"answer":"D"},{"id":"learncoder_106_22835","stem":"对一个初始状态为递增的序列进行按递增顺序的排序,用(\t)最省时,用(\t)最费时。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"题意是原始序列已经有序,那么直接插入排序是最好的,快速排序达到最坏情框","type":"choice","options":{"D":"归并排序","B":"堆排序","A":"直接插入排序","C":"快速排序"},"answer":"A"},{"id":"learncoder_106_22838","stem":"下列排序算法中,(\t)可能出现这种情况:在最后一趟开始前,所有关键字都不在其最终位置上。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"直接插入排序和折半插入排序可能出现这种情况:例如,直接插入和折 半插入都是在一个已经有序的序列中插入一个新的关键字,那么最后一趟排序前的序列可能是2, 3, 4,5, 1,和最终有序的序列1, 2, 3, 4, 5相比较,每个关键字都不在其最终的位置上","type":"choice","options":{"D":"折半插入排序","A":"堆排序","C":"快速排序","B":"冒泡排序"},"answer":"D"},{"id":"learncoder_106_22837","stem":"下列排序算法中,(\t)在一趟排序结束后不一定能选出一个关键字放在其最终位置上。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"交换类和选择类的排序每趟结束都有一个关键字到位","type":"choice","options":{"A":"简单选择排序","C":"归并排序","D":"堆排序","B":"冒泡排序"},"answer":"C"},{"id":"learncoder_106_22834","stem":"在下面的排序算法中,辅助空间为O(n)的是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"基数排序形式的空间复杂度是O(rd), O(d(n+rd))是时间复杂度","type":"choice","options":{"D":"归并排序","A":"直接插入排序","B":"堆排序","C":"快速排序"},"answer":"D"},{"id":"learncoder_106_22831","stem":"下列排序算法中,(\t)是稳定的。I 直接插入排序\tII 快速排序III堆排序 \t IV归并排序","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"快” “堆”不稳定, ","type":"choice","options":{"B":"II和III","A":"I和II","C":"III和iv","D":"I 和iv"},"answer":"D"},{"id":"learncoder_106_19804","stem":"已知关键字序列(K1,K2...,Kn-1)是大根堆。试写出一算法将((K1,K2...,Kn-1,Kn)调整为大根堆;并利用调整算法写一个建大根堆的算法。\t,\t,","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是堆的插入算法。从第几个记录开始依次与其双亲(n/2)比较, 若大于双亲则交换,继而与其双亲的双亲比较,以此类推直到根为止。","type":"short_answer","answer":"\tvoid sift( RecType R[ ] ,int n){ //把R[n]调成大堆\tj = n; R[0] =R[j] ;\tfor (i = n/2;i> = 1 ;i=i/2)\tif ( R[0].key>R[i].key)\t{ R[j] =R[i];j=i; }\telse break ;R[j] =R[0];} //sift\t\tvoid HeapBuilder( RecType R[ ] ,int n)\t{ for (i = 2;i< = n;i++)\tsift (R,i);}"},{"id":"learncoder_106_19805","stem":"一个最小最大堆(min max Heap)•是一种特定的堆,其最小层和最大层交替出现,根总是 处于最小层。最小最大堆中的任一结点的关键字值总是在以它为根的子树中的所有元素中最小 (或最大)。如图所示为一最小最大堆。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第6章/image1.png'/>(1)画出在图中插入关键字为5的结点后的最小最大堆。(2)画出在图中插入关键字为80的结点后的最小最大堆。\t\\\t.(3)编写一算法实现最小最大堆的插入功能。假定最小最大堆存放在数组中,关键字为整数。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是堆的算法。将插入的元素放到最后,然后调整,方法同第13 题。\t(1)加入关键字5的结点后,最小最大堆如下图。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第6章/image6.png'/>(2)加入关键字80的结点后,最小最大堆如下图。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第6章/image7.png'/>(3)从插入位置进行调整,调整过程由下到上。首先根据元素个数求出插入元素所在层次 数,以确定其插入层是最大层还是最小层。若插入元素在最大层,则先比较插入元素是否比双亲 小,如是,则先交换,之后,将小堆与祖先调堆,直到满足小堆定义或到达根结点;若插入元素不小 于双亲,则调大堆,直到满足大堆定义。若插入结点在最小层,则先比较插入元素是否比双亲大, 如是,则先交换,之后,将大堆与祖先调堆;若插入结点在最小层且小于双亲,则将小堆与祖先调堆,直到满足小堆定义或到达根结点。","type":"short_answer","answer":"void MinMaxHeapIns( RecType R[ ] ,int n)\t{ //假设是最小最大堆,插入第n个元素,把调成最小最大堆j = n; R[0]=R[j];\th = logn+l ;//求高度\tif (h%2= =0)//插入元素在偶数层,是最大层 {i = n/2;\tif(R[ 0 ]・key 《<R[ i]. key ) //插入元素小于双亲,先与双亲交换,然后调小堆{R[j]=R[i];\tj = i/4;\twhile (j>0 && R[j]>R[i])//调小堆{R[i]=R[j] ; i=j; j = i/4; }\tR[i]=R[0];\t} else//插入元素大于双亲,调大堆:\t)i = n; j=i/4;\twhile (j>0 && R[j]<R【[i]】){R[i]=R[j]; i=j; j = i/4; }\tR[i]=R[0]; } }else//插入元素在奇数层,是最小层{i = n/2;\tif (R[0].key>R[i].key)//插入元素大于双亲,先与双亲交换,然后调大,堆 {R[j]=R[i];j =i/4;while (j>0 && R[j]<R[i])//调大堆{R[i]=R[j] ; i=j; j = i/4; }\tR[i]=R[0];}else//插入元素小于双亲,调小堆{i = n; j = i/4;while (j>0 && R[j]>R[i]){R[i] =R[j] ; i=j; j = i/4; }R[i]=R[0];}}}//MinMaxHeaglns \t\t"},{"id":"learncoder_106_19802","stem":"某个待排序的序列是一个可变长度的字符串序列,这些字符串一个接一个地存储于唯 一的字符数组中。请改写快速排序算法,对这个字符串序列进行排序。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是快速排序的思想。\t","type":"short_answer","answer":"\tPartition(RecType R[ ] ,int l,int h)//一趟快速排序算法,枢轴记录到位,并返回其所在位置{ int i = 1; j = h; R[0]=R[i];x = R[i].key;while (i<j){ while(i<j && R[ j] . key> = x) j--;if (i<j) R[i]=R[j];while(i<j && R[ i]. key<=x)i++;if (i<j) R[j]=R[i];} //while\tR[i]=R[0];\treturn i;} //Partition"},{"id":"learncoder_106_19806","stem":"输入N个只含一位数字的整数,试用基数排序的方法,对这N个数排序。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是基数排序。基数排序法又称“桶子法”(BuckefSort),它是透过 键值的部分信息,将要排序的元素分配至某些“桶”中,达到排序的目的,基数排序法是属于稳定 性的排序,其时间复杂度为O(d*n),其中d为所采取的基数,而n为关键字数。本题是基数排 序的特殊情况,关键字只含一位数字的整数。若关键字含d位,则要进行d趟分配和d趟收集。 关键字最好放入字符数组,以便取关键字的某位。","type":"short_answer","answer":"typedef struct{ int key;int next ;\t} SLRecType ;SLRecType R[N+1];typedef struct{ int f, e;\t} SLQueue ;\tSLQueue B[10];int Radixsort ( SLRecType R[ ] ,int n)、、//设各关键字已输入到R数组中\t{ for (i = 1 ;i<n;i++) R[i].next = i+l ;R[n].next = -l; p = l;//-l表示静态链表结束\tfor (i = 0;i< = 9;i++)\t{\tB[i].e = -l;}//设置队头队尾指针初值\twhile (p! = -l)//一趟分配{k = R[p]. key;//取关键字if(B[k].f= = -l)B[k].f=p; //修改队头指针else R[B[k].e]. next = p;B[k]. e = p;p = R[p] . next;//下一记录}\ti = 0;// 一趟收集while (B[i] . f= = -1) i++;t = B[i].e; p = B[i]f;\twhile (i<9)\t {i++;\tif (B[i].f!= -l)\t{ R[t] . next = B[i].f; t=B[i].e;} }\tR[t].next = -l;\treturn p;//返回第一个记录指针\t\t"},{"id":"learncoder_106_19803","stem":"设有一个数组中存放了一个无序的关键序列K1,K2...,Kn现要求将Kn放在将元素排 序后的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过n","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是快速排序的思想。以Kn为枢轴的一趟快速排序。将第11题 算法改为以最后一个为枢轴先从前向后再从后向前。","type":"short_answer","answer":",int Partition(RecType K[ ] ,int 1 ,int n)\t\t{ //交换记录子序列K[l.....n]中的记录,使枢轴记录到位,并返回其所在位置\t//此时,在它之前(后)的记录均不大(小)于它int i=l ; j = n; K[0] ==K[j] ; x=K[j].key;\twhile (i<j)\t\t{ while(i<j && K[i] ; key[j] <= x)i++;if(i<j) K[j]=K[i];\twhile(i<j && K[ j] . key>=x) j--;if (i<j) K[i]=K[j];\t(//whileK [i]=K[0] ; return i;\t} //Partition"},{"id":"learncoder_106_19794","stem":"对一个由n个关键字不同的记录构成的序列,能否用比2n-3少的次数选出该序列中关 键字取最大值和关键字取最小值的记录?请说明如何实现?在最坏的情况下至少进行多少次<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第6章/header1.xml'/>比较?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是排序的效率。","type":"short_answer","answer":"将几个元素对称比较,即第一个元素与最后一个元素比较,第二个元素与倒数第二个元素比较……比较中的小者放前半部,大者放后半部,用了 n/2次比较。再在前后两部分中 分别简单选择最小和最大元素,各用5/2)-1次比较。总共用了(3n/2)-2次比较。显然,当 n>=3 时,(2n-a)>(3n/2)-2.\t用分治法求解再给出另一参考答案。对于两个数%和y,经一次比较可得到最犬值和最小值;对于三个数x,y,z,最多经中次比较 可得最大值和最小值;对于n个数(n>3),将分成长为n-2和2的前后两部分A和B分别找岀 最大者和最小者:Max A、Min A、Max B、Min B,最后 Max= { Max 4, Max B J 和 Min = { Min A, Min B} .对A使用同样的方法求出最大值和最小值,直到元素个数不超过3。\t设C(n)是所需的最多比较次数,根据上述原则,当n>3时有如下关系式:\t<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第6章/image4.png'/>通过逐步递推,可以得到:C(n)= (3n/2)-2.显然,当“>3时,2n-3 > ( 3n/2)-2.事实上, (3n/2) -2是解决这一问题的比较次数的下限。"},{"id":"learncoder_106_19795","stem":"利用比较的方法进行排序,在最坏的情况下,能达到的最好时间复杂性是什么?请给出详细证明。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是基于比较的排序算法效率。","type":"short_answer","answer":"假定待排序的记录有n个。由于含〃个记录的序列可能出现的状态有n!个,则 描述n个记录排序过程的判定树必须有n!个叶子结点。因为若少一个叶子,则说明尚有两种 状态没有分辨出来。我们知道,若二叉树高度是加则叶子结点个数最多为2h-1;反之,若有u 个叶子结点,则二叉树的高度至少为(log2u)+l.这就是说,描述n个记录排序的判定树必定存 在一条长度为log2(n!)的路径。即任何一个借助“比较”进行排序的算法,在最坏情况下所需进 行的比较次数至少是log2(n!).根据斯特林公式,有log2(n!)=0(nlog2n).即借助于“比较”进 行排序的算法在最坏情况下能达到的最好时间复杂度为O(n1og2n)."},{"id":"learncoder_106_19792","stem":"在执行某种排序算法的过程中出现了排序码朝着最终排序序列相反的方向移动,从而认 为该排序算法是不稳定的,这种说法对吗?为什么?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是排序的稳定性。","type":"short_answer","answer":"这种说法不对。因为排序的不稳定性是指两个关键字值相同的元素的相对次序 在排序前、后发生了变化,而题中叙述和排序中稳定性的定义无关,所以此说法不对。对4,3,2, 1起泡排序就可否定本题结论。"},{"id":"learncoder_106_19796","stem":"设LS是一个线性表,LS=(a1,a2,...,an)若采用顺序存储结构,则在等概率的前提下, 插入一个元素需要平均移动的元素个数是多少?若元素插在ai与ai+1之间(0<=i<=n-1)的概率 为(n-1)/(n(n+1)/2)人则插人一个元素需要平均移动的元素个数文是多少?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是顺序查找的效率。\t","type":"short_answer","answer":"\t等概率(后插),插入位置0...n,则平均移动个数为n/2。・不等概率,平均移动个数 工 5-亍)/55+1)/2)“7)二(2兀+1)/3i = 0"},{"id":"learncoder_106_19793","stem":"设有5个互不相同的元素a,b,c,d,e,能否通过7次比较就将其排好序?如果能,请列出 其比较过程;如果不能,则说明原因。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是排序的效率。","type":"short_answer","answer":"可以做到。取a与b进行比较,c与d进行比较。设a>b,c>d(a<b和c<d情况类 似),此时需2次比较,取b和d比较,若b>d,则有序a>b>d;若b<d时则有序c>d>b,此时已进行 了3次比较。再把另外两个元素按折半插入排序方法,插入到上述某个序列中共需4次比较,从 而共需7次比较。"},{"id":"learncoder_106_19797","stem":"对于n个元素组成的线性表进行快速排序时,所需进行的比较次数与这n个元素的初始排序有关。问:(1)当n=7时,在最好情况下需进行多少次比较?请说明理由。(2)当n=7时,给出一个最好情况的初始排序的实例。(3)当n=7时,在最坏情况下需进行多少次比较?请说明理由。=(4)当n=7时,给出一个最坏情况的初始排序的实例。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是快速排序的思想。它的基本思想是:通过一趟排序将要排序的 数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按 此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成 有序序列。\t、","type":"short_answer","answer":".(1)在最好情况下,假设每次划分能得到两个长度相等的子文件,文件的长度n = 2&-l,那 么第一遍划分得到两个长度均为L〃2」的子文件,第二遍划分得到4个长度均为L“/4」的子文 件,以此类推,总共进行* = log2(n+l)遍划分,各子文件的长度均为1,排序完毕。当n = 7时/= 3,在最好情况下,第一遍需比较6次,第二遍分别对两个子文件(长度均为3,* = 2)进行排序,各 需2次,共10次即可。(2)在最好情况下快速排序的原始序列实例1,3,2,6,5,7。(3)在最坏情况下,若每次用来划分的记录的关键字具有最大值(或最小值),那么只能得 到左(或右)子文件,其长度比原长度少1。因此,若原文件中的记录按关键字递减次序排列,而 要求排序后按递增次序排列时,快速排序的效率与冒泡排序相同,其时间复杂度为0(』)。所以 当兀=7时,最坏情况下的比较次数为21次。(4)在最坏情况下快速排序的初,始序列实例,6,5,4,3,2,1,要求按递增排序。"},{"id":"learncoder_106_19801","stem":"有一种简单的排序算法,叫做计数排序(Gountsorting) o这种排序算法对一个待排序的 表(用数组表示)进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待 排序的关键字互不相同,计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有 多少个记录的关键字比该记录的关键字小,假设针对某一个记录,统计出的计数值为c那么,这 个记录在新的有序表中的合适的存放位置即为c。设计实现计数排序的算法;对于有n个记录的表,关键字比较次数是多少?简单选择排序相 比较,这种方法是否更好?为什么?\t'","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是计数排序思想。因题目要求“针对表中的每个记录,扫描待排 序的表一趟”,所以比较次数是n2次。若限制“对任意两个记录之间应该只进行一次比较\",则可 把以上算法中的比较语句改为:\tfor(i = O;i<n;i++) a[i].count = 0;//各元素再增加一个计数域,初始化为0for(i = 0 ;i<n;i++)>for(j=i+l ;j<n;j++)\tif( a[ i]. key<a[ j] . key) a[ j] count++; else a[i] . count++;","type":"short_answer","answer":"typedef struct{ int key;datatype info\t} RecType\tvoid CountSort ( RecType a[ ] ,b[ ] ,int n) //计数排序算法,将a中记录排序放入b中{ for ( i = 0; i<n; i++) //对每一个元素{ for ( j = 0,cnt = 0 ; j<n ; j++)\tif(a[j].keyva[i]・ key) cnt++; //统计关键字比它小的元素个数b[cnt] =a[i];\t\t}\t\t} // Count_Sort\t对于有n个记录的表,关键字比较n2次。简单选择排序算法比本算法好。简单选择排序比较次数是n(n-l)/-2,且只用一个交换记录的空间;而这种方法比较次数是n2,且需要另一数组空间。"},{"id":"learncoder_106_19798","stem":"关于堆的一些问题:-(1)堆的吞储表示是顺序的,还是链接的?(2)设有一个最小堆,即堆中任意结点的关键字均大于它的左孩子和右孩子的关键字。其具有最大值的元素可能在什么地方?\t、(3)对n个元素进行初始建堆的过程中,最多做多少次数据比较(不用大Q表示法)?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是快速排序的思想。它的基本思想是:通过一趟排序将要排序的 数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按 此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成 有序序列。(1)堆的存储是顺序的。(2)最大值元素一定是叶子结点,在最下两层上。(3)在建含有比个元素、深度为h的堆时,其比较次数不超过4n推导如下:由于第i层上的结点数至多是2i-1,以它为根的二叉树的深度为h-i+1,则调用[n/2]次筛选 算法时总共进行的关键字比较次数不超过下式之值:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第6章/image5.png'/>由于第i层上的结点数至多是2f-1,以它为根的二叉树的深度为A-i+1,则调用L\"2」次筛选 算法时总共进行的关键字比较次数不超过下式之值:此题考查的知识点是堆的基本定义及效率。堆定义为卩个关键字序列K1,K2,…, Kn,当且仅当该序列满足如下性质(简称为堆性质):(1)k<=K2i且ki<=K2i+1如或(2) Ki>=K2i且ki>=k2i+1(1<=i<n)。ki相当于二叉树的非叶结点, k2i则是左孩子,k2i+1是右孩子。","type":"short_answer","answer":"(1)堆的存储是顺序的。(2)最大值元素一定是叶子结点,在最下两层上。(3)在建含有比个元素、深度为h的堆时,其比较次数不超过4®推导如下:"},{"id":"learncoder_106_19799","stem":"若有n个元素已构成一个小根堆,那么如果增加一个元素为kn+1,请用文字简要说明如何在log2n的时间内将其重新调整为一个堆。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是堆的调整方法","type":"short_answer","answer":"\tKi~Kn是堆,在Kn+l加入后,将K....Kn+1调成堆。设c = n+l ,f=[c/2],若Kf<=kc则调整 完成。否则,kf与kc交换之后,c=f,f=[c/2],继续比较,直到kf<=kc,或/=0,即为根结点,调整 结束。\t"},{"id":"learncoder_106_19800","stem":"冒泡排序方法是把大的元素向上移(气泡的上浮),也可以把小的元素向下移(气泡的下沉)请给出上浮和下沉过程交替的冒泡排序算法。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是双向冒泡算法。题目中“向上移”理解为向序列的右端,而“向 下移”按向序列的左端来处理。\t","type":"short_answer","answer":"void BubbleSort2(int a[ ] ,int n) //相邻两趟向相反方向起泡的冒泡排序算法{ change = l ;low = 0;high=n-l; //冒泡的上下界\twhile (low<high && change )\t{ change = 0;//交换标志\tfor(i = low ; i < high ; i++)//从上向下起泡\tif(a[i] >a[i+i ] ) { a[i]<-->a[i+l] ; change =1 ;}//有交换,修改标志 changehigh― ; //修改上界\tfor( i = high ; i>low ; i—) //从下向上起泡if(a[i] <a[i-l] ) (a[i]<-->a[i-l] ;change = l ;(\tlow++; //修改下界} //while\t}//BubbleSort2"},{"id":"learncoder_106_19788","stem":"有一组数据(15,9,7,8,20,-1,7,4),用堆排序的筛选方法建立的初始堆为(\t)。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是堆排序。参见第17题,应选C。","type":"choice","options":{"D":"A、B、C 均不对。","A":"-1,4,8,9,20,7,15,7","C":"-1,4,7,8,20,15,7,9","B":"-1,7,15,7,4,8,20,9"},"answer":"C"},{"id":"learncoder_106_19785","stem":"已知待排序的n个元素可分为n/k个组,每个组包含k个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界 应为()。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是分块排序的思想。因组与组之间已有序,故将个组分别排 序即可,基于比较的排序方法每组的时间下界为0(klogk)。可以用二叉树分治形式描述,最好 的情况是树的髙度为logk全部时间下界为0(nlogk)应选B。","type":"choice","options":{"D":"O(klog2k)","C":"0(klog2n)","A":"O(nlog2n)","B":"O(nlog2k)"},"answer":"B"},{"id":"learncoder_106_19786","stem":"以下序列不是堆的是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是堆排序过程。堆的定义简单描述为对于任意一个非叶结点上 的关键字都不大于(或不小于)其左、右儿子结点上的关键字。即A[i/2].key<=A[i].key,l<= i/2 <=n。在堆中,以任意结点为根的子树仍然是堆。特别地,每个叶结点也可视为堆。建立方式是把数组所对应的完全二叉树以堆不断扩大的方式整理成堆。令i=n/2,…,2,1 分别把以n/2,....,2,1为根的完全二叉树整理成堆。所以应选D。","type":"choice","options":{"B":"(100,98,85,82,80,77,66,60],40,20,10)","C":"(10,20,40,60,66,77,80,82,85,98,100)","A":"(100,85,98,77,80,60,82,40,20,10,66)","D":"(100,85,40,77,80,60,66,98,82,10,20)"},"answer":"D"},{"id":"learncoder_106_19787","stem":"归并排序中,归并的趟数是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是归并排序。第1遍归并的子序列长度为2°,第2遍为第 力遍为2i-1所以由2i-1>=n知,对n个记录的数据集合,总共需要归并log n次。应选.B。","type":"choice","options":{"A":"O(n)","D":"O(nxn)","C":"0(nlog2n)","B":"O(log2n)"},"answer":"B"},{"id":"learncoder_106_19784","stem":"就排序算法所用的辅助空间而言,堆排序、快速排序、归并排序的关系是( )。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点为排序的空间复杂性。堆排序辅助空间为0(1),快速排序为 o(logn),归并为O(n))。应选A","type":"choice","options":{"C":"堆排序>归并排序>快速排序","B":"堆排序<归并排序<快速排序","A":"堆排序<快速排序<归并排序","D":"堆排序>快速排序>归并排序"},"answer":"A"},{"id":"learncoder_106_19791","stem":"空","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空综合应用题","type":"short_answer","answer":""},{"id":"learncoder_106_19789","stem":"基于比较方法的n个数据的内部排序,最坏情况下的时间复杂度能达到的最好下界 是( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是各类排序的效率。理论上可以证明,对于基于关键字之间比较 的分类,无论用什么方法都至少需要进行log2n!次比较。\t由Stirling公式可知,log2n!≈nlogn-l.44n+O(log2n).所以基于关键字比较的分类时间的 下界是0(nlog2n).因此不存在时间复杂性低于此下界的基于关键字比较的分类。应选A。","type":"choice","options":{"D":"0(n x n)","C":"0(n)","B":"O(log2n)","A":"O(nlog2n)"},"answer":"A"},{"id":"learncoder_106_19781","stem":"从未排序序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在已排序序列的合适位置,该排序方法称为()排序法。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是各类排序算法的思想。参照第2题,应选A。","type":"choice","options":{"B":"选择","C":"希尔","A":"插入","D":"二路归并"},"answer":"A"},{"id":"learncoder_106_19782","stem":"若用冒泡排序方法对序列{10,14,26,29,4L,52}从大到小排序,需进行(\t)次比较。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是冒泡算法的思想及过程。参照第2题,第一趟比较5次,第2 趟比较4次,第3趟比较3次,第4趟比较2次,第5趟比较1次,结束。共15次,应选Co","type":"choice","options":{"B":"10","A":"3","C":"15","D":"25"},"answer":"C"},{"id":"learncoder_106_19779","stem":"如果只想得到1 000个元素组成的序列中第5个最小元素之前的部分排序的序列,用()方法最快。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是各类排序算法的思想。冒泡排序和简单选择排序每次要比较 n-1次,快速排序结束后才能得到结果,堆排序可以在选择5次后得到结果,每次比较元素次数 为 log2n .所以应选 D。\t","type":"choice","options":{"B":"快速排序","C":"简单选择排序","A":"冒泡排序","D":"堆排序"},"answer":"D"},{"id":"learncoder_106_19783","stem":"采用简单选择排序,比较次数与移动次数分别为(\t)o","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"简单选择排序的关键字比较次数KCN与对象的初始排列无关。第i趟选择具有最 小关键字对象所需的比较次数总是n-i-1 次,此处假定整个待排序对象序列有n个对象。因 此,总的关键字比较次数为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第6章/image3.png'/>最坏情况是每一趟都要进行交换,总的对象移动次数为RMN=3(n-l).","type":"choice","options":{"D":"O(nlog2n) ,O(n)","B":"O(log2n) ,O(nxn)","C":"O(nxn) ,O(n)","A":"O(n) ,O(log2n)"},"answer":"C"},{"id":"learncoder_106_19780","stem":"在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是(\t)。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是各类排序的效率。简单选择排序和堆排序不受文件“局部有 序”或文件长度,冒泡排序比较次数不变;直接插入排序比较次数减少,交换次数也较少,所以选 择Ao","type":"choice","options":{"C":"简单选择排序","A":"直接插入排序","D":"堆排序","B":"冒泡排序"},"answer":"A"},{"id":"learncoder_106_19775","stem":"下面给出的4种排序方法中,排序过程中的比较次数与排序方法无关的是()。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是排序算法的思想。参见第2题,应选A。","type":"choice","options":{"A":"选择排序","B":"插入排序","C":"快速排序","D":"堆排序"},"answer":"A"},{"id":"learncoder_106_19776","stem":"在下列排序算法中,算法的时间复杂度与初始数据无关的是()。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是各类排序算法的思想。参见第2、3题,应选D。 ","type":"choice","options":{"D":"直接选择排序","A":"直接插入排序","B":"冒泡排序","C":"快速排序"},"answer":"D"},{"id":"learncoder_106_19774","stem":"下列内部排序算法中在初始序列已基本有序(除去n个元素中的某k个元素后即呈有序,k<<n)的情况下,排序效率最高的算法是()","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是各类排序算法的效率。起泡排序比较n(n-1)/2次,没有交换 次数;堆排序一次比较log2n,共需要n次;直插比较n-1次,没有交换;二路归并排序一次比较 log2n,共需要n次。综上,应选C。","type":"choice","options":{"A":"冒泡排序","B":"堆排序","D":"二路归并排序","C":"直接插入排序"},"answer":"C"},{"id":"learncoder_106_19778","stem":"下列排序算法中,在每一趟都能选出一个元素放到其最终位置上,并且其时间性能受数据初始特性影响的是()。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是各类排序算法的思.想。参见第2题。应选B。","type":"choice","options":{"B":"快速排序","C":"直接选择排序","A":"直接插入排序","D":"堆排序"},"answer":"B"},{"id":"learncoder_106_19777","stem":"下列排序算法中,()排序在一趟结束后不一定能选出一个元素放在其最终位置上。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是各类排序算法的思想。参见第2题。应选C。\t","type":"choice","options":{"C":"归并","B":"冒泡","A":"选择","D":"堆"},"answer":"C"},{"id":"learncoder_106_19772","stem":"下面给出的4种排序方法中,()萍序法是不稳定性排序法。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是排序算法的稳定性问题。如果待排序的文件中,存在多个关键 字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,则称这种排序 是稳定的排序;反之,若具有相同关键字的记录之间的相对次序发生变化,则称这种排序是不稳 定的排序。是否稳定与算法有关,相邻数据比较的算法是稳定的,不相邻数据比较,会出现不稳 定。选项A、B、C都是相邻元素比较,是稳定的。所以选D。","type":"choice","options":{"A":"插入","C":"二路归并","D":"堆","B":"冒泡"},"answer":"D"},{"id":"learncoder_106_19773","stem":"下列内部排序算法中,其比较次数(交换次数)与序列初态无关的算法是()","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"此题考查的知识点是各类排序算法的思想。\t冒泡排序方法就是自底向上检查这个序列,若两个相邻的元素的顺序不对,则交换。直到所 有元素处理完为止。与序列初态有关,D错。直接插入排序思想是假设待排序的记录存放在数组R[n+1]中,排序过程中的某一时刻,R 逐分成两个子区间[R[1],R[i-1]]和[R[i],R[n]],其中,前一个子区间是已排好序的有序 区;后一个子区间是当前未排序的无序区。直接插入排序的基本操作是将当前无序区的第1个 记录R[i]插入到有序区中的适当位置,使得R[1]到R[i]为新的有序区。首先比较R[i]和 R[i-1] 如果R[i-1]<= R[i],则R[1...i]已排好序,第i遍处理就结束了;否则交换R[i]与 R[i-1]的位置,继续比较R[i-1]和R[i-2],直到找到某一个位置j(1<=j<=i-1)使得R[j]<= R[[j+1]]时为止。与序列初态有关,B错。快速排序是通过基准元素v把表(文件,数据集合)划分成左、右两部分,使得左边的各记录 的关键字都小于© ;右边的各记录的关键字都大于等于v;重复该过程直到排好序。与序列初态 有关,A错。二路归并是首先把每个记录看成是一个有序序列,共n个,将它们两两合并成[n/2]个分类 序列,每个序列长度为2(当n为奇数时,最后一个序列长度为1);对[n/2]个分类序列,再两两 归并在一起;如此进行,直到归并成一个长度为n的分类序列为止。与序列初态无关,所以选C。","type":"choice","options":{"D":"冒泡排序","A":"快速排序","B":"直接插入排序","C":"二路归并排序"},"answer":"C"},{"id":"learncoder_106_16823","stem":"设有顺序放置的n个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红,白,蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后,重新安排时对每粒砾石的颜色只能看一次,并且只允许交换操作来调整砾石的位置。【上海大学 1999 二 2】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"利用快速排序思想解决。由于要求“对每粒砾石的颜色只能看一次”,设 3 个指针 i,j 和 k,分别指向红色、白色砾石的后一位置和待处理的当前元素。从 k=n 开始,从右向左搜索,若该元素是兰色,则元素不动,指针左移(即 k-1);若当前元素是红色砾石,分 i>=j(这时尚没有白色砾石)和 i<j 两种情况。前一情况执行第 i 个元素和第 k 个元素交换,之后 i+1;后一情况,i 所指的元素已处理过(白色),j 所指的元素尚未处理,应先将 i 和 j 所指元素交换,再将 i 和 k 所指元素交换。对当前元素是白色砾石的情况,也可类似处理。为方便处理,将三种砾石的颜色用整数 1、2 和 3 表示。void QkSort(rectype r[],int n)// r 为含有 n 个元素的线性表,元素是具有红、白和兰色的砾石,用顺序存储结构存储,//本算法对其排序,使所有红色砾石在前,白色居中,兰色在最后。{int i=1,j=1,k=n,temp;while (k!=j){while (r[k].key==3) k--;// 当前元素是兰色砾石,指针左移if (r[k].key==1) // 当前元素是红色砾石if (i>=j){temp=r[k];r[k]=r[i];r[i]=temp; i++;}//左侧只有红色砾石,交换 r[k]和 r[i]else {temp=r[j];r[j]=r[i];r[i]=temp; j++;//左侧已有红色和白色砾石,先交换白色砾石到位temp=r[k];r[k]=r[i];r[i]=temp; i++;//白色砾石(i 所指)和待定砾石(j 所指)} //再交换 r[k]和 r[i],使红色砾石入位。if (r[k].key==2)if (i<=j) { temp=r[k];r[k]=r[j];r[j]=temp; j++;}// 左侧已有白色砾石,交换 r[k]和 r[j]else { temp=r[k];r[k]=r[i];r[i]=temp; j=i+1;}//i、j 分别指向红、白色砾石的后一位置}//whileif (r[k]==2) j++; /* 处理最后一粒砾石else if (r[k]==1) { temp=r[j];r[j]=r[i];r[i]=temp; i++; j++; }//最后红、白、兰色砾石的个数分别为: i-1;j-i;n-j+1}//结束 QkSor 算法"},{"id":"learncoder_106_16822","stem":"设记录R[i]的关键字为R[i].KEY(1〈=i〈=k),树结点T[i] (1〈=i〈=K-1)指向败者记录,T[0]: 下标。写一算法产生对应上述R[i] (1<=i<= k)的败者树,要求除R[1..k]和T[0..k-1]以外,只用0(1)【东南大学 1995 九】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":" void Adjust(int T[],int s){ //选得最小关键字记录后,从叶到根调整败者树,选下一个最小关键字//沿从叶子结点 R[s]到根结点 T[0]的路径调整败者树t=(s+k)/2; //T[t]是 R[s]的双亲结点while(t>0){ if(R[s].key>R[T[t]].key) s<-->T[t]; //s 指示新的胜者t=t/2;}//whileT[0]=s;}//Adjustvoid CreateLoserTree(int T[]){ //建立败者树,已知 R[0]到 R[k-1]为完全二叉树 T 的叶子结点,存有 k 个关键字,沿//从叶子到根的 k 条路径将 T 调整为败者树R[k].key=MINKEY; //MINKEY 是最小关键字for(i=0;i<k;i++) T[i]=k; //设置 T 中“败者”的初值//依次从 R[k-1],R[k-2],…,R[0]出发调整败者for(i=k-1;k>=0;i--) Adjust(T,i);}//CreateLoserTree"},{"id":"learncoder_106_16817","stem":"非递归的快速排序算法。【中科院软件所 1997 三 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"void QuickSort(rectype r[n+1]; int n)// 对 r[1..n]进行快速排序的非递归算法{typedef struct{ int low,high; }nodenode s[n+1];//栈,容量足够大int quickpass(rectype r[],int,int); // 函数声明int top=1; s[top].low=1; s[top].high=n;while (top>0){ss=s[top].low; tt=s[top].high; top--;if (ss<tt){k=quickpass(r,ss,tt);if (k-ss>1) {s[++top].low=ss; s[top].high=k-1;}if (tt-k>1) {s[++top].low=k+1; s[top].high=tt;}}} // 算法结束int quickpass(rectype r[];int s,t){i=s; j=t; rp=r[i]; x=r[i].key;while (i<j){while (i<j && x<=r[j].key) j--;if (i<j) r[i++]=r[j];while (i<j && x>=r[j].key) i++;if (i<j) r[j--]=r[i];;]r[i]=rp;return (i);} // 一次划分算法结束"},{"id":"learncoder_106_16814","stem":"辅助地址表的排序是不改变结点物理位置的排序。辅助地址表实际上是一组指针,用它来指岀结点排序 后的逻辑顺序地址。设用K[1], K[2],…,K[N]表示N个结点的值,用T[1],T[2],…,T[N]表示辅助地址表.初始 时T[i]:=i,在排序中,凡需对结点交换就用它的地址来进行。例如当N = 3时,对K (31, 11, 19)则有T (2, 3, 1)。试编写实现辅助地址表排序(按非递减序)算法的语句序列。【重庆大学 2000 四、2 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"void sort (RecType K[],int n){ for (i=1;i<=n;i++) T[i]=i;for (i=1;i<n;i++)for (j=1;j<=n-i;j++)if (K[T[j]]>K[T[j+1]]) {t=T[j];T[j]=T[j+1];T[j+1]=t;}}//sort"},{"id":"learncoder_106_16813","stem":"已知关键字序列(K1, K2, K3,…,Kn-1)是大根堆。(1)试写岀一算法将(K1, K2, K3,…,Kn-1, Kn)调整为大根堆;(2) 利用(1)的算法写一个建大根堆的算法。【中科院软件所 1999 七、2 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)从第 n 个记录开始依次与其双亲(n/2)比较,若大于双亲则交换,继而与其双亲的双亲比较,以此类推直到根为止。void sift(RecType R[],int n){ //假设 R[1..n-1]是大堆,本算法把 R[1..n]调成大堆j=n; R[0]=R[j];for (i=n/2;i>=1;i=i/2)if (R[0].key>R[i].key){ R[j]=R[i];j=i;} else break;R[j]=R[0];}//sift(2)void HeapBuilder(RecType R[],int n){ for (i=2;i<=n;i++) sift (R,i); }"},{"id":"learncoder_106_16820","stem":" 叙 述 基 数 排 序 算 法 , 并 对 下 列 整 数 序 列 图 示 其 基 数 排 序 的 全 过 程 。 (179,208,93,306,55,859,984,9,271,33) 【南京航空航天大学 2000 一 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"手工模拟排序过程略。#define n 待排序记录的个数typedef struct{ int key[d]; //关键字由 d 个分量组成int next; //静态链域AnyType other; //记录的其它数据域} SLRecType;SLRecType R[n+1]; //R[1..n]存放 n 个记录typedef struct{ int f,e; //队列的头、尾指针} SLQueue;SLQueue B[m] //用队列表示桶,共 m 个int RadixSort(SLRecType R[], int n){ //对 R[1..n]进行基数排序,返回收集用的链头指针for(i=1;i<n;i++) R[i].next=i+1;//将 R[1..n]链成一个静态链表R[n].next=-1; p=1; //将初始链表的终端结点指针置空, p 指向链表的第一个结点for(j=d-1;j>=0;j--) //进行 d 趟排序{for(i=0;i<m;i++) { B[i].f=-1;B[i].e=-1;}//初始化桶while(p!=-1) //按关键字的第 j 个分量进行分配{ k=R[p].key[j]; //k 为桶的序号if(B[k].f==-1) B[k].f=p; //将 R[p]链到桶头else R[B[k].e].next=p; //将 R[p]链到桶尾B[k].e=p; //修改桶的尾指针,p=R[p].next; //扫描下一个记录}//whilei=0;while(B[i].f==-1) i++; //找第一个非空的桶t=B[i].e; p=B[i].f //p 为收集链表的头指针,t 为尾指针while(i<m-1){i++;if(B[i].f!=-1){ R[t].next=B[i].f; t=B[i].e; } //连接非空桶}//whileR[t].next=-1; //本趟收集完毕,将链表的终端结点指针置空}//forreturn p;}//RadixSort"},{"id":"learncoder_106_16819","stem":"二路插入排序是将待排关键字序列r[1.. n]中关键字分二路分别按序插入到辅助向量d[1.. n]前半部和后 半部(注:向量d可视为循环表),其原则为,先将r[l]赋给d[1],再从r[2]记录开始分二路插入。编写实现二 路插入排序算法。 【北京工业大学 1998 八 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"void BiInsertSort(RecType R[],int n){//二路插入排序的算法int d[n+1]; //辅助存储d[1]=R[1];first=1;final=1;for(i=2;i<=n;i++){ if(R[i].key>=d[1].key) //插入后部{ low=1;high=final;while (low<=high) //折半查找插入位置{ m=(low+high)/2;if(R[i].key< d[m].key) high=m-1; else low=m+1;}//whilefor (j=final;j>=high+1;j--) d[j+1] = d[j];//移动元素d[high+1]=R[i]; final++; //插入有序位置}else //插入前部{ if(first==1){ first=n; d[n]=R[i];}else{ low=first;high=n;while (low<=high){ m=(low+high)/2;if(R[i].key< d[m].key) high=m-1; else low=m+1;}//whilefor (j=first;j<=high;j++) d[j-1] = d[j]; //移动元素d[high]=R[i]; first--;}//if}//if}//forR[1] =d[fisrt];for(i=first%n+1,j=2;i!=fisrt;i=i%n+1,j++) R[j] =d[i]; //将序列复制回去}//BiInsertSort"},{"id":"learncoder_106_16816","stem":"设待排序的文件用单链表作存储结构,其形式如下:TYPE pointer= ↑ node;node=RECORDkey:integer;next:pointer;END;写岀以head为头指针的选择排序算法。 【中山大学1999二】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":""},{"id":"learncoder_106_16821","stem":"输入N个只含一位数字的整数,试用基数排序的方法,对这N个数排序。 【中国人民大学 2001 三、1】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"本题是基数排序的特殊情况,关键字只含一位数字的整数。typedef struct{ int key;int next;} SLRecType;SLRecType R[N+1];typedef struct{ int,f,e;} SLQueue;SLQueue B[10];int Radixsort(SLRecType R[],int n) //设各关键字已输入到 R 数组中{for (i=1;i<n;i++ ) R[i].next=i+1;R[n].next=-1; p=1; //-1 表示静态链表结束for (i=0;i<=9;i++);{ B[i].f=-1; B[i].e=-1;} //设置队头队尾指针初值while (p!=-1) //一趟分配{k=R[p].key; //取关键字if(B[k].f==-1)B[k].f=p; //修改队头指针else R[B[k].e].next=p;B[k].e=p;p=R[p].next; //下一记录}i=0; //一趟收集while (B[i].f==-1) i++;t=B[i].e; p=B[i]f;while (i<9){i++;if (B[i].f!=-1){ R[t].next=B[i].f;t=B[i].e;} }R[t].next=-1;return p; //返回第一个记录指针}"},{"id":"learncoder_106_16818","stem":"一最小最大堆(min max heap)是一种特定的堆,其最小层和最大层交替岀现,根总是处于最小层。最小 最大堆中的任一结点的关键字值总是在以它为根的子树中的所有元素中最小(或最大)。如图所示为一最小最大堆;(1)画岀在上图中插入关键字为5的结点后的最小最大堆。(2)画岀在上图中插入关键字为80 的结点后的最小最大堆;(3)编写一算法实现最小最大堆的插入功能。假定最小最大堆存放在数组中,关键字为整数。(4)用C或PASCA;实现上述算法。【浙江大学1996八】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)加入 5 后 (2)加入 80 后(3)从插入位置进行调整,调整过程由下到上。首先根据元素个数求出插入元素所在层次数,以确定其插入层是最大层还是最小层。若插入元素在最大层,则先比较插入元素是否比双亲小,如是,则先交换之后,将小堆与祖先调堆,直到满足小堆定义或到达根结点;若插入元素不小于双亲,则调大堆,直到满足大堆定义。若插入结点在最小层,则先比较插入元素是否比双亲大,如是,则先交换,之后,将大堆与祖先调堆;若插入结点在最小层且小于双亲,则将小堆与祖先调堆,直到满足小堆定义或到达根结点。(4)void MinMaxHeapIns(RecType R[],int n){ //假设 R[1..n-1]是最小最大堆,插入第 n 个元素,把 R[1..n]调成最小最大堆j=n; R[0]=R[j];h= log2n +1; //求高度if (h%2==0) //插入元素在偶数层,是最大层{i=n/2;if (R[0].key<R[i].key) //插入元素小于双亲,先与双亲交换,然后调小堆{R[j]=R[i];j=i/4;while (j>0 && R[j]>R[i]) //调小堆{R[i]=R[j]; i=j; j=i/4; }R[i]=R[0];}else //插入元素大于双亲,调大堆{i=n; j=i/4;while (j>0 && R[j]<R[i]){R[i]=R[j]; i=j; j=i/4; }R[i]=R[0];}}else //插入元素在奇数层,是最小层{i=n/2;if (R[0].key>R[i].key) //插入元素大于双亲,先与双亲交换,然后调大堆{R[j]=R[i];j=i/4;while (j>0 && R[j]<R[i]) //调大堆{R[i]=R[j]; i=j; j=i/4; }R[i]=R[0];}else //插入元素小于双亲,调小堆{i=n; j=i/4;while (j>0 && R[j]>R[i]){R[i]=R[j]; i=j; j=i/4; }R[i]=R[0];}}}//MinMaxHeapIns"},{"id":"learncoder_106_16815","stem":"关于堆排序方法,完成如下工作:(1)简述该方法的基本思想。(2)写岀堆排序算法。(3)分析该算法的时间复杂度。 【西南财经大学 1999 五】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":" PROC LinkedListSelectSort( head: pointer);//本算法一趟找出一个关键字最小的结点,其数据和当前结点进行交换;若要交换指针,则须记下//当前结点和最小结点的前驱指针p:=head↑.next;WHILE p<>NIL DO[q:=p↑.next; r:=p; //设 r 是指向关键字最小的结点的指针WHILE <q<>NIL DO[IF q↑.data<r↑.data THEN r:=q;q:=q↑.next;]IF r<>p THEN r↑.data<-->p↑.datap:=p↑.next;]ENDP;"},{"id":"learncoder_106_16812","stem":"借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。设此组数组r[l..h]中。若查找成功,则输岀该记录在r数组中的位置及其值,否则显示“not find ”信息。 算法并简要说明算法思想。 【北京邮电大学 1998 七】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"把待查记录看作枢轴,先由后向前依次比较,若小于枢轴,则从前向后,直到查找成功返回其位置或失败返回 0 为止。int index (RecType R[],int l,h,datatype key){ int i=l,j=h;while (i<j){ while (i<=j && R[j].key>key) j--;if (R[j].key==key) return j;while (i<=j && R[i].key<key) i++;if (R[i].key==key) return i;}printf(“Not find”) ; return 0;}//index"},{"id":"learncoder_106_16824","stem":"数据结构 DEAP 的定义如下:DEAP 是一棵完全二叉树,它或者是一棵空树,或者满足下列特性:(1)树根不包含元素.(2)其左子树是一小堆(MINHEAP),其右子树是一大堆(MAXHEAP).(3)若右子树非空,设i是左子树的任一结点,j是右子树中与i相应的结点.若这样的j结点不存在,则取j为右子树中与i的父结点相应的结点;结点i的关键字总是小于或等于结点j的关键字值。一个 DEAP 的例子如下图所示,与结点 15 相对应的结点为 20,与结点 19 对应的结点为 25.(1)给出在该 DEAP 中插入结点 4 后的结果.(2)写出在 DEAP 中插入新结点的算法.(3)用 C 或 PASCAL 语言编写实现上述算法的程序.<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image3.png'/>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"根据定义,DEAP 是一棵完全二叉树,树根不包含元素,其左子树是一小堆(MINHEAP,下称小堆),其右子树是一大堆(MAXHEAP,下称大堆),故左右子树可分别用一维数组 l[]和 r[]存储,用 m 和 n 分别表示当前两完全二叉树的结点数,左右子树的高度差至多为 1,且左子树的高度始终大于等于右子树的高度。我们再分析插入情况:当均为空二叉树或满二叉树(m=2h-1)时,应在小堆插入;小堆满(二叉树)后在大堆插入。即当 m>=n 且 m<>2h-1 且 log2m - log2n <=1 在小堆插入,否则在大堆插入。最后分析调堆情况:在小堆 m 处插入结点 x 后,若 x 的值不大于大堆的 m/2 结点的值,则在小堆调堆;否则,结点 x 与大堆的 m/2 结点交换,然后进行大堆调堆。在大堆 n 处插入结点 x 后,若 x 不小于小堆的 n 结点,则在大堆调堆;否则,结点 x 与小堆的 n 结点交换,然后进行小堆调堆。(1) 在 DEAP 中插入结点 4 后的结果如图:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image16.png'/>4 先插入到大堆,因为 4 小于小堆中对应位置的 19,所以和 19 交换。交换后只需调整小堆,从叶子到根结点。这时,大堆不需调整,因为插入小堆 19 时,要求 19 必须小于对应大堆双亲位置的 25,否则,要进行交换。void InsertDEAP(int l[],r[],m,n,x)//在 DEAP 中插入元素 x,l[]是小堆,r[]是大堆,m 和 n 分别是两堆的元素个数,x 是待插入元素。{if (m>=n && m<>2h-1 && log2m - log2n <=1)// 在小堆插入 x,h 是二叉树的高度{m++; //m 增 1if (x>r[m/2]) //若 x 大于大堆中相应结点的双亲,则进行交换{l[m]=r[m/2];c=m/2; f=c/2;while (f>0 && r[f]<x) //调大堆{r[c]=r[f]; c=f; f=c/2;}r[c]=x;} //结束调大堆else //调小堆{c=m; f=c/2;while (f>0 && l[f]>x){l[c]=l[f]; c=f; f=c/2;}l[c]=x;}else //在大堆插入 x{n++; //n 增 1if (x<l[n]) //若 x 小于小堆中相应结点,则进行交换{r[n]=l[n];c=n; f=c/2;while (f>0 && l[f]>x) //调小堆{l[c]=l[f]; c=f; f=c/2;}l[c]=x;} //结束调小堆else //调大堆{c=n; f=c/2;while (f>0 && r[f]<x){r[c]=r[f]; c=f; f=c/2;}r[c]=x;}}//结束 InsertDEAP 算法"},{"id":"learncoder_106_16804","stem":"有n个记录存储在带头节点的双向链表中,现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法。(注:双向起泡排序即相邻两趟排序向相反方向起泡)【北京邮电大学 1997 7】<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image2.jpeg'/>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"typedef struct node{ ElemType data;struct node *prior,*next;}node,*DLinkedList;void TwoWayBubbleSort(DLinkedList la)//对存储在带头结点的双向链表 la 中的元素进行双向起泡排序。{int exchange=1; // 设标记DLinkedList p,temp,tail;head=la //双向链表头,算法过程中是向下起泡的开始结点tail=null; //双向链表尾,算法过程中是向上起泡的开始结点while (exchange){p=head->next; //p 是工作指针,指向当前结点exchange=0; //假定本趟无交换while (p->next!=tail) // 向下(右)起泡,一趟有一最大元素沉底if (p->data>p->next->data) //交换两结点指针,涉及 6 条链{temp=p->next; exchange=1;//有交换p->next=temp->next;temp->next->prior=p //先将结点从链表上摘下temp->next=p; p->prior->next=temp; //将 temp 插到 p 结点前temp->prior=p->prior; p->prior=temp;}else p=p->next; //无交换,指针后移tail=p; //准备向上起泡p=tail->prior;while (exchange && p->prior!=head) //向上(左)起泡,一趟有一最小元素冒出if (p->data<p->prior->data) //交换两结点指针,涉及 6 条链{temp=p->prior; exchange=1; //有交换p->prior=temp->prior;temp->prior->next=p; //先将 temp 结点从链表上摘下temp->prior=p; p->next->prior=temp; //将 temp 插到 p 结点后(右)temp->next=p->next; p->next=temp;}else p=p->prior; //无交换,指针前移head=p; //准备向下起泡}// while (exchange)} //算法结束"},{"id":"learncoder_106_16803","stem":"冒泡排序算法是把大的元素向上移(气泡的上浮),也可以把小的元素向下移(气泡的下沉)请给岀上浮和 下沉过程交替的冒泡排序算法。【吉林大学 2001 二、3 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"void BubbleSort2(int a[],int n) //相邻两趟向相反方向起泡的冒泡排序算法{ change=1;low=0;high=n-1; //冒泡的上下界while(low<high && change){ change=0; //设不发生交换for(i=low;i<high;i++) //从上向下起泡if(a[i]>a[i+1]){a[i]<-->a[i+1];change=1;} //有交换,修改标志 changehigh--; //修改上界for(i=high;i>low;i--) //从下向上起泡if(a[i]<a[i-1]){a[i]<-->a[i-1];change=1;}low++; //修改下界}//while}//BubbleSort2"},{"id":"learncoder_106_16800","stem":"给岀一组关键字:29,18,25,47,58,12,51,10,分别写岀按下列各种排序方法进行排序时的变化过程: 【南开大学 1998 八】(1)归并排序\t每归并一次书写一个次序。(2)快速排序\t每划分一次书写一个次序。(3)堆排序\t先建成一个堆,然后每从堆顶取下一个元素后,将堆调整一次。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)2路归并 第一趟:18,29,25,47,12,58,10,51;第二趟:18,25,29,47,10,12,51,58;第三趟:10,12,18,25,29,47,51,58(2)快速排序 第一趟:10,18,25,12,29,58,51,47;第二趟:10,18,25,12,29,47,51,88;第三趟:10,12,18,25,29,47,51,88(3)堆排序 建大堆:58,47,51,29,18,12,25,10;①51, 47, 25, 29, 18, 12, 10, 58;②47, 29, 25, 10, 18, 12, 51, 58;③29, 18, 25, 10, 12, 47, 51, 58;④25, 18, 12, 10, 29, 47, 51, 58;<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image13.png'/>"},{"id":"learncoder_106_16802","stem":"给岀如下关键字序列321,156,57,46,28,7,331,33,34,63试按链式基数排序方法,列岀一趟分配和收集的过程。 【北京轻工业学院 1999 九】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image14.png'/>综合应用题"},{"id":"learncoder_106_16799","stem":"给岀一组关键字T=(12, 2, 16, 30, 8, 28, 4, 10, 20, 6, 18),写岀用下列算法从小到大排序时第一趟结束时的序列;(1)希尔排序(第一趟排序的增量为5) (2) 快速排序(选第一个记录为枢轴(分隔))(3)链式基数排序(基数为10) 【上海交通大学 1999 八】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)一趟希尔排序: 12,2,10,20,6,18,4,16,30,8,28 ( D=5)(2)一趟快速排序:6,2,10,4,8,12,28,30,20,16,18⑶链式基数排序LSD [0][1][2][3][4][5][6][7[8][9]<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image12.png'/>"},{"id":"learncoder_106_16811","stem":"设有一个数组中存放了一个无序的关键序列K1、K2、…、Kn。现要求将Kn放在将元素排序后的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过n。(注:用程序实现)【南京航空航天大学 1997 六】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"以 Kn 为枢轴的一趟快速排序。将上题算法改为以最后一个为枢轴先从前向后再从后向前。int Partition(RecType K[],int l,int n){ //交换记录子序列 K[l..n]中的记录,使枢轴记录到位,并返回其所在位置,//此时,在它之前(后)的记录均不大(小)于它int i=l; j=n; K[0] = K[j]; x = K[j].key;while(i<j){ while(i<j && K[i].key<=x) i++;if (i<j) K[j]=K[i];while(i<j && K[j].key>=x) j--;if (i<j) K[i]=K[j];}//whileK[i]=K[0]; return i;}//Partition"},{"id":"learncoder_106_16808","stem":"有一种简单的排序算法,叫做计数排序(count sorting)。这种排序算法对一个待排序的表(用数组表示) 进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键码互不相同,计数排序 算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键码比该记录的关键码小,假设针 对某一个记录,统计岀的计数值为c,那么,这个记录在新的有序表中的合适的存放位置即为c。(1)给岀适用于计数排序的数据表定义;(2)使用Pascal或C语言编写实现计数排序的算法;(3)对于有n个记录的表,关键码比较次数是多少?(4)与简单选择排序相比较,这种方法是否更好?为什么? 【清华大学 2000 三】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"typedef struct{ int key; datatype info}RecTypevoid CountSort(RecType a[],b[],int n) //计数排序算法,将 a 中记录排序放入 b 中{ for(i=0;i<n;i++) //对每一个元素{ for(j=0,cnt=0;j<n;j++)if(a[j].key<a[i].key) cnt++; //统计关键字比它小的元素个数b[cnt]=a[i];}}//Count_Sort(3) 对于有 n 个记录的表,关键码比较 n2次。(4) 简单选择排序算法比本算法好。简单选择排序比较次数是 n(n-1)/2,且只用一个交换记录的空间;而这种方法比较次数是 n2,且需要另一数组空间。"},{"id":"learncoder_106_16810","stem":"写岀一趟快速排序算法。【山东师范大学2000 二、4(10分)\t2001 二、5】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"int Partition(RecType R[],int l,int h)//一趟快速排序算法,枢轴记录到位,并返回其所在位置,{ int i=l; j=h; R[0] = R[i]; x = R[i].key;while(i<j){ while(i<j && R[j].key>=x) j--;if (i<j) R[i] = R[j];while(i<j && R[i].key<=x) i++;if (i<j) R[j] = R[i];}//whileR[i]=R[0];return i;}//Partition"},{"id":"learncoder_106_16807","stem":"输入50个学生的记录(每个学生的记录包括学号和成绩),组成记录数组,然后按成绩由高到低的次序输岀(每行10个记录)。排序方法采用选择排序。 【北京师范大学 1999 五 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":" typedef struct{ int num; float score; }RecType;void SelectSort(RecType R[51],int n){ for(i=1; i<n; i++){ //选择第 i 大的记录,并交换到位k=i; //假定第 i 个元素的关键字最大for(j=i+1;j<=n;j++) //找最大元素的下标if(R[j].score>R[k].score) k=j;if(i!=k) R[i] <-->R[k]; //与第 i 个记录交换}//forfor(i=1; i<=n; i++) //输出成绩{ printf(\"%d,%f\",R[i].num,R[i].score); if(i%10==0) printf(\"\\n\");}}//SelectSort"},{"id":"learncoder_106_16809","stem":"快速分类算法中,如何选取一个界值(又称为轴元素),影响着快速分类的效率,而且界值也并不一定是 被分类序列中的一个元素。例如,我们可以用被分类序列中所有元素的平均值作为界值。编写算法实现以平均值 为界值的快速分类方法。【石油大学 1998 五】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"保存划分的第一个元素。以平均值作为枢轴,进行普通的快速排序,最后枢轴的位置存入已保存的第一个元素,若此关键字小于平均值,则它属于左半部,否则属于右半部。int partition (RecType r[],int l,h){ int i=l,j=h,avg=0;for(;i<=h;i++) avg+=R[i].key;i=l; avg=avg/(h-l+1);while (i<j){ while (i<j &&R[j].key>=avg) j--;if (i<j) R[i]=R[j];while (i<j &&R[i].key<=avg) i++;if (i<j) R[j]=R[i];}if(R[i].key<=avg) return i; else return i-1;}void quicksort (RecType R[],int S,T);{if (S<T){k=partition (R,S,T);quicksart (R,S,k);quicksart (R,k+1,T);}}"},{"id":"learncoder_106_16806","stem":"用类PASCAL语言(或PASCAL语言)完成下列各题:设单链表头结点指针为L,结点数据值为整型,试写岀对链表L按“插入方法”排序的算法:LINSORT(L)。【北京科技大学 1999 十、1\t2000 十、1 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":" TYPE pointer=↑node;node=RECORD key:integer; link:pointer; END;PROCEDURE LINSORT(L:pointer);VAR t,p,q,s:pointer;BEGINp:=L↑.link↑.link; {链表至少一个结点,p 初始指向链表中第二结点(若存在)}L↑.link↑.link=NIL; {初始假定第一个记录有序}WHILE p<>NIL DOBEGIN q:=p↑.link; {q 指向 p 的后继结点}s=L;WHILE (s↑.link<>NIL AND s↑.link↑.key<p↑.key) DOs:=s↑.link; {向后找插入位置}p↑.link:=s↑.link; s↑.link=p;{插入结点}p=q; {恢复 p 指向当前结点}END {WHILE}END; {LINSORT}"},{"id":"learncoder_106_16805","stem":"请编写直接插入排序算法TYPE rcdtype=RECORDkey: integer;otheritem: anytype;END;listtype=ARRAY[0..n] OF rcdtype; 【北京轻工业学院 1998 七 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":" PROCEDURE StraightInsertSort(VAR R:listtype;n:integer);VAR i,j:integer;BEGINFOR i:=2 TO n DO {假定第一个记录有序}BEGINR[0]:=R[i]; j:=i-1; {将待排序记录放进监视哨}WHILE R[0].key<R[j].key DO {从后向前查找插入位置,同时向后移动记录}BEGIN R[j+1]:=R[j]; j:=j-1; END;R[j+1]:=R[0] {将待排序记录放到合适位置}END {FOR}END;"},{"id":"learncoder_106_16801","stem":"(1) 判定起泡排序的结束条件是什么?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image1.png'/>2)请简单叙述希尔排序的基本思想。3)将下列序列调整成堆(堆顶为最小值)(4)在16个关键字中选岀最小的关键字至少要多少次比较?再选岀次小的关键字至少要多少次比较?请简要说明选择的方法和过程。 【燕山大学 1999 九】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":" (1)当至多进行n-1趟起泡排序,或一趟起泡排序中未发生交换(即己有序)时,结束排序。(2)希尔排序是对直接插入排序算法的改进,它从“记录个数少”和“基本有序”出发,将待排序的记录划分 成几组(缩小增量分组),从而减少参与直接插入排序的数据量,当经过几次分组排序后,记录的排列已经基本有 序,这个时候再对所有的记录实施直接插入排序。(3)13,24,33,65,70,56,48,92,80,112(4)采用树型锦标赛排序选出最小关键字至少要15次比较。再选出次小关键字比较4次。 (两两比较8次选出8 个优胜,再两两比较4次选出4个优胜,半决赛两场,决赛一场,共比较了15次。将冠军的叶子结点改为最大值, 均与兄弟比较,共4次选出亚军。)"},{"id":"learncoder_106_16798","stem":"内排序的过程中,通常需要对待排序的关键字集合进行多遍扫描。采用不同排序方法,会产生不同的中间结果。设要将序列(Q,H,C,Y,P,A,M,S,R,D,F,X)中的关键字按字母序的升序重新排列,请分别给岀对该序列进行冒泡排 序,初始步长为4的希尔排序,二路归并排序及以第一个元素为分界元素的快速排序的第一趟扫描的结果,并给岀 对该序列作堆排序时初始建堆的结果。【长沙铁道学院 1998 四、5】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)冒泡排序(H, C, Q, P, A,M, S, R, D, F, X, Y)(2)初始步长为4的希尔排序(P, A, C, S, Q, D, F, X, R, H, M, Y)(3)二路归并排序(H, Q, C, Y, A, P, M, S, D, R, F, X) (4)快速排序(F, H, C, D, P, A, M, Q, R, S, Y, X)初始建堆:(A, D, C, R, F, Q, M, S, Y, P, H, X)"},{"id":"learncoder_106_16795","stem":"填空并回答相关问题(1)下面是将任意序列调整为最大堆(MAX HEAP)的算法,请将空白部分填上:将任意序列调整为最大堆通过不断调用adjust函数,即:FOR (i=n/2; i >0; i--) adjust (list,其中list为待调整序列所在数组(从下标1开始),n为序列元素个数,adjust函数为:void adjust(int list[],int root,int n)/*将以root为下标的对应元素作为待调整堆的根,待调整元素放在list数组中,最大元素下标为n*/{int child,rootkey;rootkey=list[root];child=2*root;while(child<=n){if((child<n)&&(list[child]<list[child+1]))(1);if(rootkey〉list[child])break;else{List[(2)\t]=list[child];child*=2;}}list[child/2]=rootkey;}(2).判断下列序列能否构成最大堆:(12,70,33,65,24,56,48,92,86,33);若不能按上述算法将其调 整为堆,调整后的结果为:( )。 【浙江大学 1998 七 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)①child=child+1;②child/2\t(2)不能,调为大堆:92, 86, 56, 70, 33, 33, 48, 65, 12, 24"},{"id":"learncoder_106_16792","stem":"请回答下列关于堆(Heap)的一些问题:【清华大学2000五】(1)(4分)堆的存储表示是顺序的,还是链接的?(2)(4分)设有一个最小堆,即堆中任意结点的关键码均大于它的左子女和右子女的关键码。其具有最大值的 元素可能在什么地方?(3)(4分)对n个元素进行初始建堆的过程中,最多做多少次数据比较(不用大O表示法)?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)堆的存储是顺序的(2)最大值元素一定是叶子结点,在最下两层上。(3)在建含有n个元素、深度为h的堆时,其比较次数不超过4n,推导如下:由于第i层上的结点数至多是2i-1,以它为根的二叉树的深度为h-i+1,则调用n/2次筛选算法时总共进行的 关键字比较次数不超过下式之值:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image10.png'/>"},{"id":"learncoder_106_16797","stem":"在多关键字排序时,LSD和MSD两种方法的特点是什么?【北京邮电大学2001三、3 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"最高位优先(MSD)法:先对最高位关键字K0进行排序,将序列分成若干子序列,每个子序列中的记录都具有 相同的K0值,然后,分别就每个子序列对关键字K1进行排序,按K1值不同再分成若干更小的子序列,……,依次 重复,直至最后对最低位关键字排序完成,将所有子序列依次连接在一起,成为一个有序子序列。最低位优先(LSD)法:先对最低位关键字Kd-1进行排序,然后对高一级关键字Kd-2进行排序,依次重复,直至 对最高位关键字K0排序后便成为一个有序序列。进行排序时,不必分成子序列,对每个关键字都是整个序列参加排 序,但对K1 (0<=i<d-1)排序时,只能用稳定的排序方法。另一方面,按LSD进行排序时,可以不通过关键字比较 实现排序,而是通过若干次“分配”和“收集”来实现排序。"},{"id":"learncoder_106_16794","stem":"若有N个元素己构成一个小根堆,那么如果增加一个元素为Kn+1,请用文字简要说明你如何在log2n的时间内 将其重新调整为一个堆? 【中科院计算所 1999 三、2】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"K1到Kn是堆,在Kn+1加入后,将K1..Kn+1调成堆。设c=n+1, f= c/2,若Kf<=Kc,则调整完成。否则,Kf与K0交换; 之后,c=f,f= c/2 ,继续比较,直到Kf〈=K”或f=0,即为根结点,调整结束。"},{"id":"learncoder_106_16791","stem":"写岀用堆排序算法对文件F= (12, 3, 15, 30, 9, 28)进行排序时,初始堆及以后每挑好一个元素重新调整后 堆的状态,并指岀这里的堆和败者树的一个主要区别。【东南大学 1998 二】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"对具体例子的手工堆排序略。堆与败者树的区别:堆是n个元素的序列,在向量中存储,具有如下性质:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image9.png'/>由于堆的这个性质中下标i和2i、2i+1的关系,恰好和完全二叉树中第i个结点和其子树结点的序号间的关 系一致,所以堆可以看作是n个结点的完全二叉树。而败者树是由参加比赛的n个元素作叶子结点而得到的完全二 叉树。每个非叶(双亲)结点中存放的是两个子结点中的败者数据,而让胜者去参加更高一级的比赛。另外,还需 增加一个结点,即结点0,存放比赛的全局获胜者。"},{"id":"learncoder_106_16788","stem":"全国有10000人参加物理竞赛,只录取成绩优异的前10名,并将他们从高分到低分输岀。而对落选的其他考生,不需排岀名次,问此种情况下,用何种排序方法速度最快?为什么?【北京邮电大学 1996 一、3】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"在内部排序方法中,一趟排序后只有简单选择排序和冒泡排序可以选出一个最大(或最小)元素,并加入到已 有的有序子序列中,但要比较n-1次。选次大元素要再比较n-2次,其时间复杂度是0(n2)。从10000个元 个元素不能使用这种方法。而快速排序、插入排序、归并排序、基数排序等时间性能好的排序,都要等到最后才能 确定各元素位置。只有堆排序,在未结束全部排序前,可以有部分排序结果。建立堆后,堆顶元素就是最大(或最 小,视大堆或小堆而定)元素,然后,调堆又选岀次大(小)元素。凡要求在n个元素中选岀k(k<<n,k(或最小)元素,一般均使用堆排序。因为堆排序建堆比较次数至多不超过4n,对深度为k的堆,在调堆算法中进行的关键字的比较次数至多为2 (k-1)次,且辅助空间为0(1)。"},{"id":"learncoder_106_16793","stem":"解答问题(1)设某文件中待排序记录的排序码为72, 73, 71, 23, 94, 16, 05, 68,试画图表示岀树形选择排序(增序)过程的前三步。(2)试说明树形选择排序的基本思想。(3)树形选择排序与直接选择排序相比较,优缺点是什么?(4)堆排序是如何改进树形排序方法的?优点是什么?【山东大学 1999 五】 【山东工业大学 1999 五 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image11.png'/>(2)树形选择排序基本思想:首先对n个待排序记录的关键字进行两两比较,从中选岀n/2个较小者再两两比 较,直到选岀关键字最小的记录为止,此为一趟排序。我们将一趟选岀的关键字最小的记录称为“冠军”,而“亚 军”是从与“冠军”比较失败的记录中找岀,具体做法为:输岀“冠军”后,将其叶子结点关键字改为“最大值”, 然后从该叶子结点开始,和其左(或右)兄弟比较,修改从叶子结点到根结点路径上各结点的关键字,则根结点的 关键字即为次小关键字。如此下去,可依次选岀从小到大的全部关键字。(3)树形选择排序与直接选择排序相比较,其优点是从求第2个元素开始,从n-i+1个元素中不必进行n-i次 比较,只比较 log2n 次,比较次数远小于直接选择排序;其缺点是辅助储存空间大。(4)堆排序基本思想是:堆是n个元素的序列,先建堆,即先选得一个关键字最大或最小的记录,然后与序列 中最后一个记录交换,之后将序列中前n-1记录重新调整为堆(调堆的过程称为“筛选”),再将堆顶记录和当前堆 序列的最后一个记录交换,如此反复直至排序结束。优点是在时间性能与树形选择排序属同一量级的同时,堆排序 只需要一个记录大小供交换用的辅助空间,调堆时子女只和双亲比较。避免了过多的辅助存储空间及和最大值的比 较。"},{"id":"learncoder_106_16790","stem":"设有n个无序元素,按非递减次序排序,但只想得到前面长度为k的部分序列,其中n〉〉k,最好采用什么排序 方法?为什么?如果有这样一个序列{59,11,26,34,17,91,25},得到的部分序列是:{11,17,25},对于 该例使用所选择的方法实现时,共执行多少次比较?【东北大学 2002 一、4】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"用堆排序方法,详见第40题的分析。从序列{59,11,26,34,14,91,25}得到{11,17,25}共用14次比较。 其中建堆输岀11比较8次,调堆输岀17和25各需要比较4次和2次。"},{"id":"learncoder_106_16789","stem":"已知待排序的序列为(503,87,512,61,908,170,897,275,653,462),试完成下列各题。(1)根据以上序列建立一个堆(画岀第一步和最后堆的结果图),希望先输岀最小值。(2)输岀最小值后,如何得到次小值。(并画岀相应结果图)【同济大学 2001 二 (10分)】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image8.png'/>"},{"id":"learncoder_106_16796","stem":"回答问题:(1)设待排序的结点个数是n。试问堆排序算法在完成一次sift建堆,并且取走找到的最小关键码 后,是否还需要对于n-1个关键码从头开始建堆?为什么?(2)假定采用sift建堆算法。试问堆排序算法采用了怎样的节省存储空间的措施?堆排序完成后,heap中保存 了关键码值的升序排列还是降序排列? 【山东工业大学 1996 三、3】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)不需要。因为建堆后R[1]到R[n]是堆,将R[1]与R[n]交换后,R⑵到R[n-1]仍是堆,故对R[1]到R[n-1] 只需从R[1]往下筛选即可。(2)堆是n个元素的序列,堆可以看作是n个结点的完全二叉树。而树型排序是n个元素作叶子结点的完全二 叉树。因此堆占用的空间小。调堆时,利用堆本身就可以存放输岀的有序数据,只需要一个记录大小供交换用的辅 助空间。排序后,heap数组中的关键字序列与堆是大堆还是小堆有关,若利用大堆,则为升序;若利用小堆则为降 序。"},{"id":"learncoder_106_16785","stem":"已知快速排序和归并排序的算法分别如下所示:PR0CEDURE qksort(VAR r:listtype; s,t:integer);BEGINIF s<t THEN BEGINqkpass(r,s,t,k);qksort(r,s,k-1);qksortd(r,k+1,t)ENDEND;PR0CEDURE mergesort(VAR r,r1:listtype;s,t:integer);BEGINIF s=t THEN r1[s]:=r[s] ELSEBEGINMERGES0RT(r,r2,s,(s+t)DIV 2);MERGES0RT(r,r2,(S+t)DIV 2+1,t);MERGE(r2,s,(s+t)DIV 2,t,rl)ENDEND;若对下列关键字序列进行快速排序和归并排序,分别写岀三次调用过程qkpass和过程merge后的结果。 (98,36,77,42,23,65,84,10,59,37,61,18)。 【清华大学 1996 六 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"快速排序各次调用结果:一次调用:18,36,77,42,23,65,84,10,59,37,61,98次调用:10,18,77,42,23,65,84,36,59,37,61,98 三次调用:10,18,61,42,23,65,37,36,59,77,84,98 归并排序各次调用结果:一次调用36,98,42,77,23,65,10,84,37,59,18,61, (子文件长度为1,合并后子文件长度为2) 二次调用36,42,77,98,10,23,65,84,18,37,59,61 (子文件长度为2,合并后子文件长度为4)三次调用10,23,36,42,65,77,84,98,18,37,59,61 (第一子文件长度8,第二子文件长度为4)"},{"id":"learncoder_106_16787","stem":"判断下列序列是否是堆(可以是小堆,也可以是大堆,若不是堆,请将它们调整为堆)。(1)100,85,98,77,80,60,82,40,20,10,66(2)100,98,85,82,80,77,66,60,40,20,10(3)100,85,40,77,80,60,66,98,82,10,20(4)10,20,40,60,66,77,80,\t82,85,98,100","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)是大堆;\t(2)是大堆;(4)是小堆;(3)不是堆,调成大堆 100,98,66,85,80,60,40,77,82,10,20类似叙述(1):不是堆 调成大顶堆 92,86,56,70,33,33,48,65,12(2)①是堆 ②不是堆调成堆 100, 90, 80, 25, 85, 75, 60, 20, 10, 70, 65, 50(3)①是堆②不是堆调成大堆21, 9, 18, 8, 4, 17, 5, 6 (图略)(4):略"},{"id":"learncoder_106_16786","stem":"已知一关键码序列为:3,87,12,61,70,97,26,45。试根据堆排序原理,填写完整下示各步骤结果。【首 都经贸大学 1998 二、7】建立堆结构:交换与调整:(1)87 70 26 61 45 12 3\t97;(2)\t;(3)61 45 26 3 12 70 87\t97;(4)\t;(5)26 12 3 45 61 70 87\t97;(6)\t;(7)3 12 26 45 61 70 87 97;","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"建立堆结构:97,87,26,61,70,12,3,45\t(2)70,61,26,3,45,12,87,97(4)45,12,26,3,61,70,87,97\t(6)12,3,26,45,61,70,87,97"},{"id":"learncoder_106_16784","stem":"如果只要找岀一个具有n个元素的集合的第k(1WkWn)个最小元素,你所学过的排序方法中哪种最适合?给岀实现的思想。【北方交通大学 1998 六 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"在具有n个元素的集合中找第k(1<=k<=n)个最小元素,应使用快速排序方法。其基本思想如下:设n个元素 的集合用一维数组表示,其第一个元素的下标为1,最后一个元素下标为n。以第一个元素为“枢轴”,经过快速排 序的一次划分,找到“枢轴”的位置i,若i=k,则该位置的元素即为所求;若i>k,则在1至i-1间继续进行快速 排序的划分;若i〈k,则在i+1至n间继续进行快速排序的划分。这种划分一直进行到i=k为止,第i位置上的元 素就是第k (1<=k<=n)个最小元素。"},{"id":"learncoder_106_16783","stem":" PR0CEDURE qsort1(VAR list:afile;m,n:integer);2(设 list [m]. key<list [n+1]. key)3VAR i,j,k:integer;4BEGIN5WHILE m<n D06BEGIN7i:=m;j:=n+1; k:=list[m].key;8REPEAT9REPEAT i:=i+1 UNTIL list[i].key〉=k;10REPEAT j:=j-1 UNTIL list[j].key<=k;11IF i<j THEN interchange (list[i],list[j]);12UNTIL i〉=j;13interchange( list[m],list[j]);14IF n-j〉=j-m15THEN BEGIN qsort1(list,m,j+1);m:=j+1;END16ELSE BEGIN qsort1(list,j+1,n);n:=j-1;END17END;(0F WHILE)18END.问:(1)将第9、10行中的〉=, <=分别改成〉,<行吗?为什么?(2)该排序算法稳定否?举例说明(3)对输入文件(22, 3, 30, 4, 60, 11, 58, 18, 40, 16),列表表示该文件在每次调用qsort1时的状态 及相应m、n值。(4)若输入文件有n个记录,简要说明支持qsort1递归所需最大栈空间用量(设一层递归用一个单位栈空间)。【东南大学 1998 四 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":""},{"id":"learncoder_106_16782","stem":"下面是一改进了的快速分类算法","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)不可以,若m+1到n之间关键字都大于m的关键字时,<=k可将j定位到m 上,若为<=k则j将定位到m-1 上,将出界线,会造成错误。(2)不稳定,例如2, 1, 2', (m=1,n=3)对2, 1, 2'排序,完成会变成1, 2', 2。(3)各次调用qsort1的结果如下:一次调用 m=1, n=10\t11, 3, 16, 4, 18, 22, 58, 60, 40, 30 j=6二次调用 m=7, n=10\t11, 3, 16, 4, 18, 22, 40, 30, 58, 60 j=9 (右部)三次调用 m=10, n=10 不变,返回 m=7, n=8\t11, 3, 16, 4, 18, 22, 30, 40, 58, 60 j=8四次调用 m=9, n=8 不变,返回 m=7, n=7 返回 m=1, n=5 4, 3, 11, 16, 18, 22, 30, 40, 58, 60 j=3 (左部)五次调用 m=1, n=2 3, 4, 11, 16, 18, 22, 30, 40, 58, 60\tj=2六次调用 m=1, n=1 不变,返回 m=3, n=2 返回 m=4, n=5 3, 4, 11, 16, 18, 22, 30, 40, 58, 60 j=4七次调用m=4, n=3不变,返回 (注:一次划分后,左、右两部分调用算两次)(4)最大栈空间用量为0(logn)。"},{"id":"learncoder_106_16779","stem":"有一随机数组(25,84,21,46,13,27,68,35,20),现采用某种方法对它们进行排序,其每趟排序结果如下, 则该排 序方法是什么? 【武汉交通科技大学 1996 二、5 】初 始:25,84,21,46,13,27,68,35,20\t 第一趟:20,13,21,25,46,27,68,35,84第二趟:13,20,21,25,35,27,46,68,84\t第三趟:13,20,21,25,27,35,46,68,84","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"不是。因为当序列已有序时,快速排序将退化成冒泡排序,时间复杂度为0(n2)。当待排序序列无序,使每次 划分完成后,枢轴两侧子文件长度相当,此时快速排序性能最好。"},{"id":"learncoder_106_16776","stem":"已知某文件的记录关键字集为{50,10,50,40,45,85,80},选择一种从平均性能而言是最佳的排序方法进行排序,且说明其稳定性。【西安电子科技大学 1996 五】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)在最好情况下,假设每次划分能得到两个长度相等的子文件,文件的长度n=2k-1,那么第一遍划分得到两 个长度均为n/2的子文件,第二遍划分得到4个长度均为n/4的子文件,以此类推,总共进行k=log2(n+1)遍划 分,各子文件的长度均为1,排序完毕。当n=7时,k=3,在最好情况下,第一遍需比较6次,第二遍分别对两个子 文件(长度均为3, k=2)进行排序,各需2次,共10次即可。(2)在最好情况下快速排序的原始序列实例:4,1,3,2,6,5,7。(3)在最坏情况下,若每次用来划分的记录的关键字具有最大值(或最小值),那么只能得到左(或右)子文件, 其长度比原长度少1。因此,若原文件中的记录按关键字递减次序排列,而要求排序后按递增次序排列时,快速排 序的效率与冒泡排序相同,其时间复杂度为0(n2)。所以当n=7时,最坏情况下的比较次数为21次。(4)在最坏情况下快速排序的初始序列实例: 7,6,5,4,3,2,1,要求按递增排序。"},{"id":"learncoder_106_16781","stem":"对给定文件(28, 07, 39, 10, 65, 14, 61, 17, 50, 21)选择第一个元素28进行划分,写岀其快速排序第一遍的排序过程。【厦门大学 1998 七、1】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"移动:21, 07, [], 10, 65, 14, 61, 17, 50, 39\t17移动:21, 07, 17, 10, 65, 14, 61,[], 50, 39,65移动:21, 07, 17, 10, [], 14, 61, 65, 50, 39\t14移动:21,07,17,10,14,[28],61,65,50,39"},{"id":"learncoder_106_16778","stem":"我们知道,对于n个元素组成的线性表进行快速排序时,所需进行的比较次数与这n个元素的初始排序有关。 问: 【西安电子科技大学 2001计应用 五】【中国矿业大学 2000 六】(1)当n=7时,在最好情况下需进行多少次比较?请说明理由。(2)当n=7时,给岀一个最好情况的初始排序的实例。(3)当n=7时,在最坏情况下需进行多少次比较?请说明理由。(4)当n=7时,给岀一个最坏情况的初始排序的实例。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"该排序方法为快速排序。"},{"id":"learncoder_106_16775","stem":"快速排序的最大递归深度是多少?最小递归深度是多少?【清华大学 1999 一、1】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"平均性能最佳的排序方法是快速排序,该排序方法不稳定。初始序列: 50,10,50,40,45,85,80一趟排序: [45,10,50,40] 50 [85,80] 二趟排序: [40,10] 45 [50] 50 [80] 85三趟排序: 10,40,45,50,50,80,85"},{"id":"learncoder_106_16777","stem":"在内排序算法中,待排序的数据已基本有序时,花费时间反而最多的排序方法是哪种?【西安电子科技大学 2000计应用\t一、1 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":""},{"id":"learncoder_106_16774","stem":"对下面数据表,写岀采用SHELL排序算法排序的每一趟的结果,并标岀数据移动情况。(125, 11, 22,\t34,15,44,76,66,100,8,14,20,2,5,1)。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"设待排序记录的个数为n,则快速排序的最小递归深度为log2n +1,最大递归深度n。"},{"id":"learncoder_106_16773","stem":"在执行某个排序算法过程中,岀现了排序关键字朝着最终排序序列相反的方向的移动,从而认为该算法是不稳 定的。这种说法对么?为什么? 【东北大学 2001 一、1】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image7.png'/>1,11,2,5,15,8,14,34,20,22,66,100,44,76,125D=1\t1,2,5,8,11,14,15,20,22,34,44,66,76,100,125"},{"id":"learncoder_106_16780","stem":"快速排序是在所有情况下,排序速度最快吗?为什么?在何种情况下使用此排序法最好?【北京邮电大学 1993 一、1】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"初始序列:[28],07,39,10,65,14,61,17,50,21\t21移动:21, 07, 39, 10, 65, 14, 61, 17, 50"},{"id":"learncoder_106_16769","stem":"现有一文件F含有1000个记录,其中只有少量记录次序不对,且它们距离正确位置不远;如果以比 次数作为度量,那末将其排序最好采用什么方法?为什么?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"采用直接插入排序算法,因为记录序列已基本有序,直接插入排序比较次数少,且由于少量次序不对的记录与正确位置不远,使直接插入排序记录移动次数也相对较少,故选直接插入排序算法。"},{"id":"learncoder_106_16772","stem":"算法模拟() 设待排序的记录共7个,排序码分别为8,3,2,5,9,1,6。(1)用直接插入排序。试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序。(2)用直接选择排序。试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序。(3)直接插入排序算法和直接选择排序算法的稳定性如何?【山东工业大学 1997 四(】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"这种看法不对。本题的叙述与稳定性的定义无关,不能据此来判断排序中的稳定性。例如 5,4,1,2,3在第一趟 冒泡排序后得到4,1,2,3,5。其中4 向前移动,与其最终位置相反。但冒泡排序是稳定排序。快速排序中无这种现象。"},{"id":"learncoder_106_16771","stem":"设待排序的关键码分别为28, 13, 72, 85, 39, 41, 6, 20。按二分法插入排序算法已使前七个记录有序,中间结果如下:\t【山东工业大学 1996 七】613\t28\t39\t41\t72\t85\t20↑\t↑ ↑i=1\tm=4\tr=7试在此基础上,沿用上述表达方式,给岀继续采用二分法插入第八个记录的比较过程。(1)使用二分法插入排序所要进行的比较次数,是否与待排序的记录的初始状态有关?(2)在一些特殊情况下,二分法插入排序比直接插入排序要执行更多的比较。这句话对吗?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)直接插入排序第一趟\t(3)[8,3],2,5,9,1,6\t第二趟\t(2)[8,3,2],5,9,1,6\t第三趟\t(5)[8,5,3,2],9,1,6第四趟\t(9)[9,8,5,3,2],1,6\t第五趟\t(1)[9,8,5,3,2,1],6\t第六趟\t(6)[9,8,6,5,3,2,1](2)直接选择排序(第六趟后仅剩一个元素,是最小的,直接选择排序结束)第一趟\t(9)[9],3,2,5,8,1,6\t第二趟\t(8)[9,8],2,5,3,1,6\t第三趟\t(6)[9,8,6],5,3,1,2第四趟\t(5)[9,8,6,5],3,1,2\t第五趟\t(3)[9,8,6,5,3],1,2\t第六趟\t(2)[9,8,6,5,3,2],1(3)直接插入排序是稳定排序,直接选择排序是不稳定排序。"},{"id":"learncoder_106_16768","stem":"设与记录R1,R2,…,Rn对应的关键词分别是K1, K2,…,Kn。如果存在Ri和Rj使得j<i且Ki<K 证明经过一趟起泡后,一定有记录与Ri进 行交换.【吉林大学1996四、3】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"证明:起泡排序思想是相邻两个记录的关键字比较,若反序则交换,一趟排序完成得到一个极值。由题假设知Rj在Ri之前且Kj〉Ri,即说明Rj和Ri是反序;设对于Ri之前全部记录1—Ri-1(其中包括Kj中关键字最大为 Kmax>=Kj,故经过起泡排序前i-2次后,Ri-1的关键字一定为Kmax,又因Kmax>=Kj/Ri,故也和Ri=1为反丿 知Ri-1和Ri必定交换,证毕。"},{"id":"learncoder_106_16770","stem":"分析下面排序算法中各带标号语句的频度及此算法的时间复杂度,并指岀该算法是属于哪一种排序方法。 【北京邮电大学 1996 一、2】PROCEDURE sort (VAR a: ARRAY [1..n] OF integer);BEGIN1FOR i:=1 TO n-1 DO2[j:=i;3FOR k:=j+1 TO n DO4IF a[k]<a[j] THEN j:=k;5t:=a[i]; a[i]:=a[j]; a[j];=t]END;","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"各带标号语句的频度:(1)n\t(2)n-1\t(3)(n+2)(n-1)/2\t(4)n(n-1)/2\t(5)n-1时间复杂度0(n2),属于直接选择排序。6, 13, 28, 39, 41, 72, 85, 20 i=1↑ m=4↑ r=7↑20<39 i=1↑m=2↑r=3↑20>13 i=3 r=3 m=320<28 r=2 i=3将 r+1(即第3个)后的元素向后移动,并将 20 放入 r+1 处,结果为 6,13,20,28,39,41,72,85。(1)使用二分法插入排序所要进行的比较次数,与待排序的记录的初始状态无关。不论待排序序列是否有序, 已形成的部分子序列是有序的。二分法插入首先查找插入位置,插入位置是判定树查找失败的位置。失败位置只能 在判定树的最下两层上。(2)一些特殊情况下,二分法插入排序要比直接插入排序要执行更多的比较。例如,在待排序序列已有序的 情况下就是如此。"},{"id":"learncoder_106_16766","stem":"写岀下列排序算法的基本思想,并写岀对序列(23,12,35,47,16,25,36,19,21,16)进行排序时每一趟的结果。PROC bbsort(VAR r: sequence; n: integer);{r是一个数组}d:=1;\tpos[-1]:=1; pos[1]:=n;i:=1; exchanged:= true;WHILE exchanged DO [ exchanged:= false; WHILE i<〉pos[d] DO[IF (r「i]-r「i+d])*d〉0 THEN [r[i]与r「i+d ]交换;exchanged:=true;]; i:=i+d;]pos「d]:=pos「d]-d; i:=pos「d]; d:=-d;]ENDP;","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"答:此排序为双向起泡排序:从前向后一趟排序下来得到一个最大值,若其中发生交换,则再从后向前一趟排序,得到一个最小值。\t一趟:12,23,35,16,25,36,19,21,16,47二趟:12,16,23,35,16,25,36,19,21,47\t三趟:12,16,23,16,25,35,19,21,36,47四趟:12,16,16,23,19,25,35,21,36,47\t五趟:12,16,16,19,23,25,21,35,36,47六趟:12,16,16,19,21,23,25,35,36,47\t七趟:12,16,16,19,21,23,25,35,36,47"},{"id":"learncoder_106_16763","stem":"请阅读下列算法,回答问题PROCEDURE sort(r,n)BEGINFOR i:=2 TO n DOBEGINx:=r(i);r(O):=x;j:=i-1;WHILE x.key<r(j).key DOBEGINr(j+1):=r(j); j:=j-1END;r(j+1):=xENDEND;问题一:这是什么类型的排序算法,该排序算法稳定吗?问题二:设置r(O)的作用是什么?若将WHILE—DO语句中判断条件改为x.key〈=r(j).KEY,该算法将会有什么变化, 是否还能正确工作?【上海海运学院 1998 六 )】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)此为直接插入排序算法,该算法稳定。(2)r[0]的作用是监视哨,免去每次检测文件是否到尾,提高了排序效率。 采用x.key<=r[j].key描述算法后,算法变为不稳定排序,但能正常工作。"},{"id":"learncoder_106_16760","stem":"快排序、堆排序、合并排序、Shell排序中哪种排序平均比较次数最少,哪种排序占用空间最多,哪几种排序 算法是不稳定的?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"平均比较次数最少: 快速排序; 占用空间最多: 归并排序; 不稳定排序算法:快速排序、堆排序、希尔排序。"},{"id":"learncoder_106_16765","stem":"仔细阅读下面的过程,并回答有关的问题PROCEDURE unknownname(VAR A:array[1..500] OF integer;n:integer);VAR i,j,x:integer; b:boolean;BEGINb:=true; i:=1;WHILE (i<n) AND b DOBEGINb:=false;FOR j:=1 TO(1) DOIF(2)THEN BEGINx:=A[j] ; A[j] :=A[j+1] ;\tA「j+1]:=x;\t⑶END;i:=i+1;ENDEND; 【西安电子科技大学 2001计应用 六】(1)在\t中填上正确的语句,使该过程能完成预期的功能。(2)该过程使用的是什么排序方法?(3)当数组A的元素初始时已按值递增排序,该过程执行中会进行多少次比较?多少次交换?(4)当数组A的元素初始时已按值递减排序,该过程执行中会进行多少次比较?多少次交换?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)①499\t②A[j]〉A[j+1]\t③b:= true\t(2)冒泡排序(3)499次比较,0次交换(4)n(n-1)/2次比较,n(n-1)/2次交换(相当3n(n-1)/2次移动),本题中n=500,故有124750次比较和交换 (相当373250次移动)。"},{"id":"learncoder_106_16762","stem":"考虑由三个不同关键词构成的序列:{a,b,c},试画岀直接插入排序算法的二叉判定树。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image6.png'/>"},{"id":"learncoder_106_16761","stem":"欲求前k个最大元素,用什么分类方法好?为什么?什么是稳定分类?分别指岀下列算法是否是稳定分类算法, 或易于改成稳定分类算法? A.插入分类B.快速分类C.合并分类D.堆分类E.基数分类","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"求前k个最大元素选堆排序较好。因为在建含n个元素的堆时,总共进行的关键字的比较次数不超过4n,调整 建新堆时的比较次数不超过2log2n次。在n个元素中求前k个最大元素,在堆排序情况下比较次数最多不超过 4n+2klog2n。稳定分类是指,若排序序列中存在两个关键字值相同的记录Ri与Rj(Ki=Kj, i≠j)且Ri领先于Rj,若排序后 Ri与Rj的相对次序保持不变,则称这类分类是稳定分类(排序),否则为不稳定分类。A,C和E是稳定分类(排序),B和D是不稳定分类(排序)。"},{"id":"learncoder_106_16767","stem":"设要求从大到小排序。问在什么情况下冒泡排序算法关键字交换的次数为最大。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"对冒泡算法而言,初始序列为反序时交换次数最多。若要求从大到小排序,则表现为初始是上升序。"},{"id":"learncoder_106_16764","stem":"下面是冒泡排序算法,请阅读并完成该程序,并回答以下问题:PROCEDURE bubblesort (r,n)BEGINi:=1; m:=n-1; flag:=1;WHILE (i<=(1))AND(flag=(2)) DOBEGINflag:= (3)\t;FOR j:=1 TO m DOIF r[j].key>r[j+1].key THENBEGIN flag:= (4)\t; t:=r[j]; r[j]:=r[j+1]; r[j+1]:=tEND;i:=i+1;m:=m-1END;END.(1)请在上面横线上填上适当的语句,完成该算法程序。(2)设计标志flag的作用是什么?(3)该算法结点的最大比较次数和最大移动次数是多少?(4)该分类算法稳定吗? 【上海海运学院 1996 六\t1999 六】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)横线内容:①m\t②1\t③0\t④1(2)flag起标志作用。若未发生交换,表明待排序列己有序,无需进行下趟排序。(3)最大比较次数n(n-1)/2,最大移动次数3n(n-1)/2\t(4)稳定"},{"id":"learncoder_106_16753","stem":"利用比较的方法进行排序,在最坏的情况下,能达到的最好时间复杂性是什么?请给岀详细证明。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"假定待排序的记录有n个。由于含n个记录的序列可能岀现的状态有n!个,则描述n个记录排序过程的判定树必须有n!个叶子结点。因为若少一个叶子,则说明尚有两种状态没有分辨岀来。我们知道,若二叉树高度是h,则叶子结点个数最多为2h-1;反之,若有u个叶子结点,则二叉树的高度至少为log2U +1。这就是说,描述n个记录排序的判定树必定存在一条长度为 log2(n!) 的路径。即任何一个籍助“比较”进行排序的算法,在最坏情况下所需进行的比较次数至少是log2(n!)。根据斯特林公式,有log2(n!) =O(nlog2n)。即籍助于“比较”进行排序的算法在最坏情况下能达到的最好时间复杂度为O(nlog2n)。证毕。"},{"id":"learncoder_106_16759","stem":"在堆排序、快速排序和合并排序中:(1).若只从存储空间考虑,则应首先选取哪种排序方法,其次选取哪种排序方法,最后选取哪种排序方法?(2).若只从排序结果的稳定性考虑,则应选取哪种排序方法?(3).若只从平均情况下排序最快考虑,则应选取哪种排序方法?(4).若只从最坏情况下排序最快并且要节省内存考虑,则应选取哪种排序方法?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"(1)堆排序,快速排序,归并排序 (2)归并排序 (3)快速排序 (4)堆排序"},{"id":"learncoder_106_16756","stem":"快速排序,堆排序和希尔排序是时间性能较好的排序方法,也是稳定的排序方法。判断正误并改错。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"错误。快速排序,堆排序和希尔排序是时间性能较好的排序方法,但都是不稳定的排序方法。"},{"id":"learncoder_106_16758","stem":"对于堆积排序法,快速排序法和归并排序法,若仅从节省存储空间考虑,则应该首先选取其中哪种方法?其次 选取哪种方法?若仅考虑排序结果的稳定性,则应该选取其中哪种方法?若仅从平均情况下排序最快这一点考虑, 则应该选取其中哪些方法?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"从节省存储空间考虑:先选堆排序,再选快速排序,最后选择归并排序; 从排序结果的稳定性考虑:选择归并排序。堆排序和快速排序都是不稳定排序; 从平均情况下排序最快考虑:先选择快速排序。"},{"id":"learncoder_106_16755","stem":"简述直接插入排序,简单选择排序,2-路归并排序的基本思想以及在时间复杂度和排序稳定性上的差别。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"直接插入排序的基本思想是基于插入,开始假定第一个记录有序,然后从第二个记录开始,依次插入到前面有序的子文件中。即将记录R[i](2〈=i〈=n)插入到有序子序列R[1..i-1]中,使记录的有序序列从R[1.R[1..i],最终使整个文件有序。共进行n-1趟插入。最坏时间复杂度是0(n2),平均时间复杂度是0(n)杂度是O (1),是稳定排序。简单选择排序的基本思想是基于选择,开始有序序列长度为零,第i (1<=i〈n)趟简单选择排序是,R[i..n]的n-i+1记录中选岀关键字最小的记录,和第i个记录交换,使有序序列逐步扩大,最后整个文件有序。 共进行n-1趟选择。最坏时间复杂度是0(n2),平均时间复杂度是0(n2),空间复杂度是0(1),是不稳定排序。二路并归排序的基本思想是基于归并,开始将具有n个待排序记录的序列看成是n个长度为1的有序序列,然 后进行两两归并,得到 n/2 个长度为2的有序序列,再进行两两归并,得到 n/4 个长度为4的有序序列。如此 重复,经过log2n趟归并,最终得到一个长度为n的有序序列。最坏时间复杂度和平均时间复杂度都是0 (nlog2n), 空间复杂度是0(n),是稳定排序。"},{"id":"learncoder_106_16757","stem":"设LS是一个线性表,LS=(a1,a2,…,an),若采用顺序存储结构,则在等概率的前提下,插入一个元素需要平均移动的元素个数是多少?若元素插在ai与ai+1之间(0<=i<=n-1)的概率为(n-i) / (n* (n+1)/2),则插入一个元素需要 平均移动的元素个数又是多少?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"等概率(后插),插入位置0..n,则平均移动个数为n/2。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image5.png'/>"},{"id":"learncoder_106_16754","stem":"以下概念的区别:拓扑排序与冒泡排序。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"答:拓扑排序,是有向图的顶点依照弧的走向,找岀一个全序集的过程,主要是根据与顶点连接的弧来确定顶点序列;冒泡排序是借助交换思想通过比较相邻结点关键字大小进行排序的算法。"},{"id":"learncoder_106_16750","stem":"在执行某种排序算法的过程中岀现了排序码朝着最终排序序列相反的方向移动,从而认为该排序算法是不稳定 的,这种说法对吗?为什么? 【燕山大学 2001 三、4】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"这种说法不对。因为排序的不稳定性是指两个关键字值相同的元素的相对次序在排序前、后发生了变化,而题中叙述和排序中稳定性的定义无关,所以此说法不对。对4, 3, 2, 1起泡排序就可否定本题结论。"},{"id":"learncoder_106_16749","stem":"在各种排序方法中,哪些是稳定的?哪些是不稳定的?并为每一种不稳定的排序方法举岀一个不稳定的实例。【大连海事大学1996七、3\t】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/算法与数据结构考研试题精析(第二版)陈守孔/第9章/image4.png'/>"},{"id":"learncoder_106_16752","stem":"对一个由n个关键字不同的记录构成的序列,能否用比2n-3少的次数选岀该序列中关键字取最大值和 最小值的记录?请说明如何实现?在最坏的情况下至少进行多少次比较?","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"对于两个数x和y,经一次比较可得到最大值和最小值;对于三个数x,y,z,最多经3次比较可得最大值和最小值;对于n(n〉3)个数,将分成长为n-2和2的前后两部分A和B,分别找岀最大者和最小者:Max’ Min, MaxB、Mins,最后Max二{Max^Maxp}和Min二{Min^Mim} □对A使用同样的方法求岀最大值和最小值,直到元素个数不超过3。设C(n)是所需的最多比较次数,根据上述原则,当n〉3时有如下关系式:1,n=2;3,n =3;C(n)= C(n 2)+3 n >3通过逐步递推,可以得到:C(n)= 3n/2 -2。显然,当n〉=3时,2n-3〉3n/2-2。事实上,3n/2 -2是解决这一问题的比较次数的下限。"},{"id":"learncoder_106_16751","stem":"设有5个互不相同的元素a、b、c、d、e,能否通过7次比较就将其排好序?如果能,请列岀其比较过程;如果 不能,则说明原因。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"short_answer","answer":"可以做到。取a与b进行比较,c与d进行比较。设a〉b,c〉d(a<b和c<d情况类似),此时需2次比较,取b和d比较,若b>d,则有序a〉b〉d;若b<d时则有序c〉d〉b,此时已进行了 3次比较。再把另外两个元素按折半插入排序方法,插入到上述某个序列中共需4次比较,从而共需7次比较。"},{"id":"learncoder_106_16748","stem":"内部排序(名词解释)。 【燕山大学 1999 一、5 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"98.空","type":"short_answer","answer":"假设含n个记录的序列为{ R1,R2…,Rn },其相应的关键字序列为{ K1, K2,…,Kn },这些关键字相互之间 可以进行比较,即在它们之间存在着这样一个关系KS1<=KS2<=…<=KS”,按此固有关系将n个记录序列重新排列为{ RS1, Rs2…,Rsn }。若整个排序过程都在内存中完成,则称此类排序问题为内部排序。"},{"id":"learncoder_106_16747","stem":"下面是一改进了的快速排序算法,请填空并简要说明支持improveqsort递归所需要的最大栈空间用量。 PR0CEDURE improveqsort(VAR list:afile;m,n:integer);{设 list [m]. key<=list [n+1]. key}VAR i,j,k:integer;BEGINWHILE m<n D0BEGINi:=m; j:=n+1; k:=list[m].key;REPEATREPEAT i:=i+1\tUNTIL\tlist[i].key〉=k;REPEAT j:=j-1\tUNTIL\tlist[j].key<=k;IF i<j THEN interchange(list[i],list[j]); UNTIL i〉=j;interchange(list[m],list[j]);IF n-j〉=j-mTHEN BEGINimproveqsort(list, __1__);__2__\t;ENDELSE BEGIN improveqsort(list, __3__);__4__;ENDEND;\t{0F WHILE}END;\t【东南大学 2001 五(10分)】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空简答题","type":"blank","options":{"__1__":"m,j-1","__2__":"m:=j+1","__3__":"j+1,n","__4__":"n:=j-1 最大栈空间用量为 O(logn)。"}},{"id":"learncoder_106_16744","stem":"外部排序的基本方法是归并排序,但在之前必须先生成__1__。 【北京邮电大学2001 二、6】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":" 初始归并段(顺串)"}},{"id":"learncoder_106_16746","stem":"设输入的关键字满足k1〉k2〉…〉kn,缓冲区大小为m,用置换-选择排序方法可产生__1__个初始归并段【武汉大学 2000\t一、9】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"n/m"}},{"id":"learncoder_106_16745","stem":"磁盘排序过程主要是先生成__1__,然后对__2__合并,而提高排序速度很重要的是__3__,__4__方法来提高排序速度。\t【山东工业大学1995 一、4 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"初始归并段","__2__":"初始归并段","__3__":"减少外存信息读写次数(即减少归并趟数)","__4__":"增加归并路数和减少初始归并段个数。"}},{"id":"learncoder_106_16743","stem":"关键码序列(Q, H, C, Y, Q, A, M, S, R, D, F, X),要按照关键码值递增的次序进行排序,若采用初始步长为4的Shell排序法,则一趟扫描的结果是\t;若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是__1__。 【北京大学 1997 一、4 (4分)】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"(Q,A,C,S,Q,D,F,X,R,H,M,Y),(F,H,C,D,Q,A,M,Q,R,S,Y,X) "}},{"id":"learncoder_106_16742","stem":"__1__阅读下列程序说明和PASCAL程序,把应填入其中\t处的字句写在答题纸上。程序说明:本题给岀的是将数组a的元素a】,如…,a”从大到小排序的子程序。子程序采用改进的选择排序方法,该方法 基于以下思想:在选择第一大元过程中,a1与aj(j=n,n-1,・:2)逐个比较,若发现aJ1>a1,则aj1与a1变换,变换后新的如有性 质aj1>=at(j1<t<=n),若再有aj2〉a1(j2<j1),aj2与a1交换,则交换后的aj2也有性质aj2>=at(j2<t<=n)。如在挑选第一 大元过程中,与a1交换的元素有k(k>=0)个,依次为aj1,aj2,…,ajk,则它们都满足这一性质,它们的下标满足n>= j1〉j2〉…〉jk〉1。有了这些下标,在确定第二大元时,可只考虑a2与aj (j=jk,jk-1,・:3)逐个比较。倘若jk=2, 则可不经比较就知道它是第二大元。在选择第二大元过程中,将与a2交换过的元素下标也标记下来,可供选择其他大元使用,但在选择第二大元时,应保证与a2交换的那些位置上的新值也都满足上述性质,依次类推,顺序选择第一,第二,…,第n-1大元,实现对a的排序。设程序包含有常量和类型定义:CONST maxn=1000;TYPE vector=ARRAY[1..maxn] OF integer;index= 1..maxn;PROCEDURE sort(VAR a:vector;n:index)VAR p:vector; i,j,k,m,t:integer;BEGINk:=0; i:=1; m:=n;WHILE i<n DOBEGINFOR j:=m DOWNTO i+1 DOIF a[i]<a[j] THENBEGIN t:=a[i]; a[i]:=a[j]; a[j]:=t; k:=k+1; (__2__) END;REPEAT (__3__);IF (__4__) THEN (__5__)ELSE BEGIN m:=p[k]; k:=k-1; END;UNTIL (i<m) 0R (i=n);IF (__6__)BEGIN t:=a[i]; (__7__) ; (","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"p[k]:=j","__2__":"i:=i+1","__3__":"k=0","__4__":"m:=n","__5__":"m<n","__6__":"a[i]:=a[m]","__7__":"a[m]:=t"}},{"id":"learncoder_106_16741","stem":"设有字母序列{Q,D,F,X,A,P,N,B,Y,M,C,W},请写岀按2路归并排序方法对该序列进行一趟扫描后的结果 __1__。 【北方交通大学 2001 二、7】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"{D,Q,F,X,A,P,B,N,M,Y,C,W}"}},{"id":"learncoder_106_16737","stem":"PROC sift(VAR r:listtype;k,m:integer);{假设r[k+1.. m]中各元素满足堆的性质,本算法调整r[k]使整个序列r[k.. m]中各元素满足堆的性质„ } i:=k; j:= __1__; x:=r[k]. key; finished:二false; t:=r[k];WHILE (j<=m) AND NOT finished DO [IF(j<m) AND (__2__) THEN j:=j+1;IF x<=r [j]. key THEN finished: = __3__ELSE [r[i]:=__4__; i:=j; j:= ","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"2*i","__2__":"r[j].key>r[j+1].key","__3__":"true","__4__":"r[j] (5)2*i"}},{"id":"learncoder_106_16740","stem":"堆是一种有用的数据结构.堆排序是一种__1__排序,堆实质上是一棵__2__结点的层次序列。对含有N个元素 的序列进行排序时,堆排序的时间复杂度是__3__,所需的附加存储结点是__4__。关键码序列05, 23, 16, 68, 94, 72, 71, 73是否满足堆的性质__5__)。 【山东工业大学1996三、1 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"选择","__2__":"完全二叉树","__3__":"O(Nlog2N)","__4__":"O(1) ","__5__":"满足堆的性质"}},{"id":"learncoder_106_16739","stem":"堆是一种有用的数据结构。试判断下面的关键码序列中哪一个是堆__1__。①16, 72, 31, 23, 94, 53\t②94,\t53,\t31, 72,\t16, 23\t③16, 53, 23, 94, 31, 72④16, 31, 23, 94, 53, 72\t⑤94,\t31,\t53, 23,\t16, 72堆排序是一种类型的排序,它的一个基本问题是如何建堆,常用的建堆算法是1964年Floyd提出 对含有n个元素的序列进行排序时,堆排序的时间复杂度是__2__,所需要的附加结点是__3__。【山东工业大学1994 一、2】__4__","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"选择","__2__":"筛选法","__3__":"O(nlog2n)","__4__":"O(1)"}},{"id":"learncoder_106_16736","stem":"堆排序的算法时间复杂度为:__1__;。【合肥工业大学 1999 三、10 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"O(nlog2n)"}},{"id":"learncoder_106_16738","stem":"设n为结点个数,datatype为结点信息类型。为了进行堆排序,定义:TYPE node=RECORD key:integer;info:datatype END;VAR heap:ARRAY[1..n] OF node l,r,i,j:0..n ;x:node;在下面的算法描述中填入正确的内容,使其实现1964年Floyd提岀的建堆筛选法,要求堆建成后便找到了最小的 关键码。筛选算法 sift (l, r, heap):步1.[准备]i — l; j —__1__;x—heap[i]步2.[过筛]循环:当 _时反复执行(1).若 j<r 且 heap [j]. key>heap [j+1]. key 则__2__(2).若__3__一则」heap[i]—heap[j] ;__4__;__5__\t否则跳岀循环步3.[结束] heap[i] <— __6__ 【山东工业大学1996三、2(7分)】__7__","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"2*i","__2__":"j<=r","__3__":"j←j+1","__4__":"x.key>heap[j].key","__5__":"i←j","__6__":"j←2*i","__7__":"x"}},{"id":"learncoder_106_16735","stem":"在数据表有序时,快速排序算法的时间复杂度是__1__。【合肥工业大学 2001 三、10】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"O(n^2)"}},{"id":"learncoder_106_16734","stem":"快速排序在__1__的情况下最易发挥其长处。【长沙铁道学院 1998 二、5】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"设文件长度 n=2k-1,第一遍划分得到两个长度 n/2 的子文件,第二遍划分得到 4 个长度 n/4 的子文件,以此类推,总共进行 k=log2(n+1)遍划分,各子文件长度均为 1,排序结束。","type":"blank","options":{"__1__":"最好每次划分能得到两个长度相等的子文件。"}},{"id":"learncoder_106_16733","stem":"对于7个元素的集合{1, 2, 3, 4, 5, 6, 7}进行快速排序,具有最小比较和交换次数的初始排列次序为__1__。【长沙铁道学院 1997 二、1】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"(4,1,3,2,6,5,7)"}},{"id":"learncoder_106_16730","stem":"表插入排序的基本思想是在结点中设一指针字段,插入Ri时Rl到Ri-1己经用指针按排序码不减次序链结起 夹,这时采用顺序比较的方法找到Ri应插入的位置,做链表插入。如此反复,直到把Rn插入为止。(1)(6分)请完成下列表插人的算法;【山东工业大学 2000 五】 【山东大学 1998 五】①.R「0].LINK<—__1__\t; R[N].LINK<—__2__;②.循环,I以-1为步长,从__3__到__4__—执行(1)P<— R[0].LINK; Q<— 0(2)循环,当P〉0且__5__ 时,反复执行Q<—P; P<—__6__(3)R[Q].LINK—I;\tR[I].LINK—P(2)(2分)表插入排序的最大比较次数是__7__;(3)(2分)表插入排序的最小比较次数是__8__;(4)(2分)记录移动的次数是__9__;(5)(2分)需要附加的存储空间是__10__;(6)(2分)该排序算法是否是稳定的__11__\t。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"N","__2__":"0","__3__":"N-1","__4__":"1","__5__":"R[P].KEY<R[I].KEY","__6__":"R[P].LINK","__7__":"(N+2)(N-1)/2","__8__":"N-1","__9__":"0","__10__":"O(1)(每个记录增加一个字段)","__11__":"稳定(请注意 I 的步长为-1)"}},{"id":"learncoder_106_16729","stem":"下面的c函数实现对链表head进行选择排序的算法,排序完毕,链表中的结点按结点值从小到大链接。请在空框 处填上适当内容,每个空框只填一个语句或一个表达式:#include <stdio.h〉typedef struct node {char data; struct node *link; }node;node *select(node *head){node *p,*q,*r,*s;p=(node *)malloc(sizeof(node));p-〉link=head; head=p;while(p-〉link!=null){q=p-〉link; r=p;while (__1__){ if (q->link->data<r->link->data) r=q; q=q->link;}if (__2__) {s=r-〉link; r-〉link=s-〉link; s-〉link= (__3__); (__4__);}(__5__);} p=head; head=head-〉link; free(p); return(head);}","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"题中为操作方便,先增加头结点(最后删除),p 指向无序区的前一记录,r 指向最小值结点的前驱,一趟排序结束,无序区第一个记录与 r 所指结点的后继交换指针。","type":"blank","options":{"__1__":"q->link!=NULL","__2__":"r!=p","__3__":")p->link","__4__":"p->link=s","__5__":"p=p->link"}},{"id":"learncoder_106_16732","stem":"从平均时间性能而言,__1__排序最佳。【青岛大学 2001 六、5 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"快速"}},{"id":"learncoder_106_16727","stem":"对n个记录的表r[1..n]进行简单选择排序,所需进行的关键字间的比较次数为__1__。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"n(n-1)/2"}},{"id":"learncoder_106_16726","stem":"直接插入排序用监视哨的作用是__1__。【南京理工大学 2001 二、8 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"免去查找过程中每一步都要检测整个表是否查找完毕,提高了查找效率。 "}},{"id":"learncoder_106_16721","stem":"若不考虑基数排序,则在排序过程中,主要进行的两种基本操作是关键字的__1__和记录的__2__。【北京邮电大学 2001 二、7 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"比较","__2__":"移动 "}},{"id":"learncoder_106_16724","stem":"分别采用堆排序,快速排序,冒泡排序和归并排序,对初态为有序的表,则最省时间的是__1__算法,最费时间的是__2__算法。【福州大学 1998 二、10】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"冒泡","__2__":"快速 "}},{"id":"learncoder_106_16723","stem":"属于不稳定排序的有__1__。【青岛大学 2002 三、5】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"希尔排序,简单选择排序,快速排序,堆排序等"}},{"id":"learncoder_106_16725","stem":"不受待排序初始序列的影响,时间复杂度为0(N2)的排序算法是__1__,在排序算法的最后一趟开始之前,所有元素都可能不在其最终位置上的排序算法是__2__。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"简单选择排序","__2__":"直接插入排序(最小的元素在最后时)"}},{"id":"learncoder_106_16722","stem":"外排序的基本操作过程是__1__和__2__。【西安电子科技大学 1998 二、3 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"blank","options":{"__1__":"生成有序归并段(顺串)","__2__":"归并 "}},{"id":"learncoder_106_16728","stem":"用链表表示的数据的简单选择排序,结点的域为数据域data ,指针域next ;链表首指针为head ,链表无头 结点。selectsort(head)p=head;while (p__1__){q=p; r=__2__while (__3__){if (__4__) q=r;r=__5__ ;}tmp=q->data; q-〉data二p-〉data; p->data=tmp; p=__6__\t ;}","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"题中 p 指向无序区第一个记录,q 指向最小值结点,一趟排序结束,p 和 q 所指结点值交换,同时向后移 p 指针。","type":"blank","options":{"__1__":"!=null","__2__":"p->next","__3__":"r!=null ","__4__":"r->data<q->data","__5__":"r->next","__6__":"p->next"}},{"id":"learncoder_106_16714","stem":"设要将序列(q,h,c,y,p,a,m,s,r,d,f,x)中的关键码按字母升序重新排序,(1)()是初始步长为4的shell排序一趟扫描的结果;(2)()是对排序初始建堆的结果;(3)( )是以第一个元素为分界元素的快速一趟扫描的结果。 从下面供选择的答案中选岀正确答案填入括号内。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"(1) p,a,c,s,q,d,f,x,r,h,m,y(2) a,d,c,r,f,q,m,s,y,p,h,x(3) f,h,c,d,p,a,m,q,r,s,y,x","B":"(1) p,a,c,s,q,d,f,x,r,h,m,y(2) a,d,c,r,f,q,m,s,y,p,h,x(3) h\t,c,q,p,a,m\t,s,r,d,f,x,y","D":"(1) p,a,c,s,q,d,f,x,r,h,m,y(2) h,c,q,p,a,m,s,r,d,f,x,y(3) f,h,c,d,p,a,m,q,r,s,y,x","C":"(1) h,q,c,y,a,p,m,s,d,r,f,x(2) a,d,c,r,f,q,m,s,y,p,h,x(3) f,h,c,d,p,a,m,q,r,s,y,x"},"answer":"A"},{"id":"learncoder_106_16713","stem":"排序方法有许多种法从未排序的序列中依次取岀元素,与已排序序列(初始时为空)中的元素作比较, 将其放入已排序序列的正确位置上;法从未排序的序列中挑选元素,并将其依次放入已排序序列(初始时为空) 的一端;交换排序方法是对序列中的元素进行一系列比较,当被比较的两元素逆序时,进行交换;(3)和(4)是 基于这类方法的两种排序方法,而(4)是比(3)效率更高的方法;(5)法是基于选择排序的一种排序方法,是 完全二叉树结构的一个重要应用。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"插入排序 基数排序 插入排序 基数排序 基数排序","D":"起泡排序 shell排序 快速排序 选择排序 插入排序","A":"插入排序 选择排序 快速排序 起泡排序 堆排序","C":"快速排序 选择排序 归并排序 堆排序 起泡排序"},"answer":"A"},{"id":"learncoder_106_16719","stem":"采用败者树进行 k 路平衡归并的外部排序算法,其总的归并效率与 k ()【北京工业大学 2000 一 、2 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"有关","B":"无关"},"answer":"A"},{"id":"learncoder_106_16716","stem":"将两个各有N个元素的有序表归并成一个有序表,其最少的比较次数是() 【中科院计算所 1998 二、7 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"N","C":"2N","B":"2N-1","D":"N-1"},"answer":"A"},{"id":"learncoder_106_16720","stem":"采用败者树进行 K 路平衡归并时,总的(包括访外)归并效率与 K()。【北京工业大学 2001 一、4 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空填空题","type":"choice","options":{"A":"有关","B":"无关"},"answer":"A"},{"id":"learncoder_106_16718","stem":"已知待排序的n个元素可分为n/k个组,每个组包含k个元素,且任一组内的各元素均分别大于前-有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界应为( )。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"O(klog2n)","D":"O(klog2k)","A":"O(nlog2n)","B":"O(nlog2k)"},"answer":"B"},{"id":"learncoder_106_16715","stem":"对由 n 个记录所组成的表按关键码排序时,下列各个常用排序算法的平均比较次数分别是:二路归并排序为(),直接插入排序为(),快速排序为(),其中,归并排序和快速排序所需要的辅助存储分别是()和()。 【上海海运学院 1998 二、4 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"0(log2n) 0(n2) 0(n(log2n)2) 0(1) 0(n)","A":"0(nlog2n) 0(n2) 0(nlog2n) 0(n) 0(log2n)","C":"0(n2) 0(n) O (log2n) 0(1) 0(nlog2n)","D":"0(n(log2n)2) 0(1) O(log2n) 0(n) 0(n2)"},"answer":"A"},{"id":"learncoder_106_16717","stem":"基于比较方法的n个数据的内部排序。最坏情况下的时间复杂度能达到的最好下界是()。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"0(logn)","A":"0(nlogn)","D":"0(n*n)","C":"0(n)"},"answer":"A"},{"id":"learncoder_106_16705","stem":"下列四个序列中,哪一个是堆(\t)。 【北京工商大学 2001 一、8 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"75,45,65,30,15,25,20,10","B":"75,65,45,10,30,25,20,15","D":"75,45,65,10,25,30,20,15","A":"75,65,30,15,25,45,20,10"},"answer":"C"},{"id":"learncoder_106_16712","stem":"就排序算法所用的辅助空间而言,堆排序,快速排序,归并排序的关系是\t()","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"E":"以上答案都不对","D":"堆排序〉快速排序〉归并排序","C":"堆排序〉归并排序〉快速排序","A":"堆排序〈快速排序〈归并排序","B":"堆排序〈归并排序〈快速排序"},"answer":"A"},{"id":"learncoder_106_16711","stem":"在排序算法中每一项都与其它各项进行比较,计算岀小于该项的项的个数,以确定该项的位置叫( )","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"枚举排序","D":"交换排序","A":"插入排序","C":"选择排序"},"answer":"B"},{"id":"learncoder_106_16708","stem":"对n个记录的文件进行堆排序,最坏情况下的执行时间是多少?(\t) 【北方交通大学 2001 一、9】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"0(log2n)","D":"0(n*n)","C":"0(nlog2n)","B":"0(n)"},"answer":"C"},{"id":"learncoder_106_16710","stem":"归并排序中,归并的趟数是( )。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"0(n*n)","A":"0(n)","C":"0(nlogn)","B":"0(logn)"},"answer":"B"},{"id":"learncoder_106_16707","stem":"在对n个元素的序列进行排序时,堆排序所需要的附加存储空间是(\t) 【西安电子科技大学2001应用一、 10 】。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"0(log2n)","D":"0(nlog2n)","C":"0(n)","B":"0(1)"},"answer":"B"},{"id":"learncoder_106_16709","stem":"有一组数据(15,9,7,8,20,-1,7,4),用堆排序的筛选方法建立的初始堆为 (\t)","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"-1,4,8,9,20,7,15,7","C":"-1, 4, 7, 8, 20, 15, 7, 9","D":"A, B, C 均不对。","B":"-1,7,15,7,4,8,20,9"},"answer":"C"},{"id":"learncoder_106_16706","stem":"堆排序是( )类排序,堆排序平均执行的时间复杂度和需要附加的存储空间复杂度分别是() 【西北大学 2001 二、2】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"基数 0 (n2)和 0 (n)","C":"归并 0 (nlog2n)和 0 (n)","A":"插入 0 (n2)和 0(1)","B":"交换 0 (nlog2n)和 0 (1"},"answer":"B"},{"id":"learncoder_106_16702","stem":"快速排序方法在( )情况下最不利于发挥其长处。 【燕山大学 2001 一、3 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"要排序的数据已基本有序","C":"要排序的数据个数为奇数","A":"要排序的数据量太大","B":"要排序的数据中含有多个相同值"},"answer":"D"},{"id":"learncoder_106_16699","stem":"对n个记录的线性表进行快速排序为减少算法的递归深度,以下叙述正确的是(\t) 【北方交通大学2000二、5 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"每次分区后,先处理较短的部分","D":"以上三者都不对","B":"每次分区后,先处理较长的部分","C":"与算法每次分区后的处理顺序无关"},"answer":"A"},{"id":"learncoder_106_16701","stem":"快速排序在最坏情况下的时间复杂度是(\t),比( )的性能差。【山东工业大学 1995 二、2 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"0(N2) 堆排序","A":"O(NlogN) 堆排序","C":"0(N2) 冒泡排序","D":"0(N3) 选择排序"},"answer":"B"},{"id":"learncoder_106_16704","stem":"以下序列不是堆的是( )。【西安电子科技大学 2001应用一、5 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"(10,20,40,60,66,77,80,82,85,98,100)","A":"(100,85,98,77,80,60,82,40,20,10,66)","B":"(100,98,85,82,80,77,66,60,40,20,10)","D":"(100,85,40,77,80,60,66,98,82,10,20)"},"answer":"D"},{"id":"learncoder_106_16703","stem":"在含有n个关键字的小根堆(堆顶元素最小)中,关键字最大的记录有可能存储在( )位置上。【中科院计算所2000 一、4】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"n/2","C":"1","B":"n/2 -1","D":"n/2 +2"},"answer":"D"},{"id":"learncoder_106_16700","stem":"当n个整型数据是有序时,对这n个数据用快速排序算法排序,则时间复杂度是(6 ),当用递归算法求n! 时,算法的时间复杂度是 ( 7 ),则:(6)-(7)=( )【南京理工大学1999 一、(6-7)】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"0(n)","D":"0(logn)","B":"0(nlogn)","C":"0(n*n)"},"answer":"C"},{"id":"learncoder_106_16698","stem":"对关键码序列28,16,32,12,60,2,5,72快速排序,从小到大一次划分结果为(\t)。【青岛大学 2000 三、4,】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"(2,16,12,5)28(60,32,72)","A":"(2,5,12,16)26(60,32,72)","D":"(5,16,2,12)28(32,60,72)","B":"(5,16,2,12)28(60,32,72)"},"answer":"B"},{"id":"learncoder_106_16696","stem":"对序列{15, 9, 7, 8, 20, -1, 4, }用希尔排序方法排序,经一趟后序列变为{15, -l, 4, 8, 20, 9, 7}则该次采用的增量是 (\t) 【南京理工大学 1999 一、15(1分)】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"4","C":"3","A":"l","D":"2"},"answer":"B"},{"id":"learncoder_106_16695","stem":"采用简单选择排序,比较次数与移动次数分别为( )。【南京理工大学 2000 一、18】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"0(nlogn),0(n)","A":"0(n),0(logn)","C":"0(n*n),0(n)","B":"0(logn),0(n*n)"},"answer":"C"},{"id":"learncoder_106_16697","stem":"对下列关键字序列用快速排序法进行排序时,速度最快的情形是(\t)。[北方交通大学 2001 一、18,】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"{21,25,5,17,9,23,30}","B":"{25,23,30,17,21,5,9}","C":"{21,9, 17, 30,25,23, 5}","D":"{5, 9, 17, 21, 23, 25, 30}"},"answer":"A"},{"id":"learncoder_106_16692","stem":"用直接插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是(\t)。【北方交通大学 2001 一、15 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"94,32,40,90,80,46,21,69","C":"21,32,46,40,80,69,90,94","D":"90,69,80,46,21,32,94,40","B":"32,40,21,46,69,94,90,80"},"answer":"C"},{"id":"learncoder_106_16694","stem":"若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小排序,需进行 ( )次比较。【南京理工大学 1999 一、11】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"10","A":"3","D":"25","C":"15"},"answer":"C"},{"id":"learncoder_106_16691","stem":"在排序算法中,每次从未排序的记录中挑岀最小(或最大)关键码字的记录,加入到已排序记录的末尾,该排 序方法是( )。【中山大学 1999 一、11】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"插入","B":"冒泡","A":"选择","D":"堆"},"answer":"A"},{"id":"learncoder_106_16693","stem":"直接插入排序在最好情况下的时间复杂度为(\t)【北京邮电大学 1999 一、5 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"0(n*logn)","B":"0(n)","D":"0(n2)","A":"0(logn)"},"answer":"B"},{"id":"learncoder_106_16689","stem":"下列排序算法中,占用辅助空间最多的是:( ) 【厦门大学 2002 五、2 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"快速排序","D":"堆排序","C":"希尔排序","A":"归并排序"},"answer":"A"},{"id":"learncoder_106_16686","stem":"如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用( )方法最快。清华大学 1998 一、2】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"Shell排序","B":"快速排列","A":"起泡排序","D":"堆排序","E":"简单选择排序"},"answer":"D"},{"id":"learncoder_106_16685","stem":"就平均性能而言,目前最好的内排序方法是( )排序法。【西安电子科技大学 1998 一、9 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"交换","D":"快速","A":"冒泡","B":"希尔插入"},"answer":"D"},{"id":"learncoder_106_16688","stem":"下列排序算法中,(\t)算法可能会岀现下面情况:在最后一趟开始之前,所有元素都不在其最终的位置上。【南开大学 2000\t一、4】 【西北大学 2001 二、1】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"堆排序","D":"插入排序","B":"冒泡排序","C":"快速排序"},"answer":"D"},{"id":"learncoder_106_16690","stem":"从未排序序列中依次取岀一个元素与已排序序列中的元素依次进行比较,然后将其放在已排序序列的合适位置, 该排序方法称为( )排序法。【北京航空航天大学 1999 一、8】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"选择","C":"希尔","A":"插入","D":"二路归并"},"answer":"A"},{"id":"learncoder_106_16687","stem":"在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是(\t) 【山东工业大学1995二、1 (2分)】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"简单选择排序","A":"直接插入排序","B":"冒泡排序"},"answer":"A"},{"id":"learncoder_106_16683","stem":"下列排序算法中,在每一趟都能选岀一个元素放到其最终位置上,并且其时间性能受数据初始特性影响的是:( )。","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"快速排序","C":"直接选择排序","A":"直接插入排序","D":"堆排序"},"answer":"B"},{"id":"learncoder_106_16680","stem":"一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次 划分结果为( )。 【燕山大学 2001】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"(40,38,46,79,56,84)","C":"(40,38,46,56,79,84)","A":"(38,40,46,56,79,84)","D":"(40,38,46,84,56,79)"},"answer":"C"},{"id":"learncoder_106_16682","stem":"下列排序算法中,在待排序数据已有序时,花费时间反而最多的是(\t)排序。【南京理工大学 2001 一、12】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"快速","D":"堆","B":"希尔","A":"冒泡"},"answer":"C"},{"id":"learncoder_106_16679","stem":"有一组数据(15,9,7,8,20,-1,7,4) 用快速排序的划分方法进行一趟划分后数据的排序为 (\t)(按递增序)。 【南京理工大学 1996 一、4 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"9, 7, 8, 4, -1, 7, 15, 20","A":"下面的 B, C, D 都不对。","D":"9,4,7,8,7,-1,15,20","C":"20,15,8,9,7,-1,4,7"},"answer":"A"},{"id":"learncoder_106_16681","stem":"在下面的排序方法中,辅助空间为0 (n)的是( )。【南京理工大学1999 一、17 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"希尔排序","D":"归并排序","B":"堆排序","C":"选择排序"},"answer":"D"},{"id":"learncoder_106_16678","stem":"下列序列中,(\t)是执行第一趟快速排序后所得的序列。 【福州大学 1998 一、9 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"[93,73]\t[68,11,69,23,18]","A":"[68,11,18,69]\t[23,93,73]","D":"[68,11,69,23,18]\t[93,73]","B":"[68,11,69,23]\t[18,93,73]"},"answer":"C"},{"id":"learncoder_106_16684","stem":"对初始状态为递增序列的表按递增顺序排序,最省时间的是( )算法,最费时间的是( )算法。【南开大学 2000一、5】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"归并排序 插入排序","D":"堆排序 归并排序","B":"插入排序 快速排序","C":"快速排序 堆排序"},"answer":"B"},{"id":"learncoder_106_16677","stem":"下列排序算法中(\t)排序在一趟结束后不一定能选岀一个元素放在其最终位置上。【南京理工大学 2001 一、7】【哈尔滨工业大学 2001 二、4】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"归并","B":"冒泡","A":"选择","D":"堆"},"answer":"C"},{"id":"learncoder_106_16673","stem":"对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为(1)\t84 47 25 15 21\t(2)\t15 47 25 84 21\t(3)\t15 21 25 84 47\t(4)\t15 21 25 47 84则采用的排序是 (\t)。 【南京理工大学 1997 一、2】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"冒泡","C":"快速","A":"选择","D":"插入"},"answer":"A"},{"id":"learncoder_106_16676","stem":"下列排序算法中(\t)不能保证每趟排序至少能将一个元素放到其最终的位置上。【合肥工业大学2001 一、3】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"冒泡排序","C":"堆排序","A":"快速排序","B":"shell排序"},"answer":"B"},{"id":"learncoder_106_16675","stem":" 对序列{15,9,7,8,20,-1,4}进行排序,若经一趟排序后的排列为{9,15,7,8,20,-1,4},则采用的是(\t)排序。 【南京理工大学1998 一、9 ()】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"直接插入","A":"选择","B":"堆","D":"冒泡"},"answer":"D"},{"id":"learncoder_106_16674","stem":"对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15};则采用 的是( )排序。【南京理工大学 1998 一、8】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"选择","B":"快速","C":"希尔","D":"冒泡"},"answer":"C"},{"id":"learncoder_106_16670","stem":"比较次数与排序的初始状态无关的排序方法是(\t)。【北方交通大学 2000 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"起泡排序","D":"简单选择排序","A":"直接插入排序","C":"快速排序"},"answer":"D"},{"id":"learncoder_106_16672","stem":"数据序列(2,1,4,9,8,10,6,20)只能是下列排序算法中的(\t)的两趟排序后的结果。【合肥工业大学 2000 一、3】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"快速排序","D":"插入排序","C":"选择排序","B":"冒泡排序"},"answer":"A"},{"id":"learncoder_106_16671","stem":"数据序列(8,9,10,4,5,6,20,1,2)只能是下列排序算法中的(\t)的两趟排序后的结果。【合肥工业大学 1999 一、3 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"插入排序","A":"选择排序","B":"冒泡排序","D":"堆排序"},"answer":"C"},{"id":"learncoder_106_16669","stem":"在下列排序算法中,哪一个算法的时间复杂度与初始排序无关( )。【北京理工大学 2001 六、4 (2】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"直接选择排序","B":"气泡排序","A":"直接插入排序","C":"快速排序"},"answer":"D"},{"id":"learncoder_106_16668","stem":"对下列四种排序方法,在排序中关键字比较次数同记录初始排列无关的是(\t)。【南京理工大学 2000 一、7 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"直接插入 快速排序","D":"快速排序 归并排序","C":"直接插入 二分法插入","B":"二分法插入\t归并排序"},"answer":"B"},{"id":"learncoder_106_16667","stem":"下面给岀的四种排序方法中,排序过程中的比较次数与排序方法无关的是。( ) 【北京航空航天大学 2000 一、10】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"选择排序法","C":"快速排序法","B":"插入排序法","D":"堆积排序法"},"answer":"A"},{"id":"learncoder_106_16664","stem":"下面的排序算法中,不稳定的是(\t) 【北京工业大学 1999 一、2 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"简单选择排序 希尔排序 堆排序","D":"希尔排序 堆排序 折半插入排序","B":"简单选择排序 折半插入排序 .起泡排序","C":"希尔排序 基数排序 起泡排序"},"answer":"A"},{"id":"learncoder_106_16666","stem":"排序趟数与序列的原始状态有关的排序方法是( )排序法。【北京航空航天大学 1999 一、9】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"冒泡 快速","D":"快速 插入","B":"选择 冒泡","A":"插入 选择"},"answer":"C"},{"id":"learncoder_106_16663","stem":"若需在0(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是( ) 【中国科技大学 1998 二、4】 【中科院计算所 1998 二、4】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"直接插入排序","C":"归并排序","A":"快速排序","B":"堆排序"},"answer":"C"},{"id":"learncoder_106_16665","stem":"下列内部排序算法中:(1) 其比较次数与序列初态无关的算法是( )(2)不稳定的排序算法是( )(3)在初始序列已基本有序(除去n个元素中的某k个元素后即呈有序,k<<n)的情况下,排序效率最高的算法是( )(4)排序的平均时间复杂度为O(n・logn)的算法是(\t)(5) 排序的平均时间复杂度为为O(n・n)的算法是(\t) 【北京工业大学 2000 一】(4) 快速排序 二路归并排序 堆排序 (5) 直接插入排序 简单选择排序 起泡排序(4) 快速排序 二路归并排序 起泡排序 (5) 直接插入排序 简单选择排序 堆排序(4) 快速排序 二路归并排序 堆排序 (5) 直接插入排序 简单选择排序 起泡排序(4) 快速排序 二路归并排序 起泡排序 (5) 直接插入排序 简单选择排序 堆排序","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"(1)简单选择排序 归并排序 (2) 快速排序 简单选择排序 (3) 直接插入排序","C":"(1) 快速排序 简单选择排序 (2) 简单选择排序 归并排序 (3)起泡排序","A":"(1)简单选择排序 归并排序 (2) 快速排序 简单选择排序 (3) 直接插入排序","D":"(1) 直接插入排序 快速排序 (2) 快速排序 简单选择排序 (3) 简单选择排序"},"answer":"A"},{"id":"learncoder_106_16662","stem":"若要求排序是稳定的,且关键字为实数,则在下列排序方法中应选(\t)排序为宜。【中科院计算所2000 一、5 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"堆","E":"基数","D":"快速","B":"直接选择","A":"直接插入"},"answer":"A"},{"id":"learncoder_106_16657","stem":"下面给岀的四种排序法中(\t)排序法是不稳定性排序法。【北京航空航天大学 1999 一、10 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"堆积","C":"二路归并","A":"插入","B":"冒泡"},"answer":"D"},{"id":"learncoder_106_16660","stem":"下列排序方法中,哪一个是稳定的排序方法?(\t) 【北方交通大学 2001 一、8】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"A":"直接选择排序","D":"快速排序","B":"二分法插入排序","C":"希尔排序"},"answer":"B"},{"id":"learncoder_106_16659","stem":"稳定的排序方法是(\t) 【北方交通大学 2000 二、3】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"树形选择排序和shell排序","A":"直接插入排序和快速排序","C":"简单选择排序和四路归并排序","B":"折半插入排序和起泡排序"},"answer":"B"},{"id":"learncoder_106_16656","stem":"某内排序方法的稳定性是指(\t)。 【南京理工大学 1997 一、10】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"D":"以上都不对","A":"该排序算法不允许有相同的关键字记录","C":"平均时间为0 (n log n)的排序方法","B":"该排序算法允许有相同的关键字记录"},"answer":"D"},{"id":"learncoder_106_16661","stem":"若要求尽可能快地对序列进行稳定的排序,则应选( ) 【北京邮电大学 2001 一、5】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"C":"冒泡排序。","A":"快速排序","B":"归并排序"},"answer":"B"},{"id":"learncoder_106_16658","stem":"下列排序算法中,其中(\t)是稳定的。 【福州大学 1998 一、3 】","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"空","type":"choice","options":{"B":"快速排序,堆排序","C":"直接选择排序,归并排序","D":"归并排序,冒泡排序","A":"堆排序,冒泡排序"},"answer":"D"},{"id":"learncoder_106_575","stem":"<p>给出n个学生的考试成绩表,每条信息由姓名与分数组成,试设计一个算法。 [扬州大学2017年]<br>  (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次。<br>  (2)按名次列出每个学生的姓名与分数。<br>  学生的考试成绩表通过键盘输入数据建立。可采用直接选择排序、直接插入、Shell排序、冒泡排序、快速排序、归并排序等排序算法实现。</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p>排序——排序算法的应用<br>  【参考答案】采用C语言描述算法,代码如下:<br>  #include&lt;stdio.h&gt;<br>  Struct node{<br>  charname[10];<br>  int score,rank;<br>  } student[1000];<br>  Bool visit[1000]={false};<br>  /*给排序后的学生分配名次*/<br>  Void rank(int n){<br>  student[0].rank=1;<br>  int rank=1;<br>  for(inti=l;i&lt;n;i++){<br>  if(student[i-1].score==student[i].score)<br>  student[i].rank=student[i-1].rank;<br>  else{<br>  student[i].rank=rank+1;<br>  rank++;<br>  }<br>  }<br>  }<br>  /*按学生成绩选择排序*/<br>  Void sort(int n){<br>  int idx;<br>  for(int i=0;i&lt;n-l;i++){<br>  idx=i;<br>  for(intj=i+l;j&lt;n;j++){<br>  if(student[j].score&gt;student[idx].score)<br>  idx=j;<br>  }<br>  node s=student[i];<br>  student[i]=student[idx];<br>  student[idx]=s;<br>  }<br>  rank(n);<br>  }<br>  Int main(){<br>  int n;<br>  printf(\"请输入学生人数:\");<br>  scanf(\"%d\",&amp;n);<br>  for(inti=0;i&lt;n;i++){<br>  printf(\"请输入学生%d的姓名和分数(空格分开):\",i+l);<br>  scanf(\"%s %d\",&amp;student[i].name,&amp;student[i].score);<br>  }<br>  sort(n);<br>  for(int i=0;i&lt;n;i++)<br>  printf(\"%s--&gt;&gt;%d--&gt;&gt;%d\\n\",student[i].name,student[i].score<br>  student[i].rank);<br>  return 0;<br>  }</p>","type":"short_answer","answer":"<p>【参考答案】采用C语言描述算法,代码如下:<br>  #include&lt;stdio.h&gt;<br>  Struct node{<br>  charname[10];<br>  int score,rank;<br>  } student[1000];<br>  Bool visit[1000]={false};<br>  /*给排序后的学生分配名次*/<br>  Void rank(int n){<br>  student[0].rank=1;<br>  int rank=1;<br>  for(inti=l;i&lt;n;i++){<br>  if(student[i-1].score==student[i].score)<br>  student[i].rank=student[i-1].rank;<br>  else{<br>  student[i].rank=rank+1;<br>  rank++;<br>  }<br>  }<br>  }<br>  /*按学生成绩选择排序*/<br>  Void sort(int n){<br>  int idx;<br>  for(int i=0;i&lt;n-l;i++){<br>  idx=i;<br>  for(intj=i+l;j&lt;n;j++){<br>  if(student[j].score&gt;student[idx].score)<br>  idx=j;<br>  }<br>  node s=student[i];<br>  student[i]=student[idx];<br>  student[idx]=s;<br>  }<br>  rank(n);<br>  }<br>  Int main(){<br>  int n;<br>  printf(\"请输入学生人数:\");<br>  scanf(\"%d\",&amp;n);<br>  for(inti=0;i&lt;n;i++){<br>  printf(\"请输入学生%d的姓名和分数(空格分开):\",i+l);<br>  scanf(\"%s %d\",&amp;student[i].name,&amp;student[i].score);<br>  }<br>  sort(n);<br>  for(int i=0;i&lt;n;i++)<br>  printf(\"%s--&gt;&gt;%d--&gt;&gt;%d\\n\",student[i].name,student[i].score<br>  student[i].rank);<br>  return 0;<br>  }</p>"},{"id":"learncoder_106_574","stem":"<p>写出基于顺序存储的直接插入排序算法(需要写出存储结构)。 [浙江工业大学2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p>排序——插入排序<br>  【参考答案】采用C语言描述算法,代码如下:<br>  Struct node{<br>  Int key;<br>  };<br>  typedef struct node DataType;<br>  /*直接插人排序算法*/<br>  Void Insert→Sort(DataType Ar[],intn){<br>  Int i,j;<br>  DataType temp;<br>  for(i=1;i&lt;n;i++){//总共要进行n-l扫<br>  temp=Ar[i];//每次扫描总是把被考察排序码存入临时单元<br>  j=i-1;//j规定了这次比较范围的上界<br>  while((temp.key&lt;Ar[j].key)&amp;&amp;(j&gt;=0){<br>  Ar[j+1]=Ar[j]<br>  j--;<br>  }<br>  Ar[j+1]=temp;//完成插入<br>  }<br>  }</p>","type":"short_answer","answer":"<p>采用C语言描述算法,代码如下:<br>  Struct node{<br>  Int key;<br>  };<br>  typedef struct node DataType;<br>  /*直接插人排序算法*/<br>  Void Insert→Sort(DataType Ar[],intn){<br>  Int i,j;<br>  DataType temp;<br>  for(i=1;i&lt;n;i++){//总共要进行n-l扫<br>  temp=Ar[i];//每次扫描总是把被考察排序码存入临时单元<br>  j=i-1;//j规定了这次比较范围的上界<br>  while((temp.key&lt;Ar[j].key)&amp;&amp;(j&gt;=0){<br>  Ar[j+1]=Ar[j]<br>  j--;<br>  }<br>  Ar[j+1]=temp;//完成插入<br>  }<br>  }</p>"},{"id":"learncoder_106_573","stem":"<p>解释希尔排序的算法思想。对以下的数据序列,给出希尔排序过程的示意图。<br>  (46,8,36,50,6,24,18,78,12,10)[南京航空航天大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p>排序——希尔排序<br>  【参考答案】希尔排序的算法思想:对于有n个数据的带排序序列,首先取一个整数gap(gap&lt;n)作为增量,将待排序元素分为gap个子序列,在每个子序列中分别进行直接插人排序,然后缩小增量gap的取值,重复上述子序列划分和排序工作,直到gap=1,即所有元素都在同一个序列中排序为止。<br>  希尔排序过程的示意图如下表所示<br>  趟数<br>  (0)<br>  (1)<br>  (2)<br>  (3)<br>  (4)<br>  (5)<br>  (6)<br>  ⑺<br>  (8)<br>  (9)<br>  gap<br>  初始<br>  46<br>  8<br>  36<br>  50<br>  6<br>  24<br>  18<br>  78<br>  12<br>  10<br>  <br>  1<br>  46<br>  <br>  <br>  <br>  <br>  24<br>  <br>  <br>  <br>  <br>  5<br>  <br>  <br>  8<br>  <br>  <br>  <br>  <br>  18<br>  <br>  <br>  <br>  <br>  <br>  <br>  <br>  36<br>  <br>  <br>  <br>  <br>  78<br>  <br>  <br>  <br>  <br>  <br>  <br>  <br>  50<br>  <br>  <br>  <br>  <br>  12<br>  <br>  <br>  <br>  <br>  <br>  <br>  <br>  6<br>  <br>  <br>  <br>  <br>  10<br>  <br>  结果<br>  24<br>  8<br>  36<br>  12<br>  16<br>  46<br>  18<br>  78<br>  50<br>  10<br>  <br>  2<br>  24<br>  <br>  <br>  12<br>  <br>  <br>  18<br>  <br>  <br>  10<br>  3<br>  <br>  <br>  8<br>  <br>  <br>  6<br>  <br>  <br>  78<br>  <br>  <br>  <br>  <br>  <br>  <br>  36<br>  <br>  <br>  46<br>  <br>  <br>  50<br>  <br>  <br>  结果<br>  10<br>  6<br>  36<br>  12<br>  8<br>  46<br>  18<br>  78<br>  50<br>  24<br>  <br>  3<br>  10<br>  <br>  36<br>  <br>  8<br>  <br>  18<br>  <br>  50<br>  <br>  2<br>  <br>  <br>  6<br>  <br>  12<br>  <br>  46<br>  <br>  78<br>  <br>  24<br>  <br>  结果<br>  8<br>  6<br>  10<br>  12<br>  18<br>  24<br>  36<br>  46<br>  50<br>  78<br>  <br>  4<br>  8<br>  6<br>  10<br>  12<br>  18<br>  24<br>  36<br>  46<br>  50<br>  78<br>  1<br>  结果<br>  6<br>  8<br>  10<br>  12<br>  18<br>  24<br>  36<br>  46<br>  50<br>  78<br>  <br>  </p>","type":"short_answer","answer":"<p>希尔排序的算法思想:对于有n个数据的带排序序列,首先取一个整数gap(gap&lt;n)作为增量,将待排序元素分为gap个子序列,在每个子序列中分别进行直接插人排序,然后缩小增量gap的取值,重复上述子序列划分和排序工作,直到gap=1,即所有元素都在同一个序列中排序为止。<br>  希尔排序过程的示意图如下表所示<br>  趟数<br>  (0)<br>  (1)<br>  (2)<br>  (3)<br>  (4)<br>  (5)<br>  (6)<br>  ⑺<br>  (8)<br>  (9)<br>  gap<br>  初始<br>  46<br>  8<br>  36<br>  50<br>  6<br>  24<br>  18<br>  78<br>  12<br>  10<br>  <br>  1<br>  46<br>  <br>  <br>  <br>  <br>  24<br>  <br>  <br>  <br>  <br>  5<br>  <br>  <br>  8<br>  <br>  <br>  <br>  <br>  18<br>  <br>  <br>  <br>  <br>  <br>  <br>  <br>  36<br>  <br>  <br>  <br>  <br>  78<br>  <br>  <br>  <br>  <br>  <br>  <br>  <br>  50<br>  <br>  <br>  <br>  <br>  12<br>  <br>  <br>  <br>  <br>  <br>  <br>  <br>  6<br>  <br>  <br>  <br>  <br>  10<br>  <br>  结果<br>  24<br>  8<br>  36<br>  12<br>  16<br>  46<br>  18<br>  78<br>  50<br>  10<br>  <br>  2<br>  24<br>  <br>  <br>  12<br>  <br>  <br>  18<br>  <br>  <br>  10<br>  3<br>  <br>  <br>  8<br>  <br>  <br>  6<br>  <br>  <br>  78<br>  <br>  <br>  <br>  <br>  <br>  <br>  36<br>  <br>  <br>  46<br>  <br>  <br>  50<br>  <br>  <br>  结果<br>  10<br>  6<br>  36<br>  12<br>  8<br>  46<br>  18<br>  78<br>  50<br>  24<br>  <br>  3<br>  10<br>  <br>  36<br>  <br>  8<br>  <br>  18<br>  <br>  50<br>  <br>  2<br>  <br>  <br>  6<br>  <br>  12<br>  <br>  46<br>  <br>  78<br>  <br>  24<br>  <br>  结果<br>  8<br>  6<br>  10<br>  12<br>  18<br>  24<br>  36<br>  46<br>  50<br>  78<br>  <br>  4<br>  8<br>  6<br>  10<br>  12<br>  18<br>  24<br>  36<br>  46<br>  50<br>  78<br>  1<br>  结果<br>  6<br>  8<br>  10<br>  12<br>  18<br>  24<br>  36<br>  46<br>  50<br>  78<br>  <br>  &nbsp;&nbsp;<br></p>"},{"id":"learncoder_106_572","stem":"<p>设有6个有序表A,B,C,D,E,F,分别含有10、35、40、50、60和200个数据元素,各表中元素按升序排列。要求通过5次两两合并,将6个表最终合并成1个升序表,并在最坏情况下比较的总次数达到最小。请回答下列问题:[全国联考2012年]<br>  (1)给出完整的合并过程,并求出最坏情况下比较的总次数。<br>  (2)根据你的合并过程,描述N(N&gt;2)个不等长升序表的合并策略,并说明理由。</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p>排序——二路归并排序<br>  【参考答案】(1)将两个有序表合并成一个升序表,最坏的情况是依次比较两个表中的元素,直到两个表都到表尾。把有序表中的数据元素个数作为权值,构造哈夫曼树如下图所示。<br>  <br>  依据哈夫曼树可得6个有序表的合并过程如下。<br>  第一次合并:有序表A和B合并,生成有序表AB含有45个元素。<br>  第二次合并:有序表AB和C合并,生成有序表,含有85个元素。<br>  第三次合并:有序表D和E合并。生成有序表含有110个元素。<br>  第四次合并:有序表ABC和DE合并,生成有序表ABCDE,含有195个元素。<br>  第五次合并:有序表ABCDE和F合并,生成有序表ABCDE即最终升序表,含有395个元素。<br>  对于长度分别为a和b的两个表,在最坏的情况下比较次数为a+b-l,因此每一次合并的比较次数如下。<br>  第一次合并:最多比较次数=10+35-1=44。<br>  第二次合并:最多比较次数=45+40-1=84。<br>  第三次合并:最多比较次数=50+60-1=109。<br>  第四次合并:最多比较次数=85+110-1=194。<br>  第五次合并:最多比较次数=195+200-1=394。<br>  综上所述,最坏情况下比较的总次数为44+84+109+194+394=825。<br>  (2)N(N≥2)个不等长升序表的合并策略:<br>  将升序表的长度当作权值,构造哈夫曼树,依次选择权值最小的两个表进行合并,最终获<br>  取最坏情况下比较总次数最小的合并效率。</p>","type":"short_answer","answer":"<p>(1)将两个有序表合并成一个升序表,最坏的情况是依次比较两个表中的元素,直到两个表都到表尾。把有序表中的数据元素个数作为权值,构造哈夫曼树如下图所示。<br>  <br>  依据哈夫曼树可得6个有序表的合并过程如下。<br>  第一次合并:有序表A和B合并,生成有序表AB含有45个元素。<br>  第二次合并:有序表AB和C合并,生成有序表,含有85个元素。<br>  第三次合并:有序表D和E合并。生成有序表含有110个元素。<br>  第四次合并:有序表ABC和DE合并,生成有序表ABCDE,含有195个元素。<br>  第五次合并:有序表ABCDE和F合并,生成有序表ABCDE即最终升序表,含有395个元素。<br>  对于长度分别为a和b的两个表,在最坏的情况下比较次数为a+b-l,因此每一次合并的比较次数如下。<br>  第一次合并:最多比较次数=10+35-1=44。<br>  第二次合并:最多比较次数=45+40-1=84。<br>  第三次合并:最多比较次数=50+60-1=109。<br>  第四次合并:最多比较次数=85+110-1=194。<br>  第五次合并:最多比较次数=195+200-1=394。<br>  综上所述,最坏情况下比较的总次数为44+84+109+194+394=825。<br>  (2)N(N≥2)个不等长升序表的合并策略:<br>  将升序表的长度当作权值,构造哈夫曼树,依次选择权值最小的两个表进行合并,最终获<br>  取最坏情况下比较总次数最小的合并效率。</p>"},{"id":"learncoder_106_571","stem":"<p>已知由n(n≥2)个正整数构成的集合A={a_k |0≤k≤n},将其划分为两个不相交的子集A_1和A_2.元素个数分别是n_1和n_2.,A_1和A_2.中元素之和分别为S_1和S_2.。设计一个尽可能高效的划分算法。满足丨n_1-n_2.丨最小且丨S_1-S_2|最大。要求:[全国联考2016年]<br>  (1)给出算法的基本设计思想。<br>  (2)根据设计思想,采用C或C+语言描述算法,关键之处给出注释。<br>  (3)说明你所设计算法的平均时间复杂度和空间复杂度。</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p>排序——排序算法的应用<br>  【参考答案】(1)算法的基本设计思想如下:<br>  若使| n1-n2|的值最小,则需要新生成的两个数组元素个数相等(n为偶数时)或相差一个元素(n为奇数时);若使丨S1-S2丨的值最大,则需要将A最小的元素放入A1中,将A中最大的元素放入A2中。<br>  综上所述,只需将最小的n/2个元素放入A1,其余元素放入A2即可得到满足题意的分组。采用快速排序的思想,选出A中的基轴,将A划分为两个子集,依据基轴的位置i进行如下处理:<br>   若i=[n/2],则分组完成。<br>  ②若i<[n/2],则基轴及其之前的元素属于A1,继续对i后面的元素划分。<br>  ③若i>[n/2],则基轴及其之后的元素属于A2,继续对i前面的元素划分。<br>  (2)采用C语言描述算法,代码如下:<br>  Int SubSet(int a[],intn){<br>  int key,i;<br>  int min=0;<br>  int mini=0;<br>  int max=0;<br>  int maxi=n-l;<br>  int flag=1;<br>  int k=n/2;<br>  int si=0;<br>  ints2=0;<br>  while(flag){<br>  key=a[min];//选出基数<br>  while(min&lt;max{|//根据基数划分子集<br>  while(min&lt;max&amp;&amp;a[max]&gt;=key)<br>  --max;<br>  if(min!=max)<br>  a[min]=a[max];<br>  while(min&lt;max&amp;&amp;a[min]&lt;=key)<br>  ++min;<br>  if(min!=max)<br>  a[max]=a[min];<br>  }<br>  a[min]=key;<br>  if(min==k-1){//如果基数是第n/2个小兀素,则划分成功<br>  flag=0;<br>  }<br>  else{//是否划分<br>  if(min&lt;k-l){<br>  min 1=++min;<br>  max=max 1;<br>  }<br>  Else{<br>  Max 1=--max;<br>  min=min 1;<br>  }<br>  }<br>  }<br>  for(i=0;i&lt;k;i++)<br>  s1+=a[i];<br>  for(i=k;i&lt;n;i++)<br>  s2+=a{i];<br>  returns2-s1;<br>  }<br>  (3)该算法不需要对所有元素进行排序,本参考答案算法的平均时间复杂度是O(n),空间夏杂度O(1)。</p>","type":"short_answer","answer":"<p>(1)算法的基本设计思想如下:<br>  若使| n1-n2|的值最小,则需要新生成的两个数组元素个数相等(n为偶数时)或相差一个元素(n为奇数时);若使丨S1-S2丨的值最大,则需要将A最小的元素放入A1中,将A中最大的元素放入A2中。<br>  综上所述,只需将最小的n/2个元素放入A1,其余元素放入A2即可得到满足题意的分组。采用快速排序的思想,选出A中的基轴,将A划分为两个子集,依据基轴的位置i进行如下处理:<br>   若i=[n/2],则分组完成。<br>  ②若i<[n/2],则基轴及其之前的元素属于A1,继续对i后面的元素划分。<br>  ③若i>[n/2],则基轴及其之后的元素属于A2,继续对i前面的元素划分。<br>  (2)采用C语言描述算法,代码如下:<br>  Int SubSet(int a[],intn){<br>  int key,i;<br>  int min=0;<br>  int mini=0;<br>  int max=0;<br>  int maxi=n-l;<br>  int flag=1;<br>  int k=n/2;<br>  int si=0;<br>  ints2=0;<br>  while(flag){<br>  key=a[min];//选出基数<br>  while(min&lt;max{|//根据基数划分子集<br>  while(min&lt;max&amp;&amp;a[max]&gt;=key)<br>  --max;<br>  if(min!=max)<br>  a[min]=a[max];<br>  while(min&lt;max&amp;&amp;a[min]&lt;=key)<br>  ++min;<br>  if(min!=max)<br>  a[max]=a[min];<br>  }<br>  a[min]=key;<br>  if(min==k-1){//如果基数是第n/2个小兀素,则划分成功<br>  flag=0;<br>  }<br>  else{//是否划分<br>  if(min&lt;k-l){<br>  min 1=++min;<br>  max=max 1;<br>  }<br>  Else{<br>  Max 1=--max;<br>  min=min 1;<br>  }<br>  }<br>  }<br>  for(i=0;i&lt;k;i++)<br>  s1+=a[i];<br>  for(i=k;i&lt;n;i++)<br>  s2+=a{i];<br>  returns2-s1;<br>  }<br>  (3)该算法不需要对所有元素进行排序,本参考答案算法的平均时间复杂度是O(n),空间夏杂度O(1)。&nbsp;&nbsp;<br></p>"},{"id":"learncoder_106_570","stem":"<p>26.设有1000个无序的元素,希望用最快的方法选出前10个最小的数据,最好用__1__排序。[南京理工大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p>【答案】堆排序。<br>  排序一堆排序<br>  【解析】在元素数量很多的无序序列中,并且只需要选出若干个最大或最小的数据,堆排序体现出了自身优势。因此采用堆排序可以最快选出前10个最小的数据。</p>","type":"blank","options":{"__1__":"堆排序"}},{"id":"learncoder_106_569","stem":"<p>排序方法中,从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置的方法,称为__1__。[上海海事大学2015年]<br>  </p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p>【答案】插入排序。<br>  排序插入排序<br>  【解析】插入排序是从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放人已排序序列的正确位置。</p>","type":"blank","options":{"__1__":"插入排序"}},{"id":"learncoder_106_568","stem":"<p>在对n个元素进行冒泡排序的过程中,最好情况下的时间复杂度为__1__。[上海海事大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p>【答案】O(n)。<br>  排序——起泡排序<br>  【解析】冒泡排序过程中,最好的情况是待排序元素序列有序,此时在两重for循环中,内层for循环中的if判断条件始终不成立,不进行元素位置交换,因此时间复杂度为O(n)。</p>","type":"blank","options":{"__1__":"O(n)"}},{"id":"learncoder_106_567","stem":"<p>下面程序的功能是实现冒泡排序算法,请在下划线处填上正确的语句。<br>  [上海海事大学2017年]<br>  Void bubble(int r[n]){<br>  Int i,j,exchange;<br>  for(i=1;i&lt;=n-l;i++){<br>  for(exchange=0,j=0;j&lt;__1__;j++)<br>  if(r[j]&gt;r[j+l]){<br>  int temp=r[j+1];<br>  __2__;<br>  r[j]=temp;<br>  exchange=1;<br>  }<br>  if(exchange==0)<br>  return;<br>  }<br>  }</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p>【答案】n-i-l;r[j+l]=r[j]。<br>  排序——起泡排序<br>  【解析】冒泡排序的算法思想如下:设待排序元素序列中有n个元素,首先比较第1个元素和第2个元素,如果发生逆序(前一个元素大于后一个元素),则将这两个元素交换;然后对第2个元素和第3个元素做同样的处理;重复此过程,直到处理完第n-1个元素和第n个元素,称为第一趟排序。第一趟排序之后,最大的元素交换到待排序元素序列第n个位置。下一趟排序时,上一趟确定的最大元素不参与排序,其余未确定最终位置的元素进行冒泡排序。每一趟排序后,本趟排序序列中的最大元素都移到了序列的末尾位置。这样重复进行,直到所有元素都移到了最终位置。<br>  本程序有两重for循环。在外层for循环中,i表示冒泡排序的趟数;在内层for循环中,j表示元素的位置,每一趟排序之后,本趟排序序列中的最大元素移到了序列的末尾位置,待排序元素序列少了一个元素,因此内层for循环中,j&lt;n-i-l。第二个空是实现元素交换位置功能,引入一个中间元素temp,先将第j+1个元素的排序码赋给temp,即再将第j个元素的排序码赋给第j+1个元素,即r[j+l]=r[j],最后将temp的值赋给第j个元素。</p>","type":"blank","options":{"__1__":"n-i-l","__2__":"r[j+l]=r[j]"}},{"id":"learncoder_106_566","stem":"<p>下列排序方法中,哪一种方法的比较次数与记录的初始排列状态无关?( )[桂林电子科技大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——插入排序;起泡排序;快速排序;简单选择排序<br>  【解析】直接插入排序算法的最坏情况是待排序元素序列是逆序的,第i趟时第i个元素必须与前面i个元素都进行比较,并且每一次比较都进行元素移动,因此时间复杂度为O(n2),;最好情况是待排序元素序列已经有序了,每一趟只需要与前面的有序序列的最后一个元素进行比较,因此每一趟只比较一次,总共比较n-1次,不进行元素移动,因此时间复杂度为O(n)。由此可见,直接插入排序的比较次数与记录的初始排列状态有关。<br>  冒泡排序算法的最坏情况是待排序元素序列是逆序的,外层for循环执行n-l次,对于外层for循环的每次执行,内层for循环执行n-i次,因此时间复杂度为0(n2);最好情况是待排序元素序列已经有序了,由于算法中使用了控制变量exchange,如果一趟下来没有进行元素交换,那么排序结束,因此最好的情况下,只需要进行n-1次比较和0次元素交换,因此时间复杂度为O(n)。由此可见,冒泡排序的比较次数与记录的初始排列状态有关。<br>  快速排序算法的最坏情况是待排序元素序列已经有序了,待排序元素序列越接近有序,算法效率越低;反之,待排序元素序列越接近无序,算法效率越高。由此可见,快速排序的比较次数与记录的初始排列状态有关。<br>  直接选择排序算法的双重for循环的执行次数都与初始序列没有关系,外层for循环执行n次,内层for循环执行n-1次。由于可见,直接选择排序的比较次数与记录的初始排列状态无关。</p>","type":"choice","options":{"A":"快速排序","B":"冒泡排序","C":"直接插入排序","D":"直接选择排序"},"answer":"D"},{"id":"learncoder_106_565","stem":"<p>在快速排序过程中,下列结论正确的是( )。[武汉科技大学2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序决速排序<br>  【解析】快速排序采用分治法进行排序。第一趟排序后,分成两个子序列,左子序列中的所有元素的排序码都不大于右子序列中的所有元素的排序码。</p>","type":"choice","options":{"A":"左、右两个子表都已各自排好序","B":"左边子表长度小于右边子表长度","C":"左、右两边元素的平均值相等","D":"左边的元素都不大于右边的元素"},"answer":"D"},{"id":"learncoder_106_564","stem":"<p>在下列排序算法中,需要线性辅助空间0(n)的算法是( )。 [杭州师范大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——各种排序算法的比较<br>  【解析】堆排序、希尔排序的辅助空间为0(1),归并排序的辅助空间为O(n),快速排序的辅助空间为0(log2n)?0(n)。</p>","type":"choice","options":{"A":"希尔排序(Shell sort)","B":"快速排序(Quick sort)","C":"堆排序(Heap sort)","D":"归并排序(Merge sort)"},"answer":"D"},{"id":"learncoder_106_563","stem":"<p>在下列排序算法中,平均时间复杂度为0(nlog2n)的是( )。 [杭州师范大学2017年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序各种排序算法的比较<br>  【解析】直接插入排序和起泡排序的平均时间复杂度为O(n2),快速排序的平均时间复杂度为O(nlog2n),基数排序的平均时间复杂度为0(dn)。</p>","type":"choice","options":{"A":"起泡排序(Bubble sort)","B":"快速排序(Quick sort)","C":"直接插入排序(Insertion sort)","D":"基数排序(Radix sort)"},"answer":"B"},{"id":"learncoder_106_562","stem":"<p>下列序列中,( )是执行第1趟快速排序后所得的序列。[中国科学院大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序I*速排序<br>  【解析】快速排序采用分治法进行排序。第一趟排序后,分成两个子序列,左子序列中的所有元素的排序码都大于或等于右子序列中的所有元素的排序码,或者左子序列中的所有元素的排序码都小于或等于右子序列中的所有元素的排序码。只有选项C符合。</p>","type":"choice","options":{"A":"[68,11,18,69][23,93,73]","B":"[68,11,69,23][18,93,73]","C":"[93,73][68,11,69,23,18]","D":"[93,73][68,11,69,23,18]"},"answer":"D"},{"id":"learncoder_106_561","stem":"<p>对{ 05,46,13,55,94,17,42}进行基数排序,一趟排序的结果是( )。[中国科学院大学2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——基数排序<br>  【解析】根据MSD基数排序,第1趟是按照十位数字的大小进行排序的,第2趟是按照个<br>  位数字的大小进行排序的。采用MSD基数排序的过程如下表所示。<br>  初始序列<br>  05<br>  46<br>  13<br>  55<br>  94<br>  17<br>  42<br>  第1趟<br>  05<br>  13<br>  17<br>  46<br>  42<br>  55<br>  94<br>  第2趟<br>  05<br>  13<br>  17<br>  42<br>  46<br>  55<br>  94<br>  根据LSD基数排序,第1趟是按照个位数字的大小进行排序的,第2趟是按照十位数字的大小进行排序的。采用MSD基数排序的过程如下表所示。<br>  初始序列<br>  05<br>  46<br>  13<br>  55<br>  94<br>  17<br>  42<br>  第1趟<br>  42<br>  13<br>  94<br>  05<br>  55<br>  46<br>  17<br>  第2趟<br>  05<br>  13<br>  17<br>  42<br>  46<br>  55<br>  94<br>  由此可知,只有选项C符合LSD基数排序第1趟分配收集后得到的关键字序列。</p>","type":"choice","options":{"A":"05,13,46,55,17,42,94","B":"42,13,94,05,55,46,17","C":"05,46,13,55,94,17,42","D":"05,13,17,42,46,55,94"},"answer":"B"},{"id":"learncoder_106_560","stem":"<p>.若数据元素序列11,12,]3,7,8,9,23,4,5是采用下列排序方法之一得到的第2趟排序后的结果,则该排序算法只能是( )。[全国联考2009年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序起泡排序;插入排序;简单选择排序;二路归并排序<br>  【解析】该数据元素的升序序列为4,5,7,8,9,11,12,13,23,降序序列为23,13,12,11,9,8,7,5,4,因此无论是升序排列还是降序排列,该第2趟排序后的数据元素序列中都没有元素在最终位置,而起泡排序和选择排序算法的每一趟排序结束后都至少能够使得1个元素在最终位置,因此排除选项A和C。二路归并排序经过2次排序之后,每4个元素都是有序的,然后该数据元素序列中没有4个元素是有序的,如11,12,13,7不是有序的,因此排除选项D。插入排序的每趟排序之后都能使得前面的若干个元素是有序的,该数据元素序列中前3个元素11,12,13是有序的,因此选项B是正确的。</p>","type":"choice","options":{"A":"选择排序","B":"二路归并排序","C":"起泡排序","D":"插入排序"},"answer":"D"},{"id":"learncoder_106_559","stem":"<p>已知关键字序列5,8,12,19,28,20,15,22是小根堆(最小堆),插入关键字3,调整后得到的小根堆是( )。[全国联考2009年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——堆排序<br>  【解析】堆排序是一种树形选择排序,在排序过程中将关键字序列看作是一棵完全二叉树的顺序存储结构。根据关键字序列可得到初始堆如下图所示。<br>  根据堆的定义,完全二叉树的所有叶节点的值均不大于其左、右孩子节点的值。因此在插入关键字之后,不满足堆的定义,因此需要进行调整,调整之后的小根堆如下图所示。<br>  <br>  在初始堆中插入关键字3后,如下图所示。<br>  <br>  根据堆的定义,完全二叉树的所有叶节点的值均不大于其左、右孩子节点的值。因此在插入关键字之后,不满足堆的定义,因此需要进行调整,调整后的小根堆如下图所示。<br>  <br>  由上图可知,调整之后的小根堆的序列为3,5,12,8,28,20,15,22,19。</p>","type":"choice","options":{"A":"3,8,12,5,20,15,22,28,19","B":"3,5,12,8,28,20,15,22,19","C":"3,12,5,8,28,20,15,22,19","D":"3,5,12,19,20,15,22,8,28"},"answer":"B"},{"id":"learncoder_106_558","stem":"<p>对一组数据(2,12,16,88,5,10)进行排序,若前三趟排序结果如下。<br>  第一趟排序结果:2,12,16,5,10,88。<br>  第二趟排序结果:2,12,5,10,16,88。<br>  第三趟排序结果:2,5,10,12,16,88。<br>  则采用的排序方法可能是( )。[全国联考2010年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——起泡排序;希尔排序;二路归并排序;基数排序</p><p>  【解析】在第一趟排序后,最大的元素88被移到最后的位置;在第二趟排序后,次大的元素16被移到倒数第二位;在第三趟排序后,第三大的元素12被移到倒数第三位。这符合起泡排序的特征,因此采用的排序方法可能是起泡排序。</p>","type":"choice","options":{"A":"起泡排序","B":"基数排序","C":"希尔排序","D":"归并排序"},"answer":"A"},{"id":"learncoder_106_557","stem":"<p>采用递归方式对顺序表进行快速排序。下列关于递归次数的叙述中,正确的是( )。[全国联考2010年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序-----快速排序<br>  【解析】快速排序中,递归次数与初始数据的排列次序有关;每次划分后,分区越平衡,递归次数越少,但是递归次数与每次划分后得到的分区的处理顺序无关。</p>","type":"choice","options":{"A":"每次划分后,先处理较短的分区可以减少递归次数","B":"递归次数与初始数据的排列次序无关","C":"递归次数与每次划分后得到的分区的处理顺序无关","D":"每次划分后,先处理较长的分区可以减少递归次数"},"answer":"C"},{"id":"learncoder_106_556","stem":"<p>已知序列25,13,10,12,9是大根堆,在序列尾部插入新元素18,将其再调整为大根堆,调整过程中元素之间进行的比较次数是( )。[全国联考2011年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——堆排序<br>  【解析】根据关键字序列可得到初始堆如下图所示。<br>  <br>  在初始堆中插入关键字18后,如下图所示。<br>  <br>  根据堆的定义,完全二叉树的所有叶节点的值均不大于其左、右孩子节点的值。因此在插入关键字之后,不满足堆的定义,因此需要进行调整。首先比较18和10,交换位置;再比较18和25,不交换位置。共比较了2次,调整后的大根堆如下图所示。<br>  </p>","type":"choice","options":{"A":"2","B":"5","C":"1","D":"4"},"answer":"A"},{"id":"learncoder_106_555","stem":"<p>为实现快速排序算法,待排序序列宜采用的存储方式是( )。[全国联考2011年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序一决速排序<br>  【解析】在快速排序算法中,既需要从前向后查找,又需要从后向前查找,要求存储结构具有随机存储特征,可以通过下标直接访问,因此待排序序列宜采用顺序存储。</p>","type":"choice","options":{"A":"链式存储","B":"索引存储","C":"顺序存储","D":"散列存储"},"answer":"C"},{"id":"learncoder_106_554","stem":"<p>对一待排序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是( )。[全国联考2012年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序插入排序<br>  【解析】折半插入排序和直接插入排序都是原地排序,但不同的是,折半插入排序是在有序区采用折半查找插入元素位置,当排序元素的个数较多时,元素之间的比较次数便会减少,时间性能比直接插入排序快,但是元素的移动次数不会减少,排序的总趟数也不会减少,辅助空间都为0(1)。</p>","type":"choice","options":{"A":"元素之间的比较次数","B":"元素的移动次数","C":"使用辅助空间的数量","D":"排序的总趟数"},"answer":"A"},{"id":"learncoder_106_553","stem":"<p>在内部排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一趟排序。下列排序方法中,每一趟排序结束时都至少能够确定一个元素最终位置的方法是( )。 [全国联考2012年]<br>  Ⅰ.简单选择排序<br>  Ⅱ.希尔排序<br>  Ⅲ快速排序<br>  IV.堆排序<br>  V.二路归并排序</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——简单选择排序;希尔排序;快速排序;堆排序;二路归并排序<br>  【解析】每趟排序结束时都至少能够确定一个元素的最终位置,这样的排序方法有简单选择排序、快速排序和堆排序。</p>","type":"choice","options":{"A":"仅Ⅱ、Ⅲ、IV","B":"仅Ⅲ、IV、V","C":"仅I、Ⅲ、V","D":"仅I、Ⅲ、IV "},"answer":"D"},{"id":"learncoder_106_552","stem":"<p>对给定的关键字序列110,119,007,911,114,120,122进行基数排序,则第2趟分配收集后得到的关键字序列是( )。[全国联考2013年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——基数排序<br>  【解析】根据MSD基数排序,第1趟是按照百位数字的大小进行排序的,第2趟是按照十位数字的大小进行排序的,第3趟是按照个位数字的大小进行排序的。采用MSD基数排序的过程如下表所示。<br>  初始序列<br>  110<br>  119<br>  007<br>  911<br>  114<br>  120<br>  122<br>  第1趟<br>  007<br>  110<br>  119<br>  114<br>  120<br>  122<br>  911<br>  第2趟<br>  007<br>  110<br>  119<br>  114<br>  120<br>  122<br>  911<br>  第3趟<br>  007<br>  110<br>  114<br>  119<br>  120<br>  122<br>  911<br>  根据LSD基数排序,第1趟是按照个位数字的大小进行排序的,第2趟是按照十位数字的大小进行排序的,第3趟是按照百位数字的大小进行排序的。采用MSD基数排序的过程如下<br>  初始序列<br>  110<br>  119<br>  007<br>  911<br>  114<br>  120<br>  122<br>  第1趟<br>  110<br>  120<br>  911<br>  122<br>  114<br>  007<br>  119<br>  第2趟<br>  007<br>  110<br>  911<br>  114<br>  119<br>  120<br>  122<br>  第3趟<br>  007<br>  110<br>  114<br>  119<br>  120<br>  122<br>  911<br>  由此可知,只有选项C符合LSD基数排序第2趟分配收集后得到的关键字序列。</p>","type":"choice","options":{"A":"007,110,119,114,911,122,120","B":"110,120,911,122,114,007,119","C":"007,110,119,114,911,120,122","D":"007,110,911,114,119,120,122"},"answer":"D"},{"id":"learncoder_106_551","stem":"<p>下列选项中,不可能是快速排序第2趟排序结果的是( )。[全国联考2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序决速排序<br>  【解析】快速排序的第〖趟排序结果中,至少有〖个元素在它最终的位置上。选项A中,2、3、6、7、9均符合,因此可能是快速排序第2趟排序结果;选项B中,2、9均符合,因此可能是快速排序第2趟排序结果;选项C中,只有9符合,因此不可能是快速排序第2趟排序结果;选项D中,5、9均符合,因此可能是快速排序第2趟排序结果.</p>","type":"choice","options":{"A":"2,7,5,6,4,3,9","B":"2,3,5,4,6,7,9","C":"4,2,3,5,7,6,9","D":"3,2,5,4,7,6,9"},"answer":"D"},{"id":"learncoder_106_550","stem":"<p>用希尔排序方法对一个数据序列进行排序时,若第1趟排序结果为9,1,4,13,7,8,20,23,15,则该趟排序采用的增量(间隔)可能是( )。[全国联考2014年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——希尔排序<br>  【解析】希尔排序又称为缩小增量排序。如果第1趟的增量为2,分为2个子序列,所有距离为2的元素放在同一个子序列中,对每个子序列中分别实行直接插入排序,则子序列第1趟排序结果分别为&lt;9,4,7,20,15&gt;和&lt;1,13,8,23&gt;,子序列无序,不符合;如果第1趟的增量为3,则3个子序列第1趟排序结果分别为&lt;9,13,20&gt;、&lt;1,7,23&gt;和&lt;4,8,15&gt;,子序列有序,符合;如果第1趟的增量为4,则4个子序列第1趟排序结果分别为&lt;9,7,15&gt;、&lt;1,8&gt;、&lt;4,20&gt;和&lt;13,23&gt;,子序列无序,不符合;如果第1趟的增量为5,则5个子序列第1趟排序结果分别为&lt;9,8&gt;、&lt;1,20&gt;、&lt;4,23&gt;、&lt;13,15&gt;和&lt;7&gt;,子序列无序,不符合。</p>","type":"choice","options":{"A":"2","B":"5","C":"3","D":"4"},"answer":"C"},{"id":"learncoder_106_549","stem":"<p>希尔排序的组内排序采用的是( )。[全国联考2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——希尔排序<br>  【解析】希尔排序是直接插入排序的变形与优化。希尔排序的设计思想是先将待排序元素分为若干个子序列,在每个子序列中分别进行直接插入排序,然后缩小元素间隔再进行排序,重复上述子序列划分和排序工作,直到所有元素都在同一个序列中排序为止。</p>","type":"choice","options":{"A":"快速排序","B":"直接插入排序","C":"折半插入排序","D":"归并排序"},"answer":"B"},{"id":"learncoder_106_548","stem":"<p>已知小根堆为8,15,10,21,34,16,12,删除关键字8之后需重建堆,在此过程中,关键字之间的比较次数是( )。[全国联考2015年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——堆排序<br>  【解析】堆排序是一种树形选择排序,在排序过程中将关键字序列看作是一棵完全二叉树的顺序存储结构。根据关键字序列可得到初始堆如下图所示。<br>  根据堆的定义,完全二叉树的所有叶节点的值均不大于其左、右孩子节点的值。因此在插<br>  <br>  删除关键字8之后,将12移到堆顶,如下图所示。<br>  <br>  根据堆得定义,完全二叉树的所有叶节点的值均不大于其左、右孩子节点的值。因此在插入关键字之后,不满足堆的定义,因此需要进行调整?首先比较15与10,接着比较10与12,最后比较12与16,因此比较了3次。调整之后的小根堆如下图所示。<br>  </p>","type":"choice","options":{"A":"2","B":"1","C":"3","D":"4"},"answer":"C"},{"id":"learncoder_106_547","stem":"<p>对10TB的数据文件进行排序,应使用的方法是( )。[全国联考2016年]</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——希尔排序;堆排序;快速排序;二路归并排序<br>  【解析】排序分为内排序与外排序。在排序期间,数据元素全部存放在内存中的排序,称为内排序;而如果数据元素太多而不能全部放在内存,根据排序过程的需要,将数据元素在内存.和外存之间不断移动的排序,称为外排序。10TB的数据文件太大了,在排序期间无法全部存放在内存中,因此需要使用外排序的方法。外排序常采用归并排序,而希尔排序、堆排序、快速排序都是内排序的方法。</p>","type":"choice","options":{"A":"希尔排序","B":"快速排序","C":"堆排序","D":"归并排序"},"answer":"D"},{"id":"learncoder_106_546","stem":"<p>下列排序方法中,若将顺序存储更换为链式存储,则算法的时间效率会降低的是( )。[全国联考2017年]<br>  I.插入排序 Ⅱ选择排序. Ⅲ起泡排序 Ⅳ希尔排序 V.堆排序</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——各种排序算法的比较<br>  【解析】插入排序、选择排序、起泡排序顺序存储时,时间复杂度是O(n2),更换为链式存储后,时间复杂度还是O(n2)。希尔排序和堆排序都利用了顺序存储的随机访问特性,而链式存储并不具有随机访问特性,所以算法的时间复杂度会增加,时间效率会降低。</p>","type":"choice","options":{"A":"仅Ⅲ、Ⅳ","B":"仅I、Ⅱ","C":"仅Ⅱ、Ⅲ","D":"仅Ⅳ、V"},"answer":"D"},{"id":"learncoder_106_545","stem":"<p>在内部排序时,若选择了归并排序而没有选择插入排序,则可能的理由是( )。[全国联考2017年]<br>  Ⅰ.归并排序的程序代码更短<br>  Ⅱ.归并排序的占用空间更少<br>  Ⅲ.归并排序的运行效率更高</p>","key_points":"知识点.练习.专业课练习.数据结构.排序","analysis":"<p><br>  排序——插入排序<br>  【解析】归并排序的时间复杂度是O(n log_2?n),空间复杂度是O(n);选择插入排序的时间复杂度是〇(n2),空间复杂度是0(1)。因此归并排序的占用空间比选择插入排序多,程序代码更长,但是运行效率更高。</p><p> </p>","type":"choice","options":{"A":"仅I、Ⅲ","B":"仅Ⅲ","C":"仅I、Ⅱ","D":"仅Ⅱ"},"answer":"B"},{"id":"learncoder_120_21873","stem":"假设程序PA和PB单独执行时所需的时间分别用TA和TB表示,并且假设TA=1,TB = 1.5 h,其中处理器工作时间分别为TA=18 min,TB=27 min,如果采用多道程序设计方法,让PA、PB并行工作,假定处理器利用率达到50%,另加15 min系统开销,请问系统效率能提高百分 之几?","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"在串行情况下,两个程序运行时间总和共计2.5 h,在并行方式下,处理器利用率为50%,说 明处理器的工作时间占总运行时间的50% ,根据已知条件,“处理器在处理程序A和程序B所需 的工作时间分别为Ta = 18 min,TB = 27 min。”,即总运行时间为(18+27)/50% ( min),考虑到还 有15 min系统开销,故并行与串行的效率比为并行处理所需的时间/串行处理所需要的时间总 和=[(18+27)/50% +15] min/2. 5 h = 70% , BP采用多道处理技术之后,完成程序A和程序B所 需的时间为串行处理方法的70% o因此可以说效率提高30%。"},{"id":"learncoder_120_21870","stem":"试修改下面生产者-消费者问题解法中的错误。producer:beginrepeatproducer an item in nextp ;wait (mutex);wait (full);buffer (in) : = nextp;signal (mutex);Until false;\t. ”endconsumer:beginrepeatwait ( mutex);wait ( empty);nextc: = buffer ( out);out: = out+1 ;signal (mutex);consumer item in nextc ;until false ;end","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"producer:beginrepeatproducer an item in nextp ;wait( mutex);wait (full) ; / * 应为 wait( empty) ,而且还应该在 wait( mutex)的前面 * /buffer(in) : = nextp ;\t/*缓冲池数组游标应前移:in: = (m+l) mod n; */signal( mutex) ;\t/ * signal(full) ; * /until false;end\tconsumer:\tbegin\trepeat\twait (mutex);wait( empty) ; / * 应为 wait (full),而且还应该在 wait( mutex)的前面 * /nextc: = buffer( out) ;\tout: =out+l; / * 考虑循环,应改为:out:=(out+1) mod n; */\tsignal( mutex);/ * signal( empty) ; * /\tconsumer item in nextc;\tuntil false;end"},{"id":"learncoder_120_21869","stem":"我们为某临界区设置一把锁W,当W=1时,表示关锁;W = 0时,表示锁已打开。试写出 开锁原语和关锁原语,并利用它们去实现互斥。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"开锁原语:unlock(W):\tW = 0;关锁原语:lock(W);\tif ( W = = 1) do no_op ;W=l;利用开关锁原语实现互斥:var W: semaphore: =0;begin\tparbegin\tprocess ;::begin\t\trepeatlock(W);critical sectionunlock ( W );remainder section\tuntil false ;\tendparend"},{"id":"learncoder_120_21866","stem":"在测量控制系统中的数据采集任务把所采集的数据送一个单缓冲区,计算任务从该单缓 冲区中取出数据进行计算。试写出利用信号量机制实现两者共享单缓冲区的同步算法。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"\tint mutex = 1 ;\tint empty = n ;\tint full = 0 ;\tint in = 0 ;\tint out = 0 ;main()\t{cobeginsend();obtain ( ) ;\tcoend}send()\t{ while (1)\t{ .\tcollect data in nextp ;\twait( empty) ;\twait (mutex);buffer (in) = nextp ;in= (in+1) mod n;signal ( mutex);signal (full);\t}} //send\tobtain ()\t{ while (1)\t{wait (full);wait( mutex);nextc: = buffer( out);out: = ( out+1) mod n ;signal (mutex);signal( empty) ;\tculculate the data in nextc ;\t} // while\t} //obtain"},{"id":"learncoder_120_21872","stem":"3个进程P1.P2.P3互斥使用厂个包含N个(M>0)单元的缓冲区,P1每次用produce() 生成一个正整数并用put()迭入缓冲区某一空单元中;P2每次用getodd()从该缓冲区中取出一 个奇数并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区中取出一个偶数并用 counteven()统计偶数个数。请用信号量机制实现这3个进程的同步与互斥活动,并说明所定义 的信号量的含义;要求用伪代码描述。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"定义信号量si控制P1与P2之间的同步;s2控制P1与P3之间的同步;empty控制生产者 与消费者之间的同步;mutex控制进程间互斥使用缓冲区。程序如下:\tVar si = 0, s2 = 0, empty = N, mutex = 1 ;ParbeginPl: beginX = produce ();/ *生成一个数* /P( empty); / *判断缓冲区是否有空单元* /P(mutqx3 = Put();/*缓冲区是否被占用*/If x%2= =0V(s2); else/ *如果是偶数,向P3发出信号* /V(s1)V( mutex); end./ *如果是奇数,向P2发出信号* / /*使用完缓冲区,释放*/\tP2: begin\tP(sl);\t/*收到Pl发来的信号,已产生一个奇数*/P(mutex) ;\t/*缓冲区是否被占用*/\tGetodd( ) ; Countodd( ) : = countodd( ) +1; V£mutex) ; / * 释放缓冲区 * /V( empty);\t/ *向Pl发信号,多出一个空单元* /end.Geteven( ) ; Counteven():=counteven( ) +1 ; V(mutex) ; / * 释放缓冲区 * /end.Parend.\t"},{"id":"learncoder_120_21871","stem":"如何利用管程来解决生产者-消费者问题?","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"定义信号量S1控制Pl与P2之间的同步;S2控制Pl与P3之间的同步;empty控制生产者 与消费者之间的同步;mutex控制进程间互斥使用缓冲区。程序如下:Var s1 = 0, s2 =0, empty =N, jnutex = 1 ;\tParbeginPl: begin\tX = produce( ) ; / * 生成一个数 * /P(empty) ;\t/ *判断缓冲区是否有空单元* /P(mutex) ;\t/*缓冲区是否被占用*/\tPut();\tKx%2==0\tV(s2); / *如果是偶数,向P3发出信号*/elseV(sl); /*如果是奇数,向P2发出信号*/V(mutex) ;\t/*使用完缓冲区,释放*/end. P2: beginP(sl); / *收到Pl发来的信号,已产生一个奇数*/P( mutex) ;\t/ *缓冲区是否被占用* /Getodd( ) ; Countodd( ) : = countodd( ) +1; V(mutex) ; / * 释放缓冲区 * /V(empty); / *向E1发信号,多出一个空单元*/end.P3 : beginP(s2)\t/*收到Pl发来的信号,已产生一个偶数*/P(mutex) ; /*缓冲区是否被占用*/Geteven( ) ; Counteven( ) : = counteven( ) +1; V( mutex) ; / * 释放缓冲区 * / “V(empty); / *向P1发信号,多出一个空单元* /end.Parend."},{"id":"learncoder_120_21868","stem":"为什么进程在进入临界区之前,应先执行“进入区”代码,在退出临界区后又执行“退岀 区”代码?","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"为了实现多个进程对临界资源的互斥访问,必须在临界区前面增加一段用于检查欲访问的 临界资源是否正被访问的代码,如果未被访问,该进程便可进入临界区对资源进行访问',并设置 正被访问标志,如果正被访问,则本进程不能进入临界区,实现这一功能的代码成为“进入区”代 码;在退出临界区后,必须执行“退出区”代码,用于恢复未被访问标志。"},{"id":"learncoder_120_21867","stem":"试利用记录型信号量写岀一个不会出现死锁的哲学家进餐问题的解决算法。一","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"\t设初始值为1的信号量c[I]表示I号筷子被拿(1 = 1,2,3 ,4,…,2“),其中“为自然数. send(I):Beginif I mod 2 = = 1 then{\tP(c[I]);P(c[I-l mod 5]);Eat;V(c[I-l mod5]);\tV(c[I]);}else{P(c[ 1-1 mod 5]);P(c[I]);\tEat;\tV(c[I]);\tV(c[ 1-1 mod 5]);End"},{"id":"learncoder_120_21862","stem":"下列选项中,操作系统提供的给应用程序使用的接口是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"在现代操作系统中,操作系统提供了包括系统调用、命令接口、图形接口等方便用户 使用系统资源的接口,在上述接口中,只有系统调用是提供给程序使用的。","type":"choice","options":{"A":"系统调用","B":"中断","D":"原语","C":"库函数"},"answer":"A"},{"id":"learncoder_120_21861","stem":"下列进程调度算法中,综合考虑进程等待时间和执行时间的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"在若干进程调度算法中,时间片轮转调度算法考虑的是时间分配上的均衡,最短进 程优先调度算法主要考虑的是短作业的等待时间,先来先服务调度算法考虑的是达到顺序的合 理性,而只有高响应比优先调度算法做到了综合考虑进程等待时间和执行时间。\t","type":"choice","options":{"C":"先来先服务调度算法","D":"高响应比优先调度算法","A":"时间片轮转调度算法","B":"最短进程优先调度算法"},"answer":"D"},{"id":"learncoder_120_21863","stem":" I •用户登录成功II •设备分配III •启动程序执行 下列选项中,导致创建新进程的操作是()","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"下列选项中,用户登录成功、启动程序执行均会导致创建新进程,而设备分配则 不会","type":"choice","options":{"C":"仅 I 和III","B":"仅II和III","A":"仅I和II","D":"I、II、III"},"answer":"C"},{"id":"learncoder_120_21865","stem":"什么是AND信号量?请利用AND信号量写岀生产者-消费者问题的解法。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"11. 空","type":"short_answer","answer":"为解决并行所带来的死锁问题,在wait操作中引入AND条件,其基本思想是将进程在整个 运行过程中所需要的所有临界资源一次性地全部分配给进程,用完后一次性释放。解决生产者-消费者问题可描述如下:var mutex,empty,full: semaphore: = 1n,0;buffer: array[0, …,n-l] of item;in,out: integer: =0,0;begin\tparbegin\tproducer: beginrepeat\tproduce an item in nextp ;wait( empty);wait(sl ,s2,s3 ,…,sn) ; //s1 ,s2, ••• ,sn为执行生产者进程除empty外其余的条件 wait( mutex),;buffer (in) : = nextp ;in: = (in+1) mod n;signal( mutex);signal (full);signal(s1 ,s2,s3,.......,sn);until false ;endconsumer: begin\trepeat\twait (full);wait(kl ,k2,k3 ,…,kn) ; //kl ,k2,.....kn为执行消费者进程除full外其余的条件 ” waix,( mutex);nextc: = buffer ( out);\tout: = (out+1) mod n;\tsignal (mutex);\tsignal( empty);\t\tsignal( kl ,k2 ,k3 ,…,kn);consume the item in nextc ;\tuntil false ;\t.endparend\tend\t"},{"id":"learncoder_120_21857","stem":"在操作系统中,(\t)是资源分配、调度和管理的最小单位。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"此题主要考查进程调度的基本概念等相关内容。进程的引入可以更好地描述系统中的并发活动。它被定义为一个具有独立功能的程序关于 某个数据集合的一次运行活动。在操作系统中,进程是进行系统资源分配、调度和管理的最小独 立单位,操作系统的各种活动都与进程有关。","type":"choice","options":{"C":"作业","A":"进程","B":"线程","D":"程序段"},"answer":"A"},{"id":"learncoder_120_21860","stem":"单处理机系统中,可并行的是()I•进程与进程 II •处理机与设备 III•处理机与通道 IV•设备与设备","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"在单处理机系统中,仅有一个处理机,所以在一个特定的时刻只能有一个进程能够 获得处理机的使用权,因而必须排除A、B和C,只有D是合理的答案。","type":"choice","options":{"D":"II,III和IV","A":"I,II和III","C":"I、III和IV","B":"I、II和IV"},"answer":"D"},{"id":"learncoder_120_21859","stem":"如果有一个进程从运行状态变成等待状态,或完成工作后就撤消,则必定会发生(\t)","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"此题主要考查进程切换的相关内容。进程调度将从就绪队列中另选一个进程占用处理器,使一个进程让出处理器,由另一个进程 占用处理器的过程称为“进程切换”。若有一个进程从运行状态变成等待状态,或者进程完成工 作后被撤消,则必定会发生“进程切换”;若一个进程从等待状态变成就绪状态,则不一定会发生 进程切换。","type":"choice","options":{"A":"进程切换","D":"死锁","B":"存储器再分配","C":"时间片轮转"},"answer":"A"},{"id":"learncoder_120_21858","stem":"在时间片轮转算法中,(\t)的大小对计算机性能有很大影响。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"此题主要考查在时间片轮转算法中时间片大小对于系统性能的重要性。\t在时间片轮转算法中,时间片的大小对计算机性能有很大影响a如果时间片划分不当,则系 统不能提供令用户满意的响应时间。时间片的大小应选择得适当,通常要考虑到以下几个因素:(1)系统对响应时间的要求;(2)就绪队列中进程的数目;(3)系统的处理能力。","type":"choice","options":{"A":"对换区","B":"分页","C":"时间片","D":"程序段"},"answer":"C"},{"id":"learncoder_120_21856","stem":"正在运行的进程,因某种原因而暂时停止运行,等待某个事件的发生,此时处于()状态。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"此题主要考查进程的基本状态及其转换等相关内容。在操作系统中,进程的三种基本状态之一的阻塞状态是指正在运行的进程,因某种原因而暂 停运行(如发生了 I/O请求等),等待某个事件的发生,导致进程不能继续运行且交出处理机时 的状态称为阻塞状态。","type":"choice","options":{"B":"完成","A":"运行","C":"就绪","D":"阻塞"},"answer":"D"},{"id":"learncoder_120_21215","stem":"(2016年统考真题)某进程调度程序采用基于优先数(priority)的调度策略,即选两择优先数最小的进程运行,进程创建时由用户指定一个nice作为静态优先数。为了动态调整优先数,引入运行时间cpuTime和等待时间waitTime,初值均为0。进程处于执行态时,cpuTime定时加1,且waitTime置0;进程处于就绪态时,cpuTime置0,waitTime定时加1。请回答下列问题。1)若调度程序只将nice的值作为进程的优先数,即priority=nice,则可能会出现饥饿现象,为什么?2)使用nice、cpuTime和waitTime设计一种动态优先数计算方法,以避免产生饥饿现象,并说明waitTime的作用。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"1)由于采用了静态优先数,当就绪队列中总有优先数较小的进程时,优先数较大的进程一直没有机会运行,因而会出现饥饿现象(2分)。.2)优先数priority的计算公式为priority=nice+k1×cpuTime-k2×waitTime,其中kl1>0,k2>0,用来分别调整cpuTime和waitTime在priority中所占的比例(3分).waitThme可使长时间等待的进程优先数减小,从而避免出现饥饿现象(1分)。【评分说明】①公式中包含nice给1分,利用cpuTime增大优先数给1分,利用waitTime减小优先数给1分。②若考生给出包含nice、cpuTime和waitTime的其他合理的优先数计算方法,同样给分."},{"id":"learncoder_120_21216","stem":"(2017年统考真题)某进程中有3个并发执行的线程threadl>thread2>thread3,其的代码如下所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image25.png'/>请添加必要的信号量和P、V(或waito、signalO)操作,要求确保线程互斥访问临界资源,并且最大程度地并发执行。参考答案及解析","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"】先找出线程对在各个变量上的互斥、并发关系。如果是一读一写或两个都是写,那么这就是互斥关系。每一个互斥关系都需要一个信号量进行调节oSemaphoremutex_y1=1;Mrmtex.y1用于thead1与thead3对变量y的互斥操作Semaphoremutex_y2=1;∥mutex_y2用于thead2与thead3对变量y的互斥操作SemaphoremuteX_z=1;MmtexL_z用于变量z的互斥访问互斥代码如下:(5分)<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image101.png'/>【评分说明】①各线程与变量之间的互斥、并发情况及相应评分见下表。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image102.png'/>②若考生仅使用一个互斥信号量,互斥代码部分的得分最多给2分。③答案部分正确,酌情给分。"},{"id":"learncoder_120_21214","stem":"(2015年统考真题)有A、B两人通过信箱进行辩论,每个人都从自己的信箱中取得对方的问题,将答案和向对方提出的新问题组成一个邮件放入对方的邮箱中。假设A的信箱最多放M个邮件,B的信箱最多放N个邮件。初始时A的信箱中有x(0<x<M)个邮件,B的信箱中有y(OvyvN)个。辩论者每取出一个邮件,邮件数减1。A和B两人的操作过程描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image24.png'/>当信箱不为空时,辩论者才能从信箱中取邮件,否则等待。当信箱不满时,辩论者才能将新邮件放入信箱,否则等待。请添加必要的信号量和P、V(或wait、signal)操作,以实现上述过程的同步。要求写出完整过程,并说明信号量的含义和初值。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image99.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image100.png'/>【评分说明】①每对信号量的定义及初值正确,给1分。②每个互斥信号量的P、v操作使用正确,各给2分。③每个同步信号量的P、v操作使用正确,各给2分。④其他答案酌情给分。"},{"id":"learncoder_120_21211","stem":"2013年统考真题)考虑某个系统在表2-19所示时刻的状态。使用银行家算法回答下面的问题。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image22.png'/>1))计算Need矩阵。2))系统是否处于安全状态?如安全,请给出一个安全序列。3))如果从进程P1发来一个请求(0,4,2,0),这个请求能否立刻被满足?如安全,请给出一个安全序列。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image92.png'/>2)Work向量初始值≒Available(1,5,2,0)由表2-27可知,因为存在一个安全序列(P0,P2,P1,P3),所以系统处于安全状态。3)Request1(0,4,2,0)<Needl(0,7,5,0)。Request1(0,4,2,0)<qivailable(1,5,2,0)。假设先试着满足P1进程的这个请求,则Available变为(1,1,0,0)。系统状态变化见表2-28。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image93.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image94.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image95.png'/>因为存在一个安全序列(Po,P2,Pl,P3),所以系统仍处于安全状态,即Pl的这个请求应该马上被满足。"},{"id":"learncoder_120_21208","stem":"关于处理器调度,试问:1)什么是处理器的三级调度?2)处理器的三级调度分别在什么情况下发生?3)各级调度分别完成什么工作?","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"1)处理器的三级调度是指一个作业在运行过程中要遇到的高级调度(作业调度)、中级调度(进程对换)和低级调度(进程调度)。不过,不是所有操作系统都有三级调度,有些只实现了其中的一级或两级,但是每个操作系统都有进程调度。图2-23死锁状态下的进程一资源图2)高级调度主要在需要从外存调入一个作业到内存中时发生;中级调度主要在内存紧张需要调出一些进程,或者内存空闲需要把先前调出的进程调回内存时发生;低级调度主要在正在执行的进程放弃CPU或者被其他优先级高的进程抢占CPU时发生。3)高级调度的主要工作是决定外存的后备队列中哪个进程被调入到内存中,并给这个作业创建进程,给分配它必要的资源;中级调度的主要工作是在内存紧张时把就绪队列中暂时得不到执行的进程换到外存,也负责在内存较空闲时把换到外存的进程调回内存,低级调度的主要工作是决定把CPU分配给就绪队列中的哪个进程。"},{"id":"learncoder_120_21212","stem":"某博物馆最多可容纳500人同时参观,有一个出入口,该出入口一次仅允许一个人啓通过。参观者的活动描述如下:,<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image23.png'/>请添加必要的信号量和P、V(或wait()、signal())操作,以实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"本题有两个临界资源:一个是出入口;另一个是博物馆。本题需要定义两个信号量:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image96.png'/>"},{"id":"learncoder_120_21209","stem":"假定要在一台处理器上执行表2-18中的作业,且假定这些作业在时刻0以1~5的顺序达到(数字越小,优先级越高)。说明分别使用FCFS、RR(时间片=1)、SJF以及非剥夺式优先级调度算法时,这些作业的执行情况。针对上述每种调度算法,给出平均周转时间和平均带权周转时间。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image21.png'/>","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"1)作业执行情况可以用甘特(Gantt)图表示,如图2-24所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image87.png'/>2)各个进程对应于各个算法的周转时闸和加权周转时间见表2-26。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image88.png'/>所以FCFS的平均周转时间为13.4s,平均加权周转时间为7.26s;RR的平均周转时间为9.2s,平均加权周转时间为2.84s;S皿的平均周转时间为7s,平均加权周转时间为1.74s;非剥夺式优先级调度算法的平均周转时间为12s,平均加权周转时间为6.36s。注:S皿的平均周转时间肯定是最短的,计算完毕后可以利用这个性质进行检验。"},{"id":"learncoder_120_21213","stem":"(2014年统考真题)系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出10件产品后,其他消费者进程才可以取产品。请使用信号量P、V(wait()、signal。)操作实现进程间的互斥与同步,要求写出完整的过程,并说明所用信号量的含义和初值。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"这是典型的生产者一消费者问题,只对典型问题加了一个条件,只需在标准模型上新加一个信号量,即可完成指定要求。设置4个变量mutex1、mutex2、empty和删10muteXl用于一个消费者进程一个周期(10次)内对于缓冲区的控制,初值为1;m加mutex2用于进程单次互斥地访问缓冲区,初值为1;empty代表缓冲区的空位数,描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image98.png'/>【评分说明】①信号量的初值和含义都正确,给2分。②生产者之间的互斥操作正确,给1分;生产者与消费者之间的同步操作正确,给2分;消费者之间的互斥操作正确,给1分。③控制消费者连续取产品数量正确,给2分。④仅给出经典生产者 ̄消费者问题的信号量定义和伪代码描述,最多给3分。⑤若考生将题意理解成缓冲区至少有10件产品,消费者才能开始取,其他均正确,得6分。⑥部分完全正确,酌情给分。"},{"id":"learncoder_120_21210","stem":"考虑由n个进程共享的具有m个同类资源的系统,证明:如果对i=l,2,…,n,有Needi>0而且所有最大需求量之和小于m+n,那么该系统是无法产生死锁的。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"解法1:本题中只有一种资源,不妨设Maxi为第i个进程的资源总需要量,Needi为第i个进程还需要的资源数量,Allocationi表示第i个进程已经分配到的资源数量,Availalble为系统剩余的资源数量,其中i=1,2,⋯,nO若n〒0,则没有进程,必然不会发生死锁,所以现在证明n≧1时的情形,如下所示:假设此系统可以发生死锁。系统剩余的资源数量为Available(Available≧0),由假设可知,因为系统处于死锁状态,Available个资源无法分配出去,所以每个进程的Needi都大于Available。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image89.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image90.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image91.png'/>"},{"id":"learncoder_120_21207","stem":"假定某计算机系统有R1设备3台、R2设备4台,它们被P1、P2、P3和P4这4个进程所共享,且已知这4个进程均以下面所示的顺序使用现有设备。->申请R1申请R2->申请R1->释放R1->释放R2->释放R1->1)系统运行过程中是否有产生死锁的可能?为什么?2)如果有可能产生死锁,请列举一种情况,并画出表示该死锁状态的进程资源图。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"1)系统运行过程中有可能产生死锁。根据题意,系统中只有3台R1设备,它们要被4个进程共享,且每个进程对R1设备的最大需求为2。由于R1设备数量不足,而且它又是一个互斥、不可被剥夺的资源,而系统又没采取任何措施破坏死锁产生的剩余两个必要条件一请求与保持条件和环路等待条件,因此,在系统运行过程中可能会发生死锁。2)当P1、P2、P3进程各得到一个R1设备时,它们可继续运行,并均可顺利地申请到一个垃设备;当第二次申请R1设备时,因为系统已无空闲的R1设备,故它们全部阻塞,并进入循环等待的死锁状态。这种死锁状态下的进程一资源图如图2-23<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image86.png'/>"},{"id":"learncoder_120_21205","stem":"进程P1、P2、P3共享一个表格F,P1对F只读不写,P2对F只写不读,P3对F先读后写。进程可同时读F,但有进程写时,其他进程不能读和写。要求:1)正常运行时不能产生死锁。2)F的并发度要高。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"】本题实际上就是一个读者一写者问题,P1是一个读者,P2是一个写者;为了使F的并发度较高,将P3先看作读者,当其完成该操作后再将其看作写者。算法中需用到如下变量定义:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image80.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image81.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image82.png'/>"},{"id":"learncoder_120_21202","stem":"设公共汽车上,司机和售票员的活动分别如下。司机的活动:起动车辆;正常行车;到站停车。售票员的活动:关车门;售票;开车门。在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?试用信号量和P、V操作实现它们的同步。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"司机活动和售票员活动如图2-22所示。在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后起动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开门让乘客上下车。因此,司机起动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车的动作取得同步。本题应设置两个信号量S1和S2,代码如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image73.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image74.png'/>"},{"id":"learncoder_120_21206","stem":"(2009年统考真题)3个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用produce()。生成一个正整数并用put。送入缓冲区的某一空闲单元中;P2每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区中取出一个偶数并用counteven()统计偶数个数。请用信号量机制实现这3个进程的同步与互斥活动,并说明所定义信号量的含义。要求用伪代码描述。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"】由于缓冲区是互斥资源,因此设互斥信号量为mtex。同步问题:P1、P2因奇数的放置与取用而同步,设同步信号量为odd;P1、P3因偶数的放置与取用而同步,设同步信号量为even;对空闲缓冲区设置资源同步信号量empty,初值为N。伪代码描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image83.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image84.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image85.png'/>"},{"id":"learncoder_120_21203","stem":"有一个烟草供应商和3个抽烟者。抽烟者若要抽烟,必须具有烟叶、烟纸和火柴。3个抽烟者中,一个有烟叶、一个有烟纸、一个有火柴。烟草供应商会源源不断地分别供应烟叶、烟纸和火柴,并将它们放在桌上。若他放的是烟纸和火柴,则有烟叶的抽烟者会拾起烟纸和火柴制作香烟,然后抽烟;其他类推。试用信号量同步烟草供应商和3个抽烟者。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image75.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image76.png'/>"},{"id":"learncoder_120_21200","stem":"某寺庙有小和尚和老和尚若干,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水。水桶总数为3个(老和尚和小和尚共同使用)。每次入水、取水仅为一桶,且不可同时进行。试给出有关取水、入水的算法描述。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"本题需要设置5个信号量:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image68.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image69.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image70.png'/>"},{"id":"learncoder_120_21204","stem":"有桥如图2-17所示。车流如箭头所示。桥上不允许有两车交汇,,但允许同方向车依次通行(即桥上可以有多个同方向的车)。用P、V操作实现交通管理以防桥上堵塞。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image20.png'/>","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"为了描述上述同步问题,需设置两个整型变量countA和courltB,分别表示由南往北和由北往南已在桥上行驶的汽车数目,它们的初值为0;再设置3个初值都为1的互斥信号量:SA用来实现对couritA的互斥访问,SB用来实现对countB的互斥访问,muteX用来实现两个方向的车辆对桥的互斥使用。由南往北过桥的车辆描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image77.png'/>由北往南过桥的车辆描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image78.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image79.png'/>"},{"id":"learncoder_120_21201","stem":"桌上有一空盘,允许存放一个水果。爸爸可向盘中放苹果,也可向盘中放橘子,儿子专等吃盘中的橘子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一个水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿3个并发进程的同步。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"在本题中,爸爸、儿子、女儿共用一个盘子,盘中一次只能放一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。若放入果盘中的是稿子,则允许儿子吃,女儿必须等待;若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。本题实际上是生产者一消费者问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。在本题中,应设置3个信号量S、S0、Sa.<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image71.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image72.png'/>"},{"id":"learncoder_120_21195","stem":"4个哲学家甲、乙、丙、丁,坐在圆桌前思考问题。甲乙间有筷子0,乙丙间有筷子1,依次类推。每个哲学家饥饿时,就试图取用两边的筷子,只有两根筷子都被拿到才开始进餐。请用p、v操作写出哲学家活动的同步执行程序。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"设置4个信号量chopstick0、chopstick1、chopstick2和chopstick3,初值为1,分别表示筷子是否可用。P0-P3表示4人活动的进程。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image57.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image58.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image59.png'/>本题是典型的哲学家进餐问题。为避免4个哲学家同时饥饿而各自拿起一根筷子,结果都因陷入无限期等待而死锁,本题采用的方法是甲、丙先拿起各自右边的筷子,然后拿左边的筷子,而乙、丁则相反(设想哲学家都面对圆桌而坐)。另外,解决死锁的方法还有:①至多只允许(n-1)个哲学家同时进餐,以保证至少一个哲学家能拥有两根筷子而可以进餐,最终会释放出他所使用的筷子,从而更多人可以进餐。②仅当哲学家的左右两根筷子同时可用时,才允许其拿起筷子进餐。下面给出至多允许3个哲学家进餐的解法,其中使用了信号量数组(信号量数组易于理书中没有展开详细叙述):<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image60.png'/>"},{"id":"learncoder_120_21192","stem":"有5个进程Pa、Pb、Pc、Pd和Pe,它们依次进入就绪队列,它们的优先级和需要的处理器时间见表2-16。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image15.png'/>忽略进程调度等所花费的时间,请回答下列问题。1)分别写出采用先来先服务调度算法和非抢占式的优先数(数字大的优先级低)调度算法中进程执行的次序。2)分别计算出上述两种算法使各进程在就绪队列中的等待时间及两种算法下的平均等待时间。3)某单处理器系统中采用多道程序设计,现有10个进程存在,则处于执行、阻塞和就绪状态的进程数量的最小值和最大值分别可能是多少?","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"注:这里需要提醒大家一点,有些题中对于进程到达的说法是“初始时刻依次进入”,通常这种或与此类似说法的含义是指如果按照先来先服务算法,应视作进程依次.到达,如果按照优先级算法,应视作进程同时到达,按照优先级执行。要注意与本题的区别。1)采用先来先服务调度算法时,进程调度次序是:Pa-Pb-Pc-Pd-Pe.采用非抢占式的优先数调度算法时,进程调度次序是:Pa-Pb-Pe-Pc-Pd.当采用优先级调度算法时,由于Pa到达时,还没有其他进程到达,因此选择Pa开始执行,注意与″初始时刻依次进入″的区别。2)采用先来先服务调度算法和非抢占式的优先数调度算法时,进程的调度次序见表2-25。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image50.png'/>3)执行状态:最少0个,最多1个。阻塞状态:最少0个,最多10个。就绪状态:最少0个,最多9个。"},{"id":"learncoder_120_21199","stem":"某高校计算机系开设网络课并安排上机实习,假设机房共有2m台机器,有2n名学生选课(m、n均大于或等于1),且有如下规定。1)每两个学生组成一组,各占一台机器协同完成上机实习。2)只有一组两个学生到齐,并且此时机房有空闲机器时,该组学生才能进入机房。3)上机实习由一名教师检查,检查完毕后一组学生同时离开机房。试用p、V操作实现其过程。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"本题中可设置一个隐含的进程,其作用相当于机房管理员,当有两个学生到达、并有空闲的机器时,它便″通知〃两个学生进入机房。相应的信号量和各个进程描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image65.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image66.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image67.png'/>"},{"id":"learncoder_120_21196","stem":"设有两个优先级相同的进程P1和P2,见表2-17信号量S1和S2的初值均为0,试问P1、P2并发执行结束后,X、y、Z的值各为多少?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image16.png'/>","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"可以将上述进程分解成以下6个程序段:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image61.png'/>并将它们的并发执行关系用前趋图(见图2-21)描述出来。根据Bemstein条件,程序PS1和PS4的确是能并发执行的,程序段PS2与PS5也能并发执行,而程序段PS3和PS6则不能并发执行,或者说它们的并发执行具有不可再现性。若先执行PS3,再执行PS6,则最后x、y、Z的值分别为6、7、10;若先执行PS6,再执行PS3,则最后x、y、Z的值分别为6、13、10。Bemstein条件是说两个过程如果有数据冲突,那么就没法并行执行,比如,过程A生成数据d,而过程B需要输入数据d,那么B就需要A的输入,它们就没法并行执行(写后读问题,RAW)。如果二者会影响后续过程需要的数据,尤其是该数据和它们执行的顺序关系密切,那么它们同样也不能并行执行(写后写问题,WAW)。"},{"id":"learncoder_120_21193","stem":"今有3个并发进程R、M、P,它们共享一个可循环使用的缓冲区B,缓冲区B共有N个单元。进程R负责从输入设备读信息,每读一个字符后,把它存入缓冲区B的一个单元中;进程M负责处理读入的字符,若发现读入的字符中有空格符,则把它改成“,”;进程P负责把处理后的字符取出并打印输出。请用P、V操作写出它们能正确并发执行的程序。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"在本题中,3个并发进程R、M、P共享了一个可循环使用的缓冲区B,进程R负责从输入设备读字符并存入缓冲单元中,进程M负责将读入字符中的空格改成“,”,进程P负责处理后字符的打印输出。为此,应设置4个信号量mutex、empty、full、full2。mutex用于实现对缓冲区的互斥访问,其初值为1;empty表示缓冲区中的可用单元数目,其初值为N;full表示已读入的字符个数,其初值为0;full2表示已处理的字符个数,其初值为0.为了描述方便,还应设置3个指针in、out1、out2.in指向下一个可用缓冲单元,Out1指向下一个待处理字符,out2指向下一个待输出字符。它们并发执行的同步机制描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image51.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image52.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image53.png'/>本题是生产者一消费者问题的一个衍生问题,较原始问题加入了一个既是生产者也是消费者的进程Mo本题中有两个生产者和两个消费者,因此加入了mutex互斥信号量来保证对缓冲区的互斥访问,使题目解答更加严谨。但是由于R、.M、P所使用的是不同的指针(分别是in、Out1、Out2),因此这里不用mutex信号量也能保证进程对缓冲区的互斥访问(注意与2.3.4小节中生产者一消费者问题的区别,特别注意2的区别)。如果题目中的若干消费者或若干生产者使用的是相同的指针,就需要设置互斥信号量来保证对缓冲区的互斥访问。"},{"id":"learncoder_120_21190","stem":"设系统中有3种类型的资源(A、B、C)和5个进程Pi、P2、P3、P4、P5,A资源的数量为17,B资源的数量为5,C资源的数量为20。在T0时刻,系统状态见下表。系统采用银行家算法实现死锁避免。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image14.png'/>试问:1)T0时刻是否为安全状态?若是,请给出安全序列。2)在T0时刻,若进程P2请求资源(0,3,4),是否能实施资源分配?为什么?3)在2)的基础上,若进程P4请求资源(2,0,1),是否能实施资源分配?4)在3)的基础上,若进程Pi请求资源(0,2,0),是否能实施资源分配?","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"这是一道常见的考查银行家算法的题,出题的概率很高,解答起来却很简单。考生可以先写出各个向量和矩阵的值,然后按银行家算法和安全性算法的步骤在纸上演算就可以了。先根据Allocation矩阵和Max矩阵计算Need矩阵。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image45.png'/>1)现在对T0时刻的状态进行安全性分析由于Avail扣1e向量为(2,3,3),因此w血向量初始化为(2,3,3)。因存在安全序列(P4,P2,P3,P5,Pl),见表2-21,所以To时刻处于安全状态。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image46.png'/>2)T0时刻由于Avai1able向量为(2,3,3),而P2请求资源Request2向量为(0,3,4),显然C资源的数量不够,所以不能实施资源分配。3)Request4(2,0,1)<Need4(2,2,1),Request4(2,0,1)<Available(2,3,3)。所以先试着把P4申请的资源分配给它,Available变为(0,3,2)。注:这里别忘记修改系统的Available向量和P4的Allocation4以及Need4向量。得到的系统状态情况见表2-22。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image47.png'/>然后进行系统安全性检测:此时Available为(0,3,2),所以Wbrk初始化为(0,3,2)。尝试把资源分配给P4后的系统安全性检测过程:因存在安全序列(P4,P2,P3,P5,P1),见表2-23,所以系统仍处于安全状态,即能将资源分配给P4。4)Request1(0,2,0)<Available(0,3,2)<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image48.png'/>Request1(0,2,0)<Need1(3,4,7)所以先试着把Pl申请的资源分配给它,Avail加1e变为(0,1,2)。注:这里别忘记修改系统的Available向量和P1的Allocation1以及Need1向量。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image49.png'/>得到的系统状态见表2-24然后进行系统安全性检测:此时Avail1e为(0,1,2),所以初始化为(0,1,2)。此时的Work小于任意的Needi响量,而且存在Finish[i]=false(其实是所有Finish[i]都是falsse),所以系统处于不安全状态,即不能分配资源(0,2,0)给P1。"},{"id":"learncoder_120_21197","stem":"下面是两个并发执行的进程。它们能正确运行吗?若不能,请举例说明,并对其改正。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image17.png'/>","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"上述两个并发执行的进程共享整型变量x,且共享时没能做到互斥,因此它们的执行结果具有不确定性。若先执行Pl,并在它执行完语旬x:=1后进行进程调度,执行P2,并在P2结束后再调度执行P1,则最后结果是x=y=z=0,t=u=2.若先执行P1,并在它执行完if语旬后再调度P2执行,则最后结果是x=0,y=z=1,t=u=2。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image62.png'/>可将上述程序改正为(本题按照原题的pascal语法书写):<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image63.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image64.png'/>"},{"id":"learncoder_120_21194","stem":"某火车订票系统可供多个用户同时共享一个订票数据库。规定允许多个用户同时查询该数据库,有查询者时,用户不能订票;有用户订票而需要更新数据库时,不可以有其他用户使用数据库。请用P、V操作写出查询者和订票者的同步执行程序。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"】本题是一个典型的读者一写者问题,查询者是读者,订票者是写者。读者一写者问题的主要要求是:①允许多个读者共享对象。②不允许写者和其他读者或写者同时访问共享对象。为了达到上述控制,引入一个变量readcount,用于记录当前正在运行的读者进程数以及读互斥信号量rmnutex和写互斥信号量wmutex.每个读者进程进入系统后需对readcouut加1.当readcouut的值由0变为1时,说明是第一个读者进程进入,因此需要该读者进程对控制写者进程的信号量wmutex进行P操作,以便与写者进程互斥运行;当readcount的值由非0值增加时,说明不是第一个读者进程,此时控制写者进程的信号量已进行过P操作,已经禁止写者进程进入,因此不需要再次对该信号量进行P操作。当读者进程退出时,需对readcount减1.如发现减1后readcournt的值变为0,说明是最后一个读者进程退出,因此需要该读者进程对控制写者进程的信号量wmutex进行v操作,以便写者进程能够进入。同步程序描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image54.png'/>下面改进要求,规定允许多个用户同时查询数据库,当有订票者到达时,不允许后续查询者查询数据库,且多个订票者可以互斥使用数据库(即写者优先算法)。描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image55.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image56.png'/>这里r信号量用来控制读者进程的进入,若有写者存在,则占用该信号量,阻止后续读者进入临界区;而w信号量则表示对临界区进行写操作的权力,当读者在临界区时,占用w信号量以阻止写者进行写操作,这里w的作用类似于刚才未添加新条件的解法中的wmutex信号量。本解法中,rmutex和wmutex信号量变为对读者、写者计数器进行互斥操作控制的信号量。"},{"id":"learncoder_120_21191","stem":"设系统中有下述解决死锁的办法。1)银行家算法。2)检测死锁,终止处于死锁状态的进程,释放该进程所占有的资源。3)资源预分配。请问哪种办法允许最大的并发性?即哪种办法允许更多的进程无等待地向前推进?请按并发性从大到小对上述3种办法进行排序。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"题目所示的3种办法中,首先死锁检测允许死锁出现,即允许进程最大限度地申请并分配资源,直至出现死锁,再由系统解决。其次是银行家算法,该方法允许进程自由申请资源,只是在某个进程申请时检查系统是否处于安全状态,若是,则可立即分配;若不是,则拒绝。最后是资源预分配,因为此方法要求进程在运行之前申请所需的全部资源,这样会使许多进程因申请不到资源而无法开始,得到资源的进程也并不是同时需要所占的全部资源,因此导致资源的浪费。"},{"id":"learncoder_120_21198","stem":"设有一个发送者进程和接收者进程,其流程图如图2-16所示。s是用于实现进程同步的信号量,mutex是用于实现进程互斥的信号量。试问流程图中的A、B、C、D矩形框中应填写什么?假定缓冲区有无限多个,s和mutex的初值应为多少?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image19.png'/>","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"A、B、C、D矩形框中分别应该填写P(mutex)、V(mnutex)、P(S)、P(mutex).s是一资源信号量,用来表示信息链中信息的个数,故其初值应设置为0;mutex是用来实现对信息链互斥访问的互斥信号量,故其初值应设置为1。"},{"id":"learncoder_120_21189","stem":"设系统仅有一类数量为M的独占型资源,系统中N个进程竞争该类资源,其中各进程对该类资源的最大需求为W.当M、N、W分别取下列各值时,下列哪些情形会发生死锁?为什么?1)M=2,N=2,W=2。2)M=3,N=2,W=2。3)M=3,N=2,W=3。4)M=5,N=3,W=2。5)M=6,N=3,W=3。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"这种题目关键是要找例子,找出例子来说明系统能否发生死锁,如果找不出例子就认为该系统不会死锁。l)会发生死锁。当2个进程都占有1个资源再申请1个资源时,就出现了死锁。2)不会发生死锁。因为2个进程需要的资源最大数量都是2个,而系统拥有的资源量是3个,所以总会有1个进程得到2个资源后被运行,运行完毕后释放资源,于是另一个进程也能顺利运行完,所以不会死锁。3)会发生死锁。当一个进程占有1个资源,另一个进程占有2个资源时,2个进程都要再申请资源,但是系统已经没有资源了,所以就发生死锁了。4)不会发生死锁。因为3个进程需要的资源最大数量都是2个,而系统有5个资源,所以至少有2个进程可以拿到足够的资源运行,运行完后再释放资源,最后一个进程也能得到运行,所以不会死锁。5)会发生死锁。因为如果3个进程都各自占有了2个资源的时候再申请资源,系统的资源就没了,而且没有一个进程可以得到运行,系统处于死锁状态。"},{"id":"learncoder_120_21187","stem":"有一个计算进程和打印进程,它们共享一个单缓冲区,计算进程不断地计算出结果并将其放入单缓冲区中,打印进程则负责从单缓冲区中取出每个结果进行打印。请用信号量实现它们的同步关系。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"解法1:可从临界资源的角度来思考。先找出临界资源,并为每种临界资源设置信号量,在访问临界资源之前添加P操作来申请资源,访问结束之后添加v操作释放临界资源。本题中有两类临界资源:第一类是计算进程争用的空闲缓冲区,初始状态下有一个空闲缓冲区可以使用,故可以为它设置初值为1的信号量empty;第二类是打印进程争用的已放入缓冲区的打印结果,初始状态下缓冲区中无结果可供打印,故可以为它设置初值为0的信号量full.具体的同步算法可描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image41.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image42.png'/>解法2:还可以从同步的角度来思考。对于某种同步关系,如进程A在某处必须等待进程B完成某个动作D后才能继续执行,可为它设置一个初值为0的信号量,并在A需要等待B的位置插入P操作,在B完成动作D之后插入V操作。本题中存在两种同步关系:①打印进程必须等计算进程将结果放入缓冲区之后才能打印,因此为它们设置初值为0的信号量Sa;②除第一个计算结果可以直接放入缓冲区外,计算进程必须等打印进程将缓冲区的前一个结果取走,缓冲区变空后才能将下一个计算结果放入缓冲区,因此可为它们设置初值为0的信号量Sb。具体的同步算法可描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image43.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image44.png'/>"},{"id":"learncoder_120_21188","stem":"在银行家算法中,出现以下资源分配情况(见表2-14)。系统剩余资源数量=(3,2,2)试问.表2-14资源分配情况<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image13.png'/>1)该状态是否安全?请给出详细的检查过程。2)若进程依次有如下资源请求:Pl:资源请求Request(1,0,2)。P4:资源请求Request(3,3,0)。Po:资源请求Request(0,1,0)。则系统该如何进行资源分配,才能避免死锁?","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"1)系统安全,因为存在安全序列(P1,P3,P0,P2,P4)。过程如下:先求出各进程剩余的需求量:P0=(7,4,3),P1=(1,1,2),P2=(6,0,0),P3=(0,1,1),P4=(4,3,1)。根据系统剩余资源数(3,2,2)可知,可以立即满足的进程是P1(或P3),P1满足后可释放占有的资源,系统剩余资源数为(5,3,2),找到可立即满足的进程是P3(或P4),P3满足后释放占有的资源,系统此时剩余资源数为(7,4,3),找到可立即满足的进程是P0(或P2、P4),所有进程可以依次执行完毕。2)系统要想避免死锁,就必须保证每次分配完后都能得到安全序列,否则就拒绝分配。根据这一原则,对于进程的请求应考虑分配以后是否安全,若不安全,则不能进行此次分配。题目中有3个请求,按照顺序来依次考虑。先考虑能否满足Pl,分配后系统处于安全状态,因为分配后可以找到安全序列(P1,P3,P2,P0,P4)。满足Pl的请求之后,剩余资源为(2,2,0)。对于P4的请求,由于系统没有那么多剩余资源,因此无法满足,系统拒绝P4的请求。最后考虑P0的请求,如果满足Po,分配后剩余资源为(2,1,0),可以找到安全序列(P1,P3,P0,P2,P4),因此可以满足P0的请求。总之,系统对3个请求依次处理为:满足Pl、拒绝P4、满足P0。"},{"id":"learncoder_120_21179","stem":"分别简述进程的同步与互斥的概念及二者的关系。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"同步:多个相互合作的进程,在一些关键点上可能需要互相等待或互相交换信息,这种相互制约关系称为同步。互斥:在操作系统中,当一个进程进入临界区使用临界资源时,另一个进程必须等待;当占用临界资源的进程退出临界区后,另一个进程才允许去访问此临界资源,进程之间的这种相互制约关系称为互斥。关系:其实互斥是进程同步的一种特殊情况,互斥也是为了达到让进程之间协调推进的目的。"},{"id":"learncoder_120_21183","stem":"某银行计算机系统要实现一个电子转账系统,其基本的业务流程是:首先对转出方和转入方的账户进行加锁,其次进行转账业务,最后对转出方和转入方的账户进行解锁。如果不采取任何措施,系统会不会发生死锁?为什么?请设计一种能够避免死锁的方法。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"该类题目实际上是对防止死锁的实际应用能力的考查。要求熟练掌握产生死锁的4个必要条件的处理方法。本题的情况会发生死锁。因为对两个账户进行加锁操作是可以分隔执行的,若此时有两个用户同时进行转账,P1先对账户A进行加锁,再申请账户B;P2先对账户B进行加锁,再申请账户A,此时死锁。解决的办法是‥可以采用资源顺序分配法,将A、B账户进行编号,用户转账时,只能按照编号由小到大的顺序进行加锁。也可以采用资源预分配法,要求用户在使用资源之前将所有资源一次性申请到。"},{"id":"learncoder_120_21180","stem":"P1、P2、P3、P4、P5、P6为一组合作进程,其前趋图如图2-15所示,试用P、V操作完成这6个进程的同步。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image12.png'/>","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"图2-15中说明任务启动后P1l先执行,当其结柬后P2、P3、P4可以开始执行,P2完成后P5可以开始执行,仅当P3、P4、P5都执行完后,P6才能开始执行。为了确保这一执行顺序,设5个同步信号量f1、f2、f3、f4、f5分别表示进程P1、P2、P3、P4、P5是否执行完成,其初值均为0.这6个进程的同步描述如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image36.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image37.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image38.png'/>"},{"id":"learncoder_120_21177","stem":"设有Pi、P2、P3三个进程共享某一资源F,P1对F只读不写,P2对F只写不读,P3对F先读后写。当一个进程写F时,'其他进程对F不能进行读写,但多个进程同时读F是允许的。使用P、V操作正确实现Pi、P2、P3三个进程的同步互斥。要求:1)正常运行时不产生死锁。2)使用F的并发度高。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"80.空","type":"short_answer","answer":"本题实质是一个读者-写者问题,P1是一个读者,P2是一个写者,为了使F的并发度较高,将P3先看成读者,当其完成读操作后,再将其看成写者。算法中需要用到如下的变量定义:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image31.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image32.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image33.png'/>"},{"id":"learncoder_120_21184","stem":"有两个程序,A程序按顺序使用CPU 10s,使用设备甲5s,使用CPU 5s,使用设备乙10s,最后使用CPU10soB程序按顺序使用设备甲10s,使用CPU 10s,使用设备乙5s,使用CPU 5s,最后使用设备乙10s。请问在多道程序环境下与在顺序环境下(先执行A程序再执行B程序)相比,CPU利用率提高了多少?","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"在顺序执行时,CPU运行时间为(10+5+10)s+(10+5)s=40s,两个程序运行总时间为40s+40s=80s,故利用率是40/80=50%。多道程序环境下,CPU运行时间为40s,两个程序运行总时间为45s,故利用率为40/45=88.9%。所以CPU利用率提高了88.9%一50%=38.9%。运行情况如下。程序A,0-10s:CPUlO-15s:甲15-20s‥等待CPU20-25s‥CPU25-35s:乙35-45s:CPU程序B,0-10s:甲10-20s:CPU20-25s:乙25-30s:CPU30-35s:等待乙35-45s:乙"},{"id":"learncoder_120_21181","stem":"有3个进程P、P2和P3并发工作。进程Pi需用资源S3和S;进程P2需用资源S1和S2;进程P3需用资源S3和S2。回答:1)若对资源分配不加限制,会发生什么情况?为什么?2)为保证进程正确地工作,应采取哪些资源分配策略?为什么?","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"1)若对资源分配不加限制,上述进程可能会进入死锁状态。因为P1、P2、P3是并发工作的,所以完全有可能发生下述情况:当前P1l获得S3,P2获得S1,P3获得S2,但3进程都在循环等待下一个资源释放所占有的资源,从而进入死锁状态。相应资源分配图如图2-20所示。注:还可能发生Pl获得S1,P2获得S2,P3获得S3的情况,也就是进入死锁状态,读者可自行画出相应的资源分配图。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image39.png'/>2)为保证进程正确地工作,可采取下列资源分配策略:a)要求进程一次性地全部申请到它所需的全部资源,这样可破坏“请求与保持”条件.b)要求进程严格按照资源号递增顺序申请资源,即按照S1、S2和S3的顺序进行申请,即P1先申请S1,再申请S3;P2先申请S1,再申请S2;P3先申请S2,再申请S3.这样可破坏″环路等待”条件.c)当一个进程申请资源时,如果系统已无该类资源可用,但某个拥有该资源的其他进程处于阻塞状态,则允许前者抢占后者资源。这样可破坏“不剥夺条件”"},{"id":"learncoder_120_21178","stem":"假设内存有64个存储块,其编号为0,1,2,…,63。每个存储块使用与否,采用位图(一个64位的标志字flag)表示,flag的每一位对应于一个存储块,当某一位(bit)置1时,表示该块已分配;置0表示该存储块空闲。有两个进程:get进程负责存储块的分配,每次分配一个块。其分配动作是:找出标志字的某个为0的位,将其值1,然后将其所代表的块进行分配。put进程负责存储块的回收,其回收动作为:找出回收块对应的标志字的相同位,把它置o,然后回收之。试用信号量机制的pv操作写出两个进程间的同步算法。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"先分析有哪些临界资源,只有get和put都需要访问的临界资源位图(大小为64)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image34.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image35.png'/>"},{"id":"learncoder_120_21175","stem":"(2017年统考真题)与单道程序相比,多道程序系统的优点是()。I.CPU利用率高II.系统开销小III.系统吞吐量大IV.I/O设备利用率高","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"多道程序系统通过组织作业(编码或数据)使CPU总有一个作业可执行,从而提高了CPU的利用率、系统的吞吐量和I/O设备利用率,I、皿、IV是优点。但系统要付出额外的开销来组织作业和切换作业,II错误,故选D。","type":"choice","options":{"D":"仅I、III、IV","C":"仅II、III","A":"仅I、III","B":"仅I、IV"},"answer":"D"},{"id":"learncoder_120_21185","stem":"进程之间存在哪几种制约关系?各是什么原因引起的?下面的活动属于哪种制约关系?1)若干位同学去图书馆借书。2)两队举行篮球赛。3)流水线生产的各道工序。4)商品生产和社会消费。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"进程之间存在直接制约关系(同步问题)和间接制约关系(互斥问题)。同步问题是存在逻辑关系的进程之间相互等待所产生的制约关系,互斥问题是具有相互逻辑关系的进程竟争使用资源所发生的制约关系。1)属于互斥关系,因为书的个数是有限的,一本书只能借给一位同学。2)属于互斥关系,篮球只有一个,两队都要竟争。3)属于同步关系,各道工序的开始都依赖前道工序的完成。4)属于同步关系,商品没生产出来,消费无法进行;商晶未消费完,生产也无须进行。"},{"id":"learncoder_120_21182","stem":"某系统有同类资源m个,供n个进程共享。假设每个进程最多申请x个资源(其中l<=x<=m),请证明:当n(x-1)+l<=m时,系统不会发生死锁。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"由于每个进程最多申请使用x个资源,在最坏的情况下,每个进程都得到了(x-1)个资源,并且现在均需申请所需最后一个资源。这时系统剩余资源数为m-n(x-1)。如果系统的剩余资源数大于或等于1,即系统至少还有一个资源可以使用,就可以使这n个进程中的任一个进程获得所需的全部资源。该进程可以运行结束,释放出所占有的资源,供其他进程使用,从而每个进程都可以执行结束。因此,当m-n(x-1)≧1时,即n(x-1)一1)+1<=m时,系统不会发生死锁。本题需要对资源分配的最坏情况有所了解,即所有共享资源的进程都获得比最大需求资源量少一个的资源,并都需要申请所需的最后一个资源。根据本题,可以得出推论:n(x一1)+1>m时,系统可能发生死锁。该推论可以作为判断系统是否发生死锁的通用方法。该结论及推论的使用需要建立在理解的基础上,如果只是死记硬背,容易出错。"},{"id":"learncoder_120_21186","stem":"消息缓冲通信技术是一种高级通信机制,由Hansen首先提出。请回答下列问题。1)试叙述高级通信机制与低级通信机制P、V原语操作的主要区别。2)给出消息缓冲机制(有限缓冲)的基本工作原理。3)消息缓冲通信机制(有限缓冲)中提供发送原语Send(Receivera),调用参数a表示发送消息的内存区首地址。试设计相应的数据结构,并用P、V操作实现Send原语。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"空","type":"short_answer","answer":"1)P、V操作是指进程之间通过共享变量实现信息传递;而高级通信机制是由系统提供发送(Send)与接收(Receive)两个操作,进程间通过这两个操作进行通信,无须共享任何变量.2)基本原理:操作系统管理一个用于进程通信的缓冲池,其中的每个缓冲区单元可存放一条消息。发送消息时,发送者从中申请一个可用缓冲区,接收者取出一条消息时再释放该缓冲区,每个进程均设置一条消息队列,任何发送给该进程的消息均暂存在其消息队列中.3)缓冲区的格式说明S呻指示该消息的发送者,Nptr指向消息队列中下一缓冲区的指针,’耽丸为消息正文。设置互斥信号量mutex(初值为1)与一个同步通信信号量Sm(初值为0),Sm也用于记录消息队列中现存消息的数目。Send①操作如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image40.png'/>"},{"id":"learncoder_120_21167","stem":"(2015年统考真题)下列选项中,会导致进程从执行态变为就绪态的事件是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"P(wait)操作表示进程请求某一资源,A、B和C都因为请求某一资源而会进入阻塞态,而D只是被剥夺了处理器资源,进入就绪态,一旦得到处理器即可运行。","type":"choice","options":{"A":"执行P(wait)操作","D":"被高优先级进程抢占","C":"启动I/O设备","B":"申请内存失败"},"answer":"D"},{"id":"learncoder_120_21174","stem":"(2017年统考真题)下列有关时间片的进程调度的描述中,错误的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"进程切换带来系统开销,切换次数越多,开销越大,A正确。当前进程的时间片用完后,它的状态由执行态变为就绪态,B错误。时钟中断是系统中特定的周期性时钟节拍,操作系统通过它来确定时间间隔,实现时间的延时和任务的超时,C正确。现代操作系统为了保证性能最优,通常根据响应时间、系统开销、进程数量、进程运行时间、进程切换开销等因素确定时间片大小,D正确。","type":"choice","options":{"B":"当前进程的时间片用完后,该进程状态由执行态变为阻塞态","D":"影响时间片大小的主要因素包括响应时间、系统开销和进程数量等","C":"时钟中断发生后,系统会修改当前的进程在时间片内的剩余时间","A":"时间片越短,进程切换的次数越多,系统开销也越大"},"answer":"B"},{"id":"learncoder_120_21171","stem":"(2016年统考真题)进程P1和P2均包含并发执行的线程,部分伪代码描述如下所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image10.png'/>下列选项中,需要互斥执行的操作是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"Pl中对a的赋值,并不影响最终的结果,故a=l和a=2不需要互斥执行;a=x与b=x执行先后不影响a与b的结果,无需互斥执行;x+=l与x+=2执行先后会影响x的结果,需要互斥执行;P1中的x和P2中的x是不同范围中的x,互不影响,不需要互斥执行。","type":"choice","options":{"B":"a=x与b=x","C":"x+=1与x+=2","D":"x+=1与x+=3","A":"a=1与a=2"},"answer":"C"},{"id":"learncoder_120_21168","stem":"(2015年统考真题)若系统S1采用死锁避免方法,S2采用死锁检测方法。下列叙述中,正确的是()。I.S1会限制用户申请资源的顺序,而S2不会II.S1需要进程运行所需资源总量信息,而S2不需要III.S1不会给可能导致死锁的进程分配资源,而S2会","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"银行家算法是最著名的死锁避免算法,其中的最大需求矩阵Max定义了每一个进程对m类资源的最大需求量,系统在执行安全性算法中都会检查此次资源试分配后,系统是否处于安全状态,若不安全则将本次的试探分配作废。I属于死锁预防的范畴。在死锁的检测和解除中,在系统为进程分配资源时不釆取任何措施,但提供死锁的检测和解除手段。","type":"choice","options":{"B":"仅II、III","C":"仅I,II","A":"仅I、II","D":"i、II、III"},"answer":"B"},{"id":"learncoder_120_21172","stem":"(2016年统考真题)下列关于管程的叙述中,错误的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。管程不仅能实现进程间的互斥,而且能实现进程间的同步,故A错误,B正确。管程具有的特性:①局部于管程的数据只能被局部于管程内的过程所访问;②一个进程只有通过调用管程内的过程才能进入管程访问共享数据;③每次仅允许一个进程在管程内执行某个内部过程。故C和D正确。","type":"choice","options":{"B":"管程是由编程语言支持的进程同步机制","A":"管程只能用于实现进程的互斥","C":"任何时候只能有一个进程在管程中执行","D":"管程中定义的变量只能被管程内的过程访问"},"answer":"A"},{"id":"learncoder_120_21169","stem":"(2016年统考真题)系统中有3个不同的临界资源RI、R2和R3,被4个进程pl、p2、p3及p4共享。各进程对资源的需求为:pl申请R1和R2,p2申请R2和R3,p3申》青R1和R3,p4申请R2。若系统出现死锁,则处于死锁状态的进程数至少是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"C对于本题,先满足一个进程的资源需求,再看其他进程是否能出现死锁状态。因为p4只申请一个资源,当将R2分配给p4后,p4执行完后将R2释放,这时使得系统满足死锁的条件是R1分配给pl,R2分配给p2,R3分配给p3(或者R2分配给pl,R3分配给p2,R1分配给p3)。穷举其他情况如pl申请的资源R1和R2都先分配给pl,运行完并释放占有的资源后,可以分别将Rl、R2和R3分配给p3、p4和p2,也满足系统死锁的条件。各种情况需要使得处于死锁状态的进程数至少为3。","type":"choice","options":{"B":"2","A":"1","C":"3","D":"4"},"answer":"C"},{"id":"learncoder_120_21173","stem":"(2017年统考真题)假设4个作业到达系统的时刻和运行时间见表2-13。系统在A2时开始作业调度。若分别釆用先来先服务和短作业优先调度算法,则选中的作业分别是()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image11.png'/>","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"先来先服务调度算法是作业来的越早,优先级越高,因此会选择J1.短作业优先调度算法是作业运行时间越短,优先级越高,因此会选择J3。","type":"choice","options":{"B":"JI、J4","D":"JI、J3","A":"J2、J3","C":"J2、J4"},"answer":"D"},{"id":"learncoder_120_21170","stem":"(2016年统考真题)使用TSL(TestandSetLock)指令实现进程互斥的伪代码如下所示。下列与该实现机制相关的叙述中,正确的是()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image9.png'/>","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"当进程退出临界区时设置lock为False,会负责唤隅处于就绪状态的进程,A错误。等待进入临界区的进程会一直停留在执行while(TSL(&lock))的循环中,不会主动放弃CPU,B正确。让权等待,即当进程不能进入临界区时,应立即释放处理器,防止进程忙等。通过B选项的分析发现上述伪代码不满足“让权等待”的同步准则,C错误。若while(TSL(&lock))在关中断状态下执行,当TSL(&lock)一直为true时,不再开中断,则系统可能会因此终止,D错误。","type":"choice","options":{"C":"上述伪代码满足“让权等待”的同步准则","A":"退出临界区的进程负责唤醒阻塞态进程","D":"while(TSL(&lock))语句应在关中断状态下执行","B":"等待进入临界区的进程不会主动放弃CPU"},"answer":"B"},{"id":"learncoder_120_21159","stem":"(2012年统考真题)若一个用户进程通过read系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是()。I.若该文件的数据不在内存中,则该进程进入睡眠等待状态II.请求read系统调用会导致CPU从用户态切换到核心态IH?read系统调用的参数应包含文件的右称","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"当用户进程读取的磁盘文件数据不在内存时,转向中断处理,导致CPU从用户态切换到核心态,此时该进程进入睡眠等待状态(其实就是阻塞态,只不过换了个说法),因此I、II正确。在调用read之前,需要用open打开该文件,open的作用就是产生一个文件编号或索引指向打开的文件,之后的所有操作都利用这个编号或索引号直接进行,不再考虑物理文件名,所以read系统调用的参数不应包含物理文件名。文件使用结束后要用close关闭文件,消除文件编号或索引。","type":"choice","options":{"C":"仅II、III","A":"仅I、II","B":"仅I、III","D":"I、II和III"},"answer":"A"},{"id":"learncoder_120_21163","stem":"(2013年统考真题)下列关于银行家算法的叙述中,正确的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"银行家算法是避免死锁的方法,银行家算法是对情况进行预测,若存在安全序.列,则分配;若不存在,则拒绝分配,因此银行家算法并没有破坏产生死锁的4个必要条件之一,不属于死锁预防,因此A错误。利用银行家算法,系统处于安全状态时没有死锁进程,因此B正确。系统处于不安全状态时,系统有可能会出现死锁进程,因此C错误。银行家算法并没有破坏产生死锁的4个必要条件中的任何一个,要是D成立了,那么A也就成立了。","type":"choice","options":{"B":"当系统处于安全状态时,系统中一定无死锁进程","D":"银行家算法破坏了产生死锁的必要条件中的“请求和保持”条件","C":"当系统处于不安全状态时,系统中一定会出现死锁进程","A":"银行家算法可以预防死锁"},"answer":"B"},{"id":"learncoder_120_21160","stem":"(2012年统考真题)下列关于进程和线程的叙述中,正确的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"进程始终是操作系统资源分配的基本单位,线程不能直接被系统分配资源。因此A选项是正确的,B选项错误。而且线程可以参与调度,如系统级线程可以被系统直接调度执行。用户级线程切换不需要通过内核,因为用户级线程只在用户进程的空间内活动,系统并不能感知到用户级线程的存在,所以用户级线程的切换不需要通过内核。系统级线程的切换是需要内核支持的,因此C选项错误。同一进程下的各线程共享进程的地址空间,并共享进程所持有的资源,但线程有自己的栈空间,不与其他线程共享,因此D选项错误。","type":"choice","options":{"B":"线程是资源分配的基本单位,进程是调度的基本单位","C":"系统级线程和用户级线程的切换都需要内核的支持","A":"不管系统是否支持线程,进程都是资源分配的基本单位","D":"同一进程中的各个线程拥有各自不同的地址空间"},"answer":"A"},{"id":"learncoder_120_21164","stem":"(2014年统考真题)下列调度算法中,不可能导致饥饿现象的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"采用静态优先级调度时,当系统总是出现优先级高的任务时、,优先级低的任务会总是得不到处理器而产生饥饿现象;而短作业优先调度不管是抢占式或是非抢占的,当系统总是出现新来的短任务时,长任务会总是得不到处理器,产生饥饿现象。因此B、C、D都错误,选A。","type":"choice","options":{"B":"静态优先数调度","D":"抢占式短作业优先","A":"时间片轮转","C":"非抢占式短作业优先"},"answer":"A"},{"id":"learncoder_120_21161","stem":"(2012年统考真题)若某单处理器多进程系统中有多个就绪进程,则下列关于处理器调度的叙述中,错误的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"首先要注意本题选的是错误项,看题一定要仔细,有些考生看到选项正确就直接进行了选择。其次要注意本题选项的说法,例如A选项“在进程结束时能进行处理器调度”,而不是“必须进行调度”或“只能在此时进行调度”,因此A选项的含义仅仅是此处可以调度,并非一定要调度或者只能此时调度,类似的B、D选项也是如此。这也是容易判断出错的一个地方。接下来分析选项,A选项是进程结束时可以进行处理器调度,明显是正确的。一个进程结束后,进程撤销,处理器此时应当处理下一个进程了,因此会出现处理器调度。A选项正确。B选项中关键词为“创建新进程后”。在创建新进程后,会将新进程插入到就绪队列中等待调度执行,接下来会发生如下几种情况:①处理器继续执行当前任务;②该新建进程比较紧急,处理器暂停当前活动转而调度执行该进程(系统为可抢占调度策略)。因此,当紧急任务进入就绪状态时,可能会发生处理器调度,B选项也正确。C选项的关键词是“在临界区”和“不能”。进程在临界区时是不允许其他相关进程进入临界区的,因为当前进程正在访问临界资源,其他进程无法访问。但问题的关键在于系统中还存在着与这类进程无关的其他进程,其他进程的执行并不会受到这类进程是否处于临界区的影响。系统可以暂停该进程的执行,先去处理其他与之无关的紧急任务,处理完后再返回来继续执行剩余的临界区代码。这个过程中就会发生处理器调度(因为处理器干别的去了),因此当进程处于临界区时,也可能会发生处理器调度,C选项错误。D选项很简单。系统调用结束之后返回正常执行的过程中,此时肯定可以进行处理器调度切换执行其他进程,因此D选项正确。","type":"choice","options":{"A":"在进程结束时能进行处理器调度","C":"在进程处于临界区时不能进行处理器调度","B":"创建新进程后能进行处理器调度","D":"在系统调用完成并返回用户态时能进行处理器调度"},"answer":"C"},{"id":"learncoder_120_21165","stem":"(2014年统考真题)某系统有n台互斥使用的同类设备,3个并发进程分别需要3、4、5台设备,可确保系统不发生死锁的设备数n最小为()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"3个并发进程分别需要3、4、5台设备,当系统只有(3-1)+(4-1)+(5-1)=9台设备时,第一个进程分配2台,第二个进程分配3台,第三个进程分配4台。这种情况下,3个进程均无法继续执行下去,发生死锁。当系统中再增加1台设备,也就是总共10台设备时,这最后1台设备分配给任意一个进程都可以顺利执行完成,因此保证系统不发生死锁的最小设备数为10。","type":"choice","options":{"A":"9","D":"12","C":"11","B":"10"},"answer":"B"},{"id":"learncoder_120_21162","stem":"(2012年统考真题)假设5个进程Po、Pi、P2、P3、P4共享3类资源Ri、R2、R3,这些资源总数分别为18、6、22。To时刻的资源分配情况(见表2-12),此时存在的一个安全序列是()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image8.png'/>","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"对4个选项分别进行安全性检测,只有D选项能够全部执行结束,其他3个选项都不能执行完全,中途会出现资源不足而死锁。","type":"choice","options":{"B":"Fi,Po,P3,P4,P2","D":"P3,P4,P2,Pi,Po","C":"P2,Pi,Po,P3,P4","A":"Po,P2,P4,Pi,P3"},"answer":"D"},{"id":"learncoder_120_21166","stem":"(2014年统考真题)一个进程的读磁盘操作完成后,操作系统针对该进程必做的是","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"进程申请读磁盘操作的时候,因为要等待I/O操作完成,会把自身阻塞,此时进程就变为了阻塞状态,当I/O操作完成后,进程得到了想要的资源,就会从阻塞态转换到就绪态(这是操作系统的行为)。而降低进程优先级、分配用户内存空间和增加进程的时间片大小都不一定会发生,选A。","type":"choice","options":{"A":"修改进程状态为就绪态","C":"给进程分配用户内存空间","B":"降低进程优先级","D":"增加进程时间片大小"},"answer":"A"},{"id":"learncoder_120_21157","stem":"(2011年统考真题)某时刻进程的资源使用情况见表2-11。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image6.png'/>此时的安全序列是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"使用银行家算法可知,不存在安全序列。由于初始Ri资源没有剩余,只能分配资源给P1执行,P1完成之后释放资源,这时由于R2只有两个剩余,因此只能分配对应资源给P4执行,P4完成之后释放资源,但此时R2仍然只有两个剩余,无法满足P2、P3的要求,无法分配,因此产生死锁状态。","type":"choice","options":{"B":"Pi、P3、P2、P4","D":"不存在","A":"Pi、P2、P3、P4","C":"Pi、P4、P3>P2"},"answer":"D"},{"id":"learncoder_120_21154","stem":"(2010年统考真题)进行Po和Pi的共享变量定义及其初值为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image4.png'/>若进行P0和P1访问临界资源的类C代码实现如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image5.png'/>并发执行进程P0和P1时产生的情况是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"在之前没有了解过该算法的情况下,考生临场想要判断出来还是很难的,尤其本题的算法是一个可以保证进程互斥进入临界区、不会出现“饥饿”现象的良好算法。在考虑时,考生无法找出破绽,还容易误认为自己的想法不够全面。本题中算法利用了flag[]解决临界资源的互斥访问,利用turn解决“饥饿”现象,所以能够保证进程互斥进入临界区,不会出现“饥饿”现象。实际上该算法满足同步机制准则,可以达到比较好的同步效果。对于此类型的题目,可以多分析一些经典的互斥算法。本题为Peterson算法,此外还有Dekker算法等,读者可以进行分析理解。","type":"choice","options":{"A":"不能保证进程互斥进入临界区、会出现“饥饿”现象","B":"不能保证进程互斥进入临界区、不会出现“饥饿”现象","D":"能保证进程互斥进入临界区、不会出现“饥饿”现象","C":"能保证进程互斥进入临界区、会出现“饥饿”现象"},"answer":"D"},{"id":"learncoder_120_21158","stem":"(2011年统考真题)有两个并发执行的进程Pi和P2,共享初值为1的变量x。Pi对X加1,P2对X减1。加1操作和减1操作的指令序列分别如下所示:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image7.png'/>两个操作完成后,x的值()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"执行①②③④⑤⑥结果为1,执行①②④⑤⑥③结果为2,执行④⑤①②③⑥结果为0,结果-1无法得到。","type":"choice","options":{"A":"可能为-1或3","D":"可能为-1、0、1或2","C":"可能为0、1或2","B":"只能为1"},"answer":"C"},{"id":"learncoder_120_21155","stem":"(2011年统考真题)下列选项中,满足短任务优先且不会发生“饥饿”现象的调度算法是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"这里考查的是多种作业调度算法的特点。响应比=作业响应时间/作业执行时间=(作业执行时间+作业等待时间)/作业执行时间。高响应比算法在等待时间相同的情况下,作业执行的时间越短,响应比越高,满足短任务优先原则。同时,响应比会随着等待时间的增.加而变大,优先级会提高,能够避免“饥饿”现象。下面给出几种常见的进程调度算法的特点(见表2-20),读者要在理解的基础上识记。","type":"choice","options":{"B":"高响应比优先","D":"非抢占式短任务优先","C":"时间片轮转","A":"先来先服务"},"answer":"B"},{"id":"learncoder_120_21156","stem":"在支持多线程的系统中,进程P创建的若干个线程不能共享的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"进程是资源分配的基本单元,进程下的各线程可以并行执行,它们共享进程的虚地址空间,但各个进程有自己的栈,各自的栈指针对其他线程是透明的,因此进程P中某线程的栈指针是不能共享的。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image30.png'/>","type":"choice","options":{"C":"进程P的全局变量","B":"进程P中打开的文件","A":"进程P的代码段","D":"进程P中某线程的栈指针"},"answer":"D"},{"id":"learncoder_120_21151","stem":"(2010年统考真题)下列选项中,导致创建新进程的操作是()。I.用户登录成功II.设备分配HI.启动程序执行","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"用户登录成功就需要为这个用户创建进程来解释用户的各种命令操作;设备分配由内核自动完成,不需要创建新进程;启动程序执行的目的是创建一个新进程来执行程序。","type":"choice","options":{"C":"仅I和III","B":"仅II和III","A":"仅I和II","D":"I、II、III"},"answer":"C"},{"id":"learncoder_120_21152","stem":"(2010年统考真题)设与某资源相关联的信号量初值为3,当前值为1,若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别为()","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"信号量可以用来表示某资源的当前可用数量。当信号量K>0时,表示此资源还有K个资源可用,此时不会有等待该资源的进程;当信号量KV0时,表示此资源有|K|个进程在等待该资源。此题中信号量K=l,因此该资源可用数M=l,等待该资源的进程数N=0。","type":"choice","options":{"A":"0,1","D":"2,0","C":"1,2","B":"1,0"},"answer":"B"},{"id":"learncoder_120_21153","stem":"(2010年统考真题)下列选项中,降低进程优先权级的合理时机是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"B选项中,进程完成I/O后,进入就绪队列时,已经是优先级最低的进程,不能再降低其优先级,为了让其及时处理I/O结果,也应该提高优先级;C选项中,进程长期处于就绪队列,也需要增加优先级,使其不至于产生饥饿(所谓饥饿是指进程长期得不到处理器,无法执行);D选项中,当进程处于执行状态时,不可提高或降低其优先级。而A选项中,采用时间片算法处理进程调度时,若进程时间片用完,则需要排到就绪队列的末尾,也就是优先级最低,所以降低优先级的合理时机是时间片用完时。另外,如果采用多级反馈调度算法,若时间片用完,但进程还未结束,则放到下一级队列中。","type":"choice","options":{"D":"进程从就绪状态转为执行状态","A":"进程的时间片用完","C":"进程长期处于就绪队列","B":"进程刚完成I/O,进入就绪队列"},"answer":"A"},{"id":"learncoder_120_21149","stem":"(2009年统考真题)下列进程调度算法中,综合考虑进程等待时间和执行时间的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"高响应比优先调度算法中,计算每个进程,响应比最高的先获得CPU,响应比计算公式:响应比=(进程执行时间+进程等待时间)/进程执行时间。高响应比优先调度算法综合考虑到了进程等待时间和执行时间,对于同时到达的长进程和短进程相比,短进程会优先执行,以提高系统吞吐量;当某进程等待时间较长时,其优先级会提高并很快得到执行,不会产生有进程调度不到的情况。时间片轮转调度算法(RR)使每个进程都有固定的执行时间,但对于吐进程来说,等待时间也相对较长。短进程优先调度算法(SJF/SPF)对于短进程有很大的优势,但对于长进程来说,若不断有短进程请求执行,则会长期得不到调度。先来先服务CFCFS)调度算法的实现最简单,但如果有一个长进程到达之后,会长期占用处理器,使后面到达的很多短进程得不到运行。","type":"choice","options":{"B":"短进程优先调度算法","C":"先来先服务调度算法","D":"高响应比优先调度算法","A":"时间片轮转调度算法"},"answer":"D"},{"id":"learncoder_120_21150","stem":"(2009年统考真题)某计算机系统中有8台打印机,有K个进程竞争使用,每个进程最多需要3台打印机,该系统最终可能会发生死锁的K的最小值是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"假设K=3,3个进程共享8台打印机,每个进程最多可以请求3台打印机,若3个进程都分别得到2台打印机,系统还剩下2台打印机,接下去无论哪个进程申请打印机,都可以得到满足,3个进程都可以顺利执行完毕,这种情况下不会产生死锁。假设K=4,4个进程共享8台打印机,都得不到满足,产生了互相等待,可能会发生死锁。这种类型的题通常数字不大,可以凭经验尝试出正确答案,这样会快一些,此处我们还是给出对应的计算公式,以便大家加深理解。假设n为每个进程所需的资源数,m为进程数,A为系统的资源数,则满足(n-I)xm^A的最小整数m即为可能产生死锁的最小进程数。该公式同样可以用于求出每个进程需要多少资源时可能会产生死锁。该公式可以这样理解:当所有进程都差一个资源就可以执行时,此时系统中所有资源都已经分配,因此死锁。","type":"choice","options":{"D":"5","A":"2","C":"4","B":"3"},"answer":"C"},{"id":"learncoder_120_21147","stem":"一个进程被唤醒意味着()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"当进程被唤醒时,它从阻塞状态变为就绪状态,即可以重新占用CPU(但不是直接占用CPU,区别于运行状态)。","type":"choice","options":{"D":"进程变为运行态","C":"PCB移到就绪队列之首","B":"优先级变为最大","A":"该进程可以重新占用CPU"},"answer":"A"},{"id":"learncoder_120_21144","stem":"下列关于线程的叙述中,正确的是()。I.在采用轮转调度算法时,一进程拥有10个用户级线程,则在系统调度执行时间上占用10个时间片II.属于同一个进程的各个线程共享栈空间III同一进程中的线程可以并发执行,但不同进程内的线程不可以并发执行IV.线程的切换,不会引起进程的切换","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"I错误,由于用户级线程不依赖于操作系统内核,因此,操作系统内核是不知道用户线程的存在的,由于操作系统不知道用户级线程的存在,所以,操作系统把CPU的时间片分配给用户进程,再由用户进程的管理器将时间片分配给用户线程。那么,用户进程能得到的时间片即为所有用户线程共享。所以该进程只占有1个时间片。若是内核级线程,由于内核级线程操作系统是知道的,它们与进程一样地分配处理器时间,所以,有多少个内核级线程就可以获得多少个时冋片。II错误,各个线程拥有属于自己的栈空间,不允许共享。Ⅲ错误,同一进程内的多个线程可以并发执行,甚至不同进程内的多个线程也可以并发执行。IV错误,当从一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。知识点回顾:线程,也被称为轻量级进程,是一个基本的CPU执行单元。它包含了一个线程ID、一个程序计数器、一个寄存器组和一个堆栈。在多线程模型中,进程只作为除CPU以外系统资源的分配单位,线程则作为处理器的分配单位,甚至不同进程中的线程也能并发执行。","type":"choice","options":{"C":"仅II、III","B":"仅II、IV","A":"仅I、II、III","D":"全错"},"answer":"D"},{"id":"learncoder_120_21148","stem":"进程资源静态分配方式是指一个进程在建立时就分配了它需要的全部资源,只有该进程所要资源都得到满足的条件下,进程才开始运行。这样可以防止进程死锁。静态分配方式破坏死锁的()为必要条件。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"请求和保持条件(占有并等待条件):指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又已被其他进程占有,此时请求进程阻塞,但又对自己已获得的其他资源保持(占有)不放。本题描述的静态分配方式,要么一次性分配它需要的全部资源,要么就不分配资源,使得这种情况没法发生,因此它破坏了请求和保持条件。","type":"choice","options":{"D":"循环等待条件","A":"互斥条件","C":"非剥夺式等待条件","B":"请求和保持条件(占有并等待条件)"},"answer":"B"},{"id":"learncoder_120_21145","stem":"有若干并发进程均将一个共享变量count的值加1一次,那么有关count中的值说法正确的是()。1)肯定有不正确的结果2)肯定有正确的结果3)若控制这些并发进程互斥执行count加1操作,count中的值正确","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"若控制这些并发进程互斥执行count加1操作,那么count中的值是不确定的,可能对,也可能错,因此1)和2)都是错误的说法。控制共享变量count互斥访问后,可保证最终结果正确,因此3)正确。","type":"choice","options":{"B":"2)和3)","A":"1)和3)","D":"1)、2)、3)的说法均不正确","C":"3)"},"answer":"C"},{"id":"learncoder_120_21146","stem":"一作业8:00到达系统,估计运行时间为lh。若从10:00开始执行该作业,其响应比为()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"该作业从10:00开始执行,运行时间为lh,即结束时间为11:00,结束时产生响应,则响应时间=ll:00-8:00=3h,响应比=响应时间/服务时间=3h/lh=3。","type":"choice","options":{"C":"3","B":"1","A":"2","D":"0.5"},"answer":"C"},{"id":"learncoder_120_21141","stem":"若系统中有n个进程,则在阻塞队列中进程的个数最多为()?","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"本题容易错选即认为n个进程应该有一个进程被分配CPU运行,剩下最多(n-1)个进程在阻塞队列中,而且如果就绪队列中有进程,阻塞队列中的进程还将少于(II-1)个。但其实少考虑了一种情况,那就是死锁,如果这n个进程由于争夺资源而产生死锁,那么就有n个进程全在阻塞队列中等待相互间的资源的释放。","type":"choice","options":{"D":"1","B":"n-l","A":"n","C":"n-2"},"answer":"A"},{"id":"learncoder_120_21138","stem":"进程A和进程B通过共享缓冲区协作完成数据处理,该缓冲区支持多个进程同时进行读写操作。进程A负责产生数据并放入缓冲区,进程B负责从缓冲区中取出数据并处理。两个进程的制约关系为()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"不同功能的并发进程因为通过操作共享资源协作完成任务而产生的制约关系是同步关系。进程A和进程B的功能分别是产生数据和处理数据,两者属于不同功能的进程,协作完成数据处理任务,因此是同步关系。多个同种进程产生的竞争制约关系为互斥关系。","type":"choice","options":{"D":"无制约关系","C":"互斥与同步","B":"同步关系","A":"互斥关系"},"answer":"B"},{"id":"learncoder_120_21142","stem":"在下列操作系统的各个功能组成部分中,一定需要专门硬件配合支持的是()。I.地址映射II进程调度III中断系统IV.系统调用","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"有人可能会这样理解,任何功能都是在硬件的基础上实现的,所以都是需要硬件支持的。但这里肯定不是这个意思,这里需要专门硬件支持的意思是,除了处理器和内存以外,为了实现该功能,需要另外添加的专门用于实现该功能的硬件。I是,地址映射是需要硬件机构来实现的。例如,在分页储存系统中,需要一个页表寄存器,在其中存放页表在内存的始址和页表的长度。除此之外,当进程要访问某个逻辑地址中的数据时,分页地址变换机构(它是硬件)会自动将有效地址(相对地址)分为页号和页内地址两部分,再以页号为索引去检索页表。查找操作是由硬件执行的。II不是,进程调度是通过使用一些调度算法来编程实现,所以不需要专门硬件支持。HI是,CPU硬件有一条中断请求线(IRL)。CPU在执行完每条指令后,都将判断IRL。当CPU检测到已经有中断控制器(即中断源)通过中断请求线发送了信号时,CPU将保留少量状态如当前指令位置,并且跳转到内存特定位置的中断处理程序。这里的中断控制器是硬件。中断系统离开中断控制器是不可能工作的。Ⅲ不是,对于系统调用是否一定需要专门的硬件这个问题,需要清楚系统调用的过程。在C程序中调用系统调用好像是一般的函数调用,实际上调用系统调用会引起用户态到核心态的状态变化,这是怎么做到的呢?原来C编译程序采用一个预定义的函数库(C的程序库),其中的函数具有系统调用的名字,从而解决了在用户程序中请求系统调用的问题。这些库函数一般都执行一条指令,该指令将进程的运行方式变为核心态,然后使内核开始为系统调用执行代码。称这个指令为操作系统陷入(OperatingSystemTrap)。系统调用的接口是一个中断处理程序的特例。在处理操作系统陷入时:1)内核根据系统调用号查系统调用入口表,找到相应的内核子程序的地址。2)内核还要确定该系统调用所要求的参数个数。3)从用户地址空间复制参数到U区(UNIXV)。4)保存当前上下文,执行系统调用代码。5)恢复处理器现场并返回。上述第1)第3)过程和第5)过程都不需要专门的硬件(除了CPU和内存),只有第4)个过程可能需要专门硬件,如显示器输出字符。但也可以不需要专门硬件,如打开一个已经在缓存中的文件。综上所述,本题选B。","type":"choice","options":{"D":"II、III","B":"I,III","A":"I","C":"I,III,IV"},"answer":"B"},{"id":"learncoder_120_21139","stem":"一次性分配所有资源的方法可以预防死锁的发生,这种方法破坏的是产生死锁的4个必要条件中的()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"一次性分配进程所需的所有资源,如果有一项不满足就全部不分配,这样可以避免进程在执行过程中又申请资源,破坏了占有并请求的条件。这种方法虽然预防了死锁,但是资源利用率较低,甚至会导致“饥饿”现象。","type":"choice","options":{"C":"不剥夺条件","B":"占有并请求","A":"互斥条件","D":"循环等待"},"answer":"B"},{"id":"learncoder_120_21136","stem":"一个正在访问临界资源的进程由于申请等待I/O操作而被中断时,它()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"进程进入临界区必须满足互斥条件,进程进入临界区但是尚未离开就被迫进入阻塞状态是可以的。在此情况下,只要其他进程在运行过程中不进入与该临界资源相关的临界区,就应该允许其运行。究其本质该进程锁定临界区,是锁定了临界区所访问的临界资源,即不允许其他进程在该进程访问临界区的过程中访问该临界资源。","type":"choice","options":{"A":"允许其他进程进入与该进程相关的临界区","D":"不允许任何进程抢占处理器","C":"允许其他进程抢占处理器,但不能进入该进程的临界区","B":"不允许其他进程进入临界区"},"answer":"C"},{"id":"learncoder_120_21143","stem":"在使用信号量机制实现互斥时,互斥信号量的初值一般为();而使用信号量机制实现同步时,同步信号量的初值一般为()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"同步(直接相互制约关系):一个进程到达了某些点后,除非另一个进程已经完成了某些操作,否则就不得不停下来等待这些操作的结束,这就是进程的同步,有了同步后进程间就可以相互合作了。用P、V操作实现进程同步,信号量的初值应根据具体情况来确定。若期望的消息尚未产生,则对应的初值应设为0;若期望的消息已经存在,则信号量应设为一个非0的正整数。互斥(间接相互制约关系):多个进程都想使用一个临界资源,但是不能同时使用,于是只好一个进程用完了才能给其他进程用,这就是进程互斥。从某种意义上说,互斥是同步的一种特殊情况。一般互斥信号量的初始值都设置为1,P操作成功则将其改成0,V操作成功将其改成1,所以互斥信号量的初值为1。","type":"choice","options":{"C":"不确定;1","A":"0;1","D":"1;不确定","B":"1;0"},"answer":"D"},{"id":"learncoder_120_21140","stem":"某个系统采用如下资源分配策略:若一个进程提出资源请求得不到满足,而此时没有由于等待资源而被阻塞的进程,则自己就被阻塞。若此时已有等待资源而被阻塞的进程,则检查所有由于等待资源而被阻塞的进程,如果它们有申请进程所需要的资源,则将这些资源剥夺并分配给申请进程。这种策略会导致()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"本题策略不会导致死锁,因为破坏了不剥夺这一条件。但是这种分配策略会导致某些进程长时间等待所需资源,因为被阻塞进程所持有的资源可以剥夺,所以被阻塞进程的资源数量在阻塞期间可能会变少,若系统不断出现其他进程申请资源,某些被阻塞进程会被一直剥夺资源,同时系统无法保证在有限时间内将这些阻塞进程唤醒。","type":"choice","options":{"C":"回退","A":"死锁","D":"饥饿","B":"抖动"},"answer":"D"},{"id":"learncoder_120_21137","stem":"可以被多个进程在任意时刻共享的代码必须是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"若代码可以被多个进程在任一时刻共享,则要求每个进程在调用此代码时都以同样的方式运行;而且进程在运行过程中被中断后继续执行,其结果也不受影响。这就要求代码不能自身修改,否则无法满足共享要求。这种代码就是可重入代码,也叫纯代码,即允许多个进程同时访问的代码。","type":"choice","options":{"D":"无转移指令代码","B":"机器语言代码","A":"顺序代码","C":"不能自身修改的代码"},"answer":"C"},{"id":"learncoder_120_21131","stem":"某系统中有11台打印机,N个进程共享打印机资源,每个进程要求3台打印机。当N的取值不超过()时,系统不会发生死锁。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"考虑最坏情况,当每个进程都获得了2台打印机时,这时只需再有1台打印机就可以保证所有进程都能完成,不会发生死锁,即11-2N>=1,由此得知N<=5。","type":"choice","options":{"C":"6","D":"7","A":"4","B":"5"},"answer":"B"},{"id":"learncoder_120_21135","stem":"若一个信号量的初值为3,经过多次P、V操作之后当前值为-1,则表示等待进入临界区的进程数为()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"信号量是一种整型的特殊变量,只有初始化和P、V操作可以改变其值。通常,信号量的初值表示可以使用资源的总数。信号量为0,表示资源已经分配完;信号量为负值,表示有进程正在等待分配资源,且等待的进程数就是信号量的绝对值。","type":"choice","options":{"B":"2","C":"3","D":"4","A":"1"},"answer":"A"},{"id":"learncoder_120_21132","stem":"若索统中有5台绘图仪,有多个进程需要使用两台,规定每个进程一次仅允许申请一台,则最多允许()个进程参与竞争,而不会发生死锁。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"在系统中有in个进程,都需要2个同类资源的情况下,不会发生死锁的最少资源数是mx(2-l)+l,即m+l<=5,m<=4,m的最大值为4,即最多允许4个进程参与竞争,不会发生死锁。","type":"choice","options":{"B":"2","C":"3","A":"5","D":"4"},"answer":"D"},{"id":"learncoder_120_21129","stem":"在单处理器的多进程系统中,进程切换时,何时占用处理器和占用多长时间取决于()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"概念题。进程切换时,何时占用处理器占用多长时间取决于进程自身和进程调度策略。","type":"choice","options":{"A":"进程响应程序段的长度","B":"进程总共需要运行时间的长短","D":"进程完成什么功能","C":"进程自身和进程调度策略"},"answer":"B"},{"id":"learncoder_120_21133","stem":"银行家算法在解决死锁问题中用于()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"银行家算法属于死锁避免。","type":"choice","options":{"D":"解除死锁","C":"检测死锁","A":"预防死锁","B":"死锁避免"},"answer":"B"},{"id":"learncoder_120_21130","stem":"设有n个进程共用一个相同的程序段,若每次最多允许m个进程(mWn)同时进入临界区,则信号量的初值为()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"每当有一个进程进入临界区,信号量减1,直到第m个进程进入临界区,信号量应当变为0,阻止其他进程继续进入临界区,因此,初值应当为m。","type":"choice","options":{"B":"m","C":"m-n","A":"n","D":"n-m"},"answer":"B"},{"id":"learncoder_120_21134","stem":"采用资源剥夺法可以解除死锁,还可以采用()方法解除死锁。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"解除死锁有资源剥夺法和撤销进程法,其他选项均不能解除死锁。","type":"choice","options":{"D":"修改信号量","A":"执行并行操作","C":"拒绝分配新资源","B":"撤销进程"},"answer":"B"},{"id":"learncoder_120_21128","stem":"有3个作业JI、J2、J3,其运行时间分别为2h、5h、3h,假定同时到达,并在同一台处理器上以单道方式运行,则平均周转时间最短的执行序列是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"记住短作业优先调度算法的平均周转时间最短即可。4个选项的平均周转时间分别为6.3h、7h、7.3h、5.7h。","type":"choice","options":{"B":"J3、J2、J1","C":"J2、J1、J3","D":"J1、J3、J2","A":"J1、J2、J3"},"answer":"D"},{"id":"learncoder_120_21125","stem":"(多选)在下述父进程和子进程的描述中,正确的是()","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"父进程创建子进程的目的是将一些可以并行处理的操作移交给子进程去做,可实现并发处理。父进程和子进程是一种创建者和被创建者的关系,不是一种前后相继的关系,因此选项A错误。父进程和子进程可以并发执行,因此选项B正确。撤销父进程时,表明该任务已经完成,因此应将所属的全部子进程同时撤销,以避免其子进程成为不可控的,因此选项D正确。一个子进程撤销,只能表明它的任务已做完,并不能表明整个任务已完成,所以不能将其父进程撤销,因此选项C错误。综上,本题的B、D选项都是正确的。","type":"choice","options":{"A":"父进程创建了子进程,因而父进程执行完后,子进程才能运行","D":"撤销父进程时,应该同时撤销子进程","B":"父进程和子进程可以并发执行","C":"撤销子进程时,应该同时撤销父进程"},"answer":"B"},{"id":"learncoder_120_21126","stem":"下面有关选择进程调度算法的准则,错误的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"调度算法的评价标准主要有以下几个:公平性:确保每个作业获得合理的CPU份额。效率:CPU真正用于运行作业的时间和总CPU时间之比(使CPU使用率尽可能高)。响应时间:作业从提交到首次获得CPU使用权之间的时间间隔.(使交互用户的响应时间尽可能短)。周转时间:作业从提交到运行完毕之间的时间间隔(使批处理用户等待输出的时间尽可能短)。吞吐量:单位时间内完成的作业数目(每小时处理作业数最多)。增长在就绪队列中的等待时间,将造成对已分配资源的浪费,违背了调度算法的评价标准,而A、B:D选项都符合调度算法的评价标准。","type":"choice","options":{"C":"适当增长进程在就绪队列中的等待时间","B":"尽可能提高系统吞吐量","A":"尽量提高处理器利用率","D":"尽快响应交互式用户的要求"},"answer":"C"},{"id":"learncoder_120_21127","stem":"下列描述中,()并不是多线程系统的特长。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"在一个计算机系统中只有一个键盘,而且人为动作相对于计算机来说是很缓慢的,故可以用一个线程来处理所有键盘输入。","type":"choice","options":{"D":"基于GUI的调试程序用不同的线程分别处理用户输入、计算和跟踪等操作","B":"Web服务器利用线程响应HTTP请求","C":"键盘驱动程序为每个正在运行的应用配备一个线程,用以响应该应用的键盘输入","A":"利用线程并行地执行矩阵乘法运算"},"answer":"C"},{"id":"learncoder_120_21122","stem":"为多道程序提供的共享资源不足时,可能会产生死锁。但是,不当的()也可能产生死锁。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"进程推进顺序不当会引起死锁。这里注意进程调度顺序和推进顺序的反别,调度顺序更加宏观,是以完整进程为单位进行调度的;而推进顺序是把进程看作可以中断的、多个进程的不同部分交替执行的顺序。","type":"choice","options":{"B":"进程的优先级","C":"时间片大小","D":"进程推进顺序","A":"进程调度顺序"},"answer":"D"},{"id":"learncoder_120_21123","stem":"有若干并发进程均将一个共享变量count的值加1一次,那么有关count中的值的说法正确的是()。I.肯定有正确的结果II若控制这些并发进程互斥执行count加1操作,count中的值正确","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"在未控制进程互斥执行count加1操作,那么count的值是不确定的,可能对,也可能错,因此I和II都是错误的说法。控制共享变量count互斥访问后,可保证最终结果正确,因此IH正确。","type":"choice","options":{"B":"II和III","C":"III","A":"I和III","D":"I、II和III的说法均不正确"},"answer":"C"},{"id":"learncoder_120_21124","stem":"死锁与安全状态的关系是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"死锁一定不安全,不安全未必会死锁,安全一定不会死锁。","type":"choice","options":{"A":"死锁状态有可能是安全状态","B":"安全状态有可能成为死锁状态","D":"死锁状态一定是不安全状态","C":"不安全状态就是死锁状态"},"answer":"D"},{"id":"learncoder_120_21120","stem":"下面关于管程的叙述错误的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"管程的V操作不同于信号量机制中的V操作,前者必须在P操作之后,而后者则没有这个要求,只要和P操作配对出现即可。","type":"choice","options":{"C":"管程中V操作的作用和信号量机制中V操作的作用相同","B":"管程每次只允许一个进程进入管程","A":"管程是进程的同步工具,解决信号量机制大量同步操作分散的问题","D":"管程是被进程调用的,是语法范围,无法创建和撤销"},"answer":"C"},{"id":"learncoder_120_21121","stem":"既考虑作业等待时间,又考虑作业执行时间的调度算法是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"响应比的计算方法为周转时间与执行时间的比值,周转时间为等待时间和执行时间的总和,因此响应比综合考虑了等待时间和执行时间两个方面。而短作业优先只考虑了执行时间;优先级调度只考虑了优先级;先来先服务与等待时间和执行时间无关。","type":"choice","options":{"A":"高响应比优先调度算法","C":"优先级调度算法","B":"短作业优先调度算法","D":"先来先服务调度算法"},"answer":"A"},{"id":"learncoder_120_21115","stem":"现有3个同时到达的作业J1、J2、J3它们的执行时间分别是T1、T2和T3,且T1<T2<T3。若系统按单道方式运行且采用短作业优先调度算法,则平均周转时间是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"根据短作业优先调度算法,可以知道调度顺序是J1、J2、J3.因此Ji先执行,J2、J3等待T1的时间;然后J2执行,J3继续等待T2的时间;最后J3执行T3的时间。因此,J1的周转时间为T1,J2的周转时间为T1+T2,J3的周转时间为T1+T2+T3;平均周转时间为三者之’和的平均值,即(3T1+2T2+T3)/3。","type":"choice","options":{"A":"T1+T2+T3","D":"(Ti+2T2+3T3)/3","B":"(Ti+T2+T3)/3","C":"(3T1+2T2+T3)/3"},"answer":"C"},{"id":"learncoder_120_21119","stem":"要实现两个进程互斥,设一个互斥信号量mutex,当mutex为0时,表示()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"当仅有两个并发进程共享临界资源时,互斥信号量仅能取值1、0、-1,互斥信号量的初始值设为l.即当互斥信号量初值为1时,表示同时只允许1个进程访问临界资源。当有1个进程提出访问临界资源请求时,执行P操作,互斥信号量减1,变为0,同时该进程遴入临界区。如果另一个进程此时也请求访问临界资源,则同样执行P操作。由于互斥信号量执行P操作之前的值为0,执行过P操作后,信号量值变为-1。综上所述,mutex为1时,表示没有进程进入临界区;mutex为0时,表示有一个进程已进入临界区;mutex为-1时,表示有一个进程进入临界区,另一个进程等待进入。","type":"choice","options":{"C":"有一个进程进入临界区,另外一个进程在等候","B":"有一个进程进入临界区","D":"两个进程都进入临界区","A":"没有进程进入临界区"},"answer":"B"},{"id":"learncoder_120_21116","stem":"下面哪一个不会引起进程创建()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"导致一个进程去创建另一个进程的典型事件有4类:①用户登录;②作业调度;③提供服务;④应用请求。","type":"choice","options":{"A":"用户登录","C":"设备分配","B":"作业调度","D":"应用请求"},"answer":"C"},{"id":"learncoder_120_21117","stem":"釆用时间片轮转调度算法分配CPU时,当处于执行状态的进程用完一个时间片后,它的状态是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"这里要注意时间片用完与其他事件产生的结果的差别。当时间片用完时,进程并没有提出任何请求,只要有处理器就可以继续执行,因此进程是就绪状态;而其他事件引起的进程释放处理器是因为进程有其他需求,即便拥有处理器也无法执行,这时进程就是阻塞状态了。","type":"choice","options":{"A":"阻塞","B":"运行","C":"就绪","D":"消亡"},"answer":"B"},{"id":"learncoder_120_21114","stem":"下面关于进程的叙述中,正确的是()","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"对于此类判断哪项正确或错误的选择题最好采用排除法。对于B选项,有些系统优先级可以改变,比如有些进程长时间得不到调度,随着等待时间的增加使其优先级增加,这样就可以防止某些原本优先级低的进程产生“饥饿”现象,所以B错误;对于C选项,在单CPU系统中,如果所有进程都处于死锁状态,那么就没有一个进程处于运行状态,所以C错误;对于D选项,进程申请CPU得不到满足时,应该被挂在就绪队列上,处于就绪状态而非阻塞状态,所以D错误;最后来看A选项,CPU调'度的概念就是从就绪队列上取下等待CPU的进程并分配CPU给它,所以A显然是正确的。","type":"choice","options":{"D":"进程申请CPU得不到满足时,其状态变为阻塞","A":"进程获得CPU运行是通过调度得到的","C":"单CPU的系统中,任意时刻都有一个进程处于运行状态","B":"优先级是进程调度的重要依据,一旦确定就不能改变"},"answer":"A"},{"id":"learncoder_120_21118","stem":"在多进程的系统中,为了保证公共变量的完整性,各进程应互斥进入临界区。所谓临界区是指()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"临界区是进程访问临界资源的代码部分,因此D选项正确。要注意区分临界区和临界资源的概念,临界区是进程的一部分,每个进程的临界区可能不同,临界区是私有的,而临界资源是共享的。牢记一点,'进程通过临界区访问临界资源。","type":"choice","options":{"D":"一段程序","B":"一段数据区","C":"同步机制","A":"一个缓冲区"},"answer":"D"},{"id":"learncoder_120_21112","stem":"在一个交通繁忙的十字路口,每个方向只有一个车道,如果车辆只能向前直行,而不允许转弯和后退,并未采用任何方式进行交通管理。下列叙述正确的是()。使用十字路口是最有效的方法","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"该十字路口可能发生死锁,示意图如图2-19所示。故A、B错误。C的答案是低效的,原因是该路口最多一次只能运行两个方向的车,且这两个方向需为南北或东西。所以允许同时3个方向的车辆使用该路口的结果可能是只有一个方向的车能前进。所以D选项是最高效避免死锁的方法。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image29.png'/>","type":"choice","options":{"D":"该十字路口可能会发生死锁,规定南北方向的两个车队和东西方向的两个车队互斥","A":"该十字路口不会发生死锁","C":"该十字路口可能会发生死锁,规定同时最多3个方向的车使用该十字路口是最有效的方法","B":"该十字路口一定会发生死锁"},"answer":"D"},{"id":"learncoder_120_21109","stem":"对进程的管理和控制使用()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"原语通常由若干条指令组成,BEACD用来实现某个特定的操作。通过_段不可分割的或不可中断的程序实现其功能。引进原语的主要目的就是为了实现进程的通信和控制。因为进程的管理和控制包括进程创建、调度、终止等,这些操作均不可中断。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image28.png'/>","type":"choice","options":{"C":"信号量","A":"指令","B":"原语","D":"信箱通信"},"answer":"B"},{"id":"learncoder_120_21113","stem":"若每个作业只能建立一个进程,为了照顾短作业用户,应采用();为了照顾紧急作业用户,应采用();为了实现人机交互,应釆用();为了使短作业、长作业和交互作业用户都满意,应采用()。I.FCFS调度算法II.短作业优先调度算法III.时间片轮转调度算法IV.多级反馈队列调度算法V.基于优先级的剥夺调度算法","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"①为了照顾短作业,赋予短作业高的优先级,所以采用短作业优先调度算法。②为了照顾紧急作业,必须采用可剥夺的调度算法,且同时需要赋予紧急作业高的优先级,所以釆用基于优先级的剥夺调度算法。③为了实现人机交互,必须采用能保证响应时间最短的调度算法,所以采用时间片轮转调度算法。④为了使各种作业都满意,只有采用多级反馈队列调度算法,这样才能相对平衡地满足不同种作业的需要。","type":"choice","options":{"A":"II、V、I、IV","B":"I、V、III、IV","C":"I、II、IV、III","D":"II、V、III、IV"},"answer":"D"},{"id":"learncoder_120_21110","stem":"下面哪个特征是并发程序执行的特点()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"与程序顺序执行对比,程序并发执行时的特征有以下几个方面。间断性:并发程序具有“执行一暂停一执行”这种间断性的活动规律。失去封闭性:多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行已失去了封闭性。不可再现性:由于失去了封闭性,程序的计算结果与并发程序的执行速度有关,从而使程序失去了可再现性。","type":"choice","options":{"C":"产生死锁的可能性","A":"程序执行的间断性","D":"资源分配的动态性","B":"相互通信的可能性"},"answer":"A"},{"id":"learncoder_120_21107","stem":"()有利于CPU繁忙型的作业,而不利于I/O繁忙型的作业(进程)。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"目前存在着多种调度算法,有的算法适用于作业调度,有的算法适用于进程调度;但也有些调度算法既可用于作业调度,也可用于进程调度。其中,先来先服务(FCFS)调度算法是一种最简单的调度算法。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。FCFS调度算法有利于CPU繁忙型的作业,而不利于I/O繁忙型的作业(进程)。CPU繁忙型作业,是指该类作业需要大量的CPU时间进行计算,而很少请求I/O。通常的科学计算便属于CPU繁忙型作业。I/O繁忙型作业是指CPU进行处理时,又需频繁地请求I/O,而每次I/O的操作时间却很短,目前大多数的事务处理都属于I/O繁忙型作业。","type":"choice","options":{"B":"先来先服务调度算法","C":"短作业(进程)优先调度算法","D":"优先权调度算法","A":"时间片轮转调度算法"},"answer":"B"},{"id":"learncoder_120_21111","stem":"进程调度算法中,可以设计成可抢占式的算法有()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"常用的进程调度算法有先来先服务、优先级、时间片轮转及多级反馈队列等算.法。先来先服务调度算法是非抢占式的;优先级调度算法可以是非抢占式的,也可以是抢占式的;时间片轮转调度算法是抢占式的。而最高响应比优先、最短作业优先算法适用于作业调度,而不适用于进程调度。","type":"choice","options":{"C":"最短作业优先调度算法","B":"最高响应比优先调度算法","A":"先来先服务调度算法","D":"时间片轮转调度算法"},"answer":"D"},{"id":"learncoder_120_21108","stem":"有5个批处理任务A、B、C、D、E几乎同时到达一计算中心。它们预计运行的时间分另!J是lOmin、6min、2min、4miii和8min。其优先级(由外部设定)分别为3、5、2、1和4,这里5为最高优先级。下列各种调度算法中,其平均进程周转时间为14min的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"按照不同调度算法计算平均周转周期。时间片轮转:因没有给出时间片的长度,暂不计算。优先级调度:100min/5=20mino先来先服务:96min/5=192min。最短作业优先:70min/5=14mino不同调度算法的调度过程如图2-18所示。","type":"choice","options":{"B":"优先级调度算法","C":"先来先服务调度算法","D":"最短作业优先调度算法","A":"时间片轮转调度算法"},"answer":"D"},{"id":"learncoder_120_21106","stem":"结构(Cobegin语句1;语句2Coend)表示语句1和语句2并发执行。代码如下:x:=o;当这个程序执行完時,交量X丽的值有可能为()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image2.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image3.png'/>I.X=LY=2II.X=l,Y=3DI.X=4,Y=6","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"由于语句并发执行,因此可能的执行顺序有①②③④(X=4,Y=2)、①③②④(X=4,.Y=3)、①③④②(X=4,Y=6)、③④①②(X=l,Y=3),③①②④(X=4,Y=3)、③①④②(X=4,Y=6)这6种情况,所以应该选C。这类题主要考查对于并发执行的理解,列出所有可能情况时,注意Begin和End中的语句还是按顺序执行的。","type":"choice","options":{"B":"I和II","D":"I、II和HI","A":"I","C":"II和HI"},"answer":"C"},{"id":"learncoder_120_21103","stem":"下面所列进程的3种基本状态之间的转换不正确的是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"进程在运行期间,不断地从一个状态转换到另外一个状态,它可以多次处于就绪状态和执行状态,也可多次处于阻塞状态,但可能排在不同的阻塞队列。进程的3种基本状态的转换关系及其转换原因阐述如下。1)就绪状态一执行状态。处于就绪状态的进程,当进程调度程序为之分配了处理器后,该进程便由就绪状态变为执行状态。正在执行的进程也称为当前进程。2)执行状态一阻塞状态。正在执行的进程,因发生某事件而无法执行,例如,进程请求访问临界资源,而该资源正被其他进程访问,则请求该资源的进程将由执行状态变为阻塞状态。3)执行状态->就绪状态。正在执行的程序,因时间片用完而被暂停执行,该进程便由执,行状态变为就绪状态。在抢占调度方式中,一个优先级高的进程到来后,可以抢占一个正在执行的低优先级的进程的处理器,这时该低优先级的进程将由执行状态转换为就绪状态。","type":"choice","options":{"C":"执行状态-阻塞状态","B":"执行状态-就绪状态","A":"就绪状态-执行状态","D":"就绪状态-阻塞状态"},"answer":"D"},{"id":"learncoder_120_21100","stem":"并发进程执行的相对速度是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"并发进程执行的相对速度受进程调度策略影响,因为釆取不同的调度策略(如FCFS,SJF)会影响进程执行的相对速度。","type":"choice","options":{"B":"由进程自己来控制的","A":"由进程的程序结构决定的","C":"与进程调度策略有关的","D":"在进程被创建时确定的"},"answer":"C"},{"id":"learncoder_120_21104","stem":"关于临界问题的一个算法(假设只有进程Po和Pi可能会进入临界区)如下(i为0或1代表进程Po或者Pi):该算法()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image1.png'/>","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"进程并发时容易产生争夺资源现象,必须在入口码处阻止进程同时进入临界区。要求根据给出的入口码和出口码判断程序是否正确。此类出题方式较常见,关键是找出程序的错误。根据条件可先写出每个进程的执行代码。注意:程序中i的取值应与进程Pi的取值相同,代码如下:入口码容易出错的地方就是在两个进程同时申请进入临界区的时候。若此时两个进程同时申请资源,此时turn的值是0,按照①②③④⑤⑥的顺序执行,两个进程同时进入临界区。再分析“饥饿”问题。因为入口码的判断条件是tum!=-l,所以只有当tum!=-l时进程才会被阻塞。tum=-l说明已经有进程进入临界区,因此没有进程会被饿死。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第2章)/image26.png'/>","type":"choice","options":{"B":"不能保持进程互斥进入临界区,但不会出现“饥饿”","D":"保证进程互斥进入临界区,不会出现“饥饿”","C":"保证进程互斥进入临界区,但会出现“饥饿”","A":"不能保持进程互斥进入临界区,且会出现“饥饿”"},"answer":"B"},{"id":"learncoder_120_21101","stem":"中断扫描机构是()扫描一次中断寄存器。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"处理器执行完一条指令后,硬件的中断装置(中断扫描机构)立即检查有无中断籬事件发生。若无中断事件发生,则处理器继续执行下面的指令;若有中断事件发生,则暂停屉现行进程的运行,而让操作系统中的中断处理程序占用处理器,这一过程称为“中断响应”。","type":"choice","options":{"D":"每产生一次中断","C":"每当进程释放CPU","B":"每条指令执行周期内最后时刻","A":"每隔一个时间片"},"answer":"B"},{"id":"learncoder_120_21105","stem":"在操作系统中,一方面每个进程具有独立性,另一方面进程之间具有相互制约性。对于任何两个并发进程,它们()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"多道程序中并发进程可能无关也可能相关,因此选项A、B都是错误的。两个并发进程不可能相同,因为至少它们的进程控制块是不同的,因此选项D也是错误的。","type":"choice","options":{"D":"可能相同","B":"必定相关","A":"必定无关","C":"可能相关"},"answer":"C"},{"id":"learncoder_120_21102","stem":"进程从运行态到阻塞态可能是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"B、C操作会使运行状态转到就绪状态,而D操作不一定会引起处于运行状态中的进程变换状态。故正确答案只有A。","type":"choice","options":{"D":"运行进程执行了V操作","A":"运行进程执行P操作","B":"进程调度程序的调度","C":"运行进程的时间片用完"},"answer":"A"},{"id":"learncoder_120_21099","stem":"进程和程序的一个本质区别是()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"进程是程序在计算机上的一次执行活动。当运行一个程序时,就启动了一个进程。进程具有动态性、并发性、独立性、异步性和结构特征。显然,程序是静态的,进程是动态的。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程都是系统进程,它们就是处于运行状态下的操作系统本身。","type":"choice","options":{"B":"前者存储在内存,后者存储在外存","C":"前者在一个文件中,后者在多个文件中","D":"前者为动态的,后者为静态的","A":"前者分时使用CPU,后者独占CPU"},"answer":"D"},{"id":"learncoder_120_21098","stem":"通常,用户进程被建立后()。","key_points":"知识点.练习.专业课练习.操作系统.进程管理","analysis":"每一个进程都有生命期,即从创建到消亡的时间周期。当操作系统为一个程序构造一个进程控制块并分配地址空间之后,就创建了一个进程。用户可以任意撤销用户的作业,随着作业运行的正常或不正常结束,进程也被撤销了。","type":"choice","options":{"A":"便一直存在于系统中,直到被操作人员撤销","C":"随着时间片轮转而撤销与建立","B":"随着作业运行正常或不正常结束而撤销","D":"随着进程的阻塞或唤醒而撤销与建立"},"answer":"B"},{"id":"learncoder_121_21297","stem":"(2017年统考真题)假定计算机M采用二级分页虚拟存储管理方式,虚拟地址格式如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image17.png'/>页目录号(10位)页表索引(10位)页内偏移量(12位)请针对附题1的函数fl和附题2中的机器指令代码,回答下列问题。1)函数fl的机器指令代码占多少页?2)取第1条指令(pushebp)时,若在进行地址变换的过程中需要访问内存中的页目录和页表则分别会访问它们各自的第几个页表项(编号从0开始)?3)M的I/O釆用中断控制方式。若进程P在调用fl之前通过scanf()获取n的值,则在执行scanf(匸的过程中,进程P的状态会如何变化?CPU是否会进入内核态?注:本题综合性较强,非统考考生仅了解即可。附题1和附题2的题目<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image18.png'/>将fl中的int都改为float,可得到计算f(n)的另一个函数f2。假设unsigned和int型数据都占32位,float采用IEEE754单精度标准。请回答下列问题。1)当n=0时,fl会出现死循环,为什么?若将fl中的变量i和变量n都定义为int型,则fl是否还会出现死循环?为什么?2)fl(23)和f2(23)的返回值是否相等?机器数格式是什么(用十六进制表示)?3)fl(24)和f2(24)的返回值分别为33554431和33554432.0,为什么不相等?4)f(31)=(2^32)-1,而fl(31)的返回值却为-1,为什么?若使fl(n)的返回值与f(n)相等,则最大的n是多少?5)f2(127)的机器数为7F800000H,对应的值是什么?若使f2(n)的结果不溢出,则最大的n是多少?若使f2(n)的结果精确(无舍入),则最大的n是多少?附题2在按字节编址的计算机M上,附题1中fl的部分源程序(阴影部分)与对应的机器级代码(包括指令的虚拟地址)如下。其中,机器级代码包括行号、虚拟地址、机器指令和汇编指令。请回答下列问题1)计算机M是RISC还是CISC,为什么?2)fl的机器指令代码共占多少字节?要求给出计算过程。3)第20条指令cmp通过i减H-1实现对i和「1的比较。执行fl(0)过程中,当匸0时,cmp指令执行后,进/借位标志CF的内容是什么?要求给出计算过程4)第23条指令shl通过左移操作实现了power*2运算,在f2中能否也用shl指令实现power*2运算?为什么?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image19.png'/>参考答案及解析","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"1)函数fl的代码段中所有指令的虚拟地址的高20位相同,因此fl的机器指令代码在同一页中,仅占用1页(1分)。2)pushebp指令的虚拟地址的最高10位(页目录号)为0000000001,中间i0位(页表索引)为0000000001,所以取该指令时访问了页目录的第1个表项C1分),在对应的页表中访问了第1个表项(1分)。3)在执行scanf()的过程中,进程P因等待输入而从执行态变为阻塞态(1分)。输入结束后,P被中断处理程序唤醒,变为就绪态(1分)。P被调度程序调度,变为运行态(1分)。CPU状态会从用户态变为内核态(1分)。"},{"id":"learncoder_121_21294","stem":"(2012年统考真题)某请求分页系统的局部页面置换策略如下:系统从0时刻开始扫描,每隔5个时间单位扫描一轮驻留集(扫描时间忽略不计),本轮没有被访问过的页框将被系统回收,并放入到空闲页框链尾,其中内容在下一次被分配之前不被清空。当发生缺页时,如果该页曾被使用过且还在空闲页框链表中,则重新放回进程的驻留集中;否则,从空闲页框链表头部取出一个页框。假设不考虑其他进程的影响和系统开销,初始时进程驻留集为空。目前系统空闲页框链表中页框号依次为32、15、21、41。进程P依次访问的v虚拟页号,访问时刻>是<1,1>、<3,2>><0,4>、<0,6>、<1,11>><0,13>><2,14>0请回答以下问题,并说明各自的理由。1)访问v0,4>时,对应的页框号是什么?2)访问<1,11>时,对应的页框号是什么?3)访问<2,14>时,对应的页框号是什么?4)该策略是否适合于时间局部性好的程序?","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"1)访问<0,4>时,对应的页框号为21。因为起始驻留集为空,而0页对应的页框为空闲链表中的第3个空闲页框,其对应的页框号为21。2)访问<l,11>时,对应的页框号为32.因为11>10,所以发生第三轮扫描,页号为1的页框在第二轮已经处于空闲页框链表中,此刻该页又被重新访问,因此应被重新放回到驻留集中,其页框号为32。3)访问<2,14>时,对应的页框号为41。因为第2页从来没有被访问过,不在驻留集中,所以从空闲链表中取出链表头的页框,页框号为41。 4)适合。程序的时间局部性越好,则从空闲页框链表中被重新取回的机会就越大,该策略的优势越明显。"},{"id":"learncoder_121_21295","stem":"(2013年统考真题)某计算机主存按字节编址,逻辑地址和物理地址都是32位,页表项大小为4B。请回答下列问题。1)若使用一级页表的分页存储管理方式,逻辑地址结构为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image13.png'/>则页的大小是多少字节?页表最大占用多少字节?2)若使用二级页表的分页存储管理方式,逻辑地址结构为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image14.png'/>设逻辑地址为LA,请分别给出其对应的页目录号和页表索引的表达式。3)采用1)中的分页存储管理方式,一个代码段起始逻辑地址为00008000H,其长度为8KB,被装载到从物理地址00900000H开始的连续主存空间中。页表从主存00200000H开始的物理地址处连续存放,如图3-25所示(地址大小自下向上递增)。请计算出该代码段对应的两个页表项的物理地址、这两个页表项中的页框号以及代码页面2的起始物理地址。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image15.png'/>图3-25分页存储管理方式下的物理地址存放","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"1)因为页内偏移量是12位,按字节编址,所以页大小为2^12B=4KB,页表项数为2^32/4K=2^20,又页表项大小为4B,因此一级页表最大为2^20X4B=4MB。2)页目录号可表示为(((unsignedint)(LA))>>22)&0x3FF。页表索引可表示为(((unsignedint)(LA))>>12)&0x3FF。“&0x3FF”操作的作用是取后10位,页目录号可以不用,因为其右移22位后,前面已都为零。页目录号也可以写成((unsignedint)(LA))22;但页表索弓j不可,如果两个表达式没有对LA进行类型转换,也是可以的。3)代码页面1的逻辑地址为00008000H,写成二进制位0000000000001000;000000000000前20位为页号(对应十六进制的前5位,页框号也是如此),即表明其位于第8个页处,对应页表中的第8个页表项,所以第8个页表项的物理地址=页表起始地址+8x页表项的字节数=00200000H+8x4=00200020H。由此可得图3-31所示的答案。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image31.png'/>图3-31分页存储管理方式下的物理地址存放即两个页表项的物理地址分别为00200020H和00200024H。这两个页表项中的页框号分别为00900H和00901Ho代码页面2的起始物理地址为0090lOOOHo"},{"id":"learncoder_121_21296","stem":"(2015年统考真题)某计算机系统按字节编址,采用二级页表的分页存储管理方式,虚拟地址格式如下所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image16.png'/>请回答下列问题。1)页和页框的大小各为多少字节?进程的虚拟地址空间大小为多少页?2)假定页目录项和页表项均占4B,则进程的页目录和页表共占多少页?要求写出计算过程。3)若某指令周期内访问的虚拟地址为01000000H和01112048H,则进行地址转换时共访问多少个二级页表?要求说明理由。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"1)页和页框大小均为4KB。进程的虚拟地址空间大小为2^32/2^12=2^20页。2)(2^10x4)/2^12(页目录所占页数)+(2^20X4)/2^12(页表所占页数)=1025页。3)需要访问一个二级页表。因为虚拟地址01000000H和01112048H的最高10位的值都是4,访问的是同一个二级页表。【评分说明】用其他方法计算,思路和结果正确同样给分。"},{"id":"learncoder_121_21293","stem":"已知系统为32位实地址,采用48位虚拟地址,页面大小4KB,页表项大小为8B;每段最大为4GB。1)假设系统使用纯页式存储,则要采用多少级页表,页内偏移多少位?2)假设系统采用一级页表,TLB命中率为98%,TLB访问时间为10ns,内存访问时间为100ns,并假设当TLB访问失败后才开始访问内存,问平均页面访问时间是多少?3)如果是二级页表,页面平均访问时间是多少?4)上题中,如果要满足访问时间120ns,那么命中率需要至少多少?5)若系统采用段页式存储,则每用户最多可以有多少个段?段内采用几级页表?","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"1)已知页面大小4KB=2^12B,即页内偏移量的位数为12。采用48位虚拟地址,故虚页号为48-12=36位。页表项的大小为8B,则每页可容纳4KB/8B=512=2^9项。那么所需多级页表的级数斗[36/91]=4,故应采用4级页表。2)系统进行页面访问操作时,首先读取页面对应的页表项,有98%的概率可以在TLB中直接读取到(10ns),然后进行地址变换,访问内存读取页面(100ns),所需时间为10ns+100ns=110ns.如TLB未命中(10ns),则要通过一次内存访问来读取页表项(100ns),地址变换后,再访问内存(100ns),STLB访问失败后才开珂访问内存,因此所需时间为1Ons+100ns+l00ns=210ns。页表平均访问时间为[98%x110+(l-98%)x210]ns=112ns3)二级页表的情况下,TLB命中的访问时间还是110叫未命中的访问时间加上一次内存访问时间,即210ns+100ns=310ns,那么平均访问时间为[98%xl110+(l-98%)x310]ns=114ns4)本问是在第3)小题的基础上提出的,假设快表命中率为p,则应满足[px110+(l-p)310]ns<=l20ns求解不等式,得pM95%。5)系统釆用48位虚拟地址,虚拟地址空间为248B,每段最大为4GB,那么最大段数=248B/4GB=2^16=65536.4GB=232B,即段内地址位数为32,段内采用多级页表,那么多级页表级数斗(32-12)/91=3,故段内采用3级页表。"},{"id":"learncoder_121_21281","stem":"假定某操作系统存储器采用页式存储管理,一进程在联想存储器中的页表见表316,内存中的页表项见表3-17。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image8.png'/><img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image9.png'/>假定该进程体(程序与数据)代码长度为320B,每页32Bo现有逻辑地址(八进制)为101、204、576,若上述逻辑地址能翻译成物理地址,则说明翻译的过程,并指出具体的物理地址;若上述逻辑地址不能翻译成物理地址,请说明<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image10.png'/>","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"一页大小等于3张,即其二进制长度为5;由此得逻辑地址结构:低5位为页内位移,其余高位为页号。101(八进制)=001000001(二进制),则页号为2,在联想存储器中,对应的页帧号为f3,即物理地址为32xf3+l。204(八进制)=010000100(二进制),则页号为4,不在联想存储器中,查内存的页帧表得页帧号为f5,并用其更新联想存储器中的一项,最终的物理地址为32xf5+4。576(八进制)=101111110(二进制),则页号为11,已超出页表范围,即产生越界中断。"},{"id":"learncoder_121_21288","stem":"假如一个程序的段表见表3-18,其中存在位1表示段在内存,存取控制字段中W表示可写,R表示可读,E表示可执行。对下面的指令,在执行时会产生什么样的结果?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image11.png'/>1)STORE Rl,[0,70]。2)STORE Rl,[1,20]。3)LOAD Rl,[3,20]。4)LOAD Rl,[3,100]。5)JMP[2,100]。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"在执行指令的过程中,若指令中包含有地址部分,则必须先进行逻辑地址到物理地址的转换。在地址转换过程中,还要进行越界检查和存取控制权限的检查,只有在地址不越界、访问方式合法、形成物理地址后,才能去完成指令规定的操作。1)对于指令STORER1,[0,70],从段表的第0号项可以读出第0段的存在位为0,表示段未装入内存,因此地址变换机构将产生缺段中断,请求系统将其调入内存。2)对于指令STORERl,[1,20],从段表的第1项可以看出,虽然指令中的逻辑地址合法,段也已经在内存,但本指令对内存的访问方式为写操作,与存取控制字段(只读)不符,故硬件将产生保护性中断信号。3)对于指令LOADR1,[3,20],从段表的第3项可以读出第3段的存在位为1,内存始址为8000,段长为80,存取控制为R,因此逻辑地址合法,访问方式合法,形成物理地址8020后,指令将把该单元的内容读到寄存器R1中。4)对于指令LOADR1,[3,100],从段表可以知道第3段在内存中,但指令的逻辑地址中段内位移100超过了段长80,产生了越界中断。5)对于指令JMP[2,100],从段表第2项可以读出第2段的存在位为1,内存始址为3000,段长为200,访问权限为E,因此逻辑地址与访问方式都合法,形成物理地址3100,指令执行后,将跳转到内存单元3100处继续执行。"},{"id":"learncoder_121_21292","stem":"在虚拟分页存储管理方案中,对于一个处于运行状态的进程,当CPU读取下一条指令时,发生缺页中断。操作系统要执行哪些操作以获得所需要部分的指令?","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"在页表中发现所要访问的页不在内存中,则产生缺页中断。操作系统接到此中断信号后,就调出缺页中断处理程序,根据页表中给出的外存地址,将该页调入内存,使作业继续运行下去。若内存中有空闲块,则分配一页,将新调入页装入内存,并修改页表中相应页表项驻留位及相应的内存块号。若此时内存中没有空闲块,则要淘汰某页。若该页在存期间被修改过,贝!J要将其回写至外存。"},{"id":"learncoder_121_21289","stem":"(2009年统考真题)请求分页管理系统中,假设某进程的页表内容见表3-190页面大小为4KB,一次内存的访问时间是100ns,一次快<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image12.png'/>表(TLB)的访问时间是10ns,处理一次缺页的平均时间为10^8ns(已含更新TLB和页表的时间),进程的驻留集大小固定为2,采用最近最少使用置换算法(LRU)和局部淘汰策略。假设①TLB初始为空。②地址转换时先访问TLB,若TLB未命中,再访问页表(忽略访问页表之后的TLB更新时间)。③有效位为0表示页面不在内存,产生缺页中断,缺页中断处理后,返回到产生缺页中断的指令处重新执行。设虚地址访问序列2362H、1565H、25A5H,请问:1)依次访问上述3个虚地址,各需多少时间?给出计算过程。2)基于上述访问序列,虚地址1565H的物理地址是多少?请说明理由。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"本题考查页式存储器管理的相关内容,包括页表项计算及缺页中断处理等。1)因为每页大小为4KB,页内位移为12位(二进制位)或3位(十六进制位),逻辑地址2362H的页号为第一个十六进制位(也可转化为二进制,得0010001101100010B,则对应的页号为前4个二进制位),即为2。通过查询表3-19知,该页在内存,但初始TLB为空,因此2362H的访问时间为10ns(访问TLB)+100ns(访问页表)+100ns(访问内存单元)=210ns。同理,逻辑地址1565H对应的页号为1,查询TLB未命中,之后查询页表发现该页不在内存,出现缺页中断。缺页中断处理后,返回到产生缺页中断的指令处重新执行,需要访问一次快表。所以,1565H的访问时间为10ns(访问TLB)+100ns(访问页表)+108ns(调页)+10ns(访问TLB)+100ns(访问内存单元)-108ns。'逻辑地址25A5H对应的页号为2,该页在内存,TLB命中,所以25A5H的访问时间=10ns(访问TLB)+100ns(访问内存单元)=110ns。2)1565H对应的物理地址是101565Ho在1)中,当访问1565H产生缺页中断时,内存中已经有2页达到驻留集大小上限,应选出一页换出,由于在之前访问过2362H地址,2号页面刚被访问,因此根据LRU算法,淘汰0号页面,即页框号为101H的页面,因此换入的1号页面的页框号为101H,所以虚地址1565H的物理地址为页框号101H与页内位移565H的组合,即101565H。"},{"id":"learncoder_121_21286","stem":"在某贞式存储管理系统中,现有Pl、P2和P3共3个进程同驻内存。其中,P2有4个页面,被分别装入到主存的第3、4、6、8块中。假定页面和存储块的大小均为1024B,主存容量为10KB。1)写出P2的页表;2)当P2在CPU上运行时,执行到其地址空间第500号处遇到一条传送指令:MOV2100,3100计算MOV指令中两个操作数的物理地址。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"1)P2的页表见表3-25。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image30.png'/>2)操作数2100:[2100/1024]向下取整(由于逻辑页号是从0开始编号,故向下取整)为2,逻辑页号为2,映射到物理块号为6;又2100%1024=52,即页内位移为52,对应块内位移也是52因此逻辑地址2100映射到物理地址6x1024+52=6196。操作数3100:[3100/1024]向下取整为3,映射到物理块号为8;又3100%1024=28,对应块内位移也是28。因此逻辑地址3100映射到物理地址8x1024+28=8220。"},{"id":"learncoder_121_21290","stem":"已知某系统页面长为4KB,页表项4B,采用多级分页策略映射64位虚拟地址空间。若限定最高层页表占用1页,则可以采用几层分页策略?","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"由页表长4KB可知,页面长为212B,页内位移占12位。由每一项页表项占4B可知,每页可有页表项2个,最高层页表的页号占10位。由于最高层页表占1页,即该页最多存放页表项个数为2个。每项指向一页,每页又存放2个页表项,依次类推,最多可采用的分页策略层数为(64T2)/10=52,故应为6。"},{"id":"learncoder_121_21287","stem":"现有一个请求调页系统,页表保存在寄存器中。若一个被替换的页未被修改过,则处理一个缺页中断需要8ms;若被替换的页已被修改过,贝!J处理一个缺页中断需要20ms。内存存取时间为1us,访问页表的时间忽略不计。假定70%被替换的页面被修改过,为保证有效存取时间不超过2us,可接受的最大缺页率是多少?","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"若用p表示缺页率,则有效访问时间不超过2ps可表示为(l-p)xl)1us+px(0.7x20ms+0・3x8ms+lus)W2us”因此可计算出P<=/16400=00006即可接受的最大缺页率为0.00006。"},{"id":"learncoder_121_21291","stem":"如果对经典的分页管理方式的页表进行细微改造,允许同一个页表的两个页表项指向同一个物理块,由此会有什么结果?怎样利用这种结果减少内存复制操作(将一个存储段的内容复制到另一个存储段)的时间?在经过改造的存储系统里,修改一个页面中几个字节的值,会对其他页面产生什么影响?","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"让同一个页表的两个页表项指向同一个物理块,用户可以利用此特点共享该页的代码或数据。如果代码是可重入的,这种方法可节省大量的内存空间。实现内存“复制”操作时,不需要将页面的内存逐字节复制,只要在页表里将指向该页面的指针复制到代表目的地址的页表项即可。在这种系统中,如果通过一个页表项修改了一个页面的几个字节,那么通过共享该页面的其他页表项表示的地址,所访问的值也跟着变化。"},{"id":"learncoder_121_21285","stem":"某虚拟存储器的用户空间共有32不页面,每页1KB,主存16KB。假定某时刻系统为用户的第0、1、2、3页分配的物理块号为5、10、4、7,而该用户作业的长度为6页,试将十六进制的虚拟地址0A5C、103C>1A5C转换成物理地址。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"由题目的条件可知,该系统的逻辑地址有15位,其中高5位为页号,低10位为页内位移;物理地址有14位,其中高4位为块号,低10位为块内位移。另外,因题目中给出的逻辑地址是十六进制,故可先将其转换为二进制以便直接获得页号和页内位移,再完成地址转换。1)逻辑地址(OA5C)i6的二进制表示为(000101001011100)2,其中页号为(00010),即2,故页号合法;从页表中找到对应的内存块号为4,即(0100);与页内位移拼接形成物理地址(01001001011100),即(125C)i6o2)逻辑地址(103016的页号为4,页号合法,但该页未装入内存,产生缺页中断。3)逻辑地址(1A5C)16的页号为6,为非法页号,故产生越界中断。"},{"id":"learncoder_121_21282","stem":"对于一个将页表存放在内存中的分页系统:1)如果访问内存需要0.2収有效访问、时间为多少?2)如果加一个快表,且假定在快表中找到页表项的几率高达90%,那么有效访问时间又是多少?(假设查询快表所需的时间为0)","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"每次访问数据时,若不使用快表,则需两次访问内存,即先从内存的页表中读出页对应的块号,然后再根据形成的物理地址去存取数据;使用快表时,若能从快表中直接找到对应的页表项,则可立即形成物理地址去访问相应的数据,否则,仍然需要两次访问内存。1)有效访问时间为2x0.2us=0.4us2)有效访问时间为0.9x0.2us+(l-0.9)x2x0.2us=0・22us。"},{"id":"learncoder_121_21283","stem":"某系统采用页式存储管理策略,拥有逻辑空间32页,每页为2KB,拥有物理空间1MB。1)写出逻辑地址的格式。2)若不考虑访问权限等,进程的贡表有多少项?每项至少有多少位?3)如果物理空间减少一半,页表结构应做怎样的改变?","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"1)该系统拥有逻辑空间32页,故逻辑地址中页号必须用5位来描述,而每页为2KB,因此页内位移必须用11位来描<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image29.png'/>2)每个进程最多有32个页面,因此进程的页表项最多有32项;若不考虑访问权限等,则页表项中需要给出页所对应的物理块号。1MB的物理空间可分成2^9个内存块,故每个页表项至少有9位。3)若物理空间减少一半,则页表中页表项数保持不变,但每项的长度减少1位。"},{"id":"learncoder_121_21284","stem":"在请求分页系统中,为什么说一命指令执行期间可能产生多次缺页中断?","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"因请求调页时,只要作业的部分页在内存,该作业就能执行,而在执行过程中发现所要访问的指令或数据不在内存时,则产生缺页中断,将所需页面调入内存。在请求调页系统中,一条指令可能跨了两个页面。而其中要访问的操作数可能与指令不在同一页面,且操作数本身也可能跨了两个页面。当要执行这类指令,而相应的页都不在内存时,就将产生多次缺页中断。"},{"id":"learncoder_121_21279","stem":"图3-24所示是一种段页式管理配置方案,一页大小为1KB。1)根据给出的虚地址写出物理地址。2)描述地址变换过程。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"1)物理地址为:14573。2)地址变换过程为:段号6与段表首地址寄存器值1000相加得1006,在段表1006项查得页表首址为6000o这时页号4与页表首址6000相加得6004,进而查页表项6004内容为14,即块号14,该块的始址为14x1024(每块大小)=14336,加上位移量237即得物理地址为14573。"},{"id":"learncoder_121_21276","stem":"某虚拟存储系统中有一个进程共有6页(0〜5),其中代码占3页(0〜2),数据占1页3),数据堆占1页4),用户栈占1页5)。它们依次存放在外存的22、23、25、26存储块。当前,代码页已经分配在物理内存的66、67、87页,数据页为31,并已经进行了修改。数据堆页还没有分配内存,用户栈分配在01页。请问:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image5.png'/>1)页表中应该包含哪些项目?请填写此页表(见表3-13)。2)若内存堆申请内存,因无分配物理内存而产生缺页中断,此时内存无空闲页面,则采用LRU页面淘汰算法选中内存的哪个页面?操作系统作何处理?页表又如何变化?设当前时刻为虚拟时间1256。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"内存计算的变化很多,本题主要考查考生对内存管理的理解。根据题意,本系统采用的是虚拟静储系统,因此立即可以想到,进程一定是部分调入。从题目给出的条件可知,进程共有6页(05),其中代码占3页(02),数据占1页(3),数据堆占1页(4),用户栈占1页(5)这个条件显然是虚拟存储管理的实际情况,进程的逻辑页有6页,因此分配的虚拟空间也是6页。按题意,页面依次存放在外存的22、23、25、26存储块。这个条件告诉我们,进程对应的外存是4块,显然,有2页是在进程运行过程中产生的,一般数据堆和栈是在运行过程中产生的,在虚拟存储管理中,数据堆和栈对应的外存应该在对换区上,而且只有在换出时才分配,所以在外存地址中一般是不包含堆和栈的。题目还提供了当前代码页已经分配在物理内存的66、67、87页,数据页为31,并已经进行了修改。此信息说明虚拟存储管理已经分配了物理内存页框,而且数据页还被修改了,那么应该在页表中表现出来。题目还告诉我们数据堆页还没有分配内存,显然还没有使用。用户栈分配在01页。表示栈也已经分配内存页框了。据此就可以填写表格了。上面已经提到,数据堆还没有分配,当用到该页时,因不在内存,故产生缺页中断,题目的意思是在本进程内进行页面置换。当采用LRU算法时,考虑LRU算法是最近最久未使用的页面淘汰掉,从给定的条件看,数据页3被引用的时间为1020,最久未使用,而且记录的时间为引用时间,所以该页还是最近未使用,故这页被选中淘汰,该页框被分配给数据堆页。解答如下:存在位表示是否在内存;修改位根据题意,只有数据页修改了,故为1;引用位表茶该页的使用情况,在没有特别说明的情况下,只要该页面被调入内存,对虚拟存储管理来说,该页就一定被引用。保护方式代码页只能读和运行,数据页可以读写,栈可以读写,外存块号和内存页框号由题目给出,填写如下。填写页表见表3-23。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image27.png'/>2)当内存堆申请内存时,产生缺页中断,采用LRU页面淘汰算法选中数据页,操作系统根据页表修改位发现该页已经被改写了,所以首先要将该页写回外存块中,修改该页表,然后将该页分配给数据堆页,重新修改数据堆页的页表,返回到缺页中断的那条指令,继续执行。修改的页表见表3-24。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image28.png'/>表3-24修改的页表逻辑4、5页只要从来没有被换出到交换区,就没有外存块号。"},{"id":"learncoder_121_21280","stem":"在页式虚存管理系统中,假定驻留集为m个页帧(初始所有页帧均为空),在长为p的引用串中具有n个不同页号(gm),对于FIFO、LRU两种页面置换算法,试给出页故障数的上限和下限,说明理由并举例说明。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"发生页故障(缺页中断)的原因是当前访问的页不在主存中,需将该页调入主存。.此时不管主存中是否已满(已满则先调出一页),都要发生一次页故障,即无论怎样安,排,n个不同页号在首次进入主存时必须要发生一次页故障,总共发生n次,这就是页故障的下限。虽然不同页号数为m小于或等于总长度p(访问串可能会有一些页重复出现),但驻留集mvn,所以可能会有某些页进入主存后又被调出主存,当再次访问时又发生一次页故障的现象,即有些页可能会出现多次页故障。极端情况是每访问一个页号,该页都不在主存中,这样共发生p次故障。所以,对于FIFO与LRU替换算法,页故障数的上限均为p,下限均为n。例如,当ni=3,p=12,n=4时,有如下访问串:1 1 1 2 2 3 3 3 4 4 4 4 则页故障数为4,这恰好是页故障数的下限n值。又如,访问串为1 2 3 4 1 2 3 4 1 2 3 4则页故障数为12,这恰好是贝故障数的上限p值。"},{"id":"learncoder_121_21277","stem":"在处理器上执行的一个进程页表见表3-14,表.中的虚页号和物理块号是十进制数,起始页号(块号)均为0,所有地址均是存储器字节地址,页的大小为1024B。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image6.png'/>1)详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理地址的过程。2)虚地址5499、2221对应于什么物理地址?","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"1)进行地址变换时首先检索快表,如果在快表中找到所访问的页面号,便修改页表项中的访问位;对于写指令还要将修改位置为1;最后利用该页表项中给出的物理块号和页内位移形成要访问的物理地址。若在快表中未找到该页的页表项,则到内存中的页表中查找(实际上是与快表同时进行),并通过找到的页表项中的状态来了解该页是否已经调入内存。若该页已调入内存,则将该页的页表写入快表;若快表已满,则选择一页置换。若该页尚未调入内存,则产生缺页中断并由系统将该页从外存调入。2)5499=1024x5+379,查表3-14得知虚页号5对应的物理块号为0,即物理地址为379。2221=1024x2+173,查表3-14得知虚页号2对应的物理块号为空,产生缺页中断,等待将该页调入后再确定物理地址。"},{"id":"learncoder_121_21274","stem":"在一个32位计算机虚拟页式存储管理系统中,怎样解决页表非常庞大的问题?请给出具体的解决方案(假定页面大小为4KB,用户空间为2GB,每个内存用4B表示)。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"用户空间为2GB,页面大小为4KB,所以用户空间有2四页。如果厂个页面需要4B表示其地址,需要512页(占2MB空间)表示这些页,页表过于庞大,为宁避免把全部页表一直保存在内存中,可采用二级页表管理方式。将整个2GB(31位)的虚拟地址空间划分为9位的一级页表域、10位的二级页表域和12位的页内位移。每页大小为4KB,9位一级页表域加10位的二级页表域共19位表示2】9个页面。页表设计:一级页表只占一页,存放29=512个二级页表入口地址。二级页表共512个,每个存放21°=1024个虚拟页面地址。工作过程:当一个虚拟地址被送到内存管理单元(MemoryManagementUnit,MMU)时,MMU首先提取一级页表域并把该值作为访问顶级页表的索引。在顶级页表中找到对应表项,其中含有二级页表的地址或页帧号,然后以二级页表域彳乍为访问选定的二级页表的索引,从而找到该虚拟页面的页帧号。如果该页面不在内存中,页表表项的存在位将为0,引发一次页面失效;如果该页面在内存中,从二级页表得到的页帧号将与偏移量结合构成物理地址,该地址被放到总线上并传送至内存。"},{"id":"learncoder_121_21278","stem":"一台计算机有4个页框,装入时间、上次引用时间、它们的R(读)与M(修改)位见表3-15(时间单位:一个时钟周期),请问NRU、FIFO、LRU和第二次机会算法将分别替换哪一页?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image7.png'/>","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"1)NRU算法是从最近一个时期内未被访问过的页中任选一页淘汰。根据题表3J5所示,只有第0页的R和M位均为0,故第0页是最近一个时期内未被访问的页,所以NRU算法将淘汰第0页。2)FIFO算法淘汰最先进入内存的页。由题表3・15所示可知,第2页最先进入内存(装入时间最小),故FIFO算法将淘汰第2页。3)LRU算法淘汰最近最久未用的页。根据题<3-15所示,最近最久未使用的页(上次引用时间最小)是第1页,故LRU算法将淘汰第1页。4)第二次机会算法是淘汰一个自上一次对它检查以来没有被访问过的页。根据题表3-15所示可知,自上一次对它检查以来只有第0页未被访问过(R和M均为0),故第二次机会算法将淘汰第0页。"},{"id":"learncoder_121_21275","stem":"在页式存储管理系统中,现有JI、J2和J3共3个作业同驻内存。其中J2有4个页面,被分别装入到内存的第3、4、6、8块中。假定页面和存储块的大小均为1024B,主存容量为10KB。1)写出J2的页表。2)当J2在CPU上运行时,执行到其地址空间第500号处遇到一条传送指令:MOV2100,3100,请用地址变换图计算MOV指令中的两个操作数的物理地址。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"空","type":"short_answer","answer":"1)J2的页表见表3-22。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image24.png'/>2)本题的页面大小为1024B,可知页内位移为10位,即逻辑地址2100的页号为2,页内位移为2100-2048=52;逻辑地址3100的页号为3,页内位移为3100-3072=28。逻辑地址2100的地址变换过程如图3-28所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image25.png'/>根据图3-28所示可得出逻辑地址2100所对应的物理地址为6196。同理,逻辑地址3100所对应的物理地址为8220。其地址变换过程如图3-29所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image26.png'/>"},{"id":"learncoder_121_21273","stem":"已知系统为32位实地址,采用48位虚拟地址,页面大小为4KB,页表项大小为8B,每段最大为4GB1)假设系统使用纯页式存储,则要采用多少级页表?页内偏移多少位?2)假设系统采用一级页表,TLB命中率为98%,TLB访问时间为10ns,内存访问时间为100ns,并假设当TLB访问失败后才开始访问内存,问平均页面访问时间是多少?3)如果是二级页表,页面平均访问时间是多少?4)上题中,如果要满足访问时间120ns,那么命中率需要至少多少?5)若系统采用段页式存储,则每用户最多可以有多少个段?段内采用几级页表?","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"57.","type":"short_answer","answer":"1)已知页面大小4KB=212B,即页内偏移量的位数为12。采用48位虚拟地址,故虚页号为48-12=36(位)。页表项的大小为8B,则每页可容纳4KB/8B=512=29(项),所需多级页表的级数斗36/91=4,故应采用4级页表。2)系统进行页面访问操作时,首先读取页面对应的页表项,有98%的概率可以在TLB中直接读取到(10ns),然后进行地址变换,访问内存读取页面(100ns),所需要的时间为10ns+100ns=110nso如果TLB未命中(10ns),则要通过一次内存访问来读取页表项(100ns),地址变换后,再访问内存(100ns),因TLB访问失败后才开始访问内存,因此所需时间为10ns+100ns+l00ns=21Ons。页表平均访问时间为[98%xll0+(l-98%)x210]ns=112ns3)二级页表的情况下,TLB命中的访问的访问时间还是110ns,未命中的访问时间加上一次内存访问时间,即210ns+100ns=310ns,所以平均访问时间为[98%x110+(l-98%)x310]ns=l14ns4)本问是在第3问的基础上提出的,假设快表命中率为p,则应满足[px110+(1~p)x310]ns120ns求解不等式得pM95%。5)系统采用48位虚拟地址,虚拟地址空间为248B,每段最大为4GB,那么最大段数=248B/4GB=216=65536O4GB=232B,即段内地址位数为32,段内采用多级页表,那么多级页表级数=T(32-⑵/91=3,故段内采用3级页表。"},{"id":"learncoder_121_21270","stem":"(2016年统考真题)某进程访问页面的序列如下所示。若工作集的窗口大小为6,则在t时刻的工作集为()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image3.png'/>","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"在任一时刻t,都存在一个集合,它包含所有最近k次(该窗口大小为6)内存访问所访问过的页面。这个集合w(k,t)就是工作集。该题中最近6次访问的页面分别为6、0、3、2、3、2,再去除重复的页面,形成的工作集为{6,0,3,2},故选A。","type":"choice","options":{"D":"{4,5,6,0,3,2}","B":"{2,3,0,4}","C":"{0,4,3,2,9}","A":"{6,0,3,2}"},"answer":"A"},{"id":"learncoder_121_21271","stem":"(2017年统考真题)某计算机按字节编址,其动态分区内存管理采用最佳适应算法,每次分配和回收内存后都对空闲分区链重新排序。当前空闲分区信息见表3-12。回收起始地址为60K、大小为140KB的分区后,系统中空闲分区的数量、空闲分区链第一个分区的起始地址和大小分别是()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image4.png'/>","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"回收起始地址为60K、大小为140KB的分区时,它与表312中第一个分区和第四个分区合并,成为起始地址为20K、大小为380KB的分区,剩余3个空闲分区。再回收内存后,算法会对空闲分区链按分区大小从小到大迸行排序,表312中第二个分区排第一,所以选B。","type":"choice","options":{"A":"3、20K,380KB","D":"4、500K,80KB","B":"3、500K,80KB","C":"4、20K,180KB"},"answer":"B"},{"id":"learncoder_121_21269","stem":"(2016年统考真题)某进程的段表内容见表3-ll。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image2.png'/>当访问段号为2、段内地址为400的逻辑地址时,进行地址转换的结果是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"访问段号2,找到段表第三行段表项,段内地址为400,与段长比较发现大于段长,故地址越界异常,选D。","type":"choice","options":{"D":"越界异常","A":"段缺失异常","C":"越权异常","B":"得到内存地址4400"},"answer":"D"},{"id":"learncoder_121_21266","stem":"(2015年统考真题)系统为某进程分配了4个页框,该进程已访问的页号序列为2,0,2,9,3,4,2,8,2,4,8,4,5。若进程要访问的下一页的页号为7,依据LRU算法,应淘汰页的页号是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"可以采用书中常规的解法思路,也可以采用便捷法。对页号序列从后往前计数,直到数到4(页框数)个不同的数字为止,这个停止的数字就是要淘汰的页号(最近最久未使用的页),题中为页号2。","type":"choice","options":{"D":"8","C":"4","A":"2","B":"3"},"answer":"A"},{"id":"learncoder_121_21267","stem":"(2015年统考真题)在请求分页系统中,页面分配策略与页面置换策略不能组合使用的是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"对一个进程进行固定分配时,页面数不变,不可能出现全局置换。而A、B、D是现代操作系统中常见的3种策略。","type":"choice","options":{"D":"固定分配,局部置换","B":"可变分配,局部置换","C":"固定分配,全局置换","A":"・可变分配,全局置换"},"answer":"C"},{"id":"learncoder_121_21268","stem":"(2016年统考真题)某系统釆用改进型CLOCK置换算法,页表项中字段A为访问位,M为修改位。A=0表示页最近没有被访问」A=1表示页最近被访问过。M=0表示页没有被修改过,M=1表示页被修改过。按(A,M)所有可能的取值,将页分为4类:(0,0)、(1,0)、(0,1)和(1,1),则该算法淘汰页的次序为()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"改进型时钟算法的算法步骤如下:1)从指针的当前位置开始,扫描循环链表。在这次扫描过程中,对访问位和修改位不做修改。选择遇到的第一个(访问位电修改位=0)的页面用于替换。2)如果第1)步没有找到,重新扫描,寻找(访问位=0,修改位=1)的页面用于替换。在这个扫描过程中,每一个非替换的页面都将其访问位置0。3)如果第2)步仍没有找到,则回到起始位置,此时所有页面的访问位均为0,重新执行第1)步和第2)步,则一定能找到替换页面。从而,该算法淘汰页的次序为(0,0),(0,1),(1,0),(1,1),故A正确。","type":"choice","options":{"B":"(0,0),(1,0),(0,1),(1,1)","C":"(0,0),(0,1),(1,1),(1,0)","D":"(0,0),(1,1),(0,1),(1,0)","A":"(0,0),(0,1),(1,0),(1,1)"},"answer":"A"},{"id":"learncoder_121_21263","stem":"(2014年统考真题)下列措施中,能加快虚实地址转换的是()。I.增大快表(TLB)容量II.让页表常驻内存III.增大交换区(swap),","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"虚实地址转换是指逻辑地址和物理地址的转换。增大快表容量能把更多的表项装入快表中,会加快虚实地址转换的平均速率;让页表常驻内存可以省去一些不在内存中的页表从磁盘上调入的过程,也能加快虚实地址转换;增大交换区对虚实地址转换速度无影响。因此I、II正确,选C。","type":"choice","options":{"D":"仅II、III","A":"仅I","B":"仅II","C":"仅I、II"},"answer":"C"},{"id":"learncoder_121_21264","stem":"(2014年统考真题)在页式虚拟存储管理系统中,采用某些页面置换算法,会出现Belady异常现象,即进程的缺页次数会随着分配给该进程的页框个数的增加而增加。下列算法中,可能出现Belady异常现象的是、()。I.LRU算法II.FIFO算法HI.OPT算法","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"只有FIFO算法会导致Belady异常,选A。","type":"choice","options":{"D":"仅II、III","B":"仅I、II","A":"仅II","C":"仅1、III"},"answer":"A"},{"id":"learncoder_121_21265","stem":"(2014年统考真题)下列选项中,属于多级页表优点的是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"多级页表不仅不会加快地址的变换速度,还因为增加更多的查表过程,会使地址变换速度减也不会减少缺页中断的次数,反而如果访问过程中多级的页表都不在内存中,会大大增加缺页的次数;也并不会减少页表项所占的字节数(详细解析参考下面的补充知识点)。而多级页表能够减少页表所占的连续内存空间,即当页表太大时,将页表再分级,可以把每张页表控制在一页之内,减少页表所占的连续内存空间,因此选D。","type":"choice","options":{"A":"加快地址变换速度","C":"减少页表项所占字节数","D":"减少页表所占的连续内存空间","B":"减少缺页中断次数"},"answer":"D"},{"id":"learncoder_121_21262","stem":"下列关于页式存储说法中,正确的是()。I.在页式存储管理中,若关闭TLB,则每当访问一条指令或存取一个操作数时都要访问两次内存II.页式存储管理不会产生内部碎片III.页式存储管理当中的页面是为用户所感知的IV.页式存储方式可以采用静态重定位","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"关闭了TLB之后,每当访问一条指令或存取一个操作数时都要先访问页表(内存中),得到物理地址后,再访问一次内存进行相应操作。II错误,记住凡是分区固定的都会产生内部碎片,而无外部碎片。HI错误,页式存储管理对于用户是透明的。W错误,静态重定位是在程序运行之前由装入程序完成的(即装入内存时进行的)。而页式存储管理方案在运行过程中可能改变程序位置,静态重定位不能满足其要求。综上分析,本题选C选项。","type":"choice","options":{"C":"仅I","D":"I、II、III、IV","B":"仅I、IV","A":"仅I、II、IV"},"answer":"C"},{"id":"learncoder_121_21256","stem":"在虚拟页式存储管理方案中,()完成将页面调入内存的工作。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"缺页中断就是要访问的页不在主存中,缺页中断处理就是操作系统将缺失页面调入主存后再进行访问。B错误。页面淘汰就是当内存空间已被占满而又要调入新页时,必须淘汰已在内存的某一页面。如果被淘汰的页面曾被修改述还要将此页写回到外存,再换进新的页面。C错误。工作集模型用于处理抖动问题,一个进程当前使用的页的集合叫作它的工作集(WorkingSet)如果整个工作集都在内存中,在进入下一个运行阶段之前进程的运行不会引起很多页面故障。D错误。紧缩技术是将空闲小分区整合,移动拼接成大分区的过程。","type":"choice","options":{"D":"紧缩技术利用","A":"缺页中断处理","C":"工作集模型应用","B":"页面淘汰过程"},"answer":"A"},{"id":"learncoder_121_21260","stem":"(2013年统考真题)若用户进程访问内存时产生缺页,则下列选项中,操作系统可能执行的操作是()。I.处理越界错误II.置换页面III.分配内存","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"用户进程访问内存时产生缺页会发生缺页中断。发生缺页中断时,操作系统可能执行的操作是置换页面或分配内存。系统内没有越界的错误,不会进行越界出错处理。","type":"choice","options":{"B":"仅II、III","A":"仅I、II","D":"I、II和III","C":"仅I、III"},"answer":"B"},{"id":"learncoder_121_21257","stem":"(2010年统考真题)某基于动态分区存储管理的计算机,其主存容量为55MB(初始为空),采用最佳适配(BestFit)算法,分配和释放的顺序为:分配15MB,分配30MB,释放15MB,分配8MB,分配6MB,此时主存中最大空闲分区的大小是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"采用最佳适配方法,就是每次只找最小且能满足所需分配大小的空闲分区。图3-27演示了整个分区的分配过程(粗体表示已分配空间,正常字体表示空闲空间)。由此可知最后主存的最大空间为9MB。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image23.png'/>","type":"choice","options":{"C":"10MB","D":"15MB","A":"7MB","B":"9MB"},"answer":"B"},{"id":"learncoder_121_21261","stem":"在段页式分配中,CPU每次从内存中取一次数据需要()次访问内存。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"在段页式分配中,取一次数据时先从内存查找段表,再访问内存查找相应的页表,最后拼成物理地址后访问内存,共需要3次内存访问。","type":"choice","options":{"B":"2","A":"1","C":"3","D":"4"},"answer":"C"},{"id":"learncoder_121_21258","stem":"(2011年统考真题)当系统发生抖动(Trashing)时,可以采取的有效措施是()。I.撤销部分进程II.增大磁盘交换区的容量III.提高用户进程的优先级","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"在具有对换功能的操作系统中,通常把外存分为文件区和对换区。前者用于存放文件,后者用于存放从内存中换出的进程。抖动是指刚刚被换出的内容又要被访问,因此马上又要换入这种系统频繁置换页面的现象。发生抖动时,.系统会将大部分时间用于处理页面置换上,从而降低了系统效率。撤销部分进程可以减少系统页面数,可以有效防止系统抖动。改变优先级与增大交换区容量对减少抖动没有帮助。","type":"choice","options":{"A":"仅I","D":"仅I、II","B":"仅II","C":"仅III"},"answer":"A"},{"id":"learncoder_121_21259","stem":"(2012年统考真题)下列关于虚拟存储的叙述中,正确的是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"连续分配技术是为一个用户程序分配一个连续的内存空间,必须事先为其一次性分配足够的内存空间,这样可能会造成内存浪费,而且载入的程序会受到存储器大小的影响,过大的程序是无法执行的。虚拟存储器是通过采用请求调页系统的方法在逻辑上扩充内存,允许将一个程序分部多次调入内存,将程序的一部分载入内存就可以开始执行。如果采用这种连续分配技术,就需要为程序预留足够的内存空间,从而无法达到在逻辑上扩大内存容量的目的,因此只能基于非连续分配。虚拟存储容量仅与系统的地址结构有关系,与内外存容量均没有关系。简单点说,即使内外存固定不变,只要系统地址位数增多,虚拟存储容量就会随之变大。","type":"choice","options":{"A":"虚拟存储只能基于连续分配技术","C":"虚拟存储容量只受外存容量的限制","B":"虚拟存储只能基于非连续分配技术","D":"虚拟存储容量只受内存容量的限制"},"answer":"B"},{"id":"learncoder_121_21253","stem":"使用修改位的目的是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"修改位表示该页在调入内存后是否被修改过,主要是供置换页面时参考,并不是为了实现某种页面置换算法而使用的,因此选项A、B都不对,选项C是干扰项。","type":"choice","options":{"B":"实现NRU页面置换算法","C":"在快表中检查页面是否进入","D":"检查页面是否最近被写过","A":"实现LRU页面置换算法"},"answer":"D"},{"id":"learncoder_121_21250","stem":"()存储管理方式提供一维地址结构。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"在分页存储管理中,作业地址空间是一维的,程序员只需用一个符号表示地址。在分段存储管理中,段与段是独立的,而且段长不固定,因此分段管理的作业地址空间是二维的,程序员在标识一个地址时,不仅要给出段名,还要给出段内位移。","type":"choice","options":{"D":"以上都不对","C":"分段和段页式","B":"分页","A":"分段"},"answer":"B"},{"id":"learncoder_121_21254","stem":"在分页虚拟存储管理中,“二次机会”调度策略和“时钟”调度策略在决定淘汰哪一页时,都用到了()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"“二次机会”和“时钟”调度策略有个共同之处,就是若当前页面刚被访问过(即引用位=1),则给予第二次留驻机会。","type":"choice","options":{"D":"修改位","B":"快表","C":"引用位","A":"虚实地址变换机构"},"answer":"C"},{"id":"learncoder_121_21251","stem":"下列存储管理方式中,会产生内部碎片的是()。Ⅰ.请求分段存储管理Ⅱ.请求分页存储管理Ⅲ.段页式分区管理Ⅳ.固定式分区管理","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"只要是固定的分配就会产生内部碎片,其余的都产生外部碎片。若固定和不固定同时存在(如段页式),则看作固定。请求分段:每段的长度不同(不固定),产生外部碎片。请求分页:每页大小固定,产生内部碎片。段页式:视为固定,产生内部碎片。固定式分区管理产生的是内部碎片。","type":"choice","options":{"B":"Ⅲ、Ⅳ","D":"Ⅱ、Ⅲ、Ⅳ","C":"只有Ⅱ","A":"Ⅰ、Ⅱ、Ⅲ"},"answer":"D"},{"id":"learncoder_121_21248","stem":"对重定位存储管理方式,应()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"为了使地址变换不影响到指令的执行速度,必须有硬件的支持,即需要在整个系统中增设一个重定位寄存器,用来存放程序(数据)在内存中的起始地址。在执行程序或访问数据时,真正访问的内存地址是由相对地址与重定位寄存器中的地址相加而成的。因为系统处理器在同一时刻只能执行一条指令或访问数据,所以为每个程序(数据)设置一个寄存器是没有必要的(而且不现实,寄存器的成本很高,同时程序的数量不确定),只需在切换程序执行时更新寄存器内容即可。","type":"choice","options":{"C":"为每个程序设置两个董定位寄存器","D":"为每个程序和数据都设置一个重定位寄存器","B":"为每个程序设置一个重定位寄存器","A":"在整个系统中设置一个重定位寄存器"},"answer":"A"},{"id":"learncoder_121_21255","stem":"产生内存抖动的主要原因是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"在虚存中,页面在内存与外存之间频繁调度,以至于调度页面所需时间比进程实际运行的时间还多,此时系统效率急剧下降,甚至导致系统崩溃。这种现象称为颠簸或抖动。抖动的原因是页面置换算法不合理。读者也可考虑Belady现象:增加分配页面数(扩大内存空间),但这会造成更高的缺页率。因此抖动的主要原因还是因为页面置换算法不合理。","type":"choice","options":{"A":"内存空间太小","B":"CPU运行速度太慢","D":"页面置换算法不合理","C":"CPU调度算法不合理"},"answer":"D"},{"id":"learncoder_121_21252","stem":"釆用分页或分段管理后,提供给用户的物理地址空间()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"页表和段表同样存储在内存中,系统提供给用户的物理地址空间为总的空间大小减去页表或段表长度。由于页表和段表的长度不能确定,因此提供给用户的物理地址空间大小也不能确定。","type":"choice","options":{"C":"不能确定","D":"一样大","B":"分段支持更大的物理空间","A":"分页支持更大的物理空间"},"answer":"C"},{"id":"learncoder_121_21249","stem":"可重入程序是通过()方法来改善系统性能的。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"可重入程序主要是通过共享来使用同一块存储空间的,或者通过动态链接的方一式将所需的程序段映射到相关进程中,其最大的优点就是减少了对程序段的调入调出,因此减少了对换数量。","type":"choice","options":{"B":"改变用户数","D":"减少对换数量","C":"提高对换速度","A":"改变时间片长度"},"answer":"D"},{"id":"learncoder_121_21247","stem":"作业在执行中发生缺页中断,经操作系统处理后应让其执行()指令。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"因为中断是由执行指令自己产生的,而且还没有执行完,故中断返回时应当重新执行被中断的那一条指令。","type":"choice","options":{"C":"被中断的后一条","A":"被中断的前一条","B":"被中断的那一条","D":"启动时的第一条"},"answer":"B"},{"id":"learncoder_121_21244","stem":"操作系统采用分页存储管理方式,要求()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"在多个进程并发执行时,所有进程的页表大多数驻留在内存中,在系统中只设置一个页表寄存器FTR,在其中存放内存中页表的起始地址和页表长度。平时进程未执行时,页表的起始地址和页表长度存放在本进程的PCB中,当调度到某进程时;才将这两个数据装入页表寄存器中。","type":"choice","options":{"A":"每个进程拥有一张页表,且进程的页表驻留在内存中","D":"所有进程共享一张页表,只有页表中当前使用的页面必须驻留在内存中","C":"所有进程共享一张页表,以节约有限的内存空间,但页表必须驻留在内存中","B":"每个进程拥有一张页表,但只要执行进程的页表驻留在内存中"},"answer":"A"},{"id":"learncoder_121_21241","stem":"下面有关外层页表的叙述中错误的是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"外层页表不能表示页面的物理位置,而只是在页表较多时为页表建立的一个页表。因为多了一层页表,也就额外需要一个寄存器来完成地址变换。","type":"choice","options":{"B":"外层页表是指页表的页表","A":"反映在磁盘上页面存放的物理位置","C":"为不连续(离散)分配的页表再建立一个页表","D":"若有了外层页表,则需要一个外层页表寄存器就能实现地址变换"},"answer":"A"},{"id":"learncoder_121_21245","stem":"采用分段存储管理的系统中,若段地址用24位表示,其中8位表示段号,则允许每段的最大长度是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"段地址为24位,其中8位表示段号,则段内偏移量(段内位移)占用剩余的16位,因此最大段长为216B.","type":"choice","options":{"C":"2B","B":"216B","A":"224B","D":"232B"},"answer":"B"},{"id":"learncoder_121_21242","stem":"()存储管理方式能使存储碎片尽可能少,而且使内存利用率较高。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"分页管理与固定分区和可变分区相比,碎片明显减少,因为分页管理的碎片大小能够控制在一个页面大小以内,而页面大小通常都较小。容易混淆的是段页式和页式的碎片数量比较。段页式虽然结合了页式和段式的优点,但是碎片的数量却比页式多,因为一个进程往往会有很多个段,在段页式管理下每个段都会有一个页内碎片存在;而在页式管理下,一个进程只有一个页内碎片。","type":"choice","options":{"B":"可变分区","C":"分页管理","A":"固定分区","D":"段页式管理"},"answer":"C"},{"id":"learncoder_121_21246","stem":"在一个操作系统中对内存采用页式存储管理方法,则所划分的页面大小()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片(称为页面或页),并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(Frame),也同样为它们加以编号,如0#块、1#块等。","type":"choice","options":{"A":"要依据内存大小而定","B":"必须相同","C":"要依据CPU的地址结构而定","D":"要依据内存和外存而定"},"answer":"B"},{"id":"learncoder_121_21243","stem":"解决主存碎片问题较好的存储器管理方式是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"分页管理方式中没有外部碎片,内存利用率高;而分段管理方式中会发生找不到连续的空闲分区放入整段,相对内存利用率不高。可变分区与单一连续分配完败,不用考虑。","type":"choice","options":{"C":"分段管理","B":"分页管理","D":"单一连续分配","A":"可变分区"},"answer":"B"},{"id":"learncoder_121_21240","stem":"在可变分区分配管理中,某一作业完成后,系统收回其内存空间,并与相邻区合并,为此修改空闲区说明表,造成空闲分区数减1的情况是()。2020版操作系统高分笔记","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"当有上邻空闲分区,也有下邻空闲分区时,系统将它们合并成一个大的空闲分区,从而导致总的空闲分区数减少。上无、下无时,空闲分区数加1;上有、下无或者上无、下有时,空闲分区数保持不变。","type":"choice","options":{"C":"无上邻空闲分区,但有下邻空闲分区","D":"有上邻空闲分区,也有下邻空闲分区","A":"无上邻空闲分区,也无下邻空闲分区","B":"有上邻空闲分区,但无下邻空闲分区"},"answer":"D"},{"id":"learncoder_121_21237","stem":"在空白表中,空白区按其长度由小到大进行查找的算法称为()算法。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"所谓最佳是指每次为作业分配内存时,总是把能满足要求又是最小的空闲分区&亦分配给作业,避免“大材小用”。为了加速寻找,该算法要求将所有的空闲分区按其容量以从J小到大的顺序形成一空闲分区链。这样,第一次找到的能满足要求的空闲区必然是最佳的。","type":"choice","options":{"B":"最差适应","D":"先进先出","C":"最先适应","A":"最佳适应"},"answer":"A"},{"id":"learncoder_121_21238","stem":"要保证一个程序在主存中被改变了存放位置后仍能正确地执行,则对主存空间应采用()技术。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"动态重定位允许程序运行时在内存中移动位置,把装入模块装入到内存后的所有地址都是相对地址。在程序执行过程中,每当访问到相应指令或数据时,才将要访问的程序或数据的相对地址转换为物理地址,所以说动态重定位适合将目标程序直接装入内存。","type":"choice","options":{"D":"静态分配","B":"动态重定位","C":"动态分配","A":"静态重定位"},"answer":"B"},{"id":"learncoder_121_21235","stem":"在下述存储管理方案中,()管理方式要求作业占用连续的存储空间。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"只有分区法要求占用连续空间,其他均为离散分配方式。如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式;段页式离散分配的基本单位也是页。","type":"choice","options":{"D":"段页式","C":"分段","B":"分页","A":"分区"},"answer":"A"},{"id":"learncoder_121_21239","stem":"下面关于虚拟存储器的论述中,正确的是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"此题为概念题,记住即可。在段页式系统中,段是用户的逻辑地址空间,页是内存的物理地址空间,因为段是用户.定义的,而页是系统自动划分的,所以页对于用户是透明的。每个系统的页面大小是固定的,由系统决定,不允许使用不同大小的页面。最佳置换算法仅用来对比其他算法,无法实现。","type":"choice","options":{"C":"为了能让更多的作业同时运行,通常只装入10%30%的作业即启动运行","B":"为了提高请求分页系统中内存的利用率,允许用户使用不同大小的页面","A":"在段页式系统中以段为单位管理用户的逻辑地址空间,以页为单位管理内存的物理地址空间,有了虚拟存储器才允许用户使用比内存更大的地址空间","D":"最佳置换算法是实现虚拟存储器的常用算法"},"answer":"A"},{"id":"learncoder_121_21236","stem":"不会产生内部碎片的存储管理是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"只要是固定大小的分配就会产生内部碎片,其余的都会产生外部碎片。如果固定和不固定同时存在(如段页式),物理本质还是固定的,解释如下。分段虚拟存储管理:每一段的长度都不一样(对应不固定),所以会产生外部碎片,但不会产生内部碎片。分页虚拟存储管理:每一页的长度都一样(对应固定),所以会产生内部碎片,但不会产生外部碎片。段页式分区管理:地址空间首先被分成若干个逻辑分段(这里的分段只是逻辑上的,而我们所说的碎片都是物理上真实存在的,是否有碎片还是要看每个段的存储方式,所以页才是物理单位),每段都有自己的段号,然后再将每个段分成若干个固定的页。所以其仍然是固定分配,会产生内部碎片。固定式分区管理:很明显是固定的大小,会产生内部碎片。","type":"choice","options":{"B":"分段式存储管理","A":"分页式存储管理","D":"段页式存储管理","C":"固定分区式存储管理"},"answer":"B"},{"id":"learncoder_121_21234","stem":"目标程序对应的地址空间是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"在多道程序环境下,用户不能事先确定程序在内存中的位置,为能独立编制程序只能采用相对地址来编制程序。名空间:名空间是为了解决命名冲突的方法。将名字相同的变量、函数和类定义在不同的名空间中。需要注意的是,同一个名空间中标识符应该是唯一的。地址空间:一个目标程序所占有的地址范围,这些地址的编号是相对于起始地址而定的,称为相对地址或逻辑地址。存储空间(物理地址空间):目标程序装入主存后占用的一系列物理单元的集合,这些单元的编号称为绝对地址或物理地址。","type":"choice","options":{"C":"存储空间","A":"名空间","B":"逻辑地址空间","D":"物理地址空间"},"answer":"B"},{"id":"learncoder_121_21232","stem":"考虑一个分页式存储管理系统,其页表常驻内存。I.如果内存访问耗时200ns,那么访问内存中的数据需要多长时间?II.如果引入关联寄存器(AssociativeRegisters),而且75%的页面可以从关联寄存器中找到,那么此时的有效访问时间(EfifectiveMemoryReferenceTime)应为()。假设访问关联寄存器的时间可以忽略。注:有效访问时间即为平均访问时间。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"400ns,其中200ns访问页表,200ns访问内存中的数据。II.有效访问时间=0.75x200ns+0.25x400ns=250ns。引入关联寄存器之后,直接从关联寄存器中可以找到的页面,只需要一次访问内存,即只需要耗时200ns;其他还是要两次访问,即400ns。","type":"choice","options":{"D":"600ns,250ns","C":"400ns,250ns","A":"200ns,150ns","B":"400ns,150ns"},"answer":"C"},{"id":"learncoder_121_21233","stem":"假设一个“按需调页”虚拟存储空间,页表由寄存器保存。在存在空闲页帧的条件下,处理一次缺页的时间是8mso如果没有空闲页面,但待换出页面并未更改,处理一次缺页的时间也是8mso若待换出页面已被更改,则需要20mso访问一次内存的时间是100ns。假设70%的待换出页面已被更改,请问缺页率不超过()才能保证有效访问时间小于或等于200ns?","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"题目并没有明确当缺页中断时内存中是否有空闲页帧,所以假设内存总是忙的。设缺页率为P。访问内存中页面:(1-P)x100ns页面不在内存,但不需要保存待换出页面:Px(1-70%)x(8ms+100ns)页面不在内存,但需要保存待换出页面:Px70%x(20ms+100ns)所以,有效访问时间=(1-P)xl00ns+Px(1-70%)x(8ms+100ns)+Px70%x(20ms+100ns)=200ns,得P=0.6X10^(-5)。","type":"choice","options":{"A":"0.6X104","B":"1.2X104","D":"1.2X105","C":"0.6X105"},"answer":"C"},{"id":"learncoder_121_21231","stem":"设有一页式存储管理系统,向用户提供的逻辑地址空间最大为16页,每页2048B,内存总共有8个存储块,试问逻辑地址至少为多少位?内存空间有多大()","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"每页为2048B,所以页内位移部分地址需要占据11个二进制位;逻辑地址空间最大为16页,所以页号部分地址角需要占据4个二进制位。故逻辑地址至少应为一丿15位。由于内存共有8个存储块,在页内存储管理系统中,存储块大小与页面的大小相等,因此内存空间为16KB。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image22.png'/>","type":"choice","options":{"B":"逻辑地址至少为12位,内存空间有16KB","A":"逻辑地址至少为12位,内存空间有32KB","C":"逻辑地址至少为15位,内存空间有32KB","D":"逻辑地址至少为15位,内存空间有16KB"},"answer":"D"},{"id":"learncoder_121_21230","stem":"假定某页式管理系统中,主存为128KB,分成32块,块号为0,1,2,3,…,31;某作业有5块,其页号为0,1,2,3,4,被分别装入主存的3,8,4,6,9块中。有一逻辑地址为[3,70]试求出相应的物理地址(其中方括号中的第一个元素为页号,第二个元素为页内地址,按十进制计算)()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"块大小为128KB/32=4KB,因为块与页面大小相等,所以每页为4KB。第3页被装入到主存第6块中,故逻辑地址[3,70]对应的物理地址为4Kx6+70=24576+70=24646o其地址变换过程如图3-26所示。","type":"choice","options":{"C":"24576","A":"14646","B":"24646","D":"34576"},"answer":"B"},{"id":"learncoder_121_21228","stem":"适合多道程序运行的存储管理中,存储保护是为了()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"存储保护:当多个用户共享主存时,应防止由于一个用户程序出错而破坏其他用户的程序和系统软件,以及一个用户程序不合法地访问不是分配给它的主存区域。在多道程序系统中,内存中既有操作系统,又有许多用户程序。为使系统正常运行,避免内存中各程序相互干扰,必须对内存中的程序和数据进行保护。存储保护可以从以下两个方面进行:防止地址越界、防止操作越权。","type":"choice","options":{"B":"防止非法访问磁盘文件","D":"防止各道作业相互干扰","A":"防止一个作业占用同一个分区","C":"防止非法访问磁带文件"},"answer":"D"},{"id":"learncoder_121_21225","stem":"总体上说,“按需调页”(Deirnnd.Paging)是个很好的虚拟内存管理策略。但是,有些程序设计技术并不适合于这种环境,例如()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"要使按需调页有效,就要紧紧抓住按需调页被提出的前提,那就是程序运行的局部性原理。按需调页适合运行的程序是具有局部性现象的程序,即最好是对数据进行顺序访问的程序。对于选项A,堆栈只能在栈顶进行操作,栈底的元素很久都用不着,显然对数据的访问具有局部性。对于选项B,线性搜索是按顺序搜索下来,显然也具有局部性。对于选项C,矢量运算就是数组运算,数组存放是连续的,所以数组运算就是邻近的数据的运算,也满足局部性。最后来看选项D,二分法搜索先查找中间的那个元素,如果没找到,再找前面数过去1/4位置或者倒数1/4位置的那个元素,再这样找下去,显然每次搜寻的元素不都是相邻的,由此可见二分法搜索是跳着搜索的,所以不具有局部性,不适合按需谊页的环境,故答案应该选D。","type":"choice","options":{"A":"堆栈","C":"矢量运算","D":"二分法搜索","B":"线性搜索"},"answer":"D"},{"id":"learncoder_121_21229","stem":"操作系统中为实现多道程序并发,对内存管理可以有多种方式,其中代价最小的是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"为实现多道程序并发,系统必须将多个程序调入内存,让多个进程竞争CPU和外设,使得计算机能高效地运转。多个程序调入内存会存在越界、溢出等多种问题。为解决这些问题,存储管理采用了分区法、分页法、分段法和段页式等多种技术,而实现分页、分段和段页式存储管理都需要特殊的硬件支持(例如带地址加法器的CPU等),因而代价较高。分区存储是实现多道程序并发的简单易行而代价最小的方法,这种方法特别适合在嵌入式系统或移动设备的操作系统中实现多道程序并发。","type":"choice","options":{"C":"分段管理","A":"分区管理","B":"分页管理","D":"段页式管理"},"answer":"A"},{"id":"learncoder_121_21226","stem":"考虑页面替换算法,系统有m个页帧(Frame)供调度,初始时全空;引用$(ReferenceString)长度为p,包含了n个不同的页号,无论用什么算法,缺页次数不会少于()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"但考查的角度较为灵活,并非考查页面置换算法的使用,而是讨论置换算法的缺页次数的界限,需要考生深入理解导致页面置换的原因后。引用串的长度为P,那么即使每次有页面请求都发生缺页,缺页的次数也是p,所以P是缺页次数的上限。不同的页号数为m那么至少每种页号第一次出现的时候内存中不会有这种页号存在,所以每种页号第一次出现的时候必然发生缺页,所以缺页次数的下限是no故答案选C。","type":"choice","options":{"B":"p","A":"m","C":"n","D":"min(m,n)"},"answer":"C"},{"id":"learncoder_121_21227","stem":"在某页式存储管理系统中,页表内容见表3-10。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image1.png'/>若页面的大小为4KB,则地址转换机构将逻辑地址0转换成的物理地址是()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"本题中页的大小为4KB,从表3:10中可知,每个页存储在一个块中,即每个块大小为4KJB。逻辑地址0对应的页号为0,表中好应的块号为2。第0块物理地址范围为0〜4095;1块物理地址范围为4096〜8191;第2块物理地址范围为8192〜12287。本题易错在逻辑地址、物理地址、块号都是从0开始编址的,而不是1。","type":"choice","options":{"B":"8193","A":"8192","C":"2048","D":"2049"},"answer":"A"},{"id":"learncoder_121_21224","stem":"设有8页的逻辑空间,每页有1024B,它们被映射到32块的物理存储区中。那么,逻辑地址的有效位是()位,物理地址至少是()位。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"本题需要弄清页大小、页号位数、物理块数、页内偏移地址、逻辑地址位数、物理地址位数之间的联系。因为8页=23页,所以表示页号的地址有3位,又因为每页有1024B=210B,所以页内偏移地址有10位,所以逻辑地址总共有13位;又因为页面的大小和物理块的大小是一样的,所以每个物理块也是1024B,而内存至少有32块物理块,所以内存大小至少是32X1024B=215B,所以物理地址至少要15位,不然无法访问内存的所有区域。故选C。","type":"choice","options":{"C":"13、15","D":"14、16","B":"12、14","A":"10、11"},"answer":"C"},{"id":"learncoder_121_21221","stem":"假定有一个请求分页存储管理系统,测得系统各相关设备的利用率为:CPU为10%,磁盘交换区为99.7%;其他I/O设备为5%o试问:下面()措施可能改进CPU的利用率?I.增大内存的容量II.增大磁盘交换区的容量HL减少多道程序的度数IV.增加多道程序的度数V.使用更快速的磁盘交换区VI.使用更快速的CPU","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"首先分析题目给出的条件:CPU和I/O设备占用率较低,而磁盘交换区占用率非常高,说明当前系统频繁缺页,频繁进行页面置换,导致真正执行任务的时间变短,效率变低,系统发生抖动。要缓解这种情况,需要降低系统缺页率,才能使系统有更多时间来处理任务而不是置换页面,根据这一思路来分析选项。①I正确。增大内存可使每个程序得到更多的页面,能减少缺页率,因而减少换入换出过程,可提高CPU的利用率。②II错误。因为系统实际已处于频繁的换入换出过程中,增加磁盘交换区容量也不能降低缺页率,所以增大磁盘交换区的容量无用。③ID正确。减少多道程序的度数可以提高CPU的利用率。因为从给定的条件中可知,磁盘交换区的利用率为99.7%,说明系统现在已经处于频繁的换入换出过程中,可减少主存中的程序,这样每个进程分配到的内存空间会相对增大,可以有效降低缺页率。④IV错误。系统处于频繁的换入换出过程中,再增加主存中的用户进程数,只能导致系统的换入换出更频繁,使性能更差。⑤V错误。因为系统现在处于频繁的换入换出过程中,即使釆用更快速的磁盘交换区,其换入换出频率也不会改变。⑥VI错误。系统处于频繁的换入换出过程中,CPU处于空闲状态,利用率不高,提高CPU的速度无济于事。综上分析,I、in可以改进CPU的利用率。","type":"choice","options":{"D":"II、VI","C":"II、III、V","A":"I、II、III、IV","B":"I、III"},"answer":"B"},{"id":"learncoder_121_21218","stem":"在一个请求分页系统中,采用LRU页面置换算法时,加入一个作业的页面走向为:13,2,1,1,3,5,1,3,2,1,5o当分配给该作业的物理块数分别为3和4时,在访问过程中所发生的缺页率为()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"分析如下。物理块数为3时,缺页情况见表3-20。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image20.png'/>注:当分配给作业的物理块数为4时,注意到作业请求页面序列只有4个页面,可以直接得出缺页次数为4,而不需要按表3-21列出缺页情况。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第3章)/image21.png'/>","type":"choice","options":{"D":"50%,75%","A":"25%,33%","B":"25%,100%","C":"50%,33%"},"answer":"C"},{"id":"learncoder_121_21222","stem":"一个页式虚拟存储系统,其并发进程数固定为4个。最近测试了它的CPU利用率和用于页面交换的利用率,假设得到的结果为下列选项,()说明系统需要增加进程并发数?I.CPU利用率13%;磁盘利用率97%II.CPU利用率97%;磁盘利用率3%III.CPU利用率13%;磁盘利用率3%","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"题目要求要增加进程并发数,也就是说,当前的索统利用率不够高,可以允许更多的进程并发执行。根据这个推断,只需找出利用率不高的选项就可以了。根据上一题可以得知,磁盘利用率越高,表示系统换页越频繁。若同时出现磁盘利用率过高和CPU利用率过低,贝!I说明当前系统出现了抖动。①I:系统CPU利用率很低,但磁盘利用率很高,可以推断系统出现抖动现象。这时若再增加并发进程数反而会降低系统性能。页式虚拟存储系统因抖动现象而未能充分发挥功用。②II:系统CPU利用率很高,磁盘利用率很低,说明缺页现象很少,大部分时间在处理任务,系统性能正常。此时不需要采取什么措施。®m:系统CPU利用率和磁盘利用率都很低,表明缺页现象不明显,而且CPU没有充分利用。此时应该增加并发进程数,提高CPU的利用率。综上分析,只有nt需要增加并发进程数。","type":"choice","options":{"B":"II","C":"III","A":"I","D":"I、III"},"answer":"C"},{"id":"learncoder_121_21219","stem":"有一个矩阵为100行x200列,即a[100][200]o在一个虚拟系统中,采用LRU算法。系统分给该进程5个页面来存储数据(不包含程序),设每页可存放200个整数,该程序要对整个数组初始化,数组存储时是按行存放的。试计算下列两个程序各自的缺页次数(假定所有页都以请求方式调入)()。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"本题中,矩阵a有100x200=20000个整数,每页存放200个整数,故一页可以存放一行数组元素。系统分配给进程5个页面存放数据,假设程序已调入内存C因题目中没有提供与程序相关的数据,故可以不考虑程序的调入问题),因此只需考虑矩阵访问时产生的缺页中断次数。对于程序一,由于矩阵存放是按行存储,本程序对矩阵a的访问也是按行进行的,因此本程序依次将矩阵a的内容调入内存,每一页只调入一次,每一页都会发生一次缺页中断,因此会产生20000/200=100次缺页中断。对于程序二,矩阵存放时按行存储,而本程序对矩阵a的访问是按列进行的。当j=0时,内层循环的执行将访问第一列的所有元素,需要依次将矩阵a的100行调入内存,将产生100次缺页中断。当j=l时,仍需要依次将矩阵a的100行调入内存(因留在内存中的是第95、96、97、98、99行),仍将产生100次缺页中断。后续循环可依次类推。由此可知,程序二将产生20000次缺页中断。","type":"choice","options":{"D":"20000,100","C":"200,100","A":",100,200","B":"100,20000"},"answer":"B"},{"id":"learncoder_121_21223","stem":"若用8个字(字长32位,且字号从0开始计数)\"组成的位示图管理内存,用户归还一个块号为100的内存块时,它对应位示图的位置为()(注意:位号也从0开始)。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"首先求出块号为100在哪一个字号,031在字号0,3263在字号1,6495在字号2,96127在字号3,所以块号100在字号3。之后需要解决的问题就是求出第100块在字号3的哪一位,因字号3的第0位是第96块,依次类推,可知第100块在字号3的第4位。","type":"choice","options":{"B":"字号为4,位号为4","C":"字号为3,位号为4","D":"字号为4,位号为5","A":"字号为3,位号为5"},"answer":"C"},{"id":"learncoder_121_21220","stem":"假设页的大小为4KB,页表的每个表项占用4B。对于一个64位地址空间系统,采用多级页表机制,至少需要()级页表(本题默认字长为1B)。","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"内存中页的大小为4KB,每个页表项占用4B,则每页可以存放1K个页表项地址,采用n级页表可以寻址的地址空间的容量为(lK)nx4KB=210n+12Bo64位地址空间的大小为264BO为使n级页表可以寻址64位的地址空间,应使下式成立:210n+12B^264Bo可解得n的最小值为6。因此,至少需要用6级页表才能解决64位地址空间的寻址问题。","type":"choice","options":{"C":"5","A":"3","B":"4","D":"6"},"answer":"D"},{"id":"learncoder_121_21217","stem":"下列说法正确的有()。I.先进先出(FIFO)页面置换算法会产生Belady现象II.最近最少使用(LRU)页面置换算法会产生Belady现象III.在进程运行时,若它的工作集页面都在虚拟存储器内,则能够使该进程有效地运行,否则会出现频繁的页面调入/调出现象IV.在进程运行时,若它的工作集页面都在主存储器内,则能够使该进程有效地运行,否则会出现频繁的页面调入/调出现象","key_points":"知识点.练习.专业课练习.操作系统.内存管理","analysis":"举个例子:使用先进先出(FIFO)页面置换算法,页面引用串为1、2、3、4、1、2、5、1、2、3、4、5时,当分配3帧时产生9次缺页中断,分配4帧时产生10次缺页中断。II错误,最近最少使用(LRU)页面置换算法没有这样的问题。HI错误,IV正确:若页面在内存中,不会产生缺页中断,也不会出现页面的调入/调出。虚拟存储器的说法不正确。","type":"choice","options":{"B":"I、IV","A":"I,III","C":"II、III","D":"III、IV"},"answer":"B"},{"id":"learncoder_122_22024","stem":"试分析在第一级磁盘容错技术和第二级磁盘容错技术中,各采取了包括那些容错措施? 什么是写后读校验?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":""},{"id":"learncoder_122_22023","stem":"空闲磁盘空间的管理常采用哪从种方式? UNIX系统采用的是何种方式?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":""},{"id":"learncoder_122_22022","stem":"解释关于树形目录结构采用线性检索法的检索过程。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":""},{"id":"learncoder_122_22021","stem":"试说明关于索引文件和索引顺序文件的检索方法。并从检索速度和存储费用两方面对 索引文件和索引顺序文件进行比较。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":""},{"id":"learncoder_122_22017","stem":"文件系统中,文件访问控制信息存储的合理位置是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"文件系统中,利用文件控制块来存储和记录文件的包括操作权限等属性,便于操作 系统对文件进行管理与保护。\t ","type":"choice","options":{"A":"文件控制块","B":"文件分配表","C":"用户口令表","D":"系统注册表"},"answer":"A"},{"id":"learncoder_122_22020","stem":"文件系统的模型可分为3层,试说明其每一层所包含的基本内容。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"8. 无","type":"short_answer","answer":""},{"id":"learncoder_122_22018","stem":"假设文件F1的当前引用计数值为1,先建立F1的符号链接(软链接)文件F2,再建立F1的硬链接文件F3,然后删除F1。此时,F2和F3的引用计数值分别是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"对于硬链接,原文件和硬链接文件共用一个inode号,这说明它们是同一个文件,而对于软链接,软链接的链接数目不会增加個此,答案应该是B。","type":"choice","options":{"D":"2,1","B":"1,1","A":"0,1","C":"1,2"},"answer":"B"},{"id":"learncoder_122_22014","stem":"设立当前工作目录的主要目的是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"设立当前目录的好处在于有了当前目录之后对文件的检索就不需要每次文件的检 索都从根目录,进而节省对文件的检索时间,提高文件操作的效率。","type":"choice","options":{"D":"加快文件的读写速度","C":"加快文件的检索速度","B":"节省内存空间","A":"节省外存空间"},"answer":"C"},{"id":"learncoder_122_22013","stem":"假设文件索引节点中有7个地址项,其中4个地址为直接地址索引,1个地址项是二级间 接地址索引,每个地址项的大小为4字节,若磁盘索引块和磁盘数据块大小均为256字节,则可表示的单个文件最大长度是( )。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"略","type":"choice","options":{"A":"33 KB","D":"16513 KB","B":"519 KB","C":"157 KB"},"answer":"C"},{"id":"learncoder_122_22015","stem":"下列文件物理结构中,适合随机访问且易于文件扩展的是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"对于连续结构虽然操作简单,但是不利于随机检索,更不利于文件的扩展,从效率考虑,采用链式结构的检索效率也不如索引结构。","type":"choice","options":{"C":"链式结构且磁盘块定长","D":"链式结构且磁盘块变长","A":"连续结构","B":"索引结构"},"answer":"B"},{"id":"learncoder_122_22016","stem":"假设磁头当前位于第105道,正在向磁道序号增加的方向移动。现有一个磁道访问请求 序列为35,45,12,68,110,180,170,195,采用SCAN调度(电梯调度)算法得到的磁道访问序列 是( )。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"按照电梯算法的操作规则,应该是先沿着一个方向移动达到机制后再反方向移动,故有此答案。","type":"choice","options":{"B":"110,68,45,35,12,170,180,195","D":"12,35,45,68,110,170,180,195","C":"110,170,180,195,12,35,45,68","A":"110,170,180,195,68,45,35,12"},"answer":"A"},{"id":"learncoder_122_21362","stem":"(2012年统考真题)某文件系统空间的最大容量为4TB(1TB=2的40次方B),以磁盘块为基本分配单位,磁盘块大小为1KB。文件控制块(FCB)包含一个512B的索引表区。请回答以下问题:1)假设索引表区仅釆用直接索引结构,索引表区存放文件占用的磁盘块号。索引表项中块号最少占多少字节?可支持的单个文件最大长度是多少字节?2)假设索引表区采用如下结构:第0-7B采用<起始块号,块数>格式表示文件创建时预分配的连续存储空间,其中起始块号占6B,块数占2B;剩余504B采用直接索引结构,一个索引项占6B,则可支持的单个文件最大长度是多少字节?为了使单个文件的长度达到最大,请指出起始块号和块数分别所占字节数的合理值并说明理由。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"遇到这种类型的题目,首先要求出系统的总块数,因为总大小为4TB,而 1TB=240B,所以总大小为(4X240)B=242B.每块大小为1KB,即210B。由此可以得出文件系统 存储空间的总块数为242/210=232快要表示这么多块,块号需要32个二进制位,即32/8B=4B,因此索引表项中的块号最少 占4B每个索引区为512B,可以存放128个索引表项,而且第一题采用直接索引结构,即每个 索引表项指向一个磁盘块。所以,最大文件长度为128x1KB=128KB由此可以得到1)的答案:\t文件系统存储空间共有块数=(4x240)/210=232 为表示232个块号,索引表项占32/8B=4B. 512可存放27个索引表项,故最大文件长度=27x210B=217B=128KB。接下来分析2)题,题中给出的条件有两个:①0~7B采用另一种格式后面再分析;②剩余504B采用直接索引结构且索引项占6B。条件②比较简单,先予以解决。剩余的504B可以表示504B/6B=84个块(因为是直接索引),所以这部分能够表示的大 小为84KB。再看前面的8B,其中6B为起始块号,2B为块数,由于块的大小不变,因此起 始块号位数并无影响,只关注这部分能表示多少块即可。2B共有2x8=16个二进制位,即可 以表示216个块,因此这部分能够表示的大小为216KB=64MB.相加即可得到这种方法可支持 的单个文件最大长度。要改变表示的文件夭小最大值,只能从前8B入手(因为后面的504B只能固定表示 84KB),而根据之前的分析,块大小不变,只需要让块数增加就可以扩充文件大小,于是可以将8B中更多的字节表示块数。因为4B就是32位,足够表示空间内所有的块 (一共就 232块),所以只要有4B表示块数就足够,因此得到结论:起始块号占4B,块数占4B即可使 文件长度达到最大。于是根据刚才的分析可以得到2)的答案:块号占6B,块数占2B的情况下,最大文件长度=(216X210+(504/6)X210) B=64MB+84KB。 合理的起始块号和块数所占字节数分别为4、4 (1、7或2、6或3、5),因为块数占4B或以 上 就可以表示4TB大小的文件长度,达到文件系统的空间上限。注:本题标准答案中的其他组合(如1B表示起始块号,7B表示块数),编者个人认为 不太严谨,因为要表示块号至少需要4B才能够具体表达到某一个块,或许这里将起始块号 限定在了一个区域内,只需要在这个小区域内定位准确就可以,但题目对此没有说明。虽然正确答案中给了 4个选择,但推荐大家采用<4, 4>这个答案,比较严谨"},{"id":"learncoder_122_21363","stem":"(2014年统考真题)文件F由200条记录组成,记录从1开始编号。用户打开文件后,欲将内存中的一条记录插入到文件F中,作为其第30条记录。请回答下列问题,并说明理由。1)若文件系统采用连续分配方式,每个磁盘块存放一条记录,文件F存储区域前后均有足够的空闲磁盘空间,则完成上述插入操作最少需要访问多少次磁盘块?F的文件控制块内容会发生哪些改变?2)若文件系统釆用链接分配方式,每个磁盘块存放一条记录和一个链接指针,则完成上述插入操作需要访问多少次磁盘块?若每个存储块大小为1KB,其中4B存放链接指针,则该文件系统支持的文件最大长度是多少?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"考查文件系统中,记录的插入问题。题目本身比较简单,考生需要区分顺序分配方式和链接分配方式的区别。1)系统采用顺序分配方式时,插入记录需要移动其他记录块,整个文件共有200条记录, 要插入新记录作为第30条,而存储区前后均有足够的磁盘空间,且要求最少的访问存储块数, 则要把文件前29条记录前移,若算访盘次数移动一条记录读出和存回磁盘各是一次访盘,29 条记录共访盘58次,存回第30条记录访盘1次,共访盘59次。F的文件控制区的起始块号和文件长度的内容会因此改变。2)文件系统采用链接分配方式时,插入记录并不用移动其他记录,只需找到相应的记录, 修改指针即可。插入的记录为其第30条记录,那么需要找到文件系统的第29块,一共需要 访盘29次,然后把第29块的下块地址部分赋给新块,把新块存回内存会访盘1次,然后修改内存中第29块的下块地址字段,再存回磁盘,一共访盘31次。4B共32bit,可以寻址232=4G块存储块,每块的大小为1KB,即1024B,其中下块地址 部分占4B,数据部分占1020B,那么该系统的文件最大长度是4GX1020B=4080GB。"},{"id":"learncoder_122_21364","stem":"(2016年统考真题)某磁盘文件系统使用链接分配方式组织文件,簇大小为4KB.目录文件的每个目录项包括文件名和文件的第一个簇号,其他簇号存放在文件分配表FAT中.1)假定目录树如图4-23所示,各文件占用的簇号及顺序见表4-7,其中dir、dir1是目录,file1,file2是用户文件。请给出所有目录文件的内容。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image9.png'/>2)若FAT的每个表项仅存放簇号,占2B,则FAT的最大长度为多少字节?该文件系统支持的文件长度最大是多少?3)系统通过目录文件和FAT实现对文件的按名存取,说明file1的106、108两个簇号分别存放在FAT的哪个表项中?4)假设仅FAT和dir目录文件已读入内存,若需将文件dir/dir1/file1的第5000B读入内存,则要访问哪几个簇?参考答案及解析","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"1)两个目录文件dir和dirl的内容如下所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image17.png'/>2)由于FAT的簇号为2B,即16bit,因此在FAT表中最多允许216(65536)个表项,一 个FAT文件最多包含216 (65536)个簇。FAT的最大长度为216x2B=128KB (1分)。文件的 最大长度是216X4KB=256MB3)在FAT的每个表项中存放下一个簇号。file1的簇号106存放在FAT的100号表项中 ,簇号108存放在FAT的106号表项中。4)先在dir目录文件里找到dirl的簇号,然后读取48号簇,得到dirq目录文件,接着 找到filel的第一个簇号,据此在FAT里查找filel的第5000B所在的簇号,最后访问磁盘中的 该簇。因此,需要访问目录文件dirl所在的48号簇,及文件file1的106号簇"},{"id":"learncoder_122_21359","stem":"当前磁盘读写位于柱面号20,此时有多个磁盘请求以下列柱面号顺序送到磁盘驱动器:10、22、2、40、6、380在寻道时,移动一个柱面需要6ms,按照先来先服务算法和电梯算法(方向从0到40)计算所需的总寻道时间。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"1)先来先服务算法:寻道的次序为20、10、22、2、40、6、38。总的寻道时间为(10+12+20+38+34+32)x6ms=876ms。2)电梯算法(方向从0到40):寻道的次序为20、22、38、40、10、6、2。总的寻道时间为(2+16+2+30+4+4)x6ms=348ms"},{"id":"learncoder_122_21360","stem":"有一个文件系统,根目录常驻内存如图4-22所示。文件目录采用链接结构,每个目录下最多存放80个文件或目录(称为下级文件)。每个磁盘块最多可存放10个文件目录项:若下级文件是目录文件,则上级目录项指向该目录文件的第一块地址。假设目录结构中文件或子文件按自左向右的次序排列,″⋯″表示尚有其他的文件或子目录1)普通文件采用UINX三级索引结构,即文件控制块中给出13个磁盘地址,前10个磁盘地址指出文件前10个块的物理地址,第11个磁盘地址指向一级索引表,一级索引表给出256个磁盘地址。即指出该文件第11块至第266块的物理地址;第12个磁盘地址指向256个一级索引表的地址;第13个磁盘地址指向三级索引表,三级索引表指出256个二级索引表的地址,主索引表存放在目录项中,若要读入/A/D/G/I/K的第7456块,至少启动硬盘多少次,最多几次?2)若普通文件采用链接结构,要读取图4-22某文件系统的根目录/A/D/G/I/K的第175块,最少启动硬盘多少次,最多几次?3)若将1设置为当前目录,可以减少几次启动硬盘的次数?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image8.png'/>","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"1)一个文件的所有块可以通过以下方式找到:直接提供FCB找到前10块,通过一级索引找到256块,通过二级索引找到256x256块,通过三级索引找到256x256x256块,所以一 个文件最大可以有(10+256+256x256+256x256x256)块=16843018块。如果要找/A/D/G/I/K中的某一块,首先要找到其FCB,最好的情况是:每次读取目录描述信息时都在第一块找到下级目录或文件,所以要找到该文件至少要读取A、D、G和I四个目录项的第一块,读取K的FCB,总共五次启动磁盘;最坏的情况是:每次读取目录描述信息时都在最后一块找到下级目录或文件,所以要找到该文件至少要读取A的第一块,D、G 和I三个目录项的所有八个块,因此读取K的FCB,总共需要(1+8X3+1)次=26次启动磁盘。 找到FCB后再读取某一块,如果这一块在前10块之列,那么启动一次硬盘就可以找到这一 块;如果这一块在最后一块,那么可能需要通过三级索引找到这一块,这总共需要读取三级索引和最后一块共(3+1)次=4次磁盘。综上所述,最好的情况下,只需要启动(5+1)次=6次磁盘。最坏的情况下,需要启动(26+3+1)次=30次磁盘。2)为读取FCB所启动的硬盘次数和1) 一样,最少为5次,最多为30次,而读取数据 需启动175次,因此读取第175块最少需要启动(5+175)次=180次硬盘,最多需要启动(30+175) 次=205次磁盘。3)若将I设置为当前目录,就可以直接读取K的FCB,而无需读取A、D、G、I的目录项,根据1)中的分析,最多可以少启动磁盘29次,最少可以少启动磁盘4次"},{"id":"learncoder_122_21357","stem":"有一个文件系统如图4-21所示,图中的矩形表示目录,圆圈表示普通文件。根目录常驻内存,目录文件组织成索引顺序文件,不设文件控制块,普通文件组织成索引文件。目录表目指示下一级文件名及其磁盘地址(各占2B,共4B)。若下级文件是目录文件;指示其第一个磁盘块地址。若下级文件是普通文件,指示其文件控制块的磁盘地址。每个目录文件磁盘块最后4B供指针使用。下级文件在上级目录文件中的次序在图中为从左至右。每个磁盘块有512B,与普通文件的一页等长。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image6.png'/>普通文件的索引节点结构见表4-6,其中每个磁盘地址占2B,前10个地址直接指示该文件前10页的地址。第11个地址指示一级索引表地址,一级索引表中每个磁盘地址指示一个文件页地址;第12个地址指示二级索引表地址,二级索引表中每个地址指示一个一级索引表地址;第13个地址指示三级索引表地址,三级索引表中每个地址指示一个二级索引表地址。试问:1 )一个普通文件最多可有多少个文件页?2)若要读取文件J中的某一页,最多启动磁盘多少次?3)若要读取文件w中的某一页,最少启动磁盘多少次?4)就3)而言,为了最大限度减少启动磁盘的次数,可采用什么方法?此时,磁盘最多启动多少次?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image7.png'/>","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"1)因为磁盘块大小为512B,所以索引块大小也为512B,每个磁盘地址大小为2B因此,一个一级索引表可容纳256个磁盘地址。同样,一个二级索引表可容纳256个一级索引表地址,一个三级索引表可容纳256个二级索引表地址。这样,一个普通文件最多可有文件 页数为 10+256+256x256+256x256x256=16843018页。2)由图4-21可知,目录文件A和D中的目录项都只有两个,因此这两个目录文件都只 占用一个物理块。要读文件J中的某一项,先从内存的根目录中找到目录A的磁盘地址,将 其读入内存(已访问磁盘1次)。然后从目录A找出目录文件D的磁盘地址读入内存(已访 问磁盘2次)。再从目录D中找出文件J的文件控制块地址读入内存(已访问磁盘3次)。在 最坏的情况下,该访问页存放在三级索引下,这时需要一级一级地读三级索引块才能得到文 件J的地址(已访问磁盘6次)。最后读入文件J中的相应页(共访问磁盘7次)。所以,若要读文件J中的某一页,最多启动磁盘7次。3)由图4-21可知,目录文件C和U的目录项较多,可能存放在多个连接在一起的磁盘 块中。在最好的情况下,所需的目录项都在目录文件的第一个磁盘块中。先从内存的根目录 中找到目录文件C的磁盘地址读入内存(已访问磁盘1次)。在C中找出目录文件I的磁盘 地址读入内存(已访问磁盘2次)。在I中找出目录文件P的磁盘地址读入内存(已访问磁盘 3次)。从P中找到目录文件U的磁盘地址读入内存(已访问磁盘4次)。从U的第一个磁盘 块中找到文件W的文件控制块读入内存(已访问磁盘5次)。在最好的情况下,要访问的页在文件控制块的前10个直接块中,按照直接块指示的地址读文件W的相应页(已访问磁盘 6次)。所以,若要读文件W中的某一页,最少启动磁盘6次。4)为了减少启动磁盘的次数,可以将需要访问的W文件挂在根目录的最前面的目录项中。此时,只需要读内存中的根目录就可以找到W的文件控制块,将文件控制块读入内存(已访问磁盘1次)。最差情况下,需要的W文件的那个页挂在文件控制块的三级索引下,那么 读3个索引块需要访问磁盘3次(已访问磁盘4次)得到该页的物理地址,再去读这个页(已访问磁盘5次)。此时,磁盘最多启动5次"},{"id":"learncoder_122_21361","stem":"假设某分时操作系统采用树形目录结构。用户usera目录的路径名/usr/home/usera,用户userb目录的路径名是/home/userb。usera在其目录下创建了目录文件asdf和普通文件my.c,并在asdf目录下创建了普通文件file2和file2;userb在其目录下创建了目录文件asdf和普通文件hust1,并且在目录文件下创建了普通文件file1和file2,其中usera的file1和userb的hust1是同一个文件。1)画出上述文件系统的树形目录结构(要求画出目录项中的必要信息)。2)试分别写出usera的文件filel和userb的filel的文件路径名。3)用户userb的目录文件asdf下的文件file2要换名为userb目录下的文件newfile,文件系统如何处理?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"1)文件目录结构如图4-29所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image16.png'/>2)用户 usera的 file1 的文件路径名为/usr/name/usera/asdf/file1;用户 userb 的 file1 的文件路径名为/name/userb/asdf/file13)要将用户userb的目录文件asdf下的文件file2换名为userb目录下的newfile,先从 userb的主目录name查起,将此目录项中的各个目录项与asdf相比较,直至找到asdf;再取 出asdf中各个目录项与file2相比,直到找到file2;将file2的目录项读入内存指定区域,将 file2改写为newfile,再写回userb目录中;最后要删除asdf目录中的file2的目录项"},{"id":"learncoder_122_21358","stem":"针对文件的目录结构回答以下问题:1)若一个共享文件可以被用户随意删除或修改,会有什么问题?2)若允许用户随意地读写和修改目录项,会有什么问题?3)如何解决上述问题?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"1)将有可能导致共享该文件的其他用户无文件可用,或者使用了不是其需要的文件。2)出现的问题有:用户可以通过修改目录项来改变对文件的存取权限,从而非法使用系统文件;另外,对目录项随意修改会造成管理混乱3)解决的方法是不允许用户直接执行上述操作,而必须通过系统调用来执行这些操作"},{"id":"learncoder_122_21356","stem":"假设磁盘的每个磁道分为9个块,现有一文件有A,B,…,I共9个记录,每个记录的大小与块的大小相等,设磁盘转速为27ms/转,每读出一块后需要2ms的处理时间,若忽略其他辅助时间,试问:1)如果这些记录被顺序存放于一磁道上,文件处理程序顺序读取且顺序处理记录,处理文件要多长时间?2)文件处理程序顺序读取且顺序处理记录,记录如何存放可使文件的处理时间最短?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"1)由题目所给条件可知,磁盘转速为27ms/转,因此读出1个记录的时间 是27ms/9=3ms 读出并处理记录A需要3ms+2ms=5ms,此时读写头已转到了记录B的中间, 因此为了读出记录B,必须再转将近一圈(从记录B的中间到记录B,需要25ms) 后续7 个记录的读取及处理与此相同,但最后一个记录的读取与处理只需5ms,于是处理9个记录 的总时间为8x(25+3+2)ms+(3+2)ms=245ms 这里将旋转一周的时间算在了前一个读取单元 中,即将“读取A,旋转”看作一个单元,因此前8个的处理时间为30ms,最后一个为5ms若将旋转算在后一个读取单元,则处理A为5ms,后面8个为30ms,结果相同。2)由于读出并处理一个记录需要5ms,当读出并处理记录A时,不妨设记录A放在第1 个盘块中,读写头已移动到第2个盘块的中间,为了能顺序读到记录B,应将它放到第3个 盘块中,即应将记录按如下顺序存放,见表4-8。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image15.png'/>这样,处理一个记录并将磁头移动到下一记录的时间为3ms+2ms+lms=6ms所以,处理9个记录的总时间为6x8ms+5ms=53ms"},{"id":"learncoder_122_21353","stem":"存放在某个磁盘上的文件系统采用混合索引分配方式,其FCB中共有13个地址项,第09个地址项为直接地址,第10个地址项为一次间接地址,第11个地址项为二次间接地址,第12个地址项为三次间接地址。假设每个盘块的大小为512B,若盘块号需要占3B而每个盘块最多存放170个盘块地址,1)该文件系统允许文件的最大长度是多少?2)将文件的第5000B、15000B、150000B转换成物理块号和块内位移。3)假设某个文件的FCB已在内存,但其他信息均在外存,为了访问该文件中某个位置的内容,最少需要几次访问磁盘?最多需要几次访问磁盘?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"在混合索引分配方式中,FCB的直接地址中登记有分配给文件的前n块(第 0~n-1块)的物理块号(n的大小由直接地址项数决定,本题中为10); 一次间接地址中登 记有一个一次间接地址块的块号,而在一次间接地址块中则登记有分配给文件的第n~ (n+k-1)块的块号(k的大小由盘块大小和盘块号的长度决定,本题中为170);二次间接地址中登记有一个二次间接地址块的块号,其中给出了k个一次间接地址块的块号,而这些一次间接地址块被用来登记分配给文件的第(n+k)~(n+k+k2-1)块的块号;三次间接地址块 中则登记有一个三次间接地址块的块号,其中可给出k个二次间接地址块的块号,这些二次间接地址块又可给出k2个一次间接地址块的块号,而这些一次间接地址块则登记分配给文件的第(n+k+k2)~(n+k+k2+k3-1)块的物理块号。1)该文件系统中一个文件的最大长度可达10+170+170x170+170x170x170=4942080块=4942080x512B=2471040KB2)5000/512得到商为9,余数为392,即对应的逻辑块号为9,块内位移为392。由于 9<10,故可直接从该文件的FCB的第9个地址项处得到物理盘块号,块内位移为392。15000/512得到商为29,余数为152,即对应的逻辑块号为29,块内位移为152。由于 10<=29<=10+170,而29-10=19,故可从FCB的第10个地址项,即一次间接地址项中得到一 次间接地址块的地址,并从一次间接地址块的第19项(即该块的第57~59B这3个字节) 中获得对应的物理盘块号,块内位移为152150000/512得到商为292,余数为496,即对应的逻辑块号为292,块内位移为496。由 于 10+170<=292<=l0+170+170x170,而 292-(10+170)=112, 112/170 得到商为 0,余数 112,故 可从FCB的第11个地址项,即二次间接地址项中得到二次间接地址块的地址,并从二次间 接地址块的第0项中获得一个一次间接地址块的地址,再从该一次间接地址块的第112项中 获得对应的物理盘块号,块内位移为496。3)由于文件的FCB已在内存,为了访问文件中某个位置的内容,最少需要1次访问磁 盘(即可通过直接地址直接读文件盘块),最多需要4次访问磁盘(第一次是读三次间接地址 块,第二次是读二次间接地址块,第三次是读一次间接地址块,第四次是读文件盘块)。"},{"id":"learncoder_122_21350","stem":"现有3名学生S1、S2和S3上机实习,程序和数据都存放在同一磁盘上。若3人编写的程序分别为P1、P2和P3,要求这3个学生用自编的程序调用同一个数据文件A进行计,算,问:1)若文件A作为共享文件,系统应采用何种目录结构?画出示意图。2)若学生SI、S2、S3都将自己的程序名起为P,则1)中的目录结构能,否满足要求?3)对于2),系统是如何使每个学生获取其程序和数据的?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"1)系统采用二级目录结构即可满足需要,其示意图如图所示。 <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image13.png'/>2)图4-27所示的二级目录结构能够满足要求。此时用户文件目录中的P1、P2和P3 均改为P即可,由图4-27 可看出,这3个P均指向各自不同的程序。3)在学生存取程序和数据时,文件系统会先搜索主文件目录,找到该学生的用户目录后, 即可在用户目录中找到指定的文件,比如对学生S1,由路径/S1/P找到的文件就是S1的程序 文件,因为它与学生S2的程序文件/S2/P不是同一个文件,所以不会引起冲突。文件/S1/A和 文件/S2/A是同一个文件,因此学生S1能够取到所需要的数据。当然,文件A可由3个学生 同时打开执行读操作。"},{"id":"learncoder_122_21354","stem":"删除文件时,存放文件的盘块常常返回到空闲盘块链,有些系统同时清除盘块中的内容,而另一些系统则不清除,对这两种方式从性能、安全性、方便性三个角度进行比较。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"性能方面:因后这一种方式在删除文件时减少了访问磁盘的次数,故其速度比前一种方式更快。安全性方面:把一个内容没有被清除的盘块分配给下一个用户使用,则有可能使其获得盘块中的内容,故前一种方式更加安全。方便性方面:如果盘块中的内容没有被清除,则当用户因误操作而删除文件时,有可能通过某种办法恢复被删除的文件,故后一种方式更为方便"},{"id":"learncoder_122_21351","stem":"在磁盘上有一个文件系统,磁盘每块512字。假定每个文件在目录中占有一个目录项;该目录项给出了文件名、第一个索引块的地址、文件长度(块数)。在索引块中(包含第一个索引块)前面511个字指向文件块,即第i个索引项(i=0,1,…,510)指向文件的i块,索引块中最后一个字指向下一个索引块,最后一个索引块中最后一个字为ni1。假定目录在存储器中,每个文件旳逻辑块号均从0号开始标号,逻辑块长与物理块长相同,对这样的索引物理结构,该系统应如何将逻辑块号变换成物理块号?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"根据题意,首先将题设条件转化为磁盘存储结构,如图4-28所示。假设逻 辑地址为L,逻辑块号为n。逻辑块号变换成物理块号的过程为:首先根据逻辑文件的文件名找到目录表中该文件对 应的目录项,找出第一个索引块的地址dl,若n<511,取出第一个索引块第n项的值,即为查找逻辑块号所对应的物理块号w。如果n>=511,得到第二个索引块的地址d2,令n=n-511, 若此时n>=511,则继续令d2-511,得到第三个索引块地址d3,依次类推,直到n<511时, 取出第i个索引块第n项的值,即为查找逻辑块号所对应的物理块号w<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image14.png'/>"},{"id":"learncoder_122_21355","stem":"有如图4-20所示的文件目录结构。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image5.png'/>1)可否进行下列操作,为什么?①在目录D中建立一个文件,取名为A。②将目录C改名为A。2)若E和G是两个用户各自的目录,问:①使用目录E的用户要共享文件M,如何实现?②在一段时间内,使用目录G的用户主要使用文件S和T,应如何处理?其目的是什么?3)使用目录E的用户对文件I加以保护,不允许别人使用,如何实现?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"1)①可以在目录D中建立一个文件名为A的文件,因为目录D中不存在已命名为A 的文件或目录。②目录C不可以改名为A,因为目录C所在的目录里已经有一个名为A的目录。2)①用户E若要共享文件M,需要用户E有访问文件M的权限。用户E通过自己的 主目录E找到其父目录C,再访问到目录C的父目录(即根目录),然后依次通过目录D、 目录G、目录K和目录O即可访问到文件M。②用户G需要通过依次访问目录K和目录P才能访问到文件S和文件To为了提高访问速度,可以在目录G下建立两个链接文件,分别链接到文件S及文件T上。这样,用户G 就可以直接访问这两个文件了。3)用户E可以通过修改文件I的存取权限控制表对文件I进行保护,不让别的用户使用。 具体地说,就是在文件I的存取控制表中,仅留下用户E的访问权限,而不让其他用户访问。"},{"id":"learncoder_122_21352","stem":"请分别解释在连续分配方式、隐式链接分配方式、显式链接分配方式和索引分配方式中如何将文件的字节偏移量3500转换为物理块号和块内位移量(设盘块大小为1KB,盘块号需要占4B)","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"文件的字节偏移量到磁盘物理地址的转换,关键在于对文件物理组织(或磁 盘分配方式)的理解。连续分配方式是指为文件分配一段连续的文件存储空间;隐式链接分 配则是指为文件分配多个离散的盘块,并将下一个盘块的地址登记在文件分配到的前一个盘 块中;显式链接分配则通过FAT来登记分配给文件的多个盘块号;而索引分配方式则将多个盘块号登记在文件的索引表中。同时,在FCB的物理地址字段中,还登记有文件首个物理块 的块号或指向索引表的指针(对于索引分配方式)。将字节偏移量3500转换成逻辑块号和块内位移:3500/1024商为3,余数为428,即逻辑块号为3,块内位移为428。1)在连续分配方式中,可从相应文件的FCB中得到分配给该文件的起始物理盘块号, 例如a0。故字节偏移量3500相应的物理盘块号为a0+3,块内位移为428。2)在隐式链接方式中,由于每个盘块中需要留出4B (通常是最后4B)来存放分配给文 件的下一个盘块的块号,因此字节偏移量3500的逻辑块号为3500/1020的商3,而块内位移 为余数440 从相应文件的FCB中可获得分配给该文件的首个(第0个)盘块的块号,例如b0。然后 可通过读b0块获得分配给文侔的第1个盘块的块号,如b1依次类推,得到第3块,b3 如此便可得到字节偏移量3500对应的物理块号b3,而块内位移则为4403)在显式链接方式中,可从文件的FCB中得到分配给文件的首个盘块的块号,如c0。 然后可在FAT的第c0项中得到分配给文件的第1个盘块的块号,如clo依次类推,找到第3 个盘块的块号,如c3。如此,便可获得字节偏移量3500对应的物理块号c3,而块内位移则 为 428。4)在索引分配方式中,可从文件的FCB中得到索引表的地址。从索引表的第3项(距 离索引表首字节12B的位置)可获得字节偏移量3500对应的物理块号,而块内位移为428"},{"id":"learncoder_122_21349","stem":"学生甲有两个文件A、B,学生乙有3个文件A、C、Do其中甲文件的A和乙的文件A不是同一个文件,甲文件的B与乙文件的C是同一个文件,为了不引起混乱,请拟定一个目录组织方案,并画图说明。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"为了改变单级目录文件中文件命名冲突问题和提高对目录表的搜索速度, 需要采用二级目录结构.在二级目录结构中,各个文件的说明信息被组织成目录文件,且以用户为单位把各自的文件说明划分为不同的组。然后,这些不同的有关组名的存取控制信息存放在主目录(MFB)的目录项中。与MFD相对应,用户文件的文件说明所组成的目录文件被称为用户文件目录(UFD)这样,MFD和UFD就构成了二级目录。二级目录结构如图4-26所示。 <img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image12.png'/>"},{"id":"learncoder_122_21348","stem":"一个树形结构的文件系统如图419所示,该图中的矩形表示目录,圆圈表示文件。1)可否进行下列操作:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image4.png'/>①在目录D中建立一个文件,取名为A②将目录C改名为A。2)若E和G分别为两个用户的目录:①用户E欲共享文件Q,应有什么条件?如何操作?②在一段时间内,用户G主要使用文件S和T。为简便操作和提高速度,应如何处理?③用户E欲对文件I加以保护,不允许别人使用,能否实现?如何实现?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"题考查树形目录下文件的共享和保护,这个知识点有些冷僻,但解答的难度较低,考生可以了解一下解题思路。1)①因为在目录D下没有文件名为A的文件,所以可以在目录D下建立一个文件,取名为A②因为已经有个目录名为A,所以不能将目录C改名为A。2)①用户E想要共享文件Q,只要找到Q的路径即可,即用户E可以通过路径../../D/G/K/O/Q 来访问文件Q,其中“..”表示上一级目录。②可以把当前目录设置为P这个目录,这样一来,直接用S和T这两个文件名就能访 问这两个文件,不需要每次都从根目录开始找路径;也可以在G目录下建立两个链接,直接 链接到文件S和文件T上,这样在G用户的目录下就可以直接访问到这两个文件了。③可以修改文件I的存取控制表,在拥有对I的访问权限的用户列表中只留下用户E, 其他用户的名字都从I的访问权限用户列表中删除,这样就可以有效地保护文件I只被用户访问了。"},{"id":"learncoder_122_21346","stem":"在实现文件系统时,为加快文件目录的检索速度,可利用文件控制块分解法。假设目录文件存放在磁盘上,每个盘块512B.文件控制块占64B,其中文件名占8B。通常将文件控制块分解成两部分:第一部分占10B(包括文件名和文件内部号),第二部分占56B(包括文件内部号和文件其他描述信息)。1)假设某一目录文件共有254个文件控制块,试分别给出采用分解法前和分解法后,查找该目录文件的某一个文件控制块的平均访问磁盘次数(假设访问每个文件控制块的概率相等,结果保留到小数后两位)。2)一般地,若目录文件分解前占用n个盘块,则分解后改用m个盘块存放文件名和文件内部号部分。若要使访问磁盘次数减少,m、11应满足什么条件(假设访问每个文件控制块的概率相等,且最后一个盘块刚好放满文件控制块)?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"49.空","type":"short_answer","answer":"注意:因为原本整个文件控制块都是在目录中的,而文件控制块分解法将文件控制块的 部分内容放在了目录外,所以检索完目录后别忘了还需要读取一个磁盘找齐所有文件控制块 的内容。1)分解法前,每个盘块最多可容纳的文件控制块数目为512/64=8 现在有254个文件控制块,254=31x8+6,即需要32块物理块,且最后一块物理块存放了 6个文件控制块,没有 放满。所找的目录项在第i块物理块所需的磁盘访问次数为i,又由假设知道,访问每个文件 控制块的概率相等,所以给出计算式子如下\"[8x (1+2+3+…+31) +6x32]/254=16.38 (次)分解法后,每个盘块最多可容纳的文件控制块数目为512/10=51现在有254个文件控 制块,254=51x4+50,即需要5块物理块,且最后一块物理块存放了 50个文件控制块,也没 有放满。所找的目录项在第i块物理块所需的磁盘访问次数为i+1,所以给出计算式子如下[51x (2+3+4+5) +50x6]/254=3.99 (次)2)分解法前平均访问磁盘次数为(1+2+3+…+n) /n=nx (n+1) /2/n= (n+1) /2 (次)分解法后平均访问磁盘次数为[2+3+4+\t (m+1) ]/m=mx (m+3) /2/m= (m+3) /2 (次)为了使访问磁盘次数减少,显然需要(m+3) /2< (n+1) /2,即 m<n-2 "},{"id":"learncoder_122_21343","stem":"(2015年中科院真题)磁盘高速缓存设在()中。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"磁盘高速缓存是一种软件机制,它允许系统把通常存放在磁盘上的一些数据保 留在内存中,以便对那些数据的进一步访问而不用再访问磁盘","type":"choice","options":{"C":"Cache","A":"内存","D":"磁盘","B":"磁盘控制器"},"answer":"A"},{"id":"learncoder_122_21347","stem":"在UNIX操作系统中,给文件分配外存空间采用的是混合索引分配方式,如图4-18所示,UNIX系统中的某个文件的索引节点指出了为该文件分配的外存的物理块的寻找方法。在该索引节点中,有10个直接块(每个直接块都直接指向一个数据块),有一个一级间接块,一丿一个二级间接块以及一个三级间接块,间接块指向的是一个索引块,每个索引块和数据块的大小均为4KB,而UNIX系统中地址所占空间为4B(指针大小为4B)。假设以下问题都建立在该索引节点已经在内存中的前提下。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image3.png'/>文件的大小为多大时可以只用到索引节点的直接块?2)该索引节点能访问到的地址空间大小总共为多大?要求小数点后保留2位。3)若要读取一个文件的第10000B的内容,需要访问磁盘多少次?4)若要读取一个文件的第10MB的内容,需要访问磁盘多少次?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"空","type":"short_answer","answer":"本题考查的是对索引分配方式的理解,只需明白索引分配方式组织外存分配 的原理即可。计算其实并不难,其中要牢牢抓住的一点是:索引块其实也是物理块,也需要 存储在外存上。1)对于只用到索引节点的直接块,这个文件应该能全部在10个直接块指向的数据块中 放下,而数据块的大小为4KB,所以该文件大小应该<=4KBx10=40KB,即文件的大小小于或 等于40KB时,可以只用到索引节点的直接块。2)只需算出索引节点指向的所有数据块的块数,再乘以数据块的大小即可。直接块指向的数据块数=10块。一级间接块指向的索引块里的指针数=4KB/4B=1024个,所以一级间接 块指向的数据块数为1024块。二级间接块指向的索引块里的指针数=4KB/4B=1024个,指向 的索引块里再拥有4KB/4B=1024个指针数。所以二级间接块指向的数据块数=(4KB/4B)2= 10242块。三级间接块指向的数据块数=(4KB/4B)3=10243块。所以,该索引节点能访问到的地址空间大小为(10+1x4KB/4B+1X(4KB/4B)2+1X(4KB/4B)3)X4KB=4100.00GB=4.00TB3)因为10000B/4KB=2.44,所以第10000B的内容存放在第3个直接块中,所以若要读 取一个文件的第10000B的内容,需要访问磁盘1次。4)因为10MB的内容需要数据块数=10MB/4KB=2.5K块。直接块和一级间接块指向的数据块数=10+(4KB/4B)=1034块<2.5K块。直接块和一级间接块以及二级间接块的数据块数 =10+(4KB/4B)+(4KB/4B)2>1M块>2.5K块。所以第10MB的数据应该在二级间接块下属的某个数据块中,所以若要读取一个文件的第10MB的内容,需要访问磁盘3次。"},{"id":"learncoder_122_21344","stem":"(2015年中科院真题)位示图可用于(\t)。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"位示图是磁盘空闲管理中的一种方式,其做法是为文件存储器建立一张位示图 (尽管称其为图,其实就是一连串的二进制位),以反映整个存储空间的分配情况填空题","type":"choice","options":{"C":"磁盘空间的管理","D":"主存空间的共享","B":"文件目录的查找","A":"实现文件的保护和保密"},"answer":"C"},{"id":"learncoder_122_21342","stem":"(2017年统考真题)若文件fl的硬链接为f2,两个进程分别打开fl和f2,获得对应的文件描述符为fd1和fd2,则下列叙述中,正确的是(\t)。I.fl和f2的读写指针位置保持相同II.fl和f2共享同一个内存索引节点III.fd1和fd2分别指向各自的用户打开文件表中的一项","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"硬链接指通过索引节点进行连接。一个文件在物理存储器上有一个索引节点号。 存在多个文件名指向同一个索引节点,II正确。两个进程各自维护自己的文件描述符,HI正 确,I错误","type":"choice","options":{"B":"仅II、III","A":"仅III","D":"I、II和III","C":"仅I、II"},"answer":"B"},{"id":"learncoder_122_21340","stem":"(2017年统考真题)下列选项中,磁盘逻辑格式化程序所做的工作是(\t)。皿.确定磁盘扇区校验码所占位数IV.对保存空闲磁盘块信息的数据结构进行初始化","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"一个新的磁盘是一个空白版,必须分成扇区以便磁盘控制器能读和写,这个过 程称为低级格式化(或物理格式化)。低级格式化为磁盘的每个扇区釆用特别的数据结构,包 括校验码,III错误。为了使用磁盘存储文件,操作系统还需要将自己的数据结构记录在磁盘 上,这分为两步,第一步是将磁盘分为由一个或多个柱面组成的分区,每个分区可以作为一 个独立的磁盘,I错误;在分区之后,第二步是逻辑格式化(创建文件系统),在这一步,操 作系统将初始的文件系统数据结构存储在磁盘上,这些数据结构包括空闲和已分配的空间和 一个初始为空的目录,II、IV正确","type":"choice","options":{"C":"仅Ⅲ、Ⅳ","A":"仅Ⅱ","D":"仅Ⅰ、Ⅱ、Ⅳ","B":"仅Ⅱ、Ⅳ"},"answer":"B"},{"id":"learncoder_122_21337","stem":"(2015年统考真题)文件系统用位图法表示磁盘空间的分配情况,位图存于磁盘的32〜127号块中,每个盘块占1024B,盘块和块内字节均从0开始编号。假设要释放的盘块号为409612,则位图中要修改的位所在的盘块号和块内字节序号分别是()。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"盘块号=起始块号+盘块号/(1024X8)=32+409612/(1024X8)=32+50=82,这里问的是块内字节而不是位号,因此还需要除以8,块内字节号=盘块号%(1024x8)/8=l","type":"choice","options":{"B":"81、2","C":"82、1","D":"82、2","A":"81、1"},"answer":"C"},{"id":"learncoder_122_21341","stem":"(2017年统考真题)某文件系统中,针对每个文件,用户类别分为4类:安全管理员、文件主、文件主的伙伴、其他用户;访问权限分为5类:完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应为()","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"可以把用户访问权限抽象成一个矩阵,行代表用户,列代表访问权限。这个矩阵有4行5列,1代表true, 0代表false,所以需要20位","type":"choice","options":{"B":"9","A":"5","C":"12","D":"20"},"answer":"D"},{"id":"learncoder_122_21338","stem":"(2015年统考真题)某硬盘有200个磁道(最外侧磁道号为0),磁道访问请求序列为:130,42,180,15,199,当前磁头位于第58号磁道并从外侧向内侧移动。按照SCAN调度方法处理完上述请求后,磁头移过的磁道数是()。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"SCAN算法就是电梯调度算法。当前磁头位于58号磁道且从外侧向内侧移动, 故先访问130和199,然后再由内侧向外侧移动,依次访问42和14,故磁头移动过的磁道数是(199-58)+(199-15)=325","type":"choice","options":{"D":"382","B":"287","A":"208","C":"325"},"answer":"C"},{"id":"learncoder_122_21335","stem":"(2015年统考真题)在系统内存中设置磁盘缓冲区的主要目的是()。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"磁盘和内存的速度差异,决定了可以将内存经常访问的文件调入磁盘缓冲区, 从高速缓存中复制的访问比磁盘I/O的机械操作要快很多很多,故主要是为了减少磁盘I/O 次数","type":"choice","options":{"C":"提高磁盘数据可靠性","B":"减少平均寻道时间","A":"减少磁盘I/O次数","D":"实现设备无关性"},"answer":"A"},{"id":"learncoder_122_21339","stem":"(2017年统考真题)某文件系统的簇和磁盘扇区大小分别为1KB和512B件的大小为1026B,则系统分配给该文件的磁盘空间大小是()。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"绝大多数操作系统为改善磁盘访问时间,以簇为单位进行空间分配,该文件大 小为1026B>1024B=1KB,故分配给其两个簇的大小,即2048B","type":"choice","options":{"C":"1538B","B":"1536B","A":"1026B","D":"2048B"},"answer":"D"},{"id":"learncoder_122_21336","stem":"(2015年统考真题)在文件的索引节点中存放直接索引指针10个,一级和二级索引指针各1个。磁盘块大小为1KB,每个索引指针占4B。若某文件的索引节点已在内存中,则把该文件偏移量(按字节编址)为1234和307400处所在的磁盘块读入内存,.需访问的磁盘块个数分别是()。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"10个直接索引指针指向的数据块大小为10x1KB=10KB;每个索引指针占4B,则每个磁盘块可存放1KB/4B=256个索引指针;一级索引指针指向的数据块大小为256x1KB=256KB;二级索引指针指向的数据块大小为256x256x1KB=216KB=64MB按字节编址,偏移量为1234时,因为1234B<10KB,则由直接索引指针可得到其所在的、 磁盘块地址。文件的索引节点已在内存中,则地址可直接得到,故仅需1次访问即可。偏移量为307400时,因为10KB+256KB<307400<64MB,可知该偏移量的内容在二级索 引指针所指向的某个磁盘块中,索引节点已在内存中,故先访问2次得到文件所在的磁盘块 地址,再访问1次即可读出内容,故共需3次访问","type":"choice","options":{"A":"1,2","B":"1,3","C":"2,3","D":"2,4"},"answer":"B"},{"id":"learncoder_122_21333","stem":"(2014年统考真题)现有一个容量为10GB的磁盘分区,磁盘空间以簇(Cluster)为单位进行分配,簇的大小为4KB,若采用位图法管理该分区的空闲空间,即用一位(Bit)标识一个簇是否被分配,则存放该位图所需簇的个数为()","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"簇的总数为10GB/4KB=2.5M,用一位标志一个簇是否被分配,则整个磁盘共需 要 2.5Mbit,即需要 2.5Mbit/8=320KB,则共需要 320KB/4KB=80 个簇","type":"choice","options":{"A":"80","B":"320","C":"80K","D":"320K"},"answer":"A"},{"id":"learncoder_122_21330","stem":"采用直接存取法来读写磁盘上的物理记录时,效率最高的是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"在直接存取方法下,连续文件方法下,只要知道文件在存储设备上的起始地址 (首块号)和文件长度(总块数),就能很快地进行存取。适合随机存取的程度总结为:连续 分配〉索引分配〉链接分配。","type":"choice","options":{"D":"其他结构文件","B":"索引结构的文件","A":"连续结构的文件","C":"链接结构文件"},"answer":"A"},{"id":"learncoder_122_21334","stem":"(2014年统考真题)在一个文件被用户进程首次打开的过程中,操作系统需做的是()。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"簇的总数为10GB/4KB=2.5M,用一位标志一个簇是否被分配,则整个磁盘共需 要 2.5Mbit,即需要 2.5Mbit/8=320KB,则共需要 320KB/4KB=80 个簇","type":"choice","options":{"C":"修改文件控制块中的读写权限","A":"将文件内容读到内存中","D":"将文件的数据缓冲区首指针返回给用户进程","B":"将文件控制块读到内存中"},"answer":"B"},{"id":"learncoder_122_21331","stem":"下面关于文件系统的说法正确的是()","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"图4-25所示为文件系统模型。可将该模型分为3个层次,其最底层是对象及其属性;中间层是对对象进行操纵和管理的软件集合;最高层是文件系统提供给用户的接口。其中对对象操纵和管理的软件集合这个层次,是文件系统的核心部分。文件系统的功能大多是在这一层实现的,其中包括:对文件存储空间的管理、对文件目录的管理、用于将文件的逻辑地址转换为物理地址的机制、对文件读和写的管理以及对文件的共享与保护等功能。所以A选项是错误的。在多级目录结构中,从根目录到任何数据文件,都只有一条唯一的路径。在该路径上从树的根(即主目录)开始,把全部目录文件名与数据文件名依 次地用“/”连接起来,即构成该数据文件的路径名。系统中的每个文件都有唯一的路径名。 所以B选项的说法是不准确的。对文件的访问只需要通过路径名即可。对于C选项的描述,错在物理块大小是不可以任意指定的,它必须和外存分配方式相符 合,所以C选项错误。D选项正确。基于文件系统的概念,可以把数据组成分为数据项、记录和文件3级。记录是一组相关数据项的集合,用于描述一个对象在某方面的属性。记录是文件存取的基本单位,数据项是文件可使用的最小单位。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image11.png'/>","type":"choice","options":{"B":"在多级目录结构中,对文件的访问是通过路径名和用户目录名进行的","D":"逻辑记录是对文件进行存取操作的基本单位","A":"文件系统负责文件存储空间的管理,但不能实现文件名到物理地址的转换","C":"文件可以被划分成大小相等的若干物理块,且物理块大小也可以任意指定"},"answer":"D"},{"id":"learncoder_122_21332","stem":"某文件系统物理结构采用三级索引分配方法,如果每个磁盘块的大小为1024B,每个盘块索引号占用4B,请问在该文件系统中,最大文件的大小最接近的是()","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"根据已知条件,每个盘块为1024B,每个索引号为4B因此,每个索引块可以存放256 个索引号,三级索引块可以管理文件的大小为:256x256x256xl024B^16GB","type":"choice","options":{"C":"32GB","D":"2TB","A":"8GB","B":"16GB"},"answer":"B"},{"id":"learncoder_122_21329","stem":"在文件系统中,若文件的物理结构采用连续结构,则文件控制块FCB中有关文件的物理位置的信息包括(\t)。I.首块地址\tII.文件长度III.索引表地址","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"连续结构不需要用到索引表,那么文件控制块中也就不可能有索引表地址信","type":"choice","options":{"D":"I和III","B":"I和II","A":"只有III","C":"II和III"},"answer":"B"},{"id":"learncoder_122_21328","stem":"在磁盘上容易导致存储碎片发生的物理文件结构是()","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"连续文件的优点是在顺序存取时速度较快,因为这类文件往往被从头到尾依次 存取,但连续文件也存在如下缺点:第一,要求建立文件时就确定它的长度,依此来分配相 应的存储空间,这往往很难实现;第二,不便于文件的动态扩充,在实际计算时,作为输出 结果的文件往往随执行过程不断增加新内容,当该文件需要扩大空间而其后的存储单元已经 被别的文件占用时,就必须另外寻找一个足够大的空间,把原空间中的内容和新加入的内容 复制进去;第三,可能出现外部碎片,就是在存储介质上存在很多空闲块,但它们都不连续, 无法被连续文件使用,造成浪费。","type":"choice","options":{"B":"连续","D":"索引和链接","C":"索引","A":"链接"},"answer":"B"},{"id":"learncoder_122_21327","stem":"现代操作系统中,文件系统都有效地解决了重名(即允许不同用户的文件可以具有相同的文件名)问题。系统是通过(\t)来实现这一功能的。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"树形目录结构,由一个根目录和若干层子目录组成。这种目录结构的作用有二: 一是能够解决文件重名问题,即不同的目录可以包含相同的文件名或目录名;二是能够解决 文件多而根目录容量有限带来的问题。","type":"choice","options":{"D":"建立指针","C":"树形目录结构","A":"重名翻译结构","B":"建立索引表"},"answer":"C"},{"id":"learncoder_122_21324","stem":"(2013年统考真题)用户在删除某文件的过程中,操作系统不可能执行的操作是","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"删除文件不能删除文件所在的目录,该目录下很可能还有其他文件,因此不可删除。而文件的关联目录项和文件控制块需要随着文件一起删除,同时释放文件的关联内存缓冲区。","type":"choice","options":{"D":"释放与此文件关联的内存缓冲区","C":"删除与此文件对应的文件控制块","B":"删除与此文件关联的目录项","A":"删除此文件所在的目录"},"answer":"A"},{"id":"learncoder_122_21325","stem":"(2013年统考真题)为支持CD-ROM中视频文件的快速随机播放,播放性能最好的文件数据块组织方式是()","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"视频文件属于有结构文件中的定长记录文件,适合用连续分配来组织,连续分 配的优点主要有顺序访问容易,顺序访问速度快等。为了实现快速随机播放,要保证最短的 查询时间,不宜选取链式和索引结构","type":"choice","options":{"D":"多级索引结钩","A":"连续结构","C":"直接索引结构","B":"链式结构"},"answer":"A"},{"id":"learncoder_122_21326","stem":"(2013年统考真题)若某文件系统索引节点(Inode)中有直接地址项和间接地址项,则下列选项中,与单个文件长度牙茨的因素是(\t)","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"一个文件对应一个索引节点,索引节点的总数只能说明有多少个文件,跟单个 文件的长度没有关系。而间接地址索引的级数、地址项的个数和文件块大小都跟单个文件长 度相关,","type":"choice","options":{"C":"地址项的个数","A":"索引节点的总数","B":"间接地址索引的级数","D":"文件块大小"},"answer":"A"},{"id":"learncoder_122_21323","stem":"(2012年统考真题)下列选项中,不能改善磁盘设备I/O性能的是()","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"首先看A选项,重排I/O请求次序的含义就是将磁盘请求访问序列进行重新排序,就是有关磁盘访问调度策略的选择对I/O的性能影响。对于相同的访问请求集合,访问顺序会受到调度策略的选择影响,因此会有不同的寻道时间,而寻道时间是磁盘访问时间中最大的一项,因此不同的调度策略会影响磁盘设备的I/O性能,故A能够改善。B选项主要是磁盘分区的作用,磁盘分区从实质上说就是对磁盘的一种格式化。但磁盘的I/O性能是由调用顺序以及磁盘本身性质决定的,和分区的多少并无太大关系,而且如 设置过多分区,还会导致一次I/O需要启动多个分区,反而会降低效率。C选项的预读和滞后写是常见的提升磁盘I/O速度的方法。预读是指当访问一个磁盘块 时,将相邻的后续几个也一并读出放在缓存中,若用到,则直接读入内存,省去了寻道的时 间。而滞后写是指系统将一个数据输出到磁盘上时,先不直接写入磁盘,而是先保存在缓存中,以防短期内系统又要对这个数据进行改动。如果要改动数据,直接修改缓存即可,而不需要启动磁盘进行修改。因此,预读和滞后写都可以改善磁盘的I/O性能。D选项优化文件物理的分布,这有一个典型的例子,就是将文件存储在磁盘的连续扇区 与间隔扇区的对比。磁盘是在不断旋转的,读出一块数据之后,经系统处理之后才能读下一 块数据,这时磁盘已经转过了所要读的下一块数据,需要等下一圈才能读,增加了旋转延迟; 而间隔扇区存储就可以避免这个问题,将第二个数据块存放在间隔的几个扇区之后,当系统 处理完第一块准备读第二块时,磁头恰好转至第二块所在扇区,直接开始读,这样可以有效 地缩短旋转延迟,进而缩短磁盘访问时间。因此,文件物理分布对于磁盘I/O性能也有影响, 故优化物理分布能够改善磁盘设备性能","type":"choice","options":{"C":"预读和滞后写","A":"重排I/O请求次序","B":"在一个磁盘上设置多个分区","D":"优化文件物理的分布"},"answer":"B"},{"id":"learncoder_122_21317","stem":"文件系统采用多级目录结构的目的是()。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"多级目录会增加存储开销,增加访问时间,因此A、B都是错误。文件的传送时 间与文件系统釆用何种结构无关,因此D也是错误的。","type":"choice","options":{"C":"解决命名冲突","B":"节约存储空间","A":"减少系统开销","D":"缩短传送时间"},"answer":"C"},{"id":"learncoder_122_21321","stem":"如果文件采用直接存取方法,且文件大小不固定,则应采用(\t)物理结构。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"连续分配(顺序文件)具有随机存取功能,但不便于文件长度的动态增长。链 接分配便于文件长度的动态增长,但不具有随机存取功能。索引分配既具有随机存取功能, 也便于文件长度动态增长。只有索引结构既具有随机存取的功能,又能满足文件大小不固定的要求(动态增长)。","type":"choice","options":{"D":"顺序","B":"索引","A":"直接","C":"随机"},"answer":"B"},{"id":"learncoder_122_21318","stem":"文件系统中设立打开(open)系统调用的主要目的是()。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"打开文件是指系统将指定文件的属性(包括该文件在外存上的物理位置)从外 存复制到内存打开文件表的一个表目中,并将该表目的编号(或称为索引)返回给用户。当 用户再要求对该文件进行相应的操作时,便可利用系统所返回的索引号向系统提出操作请求, 这时系统便可直接利用该索引号到打开文件表中区查找,从而避免了对该文件的再次检索。本题只有文件的控制信息最符合题意,FAT表和磁盘文件系统的控制管理信息都是干扰 项,且并非所有文件系统都采用FAT文件系统","type":"choice","options":{"A":"把文件从辅存读到内存","C":"把文件的FAT表信息从辅存读到内存","B":"把文件的控制信息从辅存读到内存","D":"把磁盘文件系统的控制管理信息从辅存读到内存"},"answer":"B"},{"id":"learncoder_122_21322","stem":"(2009年统考真题)下列文件物理结构中,适合随机访问且易于文件扩展的是(\t)","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"根据外存储分配方法,链式存储结构将文件按照顺序存储在不同盘块中,因此 适合顺序访问,不适合随机访问(需从文件头遍历所有盘块);连续结构(数据位置可计算得 到)和索引结构(只需访问索引块即可知道数据位置)适合随机访问。但连续结构如果要在 中间增加数据,则要整体移动后面的所有数据,因此不适合文件的动态增长;而索引结构适 合随机访问,因为索引结构可以单独将新增数据放在一个新盘块,只需修改索引块即可。","type":"choice","options":{"C":"链式结构且磁盘块定长","D":"链式结构且磁盘块变长","A":"连续结构","B":"索引结构"},"answer":"B"},{"id":"learncoder_122_21319","stem":"下列关于索引表的叙述,(\t)是正确的。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"索引表每个记录的索引项只有一个,因此选项A错误。对索引文件进行存取时,需要检索索引表,找到相应的表项,再利用该表项中给出的指 向记录的指针值去访问所需的记录,因此B正确。对主文件的每个记泉,在索引表中都设有一个相应的表项,用于记录该记录的长度L及 指向该记录的指针(指向该记录在逻辑地址空间的首址),因此C错误。由于使用了索引表而增加了存储空间的开销,因此不会减少存储空间(此处意为存储开销),会增加存储开销。","type":"choice","options":{"A":"索引表每个记录的索引项可以有多个","B":"对索引文件存取时,必须先查找索引表","C":"索引表中含有索引文件的数据及其物理地址","D":"建立索引表的目的之一是为减少存储空间"},"answer":"B"},{"id":"learncoder_122_21316","stem":"下面关于文件的叙述中,错误的是()。I.打开文件的主要操作是把指定文件复制到内存指定的区域II.对一个文件的访问,常由用户访问权限和用户优先级共同限制III.文件系统采用树形目录结构后,对于不同用户的文件,其文件名应该不同IV.为防止系统故障造成系统内文件受损,常采用存取控制矩阵方法保护文件","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"I错误,系统调用open把文件的信息目录放到打开文件表中。II错误,对一个文件的访问,常由用户访问权限和文件属性共同限制。III错误,文件系统采用树形目录结构后,对于不同用户的文件,其文件名可以不同,也 可以相同。IV错误,常采用备份的方法保护文件,而存取控制矩阵的方法是用于多用户之间的存取 权限保护","type":"choice","options":{"D":"I、II、III、IV","B":"仅I、III","A":"仅II","C":"仅I、III、IV"},"answer":"D"},{"id":"learncoder_122_21320","stem":"(\t)结构的文件最适合于随机存取的应用场合。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"连续分配(顺序文件)具有随机存取功能,但不便于文件长度的动态增长。链 接分配便于文件长度的动态增长,但不具有随机存取功能。索引分配既具有随机存取功能, 也便于文件长度动态增长。适合随机存取的程度总结为:连续分配〉索引分配〉链接分配","type":"choice","options":{"B":"索引","A":"流式","D":"顺序","C":"链接"},"answer":"D"},{"id":"learncoder_122_21309","stem":"下列关于索引表的叙述中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"索引文件由逻辑文件和索引表组成,对索引文件存取时,必须先查找索引表。 索引表中每个记录所对应的索引项只能有一个;索引表中仅含有索引文件的物理地址,并不 包含数据;建立索引表是为了实现文件的快速查找,是一种空间换时间的做法;存储空间比 其他存储方法要多一些,并不","type":"choice","options":{"B":"对索引文件存取时,必须先查找索引表","A":"索引表中每个记录的索引项可以有多个","D":"建立索引表的目的之一是减少存储空间","C":"索引表中含有索引文件的数据及其物理地址"},"answer":"B"},{"id":"learncoder_122_21310","stem":"无结构文件的含义是()","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"无结构文件是指由字符流构成的文件,故又称为流式文件。","type":"choice","options":{"A":"变长记录的文件","C":"流式文件","D":"索引顺序文件","B":"索引文件"},"answer":"C"},{"id":"learncoder_122_21314","stem":"如果当前读写磁头正在53号柱面上执行操作,依次有4个等待访问的请求,柱面号依次为98、37、124、65,当采用()算法时,下一次磁头才可能到达37号柱面。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"若采用先来先服务调度算法,下一个应为98o若釆用最短寻道时间优先调度算 法,离53号柱面最近的是65。若采用电梯调度算法(初始磁头移动方向向着小磁道方向), 下一个应为37。若采用循环扫描算法(磁头移动方向向着大磁道方向),下一个应为65","type":"choice","options":{"D":"循环扫描(磁头移动方向向着大磁道方向)","B":"最短寻道时间优先","C":"电梯调度(初始磁头移动方向向着小磁道方向)","A":"先来先服务"},"answer":"C"},{"id":"learncoder_122_21311","stem":"文件系统采用两级索引分配方式。若每个磁盘块的大小为1KB,每个盘块号占4B,则该系统中单个文件的最大长度是(\t)","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"每个磁盘块中最多可以有1 KB/4B=256个索引项,则两级索引分配方式下单个文件的最大长度=256x256xlKB=64MB。注意:本题采用的是两级索引,而不是混合索引","type":"choice","options":{"A":"64MB","B":"128MB","C":"32MB","D":"都不对"},"answer":"A"},{"id":"learncoder_122_21315","stem":"已知某磁盘的平均转速为r秒/转,平均寻找时间为T秒,每个磁道可以存储的字节数为N,现向该磁盘读写b字节的数据,采用随机寻道的方法,每道的所有扇区组成一个簇,其平均访问时间是()。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"在随机寻道的情况下,读写一个磁道的时间要包括寻道时间和读写磁道时间, 即(T+r)秒。由于总的数据量是b字节,它要占用的磁道数为b/N个,所以总的平均读写时间 为(T+r)b/N。","type":"choice","options":{"D":"bT/N+r","C":"(b/N+T)r","A":"(r+T)b/N","B":"b/NT"},"answer":"A"},{"id":"learncoder_122_21312","stem":"一个磁盘的转速为7200r/min,每个磁道有160个扇区,每个扇区为512B,那么理想情况下,其数据传输率为()","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"磁盘的转速为7200r/min=120r/s,转一圈经过160个扇区,每个扇区为512B,所 以最大数据传输率=(120x160x512/1024) KB/s=9600KB/s","type":"choice","options":{"A":"7200x160KB/s","C":"9600KB/S","B":"7200KB/s","D":"19200KB/s"},"answer":"C"},{"id":"learncoder_122_21313","stem":"下列算法中,用于磁盘调度的是()。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"时间片轮转法是进程调度算法,LRU算法是页面淘汰算法,最短寻道时间优先算法是磁盘调度算法,高优先级算法是进程调度和作业调度的算法","type":"choice","options":{"C":"最短寻道时间优先算法","D":"高优先级算法","B":"LRU算法","A":"时间片轮转法"},"answer":"C"},{"id":"learncoder_122_21308","stem":"文件的顺序存取是( )。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"顺序存取文件是按其在文件中的逻辑顺序依次存取的,只能从头往下读。在4 个选项中,只有逻辑号跟逻辑顺序的意思最接近,","type":"choice","options":{"D":"按文件逻辑记录大小逐一存取","B":"按文件的逻辑号逐一存取","A":"按终端号依次存取","C":"按物理块号依次存取"},"answer":"B"},{"id":"learncoder_122_21307","stem":"信息在外存空间的排列也会影响存取等待时间。逻辑记录A,B,C,…,J被存放于磁盘上,每个磁道存放10个记录,安排见表<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image1.png'/>假定要经常顺序处理这些记录,磁盘旋转速度为20ms/r,处理程序读出每个记录后花4ms进行处理。考虑对信息的分布进行优化,见表4-5,信息分布优化后处理的时间缩短了(\t)ms。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image2.png'/>","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"本题中磁盘旋转速度为20ms/r,每个磁道存放10个记录,因此读出一个记录的 时间为20ms/10=2ms①对于第一种记录分布情况,读出并处理记录A需要6ms,\"则此时读 写头已转到记录D的开始处,因此为了读出记录B,必须再转一圈少两个记录(从记录D到 记录B)。后续8个记录的读取及处理与此相同,但最后一个记录的读取与处理只需6ms。于 是,处理10个记录的总时间为9x(2+4+16)ms+(2+4)ms=204ms②对于第二种记录分布情况, 读出并处理记录A后,读写头刚好转到记录B的开始处,因此可立即读出并处理,后续记录 的读取与处理情况相同。一共旋转2.7圈。最后一个记录的读取与址理只需6ms于是处理 10个记录的总时间为20x2.7ms+6ms=60ms综上所述,信息分布优化后,处理的时间缩短了 204ms-60ms=144ms","type":"choice","options":{"D":"204","A":"60","B":"104","C":"144"},"answer":"C"},{"id":"learncoder_122_21305","stem":"下面关于目录检索的论述中,正确的是()","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"本题考查目录检索的内容。要实现用户对文件的按名存取,系统先利用用户提供 的文件名形成检索路径,再对目录进行查询。在顺序检索时,路径名的一个分量名未找到, 说明路径名中的某个目录或文件不存在,就不需要再查找了。A选项,目录进行查询的方式 有两种:线性检索法和散列方法,线性检索法即root/.. /filename,现代操作系统中一般采用 这种方式查找文件。B选项,为了加快文件查找速度,可以设立当前目录,于是文件路径可 以从当前目录进行查找。C选项正确。D选项,在顺序检索法的查找完成后,得到文件的逻辑地址。","type":"choice","options":{"D":"在顺序检索法的查找完成后,即可得到文件的物理地址","B":"在利用顺序检索法时,对树形目录应采用文件的路径名,应从根目录开始逐级检索","C":"在利用顺序检索法时,只要路径名的一个分量名未找到,便应停止查找","A":"由于散列法具有较快的检索速度,因此现代操作系统中都用它来替代传统的顺序检索方法"},"answer":"C"},{"id":"learncoder_122_21302","stem":"操作系统为了管理文件,设计了文件控制块(FCB),文件控制块的建立是()。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"本题考查文件控制块的概念。文件控制块是用于管理文件的一组数据,每个文件 均有一个文件控制块,其中包括文件名、文件拥有者、文件创建日期时间等。文件控制块一 般在创建该文件时建立,打开文件时只是将文件控制块的内容读入内存,读和写文件时对文 件内容操作,它们必须依靠文件控制块的指示,例如外存地址、读写权限等。关闭文件只是 将文件控制块回写到磁盘,删除文件时将文件控制块清除","type":"choice","options":{"C":"在调用read时","A":"在调用create时","B":"在调用open时","D":"在调用write时"},"answer":"A"},{"id":"learncoder_122_21306","stem":"在现代操作系统中,文件系统都有效地解决了重名(即允许不同用户的文件可以具有相同的文件名)问题。系统是通过(\t)来实现这一功能的。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"树形目录结构由一个根目录和若干层子目录组成。这种目录结构一是能够解决文 件重名问题,即不同的目录可以包含相同的文件名或目录名;二是能够解决文件多而根目录 容量有限带来的问题","type":"choice","options":{"D":"建立指针","C":"树形目录结构","A":"重名翻译结构","B":"建立索引表"},"answer":"C"},{"id":"learncoder_122_21303","stem":"通常对文件系统来说,文件名及属性可以集中在(\t)中以便查询。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"文件与文件控制块一一对应,人们把文件控制块的有序集合称为文件目录,即一 个文件控制块就是一个文件目录项。而文件控制块中包含的信息有文件名、文件的结构、文件的物理位置、存取控制信息和管理信息","type":"choice","options":{"B":"索引","D":"作业控制块","C":"字典","A":"目录"},"answer":"A"},{"id":"learncoder_122_21304","stem":"设某文件为索引顺序文件,由5个逻辑记录组成,每个逻辑记录的大小与磁盘块的大—小相等,均为512B,并依次存放在50、121、75、80、63号磁盘块上。若要存取文件的第1569逻辑字节处的信息,则要访问(\t)号磁盘块。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"因为1569=512x3+33。所以要访问字节的逻辑记录号为3,对应的物理磁盘块号为80,故应访问第80号磁盘","type":"choice","options":{"A":"3","D":"63","C":"80","B":"75"},"answer":"C"},{"id":"learncoder_122_21301","stem":"若8个字(字长32位)组成的位示图管理内存,假定用户归还一个块号为100的内( )假定字号、位号、块号均从1开始算起,而不是从0开始。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"本题考查位示图的字号和位号计算,考生一看到就应该想到要用画草图的方法解答。 解法一:由位示图的盘块号到字号、位号的转换公式得若回收的盘块号为b,则字号i=(b-1)/(n+l),位号j=(b-1)%n+1;现在 b=100, n=32,所以 i=(100-1)/(32+1)=3, j=(100-1)%32+1=4;所以字号为4,位号为4解法二 根据题意,画出位示图的草图,如图4-24所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第4章)/image10.png'/>通过图4-24,发现100块在第4行第4列, 所以字号为4,位号为4。","type":"choice","options":{"B":"字号为4,位号为4","C":"字号为3,位号为4","D":"字号为4,位号为5","A":"字号为3,位号为5"},"answer":"B"},{"id":"learncoder_122_21298","stem":"驱动调度算法中,( )算法可能会随时改变移动臂的运动方向。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"最短寻道时间优先(SSTF)算法是以查找距离磁头最短(也就是查找时间最短) 的请求作为下一次服务对象,因此其可能会随时改变移动臂的运动方向。故选B。扫描算法 可细分为电梯调度工SCAN)算法和循环扫描(C-SCAN)算法。电梯调度(SCAN)算法是 在磁头前进方向上备找最短寻找时间的请求,若前进方向上没有请求(即处理完最高/低编号 柱面请求后),则掉转方向。SCAN算法很大程度上消除了 SSTF算法的不公平性,但仍有利 于中间磁道的请求。循环扫描(GSCAN)算法是对SCAN算法的改进,它总是按同一方向 移动磁头,当处理完最高编号的柱面请求后,不是掉转方向,而是把磁头移动到最低编号的 柱面请求处,然后按同一方向继续向上移动。这种算法彻底消除了对两端磁道请求的不公平。","type":"choice","options":{"C":"扫描","D":"单向扫描","B":"最短寻道时间优先","A":"电梯调度"},"answer":"B"},{"id":"learncoder_122_21299","stem":"下列关于打开文件open。操作和关闭文件close。操作的叙述,只有(\t)是错误的。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"本题考查的是文件的打开和关闭操作的含义,同时考查了目录的本质。对于B选 项open()操作就是告诉系统,用户需要使用这个文件,然后系统才把这个文件的控制所需的 描述信息(FCB)调入到内存,放在内存的打开文件表中,所以B选项正确;对于C选项, 既然这个系统有open和close操作,那么说明这个系统需要显式的文件打开和关闭操作, 所以文件使用之前需要被打开,所以C选项正确;对于D选项,要理解目录的本质,目录实 际上也是以文件的形式存放在外存上的,所以目录本质上也是一个文件,所以目录在被使用 前也应该同其他类型的文件一样先进行打开操作,所以D也正确;最后再来看A选项,close 操作显然不是丢弃文件的操作,因为close操作的结果是销毁这个文件在内存中的目录项, 而文件还是保存在外存上,不可能被丢弃,如果是丢弃,那么应该调用删除文件的操作","type":"choice","options":{"D":"目录必须先打开,后使用","C":"文件必须先打开,后使用","A":"close操作告诉系统,不再需要指定的文件了,可以丢弃它","B":"open操作告诉系统,开始使用指定的文件"},"answer":"A"},{"id":"learncoder_122_21300","stem":"考虑一个文件存放在100个数据块中。文件控制块、索引块或索引信息都驻留内存。那么如果( ),不需要做任何磁盘I/O操作。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"本题考查的是连续分配、链接分配和索引分配的特点,并考查它们各自插入数据 块或移动数据块所需要的操作。对于选项A,采用连续分配策略,连续分配策略下是没有指 针的,对每个数据块的访问都可以直接用块号寻址到,不过要把最后一个数据块搬到文件头 部,先要把最后一块读入内存,然后将倒数第二块放入到最后一块,将倒数第三块放入倒数 第二块……将第一块放入到原本第二块的位置,最后才能把内存中原本的最后一块放入到第一块的位置,也就是文件的头部,读取和写入数据块都需要\"0操作,所以需要很多次磁盘 I/O操作,具体次数和文件的长度有关;对于C选项,采用隐式链接分配,链接分配的指针都存放在数据块的末尾,也就是外存中,所以先要在内存中读出第一块的地址,然后依次读出后续块,直到找到最后一块,并在最后一块数据块的数据块指针中写入原来的第一块的地 址,这儿需要写外存,最后在内存中改变文件首地址为原本的最后一块的地址,所以需要多次磁盘I/O操作;对于D选项,要读出最后一块需要多次磁盘I/O操作,修改原本的最后一块的指针指向原本的第一块,还要改变内存中的文件首地址为原本的第二块,最后再把新的最后一块的指针置为NULL,所以需要多次磁盘I/O操作;对于选项B,由于本题中单级索引的索引块驻留在内存,因此所有数据块的指针都在内存中,只需要在内存中重新排列这些指针相互间的位置,将最后一块的指针移动到最前面即可,不需要任何磁盘I/O操作","type":"choice","options":{"D":"采用隐式链接分配策略,将第一个数据块插入文件尾部","B":"采用单级索引分配策略,将最后一个数据块插入文件头部","A":"采用连续分配策略,将最后一个数据块搬到文件头部","C":"采用隐式链接分配策略,将最后一个数据块插入文件头部"},"answer":"B"},{"id":"learncoder_122_5626","stem":"名词解释:文件。 [湖南农业大学2016年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"文件是具有文件名的一组相关元素的集合,在文件系统中是一个最大的数据单位,它描述了一个对象集。每个文件都有一个文件名,用户通过文件名访问文件。"},{"id":"learncoder_122_5628","stem":"描述如下两种磁盘调度算法及其优缺点。[中国科学院大学2013年](1)先来先服务(FCFS)。(2)最短寻道时间优先(SSTF)。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"(1)先来先服务算法按进程请求的先后次序进行调度。先来先服务算法的优点:简单、公平。先来先服务算法的缺点:未对调度次序进行优化,平均寻道时间较长。(2)最短寻道时间优先算法选择与当前磁头所在位置最近的请求作为下一次服务对象。最短寻道时间优先算法的优点:与先来先服务算法相比,减少了平均寻道时间,有更好的寻道性能。最短寻道时间优先算法的缺点:会出现“饥饿”现象,即某些早到达的请求长期得不到执行。"},{"id":"learncoder_122_5630","stem":"某磁盘文件系统使用链接分配方式组织文件,簇大小为4 KB。目录文件的每个目录项包括文件名和文件的第一个簇号,其他簇号存放在文件分配表FAT中。[全国联考2016年](1)假定目录树如下图所示,各文件占用的簇号及顺序如下表所示,其中dir、dirl是目录,filel、file2是用户文件,请给出所有目录文件的内容。(2)若FAT的每个表项仅存放簇号,占2个字节,则FAT的最大长度为多少字节?该文件系统支持的文件长度最大是多少?(3)系统通过目录文件和FAT实现对文件的按名存取,说明filel的106、108两个簇号分别存放FAT的哪个表项中?(4)假设仅FAT和dir目录文件已读入内存,若需将文件dir/dirl/filel的第5 000 B读入内存,则要访问哪几个簇?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"(1)两个目录文件的dir和dirl内容如下图所示。dirl目录文件(2)FAT的簇大小为2B,等于16bit,故在FAT表上最多允许216(65 536)个表项,一个FAT文件最多包含216(65 536)个簇。FAT的最大长度为216×2 B=128 KB。文件的最大长度为216×4 KB=256 MB。(3)在FAT的每个表项中存放下一个簇号。filel的簇号106存放在FAT表项的100号表项中,簇号108存放在FAT的106号表项中。(4)首先需要在dir目录文件中找到dirl的簇号,读取48号簇,得到dirl目录文件。然后找到filel的第一个簇号,在FAT中查找filel的第5 000 B所在的簇号。最后访问磁盘中的这个簇。综上所述,需要访问目录文件dirl所在的48号簇和文件flel的106号簇。"},{"id":"learncoder_122_5627","stem":"文件物理结构是指一个文件在外存上的存储组织形式,主要有连续结构、链接结构和索引结构三种,请分别简述它们的优缺点。[电子科技大学2015年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"顺序结构的优点:①存储管理简单,容易实现;②支持顺序存取和随机存取;③顺序存取速度快;④磁盘寻道次数和寻道时间最少。顺序结构的缺点:①需要为每个文件预留连续的空间以满足文件增长的需要;②不利于文件的动态增长。链式结构的优点:①提高了磁盘空间的利用率,不需要为每个文件预留物理块;②有利于文件的动态增长;③有利于文件的插入和删除。链式结构的缺点:①存取速度较慢,不适合随机存取;②物理块间的链接指针可能发生错误,造成数据丢失;③需要较多的寻道次数和较长的寻道时间;④链接指针占用了一定的空间,降低了空间利用率。索引结构的优点:①不需要为每个文件预留物理块;②既能满足顺序存取,又能满足随机存取;③满足了文件的动态增长需要。索引结构的缺点:①需要较多的寻道次数和较长的寻道时间;②索引表增加了系统开销,包括内存空间和存取时间。"},{"id":"learncoder_122_5633","stem":"某文件系统为一级目录结构,文件的数据一次性写入磁盘,已写入的文件不可修改,但可多次创建新文件。请回答如下问题。[全国联考2011年](1)在连续、链式、索引三种文件的数据块组织方式中,哪种更合适?要求说明理由。为定位文件数据块,需在FCB中设计哪些相关描述字段?(2)为快速找到文件,对于FCB,是集中存储好,还是与对应的文件数据块连续存储好?要求说明理由。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"(1)采用连续数据块组织方式,磁盘寻道时间更短,因为文件随机访问率更高。为了快速定位文件数据块,FCB中应该有的字段是起始块号和结束块号(或块数)。(2)应该将所有的FCB集中存放,文件数据集中存放。这样在随机查找文件时,只需要访问FCB对应的块,可以减少磁头移动的距离和磁盘的I/O次数。"},{"id":"learncoder_122_5635","stem":"某文件系统采用显式链接分配方式为文件分配磁盘空间,已知硬盘大小为64 GB,簇的大小为4 KB,该文件系统的FAT表需占用多少兆字节存储空间?若文件A分配到的盘块号依次为23、25、32、20,试画出FAT表中与文件A有关的各表项。[南京理工大学2015年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"硬盘的大小是64 GB,每个簇的大小是4 KB,共有64 GB/4 KB=224个簇,FAT表中每个表项占24位即3字节,故FAT表占用224×3=48 MB。FAT表中与文件A有关的各表项如下图所示。"},{"id":"learncoder_122_5632","stem":"某文件系统空间的最大容量为4 TB(1TB=240B),以磁盘块为基本分配单位。磁盘块大小为1 KB。文件控制块(FCB)包含一个512 B的索引表区。请回答下列问题。[全国联考2012年](1)假设索引表区仅采用直接索引结构,索引表区存放文件占用的磁盘块号,索引表项中块号最少占多少字节?可支持的单个文件最大长度是多少字节?(2)假设索引表区采用如下结构:第0~7字节采用<起始块号,块数>格式表示文件创建时预分配的连续存储空间,其中起始块号占6 B,块数占2 B;剩余504字节采用直接索引结构,一个索引项占6 B,则可支持的单个文件最大长度是多少字节?为了使单个文件的长度达到最大,请指出起始块号和块数分别所占字节数的合理值,并说明理由。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"(1)存储空间共有242/210=232个块,索引表项占32/8=4 B,512 B的索引表区可存放512 B/4 B=27个索引表项,最大文件长度为27×210=217=128 KB。(2)若块号占6 B,块数占2 B,最大文件长度为216×210+(504/6)×210=64 MB+84 KB,合理的起始块号和块数占字节数分别为4、4。因为块数占4 B以上就可以表示4 TB大小的文件长度,达到了文件系统的空间上限。"},{"id":"learncoder_122_5634","stem":"假设计算机系统采用CSCAN(循环扫描)磁盘调度策略,使用2 KB的内存空间记录16 384个磁盘块的空闲状态。[全国联考2010年](1)请说明在上述条件下如何进行磁盘块空闲状态的管理。(2)设某单面磁盘旋转速度为每分钟6 000转,每个磁道有100个扇区,相邻磁道间的平均移动时间为1 ms。若在某时刻,磁头位于100号磁道处,并沿者磁道号增大的方向移动(如下图所示),磁道号请求队列为50,90,30,120,对请求队列中的每个磁道需读取1个随机分布的扇区,则读完这4个扇区共需要多少时间?要求给出计算过程。(3)如果将磁盘替换为随机访问的Flash半导体存储器(如U盘、SSD等),是否有比CSCAN更高效的磁盘调度策略?若有,给出磁盘调度策略的名称并说明理由;若无,说明理由。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"(1)2 K的内存空间共有2×1 024×8=16 384B,正好对应16 384个磁盘块的状态,可以采用位示图法,即每个内存空间字节对应一个状态位,表示磁盘块是否空闲。(2)采用CSCAN调度算法,访问磁道的顺序是100→120→30-5090,总移动的磁道数量是170。磁盘平均旋转速度为每分钟6 000转,则平均旋转延迟为5 ms。每个扇区的平均读取时间为0.1 ms。综上所述,读取4个扇区花费的总时间=170×1 ms+5 ms×4+0.1 ms×4=190.4 ms。(3)采用先来先服务的调度策略更高效,因为Flash半导体存储器的物理结构不需要考虑寻道时间和延迟时间,可直接按I/O请求顺序来服务。"},{"id":"learncoder_122_5629","stem":"举例说明线性检索法检索过程(例如查找/usr/ast/mbox)。[南京航空航天大学2014年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"线性检索法又称为顺序检索法。在单级目录中,使用用户提供的文件名,用顺序查找法直接从文件目录中找到指明文件的目录项;在树形目录中,用户提供的文件名是由多个分量名组成的路径名,这就需要对多级目录进行查找。假设用户查找的文件路径名是/usr/ast/mbox,则查找的过程如下图所示。具体查找过程如下:"},{"id":"learncoder_122_5631","stem":"文件F由200条记录组成,记录从1开始编号。用户打开文件后,欲将内存中的一条记录插入到文件F中,作为其第30条记录。请回答下列问题,并说明理由。 [全国联考2014年](1)若文件系统采用连续分配方式,每个磁盘块存放一条记录,文件F的存储区域前后均有足够空闲的磁盘空间,则完成上述插入操作最少需要访问多少次存储块?F的文件控制块内容会发生哪些改变?(2)若文件系统采用链接分配方式,每个磁盘块存放一条记录和一个链接指针,则完成上述插入操作需要访问多少次磁盘块?若每个磁盘块大小为1KB,其中4个字节存放链接指针,则该文件系统支持的文件最大长度是多少?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"(1)文件系统采用连续分配方式,即文件F的200条记录连续。文件F存储区前后均有足够的空闲区,在第30条记录处插入一条新的记录,若要使插入操作访问存储块次数最少,需要将前29条记录向前移动。每移动一条记录需要访问两次存储块(一次读出,一次存入),移动29条记录共访问58次存储块。将第30条记录存入文件F中需要访问一次存储块,故共需要访问59次存储块。文件F的起始存储块号和文件长度的内容会因插入操作而改变。(2)采用链式分配的文件系统,插入一条记录无须移动其他记录,只需要找到插入点的位置插入并修改相邻记录的存储块号即可。在第30条记录处插入新纪录,需要从第1条记录开始查找到第29条记录的位置,这个过程访问存储块29次,插入新的记录需要访问存储块1次,将第29条记录的链接块号修改,指向新插入的第30条记录需要访问存储块1次,整个过程需要访问存储块31次。存放指针的字节位数是4,每字节8位,故最大可寻址的空间是232 B=4 GB,每个磁盘块的大小是1 KB即1 024 B,有4个字节存放指针,存放数据的部分就是1 024 B-4 B=1 020 B,故文件系统可存储的最大文件长度是4 G×1 020 B=4 080 GB。"},{"id":"learncoder_122_5638","stem":"某文件系统采用混合索引分配方式,如下图所示,有10个直接块(每个直接块指向一个数据块),1个一级间接块,1个二级间接块和1个三级间接块,间接块指向的是一个索引块,每个索引块和数据块的大小均为512字节,索引块编号大小为4字节。问:[浙江工商大学2017年](1)如只使用直接块,文件最大为多少字节?(2)在该系统中能存储的文件最大是多少?(3)如读取某文件第10M字节的内容,需要访问磁盘几次?","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"(1)如果只使用直接块,文件最大可以是10×512B=5120B。(2)直接块指向数据的块数的是10块,一级间接块指向的索引块共有指针数=512 B/4 B=128个,所以一级间接块指向数据的块数是128块。二级间接块指向的索引块里的指针数=512 B/4 B=128个,指向的索引块里还有128个指针,所以二级间接块指向数据的块数是1282块。同理,三级间接块指向数据的块数是1283块。所以该系统能存储的最大文件为(10+128+1282×1283)×512 B=1 082 201 088 B=1 056 837 KB。(3)10MB的文件需要的数据块数=10 MB/512 B=2 048块。直接块和一级间接块指向的数据块数=10+128=138块<2 048块。直接块、一级间接块和二级间接块指向的数据块数=10+128+1282=16 552块>2 048块,所以第10 MB的数据应该存放在二级间接块下的某个数据块中,共需要访问磁盘三次。"},{"id":"learncoder_122_5637","stem":"磁盘共有200个柱面(0~199),它刚刚从92号磁道移到98号磁道完成读写,假设此时系统中等待访问磁盘的磁道序列为:190、97、90、45、150、32、162、108、112、80。试给出采用下列算法后磁头移动的顺序,并计算寻道距离。[浙江工商大学2015年](1)FCFS算法。(2)SSTF算法。(3)SCAN算法。(4)C-SCAN算法。","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"(1)FCFS算法的磁头移动顺序是:98、190、97、90、45、150、32、162、108、112、80。FCFS算法的寻道距离:(190-98)+(190-97)+(97-90)+(90-45)+(150-45)+(150-32)+(162-32)+(162-108)+(112-108)+(112-80)=680。(2)SSTF算法的磁头移动顺序:98、97、90、80、108、112、150、162、190、45、32。SSTF算法的寻道距离:(98-97)+(97-90)+(90-80)+(108-80)+(112-108)+(150-112)+(162-150)+(190-162)+(190-45)+(45-32)=286。(3)SCAN算法的磁头移动顺序:98、108、112、150、162、190、97、90、80、45、32。SCAN算法的寻道距离:(108-98)+(112-108)+(150-112)+(162-150)+(190-162)+(190-97)+(97-90)+(90-80)+(80-45)+(45-32)=250。(4)C-SCAN算法的磁头移动顺序:98、108、112、150、162、190、32、45、80、90、97。C-SCAN算法的寻道距离:(108-98)+(112-108)+(150-112)+(162-150)+(190-162)+(190-32)+(45-32)+(80-45)+(90-80)+(97-90)=315。"},{"id":"learncoder_122_5636","stem":"假定某磁盘上共有200个柱面,编号为0~199,当前磁头的位置位于90号柱面,当前正在向199号柱面方向前进。同时有若干请求者在等待服务,它们依次要访问的柱面号为:85、132、188、94、155、100、170、125。假设每移动一个柱面所需的时间为2μs,试分别采用最短寻道优先算法和电梯调度算法计算实际的服务次序,并计算各个算法的平均寻道时间。[桂林电子科技大学2015年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"最短寻道优先算法的服务次序:90、94、100、85、125、132、155、170、188。最短寻道优先算法的寻道时间=[(94-90)+(100-94)+(100-85)+(125-85)+(132-125)+(155-132)+(170-155)+(188-170)×2 μs]=256 μs。电梯调度算法的服务次序:90、94、100、125、132、155、170、188、85。电梯调度算法的寻道时间=[(94-90)+(100-94)+(125-100)+(132-125)+(155-132)+(170-155)+(188-170)+(188-85)×2 μs]=402 μs。"},{"id":"learncoder_122_5612","stem":"如果允许不同用户的文件可以具有相同的文件名,通常采用( )来保证按名存取[广东工业大学2017年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis在多级目录结构中,同一级目录中不能有相同的文件名,但在不同级的目录中可以有相同的文件名。","type":"choice","options":{"A":"建立索引表","B":"多级目录结构","C":"建立指针","D":"重名翻译机构"},"answer":"B"},{"id":"learncoder_122_5615","stem":"采用直接存取方法来读写硬盘上的物理记录时,效率最低的文件结构是( )。[汕头大学2015年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis采用直接存取方法来读写硬盘上的物理记录时,效率最高的是索引文件,其次是连续文件,效率最低的是链接文件。","type":"choice","options":{"A":"索引文件","B":"连续文件","C":"链接文件","D":"索引连续文件"},"answer":"C"},{"id":"learncoder_122_5616","stem":"在采用索引分配技术时,若某一文件的索引块如下图所示。请问,该索引文件大小总共占有磁盘空间( )块?[中国计量大学2016年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis由题目中的图可知,该文件占用11、4、2和1四个磁盘块,加上系统为每个文件分配的一个索引块,一共占用五个磁盘块。","type":"choice","options":{"A":"7","B":"5","C":"6","D":"4"},"answer":"B"},{"id":"learncoder_122_5610","stem":"使用绝对路径名访问文件是从( )开始按目录结构访问某个文件。[广东工业大学2017年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis根目录指逻辑驱动器的最上一级目录,它是相对于子目录来说的。","type":"choice","options":{"A":"父目录","B":"根目录","C":"当前目录","D":"用户主目录"},"answer":"B"},{"id":"learncoder_122_5613","stem":"对一个文件的访问,常由( )共同限制。[广东工业大学2017年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis对文件访问时通常受用户访问权限和文件属性共同限制。","type":"choice","options":{"A":"用户访问权限和文件属性","B":"用户访问权限和用户优先级","C":"文件属性和口令","D":"用户优先级和文件属性"},"answer":"A"},{"id":"learncoder_122_5614","stem":"按文件的物理组织结构可将文件分成( )等。[广东工业大学2017年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis按文件的物理组织结构分类,可将文件分成连续文件、链式文件、索引文件三种。","type":"choice","options":{"A":"命令文件、库文件、索引文件","B":"连续文件、链式文件、索引文件","C":"输入文件、输出文件、随机文件","D":"数据文件、命令文件、文本文件"},"answer":"B"},{"id":"learncoder_122_5611","stem":"数据库文件的逻辑结构形式是( )。[广东工业大学2017年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis文件的逻辑结构是指文件的外部组织形式,可以分为两类:有结构的记录式文件和无结构的字符流式文件。数据库文件的逻辑结构形式是有结构的记录式文件。","type":"choice","options":{"A":"记录式文件","B":"档案文件","C":"字符流式文件","D":"只读文件"},"answer":"A"},{"id":"learncoder_122_5617","stem":"成组链接法可用于( )。[中国计量大学2016年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis成组链接法占用的空间小,超级块不大,可放入内存中。可以使大多数分配和回收空闲盘块的工作在内存中进行,提高了效率。填空题","type":"choice","options":{"A":"磁盘空闲空间的管理","B":"文件目录的查找","C":"磁盘的驱动调度","D":"页式虚拟存储管理中的页面调度"},"answer":"B"},{"id":"learncoder_122_5621","stem":"多级文件目录可以提高文件的查询速度。( )[燕山大学2015年]__1__","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题","type":"blank","options":{"__1__":"√。"}},{"id":"learncoder_122_5622","stem":"名词解释:磁盘高速缓存。[南京理工大学2013年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"磁盘高速缓存是利用内存中的部分存储空间来暂时存放从磁盘中读出的盘块内容。物理上是驻留在内存的盘块,逻辑上属于磁盘。"},{"id":"learncoder_122_5619","stem":"在操作系统中,FCB是指 。[南京理工大学2013年]__1__","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysisFCB是为了方便对文件进行控制和管理,在系统内部给每个文件设置唯一一个文件控制块,即FCB。","type":"blank","options":{"__1__":"文件控制块。"}},{"id":"learncoder_122_5618","stem":"操作系统是以 为单位给文件分配磁盘空间的。[南京理工大学2013年]__1__","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis操作系统为文件分配存储空间是以块为单位进行分配的,不是字节。","type":"blank","options":{"__1__":"块。"}},{"id":"learncoder_122_5624","stem":"名词解释:逻辑文件。 [南京理工大学2013年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"文件的逻辑结构是用户可见的结构。逻辑文件在结构上分为两种形式,一种是无结构的流式文件,文件内的信息不再划分单位,是由依次的、一串字符流构成的文件;另一种是有结构的记录式文件,是用户把文件内的信息按逻辑上独立的含义划分信息单位,每个单位称为一个逻辑记录。"},{"id":"learncoder_122_5625","stem":"名词解释:电梯调度算法。 [浙江工商大学2017年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"电梯调度算法,即SCAN算法,是磁盘调度算法的一种,该算法不仅考虑到欲访问的磁道与当前磁头所在磁道间的距离,更优先考虑的是当前磁头移动的方向。这种算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。由于这种算法的磁头移动规律颇像电梯的运行,又被称为电梯调度算法。"},{"id":"learncoder_122_5620","stem":"磁带、磁盘这样的存储设备都是以 为单位与内存进行信息交换的。[汕头大学2015年]__1__","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis磁带和磁盘都是块设备,通常每个块的大小为512B,磁带和磁盘上的文件是以块为单位进行访问的。","type":"blank","options":{"__1__":"块。"}},{"id":"learncoder_122_5623","stem":"名词解释:文件索引节点。 [南京理工大学2013年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis多级目录较两级目录而言,查询速度更快,层次结构更加清晰。能够更加有效地进行文件的管理与维护。目前大多数操作系统如UNIX、Linux和Windows都采用的多级目录结构。简答题42.文件管理——磁盘组织与管理","type":"short_answer","answer":"在检索文件时,只用到了文件名,也就是说,在检索目录时,文件的其他信息是不会被用到的,也不会被调入内存。因此,有些系统采用了文件名与文件描述信息分开的方法,将文件的描述信息单独形成一个索引节点。"},{"id":"learncoder_122_5594","stem":"若某文件系统索引节点(inode)中有直接地址项和间接地址项,则下列选项中,与单个文件长度无关的因素是( )。[全国联考2013年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis索引节点的个数就是文件的总数,与单个文件的长度无关。","type":"choice","options":{"A":"索引节点的总数","B":"间接地址索引的级数","C":"文件块大小","D":"地址项的个数"},"answer":"A"},{"id":"learncoder_122_5600","stem":"假设磁头当前位于第105道,正在向磁道序号增加的方向移动。现有一个磁道访问请求序列为35,45,12,68,110,180,170,195。采用SCAN调度(电梯调度)算法得到的磁道访问序列是( )。[全国联考2009年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysisSCAN调度算法解决了SSTF(最短寻道时间优先)调度算法的“饥饿”现象,前者在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。题中已知当前磁头位于第105道,更靠近请求序列中的第110道。故序列访问的顺序依次为110,170,180,195,68,45,35,12。","type":"choice","options":{"A":"110,170,180,195,68,45,35,12","B":"110,170,180,195,12,35,45,68","C":"110,68,45,35,12,170,180,195","D":"12,35,45,68,110,170,180,195"},"answer":"A"},{"id":"learncoder_122_5601","stem":"文件系统中,文件访问控制信息存储的合理位置是( )。[全国联考2009年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis文件分配表用来记录文件所在位置,只有文件控制块存储文件访问控制信息。","type":"choice","options":{"A":"文件控制块","B":"用户口令表","C":"系统注册表","D":"文件分配表"},"answer":"A"},{"id":"learncoder_122_5595","stem":"某磁盘的转速为10 000转/分,平均寻道时间是6 ms,磁盘传输速率是20 MB/s,磁盘控制器延迟为0.2 ms,读取一个4 KB的扇区所需的平均时间约为( )。[全国联考2013年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis磁盘的转速是10 000转/分,则转一圈的时间是60/10 000=0.006 s=6 ms,所以平均查询扇区的时间为3 ms,平均寻道时间为6 ms。读取4 KB扇区的时间为4 KB/(20 MB/s)=0.2 ms,加上磁盘控制器的延时,读取一个4 KB的扇区所需的平均时间约为3 ms+6 ms+0.2 ms+0.2 ms=9.4 ms。","type":"choice","options":{"9":"4ms","A":"12.4ms","B":"12ms","C":"9ms"},"answer":"9"},{"id":"learncoder_122_5598","stem":"设置当前工作目录的主要目的是( )。[全国联考2010年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis设置当前目录后,文件检索时首先查找当前目录,故设置当前目录的主要目标是提高文件检索速度。","type":"choice","options":{"A":"加快文件的读/写速度","B":"节省内存空间","C":"加快文件的检索速度","D":"节省外存空间"},"answer":"C"},{"id":"learncoder_122_5604","stem":"UNIX系统中对空闲磁盘存储空间采用( )方法管理。[南京理工大学2013年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysisUNIX系统采用的是对空闲块链表改进的方法。把所有的空闲块按照固定数量分组,组和组之间形成链接关系,这就是空闲块成组链接法。","type":"choice","options":{"A":"空闲块单向链接","B":"空闲块成组链接","C":"位示图","D":"空闲块表"},"answer":"B"},{"id":"learncoder_122_5603","stem":"从用户的角度看,文件系统主要是实现( )[电子科技大学2014年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis用户只需要向系统提供所需要的文件名称,就可以快速准确地找到指定文件在外存上的位置,这是目录文件系统向用户提供的最基本的服务。","type":"choice","options":{"A":"数据保护","B":"按名存取","C":"数据共享","D":"数据存储 "},"answer":"B"},{"id":"learncoder_122_5596","stem":"下列选项中,不能改善磁盘设备I/O性能的是( )。[全国联考2012年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis重排I/O请求次序可以使多个进程公平地访问磁盘,减少I/O需要的平均等待时间;缓冲区使用预读和滞后写技术对具有重复性及阵发性的I/O进程改善有很大帮助;优化文件物理块的分布可减少寻找时间和延迟时间,提高磁盘性能;在一个磁盘上设置多个分区与改善I/O性能无关。","type":"choice","options":{"A":"预读和滞后写","B":"重排I/O请求次序","C":"优化文件物理块的分布","D":"在一个磁盘上设置多个分区"},"answer":"D"},{"id":"learncoder_122_5599","stem":"下列文件物理结构中,适合随机访问且易于文件扩展的是( )。[全国联考2009年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis索引结构为一个逻辑文件的信息建立一个索引表,所以索引文件由索引表和逻辑文件两者构成。索引文件支持随机访问也便于文件增删,但由于索引表的使用增加了存储空间开销,相关的查找策略也降低了系统效率。","type":"choice","options":{"A":"连续结构","B":"链式结构且磁盘块变长","C":"链式结构且磁盘块定长","D":"索引结构"},"answer":"D"},{"id":"learncoder_122_5602","stem":"设文件Fl的当前引用计数值为1,先建立Fl的符号链接(软链接)文件F2,再建立Fl的硬链接文件F3,然后删除Fl。此时,F2和F3的引用计数值分别是( )。[全国联考2009年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis在建立软链接(符号链接)时,引用计数值不会增大,而在建立硬链接时,引用计数值加1。新建F2时,Fl和F2的引用计数值都为1。当建立F3时,Fl和F3的引用计数值都变成了2。后来再删除Fl时,F3的引用计量数减1而F2的保持不变。最终F2与F3的引用计量数均为1。","type":"choice","options":{"A":"0、1","B":"1、1","C":"2、1","D":"1、2 "},"answer":"B"},{"id":"learncoder_122_5597","stem":"设文件索引节点中有7个地址项,其中4个地址项是直接地址索引,2个地址项是一级间接地址索引,1个地址项是二级间接地址索引,每个地址项大小为4字节。若磁盘索引块和磁盘数据块大小均为256字节,则可表示的单个文件最大长度是( )。[全国联考2010年]","key_points":"知识点.练习.专业课练习.操作系统.文件管理","analysis":"analysis一个索引块的大小是256 B,每个地址项大小为4 B,则磁盘的指针共有256/4=64个。故单个文件的最大长度为(4+2×64+1×64×64)×256 B=1 082 368 B=1 057 KB。","type":"choice","options":{"A":"33 KB ","B":"16 513 KB","C":"1 057 KB ","D":"519 KB"},"answer":"C"},{"id":"learncoder_164_21977","stem":"为使用户进程互斥地进人临界区\\可以把整个临界区实现成不可中断的过程,即用户有屏蔽所有中断的能力。每当用户程序进入临界区的时候,屏蔽所有中断;当出了临界区的时候; 再开放所有中断。你认为这种方法有什么缺点?","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"空","type":"short_answer","answer":"用户进程进入临界区时屏蔽所有中断,也涉及包括系统程序。假如屏蔽的是用户进程,确实 可以保护临界资源,但如果连系统所发出的中断也被屏蔽的话,就会引起系统错误。虽然系统外 中断往往与当前运行的程序无关,但如果是一些重要的硬件中断,如电源故障等,就可能会引起 错误,故不可盲目屏蔽所有中断"},{"id":"learncoder_164_21974","stem":"何谓死锁?产生死锁的原因和必要条件是什么?在解决死锁问题的几个方法中,哪种方法最容易实现?哪种方法使资源的利用率最高?\t.","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"空","type":"short_answer","answer":"死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再 向前推进。产生死锁的原因有二,一是竞争资源,二是进程推进顺序非法;\t产生死锁的必要条件是互斥条件、请求和保持条件、不剥夺条件和环路等待条件。解决死锁可归纳为四种方法:预防死锁,避免死锁,检测死锁和解除死锁。其中,预防死锁是最容易实现的,而避免死锁的发生则可以使资源的利用率最高。"},{"id":"learncoder_164_21973","stem":"有A、B两个程序,程序A按顺序使用CPU 10 s,使用设备甲5 s,使用CPU 5 s,使用设备 乙5 s,最后使用CPU 10 sj程序B按顺序使用设备甲10 s,使用CPU IQ s,使用设备乙5 s,使用 CPU 5 S,使用设备乙10 S,试问:(1)在顺序环境下执行程序A和程序B,CPU的利用率是多少?(2)在多道程序环境下,CPU的利用率是多少?","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"空","type":"short_answer","answer":"\t(1)程序A和程序B顺序执行时,程序A执行完毕,程序B才开始执行。两个程序共耗时 75 s,其中占用CPU的时间为40 s,因此顺序执行时CPU的利用率为40/75=53%。(2)在多道程序环境下,两个程序并发执行,其执行情况如下表所示。由表中数据可以看出,两个程序共耗时40 s,其中CPU运行时间为40 s,故此时的CPU的利 用率为 40/40 = 100%。表在多道程序环境下A、B执行情况"},{"id":"learncoder_164_21976","stem":"在银行家算法的例子中,如果P0发出的请求向量由Request0(0,2,0)改为Request0(0, 1,0),问系统可否将资源分配给它?","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"空","type":"short_answer","answer":"可以。首先,Request0(0,1,0) < = Need0(7 ,4,3) , RequestO(0,1,0) < = Available(2,3,0);分 配后可修改得一资源数据表(表略),进行安全性检查,可以找到一个安全序列{P1,P4,P3,P2, P0}},或{{Pl,P4,P3,P0,P2}},因此,系统是安全的,可以立即将资源分配给P0。\t"},{"id":"learncoder_164_21975","stem":"简述预防死锁的办法。","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"空","type":"short_answer","answer":"做法一:如果系统当前存在的资源数量能够满足进程的资源需要,便一次性地为进程分配其 所需的全部资源;在该进程完成之后再一次性地回收全部资源。这个做法被称作摒弃“请求和 保持”条件,该方法可以预防死锁。做法二:当系统中某些进程在已经占有一定数量资源的情况下,又提出新的资源请求时,操 作系统不能立即满足该进程的需求时,该进程必须立即释放它已经占有和保持的所有资源,待以 后需要时再重新申请;这种可以剥夺进程资源的做法,可以有效地防止死锁的产生。被称作携弃 “不剥夺”条件。做法三:就是采用一定的方法,将所有可提供的资源按类型排序编号,所有进程对资源的请 求也必须严格按序号递增的次序提出,避免产生资源占有和资源需求的回路出现,造成死锁的产 生。此方法也被称作按弃“环路等待”条件,\t"},{"id":"learncoder_164_21972","stem":"某多道程序设计系统配有一台处理器和两台外设I01,I02,现有3个优先级由高到低的 作业J1、J2、J3都已装入了主存,它们使用资源的先后顺序和占用时间分别是加J1:I02((30 ms)) ,CPU(10 ms); I01(30 ms) ,CPU(10 ms);J2:I01(20 ms) ,CPU(20 ms);I02(40 ms);J3:CPU(30 ms) ,101(20 ms)。处理器调度采用可抢占的优先数算法,忽略其他辅助操作时间,回答下列问题。(1)分别计算作业J1、J2和J3从开始到完成所用的时间。(2)3个作业全部完成时CPU的利用率。(3)3个作业全部完成时外设I01的利用率。","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"13. 空","type":"short_answer","answer":"为了清楚地描述作业执行情况,我们对题目假设的情况分析如下(1)J1占用102传输30 ms时,J1传输完成,抢占J2的CPU,运行10 ms,再传输30 ms,运行 10 ms,完成。J1从开始到完成所用的时间为:30+10+30+10 = 80 ms。 J2与其并行地在KH上传 输20 ms,抢占J3的CPU,J2运行10 ms后,被J1抢占CPU,等待10 ms之后,J2再次得到CPU, 运行10 ms,J2启动102传输,40 ms完成。J2从开始到完成所用的时间为:20 + 10 + 10 + 10+40 = 90 ms。 J3在CPU上执行20jns,被J2抢占CPU,等待30 ms,再运行10 ms,等待10 ms,J3启动 101运行20 ms的传输,完成。J3从开始到完成所用的时间为:20+30+10+10+20 = 90 ms。(2)三个祜业全部完成时,CPU的利用率为:(10+20+30+10)/90 = 7/9 = 78%。(3)三个作业全部完成时,外设101的利用率为:(20+30+20)/90 = 7/9 = 78%。"},{"id":"learncoder_164_21968","stem":" 临界区是指()。","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进 程使用的可轮流分享的资源)。使用时,每次只准许一个进程进入临界区,一旦一个进程进入临 界区之后,不允许其他进程同时进入。进程进入临界区的调度原则是:(1)如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入;(2)任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其他 所有试图进入临界区的进程必须等待;(3)进入临界区的进程要在有限时间内退出,以便其他进程能及时进入自己的临界区;(4)如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。","type":"choice","options":{"B":"可共享的一块内存区","D":"请求访问临界资源的代码","C":"访问临界资源的一段代码","A":"一组临界资源的集合"},"answer":"C"},{"id":"learncoder_164_21967","stem":"在一段时间内,只允许一个进程访问的资源称为(\t)。","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"在现代计算机系统中,有一些资源不能被多个进程同时使用,这样的资源如果使用 或分配不当会造成错误,它们只能被排它地使用,这样的资源就是临界资源。","type":"choice","options":{"D":"共享区","B":"独占资源","A":"共享资源","C":"临界资源"},"answer":"C"},{"id":"learncoder_164_21969","stem":"死锁现象是由于(\t)选成的。","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"死锁是指多个进程在占有一定资源的同时还寄希望得到其他进程占有的资源,而该 进程也是占有一定的资源且不放弃的同时,期望获得其他进程占有的资源,进程间相互不让步, 造成各个进程均无法推进的现象被称为死锁。","type":"choice","options":{"D":"作业批处理","A":"CPU数量不足","C":"多个进程抢夺并独占资源","B":"内存数量不足"},"answer":"C"},{"id":"learncoder_164_21963","stem":"某计算机系统中有8台打印机,有K个进程竞争使用,每个进程最多需要3台打印机。 该系统可能会发生死锁的K的最小值是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"当k小于4(即k的值取为3及其以下值)的时候,系统可以为某个进程分配打印机 资源,并可以确保在有限的时间里使某个进程完成并且退还其已经占用的打印机,进而使各个进 程能够依次顺利型完成。而当k>=4 的时候,就构成了死锁需要的条件,会引起死锁的产生,所以 答案为C。","type":"choice","options":{"D":"5","C":"4","A":"2","B":"3"},"answer":"C"},{"id":"learncoder_164_21965","stem":"当中断发生后,进入中断处理的程序属于(\t)","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"在现代操作系统的设计中,为了保证系统资源的安全,将系统的工作状态划分为目 态和管态两种,只有操作系统的核心才能工作在管态,而中断处理程序必须工作在管态,故其属 于操作系统程序。","type":"choice","options":{"C":"可能是用户程序,也可能是OS程序","D":"单独的程序,既不是用户程序,也不是OS程序","A":"用户程序","B":"OS程序"},"answer":"B"},{"id":"learncoder_164_21964","stem":"当计算机操作系统提供了管态(系统态)和目态(用户态)时,()必须在管态下执行","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"在提供了管态(系统态)和目态(用户态)两种工作状态的操作系统环境下,中断处 理程序必须工作在管态状态下,而输入输出的工作需要通过发出中断终端处理请求申请CPU对 于输入输岀操作的处理。所以答案为Do","type":"choice","options":{"C":"算术运算指令","B":"把运算结果送内存的指令","A":"从内存中取数的指令","D":"输入/输出指令"},"answer":"D"},{"id":"learncoder_164_21966","stem":"引入多道程序的目的在于()。","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"所谓多道程序设计指的是计算机系统中允许多个程序同时进入主存储器并启动计 算的系统管理方法。也就是说,计算机内存中可以同时存放多道(两个以上相互独立的)程序, 它们都处于开始和结束之间。从宏观上看是并行的,多道程序都处于运行中,并且都没有运行结 束;从微观上看是串行的,各道程序轮流使用CPU,交替执行。引入多道程序设计技术的根本目 的是为了提高CPU的利用率。\t","type":"choice","options":{"D":"充分利用存储器","A":"充分利用CPU,减少CPU等待时间","C":"有利于代码共享,减少主、辅存信息交换量","B":"提高实时响应速度"},"answer":"A"},{"id":"learncoder_164_21962","stem":"进程P0和P1的共享变量定义及其初值如下:booleam flag[2];int turn = 0 ;flag[0] = false ;flag[1 ] = false;若进程P0和Pl访问临界资源的伪代码按照下面设计:void P0 ( ) //进程 P0\tvoid P1( ) //进程 P1{ {while (TRUE) {\twhile (TRUE){flag[0]=TRUE; \tflag[0]=TRUE;turn = 1 ; turn = 0;While ( flag[1] &&(turn = = 1)临界区 While (flag[0] &&(turn = =0)); 临界区;flag[O] = FALSE; flag] 1 ]= FALSE;则并发执行进程P0和P1时产生的情况是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"在题中给出的伪代码可知,由于信号量FLAG的赋值方法不对,故而会使得不能保 证进程互斥进入临界区,会出现“饥饿”现象。","type":"choice","options":{"A":"不能保证进程互斥进入临界区,会出现“饥饿”现象","D":"能保证进程互斥进入临界区,不会岀现“饥饿”现象","B":"不能保证进程互斥进入临界区,不会出现“饥饿”现象","C":"能保证进程互斥进入临界区,会出现“饥饿”现象"},"answer":"A"},{"id":"learncoder_164_21961","stem":"下列选项中,降低进程优先权级的合理时机是(\t)","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"在此题中,进程完成I/O,进入就绪列队;长期处于就绪列队的进程需要尽快得到处 理机为它服务,进程从就绪状态转为运行状态的时候也不能降低进程的优先级,只有在“进程的 时间片用完”才是降低进程优先级的最好时机。","type":"choice","options":{"B":"进程刚完成I/O,进入就绪列队","C":"进程长期处于就绪列队","D":"进程从就绪状态转为运行状态","A":"进程的时间片用完"},"answer":"A"},{"id":"learncoder_164_21960","stem":"假设与某类资源相关联的信号量初值为3,当前值为1,若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.处理机调度与死锁","analysis":"按照信号量的定义,与资源相关联的信号量的取值是与当前可用资源数量一致的, 因此M为1,而依题意,目前没有等候该资源的进程,故N的值为零。","type":"choice","options":{"B":"1、0","A":"0、1","D":"2、0","C":"1、2"},"answer":"B"},{"id":"learncoder_163_21993","stem":"请求分页替理系统中,假设某进程的页表内容如下表所示。某进程的页表在某时刻的内容<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第17章/image2.png'/>假没,页面大小为4 KB, —次内存的访问时间是100 ns,—次快表(TLB)的访问时间是10 ns,处理一次缺页的平均时间为108 ns(已含更新TLB和页表的时间),进程的驻留集大小固定 为2,采用最近最少使用置换算法(LRU)和局部淘汰策略。假设 ①TLB初始为空;②地址转换时先访问TLB,若TLB未命中,再访问页表(忽略访问 页表之后的TLB更新时间);③有效位为0表示页面不在内存,产生缺页中断,缺页中断处理后, 返回到产生缺贝中断的指令处重新执行。设有虚地址访问序列2362H、156,H、25A5H,请问:(1)依次访问上述3个虚地址,各需多少时间?给出计算过程。(2)基于上述访问序列,虚地址1565H的物理地址是多少?请说明理由。","key_points":"知识点.练习.专业课练习.操作系统.存器管理","analysis":"8. 空","type":"short_answer","answer":"(1)根据页式管理的工作原理,应先考虑页面大小,以便将页号和页内位移分解出来。页面 大小为4 KB,即212字节,则得到页内位移占虚地址的低12位,页号占剩余高位。可得三个虚地 址的页号P(十六进制的一位数字转换成4位二进制。因此,十六进制的低三位正好为页内位移,最高位为页号)如下:2362H:P = 2,访问快表10 ns,因初始为空,访问页表100 ns得到页框号,合成物理地址后访 问主存 100 ns,共计 10 ns+100 ns十 100 ns = 210 nso1565H:P = 1,访问快表10 ns,落空,访问页表100 ns落空,进行缺页中断处理108 ns,合成物 理地址后访问主存 100 ns,共计 10 ns+100 ns+108 ns+100 ns≈108 nso\t25A5H:P = 2,访问快表,因第一次访问已将该页号放入快表,因此花费10 ns便可合成物理 地址,访问主存100 ns,共计10 ns+100 ns = 110 ns。(2)当访问虚地址1565H时,产生缺页中断,合法驻留集为2,必须从页表中淘汰一个页面, 根据题目的置换算法,应淘汰0号页面,,因此1565H的对应页框号为101Ho由此可得1565H的 物理地址为101565Ho"},{"id":"learncoder_163_21995","stem":"设某计算机的逻辑地址空间和物理地址空间均为64 KB,按字节编址。某个进程最多需 要4页的数据存储空间,页的大小为1 KB,操作系统采用固定分配局部置换策略为此进程分配4 个页框,如下表所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第17章/header1.xml'/>当该进程执行到时刻260时,要访问逻辑地址为 17CAH的数据。请回答下列问题:(1)该逻辑地址对应的页号是多少?’(2)若采用先进先出(FIFO)置换算法,该逻辑地址对应的物理地址?要求给出计算过程。(3)采用时钟(Clock)置换算法,该逻辑地址对应的物 理地址是多少?要求给出计算过程。(设搜索下一页的指 针按顺时针方向移动,且指向当前2号页框,示意图如右)<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第17章/image4.png'/>","key_points":"知识点.练习.专业课练习.操作系统.存器管理","analysis":"空","type":"short_answer","answer":"(1)17CAH转换为二进制为:0001 0111 1100 1010,页的大小为1 KB,所以页内偏移为10 位,于是前6位是页号,因而其页号为0001 01,转换为十进制为5,所以,17CAH对应的页号为5。(2)若采用先进先出置换算法,则被置换出的页号对应的页框号是7。因此,对应的二进制 物理地址为:0001 1111 1100 1010,转换为十六进制的物理地址为1FCAHO(3)若采用时钟算法,且当前指针指向2号页框,则第一次循环时,访问位都被置为0,在第二次循环时,将选择置换2号页框对应的页,因此对应的二进制物理地址为:0000 1011 1100 1010 2转换为十六进制物理地址为OBCAHg"},{"id":"learncoder_163_21994","stem":"在一个请求分页系统中,采用LRU页面置换算法时,假如一个作业的页面走向为4,3,2, 1,4,3,5,4,3,2,1,5,当分配给该作业的物理块数胚分别为3和4时,试计算访问过程中所发生的缺页次数和缺页率?比较所得结果?","key_points":"知识点.练习.专业课练习.操作系统.存器管理","analysis":"空","type":"short_answer","answer":"(1)当分配给该作业的物理块数M为3时,所发生的缺页次数为7,缺页率为:7/12.=0. 583 (2)当分配给该作业的物理块数M为4时,所发生的缺页次数为4,缺页率为:4/12 =0. 333 o"},{"id":"learncoder_163_21990","stem":"某计算机采用二级页表的分页存储管理方式,按字节编制,其页大小2^10字节,页表项 大小为2字节,逻辑地址结构为:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第17章/image1.png'/>逻辑地址空间大小为2^10页,则表示整个逻辑地址空间的页目录表中包含表项的个数至少是 ()","key_points":"知识点.练习.专业课练习.操作系统.存器管理","analysis":"按照常规,绝大多数计算机都是采用32位结构,如果采用二级页表的分页存储管理 方式,按字节编制,其页大小为字节意味着页内编址需要占10位,页表项大小为2字节占16 位,则表示整个逻辑地址空间的页目录表中包含表项的个数的二进制位应该大于或等于7位二 进制数,即最小128是正确的。","type":"choice","options":{"B":"128","C":"256","A":"64","D":"512"},"answer":"B"},{"id":"learncoder_163_21989","stem":"某基于动态分区存储管理的计算机的主存容量为55 MB(初始为空),采用最佳适配 (Best Fit算法,分配和释放的顺序为:分配15 MB,分配30 MB,释放15 MB,分配6 MB,此时主 存中最大空闲分区的大小是( )","key_points":"知识点.练习.专业课练习.操作系统.存器管理","analysis":"这是由于最佳适应算法的定义而来的。算法规定将空闲区按照从小到大排序,每次 分配都选择能够满足需要的最小空闲区分配。","type":"choice","options":{"A":"7 MB","D":"15 MB","C":"10 MB","B":"9 MB"},"answer":"C"},{"id":"learncoder_163_21988","stem":"在下列选项中对分段式存储管理描述正确的是()。","key_points":"知识点.练习.专业课练习.操作系统.存器管理","analysis":"在单一的段式管理中,每个段是独立的逻辑单位,段内是连续的存储空间,而段与段 之间在存储区域分配时不必占用连续的区域。","type":"choice","options":{"C":"每个段必须是犬小相等的","D":"段与段之间的存储区必须是连续的","B":"每一段不必是连续的存储区","A":"每一段必须是连续的存储区"},"answer":"B"},{"id":"learncoder_163_21987","stem":"分区分配内存管理方式的主要保护措施是()。","key_points":"知识点.练习.专业课练习.操作系统.存器管理","analysis":"在现代操作系统中提供了支持多道程序设计技术,使得在特定的时间段内有多个用 户程序同时驻留内存,为了保护各个进程特别是系统进程的私有代码和数据不被其他进程有意 或者无意地破坏,设立了越界检查和越界保护机制,确保系统的安全。","type":"choice","options":{"B":"程序代码保护","D":"堆栈保护","A":"越界地址保护","C":"数据保护"},"answer":"A"},{"id":"learncoder_163_21986","stem":"最佳适应算法的空闲区的排列方式是(\t)","key_points":"知识点.练习.专业课练习.操作系统.存器管理","analysis":"该算法将系统的空闲区按从小到大的顺序排列,在需要空闲区分配时选择最小且能 够满足需要的空闲区进行分配。","type":"choice","options":{"B":"按大小递增顺序排列","C":"按地址由小到大排列","D":"按地址由大到小排列","A":"按大小递减顺序排列"},"answer":"B"},{"id":"learncoder_162_22505","stem":"请给出MS DOS的命令解释程序COMMAND. COM的工作流程。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"空","type":"short_answer","answer":"MS DOS命令解释程序COMMAND. COM的主要工作流程如下:(1)系统接通电源或复位,初始化部分获得控制权,对整个系统完成初始化工作,并自动执 行Autoexec, bat文件,然后把控制权交给暂存部分,后者给出提示符并等待和接收用户键入 命令。(2)暂存部分读入键盘缓冲区中的命令,判别其文件名、扩展名及驱动器名是否正确,若有 错则给定出错信息后返回;无错的情况下才查找和识别该命令。(3)若该命令为内部命令,暂存部分定会在命令表格中找到该命令,便可从对应表项中获得 该命令处理程序的入口地址,并把控制权交给该程序去执行;若键入命令为外部指令,则暂存部 分应为之建立命令行,通过执行系统调用exec装入其命令处理程序,并得到对应基地址,把控制 权交由该程序执行;若键入命令非法,则出错返回。(4)命令完成后,控制权重新交给暂存部分给出提示符并等待和接收用户键入命令,然后转 (2)。"},{"id":"learncoder_162_22508","stem":"试说明系统调用的一般处理过程。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"空","type":"short_answer","answer":"系统调用的一般处理过程分为三步:\t(1)设置系统调用号和参数。(2)对系统调用命令进行一般性处理,如保护CPU现场,将处理机状态字PSW、程序计数器 PC、系统调用号、用户栈指针以及通用寄存器等压入堆栈,将用户定义参数传送至指定位置保存 起来等。不同系统具体处理方式往往不同,在UNIX系统中是执行CHMK命令,并将参数表中的 参数传到User结构的U・U-arg()中;而在MS DOS中则是执行TNT21软中断。(3)根据系统调用入口表及具体的系统调用命令转至对应命令处理程序执行具体处理。"},{"id":"learncoder_162_22501","stem":"操作系统与用户的接口包括(\t)和系统调用。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"从用户角度来看,操作系统是用户与计算机硬件之间的接口。操作系统提供的服务 可以帮助用户来方便、有效地使用计算机。一般而言,操作系统为用户提供两类接口服务,程序 级接口和作业级接口,即通过一组系统调用供用户程序和其他系统程序调用;另一种是作业一级 的接口 ,即提供一组控制命令供用户去组织和控制自己的作业流程。","type":"choice","options":{"C":"进程调度","B":"作业调度","A":"编译程序","D":"作业控制"},"answer":"D"},{"id":"learncoder_162_22507","stem":"系统调用包括哪些类型?","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"空","type":"short_answer","answer":"通常,在操作系统内核设置有一组用于实现各种索统功能的子程序(过程),并将 它们提供给用户程序调用。每当用户在程序中需要操作系统提供某种服务时,便可利用一条系 统调用命令,去调用所需的系统过程。这即所谓的系统调用。系统调用的主要类型包括:(1)进程控制类。主要用于进程的创建和终止、对子进程结束的等待、进程映像的替换、进程数据段大小的改变以及关于进程标识符或指定进程属性的获得等。\t(2)文件操纵类。主要用于文件的创建、打开、关闭、读/写及文件读写指针的移动和文件属 性的修改,目录的创建及关于目录、特别文件或普通文件的索引结点的建立等。(3)进程通信类。用于实现各种类型的通信机制如消息传递、共享存储区及信息量集机制等。\t(4)信息维护类。用于实现关于日期和时间及其他系统相关信息的设置和获得。\t"},{"id":"learncoder_162_22504","stem":"请举例说明什么是管道联结。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"空","type":"short_answer","answer":"管道连接是指把第一个命令的输出作为第二个命令的输入,类似地又把第二个 命令的输出作为第三条命令的输入,以此类推,这样由两条以上的命令可形成一条管道。在MS DOS和UNIX中,都用\"I ”作为管道符号。其一般格式为:commandl |command2 |••• |commands"},{"id":"learncoder_162_22503","stem":"请举例说明什么是输入/输出重定向。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"13. 无","type":"short_answer","answer":"通常,命令的输入取自标准输入设备即键盘,而命令的输岀则送往标准输出设备 即显示终端。如果在命令中设置输出定向“〉”符,其后接文件名或设备名,则表示命令的输出改 向,并送到指定文件或设备上;类似地;在命令中设置输入重定向“〈”符,则不再是从键盘而是从 重定向符左边的参数指定的文件或设备上取得输入信息。这便是输入输出的重定向。"},{"id":"learncoder_162_22500","stem":"计算机联机命令由(\t)组成。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"按照联机命令的功能与使用方式,联机命令应该由一组联机命令,终端处理程序和 命令解释程序组成。","type":"choice","options":{"C":"命令解释程序","A":"一组联机命令","B":"终端处理程序","D":"以上3个部分"},"answer":"D"},{"id":"learncoder_162_22506","stem":"请比较系统调用与一般过程调用之间相同与不同之处。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"空","type":"short_answer","answer":"系统调用本质上是一种过程调用,但它是一种特殊的过程调用•,与一般的过程调 用相比较存在以下几个方面差别存在以下几个方面的差别:(1)运行在不同的系统状态。一般的过程调用,其调用过程和被调用过程或者均为用户程 序,或者均为系统程序,所以都运行在同一系统执行状态(用户态或系统态)下;而系统调用的调 用过程是运行在用户态下的用户程序被调用过程是运行在系统态下的系统程序。:(2)软中断进入机制。一般的过程调用可直接由调用过程转向被调用过程;而执行系统调 用时,由于调用过程和被调用过程是处于不同的系统状态,所以不允许由调用过程直接转向被调 用过程,而通常是通过软中断机制,先进入操作系统内核,经内核分析后,才能转向相应的命令处 理程序。\t,(3)返回及重新调度问题。对于一般的过程调用,在被调用过程执行完后,将返回到调用过 程继续执行;对于系统调用则不是这样,在被调用过程执行完,后,要对系统中所有要求运行的进 程进行重新调度。特别地,在采用了抢占式剥夺调度的系统中,重新调度将基于优先权分析来进 行,于是只有当调用进程仍具有最高优先权时,才会返回到调用过程继续执行;否则其将会被放 入就绪队列,而执行权利交由具最高优先权的过程优先执行。(4)嵌套调用。与一般过程类似,系统调用也允许嵌套调用,即在一个被调用过程执行期 间,还可以再利用系统调用命令去调用另一个系统过程,注意是系统过程而不是用户过程。"},{"id":"learncoder_162_22496","stem":"系统调用是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"在现代操作系统中,为了方便用户高效地使用系统资源管理计算机提供了这样一种 方式,称其为系统调用。","type":"choice","options":{"C":"中断子程序","B":"提供给编程人员的接口","D":"用户子程序","A":"—条机器指令"},"answer":"B"},{"id":"learncoder_162_22497","stem":"当中断发生后,进入中断处理的程序属于(\t)。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"操作系统在发生中断的时候,由其中断处理程序负责分析中断源并转到相应的处理 程序。","type":"choice","options":{"C":"可能是用户程序,也可能是OS程序","D":"单独的程序,既不是用户程序,也不是OS程序","A":"用户程序","B":"OS程序"},"answer":"B"},{"id":"learncoder_162_22499","stem":"本地用户通过键盘登录系统时,首先获得键盘输入信息的程序是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"当有按键输入时,需要首先产生一个中断,提醒系统处理。","type":"choice","options":{"B":"中断处理程序","C":"系统调用程序","D":"用户登录程序","A":"命令解释程序"},"answer":"B"},{"id":"learncoder_162_22498","stem":"下列选项中,操作系统提供的维予程序的接口是( )。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"在现代操作系统设计中,原语是提供用来给实现进程同步于互斥的执行过程中不可 分割的程序段,库函数属于软件环境的范畴,它也不属于操作系统的一部分,只有系统调用才是 最合适的选择。","type":"choice","options":{"A":"系统调用","B":"中断","D":"原语","C":"库函数"},"answer":"A"},{"id":"learncoder_162_22495","stem":"用户的应用程序是通过(\t)提供的支持和服务来使用系统资源完成其操作的。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"用户程序不能直接使用和指挥计算机系统资源,只有通过系统调用等方式由操作系 统来指挥和使用系统资源。","type":"choice","options":{"A":"单击鼠标","C":"系统调用","B":"键盘命令","D":"图形用户界面"},"answer":"C"},{"id":"learncoder_162_22492","stem":"在操作系统中,程序接口只能由用户在(\t)中使用。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"程序接口只能提供给专业程序员在程序设计中使用,虽然对用户的计算机水平要求 较高,但是它可以提供较高的执行效率。","type":"choice","options":{"A":"程序中调用","C":"语音命令","B":"键盘操作","D":"图形方式使用"},"answer":"A"},{"id":"learncoder_162_22491","stem":"操作系统提供的各类接口的主要作用是(\t)。计算机的资源","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"计算机作为人类的朋友,为人类的生产和生活等各个方面提供了很大的便利•,各种 不同类别的接口所提供的方便性以及效率各不相同,为满足不同用户的需要提供了包括图形接 口、系统调用、命令接口等接口。\t","type":"choice","options":{"C":"管理文件","B":"提供操作命令","D":"为用户提供使用计算机的接口,方便用户管理","A":"管理设备"},"answer":"D"},{"id":"learncoder_162_22494","stem":"在用户程序中要将一个字符送到显示器上显示,使用操作系统提供的(\t)接口。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"系统调用用户程序不能直接使用和指挥计算机系统资源,只有通过系统调用等方式 由操作系统来指挥和使用系统资源。","type":"choice","options":{"D":"子程序","A":"系统调用","C":"原语","B":"函数"},"answer":"A"},{"id":"learncoder_162_22493","stem":"系统调用是操作系统提供给用户的(\t)接口。","key_points":"知识点.练习.专业课练习.操作系统.操作系统接口","analysis":"系统调用只能提供给专业程序员在程序设计中使用,虽然对用户的计算机水平要求 较高,但是程序员可以通过系统调用使用系统资源和设备同时还可以获得较高的执行效率。","type":"choice","options":{"A":"程序类操作","C":"图形方式的操作","D":"操作系统程序","B":"命令方式操作"},"answer":"A"},{"id":"learncoder_155_22008","stem":"试说明DMA的工作流程。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"以从磁盘读入数据为例来说明DMA方式的工作流程:当CPU要从磁盘读入一数据块时,便 向磁盘控制器发送一条读命令,该命令被送入DMA控制器的命令寄存器CR中。同时,还需发 送本次要将数据读入的内存起始目标地址,该地址被送入DMA控制器的内存地址寄存器MAR 中;本次要读的字(节)数则送至DMA控制器的数据计数器DC中。另外,还需将磁盘中数据读 取的源地址直接送到DMA控制器的I/O控制逻辑上。然后,启动DMA控制器进行数据传送。 此后,CPU便可去处理其他任务,而整个的数据传送便由DMA控制器负责控制。当DMA控制 器已从磁盘中读入一个字(节)的数据,并送入DMA控制器的数据寄存器DR后,再挪用一个存 储器周期,将该字(节)传送到MAR所指示的内存单元中。接着,便对MAR内容加1和将DC内 容减1。若DC内容减1后不为0,表示传送未完,便准备再传送下一个字(节),否则,由DMA控 制器发出中断请求。"},{"id":"learncoder_155_22011","stem":"试说明收容输入工作缓冲区和提取输出工作缓冲区的工作过程。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"(1)收容输入工作缓冲区的工作情况为:在输入进程需要输入数据时,调用GetBuf (Empty Queue 程,从EmptyQueue队列的队首摘下一个空缓冲区,把它作为收容输入工作缓冲 区Hino然后,把数据输入其中,装满后再调用PutBuf(InputQueue,Hin)过程,将该缓冲区挂在输 入队列InputQueue的队尾。(2)提取输出工作缓冲区的工作情况为:当要输出数据时,调用GetBuf(OutputQueue)过程, 从输出队列的队首取得一装满输出数据的缓冲区作为提取输出的工作缓冲区Sout0在数据提取 完后,.再调用PutBuf(EmptyQueue,Sout)程,将该缓冲区挂到空缓冲队列EmptyQueue的队尾。综合应用题"},{"id":"learncoder_155_22010","stem":"计算机系统中,断点、恢复点与PC寄存器之间的关系是什么?特殊的中断处理程序不一定从恢复点位置开始执行,举例说明为什么?","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"一般情况下,断点应为中断的那一瞬间PC的内容减去前一条指令所占单元长度,即中断发 出时正在执行的那一条指令地址。中断时PC所指的地址(即断点的逻辑后续指令)称为恢复 点。因为原来被中断的用户程序在此次中断处理过程中可能由于某些与其相关的事件不具备当 前继续运行的条件,可能被降低了运行的优先权,也可能由于此次中断的处理使得其他程序获得 了比其更高的优先权。为了权衡系统内各道程序的运行机会,在此时有必要进行一次调度选择。"},{"id":"learncoder_155_22007","stem":"试分析说明因通道不足而产生的瓶颈问题如何解决?","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"\t解决因通道不足而产生的瓶颈问题的最有效方法是增加设备到主机间的通路而不是增加通 道。换言之,就是把一个设备连接到多个控制器上,而一个控制器又连接到多个通道上。这种多 通路方式不仅可以解决该瓶颈问题,而且能够提高系统的可靠性,也即不会因为个别通道或控制 器的故障而使设备与存储器之间无法建立通路进彳亍数据传输。"},{"id":"learncoder_155_22012","stem":"假设计算机系统采用CSCAN(循环扫描)磁盘调度策略,使用2 KB的内存空间记录 16384个磁盘的空闲状态。(1)\t请说明在上述条件如何进行磁盘块空闲状态的管理。(2)\t设某单面磁盘的旋转速度为6 000 rpm,每个磁道有100个扇区,相临磁道间的平均移 动的时间为1 ms。若在某时刻,磁头位于100号磁道处,并沿着磁道号增大的方向移动(如下图所示),磁道号 的请求队列为50,90,30,120,对请求队列中的每个磁道需读取1个随机分布的扇区,.则读完这 个扇区点共需要多少时间?需要给出计算过程。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第18章/image1.png'/>","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"(1)2KB = 2x1 024x8 bit=16 384 bito因此,可以使用位图法进行磁盘块空闲状态管理,每 1 bit表示一个磁盘块是否空闲。(2)每分钟6 000转,转一圈的时间为0.01 s,通过r个扇区的时间为0.000 1 so根据CSCAN算法,被访问的磁道号顺序为100 —>120f 30—>50t 90,因此,寻道用去的总 时间为:(20+90+20+40) x 1 ms =170 mso总共要随机读取四个扇区,用去的时间为:(0.01x0.5+0/0001) x4 = 0.0204 s = 20.4 ms 所以,读完这个扇区点共需要170 +20.4 =192.4 mso"},{"id":"learncoder_155_22009","stem":"说明为什么在单缓冲情况下,系统对一块数据的处理时间为而在双缓冲 If况下,系统对一块数据的处理时间为max(C,T)?","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"在单缓冲工作模式下,当要从块设备输入时,先从磁盘把一块数据输入到缓冲区,耗时为T; 然后由操作系统将缓冲区数据传送给用户区,耗时为M;接下来便由CPU对这一块数据进行计 算,耗时为C。在单缓冲情况下,磁盘把数据输入到缓冲区的操作和CPU对数据的计算过程可 以并行展开,所以系统对每一整块数据的处理时间为max((C,T))+M。在双缓冲对换方式的情况下,写入者花费时间T将数据写满一个缓冲区后再写另一个缓冲 区;读出者花费时间M将一个缓冲区数据送到用户区后再传送另一个缓冲区数据,运算者读出 用户区进行处理。由于将数据从缓冲区传送到用户区操作必须与读用户区数据进行处理串行进 行,而且它们又可以与从外存传送数据填满缓冲区的操作并行。因此耗时大约为max(C+M,T)考虑到M是内存中数据块的“搬家”耗时,非常短暂可以省略,因此近似地认为是:max(C, T)。"},{"id":"learncoder_155_22004","stem":"用户可以通过()两种方式来使用计算机。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"现代操作系统为用户提供了多种使用计算机的接口,其中系统调用和控制台命令方 式是主要的提供给用户的接口方式。因而选择B。填空题","type":"choice","options":{"D":"设备管理方式和系统调用方式","B":"命令方式和系统调用方式","A":"命令方式和函数方式","C":"命令方式和文件管理方式"},"answer":"B"},{"id":"learncoder_155_22006","stem":"分别对字节多路通道、数据选择通道和数组多路通道进行解释。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"11. 无","type":"short_answer","answer":"(1)字节多路通道含有许多非分配型子通道,分别连接在低、中速I/O设备上,子通道按时 间片轮转方式共享主通道,按字节方式进行数据传送。具体而言,当第一个子通道控制其I/O设 备完成一个字节的交换后,便立即腾出字节多路通道(主通道),让给第二个子通道使用;当第二 个子通道也交换完一个字节后,又依样把主通道让给第三个子通道使用,以此类推。转轮一周 后,重又返回由第一个子通道去使用主通道。(2)数组选择通道只含有一个分配型子通道,一段时间内只能执行一道通道程序、控制一台 设备按数组方式进行数据传送。通道被某台设备占用后,便一直处于独占状态,直至设备数据传 输完毕释放该通道,故而通道利用率较低,主要用于连接多台高速设备。(3)数组多路通道是将数组选择通道传输速率高和字节多路通道能使各子通道分时并行操 作的优点相结合而形成的一种新通道。其含有多个非分配型子通道分别连接在高、中速I/O设 备上,子通道按时间片轮转方式共享主通道,按数组方式进行数据传送,因而既具有很高的数据 传输速率,又能获得令人满意的通道利用率。"},{"id":"learncoder_155_22003","stem":"使用SPOOLing系统的目的是为了提高(\t)的使用效率。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"SPOOLing技术是低速输入/输出设备与主机交换的一种技术,通常也称为“假脱机 真联机”,其核心思想是以联机的方式得到脱机的效果。低速设备经通道和设在主机内存的缓 冲存储器与高速设备相联,该高速设备通常是辅存。为了存放从低速设备上输入的信息,或者存 放将要输出到低速设备上的信息(来自内存),在辅存分别开辟一固定区域,叫''输出井”(对输 出),或者“输入井”(对输入)。简单来说,就是在内存中形成缓冲区,在高级设备形成输出井和 输入井,传递时,从低速设备传入缓冲区,再传到高速设备的输入井,再从高速设备的输岀井,传 到缓冲区,再传到低速设备。\tSPOOLing技术也是一种用一类物理设备模拟另一类物理设备的技术,它使独占使用的设备 变成多台虚拟设备的*种技术,其目的是为了提高I/O设备的利用率及使独占设备共享化。","type":"choice","options":{"D":"I/O设备","B":"内存","C":"CPU","A":"操作系统"},"answer":"D"},{"id":"learncoder_155_22002","stem":"当中断发生后,进入中断处理的程序属于(\t)。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"在现代操作系统设计中,为了保护系统资源被安全、公平、合理地使用,将可执行命 令分为内核与用户命令,中断处理程序属于操作系统内核,如此可以确保外设等各类资源的合理 使用,也能确保系统的安全。","type":"choice","options":{"C":"OS程序","D":"单独的程序,既不是用户程序,也不是OS程序","A":"用户程序","B":"可能是用户程序,也可能是OS程序"},"answer":"C"},{"id":"learncoder_155_21998","stem":"程序员利用系统调用打开I/O设备时,通常使用的设备标志是()。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"在操作系统的管理下,用户可以通过为系统调用提供逻辑设备名来指代想要使用的 设备,而逻辑设备名与物理设备之间的一一对应关系,由操作系统来提供支持。","type":"choice","options":{"C":"主设备号","B":"物理设备名","A":"逻辑设备名","D":"从设备号"},"answer":"A"},{"id":"learncoder_155_22001","stem":"用户及其应用程序和应用系统是通过()提供的支持和服务来使用系统资源,完成其操作的。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"在本题的四个选择中,只有系统调用能够通过执行动作来完成应用程序期待的任 务;而单击鼠标、键盘命令和图形界面都不是正确的答案。","type":"choice","options":{"A":"单击鼠标","C":"系统调用","B":"键盘命令","D":"图形用户界面"},"answer":"C"},{"id":"learncoder_155_22000","stem":"为解决计算机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区,主机将 宴输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结 构应该是()。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"操作系统在组织缓冲区的时候通常采用队列的方式,这种方式比较符合先来先服务 的原则,而堆栈的操作方式是后进先出的顺序,不能很好地满足公平性原则。","type":"choice","options":{"A":"栈","D":"图","B":"队列","C":"树"},"answer":"B"},{"id":"learncoder_155_21999","stem":"在用户程序中要将一个字符送到显示器上显示,使用操作系统提供的()接口。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"用户在使用系统资源的时候,必须通过系统调用经操作系统完成才能实现对系统资 源操作,用户程序本身没有操作系统资源的权限。\t","type":"choice","options":{"A":"系统调用","D":"子程序","C":"原语","B":"函数"},"answer":"A"},{"id":"learncoder_155_21997","stem":"本地用户通过键盘登录系统时,首先获得键盘输入信息的程序是()。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"在操作系统的管理下,每当有按键操作时,系统首先产生一个中断告知操作系统,而 中断处理程序在识别出中断原因之后启动字符输入处理程序。","type":"choice","options":{"B":"中断处理程序","C":"系统调用程序","D":"用户登录程序","A":"命令解释程序"},"answer":"B"},{"id":"learncoder_155_21996","stem":"操作系统中设备管理部分的主要作用是()。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"操作系统设备管理的功能主要是提供对设备的分配、管理与控制等功能,以最大限 度提高设备资源的利用率,降低.CPU对于I/O操作的开销。","type":"choice","options":{"C":"管理文件","A":"管理设备","D":"为用户提供使用计算机的接口,管理计算机的资源","B":"提供操作命令"},"answer":"A"},{"id":"learncoder_155_21420","stem":"一个串行线能以最大50000B/s的速度接收输入。数据平均输入速率是20000B/s。如果用轮询来处理输入,不管是否有输入数据,轮询例程都需要3us来执行。若在下一个字节到达时,控制器中仍有未取走的字节,这些未取走的字节将会丢失。那么最大的安全轮询时间间隔是多少?","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第5章)/image9.png'/>"},{"id":"learncoder_155_21417","stem":"I/O控制方式可用哪几种方式实现?各有什么优缺点?","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"I/O控制方式的实现有4种方式,即程序I/O方式、中断控制方式、DMA控制方式和通道控制方式。程序I/O方式:其优点是控制简单,不需要很多硬件支持。但CPU和外设之间只能串行工作,并且CPU的大部分时间处于循环测试状态,这使得CPU的利用率大大降低;CPU在一段时间内只能和一台外设交换数据信息,从而不能实现设备之间的并行工作;由于程序I/O方式依靠测试设备状态标志来控制数据传送,因此无法发现和处理因设备或其他硬件所产生的错误。所以,程序I/O方式只适用于执行速度较慢且外设少的系统。中断控制方式:其优点是能实现CPU和设备、设备与设备间的并行操作,CPU的利用率比程序I/O方式有了很大提高。但I/O控制器的数据缓冲寄存器通常较小,且数据缓冲寄存器装满数据后将会发出中断,因此一次数据传送过程会中断较多次,消耗了大量CPU时间;若系统中配置的外设数目较多,且都以中断方式进行控制,则将消耗大量CPU时间或因为CPU来不及处理而造成数据丢失。DMA控制方式:与中断控制方式相比,DMA控制方式的优点是在一批数据传送完成后中断CPU,从而大大减少了CPU进行中断处理的次数,并且DMA控制方式下的数据传送是在DMA控制器控制下完成的,在数据传输过程中无须CPU干预。但DMA方式仍有一定的局限,如对外设的管理和某些操作仍由CPU控制,且多个DMA控制器的使用也不经济。通道控制方式:通道是一个专管输入输出工作的处理器。在通道控制方式下,CPU只需发出L/O指令,通道就能完成相应的IVO操作,并在I/O操作结柬时向CPU发出中断信号。由此可见,CPU仅在L/O操作开始和结柬时花极短的时间处理与L/O操作有关的事宜,其余时间都与通道并行工作,此外,一个通道还能控制多台设备。但是通道价格较高,从经济的角度出发不宜过多使用。"},{"id":"learncoder_155_21418","stem":"叙述在中断控制方式中输入请求I/O处理的详细过程.","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"在使用中断控制方式的系统中,执行输入请求的处理过程如下1)应用进程请求读操作2)设备启动程序(设备驱动程序的高层部分)查询设备控制器的状态寄存器,确定设备是否空闲。若设备忙,则设备启动程序等待,直到其变为空闲为止3)设备启动程序把输入命令存入设备控制器的命令寄存器中,从而启动设备4)设备启动程序将相应信息写入到设备控制表(DCT)的设备对应表项中,如最初调用的返回地址以及L/O操作的一些特定参数等。然后CPU就可以分配给其他进程使用了,因此设备管理器调用进程管理器的调度程序执行厂原进程的执行被暂停5)经过一段时间后,设备完成了I/O操作,设备控制器发出中断请求,中断CPU上运行的进程,从而引起CPU运行中断处理程序6)中断处理程序确定是哪个设备引起的中断,然后转移到该设备对应的设备处理程序(设备驱动程序的低层部分)执行7)设备处理程序重新从设备控制表(DCT)找到等待L/O操作的状态信息8)设备处理程序复制设备控制器的数据寄存器的内容到用户进程的内存区9)设备处理程序返回给应用进程控制权,从而继续运行。在以上处理I/O操作的过程中,中断处理程序和设备处理程序两者一起完成对中断请求的处理。但两者工作方式不同,前者必须关中断运行或以高优先级方式运行,后者可以开中断运行或以低优先级方式运行"},{"id":"learncoder_155_21415","stem":"考虑56kbit/s调制解调器的性能,驱动程序输出一个字符后就阻塞,当一个字符打印完毕后,产生一个中断通知阻塞的驱动程序,输出下一个字符,然后再阻塞。如果发消息,输出一个字符和阻塞的时间总和为0.1ms,那么由于处理调制解调器而占用的CPU时间比率是多少?假设每个字符有一个开始位和一个结柬位,共占10位。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"因为一个字符占10位,因此在56kbit/s的速率下,每1s传送:56000/10=5600个字符,即产生5600次中断。每次中断需0.1皿S,故处理调制解调器占用CPU时间总共为5600×0.1ms=560ms,占560ms/1s=56%CPU时间"},{"id":"learncoder_155_21419","stem":"某计算机系统中,时钟中断处理程序每次执行时间为2ms(包括进程切换开销),若时钟中断频率为60Hz,试问CPU用于时钟中断处理的时间比率为多少?","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"时钟中断频率为60Hz,故时钟周期为(1/60)s,每个时钟周期中用于中断处理的时间为2ms,故比率为0.002/(1/60)=12%"},{"id":"learncoder_155_21416","stem":"为什么要引入设备独立性?如何实现设备独立性?","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"引入设备独立性可使应用程序独立于具体的物理设备。此时,用户用逻辑设备名来申请使用某类物理设备,当系统中有多台该类型的设备时,系统可以将其中的一台分配给请求进程,而不必局限于某一台指定的设备,这样可以显著改善资源的利用率及可适应性。独立性还可以使用户程序独立于设备的类型,如进行输出时,既可用显示终端,也可以用打印机。有了这种适应性,就可以很方便地进行输入/输出重定向。为了实现设备独立性,必须在设备驱动程序之上设置一层设备独立性软件,用来执行所有″I/O设备的公用操作,并向用户层软件提供统一接口。关键是系统中必须设置一张逻辑设备表(LUT)用来进行逻辑设备到物理设备的映射,其中每个表目中包含逻辑设备名、物理设备名和设备驱动程序入口地址;当应用程序用逻辑设备名请求分配″I/O设备时,系统必须为它分配相应的物理设备,并在LUT中建立一个表目,以后进程利用该逻辑设备名请求I/O操作时,便可从LUT中得到物理设备名和驱动程序入口地址."},{"id":"learncoder_155_21410","stem":"下列描述了SPOOLing技术的原理,请根据上下文分别写出I-v对应的术语.I在一段时间内只能由一个用户使用,使许多进程因等待而阻塞,影响了整个系统的效率。另一方面,分配到I的进程,在整个运行期间并非持续使用设备,利用率较低ospooLing技术通过共享设备来虚拟I,将I改造成Ⅱ,从而提高设备利用率和系统的效率。采用SPOOLing技术,可以预先从低速的输入型I上将程序运行需要的数据传送到Ⅲ上的Ⅳ中,当用户程序运行时,可以直接从Ⅳ中将数据读入V.由于Ⅲ是Ⅱ,多个用户进程可以共享使用Ⅳ。这样,就将输入型I改造成了可共享使用的虚拟设备。改造输出型I的方法与此类似","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"I.独占设备Ⅱ.共享设备Ⅲ.磁盘Ⅳ.输入井Iv.内存"},{"id":"learncoder_155_21414","stem":"在某系统中,从磁盘将一块数据输入到缓冲区需要的时间为T,CPU对一块数据进行处理的时间为C,将缓冲区的数据传送到用户区所需的时间为M,那么在单缓冲和双缓冲情况下,系统处理大量数据时,一块数据的处理时间分别是多少?","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"单缓冲工作示意图和时序图如图5-16所示。从图中可以看出:数据由″I/O控制器到缓冲区和数据由缓冲区到工作区必须串行操作。同样,数据从缓冲区到工作区和CPU从工作区中取出数据进行处理也需串行进行。但由于在顺序访问时可采用预先读的方式,即CPU在处理一块数据(从工作区取数据)的同时可从磁盘输入下一块数据,所以系统对一块数据的处理时间为max(T;C)+M<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第5章)/image8.png'/>"},{"id":"learncoder_155_21411","stem":"什么是DMA方式?它与中断方式的主要区别是什么?","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"DMA是DirectMemoryAccess的缩写,也就是直接存储器访问oDMA是用DMA控制器来控制一个数据块的传输,而CPU只需在一个数据块传输的开始阶段设置好传输所需的控制信息并在传输的结柬阶段做进一步处理即可的传输控制方式。其基本思想是在I/O设备和内存间开启一个可以直接传输数据的通路。中断驱动″o控制方式是每个数据传输后即发出中断,而DMA方式是在一批数据传输完毕后才中断;中断驱动I/O控制方式的传输是由CPU控制的,而DMA方式中只有数据块传输的开始和结柬阶段在CPU控制下,在传输过程中都是由DMA控制器控制的。所以DMA方式相比于中断方式,通过硬件的增加大大减少了中断的次数。"},{"id":"learncoder_155_21412","stem":"一个SPOOLing系统由输入进程I、用户进程P、输出进程O、输入缓冲区和输出缓冲区组成。进程1通过输入缓冲区为进程P输入数据,进程P的处理结果通过输出缓冲区交给进程O输出。进程间数据交换以等长度的数据块为单位。这些数据块均存储在同一磁盘上。因此,SPOOLing系统的数据块通信原语保证始终满足i+o<=max其中,max为磁盘容量(以该数据块为单位),i为磁盘上输入数据块总数,o为磁盘上输出数据块总数。该SPOOLing系统运行时:只要有输入数据,进程I终究会将它放入输入缓冲区;只要输入缓冲区有数据块,进程P终究会读入、处理,并产生结果数据,写到输出缓冲区;只要输出缓冲区有数据块,进程o终究会输出它。请说明该SPOOLing系统在什么情况下死锁。请说明如何修正约柬条件“i+o<=max”来避免死锁,同时仍允许输入数据块和输出数据块均存储在同一个磁盘上.","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"这是一个综合性很强的题目,题目中出现了缓冲区、SPOOLing技术、进程共享资源(共享同一个缓冲区)、死锁等概念。而究其本质,其实本题考查的是死锁现象的判断,就是要考生找出该系统的一种死锁的可能。考生可以先画出该系统的大致结构草图,如图5-15所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第5章)/image7.png'/>"},{"id":"learncoder_155_21413","stem":"为什么要设置内存I/O缓冲区?通常有哪几类缓冲区?","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"设置内存I/O缓冲区的主要原因如下1)缓和CPU和I/O设备间速度不匹配的矛盾。一般情况下,程序的运行过程是时而进行计算,时而进行I/O以输出为例,若没有缓冲区,则程序在输出时,必然由于打印机速度跟不上而使CPU等待;然而在计算阶段,打印机又因无输入数据而无事可做。如果设置一个缓冲区,程序可以将待输出的数据先输出到缓冲区中,然后继续执行;而打印机可以从缓冲区取出数据慢慢打印2)减少中断CPU的次数,例如,假定设备只用一位二进制位接收从系统外传来的数据,则设备每收到一位二进制数就要中断CPU一次,若数据通信速率为9.6kbids,则中断CPU的频率也为9.6虹立,若设置一个具有8位的缓冲寄存器,则可使CPU被中断的次数降为前者的1/803)提高CPU和I/O设备之间的并行性。由于在CPU和设备之间引入了缓冲区,CPU可以从缓冲区中读取或向缓冲区写入信息;相应地,设备也可以向缓冲区写入或从缓冲区读取信息。在CPU工作的同时,设备也能进行输入/输出操作,这样CPU和I/O设备可以并行工作。通常有4类缓冲区:单缓冲、双缓冲、循环缓冲和缓冲池。"},{"id":"learncoder_155_21404","stem":"(2017年统考真题)系统将数据从磁盘读到内存的过程包括以下操作:①DMA控制器发出中断请求②初始化DMA控制器并启动磁盘③从磁盘传输一块数据到内存缓冲区④执行“DMA结束”中断服务程序正确的执行顺序是:","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"在开始DMA传输时,主机向内存写入DMA命令块,向DMA控制器写入该命令块的地址,启动I/O设备。然后,CPU继续其他工作,DMA控制器则继续下去直接操作内存总线,将地址放到总线上开始传输。当整个传输完成后,DMA控制器中断CPU。因此执行顺序是②一③一①一④,故选B","type":"choice","options":{"D":"①->②->④->③","C":"②->①->③->④","A":"③->①->②->④","B":"②->③->①->④"},"answer":"B"},{"id":"learncoder_155_21408","stem":"在一个32位100MHz的单总线计算机系统中(每10ns一个时钟周期),磁盘控制器使用DMA以40MB/s的速率从存储器中读出数据或者向存储器写入数据。假设CPU在没有被周期挪用的情况下,在每个周期中读取并执行一个32位指令。若这样做,磁盘控制器使指令的执行速度降低了多少?","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"首先由题目得知DMA的传输速率是40MB/s,即4B/100ns,也就是平均每100ns传输32bit的数据就能达到DMA的传输要求。由于系统总线被CPU和DMA共用,因此要在DMA传输数据时暂停CPU对总线的使用。为了得到DMA使用总线的频率,需要知道总线的传输速度。由题中条件可知,CPU在对总线完全占用的情况下,每个时钟周期(10ns)可以传输32bit的指令,因此总线的速度是32bi″10nso而DMA.的要求是100ns传输32bit,也就是说,平均10个时钟周期内,只需挪用一个周期用来传输数据就能达到DMA的传输要求。由此可以得到,DMA挪用周期的频率是每10个周期挪用一个,因此磁盘控制器使指令的执行速度降低了10%"},{"id":"learncoder_155_21405","stem":"(2015年中科院真题)虚拟设备是通过()技术实现的。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"SPOOLing技术被称为假脱机输入/输出操作,是操作系统中采用的一项将独占设备改造成共享设备的技术。使用SPOOLing技术可以实现虚拟设备","type":"choice","options":{"D":"虚拟存储","C":"SPOOLing","B":"通道","A":"并行"},"answer":"C"},{"id":"learncoder_155_21409","stem":"以下分别是对中断、中断处理、中断响应、关中断、开中断、中断屏蔽、陷入、软中断的解释,请在解释文字前的括号中填入正确的概念。()中断请求能否参加判优,需根据屏蔽字的状态决定,若某屏蔽为1,其对应的请求无效,不可参加判优。()当允许中断标志为1时,表明现行程序的优先级低于所有中断请求的优先级,因此一旦出现中断请求,CPU便能响应。()系统调用引发的事件。()对中断请求的整个处理过程是由硬件和软件结合起来而形成的一套中断机构实施的。发生中断时,CPU暂停执行当前的程序而转去处理中断。该过程由硬件对中断请求做出反应。()CPU对系统发生的某个时间做出的一种反应,即CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点,继续执行被″打断″的程序。()利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。()大致分为4个阶段:保存被中断程序的现场,.分析中断原因,转入相应处理程序进行处理,恢复被中断程序的现场。()为保证在中断周期中,指令操作的执行不受外部干扰,将允许中断标志位清0,即表明现行程序的优先级比所有请求的优先级都高,任何请求都不响应","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"空","type":"short_answer","answer":"中断屏蔽、开中断、陷入、中断响应、中断、软中断、中断处理、关中断"},{"id":"learncoder_155_21401","stem":"(2013年统考真题)设系统缓冲区和用户工作区均采用单缓冲,从外设读入1个数据块到系统缓冲区的时间为100,从系统缓冲区读入1个数据块到用户工作区的时间为5,对用户工作区中的1个数据块进行分析的时间为90(见图5-ll)o进程从外设读入并分析2个数据块的最短时间是()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第5章)/image5.png'/>","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"数据块1从外设到用户工作区的总时间为105,在这段时间中,系统缓冲区均被数据块1占据,因此对数据块2无法进行操作。但在数据块1在用户工作区进行分析处理时(时间90),系统缓冲区已空闲下来,可以让数据块2从外设读入到系统缓冲区,相当于数据块2的整个处理时间比串行执行时节省了90的时间。又1个数据串行执行时,所需时间为100+5+90=195,第二块的处理时间为195-90=105,合计195+105=300,即进程从外设读入并分析2个数据块的最短时间为300,答案为C","type":"choice","options":{"D":"390","B":"295","A":"200","C":"300"},"answer":"C"},{"id":"learncoder_155_21402","stem":"(2014年统考真题)下列关于管道(Pipe)通信的叙述中,正确的是()。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"管道实际上是一种圃定大小的缓冲区,管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。它类似于通信中半双工信道的进程通信机制,一个管道可以实现双向的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。管道的容量大小通常为内存上的一页,它的大小并不是受磁盘容量大小的限制。当管道满时,进程写管道会被阻塞,而当管道空时,进程读管道会被阻塞,因此选C","type":"choice","options":{"A":"一个管道可实现双向数据传输","D":"一个管道只能有一个读进程或一个写进程对其操作","B":"管道的容量仅受磁盘容量大小限制","C":"进程对管道进行读操作和写操作都可能被阻塞"},"answer":"C"},{"id":"learncoder_155_21403","stem":"(2016年统考真题)下列关于SPOOLing技术的叙述中,错误的是()。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"SPOOLing是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上;或者相反oSPOOLing的意思是外部设备同时联机操作,又称为假脱机输入/输出操作,是操作系统中采用的一项将独占设备改造成共享设备的技术。高速磁盘即外存,A正确。SPOOLing技术需要输入/输出操作,单道批处理系统无法满足,B正确ospooLing技术实现了将独占设备改造成共享设备的技术,C正确。设备与输入/输出井之间数据的传送是由系统实现的,D错误","type":"choice","options":{"A":"要外存的支持","C":"可以让多个作业共享一台独占设备","B":"需要多道程序设计技术的支持","D":"由用户作业控制设备与输入/输出井之间的数据传送"},"answer":"D"},{"id":"learncoder_155_21398","stem":"(2011年统考真题)某文件占10个磁盘块,现要把该文件磁盘块逐个读入主存缓冲区,并送用户区进行分析。假设一个缓冲区与一个磁盘块大小相同,把一个磁盘块读入缓冲区的时间为100盟,将缓冲区的数据传送到用户区的时间是50|LLS,CPU对一块数据进行分析的时间为50gso在单缓冲区和双缓冲区结构下,读入并分析完该文件的时间分别是().","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"图5-14a为单缓冲,图5-14b为双缓冲。每个标号的格子长度为100,没标号的格子长<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第5章)/image6.png'/>","type":"choice","options":{"C":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第5章)/image3.png'/>","B":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第5章)/image2.png'/>","D":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第5章)/image4.png'/>","A":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第5章)/image1.png'/>"},"answer":"B"},{"id":"learncoder_155_21399","stem":"(2012年统考真题)操作系统的I/O子系统通常由4个层次组成,每一层明确定义了与邻近层次的接口,其合理的层次组织排列顺序是()。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"本题从选项看应该是选择从用户角度往下看,因此看到的依次为用户级″I/O软件(应用软件)、设备无关软件(逻辑设备与物理设备对应)、设备驱动程序(操作设备)和中断处理程序(操作系统内核)","type":"choice","options":{"C":"用户级I/O软件、设备驱动程序、设备无关软件、中断处理程序","A":"用户级I/O软件、设备无关软件、设备驱动程序、中断处理程序","B":"用户级I/O软件、设备无关软件、中断处理程序、设备驱动程序","D":"用户级I/O软件、中断处理程序、设备无关软件、设备驱动程序"},"answer":"A"},{"id":"learncoder_155_21396","stem":"(2009年统考真题)程序员利用系统调用打开I/O设备时,通常使用的设备标识是()","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"在操作系统的设备管理中,用户程序不直接使用物理设备名(或设备的物理地址),而使用逻辑设备名三系统在实际执行时,将逻辑设备名转换为某个具体的物理设备名,实施″o操作。逻辑设备是实际物理设备属性的抽象,它并不限于某个具体设备.","type":"choice","options":{"C":"主设备号","A":"逻辑设备名","B":"物理设备名","D":"从设备号"},"answer":"A"},{"id":"learncoder_155_21400","stem":"(2013年统考真题)用户程序发出磁盘I/O请求后,系统的处理流程是:用户程序一系统调用处理程序一设备驱动程序〜中断处理程序。其中,计算数据所在磁盘的柱面号、磁头号、扇区号的程序是()。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"设备驱动程序的处理过程:①将拍象要求转换为具体要求;②检查″I/O请求的合法性;③读出和检查设备的状态;④传送必要参数;⑤工作方式的设置;⑥启动I/O设备。将磁盘块号转换为磁盘的盘面、磁道号及扇区号,属于①,因此是设备驱动程序的功能","type":"choice","options":{"C":"设备驱动程序","A":"用户程序","B":"系统调用处理程序","D":"中断处理程序"},"answer":"C"},{"id":"learncoder_155_21397","stem":"(2011年统考真题)用户程序发出磁盘I/O请求后,系统的正确处理流程是().","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"首先用户程序(目态)是不能直接调用设备驱动程序的,因为有关对I/O设备使用的指令是特权指令,只能通过系统调用,把进程的状态从用户态变为核心态,故C、D选项错误。I/O软件一般从上到下分为图5-13所示的4个层次:用户层、设备独立性软件层、设备驱动程序及中断处理程序。设备独立性软件也就是系统调用的处理程序。因此正确处理流程为B","type":"choice","options":{"B":"用户程序->系统调用处理程序->设备驱动程序->中断处理程序","C":"用户程序->设备驱动程序->系统调用处理程序->中断处理程序","A":"用户程序->系统调用处理程序->中断处理程序->设备驱动程序","D":"用户程序->设备驱动程序->中断处理程序->系统调用处理程序"},"answer":"B"},{"id":"learncoder_155_21394","stem":"下列关于设备驱动程序的叙述中,正确的是().I.与设备相关的中断处理过程是由设备驱动程序完成的II.由于驱动程序与I/O设备(硬件)紧密相关,故必须全部用汇编语言书写III.磁盘的调度程序是在设备驱动程序中运行的IV.一个计算机系统配置了2台同类绘图机和3台同类打印机,为了正确驱动这些设备,系统应该提供5个设备驱动程序","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"I.正确,设备驱动程序的低层部分在发生中断时调用,以进行中断处理。Ⅱ.错误,由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言书写,其他部分则可以用高级语言(如C/C++)来书写。Ⅲ.正确。Ⅳ.错误,因为绘图机和打印机属于两种不同类型的设备,系统只要按设备类型配置设备驱动程序即可,即应提供2个设备驱动程序。综上所述,本题选A选项。","type":"choice","options":{"A":"仅I、II","C":"仅I、II、IV","B":"仅II、III","D":"I、II、III、IV"},"answer":"A"},{"id":"learncoder_155_21395","stem":"()是操作系统中采用的以空间换取时间的技术。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"解析:SPOOLing技术是操作系统中采用的以空间换取时间的技术;虚拟存储技术和覆盖与交换技术是为了扩充内存容量;通道技术是为了提高设备速度。虚拟存储技术和覆盖与交换技术都属于以时间换空间的技术。通道技术增加了硬件,不属于这两者中的任何一种。","type":"choice","options":{"B":"虚拟存储技术","C":"覆盖与交换技术","A":"SPOOLing技术","D":"通道技术"},"answer":"A"},{"id":"learncoder_155_21391","stem":"提高单机资源利用率的关键技术是().","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"在单机系统中,最关键的资源就是处理器资源,因此最大化提高处理器利用率就是最大化提高系统效率。多道程序设计技术是提高处理器利用率的关键技术,其他均为设备和内存的相关技术","type":"choice","options":{"D":"多道程序设计技术","A":"SPOOLing技术","B":"虚拟技术","C":"交换技术"},"answer":"D"},{"id":"learncoder_155_21388","stem":"通道又称UO处理器,用于实现()之间的信息传输.","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"在设置了通道后,CPU只需向通道发送一条I/O指令。通道在收到该指令后,便从内存中取出本次要执行的通道程序,然后执行该通道程序,仅当通道完成规定的I/O任务后,才向CPU发出中断信号。因此,通道用于完成内存与外设的信息传输.","type":"choice","options":{"D":"CPU与外存","B":"CPU与外设","C":"内存与外存","A":"内存与外设"},"answer":"A"},{"id":"learncoder_155_21392","stem":"在SPOOLing系统中,用户进程实际分配到的是(","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"通过SPOOLing技术可将一台物理设备转换为多台虚拟设备,允许多个用户共享一台物理设备。所以在SPOOLing系统中并不是将物理设备分配给用户进程,而仅仅是虚拟设备","type":"choice","options":{"D":"设备的一部分空间","A":"用户所要求的外设","B":"内存区,即虚拟设备","C":"设备的一部分存储区"},"answer":"B"},{"id":"learncoder_155_21389","stem":"缓存技术的缓冲池在()中.","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"缓冲的实现方法有两种:一种是采用硬件缓冲器实现,但由于成本太高,除一些关键部位外,一般情况下不采用硬件缓冲器;另一种实现方法是在内存划出一块存储区,专门用来临时存放输入输出数据,这个区域为缓冲区。根据系统设置的缓冲区个数,可以将缓冲技术分为单缓冲、双缓冲、循环缓冲和缓冲池。因此无论是单缓冲、双缓冲、循环缓冲还是缓冲池,都是在内存中的","type":"choice","options":{"A":"内存","C":"ROM","B":"外存","D":"寄存器"},"answer":"A"},{"id":"learncoder_155_21393","stem":"I/O中断是CPU与通道协调工作的一种手段,所以在()时,便要产生中断。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"CPU启动通道时不管成功与否,通道都要回答CPU;通道在执行通道程序的过程中,CPU与通道并行执行;当通道完成通道程序的执行时,便产生中断向CPU报告。","type":"choice","options":{"A":"CPU执行“启动I/O”指令而被通道拒绝接收","D":"通道在执行通道程序的过程中","B":"通道接受了CPU的启动请求","C":"通道完成了通道程序的执行"},"answer":"C"},{"id":"learncoder_155_21390","stem":"为了使多个进程能有效地同时处理输入和输出,最好使用()结构的缓冲技术.","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"缓冲池是系统共用资源,可供多个进程共享,并且既能用于输入又能用于输出。其他选项并不能很好地支持多个进程使用","type":"choice","options":{"A":"缓冲池","D":"双缓冲","C":"单缓冲","B":"循环缓冲"},"answer":"A"},{"id":"learncoder_155_21387","stem":"CPU输出数据的速度远远高于打印机的打印速度,为解决这一矛盾可采用().","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"为解决设备间传送速率不匹配的问题,通常采用缓冲技术。通道技术能最大地使CPU摆脱外设的速率制约,并行技术能有效地提高CPU与外设的效率,虚拟技术则能提高打印机的利用率。针对本题,最佳答案是缓冲技术","type":"choice","options":{"A":"并行技术","B":"通道技术","C":"缓冲技术","D":"虚拟技术"},"answer":"C"},{"id":"learncoder_155_21385","stem":"CPU输出数据的速度远远高于打印机的速度,为解决这一矛盾,可采用()","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"缓冲技术主要是解决I/O速度跟不上CPU处理速度的矛盾,以提高设备和CPU的并行操作程度.","type":"choice","options":{"A":"并行技术","C":"缓冲技术","D":"虚存技术","B":"通道技术"},"answer":"C"},{"id":"learncoder_155_21382","stem":"采用SPOOLing技术将磁盘的一部分作为公共缓冲区以代替打印机,用户对打印机的操作实际上是对磁盘的存储操作,用以代替打印机的部分是().","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"SPOOLing是操作系统中采用的一种将独占设备改造成共享设备的技术,通过这种技术处理后的设备叫作虚拟设备。代替独占设备的部分是共享设备.","type":"choice","options":{"B":"共享设备","A":"独占设备","C":"虚拟设备","D":"一般物理设备"},"answer":"B"},{"id":"learncoder_155_21379","stem":"I/O交通管制程序的主要功能是管理()的状态信息.","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"对外设的控制常分为设备、控制器和通道3个层次,所以″I/O交通管制程序的主要功能是管理这3个层次的状态信息。其实通过分析选项也可以得到答案,″I/O交通管制程序是不可能管理CPU和存储器的,因此根据排除法也能得到选项A","type":"choice","options":{"C":"CPU、主存和通道","D":"主存、辅存和通道","A":"设备、控制器和通道","B":"主存、控制器和通道"},"answer":"A"},{"id":"learncoder_155_21386","stem":"下列有关设备独立性的说法中,正确的是()","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"设备独立性是指用户程序独立于具体物理设备的一种特性。其他选项都不是设备独立性的描述oD选项错在设备驱动程序是不可能独立于具体物理设备的,因为驱动程序就是为具体物理设备而专门定制的","type":"choice","options":{"B":"设备独立性是指用户程序独立于具体物理设备的一种特性","D":"设备独立性是指设备驱动程序独立于具体物理设备的一种特性","C":"设备独立性是指能够实现设备共享的一种特性","A":"设备独立性是指I/O设备具有独立执行I/O功能的一种特性"},"answer":"B"},{"id":"learncoder_155_21383","stem":"在采用SPOOLing技术的系统中,用户暂时未能打.印的数据首先会被送到()存储起来。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"采用SPOOLing技术的系统中,用户的打印数据首先由内存经过缓冲区传递至输出井暂存,等输出设备(打印机)空闲时再将输出井中的数据经缓冲区传递到输出设备上。而输出井通常是在磁盘上开辟的一块圃定存储区.","type":"choice","options":{"A":"磁盘固定区域","B":"内存固定区域","D":"打印机","C":"终端"},"answer":"A"},{"id":"learncoder_155_21380","stem":"采用SPOOLing技术后,使得系统资源利用率().","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"采用SPOOLing技术后,可将高速的设备(如磁盘等)虚拟化为多个“高速”的独占设备(如打印机等),因此可以提高系统资源利用率.","type":"choice","options":{"A":"提高了","D":"提高了,但出错的可能性增大了","B":"有时提高,有时降低","C":"降低了"},"answer":"A"},{"id":"learncoder_155_21384","stem":"若I/O所花费的时间比CPU的处理时间短很多,则缓冲区()。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"缓冲区主要是解决因输入输出速度比CPU处理速度慢而造成的数据积压的矛盾,因此,若I/O所花费的时间比CPU处理时间短很多,则没有必要设置缓冲区.","type":"choice","options":{"A":"最有效","B":"几乎无效","C":"均衡","D":"以上都不是"},"answer":"B"},{"id":"learncoder_155_21381","stem":"如果I/O设备与存储设备间的数据交换不经过CPU来完成,则这种数据交换方式是().","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"DMA控制方式是在外设和内存之间开辟直接的数据交换通路,因此选项C正确。程序查询方式和中断方式都需要借助干预,因此选项A、选项B错误。选项D是干扰项,没有这种I/O方式。","type":"choice","options":{"D":"外部总线方式","A":"程序查询方式","B":"中断方式","C":"DMA方式"},"answer":"C"},{"id":"learncoder_155_21378","stem":"下面设备中属于共享设备的是()。","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"打印机很明显是独占设备,因为如果同时被多个进程访问,打印出的文档就会比较混乱;根据磁带机的原理,磁带旋转到所需要的读写位置需要较长时间,若被多个进程同时访问,在定位上花费的时间会远多于读写时间,非常不划算,因此磁带机也是独占设备。因此根据排除法,选择磁盘,而且磁盘是非常典型的共享设备.","type":"choice","options":{"A":"打印机","D":"磁带机和磁盘","C":"磁盘","B":"磁带机"},"answer":"C"},{"id":"learncoder_155_21375","stem":"系统管理设备是通过一些数据结构来进行的,下面的()不属于设备管理数据结构","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"FCB是文件控制块,与设备管理无关。DCT是设备控制表,SDT是系统设备表,COCT是控制器控制表,三者都是设备管理中的重要的数据结构.","type":"choice","options":{"C":"SDT","D":"COCTC","B":"DCT","A":"FCB"},"answer":"A"},{"id":"learncoder_155_21376","stem":"缓冲技术的缓冲池通常设立在()中","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"由于CPU的速度比I/O的速度快很多,因此缓存池通常设立在内存/主存中.","type":"choice","options":{"C":"ROM","B":"外存","A":"主存","D":"寄存器"},"answer":"A"},{"id":"learncoder_155_21377","stem":"在如下几种类型的系统中,()采用忙等待I/O是合适的。a.专门用来控制单I/O设备的系统b.运行一个单任务操作系统的个人计算机c.作为一个负载很大的网络服务器的工作站","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"采用忙等待I/O方式,当CPU等待IVO操作完成时,进程不能继续执行。对于a、b这两种系统而言,执行I/O操作时系统不需要处理其他事务,因此采用忙等待I/O是合适的。","type":"choice","options":{"A":"a","D":"c","C":"b、C","B":"a、b"},"answer":"B"},{"id":"learncoder_155_21374","stem":"下列关于SPOOLing的叙述中,不正确的是()","key_points":"知识点.练习.专业课练习.操作系统.设备管理","analysis":"SPOOLing是操作系统中采用的一种将独占设备改造为共享设备的技术,它有效减少了进程等待读入/读出信息的时间,加快了作业执行的速度。不过,无论有没有通道,SPOOLing系统都可以运行,因此D选项是不对的。","type":"choice","options":{"C":"SPOOLing系统使独占设备变成了共享设备","A":"SPOOLing系统中必须使用独占设备","D":"SPOOLing系统利用了处锂器与通道并行工作的能力","B":"SPOOLing系统加快了作业执行的速度"},"answer":"D"},{"id":"learncoder_154_21835","stem":"批处理系统的主要缺点是( )。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"在批处理系统中,用户将其控制意图通过作业控制语言书写成作业控制说明书,然 后提交给系统,。计算机按作业说明书去控制作业的运行,在此期间,用户没法和系统进行交互式 交流。","type":"choice","options":{"B":"失去了交互性","A":"CPU的利用率不高","C":"不具备并行性","D":"以上都不是"},"answer":"B"},{"id":"learncoder_154_21837","stem":"若中央处理机处于用户态,不可以执行旳指令有(\t)。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"计算机系统中指令系统分为特权指令与非特权指令6特权指令仅能由操作系统使 用,如设置时钟、清内存等为特权指令淇他指令为非特权指令,用户只能使用非特权指令。若中央处理机处于用户态时,仅仅可以执行非特权指令,例如读系统时钟,读用户内存自身 数据都属于非特权指令,它们的执行不会构成对系统的破坏,而清除整个内存,则可能造.成对系 统的破坏,所以在目态下不能执行,只能在管态下执行。","type":"choice","options":{"B":"清除整个内存","D":"写用户的内存自身数据","A":"读系统时钟","C":"读用户内存自身数据"},"answer":"B"},{"id":"learncoder_154_21834","stem":"操作系统中,中断向量地址指的是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"中断向量是指中断处理程序的入口地址,由处理机自动寻址。所以中断向量地址实 质上就是中断处理程序的入口地址的地址,也就是中断服务例行程序入口地址的地址。","type":"choice","options":{"A":"子程序入口地址","D":"例行程序入口地址","B":"中断服务例行程序入口地址","C":"中断服务例行程序入口地址的地址"},"answer":"C"},{"id":"learncoder_154_21833","stem":"(\t)是操作系统必须提供的功能。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"GUI(Graphic User Interface,图形用户界面)是为方便用户使用而出现的,实际上它 的功能通过各种指令来实现,操作系统可以不提供这个功能。虽然对于系统调用来说,用户程序想要得到操作系统的服务,必须使用系统调用(或计算机 提供的特定指令);它们能改变处理机的执行状态:由用户态变为系统态,但对于用户程序来说, 当不要求得到操作系统服务时,为其进程提供系统调用命令并不是必须的。编译程序,对于操作系统来说一般是不提供这项功能的。对于各种源程序,通常都有相应的 编译程序或者编译器。中断是操作系统必须提供的功能,原因在于开机时程序中的第一条指令就是“个Jump指 令,指向一个中断处理程序的入口地址”进行开机自检等一系列的操作","type":"choice","options":{"D":"编译源程序","A":"GUI","B":"为进程提供系统调用命令","C":"处理中断"},"answer":"C"},{"id":"learncoder_154_21836","stem":"设计多道批处理系统时,主要考虑的因素有系统效率和()o","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"多道批处理系统不是交互方式的操作系统,用户所提的作业首先进入外存中的作业队列,然后经过作业调度程序按照适当的策略选择适当的作业进入内存,再通过进程调度分 配 CPU由于多道批处理操作系统主要追求的是“效率”和“吞吐量”,因而,在设计多道批处理系统 时,主要考虑的因素是“系统效率”和“吞吐量”,而“及时性”、“交互性”、“实时性”都不是多道批处理系统所要考虑的。","type":"choice","options":{"A":"交互性","B":"及时性","C":"吞吐量","D":"实时性"},"answer":"C"},{"id":"learncoder_154_21828","stem":"Windows操作系统属于(\t)操作系统。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"单用户多任务操作系统是指:一台计算机同时只能由一个用户使用,但该用月一次 可以运行或提交多个作业。例如:Windows XP也是在同一时候只能让一个用户独享系统的所有 资源,所以Windows是单用户操作系统。","type":"choice","options":{"B":"单用户多任务","D":"批处理","C":"多用户","A":"单用户单任务"},"answer":"B"},{"id":"learncoder_154_21827","stem":"在(\t)操作系统控制下,计算机系统能及时处理由过程控制反馈的数据并做出响应。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"操作系统一般分为以下几类。(1)单用户操作系统:一次只能支持一个用户作业的运行。(2)批处理系统:用户作业以成批的方式将待执行的任务提交给计算机。(3)分时操作系统:允许多个用户同时与计算机系统交互。(4)实时操作系统:能够及时响应随机发生的外部事件,并能在限定的时间范围内做出响 应,实现对外部事件做出快速处理。实时性和可靠性是其重要特点。(5)网络操作系统:面向网络上多用户,提供基本的网络操作所需要的功能,如文件共享,内 存管理和进程任务调度等。(6)分布式操作系统:能够管理整个系统(包括网络)中的所有资源,负责所有资源的分配 和调度、任务的划分和具体安排、信息传递和控制。由此可知,在实时操作系统控制下,计算机系统能及时处理由过程控制反馈的数据并做出 响应。\t","type":"choice","options":{"C":"分布式","D":"单用户","A":"实时","B":"分时"},"answer":"A"},{"id":"learncoder_154_21830","stem":"设计批处理操作系统的主要目的是( \t)。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"批处理操作系统具有系统吞吐量大、资源利用率高等主要优点。在批处理系统中,操作人员将作业成批地装入计算机中,由操作系统按一定的算法选择其中 的一个或多个作业,将其调入内存使其运行。运行结束后,把结果放入磁盘“输出井\",由计算机 统一输岀后交给用户I\t","type":"choice","options":{"C":"降低用户作业的周转时间","D":"减少用户作业的等待时间","A":"提高系统与用户的交互性","B":"提高系统资源利用率"},"answer":"B"},{"id":"learncoder_154_21829","stem":"操作系统技术中临界区是指()","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"操作系统中将进程中访问临界资源的那段程序称为临界区。为确保程序执行结果 的正确性,每次只准许一个进程进入临界区,进入后不允许其他进程进入,直到已经获得临界资 源使用权的进程退出临界区后,其他进程才能申请进入临界区。\t","type":"choice","options":{"C":"请求访问临界资源的代码","D":"访问临界资源的一段代码","B":"可共享的一块内存区","A":"一组临界资源的集合"},"answer":"C"},{"id":"learncoder_154_21826","stem":"所谓(\t),是指将一个以上的作业放入主存,并且同时处于工作未完结状态,这些作业共享处理机的时间和外围设备等各类系统资源。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"在多道程序设计系统中,操作系统可服务于多个作业的处理需求,当某个执行中的 作业因为要等待用户键盘输入或等待其他设备I/O操作时,操作系统就依据一定的调度策略挑 选另一个作业,使其运行。当前一个作业结束了等待状态后就可再次获得CPU,继续运行下去。","type":"choice","options":{"C":"实时处理","D":"共行执行","B":"多道程序设计","A":"多重处理"},"answer":"B"},{"id":"learncoder_154_21832","stem":"用户可以通过(\t)两种方式来使用计算机。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"由于操作系统处于用户与计算机硬件系统之间,用户可以在操作系统的帮助下能够 方便、快捷、安全、可靠地操作计算机硬件和运行自己的程序。这就需要一个髙效、方便的手段来 达到此目的。在现代操作系统中都提供了包括命令接口、系统调用以及图形接口等接口,以方便用户使用 计算机,因而选择B","type":"choice","options":{"D":"设备管理方式和系统调用方式","B":"命令方式和系统调用方式","A":"命令方式和函数方式","C":"命令方式和文件管理方式"},"answer":"B"},{"id":"learncoder_154_21831","stem":"(\t)不是设计实时操作系统的主要追求目标。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"实时系统最主要的特征就是快速的处理能力,满足实时性的要求。实时系统在设计 时力求简单而实用。一般的实时操作系统的任务调度算•法简单实用,数据结构简洁,任务切换速 度和中断处理的速度较快,能够处理周期性任务和突发事件驱动的任务。在系统资源能够满足要求的情况下,不过分追求资源的利用率,转而追求实时性能。","type":"choice","options":{"D":"快速处理","A":"安全可靠","B":"资源利用率","C":"及时响应"},"answer":"B"},{"id":"learncoder_154_21819","stem":"操作系统中引入多道程序的最主要的目的在于(\t)。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"多道程序设计允许多个程序同时在系统的主存储器中主流并都处于开始和结束之 间。它们从宏观上看是并行的;从微观上看是串行的。引人多道程序设计技术的根本目的是为 了提高CPU的利用率,充分发挥计算机系统部件的并行性,现代计算机系统都采用了多道程序 设计技术。\t","type":"choice","options":{"A":"充分利用CPU,减少CPU空闲时间","D":"充分利用存储器","C":"有利于代码共享,减少主、辅存信息交换量","B":"提高实时响应速度"},"answer":"A"},{"id":"learncoder_154_21825","stem":"从用户的观点看,操作系统是( )。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"从方便用户使用的角度看,操作系统是一台对计算机硬件进行了功能扩充的虚拟 机,是它使硬件操作的细节透明化,使用户与硬件操作的细节相分离,它能够以适当的方式向用 户提供使用接口,方便用户使用计算机。","type":"choice","options":{"C":"合理地组织系统工作流程的软件","D":"由若干层次的程序按一定的结构组成的有机体","A":"用户与计算机之间的接口","B":"控制与管理计算机资源的软件"},"answer":"A"},{"id":"learncoder_154_21822","stem":"下面的描述中,(\t)不属于多道程序运行的特征。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"根据多道程序设计的特点,可以知道由于多道程序的运行具有多道、宏观上并行、微 观上串行运行等特点。所以运行速度快不是多道程序设计的特点。","type":"choice","options":{"D":"实际上多道程序是穿插运行的","A":"多道","B":"运行速度快","C":"宏观上并行"},"answer":"B"},{"id":"learncoder_154_21821","stem":"操作系统中引入使用SPOOLING系统的根本目的在于提高(\t)的使用效率。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"SPOOLing通常也称为“假脱机”,它的原理是以联机的方式得到脱机的效果。实现 上,就是在内存中形成缓冲区.,在高速设备上形成输出井和输入井,数据传递时,从低速设备传入 缓冲区,再传到高速设备的输入井,再从高速设备的输出井,传到缓冲区,再传到低速设备。SPOOLing技术是一种用一类物理设备模拟另一类物理设备的技术,它使独占使用的设备变 成多台虚拟设备,其目的是为了提高VO设备的利用率及使独占设备共享化。","type":"choice","options":{"D":"I/O设备","B":"内存","C":"CPU","A":"操作系统"},"answer":"D"},{"id":"learncoder_154_21824","stem":"现代操作系统的两个基本特征是(\t)和资源共享。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"并发性和共享性是现代操作系统的两个最基本的特征,两者之间互为存在条件。没 有程序的并发执行也就不涉及资源的共享,如果操作系统不能对资源共享实施有效的管理,也必 然会影响到程序的并发执行,甚至根本无法并发执行而变成了单道程序运行。","type":"choice","options":{"A":"多道程序设计","C":"程序的并发执行","B":"中断处理","D":"实现分时与实时处理"},"answer":"C"},{"id":"learncoder_154_21823","stem":"下列特性中,(\t)不是分时系统的特征。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"分时系统具有多路性、交互性、“独占”性和及时性的特征。即同时有多个用户在不 同时刻轮流使用CPU,并且用户可以根据系统响应结果直接干预每一步,以获得方便友好的服 务,这跟批处理作业没有关系。","type":"choice","options":{"D":"独占性","A":"交互性","B":"多路性","C":"成批性"},"answer":"C"},{"id":"learncoder_154_21820","stem":"在一段时间内,只允许一个进程排它地访问的资源被称之为(\t)。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"一般而言,计算机系统中的某些资源(如打印机、磁带机等)虽然可以提供给多个进 程(线程)使用,但为确保所打印或记录的结果不致造成混淆,应该规定在一段时间内只允许一 个进程(线程)访问该资源,具备这种特性的资源叫做临界资源。当一个进程A访问某临界资源时,必须先提出请求,若此时该资源空闲,系统便可分配该资 源给提岀请求的进程A使用。若此后再有其他进程也要访问该资源时(进程A释放该资源之 前)则必须等待。仅当进程A访问完并释放该资源后,才允许另一进程对该资源进行访问。我 们把这种在一段时间内只允许一个进程访问的资源称为临界资源。","type":"choice","options":{"D":"共享区","B":"独占资源","A":"共享资源","C":"临界资源"},"answer":"C"},{"id":"learncoder_154_21814","stem":"当中断发生后,进入中断处理的程序属于(\t)。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"中断发生时,若被中断的是用户程序,系统将从目态转入管态,在管态下进行中断的 处理,若被中断的是低级中断,则仍保留在管态,而用户程序只能在目态下运行,因此进入中断处 理的程序只能是OS程序。\t","type":"choice","options":{"C":"OS程序","D":"单独的程序,既不是用户程序,也不是OS程序","A":"用户程序","B":"可能是用户程序,也可能是OS程序"},"answer":"C"},{"id":"learncoder_154_21816","stem":"若分时操作系统的系统时间片长度一定,那么(\t)则响应时间越长。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"分时操作系统的工作方式是:多个用户交互式地向系统提出命令请求,系统采用时 间片轮转方式处理服务请求,并在终端上向用户显示结果,用户根据上一步结果发出下道命令。 操作系统将CPU的时间划分成若干个片段,称为时间片。操作系统以时:间片为单位,轮流为每 个终端用户服务。用户多则轮到执行的时间就会往后延长。因此,如果时间片一定,那么用户数 越多,则响应时间越长。","type":"choice","options":{"B":"用户数越少","C":"内存越小","A":"用户数越多","D":"内存越大"},"answer":"A"},{"id":"learncoder_154_21815","stem":"某作业在执行中发生了缺页中断,经操作系统处理后,它应该执行(\t)指令。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"在CPU的控制部件中有一个能发现中断的机构,该机构在每条指令执行周期的最 后时刻扫描中断寄存器,查询是否有中断出现。若有,则CPU停止执行当前程序的后续指令,转 A中断处理程序,处理完中断后应执行后续指令。\t","type":"choice","options":{"B":"被中断的那一条","A":"被中断的前一条","C":"被中断的后一条","D":"启动时的第一条"},"answer":"C"},{"id":"learncoder_154_21818","stem":"UNIX操作系统是( )","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"分时操作系统采用时间片轮转的方式使一台计算机为多个终端用户服务,并对每个 用户提供交互会话能力。UNIX操作系统就是典型的分时系统。","type":"choice","options":{"A":"多道批处理系统","B":"分时系统","C":"实时系统","D":"分布式系统"},"answer":"B"},{"id":"learncoder_154_21817","stem":"系统调用是操作系统提供给编程人员的(\t)","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"系统调用是操作系统提供给编程人员使用系统资源的唯一接口,开发人员可利用它 使用系统功能。现代操作系统的核心中都有一组实现系统功能的过程(子程序),系统调用就是 对上述过程的调用。\t","type":"choice","options":{"B":"接口","C":"中断子程序","D":"用户子程序","A":"一条机器指令"},"answer":"B"},{"id":"learncoder_154_21812","stem":"用户的应用程序是通过操作系统中所提供的(\t)来支持使用系统资源的。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"用户在需要使用系统支援的时候,它不能对资源进行随意分配,只能向系统申请,用 户程序通过系统调用提出申请,通过对中断的处理进行相应的资源分配。","type":"choice","options":{"A":"单击鼠标","C":"系统调用","B":"键盘命令","D":"图形用户界面"},"answer":"C"},{"id":"learncoder_154_21811","stem":"使用操作系统提供的(\t)接口,能在用户程序中将一个字符送到显示器上显示。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"显奈器属于系统资源,用户程序不能直接使用,仅能通过系统调用,由操作系统进行 驱动,才能对其进行操作。","type":"choice","options":{"D":"子程序","A":"系统调用","C":"原语","B":"函数"},"answer":"A"},{"id":"learncoder_154_21813","stem":"现代计算机操作系统提供了两种不同的状态,即管态(系统态)和目态(用户态),在此约定下,(\t)必须在管态下执行。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"CPU状态分为管态(系统态或核心态)和目态(用户态或常态)两种运行状态。在管 态下CPU可以执行指令系统的全部指令。操作系统在管态下运行。在用户态时,程序只能执行非特权指令。此时,若用户程序在目态下执行特权指令,硬特权 指令执行将被禁止,从而防止用户程序有意或无意地破坏系统。硬件资源不可以由用户程序直接驱动,只能由系统程序在管态进行控制。","type":"choice","options":{"C":"算术运算指令","B":"把运算结果送内存的指令","A":"从内存中取数的指令","D":"输入/输岀指令"},"answer":"D"},{"id":"learncoder_154_21810","stem":"多道程序的基本特征是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"由于多道程序设计允许计算机内存中同时存放两个以上相互独立的程序,它们轮流 使用CPU和其他系统资源,程序间交替执行。因此,多道程序的运行环境下,程序之间存在因为 争抢资源以及CPU的使用权而相互干扰(制约性),造成程序的执行不再具有单道程序执行时的 顺序性和可再现性。","type":"choice","options":{"D":"运行过程的可再现性","B":"顺序性","A":"制约性","C":"功能的封闭性"},"answer":"A"},{"id":"learncoder_154_21809","stem":"操作系统中,在用户态不能被执行的指令是(\t)。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"通常,操作系统程序和用户程序在CPU中运行所对应的机器指令集是有差别的。 操作系统的程序可以使用特权指令和非特权指令,而用户程序则只能使用非特权指令。操作系统根据执行程序对资源和机器指令的使用权限,把机器设置为两个状态:核心态和用 户态。用户程序(用户态)只能执行一般的指令而不可对寄存器进行操作","type":"choice","options":{"B":"置时钟指令","D":"寄存器清零指令","A":"读时钟指令","C":"取数指令"},"answer":"D"},{"id":"learncoder_154_21808","stem":"操作系统的主要作用是( )。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"操作系统是计算机系统中最重要、最基本的系统软件,位于硬件和用户之间,一方 面,它能向用户提供接口,方便用户使用计算机;另一方面,它能管理计算机软硬件资源,以便合 理、充分地利用它们。","type":"choice","options":{"C":"管理文件","B":"提供操作命令","D":"为用户提供使用计算机的接口,管理计算机的资源","A":"管理设备"},"answer":"D"},{"id":"learncoder_154_20360","stem":"某操作系统具有分时兼批处理的功能,设计一个合理的队列调度策略,使得分时作业响应快,批处理作业也能及时得到响应。参考答案及解析","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"空","type":"short_answer","answer":"可设计两个优先级队列。分时作业进入高优先级队列,采用短时间片的时间轮转法调度。当高优先级队列空时,调度低优先级的成批作业,并给予较长的时间片。"},{"id":"learncoder_154_20359","stem":"试说明库函数与系统调用的区别和联系。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"空","type":"short_answer","answer":"区别:库函数是语言或应用程序的一部分,可以运行在用户空间中。而系统调用是操作系统的一部分,是内核提供给用户的程序接口,运行在内核空间中。联系:许多库函数都会使用系统调用来实现功能。没有使用系统调用的库函数,执行效率通常比系统调用高,因为使用系统调用时,需要上下文的切换以及状态的转换(从用户态转为核心态)。"},{"id":"learncoder_154_20358","stem":"对于一个正确运转的计算机系统,保护操作系统是非常重要的。但为了向用户提供更大的灵活性,应尽可能少地对用户加以限制。下面列出的各操作通常是加以保护的。试问至少有哪几条指令需加以保护?1)改变成用户方式。2)改变成系统方式。3)从存放操作系统的存储区读取数据。4)将数据写到存放操作系统的存储区上。5)从存储操作系统的存储区取指令。6)打开计时器。7)关闭计时器。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"空","type":"short_answer","answer":"操作2)、4)应加以保护。因为这两条操作是对操作系统本身的内容加以修改如果交由用户任意操作就会对操作系统造成破坏并最终导致系统运行出错或系统崩溃,所以应在任何情况下加以保护。其他几种操作在一般情况下也应加以保护,但即使这些操作交由用户操作,也不会出现像上述两种操作那样的破坏性。"},{"id":"learncoder_154_20357","stem":"试分别说明操作系统与硬件、操作系统与其他系统软件之间的关系,并画出操作系统的层次关系。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"空","type":"short_answer","answer":"图1-11为计算机系统的层次关系。操作系统与硬件的关系:操作系统是覆盖在硬件上的第一层软件,它管理计算机的硬件资源。操作系统为用户完成所有与硬件相关的操作,从而极大方便了用户对硬件资源的使用,并提高了硬件资源的利用率。操作系统与其他系统软件的关系:操作系统是一种特殊的系统软件,其他系统软件运行在操作系统的基础之上,可获得操作系统提供的大量服务,也就是说,操作系统是其他系统软件与硬件之间的接口。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第1章)/image9.png'/>"},{"id":"learncoder_154_20356","stem":"在一个分时操作系统中,有一个程序的功能如下:1)将文本数据从文件中读出。2)排序。3)将排好序的数据写入文件。试从分时操作系统对资源管理的角度以及进程的生命周期两方面,论述该程序从开始执行到结束,操作系统为其提供服务与控制的全过程。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"空","type":"short_answer","answer":"从文件中读数据时,通过read系统调用完成。它首先创建一条消息,其中包含fd(文件描述符)、bufer(缓冲区)、nbytes(大小)等参数,以及表示READ类型的消息码。然后将这条消息送给文件系统,并阻塞该进程以等待文件系统的响应。文件系统在收到消息后,以消息类型为下标查找过程表,调用相应过程处理读请求。数据输入完成后,操作系统切换到排序进程,开始进行排序工作。在排序工作后,操作系统调用write系统调用来完成,rite系统调用将进程缓冲区中的数据写到与文件描述符关联的文件中。和ead系统调用非常相似,同样需要3个参数:、bufer、nbytes两个系统调用都返回所成功传送的字节数,或者发送一个错误条件的信号并返回1。"},{"id":"learncoder_154_20355","stem":"“虚拟”体现在操作系统的各方面应用当中,请举出两个“虚拟”的例子。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"空","type":"short_answer","answer":"①由于一台计算机配置了操作系统和其他软件,因此比一台裸机功能更强大,使用更方便,称为虚拟机。由于操作系统自身包含了若干层软件,因此该计算机系统又可称为多层虚拟机。②如在多道分时系统中,利用多道程序设计技术可以把一台物理上的CPU虚拟为多台逻辑上的CPU,而供多个终端用户使用。③虚拟存储器,仅把作业的一部分装入内存便可运行作业,从逻辑上对内存容量进行了扩充。又如在设备管理中虚拟设备技术的使用,可将一台物理设备变换为若干台逻辑上的对应物。"},{"id":"learncoder_154_20350","stem":"关于现代操作系统的基本特征:是指两个或两个以上的进程在执行时间上有重叠,即一个进程的第一个操作在另一个进程的最后一个操作完成之前开始。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"考查操作系统的基本特征。并发性是指宏观上在一段时间内有多道程序在同时运行,但在单处理器系统中,每一时刻仅有一道程序在执行,故微观上这些程序是交替执行的。本题中提到两个或两个以上进程在执行时间上有重叠,即符合并发性的定义,故选A。","type":"choice","options":{"D":"交互性","A":"并发性","B":"并行性","C":"虚拟性"},"answer":"A"},{"id":"learncoder_154_20353","stem":"设内存中有3道程序A、B、C,它们按A、B、C的优先次序执行。它们的计算和I/O操作的时间见表假设3道程序使用相同设备进行I/O操作,即程序以串行方式使用设备,试画出单道运行和多道运行的时间关系图(调度程序的执行时间忽略不计),并回答在这两种情况下,完成这3道程序分别需要多长时间(多道运行时采用抢占式调度策略)。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"空","type":"short_answer","answer":"若采用单道方式运行这3道程序,则运行次序为A、B、C,即程序A先进行30ms的计算,再完成40ms的IO操作,最后再进行10ms的计算;接下来程序B先进行60ms的计算,再完成30ms的I/O操作,最后再进行10ms的计算;然后程序C先进行20ms的计算,再完成40ms的操作,最后再进行20ms的计算。至此,3道程序全部运行完毕。若采用多道方式运行这3道程序,因系统按照A、B、C的优先次序执行,则在运行过程中,无论使用CPU还是I/O设备,A的优先级最高,B的优先级次之,C的优先级最低,即程序A先进行30ms的计算,再完成40ms的L/O操作(与此同时,程序B进行40ms的计算),最后再进行10ms的计算(此时程序B等待,程序B的第一次计算已经完成40ms,还剩余20ms);接下来程序B先进行剩余20ms的计算,再完成30ms的/O操作(与此同时,程序C进行20ms的计算,然后等待设备),最后再进行10ms的计算(此时程序C执行操作10ms,其操作还需30ms);然后程序C先进行30ms的I/O操作,最后再进行20ms的计算。至此,3道程序全部运行完毕。单道方式运行时,其程序运行时间关系图如图1-9所示,总运行时间如下:(30+40+10+60+30+10+20+40+20)ms=260ms<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第1章)/image4.png'/>多道方式运行时,其程序运行时间关系图如图1工0所示,总运行时间如下:(30+40+10+20+30+10+30+20)ms=190ms<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第1章)/image5.png'/>"},{"id":"learncoder_154_20349","stem":"(2015年中科院真题)下面叙述中,错误的是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"考查并行和并发的概念,多重处理即并行执行,多任务处理即多个进程并发执行。操作系统既可以支持并发执行也可以支持并行执行,A正确。并行执行与并发执行不存在包含关系,B错误。在同一时间间隔内,系统中同时运行多个进程是并发执行的基本概念,C正确。一个CPU可以采用多核架构,可以实现并行执行,D正确。","type":"choice","options":{"A":"操作系统既能进行多任务处理,又能进行多重处理","D":"—个CPU的计算机上也可以进行多重处理","C":"多任务是指同一时间内在同一系统中同时运行多个进程","B":"多重处理是多任务处理的子集"},"answer":"B"},{"id":"learncoder_154_20352","stem":"一个分层结构操作系统由裸机、用户、CPU调度、文件管理、作业管理;内存管理、设备管理、命令管理等部分组成。试按层次结构的原则从内到外将各部分重新排列。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第1章)/image1.png'/>","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"33.空","type":"short_answer","answer":"采用层次结构方法可以将操作系统的各种功能分成不同的层次,即将整个操作系统看作由若干层组成,每一层都提供一组功能,这些功能只依赖于该层以内的各层次,最内层部分是机器硬件本身提供的各种功能。操作系统的这种层次结构如图1-8所示。图1-8中,同机器硬件紧挨着的是操作系统的内核,它是操作系统的最内层。内核包括中断处理、设备驱动、CPU调度以及进程控制与通信等功能,其目的是提供一种进程可以存在和活动的环境。内核以外依次是存储管理层、″o管理层、文件管理层、作业管理层、命令管理层。它们提供各种资源管理功能并为用户提供各种服务。命令管理层是操作系统提供给用户的接口层,因而在操作系统的最外层。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第1章)/image3.png'/>"},{"id":"learncoder_154_20348","stem":"(2015年中科院真题)()不是操作系统的功能。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"操作系统的主要功能包括处理器(CPU)管理、存储器管理、文件管理和设备管理。数据管理属于文件管理的范畴。网络管理不是操作系统的功能,故选。","type":"choice","options":{"C":"网络管理","A":"CPU管理","D":"数据管理","B":"存储管理"},"answer":"C"},{"id":"learncoder_154_20354","stem":"假设一台计算机有32MB内存,操作系统占用2MB,每个用户进程占用10MB。用户进程等待I/O的时间为80%,问CPU的利用率为多少?若再增加32MB内存,则CPU的利用率又为多少?","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"空","type":"short_answer","answer":"】只有当所有进程都在等待I/O时,CPU才会空闲下来。因此需要算出所有进程都在等待这种情况发生的概率。本题给出的条件为″用户进程等待的时间为80%″,也就是说进程等待的概率为80%,那么n个进程都同时等待的概率就为(80%)n,则CPU的利用率u可表示为<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第1章)/image6.png'/>在内存为32MB时,可容纳(32-2)/10=3个用户进程,CPU利用率为<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第1章)/image7.png'/>在内存再增加32MB时,可容纳(32+32-2)/10=6个用户进程,CPU利用率为<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第1章)/image8.png'/>"},{"id":"learncoder_154_20344","stem":"(2015年统考真题)处理外部中断时,应该由操作系统保存的是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"外部中断处理过程,程序计数器的内容由中断隐指令自动保存,通用寄存器的内容由操作系统保存。","type":"choice","options":{"C":"快表(TLB)中的内容","B":"通用寄存器的内容","D":"Cache中的内容","A":"程序计数器(PC)的内容"},"answer":"B"},{"id":"learncoder_154_20347","stem":"(2017年统考真题)执行系统调用的过程包括如下主要操作:①返回用户态②执行陷入(trap)指令③传递系统调用参数④执行相应的服务程序正确的执行顺序是())。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"正如1.3.3小节系统调用提到的执行流程一样,执行系统调用时,首先将系统调用所需的参数传递至系统内核,然后通过陷入指令进入内核态,将返回地址压入栈中以备使用,接下来CPU执行相应的内核态服务程序,最后返回用户态。","type":"choice","options":{"D":"③>④>②>①","A":"②>③>①>④","C":"③>②>④>①","B":"②>④>③>①"},"answer":"C"},{"id":"learncoder_154_20343","stem":"(2014年统考真题)下列指令中,不能在用户态执行的是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"trap指令、跳转指令和压栈指令均可以在用户态执行,其中仕坤指令负责由用户态转换成为内核态。而关中断指令为特权指令,必须在核心态才能执行,选D。","type":"choice","options":{"B":"跳转指令","D":"关中断指令","C":"压栈指令","A":"trap指令"},"answer":"D"},{"id":"learncoder_154_20346","stem":"(2016年统考真题)下列关于批处理系统的叙述中,正确的是()。I.批处理系统允许多个用户与计算机直接交互II.批处理系统分为单道批处理系统和多道批处理系统III.中断技术使得多道批处理系统的I/O设备可与cpu并行工作","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"批处理系统中,将作业依次以脱机输入方式输入到磁带上,监督程序依次执行磁带上的作业,作业执行时用户无法干预其运行,Ⅰ错误。批处理系统按照发展历程可分为单道批处理系统和多道批处理系统,主要区别为内存中同时存在单个或多个作业,Ⅱ正确。多道批处理系统中的一道程序因L/O请求而暂停执行时,借助中断技术CPU转而去运行另一道程序,Ⅲ正确。","type":"choice","options":{"A":"仅II、皿","D":"仅I、皿","B":"仅II","C":"仅I、II"},"answer":"A"},{"id":"learncoder_154_20342","stem":"(2013年统考真题)下列选项中,会导致用户进程爪用户态切换到内核态的操作是()。I.整数除以零II.sin。函数调用DI.read系统调用","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时,处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态),即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序时突然被中断程序中断,此时用户程序也可以象征性地称为处于进程的内核态,因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似:用系统调用时进入核心态oLinux对硬件的操作只能在核心态,这可以通过写驱动程序来控制。在用户态操作硬件会造成coredump要注意区分系统调用和一般的函数。系统调用由内核提供,如read、rite、en等。而一般的函数由软件包中的函数库提供,如sin、等。在语法上两者没有区别。一般情况,系统调用运行在核心态,函数运行在用户态。但也有一些函数在内部使用了系统调用(如pen),这样的函数在调用系统调用时进入核心态,其他时候运行在用户态。经过上述讲解,我们来看选项Ⅰ,整数除以零,会引发中断,会进入内核态。选项Ⅱ,函数调用,是由软件包中的函数库提供,在用户态下即可执行。选项Ⅲ,系统调用,肯定需要进入内核态。","type":"choice","options":{"D":"I、II和HI","A":"仅I、II","B":"仅I、皿","C":"仅II、皿"},"answer":"B"},{"id":"learncoder_154_20345","stem":"(2015年统考真题)假定下列指令已装入指令寄存器,则执行时不可能导致CPU从用户态变为内核态(系统态)的是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"A选项中若R中的内容为0,则会出现内中断,从用户态变为内核态;B选项软中断在内核态执行;C选项寄存器取非不会产生中断,且不属于其他操作系统内核,故不会变为内核态;D选项ad是主存地址,访存需要进入内核态。","type":"choice","options":{"D":"MOV R0,addr;把地址addr处的内存数据放入寄存器R0中","A":"DIV R0,R1;(R0)/(Rl)-->R0","C":"NOT R0;寄存器R0的内容取非","B":"INT n;产生软中断"},"answer":"C"},{"id":"learncoder_154_20341","stem":"(2013年统考真题)计算机开机后,操作系统最终被加载到()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"用户平时开机时首先启动的是存于主板上ROM中的BIOS程序(注意:不是操作系统),其次再由它去调用硬盘中的操作系统(如Windows系统),将操作系统的程序自动加载到内存中的系统区,这段区域是RAM,答案选D。","type":"choice","options":{"B":"ROM","C":"EPROM","D":"RAM","A":"BIOS"},"answer":"D"},{"id":"learncoder_154_20337","stem":"(2011年统考真题)下列选项中,在用户态执行的是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"缺页处理与时钟中断都属于中断,会对系统造成影响,因此只能在核心态执行。进程调度属于系统的一部分,也只能在核心态执行。命令解释程序属于命令接口,是操作系统提供给用户所使用的接口,因此可以在用户态执行CPU状态分为核心态和用户态,核心态又称特权状态、系统态或管态。通常,操作系统在管态下运行,CPU在管态下可以执行指令系统的全集。用户态又称常态或目态,机器处于用户态时,程序只能执行非特权指令,用户程序只能在用户态下运行CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序不能使用。常见的特权指令有以下几种:有关对I/O设备使用的指令,如启动I/O设备指令、测试L/O设备工作状态和控制L/O设备动作的指令等。有关访问程序状态的指令,如对程序状态字(PSw)的指令等。存取特殊寄存器指令,如存取中断寄存器、时钟寄存器等指令。其他特权指令。本题中B、D选项都是要修改中断寄存器,C选项要修改程序状态字。","type":"choice","options":{"C":"进程调度程序","D":"时钟中断处理程序","B":"缺页处理程序","A":"命令解释程序"},"answer":"A"},{"id":"learncoder_154_20340","stem":"(2012年统考真题)中断处理和子程序调用都需要压栈以保护现场。中断处理一定会保存而子程序调用不需要保存其内容的是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"本题考查的是中断处理和子程序调用所保存内容的区别,考生可以先从两者的作用不同来考虑。中断的发生通常是突然的,如地址越界等,往往是系统无法预知的(外部输入中断也是无法预知的,计算机不会知道用户什么时候用键盘输入)。当系统发生中断时要转入中断处理程序,处理完之后要返回到发生中断时的指令处继续执行,由于处理中断时CPU可能会切换状态(如果在核心态发生中断则始终为核心态,不需要切换),因此中断处理返回时就需要还原当时的程序状态,包括处理器信息等,这就用到了程序状态字寄存器所存储的内容。程序状态字寄存器用于记录当前处理器的状态和控制指令的执行顺序,并且保留和指示与运行程序有关的各种信息,其主要作用是实现程序状态的保护和恢复,所以中断处理时一定要将PSw压栈保存。子程序调用是系统能够预知的,而且子程序调用通常是在进程内部执行,不会更改程序状态,即便更改程序状态,只要更新寄存器就行,而不需要保存,因为一切都是系统预料到的,不需要保护和恢复,所以,子程序调用主要保存局部参数信息等,不需要将程序状态字压栈。中断处理和子程序调用对其他3个选项的操作都是相同的。","type":"choice","options":{"D":"通用地址寄存器","A":"程序计数器","B":"程序状态字寄存器","C":"通用数据寄存器"},"answer":"B"},{"id":"learncoder_154_20336","stem":"(2010年统考真题)下列选项中,操作系统提供给应用程序的接口是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"操作系统提供两类接口:一类是命令接口(包括图形接口,即图形化的命令接口),比如用户通过键盘命令和鼠标命令来操作计算机;另一类是程序接口,它提供一组系统调用,用户可以通过运行一些应用程序来访问操作系统的资源。实际上,本题4个选项中,只有A是操作系统提供的接口。系统调用是能完成特定功能的子程序,当应用程序要求操作系统提供某种服务时,便调用具有相应功能的系统调用。库函数则是高级语言中提供的与系统调用对应的函数(也有些库函数与系统调用无关),目的是隐藏指令的细节,使系统调用更为方便、抽象。但要注意,库函数属于用户程序而非系统调用,是系统调用的上层;中断及原语是计算机系统底层的基础功能,属于系统调用的下层。系统提供封装好的系统调用供应用程序使用,应用程序无须考虑系统底层的内容,仅考虑上层的操作即可;中断是系统内部对于事件响应的机制,对于应用程序来说是透明的,不会提供给应用程序直接使用;同样库函数和原语都是面对操作系统底层的,不会直接提供给应用程序。","type":"choice","options":{"A":"系统调用","B":"中断","D":"原语","C":"库函数"},"answer":"B"},{"id":"learncoder_154_20339","stem":"(2012年统考真题)下列选项中,不可能在用户态发生的事件是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"判断能否在用户态执行的关键在于事件是否会执行特权指令。首先看A选项,系统调用是系统提供给用户程序调用内核函数的,当用户程序执行系统调用时,会使CPU状态从用户态切换至核心态并执行内核函数,执行结柬之后将控制权还给用户程序,并且CPU状态从核心态切换至用户态。从这个过程可以看出,虽然系统调用的执行过程中CPU需要切换至核心态,但系统调用(或者引用、调用)是在用户态发生的,是系统特意为用户态设计的,因此系统调用可以发生在用户态B选项为外部中断,很多考生会被″中断”二字影响,认为涉及中断的都应该是核心态的事情,而不能在用户态执行,因此选错。中断在系统中经常发生,如键盘输入会引发外部中断(外部中断是指由外部事件引起的中断,比如单击鼠标和键盘输入等操作引起的中断);进程缺页会产生缺页中断等,这些都经常发生在用户进程中,自然这些也都是用户态的事件。以键盘输入举例,一个用户进程需要用户输入一串命令,当用户用键盘输入时会引发外部中断(此时CPU还是用户态),此时系统会切换至核心态执行中断处理程序(这时CPU转变为核心态),处理程序处理之后将输入结果返回给用户程序并将CPU状态切换为用户态,中断处理结柬。由此过程可见,中断的发生和处理与系统调用类似,都是发生在用户态,通过切换至核心态完成对应功能,然后返回至用户态。系统调用和中断的发生是在用户态,处理是在核心态。再来看D选项,缺页与B选项类似,用户态执行进程缺页时会产生缺页中断(中断发生在用户态),然后系统转入核心态进行缺页中断处理,再返回用户态,将控制权交还给用户进程。因此D选项也可以发生在用户态。根据排除法可知答案是C,下面解释为什么进程切换不能发生在用户态。进程切换实际上是对于程序状态的修改,因此要修改程序状态字,这是特权指令,必须在核心态执行。","type":"choice","options":{"A":"系统调用","D":"缺页","B":"外部中断","C":"进程切换"},"answer":"C"},{"id":"learncoder_154_20335","stem":"(2009年统考真题)在单处理器系统中,可并行的是()。I.进程与进程II.处理器与设备III.处理器与通道IV.设备与设备","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"在多道程序设计下,宏观上进程是同时运行的,但是在微观上,单处理器(此处不含多核的情况)某时刻只能处理一个进程,所以进程与进程之间不能并行执行。处理器、通道、设备都能并行执行,比如同时打印(设备)、计算(处理器)、传输数据(通道控制内存与外存间数据交换)。这里要注意区别并发与并行的含义,并行性是指两个或多个事件在同一时刻发生;而并发性是指两个或多个事件在同一时间间隔内发生。虽然同时刻只能处理一个进程,但多个进程可以并发执行。","type":"choice","options":{"C":"I、HI和IV","D":"II、HI和IV","B":"I、II和IV","A":"I、II和皿"},"answer":"D"},{"id":"learncoder_154_20338","stem":"(2012年统考真题)一个多道批处理系统中仅有Pi和P2两个作业,P2比Pi晚5ms到达。它们的计算和I/O操作顺序如下:P1:计算60ms,I/O80ms,计算20ms。P2:计算120ms,I/O40ms,计算40ms。若不考虑调度和切换时间,则完成两个作业需要的时间最少是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"画出P和P2的运行甘特图(见图1-7)P2晚到,因此先从P开始执行,由图1-7可知,最少时间为260ms。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/operating_system_2020/操作系统(第1章)/image2.png'/>","type":"choice","options":{"B":"260ms","D":"360ms","A":"240ms","C":"340ms"},"answer":"B"},{"id":"learncoder_154_20334","stem":"若程序正在试图读取某个磁盘的第100个逻辑块,使用操作系统提供的()接口。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"操作系统作为用户与计算机硬件系统之间的接口,用户可通过3种方式使用计算机:①命令方式;②系统调用方式;③图形、窗口方式。而系统调用按功能可分为6类,包括进程管理、文件操作、设备管理、主存管理、进程通信和信息维护。本题所需要的接口就属于文件操作相关的调用。","type":"choice","options":{"A":"系统调用","C":"原语","D":"键盘命令","B":"图形用户接口"},"answer":"A"},{"id":"learncoder_154_20331","stem":"在中断发生后,进入中断处理的程序属于()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"中断处理程序只能是操作系统程序,不可能是应用程序。中断处理属于系统中会对系统产生重大影响的动作,因此只允许核心态程序执行;而应用程序通常指用户程序,运行在用户态下,不能进行这些操作。","type":"choice","options":{"B":"可能是应用程序,也可能是操作系统程序","D":"既不是应用程序,也不是操作系统程序","A":"用户程序","C":"操作系统程序"},"answer":"C"},{"id":"learncoder_154_20330","stem":"所谓(),是指将一个以上的作业放入内存,并且同时处于运行状态。这些作业共享处理器的时间和外设及其他资源。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"多道程序设计技术是指将一个以上的作业存放在主存中,并且同时处于运行状态。这些作业共享处理器、外设以及其他资源。","type":"choice","options":{"C":"实时处理","B":"多道程序设计","D":"并行执行","A":"多重处理"},"answer":"B"},{"id":"learncoder_154_20333","stem":"用户程序在目态下使用特权指令引起的中断属于()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"程序在目态下,即在执行用户程序时引起的中断属于来自CPU的中断,不是硬件故障中断和外部中断。特权指令指的是只允许管态下使用的指令,因此目态下对特权指令的使用会实现从目态到管态的改变,即会产生访管中断。硬件故障中断是由硬件故障引起的中断,比如,在使用打印机时打印机突然断电,造成硬件异常所引起的中断。程序中断指的是程序在执行过程中产生的一般中断,比如,当程序有使用磁盘等要求时产生的中断,如果本题中用户程序使用的不是特权指令而是一般指令,产生的中断就应该是这种。外部中断是指由外部事件引起的中断,比如单击鼠标和键盘输入等操作引起的中断。","type":"choice","options":{"B":"程序中断","D":"访问中断","A":"硬件故障中断","C":"外部中断"},"answer":"D"},{"id":"learncoder_154_20332","stem":"OS通常为用户提供4种使用接口,它们是终端命令、图标菜单、系统调用和()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"操作系统作为用户与计算机硬件系统之间的接口,用户可通过以下3种方式使用计算机:①命令方式;②系统调用方式;③图形、窗口方式。题干中所说的终端命令属于①,图标菜单属于③,系统调用属于②。而C选项中的批处理命令就是把一批终端命令放在一个文本里,然后批量执行NIX的shell文件也是类似的,因此C选项属于命令方式。因此本题选C宏命令一般是指用户与应用程序之间的接口。","type":"choice","options":{"A":"计算机高级指令","C":"类似DOS的批命令文件或UNIX的shell文件","D":"汇编语言","B":"宏命令"},"answer":"C"},{"id":"learncoder_154_20328","stem":"下列关于操作系统的论述中,正确的是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"分时系统必须有交互功能,实时系统对响应的要求比分时系统更高。在分时系统中,用户不会独占文件系统,这是多用户共享的。","type":"choice","options":{"D":"在采用分时操作系统的计算机系统中,用户可以独占计算机操作系统中的文件系统","C":"从响应角度看,分时系统与实时系统的要求相似","A":"对于批处理作业,必须提供相应的作业控制信息","B":"对于分时系统,不一定全部提供人机交互功能"},"answer":"A"},{"id":"learncoder_154_20327","stem":"与早期的操作系统相比,采用微内核结构的操作系统具有很多优点,但是这些优点不包()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"微内核结构不能提高系统的运行效率,其他都是微内核结构的优点。","type":"choice","options":{"A":"提高了系统的可扩展性","D":"使操作系统的可移植性更好","C":"增强了系统的可靠性","B":"提高了操作系统的运行效率"},"answer":"B"},{"id":"learncoder_154_20326","stem":"下列选项中,不是操作系统关心的主要问题的是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"高级程序设计语言不属于操作系统关心的主要问题,操作系统关心的问题都与硬件和系统资源有关。高级程序设计语言的实现依赖于编译器(或解释器),编译器的功能是将用高级程序设计语言写成的代码进行语法、语义检查,优化,生成中间代码,最后生成目标代码,目标代码便可在目标机器上直接运行。","type":"choice","options":{"C":"管理计算机中的信息资源","B":"设计、提供用户程序与计算机及计算机硬件系统的接口","A":"管理计算机主机","D":"高级程序设计语言的编译"},"answer":"D"},{"id":"learncoder_154_20329","stem":"操作系统提供了多种界面供用户使用,其中()是专门供应用程序使用的一种界面。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"系统调用是应用程序同系统之间的接口,其余各项都是专门供用户使用的。","type":"choice","options":{"D":"作业控制语言","C":"系统调用","A":"终端命令","B":"图形用户窗口"},"answer":"C"},{"id":"learncoder_154_20321","stem":"下面说法错误的有()。I.分时系统中,时间片越短越好。II.银行家算法是防止死锁发生的方法之一。III.若无进程处于运行状态,则就绪和等待队列均为空。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"I错误,时间片设得太短会导致过多的进程切换,降低了CPU的效率;而设得太长又可能引起对短的交互请求的响应变差。Ⅱ错误,防止死锁和避免死锁是两种方法,实质上都是通过施加某些限制条件的方法,来预防发生死锁。两者的主要差别在于:防止死锁所施加的限制条件较严格。防止死锁的办法是破坏死锁产生的必要条件,如据弃“请求和保持”条件、据弃“不剥夺”条件和摒弃“环路等待”条件。而银行家算法属于避免死锁算法。Ⅲ错误,发生死锁时,无进程处于运行状态,而等待队列不为空。","type":"choice","options":{"C":"I和III","B":"II和III","A":"I和II","D":"I、II和皿"},"answer":"D"},{"id":"learncoder_154_20324","stem":"下列观点中,不是描述操作系统的典型观点的是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"选项B、C、D是对操作系统描述的典型的3个观点,A只是从软件的量上予以说明,没有说出操作系统的真正作用。","type":"choice","options":{"C":"操作系统是资源的管理者","A":"操作系统是众多软件的集合","D":"操作系统是虚拟机","B":"操作系统是用户和计算机之间的接口"},"answer":"A"},{"id":"learncoder_154_20320","stem":"在下列选项中,()不属于操作系统提供给用户的可使用资源。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"操作系统作为计算机系统资源的管理者,管理着各种各样的硬件和软件资源。归纳起来可将资源分为4类:处理器、存储器、I/o设备以及信息(数据和程序)。中断机制包括硬件的中断装置和操作系统的中断处理服务程序,因此中断机制并不能说是一种资源。","type":"choice","options":{"D":"I/O设备","A":"中断机制","C":"存储器","B":"处理机"},"answer":"A"},{"id":"learncoder_154_20323","stem":"操作系统提供给编程人员的接口是()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"系统调用是操作系统提供给编程人员的唯一接口。系统调用在高级语言中常以函数形式提供给程序员。其他选项都错在范围和限定上。","type":"choice","options":{"C":"系统调用","D":"子程序","B":"高级语言","A":"库函数"},"answer":"C"},{"id":"learncoder_154_20322","stem":"实时操作系统必须在()内处理完来自外部的事件。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"不同类型的操作系统对时间的要求不同,反映各自的系统特点。实时系统的时间要求是根据被控对象来确定的,而时间片通常是分时系统的时间要求。","type":"choice","options":{"B":"被控对象规定时间","D":"时间片","C":"周转时间","A":"一个机器周期"},"answer":"B"},{"id":"learncoder_154_20325","stem":"设计实时操作系统时,首先应该考虑系统的()。","key_points":"知识点.练习.专业课练习.操作系统.绪论","analysis":"实时操作系统(RTOS)是指当外界事件或数据产生时,能够接收并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,并控制所有实时任务协调一致运行的操作系统。因而,提供及时响应和高可靠性是其主要特点。","type":"choice","options":{"B":"实时性和可靠性","A":"可靠性和灵活性","D":"灵活性和实时性","C":"分配性和可靠性"},"answer":"B"},{"id":"learncoder_113_24602","stem":"考虑一个最大距离为2km的局域网,当带宽为多少时,传播时延(传播速度为 2xl08m/s)等于100B分组的发送时延?对于512B分组结果又当如何?","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"31.空","type":"short_answer","answer":"首先传播时延为2xl0^3m /(2xl0^8m/s) = 10^-5s = 10us1)\t分组大小为100B假设带宽为x,要使得传播时延等于发送时延,则带宽为x = 100B / 10us = 10MB/s = 80Mbit/s2)\t分组大小为512B假设带宽为y,要使传播时延等于发送时延,则带宽为y = 512B / 10us = 51.2MB/s = 409.6Mbit/s"},{"id":"learncoder_113_24605","stem":"\t在下列情况下,计算传送1000KB文件所需要的总时间,即从开始传送时起直到文 件的最后一位到达目的地为止的时间。假定往返时间(RTT)是100ms, 一个分组是1KB (1024B)的数据,在开始传送整个文件数据之前进行的起始握手过程需要2RTT的时间。1)\t带宽是1.5Mbit/s,数据分组可连续发送。2)\t带宽是1.5Mbit/s,但在结束发送每一个数据分组之后,必须等待一个RTT才能发送 下一个数据分组。3)\t假设带宽是无限大的值,即取发送时间为0,并且在等待每个RTT后可发送多达20个分组。4)\t假设带宽是无限大的值,在紧接起始握手后可以发送一个分组,此后,在第1次等待 RTT后可发送21个分组,在第2次等待RTT后可发送2?个分组……在第n次等待RTT后可 发送211个分组。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"空","type":"short_answer","answer":"提示,前面提到过,如果题目没有说考虑排队时延、处理时延就无需考虑。1)\t由提示可知,总时延=发送时延+传播时延+握手时间,其中握手时间是题目增加的。发送时延=1000KB / 1.5Mbit/s ≈5.46s,传播时延= RTT / 2 =50ms=0.05s,握手时间=2xRTT = 200ms=0.2s,所以总时延=5.46s + 0.05s+0.2s=5.71s。2)\t直接在1)的基础上加999RTT即可,所以总时延=5.71 s+999x0.1s=l05.61s。3)\t发送时延为0,只需计算传播时延即可。由于每个分组为1KB,因此大小为1000KB 的文件应该分为1000个分组。由于每个RTT后可发送20个分组,因此一共需要50次才可 发完。第1次的传播时延包含在第2次的等待时间里,依此类推,从第2次开始,每次都需 要等待1个RTT, —直到第50次发送为止,一共需要等待49个RTT,但是最后一次还需要 0.5RTT的传播时延(再次提醒:在本次等待的RTT史一定是包含了上次传输的传播时延, 所以不要认为还需另外计算传播时延,当然最后一次需要计算传播时延)。所以,总的传播时 延=2RTT (握手时间)+49RTT+0.5RTT=51.5RTT=5.15s。4)\t首先需要计算等待几次RTT可以发送完所有分组,假设需要x次,即1+2+4+…+2*≥1000,可得2^x+1-1≥1000,得到x=9。所以,总的传播时延=2RTT(握手时间)+9RTT+0.5RTT= 11.5RTT=1.15s。"},{"id":"learncoder_113_24608","stem":"\t试在下列条件下比较电路交换和分组交换。假设要传送的报文共x比特。从源点到 终点共经过k段链路,每段链路的传播时延为d秒,数据传输速率为b比特/秒。在电路交换 时电路的建立时间为s秒。在分组交换时分组长度为p比特,且各结点的排队等待时间可忽 略不计。问在怎样的条件下,分组交换的时延比电路交换的要小?","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"空","type":"short_answer","answer":"(1)电路交换电路交换的过程:先建立连接,建立连接后再发送数据(发送时延),这里需要注意,釆 用电路交换时,中间经过的结点是不需要存储转发的,这点与分组交换不一样。下面分别计算。建立连接的时间:s (秒)发送町延=报文长度/数据率=x/b传播时延=每段链路的传播时延x总的链路数=dk综上所述,电路交换的总时延二s+x/b+dk。(2)分组交换分组交换的过程:由于分组交换无须建立连接,直接发送,所以重点在于计算传播时延 与发送时延•(分组每经过一个结点都需要存储转发)。下面分别计算。计算之前建议考生画一 个草图,从图中应该很容易地看出k段链路是有(k+1)个结点,也就是说,除了发送端与接收 端,中间还有k-1个结点。传播时延:假设有n个分组,虽然这n个分组都会有传播时延,但是仔细想想,是不是 只需计算最后一个分组的传播时延?因为前(n-1)个分组在传播时,发送端还在发送,因此时 间是重叠的,无需重新计算,故只需计算最后一个分组的传播时延即可,则传播时延为kd。发送时延:首先应该计算发送端的发送时延,假设有n个分组,则n恐/p,而每个分组的 发送时延为p/b,因此发送端的发送时延为(x/p)(p/b)。但是这个绝对不是所有的发送时延,这 个仅仅是计算了从第n个分组离开发送端的时间,但是最后一个分组是不是中间还要经过(k-1) 个结点呢?因此中间会产生一个存储转发时延,即(k-l)(p/b),故总的发送时延=(x/p)(p/b)+ (k-l)(p/b)。综上所述,分组交换的总时5£=kd+(x/p)(p/b)+(k-l)(p/b)。因此,若使得分组交换的时延比电路交换的要小,那么就是kd+(x/p)(p/b)+(k-l)(p/b)<s+x/b+dk即\t(k-l)(p/b)<s"},{"id":"learncoder_113_24603","stem":"有两个网络,它们都提供可靠的面向连接的服务,一个提供可靠的字节流,另一个 提供可靠的报文流。请问两者是否相同?为什么?","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"空","type":"short_answer","answer":"不相同。在报文流中,网络保持对报文边界的跟踪;而在字节流中,网络不 作这样的跟踪。例如,一个进程向一条连接写了 1024B,稍后又写了 1024B,那么接收方共 读了 2048Bo对于报文流,接收方将得到两个报文,每个报文1024B。而对于字节流,报文 边界不被识别,接收方将全部2048B当作一个整体,在此已经体现不出原先有两个不同报文 的事实。"},{"id":"learncoder_113_24606","stem":"\t假设在地球和某行星之间建立一条传输速率为100Mbit/s的链路,从该行星到地球的距离大约是150000km,数据在链路上以光速3xl08m/s传输。1)\t试计算该链路的最小RTT。2)\t使用RTT作为延迟,计算该链路的“延迟x带宽”值。3)\t在2)中计算的“延迟x带宽”值的含义是什么?4)\t如果在月亮上用一个照相机拍摄地球的照片,并把它们以数字形式保存到磁盘上。不 妨设照片总大小为6.25MB,如果要将这些照片传向地球,试问从发送数据请求到接收方接收 完所有数据最少要花费多少时间(忽略发送方数据请求报文与接收方应答报文的长度,并且 接收方处理请求报文的时间也忽略)?","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"空","type":"short_answer","answer":"1)RTT表示往返时延,计算的最小RTT=2xl50000000m/(3xl08m/s)=lSo2)“延迟x带宽”=ls x l00Mbit/s = 100Mbit = 12.5MB。3)“延迟x带宽”的含义:收到对方响应之前所能发送的数据量。4)从发送数据请求到接收方接收完所有的数据应该分为4个部分:月球向地球发送数据 请求报文的传播时延、地球应答报文的彳专播时延、月球发送照片的发送时延、照片的传播时 延。首先需要计算发送方发送照片的发送时延,即(6.25x8Mbit)/(I00Mbit/s) = 0.5s 。由于数 据请求报文的传播时延+应答报文的传播时延+照片的传播时延=1.5RTT,因此总时间=0.5s+ 1.5s=2s。"},{"id":"learncoder_113_24609","stem":"\t在上题的分组交换网中,设报文长度和分组长度分别为x和(p+h)比特,其中p为分 组的数据部分的长度,而h为每个分组所带的控制信息固定长度,与p的大小无关。通信的 两端共经过k段链路。链路的数据传输速率为b比特/秒,结点的排队时间忽略不计。若打算 使总的时延为最小,问分组的数据部分长度p应取多大?参考答案及解析","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"空","type":"short_answer","answer":"先算出此条件下的分组交换总时延,计算如下:总时延=kd+(x/p)[(p+h)/b]+(k-l)[(p+h)/b]接下来就要用到高等数学的知识了,不详细讲述了。将p看成自变量,总时延看成函数, 两边分别对p求导,再令其值等于0,可求得p=√(xh)/(k-1)。"},{"id":"learncoder_113_24607","stem":"\t下面的过程表示源结点的一个用户发送一个信息给目标结点的一个用户所发生的事 件序列,但是顺序被打乱了,请结合本章学到的知识予以排序。①\t当信息通过源结点时,每一层都给它加上控制信息。②\t在源结点的网络用户产生信息。③\t在目标结点的网络用户接收信息。④\t信息向上通过目标结点的各个网络层次,每一层都除去它的控制信息。⑤\t信息以电信号的形式通过物理链路发送。⑥\t信息传给源结点的最高层(OSI参考模型的应用层)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"空","type":"short_answer","answer":"解析:正确的顺序如下。②一⑥一①一⑤一④一③"},{"id":"learncoder_113_24601","stem":"\t(2017年统考真题)假设OSI参考模型的应用层欲发送400B的数据(无拆分),除 物理层和应用层之外,其他各层在封装PDU时均引入20E的额外开销,则应用层数据传输 率约为( )。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":" OSI参考模型共7层,除去物理层和应用层,剩5层。它们会向PDU引 入20Bx5=100B的额外开销。应用层是最顶层,所以它的数据传输率为400B/500B=80%o简答题","type":"choice","options":{"D":"91%","C":"87%","B":"83%","A":"80%"},"answer":"A"},{"id":"learncoder_113_24604","stem":"什么叫发送时延?什么叫传播时延?如果收发两端之间的传输距离为10km,信号在媒体上的传输速率为2.0xl05km/s,数据长度为1000B,数据发送速率为lOOkbit/s,试计算它 的发送时延和传播时延。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"空","type":"short_answer","answer":"发送时延是指结点在发送数据时使数据块从结点进入到传输介质所需要的时 间,此题的发送时延=数据块长度/信道带宽=1000B/100kbit/s=1000x8bit/100kbit/s=0.08s传播时延是指电磁波在信道中传播一定的距离所需要的时间,此题的传播时延T言道长 度 /信号在媒体上的传输速率= 10km/(2x 10^5km/s)=0.00005s"},{"id":"learncoder_113_24599","stem":"(2014年统考真题)在OSI参考模型中,直接为会话层提供服务的是( )。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"直接为会话层提供服务的即会话层的下一层,是传输层。","type":"choice","options":{"B":"表不层","A":"应用层","D":"网络层","C":"传输层"},"answer":"C"},{"id":"learncoder_113_24596","stem":"(2011年统考真题)TCP/IP模型的网络层提供的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"首先,网络层的传输采用的是IP分组,IP分组中头部含有源IP地址和目 的IP地址,并不是一个虚电路号,所以网络层采用的是数据报服务;其次,IP分组的头部也 没有对分组进行编号和提供校验字段,所以网络层提供的是不可靠服务;最后,IP分组头部 也没有相关的建立连接的字段,所以网络层属于无连接。其实,在知识点讲解部分的表1・3 中已经很明确地说明了 TCP/IP模型的网络层仅提供无连接的服务。","type":"choice","options":{"A":"无连接不可靠的数据报服务","C":"有连接不可靠的虚电路服务","B":"无连接可靠的数据报服务","D":"有连接可靠的虚电路服务"},"answer":"A"},{"id":"learncoder_113_24597","stem":"(2012年统考真题)在TCP/IP体系结构中,直接为ICMP提供服务的协议是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"选项A: PPP在TCP/IP体系结构中属于网络接口层协议(在ISO/OSI体 系结构中属于数据链路层协议),所以PPP为网绻层提供服务。MB: ICMP属于网络层协议,ICMP报文直接作为IP数据报的数据,然后再加上IP 数据报的首部进行传送,所以IP直接为ICMP提供服务。选项C和D: UDP和TCP都属于传输层协议,为应用层提供服务。","type":"choice","options":{"C":"UDP","A":"PPP","D":"TCP","B":"IP"},"answer":"B"},{"id":"learncoder_113_24600","stem":"(2016年统考真题)图1-2所示网络中,在OSI参考模型中,Rl、Switch、Hub实现 的最高功能层分别是()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第1章)/image1.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"集线器是一个多端口的中继器,工作在物理层。以太网交换机是一个多 端口的网桥,工作在数据链路层。路由器是物理层设备,它实现了网络模型的下三层,即物 理层、数据链路层和网络层。题中Rl、Switch和Hub分别是路由器、交换机和集线器,实 现的最高层功能分别是网络层(即3)、数据链路层(即2)、物理层(即1)。","type":"choice","options":{"C":"3、 2、 1","B":"2、 2、 2","D":"3、 2、 2","A":"2、 2、 1"},"answer":"C"},{"id":"learncoder_113_24595","stem":"当一台计算机从FTP服务器下载文件时,在该FTP服务器上对数据进行封装的5个 转换步骤是()。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"应用层是用户的数据,数据+传输层首部=扌艮文;报文+网络层首部=IP分 组;IP分组+数据链路层首部与尾部=数据帧;数据帧到了物理层变成比特流。注意^物理层是不参与封装的,物理层以0、1比特流的形式透明地传输数据链路层递交 的帧。网络层、应用层都把上层递交的数据加上首部,数据链路层接收上层递交的数据不但 要给其加上首部,还要加上尾部。","type":"choice","options":{"B":"数据、IP分组、报文、数据帧、比特流","A":"数据、报文、IP分组、数据帧、比特流","C":"报文、数据、数据帧、IP分组、比特流","D":"比特流、IP分组、报文、数据帧、数据"},"answer":"A"},{"id":"learncoder_113_24598","stem":"(2013年统考真题)在OSI参考模型中,下列功能需由应用层的相邻层实现的是 ( )。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题有两个考点:1)\t应用层相邻层是哪一层?2)\t该层主要的功能是什么?应用层相邻层为表示层,表示层是OSI 7层协议的第6层。表示层的目的是表示出用户 看得懂的数据格式,实现与数据表示有关的功能,主要完成数据字符集的转换、数据格式化 和文本压缩、数据加密、解密等工作,因此选择B选项。对话管理是会话层(会话和对话听 起来很像)完成的功能;路电选择是网络层完成的功能;可靠数据传输是传输层完成的功能。","type":"choice","options":{"A":"对话管理","D":"可靠数据传输","B":"数据格式转换","C":"路由选择"},"answer":"B"},{"id":"learncoder_113_24594","stem":"当数据由主机A送传至主机B时,不参与数据封装工作的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"知识点讲解中提到过,从上层往下层传输时,需要加上一个首部,数据 链路层不仅要加首部还要加尾部。而数据链路层传输到物理层,仅仅是将数据链路层中的帧 变成比特流的形式在传输介质中传输,不需要加首部,即不需要数据封装。","type":"choice","options":{"D":"传输层","A":"物理层","C":"网络层","B":"数据链路层"},"answer":"A"},{"id":"learncoder_113_24592","stem":"\t在n个结点的星形拓扑结构中,有(\t)条物理链路。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"星形拓扑结构是用一个结点作为中心结点,其他结点直接与中心结点相 连构成的网络。中心结点可以是文件服务器,也可以是连接设备。常见的中心结点为集线器。 所以,本题采用一个结点作为中心结点,其他口-1个结点都分别与其相连。","type":"choice","options":{"C":"nx(n-l)","A":"n-1","B":"n","D":"nx(n+1)/2"},"answer":"A"},{"id":"learncoder_113_24593","stem":"(\t)属于TCP/IP协议簇的应用层应用服务元素。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"5层参考模型各层的总结,见表1-2。","type":"choice","options":{"A":"文件传输协议FTP","B":"用户数据报协议UDP","D":"地址解析协议ARP","C":"控制报文协议ICKtf"},"answer":"A"},{"id":"learncoder_113_24591","stem":"\t以下说法错误的是(\t)。I.广播式网络一般只包含3屠,即物理层、数据链路层和网络层II.Internet的核心协议是TCP/IPIII.在Internet中,网络层的服务访问点是端口号","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"由于广播式网络并不存在路由选择问题,故没有网络层,故I错误;Internet 的核心协议是TCP/IP,故II正确;在hitemet中,网络层的服务访问点是IP地址,传输层的 服务访问点是端口号,故HI错误。","type":"choice","options":{"C":"I 、III","D":"I 、II","A":"I、II、III","B":"III"},"answer":"C"},{"id":"learncoder_113_24589","stem":"\t局域网和广域网之间的差异是()。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"广域网(WAN)和局域网(LAN)之间的差异是它们覆盖的范围不同(见 17题解析),除此之外它们使用的协议也有差异。由于广域网通信线路长,信号可靠度不高, 因此运用了一系列差错控制、流量控制手段。局域网由于其通信线路距离较短,信道质量较 高,因此局域网协议的目标主要是实现信道复用和提高速度,而局域网和广域网使用的传输 •介质可能是相同的。","type":"choice","options":{"A":"所使用的传输介质不同","D":"B和C","C":"所使用的协议不同","B":"所覆盖的范围不同"},"answer":"D"},{"id":"learncoder_113_24587","stem":"TCP/IP模型中的网络接口层对应OSI参考模型的( )oI.物理层II.数据链路层\tIII.网络层\tIV.传输层","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"OSI参考模型与TCP/IP 模型的对应关系如图1・4所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第1章)/image3.png'/>","type":"choice","options":{"C":"I、 In","B":"II、 m","A":"I、 II","D":"II 、Iv"},"answer":"A"},{"id":"learncoder_113_24590","stem":"\t因特网采用的核心技术是()","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"在互联网上,计算机之间进行信息交换和资源共享时必须要有一个共同 遵守的约定,不然数据是没有办法传输的,而这种约定在互联网中称为协议。当前互联网普 遍采用分组交换技术的TCP/IP,它属于互联网的核心技术。","type":"choice","options":{"D":"光纤技术","C":"远程通信技术","A":"TCP/IP","B":"局域网技术"},"answer":"A"},{"id":"learncoder_113_24588","stem":"\t一般来说,学校的网络按照空间分类属于(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"校园网在空间距离上划 分应该属于局域网,见表1-4。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第1章)/image4.png'/>","type":"choice","options":{"D":"广域网","A":"多机系统","C":"城域网","B":"局域网"},"answer":"B"},{"id":"learncoder_113_24586","stem":"TCP/IP模型中一共有(\t)层。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"在考研大纲中,考到的 有物理层、数据链路层、网络层、传输层 和应用层,不少同学会选5层,其实TCP/IP 模型只有4层,而现在研究5层仅仅是为 了读者更清楚地了解TCP/IP模型的工作原 理,千万不要混淆。","type":"choice","options":{"B":"4","C":"5","A":"3","D":"7"},"answer":"B"},{"id":"learncoder_113_24583","stem":"计算机网络可分为通信子网和资源子网。下列属于通信子网的是(\t)。I .网桥\tII.交换机Iii.计算机软件\tIV.路由器","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"参考第4题的解析可知,网桥、交换机、路由器都属于通信子网,而只 有计算机软件属于资源子网。","type":"choice","options":{"C":"I 、III、Iv","D":"I 、 II、\tIII","A":"I、II、IV","B":"II、III、IV"},"answer":"A"},{"id":"learncoder_113_24580","stem":"(2010年统考真题)下列选项中,不属于网络体系结构所描述的内容是( )。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"显然网络的层次(如7层结构和5层结构)、每一层使用的协议、每一层 必须完成的功能在教材中都有提及,唯有协议的内部实现细节没有提及(内部实现细节由工 作人员完成,我们并不需要知道)。","type":"choice","options":{"D":"每一层必须完成的功能","B":"每一层使用的协议","A":"网络的层次","C":"协议的内部实现细节"},"answer":"C"},{"id":"learncoder_113_24581","stem":"在OSI参考模型中,第N层与它之上的第N+1层的关系是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"协议与服务的区别:协议是对等实体(比如两栋7层的楼房,两栋楼房 的相同层即为对等实体)之间进行逻辑通信而定义的规则或规约的集合,其关键要素是语法、 语义和同步;而服务是指一个系统中的下层向上层提供的功能。协议和服务的关系:一个协 议包括两个方面,即对上层提供服务和对协议本身的实现。协议与服务的关系如图1・3所示, 所以第N层为第N+1层提供服务。","type":"choice","options":{"A":"第N层为第N+1层提供服务","D":"第N层使用第N+1层提供的协议","B":"第N+1层将给从第N层接收的报文添加一个报头","C":"第N层使用第N+1层提供的服务"},"answer":"A"},{"id":"learncoder_113_24584","stem":"(\t)是计算机网络中的OSI参考模型的3个主要概念。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"计算机网络中要做到有条不紊地交换数据,就必须遵守一些事先约定好的原则,这些原则就是协议。在协议的控制下,两个对等实体之间的通信使得本层能够向上 一层提供服务。要实现本层协议,还需要使用下一层提供的服务,而提供服务就是交换信息, 而要交换信息就需要通过接口(这里的接口和计算机组成的接口完全不同,不要混淆)去交 换信息,所以说服务、接口、协议是计算机网络中的OSI参考模型的3个主要概念。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第1章)/image2.png'/>","type":"choice","options":{"B":"结构、模型、交换","A":"服务、接口、协议","C":"子网、层次、端口","D":"广域网、城域网、局域网"},"answer":"A"},{"id":"learncoder_113_24579","stem":"设某段电路的传播时延是20ms,带宽为20Mbit/s,则该段电路的时延带宽积为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"由公式可知时延带宽积=传播时延x信道带宽,所以时延带宽积=20x10\"3x 20xl06bit=4xl05bito","type":"choice","options":{"D":"8 x l0^5bit","C":"1 x 10^5bit","A":"2 x l0^5bit","B":"4 x l0^5bit"},"answer":"B"},{"id":"learncoder_113_24582","stem":"(2009年统考真题)在OSI参考模型中,自下而上第一个提供端到端服务的是(\t)o","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"在OSI参考模型中,传输层提供了端口号,实现了为应用进程之间提供 端到端的逻辑通信。虽然选项中没有网络层,但是要提示一下,网络层仅仅是为主机之间提 供逻辑通信。","type":"choice","options":{"C":"会话层","B":"传输层","A":"数据链路层","D":"应用层"},"answer":"B"},{"id":"learncoder_113_24585","stem":"\t计算机网络拓扑结构主要取决于它的( )。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"计算机网络拓扑结构是通过网中结点(路由器、主机等)与通信线路(网 线)之间的几何关系(如总线型、环形)表示的网络结构,而通信子网包括物理层、数据链 路层、网络层,而诸如集线器、交换机、路由器就是分别在物理层、数据链路层、网络层工 作的,所以拓扑结构主要是指通信子网的拓扑结构。","type":"choice","options":{"C":"通信子网","D":"交换机","A":"资源子网","B":"路由器"},"answer":"C"},{"id":"learncoder_113_24573","stem":"(\t)不是对网络模型进行分层的目标。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"这道题变相地考查哪项不属于网络体系结构所描述的内容,此题2010年 统考考查过。计算机网络的各层及其协议的集合称为网络体系结构,网络体系结构是抽象的, 它不应该包括各层协议及功能的具体实现细节(定义功能执行的方法)。这些内部实现细节应 该由工作人员完成,我们并不需要知道。","type":"choice","options":{"A":"提供标准语言","D":"增加功能之间的独立性","B":"定义功能执行的方法","C":"定义标准界面"},"answer":"B"},{"id":"learncoder_113_24576","stem":"计算机网络最基本的功能是(\t)。I.流量控制\t\tII.路由选择III.分布式处理\t\tIv.传输控制","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"数据通信是计算机网络最基本的功能,包括连接控制、传输控制、差错控 制、流量控制、路由选择、多路复用等子功能。可见I、II、IV都属于数据通信,即最基本 的功能,而in只是计算机网络的功能,不是最基本的功能。","type":"choice","options":{"C":"I、IV","B":"I 、III、IV","A":"I 、 II、 IV","D":"III、IV"},"answer":"A"},{"id":"learncoder_113_24574","stem":"计算机网络的基本分类方法主要有两种:一种是根据网络所使用的传输技术;另一种 是根据()。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"计算机网络常采用的分类方法有两种。根据网络所使用的传输技术分类: 广播式网络(BroadcastNetworks)和点对点网络(Point-to-PointNetworks);根据网络的覆盖 范围与规模分类:广域网(WAN)、局域网(LAN)和城域网(MAN)。","type":"choice","options":{"B":"网络操作系统类型","C":"覆盖范围与规模","D":"网络服务器类型与规模","A":"网络协议"},"answer":"C"},{"id":"learncoder_113_24577","stem":"\t世界上第一个计算机网络是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"由于该题属于大纲内容,必须提示,只需记住即可(一般只需记住带有“第 一”字眼的概念)。","type":"choice","options":{"A":"ARPANET","C":"NSFnet\tD","D":"ERNET","B":"因特网"},"answer":"A"},{"id":"learncoder_113_24575","stem":"计算机网络从逻辑功能上可分为( )。I.资源子网\tii.局域网 \tiii.通信子网\tiv.广域网","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"这种题型变相地考了多项选择,是出题频率较高的一种题型,它全面地考 查了考生对该知识点的掌握情况。从计算机网络组成的角度来看,典型的计算机网络从逻辑 功能上可以分为两部分:资源子网和通信子网。资源子网由主计算机系统、终端、终端控制 器、联网外部设备、各种软件资源与信息资源等组成。资源子网负责全网的数据处理业务, 负责向网络用户提供各种网络资源与网络服务。通信子网(只有物理层、数据链路层和网络 层)由通信控制处理机、通信线路与其他通信设备组成,负责完成网络数据传输、转发等通 信处理任务。","type":"choice","options":{"B":"I、nI","C":"I、IV","A":"II、IV","D":"III、IV"},"answer":"B"},{"id":"learncoder_113_24578","stem":"物理层、数据链路层、网络层、传输层的传输单位(或PDU)分别是(\t)。I .帧\t\tII .比特\tIII.报文段 \tIv.数据报","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"物理层的传输单位为比特,数据链路层的传输单位为帧,网络层的传输单 位为IP数据报(或者数据报),传输层的传输单位为报文段(有人可能会考虑传输层不是有 UDP数据报吗?难道UDP不是在传输层吗?确实是这样的,但是传输层传输单位的名称还 是称为报文段比较准确,记住即可)。","type":"choice","options":{"A":"I、 II、 Iv、III","B":"II、 I 、 Iv、III","D":"III、Iv、II、I","C":"I、Iv、II、III"},"answer":"B"},{"id":"learncoder_113_24572","stem":"比特的传播时延与链路带宽的关系是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"传播时延=信道长度/电磁波在信道上的传播速率,而链路的带宽仅能衡量空发送时延,所以说比特的传播时延与链路带宽没有任何关系。\t","type":"choice","options":{"A":"没有关系","C":"正比关系","D":"无法确定","B":"反比关系"},"answer":"A"},{"id":"learncoder_113_22531","stem":" 在网络中提供的服务有可靠服务和不可靠服务,请评述如何理解这两种服务在网络数据传 输中的作用。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"22. 无","type":"short_answer","answer":"不可靠服务是指网络不能保证数据正确、可靠地传送到目的地,可靠服务则由于具 备检错、纠错、应答机制因此能保证数据正确可靠地传送到目的地。在采用不可靠服务的网络 中,要通过应用层的程序及用户再提供进一步的保障。具体采用哪种服务要根据实际的数据传输需求来决定,综合考虑传输代价、传输速度等 指标。"},{"id":"learncoder_113_22527","stem":"当两台计算机进行文件传输时,为了中间出现网络故障而重传整个文件的情况,可以通过在文件中插入同步点来解决,这个动作发生在(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是OSI参考模型知识点。在OSI参考模型中,会话层的两个主要服务是 会话管理和同步,因此答案B正确。","type":"choice","options":{"B":"会话层","A":"表示层","C":"网络层","D":"应用层"},"answer":"B"},{"id":"learncoder_113_22526","stem":"在OSI参考模型中,当数据从一个系统上的用户A传递到远程另外一个系统的用户B时,不对数据进行封装的层次是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是OSI参考模型知识点。在OSI参考模型中,只有物理层是按照无结构 的比特流进行数据传输,其他各层均对数据进行封装,因此答案A正确。","type":"choice","options":{"D":"传输层","A":"物理层","C":"网络层","B":"数据链路层"},"answer":"A"},{"id":"learncoder_113_22529","stem":"下列关于TCP/IP参考模型的说法中,不正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是TCP/IP参考模型知识点。TCP/IP参考模型在应用层、传输层和互联 网层均定义了相应的协议和功能,但是网络接口层则沿用了 OSI参考模型的相应标准,并没有定 义其功能、协议和实现方式,因此答案C正确。","type":"choice","options":{"A":"TCP/IP参考模型是因特网事实上的标准","B":"TCP/IP参考模型是在OSI参考模型基础之上发展起来的,是一个协议的集合","C":"TCP/IP参考模型对其中4个层次都定义了相应的协议和功能","D":"TCP/IP参考模型可以实现异构网络之间的数据通信"},"answer":"C"},{"id":"learncoder_113_22528","stem":"对于0SI参考模型和TCP/IP参考模型在网络层和传输层的提供的服务,正确的说法是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是OSI和TCP/IP参考模型知识点。在0SI参考模型中,网络层支持无 连接和面向连接的方式,传输层仅有面向连接的通信。TCP/IP模型中网络层只支持无连接的通 信模式,在传输层则两种模式都支持,因此答案B正确。","type":"choice","options":{"A":"0SI模型在传输层提供无连接和面向连接的服务,在网络层提供无连接服务","B":"TCP/IP模型在网络层提供无连接服务,在传输层提供无连接和面向连接的服务","C":"OSI模型在网络层和传输层均可提供无连接和面向连接的服务","D":"TCP/IP模型在网络层和传输层均可提供无连接和面向连接的服务"},"answer":"B"},{"id":"learncoder_113_22524","stem":"对于0SI参考模型的低三层,TCP/IP参考模型内对应的层次有(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是OSI和TCP/IP参考模型知识点。由TCP/IP参考模型可知,其对应 OSI低三层的分别是互联网层和网络接口层,因此答案B正确。","type":"choice","options":{"C":"网络层、数据链路层、物理层","B":"互联网层、网络接口层","D":"传输层、网络接口层、物理层","A":"传输层、互联网层、网络接口层"},"answer":"B"},{"id":"learncoder_113_22523","stem":"在0SI参考模型中,负责数据从源节点到目的节点传输的层是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是OSI参考模型知识点。网络层负责源节点至目的节点的数据传输,包 括路由选择、拥塞控制等功能,因此答案A正确。","type":"choice","options":{"A":"网络层","C":"会话层","D":"表示层","B":"传输层"},"answer":"A"},{"id":"learncoder_113_22522","stem":"在0SI参考模型中,完成数据压缩的层是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是OSI参考模型知识点。表示层处理OSI系统之间用户信息的表示问 题,数据压缩是其主要功能之一,因此答案D正确。","type":"choice","options":{"A":"网络层","C":"会话层","D":"表示层","B":"传输层"},"answer":"D"},{"id":"learncoder_113_22525","stem":"下列协议中,不属于TCP/IP参考模型中互联网层的协议有(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是TCP/IP参考模型知识点。TCP/IP参考模型中,互联网层的主要协议 包括IP、ICMP、ARP、RARP,SNMP是应用层的协议,因此答案B正确。","type":"choice","options":{"B":"SNMP","A":"IP","C":"ICMP","D":"RARP"},"answer":"B"},{"id":"learncoder_113_22518","stem":"在分层的网络体系结构中,下一层实体向上一层实体提供服务是通过(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是计算机网络分层结构知识点。接口描述的是同一计算机相邻层之间 的通信规则;SDU(服务数据单元)是为完成用户所要求的功能而应传送的数据;SAP是服务访问 点,下层通过其为上层提供服务;PCI是协议控制信息,控制协议操作的信息,因此正确答案 为C。","type":"choice","options":{"B":"SDU","C":"SAP","A":"接口","D":"PCI"},"answer":"C"},{"id":"learncoder_113_22521","stem":"对于可靠服务和不可靠服务,正确的理解是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是计算机网络服务知识点。数据在计算机网络的传输过程中,数据出错 是很难避免的,只有通过检错、纠错、应答机制才能保证数据正确地传输,这种数据传输是可以准 确地传输到目的地的。不可靠月艮务是出于'速度、成本等原因的考虑忽略了应该有的数据传输保 证机制,但是可以通过应用或用户判断数据的准确性,再通知发送方采取措施,从而把不可靠的 服务变成可靠的服务,因此答案D正确。","type":"choice","options":{"D":"对于不可靠的网络,可以通过应用或用户来保障数据传输的正确性","B":"如果网络是不可靠的,那么用户只能冒险使用并无更好的办法","C":"可靠性是相对的,也不一定完全保证数据准确传输到目的地","A":"可靠服务是通过高质量的连接线路来保证数据可靠传输"},"answer":"D"},{"id":"learncoder_113_22520","stem":"在计算机网络协议中(\t)规定了数据和控制信息的格式。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是计算机网络协议知识点。通过接口方式连接上下层的目的是保证一 定灵活性,因此A正确。结构上各层分离,各层采用最合适的技术来实现,易于维护和实现,B正 确。层次划分过多各层的定义就越清晰,但是总体运行效率会降低,因此C不正确,功能定义 独立于身体实现是分层结构定义的基本原则,D正确。","type":"choice","options":{"A":"语义实体","B":"语法","C":"服务","D":"词法"},"answer":"B"},{"id":"learncoder_113_22519","stem":"在下列关于分层体系结构的说法中,不正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是计算机网络分层结构知识点。协议是两个系统之间通信的约定,由语 法、语义和时序三部分构成。语法部分规定传输数据的格式;语义部分规定所要完成的功能;时 序部分规定执行各种操作的条件、顺序关系等。因此B正确。","type":"choice","options":{"D":"各层功能的定义独立于具体实现的方法","A":"各层之间只要接口关系不变,某一层改变时,其上下层不受影响","C":"层次越多越灵活,效率越高","B":"结构分离使得实现和维护变得容易"},"answer":"C"},{"id":"learncoder_113_22515","stem":"在网络的分类标准中,影响网络传输技术、组网方式以及管理和运营方式的标准是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是计算机网络分类知识点。影响网络分类的标准很多,其中物理范围对 传输技术、组网方式以及管理和运营方式的影响是最大的。拓扑结构、使用目的和传输技术都只 是在局部影响上述因素。因此D正确。","type":"choice","options":{"A":"拓扑结构","D":"物理范围","B":"使用目的","C":"传输技术"},"answer":"D"},{"id":"learncoder_113_22517","stem":"分组交换技术首先出现在(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是计算机网络发展历史知识点。ARPANET是Internet的前身,为了实 现军事研究目的,分组交换是其采取的主要技术之一。MILNET、NSFNET以及Internet均在其基 础之上发展,因此A正确。","type":"choice","options":{"C":"NSFNET","A":"ARPANET","B":"MILNET","D":"Internet"},"answer":"A"},{"id":"learncoder_113_22516","stem":"在制定网络标准的组织当中,负责因特网域名和地址管理的机构是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是计算机网络标准化和相关组织知识点。ISO制定了 OSI七层体系结 构,IEEE制定了局域网802系列标准,ISOC主要负责协调因特网合作,IANA则负责因特网域名 和地址管理工作,因此选C正确。","type":"choice","options":{"C":"IANA","A":"ISO","D":"ISOC","B":"IEEE"},"answer":"C"},{"id":"learncoder_113_22511","stem":"下列说法中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的知识点是计算机网络协议的概念。协议是不同系统对应层之间的数据 交换规则歹不是某一方内部的单独规定,因此A错。接口是相邻层协议之间的通信约定,因此B、 G错。网络体系结构中,下层为上层提供服务,在发送方,每一层把从上一层接收到的数据(服务 数据单元)加上控制信息?变成协议数据单元,交给下一层发送,接收时相反处理,选项D正确。","type":"choice","options":{"B":"接口实现的是人与计算机之间的交互","C":"在应用层与网络层之间的接口上交换的是包","D":"上一层的协议数据单元就是下一层的服务数据单元","A":"网络层的协议是网络层内部处理数据的规定"},"answer":"D"},{"id":"learncoder_113_22510","stem":"网络硬件中,通信子网的主要组成是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的知识点是计算机网络的概念。通信子网是由通信链路和通信节点构成 的,主要完成信息分组的传递工作。选项A超岀了通信子网的定义范围,D缺少了网络节点,C 显然错。","type":"choice","options":{"D":"通信链路和终端","C":"网络体系结构和网络协议","B":"网络节点和通信链路","A":"主机和局域网"},"answer":"B"},{"id":"learncoder_113_22513","stem":"在TCP/IP协议栈中,解决主机之间通信问题的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是计算机网络分层结构知识点。不存在网络接口层,A错。传输层解决 的是不同主机用户进程之间的通信,因此C错。应用层解决的是用户和网络的接口问题,D错。","type":"choice","options":{"C":"传输层","D":"应用层","B":"网络层","A":"网络接口层"},"answer":"B"},{"id":"learncoder_113_22512","stem":"为了使两个采用不同高层协议的主机能通信,在两个网络之间要采用(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的知识点是网络节点的概念。网桥、交换机工作在数据链路层,A、B错。 路由器工作在网络层,D错。网关工作在传输层。","type":"choice","options":{"C":"网关","B":"网桥","A":"交换机","D":"路由器"},"answer":"C"},{"id":"learncoder_113_22514","stem":"中继器属于(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.计算机网络体系结构","analysis":"此题考查的是计算机网络体系结构知识点。中继器的作用是对物理信号进行放大, 属于物理层解决的问题范畴〜因此A、B、C错。","type":"choice","options":{"C":"介质访问控制子层","D":"物理层","B":"网络层","A":"数据链路层"},"answer":"D"},{"id":"learncoder_114_24660","stem":"画出1100011001的非归零码、曼彻斯特编码和差分曼彻斯特编码。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"空","type":"short_answer","answer":"1100011001的非归零码、曼彻斯特编码和差分曼彻斯特编码如图2-18所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第2章)/image6.png'/>"},{"id":"learncoder_114_24663","stem":"对各类通信子网定义下列参数:N=两个给定站点之间所经过的段数1/=报文长度(L为分组大小P的整数倍),单位:位8=所有线路上的数据传输速率,单位:位/秒卞=分组大小(PWL),单位:位H=每个分组的分组头,.单位:位Sl=线路交换的呼叫建立时间,单位:秒S2=>电路的呼叫建立时间,单位:秒D=各段内的传播延迟,单位:秒1)\t写出电路交换、报文交换、虚电路分组交换(虚电路分组头可忽略)和数据报分组交 换的端到端延迟时间的表达式。2)\t求 N=4, L=30720, B=9600, P=1024, H=16, Sl=0.2, S2=0.1, D=0.001 时,上述 4 种交换方式的总延迟时间。参考答案及解析","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"空","type":"short_answer","answer":"1)\t电路交换:S1+L/B+ND报文交换:N(L/B+D)虚电路分组交换:S2+L/B+ND+(N-1)P/B数据报分组交换:(L/P)((P+H)/B)+ND+(N-1)(P+H)/B2)将数据代入式子,可以得到总延迟时间分别为电路交换:Sl+L/B+ND=(0.2+30 720/9600+4x0.00l)s=3.404s报文交换:N(L/B+D)=4x(30 720/9600+0.001)s=12.804s虚电路分组交换:S2+LZB+ND+(N-l)P/B=(0.1+30 720/9600+4x0.001+3xl024/9600)s=3.624s数据报分组交换:(L/P)((P+H)/B)+ND+(N-l)(P+H)/B=(30x0・108+4x0.001+3x0.108)s=3.568s"},{"id":"learncoder_114_24657","stem":"(2015年中科院真题)公用电话交换 网(PSTN)釆用了(\t)交换方式。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"电路交换在通信之前要在通信双方之间建立一条被双方独占的物理通路。 公用电话网络正是最早使用电路交换传输方式的网络。简答题","type":"choice","options":{"C":"信元","B":"报文","A":"分组","D":"电路"},"answer":"D"},{"id":"learncoder_114_24658","stem":"数据传输率为10MbIt/s的以太网的码元传输速率是多少?","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"49.","type":"short_answer","answer":"解答此题需要清楚以太网的编码方式为曼彻斯特编码,即将每个码元分成2 个相等的间隔。码元1是在前一个间隔为高电平而后一个间隔为低电平;码元0正好相反, 从低电平变到高电平。掌握了这个,这道题就很简单了。首先码元传输速率即波特率,以太 网使用曼彻斯特编码,就意味着发送的每一位都有两个信号周期。标准以太网的数据传输率 是lOMbIt/s,因此码元传输速率是数据传输速率的2倍,即20MBaudo也就是说,码元传输 速率为20MBaudo导 可能疑问点:知道一个码元可以携带nbIt,但从没有听说过lbIt要多少个码元来表 示。是我理解错了,还是本身就是这样?解析:不少考生脑海里总是觉得码元应该至少携带lbIt或者更多的比特,怎么可能在数 值上波特率还大于比特率。其实考生不必纠结于此,解释如下:现在先不谈曼彻斯特编码,即那种需要同步信号的。假设在二进制的情况(正常情况) 阳 下,一个码元携带lbIt数据,这样码元传输率在数量上就等于数据传输率。但是现在不一样了,曼彻斯特编码需要用一半的码元来表示同步信号(关键点),一半码元来传输数据(可以 认为2个码元传lbIt数据),这样要达到lOMbIt/s的数据传输率,码元传输率就应该是 20MBaud,解释完毕。不要试图去研究透彻,记住就好!"},{"id":"learncoder_114_24661","stem":"对于带宽为3kHz的信道,若用4种不同的状态来表示数据:1)在不考虑热噪声的情况下,该信道的最大数据传输速率是多少?2)若信道的信噪比为30dB,则该信道的最大数据传输速率是多少?","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"空","type":"short_answer","answer":"1)\t在无噪声的理想信道中,最大数据传输速率需要奈奎斯特定理来计算,它描述了有限 带宽、无噪声的理想信道的最高码元速率与信道带宽的关系。简而言之,如果系统的带宽为 BHz,则最高码元速率为2BHzo故本题所求的最大传输速率为Cmax=2x3xlog24kbIt/s=12kbIt/so2)\t在有噪声的信道中,最大数据传输速率需根据香农定理来计算。香农定理描述了一个 有噪声的信道中最大容量和带宽之间的关系,该公式为Cmax=Wxlog2(l+S/N) (bIt/s)式中,Cn^表示最大数据传输率;W表示信道带宽;S表示信道内所传送信号的平均功率; N为信道内的噪声功率;S/N表示信噪比。这里需要注意的是,题中给出的信噪比的单位是 分贝(dB),使用香农公式时需要将其转换为信噪功率比,转换公式为信噪比(dB)=101ogIo(S/N) (dB)由于信噪比为30dB,可求得S/N=1000,因此本题所求的最大数据传输速率为Cmax=Wxlog2(l+S/N)~30kbIt/s"},{"id":"learncoder_114_24659","stem":"试在下列条件下比较电路交换和分组交换。假设要传送的报文共x比特。从源点到 终点共经过k段链路,每段链路的传播时延为d秒,数据传输率为b比特每秒。在电路交换 时电路的建立时间为s秒。在分组交换时分组长度为p比特,且各结点的排队等待时间可忽 略不计。问:在怎样的条件下,分组交换的时延比电路交换的要小?","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"空","type":"short_answer","answer":"1)\t电路交换电路交换的过程:先建立连接,建立连接之后再发送数据(发送时延)。这里需要注意, 采用电路交换时,中间经过的结点是不需要存储转发的,这点与分组交换不一样。下面分别 计算。建立连接的时间:So发送时延=报文长度/数据传输率=x/b o传播时延=每段链路的传播时延x总的链路数=dk。综上所述,电路交换的总时延=s+x/b+dk,单位是秒。2)\t分组交换分组交换的过程:分组交换无需建立连接,直接发送。所以重点在于计算传播时延与发 送时延(分组每经过一个结点都需要存储转发)。下面分别计算(计算之前建议大家画一个草 图,从图中应该很容易地看出k段链路有k+1个结点。也就是说,除了发送端与接收端,中 间还有k-l个结点)。传播时延:假设有n个分组,虽然这n个分组都会有传播时延,但是仔细想想,是不是 只需计算最后一个分组的传播时延?因为前n-l个分组在传播时,发送端还在发送,时间是 重叠的,无需重新计算,所以只需计算最后一个分组的传播时延,则传播时延为kd。发送时延:应该计算发送端的发送时延,假设有n个分组,则口哑,而每个分组的发送 时延为p/b,所以发送端的发送时延为(x/p)x(p/b)。但是这个绝对不是所有的发送时延,仅仅 是计算了从第n个分组离开发送端的时间,但是最后一个分组是不是中间还要经过k-l个结 点?所以中间会产生一个存储转发时延,即(k-l)x(p/b),总的发送时延=(x/p)x(p/b)+(k-l)x (p/b)o综上所述,分组交换的总时延=kd+(x/p)x(p/b)+(k-rl)x(p/b)。 所以要使分组交换的时延比电路交换的要小,也就是:kd+(x/p)*(p/d)+(k-1)*(p/d)<s+x/b+dk,即(k-1)*(p/d)<s"},{"id":"learncoder_114_24662","stem":"设信号脉冲周期为0.002s,脉冲信号有效值状态个数为8,请回答下列问题:1)\t如果用二进制代码表示上述信号,一个脉冲信号需要用几位四进制代码表示?2)\t用四进制代码表示上述信号,其数据传输速率是多少?","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"空","type":"short_answer","answer":"1)设一个脉冲信号需要用四进制代码表示的位数为M,因为 log44<log48<log416所以M=2,即需要用2位四进制代码表示。2)设数据传输速率为 S,则 S=[(l/0.002)xM]bIt/s-1000bIVso"},{"id":"learncoder_114_24653","stem":"(2013年统考真题)主机甲通过1个路由器(存储转发方式)与主机乙互连,两段 链路的数据传输速率均为10MbIt/s,主机甲分别采用报文交换和分组大小为lOkbIt的分组交 换向主机乙发送1个大小为8MbIt (1M=1O6)的报文。若忽略链路传播延迟、分组头开销和 分组拆装时间,则两种交换方式完成该报文传输所需的总时间分别为( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"当采用报文交换时,只需考虑两次发送时延,一次是在主机甲,一次是 在路由器(因为采用了存储转发方式)。每次的发送时延都是8MbItJ0MbIt/s=800ms,所以当 采用报文交换时,完成该报文传输所需的总时间共计1600mso当采用分组交换时,每个分组大小为lOkbIt,发送时延为10kbIt/10MbIt/s=lms,共计800 个分组。其实这里采用了流水线的方式工作,当第N个分组在路由器转发时,第N+1个分组 在主机甲发送(因为忽略传播时延)。所以除了第1个分组需要占用2个发送时延,以后每1 个发送时延都会有1个分组到达主机乙,共计2ms+ (800-1) xlms=801nISo","type":"choice","options":{"C":"1600ms、800ms","D":"1600ms、801ms","B":"801ms、1600ms","A":"800ms、 1600ms"},"answer":"D"},{"id":"learncoder_114_24654","stem":"(2014年统考真题)下列因素中,不会影响信道数据传输速率的是( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"由香农定理可知,信噪比和频率带宽都可以限制信道的极限传输速率, 所以信噪比和频率带宽对信道的数据传输速率是有影响的,A、B错误;信道的传输速率实际 上就是信号的发送速率,而调制速度也会直接限制数据的传输速率,C错误;信号的传播速 度是信号在信道上传播的速度,与信道的发送速率无关,选D。","type":"choice","options":{"B":"频率宽带","C":"调制速率","D":"信号传.播速度","A":"信噪比"},"answer":"D"},{"id":"learncoder_114_24655","stem":"(2015年统考真题)使用两种编码方案对比特流01100111进行编码的结果如图2-17 所示,编码1和编码2分别是()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第2章)/image5.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":" NRZ是最简单的串行编码技术,用两个电压来表示两个二进制数,如高 电平表示1,低电平表示0,题中编码1符合。NRZ-I是用电平的一次翻转来表示1,与前一 个NRZJ电平相同的电平表示0。曼彻斯特编码将一个码元分成两个相等的间隔,前一个间 隔为低电平后一个间隔为高电平表示1, 0的表示正好相反,题中编码2符合。","type":"choice","options":{"B":"NRZ和差分曼彻斯特编码","D":"NRZ-I和差分曼彻斯特编码","C":"NRZ-I和曼彻斯特编码","A":"NRZ和曼彻斯特编码"},"answer":"A"},{"id":"learncoder_114_24656","stem":"(2017年统考真题)若信道在无噪声情况下的极限数据传输速率不小于信噪比为30dB条件下的极限数据传输速率,则信号状态数至少是( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"可用奈奎斯特釆样定理计算无噪声情况下的极限数据传输速率,用香农 第二定理计算有噪信道极限数据传输速率。2Wlog2N^Wlog2 (1+S/N), W是信道带宽,N是信号状态数,S/N是信噪比,将数据代入计算可得NM32,选D。分贝数=101ogIoS/N","type":"choice","options":{"C":"16","B":"8","D":"32","A":"4"},"answer":"D"},{"id":"learncoder_114_24649","stem":"以下关于集线器的说法正确的是( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"集线器可以看成是多端口中继器。A、C、D选项都是中继器可以做到的。","type":"choice","options":{"D":"集线器不能放大变弱的信号","B":"集线器不能过滤网络流量","A":"集线器不能延伸网络可操作的距离","C":"集线器不能在网络上发送变弱的信号"},"answer":"B"},{"id":"learncoder_114_24650","stem":"当集线器的某个端口收到数据后,其动作为( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"集线器的工作原理为:当某个端口收到数据后,数据将从除了输入端口 外的所有端口广播出去。","type":"choice","options":{"A":"从所有端口广播出去","D":"随机选择一个端口转发出去","B":"从除了输入端口外的所有端口广播出去","C":"根据目的地址从合适的端口转发出去"},"answer":"B"},{"id":"learncoder_114_24651","stem":"X台计算机连接到一台YMbIt/s的集线器上则每台计算机分得的平均带宽为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"集线器以广播的方式将信号从除输入端口外的所有端口输出,因此任意 时刻只能有一个端口的有效数据输入,则平均带宽为Y/XMbI〃s,更详细的解释可参考2.3.2 小节的讲解。如果将此题改为X台计算机连接到一台YMbIt/s的交换机上,则每台计算机分 得的平均带宽为YMbIt/s,这里就不必除以XT-此处不理解没有关系,后面讲到交换机的 工作原理就明白了。","type":"choice","options":{"D":"XYMbit/s","C":"Y/XMbit/s","B":"YMbit/s","A":"XMbit/s"},"answer":"C"},{"id":"learncoder_114_24652","stem":"(2013年统考真题)若图2-16为10 Base-T网卡接收到的信号波形,则该网卡收到的 比特串是(\t)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第2章)/image4.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":" 10Base-T代表的就是传统的以太网,而以太网使用的是曼彻斯特编码, 而该编码将每个码元分成两个相等的间隔。前面一个间隔为高电平而后一个间隔为低电平表 示码元1;码元0正好相反。于是可以得到该网卡收到的比特串是0011 OllOo","type":"choice","options":{"A":"0011 0110","D":"1100 0101","B":"1010 1101","C":"0101 0010"},"answer":"A"},{"id":"learncoder_114_24648","stem":"当描述一个物理层接口引脚在处于高电平时的含义时,该描述属于( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"电气特性:规定传输二进制位时,线路上信号的电压高低、阻抗匹配、 传输速率和距离限制等。功能特性:指明某条线路上出现的某一电平表示的意义,及接口部 件的信号线的用途。此题考查高电平的含义,是功能特性的范畴,故选C。","type":"choice","options":{"B":"电气特性","C":"功能特性","A":"机械特性","D":"规程特性"},"answer":"C"},{"id":"learncoder_114_24644","stem":"误码率最低的传输介质是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"属于记忆性的题目,光纤是采用光通信,特点是带宽大,误码率小。","type":"choice","options":{"B":"光纤","D":"无线电","A":"双绞线","C":"同轴电缆"},"answer":"B"},{"id":"learncoder_114_24647","stem":"使用集线器连接局域网是有限制的,任何两个数据终端设备之间允许的传输通路中可使用的集线器个数最多是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"参考下面的补充知识点。CQ补充知识点:5-4-3规则是什么?需要掌握吗?解析:这个知识点在考研题中出现的概率为0,仅仅是一个规则而已,是固定的知 识点。而考研题越来越不会{顷向于概念的考查,大部分都是应用题。下面简要介绍5-4-3 规则的基本定义,有兴趣的同学可以了解一下。5-4-3规则:任意两台计算机之间最多不能超过5段线(包括集线器到集线器的连 接线缆,也包括集线器到计算机之间的连接线缆);4个集线器,其中只能有3 T集线器 直接与计算机或网络设备连接。如果不遵循此规则,将会导致网络故障。","type":"choice","options":{"D":"5个","C":"4个","A":"1个","B":"2个"},"answer":"C"},{"id":"learncoder_114_24645","stem":"同轴电缆比双绞线的传输速度更快,得益于(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"同轴电缆以硬铜线为芯,外面包上一层绝缘的材料,绝缘材料的外面包 裹上一层密织的网状导体,导体的外面又覆盖上一层保护性的塑料外壳。同轴电缆的这种结 构使得它具有更高的屏蔽性,从而既有很高的带宽,又有很好的抗噪特性。所以,同轴电缆 的传输速度更快得益于它的高屏蔽性。","type":"choice","options":{"D":"以上都对","A":"同轴电缆的铜芯比双绞线粗,能通过更大的电流","B":"同轴电缆的阻抗比较标准,减少了信号的衰减","C":"同轴电缆具有更高的屏蔽性,同时有更好的抗噪声性"},"answer":"C"},{"id":"learncoder_114_24643","stem":"lOBase-T指的是(\t)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第2章)/image3.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"10表示每秒传输10MbIt数据,因此是10MbIt/s。Base表示采用基带传输, 所以为数字信号。T表示使用了双绞线(TwIsted-paIr)。","type":"choice","options":{"B":"lOMbit/s,使用数字信号,使用双绞线","C":"10M波特率,使用模拟信号,使用双绞线","A":"10M波特率,使用数字信号,使用双绞线","D":"10Mbit/s,使用模拟信号,使用双绞线"},"answer":"B"},{"id":"learncoder_114_24646","stem":"\t下列关于单模光纤的描述中,正确的是( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"参考2.2.1小节的讲解。多模光纤使用了光束在其内部反射来传输光信号, 而单模光纤的直径减小到一个光波波长大小,如同一个波导,光只能按照直线传播,而不会 发生反射。","type":"choice","options":{"B":"单模光纤传输距离比多模光纤短","D":"单模光纤的直径一般比多模光纤小","C":"光在单模光纤中通过内部反射来传播","A":"单模光纤的成本比多模光纤的成本低"},"answer":"D"},{"id":"learncoder_114_24638","stem":"(2009年统考真题)在无噪声的情况下,若某通信链路的带宽为3kHz,釆用4个相位,每个相位具有4种振幅的QAM调制技术,则该通信链路的最大数据传输速率是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"假设原始信号中的最大频率为f,那么采样频率f采样必须大于或等于f的 两倍才能保证采样后的数字信号完整保留原始信号的信息。题目中已经给出最大频率为3kHz (在模拟信号中,带宽可以看成是最大频率),所以需要6kHz的采样频率;已知采用4个相 位,并且每个相位有4种振幅,也就是说可以表示16种状态,所以一个码元可以携带4bIt (2^6)的信息,该通信链路的最大数据传输速率Cmax=f采样xlog216=24kbIt/s。","type":"choice","options":{"B":"24kbit/s","D":"96kbit/s","A":"12kbit/s","C":"48kbit/s"},"answer":"B"},{"id":"learncoder_114_24641","stem":"波特率等于(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"波特率表示信号每秒变化的次数(注意和比特率的区别)。","type":"choice","options":{"B":"每秒可能发生的信号变化次数","C":"每秒传输的周期数","D":"每秒传输的字节数","A":"每秒传输的比特"},"answer":"B"},{"id":"learncoder_114_24639","stem":"(2011年统考真题)若某通信链路的数据传输速率为2400bIt/s,采用4相位调制, 则该链路的波特率是()。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"已知采用4个相位,即可以表示4种状态,所以一个码元可以携带2bIt(22=4)的信息。根据比特率(或者称为数据传输率)和波特率的关系,假设每个码元可以携 带n位信息,贝!J比特率=nx波特率,由题意可知,比特率为2400bIVs,且n=2,所以波特率为 1200Baudo\t-","type":"choice","options":{"D":"9600Baud","A":"600Baud","B":"1200Baud","C":"4800Baud"},"answer":"B"},{"id":"learncoder_114_24642","stem":"有一个调制解调器,它的调制星形图如图2-15所不。当它传输的波特率达到2400BaudW,实际传输的比特率为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"如图2・15所示,对于该调制解调器的每个变化能够表示16种不同的信号。 所以每个变化可以表示的比特数为n=log2V,解得n=4,比特率=波特率xn,即9600bIt/s。","type":"choice","options":{"A":"2400bit/s","C":"9600bit/s","D":"19200bit/s","B":"4800bit/s"},"answer":"C"},{"id":"learncoder_114_24640","stem":"\t下列编码方式中属于基带传输的是( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"要清楚基带传输所传输的是数字信号,而曼彻斯特编码是0和1格式的 信号,因此并没有经过调制而变成模拟信号,所以属于基带传输。其他3个选项都是将数字 信号调制成模拟信号的编码方式,因此不属于基带传输,属于宽带传输。","type":"choice","options":{"B":"移相键控法","A":"FSK","D":"正交幅度相位调制法","C":"曼彻斯特编码"},"answer":"C"},{"id":"learncoder_114_24637","stem":"假设一个无噪声的信道,带宽是6MHz,并且采用了 4级数字信号,那么它每秒可 发送的数据量为()。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"根据奈奎斯特定理,可以对信道每秒采样12M次。因为是4级数字信号, 每次采样可获得2bIt的数据,所以总共的数据传输率是24MbI〃s,即每秒发送了 24MbIt的数据。提醒:4级数字信号指什么?这个无需知道,在考研中,只需记住一点,看到这种条件, 直接log2即可得到有用的信息。包括习题与真题29也是这样。","type":"choice","options":{"C":"24Mbit","A":"6Mbit","D":"48Mbit","B":"12Mbit"},"answer":"C"},{"id":"learncoder_114_24634","stem":"不含同步信息的编码是( )。I.非归零码 \tII.曼彻斯特编码\tIII.差分曼彻斯特编码","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"非归零码是最简单的一种编码方法,它用低电平表示0,高电平表示1; 或者反过来。由于每个码元之间并没有间隔标志,因此它不包含同步信息。曼彻斯特编码和差分曼彻斯特编码都是将每个码元分成两个相等的时间间隔,将每个码 元的中间跳变作为收发双方的同步信号,所以无需额外的同步信号,实际应用得较多。但它 们所占的频带宽度是原始的基带宽度的2倍。","type":"choice","options":{"A":"仅I","C":"仅II、III","B":"仅II","D":"I、II、III"},"answer":"A"},{"id":"learncoder_114_24635","stem":"图2.14所示的曼彻斯特编码表示的比特串为( )。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第2章)/image2.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"曼彻斯特编码每一周期分为两个相等的间隔。二进制“1”在发送时,在 第一个间隔中为高电平,在第二个间隔中为低电平;二进制“0”正好相反,首先是低电平, 然后是高电平。根据所给图形可知,该曼彻斯特编码表示的比特串为011001c提醒:有些教材或者辅导书恰好和本题的“1”和“0”的表现形式相反,这个不用疑惑, 知道即可,考研不可能考这种题,仅仅作为练习用以了解曼彻斯特编码。","type":"choice","options":{"C":"111110","A":"011001","B":"100110","D":"011110"},"answer":"A"},{"id":"learncoder_114_24636","stem":"对一个无噪声的4kHz信道进行采样,可达到的最大数据传输率是( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":" 一个无噪声的信道可以发送任意数量的信息,而与它如何被采样无关。 在4kHz的信道上,采样频率需要是8kHz (每秒可进行8k次采样)。如果每次采样可以取得 16bIt的数据,那么信道的最大数据传输率就可以是128kbIt/s;如果每次采样可以取得1024bIt 的数据,那么信道的最大数据传输率就可以是8MbI〃s。所以说,只要编码编得足够好(每个 码元能携带更多的比特),最高码元传输速率是可以无限大的。另外一种直观的解释就是使用奈奎斯特公式,无噪声最大数据传输率C^f采样xl°g2N= 2fxlog2N(其中f表示带宽)=8kxlog2N,而这个N可以无穷大(上面解释过)。注意:这里的关键点在于信道是无噪声的,如果是在一个有噪声的4kHz的信道中,根 据香农定理则不允许无限大的数据量。","type":"choice","options":{"B":"8kbit/s","A":"4kbit/s","C":"lkbit/s","D":"无限大"},"answer":"D"},{"id":"learncoder_114_24633","stem":"下列关于卫星通信的说法中,错误的是()","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"卫星通信是微波通信的一种特殊形式,通过将地球同步卫星作为中继器 来转发微波信号,可以克服地面微波通信距离的限制。卫星通信的优点是通信距离远、费用 与通信距离无关、覆盖面积大、通信容量大、不受地理条件的制约、易于实现多址和移动通 信,其缺点是费用较高、传输延迟大、对环境气彳戻较为敏感。","type":"choice","options":{"B":"使用卫星通信易于实现广播通信和多址通信","A":"卫星通信的通信距离大,覆盖的范围广","D":"・通信费用高,时延较大是卫星通信的不足之处","C":"卫星通信不受气候的影响,误码率很低"},"answer":"C"},{"id":"learncoder_114_24628","stem":"在大多数情况下,同步传输和异步传输的过程中,分别使用(\t)作为传输单位。I .位\tII .字节\tIII.帧\tIV.分组","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"异步传输以字节为传输单位,每一字节增加一个起始位和一个终止位。 同步传输以数据块(帧)为传输单位(可以参见本章习题与真题8, —次性传4200bIt),为了使接收方能判定数据块的开始和结束,需要在每个数据块的开始处加一个帧头,在结尾处加 一个帧尾。接收方判别到帧头就开始接收数据块,直到接收到帧尾为止。G3补充知识点:从以上分析可以大致来讨论同步传输和异步传输的效率。同步传 输可以从号题与真题8看出,帧头和帧尾只占数据位很丿」啲一部分,几乎可以忽略不计, 可以认为同步传输的传输效率近I以为100%,但是异步传输每传8bIt就要加一T起始位 和一T终止位,可以得到异步传输的效率为80%,所以同步传输比异步传输的效率高。注意:此题应看清题目的条件限制,大多数情况下异步传输是以8bIt长的字符为单位, 也就是1B。当然,特殊情况也有可能字符长度超过8bIt,小概率事件不予考虑。","type":"choice","options":{"D":"II、IV","B":"II、 III","C":"III、II","A":"I 、 II"},"answer":"C"},{"id":"learncoder_114_24631","stem":"下列交换方式中,实时性最好的是( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"计算机通信子网的交换技术主要有两种方式:电路交换和存储转发交换。 店 存储转发交换方式又可分为报文交换和分组交换。分组交换在实际应用过程中又可分为 J数据报分组交换和虚电路分组交换。在电路交换方式中,虽然在数据传输之间需要建立一条 物理连接(这需要一定的延迟),但一旦连接建立起来,后续所有数据都将沿着建立的物理连 接按序传送,传输可靠且时延很小。在存储转发交换方式中,扌艮文或分组都要经过中间结点 的若干次存储、转发才能到达目的结点,这将增加传输延迟。因此,与存储转发交换方式相 比,电路交换具有较小的传输延迟,实时性较好,适用于高速大量数据传输。","type":"choice","options":{"C":"数据报交换","A":"电路交换","B":"报文交换","D":"虚电路交换"},"answer":"A"},{"id":"learncoder_114_24632","stem":" (2010年统考真题)在图2-3所示的采用“存储-转发”方式分组的交换网络中.所有 链路的数据传输速率为100MbIt/s,分组大小为1000B,其中分组头大小为20Bo若主机H1 向主机H2发送一个大小为980 000B的文件,则在不 考虑分组拆装时间和传播延迟的情况下,从H1发送 到H2接收完为止,需要的时间至少是(\t)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第2章)/image1.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"已知分组大小为1000B,其中分组头大小为20B,可以得出每个分组的数 据部分为980B,所以大小为980000B的文件应该分为1000个分组传送,每个分组1000B (包 含头部20B),所以一共需要传送1000000B的信息,而链路的数据传输速率为lOOMbIt/s,即 12.5MB/S,所以主机H1传送完所有数据需要的时间为1000000B/12.5MB/s=80mso此时恰好 最后一个分组从主机H1出去,还没有被主机H2接收,而一个分组从主机H1需要经过两次 存储转发才能到达主机H2 (不考虑传播时延),需要用时为2xl000B/12.5MB/s=0.16mSo综 上所述,总共用时为80ms+0.16ms=80.16ms。","type":"choice","options":{"A":"80ms","C":"80.16ms","D":"80.24ms","B":"80.08ms"},"answer":"C"},{"id":"learncoder_114_24625","stem":"下列哪些是虚电路的特点?(\t)I.传输前建立逻辑连接\t\tII.分组按序到达III.分组开销小\tIV.分组单独选择路由","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"首先,由于虚电路传输分组前需要建立一条逻辑连接,属于同一条虚电 路的分组按照同一路由转发,所以分组一定是按序到达的。其次,由于目的地址仅在建立虚 电路的时间使用,所以之后每个分组使用长度较短的虚电路号放在分组首部即可。相比数据 报服务来讲,虚电路分组开销小。综上所述,I、II、HI属于虚电路的特点。","type":"choice","options":{"B":"仅II、III","C":"仅 I、IIII、IV","D":"仅 I、II、IV","A":"仅I、II、III"},"answer":"B"},{"id":"learncoder_114_24626","stem":"如果带宽为4kHz,信噪比为30dB,则该信道的极限信息传输速率为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"信噪比常用分贝(dB)表示,在数值上等于101g(S/N) (dB)o题目已知 带宽W=4kHz,信噪比S/N=1O3°/1o=1OOO,根据香农定理得出该信道的极限信息传输速率公式: C=Wxlog2(l+S/N)=4kHzxlog2(14-1000)®40kbIt/so","type":"choice","options":{"B":"20kbit/s","D":"80kbit/s","C":"40kbit/s","A":"lOkbit/s"},"answer":"C"},{"id":"learncoder_114_24629","stem":"下列哪种交换技术可能导致失序? ( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"在数据报分组交换中,一个报文被分成多个分组,每个分组可能由不同 的传输路径通过通信子网而达到目的地,因此可能导致失序。","type":"choice","options":{"D":"数据报交换","A":"电路交换","B":"报文交换","C":"虚电路交换"},"answer":"D"},{"id":"learncoder_114_24627","stem":"\t一次传输一个字符(5〜8位组成),每个字符用一个起始码引导,同一个停止码结 束,如果没有数据发送,发送方可以连续发送停止码,这种通信方式称为( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"本题考查了异步传输的基本概念,记住即可。","type":"choice","options":{"C":"异步传输","D":"同步传输","A":"并行传输","B":"串行传输"},"answer":"C"},{"id":"learncoder_114_24630","stem":"在下列数据交换方式中,数据经过网络的传输延迟长而且是不固定的,所以不能用 于语音数据传输的是()。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"在报文交换中,交换的数据单元是报文。由于报文大小不固定,在交换 结点中需要较大的存储空间。另外,报文经过中间结点的接收、存储和转发时间较长而且也 不固定,因此不能用于实时通信应用环境(如语音、视频等)。","type":"choice","options":{"B":"报文交换","C":"数据报交换","A":"电路交换","D":"虚电路交换"},"answer":"B"},{"id":"learncoder_114_24623","stem":"根据采样定理,对连续变化的模拟信号进行周期性采样,只要釆样频率大于或等于 有效信号的最高频率或其带宽的()倍,则采样值便可包含原始信号的全部信息。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题记住即可。","type":"choice","options":{"A":"0.5","B":"1","C":"2","D":"4"},"answer":"C"},{"id":"learncoder_114_24624","stem":"M使用坐标圏中(1, 1), (2, 2), (-2, -2)和(-1, -1)表示4个数据点,它在1200波特的线路上可以达到的数据传输率是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"坐标图上有4个数据点,说明一个码元可以携带2b辻信息,因此数据传 输率为 2400bIt/so","type":"choice","options":{"C":"9600bit/s","A":"1200bit/s","B":"2400bit/s","D":"19 200bit/s"},"answer":"B"},{"id":"learncoder_114_24622","stem":"某信道的信号传输速率为2000Baud,若想令其数据传输速率达到8kbIt/s,则一个信 号码元所能取的有效离散值个数应为()。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"对于信号传输速率为2000Baud,要使数据传输速率达到8kbIt/s,则一个 码元须携带4bIt的信息,所以一个信号码元所能取的有效离散值个数应为24=16个。","type":"choice","options":{"C":"8","B":"4","A":"2","D":"16"},"answer":"D"},{"id":"learncoder_114_24618","stem":"为了使模拟信号传输导更远,可以采用的设备是( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"首先,要使模拟信号传播得更远,就需要对其进行放大,而放大信号是物 理设备应执行的功能,所以交换机(数据链路层)和路由器(网络层)可以排除;其次,中 继器和放大器都可以放大信号,但是两者的区别在于中继器放大数字信号,放大器放大模拟 信号。补充知识点:信号在传输介质上传输,经过一段距离后,信号会衰减。为了实 现远距离的传输,模拟信号传输系统采用放大器来增强信号中的能量,但同时也会使噪 声分量增强,以致引起信号失真。对于数字信号传输系统,可采用中继器来扩大传输距 离。中继器接收衰减的数字信号,把数字信号恢复成0和1的标准电平,这样有效地克 服了信号的衰减,减少了失真。所以得出一个结论:数字传输比模拟传输能获得更高的信号质量。","type":"choice","options":{"A":"中继器","B":"放大器","D":"路由器","C":"交换机"},"answer":"B"},{"id":"learncoder_114_24621","stem":"(\t)被用于计算机内部的数据传输。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"并行传输的特点:距离短、速度快。串行传输的特点:距离长、速度慢。 所以在计算机内部(距离短)传输应该选择并行。而同步、异步传输是通信方式,不是传输 方式。","type":"choice","options":{"D":"异步传输","B":"并行传输","C":"同步传输","A":"串行传输"},"answer":"B"},{"id":"learncoder_114_24619","stem":"\t光纤系统的实际速率主要受限于(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"光的频率非常高,达108MHz,其传输带宽非常大,实际速率主要受限于 光电转换的速率。","type":"choice","options":{"B":"多模光纤的带宽","D":"光电转换的速率","A":"单模光纤的带宽","C":"光产生的速率"},"answer":"D"},{"id":"learncoder_114_24620","stem":"因特网上的数据交换方式是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"电路交换主要用于电话网,报文交换主要用于早期的电报网。因特网使用 的是分组交换,具体包括数据报和虚电路两种方式。","type":"choice","options":{"C":"分组交换","D":"光交换","A":"电路交换","B":"报文交换"},"answer":"C"},{"id":"learncoder_114_24617","stem":"采用1200bIt/s同步传输时,若每帧含56bIt同步信息、48bIt控制信息位和4096bIt数据位,则传输1024B需要(\t)s。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"计算每帧帧长=56bIt+48bIt+4096bIA4200bIt, 1024B=8192bIt,由于每帧都有4096bIt数据位,因此可将8192bIt分成2帧传输,一共需要传输8400bIt,而同步传输的速率是1200bIt/s,传输8400bIt需要7s。","type":"choice","options":{"A":"1","C":"7","B":"4","D":"14"},"answer":"C"},{"id":"learncoder_114_24615","stem":"在互联网设备中,工作在物理层的互连设备是(\t)。I.集线器\t\tII.交换机\t\tIII.路由器\tIv.中继器","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"集线器和中继器都工作在物理层,主要作用是再生、放大信号;而交换机 和路由器分别工作在数据链路层和网络层。","type":"choice","options":{"A":"I、 II","B":"II、 IV","C":"I、 IV","D":"III、IV"},"answer":"C"},{"id":"learncoder_114_24616","stem":"一个传输数字信号的模拟信道的信号功率是0.62W,噪声功率是0.02W,频率范围为3.5〜3.9MHz,该信道的最高数据传输速率是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"计算信噪比 S/N=0.62/0.02=31;带宽 W=3.9MHz-3.5MHz=0.4MHz,由香农 公式可知,最高数据传输率 V=Wxlog2(l+S/N)=0.4MHzxlog2(l+31)=2MbIt/so","type":"choice","options":{"A":"IMbit/s","D":"8Mbit/s","B":"2Mbit/s","C":"4Mbit/s"},"answer":"B"},{"id":"learncoder_114_24612","stem":"\t以下哪种数字数据编码方式属于自含时钟编码(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"曼彻斯特编码将每个码元分成两个相等的间隔。前面一个间隔为高电平, 而后一个间隔为低电平,表示码元1;码元0正好相反。曼彻斯特编码的特点是将每个码元 的中间跳变作为收发双方的同步信号(时钟信号或者时钟编码),无需额外的同步信号;但它 所占的频带宽度是原始的基带宽度的两倍。注意:很多人会产生疑问,曼彻斯特编码到底是前面一个间隔为高电平而后一个间隔为 低电平表示码元1,还是前面一个间隔为低电平而后一个间隔为高电平表示码元1?不同的辅 导书介绍不同。其实这个不用担心,这个仅仅是形式上的不同,考试的试卷上肯定会有具体 说明。","type":"choice","options":{"B":"非归零码","A":"二进制编码","C":"曼彻斯特编码","D":"脉冲编码"},"answer":"C"},{"id":"learncoder_114_24613","stem":"调制解调技术主要使用在(\t)通信方式中。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"调制就是将基带数字信号的频谱变换为适合在模拟信道中传输的频谱,解 调正好与之相反。所以,调制解调技术用于模拟信道传输数字数据通信方式,而模拟信道传 输模拟数据不需要调制解调技术。","type":"choice","options":{"B":"模拟信道传输模拟数据","C":"数字信道传输数字数据","D":"数字信道传输模拟数据","A":"模拟信道传输数字数据"},"answer":"A"},{"id":"learncoder_114_24614","stem":"(2012年统考真题)在物理层接口特性中,用于描述完成每种功能的事件发生顺序的 是()。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"物理层接口特性有以下4种。1)\t机械特性:指明接口的形状、尺寸、引线数目和排列等。2)\t电气特性:电压的范围,即何种信号表示电压0和1。3)\t功能特性:接口部件的信号线(数据线、控制线、定时线等)的用途。4)\t规程特性(过程特性):物理线路上对不同功能的各种可能事件的出现顺序,即时序 关系。","type":"choice","options":{"C":"过程特性","D":"电气特性","B":"功能特性","A":"机械特性"},"answer":"C"},{"id":"learncoder_114_24610","stem":"电路交换的优点有()。I.传输时延小\tII.分组按序到达III.无需建立连接\tIv・线路利用率高","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"首先,电路交换是面向连接的,一旦连接建立,数据便可直接通过连接好 的物理通路到达接收端,因此传输时延小;其次,由于电路交换中的通信双方始终占用带宽 即使不传送数据(就像两个人打电话都不说话),因此电路交换的线路利用率很低;最后,由 于电路交换是面向连接的,由面向连接的服务特性可知,传送的分组必定是按序达到的。","type":"choice","options":{"C":"I 、 III","D":"II、 Iv","B":"II、III","A":"I、 II"},"answer":"A"},{"id":"learncoder_114_24611","stem":"利用模拟通信信道传输数字信号的方法称为( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"信道上传送的信号分为基带信号和宽带信号。基带信号是将数字信号0和 1直接用两种不同的电压表示,然后传送到数字信道上去传输,称为基带传输;宽带信号是 将基带信号进行调制后形成模拟信号,然后再传送到模拟信道上去传输,称为频带传输。总 之,记住一句话:基带对应数字信号,宽带对应模拟信号。","type":"choice","options":{"B":"异步传输","C":"基带传盗","A":"同步借输","D":"频带传输"},"answer":"D"},{"id":"learncoder_114_22550","stem":"物理层规程特性描述的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是物理层接口特性知识点。前三个选项分别是物理层的机械、电气和功 能特性,因此答案D正确。","type":"choice","options":{"A":"接口的形状和尺寸、引线的数目和排列等信息","C":"某条线上岀现的某一电平表示的意义","D":"对不同功能的各种可能时间的岀现顺序进行描述","B":"接口电缆的各条线上出现的电压范围"},"answer":"D"},{"id":"learncoder_114_22556","stem":"在一个网络中,采用虚电路的方式传输数据,分组的头部长度为X位,数据部分长度为% 现在若有L(L>y)位的报文通过该网络传送。信源和信宿之间的物理线路数为航每条线路上 的传输时延为d s,数据传输率为s bps,虚电路的建立时间为t s,每个中间节点有m s的平均处 理时延。请问从信源开始发送分组直到信宿全部收到全部分组所需要的时间是多少?","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"空","type":"short_answer","answer":"虚电路的传输方式中,总的时间花费包括以下几部分:虚电路的建立时间、信源 的发送时延、中间节点的发送时延、中间节点的处理时延和传播时延。虚电路的建立时间为方秒;\t、信源要将L位报文分割成分组扮组的数量N=L/y,每个分组的长度为光+y,因此信源一共 要发送的数据总量为d+y)L/y,所以信源的发送时延为d+y)Z/ys。\t每个中间节点的发送时延为&+y)/s,信源和信宿之间的物理线路数为k,所以存在 k-1 个 节点,因此中间节点总的发送时延为&+y)(\"l)/s。中间节点的处理时延为m仏-1)。传播时延为kdo综上所述,信源至信宿发送全部数据所需要的时间为t+(x+y)L/ys+(x+y)(k-1)/s+m(k- 1)+kd秒。"},{"id":"learncoder_114_22549","stem":"多模光纤的特点不包括( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是传输介质知识点。多模光纤的纤芯直径为50-62.5 inn,单模光纤的 纤芯直径为5.0-8.3 |1叫光纤的工作波长范围为不超过2 pn,所以纤芯的直径比光波的波长 要粗,因此答案D正确。","type":"choice","options":{"B":"导光原理为光的全反射特性-","D":"纤芯的直径比光波的波长还要细","A":"光源为发光二极管,定向性差","C":"光以不同的角度在其纤芯中反射"},"answer":"D"},{"id":"learncoder_114_22555","stem":"如果一个二进制比特序列为11001,若定义码元1在时钟周期内为前低后高,请画岀其曼 彻斯特编码和差分曼彻斯特编码。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"空","type":"short_answer","answer":"若定义码元1在时钟周期内为前低后高,则码元0正好相反,在一个时钟周期内 为前高后低。差分曼彻斯特定义:若码元为1,则其前半个码元的电平与上一个码元后半个码元的电平一 样;若码元为0,则其前半个码元的电平与上一个码元的后半个码元的电平相反。因此对应该比特序列的曼彻斯特编码和差分曼彻斯特编码如下图所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第22章/header1.xml'/>"},{"id":"learncoder_114_22552","stem":"下列关于中继器和集线器的说法中,不正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是物理层设备知识点。中继器和集线器均工作在物理层,也都可以对信 号进行放大和整形,但是两者对于连接网段的数量是有限制的,只能在规定的范围内进行,因此 答案C正确。","type":"choice","options":{"D":"中继器通常只有2个端口,而集线器通常有4个或者更多端口.","C":"通过中继器或集线器互联的网段数量不受限制","B":"二者都可以对信号进行放大和整形","A":"二者都工作在OSI参考模型的物理层"},"answer":"C"},{"id":"learncoder_114_22551","stem":"下列关于RS-449接口的说法中,不正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是物理层接口特性知识点。RS-449标准的机械特性采用的是37针和 9针连接器的两种接口,因此答案B正确。","type":"choice","options":{"A":"RS-449增加了新的非平衡型和新的平衡型两种电气特性","C":"RS-449定义了 30条信号线","D":"RS-449的规程特性以EIA-232-E的基本规程特性为基础","B":"RS-449只是用了一种37针的连接器"},"answer":"B"},{"id":"learncoder_114_22544","stem":"调制解调器使用幅移键控和相移键控,在波特率1 000波特的情况下数据速率达4000 bps,若采用4种相位,则每种相位有(\t)个幅值。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是调制知识点。因为B = 1 000,C = 4 000 bps,由C = Blog2L得知£=16, 当相位数量为4时,每个相位有4个幅值,因此正确答案为Co","type":"choice","options":{"D":"5","C":"4","A":"2","B":"3"},"answer":"C"},{"id":"learncoder_114_22543","stem":"可以将模拟数据编码为数字信号的方法有(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是编码和调制知识点。数据转换为模拟信号的过程成为调制,数据变换 为数字信号的过程为编码。PSK、QAM均为调制的方法,曼彻斯特编码是数字数据编码为数字 信号的方法,因此答案为A。","type":"choice","options":{"C":"QAM","B":"FSK","A":"PCM","D":"曼彻斯特编码"},"answer":"A"},{"id":"learncoder_114_22545","stem":"在通信子网中,不采用“存储-转发”的交换技术是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是电路交换知识点。电路交换过程中,通信双方独占物理线路不存在 “存储-转发”,因此答案为A。","type":"choice","options":{"D":"数据报","C":"虚电路","A":"电路交换","B":"报文交换"},"answer":"A"},{"id":"learncoder_114_22542","stem":"两台计算机利用电话线路传输数据时,必备的设备是( )","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是调制知识点。计算机上存储的数据是数字数据,普通电话线上只能传 输模拟信号,因此需要调制解调器将数字数据调制为模拟信号,答案为A","type":"choice","options":{"D":"集线器","C":"中继器","A":"调制解调器","B":"网卡"},"answer":"A"},{"id":"learncoder_114_22547","stem":"下列关于虚电路的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是虚电路知识点。虚电路传输方式需要事先在通信双方之间建立逻辑 链路,一旦逻辑链路建成,此后的分组传输将根据虚电路表迅速地被转发,造成延迟的主要原因 是虚电路的建立时间而不是交换机之间的存储-转发过程,因此答案为D。","type":"choice","options":{"C":"每个分组的占用线路的开销比数据报方式要小","A":"数据传输过程中,所有分组均按照相同路径传输","D":"存在一定的延迟,主要原因是在交换机之间分组存储-转发造成的延迟","B":"资源利用率高"},"answer":"D"},{"id":"learncoder_114_22546","stem":"在数据交换过程中,报文的内容不按顺序到达目的节点的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是数据报知识点。电路交换和报文交换都是完整的报文进行传输,不存 在顺序的问题,虚电路通过建立逻辑电路来保证报文内容按顺序到达,数据报传输中,每个分组 是独立选择路由的,可能造成到达时有先有后,因此答案为Do","type":"choice","options":{"D":"数据报","C":"虚电路","B":"报文交换","A":"电路交换"},"answer":"D"},{"id":"learncoder_114_22548","stem":"超5类双绞线可提供的带宽是( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是传输介质知识点。超5类双绞线的带宽是100 MHz,因此答案C 正确。","type":"choice","options":{"C":"100 MHz","B":"20 MHz","D":"1000 MHz","A":"10 MHz"},"answer":"C"},{"id":"learncoder_114_22540","stem":"与同步TDM相比,统计TDM需要解决的特殊问题是( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是多路复用知识点。统计TDM是按需动态地分配时隙,每个时隙必须 有用户的地址信息,可以按照字节、位或帧进行复用,因此需要解决好传输过程中的成帧和同步 问题,C正确。\t","type":"choice","options":{"B":"线路利用率问题","A":"性能问题","D":"差错控制","C":"成帧与同步"},"answer":"C"},{"id":"learncoder_114_22539","stem":"如果采用同步TDM方式通信,为了区分不同数据源的数据,发送端应该采取的措施是()。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是多路复用知识点。同步TDM,每个用户所占用的时隙是周期性地出 现,因此区分不同数据源只需按该数据源所使用时间片出现的周期即可,因此C正确。","type":"choice","options":{"C":"各数据源使用固定的时间片","A":"在数据中加上数据源标志","B":"在数据供加上时间标志","D":"个数据源使用随时间片"},"answer":"C"},{"id":"learncoder_114_22541","stem":"在脉冲起始时刻,有无跳变来表示“0”和“1”,在脉冲中间时刻始终发生跳变的编码是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是编码知识点。差分曼彻斯特编码规则是若码元为1,则其前半个码元 的电平与上一个码元的后半个码元的电平一样,即无跳变;若码元为0,则其前半个码元的电平 与上一个码元的后半个码元的电平相反,即有跳变,因此答案为C。","type":"choice","options":{"C":"差分曼彻斯特编码","B":"曼彻斯特编码","A":"非归零码","D":"8B/10B"},"answer":"C"},{"id":"learncoder_114_22538","stem":"如果有2000比特的数据通过一个1 Mbps的网卡进行传输,所产生的发送时延 是( )。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是时延知识点。发送时延是节点在发送数据时使报文或分组从节点进 入到传输介质所需要的时间,计算公式为发送时延二报文或分组长度/信道数据传输率=2 000/ 1 000 000 = 0.002 S,因此 D 正确。","type":"choice","options":{"B":"0.2s","D":"0.002s","C":"0.02s","A":"2s"},"answer":"C"},{"id":"learncoder_114_22537","stem":"在带宽为4 kHz的信道上,如果有4种不同的物理状态来表示数据,若信噪比S/N为 30 dB,按香农定理,最大限制的数据速率为(\t) 。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是香农定理知识点。本题中F=4 000 Hz,S/N=l 000,根据香农定理, 最大数据传输率二Wxlog2(l+S/N) «40 kbps,因此C正确。","type":"choice","options":{"B":"16 kbps","A":"6 kbps","D":"56 kbps","C":"40 kbps"},"answer":"C"},{"id":"learncoder_114_22536","stem":"某信道带宽为10 kHz,编码采用32种不同的物理状态来表示数据,则无噪声环境下,该信道的最大数据传输速率是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的是香农定理知识点。本题中W=10 kHz,根据奈奎斯特定理,波特率为 B = 2xW=20 kHz,无噪声信道环境下最大数据传输率与最大码元传输率之间的关系为:7 = Blog2M,其中M为模式的数目,则可以计算得出5 = 20 0001og232 = 100 kbps,因此B 正确。\t","type":"choice","options":{"C":"200 kbps","B":"100 kbps","A":"50 kbps","D":"400kbps"},"answer":"B"},{"id":"learncoder_114_22535","stem":"带宽的单位是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的知识点是带宽的概念。带宽是信号具有的频带宽度,单位是赫兹(Hz)。 因此A正确。","type":"choice","options":{"C":"比特","B":"波特","A":"赫兹","D":"码元"},"answer":"A"},{"id":"learncoder_114_22534","stem":"如果要实现半双工的通信,那么通信双方之间至少需要()","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的知识点是信道的概念。信道是传输信号的通道,信道与物理线路不完全 等同,一条物理线路可以复用多条信道。半双工通信指双方可以发送信息但是不能同时,需要两 条信道?因此C疋舖。A明显错,B和D混淆了物理线路和信道的概念。","type":"choice","options":{"D":"1条物理线路","A":"1条信道","C":"2条信道","B":"2条物理线路"},"answer":"C"},{"id":"learncoder_114_22533","stem":"关于数据和信号,正确的说法是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.物理层","analysis":"此题考查的知识点是数据和信号概念。计算机网络传输的数据既包括模拟数据也 包括数字数据,信号是数据的编码形式,模拟数据和数字数据可以通过相应的设备转换为模拟信 号或者数字信号进行传输,因此模拟信号和数字信号可以在一定条件下是可以进行相互转换的, 正确答案为B。","type":"choice","options":{"D":"模拟信号和数字信号不能互相转换","C":"计算机网络中只能传输数字数据不能传输模拟数据","A":"模拟数据和数字数据只能分别用模拟信号和数字信号来传输","B":"模拟数据和,数字数据可以既用模拟信又用数字信号来传输"},"answer":"B"},{"id":"learncoder_115_24730","stem":"(2015年中科院真题)无法隔离冲突域的网络互连设备是( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"数据链路层设备(交换机、网桥)可隔离冲突域,而不能隔离广播域; 网络层设备(路由器)既可隔离冲突域,又可隔离广播域;物理层设备(中继器、集线器) 则无法隔离冲突域和广播域。故选C。简答题","type":"choice","options":{"D":"网桥","C":"集线器","A":"路由器","B":"交换机"},"answer":"C"},{"id":"learncoder_115_24731","stem":"在数据传输过程中,若接收方收到的二进制比特序列为10110011010,采用的生成 多项式为G(x)=x4+x3+1,则该二进制比特序列在传输中是否出错?如果传输没有出现差错, 发送数据的比特序列和CRC检验码的比特序列分别是什么?","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"69.","type":"short_answer","answer":"根据题意,生成多项式G(x)对应的二进制比特序 列为llOOlo进行如图3-28所示的二进制模2除法,被除数为 10110011010,除数为11001.所得余数为0,因此该二进制比特序列在传输过程中没有出 现差错。发送数据的比特序列是1011001, CRC检验码的比特序 列是1010。注意,CRC检验码的位数等于生成多项式G(x)的次数。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第3章)/image8.png'/>"},{"id":"learncoder_115_24734","stem":"有人指出:每一帧的结束处是一个标志字节,而下一帧的开始处又是另一个标志字 节,这种做法是对空间的浪费。如果只使用一个标志字节可以完成相同的工作,那么就可以 省下一个字节。这种说法有错吗?","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"空","type":"short_answer","answer":"假如数据链路层的字节流是一直连续不断的,那么采用一个字节的标志是可 以分清不同帧之间的界限的。但是如果一个帧结束了传递,以flag字节结束,之后的15min 内没有新的帧传输。在这种情况下,接收方无法确认下一个到来的字节是一个新的帧开始, 还是链路上的噪声。采用开始和结束都添加标志字节的办法,可以大大简化数据链路层协议 的设计。"},{"id":"learncoder_115_24732","stem":"数据链路(逻辑链路)与链路(物理链路)有何区别?","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"空","type":"short_answer","answer":"数据链路与链路的区别在于数据链路除了本身是 一条链路外,还必须有一些必要的规程来控制数据的传输。因此 数据链路比链路多了实现通信规程所需要的硬件和软件。"},{"id":"learncoder_115_24735","stem":"在选择重传协议中,设编号用3bit。再设发送窗口 Wt=6,而接收窗口 Wr=3。试找 出一种情况,使得在这种情况下协议不能正确工作。参考答案及解析","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"空","type":"short_answer","answer":"对于选择重传协议,发送窗口和接收窗口的条件是接收窗口的值+发送窗口的 值W211,而题目中给出的数据Wt+Wr=9>23,所以是无法正常工作的。找出序号产生歧义的 点即可。设想在发送窗口内的序号为0、1、2、3、4、5,而接收窗口等待后面的6、7、0o"},{"id":"learncoder_115_24733","stem":"\"电路接通了”与“数据链路接通了”的区别何在?","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"空","type":"short_answer","answer":"电路接通了”表示链路两端的结点交换机已经开机,物理连接已经能够传送 比特流了。但是,数据传输并不可靠。在物理连接基础上,再建立数据链路连接,才是“数 据链路接通了”。此后,由于数据链路连接具有检测、确认和重传等功能,才使得不太可靠的 物理链路变成可靠的数据传输。当数据链路断开连接时,物理连接不一定跟着断开。"},{"id":"learncoder_115_24727","stem":"(2015年中科院真题)在连续ARQ协议中,当滑动窗口序号位数为n时,则发送窗口最大尺寸为( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"连续ARQ协议包括后退N帧和选择重传两种协议,对于后退N帧来说, 当帧序号位数为n时,发送窗口大小有IV发送窗口 W211-1,接收窗口大小为1;对于选择重 传来说,当帧序号位数为n时,发送窗口大小W2“t,发送窗口取最大值时,接收窗口=发送 窗口 =2\"1。本题中综合考虑后退N帧和选择重传协议,选A。","type":"choice","options":{"D":"2n","B":"2n-l","A":"2(n-1)","C":"2n"},"answer":"A"},{"id":"learncoder_115_24728","stem":"(2015年中科院真题)以下哪个是快速以太网的介质访问控制方法( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"CSMA/CD协议是广泛应用于快速以太网的介质访问控制方式。令牌总线 方式已经很少使用,令牌环访问控制主要应用于令牌环局域网中。","type":"choice","options":{"A":"CSMA/CD","D":"100VG-AnyLan","C":"令牌环","B":"令牌总线"},"answer":"A"},{"id":"learncoder_115_24729","stem":"(2015年中科院真题)决定局域网特性有3个主要技术,它们是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"传输介质、拓扑结构和介质访问控制方法是决定局域网特性的3个主要 技术。","type":"choice","options":{"B":"通信方式、同步方式和拓朴结构","C":"传输介质、拓扑结构和介质访问控制方法","A":"传输介质、差错检测方法和网络操作系统","D":"数据编码技术、介质访问控制方法和数据交换技术"},"answer":"C"},{"id":"learncoder_115_24726","stem":"(2017年统考真题)在图3-24所示的网络中,若主机H发送一个封装访问Internet的IP分组的IEEE 802.11数据帧F,则帧F的地址1、地址2和地址3分别是(\t)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第3章)/image6.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"IEEE 802.11数据帧有4种子类型,分别是IBSS、FromAP、ToAP、WDS。 这里的数据帧F是从笔记本计算机发送往访问接入点(AP),所以属于To AP子类型。这种 帧地址1是RA (BSSID),地址2是SA,地址3是DA。RA是receiver address的缩写,BSSID 是 basic service set identifier 的缩写,SA 是 source address 的缩写,DA 是 destination address 的缩写。因此,地址1是AP的MAC,地址2是H的MAC,地址3是R的MAC,选B。","type":"choice","options":{"C":"00-12-34-56-78-9b, 00-12-34-56-78-9c, 00-12-34-56-78-9a","A":"00-12-34-56-78-9a, 00-12-34-56-78-9b, 00-12-34-56-78-9c","D":"00-12-34-56-78-9a, 00-12-34-56-78-9c, 00-12-34-56-78-9b","B":"00-12-34-56-78-9b, 00-12-34-56-78-9a, 00-12-34-56-78-9c"},"answer":"B"},{"id":"learncoder_115_24721","stem":"(2015年统考真题)主机甲通过128kbit/s卫星链路,采用滑动窗口协议向主机乙发 送数据,链路单向传播延迟为250ms,帧长为1000字节。不考虑确认帧的开销,为使链路利 用率不小于80%,帧序号的比特数至少是( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"不考虑确认帧的开销,一个帧发送完后经过一个单程传播时延到达接收 方,再经过一个单程传播时延发送方收到应答,从而继续发送。要使得传输效率最大化,就 是不用等确认也可以连续发送多个帧。设连续发送n个帧,一个帧的发送时延为1000B/ 128kbit/s=62.5mso对于采用滑动窗口协议的流水线机制,我们有如下公式:链路利用率=(» 发送时延)/ (RTT+发送时延),依题意,有(nx62.5ms) / (62.4ms+250msx2) 280%,得 n $7・2,帧序号的比特数k需满足2Gn+l。所以帧序号的比特数至少为4。","type":"choice","options":{"B":"4","D":"8","A":"3","C":"7"},"answer":"B"},{"id":"learncoder_115_24724","stem":"(2016年统考真题)图3-23中,若主机H2向主机H4发送1个数据帧,主机H4向主机H2立即发送1个确认帧,则除H4外,从物理层上能够收到该确认帧的主机还有(\t)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第3章)/image5.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"交换机可以隔离冲突域,但集线器无法隔离冲突域,因此从物理层上能 够收到该确认帧的主机仅H2、H3,故选D。","type":"choice","options":{"C":"仅Hl、H2","A":"仅H2","D":"仅H2、H3","B":"仅H3"},"answer":"D"},{"id":"learncoder_115_24725","stem":"(2016年统考真题)图3-23中,若Hub再生比特流过程中,会产生1.535gs延时,信号传播速度为200n)/gs,不考虑以太网帧的前导码,则H3与H4之间理论上可以相距的最 远距离是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"要解决“理论上可以相距的最远距离”那么最远肯定要保证能检测到碰 撞,而以太网规定短帧长为64B,其中Hub为100Base-T集线器,可知线路的传输速率为lOOMbit/s,则单程传输时延为64BF100Mbit/s一2=2・56昨 又Hub再产生比特流的过程中会 导致延时1・535収 则单程的传播时延为2.56盟-1.535盟=1.025卩s,从而H3与H4之间理论上 可以相距的最远距离为200m/|isxl .025(is=205m。","type":"choice","options":{"C":"359m","B":"205m","D":"512m","A":"200m"},"answer":"B"},{"id":"learncoder_115_24719","stem":"(2014年统考真题)主机甲与主机乙之间使用后退N帧协议(GBN)传输数据,甲的 发送窗口尺寸为1000,数据帧长为1000字节,信道带宽为lOOMbiVs,乙每收到一个数据帧 立即利用一个短帧(忽略其传输延迟)进行确认,若甲乙之间的单向传播延迟是50ms,则甲可 以达到的最大平均数据传输速率约为( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"考虑制约甲的数据传输速率的因素,首先,信道带宽能直接制约数据的 传输速率,传输速率一定是小于等于信道带宽的;其次,主机甲乙之间采用后退N帧协议, 那么因为甲乙主机之间釆用后退N帧协议传输数据,要考虑发送一个数据到接收到它的确认 之前,最多能发送多少数据。甲的最大传输速率受这两个条件的约束,所以甲的最大传输速 率是这两个值中小的那一个。甲的发送窗口的尺寸为1000,即收到第一个数据的确认之前, 最多能发送1000个数据帧,也就是发送1000xl000B=lMB的内容,而从发送第一个帧到接 收到它的确认的时间是一个往返时延,也就是50ms+50ms=l00ms=0.1 s,即在100ms中,最 多能传输1MB的数据,因此此时的最大传输速率为lMB/0・ls=10MB/s=80Mbit/s。信道带宽 为 100Mbit/s,所以答案为 min{80Mbit/s?100Mbit/s}=80Mbit/s,选 C。","type":"choice","options":{"A":"lOMbit/s","C":"80Mbit/s","B":"20MbiVs","D":"lOOMbit/s"},"answer":"C"},{"id":"learncoder_115_24722","stem":"(2015年统考真题)下列关于CSMA/CD协议的叙述中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":" CSMA/CD适用于有线网络,而CSMA/CA则广泛应用于无线局域网。其 他选项均正确。","type":"choice","options":{"C":"需要根据网络跨距和数据传输速率限定最小帧长","D":"当信号传播延迟趋近0时,信道利用率趋近100%","A":"边发送数据帧,边检测是否发生冲突","B":"适用于无线网络,以实现无线链路共享"},"answer":"B"},{"id":"learncoder_115_24720","stem":"(2014年统考真题)站点A、B、C通过CDMA共享链路,A、E、C的码片序列(chippingsequence)分别是(1,-1,1,-1)、(1,1,-1,-1)和(1,1,1,1)若 C 从链路上收到的序列是(2,0,2,0,0,-2, 0,-2,0,2,0,2),则C收到A发送的数据是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"把收到的序列分成每4个数字一组,即为(2,0,2,0)、(0,-2,0,-2)、(0,2,0,2), 因为题目求的是A发送的数据,因此把这3组数据与A站的码片序列(1,1,1,1)做内积运算, 结果分别是(2,0,2,0) • (1,1,1,1)/4=1、(0,-2,0,-2)・(1,1,1,1)/4=-1、(0,2,0,2) • (1 ,1,1,1)/4=1,所以 C接收到的A发送的数据是101,选B。","type":"choice","options":{"A":"000","C":"110","B":"101","D":"111"},"answer":"B"},{"id":"learncoder_115_24723","stem":"(2015年统考真题)下列关于交换机的叙述中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"从本质上说,交换机就是一个多端口的网桥(A正确),工作在数据链路 层(因此不能实现不同网络层协议的网络互连,D错误),交换机能经济地将网络分成小的冲 突域(B错误),广播域属于网络层的概念,只有网络层设备(路由器)才能分割广播域(C 错误)。","type":"choice","options":{"A":"以太网交换机本质上是一种多端口网桥","D":"以太网交换机可实现采用不同网络层协议的网络互连","B":"通过交换机互连的一组工作站构成一个冲突域","C":"交换机每个端口所连网络构成一个独立的广播域"},"answer":"A"},{"id":"learncoder_115_24718","stem":"(2014年统考真题)某以太网拓扑及交换机当前转发表如图3-22所示,主机00-el-d5-00-23-al 向主机 00-el-d5-00-23-cl 发送 1 个数据帧,主机 00-el-d5-00-23-cl 收到该 帧后,向主机00-el-d5-00-23-al发送1个确认帧,交换机对这两个帧的转发端口分别是(\t)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第3章)/image4.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"主机00-el-d5-00-23-al向主机00-el-d5-00-23-cl发送数据帧时,交换机转发表中没有00-el-d5-00-23-cl这项,所以向除1端口外的所有端口广播这帧,即2、3端口 会转发这帧;同时,因为转发表中并没有00-el-d5-00-23-al\t所以转发表会把(目的地址00-el-d5-00-23-al,端口 1)这项加入转发表。而当 00・el・d5・00-23・cl 向 00-el-d5-00-23-al 发 送确认帧时,由于转发表已经有00-el-d5-00-23-al这项,所以交换机只向1端口转发,选B。","type":"choice","options":{"D":"{1,2,3}和{1}","C":"{2,3}和{1,2}","A":"{3}和{1}","B":"{2,3}和{1}"},"answer":"B"},{"id":"learncoder_115_24715","stem":"(2013年统考真题)下列介质访问控制方法中,可能发生冲突的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"信道划分介质访问控制都不会发生冲突,如频分多路复用(FDMA)、时 分多路复用(TDMA)、码分多路复用(CDMA\"波分多路复用(WDM)等。而随机访问介 质访问控制是可能发生冲突的,如CSMA、CSMA/CD等。","type":"choice","options":{"A":"CDMA","B":"CSMA","D":"FDMA","C":"TDMA"},"answer":"B"},{"id":"learncoder_115_24716","stem":"(2013年统考真题)HDLC协议对01111100 01111110组帧后对应的比特串为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":" HDLC协议对比特串进行组帧时,HDLC数据帧以位模式0111 1110标志 每一个帧的开始和结束,因此在帧数据中凡是出现了 5个连续的“1”的时候,就会在输出的位流中填充一个“0”。","type":"choice","options":{"A":"01111100 00111110 10","B":"01111100 01111101 01111110","C":"01111100 01111101 0","D":"01111100 01111110 01111101"},"answer":"A"},{"id":"learncoder_115_24717","stem":"(2013年统考真题)对于100Mbit/s的以太网交换机,当输出端口无排队,以直通 交换(cut-through switching)方式转发一个以太网帧(不包括前导码)时,引入的转发延迟 至少是( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"直通交换方式是指以太网交换机可以在各端口间交换数据。它在输入端 口检测到一个数据包时,检查该包的包头,获取包的目的地址,启动内部的动态查找表转换 成相应的输出端口,在输入与输出交叉处接通,把数据包直通到相应的端口,实现交换功能。 通常情况下,直通交换方式只检查数据包的包头即前14个字节,由于不需要考虑前导码,只 需要检测目的地址的6B (48bit),所以最短的传输延迟是0.48阴。","type":"choice","options":{"D":"121.44us","A":"0us","B":"0.48us","C":"5.12us"},"answer":"B"},{"id":"learncoder_115_24708","stem":" PPP中的LCP帧起到的作用是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"PPP帧在默认配置下,地址和控制域总是常量,所以LCP提供了必要的 机制,允许双方协商一个选项。在建立状态阶段,LCP协商数据链路协议中的选项,它并不 真正关心这些选项本身,只提供一个协商选择的机制。","type":"choice","options":{"B":"配置网络层协议","C":"检查数据链路层的错误,并通知错误信息","A":"在建立状态阶段协商数据链路协议的选项","D":"安全控制,保护通信双方的数据安全"},"answer":"A"},{"id":"learncoder_115_24711","stem":"\t对于使用交换机连接起来的10Mbit/s的共享式以太网,若有10个用户,则每个用户能够占有的带宽为()。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"对于普通的lOMbit/s的共享式以太网,若有N个用户,则每个用户占有 的平均带宽只有总带宽(lOMbit/s)的N分之一。但使用以太网交换机时,虽然在每个端口 到主机的带宽还是10Mbit/s,但由于一个用户在通信时是独占而不是和其他网络用户共享传 输媒体的带宽3国此每个用户仍然可以得到10Mbit/s的带宽,这正是交换机的最大优点。","type":"choice","options":{"A":"IMbit/s","C":"lOMbit/s","B":"2Mbit/s","D":"lOOMbit/s"},"answer":"C"},{"id":"learncoder_115_24714","stem":"如图3-21所示,为两个局域网LAN1和LAN2通过网桥1和网桥2互连后形成的网 络结构。假设站A发送一个帧,但其目的地址均不在这两个网桥的地址转发表中,这样的结 果会是该帧()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第3章)/image3.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"当站点A发送一个目的地址均不在这两个网桥的地址转发表中的帧时, 网桥1和网桥2均进行扩散传播,这样经过网桥1转发的帧将继续经过网桥2的转发,而经 过网桥2转发的帧也会继续经过网桥1的转发,这样这个数据帧将在整个网络中无限制地循 环下去(兜圈子)。","type":"choice","options":{"D":"经网桥1 (或网桥2)到达LAN2,再经过网桥2 (或网桥1)返回LAN1后被站A 吸收","A":"经网桥1 (或网桥2)后被站B接收","C":"在整个网络中无限次地循环下去","B":"被网桥1 (或网桥2)丢弃"},"answer":"C"},{"id":"learncoder_115_24709","stem":"下列帧类型中,不属于HDLC帧类型的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"在HDLC中,帧被分为3类,分别为信息帧、监控帧和无编号帧(记忆 方式:每当看到HDLC帧的分类就想到无监息=无奸细)。","type":"choice","options":{"D":"无编号帧","A":"信息帧","B":"确认帧","C":"监控帧"},"answer":"B"},{"id":"learncoder_115_24712","stem":"在使用以太网交换机的局域网中,以下表述哪个是正确的( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"交换机的每个端口都有它自己的冲突域,所以交换机永远不会由于冲突 而丢失帧,因此A是错误的。交换机不可以隔离广播域,所以C也是错误的。LLC是逻辑链 路控制,它在MAC层之上,用于向网络层提供一个接口以隐藏各种802网络之间的差异, 交换机应该是按照MAC地址转发的。","type":"choice","options":{"C":"交换机可以隔离广播域","A":"局域网只包含一个冲突域","D":"交换机根据LLC目的地址转发","B":"交换机的多个端口可以并行传输"},"answer":"B"},{"id":"learncoder_115_24713","stem":"\t在以太网上“阻塞”信号的功能是( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"属于理解性的题目,见知识点讲解。","type":"choice","options":{"C":"当发现冲突时,CSMA/CD发送一个“阻塞”信号。当所有的站都检测到阻塞信号时, 它们立即开始竞争访问介质","D":"当发现冲突时,CSMA/CA发送一个“阻塞”信号。当所有的站都检测到阻塞信号时, 它们立即开始竞争访问介质","A":"当发现冲突时,CSMA/CA发送一个“阻塞”信号。当所有的站都检测到阻塞信号时, 它们立即停止发送尝试","B":"当发现冲突时,CSMA/CD发送一个“阻塞”信号。当所有的站都检测到阻塞信号时, 它们立即停止发送尝试"},"answer":"B"},{"id":"learncoder_115_24710","stem":"HDLC使用(\t)方法来保证数据的透明传输。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":" HDLC采用零比特填充法来实现数据链路层的透明传输(PPP釆用了字节 填充方式来成帧),即在两个标志字段之间不出现6个连续“1”。具体做法:在发送端,当一 串比特流尚未加上标志字段时,先用硬件扫描整个帧,只要发现5个连续的“1\",就在其后 '插入1个“0”;而在接收端先找到F字段以确定帧边界,接着再对其中的比特流进行扫描,. 每当发现5个连续的“1”,就将这5个连续“1”后的一个“0”删除,将其还原成原来的比 特流。","type":"choice","options":{"B":"字节填充","D":"比特计数","C":"字符计数","A":"比特填充"},"answer":"A"},{"id":"learncoder_115_24705","stem":"\t通过交换机连接的一组工作站( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"集线器既不能隔离冲突域,也不能隔离广播域;交换机可以隔离冲突域, 但不能隔离广播域札路由器既可以隔离冲突域,也可以隔离广播域。","type":"choice","options":{"B":"组成一个广播域,但不是一个冲突域","D":"既不是冲突域,也不是广播域","A":"组成一个冲突域,但L不是一个广播域","C":"既是一个冲突域,又是一个广播域"},"answer":"B"},{"id":"learncoder_115_24706","stem":"某IP网络的连接如图3-20所示,在这种配置下IP全局广播分组不能够通过的路径是()。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第3章)/image2.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"由于路由器可以隔离广播包的转发,因此只要是需要经过路由器的路径 都是不能通过的路径。","type":"choice","options":{"D":"计算机S和计算机T之间的路径","B":"计算机P和计算机S之间的路径","A":"计算机P和计算机Q之间的路径","C":"计算机Q和计算机R之间的路径"},"answer":"B"},{"id":"learncoder_115_24707","stem":" PPP提供的功能有()。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":" PPP主要由3个部分组成。1)一个将IP数据报封装到串行链路的方法。2)一个链路控制协议(LCP)。其用于建立、配置和测试数据链路连接,并在它们不需 要时将它们释放。3)一套网络控制协议(NCP)。其中每个协议支持不同的网络层协议,用来建立和配置 不同的网络层协议。","type":"choice","options":{"A":"一种成帧方法","B":"链路控制协议(LCP)","D":"A、B和C都是","C":"网络控制协议(NCP)"},"answer":"D"},{"id":"learncoder_115_24703","stem":"网卡实现的主要功能是()。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"通常情况下,网卡是用来实现以太网协议的,所以网卡主要实现了物理 层和数据链路层的功能。","type":"choice","options":{"D":"数据链路层与应用层的功能","C":"物理层与网络层的功能","B":"数据链路层与网络层的功能","A":"物理层与数据链路层的功能"},"answer":"A"},{"id":"learncoder_115_24704","stem":"以太网交换机是按照(\t)进行转发的。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"交换机是数据链路层设备,所以是根据MAC地址进行转发的。","type":"choice","options":{"C":"协议类型","B":"IP地址","D":"端口号","A":"MAC地址"},"answer":"A"},{"id":"learncoder_115_24698","stem":"在二进制后退算法中,如果发生了 11次碰撞,那么站点会在0和(\t)之间选择一个随机数。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"以太网在到达10次冲突之后,随机数的区间固定在最大值1023上,以 后不再增加。若连续超过16次冲突,则丢弃。","type":"choice","options":{"C":"1023","B":"511","A":"255","D":"2047"},"answer":"C"},{"id":"learncoder_115_24699","stem":"以太网在检测到(\t)次冲突后,控制器会放弃发送","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"根据二进制指数后退协议,在检测到16次冲突之后,控制器会放弃努力, 并且给计算机送回一个失败报告。","type":"choice","options":{"D":"17","C":"16","A":"10","B":"15"},"answer":"C"},{"id":"learncoder_115_24702","stem":"一个通过以太网传送的IP分组有60B长,其中包括所有头部。若没有使用LLC,则以太网帧中需要(\t)填充字节。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"以太网最小帧的长度是64B,其中包括了在以太网帧头部的地址、类型域 以及帧尾部的校验和域。这些部分的总共长度是18B,那么加上MAC帧的数据部分60B (整 个IP数据报就是MAC帧的数据部分),整个帧长度就为78B,达到了以太网最小帧长度64B 的要求,所以不需要再添加填充字节。","type":"choice","options":{"A":"4字节","B":"1440字节","D":"64字节","C":"0字节"},"answer":"C"},{"id":"learncoder_115_24697","stem":"在以太网的二进制后退算法中,在4次碰撞之后,站点会在0和(\t)之间选择一个随机数。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"一般来说,在第i次碰撞后,站点会在0〜2冷中随机选择一个数M,然 后等待M倍的争用期再发送数据。","type":"choice","options":{"A":"7","D":"16","B":"8","C":"15"},"answer":"C"},{"id":"learncoder_115_24700","stem":"下列关于令牌环网络的描述中,错误的是( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"令牌环网络的拓扑结构为环形,存在一个令牌不停地在环中流动。只有 获得了令牌的主机才能够发送数据,因此是不存在冲突的。所以A选项是错误的,其他选项 都是令牌环网络的特点。","type":"choice","options":{"D":"数据从一个结点到另一个结点的时间可以计算","B":"同一时刻,环上只有一个数据在传输","C":"网上所有结点共享网络带宽","A":"令牌环网络存在冲突"},"answer":"A"},{"id":"learncoder_115_24701","stem":"在下列以太网电缆标准中,(\t)是使用光纤的。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"以太网通常使用的电缆有4种,见表3.4。","type":"choice","options":{"B":"10Base-F","A":"10Base5","D":"10Base2","C":"lOBase-T"},"answer":"B"},{"id":"learncoder_115_24695","stem":"同一局域网上的两个设备具有相同的静态MAC地址,其结果是( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"在使用静态地址的系统上,如果有重复的硬件地址,那么这两个设备都 不能通信。在局域网上,每个设备必须有一个唯一的硬件地址。","type":"choice","options":{"A":"首次引导的设备使用该地址,第二个设备不能通信","D":"这两个设备都不能通信","B":"最后引导的设备使用该地址,第一个设备不能通信","C":"这两个设备都能正常通信"},"answer":"D"},{"id":"learncoder_115_24696","stem":"以太网帧的最小长度是(\t)","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"以太网有最小帧长度限制,设置最小帧长是为了区分开噪声和因发生碰 撞而异常终止的短帧,它必须要大于64B。","type":"choice","options":{"C":"128","A":"32","B":"64","D":"256"},"answer":"B"},{"id":"learncoder_115_24694","stem":"\tCSMA协议可以利用多种监听算法来减小发送冲突的概率,下列关于各种监听算法 的描述中,正确的是()。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"按总线争用协议来分类,CSMA有3种类型。1)非坚持CSMAo 一个站点在发送数据帧之前,先要对介质进行检测。如果没有其他站 点在发送数据,则该站点开始发送数据。如果介质被占用,则该站点不会持续监听介质,而 等待一个随机的延迟时间后再监听。采用随机的监听延迟时间可以减少冲突的可能性,但其 缺点也是很明显的:即使有多个站点有数据要发送,因为此时所有站点可能都在等待各自的随 机延迟时间,而介质仍然可能处于空闲状态,这样就使彳昙介质的利用率较低,所以排除选项A。2)1-坚持CSMA。当一个站点要发送数据帧时,它就监听介质,判断当前时刻是否有其 他站点正在传输数据。如果介质被占用,该站点将会持续监听直至介质空闲。一旦该站点检 测到介质空闲,它就立即发送数据帧,所以D选项是正确的。若产生冲突,则等待一个随机 时间再监听。之所以叫“1-坚持”,是当一个站点发现介质空闲时,它传输数据帧的概率是1。 1-坚持CSMA的优点是只要介质空闲,站点就立即发送数据;它的缺点是假如有两个或两个 以上的站点有数据要发送,冲突就不可避免,所以排除选项B。3)p-坚持CSMA,°p-坚持CSMA是非坚持CSMA和1-坚持CSMA的折中。p-坚持CSMA 应用于划分时槽的介质,其工作过程:当一个站点要发送数据帧时,它先检测介质。若介质 空闲,则该站点按照概率p的可能性发送数据,而有1-p的概率会把要发送数据帧的任务延 迟到下一个时槽。按照这样的规则,若下一个时槽也是空闲的,则站点同样按照概率p的可 能性发送数据,所以说如果处理得当p-坚持型监听算法还是可以减少网络的空闲时间的,所 以排除选项C","type":"choice","options":{"B":"1-坚持型监听算法有利于减少冲突的概率","C":"p-坚持型监听算法无法减少网络的空闲时间","D":"1-坚持型监听算法能够及时抢占信道","A":"非坚持型监听算法有利于减少网络空闲时间"},"answer":"D"},{"id":"learncoder_115_24692","stem":"全双工以太网传输技术的特点是()。I.能同时发送和接收帧\tII.不受CSMA/CD限制III.不能同时发送和接收帧\tIV.受CSMA/CD限制","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"因为全双工既有接收数据的通道又有发送数据的通道,所以能同时发送 和接收帧。CSMA/CD协议是防止发送和接收冲突的协议,而全双工根本不存在冲突,所以 不受CSMA/CD的限制。","type":"choice","options":{"D":"III、iv","A":"I、II","C":"II、III","B":"I、 IV"},"answer":"A"},{"id":"learncoder_115_24693","stem":"以太网中如果发生介质访问冲突,按照二进制指数后退算法决定下一次重发的时间,使用二进制后退算法的理由是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"以太网采用CSMA/CD技為 当网络上的流量越多,负载越大时,发生 冲突的几率也会越大。当工作站发送的数据帧因*突而传输失败时,会采用二进制后退算法 后退一段时间后重新发送数据帧。二进制后退算法可以动态地适应发送站点的数量,后退延 时的取值范围与重发次数n形成二进制指数关系。当网络负载小时,后退延时的取值范围也小;而当负载大时,后退延时的取值范围也随着增大。二进制后退算法的优点是把后退延时 的平均取值与负载的大小联系起来。所以,二进制后退算法考虑了网络负载对冲突的影响。","type":"choice","options":{"A":"这种算法简单","C":"这种算法考虑了网络负载对冲突的影响","D":"这种算法与网络的规模大小无关","B":"这种算法执行速度快"},"answer":"C"},{"id":"learncoder_115_24689","stem":"下列协议中,不会发生碰撞的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":" TDM属于静态划分信道的方式,各结点分时使用信道,不会发生碰撞; 而ALOHA、CSMA、CSMA/CD都属于动态的随机访问协议,都采用检测碰撞的策略来应对 碰撞,因此都会发生碰撞。","type":"choice","options":{"A":"TDM","B":"ALOHA","C":"CSMA","D":"CSMA/CD"},"answer":"A"},{"id":"learncoder_115_24690","stem":"在以下几种CSMA协议中,(\t)协议在监听到介质是空闲时仍可能不发送。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"坚持的CSMA当检测到信道为空时,就会发送数据;当检测到信道为 忙时,就一直检测信道的状态。非坚持CSMA也是当检测到信道为空时就发送数据,但是, 若它检测到信道正在被使用之中,则不会持续地对信道进行监听。当一个站准备好要发送数 据时,p-坚持CSMA会检测信道。若信道是空闲的,贝!]它按照概率p的可能性发送数据;在 概率1-p的情况下,它会选择不发送数据。","type":"choice","options":{"D":"以上都不是","C":"p-坚持CSMA","A":"1 一坚持CSMA","B":"非坚持CSMA"},"answer":"C"},{"id":"learncoder_115_24688","stem":"多路复用器的主要功能是( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"多路复用的主要功能是要结合来自多条线路的传输,从而提高线路的使 用率。","type":"choice","options":{"A":"执行数/模转换","D":"减少主机的通信处理强度","C":"执行串/并转换","B":"结合来自多条线路的传输"},"answer":"B"},{"id":"learncoder_115_24691","stem":"\t根据CSMA/CD协议的工作原理,需要提高最短帧长度的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"以太网的最短帧长度是为了检测冲突的,其基本思想是发送一帧的时间 需要大于或等于信号沿着信道来回一趟的时间。所以在冲突域最大距离不变的情况下,如果 网络传输速率提高说明发送一帧需要更短的时间。那么在这种情况下,就应该提高最短帧长 度来保证发送一帧的时间大于或等于信号沿信道来回一趟的时间。","type":"choice","options":{"C":"在冲突域不变的情况下减少线路的中继器数量","A":"网络传输速率不变,冲突域的最大距离变短","B":"上层协议使用TCP的概率增加","D":"冲突域的最大距离不变,网络传输速率提高"},"answer":"D"},{"id":"learncoder_115_24686","stem":"在下列多路复用技术中,(\t)具有动态分配时隙的功能。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"异步时分多路复用采用动态分配时间片(时隙)的方法,又称为统计时 分多路复用。","type":"choice","options":{"D":"频分多路复用","B":"码分多路复用","A":"同步时分多路复用","C":"统计时分多路复用"},"answer":"C"},{"id":"learncoder_115_24687","stem":"将物理信道的总频带宽分割成若干个子信道,每个子信道传输一路信号,这种复用 技术称为()。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"多路复用有两种基本形式:频分多路复用和时分多路复用。频分多路复 用以信道频带作为分割对象,通过为多个子信道分配互不重叠的频率范围的方法实现多路复 用。时分多路复用以信道传输时间作为分割对象,通过为多个子信道分配互不重叠的时间片 的方法实现多路复用,它又包括两种类型:同步时分多路复用与异步时分多路复用。同步时• 分多路复用将时间片(时隙)预先分配给各个信道,并且时间片固定不变。异步时分多路复 用釆用动态分配时间片的方法,又称为统计时分多路复用。波分多路复用实际上是光的频分 多路复用。","type":"choice","options":{"D":"频分多路复用","B":"码分多路复用","A":"同步时分多路复用","C":"异步时分多路复用"},"answer":"D"},{"id":"learncoder_115_24685","stem":"对于无序接收的滑动窗口协议,若序号位数为m则发送窗口最大尺寸为( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题出得很巧妙,没有直接告诉使用的是选择重传协议,而是通过间接 的方式给出。题目说无序接收的滑动窗口协议,说明接收窗口大于1,所以得出数据链路层 使用的是选择重传协议,而选择重传协议发送窗口最大尺寸为2\"1。","type":"choice","options":{"B":"2n","A":"2^n-l","D":"2^n-1","C":"2n-l"},"answer":"D"},{"id":"learncoder_115_24683","stem":"假设数据链路层采用后退N帧协议进行流量控制,发送方已经发送了编号为0〜6号的帧。当计时器超时时,2号帧的确认还没有返回,则发送方需要重发的帧数是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"因为2号帧没有返回确认,当计时器超时时,2号帧及其后面的帧都要重 发,因此共有5个帧需要重发。","type":"choice","options":{"A":"1","C":"6","D":"7","B":"5"},"answer":"B"},{"id":"learncoder_115_24684","stem":"信道速率为4kbit/s,采用停止-等待协议。传播时延A20ms,确认帧长度和处理时间均可忽略。问帧长(\t)才能使信道的利用率达到至少50%。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"根据信道利用率的计算公式,在确认帧长度和处理时间均可忽略不计的 情况下,信道的利用率与发送时间和传播时间有关,约等于t发送时间仗发送时间+2xt传播时间)。 当发送一帧的时间等于信道的传播时延的2倍时,信道利用率是50%,或者说当发送一帧的 时间等于来回路程的传播时延时,效率将是50%,即20msx2=40mso现在发送速率是每秒 4000bit,即发送一位需要 0.25ms,则帧长=40/0・25=160bit。论坛答疑:此题解析里的信道利用率之发送时间/(t发送时间+2xt传播时间),但是谢希仁编写的第5版教材第86页说极限信道利用率Smax=发送时间/ (发送时间+单程端到端时延),是哪个 正确?还是我丢了什么条件?解析:谢希仁编写的第5版教材第86页讲到的信道利用率是在理想情况下,也就是以太 网各站发送数据都不会发生碰撞,而此题题干已说明釆用停止-等待协议,也就是有可能发生 碰撞,那么就不能使用理想情况下的计算公式。而应该使用该教材第192页上方的信道利用 率计算公式:U=Td/(Td+RTT+Ta),题干中已经说明忽略处理时间,所以无需计算Ta,而RTT 就是2倍的传播时间,Td是分组的发送时间,•于是可以得到22题解析中的公式。","type":"choice","options":{"A":"40bit","B":"80bit","D":"320bit","C":"160bit"},"answer":"C"},{"id":"learncoder_115_24679","stem":"为了纠正2比特的错误,编码的海明距应该为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"纠错d位,需要码距为2d+l的编码方案。","type":"choice","options":{"C":"4","D":"5","B":"3","A":"2"},"answer":"B"},{"id":"learncoder_115_24682","stem":"使用后退N帧协议,根据图3.19所示的滑动窗口状态(发送窗口大小为2,接收窗口大小为1),指出通信双方处于何种状态( )。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第3章)/image1.png'/>(提示:发送方阴影部分表示已经发送的帧,但是没有收到确认;接收方阴影部分表示期 待接收的帧。)","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"滑动窗口的本质是在任何时刻,发送方总是维持着一组序列号,分别对 应于允许发送的帧,称这些帧落在发送窗口之内。发送窗口内的序列号代表了那些已经被发 送,但是还没有被确认的帧。类似地,接收方也维持着一个接收窗口,对应于一组允许它接 收的帧。从图3-19中可以看出,发送方已经发送了 0号帧和1号帧,而接收方已经接收完了 0号帧,并且对0号帧发回了确认,才使得接收窗口后移到1号帧位置。","type":"choice","options":{"B":"发送方发送完1号帧,接收方接收完0号帧","A":"发送方发送完0号帧,接收方准备接收0号帧","D":"发送方发送完1号帧,接收方接收完1号帧","C":"发送方发送完0号帧,接收方准备接收1号帧"},"answer":"B"},{"id":"learncoder_115_24677","stem":"发送方准备发送的信息位为1101011011,采用CRC校验算法,生成多项式为 G(x)f4+x+1,那么发出的校验位应该为( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"首先根据生成多项式G(x)=x4+x+1得到CRC的校验码为10011;然后利用短除法来计算校验码,具 体流程如图3-27所示;最后余数为110。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第3章)/image7.png'/>","type":"choice","options":{"A":"0110","D":"1110","C":"1001","B":"1010"},"answer":"D"},{"id":"learncoder_115_24680","stem":"流量控制是为防止(\t)所需要的。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"流量控制就是要控制发送方发送数据的 速率,使接收方来得及接收,目的是防止接收方缓冲区溢出。","type":"choice","options":{"B":"发送方缓冲区溢出","A":"位错误","D":"接收方与发送方间冲突","C":"接收方缓冲区溢出"},"answer":"C"},{"id":"learncoder_115_24681","stem":"\t在简单的停止-等待协议中,当帧出现丢失时,发送端会永远等待下去,解决这种死 锁现象的办法是()。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"在一个有噪声的信道中,帧可能会被损坏,也可能完全丢失。这时候需要增加一个计时器,当发送方发送出一帧后,计时器开始计 时,当该帧的确认在计时器到时之前到达发送方,则取消该计时器;否则,如果在计时器到 时,发送方还没有收到该帧的确认就再次发送该帧,这样就可以打破死锁。","type":"choice","options":{"B":"帧序号","D":"超时机制","A":"差错校验","C":"ACK机制"},"answer":"D"},{"id":"learncoder_115_24678","stem":"为了检测5比特的错误,编码的海明距应该为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"3.3.2小节中详细讲解过了:检错d位,需要码距为d+1的编码方案","type":"choice","options":{"C":"3","B":"6","D":"5","A":"4"},"answer":"B"},{"id":"learncoder_115_24673","stem":"从滑动窗口的观点看,当发送窗口为1,接收窗口为I时,相当于ARQ的(\t)方式。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"概念题目。","type":"choice","options":{"B":"选择重传ARQ","D":"连续ARQ","C":"停止-等待","A":"回退N帧ARQ"},"answer":"C"},{"id":"learncoder_115_24676","stem":"下列关于循环冗余校验的说法中,(\t)是错误的。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"在使用多项式编码时,发送方和接收方必须预先商定一个生成多项式。发送方按照模2除法,得到校验码,在发送数据的时候把该校验码加在数据后面。接收方收 到数据后,也需要根据同一个生成多项式来验证数据的正确性。所以发送方和接收方在通信 前必须要商定一个生成多项式。A选项为循环冗余校验码的检错特点。CRC肯定可以使用硬件来完成,只是费用更大而 已。CRC只能保证交给上层的数据在传输中没有错误,但这并不是可靠传输,如帧失序、帧 丢失等差错就不能靠CRC来完成,而这些都是可靠传输需要做的。","type":"choice","options":{"C":"CRC可以使用硬件来完成","B":"通信双方可以无需商定就直接使用多项式编码","A":"带r个校验位的多项式编码可以检测到所有长度小于或等于r的突发性错误","D":"在数据链路层使用CRC,能够实现无比特差错的传输,但这不是可靠的传输"},"answer":"B"},{"id":"learncoder_115_24674","stem":"对于窗口大小为n的滑动窗口,最多可以有(\t)帧已发送但没有确认。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"一方面,在连续ARQ协议中,必须发送窗口的大小W窗口总数-1,例如, 窗口总数为8个,编号为0〜7,假设这8个帧都已发出,下一轮又发出编号为0〜7帧共8 个帧,接收方将无法判断第二轮发的8个帧到底是重传帧还是新帧,因为它们的序号完全相 同。另一方面,对于回退N帧协议,发送窗口的大小可以达到窗口总数-1。因为它的接收窗 口大小为1,所有帧保证按序接收。所以,对于窗口大小为11的滑动窗口,其发送窗口大小 最大为n-1,即最多可以有n-1帧已发送但没有确认。","type":"choice","options":{"C":"n","D":"n/2","A":"0","B":"n-1"},"answer":"B"},{"id":"learncoder_115_24675","stem":"下列属于奇偶校验码特征的是()。I.只能检查出奇数个比特错误\tII.能查出任意一个比特位的错误III.比crc可靠","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"空I :奇偶校验的原理是通过增加冗余位来使得码字中“1”的个数保持为奇数个或者偶数 个的编码方法。若出现奇数个比特的错误,“1”的个数将与原来“1”的个数不一样,故可以 发现奇数个比特的错误。而如果出现偶数个比特的错误,“1”的个数仍然与原来的“1”的个 数相同,故无法发现偶数个比特的错误。II:由I的分析知II错误。III: crc可以检验出任意位错误,而奇偶校验码只能检验奇数个错误,故in错误。","type":"choice","options":{"C":"仅I","B":"仅 I、III","A":"仅 I、II","D":"仅II"},"answer":"C"},{"id":"learncoder_115_24672","stem":"数据链路层釆用了后退N帧协议,如果发送窗口的大小是32,那么至少需要(\t)位的帧序号才能保证协议不出错。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"在后退N帧协议中,帧号M发送窗口+1,在题目中发送窗口的大小是32, 那么帧号最大号码应该是32 (从0开始,共33个)。因为25<33<26,所以至少需要6位的帧 序号才能达到要求。","type":"choice","options":{"D":"7位","C":"6位","A":"4位","B":"5位"},"answer":"C"},{"id":"learncoder_115_24666","stem":"在数据链路层中,网络互连表现为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"数据链路层的主要任务是将一个原始的传输设施(物理层设备)转变成一 条逻辑的传输线路。数据链路层的传输单元为帧,网络层的传输单元为扌艮文,物理层的传输 单元为比特,所以A、C都是错误的。而连接不同体系结构的网络的工作是在网络层完成的。","type":"choice","options":{"A":"在电缆段之间复制比特流","D":"连接不同体系结构的网络","B":"在网段之间转发数据帧","C":"在网络之间转发报文"},"answer":"B"},{"id":"learncoder_115_24667","stem":"假设物理信道的伎输成功率是95%,而平均一个网络层的分组需要10个数据链路层的帧来发送。如果数据链路层采用了无确认的无连接服务,那么发送网络层分组的成功率是 (\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"要成功发送一个网络层的分组,需要成功发送10个数据链路层帧。成功 发送10个数据链路层帧的概率是(0・95)%0.598,即大约只有60%的成功率。这个结论说明了在不可靠的信道上无确认的服务效率很低。为了提高可靠性应该引入有 确认的服务。","type":"choice","options":{"D":"95%","C":"80%","B":"60%","A":"40%"},"answer":"B"},{"id":"learncoder_115_24670","stem":"采用HDLC传输比特串0111 1111 1000 001,在比特填充后输出为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":" HDLC数据帧以位模式0111 1110标志每个帧的开始和结束,因此在帧数 据中凡是出现了 5个连续的位“1”时,就会在输出的位流中填充一个“0”。","type":"choice","options":{"C":"0111 1011 1100 0001","A":"0111 1101 1100 0001","D":"0111 1110 1100 0001","B":"0101 1111 1100 0001"},"answer":"A"},{"id":"learncoder_115_24668","stem":"在可靠传输机制中,发送窗口的位置由窗口前沿和后沿的位置共同确定,经过一段时 间,发送窗口后沿的变化情况可能为( )。I.原地不动\tII.向前移动\tIII.向后移动","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"发送窗口后沿的变化情况只能有两种:①原地不动(没有收到新的确认); ②向前移动(收到了新的确认)。发送窗口不可能向后移动,因为不可能撤销已收到的确认。","type":"choice","options":{"D":"都有可能","A":"I 、III","B":"I、II","C":"II、III"},"answer":"B"},{"id":"learncoder_115_24671","stem":"数据链路层提供的3种基本服务不包括( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"连接是建立在确认机制的基础之上的,所以数据链路层没有无确认有连接 的服务。","type":"choice","options":{"C":"无确认的有连接服务","A":"无确认的无连接服务","D":"有确认的有连接服务","B":"有确认的无连接服务"},"answer":"C"},{"id":"learncoder_115_24669","stem":"以下哪种滑动窗口协议收到的分组一定是按序接收的( )。I.停止-等待协议\tII.后退\tIII.帧协议 IV.选择重传协议","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"要使分组一定是按序接收的,接收窗口的大小为1才能满足,只有停止-等待协议与后退N帧协议的接收窗口大小为1-","type":"choice","options":{"D":"都有可能","B":"I、III","A":"I、II","C":"II、III"},"answer":"A"},{"id":"learncoder_115_24664","stem":"在OSI参考模型中,下面哪些是数据链路层的功能?(\t)I.帧同步\tII.差错控制III.流量控制\tIv.拥塞控制","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"分两种情况:第一种是在OSI参考模型中,数据链路层具有流量控制、差错控制。在TCP/IP 模型中,像流量控制与差错控制都已经交给传输层,故数据链路层已经没有了流量控制、差错控制等功能。无论哪种模型,帧同步是数据链路层的,拥塞控制是传输层的。","type":"choice","options":{"A":"I、 II 和 III","D":"II、III和IV","B":"I、 II和 IV","C":"I、III和IV"},"answer":"A"},{"id":"learncoder_115_24665","stem":"对于信道比较可靠并且对通信实时性要求高的网络,釆用(\t)数据链路层服务比较合适。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"无确认的无连接服务是指源机器向目标机器发送独立的帧,目标机器并不 对这些帧进行确认。事先并不建立逻辑连接,事后也不用释放逻辑连接。若由于线路上有噪 声而造成了某一帧丢失,则数据链路层并不会检测这样的丢帧现象,也不会回复。当误码率 很低时,这类服务是非常适合的,这时回复过程可以留给上面的各层来完成。这类服务对于 实时通信也是非常适合的,因为实时通信中数据的迟到比数据损坏更加不好。","type":"choice","options":{"C":"有确认的面向连接的服务","D":"无确认的面向连接的服务","A":"无确认的无连接服务","B":"有确认的无连接服务"},"answer":"A"},{"id":"learncoder_115_22582","stem":"局域网交换机首先完整地接收藪据帧,并进行差错检测。如果没有差错,则根据帧的目 的地址确定输岀端口号再转发出去。这种交换方式是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是局域网交换机的概念及基本原理知识点。局域网交换机的帧转发方 式一共有三种:直接交换式、存储转发式、改进的直接交换式,其中只有存储转发方式必须在完整 地接收一个帧后进行,答案G正确。填空题","type":"choice","options":{"B":"改进的直接交换","D":"查询交换","C":"存储转发交换","A":"直接交换"},"answer":"C"},{"id":"learncoder_115_22585","stem":"设A、B两站相距4 km,使用CSMA/CD协议,信号在网络上的传播速度为200 000 km/s, 两站发送速率为100 Mbps,A先发送数据,如果发生碰撞,则:(1)最先发送数据的A站最晚经过多长时间才检测到发生了碰撞?(2)检测到碰撞后,A已经发送了多少位(假设A要发送的帧足够长)?","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"空","type":"short_answer","answer":"\t(1)最先发送数据的A站最晚经过两倍的传播时延才检测到发生了碰撞:7=2tp =2x(4 km÷200 000 km/s) = 40 us所以A站最晚经过40 us才检测到发生了碰撞。\t(2)L=100 Mbpsx40 pus = 4 000 bit"},{"id":"learncoder_115_22581","stem":"下列选项中,参与网桥转发数据帧的(\t) 。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是网桥的概念及基本原理知识点。网桥根据数据帧中的源地址、目的地 址以及存储的端口-节点地址表来决定是否转发数据帧,如果源地址和目的地址处于同一个网 段,则不转发;否则,根据端口-节点地址表把该数据帧转发到相应的端口;如果端口-节点地址 表没有相应的节点地址信息,则网桥向所有端口广播该数据帧,答案D正确。","type":"choice","options":{"A":"源地址和目的地址","C":"端口-节点地址表","B":"目的地址和端口-节点地址表","D":"源地址、目的地址和端口-节点越址表"},"answer":"D"},{"id":"learncoder_115_22586","stem":"若采用滑动窗口进行数据发送,发送窗口 Sw=5,接收窗口 Rw= 3。并假设在传输过程中 不会发生分组失序。则:(1)给出求帧序列号个数SeqNum最小值的方法。(2)给出一个例子,说明序列号个数为SeqNum-1是不够的。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"空","type":"short_answer","answer":"(1)对于滑动窗口算法,要求SeqNumMSw+Rw,则SeqNum至少8个序列号,对应3比特,所以满足3<=23-1。\t(2)若帧序列号为(0,1,2,3,4,5,6),发生如下事件:a.发送方发送数据帧Data[0]至Data[4],它们均正确到达;b.接收方正确接收,提交上层,发送ACK[5],并将接收窗口滑动至{5,6,0};c.ACK[5]丢失,发送方未收到任何确认帧,超时重发Data[0]至Data[4];d.接收方检查接收窗口,接收Data[0],其他帧丢弃。由上述过程可以看出接收方接收的Data[0]是重复帧,滑动窗口协议出错,序列号个数必须 满足(1)中的约束。"},{"id":"learncoder_115_22576","stem":"下列关于令牌环网的说法中,不正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是令牌环网知识点。令牌环网使用令牌在各个节点之间传递来分配信 道的使用权,每个节点都可以在一定的时间内(令牌持有时间)获得发送数据的权利,并不是无 限制地持有令牌,因此答案C正确。","type":"choice","options":{"D":"令牌是指一种特殊的控制帧","A":"媒体的利用率比较公平","C":"节点可以一直持有令牌直至所要发送的数据传输完毕","B":"重负载下信道利用率高"},"answer":"C"},{"id":"learncoder_115_22579","stem":"广域网中,转发分组的设备是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是广域网知识点。广域网指的是单个网络,它使用节点交换机来连接网 络而不是路由器,因此答案C正确。","type":"choice","options":{"C":"节点交换机","D":"网桥","B":"中继器","A":"路由器"},"answer":"C"},{"id":"learncoder_115_22578","stem":"为实现透明传输,PPP协议使用的填充方法是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是PPP协议知识点。PPP是一种面向字节的协议,所有的帧长度都是整 数个字节,使用一种特殊的字符填充法完成数据的填充,因此答案B正确。","type":"choice","options":{"B":"字符填充","A":"位填充","C":"对字符数据使用字符填充,对非字符数据使用位填充","D":"对字符数据使用位填充,对非字符数据使用字符填充"},"answer":"B"},{"id":"learncoder_115_22575","stem":"IEEE.802.11标准中使用的直接序列扩频(DSSS)和跳频扩频(FHSS))技术可以工作在 ( )的ISM频段。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是IEEE 802.11知识点。IEEE 802.11主要支持1 Mbps和2 Mbps的数 据传输率,其在物理层使用的技术DSSS和FHSS的工作频段是3个国际规定的工业、科学和医 疗(ISM)的频段之一,即2 400 ~2 483. 5 MHz,简称2. 4 GHz频段,因此答案B正确。","type":"choice","options":{"D":"19.2GHz","C":"4.8 GHz","B":"2.4 GHz","A":"800 MHz"},"answer":"B"},{"id":"learncoder_115_22574","stem":"下列标准中,关于千兆位以太网的标准是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是流量控制知识点。数据链路层的流量控制是在数据链路层对等实体 之间进行的,通过限制发送方的数据流量使得发送方的发送速度不超过接收方接收能力的一种 技术,因此答案A正确。","type":"choice","options":{"B":"802.3u","C":"802.3z","D":"802.3ae","A":"802.3i"},"answer":"C"},{"id":"learncoder_115_22577","stem":"HDLC的帧格式中,帧校验序列字段占(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是HDLC协议知识点。HDLC的帧格式中,校验字段占两个字节,即16 位,因此答案C正确。","type":"choice","options":{"D":"24比特","A":"1比特","B":"8比特","C":"16比特"},"answer":"C"},{"id":"learncoder_115_22580","stem":"不同网络设备传输数据的延迟时间是不同的,下面设备中,传输延迟时间最大的 是( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是数据链路层设备知识点°局域网交换机和网桥通常都是有硬件进行 帧的转发,集线器某个端口收到信号时立即向所以其他端口转发而延迟最小,路由器需要解析每 个分组中的IP地址,通常由软件来完成,因此延迟最大,答案B正确。","type":"choice","options":{"D":"网桥","C":"集线器","A":"局域网交换机","B":"路由器"},"answer":"B"},{"id":"learncoder_115_22573","stem":"以太网交换机根据(\t)转发数据帧。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是以太网知识点。以太网中,交换机是根据数据帧中的MAC地址进行 数据帧转发的,因此答案B正确。","type":"choice","options":{"A":"IP地址","D":"端口号","B":"MAC地址","C":"LLC地址"},"answer":"B"},{"id":"learncoder_115_22572","stem":"下列功能中不属于LLC子层功能的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是局域网基本概念和体系结构知识点。IEEE 802局域网参考模型将数 据链路层分为MAC和LLC两个子层,其中MAC主要负责媒体的访问控制,因此答案C正确。","type":"choice","options":{"B":"提供与网络层的接口","A":"数据帧编号","D":"逻辑链路建立","C":"媒体的访问控制"},"answer":"C"},{"id":"learncoder_115_22571","stem":"无线局域网不使用CSMA/CD,而使用CSMA/CA的原因是( )。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是随机访冋介质访问控制知识点。如果要检测冲突,需要无线设备一边 传送数据一边接收数据,对于无线设备来说比较难以实现,因此答案A正确。\t","type":"choice","options":{"D":"覆盖范围很小,不进行冲突检测不影响正确性","C":"无线信号的广播特性,使得不会出现冲突","A":"不能同时收发,无法在发送时接收信号","B":"不需要在发送过程中进行冲突检测"},"answer":"A"},{"id":"learncoder_115_22570","stem":"下列不属于随机访问介质访问控制的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是随机访问介质访问控制知识点。令牌传递属于轮询访问介质访问控 制协议,因此答案D正确。","type":"choice","options":{"B":"CSMA","A":"时隙ALOHA","D":"令牌传递","C":"CSMA/CD"},"answer":"D"},{"id":"learncoder_115_22566","stem":"一个信道的数据传输率为8 kbps,单向传播时延为30 ms,如果使停止-等待协议的信道最大利用率达到80%,要求的数据帧长度至少为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是停止-等待协议知识点。设C为数据传输率,L为帧长,R为单程传播 延时。停止-等待协议的信道最大利用率为:","type":"choice","options":{"C":"560 b","D":"960 b","B":"320 b","A":"160 b"},"answer":"D"},{"id":"learncoder_115_22569","stem":"表面上看,FDM比TDM能更好地利用信道的传输能力,但是计算机网络中更多地使用TDM而不是FDM,其主要原因是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是信道划分介质访问控制知识点。频分多路复用(FDM)充分地利用了 系统的带宽,系统效率较高,但是时分多路复用(TDM))更适合传输数字信号,因此答案B正确。","type":"choice","options":{"D":"TDM能更充分利用带宽","A":"FDM实际信道利用率并不高","B":"TDM更适合传输数字信号","C":"FDM传输错误较多"},"answer":"B"},{"id":"learncoder_115_22568","stem":"在选择重传协议中,当帧序号字段为4比特,且接收窗口与发送窗口尺寸相同时,发送窗口的最大尺寸为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是选择重传协议知识点。对于选择重传协议,若用\"比特进行编号,则 接收窗口的大小为陷WR<=2n-1,因此正确答案为D","type":"choice","options":{"D":"8","B":"6","A":"5","C":"7"},"answer":"D"},{"id":"learncoder_115_22565","stem":"在局域网中广泛使用的差错控制方法是循环冗余编码,在接收端发现错误后采取的措施是()。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是检错码知识点。循环冗余编码是检错码,因此采用自动重发机制,答 案B正确。","type":"choice","options":{"C":"不发送任何帧","D":"返回错误帧","A":"自动纠错","B":"自动请求重发"},"answer":"B"},{"id":"learncoder_115_22567","stem":"在后退N帧协议中,当帧序号为4比特,发送窗口的最大尺寸为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是后退N帧协议知识点。只有在发送窗口大小Wr<=2m-1时(帧序号位 数m)),后退N帧协议才能正确运行,因此正确答案为Go\t","type":"choice","options":{"B":"14","A":"13","D":"16","C":"15"},"answer":"C"},{"id":"learncoder_115_22563","stem":"流量控制实际上是对(\t)的控制。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是流量控制知识点。数据链路层的流量控制是在数据链路层对等实体 之间进行的,通过限制发送方的数据流量使得发送方的发送速度不超过接收方接收能力的一种 技术,因此答案A正确","type":"choice","options":{"D":"链路上任意两节点间的数据流量","A":"发送方的数据流量","C":"发送方、接收方的数据流量","B":"接收方的数据流量"},"answer":"C"},{"id":"learncoder_115_22562","stem":"已知信息字段为1101001,生成多项式为G(x) = x^4 +x +1,则对应的CRC校验码为()","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是检错编码知识点。根据多项式可知,除数为10011,被除数为 11010010000,采用二进制模2方式进行相除,得到商110001,余数为0011,因此答案C正确。","type":"choice","options":{"B":"1011","A":"11001","C":"0011","D":"10010"},"answer":"C"},{"id":"learncoder_115_22564","stem":"若数据链路的发送窗口尺寸为3,在发送2号帧,并且得到1号帧的确认帧之后,发送方还可以连续发送(\t)帧。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是可靠传输与滑轮窗口机制知识点。因为接到1号帧的确认帧,发送窗 口尺寸为3,而此时该窗口只有2号帧,因此还可以连续发送2个帧,答案B正确。","type":"choice","options":{"D":"4 个","C":"3 个","A":"1 个","B":"2 个"},"answer":"B"},{"id":"learncoder_115_22560","stem":"组帧的最主要目的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是组帧知识点。数据链路层将来自物理层的比特流划分成一个个的单 元,称为帧,其主要目的是在出错时,只需将错误的帧重传,而•不必将全部数据都重发,从而提高 传输效率,因此答案A正确。","type":"choice","options":{"B":"进行拥塞控制","A":"可以提高传输效率","C":"进行差错控制","D":"进行寻址"},"answer":"A"},{"id":"learncoder_115_22559","stem":"接收方收到一个帧的比特序列为0111111010111110101111110,如果采用比特填充法进行组帧,则原始的数据比特流为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的知识点是组帧的知识点。比特填充法中帧的首位标志为01111110,发 送方连续发送5个T”时,自动插入一个“0”,接收方收到连续5个\"1”时,自动删除一个“0”。 因此答案B正确。","type":"choice","options":{"A":"01111110","D":"0101111110","C":"101111101","B":"10111111"},"answer":"B"},{"id":"learncoder_115_22558","stem":"下列功能中不属于数据链路层功能的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的知识点是数据链路层功能。拥塞控制是网络层和传输层的功能,因此正 确答案为D。","type":"choice","options":{"C":"流量控制","A":"组帧","D":"拥塞控制","B":"差错控制"},"answer":"D"},{"id":"learncoder_115_22561","stem":"在数据帧的传输过程中,如果出现个别位的传输错误,可以采用的检验方式是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的是差错控制知识点。数据帧的传输有两大类错误:位出错和帧出错,计时器和编号用于检测帧出错的情况,自动重传是纠错的手段,CRC是网络所采用的检验位岀错 的方法,因此答案D正确。","type":"choice","options":{"A":"计时器","B":"编号","C":"自动重传","D":"CRC校验码"},"answer":"D"},{"id":"learncoder_115_22557","stem":"下列服务中(\t)不属于数据链路层为网络层提供的服务中。","key_points":"知识点.练习.专业课练习.计算机网络.数据链路层","analysis":"此题考查的知识点是数据链路层功能知识点。数据链路层为网络层提供的服务有 三种:无确认的无连接服务、有确认的无连接服务、有确认的面向连接的服务,正确答案为B。","type":"choice","options":{"D":"无确认的无连接服务","A":"有确认的面向连接的服务","B":"无确认的面向连接的服务","C":"有确认的无连接服务"},"answer":"B"},{"id":"learncoder_116_25173","stem":"(2015年统考真题)某网络拓扑如图牛38所示,其中路由器内网接口、DHCP服务器、WWW服务器与主机1均采用静态IP地址配置,相关地址信息见图上标注;主机2〜主机N通过DHCP服务器动态获取IP地址等配置信息。请回答:1)DHCP服务器可为主机2〜主机N动态分配IP地址的最大范围是什么?主机2使用DHCP协议获取IP地址的过程中,发送的封装DHCP Discover.2)若主机2的ARP表为空,则该主机访问Internet时,发出的第一个以太网帧的目的MAC地址是什么?封装主机2发往Internet的IP分组的以太网帧的目的MAC是什么?3)若主机1的子网掩码和默认网关分别配置为255.255.255.0和111.123.15.2,则该主机是否能访问WWW服务器?是否能访问Internet?请说明理由。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image17.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image29.png'/>"},{"id":"learncoder_116_25170","stem":"(2013年统考真题)假设Internet的两个自治系统构成的网络如图4-36所示,自治系统ASI由路由器R1连接两个子网构成,自治系统AS2由路由器R2、R3互连并连接3个子网构成。各子网地址、R2的接口名、R1与S3的部分接口IP地址如图4-36所示。请回答下列问题。1)假设路由表结构如下所示。请利用路由聚合技术,给出R2的路由表,要求包括到达图436所示中所有子网的路由,且路由表中的路由项尽可能少。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image12.png'/>2)若R2收到一个目的IP地址为194.17.20.200的IP分组,R2会通过哪个接口转发该IP分组?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image13.png'/>3)R1与R2之间利用哪个路由协议交换路由信息?该路由协议的报文被封装到哪个协议的分组中进行传输?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"在AS1中,子网153.14.5.0/25和子网153.14.5.128/25可以聚合为子网153.14.5.0/24;在AS2中,子网194.17.20.0/25和子网194.17.21.0/24可以聚合为子网194.17.20.0/23,但缺少194.17.20.128/25;子网194.17.20.128/25单独连接到R2的接口E0.于是可以得到R2的路由表(见表4-28):<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image26.png'/>2)该IP分组的目的IP地址194.17.20.200与路由表中194.17.20.0/23和194.17.20.128/25两个路由表项均匹配,根据最长匹配原则,R2将通过E0接口转发该IP分组。其实以上3个地址都是正确的,即匹配。但是作为快递人员(路由器)会去选择哪一个呢?当然是会选择第三个,因为子网掩码长度越长,地址就会越具体,就能越快地找到目的地3)因为路由器Rl和路由器R2属于不同自治系统,所以应该使用外部网关协议BGP4(或BGP)交换路由信息。而BGP4的报文被封装到TCP段中进行传输。各种路由协议请参考表4-29"},{"id":"learncoder_116_25172","stem":"(2014年统考真题)某网络中的路由器运行OSPF路由协议,表4-17是路由器R1维护的主要链路状态信息(LSI),图43是根据表4J7及R1的接口名构造出来的网络拓扑。请根据描述的网络,继续回答下列问题。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image15.png'/>1假设路由表结构如下表所示,请给出图4-37中R1的路由表,要求包括到达图437中子网192.1.x.x的路由,且路由表中的路由项尽可能少。-<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image16.png'/>2)当主机192.1.1.130向主机192.1.7.211发送一个TTL=64的IP分组时,R1通过哪个接口转发该IP分组?主机192.1.7.211收到的IP分组TTL是多少?3)若R1增加一条Metric为10的链路连接Internet,则表4-17中R1的LSI需要增加哪些信息?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image28.png'/>路由器(Rl、R2、R4),所以主机192.1.7.211收到的IP分组的TTL是64-3=61(1分).3)Rl的LSI需要增加一条特殊的直连网络,网络前缀Prefix为″0.0.0.0/0”,Metric为10."},{"id":"learncoder_116_25169","stem":"简述一台新的主机进入一^区域的时候,在外部代理的注册过程。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"当一台主机进入一个区域的时候,不管它是直接通过电缆连接到网络中,还是通过漫游方式进入到无线蜂窝单元中,该主机必须在外部代理那里注册自己。注册过程通常如下:1)每个外部代理周期性地广播一个分组,宣布它的存在以及地址。一个新到达的移动主机可能会等待这样的消息,但是如果这样的消息不能够很快到来,那么移动主机可以广播一个询问分组:这里有外部代理吗?2)移动主机向外部代理请求注册,提供自己的主地址、当前的数据链路层地址以及一些安全信息3)外部代理与移动主机的本地代理进行联系,告诉它:你的一个主机在我这里。从外部代理发送到本地代理的消息中包含了外部代理的网络地址。该消息也包含了相应的安全信息,以便让本地代理确信该移动主机确实在这个外部代理处4)本地代理对安全信息进行检查,在安全信息中包含了一个时间戳,通过这个时间戳可以证明该消息是刚刚(几秒钟内)产生的。如果安全检查通过,则本地代理告诉外部代理可以继续进行5)外部代理得到了来自本地代理的确认之后,在本地表中加入一个表项,并通知移动主机注册已经完成"},{"id":"learncoder_116_25166","stem":"RIP使用UDP,OSPF使用IP,而EGP使用TCP,这样做有何优点?为什么RIP周期性地和邻站交换路由信息,而BGP却不这样做?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"RIP处于UDP的上层,RIP所接收的路由信息都封装在UDP数据报中;OSPF的位置位于网络层,由于要交换的信息量较大,所以应使报文的长度尽量短,采用IP;BGP需要在不同的自治系统之间交换路由信息,由于网络环境复杂,需要保证可靠地传输,所以使用了TCP.内部网关协议主要是设法使数据报在一个自治系统中尽可能有效地从源站传送到目的站,在一个自治系统内部并不需要考虑其他方面的策略,然而BGP使用的环境却不同,主要有以下3个原因:①因特网规模太大,使得自治系统之间的路由选择非常困难;②对于自治系统之间的路由选择,要寻找最佳路由是不现实的;③自治系统之间的路由选择必须考虑有关策略。由于上述情况,边界网关协议(BGP)只能是力求寻找一条能够到达目的地网络且比较好的路由,而并非寻找一条最佳路由,所以BGP不需要像那样周期性地和邻站交换路由信息"},{"id":"learncoder_116_25171","stem":"设路由器R的不完整的路由表见表4-16(其中下一跳给出的是路由器的端口)。’<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image14.png'/>路由器R收到下述分别发往6个目的主机的数据报。H1:20.134.245.78H2:166.111.64.129JH3:166.111.35.72H4:166.111.31.168H5:166.111.60.239H6:192.36.&73试回答以下问题:1)表4-16中序号1〜4的目的网络属于哪类网络?它们是由什么网络划分来的?2)假如路由器R1端口1和路由器R2端口2的IP地址的主机号均为5(十进制),请给出它们的IP地址。3)基于2),试问到目的主机H1〜H6的下一跳IP地址是什么(如果是直接交付,则请写出转发端口)?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"1)表4-16中序号1~4的目的网络属于B类网络。因为B类网络的默认子网掩码为255.255.0.0,所以序号1~4的目的网络是由网络166.111.0.0划分的子网.2)从表4-16中第二行和第四行可以看出,分组都是从端口2转发出去,并且第四行是直接交付到网络166.111.32.0,所以R1端口1连接在网络166.111.32.0上。又由于主机号为5,所以Rl端口1的IP地址为166.111.32.50同理可得,R2端口2连接在网络166.111.16.0上,所以R2端口2的IP地址为166.111.16.5<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image27.png'/>3)首先,应该清楚一个默认知识点,即目的网络为0.0.0.0和子网掩码为0.0.0.0表示一条默认路由H1:数据报要发往目的地址为20.134.245.78的主机H1.很明显,表4-16中并不存在该目的网络,所以应该选择默认路由,下一跳为R2端口2,所以下一跳的IP地址为166.111.16.5.H2:166.111.64.129属于网络166.111.64.0,下一跳为R1端口1,所以下一跳的IP地址为166.111.32.5.H3:166.111.35.72的第三字节为35,35转换成二进制为00100011.由表4-16可知,子网掩码为255.255.240.0,所以第三字节的前4位属于子网号。所以主机H3.属于子网166.111.32.0,下一跳通过R端口2直接交付.H4:166.111.31.168的第三字节为31,31转换成二进制为0001111,所以主机H4属于子网166.111.16.0,下一跳通过R端口1直接交付H5:166.111.60.239的第三字节为60,60转换成二进制为00111100,所以主机H5属于子网166.111.48.0,下一跳通过R端口3直接交付H6:192.36.8.73仍然应该选择默认路由,下一跳为R2端口2,所以下一跳的IP地址为166.111.16.5"},{"id":"learncoder_116_25168","stem":"IGMP的要点是什么?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"IGMP是用来进行组播的,采用组播协议可以明显地减轻网络中各种资源的消耗,IP组播实际上只是硬件组播的一种抽象;IGMP只有两种分组,即询问分组和响应分组.IGMP使用IP数据报传递其报文,但它也向IP提供服务;IGMP属于整个网际协议IP的一个组成部分,IGMP也是TCP/IP的一个标准"},{"id":"learncoder_116_25165","stem":"在某个网络中,R1和R2为相邻路由器,其中表4-14为R1的原路由表,表4-15为R2广播的距离向量报文目的网络,距离,请根据RIP更新R1的路由表,并写出更新后的R1路由表。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image10.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"将表4-15中的距离都加1,并把下一跳路由器都改为R2,得到表4-26把表4-26的每一行和表4-14进行比较。第一行的10.0.0.0在表4-14中有,但下一跳路由器不相同。于是就要比较距离,新的路由信息的距离是5,大于原来表中的,因此不更新。第二行的30.0.0.0在表4-14中有,但下一跳路由器不相同。于是就要比较距离,新的路由信息的距离是5,小于原来表中的7,因此需要更新。第三行的40.0.0.0在表4-14中有,且下一跳路由器也是R2,因此要更新(距离没变)。第四行的41.0.0.0在表4-14中没有,因此要将这一行添加到表4-14中。第五行的180.0.0.0在表4-14中有,且下一跳路由器也是R2,因此要更新(距离增大了)。综上所述,路由器R1的路由表更新后得到表4-27<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image25.png'/>"},{"id":"learncoder_116_25167","stem":"试将以下的IPv6地址用零压缩方法写成简洁形式。1)0000:0000:0F53:6382:AB00:67DB:BB27:73322)0000:0000:0000:0000:0000:0000:004D:ABCD3)0000:0000:0000:AF36:7328:000A:87AA:03984)2819:OOAF:OO0O:OOOO:OOOO:OO35:OCB2:B271","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"零压缩是指一连串的“0”可以用一对冒号表示,前导“0”也可以省略(如00FF可以写成FF)。例如,FFO5:0000:0000:0000:0000:0000:0000:00B3可以写成FFO5::B3,所以答案如下:1)::F53:6382:ABOO:67DB:BB27:73322)::4D:ABCD3)::AF36:7328:A:87AA:3984)2819:AF::35:CB2:B271"},{"id":"learncoder_116_25164","stem":"考虑某路由器具有下列路由表项(大纲样题),见表4-13。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image9.png'/>1)假设路由器接收到一个目的地址为142.150.71.132网络前缀下一跳的IP分组,请确定该路由器为该IP分组选择的下一跳,并解释说明。2)在上面的路由表中增加一条路由表项,该路由表项使以142.150.71.132为目的地址的IP分组选择\"A”作为下一跳,而不影响其他目的地址的IP分组转发。3)在上面的路由表中增加一条路由表项,使所有目的地址与该路由表中任何路由表项都不匹配的IP分组被转发到下一跳“E”。4)将142.150.64.0/24划分为4个规模尽可能大的等长子网,给出子网掩码及每个子网的可分配地址范围。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"1)要知道使用CIDR时,可能会导致有多个匹配结果,但是应该遵循一个原则:应当从匹配结果中选择具有最长网络前缀的路由。网络前缀142.150.0.0/16(142.150)和142.150.71.132是相匹配的,因为前面16位都相同。下面来一一分析表4-13中4项的匹配性。①142.150.64.0/24和142.150.71.132是不匹配的,因为前24位不相同。②142.150.71.128/28和142.150.71.132前24位是匹配的,只需看后面4位是否一样,128转换成二进制是10000000,132转换成二进制是10000100,所以前面5位一样,匹配了,且匹配了28位。③142.150.71.128/30和142.150.71.132前24位是匹配的,只需看后面6位是否一样,前面已经计算过,只有前面5位一样,第6位不一样,所以不匹配。④前面讲过142.150.0.0/16和142.150.71.132是匹配的,且匹配了16位。综上所述,只有②和④匹配,且②匹配的位数比④长,再根据最长匹配原则,应当从匹配结果中选择具有最长网络前缀的路由,所以应当选取第二项的下一跳地址B.2)要想该路由表项使以142.150.71.132为目的地址的IP分组选择″A″作为下一跳,而不影响其他目的地址的IP分组转发,这个道理很简单,只需要构造一个网络前缀和该地址匹配32位,所以路由器可以增加这样一条表项:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image24.png'/>"},{"id":"learncoder_116_25163","stem":"以下地址中的哪一个和86.32/12匹配?1)86.33.224.123;2)86.79.65.216;3)86.58.119.74;4)86.6&206.154。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"观察地址的第二个字节,其二进制表示为00100000,前缀12位,说明第二个字节的前4位在前缀中,给出4个地址的第二个字节的前4位分别是0010、0100、0011和0100,因此只有1)和86.32/12匹配"},{"id":"learncoder_116_25160","stem":"有两个CIDR地址块208.128/11和208.130.28/22。是否有哪一个地址块包含了另一个地址块?如果有,请指出,并说明理由。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"这种题目的做法就是先将地址转化成二进制表示,然后看前缀是否有重复的地方。208.128/11的前缀为11010000100,208.130.28/2的前缀为11010000 10000010 000101。208.130.28/22前缀的前11位与208.128/11的前缀是二致的,所以208.128/11包含了208.130.28/22这一地址块"},{"id":"learncoder_116_25157","stem":"某单位分配到一个B类地址,其网络地址为129.250.0.0,该单位有4000台机器,平均分布在16个不同的地点。如果选用子网掩码为255.255.255.0,试给每一个地点分配一个子网号码,并计算出每个地点主机号码的最小值和最大值。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"题考查子网划分的具体应用。这是一个B类地址,而子网掩码为255.255.255.0,说明在主机位拿出了8位来划分子网,所以现在一共可以划分2^8-2=254个子网。可以在这254个里面随机挑选16个作为子网号,而每个子网可以拥有254台主机,254×16>4000,所以可以满足要求,分配情况见表4-21.<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image22.png'/>"},{"id":"learncoder_116_25154","stem":"试辨认表4-11中的IP地址的网络类别。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image4.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"A类地址以1~126开头,B类地址以128~191开头,C类地址以192~223开头,因此可得各IP地址的类别,见表4-20<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image21.png'/>"},{"id":"learncoder_116_25159","stem":"56.132.0/24,212.56.133.0/24,212.56.134.0/24,212.56.135.0/24","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":""},{"id":"learncoder_116_25156","stem":"设某路由器建立了路由表(这3列分别是目的网络、子网掩码和下一跳路由器,若直接交付则最后一列表示应当从哪个接口转发出去),见表4-12。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image5.png'/>现在共收到5个分组,其目的站IP地址分别为:1)128.96.39.102)128.96.40.123)128.96.40.1514)192.4.153.175)192.4.153.90试分别计算下一跳。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"1)先将128.96.39.10转换成二进制分别和各个子网掩码进行“与”操作。128.96.39.10转换成二进制为10000000 01100000 00100111 00001010,将其和子网掩码11111111 11111111 11111111 10000000(255.255.255.128)进行″与″操作(同时为″1″才为1),可以得出最后的结果为128.96.39.0,与第一行的网络号一样,所以从接口0转发出去2)和1)的方法一样,先转成二进制,再和11111111 11111111 11111111 10000000进行″与″操作,得到的结果是128.96.40.0,所以下一跳为路由器R2。3)和1)的方法一样,先转成二进制,再和11111111 11111111 11111111 10000000进行″与″操作,得到的结果是128.96.40.128,发现前3行没有一个匹配。然后再和Ⅱ11111111 11111111 11111111 11000000(255.255.255.192)进行″与”操作,其结果为128.96.40.128,仍然没有匹配的,所以应该选择默认路由,即下一跳为路由器R44)和1)的方法一样,最后发现和11111111 11111111 11111111 11000000(255.255.255.192)进行″与″操作的结果为192.4.153.0,匹配了,说明下一跳为路由器R3。5)和3)的情况一样,同两个子网掩码相与之后都不匹配,所以下一跳为路由器R4。"},{"id":"learncoder_116_25155","stem":"试回答以下问题。1)子网掩码为255.255.255.0代表什么意思?2)有一个网络的掩码为255.255.255.248,问该网络能够连接多少个主机?3)—个A类网络和一个B类网络的子网号分别为16bit和8bit,问这两个网络的子网掩码有什么不同?4)一个B类地址的子网掩码是255.255.240.0,试问在其中每一个子网上的主机数最多是多少?5)一个A类网络的子网掩码为255.255.0.255,它是否为一个有效的子网掩码?6)某个IP地址的十六进制表示是C22F1481,试将其转换为点分十进制的形式。这个地址是哪一类网络?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"网掩码由一连串“1”和一连串“0”组成,“1”代表网络号和子网号,“0”对应主机号。解答时,将点分十进制记法的地址转化成二进制的记法,结合子网掩码的定义和IP地址的分类方法,最后还要注意全″0”和全“1”的情况。1)可以代表C类地址对应的默认子网掩码,当然也可以代表A类和B类地址的掩码(划分子网后的),前24位决定网络号和子网号(如果是C类就不存在子网号了),后8位决定主机号2)255.255.255.248转化成二进制序列为1111111111111111 11111111111000,根据掩码的定义,后3位是主机号,一共可以表示8个主机号,千万别忘记了除去全“0”和全“1”的两个,所以该网络可以连接6台主机3)子网掩码的形式是一样的,都是255.255.255.0,但是子网数目不一样,前者为65534(2^16-2),后者为254(2^8-2).4)255.255.240.0转化为二进制是11111111 11111111 11110000 00000000,它是B类地址的子网掩码,主机地址域为12bit,所以每个子网的主机数最多为2^12-2=4094.5)选这个题目是为了让考生明白子网掩码不一定是先一连串“1”,接着一连串“0”,可以是相间的,但是一般不这么使用,千万不要说这种子网掩码是不合法的。子网掩码255.255.0.255的意思是使用前面16位和后面8位作为网络号,点到为止,不再解释了,不然会越来越糊涂。总之,记住一点,子网掩码可以是“0”“1”相间的,但是做题的时候千万不要这么去写。6)用点分十进制表示该IP地址是194.47.20.129,所以为C类地址"},{"id":"learncoder_116_25162","stem":"(2009年统考真题)某公司网络拓扑图如图4・35所示,路由器R1通过接口E1、E2分别连接局域网1、局域网2,通过接口L0连接路由器R2,并通过路由器R2连接域名服务器与互联网。R1的L0接口的IP地址是202.118.2.1;R2的L0接口的IP地址是202.118.2.2,L1接口的IP地址是130.11.120.1,E0接口的IP地址是202.118.3.1;域名服务器的IP地址是202.118.3.2.<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image7.png'/>R1和R2的路由表结构如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image8.png'/>1)将IP地址空间202.118.1.0/24划分为两个子网,分别分配给局域网1、局域网2,每个局域网需分配的IP地址数不少于120个。请给出子网划分结果,说明理由或给出必要的计算过程。2)请给出R1的路由表,使其明确包括到局域网1的路由、局域网2的路由、域名服务器的主机路由和互联网的路由。3)请采用路由聚合技术,给出R2到局域网1和局域网2的路由。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"1)将IP地址空间202.Ⅱ8.1.0/24划分为两个子网,可以从主机位拿出1位来划分子网,剩余的7位用来表示主机号(27-2>120,满足要求),所以两个子网的子网掩码都为11111111 11111111 11111111 10000000,即255.255.255.128。所划分的两个子网的网络地址分别为202.118.1.00000000和202.118.1.10000000(为了理解方便将最后一个字节用二进制表示,这样可以看清楚子网的划分过程),即202.118.1.0和202.118.1.128。综上所述,划分结果如下:子网1:202.118.1.0,子网掩码为255.255.255.128。子网2:202.118.1.128,子网掩码为255.255.255.128。或者写成:子网1:202.118.1.0/25;子网2:202.118.1.128/25。2)下面分两种情况:①假设子网1分配给局域网1,子网2分配给局域网2;路由器R1到局域网1和局域网2是直接交付的,所以下一跳ip地址可以不写(打一横即可),分别是从接口E1、E2转发出去;路由器R1到域名服务器是属于特定的路由,所以子网掩码应该为255.255.255.255(只有和全″1″的子网掩码相与后才能100%保证和目的网络地址一样,从而选择该特定路由),而路由器R1到域名服务器应该通过接口L0转发出去,下一跳IP地址应该是路由器R2的L0接口,即IP地址为202.118.2.2;路由器R1到互联网属于默认路由(记住就好),而前面已经提醒过,默认路由的目的网络IP地址和子网掩码都是0.0.0.0,而路由器R1到互联网应该通过接口LO转发出去,下一跳IP地址应该是路由器R2的L0接口,即IP地址为202.118.2.2.详细答案见表4-22<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image23.png'/>"},{"id":"learncoder_116_25161","stem":"一个自治系统有5个局域网,如图4-34所示。LAN2至LAN5上的主机数分别为91、150、3和15,该自治系统分配到的IP地址块为30.138.118/23,试给出每一个局域网的地址块(包括前缀)。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image6.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"分配网络前缀应先分配地址数较多的前缀。记住这种原则肯定不会错,当然不按照这个也行,但是会碰到出错的情况。例如,有一个网络需要分配60台机器,放在最后,网络号都占用了4位,而前面却把网络号短的给了只有几台主机的网络,这样分配极其不合理。已知该自治系统分配到的IP地址块为30.138.118/23。LAN3:主机数为150,由于(27-2)<150+1<(2^8-2),因此主机号为8bit,网络前缀为24.取第24位为0,分配地址块30.138.118.0/24(150+1里面的1是路由器,也要占用一个IP地址).LAN2:主机数为91,由于(2^6-2)<91+1=(2^7-2),因此主机号为7bit,网络前缀为25.取第24、25位为10,分配地址块30.138.119.0/25.LAN5:主机数为15,由于(2^4-2)<15+1<(2^5-2)因此主机号为5抽,网络前缀为27.取第24、25、26、27位为1110,分配的地址块为30.138.119.192/27.LAN1:共有3个路由器,至少需要4个IP地址。由于(2^2-2)<3+1<(2^3-2),因此主机号为3bit,网络前缀为29.取第24、25、26、27、28、29位为111101,分配的地址块为30.138.119.232/29.LAN4:主机数为3,由于(22-2)<3+1<(23-2),因此主机号为3bit,网络前缀为29.取第24、25、26、27、28、29位为Ⅱ1110,分配的地址块为30.138.119.240/29"},{"id":"learncoder_116_25158","stem":"有如下的4个/24地址块,试进行最大可能的聚合。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"知有212.56.132.0/24,212.56.133.0/24,212.56.134.0/24,212.56.135.0/24地址块,212=(11010100),56=(00111000).由于这4个地址块的第1、2字节相同,考虑它们的第3字节:132=(10000100)133=(10000101)134=(10000110)135=(10000111)所以共同的前缀有22位,即11010100 00111000 100001,聚合的CIDR地址块是212.56.132.0/22."},{"id":"learncoder_116_25144","stem":"(2017年统考真题)下列IP地址中,只能作为IP分组的源IP地址但不能作为目的IP地址的是()","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"根据RFC文档描述,0.0.0.0/32可以作为本主机在本网络上的源地址,127.0.0.1是回送地址,以它为目的IP地址的数据将被立即返回本机。200.10.10.3是C类IP地址0255.255.255.255是广播地址","type":"choice","options":{"C":"200.10.10.3","D":"255.255.255.255","B":"127.0.0.1","A":"0.0.0.0"},"answer":"A"},{"id":"learncoder_116_25153","stem":"表4-10中20个字节为一个IPv4数据报的首部,请分析该头部并回答之后的问题(可对照IPv4首部图做题,如果真题考查这种形式,一定会给出相应的首部图,考生不必死背)。1)该IP数据报的发送主机和接收主机的地址分别是什么?<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image3.png'/>2)该IP数据报的总长度是多少?头部长度是多少?3)该IP分组有分片吗?如果有分片它的分片偏移量是多少?4)该IP数据报是由什么传输层协议发出的?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"首先列出IP首部的格式,然后按照这个格式来解析题目给出的首部数据。Ⅲ词的首部格式如图4-39所示<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image20.png'/>1)根据以上的分析,可以得出源IP地址是第13、14、15、16字节,也就是C0 A8 01 01,转换为十进制表示得到源IP地址为192.168.1.10目标IP地址是第17、18、19、20字节,即D803E215,转换为十进制表示得到目标IP地址为216.3.226.21。2)IP数据报的总长度域是IP头部的第3、4字节,即00 30,转换为十进制表示得到该IP数据报的长度是48。而头部长度为ⅢL域,是第1字节的后4个位表示,根据题目的数据IHLL值是5,再将ⅢL的值乘以4即得到头部的长度为20。3)是否分片的标识在IP数据报头的第7字节的第7位表示,那么该分组的第7字节为40,对应第7位是″1”,即DF位置为“1”,表示没有分片4)协议域是第10字节,值为06,用于表示传输层的协议,根据RFC标准“6”表示的是TCP"},{"id":"learncoder_116_25150","stem":"有人认为:“ARP向网络层提供了转换地址的服务,因此ARP应当属于数据链路层。”这种说法是否错误?2)试解释为什么ARP高速缓存每存入一个项目就要设置10〜20min的超时计时器。这个时间设置得太大或者太小会出现什么问题?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"1)这种说法是错误的,ARP不是向网络层提供服务,它本身就是网络层的一部分,帮助向传输层提供服务。数据链路层不存在IP地址的问题。数据链路层协议如HDLC和PPP,它们把比特串从线路的一端传送到另一端。2)ARP将保存在高速缓存中的每一个映射地址项目都设置生存时间(如10-20min)。凡超过生存时间的项目就从高速缓存中删除掉。设置这种地址映射项目的生存时间是很重要的。设想有一种情况,主机A和B通信,A的ARP高速缓存里保存有B的物理地址,但B的网卡突然坏了,B立即更换了一块网卡,因此B的物理地址就发生了变化.A还要和B继续通信.A在其ARP高速缓存中查找到了B原先的硬件地址,并使用该硬件地址向B发送数据帧,但B原先的硬件地址已经失效了,因此A无法找到主机B.但是过了一段时间,A的ARP高速缓存中已经删除了B原先的硬件地址(因为它的生存时间到了),于是A重新广播发送ARP分组,又找到了B.时间设置太大,造成A一直空等而产生通信时延,网络传输缓慢;若太小,有可能网络状况不好时,B暂时没有应答A,但A已经认为B的地址失效,A重新发送ARP请求分组,造成通信时延0"},{"id":"learncoder_116_25152","stem":"假设主机A被连接到一台路由器R1上,R1又连接到另一台路由器R2上,R2又被连接到主机Bo假定一条TCP消息包含900B的数据和20B的TCP首部,现在该消息被传递给主机A的IP代码,请它递交给主机B。请写出在3条链路上传输的每个分组中IP首部的总长度、标识、DF、MF和片偏移。假定链路A-R1可以支持的最大帧长度为1024B,其中包括14B的帧头;链路R1-R2可以支持的最大帧长度为512B,其中包括8B的帧头;链路R2-B可以支持的最大帧长度为512B,其中包括12B的帧头。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"1)先分析网络的体系结构这是一个典型的应用层→TCP传输层→IP网络层→数据链路层→物理层的模型,其中在应用层和物理层不需要考虑首部的开销,其他层都需要。通过数据链路层给出的条件,例如:A→Rl的链路:最大帧长度=1024B,去掉帧头14B,则可得出IP数据报最大长度=(1024-14)B=1010B.同理:Rl-R2的链路:IP数据报最大长度=(512-8)B=504BR2-B的链路:IP数据报最大长度=(512-12)B=500B上面得到的各个链路的最大IP数据报长度是进行分片的重要依据。另外,用户数据在传输层的数据报长度=数据部分+首部=(900十20)B=920B;交给IP网络层后,IP数据报长度=IP首部+TCP数据报长度=(20+920)B=940B。这就是将要分片的原始数据报.2)进行分片处理在A→R1上:主机将长度为940B的IP数据报交给路由器,而路由器能接收的IP数据报最大长度=1010B,所以这个940B的IP数据报是不需要分片的。总长度=940B,标识=X,DF=0,MF=0,片偏移=0。在Rl→R2上:只能支持504B的数据报,而用户数据报为940B,所以必须分片;在Ip中规定,除了最后一个分片外,其他的分片的数据报长度必须是8的整数倍数,所以对于只能支持504B的IP数据报,数据部分为(504-20)B484B,取整为480(8的倍数).1<(940-20)/480<2,所以需要分两片。第一片数据报的数据部分长度为480B,第二片数据报的数据部分长度为(940-20)B-480B=440B.第一片数据报:总长度=500B,标识=X,DF=0,MF=1,片偏移=0.第二片数据报:总长度=460B,标识=X,DF=0,MF=0,片偏移=60.同理,在R2-B上:由于该段链路允许最大IP数据报长度为500B,所以无需再进行分片."},{"id":"learncoder_116_25149","stem":"为什么要划分子网?子网掩码的作用是什么?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"由于因特网的每台主机都要分配一个唯一的IP地址,所以分配的IP地址很多,这将使路由器的路由表变得很大,进而影响了路由器在进行路由选择时的工作效率。解决这个问题的方法就是将一个大的网络划分为几个较小的网络,每个小的网络称为一个子网。当一个分组到达一个路由器时,路由器应该能够判断出IP地址的网络号。子网掩码用来判断IP地址的哪一部分是网络号与子网号,哪一部分是主机号。为了完成这种分离,路由器将对IP地址和子网掩码进行″与”运算"},{"id":"learncoder_116_25146","stem":"(2017年统考真题)若将网络21.3.0.0/16划分为128个规模相同的子网,则每个子网可分配的最大IP地址个数是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"这个网络有16位的主机号,平均分成128个规模相同的子网,每个子网有7位子网号,9位主机号。除去一个网络地址和广播地址,可分配的最大Ⅲ地址个数是2^9-2=512-2=510,选C","type":"choice","options":{"A":"254","B":"256","C":"510","D":"512"},"answer":"C"},{"id":"learncoder_116_25151","stem":"一个数据报长度为4000B(固定首部长度,即20B)o现在经过一个网络传送,但此网络能够传送的最大数据扌艮长度为1500Bo试问应该划分为几个短些的数据报片?各数据报片的数据字段长度、片偏移字段和MF标志应为什么数值?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"数据报去头为4000B-20B=3980B,1500B去头为1500B-20B=1480B,2<3980/1480<3,所以应该划分为3个数据报片,长度分别为1480B、1480B、1020B;片偏移字段分别为0、1480/8=185、2960/8=370;MF标志位(表示后面是否还有分片)分别为1、1、0.详细答案见表4-19.<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image19.png'/>"},{"id":"learncoder_116_25148","stem":"试简述路由器的路由功能和转发功能。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"75.空","type":"short_answer","answer":"转发即当一个分组到达的时候所采取的动作,当路由器收到一个分组,路由器就在路由表中查找分组所对应的输出线路。通过查得的结果,将分组发送到正确的线路上去。路由算法是网络层软件的一部分,它负责确定一个进来的分组应该被传送到哪一条输出线路上。路由算法负责填充和更新路由表,转发功能则根据路由表的内容来确定当每个分组到来的时候应该采取什么动作(如从哪个端口转发出去)"},{"id":"learncoder_116_25145","stem":"(2017年统考真题)直接封装RIP、OSPF、BGP报文的协议分别是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"RIP是一种分布式的基于距离一向量的路由选择协议,通过广播UDP报文来交换路由信息。OSPF是一个内部网关协议,不适用传输协议,如UDP或TCP,而是直接用IP包封装它的数据。BGP是一个外部网关协议,用TCP封装它的数据。故选D","type":"choice","options":{"C":"UDP、TCP、IP","A":"TCP、UDP、IP","D":"UDP、IP、TCP","B":"TCP、IP、UDP"},"answer":"D"},{"id":"learncoder_116_25141","stem":"(2015年统考真题)某路由器的路由表见表4-9。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image1.png'/>若路由器收到一个目的地址为169.96.40.5的IP分组,则转发该IP分组的接口是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"根据″最长前缀匹配原则″169.96.40.5与169.96.40.0的前27位匹配最长,故选C.选项D为默认路由,只有当前面的所有目的地址网络都不能和分组的目的IP地址匹配时才使用","type":"choice","options":{"A":"SI","D":"S4","B":"S2","C":"S3"},"answer":"C"},{"id":"learncoder_116_25138","stem":"路由器主要实现了()的功能。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"路由器是网络层的设备,所以它也必须要实现网络层以下的功能,也就是物理层与数据链路层的功能。而传输层和应用层是在网络层之上的,它们使用网络层的接口,路由器不实现它们的功能","type":"choice","options":{"A":"数据链路层、网络层与应用层的功能","B":"网络层与传输层的功能","D":"物理层与网络层的功能","C":"物理层、数据链路层与网络层的功能"},"answer":"C"},{"id":"learncoder_116_25143","stem":"(2016年统考真题)图4-33中,假设Hl与H2的默认网关和子网掩码均分别配置为192.168.3.1和255.255.255.128,H3与H4的默认网关和子网掩码均分别配置为192.168.3.254和255.255.255.128,则下列现象中可能发生的是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"从子网掩码可知H1和H2处于同一网段,H3和H4处于同一网段,分别可以进行正常的IP通信,A和D错误。因为R2的E1接口的IP地址为192.168.3.254,而H2的默认网关为192.168.3.1,所以H2不能访问血temet,而H4的默认网关为192.168.3.254,所以H4可以正常访问Intemet,B错误。由于Hl、RE、H3和H4的子网掩码可知H1、H2和H3、H4处于不同的网段,需通过路由器才能进行正常的IP通信,而这时H1和H2的默认网关为192.168.3.1,但R2的E1接口的IP地址为192.168.3.254,无法进行通信,从而H1不能与H3进行正常的IP通信,C正确","type":"choice","options":{"C":"H1不能与H3进行正常IP通信","D":"H3不能与H4进行正常IP通信","A":"H1不能与H2进行正常IP通信","B":"H2与H4均不能访问Internet"},"answer":"C"},{"id":"learncoder_116_25140","stem":"路由器的分组转发部分由()部分组成。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"choice","options":{"C":"输出端口","A":"交换结构","B":"输入端口","D":"以上都是"},"answer":"D"},{"id":"learncoder_116_25139","stem":"路由器的路由选择部分,包括了().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"路由器的路由选择部分包括了3个部分:①路由选择处理器,它根据所选定的路由选择协议构造出路由表,同时和相邻路由器交换路由信息;②路由选择协议,路由器用来更新路由表的算法;③路由表,它是根据路由算法得出的,一般包括从目的网络到下一跳的映射","type":"choice","options":{"B":"路由选择协议","D":"以上都是","A":"路由选择处理器","C":"路由表"},"answer":"D"},{"id":"learncoder_116_25142","stem":"(2016年统考真题)图4-33所示网络中,假设Rl、R2、R3采用RTP协议交换路由信息,且均已收敛。若R3检测到网络201.1.2.0/25不可达,并向R2通告一次新的距离向量,则R2更新后,其到达该网络的距离是().<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image2.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"因为R3检测到网络201.1.2.0/25不可达,故将该网络的距离设置为16(距离为16表示不可达)。当R2从R3收到路由信息时,因为R3到该网络的距离为16,则R2到该网络也不可达,但此时记录R1可达(由于RIP的特点″坏消息传得慢”,R1并没有收到R3发来的路由信息),R1到该网络的距离为2,再加上从R2到R1的1就是R2到该网络的距离3.","type":"choice","options":{"D":"17","C":"16","B":"3","A":"2"},"answer":"B"},{"id":"learncoder_116_25137","stem":"关于路由器,下列说法中正确的是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"路由器是第三层设备,要处理的内容比第二层设备交换机要多,因而转发速度比交换机慢,所以选项A错误;虽然一些路由协议可以将延迟作为参数进行路由选择,但路由协议使用最多的参数是传输距离,此外还有其他的一些参数,所以选项B错误;路由器只能够根据IP地址进行转发,所以选项D错误","type":"choice","options":{"B":"对于同一目标,路由器只提供延迟最小的最佳路由","A":"路由器处理的信息量比交换机少,因而转发速度比交换机快","D":"路由器不但能够根据IP地址进行转发,而且可以根据物理地址进行转发","C":"通常的路由器可以支持多种网络层协议,并提供不同协议之间的分组转换"},"answer":"C"},{"id":"learncoder_116_25134","stem":"一个主机移动到了另一个局域网中,如果一个分组到达了它原来所在的局域网中,分组会被转发给()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"一个分组到达用户的本地局域网中的时候,它被转发给某一台与局域网相连接的路由器。该路由器寻找目标IP主机,这时候本地代理响应该请求,并且接收该分组;然后将这些分组封装到一些新IP分组中,并将新分组发送给外部代理。外部代理将原分组分解出来后,移交给移动后的主机","type":"choice","options":{"C":"主机","B":"移动IP的外部代理","A":"移动IP的本地代理","D":"丢弃"},"answer":"A"},{"id":"learncoder_116_25136","stem":"下列()设备可以隔离ARP广播帧。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"集线器是物理层的设备,交换机和网桥都是数据链路层的设备,广播域是网络层的概念,网络层以下的设备是不可能分隔广播域的。而路由器是网络层的设备,它能够分隔广播域","type":"choice","options":{"C":"以太网交换机","D":"集线器","B":"网桥","A":"路由器"},"answer":"A"},{"id":"learncoder_116_25135","stem":"如果一台主机的IP地址为160.80.40.20/16,那么当它被移动到了另一个不属于160.80/16子网的网络中时,它将()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"因为所有路由器都是按照子网来安排路由表的,所以所有发往主机160.80.40.20/16的分组都会被发送到160.80/16子网中。当主机离开了这个子网的时候,自然就不能直接接收和直接发送分组了,但是可以通过转交地址来间接接收和发送分组","type":"choice","options":{"D":"可以直接发送分组,但是不可以直接接收分组","A":"可以直接接收和直接发送分组,没有任何影响","B":"既不可以直接接收分组,也不可以直接发送分组","C":"不可以直接发送分组,但是可以直接接收分组"},"answer":"B"},{"id":"learncoder_116_25131","stem":"下列地址中,()是组播地址。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"choice","options":{"C":"192.32.44.59","B":"228.47.32.45","D":"172.16.255.255","A":"10.255.255.255"},"answer":"B"},{"id":"learncoder_116_25133","stem":"如果一个用户需要实现漫游,那么它需要完成以下哪项工作?()","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"如果一个站点的用户希望实现漫游,那么它必须先创建一个本地代理;如果一个站点允许其他的访问者进到它的网络中,那么它必须创建一个外部代理。当移动主机在一个外地站点中启动的时候,它与当地的外部代理联系,并且进行注册;然后,外部代理与该用户的本地代理进行联系,并且交给它一个转交地址","type":"choice","options":{"A":"创建一个本地代理","D":"以上工作都要完成","C":"外部代理与该用户本地代理进行联系","B":"创建一个外部代理"},"answer":"D"},{"id":"learncoder_116_25130","stem":"下面有关BGP4的描述中,不正确的是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"INtemet由很多自治系统(AS)组成,在AS之间进行路由就要用到BGP。BGP的产生和完善经历了较长的时闸,最初的BGP出现在1989年,称为BGPv4,这是一个不支持CIDR技术的协议。经过多年发展到现在BGPv4版本,目前的BGP已经支持CIDR技术,并且支持路由汇聚,是一个很完善的网关协议,所以选项B错误","type":"choice","options":{"C":"BGP4加入路由表的路由并不一定是最佳路由","A":"BGP4是自治系统之间的路由协议","D":"BGP4封装在TCP段中传送","B":"BGP4不支持CIDR技术"},"answer":"B"},{"id":"learncoder_116_25132","stem":"采用了隧道技术后,如果一个不运行组播路由器的网络遇到了一个组播数据报,那么它会()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"choice","options":{"A":"丢弃该分组,不发送错误信息","D":"对组播数据报再次封装,使之变为单一目的站发送的单播数据报,然后发送","B":"丢弃该分组,并且通知发送方错误信息","C":"选择一个地址,继续转发该分组"},"answer":"D"},{"id":"learncoder_116_25128","stem":"BGP交换的网络可达性信息是().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"边界网关协议(BGP)是一个自治系统之间(或域间)的路由协议,它用来在BGP路由器间交换网络可达性信息。BGP是一个通路向量协议,它通告前往目的地的一条完整路径信息,如10.11.2=亿4可以通过AS2、AS4、AS5到达","type":"choice","options":{"B":"到达某个网络的最短距离以及下一跳路由器","A":"到达某个网络的链路状态的摘要信息","C":"到达某个网络的下一跳路由器","D":"到达某个网络所经过的路径"},"answer":"D"},{"id":"learncoder_116_25125","stem":"以下属于EGP的是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"choice","options":{"B":"OSPFv2","D":"HELLO","A":"REP","C":"BGPv4"},"answer":"C"},{"id":"learncoder_116_25127","stem":"以下关于OSPF协议的描述中,最准确的是().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"开放最短路径优先(OSPF)协议是一种用于自治系统内的路由器之间的协议(B选项错误)。它是一种基于链路状态路由选择算法的协议(C选项错误),能够适应大型全局IP网络的扩展,支持可变长子网掩码,所以OSPF协议可以用于管理一个受限地址域的中大型网络(D选项错误)。","type":"choice","options":{"C":"OSPF协议不能根据网络通信情况动态地改变路由","B":"OSPF协议是用于自治系统之间的外部网关协议","A":"OSPF协议:根据链路状态法计算最佳路由","D":"OSPF协议只能适用于小型网络"},"answer":"A"},{"id":"learncoder_116_25129","stem":"BGP报文封装在()中传送。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"BGP的实现中使用TCP来传输信息,所以BGP报文封装在TCP报文中传送","type":"choice","options":{"B":"IP数据报","C":"UDP报文","D":"TCP报文","A":"以太帧"},"answer":"D"},{"id":"learncoder_116_25126","stem":"运行OSPF协议的路由器每10s向它的各个接口发送Hello分组,接收到Hello分组的路由器就知道了邻居的存在。如果在()秒内没有从特定的邻居接收到这种分组,路由器就认为那个邻居不存在了。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"choice","options":{"A":"30","D":"60","B":"40","C":"50"},"answer":"B"},{"id":"learncoder_116_25122","stem":"用于域间选路的协议是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"属于不同域之间的路由器交换信息需要使用BGP,本题属于记忆性的题目","type":"choice","options":{"A":"RIP","B":"BGP","D":"OSPF","C":"PIM"},"answer":"B"},{"id":"learncoder_116_25124","stem":"关于RIP,以下选项中错误的是().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"RIP规定要使得一条路径是可达的,最大的跳数就是15(也就是说一条路径上最多只能包含15个路由器),一旦到了16就认为是不可达,所以B选项是错误的,其他3个选项都是RIP的特点","type":"choice","options":{"D":"RIP是一种内部网关协议","C":"RIP默认的路由更新周期为30s","B":"RIP规定的最大跳数为16","A":"RIP使用距离-矢量算法计算最佳路由"},"answer":"B"},{"id":"learncoder_116_25121","stem":"一个IPv6的简化写法为8::D0:123:CDEF:89A,那么它的完整地址应该是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"IPv6的表示法为分成8组来表示,每个组含有4个十六进制的数字,组之间使用冒号隔开。IPv6简化写法的规则是16个″0″位构成的一个或者多个组可以用一对冒号来代替;每个组的前导的″0”可以省略。题目中给出的简化写法中只有5组,所以在一对冒号处省略了3组全″0”。然后将不满4个十六进制数字的组的前导″0″补上就可以得到原来的IPv6地址了","type":"choice","options":{"D":"0008:0000:0000:0000:00D0:0123:CDEF:089A","A":"8000:0000:0000:0000:00D0:1230:CDEF:89A0","B":"0008:00D0:0000:0000:0000:0123:CDEF:089A","C":"8000:0000:0000:0000:D000:1230:CDEF:89A0"},"answer":"D"},{"id":"learncoder_116_25123","stem":"RIP规定,()跳为一条不可达路径。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"16这个数字在计算机网络出现的次数很多,如处理冲突的退避算法也是达到16次还没成功就丢弃该帧,并向高层报告等,在复习的过程中还会碰到其他关于16的规定","type":"choice","options":{"B":"512","D":"8","C":"16","A":"1024"},"answer":"C"},{"id":"learncoder_116_25120","stem":"下列关于IPv6的表述中,()是错误的。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"IPv6去掉了校验和域,它不会计算头部的校验和,因为计算校验和会极大地降低性能。而现在往往使用了可靠的网络层。IPv6的头部长度是圃定的,因此不需要头部长度域。IPv6允许在源结点分片,不允许由报文传递路径上的路由设备来进行分片","type":"choice","options":{"A":"IPv6的头部长度是不可变的","D":"IPv6使用了头部校验和来保证传输的正确性","C":"IPv6采用了16B的地址号,理论上不可能用完","B":"IPv6不允许路由设备来进行分片"},"answer":"D"},{"id":"learncoder_116_25119","stem":"如果一台路由器接收到的IPv6数据报因太大而不能转发到输出链路上,则路由器将把该数据报().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"在IPv6中不允许分片,因此如果路由器发现到来的数据报太大而不能转发到链路上,则丢弃该数据报,并向发送方发送一个分组太大的ICMP报文.","type":"choice","options":{"D":"丢弃","A":"分片","C":"转发","B":"暂存"},"answer":"D"},{"id":"learncoder_116_25118","stem":"IPv6的地址长度为()位。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"IPv6地址使用了16B,即128bit,其地址空间是2^128,从根本上解决了IPv4地址耗尽的问题","type":"choice","options":{"A":"32","C":"128","D":"256","B":"64"},"answer":"C"},{"id":"learncoder_116_25115","stem":"ICMP报文的传输方式是().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"网际报文控制协议(ICMP)属于IP层协议。ICMP报文作为IP层数据报的数据,加上IP数据报的首部,组成IP数据报发送出去","type":"choice","options":{"B":"面向连接的TCP报文形式传送","A":"无连接的UDP数据报形式传送","C":"放在IP数据报的首部字段中传送","D":"放在IP数据报的数据字段中传送"},"answer":"D"},{"id":"learncoder_116_25112","stem":"可以动态为主机配置IP地址的协议是().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"动态主机配置协议(Dynanric Host Configuration Protocol,DHCP)提供了一种机制,使得使用DHCP自动获得IP的配置信息而不需要手工干预","type":"choice","options":{"C":"DHCP","D":"NAT","A":"ARP","B":"RARP"},"answer":"C"},{"id":"learncoder_116_25117","stem":"当路由器无法转发或传送DP数据报时,向初始源站点发回一个()报文。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"当路由器无法转发或者传送IP数据报时,向初始源点发回一个目的站不可达报文。目的站不可达报文的代码字段包含了进一步描述问题的整数,以表明不可达的原因,如端口不可达、目的网络未知、目的主机未知等。","type":"choice","options":{"A":"路由重定向","C":"源抑制","D":"子网掩码请求","B":"目标站不可到达"},"answer":"B"},{"id":"learncoder_116_25114","stem":"为了使互联网中的腐由器报告差错或提供有关意外情况的信息,在TCP/IP中设计了一个特殊用途的报文机制,称为().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"choice","options":{"A":"ARP","B":"RARP","D":"IGMP","C":"ICMP"},"answer":"C"},{"id":"learncoder_116_25116","stem":"ICMP有多种控制报文,当网络中出现拥塞时,路由器发出()报文。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"拥塞是无连接传输机制面临的严重问题。由于路由器或者主机无法为数据报分配足够的缓冲区,可能出现大量数据报涌入同一个路由器或者主机的情况,导致路由器或者主机被“淹没”,这就是拥塞(Congestion)。拥塞控制有很多办法,在TCP/IP体系中,ICMP采用的是“源抑制”方法,即当路由器或者主机因拥塞而丢掉数据报时,它就向数据报的源主机发送源抑制报文,抑制源主机发送数据报的速率。","type":"choice","options":{"A":"路由重定向","C":"源抑制","D":"子网掩码请求","B":"目标不可到达"},"answer":"C"},{"id":"learncoder_116_25113","stem":"主机A发送IP数据报给主机B,途中经过了5个路由器,请问在此过程中总共使用了()次心协议。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"主机A先使用ARP来查询本网络路由器的地址;然后每个路由器使用ARP来寻找下一跳路由器的地址,总共使用4次ARP从主机A网络的路由器到达主机B网络的路由器;最后主机B网络的路由器使用ARP找到主机B。所以总共使用4+2=6次ARP","type":"choice","options":{"A":"5","B":"6","C":"10","D":"11"},"answer":"B"},{"id":"learncoder_116_25109","stem":"主机地址172.162160属于下面哪一个子网?()","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"这里只详细讲解一个地址块。例如,172.16.2.64/26,“/6”表示只有6位是主机号,而64的二进制表示是01000000,所以最小地址和最大地址分别是01000000(64)和01111111(127),即172.16.2.64/26的地址范围是172.16.2.64-172.16.2.127。同理可以得出172.16.2.96/26的地址范围是172.16.2.64-172.16.2.127;172.16.2.128/26的地址范围是172.16.2.128-172.16.2.191;172.16.2.192/26的地址范围是172.16.2.192-172.16.255.综上所述,地址172.16.2.160在172.16.2.128/26地址块内","type":"choice","options":{"B":"172.16.2.96/26","D":"172.16.2.192/26","C":"172.16.2.128/26","A":"172.16.2.64/26"},"answer":"C"},{"id":"learncoder_116_25106","stem":"如果IPv4的分组太大,则会在传输中被分片,那么在()地方将对分片后的数据报重组。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"数据报被分片后,每个分片都将独立地传输到目的地,期间有可能会经过不同的路径,而最后在目的端主机分组被重组","type":"choice","options":{"D":"目的端主机","B":"下一跳路由器","C":"核心路由器","A":"中间路由器"},"answer":"D"},{"id":"learncoder_116_25111","stem":"设有两个子网202.118.133.0/24和202.118.130.0/24,如果进行路由汇聚,得到的网络地址是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"前两个字节和最后一个字节不做比较了,只比较第三个字节.129→10000001130→10000010132→10000100133→10000101显然,这4个数字只有前5位是完全相同的,因此汇聚后的网络的第三个字节应该是10000000→128。汇聚后的网络的掩码中“1”的数量应该有8+8+5=21,因此答案是202.118.128.0/21","type":"choice","options":{"A":"202.118.1280/21","D":"202.118.132.0/20","C":"202.118.130.0/22","B":"202.118.128.0/22"},"answer":"A"},{"id":"learncoder_116_25108","stem":"某端口的IP地址为172.16.7.131/26,则该IP地址所在网络的广播地址是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"清楚广播地址就是将主机位全部置为″1″,″亿6”表示前3个字节都是网络段,最后一个字节的头两位也是网络段。前3个字节忽略,只解释最后一个字节。将131以二进制表示为100000110根据广播地址的定义,主机段全″1″即为广播地址,即10111111,转换为十进制为191,所以广播地址为172.16.7.191。","type":"choice","options":{"A":"172.16.7.255","C":"172.16.7.191","D":"172.16.7.252","B":"172.16.7.129"},"answer":"C"},{"id":"learncoder_116_25105","stem":"以下给出的地址中,属于子网192.168.15.19/28的主机地址是()。I.192.168.15.17II.192.168.15.14III.192.168.15.16IV.192.168.15.31","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"将IP地址192.168.15.19和28位子网掩码255.255.255.240分别转换为二进制后进行与运算,可以得到该子网的网络地址192.168.15.160由于网络位是28位,所以主机位占4位,2^4=16,即该子网段包括16个IP地址。也就是说地址范围是192.168.15.16-192.168.15.31,但16是网络地址,31是广播地址,因此只有192.168.15.17在此范围之内.","type":"choice","options":{"A":"仅I","D":"I、II、HI和IV","B":"仅I、II","C":"仅I、III、IV"},"answer":"A"},{"id":"learncoder_116_25107","stem":"下面的地址中,属于单播地址的是().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"10.255.255.255为A类地址,而主机位是全“1”,代表网内广播,为广播地址;192.168.24.59/30为C类地址,并可以知道只有后面2位为主机号,而59用二进制表示为00111011,可以知道后面两位都为1,即主机位是全″1″,代表网内广播,为广播地址;224.105.5.211为D类组播地址.","type":"choice","options":{"C":"192.168.24.59/30","B":"10.255.255.255","D":"224.105.5.211","A":"172.31.12&255/18"},"answer":"A"},{"id":"learncoder_116_25110","stem":"CIDR技术的作用是().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"类域间路由(Classless Inter-Domain Routing,CIDR)是一种将网络归并的技术.CIDR技术的作用是把小的网络汇聚成大的超网","type":"choice","options":{"C":"解决地址资源不足的问题","B":"把大的网络划分成小的子网","D":"由多个主机共享同一个网络地址","A":"把小的网络汇聚成大的超网"},"answer":"A"},{"id":"learncoder_116_25099","stem":"网络中如果出现了错误会使得网络中的数据形成传输环路而无限转发环路的分组,IPv4协议使用()解决该问题。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"为了解决由路由错误而形成的数据无限转发的问题,IPv4在首部中设有生命期字段,数据报每经过一个路由器,路由器会将其生命期减1,当生命期为0时,路由器将不再转发数据报.","type":"choice","options":{"A":"报文分片","D":"增加选项字段","C":"设定生命期","B":"增加校验和"},"answer":"C"},{"id":"learncoder_116_25102","stem":"根据NAT协议,下列IP地址中()不允许出现在因特网上。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"NAT协议保留了3段IP地址供内部使用,这3段地址见表4-180所以只有C选项是内部地址,不允许出现在因特网上.<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第4章)image18.png'/>","type":"choice","options":{"B":"172.15.34.128","D":"172.128.45.34","C":"192.168.32.17","A":"192.172.56.23"},"answer":"C"},{"id":"learncoder_116_25104","stem":"互联网规定的B类私有地址为().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"l个A类私有地址:10.0.0.0-10.255.255.255,即10.0.0.0/8。16个B类私有地址:172.16.0.0-172.31.255.255,即172.16.0.0/12。256个c类私有地址:192.168.0.0-192.168.255.255,即192.168.0.0/16。","type":"choice","options":{"A":"172.16.0.0/16","C":"172.15.0.0/16","B":"172.16.0.0/12","D":"172.15.0.0/12"},"answer":"B"},{"id":"learncoder_116_25101","stem":"在一条点对点的链路上,为了减少地址的浪费,子网掩码应该指定为()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"在一条点对点的链路上,存在两台主机,即只需要给这个网络分配2位主机位(2^2-2=2)即可,所以说子网掩码应该为11111111.11111111.11111111.11111100,即255.255.255.252.","type":"choice","options":{"C":"255.255.255.240","A":"255.255.255.252","D":"255.255.255.196","B":"255.255.255.248"},"answer":"A"},{"id":"learncoder_116_25103","stem":"如果用户网络需要划分成5个子网,每个子网最多20台主机,则适用的子网掩码是().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"网掩码的作用就是对网络进行重新划分,以实现地址资源的灵活应用。由于用户网络需要划分成5个子网,每个子网最多20台主机,2^2<5<2^3,2^4<20<2^5,因此需要采用3位的子网段和5位的主机段。所以网络段是27位,子网掩码是255.255.255.224.","type":"choice","options":{"B":"255.255.255.240","D":"255.255.255.248","C":"255.255.255.224","A":"255.255.255.192"},"answer":"C"},{"id":"learncoder_116_25100","stem":"把IP网络划分成子网,这样做的好处是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"本题考查划分子网的用途。划分子网可以增加子网的数量(也就是把一个大的网络划分成许多小的网络),子网之间的数据传输需要通过路由器进行,因此自然就减小了广播域的大小","type":"choice","options":{"D":"增加网络的数量","B":"增加主机的数量","A":"增加冲突域的大小","C":"减小广播域的大小"},"answer":"C"},{"id":"learncoder_116_25098","stem":"在IP首部的字段中,与分片和重组无关的是()。注:假设现在已经分片完成。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"IP首部中,标识域的用途是让目标主机确定一个新到达的分段属于哪一个数据报,用于重新组合分片后的IP数据报;而标志域中的DF(是否不能分片)和MF(是否后面还有分片)位都与分片有关;片偏移则是标志分片在IP数据报中的位置,重新组合分组的时候用到.","type":"choice","options":{"A":"总长度","B":"标识","D":"片偏移","C":"标志"},"answer":"A"},{"id":"learncoder_116_25097","stem":"假设有一个B类地址指定了子网掩码255.255.255.0,则每个子网可以有的主机数为()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"由于B类地址的默认子网掩码是255.255.0.0,而题目给的子网掩码为255.255.255.0,可以看出从主机位拿了8位出来划分子网,最后只剩下8位来表示主机位,一共有256(28)种可能,再去掉全“0”和全“1”的地址,所以每个子网可以有的主机数为254.","type":"choice","options":{"C":"1024","D":"1022","A":"256","B":"254"},"answer":"B"},{"id":"learncoder_116_25090","stem":"在链路状态路由算法中,每个路由器得到了网络的完整拓扑结构后,使用()算法来找出从它到其他路由器的路径长度。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"在链路状态路由算法中,路由器通过交换每个结点到邻居结点的延迟或开销来构建一个网络的完整拓扑结构。得到了完整的拓扑结构后,路由器就使用Dijkstra最短路径算法来计算到所有结点的最短路径.","type":"choice","options":{"A":"Prim最小生成树算法","B":"Dykstra最短路径算法","D":"拓扑排序","C":"Kruskal最小生成树算法"},"answer":"B"},{"id":"learncoder_116_25092","stem":"IP分组头部中有两个有关长度的字段,一个是头部长度字段,另一个是总长度字段,其中().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"前面已经用一旬话来记住各个字段的计数单位,这旬话是:不要总拿1条假首饰来骗我吧=不要总拿1条假首4来偏我8,从这一旬话中可以得出总长度的计数单位是1B(8bit),首部长度的计数单位是4B(32bit),位偏移的计数单位是8B.","type":"choice","options":{"B":"头部长度字段以8bit为计数单位,总长度字段以32bit为计数单位","A":"头部长度字段和总长度字段都是以8bit为计数单位","C":"头部长度字段以32bit为计数单位,总长度字段以8bit为计数单位","D":"头部长度字段和总长度字段都是以32bit为计数单位"},"answer":"C"},{"id":"learncoder_116_25089","stem":"在因特网中,IP分组的传输需要经过源主机和中间路由器到达目的主机,通常().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"为了减少路由器的负担,因特网通常采用的是基于下一跳的路由选择方法,发送IP数据报的源主机和转发数据报的中间路由器只指定到达目的主机的下一个路由器的IP地址,都不知道IP数据报需要经过的完整路径.","type":"choice","options":{"D":"源主机和中间路由器都不知道IP分组到达目的主机需要经过的完整路径","A":"源主机和中间路由器都知道IP分组到达目的主机需要经过的完整路径","B":"源主机知道IP分组到达目的主机需要经过的完整路径,而中间路由器不知道","C":"源主机不知道IP分组到达目的主机需要经过的完整路径,而中间路由器知道"},"answer":"D"},{"id":"learncoder_116_25091","stem":"下列关于分层路由的描述中,()是错误的。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"采用了分层路由之后,路由器被划分为区域,每个路由器知道如何将分组路由到自己所在区域内的目标地址,但是对于其他区域内部结构毫不知情。当不同的网络被相互连接起来的时候,可以将每个网络当作一个独立的区域,这样做的好处是一个网络中的路由器不必知道其他网络的拓扑结构","type":"choice","options":{"B":"每个路由器不仅知道如何将分组路由到自己区域的目标地址,而且知道如何路由到其他区域","C":"采用了分层路由后,可以将不同的网络连接起来","D":"对于大型网络,可能需要多级的分层路由来管理","A":"采用了分层路由之后,路由器被划分成区域"},"answer":"B"},{"id":"learncoder_116_25096","stem":"下面的地址中,属于本地回路地址的是().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"有形如127.xx.yy.zz的IP地址都作为保留地址,用于回路测试.","type":"choice","options":{"C":"127.0.0.1","B":"255.255.255.0","D":"192.0.0.1","A":"10.10.10.1"},"answer":"D"},{"id":"learncoder_116_25093","stem":"动态路由选择和静态路由选择的主要区别是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,可分为两类:静态路由选择策略和动态路由选择策略。前者使用手动配置的路由信息,不能及时适应网络状态的变化。后者通过路由选择协议自动发现并维护路由信息,能及时适应网络状态的变化","type":"choice","options":{"D":"动态路由选择使用路由表,而静态路由选择不使用路由表","B":"动态路由选择需要使用路由选择协议去发现和维护路由信息,而静态路由选择只需要手动配置路由信息","A":"动态路由选择需要维护整个网络的拓扑结构信息,而静态路由选择只需要维护有限的拓扑结构信息","C":"动态路由选择的可扩展性要大大优于静态路由选择,因为在网络拓扑结构发生了变化时,路由选择不需要手动配置去通知路由器"},"answer":"B"},{"id":"learncoder_116_25095","stem":"在IPv4中,组播地址是()地址。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"choice","options":{"D":"D类","A":"A类","B":"B类","C":"C类"},"answer":"D"},{"id":"learncoder_116_25094","stem":"对路由选择协议的一个要求是必须能够快速收敛,所谓“路由收敛”是指().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"敛,就是当路由环境发生变化后,各路由器调整自己的路由表以适应网络拓扑结构的变化,最终达到稳定的状态。″收敛″得越快,路由器就越快适应网络拓扑结构的变化.","type":"choice","options":{"D":"能把多个子网汇聚成一个超网","B":"路由器处理分组的速度足够快","C":"网络设备的路由表与网络拓扑结构保持一致","A":"路由器能把分组发送到预订的目标"},"answer":"C"},{"id":"learncoder_116_25088","stem":"下列哪一项不属于路由选择协议的功能?()","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"路由选择协议是一些规定和过程的组合,使得在互联网中的各个路由器能够彼此互相共享路由信息。路由选择协议的功能包括获取网络拓扑结构的信息、构建路由表、在网络中更新路由信息、选择到达每个目的网络的最优路径、识别一个通过网络的无环通路等。发现下一跳的物理地址不属于路由选择协议的功能,一般通过其他方式来完成,如使用ARP.","type":"choice","options":{"C":"构建路由表","A":"-获取网络拓扑结构的信息","D":"发现下一跳的物理地址","B":"选择到达每个目的网络的最优路径"},"answer":"D"},{"id":"learncoder_116_25083","stem":"路由器进行间接交付的对象是().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"路由器闸接交付是在IP层上实行跨网段的交付,所以需要使用IP地址,间接交付的对象是IP数据报.","type":"choice","options":{"B":"帧","A":"脉冲信号","C":"IP数据报","D":"UDP数据报"},"answer":"C"},{"id":"learncoder_116_25086","stem":"因特网的RIP、OSPF协议、EGP分别使用了什么路由选择算法()。I.路径-向量路由选择协议II.链路状态协议III.距离-向量路由选择协议","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"RIP即路由信息协议,OSPF即开放最短路径优先协议,BGP即边界网关协议.RIP和OSPF协议属于内部网关协议,主要处理自治系统内部的路由选择问题;BGP属于外部网关协议,主要处理自治系统之闸的路由选择问题oRIP是一种分布式的基于距离一向量的路由选择协议.RIP的距离也称为″跳数″,跳数越少,距离越短.RIP优先选择距离短的路径.OSPF最主要的特征是使用分布式的链路状态协议。在OSPF协议中,路由器间彼此交换的信息是与本路由器相邻的所有路由器的链路状态,最终各自建立一个链路数据库,这个链路数据库实际上就是全网拓扑结构图。每个路由器使用链路状态数据库中的数据来构造自己的路由表。由于BGP只是力求寻找一条能够到达目的网络且比较好的路由,而并非要寻找一条最佳路由,所以它采用的是路径一向量路由选择协议。在BGP中,每个自治系统选出一个BGP发言人,这些发言人通过相互交换自己的路径向量(网络可达性的信息)后,就可找出到达各自治系统的比较好的路由.","type":"choice","options":{"D":"III、II、I","C":"II、I、HI","B":"II、III、I","A":"I、II、III"},"answer":"D"},{"id":"learncoder_116_25085","stem":"下列关于路由算法的描述中,()是错误的。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"态路由又称为非自适应的算法,它不会根据流量和结构来调整它们的路由决策。但是这并不说明路由选择是不能够改变的,事实上用户可以随时配置路由表。动态路由称为自适应的算法,需要实时获得网络的状态,并且根据网络的状态适时地改变路由决策","type":"choice","options":{"A":"静态路由有时也被称为非自适应的算法","B":"静态路由所使用的路由选择一旦启动就不能修改","C":"动态路由也称为自适应算法,会根据网络的拓扑变化和流量变化改变路由决策","D":"动态路由算法需要实时获得网络的状态"},"answer":"B"},{"id":"learncoder_116_25082","stem":"下列关于交换机式网络和路由网络的描述,()是错误的。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"使用交换机(或者网桥)和使用路由器是连接两个不同网络的两种办法。交换机式网络实现在数据链路层上,它不需要理解网络层协议,整个网络互连是以数据链路层地址为基础的。而路由器式网络是在网络层的互连,它需要理解网络层的协议.","type":"choice","options":{"C":"交换机不必理解分组中所使用的网络协议","D":"路由器不必理解分组中的网络协议","A":"交换机式网络整个帧是以MAC地址为基础进行传输的","B":"路由网络中,路由器从帧中提取出分组,然后利用分组中的地址来决定它的目标去向"},"answer":"D"},{"id":"learncoder_116_25087","stem":"在因特网中(不考虑NAT),IP分组从源结点到目的结点可能要经过多个网络和路由器。在传输过程中,IP分组头部中的().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"在因特网中,当一个路由器接收到一个IP分组时,路由器根据IP分组头部中的目的IP地址进行路由选择,并不改变源IP地址和目的IP地址的值。即使在IP分组被分片时,源IP分组的源IP地址和目的IP地址也将复制到每个分片的头部中。因此,在整个传输过程中,Ⅲ分组中的源IP地址和目的IP地址都不发生变化。","type":"choice","options":{"B":"源地址有可能发生变化而目的地址不会发生变化","A":"源地址和目的地址都不会发生变化","D":"源地址和目的地址都有可能发生变化","C":"源地址不会发生变化而目的地址有可能发生变化"},"answer":"A"},{"id":"learncoder_116_25084","stem":"在因特网中,一个路由器的路由表通常包含()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"路由器是网络互连的关键设备,其任务是转发分组。每个路由器都维护着一个路由表以决定分组的传输路径。当目的主机与源主机不在同一个网络中时,则应将数据报发送给源主机所在网络上的某个路由器,由该路由器按照转发表(由路由表构造的)指出的路由将数据报转发给下一个路由器。这种交付方式称为间接交付。为了提高路由器的查询效率和减少路由表的内容,路由表只保留到达目的主机的下一个路由器的地址,而不是保留通向目的主机的传输路径上的所有路由信息。因此,因特网的路由表的表项通常包含目的网络和到达该目的网络的下一个路由器的IP地址。","type":"choice","options":{"C":"目的网络和到达该目的网络路径上的下一个路由器的IP地址","A":"目的网络和到达该目的网络的完整路径","D":"目的网络和到达该目的网络路径上的下一个路由器的MAC地址","B":"所有的目的主机和到达该目的主机的完整路径"},"answer":"C"},{"id":"learncoder_116_25076","stem":"路由器转发分组是根据报文的().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"因为路由器工作在网络层,所以路由器转发分组是根据报文的IP地址.","type":"choice","options":{"D":"IP地址","A":"LLC地址","B":"端口号","C":"MAC地址"},"answer":"D"},{"id":"learncoder_116_25079","stem":"以下说法错误的是().I.路由选择分直接交付和间接交付II.直接交付时,两台机器可以不在同一物理网段内III.间接交付时,不涉及直接交付IV.直接交付时,不涉及路由器","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"首先路由选择分为直接交付和间接交付,当两台主机在同一物理网段内时,就使用直接交付,反之,使用间接交付,所以1是正确的,Ⅱ是错误的;间接传送的最后一个路由器肯定是直接交付,所以Ⅲ错误;直接交付时是在同一物理网段内,所以不涉及路由器。综上所述,Ⅱ和Ⅲ是错误的。","type":"choice","options":{"B":"II和III","A":"I和II","D":"I和IV","C":"HI和IV"},"answer":"B"},{"id":"learncoder_116_25074","stem":"在TCP/IP模型中,上层协议实体与下层协议实体之间的逻辑接口称为服务访问点(SAP)。在Internet中,网络层的服务访问点是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"在TCP/IP模型中,网络接口层的服务访问点是MAC地址;在网际层(也可称为网络层)使用的协议主要是IP,其服务访问点便是Ⅲ地址;而传输层使用的主要协议为TCP和UDP,TCP使用的服务访问点为TCP的端口号,UDP使用的服务访问点为UDP的端口号.","type":"choice","options":{"B":"LLC地址","D":"端口号","C":"IP地址","A":"MAC地址"},"answer":"C"},{"id":"learncoder_116_25077","stem":"在路由器进行互连的多个局域网的结构中,要求每个局域网().","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"本层及本层以下的协议可以不同,但是高层协议必须相同。例如,在数据链路层互连,物理层协议与数据链路层协议可以不同,但是网络层及其以上协议必须相同.","type":"choice","options":{"B":"物理层、数据链路层协议可以不同,而数据链路层以上的高层协议必须相同","D":"物理层、数据链路层、网络层协议及高层协议都可以不同","A":"物理层、数据链路层、网络层协议都必须相同,而高层协议可以不同","C":"物理层、数据链路层、网络层协议可以不同,而网络层以上的高层协议必须相同"},"answer":"C"},{"id":"learncoder_116_25080","stem":"路由器在能够开始向输出链路传输分组的第一位之前,必须接收到整个分组,这种机制称为()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"路由器转发一个分组的过程:先接收整个分组;然后对分组进行错误检查,如果出错,则丢弃错误的分组,否则存储正确分组;最后根据路由选择协议将正确的分组转发到合适的端口。这种机制称为存储转发机制。","type":"choice","options":{"A":"存储转发机制","D":"分组检测机制","B":"直通交换机制","C":"分组交换机制"},"answer":"A"},{"id":"learncoder_116_25078","stem":"下列协议中属于网络层协议的是().I.IPII.TCPIII.FTPIV.ICMP","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"TCP属于传输层协议,FTP属于应用层协议,只有IP和ICMP属于网络层协议.","type":"choice","options":{"B":"II和HI","A":"I和II","C":"HI和IV","D":"I和IV"},"answer":"D"},{"id":"learncoder_116_25081","stem":"下列关于拥塞控制策略的描述中,()符合开环控制。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"环算法和闭环算法的目的是保证由源点产生的交通流不会把网络性能降低到指定的服务质量值之下。开环算法依据用户的协议限制进入网络的交通,从而阻止拥塞的发生,所以B选项正确。如果服务质量不能被保证,那么网络不得不拒绝交通流。决定接受或拒绝交通流的功能称为准入控制。因此,开环算法包含某种类型的资源预","type":"choice","options":{"B":"根据用户的协议限制进入网络的交通,从而阻止拥塞的发生","C":"需要实时将网络的状态反馈到调节交通的地点(通常是源)","A":"在拥塞已经发生或即将发生时做出反应,调节交通流","D":"不需要预留某些资源,资源的使用率很高"},"answer":"B"},{"id":"learncoder_116_25075","stem":"下列能反映出网络中发生了拥塞现象的是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"拥塞是指在某段时间内,如果对网络中某一资源的需求超过了该资源提供的可用部分,网络的性能将明显变差。当网络中发生拥塞时,网络的性能将急剧下降,整个网络的吞吐量就会随着网络负载的增加而不断下降。在网络正常运行时,网络的吞吐量将随网络负载的增加而线性增加。因此,判断网络是否出现拥塞的依据是网络的吞吐量是否随着负载的增加而不断下降.","type":"choice","options":{"C":"随着网络负载的增加,吞吐量也增加","D":"网络结点接收和发出的分组越来越少","B":".网络结点接收和发出的分组越来越多","A":"随着网络负载的增加,吞吐量反而降低"},"answer":"A"},{"id":"learncoder_116_22610","stem":"设有A、B、C、D 4台主机处于同一物理网络中,主机A的IP地址为192.155.12.112,主 机B的IP地址为192.155.12. 120,主机C的IP地址为192. 155.12.176,主机D的IP地址为 192.155.12.222。共同的子网掩码是255.255.255.224o请回答下列问题:(1)\tA、B、C、D 4台主机之间哪些可以直接通信?哪些需要设置路由器才能通信,请画出网 络连接示意图,并标注各个主机的子网地址和主机地址。(2)\t如果需要加入第5台主机E,使其能与主机D直接通信,其IP地址的设定范围是多少?(3)\t不改变主机A的物理地址,将其IP地址改为192.155.12. 168,请问它的直接广播地址 是多少?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"本题考查IP地址的使用。由于子网掩码前27位为1,所以主机地址位数是5 位,即每个IP地址的最后5位可以确定主机地址。(1)对于主机A、B、C、D的相关地址信息如下表:表主机地址信息由表可以看出,主机A和主机B处于同一个子网,因此可以直接通信主机A、主机B与主 机C以及主机D之间通信需要路由器;主机C和主机D之间通信也需要路由器。网络连接示意 图如下。 =<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第24章/image1.png'/>子网 1: 192.155.12.96(2)由于主机E和主机D在同一个子网,所以主机E所在子网的子网地址为192.155.12.192, 192的二进制为11000000,最右边5位为主机地址位数,去掉全0和全1,并且不能和主机D的 IP 地址 192.155.12.222 重复,所以其 IP 地址设定的范围为 192.155.12.193 ~ 192.155.12.221。(3)168的二进制为10101000,将最右边的5为置1,即为其直接广播地址,即192.155.12.191"},{"id":"learncoder_116_22609","stem":"一个IP数据报的总长度为1 420字节(固定首部长度)。经过一个网络传输,该网络的最 大传输单元MTU = 532字节。问该数据报应该划分成几个分段?每个分段的数据字段长度、分 段偏移和MF标志值分别是多少?","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"short_answer","answer":"除去20字节的固定首部长度,该分组的数据部分长度为1 400字节,由于网络的 MTU = 532字节,所以应该划分成3个分段。第一个分段:总长度为532字节,减去20字节首部,数据部分长度为512字节,分段偏移= 0,MF=lo第二个分段擞据部分长度为512字节,分段偏移值= 0+512/8 =64,MF=1O\t第三个分段:数据部分长度=1 400-2x512 = 376字节,分段偏移=64+512/8 = 128,MF = 0o"},{"id":"learncoder_116_22605","stem":"路由器中计算路由信息的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是路由器的组成和功能知识点。路由选择处理机是路由器路由选择部 分的核心,负责构造、更新和维护路由表,因此答案C正确。\t","type":"choice","options":{"B":"输出端口","D":"交换结构","C":"路由选择处理机","A":"输入端口"},"answer":"C"},{"id":"learncoder_116_22602","stem":"下列地址中(\t)是.IPv4 M地址。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"空","type":"choice","options":{"A":"127.1.1.1","C":"202.118.224.1","D":"232.152.49.18","B":"130.251.24.32"},"answer":"D"},{"id":"learncoder_116_22601","stem":"BGP称为外部网关协议的主要特征是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是BGP协议知识点。BGP使用改进的距离-向量路由选择算法,因此 A、B错,选项D是为了简化路由于本题无关;外部网关协议需要考虑政治、军事、经济等策略, BGP必须具备该特点,因此答案C正确。","type":"choice","options":{"B":"采用链路状态路由算法","D":"将每个AS视为一个节点","C":"支持策略路由","A":"采用静态路由算法"},"answer":"C"},{"id":"learncoder_116_22604","stem":"移动IP主机返回本地网时,必须(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是移动IP的通信过程知识点。移动主机返回本地网是需要向本地代理 注销辅地址,继续使用原来的主地址,从而避免本地代理将发给移动主机的数据按照辅地址进行 转发,因此答案B正确。\t","type":"choice","options":{"C":"撤销本地网的主地址,获取一个辅地址","D":"同时保留本地网主地址和辅地址","A":"重新申请一个IP地址","B":"向本地代理注销辅地址"},"answer":"B"},{"id":"learncoder_116_22603","stem":"移动IP为移动主机设置了两个IP地址,分别称为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是移动IP知识点。移动IP为主机设置的是固定的主地址和动态改变 的辅地址,因此答案B正确。","type":"choice","options":{"A":"源地址和目的地址","D":"永久地址和临时地址","C":"固定地址和移动地址","B":"主地址和辅地址"},"answer":"B"},{"id":"learncoder_116_22600","stem":"某自治系统采用RIP协议,若该自治系统内的路由器R1收到其邻居路由器R2的距离矢量中包含的信息<netl,16>,则可能得出的结论是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是RIP协议知识点。RIP协议基于跳数来度量距离,支持的最大跳数是 15,跳数为16则表示不可达,因此答案D正确。","type":"choice","options":{"A":"R2可以经过R1到达netl,跳数为17","C":"R1可以经过R2到达netl,跳数为16","D":"R1不能经过R2到达netl","B":"R2可以经过R1到达netl,跳数为16"},"answer":"D"},{"id":"learncoder_116_22606","stem":"下面的网络设备中,能够抑制网络风暴的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是网络层设备知识点。路由器工作在网络层,可以抑制网络风暴,答案 D正确.","type":"choice","options":{"D":"路由器","C":"网桥和路由器","B":"网桥","A":"中继器和集线器"},"answer":"D"},{"id":"learncoder_116_22599","stem":"自治系统AS内部使用的路由协议必须是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是自洽系统知识点。OSPF只是自治系统协议的一部分,EGP和BGP属 于外部网关协议,IGP是AS内使用的路由协议的统称,因此答案C正确。","type":"choice","options":{"B":"EGP","A":"OSPF","D":"BGP","C":"IGP"},"answer":"C"},{"id":"learncoder_116_22595","stem":"CIDR协议的优点是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是CIDR知识点。CIDR不再指定网络号或主机号的位数,从而使得IP 子网划分更加灵活,地址利用率更好,既可以划分子网,也能够合并超网,答案D正确。","type":"choice","options":{"C":"不仅可以划分子网,也能够合并超网","B":"子网划分更加灵活","D":"以上均正确","A":"IP地址利用率高"},"answer":"D"},{"id":"learncoder_116_22598","stem":"如果IPv4的地址为202.118.224.1,其对应的IPv6地址表示为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是IPv6地址知识点。A、C、D都不符合IPv6的地址表示方法,因此正确 答案为B。","type":"choice","options":{"D":"202.118.224.1","C":"202.118.224.1","A":"202.118.224.1","B":"202.118.224.1"},"answer":"B"},{"id":"learncoder_116_22597","stem":"下列关于ICMP报文的说法中,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是ICMP协议知识点。ICMP是IP层协议,封装在IP数据报中传送,因 此正确答案为Ao","type":"choice","options":{"B":"ICMP报文用于报告IP数据报发送错误","D":"ICMP报文本身出错将不再处理","A":"ICMP报文封装在LLC帧中发送","C":"ICMP报文封装在IP数据报中发送"},"answer":"A"},{"id":"learncoder_116_22596","stem":"在IP数据报进行路由转发时,用来发现“下一跳”物理地址的协议是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是ARP协议知识点。ARP协议用来完成IP地址到MAC地址的映射, 答案A正确。","type":"choice","options":{"D":"IGP","A":"ARP","C":"RIP","B":"ICMP"},"answer":"A"},{"id":"learncoder_116_22592","stem":"Ip分组中校验字段的范围是()","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是IP分组知识点JIP分组的校验字段仅检查分组的首部信息,不包括 数据部分,因此答案B正确。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computerized_adaptive_tests2012/第24章/header1.xml'/>","type":"choice","options":{"D":"以上皆检查","C":"仅检查数据部分","B":"仅检查分组头部","A":"整个IP分组"},"answer":"B"},{"id":"learncoder_116_22591","stem":"下列路由选择协议中属于距离-向量协议的是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是路由算法知识点。RIP是路由信息协议,基于距离-向量路由选择协 议;OSPF是基于链路状态路由算法的协议;BGP采用的是路径向量算法;ICMP不是路由选择协 议,因此答案C正确。","type":"choice","options":{"B":"BGP","D":"ICMP","A":"OSPF","C":"RIP"},"answer":"C"},{"id":"learncoder_116_22594","stem":"若子网掩码是255.255.192.0,那么下对主机必须通过路由器才能与主机129.23.144.16通信的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是子网划分与子网掩码知识点。将子网掩码255.255.192. 0与主机 129.23.144.16进行“与”操作,得到该主机网络地址为129.23.128.0,再将该子网掩码分别与四 个候选答案的地址进行“与”操作,只有129.23.127.222的网络地址不为129. 23. 128. 0o因此 该主机与129.23.144.16不在一个子网中,需要通过路由器转发信息。答案B正确。","type":"choice","options":{"D":"129.23.148.127","A":"129.23.191.21","C":"129.23.130.33","B":"129.23.127.222"},"answer":"B"},{"id":"learncoder_116_22593","stem":"在因特网中,B类地址用几位表示网络号(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是IP地址知识点。IP地址共32位,B类地址的前两位TO”为地址分类 标识,接下来14为表示网络号,因此答案C正确。\t","type":"choice","options":{"B":"7","C":"14","D":"16","A":"2"},"answer":"C"},{"id":"learncoder_116_22588","stem":"路由器转发IP数据报而进行路由选择时,依据的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是路由与转发知识点。路由器在为IP数据报进行路由选择时,根据目 的IP地址来决定下一跳是哪个网络,因此正确答案为Bo","type":"choice","options":{"C":"源硬件地址","B":"目的IP地址","A":"源IP地址","D":"目的硬件地址"},"answer":"B"},{"id":"learncoder_116_22587","stem":"路由器连接的异构网络指的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是异构网络互联知识点。网络的异构性指的是传输介质、数据编码方 式、链路控制协议以及不同的数据单元格时和转发机制,这些特点分别在物理层和数据链路层协 议中定义,因此正确答案为C。","type":"choice","options":{"B":"网络中计算机操作系统不同","C":"数据链路层和物理层均不同","D":"数据链路层协议相同,物理层协议不同","A":"网络拓扑结构不同"},"answer":"C"},{"id":"learncoder_116_22589","stem":"下列因素中,不属于导致拥塞错误的原因是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是拥塞控制知识点。拥塞是由于网络中很多因素引起的,如网络负载大 导致单位时间内交给网络的分组数量过多,路由器处理速度慢导致IP数据报转发速度降低,路 由器缓冲区不足导致分组被迫丢弃,网桥属于局域网扩展设备与拥塞问题无关。因此答案D 正确。","type":"choice","options":{"A":"网络负载太大","D":"网桥转发速度慢","B":"路由器处理速度慢","C":"路由器缓冲区不足"},"answer":"D"},{"id":"learncoder_116_22590","stem":"关于静态路由选择和动态路由选择,错误的说法是()。","key_points":"知识点.练习.专业课练习.计算机网络.网络层","analysis":"此题考查的是静态路由和动态路由知识点。无论静态路由还是静态路由均要使用 路由选择表来进行路由选择,只不过维护的方式不同,因此答案A正确。","type":"choice","options":{"B":"动态路由能够较好地适应网络状态的变化,但是开销比较大","C":"静态路由通过人工来配置路由信息,动态路由使用路由,选择协议来发现和维护路由信息","D":"静态路由适合在负荷稳定、拓扑结构变化不大的网络中运行","A":"动态路由使用路由表,静态路由只需使用转发表"},"answer":"A"},{"id":"learncoder_117_25072","stem":"(2016年统考真题)假设图5-28中的H3访问Web服务器S时,S为新建的TCP连 接分配了 20KB (K=1024)的接收缓存,最大段长MSSHKB,平均往返时间RTT=200ins。H3建立连接时的初始序号为100,且持续以MSS大小的段向S发送数据,拥塞窗口初始阈 值为32KB; S对收到的每个段进行确认,并通告新的接收窗口。假定TCP连接建立完成后, S端的TCP接收缓存仅有数据存入而无数据取出。请回答下列问题。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第5章)/image4.png'/>1)在TCP连接建立过程中,H3收到的S发送过来的第二次握手TCP段的SYN和ACK 标志位的值分别是多少?确认序号是多少?2)H3收到的第8个确认段所通告的接收窗口是多少?此时H3的拥塞窗口变为多少?H3的发送窗口变为多少?\t'3)当H3的发送窗口等于0时,下一个待发送的数据段序号是多少? H3从发送第1个数据段到发送窗口等于0时刻为止,平均数据传输速率是多少(忽略段的传输延时)?4)若H3与S之间通信已经结束,在t时刻H3请求断开该连接,则从t时刻起,S释放 该连接的最短时间是多少?","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"1)第二次握手TCP段的SYN=1 (1分), ACK〒1 (1分);确认号是101 (1分)02) H3收到的第8个确认段所通告的接收窗口是12KB (1分);此时H3的拥塞窗口变为9KB (1分), H3的发送窗口变为9KB (1分)3 )当H3的发送窗口等于0时,下一个等待发送段的序号是20K+101≒20×1024+101≒20581( 1分);H3从发送第1个段到发送窗口等于0时刻为止,平均数据传输速率是20KB/(5×200ms)宅OKB/s≒20.48的i砧( 1分)4)从t时刻起, S释放该连接的最短时间是1.5×200ms=300ms (1分)。"},{"id":"learncoder_117_25067","stem":"\t一个UDP用户数据报的首部的十六进制表示为07 21 00 45 00 2C E8 27。试求源端 殛~ 口、目的端口、用户数据报总长度、数据部分长度。这个用户数据报是从客户发送给服务器 J 还是服务器发送给客户?使用UDP的这个服务器程序是什么?","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"UDP的数据报格式如图5-29所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第5章)/image6.png'/>第1、 2个字节表示源端口,将0721转化为二进制是0000011100100001,所以十进制为1825,得到源端口为18250第3、 4个字节为目标端口,将45转换为十进制得到目的端口为 690第5、 6字节为2C,转换为十进制的数据总长度为44B,那么数据部分的长度应该等于 总长度减去mp首部8B,即得到数据部分长度为36Bo 进一步分析,发现该mp数据报是发送到69端口,是熟知的TFm的端口。由此可以 推出,该数据报是由客户端发送给服务器的,使用这个服务的程序是TFTP"},{"id":"learncoder_117_25070","stem":"图5-27所示为一个TCP主机中的拥塞窗口的变化过程,这里最大数据段长度为1KB, 请回答以下问题:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第5章)/image2.png'/>1)\t该TCP的初始阈值是多少?为什么?2)\t本次传输是否发生超时?如果有是在哪一次传输超时?3)\t在本例中,采用了什么拥塞控制算法?","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"1)该TCP的初始阑值为16KBo最大数据段长度为1KB,可以看出在拥塞窗口到达16KB 之后就呈线性增长了,说明初始闽值是16KBo2)该TCP传输在第13次传输时发生了超时,可以看到拥塞窗口在13次传输后变为1KBo 3)采用了慢开始和拥塞避免的算法,因为可以看到在发送失败后拥塞窗口马上变为1KB, 而且阑值也变为了之前的一半。"},{"id":"learncoder_117_25071","stem":"\tTCP的拥塞窗口 cwnd的大小与传输轮次n的关系见表5-4。表5-4 cwnd的大小与传输轮次n的关系<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第5章)/image3.png'/>1)\t试画出拥塞窗口与传输轮次的关系曲线。2)\t指明TCP工作在慢开始阶段的时间间隔。3)\t指明TCP工作在拥塞避免阶段的时间间隔。4)\t在第16轮次和第22轮次之后发送方是通过收到3个重复的确认还是通过超时检测到应)丢失了报文段?\t{5)\t在第1轮次、第18轮次和第24轮次发送时,门限ssthresh分别被设置为多大?6)假定在第26轮次之后收到了 3个重复的确认,因而检测出了报文段的丢失,那么拥 塞窗口 cwnd和门限ssthresh应设置为多大?","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"1)拥塞窗口与传输轮次的关系曲线如图5-31所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第5章)/image8.png'/>2)从图5-31中可以看出,慢开始时间闸隔为[1, 6]和[23, 26]03)从图5-31中可以看出,拥塞避免时间间隔为[7, 16]和[17, 22]。 ‘4)由于在第16轮次检测到丢失报文段时,拥塞窗口并没有降到1,而是降低到门限值 的一半,所以应该是使用了快恢复算法,所以此时发送方是通过收到3个重复的确认检测到 丢失的报文段的;由于在第22轮次检测到丢失报文段时,拥塞窗口降到1,所以此时发送方 是通过超时检测到丢失的报文段05)在第1轮次发送时,门限ss耻esh被设置为32;在第18轮次发送时,门限sst血esh 被设置为发生拥塞时的一半,即21;在第.24轮次发送时,门限sst血esh是第22轮次发生拥 塞时拥塞窗口的一半,即1306)拥塞窗口cw皿d和门限ss血resh都应设置为8的一半,即4。"},{"id":"learncoder_117_25064","stem":"一个TCP报文段的数据部分最多为多少字节?为什么?如果用户要传送的数据的字 节长度超过TCP报文段中的序号字段可能编出的最大序号,问还能否用TCP来传送?","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":":一个TCP报文段的数据部分最多为65495B,此数据部分加上TCP首部的20B,再加上皿首部的20B,正好是皿数据报的最大长度(216-1=65535B)。当然,若皿首部包含 了选项,则皿首部长度超过20B,这时TCP报文段的数据部分的长度将小于65495Bo 即使用户要传送的数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号, 也还可以用TCP来传送。当今的因特网用户速率还不是很高,且分组的生命期受限o TCP的 序号字段有32位,可以循环使用序列号,这样就可保证当序号重复使用时,旧序号的数据早 已通过网络到达终点了"},{"id":"learncoder_117_25062","stem":"在一个lGbit/s的TCP连接上 发送窗口的大小为65535B,单程延迟时间等于10ms。 问可以取得的最大吞吐量是多少?线路效率是多少?(确认帧长度忽略不计)","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"根据题意,往返时延RTT=10msx2≒20ms,发送一个窗口的发送时延是65535×8bi″1Gbids=0.52428ms,那么最后1bit到达对方主机的时间为10.52428mso题目已经说明确认帧的长度忽略不计,所以发送一个窗口的完整时间为20.52428mso每秒可发送48.7227个窗口(1000ms÷20.52428ms=48.7227)。而吞吐量的定义就是每秒能发送的数据,即65535×8×48.7227bi″s≒25.54Mbiife,线路效率即25.54Mbids÷1000MbiVs革2.55%。所以,最大吞吐量是25.54Mbi″s,线路效率约为2.55%"},{"id":"learncoder_117_25065","stem":"有一个TCP连接,当它的拥塞窗口大小为64个分组大小时超时,假设该线路往返 时间RTT是固定的即为3s,不考虑其他开销,即分组不丢失,该TCP连接在超时后处于慢 开始阶段的时间是多少秒?","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"根据题意,当超时的时候,慢开始门限值ss血resh变为拥塞窗口大小的一半,即sst血esh〒64/2=32个分组。此后,拥塞窗口重置为1,重新启用慢开始算法。根据慢开始算法的指数增长规律,经过5个RTT,拥塞窗口大小变为25=32,达到sst血esho此后便改用拥 塞避免算法。因此,该TCP连接在超时后重新处于慢开始阶段的时间是5×RTT=15s"},{"id":"learncoder_117_25068","stem":"某TCP连接下面使用256kbit/s的链路,其端到端时延为128ms。经测试,发现吞吐量只有120kbit/so试问发送窗口 W是多少?","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"此题需分为两种情况: 1 )接收端在接收完数据的最后一位后才发出确认0 2)接收端每收到一个很小的报文段后就发回确认。 下面分别计算: 假设发送窗口w≒x,发送方连续发送完窗口内的数据需要的时间为To则有 1 )接收端在接收完数据的最后一位后才发出确认 因此,发送端需要经过256hs+T的时间,才能发送下一个窗口的数据。所以有X/(256ms+T)=120kbi″s,而T≒x亿56kbiVs,可解得x=57825.88bit=7228B o 2)接收端每收到一个很小的报文段后就发回确认 因此,发送方经过比256ms略多一些的时间就可以发送下一个窗口的数据,可以近似地 认为经过256ms的时间就可以发送下一个窗口的数据。所以有x亿56ms=120kbids,可解得X〒3840B"},{"id":"learncoder_117_25063","stem":"主机A向主机B连续发送了两个TCP报文段,其序号分别为70和100。试问:1)第一个报文段携带了多少字节的数据?2)主机B收到第一个报文段后发回的确认中的确认号应当是多少?3)如果主机B收到第二个报文段后发回的确认中的确认号是180,试问A发送的第二个报文段中的数据有多少字节?4)如果A发送的第一个报文段丢失了,但第二个报文段到达了 E。E在第二个报文段到 达后向A发送确认。试问这个确认号应为多少?","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"1)第二个报文段的开始序号是100,说明第一个报文段的序号是70-99,所以第一个报 文段携带了30B的信息0 2)由于主机已经收到第一个报文段,即最后一个字节的序号应该是99,因此下一次应 当期望收到第100号字节,故确认中的确认号是1000 3)由于主机B收到第二个报文段后发回的确认中的确认号是180,说明已经收到了第179号字节,也就说明第二个报文段的序号是从100-179,因此第二个报文段有80Bo 4)确认的概念就是前面的序号全部收到了,只要有一个没收到,就不能发送更高字节的 确认,所以主机B应该发送第一个报文段的开始序号,即700"},{"id":"learncoder_117_25066","stem":"如果收到的报文段无差错,只是未按序号,则TCP对此未做明确规定,而是让TCP 的实现者自行确定。试讨论两种可能的方法的优劣。1)将不按序的报文段丢弃。2)\t先将不按序的报文段暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"第一种方法其实就是后退N帧协议所使用的处理方式,这种方法将不按序的 报文段丢弃,会引起被丢弃报文段的重复传送,增加对网络带宽的消耗,但由于用不着将该 报文段暂存,可避免对接收方缓冲区的占用。第二种方法就是选择重传协议所使用的处理方 式,该方法将不按序的报文段暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应 用层,这样有可能避免发送方对已经被接收方收到的不按序的报文段的重传,减少了对网络 带宽的消耗,但增加了接收方缓冲区的开销"},{"id":"learncoder_117_25069","stem":"一个TCP的首部字节数据见表5-3,请分析后回答问题。表5-3 —个TCP的首部字节数据<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第5章)/image1.png'/>1)本地端口号是多少?目的端口号是多少?2)发送的序列号是多少?确认号是多少?3)TCP首部的长度是多少?4)这是一个使用什么协议的TCP连接?该TCP连接的状态是什么?","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"首先写出TCP首部的格式(考研时会直接给出),如图5-30所示。然后根据 首部格式来分析题目中的数据0源端口为第1、 2字节,值是Od28,转换为十进制是33680第二个2B字段是0015, 表示目的端口,转换为十进制是210 2)第5-8字节表示了顺序号,值是00 5f a9 06,转换为十进制是62691900紧接 着的4个字节是确认号,值是0.<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第5章)/image7.png'/>3)第13字节的前4位表示TCP首部的长度,这里的值是7,乘以4后得到TCP的首部 长度为28,说明该TCP首部还有8B的选项数据0 4)根据目标端口是21,可以知道这是一条FTP的连接。而TCP的状态则需要分析第14 字节,第14字节的值是02,即SYN置位了,而且ACK≒0表示该数据段没有捎带的确认域, 这说明是第一次握手时发出的TCP连接0"},{"id":"learncoder_117_25061","stem":"为什么说UDP是面向报文的,而TCP是面向字节流的?","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"发送方UDP对应用程序交下来的报文,在添加首部后就向下交付皿层o mp对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。接收方mp 对皿层交上来的mp用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次 交付一个完整的报文,所以说UDP是面向报文的。而发送方TCP对应用程序交下来的报文 数据块,视为无结构的字节流(无边界约柬),但维持各字节,所以说TCP是面向字节流的"},{"id":"learncoder_117_25059","stem":"假定TCP的拥塞窗口值被设定18KB,然后发生了网络拥塞。如果紧接着的4次突 发传输都是成功的,那么拥塞窗口将是多大?假定最大报文段长度MSS为1KB。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"40.空","type":"short_answer","answer":"由于在拥塞窗口值被设定为18KB时发生了网络拥塞,慢开始门限值被设定 为9KB,而拥塞窗口则重置为一个最大报文段长度,然后重新进入慢开始阶段。在慢开始阶 段,拥塞窗口值在一次成功传输后将加倍,直至到达慢开始门限值。因此,超时后的第1次 传输将是1个最大报文段长度,然后是2个、 4个、 8个最大报文段长度,所以在4次突发传 输成功后,拥塞窗口的大小将变成9KB (第4次没有成功前,应该是8KB)"},{"id":"learncoder_117_25053","stem":"(2013年统考真题)主机甲与主机乙之间已建立一个TCP连接,双方持续有数据传输,且数据无差错与丢失。若甲收到1个来自乙的TCP段,该段的序号为1913、确认序号 为2046、有效载荷为100B,则甲立即发送给乙的TCP段的序号和确认序号分别是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"若甲收到1个来自乙的TCP表5-5 TcP中的6个标志位的含义标志位 含 义 URG 如果紧急指针被使用了,则URG被设置 为1 AcK 1表示确认号有效,0表示数据段不包含 确认息PSH 表示带有PSH标志的数据,接收方在收 到数据后要立即交给应用层 RsT 用于重置一已经混乱的连接 sYN 用于建立连接的过程 FIN 用于释放一个连接 段,该段的序号se吁1913、确认序号ack≡2046、有效载荷为100字节,则甲立即发送给乙的TCP段的序号seql=aCk=2046和确认序号ackl=Se叶100=2013 0此题可参考例5-2的总结","type":"choice","options":{"A":"2046、2012","C":"2047、2012","B":"2046、2013","D":"2047、2013"},"answer":"B"},{"id":"learncoder_117_25056","stem":"(2015年统考真题)主机甲和主机乙新建一个TCP连接,甲的拥塞控制初始阈值为32KB,甲向乙始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙为该连接分配16KB 接收缓存,并对每个数据段进行确认,忽略段传输延迟。若乙收到的数据全部存入缓存,不 被取走,则甲从连接建立成功时刻起,未发送超时的情况下,经过4个RTT后,甲的发送窗 口是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"发送窗口的上限值≒M叫二接收窗口,拥塞窗口]0 4个RTT后,乙收到的数据全部存入缓存,不被取走,接收窗口只剩下1KB (16-1-2-4-8=1)缓存,使得甲的发送窗口为1KB","type":"choice","options":{"B":"8KB","D":"32KB","A":"1KB","C":"16KB"},"answer":"A"},{"id":"learncoder_117_25054","stem":"(2014年统考真题)主机甲和主机乙已建立了 TCP连接,甲始终以MSS=1KB大小 的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为10KB的 确认段。若甲在t时刻发生超时时拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"当t时刻发生超时时,把ss血resh设为8的一半,即为4,且拥塞窗口设为1KBo然后经历10个RTT后,拥塞窗口的大小依次为2、 4、J、 6、 7、 8、 9、 10、 11、 12,而发送窗口取当时的拥塞窗口和接收窗口的最小值,而接收窗口始终为10KB,所以此时的发送窗口为10KB,选A","type":"choice","options":{"A":"10KB","B":"12KB","C":"14KB","D":"15KB"},"answer":"A"},{"id":"learncoder_117_25057","stem":"(2017年统考真题)若甲向乙发起一个TCP连接,最大段长MSS=1KB, RTT=5ms,乙开辟的接收缓存为64KB,则甲从连接建立成功至发送窗口达到32KB,需经过的时间至少是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"按照慢开始算法,发送窗口≒Mh[接收窗口,拥塞窗口],初始的拥塞窗口 为最大报文段长度1KB,每经过一个RTT,拥塞窗口翻倍,因此需至少经过5个RTT,发送 窗口才能达到32KB,故选Ao这里假定乙能及时处理接收到的数据,空闲的接收缓存≧32KB","type":"choice","options":{"B":"30ms","C":"160ms","D":"165ms","A":"25ms"},"answer":"A"},{"id":"learncoder_117_25060","stem":"如果TCP往返时延RTT的当前值是30ms,随后收到的3组确认按到达顺序分别是 在数据发送后26ms、32ms和24ms到达发送方,那么新的RTT估计值分别是多少?假定加 权因子a=0.9","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"往返时延是指数据从发出到收到对方相应的确认所经历的时闸。它是用来设 置计时器的重传时间的一个主要参考数据。由于对于传输层来说,报文段的往返时延的方差 较大,所以TCP采用了一种自适应的算法将各个报文段的往返时延样本加权平均,得到报文 段的平均往返时延(RTT),计算公式如下:RTT=(1一∞×(旧的RTT)+α×(新的往返时延样本)1)第1个确认到达后,旧的RTT=30ms,新的往返时延样本≒26mso新的平均往返时延RTT=0.9×26ms+(1-0.9)×30ms=26.4ms o2)第2个确认到达后,旧的RTT≒26.4ms,新的往返时延样本=32mso新的平均往返时延RTT=0.9×32ms+(1-0.9)×26.4ms=3 1.44ms o3)第3个确认到达后,旧的RTT三31.44ms,新的往返时延样本=24mso新的平均往返时延RTT=0.9×24ms+(1-0.9)×3 1.44ms=24.7ms o所以,新的RTT估计值分别为26.4ms、 31.44ms、 24.7mso 提示:有些辅导书或者教材使用以下公式:RTT=(1一∞×(新的RTT)+α×(旧的往返时延样本)` 当然,以上公式没有错误,只是形式上的一些变化,一般在考研中会说明使用哪个公式,如果没说明,则默认使用RTT=(1一∞×(旧的RTT)+α×(新的往返时延样本)0 41.解析:发送方mp对应用程序交下来的报文,在添加首部后就向下交付皿层o mp对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。接收方mp 对皿层交上来的mp用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次 交付一个完整的报文,所以说UDP是面向报文的。而发送方TCP对应用程序交下来的报文 数据块,视为无结构的字节流(无边界约柬),但维持各字节,所以说TCP是面向字节流的042.解析:根据题意,往返时延RTT=10msx2≒20ms,发送一个窗口的发送时延是65535×8bi″1Gbids=0.52428ms,那么最后1bit到达对方主机的时间为10.52428mso题目已经说明确认帧的长度忽略不计,所以发送一个窗口的完整时间为20.52428mso每秒可发送48.7227个窗口(1000ms÷20.52428ms=48.7227)。而吞吐量的定义就是每秒能发送的数据,即65535×8×48.7227bi″s≒25.54Mbiife,线路效率即25.54Mbids÷1000MbiVs革2.55%。所以,最大吞吐量是25.54Mbi″s,线路效率约为2.55%"},{"id":"learncoder_117_25055","stem":"(2014年统考真题)下列关于UDP协议的叙述中,正确的是(\t)。I.提供无连接服务\t II.提供复用/分用服务III・通过差错校验,保障可靠数据传输","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"UDP提供的是无连接的服务, I正确;同时UDP也提供复用/分用服务, II正确; UDP虽然有差错校验机制,但是UDP的差错校验只是检查数据在传输的过程中有 没有出错,出错的数据直接丢弃,并没有重传等机制,不能保证可靠传输,使用UDP协议时, 可靠传输必须由应用层实现, Ⅲ错误。答案选B","type":"choice","options":{"C":"仅II、III","B":"仅 I、II","A":"仅 I","D":"I、II、III"},"answer":"B"},{"id":"learncoder_117_25051","stem":"TCP的通信双方,有一方发送了带有FIN标志位的数据段后表示(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"F皿寸标志位用来释放一个连 接,它表示本方已经没有数据要传输了。然而, 在关闭一个连接之后,对方还可以继续发送数 据,所以还有可能接收到数据","type":"choice","options":{"A":"将断开通信双方的TCP连接","C":"终止数据发送,双方都不能发送数据","D":"连接被重新建立","B":"单方面释放连接,表示本方已经无数据发送,但是可以接收对方的数据"},"answer":"B"},{"id":"learncoder_117_25048","stem":"假设拥塞窗口为20KB,接收窗口为30KB, TCP能够发送的最大字节数是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"TCP既有流量控制也有拥塞控制,在TCP发送数据的时候要考虑拥塞窗 口也需要考虑接收窗口。在题月中拥塞窗口比较小,所以TCP发送的最大字节数要受到拥塞窗口的限制,大小为20Kb","type":"choice","options":{"A":"30KB","C":"50KB","D":"10KB","B":"20KB"},"answer":"B"},{"id":"learncoder_117_25046","stem":"UDP数据报比IP数据报多提供了(\t)服务。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"虽然mp和皿都是数据报协议,但是它们之间还是存在差别的。其中, 最大的差别是皿数据报只能找到目的主机而无法找到目的进程,mP提供端口功能以及复用 和分用功能,可以将数据报投递给对应的进程","type":"choice","options":{"D":"路由转","C":"端口功能","B":"拥塞控制","A":"流量控制"},"answer":"C"},{"id":"learncoder_117_25049","stem":"某TCP分组的选项字段长度为9场 则该TCP分组的数据偏移字段内容为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"TCP分组报头由定长20B与不定长的选项字段和填充字段构成o TCP分 组的数据偏移字段表示TCP数据的开始位置,也即TCP报头的实际长度。这里需要提醒一 个重要考点: TCP报文的首部长度必须是4B的整数倍,由于这里报头的定长20B+不定长的 选项字段9B≒29B,并不是4B的整数倍,所以需要填充3Bo也就是说,此TCP报文首部的 长度为32B,而数据偏移字段是以4B为基本单位的,所以数据偏移字段为32竹=8,二进制表示为10000","type":"choice","options":{"B":"0111","C":"1111","D":"0011","A":"1000"},"answer":"A"},{"id":"learncoder_117_25052","stem":"有一个TCP连接,当其拥塞窗口为32个分组大小时超时。假设网络的RTT是固定 的5s,不考虑比特开销,即分组不丢失,则系统在超时后处于慢启动阶段的时间有( )","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"当超时时,其阑值为32/2=160 按照慢开始算法,发送窗口的初始值设置为1,然后依次增大为2、 4、 8、 16,需要经过4次RTT 的时间达到闽值16,也即慢启动阶段结束,所以 系统在超时后处于慢启动阶段的时间有4RTT的时间,即20s","type":"choice","options":{"C":"30s","D":"40s","A":"10s","B":"20s"},"answer":"B"},{"id":"learncoder_117_25047","stem":"下列网络应用中, ( )不适合使用UDP","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"UDP的特点是开销小,时间性能好并且容易实现。在客户/服务器模型中, 它们之间的请求都很短,使用mp不仅编码简单,而且只需要很少的消息;远程调用使用 mp的理由和客户/服务器模型一样;对于实时多媒体应用来说,需要保证数据及时传送,而 比例不大的错误是可以容忍的,所以使用mp也是合适的,而且使用mP可以实现多播传 输模式,来给多个客户端服务;而远程登录需要依靠一个客户端到服务器的可靠连接,使用 UDP是不合适的","type":"choice","options":{"C":"实时多媒体应用","D":"远程登录","B":"远程调用","A":"客户/服务器领域"},"answer":"D"},{"id":"learncoder_117_25050","stem":"TCP使用“三次握手”协议来建立连接,握手的第一个报文段中被置为1的标志位是()。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"TCP有6个标志位,它们的含义见表5-50<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第5章)/image5.png'/>","type":"choice","options":{"D":"URG","A":"SYN","B":"ACK","C":"FIN"},"answer":"A"},{"id":"learncoder_117_25045","stem":"一个UDP用户数据报的数据字段为8192B?在链路层要使用以太网来传输,那么应 该分成()IP数据片。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"以太网的帧的最大数据负载是1500B,皿首部长度为20B,所以每个分 片的数据字段长度为1480B,因此需要6个分片来传输该数据报","type":"choice","options":{"D":"6个","C":"5个","B":"4个","A":"3个"},"answer":"D"},{"id":"learncoder_117_25041","stem":"假设某时刻接收端收到有差错的UDP用户数据报,其动作为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"由于UDP采用的是无连接不可靠的方式,一旦错误的UDP数据到了接 收端,一律丢弃不管","type":"choice","options":{"A":"将其丢弃","B":"请求重传","C":"纠错","D":"忽略差错"},"answer":"A"},{"id":"learncoder_117_25044","stem":"下列关于传输层协议中面向连接的描述,(\t)是错误的。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"由于面向连接的服务需要建立连接,并且需要保证数据的有序性和正确 性,导致了它比无连接的服务开销大,而速度和效率方面也比无连接的服务差一点","type":"choice","options":{"D":"面向连接的服务提供了一个可靠的数据流","A":"面向连接的服务需要经历3个阶段:连接建立、,数据传输以及连接释放","B":"面向连接的服务可以保证数据到达的顺序是正确的","C":"面向连接的服务有很高的效率和时间性能"},"answer":"C"},{"id":"learncoder_117_25042","stem":"TCP中滑动窗口的值设置太大,对主机的影响是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"前面讲过TCP使用滑动窗口机制来进行流量控制,其窗口尺寸的设置很 重要,如果滑动窗口的值设置太小,会产生过多的ACR (因为窗口大可以累积确认,这样就 会有更少的ACR);如果设置太大,又会由于传送的数据过多而使路由器变得拥挤,导致主 机可能丢失分组","type":"choice","options":{"A":"由于传送的数据过多而使路由器变得拥挤,主机可能丢失分组","D":"由于接收的数据多,而使主机的工作速度变慢","C":"由于接收的数据多,而使主机的工作速度加快","B":"产生过多的ACK"},"answer":"A"},{"id":"learncoder_117_25043","stem":"传输层中的套接字是()","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"","type":"choice","options":{"D":"使得远端过程的功能就像在本地一样","C":"允许多个应用共享网络连接的API","B":"使得传输层独立的API","A":"IP地址加端口"},"answer":"A"},{"id":"learncoder_117_25040","stem":"假设TCP的拥塞窗口的慢启动门限值初始为8(单位为报文段),当拥塞窗口上升到 12时,网络发生超时,TCP开始慢启动和拥塞避免,那么第12次传输时拥塞窗口大小为 ( )。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"首先,拥塞窗口的初始值为1,此时窗口大小开始按指数增长。当拥塞窗 口大于慢启动门限后,停止使用慢启动算法,改用拥塞避免算法。当发生超时时,重新设置 门限值为拥塞窗口的一半,然后拥塞窗口再重新设为10所以,拥塞窗口的变化序列为1, 2,4, 8, 9, 10, Ⅱ, 12, 1, 2, 4, 6, 8,所以第12次传输时拥塞窗口大小为60不少同学会 选择8,直接从4跳到8,请记住这个误区","type":"choice","options":{"D":"8","B":"6","A":"4","C":"7"},"answer":"B"},{"id":"learncoder_117_25038","stem":"UDP报文头部不包括( )","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"与TCP一样,目的地址是在检验的时候加上去的伪首部,所以不在UDP 报文的首部0","type":"choice","options":{"C":"目的UDP端口","D":"报文长度","A":"目的地址","B":"源UDP端口"},"answer":"A"},{"id":"learncoder_117_25039","stem":"A和B之间建立了 TCP连接,A向B发送了一个报文段,其中序号字段seq=300,确认号字段ACK=101,数据部分包含7个字节,那么在B对该报文的确认报文段中(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"首先, B发送给A的报文中, Seq的值应和A发送给B的报文中的ACK 值相同,即101;而ACK的值表示B期望下次收到A发出的报文段的第一个字节的编号,应是300+7=3070","type":"choice","options":{"D":"seq=101, ACK=307","B":"seq=301, ACK=108","C":"seq=101, ACK=101","A":"seq=301, ACK=101"},"answer":"D"},{"id":"learncoder_117_25037","stem":"数据段的TCP报头中为什么包含端口号(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"TCP采用端口号是为了区分不同的应用进程0","type":"choice","options":{"B":"标识接收或转发数据段时应使用的交换机端口","C":"让接收主机以正确的顺序组装数据报","A":"指示转发数据段时应使用正确的路由器接口","D":"让接收主机转发数据到适当的应用程序"},"answer":"D"},{"id":"learncoder_117_25035","stem":"下列有关面向连接和无连接的数据传输的速度的描述,正确的说法是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"面向连接由于建立了一个虚链路,所以每个数据分组可以省略信源地址, 减小了数据冗余,这是速度增加的因素。另外,建立虚链路也要花费一定的时间,这是速度 降低的因素。因此,很难说二者速度谁快,但是可以肯定的是大量数据传输时面向连接的方式有利","type":"choice","options":{"A":"面向连接的网络数据传输得快","D":"不可判定'","B":"面向无连接的数据传输得慢","C":"二者速度一样"},"answer":"D"},{"id":"learncoder_117_25036","stem":"在一个网络中,最大TPDU尺寸为256B,最大的TPDU存活时间为20s,使用8位 序列号,则每条连接的最大数据•传输速率是( )","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"当序列号循环使用时,具有相同序列号的TPDU应该从网络中已经消失。 既然是使用8位序列号,也就是序列号可以从0-2550现在存活时间是20s,也就是在20s 的时间内发送方发送的TPDU的数目不能多于255个。所以,可求得每条连接的最大数据率是255×256×8亿Obi″s=261 12bi√s ","type":"choice","options":{"B":"26112biVs","C":"36112bit/s","D":"46112bit/s","A":"16112bit/s"},"answer":"B"},{"id":"learncoder_117_25032","stem":"下列关于TCP的叙述中,正确的是(\t)。I.TCP是一个点到点的通信协议II.TCP提供了无连接的可靠数据传输HI. TCP将来自上层的字节流组织成IP数据报,然后交给IPIV.TCP将收到的报文段组成字节流交给上层","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"TCP在网络层皿的基础上,向应用层提供可靠、全双工的端到端的数据 流传输,所以TCP是二个端到端的通信协议,而皿才是点到点的通信协议,因此I 、 II错 误o TcP通过可靠的传输连接将收到的报文段组织成字节流,然后交给上层的应用进程,这 就为应用进程提供了有序、无差错、不重复和无报文丢失的流传输服务, Ⅳ正确。皿数据报 不是由传输层组成的,而应该由网络层加上Ⅲ数据报的首部来形成皿数据报, Ⅲ错误","type":"choice","options":{"C":"仅IV","A":"I、 II、 IV","B":"I、DI","D":"III、IV"},"answer":"C"},{"id":"learncoder_117_25030","stem":"假设在没有发生拥塞的情况下,在一条往返时间RTT为10ms的线路上采用慢开始控制策略。如果接收窗口的大小为24KB,最大报文段长度MSS为2KB,那么需要(\t)发送方才能发送出一个完全窗口。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"慢开始算法是TCP用于拥塞控制的算法,考虑了两个潜在的问题,即网 络容量与接收端容量。为此, TCP要求每个发送端维护两个窗口,即接收端窗口和拥塞窗口, 两个窗口的较小值就为发送窗口。所谓“慢开始”就是由小到大逐渐增大发送端的拥塞窗口 数值。慢开始算法的基本原理:在连接建立时,将拥塞窗口的大小初始化为一个MSS的大小, 此后拥塞窗口每经过一个RT土就按指数规律增长一次,直到出现报文段传输超时或达到所设定的慢开始门限值sthresho","type":"choice","options":{"A":"30ms","B":"40ms","D":"60ms","C":"50ms"},"answer":"B"},{"id":"learncoder_117_25033","stem":"一个TCP连接的数据传输阶段,如果发送端的发送窗口值由2000变为3000,意味 云訂着发送端可以()","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"TCP提供的是可靠的传输服务,使用滑动窗口机制进行流量控制。应当 注意的是, TcP通过滑动窗口实现了以字节为单位的确认,因此窗口大小的单位为字节。假 设发送窗口的大小为N,这意味着发送端可以在没有收到确认的情况下连续发送N个字节。","type":"choice","options":{"A":"在收到一个确认之前可以发送3000个TCP报文段","C":"在收到一个确认之前可以发送3000B","D":"在收到一个确认之前可以发送2000个TCP报文段","B":"在收到一个确认之前可以发送1000B"},"answer":"C"},{"id":"learncoder_117_25031","stem":"可靠的传输协议中的“可靠”指的是( )o","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"如果一个协议使用确认机制对传输的数据进行确认,那么可以认为是一 个可靠的协议。如果一个协议采用“尽力而为”的传输方式,那么是不可靠的。例如, TCP 对传输的报文段提供确认,因此是可靠的传输协议;而mP不提供确认,因此是不可靠的传输协议","type":"choice","options":{"D":"使用确认机制来确保传输的数据不丢失","A":"使用面向连接的会话","C":"使用滑动窗口来维持可靠性","B":"使用“尽力而为”的传输"},"answer":"D"},{"id":"learncoder_117_25034","stem":"下列关于因特网中的主机和路由器的说法,错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"路由器工作在网络层, TCP的报文段只是封装在网络层的皿数据报中, 对路由器是不可见的,所以它不需要实现TcPo","type":"choice","options":{"D":"路由器必须实现IP","C":"主机通常需要实现TCP","A":"主机通常需要实现IP","B":"路由器必须实现TCP"},"answer":"B"},{"id":"learncoder_117_25022","stem":"在TCP/IP模型中,传输层的主要作用是在互联网络的源主机和目的主机对等实体之间建立用于会话的(\t)","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"TCP/皿模型中,网络层及其以下各层所构成的通信子网负责主机到主 机或点到点的通信,而传输层的主要作用是实现分布式的进程通信,即在源主机进程与目的 主机进程之间提供端到端的数据传输。一般来说,端到端信道是由一段段的点到点信道构成 的,端到端协议建立在点到点协议之上,提供应用进程之间的通信手段。相应地,在网络层 标识主机的是皿地址,而在传输层标识进程的是端口号","type":"choice","options":{"B":"操作连接","A":"点到点连接","C":"端到端连接","D":"控制连接"},"answer":"C"},{"id":"learncoder_117_25025","stem":"如果用户程序使用UDP进行数据传输,那么( 部工作。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"输层协议需要具有的主要功能包括创建进程到进程的通信,提供流量控制机制o mp在一个低的水平上完成以上的功能,使用端口号完成进程到进程的通信,但在 收到用户数据报时没有流量控制机制,也没有确认,而且只是提供有限的差错控制。因此, mp是一个无连接、不可靠的传输层协议。如果用户应用程序使用mp进行数据传输,必 须在传输层的上层(应用层)提供可靠性方面的全部工作。","type":"choice","options":{"C":"传输层","B":"网络层","D":"应用层","A":"数据链路层"},"answer":"D"},{"id":"learncoder_117_25028","stem":"传输层为(\t)之间提供逻辑通信。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"choice","options":{"B":"进程","D":"操作系统","A":"主机","C":"路由器"},"answer":"B"},{"id":"learncoder_117_25023","stem":"在TCP/IP网络中,为各种公共服务保留的端口号范围是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"保留端口(ReservedPoIf)也称为熟知端口(Well ̄KnownPort),以全局方 式分配,只占全部端口数目很小的部分,为各种公共服务保留o TCP和mp均规定小于1024 的端口号才能作为保留端口。","type":"choice","options":{"C":"1 〜1024","B":"0〜1023","D":"1 〜65 535","A":"1〜255"},"answer":"B"},{"id":"learncoder_117_25026","stem":"有一条TCP连接,它的最大报文段长度为2KB, TCP拥塞窗口为24KB,这时候发 生了超时事件,那么该拥塞窗口变成了( )。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"在TCP报文中,当发生超时事件时,阂值被设置成当前拥塞窗口的一半, 而拥塞窗口被设为一个最大报文段","type":"choice","options":{"D":"7KB","C":"5KB","A":"1KB","B":"2KB"},"answer":"B"},{"id":"learncoder_117_25029","stem":"(\t)是TCP/IP模型传输层中的无连接协议。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"","type":"choice","options":{"B":"IP","D":"ICMP","A":"TCP","C":"UDP"},"answer":"C"},{"id":"learncoder_117_25027","stem":"OSI7层模型中,提供端到端的透明数据传输服务、差错控制和流量控制的层是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"choice","options":{"A":"物理层","B":"网络层","D":"会话层","C":"传输层"},"answer":"C"},{"id":"learncoder_117_25024","stem":"假设某应用程序每秒产生一个60B的数据块,每个数据块被封装在一个TCP报文中,然后再封装到一个IP数据报中,那么最后每个数据报所含有的应用数据所占的百分比是 ()(注意:TCP报文和IP数据报的首部没有附加字段)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"前面已经讲过在实际计算中TCP报文和皿数据报首部都是以20B计算(有 附加字段题目会说明),而不是以60B计算。在此题中,一个TCP报文的首部长度是20B, 一个皿数据报首部的长度也是20B,再加上60B的数据,一个皿数据报的总长度为100B, 可以知道数据占60%","type":"choice","options":{"B":"40%","D":"80%","A":"20%","C":"60%"},"answer":"C"},{"id":"learncoder_117_25020","stem":"在TCP中,采用(\t)来区分不同的应用进程。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":" 空","type":"choice","options":{"C":"协议类型","B":"IP地址","D":"MAC地址","A":"端口号"},"answer":"A"},{"id":"learncoder_117_25021","stem":"下面信息中(\t)包含在TCP首部中而不包含在UDP首部中。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"显然TCP数据报和UDP数据报都包含目标端口号、源端口号、校验号。 但是,由于UDP是不可靠的传输,帧不需要编号,所以不会有序号这一字段,而TCP是可 靠的传输,需要设置序号这一字段","type":"choice","options":{"D":"校验号","B":"序号","A":"目标端口号","C":"源端口号"},"answer":"B"},{"id":"learncoder_117_22631","stem":"—个TCP连接下面使用256 kbps的链路,其端对端的时延为128 mso经测试,发现吞吐 量只有120 kbpso请问发送窗口是多少?","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":""},{"id":"learncoder_117_22624","stem":"TCP协议中,发送双方发送报文的初始序号分别为X和Y,发送方发送给接收方报文中,正确的字段是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是TCP连接管理知识点。TCP连接建立采用三次握手,第一次握手发 送方发给接收方的报文中应设定SYN = 1,序号=X,表明传输数据的第一个数据字节的序号是 X,因此答案A正确。","type":"choice","options":{"A":"SYN = 1,序号=X","D":"SYN = 1,序号=Y,ACKy+i = 1","B":"SYN=1,序号= X+l,ACKx = l","C":"SYN = 1,序号=Y"},"answer":"A"},{"id":"learncoder_117_22630","stem":"设想从主机A到主机B发送一个长度为厶字节的大文件,假设最大报文段长度为1 460字节。\t'(1)\t使得TCP顺序号不被耗尽的L的最大值是多少?(2)\t对于(1)中的L找出要传送这个文件需要花费的时间长度。假设最后的分组在通过 10 Mbps的链路发送出去之前,每个数据段都被加入总共66字节的传输、网络和竅据链路的 首部。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"short_answer","answer":"20. 【考点】无"},{"id":"learncoder_117_22627","stem":" —个TCP连接总是以1 KB的最大段长度发送TCF段,发送方有足够多的数据要发送。 当拥塞窗口为16 KB是发生了超时,如果接下来的4个RTT时间内的TCP段的传输都成功,那 么当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是( )。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是TCP拥塞控制知识点。根据慢开始算法的原则,当第4个RTT时间 后,拥塞窗口为16 KB,此时发生拥塞,拥塞窗口大小变为1 KB,慢开始门限值ssthresh变为 8 KBO接下来3个RTT后,拥塞窗口大小变为8 KB,此时进入拥塞避免算法,当第4个RTT后, 拥塞窗口加1,拥塞窗口大小变为9KB。因此答案C正确。填空题","type":"choice","options":{"B":"8 KB","C":"9 KB","A":"7 KB","D":"16 KB"},"answer":"C"},{"id":"learncoder_117_22626","stem":"主机甲和主机乙之间已经建立了一个TCP连接,TCP最大段的长度为1 000字节,若主机甲当前的拥塞窗口为、4000字节,在主机甲向主机乙连续发送2个最大段后,成功收到主机乙 发送的第一段的确认段,确认段中通告的接收窗口大小为2 000字节,则此时主机甲还可以向主 机乙发送的最大字节数是( )。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"空","type":"choice","options":{"A":"1 000","B":"2 000","C":"3 000","D":"4000"},"answer":"A"},{"id":"learncoder_117_22625","stem":"下列协议中只以TCP作为传输层协议的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是TCP协议知识点。使用TCP作为传输层协议的主要应用层协议有: SMTP、POP3、TELNET、HTTP 和 FTP 等,因此答案 B 正确。","type":"choice","options":{"D":"DNS","C":"TFTP","B":"POP3","A":"SNMP"},"answer":"B"},{"id":"learncoder_117_22621","stem":"TCP协议传输数据的单位是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是TCP段知识点。TCP协议传输是面向字节流的,而不是以报文段来 计数,因此正确答案为C。","type":"choice","options":{"D":"比特流","B":"报文段","C":"字节流","A":"IP数据报"},"answer":"C"},{"id":"learncoder_117_22620","stem":"建立TCP连接时,需要通信双方之间交换(\t)个数据段。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是TCP连接管理知识点。建立TCP连接需要通信双方进行三次握手, 即交换三个报文段,答案C正确。","type":"choice","options":{"B":"2","A":"1","C":"3","D":"4"},"answer":"C"},{"id":"learncoder_117_22623","stem":"TCP协议为了解决端对端的流量控制,引入了(\t)来解决。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是TCP流量控制与拥塞控制知识点。滑动窗口协议是用来解决流量控 制的,因此答案B正确。","type":"choice","options":{"C":"超时重传","D":"重复确认","A":"差错控制","B":"滑动窗口协"},"answer":"B"},{"id":"learncoder_117_22622","stem":"如果TCP报文段中(\t)字段为1,则说明此报文段有紧急.数据,需要尽快被传送。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是TCP段知识点。URG为TCP段中的紧急标识字段,表明紧急字段指 针有效,告诉系统此报文段有紧急数据发送,因此正确答案为D。","type":"choice","options":{"D":"URG","A":"ACK","B":"RST","C":"FIN"},"answer":"D"},{"id":"learncoder_117_22618","stem":"下列协议中使用UDP作为传输层协议的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是UDP数据报知识点。使用UDF作为传输层协议的主要应用层协议 有:dns、tftp、rip、dhcp、snMp,答案 D 正确。","type":"choice","options":{"B":"TELNET","C":"FTP","D":"SNMP","A":"SMTP"},"answer":"D"},{"id":"learncoder_117_22617","stem":"下列选项中,(\t)是用于计算UDP检验和字段值的,不属于UDP数据报的内容。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是UDP数据报知识点。计算UDP检验和字段值要用到UDP伪首部、 UDP首部和UDP数据部分。其中UDP伪首部是临时生成的,不属于UDP数据报中的内容,因 此答案A正确。\t","type":"choice","options":{"C":"UDP长度字段","A":"UDP伪首部","B":"UDP数据部分","D":"UDP源端口号"},"answer":"A"},{"id":"learncoder_117_22619","stem":"UDP数据报的最短长度是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是UDP数据报知识点。最短的UDP数据报只包含包头,不携带任何数 据,UDP报头的固定长度为8B,因此答案C正确。","type":"choice","options":{"C":"8B","A":"2B","D":"16B","B":"6B"},"answer":"C"},{"id":"learncoder_117_22615","stem":"面向连接的服务特性是()。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是无连接服务与面向连接服务知识点。面向连接服务要事先在通信 双方之间建立一个完整的可以彼此沟通的通道,即连接,通信过程中整个连接的情况可以被 实时地监控和管理,通信结束后释放连接,可以保证数据可靠地并且按顺序地提交,因此答案 D正确。","type":"choice","options":{"B":"不保证可靠但保证顺序","C":"保证可靠,但不保证顺序","D":"保证可靠和顺序","A":"不保证可靠和顺序"},"answer":"D"},{"id":"learncoder_117_22614","stem":"传输层中,\"熟知端口号\"的范围是()。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是传输层寻址与端口知识点。“熟知端口号”的范围为0 ~1023,因此答 案D正确。","type":"choice","options":{"C":"0-511","B":"0-255","D":"0-1023","A":"0-127"},"answer":"D"},{"id":"learncoder_117_22616","stem":"对于无连接服务,说法错误的是()。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是无连接服务与面向连接服务知识点。无连接服务和面向连接的服 务分别适用于不同场合,无连接服务经常因其实时性和效率更好而得到采用,因此答案C 正确。\t","type":"choice","options":{"C":"由于会出现传输错误,因此几乎不被采用","B":"相比面向连接的服务,效率和实时性更好","A":"信息的传递在网上是尽力而为的方式","D":"常用在通信子网可靠的环境中,开销小、效率高"},"answer":"C"},{"id":"learncoder_117_22613","stem":"传输层通过()来标识不同的应用进程。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是传输层寻址与端口知识点。传输层使用端口号来标识应用进程,因此 答案B正确。","type":"choice","options":{"B":"端口号","D":"逻辑地址","A":"物理地址","C":"IP地址"},"answer":"B"},{"id":"learncoder_117_22612","stem":"传输层通信中,关于端口正确的理解是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是传输层寻址与端口知识点。端口可以让应用程序将其数据通过端口 向下交付给传输层,即为传输层的服务访问点,因此正确答案为B","type":"choice","options":{"A":"网卡接口","D":"路由器端口","C":"应用程序接口","B":"传输层的服务访问点"},"answer":"B"},{"id":"learncoder_117_22611","stem":"传输层的作用是向源主机和目的主机之间提供“端对端”的逻辑通信,其中“端对端”的 含义是( )。","key_points":"知识点.练习.专业课练习.计算机网络.运输层","analysis":"此题考查的是传输层功能知识点。传输层的作用是提供源主机到目的主机进程之 间的逻辑通信,称为“端对端”,因此正确答案为C","type":"choice","options":{"A":"源主机网卡到目的主机网卡之间","C":"源主机和目的主机的进程之间","B":"操作源主机的用户和目的主机的用户之间","D":"源主机所在网络和目的主机所在网络之间"},"answer":"C"},{"id":"learncoder_118_25018","stem":"\t试计算在如下条件下,使用非持续方式和持续方式请求一个Web页面所需要的时间。 条件一:测试的RTT平均值为150ms, 一个gif对象的平均发送时延为35ms。条件二一个Web页面中有10个gif图片,Web页面的基本HTML文件、HTTP请求报 文、TCP握手报文大小忽略不计。条件三:TCP三次握手的第三步中捎带一个HTTP请求。条件四:使用非流水线方式。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"short_answer","answer":"1)非持续连接模式首先,因为Wch页面的基本HTML文件、 HTTP请求报文、 TCP握手报文大小忽略不计,所以就无需计算其发送时延o TCP前两次握手消耗一个RTT=150ms,接着第三次握手的时候 捎带一个HTTP请求,消耗RTT亿,传送HTML文件消耗RTT亿,所以第一次建立TCP连接并传送HTML文件所需的时间为150ms+150ms=300mso而后面传送10个gif图片时,需要再建立10次TCP连接。传送1个gif图片需要的时间为(150+150+35)ms=335ms,所以传送10个gif图片需要的时间为3350mso故所需的总时间为300ms+3350ms=3650mso 2)持续连接模式 在持续连接模式下,不管传输多少数据,只需建立一次TCP连接。所以所需的总时间为150ms+1 50ms+(1 50ms+35ms)×1 0≒2 1 50ms ."},{"id":"learncoder_118_25016","stem":"假定你在浏览器上单击一个URL,但这个URL的IP地址以前并没有缓存在本地主 机上,因此需要用DNS自动查找和解析。假定要解析到所要找的URL的IP地址共经过n个DNS服务器,所经过的时间分别是RTTi,RTT2,…,RTTn。假定从要找的网页上只需要读 取一个很小的图片(即忽略这个小图片的传输时间),从本地主机到这个网页的往返时间是 RTTw。试问从单击这个URL开始,一直到本地主机的屏幕上出现所读取的小图片,一共需 要经过多少时间?","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"short_answer","answer":"<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第6章)/image6.png'/>"},{"id":"learncoder_118_25017","stem":"\t在上题中,假定返回的HTML文件中又链接了3个非常小的对象。若忽略这些对象 的发送时间,试计算客户单击读取这些对象所需的时间。1)没有并行TCP连接的非持续HTTPo2)\t使用并行TCP连接的非持续HTTP。3)\t流水线方式的持续HTTP。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"short_answer","answer":"首先,需要明确的是不能将这4个对 象看成是一个层次的,应该是一个树的结构,树高为2,如图6-22所示0 1)对于没有并行TCP连接的非持续 HTTP,每访问一个URL对象就要建立一 个TCP连接,然后请求万维网文档。所以, 图6 ̄22 4个对象的树结构4个对象耗时8RTTw,故所需时间≒RTTl+RTT2+⋯. + RTTn十8RTTwo2)对于使用并行TCP连接的非持续HTTP,对一级建立一个TCP,耗时1RTTw,向二 级并发建立TCP,耗时1RTTw,再向每一级请求www文档,共耗时4RTTw,故所需时间≒RTTl+RTT2+ ⋯ +RTTal-4RTTw o 3)对于使用流水线方式的持续HTTP,计算机只需建立一个对像流水线的连接,耗时 1RTTw,并保持,向一级对象请求万维网文档耗时1RTTw,向二级对象请求万维网文档耗时1RTTw,共耗时3RTTw,故所需时间≒RTTl+RTT2+... +RTTn+3RTTw.<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第6章)/image7.png'/>"},{"id":"learncoder_118_25015","stem":"\t试将数据 01001100 10011101 00111001 W quoted-printable 编码,并得出最后传送的ASCH数据。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"short_answer","answer":"首先01001100和00111∞1是可打印的ASCⅡ编码。将10011101用两个十六进制数字表示成9D,在前面加上等号得到〃=9D~。字符串″=9D#的ASCⅡ编码是0011110100111001 010001000 因此,最后传送的ASCⅡ数据是01001100 00111101 00111001 0100010000111001 0对于字节10011101做quoted-printatable编码的开销为(5-3)/3fS66.7%"},{"id":"learncoder_118_25006","stem":"(2017年统考真题)下列关于FTP协议的叙述中,错误的是( )","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"FTP协议使用控制连接和数据连接,控制连接存在于整个FTP会话过程 中,数据连接在每次文件传输时才建立,传输结柬就关闭, A对, B对。默认情况下FTP协 议使用TCP20端口进行数据连接, TCP21端口进行控制连接。但是是否使用TCP20端口建 立数据连接与传输模式有关,主动方式使用TCP 20端口,被动方式由服务器和客户端自行协商决定, C错, D对。故选C","type":"choice","options":{"B":"控制连接在整个会话期间保持打开状态","D":"客户端与服务器的TCP 20端口建立控制连接","C":"服务器与客户端的TCP20端口建立数据连接","A":"数据连接在每次数据传输完毕后就关闭"},"answer":"C"},{"id":"learncoder_118_25009","stem":"为什么要引入域名的概念?举例说明域名转换的过程以及域名服务器中的高速缓存 的作用是什么?","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"short_answer","answer":"IP地址很难记忆,引入域名后,便于人们记忆和识别。域名解析可以把域名 转换成皿地址。域名转换的过程是向本地域名服务器申请解析,如果本地查不到,则向根域 名服务器进行查询。如果根域名服务器中也查不到,则根据根域名服务器中保存的相应授权域名服务器进行解析,一定可以找到。请看下面的例子即可理解。假定域名为m.nyz.com的主机想知道另一个域名为t.yalbc.com的主机的皿地址。首先向其本地域名服务器drsxyz.com 查询。当查询不到时,就向根域名服务器(ins.com查询。根据被查询的域名中的abc.com再向授权域名服务器drs.abc.com发送查询报文,最后再向授权域名服务器dns.yabc.com查询。得到结果后,按照查询的路径返回给本地域名服务器drs.xyz.como 域名服务器的高速缓存的作用是优化查询的开销,减少域名查询花费的时间"},{"id":"learncoder_118_25010","stem":"当用户在Web浏览器中输入域名\"www.csbIiji.com”访问该网站时,可能会依次发 送哪些报文?","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"short_answer","answer":"1) DNS请求报文:向指定的DNS域名服务器发送DNS请求报文,以解析域名WWW.csbiji.com对应的皿地址。2) TCP连接报文:根据皿地址,与wvowcsb驴.com服务器建立TCP连接0 3) ARP请求报文:根据默认网关的皿地址查询其MAC地址4) HTTP请求报文:向wwwcsb担COm网页服务器发送HTTP请求报文,以获取该网站 首页的内容5) ICMP:提供网络传输中的差错检测。6) LLC和MAC:提供数据链路层的组帧、透明传输等功能。"},{"id":"learncoder_118_25013","stem":"(2011年统考真题)某主机的MAC地址为00-15-C5-C1-5E-28, IP地址为10.2.128.100(私有地址)。图6-17是网络拓扑。图6-18是该主机进行Web请求的一个以太网数据帧前80B 的十六进制及ASCH码内容。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第6章)/image3.png'/>请参考图中的数据回答以下问题:1)\tWeb服务器的IP地址是什么?该主机的默认网关的MAC地址是什么?2)\t该主机在构造图6-18的数据帧时,使用什么协议确定目的MAC地址?封装该协议请 求报文的以太网帧的目的MAC地址是什么?3)\t假设HTTP/1.1协议以持续的非流水线方式工作,一次请求・响应时间为RTT, rfc.Html 页面引用了 5个JPEG小图像,则从发出图6-18中的Web请求开始到浏览器收到全部内容为 止,需要经过多少个RTT?4)\t该帧所封装的IP分组经过路由器R转发时,需修改IP分组首部中的哪些字段?注意:以太网数据帧结构和IP分组首部结构分别如图6J9和图6-20所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第6章)/image4.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"short_answer","answer":"解题之前首先说明,图6-18中每行前面的0000、 0010、 0020等都不属于以 太网帧的内容0 1)首先,皿分组是完整的作为MAC帧的数据部分,所以目的皿地址应该在MAC帧的数据里面,如图6-21所示。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第6章)/image5.png'/>其次,以太网帧首部有14B,皿数据报首部目的皿地址前有16Bo所以目的皿地址在以太网帧中的位置应该是第31、 32、 33、 34字节。查阅图6-18,找到这4个字节的内容,即40 aa 62 20 (十六进制),转换成十进制为64.170.98.96.320 从图6-19中可以知道,目的MAC地址就是前6个字节。查阅图6 ̄18,找到这6个字节的内容,即00-21-27-21-51-eeo 由于下一跳即为默认网关10.2.128.1,所以所求的目的MAC地址就是默认网关10.2.128.1端口的物理地址0 2)本小问考查ARPo ARP主要用来解决皿地址到MAC地址的映射问题。当源主机知 道目的主机的皿地址,而不知道目的主机的MAC地址时,主机的ARP进程就在本以太网上进行广播,此时以太网的目的MAC地址为全1,即f|扭扭ff扭ffo ' 3)由于采用的是非流水线方式进行工作,所以客户机在收到前一个请求的响应后才能发 送下一个请求。第一个请求用于请求w扣页面,后续5个皿EG小图像分别需要5次请求, 所以一共需要6次请求0 4)题目中已经说明皿地址10.2.128.100是私有地址,所以经过路由器转发源皿地址是 要发生改变的,即变成NAT路由器的一个全球皿地址(一个NAT路由器可能不止一个全球皿地址,随机选一个即可,而本题只有一个)。也就是将皿地址10.2.128.100改成101.12.123.150计算得出,源皿地址字段Oa O2 80 64 (在第一问的目的Ⅲ地址字段往前数4个字节即可)需要改为65 0c 7b ofo另外,皿分组每经过一个路由器,生存时间都需要减1,结合图6-18 和图6-20可以得到初始生存时间字段为80,经过路由器R之后变为册 当然还要重新计算首部校验和。最后,如果皿分组的长度超过该链路所要求的最大长度,则皿分组报就需要 分片,此时皿分组的总长度字段、标志字段、片偏移字段都是要发生改变的"},{"id":"learncoder_118_25008","stem":"为什么FTP要使用两个独立的连接,即控制连接和数据连接?","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"38.空","type":"short_answer","answer":"在F吧的实现中,客户与服务器之间采用了两条传输连接,其中控制连接用 于传输各种FTP命令,而数据连接用于文件的传送。之所以这样设计,是因为使用两条独立 的连接可以使FTP变得更加简单、更容易实现、更有效率;同时,在文件传输过程中,还可 以利用控制连接控制传输过程,如客户可以请求终止传输0"},{"id":"learncoder_118_25011","stem":"假定要从已知的URL获得一个万维网文档。若该万维网服务器的IP地址开始时并 不知道。试问:除HTTP外,还需要什么应用层协议和传输层协议?","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"short_answer","answer":"首先需要将域名转换成皿地址,所以应用层需要使用DNS协议。而DNS协议需要使用UDP, HTTP又需要使用TCP,所以传输层需要使用UDP和TCP"},{"id":"learncoder_118_25014","stem":"\t主机A想下载文件ftp://ftp.abc.edu.cn/file,大概描述下载过程中主机和服务器的交互过程。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"short_answer","answer":"大致过程如下。 1)建立一个TCP连接到ftyabc.educn的21号端口,然后发送登录账号和密码0 2)服务器返回登录成功信息后,主机A打开一个随机端口,并将该端口号发送给服务器03)主机A发送读取文件命令,内容为get皿e,服务器使用20号端口建立一个于CP连接 到主机A的随机打开的端口0 4)服务器把文件内容通过第二个连接发送给主机A,传输完毕连接关闭"},{"id":"learncoder_118_25012","stem":"为什么在服务器端除了使用熟知端口外,还需要使用临时端口?","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"short_answer","answer":"TCP/IP只能有一个熟知端口(这样才能使各地的客户机找到这个服务器), 但建立多条连接又必须有多个端口。因此,在按照并发方式工作的服务器中,主服务器进程 在熟知端口等待客户机发来的请求。主服务器进程一旦接收到客户机的请求,就立即创建一 个从属服务器进程,并指明从属服务器进程使用一个临时端口和该客户机建立TCP连接,然 后主服务器进程继续在原来的熟知端口等待,向其他客户机提供服务"},{"id":"learncoder_118_25005","stem":"(2016年统考真题)图6・16所示网络中,假设所有域名服务器均采用迭代查询方式 进行域名解析。当H4访问规范域名为www・ abc. xyz・ com的网站时,域名服务器201.1. 1.1 在完成该域名解析过程中,可能发出DNS查询的最少和最多次数分别是( )","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"最少情况下:当本机DNS高速缓存中存有该域名的DNS信息时,则不 需要查询任何域名服务器,这样最少发出0次DNS查询。 最多情况下:因为均采用迭代查询方式;在最坏的情况下,需要依次迭代地向本地域名服务器、根域名服务器(.com)、顶级域名服务器(xyz.com)、权限域名服务器(al)c.Xyz.com) 发出DNS查询请求,因此最多发出4次DNS查询","type":"choice","options":{"D":"1, 4","A":"0, 3","B":"1, 3","C":"0, 4"},"answer":"C"},{"id":"learncoder_118_25000","stem":"在WWW服务中,用户的信息查询可以从一台Web服务器自动搜索到另一台Web 服务器,这里所使用的技术是( ).","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"链接通过事先定义好的关键字或图形,允许用户只要单击该关键字或图 形,就可以自动跳转到对应的其他文件。通过这种方式,用户的信息查询可以从一台w曲服 务器自动搜索到另一台w曲服务器,实现不同网页间的跳转。","type":"choice","options":{"C":"Hypermedia","D":"Hyperlink","A":"HTML","B":"Hypertext"},"answer":"D"},{"id":"learncoder_118_25003","stem":"(2015年统考真题)某浏览器发出的HTTP请求报文如下:<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第6章)/image1.png'/>下列叙述中,错误的是( )","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"ormection:连接方式, αose表明为非持续连接方式, keap-alive表示持续连接方式cookie值是由服务器产生的, HTTP请求报文中有Cookie报头表示曾经访问过wwwtest.e(in.cn服务器","type":"choice","options":{"C":"该浏览器请求使用持续连接","A":"该浏览器请求浏览index.html","B":"In(iex.htnil存放在www.test.edu.cn上","D":"该浏览器曾经浏览过www.test.edu.cn"},"answer":"C"},{"id":"learncoder_118_25004","stem":"(2016年统考真题)图6-16所示网络中,假设连接Rl、R2和R3之间的点对点链路 使用201.1・3. x/30地址,当H3访问.Web服务器S时,R2转发出去的封装HTTP请求报文 的IP分组的源IP地址和目的IP地址分别是( )。<img src='https://seec.oss-cn-beijing.aliyuncs.com/题库/题目图片数据/computer_network_2020/2020计算机网络(第6章)/image2.png'/>","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"由题意知连接Rl、 R2和R3之间的点对点链路使用201.1.3.好30地址,其子网掩码为255.255.255.252, Rl的一个接口的皿地址为201.1.3.9,转换为对应的二进制的后8位为0000 1001 (由201.1.3.妇30知,皿地址对应的二进制的后两位为主机号,而主机 号全为0表示本网络本身,主机号全为1表示本网络的广播地址,不用于源皿地址或目的皿地址),那么除了201.1.3.9外,只有皿地址为201.1.3.10可以作为源皿地址使用(本题为20¨.3.10)o w扣服务器的皿地址为130.18.10.1,作为皿分组的目的Ⅲ地址。综上可知,D正确","type":"choice","options":{"C":"201.1. 3.8, 130.18.10.1","B":"192.168.3. 251, 201.1. 3.9","A":"192.168.3.251, 130.18.10.1","D":"201.1. 3.10, 130.18.10.1"},"answer":"D"},{"id":"learncoder_118_24998","stem":"电子邮件经过MIME扩展后,可以将非ASCII码内容表示成ASCII码内容,其中base64的编码方式是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"选项A是quoted-P血table编码方式,所以排除; base64编码方式不管是 否是ASCⅡ码字符,每3个字符用另外4个ASCⅡ码字符表示","type":"choice","options":{"C":"以64为基数,将所有非ASCH码字符用该字符的十六进制值加64后的字符表示","A":"ASCH码字符保持不变,非ASCE码字符用=赵 表示,其中XX是该字符的十六进 制值","D":"将每4个非ASCn码字符用6个ASCH码字符表示","B":"不管是否是ASCH码字符,每3个字符用另4个ASCH字符表示"},"answer":"B"},{"id":"learncoder_118_25001","stem":"(2013年统考真题)下列关于SMTP的叙述中,正确的是(\t)。I.只支持传输7比特ASCH码内容II.支持在邮件服务器之间发送邮件III.支持从用户代理向邮件服务器发送邮件IV.支持从邮件服务器向用户代理发送邮件","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"SMTP只支持传输7比特ASCⅡ码内容,故1选项正确;用户代理到邮件 服务器,邮件服务器到邮件服务器都是使用SMTP,故Ⅱ和Ⅲ正确;而从邮件服务器到用户 代理发送邮件使用的是POP3,故Ⅳ错误","type":"choice","options":{"B":"仅I、II和IV","A":"仅I、II和III","D":"仅II、III和Iv","C":"仅 I、III和Iv"},"answer":"A"},{"id":"learncoder_118_24999","stem":"采用base64编码后,一个99B的邮件大小为(\t)B。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"电子邮件经过MIME扩展后,可以将非ASCⅡ码的内容表示成ASCⅡ码 的内容,其中的base64编码方式不管是否是ASCⅡ码字符,每3个字符用另外4个ASCⅡ 码字符表示0 99B的邮件,按照每3个字符一组,可以分为33组。每一组数据使用4个字符表示,答案为33Bx4=132B","type":"choice","options":{"C":"132","B":"640","A":"99","D":"256"},"answer":"C"},{"id":"learncoder_118_25002","stem":"(2014年统考真题)使用浏览器访问某大学Web网站主页时,不可能使用到的协议是()。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"当接入网络时可能会用到PPP协议, A可能用到;而当计算机不知道某 主机的MAC地址时,用皿地址查询相应的MAC地址时会用到ARP协议, B可能用到;而 当访问w曲网站时,若DNS缓冲没有存储相应域名的皿地址,用域名查询相应的皿地址时 要使用ENS协议,而DNS是基于UDP协议的,所以C可能用到; SMTP只有使用邮件客户 端发送邮件,或是邮件服务器向别的邮件服务器发送邮件时才会用到,单纯的访问w轴网页 不可能用到","type":"choice","options":{"D":"SMTP","C":"UDP","A":"PPP","B":"ARP"},"answer":"D"},{"id":"learncoder_118_24990","stem":"下面关于客户/服务器模型的描述,(\t)存在错误。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"客户端是连接的请求方,在连接未建立之前服务器在某一个端口上监听。 这时客户端必须要知道服务器的地址才能发出请求。显然服务器不需要知道客户端的地址。 一旦连接建立后,服务器也能主动发送数据给客户端(测览器的现实内容来自服务器),用于 一些消息的通知,如一些错误的通知","type":"choice","options":{"D":"客户端是请求方,即使连接建立后,服务器也不能主动发送数据","C":"浏览器的现实内容来自服务器","A":"客户端必须知道服务器的地址,而服务器则不需要知道客户端的地址","B":"客户端主要实现如何显示信息与收集用户的输入,而服务器主要实现数据的处理"},"answer":"D"},{"id":"learncoder_118_24993","stem":"当客户端请求域名解析时,如果本地DNS服务器不能完成解析,就把请求发送给其 他服务器,当某个服务器知道了需要解析的IP地址,把域名解析结果按原路返回给本地DNS 服务器,本地DNS服务器再告诉客户端,这种方式称为( ).","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"choice","options":{"C":"迭代与递归解析相结合","D":"高速缓存解析","B":"递归解析","A":"迭代解析"},"answer":"B"},{"id":"learncoder_118_24991","stem":"下面有关DNS的说法中正确的是( )I.主域名服务器运行域名服务器软件,有域名数据库II.辅助域名服务器运行域名服务器软件,但是没有域名数据库III. —个域名有且只有一个主域名服务器","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"助域名服务器也是有数据库的,故Ⅱ错误; Ⅰ、 Ⅲ均正确0","type":"choice","options":{"D":"II、III","B":"I、II、III","A":"I、III","C":"I"},"answer":"A"},{"id":"learncoder_118_24994","stem":"某局域网采用SNMP进行网络管理,所有被管设备在15min内轮询一次,网络没有 明显拥塞,单个轮询时间为0.4s,则该管理站最多可支持(\t)个设备。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"15min相当于60sx15=900s,又因为单个轮询为0.4s,所以最多支持900/0.4≒2250个设备。","type":"choice","options":{"D":"90000","C":"2250","B":"3600","A":"18000"},"answer":"C"},{"id":"learncoder_118_24997","stem":"下面关于SMTP,(\t)是错误的。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"SMTP是一个基于ASCⅡ码的协议,它只能够传送ASCⅡ码,如果需要发送非ASCII码的内容,则需要使用MIRE扩展","type":"choice","options":{"D":"协议需要客户端先与服务器建立TCP连接","C":"协议除了可以传送ASCII码数据,还可以传送二进制数据","A":"客户端不需要登录即可向服务器发送邮件","B":"是一个基于ASCH码的协议"},"answer":"C"},{"id":"learncoder_118_24992","stem":"(\t)一定可以将其管辖的主机名转换为该主机的IP地址。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"一台主机都必须在授权域名服务器处注册登记,授权域名服务器一定 能够将其管辖的主机名转换为该主机的皿地址","type":"choice","options":{"A":"本地域名服务器","B":"根域名服务器","D":"代理域名服务器","C":"授权域名服务器"},"answer":"C"},{"id":"learncoder_118_24995","stem":"下列关于FTP的描述,(\t)存在错误。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"FTP在传输层需要使用TCP, FTP本身.是不具备差错控制能力的,它使 用TCP的可靠传输来保证数据的正确性","type":"choice","options":{"B":"FTP协议并不适合用在两台计算机之间共享读写文件","C":"FTP协议的控制连接用于传送命令,而数据连接用于传送文件","D":"FTP既可以使用TCP,也可以使用UDP,因为FTP本身具备差错控制能力","A":"FTP协议可以在不同类型的操作系统之间传送文件"},"answer":"D"},{"id":"learncoder_118_24996","stem":"下面关于POP3,(\t)是错误的。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"POP3是使用明文来传输密码的,并不对密码进行加密,所以B选项是错 误的o pop3是基于ASCⅡ码的,如果要传输非ASCⅡ码的数据,需要使用MINE协议来将数据转换成AsCⅡ码的形式","type":"choice","options":{"B":"登录到服务器后,发送的密码是加密的","D":"一个账号在服务器上只能有一个邮件接收目录","C":"协议是基于ASCH码的,不能发送二进制数据","A":"由客户端选择接收后是否将邮件保存在服务器上"},"answer":"B"},{"id":"learncoder_118_24984","stem":"在TCP/IP协议簇中,应用层的各种服务是建立在传输层提供服务的基础上的。下列协议组中(\t)需要使用传输层的TCP建立连接。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"通常在传送对实时性要求较高,传送数据量较小时选择用mp,可以节 省开销,减小时延。在传送数据量较大,可靠性要求较高时,采用TCP较合适。需要注意一点, DNS多数情况下使用UDP,但有时也使用TCP","type":"choice","options":{"C":"RIP、FTP、TELNET","B":"TELNET、SMTP、HTTP","D":"SMTP、FTP、TFTP","A":"DNS、DHCP、FTP"},"answer":"B"},{"id":"learncoder_118_24987","stem":"FTP客户机发起对FTP服务器的连接建立的第一阶段建立(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"一个完整的FTP的工作过程需要历经连接建立、数据传输、释放连接3 个阶段。其中,连接建立又分为控制连接建立和数据连接建立两个阶段。因此, FTP客户端 与FTP服务器连接建立的第一个阶段是控制连接的建立,主要用于传输FTP的各种命令","type":"choice","options":{"A":"控制传输连接","C":"会话连接","B":"数据连接","D":"控制连接"},"answer":"D"},{"id":"learncoder_118_24988","stem":"下面给出一个URL 地址:http://www.zju.edu.cn/docs/cindex.html,对它的描述错误的 是()。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"URL用于标识网页的位置。每个URL地址都由两部分构成,即内容标识符和位置。例如,题目中的地址,其中htty是内容标识符,表示使用的是HTTP,而不是使用诸如FTP等协议。其中, h坤:∥www勾u.edu.cn/ docs/cindex.h血1标识了特定网页的位置,这部分又可分为两部分来理解:呻:∥www勾u.edu.cn为域名或称为主机名; /docs/cindex.h血 为特定w曲资源名,即主机上的w曲文件","type":"choice","options":{"D":"整个地址定位了要访问的特定网页的位置","A":"http表示使用超文本传输协议","C":"www.zju.edu.cn/docs标识了要访问的主机名","B":"www.zju.edu.cn标识了要访问的主机名"},"answer":"C"},{"id":"learncoder_118_24985","stem":"现给出一串二进制的文件:11001100 10000001 00111000,如果对该二进制文件 进行base64编码,则最后所传送的ASCII码是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"首先将24位二进制11001100 10000001 00111000分成4等份,即110011001000 000100 1110000根据转换原则:用A表示0,用B表示1等0 26个大写字母排列 完毕后,再排26个小写字母,再排10个数字,最后用″+″表示62,用″/″表示佛。再用两个连在一起的等号″⋯=″和一个等号″=″分别表示最后一组的代码只有8位或16位0 110011为51,对应小写z; 001000为8,对应大写I; 000100为4,对应大写E; 111000为56,对应40而z、 I、 E、 4对应的ASCII码分别是01111010、 01001001、 01000101、 001101000将这4组32位二进制数转换成十六进制数为7A、 49、 45、 340","type":"choice","options":{"D":"7A34 49 45","C":"7A49 34 45","B":"7A49 45 34","A":"8A 49 45 34"},"answer":"B"},{"id":"learncoder_118_24986","stem":"通过“Internet信息服务(IIS)管理器”管理单元可以配置FTP服务器,若将控制 端口设置为2222,则数据端口自动设置为( )。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"FTP的数据端口号是FTP控制端口号一10如当控制端口为21时,数据端 口就是200该知识点很容易被考生忽视,记住即可","type":"choice","options":{"B":"21","A":"20","C":"2223","D":"2221"},"answer":"D"},{"id":"learncoder_118_24989","stem":"最符合WWW服务器概念的选项是( )。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"WWw服务器的概念是从它的功能角度定义的。一般来说, WWw服务 器是等待客户机请求的一个自动程序o www服务器接受了请求后,执行相应的动作,并把 所要求的数据发送给客户机。选项A错在www服务器不要求具备网页的编辑功能。选项B锤2020版计算机网络高分笔记垂)错在虽然用户已创建了网页,并且有了国际互联网络连接,但并不意味着用户的网页就已经 自动成为Www的一部分了。选项D错在仅仅安装了wwW服务器程序,如果没有进行正 确的配置,也不能完成www服务器的功能.","type":"choice","options":{"B":"任何一台联入Internet并存储了网页的计算机就叫WWW服务器","C":"能够接受请求并发送网页的计算机叫WWW服务器","A":"用于编辑网页的计算机叫WWW服务器","D":"安装了 WWW服务器程序的计算机叫WWW服务器"},"answer":"C"},{"id":"learncoder_118_24982","stem":"在因特网上浏览信息时,WWW浏览器和WWW服务器之间传输网页使用的协议是().","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"choice","options":{"D":"ELNET","C":"FTP","A":"IP","B":"HTTP"},"answer":"B"},{"id":"learncoder_118_24983","stem":"WWW浏览器所支持的基本文件类型是().","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"需要提醒一点, HTML的编写不是大纲考查的范围,所以只需知道www 测览器所支持的基本文件类型是HTML即可","type":"choice","options":{"A":"TXT","B":"HTML","C":"PDF","D":"XML"},"answer":"B"},{"id":"learncoder_118_24981","stem":"WWW上每个网页都有一个唯一的地址,这些地址统称为( )o","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"choice","options":{"C":"统一资源定位符","A":"IP地址","D":"WWW地址","B":"域名地址"},"answer":"C"},{"id":"learncoder_118_24979","stem":"在电子邮件应用程序向邮件服务器发送邮件时,最常使用的协议是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"choice","options":{"B":"SMTP","A":"IMAP","D":"NTP","C":"POP3"},"answer":"B"},{"id":"learncoder_118_24980","stem":"在因特网电子邮件系统中,电子邮件应用程序( )o","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"","type":"choice","options":{"B":"发送邮件通常使用SMTP,而接收邮件通常使用POP3","D":"发送邮件和接收邮件都采用POP3","C":"发送邮件通常使用POP3,而接收邮件通常使用SMTP","A":"发送邮件和接收邮件都采用'SMTP"},"answer":"B"},{"id":"learncoder_118_24977","stem":"一台主机希望解析域名www.abc.com,如果这台主机配置的DNS地址为A (或称为本地域名服务器),Internet根域名服务器为B,而存储域名www.abc.com与其IP地址对应关 系的域名服务器为C,那么这台主机通常先查询( ).","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"当一台主机发出DNS查询报文时,这个查询报文首先被送往该主机的本 地域名服务器。当本地域名服务器不能立即回答某个主机的查询时,该本地域名服务器就以 DNS客户的身份向某一台根域名服务器查询。若根域名服务器也没有该主机的信息(但此时 根域名服务器一定知道该主机的授权域名服务器的皿地址),有以下两种做法1)递归查询:根域名服务器向该主机的授权域名服务器发送DNS查询报文,查询结果 再逐级返回给原主机2)递归与迭代相结合的方法(迭代查询):根域名服务器把授权域名服务器的皿地址返 回给本地域名服务器,由本地域名服务器再去查询","type":"choice","options":{"D":"不确定","C":"域名服务器C","B":"域名服务器B","A":"域名服务器A"},"answer":"A"},{"id":"learncoder_118_24975","stem":"不使用面向连接传输服务的应用层协议是(\t).","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"choice","options":{"C":"HTTP","B":"FTP","D":"DHCP","A":"SMTP"},"answer":"D"},{"id":"learncoder_118_24978","stem":"从协议分析的角度,WWW服务的第一步操作是WWW浏览器完成对WWW服务器的()。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"如果用户直接使用域名去访问一个WWw服务器,那么首先需要完成对该 域名的解析任务。只有获得服务器的IP地址后, WWw测览器才能与www服务器建立连 接,开始后续的交互。因此从协议执行过程来说,访问www服务器的第一步是域名解析。","type":"choice","options":{"B":"域名解析","D":"会话连接建立","A":"地址解析","C":"传输连接建立"},"answer":"B"},{"id":"learncoder_118_24976","stem":"匿名FTP访问通常使用()作为用户名。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"choice","options":{"B":"E-mail 地址","D":"主机 id","A":"guest","C":"anonymous"},"answer":"C"},{"id":"learncoder_118_24971","stem":"下列说法错误的是()","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"A选项为P2P的基本概念,故A正确;客户机的作用是根据用户的任务需 求向后端服务器发出服务请求,并将服务器返回的结果呈现给前端客户机(用户),所以客户 机是面向用户的,服务器是面向任务的,故B错误, C正确;客户机与服务器的通信需要借 助网络环境,否则无法工作,故D正确","type":"choice","options":{"B":"客户机是面向任务的,服务器是面向用户的","A":"P2P是网络结点之间采取对等的方式直接交换信息的工作模式","C":"客户机通常位于前端,服务器通常位于后端","D":"客户机和服务器之间是通过网络来实现协同计算任务的"},"answer":"B"},{"id":"learncoder_118_24974","stem":"域名与()是一一对应的。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"尽管DNS能够完成域名到皿地址的映射,但实际上皿地址和域名并非一 一对应。如果一个主机通过两块网卡连接在两个网络上,则具有两个Ⅲ地址,但这两个皿 地址可能就映射到同一个域名上。如果一个主机具有两个域名管理机构分配的域名,则这两 个域名就可能具有相同的皿地址。显然,域名和MAC地址也不是一一对应的(因为一个主 机可以通过两块网卡连接在两个网络上,所以有两个MAC地址)","type":"choice","options":{"D":"以上都不是","C":"主机名称","B":"MAC地址","A":"IP地址"},"answer":"D"},{"id":"learncoder_118_24972","stem":"下列说法正确的是()I.域名服务器DNS的主要功能是通过请求及回答获取主机和网络相关信息II.Web使用HTTP进行信息传送In. www是一种协议IV・HTML是一种超文本标记语言","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"I:属于DNS的功能描述,故1正确。 Ⅱ : HTTP是一种详细规定了测览器和万维网服务器之间互相通信的规则,通过因特网 传送万维网文档的数据传送协议,故Ⅱ正确。 Ⅲ: www不是一种协议而是应用层提供的一种最为重要和普及的服务,故Ⅲ错误。 Ⅳ: HTML是一种超文本标记语言,故Ⅳ正确.","type":"choice","options":{"C":"I 、III、IV","D":"II、III、IV","B":"I 、II、IV","A":"I 、 II、III"},"answer":"B"},{"id":"learncoder_118_24973","stem":"用户提出服务请求,网络将用户请求传送到服务器;服务器执行用户请求,完成所要 求的操作并将结果送回用户,这种工作模式称为().","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"在客户/服务器模式中,客户请求服务,服务器提供服务。客户/服务器模 式是TCP/皿体系结构中进程之间采用的主要工作模式。选项B、 C是数据链路层的协议,所 以不选;选项D只是网络拓扑的一种模式,所以不选。","type":"choice","options":{"B":"对等模式","A":"客户/服务器模式","C":"CSMA/CD模式","D":"令牌环模式"},"answer":"A"},{"id":"learncoder_118_22647","stem":"如果用户想通过电子邮件发送一个图片,那么除了 SMTP协议外,还需增加的协议是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是电子邮件格式与MIME知识点。SMTP协议不支持二进制对象的数据 发送,因此需要补充MIME协议来定义传送非ASCII码的编码规则,因此答案B正确。","type":"choice","options":{"A":"IMAP","B":"MIME","D":"不需要增加任何协议","C":"POP3"},"answer":"B"},{"id":"learncoder_118_22653","stem":"如果配置一个DNS服务器,必须考虑哪几个因素?","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"空","type":"short_answer","answer":"22. 【考点】无"},{"id":"learncoder_118_22650","stem":"下列哪种技术可以有效地降低访问WWW服务器的时延(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是HTTP协议知识点。WWW高速缓存将最近的一些请求和响应暂存 在本地磁盘中;当与暂存的请求相同的新请求到达时,WWW高速缓存就将暂存的响应发送出去,从而降低了广域网的带宽负荷。因此答案C正确。","type":"choice","options":{"C":"WWW高速缓存","D":"SNMP","A":"高速传输线路","B":"更快的WWW服务器CPU速度"},"answer":"C"},{"id":"learncoder_118_22649","stem":"从协议分析的角度,WWW服务的第一步操作是WWW浏览器对WWW服务器(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是WWW的概念与组成结构知识点。TCP协议不识别域名,所以浏览器 首先需要通过请求域名解析获得服务器的IP地址后才能请求建立TCP逢接。因此答案C 正确。\t","type":"choice","options":{"B":"传输连接建立","C":"请求域名解析","D":"会话连接建立","A":"请求地址解析"},"answer":"C"},{"id":"learncoder_118_22648","stem":"Internet上,实现超文本传输的协议是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是WWW的概念与组成结构知识点。Hypertext是超文本,WWW是服 务,FTP是文件传输协议,HTTP是超文本传输协议。因此答案D正确。","type":"choice","options":{"D":"HTTP","C":"WWW","B":"FTP","A":"Hypertext"},"answer":"D"},{"id":"learncoder_118_22644","stem":"下列功能中不属于电子邮件系统中用户代理的功能是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是电子邮件系统的组成结构知识点。电子邮件系统中用户代理的主要 功能是撰写邮件,显示邮件以及处理邮件(包括发送和接受),监控邮件的功能属于邮件服务器, 因此答案D正确。","type":"choice","options":{"B":"显示","D":"监控","C":"处理","A":"撰写"},"answer":"D"},{"id":"learncoder_118_22643","stem":"在FTP会话中,当用户请求传送文件时,FTP将在服务器的(\t)端口上打开一个数据TCP连接。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是FTP控制连接与数据连接知识点。在启动FTP会话时,FTP客户首 先发起建立一个与FTP服务器端口号21之间的控制连接,此后当用户请求传送文件时,FTP将 在服务器的20端口上打开一个数据TCP连接,因此正确答案为A。","type":"choice","options":{"C":"22","B":"21","A":"20","D":"23"},"answer":"A"},{"id":"learncoder_118_22646","stem":"电子邮件的首部中包含一些关键字,其中哪一个关键字是必不可少的(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是电子邮件格式与MIME知识点。在电子邮件首部的关键字中,“To” 指明了邮件的目的地址,如果没有邮件则无法发送,其他字段是否空缺并不影响邮件的发送。因 此答案A正确。","type":"choice","options":{"D":"Reply-to","B":"Subject","A":"To","C":"Cc"},"answer":"B"},{"id":"learncoder_118_22645","stem":"电子邮件目前广泛采用的协议主要有3种,下列哪个协议不在其中( )。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是SMTP协议与POP3协议知识点。电子邮件系统使用的协议主要有SMTP,POP3和IMAP,因此答案D正确。","type":"choice","options":{"C":"IMAP","B":"POP3","D":"SNMP","A":"SMTP"},"answer":"D"},{"id":"learncoder_118_22642","stem":"下列关于FTP和TFTP的描述中,正确的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是FTP协议的工作原理知识点。FTP是基于TCP协议的,TFTP是基于UDP协议的,因此正确答案为Co","type":"choice","options":{"C":"FTP基于TCP协议,TFTP基于UDP协议","B":"FTP和TFTP都基于UDP协议","A":"FTP和TFTP都基于TCP协议","D":"FTP基于UDP协议,TFTP基于TCP协议"},"answer":"C"},{"id":"learncoder_118_22640","stem":"如果本地域名服务器无缓存,当采用递归方法解析另一个网络的某主机域名时,用户主机本地域名服务器发送的域名请求条数分别为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是域名解析过程知识点。递归方法解析过程为:某个主机有域名解析请 求时,总是首先向本地域名服务器发出查询请求,如果本地域名服务器上有要解析的域名信息, 它将把结果返回给请求者;如果没有,它将作为DNS客户向根域名服务器发出查询请求,然后从 根域名服务器开始,依次将查询请求发送给下一级域名服务器,直到解析成功,然后逐级返回解 析结果。因此答案A正确。","type":"choice","options":{"B":"1条,多条","C":"多条,1条","D":"多条,多条","A":"1条,1条"},"answer":"A"},{"id":"learncoder_118_22639","stem":"关于对域名的理解,错误的是( )。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是域名系统知识点。域名只是个逻辑概念,并不代表计算机所在的物理 地址,答案D正确。","type":"choice","options":{"C":"因特网上每个组织都可以维护自己的域名及域名服务器","B":"域名是按照层次树状结构来组织的","D":"域名代表了计算机所在的物理地点","A":"域名可以方便记忆服务器的地址"},"answer":"D"},{"id":"learncoder_118_22641","stem":"FTP客户机和服务器之间一般需要建立(\t)个连接。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是FTP协议的工作原理知识点。在使用FTP进行文件传输时,在客户 机和服务器之间需要建立两个连接:控制连接和数据连接,答案B正确。","type":"choice","options":{"A":"1","B":"2","C":"3","D":"4"},"answer":"B"},{"id":"learncoder_118_22638","stem":"下列选项中不属于域名服务器类型的是(\t)","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是域名服务器知识点。因特网的域名服务器系统也是按照域名的层次 来安排的,一共分为三种类型:本地域名服务器、根域名服务器、授权域名服务器,因此答案D 正确。","type":"choice","options":{"A":"本地域名服务器","B":"根域名服务器","D":"远程域名服务器","C":"授权域名服务器"},"answer":"D"},{"id":"learncoder_118_22637","stem":"对于下列域名;说法错误的是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是层次域名空间知识点。表示政府部门的二级域名为・gov,因此答案C 正确。","type":"choice","options":{"B":"net指网络服务机构","C":"mil指政府部门","D":"edu指教育及研究机构","A":".com指商业机构"},"answer":"C"},{"id":"learncoder_118_22634","stem":"网络中,各种资源被存放在网络的所有参与的结点中,每个结点在获得服务的同时,也为其他结点提供服务,这种网络应用模型称为(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是P2P模型知识点。P2P模式本质思想是整个网络结构中的传输内容 不再被保存在中心服务器中,每个结点都同时具有下载、上传和信息追踪这三方面的功能,因此 答案B正确。","type":"choice","options":{"B":"P2P模式","C":"SMA/CD模式","D":"令牌模式","A":"客户机/服务器模式"},"answer":"B"},{"id":"learncoder_118_22633","stem":"目前,P2P网络存在4种主要的结构类型,其中集中目录式P2P网络结构的代表性软件 是( )。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是P2P模型知识点。集中式拓扑结构的P2P网络形式上由一个中心服 务来负责记录共享信息以及回答这些信息的查询,网络上提供的所有资料都分别存放在提供该 资料的客户机上,服务器只保留索引信息;典型的代表软件有Napster, Maze。,因此正确答案 为 C。\t","type":"choice","options":{"C":"Napster","A":"Bit torrent","D":"Pastry","B":"Guntella"},"answer":"C"},{"id":"learncoder_118_22636","stem":"下列选项中,不属于DNS系统的组成部分是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是DNS系统知识点。概念上可以把DNS分为三个部分:域名空间、域名 服务器、解析器,因此答案D正确。","type":"choice","options":{"A":"域名空间","D":"浏览器","B":"域名服务器","C":"解析器"},"answer":"D"},{"id":"learncoder_118_22635","stem":"DNS是基于(\t)模式的分布式系统。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是DNS系统知识点。域名系统DNS是一个基于客户机/服务器模式的 分布式数据库管理系统,因此答案A正确。","type":"choice","options":{"B":"P2P","A":"C/S","C":"B/S","D":"以上均不是"},"answer":"A"},{"id":"learncoder_118_22632","stem":"客户端/服务器模型的主要优点是(\t)。","key_points":"知识点.练习.专业课练习.计算机网络.应用层","analysis":"此题考查的是客户机/服务器模型知识点。采用客户机/服务器模型的主要原因有 两个:一是更好地实现资源共享,二是通信的异步问题,因此正确答案为A。","type":"choice","options":{"A":"网络传输线路上只传送请求命令和执行结果,从而降低通信开销","B":"数据的安全性得到保障","D":"网络传输线路上只传输数据,降低了通信开销","C":"数据的完整性得到保障"},"answer":"A"}],"length":3877}