怎样用R软件做下面的题啊,求解!!!

weixin_44815565 2019-03-22 08:54:03
1.设乘同余发生器为 试生成“随机数”,显示100个。进行检验 2、用Lewis-Goodman-Miller的素数模乘同余发生器 初值为正整数 产生均匀分布随机数,显示200个;并进行检验。
...全文
58 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
答 案 习一答案 一、选择 1. 软件的主要特性是(A B C)。 A) 无形 B) 高成本 C) 包括程序和文档   D) 可独立构成计算机系统 2. 软件工程三要素是(C D)。 A) 技术、方法和工具  B) 方法、工具和过程  C) 方法、对象和类  D) 过程、模型、方法 3. 包含风险分析的软件工程模型是(A)。 A) 螺旋模型 B) 瀑布模型 C) 增量模型 D) 喷泉模型 4. 软件工程的主要目标是(C)。 A) 软件需求  B) 软件设计  C) 风险分析  D) 软件实 现 5. 下列属于面向对象开发方法的是(A B C D)。 A) Booch   B) UML   C) Coad   D) OMT 6. 软件危机的主要表现是(B D)。 A) 软件成本太高 B) 软件产品的质量低劣 C) 软件开发人员明显不足 D) 软件生产率低下 7. 软件开发方法的主要工作模型有(A B C) A) 螺旋模型 B) 循环模型 C) 瀑布模型 D) 专家模型 8. 软件工程的目标有(A B C)。 A) 易于维护 B) 低的开发成本 C) 高性能 D) 短的开发期 9. 软件工程学的目的和意义是( )。 A) 应用科学的方法和工程化的规范管理来指导软件开发 B) 克服软件危机 C) 作好软件开发的培训工作 D) 以较低的成本开发出高质量的软件 二、 判断 1. 软件就是程序,编写软件就是编写程序。(×) 2. 瀑布模型的最大优点是将软件开发的各个阶段划分得十分清晰。(×) 3. 结构化方法的工作模型是使用螺旋模型进行开发。(×) 4. 结构化方法和JSP方法都不适合于大型软件的开发。(√) 5. 原型化开发方法包括生成原型和实现原型两个步骤。(×) 6. 面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。( √) 7. 软件危机的主要表现是软件的需求量迅速增加,软件价格上升。(×) 8. 软件工具的作用是为了延长软件产品的寿命。(×) 9. 软件工程过程应该以软件设计为中心,关键是编写程序。(×) 10. RCP法与RSP法的主要区别是前者采用循环渐进的开发方式,原型将成为最终的产品,而后者将被废弃。(√) 三、简答 1. 软件产品的特性是什么? 答: ● 软件是一种逻辑产品,具有无形性;  ● 软件产品的生产主要是研制;  ● 软件不存在磨损和老化问,但存在退化问;  ● 软件产品的生产主要是脑力劳动;  ● 软件产品的成本非常昂贵,其开发方式目前尚未完全摆脱手工生产方式; ● 软件具有“复杂性”,其开发和运行常受到计算机系统的限制。 2. 软件发展有几个阶段?各有何特征? 答: ① 程序设计阶段。    硬件特征:价格贵、存储容量小、运行可靠性差。    软件特征:只有程序、程序设计概念,不重视程序设计方法。   ② 程序系统阶段。    硬件特征:速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长 。    软件特征:程序员数量猛增,开发人员素质低。   ③ 软件工程阶段。    硬件特征:向超高速、大容量、微型化及网络化方向发展。    软件特征:开发技术有很大进步,但未获得突破性进展,软件价格不断上升,未完全摆脱软件危机。 3. 什么是软件危机?其产生的原因是什么? 答:“软件危机”(Software Crisis)的出现是由于软件的规模越来越大,复杂度不断增 加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术 不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力、财力, 而在开发过程中就夭折。软件危机主要表现在两个方面: (1) 软件产品质量低劣,甚至开发过程就夭折。 (2) 软件生产率低,不能满足需要。 4. 什么是软件生存周期模型?它有哪些主要模型? 答:软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。 主要模型包括:瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型。 5. 有哪些主要的软件开发方法? 答:主要的软件开发方法有:结构化开发方法、Jackson(JSP、JSD)方法、原型化开发方 法、维也纳开发方法(VDM)和面向对象的开发方法。 6. 软件生命期各阶段的任务是什么? 答:软件生命期瀑布模型分为六个阶段: ● 可行性研究与计划(确定系统的目标和规模,分析项目的可行性); ● 需求分析与规格说明(明确系统的规格和要求); ● 设计(包括概要设计和详细设计,将系统分解为模块); ● 编程(用程序语言实现每个模块,简单容易); ● 测试(发现并改正错误,分为模块测试、集成测试和系统联调三级); ● 运行维护(扩充功能、纠错等)。 习二答案 一、 选择 1. 需求分析的主要目的是(B C)。 A) 系统开发的具体方案 B) 进一步确定用户的需求 C) 解决系统是“什么的问” D) 解决系统是“如何的问” 2. 需求分析的主要方法有(C D)。 A) 形式化分析方法 B) PAD图描述 C) 结构化分析(SA)方法 D) OOA法 3. 面向对象的分析方法主要是建立三类模型,即(D)。 A) 系统模型、ER模型、应用模型 B) 对象模型、动态模型、应用模型 C) E-R模型、对象模型、功能模型 D) 对象模型、动态模型、功能模型 4. SA法的主要描述手段有(B)。 A) 系统流程图和模块图 B) DFD图、数据词典、加工说明 C) 软件结构图、加工说明 D) 功能结构图、加工说明 5. 画分层DFD图的基本原则有(A C D)。 A) 数据守恒原则 B) 分解的可靠性原则 C) 子、父图平衡的原则 D) 数据流封闭的原则 6. 在E-R模型中,包含以下基本成分(C)。 A) 数据、对象、实体 B) 控制、联系、对象 C) 实体、联系、属性 D) 实体、属性、联系 7. 画DFD图的主要目的是(A D)。 A) 作为需求分析阶段用户与开发者之间交流信息的工具 B) 对系统的数据结构进行描述 C) 对目标系统的层次结构进行描述 D) 作为分析和设计的工具 8. 数据字典是数据流图中所有元素的定义的集合,一般由以下四类条目组成(C)。 A) 数据说明条目、控制流条目、加工条目、数据存储条目 B) 数据流条目、数据项条目、文件条目、加工条目 C) 数据源条目、数据流条目、数据处理条目、数据文件条目 D) 数据流条目、数据文件条目、数据池条目、加工条目 9. 在需求分析阶段主要采用图形工具来描述的原因是(B C)。 A) 图形的信息量大,便于描述规模大的软件系统 B) 图形工具能够极好地概括描述一个系统的信息,比文字叙述能够更好地表达重 要的细节 C) 图形能够更加直观地描述目标系统,便于用户理解和交流,有利于开发者与用 户之间达成一致的需求 D) 图形比文字描述简单、形象 二、 判断 1. 在进行了可行性分析后,需求分析就只需要解决目标系统的设计方案。(×) 2. SA法是面向数据流,建立在数据封闭原则上的需求分析方法。(√) 3. HIPO法既是需求分析方法,又是软件设计方法。(√) 4. 在面向对象的需求分析方法中,建立动态模型是最主要的任务。(×) 5. 加工小说明是对系统流程图中的加工进行说明。(×) 6. 判定表的优点是容易转换为计算机实现,缺点是不能够描述组合条件。(×) 7. 需求分析的主要方法有SD法、OOA法及HIPO法等。(×) 8. 分层的DFD图可以用于可行性分析阶段,描述系统的物理结构。(×) 9. 信息建模方法是从数据的角度来建立信息模型的,最常用的描述信息模型的方法是E-R 图。(√)  10. 用于需求分析的软件工具,应该能够保证需求的正确性,即验证需求的一致性、完整性、现实性和有效性。(√) 三、 问答 1. 什么是需求分析?需求分析阶段的基本任务是什么? 答: 需求分析是当前软件工程中的关键问,需求分析阶段的任务是:在可行性分析的基础上,进一步了解、确定用户需求。准确地回答 “系统必须什么?” 的问。获得需求规格说 明书。还涉及到软件系统的目标、软件系统提供的服务、软件系统的约束和软件系统运行的环境。它还涉及到这些因素和系统的精确规格说明,以及系统进化之间的关系。 需求分析的基本任务包括: (1) 抽取需求 分析现行系统存在需要解决的问。获取足够多的问领域的知识,需求抽取的方法一般有问卷法、面谈法、数据采集法、用例法、情景实例法以及基于目标的方法等;还有知识工程方法,例如,场记分析法、卡片分类法、分类表格技术和基于模型的知识获取等 。 (2) 模拟和分析需求 需求分析和模拟又包含三个层次的工作。首先是需求建模。需求模型的表现形式有自然语言、半形式化(如图、表、结构化英语等)和形式化表示等三种。需求概念模型的要求包括实现的独立性:不模拟数据的表示和内部组织等;需求模拟技术又分为企业模拟、功能需求模拟和非功能需求模拟等。 (3) 传递需求 传递需求的主要任务是书写软件需求规格说明。 (4) 认可需求 就是对需求规格说明达成一致,其主要任务是冲突求解,包括定义冲突和冲突求解两方面。常用的冲突求解方法有:协商、竞争、仲裁、强制、教育等,其中有些只能用人的因素去控制。 (5) 进化需求 客户的需要总是不断(连续)地增长,但是一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化(变化)就成为软件进化的首要问。对于传统的变化管理过程来说,其基本成分包括软件配置、软件基线和变化审查小组。当前的发展是软件家族法 ,即产品线方法。多视点方法也是管理需求变化的一种新方法,它可以用于管理不一致性, 并进行关于变化的推理。 2. M公司的软件产品以开发实验型的新软件为主。用瀑布模型进行软件开发已经有近十年了,并取得了一些成功。若你作为一名管理员刚加入M公司,你认为快速原型法对公司的软件开发更加优越,请向公司副总裁写一份报告阐明你的理由,切记:副总裁不喜欢报告长度 超过一页(B5)。 参考答案提示: 应先简述瀑布模型的缺点,它已不适宜开发实验型的软件。根据快速原型法的特点,说明它特别适合于开发探索型、实验型的软件。 3. 如何画分层数据流图? 答: 总的原则是:至顶而下,逐层分解(画分层数据流图)。 比较复杂的系统不能画在一张纸上,逐层分解的画法可以控制每一层的复杂度。 顶层:将整个系统作为一个加工,描述系统边界(输入与输出)。 中间层:表示某个加工分解为一组子加工,其中的子加工还需进一步分解。 底层:由不再进行分解的基本加工组成。 4. 加工小说明有哪些描述方法? 答: ● 结构化语言:介于自然语言和形式语言(如谓词逻辑)之间。 ● 结构化英语:通常由外层和内层结构组成。 ● 汉语的情况:精确、简明扼要、文体可以灵活。 ● 判定表:适用于表述比较复杂的加工逻辑,如具有多项选择条件的操作。 ● 判定树:本质上与判定表相同,图形表示更易于理解。 5. 考察下图中子图、父图的平衡。 图1 图2 参考答案: 图1中子图与父图不平衡。子图是父图中加工2的分解,加工2 有输入数据流M和N,输出数据流T,而子图则只有一个输入数据N,却有两个输出数据流T与S。 图2中子图是父图中加工3的分解,虽然表面上加工3只有一个输入数据流“订货单”,而子图却有三个输入数据流,但是如果“订货单”是由“客户”、“账号”和“数量”三部分组成,即有如下数据条目,订货单=客户+账号+数量(2.2.5数据词典),则子、父图平衡。 6. 画出银行取款过程的DFD图。问描述为:储户用存折取款,首先填写取款单,根据“ 账卡”中的信息检验取款单与存折,如有问,将问反馈给储户,否则,登录“储户存款 数据库”,修改相应数据,并更新“账卡”,同时发出付款通知,出纳向储户付款。 参考答案: 7. 常用的软件需求分析方法有哪些? 答: 结构化分析方法(SA)、功能分解法、信息建模法、面向对象的分析方法(OOA)。 习三答案 一、 选择 1. 模块的基本特征是(A C)。 A) 外部特征(输入/输出、功能) B) 内部特征(输入/输出、功能) C) 内部特征(局部数据、代码) D) 外部特征(局部数据、代码 ) 2. SD方法的设计总则是(C D)。 A) 程序简洁、操作方便 B) 结构清晰、合理 C) 模块内聚性强 D) 模块之间耦合度低 3. 软件设计的主要任务是(A B D)。 A) 将分析阶段获得的需求说明转换为计算机中可实现的系统 B) 完成系统的数据结构和程序结构设计 C) 完成模块的编码和测试 D) 对模块内部的过程进行设计 4. 设计阶段应达到的目标有(A D)。 A) 提高可靠性和可维护性 B) 提高应用范围 C) 结构清晰 D) 提高可理解性和效率 5. 从工程管理的角度来看,软件设计分两步完成(D)。 A) ①系统分析②模块设计 B) ①详细设计②总体设 计 C) ①模块设计②详细设计 D) ①总体设计②详细设 计 6. 模块独立性准则由以下定性指标来衡量(BD)。 A) 分解度    B) 耦合度    C) 屏蔽性    D) 内聚性 7. 用户界面设计的任务包括(A B C)。 A) 确定用户界面类型 B) 建立任务模型 C) 建立用户模型 D) 建立功能模型 8. 程序设计语言可以分为(B C D)。 A) 面向过程的语言    B) 机器语言 C) 高级语言    D) 汇编语言  9. 程序效率包括(A C D)几个方面的内容。 A) 代码效率     B) 运行效率    C) 存储效率     D) I/O效率 10. SP方法中的基本控制结构有(A B C)。 A) 顺序结构 B) 选择结构 C) 重复结构 D) GOTO结构 11. 内部文档可用注释语言书写,注释语言分为(A B C D)。 A) 序言性注释 B) 描述性注释 C) 功能性注释 D) 状态性注释 12. 为使程序中数据说明更易于理解和维护,必须遵循以下原则(A B C) 。 A) 数据说明的次序应当规范化 B) 一个语句说明多个变量时,各变量名按字母顺序排列 C) 对于复杂的数据结构,要加注释,说明在程序实现时的特点 D) 定义变量名应按字母顺序排列 13. 源程序的效率与(D)阶段确定的算法的效率直接有关。 A) 概要设计 B) 总体设计 C) 单元设计 D) 详细设计 14. 在详细设计翻译转换成源程序代码后,算法效率反映为对程序的哪几个方面的要求 (C D)。 A) 读写速度 B) 代码长度 C) 存储容量 D) 执行速度 15. 提高程序效率的根本途径在于(B C)。 A) 编程时对程序语句进行调整 B) 选择良好的设计方法 C) 使程序最大限度的简洁 D) 选择良好的数据结构与算法 二、判断 1. 划分模块可以降低软件的复杂度和工作量,所以应该将模块分得越小越好。 (×) 2. 在网状结构中任何两个模块都是平等的,没有从属关系,所以在软件开发过程中常常被使用。(×) 3. 信息隐蔽原则有利于提高模块的内聚性。(√) 4. 中心变换型的DFD图可看成是对输入数据进行转换而得到输出数据的处理,因此可以使 用事务分析技术得到初始的模块结构图。(×) 5. SD法是一种面向数据结构的设计方法,强调程序结构与问结构相对应。 (×) 6. 所谓结构冲突,是指输入数据与输出数据之间很少或没有结构上的对应关系。通常解决 的办法是:构造一个或者多个中间结构,在输入和输出结构之间进行转换。(√) 7. 当模块的控制范围是其作用范围的子集时,模块之间的耦合度较低。(×) 8. JACKSON方法是以数据流、数据封闭性准则逐层分解的。(×) 9. 程序设计语言的工程特性包括:可移植性、可重用性、可维护性、局部性和顺序性。(×) 10. 项目应用领域是选择语言的关键因素。(√) 11. FORTRAN、Pascal、C语言、PL/1和汇编语言都是科学工程计算可选用的语言。(×) 12. 要用快速原型法开发软件,应选用4GL语言。(√) 13. 提高程序效率的根本途径是选择良好的设计方法、数据结构与算法。(×) 14. 良好的程序设计风格简单说就是高的编程技巧。(√) 三、简答 1. 模块内联系和模块间联系有哪些种类? 答:块间联系的各种类型的划分,从以下3方面考虑: ● 按块间联系的方式(可分为直接引用与过程调用); ● 按块间共用信息的作用(可分为数据型、控制型与混合型); ● 按块间共用的信息数量多少(信息多联系紧密)。 (1) 块间联系的类型,按照耦合度由大到小分为: 内容型:直接引用另一模块的内部信息; 公共型:两个模块引用共同的全程数据区; 控制型:模块间传送的信息用于控制模块的内部逻辑; 复合型:模块间传送复合的数据结构; 数据型:模块间传送单个数据项。 (2) 块内联系的类型,按照内聚性从小到大分为: 偶然型:模块内部没有必然联系; 逻辑型:逻辑上相似的功能放进一个模块; 瞬时型:将同时执行的语句放在一个模块; 通信型:模块中的各部分引用共同的数据; 顺序型:模块中一部分的输出是另一部分的收入; 功能型: 模块中刚好包含了完成一个基本任务所必需的成分。 2. 分析以下DFD图,说明属于哪种类型的DFD图,并按照相应的变换将其转换为初始的模块 结构图。 参考答案:(略) 3. 下图是修改文件记录的DFD图,请确定其主加工。 解:主加工为:账号、修改、写记录。 4. 按照“降低块间联系,提高块内联系”的设计总则对模块进行修改,具体从哪些方面进 行改进? 解: (1) 尽可能建立功能模块; (2) 消除重复功能; (3) 模块的作用范围与控制范围,即当作用范围为控制范围的子集时,才能获得较低的块间 联系; (4) 模块的大小适当; (5) 模块的扇入扇出数不宜太多。 5. 根据模块的作用范围与控制范围的原则,判定a、b两图的正确性。 解:显然,图a不满足作用范围应与控制范围的原则,模块F的作用范围不在控制范围之内。 图b的模块设计合理。 6. 图a中,模块G为判定,判断涉及到模块B、F、G,请指出设计中的错误,再根据改进模 块图的基本原则,画出1~2个改进方案(不改变模块G的判断关系),并说明是按照哪条基本 原则进行改进的。 解:图b为一个改进方案,将模块G的位置提高,使其作用范围为控制范围的子集,减少模块 之间的联系。 7. 编码阶段的主要任务是什,应交付的结果是什么? 答:编码阶段的主要任务是为每个模块编写程序。即是:将详细设计的结果转换为用某种计 算机语言写的程序——源程序代码。编码阶段应交付的结果是带有“程序内部文档”的、不 再含有语法错误的程序。 8. SP法的自顶向下,逐步求精方法的优点有哪些? 答:此法符合人们解决复杂问的普遍规律,可提高软件开发的成功率和生产率;而且用先 全局后局部、先整体后细节、先抽象后具体的逐步求精过程,开发出来的程序具有清晰的层 次结构,因此程序容易阅读和理解。这样,程序自顶向下,逐步细化,分解成一个树型结构 。 因此,在同一层次的节点上细化工作,相互之间没有联系,它们之间的细化工作相互独立 ;在任何一步发生错误,一般只影响它下层的节点,同一层其他节点不受影响;在以后的测试中,也可以先独立地一个节点一个节点地,最后再集成。这样,程序清晰和模块化,使 得在修改和重新设计一个软件时,可复用的代码量最大。 9. 为了使程序具有良好的设计风格,应注意哪些方面的问? 答:(1) 标识符应按意取名。 标识符即符号名,包括:模块名、常量名、标号名、子程序名、数据区名、缓冲区名等。 这些名字应能反映它所代表的实际东西,应有一定实际意义,使其能够见名知意,有助于对 程序功能的理解。 (2) 程序应加注释,它分为两类:序言性注释和功能性注释。 序言性注释应置于每个模块的起始部分,主要内容有:①说明每个模块的用途,功能;②说明模块的接口即调用格式、参数描述及从属模块的清单;③数据描述;④开发历史 。 功能性注释是嵌在源程序体中的,用于说明其后的程序段或语句的功能以及数据的状态;也就是解释下面要“什么”,或是执行下面的语句会发生什么情况;而不是解释下面“怎么”,因为怎么常常是与程序重复的,且对读者理解程序没有什么帮助。 10. 样评价程序的执行效率?它与程序清晰性的关系是怎样的? 答:许多程序员往往片面追求效率,其实程序系统的成本不仅包括运行所需的机时,同时还应把程序员及操作员所花费的人力考虑进去。在编程时为追求效率而损害可读性或可靠性,会给以后的维护工作带来困难,所以从整体上看来是不值得的。 此外,还应该认识到,提高程序效率的根本途径在于:选择良好的设计方法、良好的数据结构与算法,而不是靠编程时对程序语句进行调整。 (1) 追求建立在不损害程序可读性或可靠性基础上,要先使程序正确、清晰,再提高程序 效率。 (2) 不能因为贪图效率上的小利,而破坏程序的清晰性。 (3) 让编译程序去作简单的优化。 (4) 提高程序效率的根本途径在于:选择良好的设计方法和良好的数据结构与算法,而不是靠编程时对程序语句调整。 11. 假定:需要编一个求解一元二次方程根的子程序,加入到现有的子程序库中,供其他程序员使用。要求: (1) 为该子程序写一个序言性注释; (2) 用PASCAL语言或其他语言写出这个子程序(要把根的性质,如:实根、复根、降为一次方程等有区别地通知调用者),并加上描述性注释。 答案:(略) 习四答案 一、选择 1. 面向对象程序设计的基本机制(ABC)。 A) 继承 B) 消息 C) 方法 D) 结构 2. 下列属于面向对象的要素有(BCD)。 A) 分类性 B) 抽象 C) 共享 D) 封装 3. 下列选项中属于面向对象开发方法的有(ACD)。 A) Booch B) CAD C) Coad D) OMT 4. 下列属于Coad方法中面向对象的分析模型的层次有(AB)。 A) 主层 B) 对象层 C) 应用层 D) 接口层 5. 一个类属性依其特征划分,其类型有(ABCD)。 A) 描述型 B) 定义型 C) 派生型 D) 参考型 6. 在进行面向对象分析时,所采用的模型有(ABD)。 A) 对象模型 B) 动态模型 C) 静态模型 D) 功能模型 7. 状态是对象属性的值的一种抽象,它的性质有(AB)。 A) 时间性 B) 持续性 C) 有序性 D) 有穷性 8. 数据流图中的处理必须用对象中的操作来实现常见的操作有(ABCD)。 A) 查询 B) 动作 C) 活动 D) 访问 9. 建立继承关系时所采用的方式有(AC)。 A) 自顶向下 B) 从内到外 C) 自底向上 D) 从复杂到简单 10. 对象是人们要研究的任何事物主要的对象类型有(ABCD)。 A) 有形实体 B) 作用 C) 事件 D) 性能说明 二、判断 1. 面向对象的的方法是以类作为最基本的元素,它是分析问解决问的核心。(×) 2. 类是指具有相同或相似性质对象的抽象,对象是抽象的类,类的具体化就是对象。(√) 3. 继承性是父类和子类之间共享数据结构和消息的机制,这是类之间的一种关系(×)。 4. 多态性增强了软件的灵活性和重用性,允许用更为明确、易懂的方式去建立通用软件, 多态性和继承性相结合使软件具有更广泛的重用性和可扩充性。(×) 5. 面向对象分析,就是抽取和整理用户需求并建立问域精确模型的过程。(√) 6. 面向对象的设计的主要目标是提高生产效率,提高质量和提高可维护性。(√) 7. 对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。(√) 8. 面向对象的分析是用面向对象的方法对目标系统的问空间进行理解、分析和反映。通过对象层次结构的组织确定解空间中应存在的对象和对象层次结构。(√) 9. 类的设计过程包括:确定类,确定关联类,确定属性,识别继承关系。(√) 10. 复用也叫重用或再用,面向对象技术中的“类”,是比较理想的可重用软构件。有三种重用方式:实例重用、继承重用、多态重用。(√) 11. 主是一种关于模型的抽象机制,它是面向对象模型的概貌,也是关于某个模型要同时考虑和理解的内容,主起一种控制作用。(√) 12. 面向对象的分析由对象、结构、继承性和基于消息的通信构成。(×) 13. 支持继承性是面向对象程序设计语言和传统程序设计语言在语言机制方面的根本区别。(√) 14. 面向对象的分析过程主要包括三项内容:理解、表达和验证。(√) 15. 面向对象的设计的主要目标是提高生产效率、提高质量和提高可维护性。(√) 三、 简答 1. 与传统程序设计模式中的过程调用相比,消息传递机制有何本质区别? 答: (1) 消息传递必须给出信道的信息,通常要指出明显的接受方。 (2) 由于接受方是一通信实体,具有保持状态的能力,所以同一发送方在不同时刻向同一 接受方发送同样的信息,可因接受方的当前状态不同而得到不同的结果。 (3) 消息传递可以是异步的,发送方可以不必等待接受方返回信息就可以继续执行后面的操作,因而支持程序的并发和分布执行,而过程调用只能是同步的,本质上是串行的。 2. 阐述面向对象的特征,并简要的解释。 答: (1) 对象惟一性。 每个对象都有自身惟一的标识,通过这种标识,可找到相应的对象。 (2) 分类性。 是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。 (3) 继承性。 是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系。 (4) 多态性。 是指相同的操作或函数,过程作用于多种类型的对象上,并获得不同的结果。 3. Coad方法主要由面向对象分析OOA和面向对象设计OOD。OOA方法分析过程和构造OOA概念模型的顺序由5个层次组成,请简述这5个层次。 答: (1) 发现类及对象。描述如何发现类及对象。从应用领域开始识别类及对象,形成整 个应用的基础,然后,据此分析系统的责任。 (2) 识别结构。该阶段分为两个步骤。第一,识别“一般-特殊”结构,该结构捕获了识别出的类的层次结构;第二,识别“整体-部分”结构,该结构用来表示一个对象如何成为另一个对象的一部分,以及多个对象如何组装成更大的对象。 (3) 定义主。主由一组类及对象组成,用于将类及对象模型划分为更大的单位,便于理解。 (4) 定义属性。其中包括定义类的实例(对象)之间的实例连接。 (5) 定义服务。其中包括定义对象之间的消息连接。 4. 面向对象程序设计有哪些优点? 解:开发时间短、效率高、可靠性高,所开发的程序更强壮。由于面向对象编程的可重用性 ,可以在应用程序中大量采用成熟的类库,从而缩短开发时间,这样程序更易于维护、 更新和升级。继承和封装使得应用程序的修改带来的影响更加局部 化。 5.比较面向对象方法与结构化方法的特点。 解:分析是问抽象 (什么),设计是问求解 (怎么),实现是问的解 (结果)。任 何方法学对客观世界的抽象和求解过程都是如此。在问抽象阶段,结构化方法面向过程, 按照数据变换的过程寻找问的结点,对问进行分解。因此,与面向对象方法强调的对象 模型不同,描述数据变换的功能模型是结构化方法的重点。如果问世界的功能比数据更复 杂或者更重要,那么结构化方法仍然应是首选的方法学。如果数据结构复杂且变换不多, 那么如果以过程主导分析和设计,一旦有系统变更就会给下游开发带来极大混乱。 由于对过程的理解不同,面向过程的功能细分所分割出的功能模块有时会因人而异。而面向 对象的对象细分,从同一问领域的对象出发,不同人得出相同结论的比率较高。 在设计上,结构化方法学产生自顶向下、结构清晰的系统结构。每个模块有可能保持较强的独立性,但它往往与数据库结构相独立,功能模块与数据库逻辑模式间没有映射关系,程序与数据结构很难封装在一起。如果数据结构复杂,则模块独立性很难保证。面向对象方法抽象的系统结构往往并不比结构化方法产生的系统结构简单,但它能映射到数据库结构中,很容易实现程序与数据结构的封装。 在软件工程基本原则中有一条“形式化原则”,即对问世界的抽象结论应该以形式化语言 (图形语言、伪码语言等)表述出来。结构化方法可以用数据流图、系统结构图、数据辞典、状态转移图、实体关系图来进行系统逻辑模型的描述;而面向对象方法可以使用对象模型图、数据辞典、动态模型图、功能模型图。其中对象模型图近似系统结构图与实体关系图的结合,动态模型图类似状态迁移图,功能模型图类似数据流图。 6.当重要的对象被发现后,通过一组互相关联的模型详细表示类之间的关系和对象的行为,这些模型从四个不同的侧面表示了软件的体系结构、静态逻辑、动态逻辑、静态物理和动态物理。试描述一下这四种特性。 解:静态逻辑模型描述实例化(类成员关系)、关联、聚集(整体/部分)、和一般化(继承)等关系。这被称为对象模型。一般化关系表示属性和方法的继承关系。定义对象模 型的图形符号体系通常是从用于数据建模的实体关系图导出的。对设计十分重要的约束,如 基数(一对一、一对多、多对多),也在对象模型中表示。 动态逻辑模型描述对象之间的互相作用。互相作用通过一组协同的对象,对象之间消 息的有序的序列,参与对象的可见性定义,来定义系统运行时的行为。 静态物理模型通过模块描述代码的布局。动态物理模型描述软件的进程和线程体系结 构。 习五答案 一、选择 1. 下列不是模型元素的是(D)。 A) 关联 B) 聚合 C) 依赖 D) 笔记 2. UML具有扩展性,常见的扩展机制有(BCD)。 A) 修饰 B) 版类 C) 加标签值 D) 约束 3. UML语言支持的建模方式有(ABD)。 A) 静态建模 B) 动态建模 C) 模块化建模 D) 功能建模 4. 下列各种图可用于动态建模的有(ACD)。 A) 状态图 B) 类图 C) 序列图 D) 活动图 5. 下列属于状态的组成部分的有(AB)。 A) 名称 B) 活动 C) 条件 D) 事件 6. UML中包括的事件有(ABCD)。 A) 条件为真 B) 收到另一对象的信号 C) 收到操作调用 D) 时间表达式 7. 属性的可见性有(ABD)。 A) 公有的 B) 私有的 C) 私有保护的 D) 保护的 8. 用例之间的关系有(BCD)。 A) 友元 B) 扩展 C) 使用 D) 组合 9. 应用于通用化约束的方式有(ABCD)。 A) 完整 B) 不相交 C) 不完整 D) 覆盖 10. 消息的类型有(ABC)。 A) 同步 B) 异步 C) 简单 D) 复杂 二、 判断 1. UML建模语言是由视图、图、模型元素和通用机制构成的层次关系来描述的。 (√) 2. UML是一种建模语言,是一种标准的表示,是一种方法。 (×) 3. 泳道是一种分组机制,它描述了状态图中对象所执行的活动。 (×) 4. 同步消息和异步消息的主要区别是:同步消息的发送对象在消息发送后,不必等待消息处理,可立即继续执行,而异步消息则发送对象必须等待接收对象完成消息处理后,才能继续执行。 (×) 5. 类图中的角色是用于描述该类在关联中所扮演的角色和职责的。 (√) 6. 类图用来表示系统中类和类与类之间的关系,它是对系统动态结构的描述。 (×) 7. 用例模型的基本组成部件是用例、角色和用例之间的联系。 (√)
第四届“蓝桥杯”全国软件专业人才设计与创业大赛选拔赛 C/C++高职高专组 1、目标: 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说: “我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。” 请你推算一下,他当时到底有多年轻。 通过浏览器,直接提交他那时的年龄数字。    注意:不要提交解答过程,或其它的说明文字。                     2、标: 马虎的算式             小明是个急性子,上小学的时候经常把老师写在黑板上的目抄错了。         有一次,老师出的目是:36 x 495 = ?         他却给抄成了:396 x 45 = ?         但结果却很戏剧性,他的答案竟然是对的!!         因为 36 * 495 = 396 * 45 = 17820         类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54         假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)         能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?            请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。        满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。            答案直接通过浏览器提交。    注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。         3、标: 振兴中华         小明参加了学校的趣味运动会,其中的一个项目是:跳格子。         地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg)        从 我 起 振    我 起 振 兴     起 振 兴 中    起 振 兴 中 华             比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。             要求跳过的路线刚好构成“从我起振兴中华”这句话。         请你帮助小明算一算他一共有多少种可能的跳跃路线呢?        答案是一个整数,请通过浏览器直接提交该数字。    注意:不要提交解答过程,或其它辅助说明类的内容。    a=从    b=我    c=    d=起    e=振    f=兴    g=中    h=华                     4、标: 幻方填空         幻方是把一些数字填写在方阵中,使得行、列、两条对角线的数字之和都相等。         欧洲最著名的幻方是德国数学家、画家迪勒创作的版画《忧郁》中给出的一个4阶幻方。         他把1,2,3,...16 这16个数字填写在4 x 4的方格中。         如图p1.jpg所示,即:        16 ? ? 13    ? ? 11 ?    9 ? ? *    ? 15 ? 1         表中有些数字已经显露出来,还有些用?和*代替。         请你计算出? 和 * 所代表的数字。并把 * 所代表的数字作为本答案提交。            答案是一个整数,请通过浏览器直接提交该数字。    注意:不要提交解答过程,或其它辅助说明类的内容。         5、目标:公约数公倍数         我们经常会用到求两个整数的最大公约数和最小公倍数的功能。         下面的程序给出了一种算法。         函数 myfunc 接受两个正整数a,b         经过运算后打印出 它们的最大公约数和最小公倍数。         此时,调用 myfunc(15,20)        将会输出:    3    60        // 交换数值    void swap(int *a,int *b)    {     int temp;     temp=*a;     *a=*b;     *b=temp;    }        void myfunc(int a, int b)    {     int m,n,r;     if(a题:三部排序         一般的排序有许多经典算法,如快速排序、希尔排序等。         但实际应用时,经常会或多或少有一些特殊的要求。我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。         比如,对一个整型数组中的数字进行分类排序:         使得负数都靠左端,正数都靠右端,0在中部。注意问的特点是:负数区域和正数区域内并不要求有序。可以利用这个特点通过1次线性扫描就结束战斗!!         以下的程序实现了该目标。         其中x指向待排序的整型数组,len是数组的长度。        void sort3p(int* x, int len)    {     int p = 0;     int left = 0;     int right = len-1;         while(p<=right){     if(x[p]<0){     int t = x[left];     x[left] = x[p];     x[p] = t;     left++;     p++;     }     else if(x[p]>0){     int t = x[right];     x[right] = x[p];     x[p] = t;     right--;     }     else{     __________________________; //填空位置     }     }        }         如果给定数组:     25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0     0 ,18,-2,0,16,-5,33,21,0,19,-16,25,-3,25         则排序后为:     -3,-2,-16,-5,0,0,0,21,19,33,25,16,18,25                请分析代码逻辑,并推测划线处的代码,通过网页提交    注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!         7、标:核桃的数量         小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:         1. 各组的核桃数量必须相同     2. 各组内必须能平分核桃(当然是不能打碎的)     3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛)        程序从标准输入读入:    a b c    a,b,c都是正整数,表示每个组正在加班的人数,用空格分开(a,b,c<30)        程序输出:    一个正整数,表示每袋核桃的数量。        例如:    用户输入:    2 4 5        程序输出:    20        再例如:    用户输入:    3 1 1        程序输出:    3                资源约定:    峰值内存消耗(含虚拟机) < 64M    CPU消耗 < 1000ms            请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。        所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。        注意: main函数需要返回0    注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。    注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。        提交时,注意选择所期望的编译器类型。         8、目标:打印十字图         小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)         $$$$$$$$$$$$$     $ $     $$$ $$$$$$$$$ $$$     $ $ $ $     $ $$$ $$$$$ $$$ $     $ $ $ $ $ $     $ $ $$$ $ $$$ $ $     $ $ $ $ $ $ $     $ $ $ $$$$$ $ $ $     $ $ $ $ $ $ $     $ $ $$$ $ $$$ $ $     $ $ $ $ $ $     $ $$$ $$$$$ $$$ $     $ $ $ $     $$$ $$$$$$$$$ $$$     $ $     $$$$$$$$$$$$$             对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。         为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。        输入格式:    一个正整数 n (n<30) 表示要求打印图形的层数        输出:    对应包围层数的该标志。        例如:    用户输入:    1    程序应该输出:    ..$$$$$..    ..$...$..    $$$.$.$$$    $...$...$    $.$$$$$.$    $...$...$    $$$.$.$$$    ..$...$..    ..$$$$$..        再例如:    用户输入:    3    程序应该输出:    ..$$$$$$$$$$$$$..    ..$...........$..    $$$.$$$$$$$$$.$$$    $...$.......$...$    $.$$$.$$$$$.$$$.$    $.$...$...$...$.$    $.$.$$$.$.$$$.$.$    $.$.$...$...$.$.$    $.$.$.$$$$$.$.$.$    $.$.$...$...$.$.$    $.$.$$$.$.$$$.$.$    $.$...$...$...$.$    $.$$$.$$$$$.$$$.$    $...$.......$...$    $$$.$$$$$$$$$.$$$    ..$...........$..    ..$$$$$$$$$$$$$..        请仔细观察样例,尤其要注意句点的数量和输出位置。            资源约定:    峰值内存消耗 < 64M    CPU消耗 < 1000ms            请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。        所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。        注意: main函数需要返回0    注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。    注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。        提交时,注意选择所期望的编译器类型。                 9、标:带分数         100 可以表示为带分数的形式:100 = 3 + 69258 / 714         还可以表示为:100 = 82 + 3546 / 197         注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。         类似这样的带分数,100 有 11 种表示法。        目要求:    从标准输入读入一个正整数N (N<1000*1000)    程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。    注意:不要求输出每个表示,只统计有多少表示法!            例如:    用户输入:    100    程序输出:    11        再例如:    用户输入:    105    程序输出:    6            资源约定:    峰值内存消耗 < 64M    CPU消耗 < 3000ms            请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。        所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。        注意: main函数需要返回0    注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。    注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。        提交时,注意选择所期望的编译器类型。                 10、标:剪格子         如图p1.jpg所示,3 x 3 的格子中填写了一些整数。         我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60。         本的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。     如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。     如果无法分割,则输出 0        程序输入输出格式要求:        程序先读入两个整数 m n 用空格分割 (m,n<10)    表示表格的宽度和高度    接下来是n行,每行m个正整数,用空格分开。每个整数不大于10000    程序输出:在所有解中,包含左上角的分割区可能包含的最小的格子数目。            例如:    用户输入:    3 3    10 1 52    20 30 1    1 2 3        则程序输出:    3        再例如:    用户输入:    4 3    1 1 1 1    1 30 80 2    1 1 1 100        则程序输出:    10        (参见p2.jpg)            资源约定:    峰值内存消耗 < 64M    CPU消耗 < 5000ms            请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。        所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。        注意: main函数需要返回0    注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。    注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。        提交时,注意选择所期望的编译器类型。            
数学建模优秀论文 本节主要讲解数学建模竞赛应该如何准备以及分工的问。很多新来的学生 都会问我这个问,数学建模好难、我不会建模、我数学底子很差。其实,我觉 得由于从小学到高中的教育,很容易把数学建模等同于数学竞赛。这两者其实真 的天差地别,如果说数学竞赛更多的是一种智力的比拼,那么数学建模更多的是 一共系统与工程协调的比拼。粗俗点说,前者就是,后者则是科研。 数学建模主要分为三个方向,建模,编程,以及写作。我们通常看到数学建 模证书上面有三个人的名字 xxx,xxx,xxx。如果按照传统思想排队,一般第一 个人负责建模,第二个人负责编程,第三个人负责写作。其实三个人在队伍中的 地位是平等的,所以国奖证书很人性化地把大家的名字都排在自己队伍的第一位。 下面具体说说建模、编程以及写作。 建模主要是需要构建出一个数学模型,这个模型可以是一组方程,可以是一 个可操作的框架,也可以是一个函数。总而言之,能用数学解决问的一种抽象 方法,就是数学模型。我们高中学的物理,在解物理的过程,其实就是数学建 模的过程。比如 2016 年国赛 A 的第一问,只要用到高中物理的正交分解法, 列出水平方向以及竖直方向的精力平衡,即可解决该问。我想,大家都是考上 本科的人了,最基础的物理还是会的吧?所以对于建模的同学来说,并不要求你 的数学功底有多么的好,但是需要你在培训或者自学期间,多涉猎一些模型(不 求计算或者推导,只求能有一定的印象,只要这个模型应该用在什么地方即可。) 这样,到了真正比赛的时候,想到用什么方法,结合网络等资源便可以迅速学习 出相关的模型理论,经过自己的一定创新,便可以较好地解决所需要完成的任务。 编程这一块是韩同学的强项。我只谈谈作为建模为主,但是要懂一些编程的 人应该达到的编程水平。严格来说,写 MATLAB 代码还不到完全脱离书本的水 平。但是我已经具备了看到一大段代码,自己对其中的部分语句进行修改,为我 所用,实现自己想要的功能。对于建模比赛来说,达到这种水平一般来说是够用 了,只要在编程同学写程序的时候,建模的同学可以检查 MATLAB 代码是否符合 数学模型的要求,而不是单纯的代码堆积。如果是计算机或者软件方向的学生, 那么就尽可能地多学习 MATLAB 有关知识,能够自己独立写出代码并且调试错误 那么是再好不过的了。 写作这一块是专门为文科生或者女生准备的福利,其实不管你的模型多么华 丽,不管你的程序复杂度多么地低,如果无法形成一篇语句流畅,图文并茂的论 文出来。你还是只有拿成功参赛奖的命。如果说建模与编程的同学决定了获奖的 11 上限,那么写作的同学则决定了获奖的下限。一篇排版以及语句优秀的论文,可 以让评委老师眼前一亮,迅速获得好评。在国赛中,由于不放心论文,所以两次 论文写作均是我个人操刀,其实两次论文都存在一定的遗憾。如果有一位细心的 女同学可以帮助另外两名队友写作并且细心排版,那么论文的水平将会更上一层 楼。同时,我希望写作的队员不要完全不顾数学,在比赛期间,还是应该或多或 少知道一些建模以及编程人的思路,即使提不出什么意见,也有助于清晰写作的 框架。 上面为不同方向的队员应该是怎样的以及如何准备。而且我建议三名小组成 员最好是从大一一直打到大四的比赛,只有磨合默契的队友,才更有希望冲击国 奖甚至国一。 四、 数学建模竞赛比赛技巧 既然这是谈建模竞赛,那么我还是需要谈一谈应试技巧的话,对于代或 者直接抄袭他人作品的行为我是十分反对的(不能以身试法,否则不仅损害个人 名誉,损害学弟学妹参赛资格,更加损害学校的声誉)。 1.选机灵点,在选前,建议先上知网等学术网站对相关话进行查找, 如果相关文献较多,那么则更容易从中获得灵感,建立出属于自己的模 型(如果用到了里面的公式或者模型,一定要引用)。不过这种法存在 一个缺点,就是你这么想,难道别人不会这么想么?所以,最终大家的 论文虽然都是各自独立完成的,但是很容易出现结果差不多,图表差不 多,甚至模型差不多的情况。因此,这样很难分出优劣,对于拿国奖来 说,并不是十分有利。(一般国赛 A 多为这种情况,如果想通过原创冲 击国奖,那么更应该选择可塑性高的问,如 B )。 2.如要冲击国奖最好选择可塑性高的,一般每年国赛的 B ,都是方案 类问,即使你在知网或者其他网站上找到相似的文献,但是仔细一看, 往往都是失望而归。因为 B 一般都是热点问:比如去年的互联网+打 车和今年的小区道路改造问,都是以往不曾出现过的。所以,如果 B 你可以挖掘出别人挖掘不到的信息,并且建立出一个较为新颖的模型, 那么国一就是你的了。 3.一定要把第一对(不对也要给出一个结果)!一定要写一篇较为完 整、格式较为清晰(哪怕只了一问,也有文章)的论文。如果可以达 到上述要求,那么不论是什么建模比赛,奖状都有你的一份了。。。。但是 很遗憾,每年不管什么类型的比赛,很多同学连这一条也无法达到,所 以同学们应该反思自己,为什么拿不到奖了。 4.对于得不出较为理想的值,则应该从现在所的所有工作中选一个数据 出来作为答案,并且附上理由。千万不要无端造出程序无法实现的答案 出来,如果万一进了国奖答辩,评委问你这个数据怎么得出来的,你总 不可以说是猜出来的吧? 5.每一次比赛,都认真,不要总想着还有下一次的比赛可以好每 一次的比赛,都是一次不错的锻炼。 6.写作的同学可以参考往届优秀论文,尤其以广西赛区的优秀论文为主, 学习他人的写作方式,这样可以让自己的论文风格,论文框架,论文排 版均接近国奖论文的素养。 12 7.编程的同学如果想使用他人的程序时,不妨学会其思想,自己设计新算 法并且实现功能。而且对于复杂的程序,最好在论文中附上一个程序框 图,方便评委老师理解。 8.建模的同学应该多多涉猎不同的文献,中文的,外文的最好都阅读以下, 然后自己在草稿纸上画一些思维导图,对这些文献之间的关系进行一定 的梳理,然后结合本问分析,看看什么地方需要修改,什么地方需要 精简,什么地方需要补充等等。而且,建模的同学一定要尽量把模型程 序化,用一些编程同学听得懂的话进行沟通。比如我把今年 A 第一问 从物理受力问变成了迭代求解,这样编程的同学则会舒服很多 数学建模参考的书目以及网站 书籍 1.《 数学模型》姜启源等著 阅读人群:建模 这本书虽然被奉为数学建模最经典的入门书,但是我本人并不是十分喜欢。 第一,这本书的模型比较杂,而且可操作性较差。意思就是说,告诉你了理论, 你很难再实践中自己去操作。而且很多模型较为基础,对于短期内学习达到国赛 的强度难度较大,因此适合作为一本辅助参考性读物进行学习。如果,你要一个 字一个字读下去,会发现到头来还是什么都不太会(除了暑期培训的时候阅读过, 之后再也没有使用过了) 。 2.《数学建模算法与应用》司守奎等 阅读人群:建模、编程 是我最为推崇的书:《数学建模算法与应用》。这本书是司守奎老师写的新书, 司老师是数模一线教练,经常培养出国一国二。因此他的书与国赛风味十分贴近, 很多问都是取自国赛原,而且附上了所有程序的源代码,那本书中的光盘则 收入了所有程序的 m 文件(MATLAB 的源文件),实属业界良心(都省去了你抄源 代码的时间)。所以,这本书是可以用来临时抱佛脚的,如果你的目标就是在省 赛区取得一定的名次,那么这本书真的足够你用了(基本上每次比赛,我首先查 阅的必定是这本书)。 3.《数学建模》Frank R. Giordano 等著 叶其孝等译 阅读人群:建模 这本书是美赛负责人写的书,实际上我阅读这本书也觉得没有多大的意思, 和姜启源那本数学模型类似,不适合一页页阅读,更加适合提高建模的修养,但 是不适合用来准备数学建模国赛或者美赛。所以,如果你想要参加美赛,那么建 议你还是稍微看看,毕竟是美赛指定的参考书。 4.《 MATLAB 在数学建模中的应用》卓金武等著 阅读人群:编程 这本书和司守奎老师的那本书风格有点接近,例基本选于国赛赛,但是 这本书对于模型的介绍较少,主要都是给出 MATLAB 代码,每一章最后都有延伸 阅读,因此对于 MATLAB 感兴趣的同学可以将这本以及下一本作为入门参考书。 5. 《MATLAB R2014a 完全自学一本通》刘浩等著 阅读人群:编程 这本书是一本 MATLAB 工具书,并不完全针对数学建模,但是很多 MATLAB 使 用的小技巧都来自于这本书,比如今年我们画的锚链形状图,均来自这本书的灵 感。 6.《 20XX 年全国大学生数学建模竞赛广西赛区经验交流及优秀论文选》吕跃进 著 阅读人群:写作(最为重要)建模(参考) 编程(参考) 13 作为广西赛区优秀论文集,写作的同学尤其需要注意,广西赛区的优秀论文 都是长什么样子的?我们不需要先想着和其他赛区的人比,先学习自己赛区的人 的论文,可以让自己的起步稍微简单一些。XX 的意思就是某某年,一般从 20102015 年的左右参考下即可。 7.《全国各赛区优秀论文》 阅读人群:写作 建模 编程 当你学有余力时,不妨多看看其他省份优秀论文,找找差距,找到一个提高 建模水平的方向。 8.《正确写作美国大学生数学建模竞赛论文》&《美国大学生数学建模竞赛解 析与研究》 王杰等著 阅读人群:建模 写作 这两本书作为美赛官方读物,非常适合美赛冲刺前 2 个月阅读,由于这套书 并没有给出源程序,因此只有写作以及建模的同学进行参考。尤其是《正确写作 美国大学生数学建模竞赛论文》这本书,非常适合写作的同学学习,其中有一些 写作习惯甚至可以用于国赛的写作中去。这本书还有一个特色就是讲解了部分有 关使用 LaTeX 的知识。 9.《 SPSS 统计分析基础教程》&《SPSS 统计分析高级教程》张文彤等著 阅读人 群:编程 这两本书手把手地教你如何使用 SPSS 分析数据,加上 SPSS 本身“傻瓜式” 设计,因此配合这两本书进行一定的学习足够了。 10.《 Origin9.1 科技绘图与数据分析》叶卫平著 阅读人群:编程 建模 如果在短时间之内学会一个软件并且可以进行比赛,那么 Origin 绝对是一 个利器。基本上涉及绘图的问,大多数 MATLAB 可以完成的,它也可以完成。 几乎与 SPSS 一样的“傻瓜式”设计,非常适合初学者学习掌握。所以我认为建 模的同学多学一个绘图的软件也没有什么不好的(我们美赛的灵感出自这本书) 。 上面 10 本书希望绝大多数同学都可以涉猎一二,即使是枯燥的数学模型那 本书,最好也稍微看看,好歹有一些印象。而司老师那本书,我则希望人手一本。 下面的书籍由于时间成本还有与建模的关系不是那么紧密,所以参考即可。 11.《 SAS 统计分析实用宝典》 姚鑫峰等著 阅读人群:编程 作为最为专业统计软件 SAS,对于处理大数据问的时候,是当仁不让的王 者,连 MATLAB 都要为其让路。如果你十分热衷于大数据的问,还有想参加“汇 丰杯”SAS 数据分析大赛的同学,或者参加阿里巴巴天池大数据竞赛的同学不妨 以这本书作为基础,学习 SAS 吧。 12.《 R 语言实战》Robert I. Kabacoff 著 高涛译 阅读人群:编程 作为 SAS 的姊妹,R 语言作为免费开源的数据分析软件同样大受欢迎,如果 你不喜欢昂贵的 SAS,那么投入 R 的怀抱也不错。 13.《物理学原理在工程技术中的应用》马文蔚等著 阅读人群:建模(尤其喜欢 A 的同学) 本来是不太想把物理类的专业书引入到数学建模竞赛中来,无奈自从 2014 年开始,每年国赛 A 的问都是物理问(可以认为是纯物理问),2014 年, 卫星变轨问(万有引力与航天)。2015 年,利用杆子的太阳影子定位(球面天 文学与地球物理学)2016 年,系泊系统的设计(力平衡与力矩平衡) 。所以天知 道 2017 年 A 会出什么样奇怪的问。这本书有助于大家对于物理在工程上的 应用有一定的认识,以作为知识储备。 14. 《MATLAB 神经网络 43 个案例分析》 王小川等著 阅读人群:编程 最近几年比赛中,智能算法越来越多地出现在本科生的比赛中了,如果你想 14 在国赛或者美赛中使用一些新鲜的算法,那么还是学习这本书中的一些案例吧。 这本书的源程序全部都给你了,只需要对着程序一步步推敲,一定可以学到一些 知识(我们“好贷杯”模型的灵感出自这本书)。 15. 《机器学习》周志华著 阅读人群:建模 由于这个领域现在属于热门领域,因此数模的很大一部分未来的研究方向皆 在于此。我本人对于这个领域也处于学习当中。当然,你想要看懂这本书,还是 先学好概率论与数理统计,线性代数,和部分微积分的知识吧。 网站 1.数学中国论坛:www.madio.net 作为中国最大的数模论坛网站,你可以找到很多奇奇怪怪的数模资料,当然 我还是劝你先学好上面 10 本书之内的东西,因为其实一个人的精力并没有那 么多。 (实际上,我参加数学中国的比赛,很少用体力去上面下载什么资料) 。 2.LaTeX 中国区论坛:www.ctex.org 你想知道的 LaTeX 资料,上面都有。 3.中国知网:www.cnki.net 维普:www.cpvip.com 万方:www.wanfang.com.cn 这三家为中国主流的文献数据库,基本上大多数中文期刊可以找到。 4.由于 Google 学术在中国区无法使用,因此只能使用 Bing 学术搜索外文文献 了:http://cn.bing.com/academic 5.赛氪网:www.saikr.com 作为 APMCM 和 Mathorcup 的主办方,赛氪还是其他很多比赛的报名渠道。不 经意间往往可以发现更多适合自己的竞赛。 6.COMAP:www.comap.com 美赛官方网站,由于美赛是一个只发放电子证书的比赛,因此了解他家官网 还是很有必要的。 7.阿里巴巴天池大数据竞赛:http://tianchi.shuju.aliyun.com 作为数模后续竞赛,对于大三或者大四等高年级的同学,欢迎转战更加具有 实用性质的数据分析竞赛。 8.MATLAB 中文论坛:http://www.ilovematlab.cn 有啥问就丢上去问就行了。 9.人大经济论坛:http://bbs.pinggu.org/ SAS,SPSS 等统计类的问,在这个论坛上找出相关的目录,进去发问就好了。 这个论坛是我国经管类最好的论坛。
《数据结构 1800》 第一章 绪论 一、选择 1. 算法的计算量的大小称为计算的(B )。【北京邮电大学2000 二、3 (20/8分)】 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于(C )【中科院计算所 1998 二、1 (2分)】 A.问的规模 B. 待处理数据的初态 C. A和 B 3.计算机算法指的是(C),它必须具备(B) 这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性 C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 【南京理工大学 1999 一、1(2分) 【武汉交通科技大学 1996 一、1( 4分)】 4.一个算法应该是( B )。【中山大学 1998 二、1(2分)】 A.程序 B.问求解步骤的描述 C.要满足五个基本特性 D.A和 C. 5. 下面关于算法说法错误的是(D )【南京理工大学 2000 一、1(1.5分)】 A.算法最终必须由计算机程序实现 B.为解决某问的算法同为该问编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是(C )【南京理工大学 2000 一、2 (1.5分)】 (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模 n下,复杂度O(n)的算法在时间上总是优于复杂度 O(2 n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为(C )两大类。【武汉交通科技大学 1996 一 、4(2分)】 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 8.以下与数据的存储结构无关的术语是(D )。【北方交通大学 2000 二、1(2分)】 A.循环队列 B. 链表 C. 哈希表 D. 栈 9.以下数据结构中,哪一个是线性结构(D)?【北方交通大学 2001 一、1(2分)】 A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 10.以下那一个术语与数据的存储结构无关?(A )【北方交通大学 2001 一、2(2分)】 A.栈 B. 哈希表 C. 线索树 D. 双向链表 11.在下面的程序段中,对 x的赋值语句的频度为(C )【北京工商大学 2001 一、10(3分)】 FOR i:=1 TO n DO FOR j:=1 TO n DO x:=x+1; A. O(2n) B.O(n) C.O(n2) D.O(log2n) 12.程序段 FOR i:=n-1 DOWNTO 1 DO FOR j:=1 TO i DO IF A[j]>A[j+1] THEN A[j]与A[j+1]对换; 其中 n为正整数,则最后一行的语句频度在最坏情况下是(D ) 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 A. O(n) B. O(nlogn) C. O(n3) D. O(n2) 【南京理工大学 1998一、1(2分)】 13.以下哪个数据结构不是多型数据类型(D )【中山大学 1999 一、3(1分)】 A.栈 B.广义表 C.有向图 D.字符串 14.以下数据结构中,(A )是非线性数据结构【中山大学 1999 一、4】 A.树 B.字符串 C.队 D.栈 15. 下列数据中,(C )是非线性数据结构。【北京理工大学 2001 六、1(2分)】 A.栈 B. 队列 C. 完全二叉树 D. 堆 16.连续存储设计时,存储单元的地址(A )。【中山大学 1999 一、1(1分)】 A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续 17.以下属于逻辑结构的是(C )。【西安电子科技大学应用 2001一、1】 A.顺序表 B. 哈希表 C.有序表 D. 单链表 二、判断 1. 数据元素是数据的最小单位。( ) 【北京邮电大学 1998 一、1(2分)】【青岛大学 2000 一、1 (1分)】 【上海交通大学 1998 一、1】 【山东师范大学 2001 一、1 (2分)】 2. 记录是数据处理的最小单位。 ( ) 【上海海运学院 1998 一、5(1分)】 3. 数据的逻辑结构是指数据的各数据项之间的逻辑关系;( )【北京邮电大学2002 一、1(1分)】 4.算法的优劣与算法描述语言无关,但与所用计算机有关。( )【大连海事大学 2001 一、10(1分)】 5.健壮的算法不会因非法的输入数据而出现莫名其妙的状态。( )【大连海事大学 2001 一、11(1分)】 6.算法可以用不同的语言描述,如果用C 语言或 PASCAL语言等高级语言来描述,则算法实际上就是程序 了。( )【西安交通大学 1996 二、7(3分)】 7.程序一定是算法。( )【燕山大学 1998 二、2(2分)并改错】 8.数据的物理结构是指数据在计算机内的实际存储形式。( )【山东师范大学2001 一、2(2分)】 9. 数据结构的抽象操作的定义与具体实现有关。( )【华南理工大学 2002 一、1(1分)】 10. 在顺序存储结构中,有时也存储数据结构中元素之间的关系。( )【华南理工大学 2002 一、2 (1分)】 11. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( )【上海海运学院 1999 一、1(1分)】 12. 数据结构的基本操作的设置的最重要的准则是,实现应用程序与存储结构的独立。( ) 【华南理工大学 2002 一、5(1分)】 13. 数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的储存结构. ( ) 【上海海运学院 1998 一、1(1分)】 三、填空 1.数据的物理结构包括(数据元素) 的表示和(数据元素间的关系) 的表示。【燕山大学 1998 一、1(2分)】 2. 对于给定的 n个元素,可以构造出的逻辑结构有 (1)集合 , (2)线性结构 , (3)树型结构 ,_图状结构_(4)_四种。 【中科院计算所 1999 二、1(4分)】 3.数据的逻辑结构是指(数据的组织形式,即数据元素之间逻辑关系的总体。而逻辑关系是指数据元素之间的关联方式或称) 。【北京邮电大学 2001 二、1(2分)】 4.一个数据结构在计算机中(表示) 称为存储结构。【华中理工大学 2000 一、1(1分)】 5.抽象数据类型的定义仅取决于它的一组__(1)_,而与_(2)_无关,即不论其内部结构如何变化,只要它的_(3)_不变,都不影响其外部使用。【山东大学 2001 三、3(2分)】 6.数据结构中评价算法的两个重要指标是(时间复杂度和空间复杂度) 【北京理工大学 2001 七、1(2分)】 7. 数据结构是研讨数据的_(1)物理结构_和_(2)逻辑结构 _,以及它们之间的相互关系,并对与这种结构定义相应的_操作(3)_,设计出相应的(4)算法_。【西安电子科技大学 1998 二、2(3分)】 8. 一个算法具有 5个特性: (1)有穷性 、 (2)确定性 、 (3)可行性 ,有零个或多个输入、有一个或多个输出。 《数据结构 1800》 9.已知如下程序段 FOR i:= n DOWNTO 1 DO {语句 1} BEGIN x:=x+1; {语句 2} FOR j:=n DOWNTO i DO {语句 3} y:=y+1; {语句 4} END; 语句1执行的频度为 (1);语句2执行的频度为 (2);语句3执行的频度为 (3);语句4执 行的频度为 (4) 。【北方交通大学 1999 二、4(5分)】 10.在下面的程序段中,对x的赋值语句的频度为__t(n)=O(n3)____(表示为 n的函数) FOR i:=1 TO n DO FOR j:=1 TO i DO FOR k:=1 TO j DO x:=x+delta; 【北京工业大学 1999 一、6(2分)】 11.下面程序段中带下划线的语句的执行次数的数量级是:【合肥工业大学 1999三、1(2分)】 i:=1; WHILE i下面程序段中带下划线的语句的执行次数的数量级是( )。【合肥工业大学 2000 三、1(2分)】 i:=1; WHILE i下面程序段中带有下划线的语句的执行次数的数量级是( ) 【合肥工业大学 2001 三、1(2分)】 i:=n*n WHILE i1 DO i:=i div 2; 14. 计算机执行下面的语句时,语句 s的执行次数为 _______ 。【南京理工大学 2000二、1(1.5分)】 FOR(i=l;i=i;j--) s; 15. 下面程序段的时间复杂度为________。(n>1) sum=1; for (i=0;sum题》 } ②执行程序,f(6,4)= 。 【中科院软件所 1997 二、1 (9分)】 17. 在有 n个选手参加的单循环赛中,总共将进行______场比赛。【合肥工业大学 1999三、8(2分)】 四、应用 1. 数据结构是一门研究什么内容的学科?【燕山大学 1999 二、1 (4分)】 2. 数据元素之间的关系在计算机中有几种表示方法?各有什么特点?【燕山大学1999 二、2(4分)】 3. 数据类型和抽象数据类型是如何定义的。二者有何相同和不同之处,抽象数据类型的主要特点是什么? 使用抽象数据类型的主要好处是什么?【北京邮电大学 1994 一(8分)】 4. 回答问(每 2分)【山东工业大学 1997 一 (8分)】 (1)在数据结构课程中,数据的逻辑结构,数据的存储结构及数据的运算之间存在着怎样的关系? (2)若逻辑结构相同但存储结构不同,则为不同的数据结构。这样的说法对吗?举例说明之。 (3)在给定的逻辑结构及其存储表示上可以定义不同的运算集合,从而得到不同的数据结构。这样说 法对吗?举例说明之。 (4)评价各种不同数据结构的标准是什么? 5.评价一个好的算法,您是从哪几方面来考虑的? 【大连海事大学 1996 二、3 (2分)】【中山大学 1998 三、1 (5分)】 6.解释和比较以下各组概念【华南师范大学 2000 一(10分)】 (1)抽象数据类型及数据类型 (2)数据结构、逻辑结构、存储结构 (3)抽象数据类型【哈尔滨工业大学 2000 一、1(3分)】 (4)算法的时间复杂性 【河海大学 1998 一、2(3分)】 (5)算法【吉林工业大学 1999 一、1(2分)】 (6)频度【吉林工业大学 1999 一、2(2分)】 7. 根据数据元素之间的逻辑关系,一般有哪几类基本的数据结构? 【北京科技大学 1998 一、1】【同济大学 1998】 8.对于一个数据结构,一般包括哪三个方面的讨论?【北京科技大学 1999 一、1(2分)】 9. 当你为解决某一问而选择数据结构时,应从哪些方面考虑?【西安电子北京科技大学 2000】 10. 若将数据结构定义为一个二元组(D,R),说明符号D,R 应分别表示什么? 【北京科技大学 2001 一、1(2分)】 11.数据结构与数据类型有什么区别?【哈尔滨工业大学 2001 三、1(3分)】 12.数据的存储结构由哪四种基本的存储方法实现?【山东科技大学 2001 一、1(4分)】 13.若有 100个学生,每个学生有学号,姓名,平均成绩,采用什么样的数据结构最方便,写出这些结构? 【山东师范大学 1996 二、2(2分)】 14. 运算是数据结构的一个重要方面。试举一例,说明两个数据结构的逻辑结构和存储方式完全相同,只 是对于运算的定义不同。因而两个结构具有显著不同的特性,是两个不同的结构。 【北京大学 1998一、1(5分)】 15. 在编制管理通讯录的程序时, 什么样的数据结构合适? 为什么?【 长沙铁道学院 1998四、3(6分)】 16. 试举一例,说明对相同的逻辑结构,同一种运算在不同的存储方式下实现,其运算效率不同。 【北京理工大学 2000 三、1(4.5分)】 17. 有实现同一功能的两个算法A1和A2,其中A1的时间复杂度为Tl=O(2 n),A2的时间复杂度为T2=O(n 2), 仅就时间复杂度而言,请具体分析这两个算法哪一个好。【北京航空航天大学 2000 二(10分)】 18.设计一数据结构,用来表示某一银行储户的基本信息: 账号、姓名、开户年月日、储蓄类型、存入 累加数、利息、帐面总数。【浙江大学 1994 一 、3(5分)】 19. 写出下面算法中带标号语句的频度。 4 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 TYPE ar=ARRAY[1..n] OF datatype; PROCEDURE perm ( a: ar; k, n: integer); VAR x: datatype; i:integer; BEGIN (1)IF k=n THEN BEGIN (2)FOR i:=1 TO n DO (3)write (a[i]); writeln; END ELSE BEGIN (4) FOR i:=k TO n DO (5)a[i]:=a[i]+i*i; (6) perm (a, k+1, n); END; END; 设 k的初值等于1。 【北京邮电大学 1997二(10分)】 20. 分析下面程序段中循环语句的执行次数。 i:=0;s:=0;n:=100; REPEAT i:=i+1; s:=s+10*i; UNTIL NOT((i题》 WHILE p^.nextq DO p:=p^.next; p^.next:=s; END;(of B) BEGIN B(h,g); B(g,h); END;(of A) 【东南大学 1999 二(10分)】 23. 调用下列 C函数f(n)或 PASACAL函数 f(n) 回答下列问 : (1) 试指出f(n)值的大小,并写出f(n) 值的推导过程; (2) 假定n= 5,试指出f(5)值的大小和执行f(5)时的输出结果 。 C函数: int f(int n) { int i,j,k,sum= 0; for(i=l; ii-1; j--) for(k=1;k0)。 【清华大学 1998 一、4(2分)】 A.表元素 B.字符 C.数据元素 D.数据项 E.信息项 4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(A ) 存储方式最节省时间。【哈尔滨工业大学 2001 二、1(2分)】 A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表 5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( )存储方式最节省运算时间。【南开大学 2000 一、3】 A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表 6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。 A. 单链表 B.单循环链表 C. 带尾指针的单循环链表 D.带头结点的双循环链表 【合肥工业大学 2000 一、1(2分)】 7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用( )存储 方式最节省运算时间。【北京理工大学 2000 一、1(2分)】 A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表 8. 静态链表中指针表示的是( ). 【北京理工大学 2001 六、2(2分)】 A. 内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址 9. 链表不具有的特点是( ) 【福州大学 1998 一、8 (2分)】 A.插入、删除不需要移动元素 B.可随机访问任一元素 C.不必事先估计存储空间 D.所需空间与线性长度成正比 10. 下面的叙述不正确的是( )【南京理工大学 1996 一、10(2分)】 A.线性表在链式存储时,查找第 i个元素的时间同 i的值成正比 B. 线性表在链式存储时,查找第 i个元素的时间同 i的值无关 C. 线性表在顺序存储时,查找第 i个元素的时间同i 的值成正比 D. 线性表在顺序存储时,查找第 i个元素的时间同 i的值无关 11. 线性表的表元存储方式有((1))和链接两种。试指出下列各表中使用的是何种存储方式:表1是((2)) 存储方式;表 2是((3))存储方式;表 3是((4))存储方式;表 4是((5))存储方式。表左的 s指向 起始表元。 表元编号 货号 数量 表元间联系 1 618 40 2 2 205 2 3 3 103 15 4 4 501 20 5 5 781 17 6 6 910 24 0 表1 s→ 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 表元编号 货号 数量 表元间联系 1 618 40 5 2 205 2 1 3 103 15 4 4 501 20 2 5 781 17 6 6 910 24 3 表2 s→ 表元编号 货号 数量 表元间联系 1 618 40 5 2 205 2 1 3 103 15 4 4 501 20 0 5 781 17 6 6 910 24 3 表3 s→ 表元编号 货号 数量 表元间联系 1 2 1 618 40 5 2 2 205 2 1 0 3 103 15 4 6 4 501 20 0 3 5 781 17 6 1 6 910 24 3 5 表4 s→ 供选择的答案: A.连续 B.单向链接 C.双向链接 D.不连接 E.循环链接 F.树状 G.网状 H.随机 I.顺序 J.顺序循环 【上海海运学院 1995 二、1(5分)】 12.(1) 静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第 i个元素的时间与 i 无关。 (2) 静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。 (3) 静态链表与动态链表在元素的插入、删除上类似,不需元素的移动。 以上错误的是( )【南京理工大学 2000 一、3(1.5分)】 A.(1),(2) B.(1) C.(1),(2),(3) D.(2) 13.若长度为 n的线性表采用顺序存储结构,在其第 i个位置插入一个新元素的算法的时间复杂度为 ( )(1<=iLlink=q;q->Rlink=p;p->Llink->Rlink=q;q->Llink=q; B. p->Llink=q;p->Llink->Rlink=q;q->Rlink=p;q->Llink=p->Llink; C. q->Rlink=p;q->Llink=p->Llink;p->Llink->Rlink=q;p->Llink=q; D. q->Llink=p->Llink;q->Rlink=q;p->Llink=q;p->Llink=q; 24.在单链表指针为 p的结点之后插入指针为 s的结点,正确的操作是:( )。 A.p->next=s;s->next=p->next; B. s->next=p->next;p->next=s; C.p->next=s;p->next=s->next; D. p->next=s->next;p->next=s; 【青岛大学 2001 五、3(2分)】 25.对于一个头指针为 head的带头结点的单链表,判定该表为空表的条件是( ) A.head==NULL B.head→next==NULL C.head→next==head D.head!=NULL 【北京工商大学 2001 一、5(3分)】 26. 在双向链表存储结构中,删除 p所指的结点时须修改指针( )。 A. (p^.llink)^.rlink:=p^.rlink (p^.rlink)^.llink:=p^.llink; B. p^.llink:=(p^.llink)^.llink (p^.llink)^.rlink:=p; C. (p^.rlink)^.llink:=p p^.rlink:=(p^.rlink)^.rlink 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 D. p^.rlink:=(p^.llink)^.llink p^.llink:=(p^.rlink)^.rlink; 【西安电子科技大学 1998 一、1(2分)】 27. 双向链表中有两个指针域,llink和 rlink分别指向前趋及后继,设 p指向链表中的一个结点,现要 求删去 p所指结点,则正确的删除是( )(链中结点数大于2,p不是第一个结点) A.p^.llink^.rlink:=p^.llink; p^.llink^.rlink:=p^.rlink; dispose(p); B.dispose(p); p^.llink^.rlink:=p^.llink; p^.llink^,rlink:=p^.rlink; C.p^.llink^.rlink:=p^.llink; dispose(p); p^.llink^.rlink:=p^.rlink; D.以上A,B,C都不对。 【南京理工大学 1997 一、1(2分)】 二、判断 1. 链表中的头结点仅起到标识的作用。( )【南京航空航天大学 1997 一、1(1分)】 2. 顺序存储结构的主要缺点是不利于插入或删除操作。( )【南京航空航天大学1997 一、2(1分)】 3.线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。( ) 【北京邮电大学 1998 一、2(2分)】 4.顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。( ) 【北京邮电大学 2002 一、2(1分)】 5. 对任何数据结构链式存储结构一定优于顺序存储结构。( )【南京航空航天大学 1997 一、3(1分)】 6.顺序存储方式只能用于存储线性结构。( ) 【中科院软件所 1999 六、1-2(2分)】【上海海运学院 1997 一、1(1分)】 7.集合与线性表的区别在于是否按关键字排序。( )【大连海事大学 2001 一、5 ( 1分)】 8. 所谓静态链表就是一直不发生变化的链表。( )【合肥工业大学 2000 二、1(1分)】 9. 线性表的特点是每个元素都有一个前驱和一个后继。( )【合肥工业大学2001 二、1(1分)】 10. 取线性表的第i个元素的时间同i的大小有关. ( )【南京理工大学 1997 二、9(2分)】 11. 循环链表不是线性表. ( )【南京理工大学 1998 二、1(2分)】 12. 线性表只能用顺序存储结构实现。( )【青岛大学 2001 四、2(1分)】 13. 线性表就是顺序存储的表。( )【青岛大学 2002 一、1(1分)】 14.为了很方便的插入和删除数据,可以使用双向链表存放数据。( ) 【上海海运学院 1995 一、1(1分)】 【上海海运学院 1997 一、2(1分)】 15. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( ) 【上海海运学院 1996 一、1(1分)】 【上海海运学院 1999 一、1(1分)】 16.链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高。 ( ) 【上海海运学院 1998 一、2(1分)】 三、填空 1.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元 素时,应采用_______存储结构。【北方交通大学 2001 二、4】 2.线性表 L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要 移动元素的个数是________。【北方交通大学 2001 二、9】 3.设单链表的结点结构为(data,next),next为指针域,已知指针 px指向单链表中 data为 x的结点,指 针 py指向 data为 y的新结点 , 若将结点 y插入结点 x之后,则需要执行以下语句:_______; ______; 【华中理工大学 2000 一、4(2分)】 4.在一个长度为 n的顺序表中第 i个元素(1<=i0 DO 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 BEGIN (2); (3); (4); (5); read(k) END; q^.next:=NIL; END;【北京师范大学 1999 三】 21. 已给如下关于单链表的类型说明: TYPE list=^node ; node=RECORD data: integer; next: list; END; 以下程序采用链表合并的方法,将两个已排序的单链表合并成一个链表而不改变其排序性(升序),这 里两链表的头指针分别为 p和 q. PROCEDURE mergelink(VAR p,q:list): VAR h,r: list; BEGIN (1)______ h^.next:= NIL; r:=h; WHILE((pNIL) AND (qNIL)) DO IF (p^.data<=q^.data) THEN BEGIN (2)___; r:=p; p:=p^.next; END ELSE BEGIN (3)____; r:=q; q:=q^.next; END; IF (p=NIL) THEN r^.next:=q; (4)__; p:=h^.next; dispose(h); END;【厦门大学 2000 三、2 (8分)】 22.假设链表 p和链表q中的结点值都是整数,且按结点值的递增次序链接起来的带表头结点的环形链表。 各链表的表头结点的值为max,且链表中其他结点的值都小于max,在程序中取 max为 9999。在各个链表中, 每个结点的值各不相同,但链表 p和链表 q可能有值相同的结点(表头结点除外)。下面的程序将链表 q 合并到链表 p中,使得合并后的链表是按结点值递增次序链接起来的带表头结点的环形链表,且链表中各 个结点的值各不相同。请在划线处填上适当内容,每个框只填一个语句或一个表达式,链表的结点类型如 下 TYPE nodeptr=^nodetype; nodetype=RECORD data:integer; link:nodeptr; END; CONST max=9999; PROCEDURE merge(VAR p:nodeptr;q:nodeptr); VAR r,s: nodeptr; BEGIN r:=p; WHILE (A)___ DO BEGIN 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 WHILE r^.link^.dataq^.link^.data THEN BEGIN s:=(C)_; (D)_:=s^.link; s^.link:=(E)_; (F)_ _:=s; (G)_; END ELSE BEGIN (H)__; s:=q^.link; (I)__; dispose(s) END END; dispose(q) END;【复旦大学 1997 五(18分)】 23.PROC ins__linklist(la:linkisttp; i:integer; b:elemtp); {la为指向带头结点的单链表的头指针,本算法在表中第 i个元素之前插入元素 b} p:=(1) ; j:=(2) ;{指针初始化,j为计数器} WHILE (pNIL) AND ((3) ) DO [p:=(4) ; j:=j+1;] {寻找第 i-1 个结点} IF (p=NIL) OR ((5) ) THEN error (‘No this position’) ELSE [new(s) ; s↑.data:=b; s↑.next:=p↑.next; p↑.next:=s;] ENDP;{ins-linklist}【燕山大学 1998 四、1(15分)】 24. 已知双链表中结点的类型定义为: TYPE dpointer=^list; list=RECORD data:integer; left,right:dpointer; END; 如下过程将在双链表第 i个结点(i>=0)之后插入一个元素为 x的结点,请在答案栏给出目中______处 应填入的语句或表达式,使之可以实现上述功能。 PROCEDURE insert(VAR head:dpointer;i,x:integer); VAR s,p:dpointer; j: integer; BEGIN new(s); s^.data:=x; IF(i=0)THEN BEGIN s^.right:=head; (1)___ head:=s END{如果i=0,则将 s结点插入到表头后返回} ELSE BEGIN p:=head; (2)_______;{在双链表中查找第 i个结点,由 p所指向} WHILE ((pNIL) AND (j题》 PROC exam21(VAR L:sqlisttp); j:=1; i:=2; WHILE (1)______ DO [ IF L.elem[i]L.elem[j] THEN [ (2)_______; (3)______]; i:=i+1 ] (4) ________; ENDP;【同济大学 2000 二、1 (10分)】 26.在本的程序中,函数过程 Create_link_list(n)建立一个具有 n个结点的环形链表;程序过程 josephus(n,i,m)对由Create_link_list(n)所建立的具有n个结点的环形链表按一定的次序逐个输出并删 除链表中的所有结点,参数 n(n>0)指明环形链表的结点个数,参数 i(1<=i0) 是步长,指明从起始结点或前次被删除并输出的结点之后的第 m个结点作为本次被输出并删除的结点。例 如,对于下图中具有 6个结点的环形链表,在调用 josephus(6,3,2)后,将输出 5,1,3,6,4,2 请在横线 处填上适当内容,每空只填一个语句。 TYPE nodeptr=^nodetype; nodetype=RECORD data: intrger; link: nodeptr END; VAR n,i,m: integer; FUNCTION Create_link_list(n: integer): nodeptr; VAR head,p,q: nodeptr; i:integer; BEGIN head := NIL; IF n>0 THEN BEGIN new(head); p: =head; FOR i:=1 TO n-1 DO BEGIN p^.data:=i; new(q); (A)____; (B)____ END; p^.data:=n; (C)___; END; Creat_link_list:=head END; PROCEDURE josephus(n,i,m:integer); VAR p,q:nodeptr; j:integer; BEGIN p:=Creat_link_list(n); WHILE i>1 DO BEGIN p:=p^.link; i:=i-1 END; (D)___ ; WHILE j题》 BEGIN FOR i:=1 TO m-1 DO p:=p^.link; (E)___; write(q^.data:8); (F)__ ; dispose(q); j:=j+1 END END;【复旦大学 1997 四(12分)】 27.对于给定的线性链表head , 下面的程序过程实现了按结点值非降次序输出链表中的所有结点,在每 次输出一个结点时,就把刚输出的结点从链表中删去。请在划线处填上适当的内容,使之成为一个完整的 程序过程,每个空框只填一个语句。 TYPE nodeptr =^ nodetype; nodetype = RECORD data : integer;link : nodeptr END; VAR head : nodeptr; PROCEDURE sort_output_delete (head : nodeptr); VAR p,q,r,s: nodeptr; BEGIN WHILE head NIL DO BEGIN p:= NIL ;q:= head;r:= q ;s:=q^.link ; WHILE s NIL DO BEGIN IF s^.data < q^.data THEN BEGIN (1)__; (2)___ END ; r:= s ; (3)___ END; write(q^.data : 5) ; IF p=NIL THEN (4)___ ELSE (5)____ ; dispose (q) ; END; writeln END;【复旦大学 1996 七(20分) 1995 一(12分)与本相似】 28.下面函数的功能是在一个按访问频度不增有序的,带头结点的双向链环上检索关键值为 x的结点,对 该结点访问频度计数,并维护该链环有序。若未找到,则插入该结点。所有结点的频度域初值在建表时都 为零。请将程序中四处空缺补写完整。 TYPE link=^node node=RECORD key:char; freq:integer; pre,next:link; END; VAR l:link; FUNCTION loc(l:link;x:char):link; VAR p,q:link; BEGIN p:=l^.next; (1)_; WHILE p^.keyx DO p:=p^.next; IF p=l THEN [ new(q); q^.key:=x; q^.freq:=0 ] ELSE {找到} 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 [ p^.freq:=p^.freq+1; q:=p; (2)______; WHILE q^.freq>p^.pre^.freq DO p:=p^.pre; IF pq THEN [ (3)______ ] ]; IF (4)_ THEN [q^.next:=p, q^.pre;=p^.pre; p^.pre^.next:=q; p^.pre:=q] return(q); END;【北京工业大学 1999 五 (12分)】 29.循环链表 a和b的结点值为字母,其中 a表非递减有序,下面的程序欲构造一个递增有序的循环链表 c,其中结点的值为同时在a,b两链表中出现的字母,且 c中字母不重复,请补上程序中空缺的部分,并 估计算法的时间复杂度。(设a,b的结点数分别为m,n) TYPE link=^node; node=RECORD key:char; next:link END; PROC jj(a,b:link; VAR c:link); VAR p,q,r,s:link; BEGIN new(c);c^.next:=c; q:=a; p:=a^.next; WHILE pa DO [(1)___; WHILE p^.key=p^.next^.key DO [q:=p; p=p^.next];{跳过相同字母} r:=b^.next ; (2)_____; WHILE r^.key p^.key DO r:=r^.next; IF rb THEN [ s:=p; q^.next:=p^.next; (3) ; s^.next:=c^.next; c^.next:=s; c:=s ] ELSE [ q:=p; p:=p^.next ] ]; c:=c^.next; END; 算法时间复杂度为O(4)___ 【北京工业大学 2000 四 (15分)】 30. 以下程序的功能是实现带附加头结点的单链表数据结点逆序连接,请填空完善之。 void reverse(pointer h) /* h为附加头结点指针;类型 pointer同算法设计第 3*/ { pointer p,q; p=h->next; h->next=NULL; while((1)________) {q=p; p=p->next; q->next=h->next; h->next=(2)________; } }【西南交通大学 2000 一、9】 31. 下面是用 c语言编写的对不带头结点的单链表进行就地逆置的算法,该算法用 L返回逆置后的链表的 头指针,试在空缺处填入适当的语句。 void reverse(linklist &L){ p=null;q=L; while(q!=null) 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 { (1) ; q->next=p;p=q;(2)___ ; } (3)_____; }【北京理工大学 2001 九、1 (6分)】 32.下面程序段是逆转单向循环链表的方法,p0 是原链表头指针,逆转后链表头指针仍为 p 0。 (可以根据需要增加标识符) p:= p0; q0:=NIL; WHILE (1)________ DO BEGIN (2)________; (3)________;(4)______;(5)________ END; p^.next:= q0; p0 ^.next:=p; p0:=p;【中国人民大学 2000 二、1(4分)】 33.一个无头结点的线性链表(不循环)有两个域。数据域 data,指针域 next,链首 head,下面算法用 read(num)读入数据,当 num小于 0时,输入结束。建立一个数据以递增序组成的链表。 PROC insert( head, x); {在链首为 head的表中按递增序插入 x} new(r);r^.data:=x; IF head=NIL THEN[ head:=(1) _____; r^.next:= (2)________ ] ELSE IF (3)___ THEN [r^ .next:=head; head:=r] ELSE [p:=head; WHILE (4)___ AND (p^.next≠NIL ) DO[q:=p; (5)___ ]; IF (6)___ THEN [ q^ .next:=(7)___; r^.next:= (8)____; ] ELSE [p^.next:=(9)____; r^.next:= (10)___; ] ] ENDP; PROC creat(head); head:= (11)______; read(num); WHILE num>0 DO [ insert(head,num); read(num) ] ENDP;【南京理工大学 1999 三、4(11分)】 34. 一元稀疏多项式以循环单链表按降幂排列,结点有三个域,系数域coef ,指数域exp和指针域 next; 现对链表求一阶导数 ,链表的头指针为ha,头结点的 exp域为 –1。 derivative(ha) { q=ha ; pa=ha->next; while( (1)_______) { if ( (2)____) { ( (3)__); free(pa); pa= ( (4) _); } else{ pa->coef ( (5) ___); pa->exp( (6)___); q=( (7) __);} pa=( (8)________); } } 【南京理工大学 2000 三、3(10分)】 35.下面是删除单链表 L中最大元素所在结点的类 PASCAL语言算法,请在横线填上内容,完成其功能。 TYPE pointer =↑node; node=RECORD data:integer; next: pointer END; PROCEDURE delmax (L:pointer); 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 VAR p,q,r:pointer; m:integer; BEGIN r:=L; p:=L↑.next; IF pNIL THEN [ m:=p↑.data; (1)________; p:=p↑.next; WHILE pNIL DO [ IF (2)________THEN [ (3)________ ; m:=p↑.data; ] (4)________; p:=p↑.next; ] q:=r↑.next; (5)______; dispose(q); ] END;【北京科技大学 1998 二】 36.对单链表中元素按插入方法排序的 C语言描述算法如下,其中 L为链表头结点指针。请填充算法中标 出的空白处,完成其功能。 typedef struct node {int data; struct node *next; }linknode,*link; void Insertsort(link L) { link p,q,r,u; p=L->next; (1)______; while((2)________) { r=L; q=L->next; while((3)________&& q->datadata) {r=q; q=q->next;} u=p->next; (4)______; (5)______; p=u; } }【北京科技大学 2001 二 (10分)】 37.下面是一个求两个集合 A和B之差 C=A-B的程序,即当且仅当 e是 A的一个元素,但不是 B中的一个 元素时,e才是 C中的一个元素。集合用有序链表实现,初始时,A,B集合中的元素按递增排列,C为空; 操作完成后A,B保持不变,C中元素按递增排列。下面的函数append(last,e)是把值为 e的新结点链接 在由指针 last指向的结点的后面,并返回新结点的地址;函数difference(A,B)实现集合运算A-B,并返 回表示结果集合 C的链表的首结点的地址。在执行 A-B运算之前,用于表示结果集合的链表首先增加一个 附加的表头结点,以便新结点的添加,当 A-B运算执行完毕,再删除并释放表示结果集合的链表的表头结 点。 程序(a)(编者略去这个 PASCAL程序) 程序(b) typedef struct node{ int element; struct node *link; }NODE; NODE *A,*B,*C; NODE *append (NODE *last,int e) { last->link=(NODE*) malloc (sizeof(NODE)); last->link->element=e; return(last->link); } NODE *difference(NODE *A,NODE *B) 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 {NODE *C,*last; C=last=(NODE*) malloc (sizeof(NODE)); while (1)___ if (A->elementelement) { last=append(last,A->element); A=A->link; } else if (2) ___ { A=A->link; B=B->link; } ELSE (3) ___ ; while (4) __ { last=append(last,A->element); A=A->link; } (5) ___; last=C; C=C->link; free (last); return (C); } /*call form:C=difference(A,B);*/【上海大学 2000 一、4 (10分)】 四 应用 1.线性表有两种存储结构:一是顺序表,二是链表。试问: (1)如果有 n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自 动地改变。在此情况下,应选用哪种存储结构? 为什么? (2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素, 那么应采用哪种存储结构?为什么?【西安电子科技大学 1999软件 二、1 (5分)】 2.线性表的顺序存储结构具有三个弱点:其一,在作插入或删除操作时,需移动大量元素;其二,由于 难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;其三,表的容量难以扩充。线 性表的链式存储结构是否一定都能够克服上述三个弱点,试讨论之。【重庆大学 2000 二、5】 3.若较频繁地对一个线性表进行插入和删除操作,该线性表宜采用何种存储结构?为什么? 【北京航空航天大学 1998 一、2(4分)】 4.线性结构包括______、______、_______和_______。线性表的存储结构分成______和______。请用类 PASCAL语言描述这两种结构。【华北计算机系统工程研究所 1999一、2(10分)】 5.线性表(a 1,a2,…,a n)用顺序映射表示时,a i和ai+1(1<=i题》 【中国人民大学 2001 二、4 (2分)】 11. 下面是一算法的核心部分,试说明该算法的功能。 pre:=L↑.next; {L是一单链表,结点有数据域 data和指针域 next} IF preNIL THEN WHILE pre↑.nextNIL DO BEGIN p:=pre↑.next; IF p↑.data>=pre↑.data THEN pre:=p ELSE return(false) END; return(true); 【燕山大学 2000 七、1 (7分)】 12. 设单链表结点指针域为next,试写出删除链表中指针 p所指结点的直接后继的 C语言语句。 【北京科技大学 2000 一、3】 13. 设单链表中某指针 p所指结点(即 p结点)的数据域为data,链指针域为next,请写出在 p结点之 前插入 s结点的操作(PASCAL语句)。【北京科技大学 1999 一、2 (2分)】 14. 有线性表(a 1,a2,…,an),采用单链表存储,头指针为H,每个结点中存放线性表中一个元素,现查找某 个元素值等于X的结点。分别写出下面三种情况的查找语句。要求时间尽量少。 (1)线性表中元素无序。(2)线性表中元素按递增有序。 (3)线性表中元素按递减有序。 【北京邮电大学 1994 七 (7分)】 15.设pa,pb分别指向两个带头结点的有序(从小到大)单链表。仔细阅读如下的程序,并回答问: (1) 程序的功能。(2) s1,s2中值的含义。(3) pa,pb中值的含义。 PROCEDURE exam(pa,pb) BEGIN p1:=pa↑.next; p2:=pb↑.next; pa↑.next:=∧; s1:=0; s2:=0; WHILE p1≠∧ AND p2≠∧ DO [ CASE p1↑.datap2↑.data: p2:=p2↑.next; p1↑.data=p2↑.data: [p:=p1; p1:=p1↑.next; p↑.next:= pa↑.next; pa↑.next:= p; p2:= p2↑.next;s1:=s1+1; ]; END ]; WHILE p1≠∧ DO [ p:=p1; p1:=p1↑.next; dispose(p); s2:=s2+1 ] END;【南京航空航天大学 1995 十 (9分)】 16.写出下图双链表中对换值为 23和 15的两个结点相互位置时修改指针的有关语句。 结点结构为:(llink,data,rlink) 【北京邮电大学 1992 三、4 (25/4分)】 17.按照下列目中的算法功能说明,将算法描述片段中的错误改正过来。 (1) (4分)下面的算法描述片段用于在双链表中删除指针变量 p所指的结点: p^.rlink←p^.llink^.rlink; p^.llink←p.^rlink^.llink dispose(p); (2) (6分)下面的算法描述片段用于在双链表中指针变量 p所指结点后插入一个新结点: 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 new(q); q^.llink←p; p^.rlink←q; q^.rlink←p^.rlink; q←p^.rlink^.llink; 【山东大学 1999 八(10分)】 18.已知 L是一个数据类型 linkedlist的单循环链表,pa和 pb是指向 L中结点的指针。简述下列程序段 的功能。【山东科技大学 2001 一、2 (5分)】 TYPE linkedlist=↑node; node=RECORD data:datatype; next:linkedlist END; PROC Mp(pa,pb:linkedlist); PROC subp(s,q: linkedlist); p:=s; WHILE p↑.nextq DO p:=p↑.next; p↑.next:=s ENDP; subp(pa,pb); subp(pb,pa); ENDP; 19.设双向循环链表中结点的数据域、前驱和后继指针域分别为 data,pre和 next,试写出在指针p 所指 结点之前插入一 s结点的 C语言描述语句。【北京科技大学 2001 一、3 (2分)】 20.本给出一个子程序的框图,如图2,试填空完善此算法框图。该子程序用来寻找第一个均出现在三 个整数单向链表f1,f2,f3中的相同整数。假定在调用该子程序前,这三个整数链表已按从小到大的次 序排序,单向链表的形式如下图 1的例子所示。 注:在图 2的框图中:found和exit均为布尔型的变量,可取值为 true和 false。val是整型变量, 用来存放第一个均出现在f1,f2,f3中的相同整数。若f1,f2和f3中无相同的整数,found 的值为false, 否则 found的值为true。f1↑.link表示访问 f1所指结点的 link域。 【哈尔滨工业大学 1999 三 (15分)】 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 21. 一线性表存储在带头结点的双向循环链表中,L为头指针。如下算法: (1)说明该算法的功能。(2)在空缺处填写相应的语句。 void unknown (BNODETP *L) { … p=L->next; q=p->next; r=q->next; while (q!=L) { while (p!=L) && (p->data>q->data) p=p->prior; q->prior->next=r;(1) ______; q->next=p->next;q->prior=p; (2) ______;(3) ______; q=r;p=q->prior; (4) ______; 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 } } 【北京理工大学 1999 第二部分 数据结构 [7] (8分)】 五、算法设计 1.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并 为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。 【北京大学 1998 三、1 (5分)】 类似本的另外叙述有: (1)设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都 按递增序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中ha表中已有的数据若hb中也有, 则 hb中的数据不归并到 ha中,hb的链表在算法中不允许破坏。【南京理工大学1997 四、3(15分)】 PROCEDURE merge(ha,hb); (2)已知头指针分别为la和lb 的带头结点的单链表中,结点按元素值非递减有序排列。写出将la 和 lb两链表归并成一个结点按元素值非递减有序排列的单链表(其头指针为 lc),并计算算法的时间复杂度。 【燕山大学 1998 五 (20分)】 2. 图(编者略)中带头结点且头指针为 ha和 hb的两线性表 A和B 分别表示两个集合。两表中的元素皆 为递增有序。请写一算法求 A和 B的并集AUB。要求该并集中的元素仍保持递增有序。且要利用 A和 B的 原有结点空间。【北京邮电大学 1992 二 (15分)】 类似本的另外叙述有: (1) 已知递增有序的两个单链表A,B分别存储了一个集合。设计算法实现求两个集合的并集的运算 A:=A∪B【合肥工业大学 1999 五、1(8分)】 (2)已知两个链表 A和 B分别表示两个集合,其元素递增排列。编一函数,求 A与 B的交集,并存放于 A链表中。【南京航空航天大学 2001 六(10分)】 (3)设有两个从小到大排序的带头结点的有序链表。试编写求这两个链表交运算的算法(即 L1∩L2)。 要求结果链表仍是从小到大排序,但无重复元素。【南京航空航天大学 1996 十一(10分)】 (4)己知两个线性表A ,B均以带头结点的单链表作存储结构,且表中元素按值递增有序排列。设计算 法求出 A与 B的交集C,要求 C另开辟存储空间,要求 C同样以元素值的递增序的单链表形式存贮。 【西北大学 2000 五 ( 8分)】 (5)已知递增有序的单链表 A,B和 C分别存储了一个集合,设计算法实现A:=A∪(B∩C),并使求解结 构 A仍保持递增。要求算法的时间复杂度为O(|A|+|B|+|C|)。其中,|A|为集合A的元素个数。 【合肥工业大学 2000 五、1(8分)】 3. 知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据结点个数。要求设计一算法, 用最快速度将两表合并成一个带头结点的循环单链表。【东北大学1996 二 (12分)】 类似本的另外叙述有: (1)试用类 Pascal语言编写过程PROC join(VAR la:link; lb:link) 实现连接线性表 la和 lb(lb在后)的算法,要求其时间复杂度为0(1), 占用辅助空间尽量小。描述所用结构。 【北京工业大学 1997 一、1 (8分)】 (2)设有两个链表,ha为单向链表,hb为单向循环链表。编写算法,将两个链表合并成一个单向链表, 要求算法所需时间与链表长度无关。【南京航空航天大学 1997 四(8分)】 4. 顺序结构线性表LA与LB的结点关键字为整数。LA与LB的元素按非递减有序,线性表空间足够大。试 用类 PASCAL语言给出一种高效算法,将 LB中元素合到 LA中,使新的 LA的元素仍保持非递减有序。高效 指最大限度的避免移动元素。【北京工业大学 1997 一、2 (12分)】 5. 已知不带头结点的线性链表list,链表中结点构造为(data、link),其中data为数据域,link为指 针域。请写一算法,将该链表按结点数据域的值的大小从小到大重新链接。要求链接过程中不得使用除该 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 链表以外的任何链结点空间。【北京航空航天大学 1998 五(15分)】 6. 设 L为单链表的头结点地址,其数据结点的数据都是正整数且无相同的,试设计利用直接插入的原则 把该链表整理成数据递增的有序单链表的算法。【东北大学 1996 六 (14分)】 类似本的另外叙述有: (1)设一单向链表的头指针为head,链表的记录中包含着整数类型的 key域,试设计算法,将此链表的记 录按照 key递增的次序进行就地排序.【中科院计算所 1999 五、1(10分)】 7. 设 Listhead为一单链表的头指针,单链表的每个结点由一个整数域 DATA和指针域 NEXT组成,整数在 单链表中是无序的。编一 PASCAL过程,将 Listhead链中结点分成一个奇数链和一个偶数链,分别由 P,Q 指向,每个链中的数据按由小到大排列。程序中不得使用 NEW过程申请空间。【山东大学 1993六( 15分)】 类似本的另外叙述有: (1)设计算法将一个带头结点的单链表 A分解为两个具有相同结构的链表B、C,其中 B表的结点为 A表 中值小于零的结点,而 C表的结点为 A表中值大于零的结点(链表 A的元素类型为整型,要求B、C表利 用 A表的结点)。【北京理工大学 2000 四、2(4分)】 (2) 设L为一单链表的头指针,单链表的每个结点由一个整数域 data和指针域NEXT组成,整数在单链 表中是无序的。设计算法,将链表中结点分成一个奇数链和一个偶数链,分别由P,Q指向,每个链中的 数据按由小到大排列,算法中不得申请新的结点空间。【青岛海洋大学 1999 三(12分)】 (3) 将一个带头结点的单链表 A分解为两个带头结点的单链表 A和B,使得 A表中含有原表中序号为奇数 的元素,而 B表中含有原表中序号为偶数的元素,且保持其相对顺序不变。 1) 写出其类型定义: 2) 写出算法。【山东大学 1998 九 (9分)】 【山东工业大学 2000 九(9分)】 8. 已知线性表(a1 a2 a3 …an)按顺序存于内存,每个元素都是整数,试设计用最少时间把所有值为负 数的元素移到全部正数值元素前边的算法:例:(x,-x,-x,x,x,-x …x)变为(-x,-x,-x…x,x,x)。 【东北大学 1998 二 (15分)】 类似本的另外叙述有: (1)设有一元素为整数的线性表 L=(a 1,a2,a3,…,an),存放在一维数组A[N]中,设计一个算法,以表中 an作 为参考元素,将该表分为左、右两部分,其中左半部分每个元素小于等于 an,右半部分每个元素都大于 an, an 位于分界位置上(要求结果仍存放在A[N]中)。【北京理工大学 1999 八(6分)】 (2)顺序存储的线性表A,其数据元素为整型,试编写一算法,将A拆成 B和 C两个表,使 A中元素值大于等 于 0的元素放入B,小于 0的放入 C中.. 要求: 1)表 B和 C另外设置存储空间; 2)表B和C不另外设置,而利用A的空间.【山东大学 2001 九、1 (12分)】 (3)知线性表(a1, a2,a3,…,an)按顺序存储,且每个元素都是整数均不相同,设计把所有奇数移到 所有偶数前边的算法。(要求时间最少,辅助空间最少)【东北大学 1997 三 (15分)】 (4) 编写函数将一整数序列中所有负数移到所有正数之前,要求时间复杂度为O(n) 【南京航空航天大学 2001 八(10分)】 (5) 已知一个由 n( 设n=1000)个整数组成的线性表,试设计该线性表的一种存储结构,并用标准 pascal 语言描述算法,实现将 n个元素中所有大于等于 19的整数放在所有小于 19的整数之后。要求算法的时间 复杂度为O(n),空间复杂度O(1)。【西安交通大学 1996 六(11分)】 9. 试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法。void delete(Linklist &L) 【北京理工大学 2001 九、3 (8分)】 10. 已知非空线性链表由 list指出,链结点的构造为(data,link).请写一算法,将链表中数据域值最 小的那个链结点移到链表的最前面。要求:不得额外申请新的链结点。【北京航空航天大学 2001 四(10 分)】 11. 已知p指向双向循环链表中的一个结点,其结点结构为data、llink、rlink三个域,写出算法change(p), 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800》 交换 p所指向的结点和它的前缀结点的顺序。【首都经贸大学 1997 二、2(15分)】 12. 线性表(a1,a2,a3,…,an)中元素递增有序且按顺序存储于计算机内。要求设计一算法完成: (1) 用最少时间在表中查找数值为 x的元素。 (2) 若找到将其与后继元素位置相交换。 (3) 若找不到将其插入表中并使表中元素仍递增有序。【东北大学 1996 三 ( 12分)】 13. 设单链表的表头指针为h,结点结构由 data和 next两个域构成,其中 data域为字符型。写出算法 dc(h,n),判断该链表的前 n个字符是否中心对称。例如 xyx, xyyx都是中心对称。【首都经贸大学 1998三、 9(15分)】 14. 已知两个单链表 A和B,其头指针分别为 heada和headb,编写一个过程从单链表 A中删除自第 i个元 素起的共 len个元素,然后将单链表 A插入到单链表 B的第 j个元素之前。 【中国矿业大学 2000 三(10分)】 类似本的另外叙述有: (1)h1、h2为两个链表的表头指针,结点结构为 data和 link两个域组成。写出算法 inde(h1,h2,i,j,l), 将链表 h1从第 i个结点起的 l个结点删除,并插入到 h2表的第 j个结点之前。 【首都经贸大学 1998 三、10(20分)】 15. 设线性表存于A[1..size]的前 num各分量中,且递增有序。请设计一个算法,将 x插入到线性表的适 当位置上,以保持线性表的有序性,并在设计前说明设计思想,最后说明所设计算法的时间复杂度。 【西安电子科技大学 1999计应用 1997 二 (10分)】 类似本的另外叙述有: (1) 试编制在线性表 L={12,13,21,24,28,30,42,}中插入数据元素 26的程序。(要求该程序用 turboPascal语言编制并能在计算机上运行,结点类型为链式结构)【大连海事大学 1996 二、1 (16分)】 16. 假设一个单循环链表,其结点含有三个域pre、data、link。其中 data为数据域;pre为指针域,它 的值为空指针(NIL);link为指针域,它指向后继结点。请设计算法,将此表改成双向循环链表。 【西安电子科技大学 1999软件 五(10分)】 17. 已知递增有序的单链表A,B分别存储了一个集合,请设计算法以求出两个集合A和B 的差集A-B(即 仅由在 A中出现而不在 B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个 数。 【西安电子科技大学 2000计应用1997 二 (10分)】 18. 已知一个单链表中每个结点存放一个整数,并且结点数不少于2,请设计算法以判断该链表中第二项 起的每个元素值是否等于其序号的平方减去其前驱的值,若满足则返回 ture,否则返回 false. 【西安电子科技大学 2000软件1997 二(10分)】 19.两个整数序列 A=a1,a2,a3,…,am
1. 判断 1.Windows系统活动目录包括目录和与目录相关的服务两个部分。 2.AES算法的每轮变换由四种不同的变换组合而成,它们分别是S- 盒变换、行位移变换、列混合变换和圈密钥减法变换。 3.hash函数的特点是:已知M时,利用h(M)计算出h。已知h时,要想从h(M)计算出M也很 容易。 4.计算机病毒破坏性、隐蔽性、传染性是计算机病毒基本特征。 5.黑客可利用一些工具产生畸形或碎片数据包,这些数据包不能被计算机正确合成,从 而导致系统崩溃。 6.公开密钥算法不容易用数学语言描述,保密性建立在已知数学问求解困难的这个假 设上。 7.实时反病毒是对任何程序在调用之前都被过滤一遍,一有病毒侵入,它就报警,并自 动杀毒,将病毒拒之门外,到防患于未然。 8.拒绝服务是一种破坏网络服务的技术方式,其根本目的是使受害主机或网络失去及时 接受处理外界请求,或无法及时回应外界请求的能力。 9.防火墙作为内部网与外部网之间的一种访问控制设备,常常安装在内部网和外部网交 界的点上,所以防火墙一定是一个硬件产品。 10."状态分析技术"是数据包过滤技术的延伸,经常被称为"动态数据包过滤"。 11.PGP加密算法是混合使用RSA算法和IDEA算法,它能够提供数据加密和数签名服务, 主要用于邮件加密软件。 12.有的木马具有很强的潜伏能力,表面上的木马程序被发现并被删除以后,后备的木 马在一定的条件下会恢复被删除的木马。 13.DSS (Digital Signature Standard)是利用了安全散列函数(SHA)提出的一种数字加密技术。 14.镜像备份就是把备份目标的整个磁盘区直接拷贝到存储区,这是一种简单的备份, 但要注意磁盘上的数据内容。 15.所谓静态分析即从反汇编出来的程序清单上分析程序流程,从提示信息入手,进行 分析,以便了解软件中各模块所完成的功能,各模块之间的关系,了解软件的编程思路 。 16.指纹识别技术是通过分析指纹的全局特征和局部特征从指纹中抽取的特征值,从而 通过指纹来确认一个人的身份。 17.整个Kerberos系统由认证服务器AS、票据许可服务器TGS、客户机和应用服务器四部 分组成。 18.传统加密算法加密信息时不需要用保密的方法向对方提供密钥。 19.数字证书是由权威机构CA发行的一种权威性的电子文档,是网络环境中的一种身份 证。 20.通过修改某种已知计算机病毒的代码,使其能够躲过现有计算机病毒检测程序时, 可以称这种新出现的计算机病毒是原来被修改计算机病毒的变形。 26.所谓IP欺骗(IP- Spoofing)就是伪造某台主机的IP地址的技术,让一台主机来扮演另一台主机Web页。 22.蠕虫病毒的主要特性有:自我复制能力、很强的传播性、潜伏性,很大的破坏性等 。与其它病毒不同,蠕虫不需要将其自身附着到宿主程序。 23.RSA算法的安全性与p、q的保密性和r=p·q分解难度无关。 24.入侵检测的目标是识别系统内部人员和外部入侵者的非法使用、滥用计算机系统的 行为。 25.就技术方面来说,软件产品的脆弱性是产生计算机病毒根本原因。 26.Softice是一个强大的静态分析软件,可以实现反汇编,可以针对现在流行的可执行 程序进行反汇编。 27对计算机系统安全最大的威胁是自然灾害。 28虽然AES算法比DES算法支持更长的密钥,但AES算法不如DES算法更安全。 39利用欧几里德算法,求乘逆算法时,即重复使用带余数除法:每次的余数为除数除上 一次的除数,直到余数为1时为止。 30.DES算法加密明文时,首先将明文64位分成左右两个部分,每部分为32位。 二、选择 1.有一种称为嗅探器的软件,它是通过捕获网络上传送的数据包来收集敏感数据,这 些数据可能是用户的账号和密码,或者一些机密数据等等。 A.softice B.Unicode C.W32Dasm D.Sniffer 2.对等实体鉴别服务是数据传输阶段对合法性进行判断。 A.对方实体    B.对本系统用户 C.系统之间    D.发送实体 3.MD5是按每组512位为一组来处理输入的信息,经过一系列变换后,生成一个位散列 值。 A.64 B.128 C.256 D.512 4.在为计算机设置使用密码时,下面的最安全。 A.12345678 B.66666666 C.20061001 D.72096415 5.宏病毒可以感染________。 A可执行文件 B引导扇区/分区表 CWord/Excel文档 D数据库文件 6.TCP/IP协议规定计算机的端口有个,木马可以打开一个或者几个端口,黑客所使用的 控制器就进入木马打开的端口。 A.32768 B.32787 C.1024 D.65536 7.下面是一些常用的工具软件,其中是加"壳"软件。 A

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧