2014年上半年下午 程序员 试题及答案与解析-软考考试真题-案例分析
2014年上半年软件设计师考试下午真题(标准参考答案)

//归并排序#include<stdio.h>#include<stdlib.h>#define MAX 65536void merge(int arr[],int p,int q,int r)//合并[p~q]与[q+1~r]{ int *left,*right; //左右各一个临时数组int n1,n2,i,j,k;n1=q-p+1; //两个子数组长度n2=r-q;if((left=(int*)malloc((n1+1)*sizeof(int)))=NULL)//分配空间{ perror("malloc error");exit(1);}for(i=0;i<n1;i++) //左半边临时数组初始化{ left[i]=arr[p+i];}left[i]=MAX; //最后一个元素为最大值for(i=0;i<n2;i++) //右半边临时数组初始化{ right[i]=arr[q+i+1];}right[i]=MAX; //最后一个元素为最大值i=0;j=0;for(k=p;(1);k++){ if(left[i]>right[j] //递增排序{ (2); //装小数j++;}else{ arr[k]=left[i];i++;}}}void mergeSort(int arr[], int begin, int end)//排序[begin~end]{ int mid;if(3) //[begin~end]{ mid=(begin+end)/2; //分两部分mergeSort(arr,begin,mid);//两部分分别进行归并排序(4);merge(arr,begin,mid,end);//两部分合并}}#include<iostream>#include<vector>using namespace std;class Observer{ //观察者,抽象类public: virtual void update(float temp,float humidity, float cleanness)=0;//更新,纯虚函数};class Subject{ //目标,抽象类public: virtual void registerObserver(Observer *o)=0; //注册,纯虚函数virtual void removeObserver(Observer *o)=0; //删除,纯虚函数virtual void notifyObserver()=0; //通知,纯虚函数};class EnvironentData: public(1){ //子类private: vector<Observer*> observers; //多名观察者float temperature,humidity,cleanness; //温度,湿度,清洁度public: void registerObserver(Observer*o){observer.push_back(o);}//注册,重定义void removeObserver(Observer*o){/*...*/} //删除,重定义void notifyObserver(){ //通知,重定义for(vector<Observer*>::const_iterator it=observer.begin());//迭代器it!=observers.end();it++){(2);}} //更新全部观察者void measurementsChanged(){(3);} //测量有变化,必须通知void setMeasurements(float temperature, float humidity,float cleanness){//设置参数this->temperature=temperature; //设置温度this->humidity=humidity; //设置湿度this->cleaness=cleaness; //设置清洁度(4);} //设置完,说明测量有变化};class CurrentConditionsDisplay:public (5){ //子类private: float temperature,humidity,cleanness; //私有数据Subject * envData; //目标对象,环境数据public: CurrentConditionsDisplay(Subject *envData){ //构造函数,单参数this->envData=envData; //环境数据获取(6);} //加入环境数据void update(float temperature, float humidity,float cleanness){//更新,重定义this->temperature=temperature; //更新温度this->humidity=humidity; //更新湿度this->cleanness=cleanness; //更新清洁度display();} //调用显示函数void display(){/*...*/} //显示函数定义};int main(){ //主函数EnvironmentData * envData=new EnvironmentData(); //构造函数,新目标CurrentConditionsDisplay*currentDisplay=new CurrentConditionsDisplay (envData);//构造函数,新观察者envdata->setmeasurements(80,65,30.4f); //获取环境数据return 0; //返回,调用析构函数}。
2014上半年系统分析师考试真题及答案-下午卷

2014上半年系统分析师考试真题及答案-下午卷【案例一】(共25分)阅读以下关于需求建模的叙述,在答题纸上回答问题1至问题3。
某企业委托软件公司开发一套运动器材综合销售平台,以改进已有的销售管理系统,拓展现有的实体店销售模式,综合管理线上线下的器材销售业务。
该软件公司组建项目组开发该系统,现正处于需求获取阶段。
经过项目组讨论,由于目标系统业务功能比较复杂,所以在需求获取中针对不同类型的业务需求,采用不同的需求获取方法。
项目组列出可选的需求获取方法包括:用户访谈、联合需求计划(JRP)、问卷调查、文档分析和实地观察等。
需求获取的要求如下:(1)获取已有销售管理系统中所实现的实体店销售模式和过程;(2)获取系统的改进需求和期望增加的业务功能;(3)获取当前业务过程中的详细数据并深入了解这些数据产生的原因;(4)从企业管理人员、销售人员、各种文档资源等尽可能多的来源获取需求;(5)消除需求中出现的冲突,尽可能获取全面、一致的需求;(6)尽可能多地让用户参与需求获取过程。
【问题1】联合需求计划(JRP)是一种流行的需求获取方法。
请说明什么是JRP,JRP与其它需求获取方法相比有什么优势?联合需求计划是一个通过高度组织的群体会议来分析企业内的问题并获取需求的过程,它是由企业主管部门经理、会议主持人、用户、协调人员、IT人员、秘书等共同组成的专题讨论组来分析、讨论问题并定义系统需求。
JRP和其他需求获取方法相比的优势:(1)发挥用户和管理人员参与系统幵发过程的积极性,提高系统开发效率:(2)降低了系统需求获取的时间成本,加速系统开发周期;(3)采用原型确认系统需求并获取设计审批,具有原型化开发方法的优点。
【解析】本题考查考生对于软件需求获取方法的掌握情况。
需求获取是一个确定和理解不同类用户的需求和约束的过程。
需求获取通过系统分析师与用户的有效合作才能成功,系统分析师建立一个对问题进行彻底讨论的环境,这些问题与将要开发的系统有关。
2014上半年软考【标准答案及解析】

2014年上半年软件设计师考试上午真题(标准参考答案)参考答案:不保证正确。
1.D 2、3、C2^(k-1)≥n+k4、D5、B6、A解析:内存按字节编址,单位为byte,存储器容量按位编址,单位为bit,注意相关的单位换算根据公式:(最高地址-最低地址+1)/单片存储器容量可得注意16进制的换算(400FFFFFH-40000000H+1)*8bit/256K*8bit = (FFFFFH+1)/256K =(100000H)/(256*1024) =(1*16^5)/(256*2^10)=2^20/2^18 =2^2=47.Sniffer,中文可以翻译为嗅探器,是一种基于被动侦听原理的网络分析方式。
使用这种技术方式,可以监视网络的状态、数据流动情况以及网络上传输的信息。
木马是病毒的一种,同时木马程序又有许多种不同的种类,那是受不同的人、不同时期开发来区别的,如BackOrifice(BO)、BackOrifice2000、Netspy、Picture、Netbus、Asylum、冰河等等这些都属于木马病毒种类.木马程序就是一个网络上的Client/Server的概念。
以下简单介绍一些木马程序的功能:1)远程监控: 可以控制对方的鼠标、键盘和监视对方屏幕。
2)记录密码3)取得电脑主机的信息资料: 如果你在电脑用户账户填上真名的话,对方就可能知道你的姓名了。
4)远程控制5)发送信息8、D 9、B 10、D 11、C12、B表示媒体就是信息的表示方法。
国际电话电报咨询委员会CCITT(Consultative Committee on International Telephone and Telegraph,国际电信联盟ITU的一个分会)把媒体分成5类。
表示媒体(representation Medium)是其中之一,它指传输感觉媒体的中介媒体,即用于数据交换的编码。
如图像编码(JPEG、MPEG等)、文本编码(ASCII码、GB2312等)和声音编码等。
2014年上半年 软件设计师 详细答案

在CPU中,常用来为ALU执行算术逻辑运算提供数据并暂存运算结果的寄存器是(1)。
(1)A.程序计数器 B.状态寄存器 C.通用寄存器 D.累加寄存器【答案】D【解析】本题考查计算机系统基础知识。
CPU 中有一些重要的寄存器,程序计数器( PC )用于存放指令的地址。
当程序顺序执行时,每取出一条指令, PC 内容自动增加一个值,指向下一条要取的指令,当程序出现转移时,则将转移地址送入PC,然后由PC给出新的指令地址。
状态寄行器用于记录运算中产生的标志信息。
状态寄存器中的每一位单独使用,成为标志位。
标志位的取值反映了ALU当前的工作状态,可以作为条件转移指令的转移条件。
典型的标志位有以下几种:进位标志位(C)、零标志位(Z)、符号标志位(S)、溢出标志位(V)、奇偶标志位(P)。
通用寄存器组是CPU中的一组工作寄存器,运算时用于暂存操作数或地址。
在程序中使用通用寄存器可以减少访问内存的次数,提高运算速度。
累加器(accumulator)是一个数据寄存器,在运算过程中暂时存放操作数和中间运算结果,不能用于长时间地保存一个数据。
某机器字长为n,最高位是符号位,其定点整数的最大值为(2)。
(2)A.2n-1 B.2n-1-1 C.2n D.2n-1 【答案】B【解析】本题考查计算机系统中的数据表示基础知识。
机器字长为n,最高位为符号位,则剩余的n-1位用来表示数值,其最大值是这n-1位都为1,也就是2n-1-1。
海明码利用奇偶性检错和纠错,通过在n个数据位之间插入k个校验位,扩大数据编码的码距。
若n=48,则k应为(3)。
(3)A.4 B.5 C.6 D.7【答案】C【解析】本题考查数据校验基础知识。
设数据位是n位,校验位是k位,则n和k必须满足以下关系:2k-1 ≥ n + k。
若n=48,则k 为6时可满足26-1 ≥ 48+6 。
海明码的编码规则如下。
设k个校验位为Pk,Pk-1,…,P1, n个数据位为Dn-1,Dn-2,…,D1,D0 。
2014山东省上半年软考网络工程师上、下午试题及答案

1、Unix系统中如何禁止按Control-Alt-Delete关闭计算机?(B)A、把系统中“/sys/inittab”文件中的对应一行注释掉B、把系统中“/sysconf/inittab”文件中的对应一行注释掉C、把系统中“/sysnet/inittab”文件中的对应一行注释掉D、把系统中“/sysconf/init”文件中的对应一行注释掉2、在任何情况下,一个组织应对公众和媒体公告其信息系统中发生的信息安全事件?(A)A、当信息安全事件的负面影响扩展到本组织意外时B、只要发生了安全事件就应当公告C、只有公众的什么财产安全受到巨大危害时才公告D、当信息安全事件平息之后3、根据《计算机信息系统国际联网保密管理规定》,涉及国家秘密的计算机信息系统,不得直接或间接地与国际互联网或其它公共信息网络相联接,必须实行(B)。
A、逻辑隔离B、物理隔离C、安装防火墙D、VLAN 划分4、/etc/ftpuser文件中出现的账户的意义表示(A)。
A、该账户不可登录ftpB、该账户可以登录ftpC、没有关系D、缺少5、我国的国家秘密分为几级?(A)A、3B、4C、5D、66、目前我国颁布实施的信息安全相关标准中,以下哪一个标准属于强制执行的标准?(B)A、GB/T 18336-2001 信息技术安全性评估准则B、GB 17859-1999 计算机信息系统安全保护等级划分准则C、GB/T 9387.2-1995 信息处理系统开放系统互联安全体系结构D、GA/T 391-2002 计算机信息系统安全等级保护管理要求7、系统管理员属于(C)。
A、决策层B、管理层C、执行层D、既可以划为管理层,又可以划为执行层8、以下哪一项安全目标在当前计算机系统安全建设中是最重要的?(C)A、目标应该具体B、目标应该清晰C、目标应该是可实现的D、目标应该进行良好的定义9、HOME/.netrc文件包含下列哪种命令的自动登录信息?(C)A、rshB、sshC、ftpD、rlogin10、Unix中,默认的共享文件系统在哪个位置?(C)A、/sbin/B、/usr/local/C、/export/D、/usr/11、U盘病毒依赖于哪个文件打到自我运行的目的?(A)A、autoron.infB、autoexec.batC、config.sysD、system.ini12、在风险分析中,下列不属于软件资产的是(D)A、计算机操作系统B、网络操作系统C、应用软件源代码D、外来恶意代码13、信息安全风险缺口是指(A)。
2014年上半年下午 网络工程师 试题及答案与解析-软考考试真题-案例分析

2014年上半年下午网络工程师考试试题-案例分析-答案与解析试题一(共15分)阅读以下说明,回答问题1至问题4,将解答填入答题纸对应的解答栏内。
【说明】某单位计划部署园区网络,该单位总部设在A区,另有两个分别设在B区和C区,各个地区之间距离分布如图1-1所示。
该单位的主要网络业务需求在A区,在网络中心及服务器机房亦部署在A区;B的网络业务流量需求远大于C区;c区的虽然业务流量小,但是网络可靠性要求高。
根据业务需要,要求三个区的网络能够互通并且都能够访问互联网,同时基于安全考虑单位要求采用一套认证设备进行身份认证和上网行为管理。
【问题1】为了保障业务需求,该单位采用两家运营商接入internet。
根据题目需求,回答下列问题;两家运营商的internet接入线路应部署在哪个区?为什么?网络运营商提供的mplsvpn和千兆裸光纤两种互联方式,哪一种可靠性高?为什么?综合考虑网络需求及运营成本,在AB区之间与AC区之间分别采用上述那种方式进行互联?【参考答案】1、A区。
A区是网络中心,B区和C区接入Internet流量都需要经过A区。
2、MPLS-VPN是本地线路走SDH专线,连接到运营商的MPLSVPN专网。
裸光纤是物理层的点对点连接,所以可靠性当然是裸光纤高。
3、AB区之间用裸光纤,AC区之间用MPLSVPN方式。
因为B区的业务量需求远大于C 区,需要高带宽,且裸光纤传输带宽远大于MPLSVPN。
但远距离较裸光纤的各方面,成本较大。
所以对于AC之间业务流量小,二者相距80公里,出于成本考虑,用MPLSVPN更合适。
【问题2】该单位网络部署接入点情况如表1-1所示根据网路部署需求,该单位采购了相应的网络设备,请根据题目说明及表所规定1-2所示的设备数量及合理的部署位置(注:不考虑双绞线的距离限制)。
(表1-2)【参考答案】(1)、2(2)、C(3)、B(4)、A(5)、27(6)、19(7)、7(8)、A【问题3】根据题目要求,在图1-2的方框中画出该单位A区网络拓扑示意图(汇聚层以下不画)【参考答案】试题二(共15分)阅读以下说明,回答问题1至问题4,将解答填入答题纸对应的解答栏内。
2014年上半年下午 信息系统项目管理师 试题及答案与解析-软考考试真题-案例分析

2014年上半年下午信息系统项目管理师考试试题案例分析-答案与解析【试题一】阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】某系统集成企业承接了一个环保监测系统项目,为某市的环保局建设水污染自动监测系统。
该企业以往的主要业务领域为视频监控及信号分析处理,对自动控制系统也有较强的技术能力,但从未在环保领域开发应用。
该企业的老李被任命为此项目的项目经理。
该企业已按照IS09001的要求建立了一套质量管理体系,对于项目管理、软件开发等的流程均有明确的书面规定。
但公司中很多人认为这套管理体系的要求对于项目来说是多余的,条条框框的约束太多了,大部分项目经理都是在项目结项前才把质量体系要求的文档补齐以便能通过结项审批。
公司的质量管理员也习以为常,只要在项目结束前能把文档补齐,就不会干涉项目建设。
老李组织了技术骨干对客户的需求进行了调研,通过对用户需求的分析和整理,项目组直接制定了一个总体的技术方案,然后老李制定了一个较粗略的项目计划:1.对市场上的采集设备进行调研,选择一款进行采购;2.利用公司已有的控制软件平台直接进行修改开发;3.待设备选定后,将软件与采集设备进行联调实验,实现软件与设备的控制功能;4.联调成功后,按技术方案开展整个项目的实施工作。
在软件与采集设备的联调过程中,老李请环保局的客户代表来检查工作。
客户代表发现由于项目组不了解环保领域的一些参数指标,完成的系统达不到客户方的要求。
由于项目从一开始就没有完整的项目文档,老张为了避免再出现重大问题,只要重新进行需求调研。
客户方很不满意,既担心项目不能按时上线又担心项目质量无法保证。
【问题1】请指出该项目的需求活动存在哪些问题?【参考答案】(1) 缺少完整的需求调研计划。
(2) 没有编写《需求文件》或《需求规格说明书》。
(3) 没有对需求文件进行评审。
(4) 没有与客户进行需求确认。
(每项1.5分,共6分)【解题思路】本题考查项目的需求开发、项目的跟踪与控制和项目质量管理等相关理论与应用。
2014年上半年真题答案软件设计师详细答案

在CPU中,常用来为ALU执行算术逻辑运算提供数据并暂存运算结果的寄存器是(1)。
(1)A.程序计数器 B.状态寄存器 C.通用寄存器 D.累加寄存器【答案】D【解析】本题考查计算机系统基础知识。
CPU 中有一些重要的寄存器,程序计数器( PC )用于存放指令的地址。
当程序顺序执行时,每取出一条指令, PC 内容自动增加一个值,指向下一条要取的指令,当程序出现转移时,则将转移地址送入PC,然后由PC给出新的指令地址。
状态寄行器用于记录运算中产生的标志信息。
状态寄存器中的每一位单独使用,成为标志位。
标志位的取值反映了ALU当前的工作状态,可以作为条件转移指令的转移条件。
典型的标志位有以下几种:进位标志位(C)、零标志位(Z)、符号标志位(S)、溢出标志位(V)、奇偶标志位(P)。
通用寄存器组是CPU中的一组工作寄存器,运算时用于暂存操作数或地址。
在程序中使用通用寄存器可以减少访问内存的次数,提高运算速度。
累加器(accumulator)是一个数据寄存器,在运算过程中暂时存放操作数和中间运算结果,不能用于长时间地保存一个数据。
某机器字长为n,最高位是符号位,其定点整数的最大值为(2)。
(2)A.2n-1 B.2n-1-1 C.2n D.2n-1【答案】B【解析】本题考查计算机系统中的数据表示基础知识。
机器字长为n,最高位为符号位,则剩余的n-1位用来表示数值,其最大值是这n-1位都为1,也就是2n-1-1。
海明码利用奇偶性检错和纠错,通过在n个数据位之间插入k个校验位,扩大数据编码的码距。
若n=48,则k应为(3)。
(3)A.4 B.5 C.6 D.7【答案】C【解析】本题考查数据校验基础知识。
设数据位是n位,校验位是k位,则n和k必须满足以下关系:2k-1 ≥ n + k。
若n=48,则k为6时可满足26-1 ≥ 48+6 。
海明码的编码规则如下。
设k个校验位为Pk,Pk-1,…,P1, n个数据位为Dn-1,Dn-2,…,D1,D0 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2014年上半年5月下午程序员考试真题案例分析-答案解析试题一(共15分)指定网页中,某个关键词出现的次数除以该网页长度称为该关键词在此网页中的词频。
对新闻类网页,存在一组公共的关键词。
因此,每个新闻网页都存在一组词频,称为该新闻网页的特征向量。
设两个新闻网页的特征向量分别为:甲(a1,a2,…,ak)、乙(b1,b2,...,bk),则计算这两个网页的相似度时需要先计算它们的内积S=a1b1+a2b2+…+akbk。
一般情况下,新同网页特征向量的维数是巨大的,但每个特征向量中非零元素却并不多。
为了节省存储空间和计算时间,我们依次用特征向量中非零元素的序号及相应的词频值来简化特征向量。
为此,我们用(NA(i),A(i)|i=1,2,...,m)和(NB(j),B(j)|j=1,2,...,n)来简化两个网页的特征向量。
其中:NA(i)从前到后描述了特征向量甲中非零元素A(i)的序号(NA(1)<NA(2)<...),NB(j)从前到后描述了特征向量乙中非零元素B(j)的序号(NB(1)<NB(2)<…)。
下面的流程图描述了计算这两个特征向量内积S的过程。
【参考答案】。
(1)、0。
(2)、S+A(i)B(j)或等价表示。
(3)、i>m或i=m+1或等价表示。
(4)、j>n或j=n+1或等价表示(5)、i>morj>n或i=m+1orj=n+1或等价表示。
【试题解析】对于存在大量零元素的稀疏向量来说,用题中所说的简化表示方法是很有效的。
这样,求两个向量的内积只需要在分别从左到右扫描两个简化向量时,计算对应序号相同(NA(i)=NB(j))时的A(i)*B(j)之和(其他情况两个向量对应元素之乘积都是0)。
因此,流程图中(2)处应填S+A(i)*b(j),而累计的初始值S应该为0,即(1)处应填0。
流程图中,NA(i)<NB(j)时,下一步应再比较NA(i+1)<NB(j),除非i+1已经越界。
因此,应先执行i+1→i,再判断是否i>m或i=m+1(如果成立,则扫描结束)。
因此(3)处应填i>m或i=m+1。
流程图中,NA(i)>NB(j)时,下一步应再比较NA(i)<NB(j+1),除非j+1已经越界。
因此,应先执行j+1→j,再判断是否j>n或j=n+1(如果成立,则扫描结束)。
因此(4)处应填j>n或j=n+1。
(5)处应填扫描结束的条件,i>morj>n或i=m+1orj=n+1,即两个简化向量之一扫描结束时,整个扫描就结束了。
试题二(共15分)阅读以下说明和C函数,填补代码中的空缺(1)~(5),将解答填入答题纸的对应栏内。
【说明1】函数isPrime(intn)的功能是判断n是否为素数。
若是,则返回1,否则返回0。
素数是只能被1和自己整除的正整数。
例如,最小的5个素数是2,3,5,7,11。
【C函数】【说明2】函数intminOne(intarr[],intk)的功能是用递归方法求指定数组中前k个元素中的最小者,并作为函数值返回。
【C函数】【参考答案】(1)、n%2==0,或!(n%2),或其等价形式;(2)、n%k==0,或!(n%k),或其等价形式;(3)、arr[0],或*arr,或其等价形式;(4)、k-1,或其等价形式;(5)、t;【试题解析】函数isPrime(intn)的功能是判断n是否为素数。
根据素数的定义,小于2的数和大于2的偶数都不是素数,n是偶数可表示为“n%2等于0”,因此空(1)处应填入“n%2==0”,或者“!(n%2)”。
在n是大于2的奇数的情况下,下面的代码从3开始查找n的因子,直到n的平方根为止。
For(k=3;k<t;k+=2)If((2))return0;若k的值是n的因子,则说明n不是素数。
因此,空(2)处应填入“n%k==0”,或者“!(n%k)”。
函数intminOne(inttarr[],intk)的功能是用递归方法求指定数组中前k个元素中的最小者,显然,k为1时,这一个元素就是最小者。
因此,空(3)处应填入“arr[0]”或其等价形式。
空(4)所在的语句是通过递归方式找出arr[1]~arr[k-1]中的最小者,第一个实参指出从arr[1]开始,第二个参数为元素个数,为k-1个,因此空(4)应填入“k-1”。
接下来的处理就很明确了,当t表示arr[1]~arr[k-1]中的最小者,其与arr[0]比较后就可以得到arr[0]~arr[k-1]中的最小者,因此空(5)处应填入“t”。
试题三(共15分)阅读以下说明和C程序,填补代码中的空缺(1)~(5),将解答填入答题纸的对应栏内。
【说明】函数areAnagrams(char*fstword,char*sndword)的功能是判断fstword和sndword 中的单词(不区分大小写)是否互为变位词,若是则返回1,否则返回0。
所谓变位词是指两个单词是由相同字母的不同排列得到的。
例如,”triangle“与“integral”互为变位词,而“dumbest”与“stumble”不是。
函数areAnagrarns的处理思路是检测两个单词是否包含相同的字母且每个字母出现的次数也相同。
过程是先计算第一个单词(即fstword中的单词)中各字母的出现次数并记录在数组counter中,然后扫描第二个单词(即sndword中的单词)的各字母,若在第二个单词中遇到与第一个单词相同的字母,就将相应的计数变量值减1,若在第二个单词中发现第一个单词中不存在的字母,则可断定这两个单词不构成变位词。
最后扫描用于计数的数组counter各元素,若两个单词互为变位词,则counter的所有元素值都为0。
函数areAnagrams中用到的部分标准库函数如下表所述。
【C函数】【参考答案】(1)、strcmp(fstword,sndword)==0,或其等价形式(2)、fstword++,或其等价形式(3)、return0(4)、sndword++,或其等价形式(5)、counter[index],或counter[index]!=0,或其等价形式试题四(共15分)阅读以下说明和C函数,填补代码中的空缺(1)~(5),将解答填入答题纸的对应栏内。
【说明】函数ReverseList(LinkListheadptr)的功能是将含有头结点的单链表就地逆置。
处理思路是将链表中的指针逆转,即将原链表看成由两部分组成:已经完成逆置的部分和未完成逆置的部分,令s指向未逆置部分的第一个结点,并将该结点插入已完成部分的表头(头结点之后),直到全部结点的指针域都修改完成为止。
例如,某单链表如图4-1所示,逆置过程中指针s的变化情况如图4-2所示。
链表结点类型定义如下:【C函数】【参考答案】(1)、!headptr->next,或!headptr||!headptr->next,或其等价形式(2)、headptr->next(3)、headptr->next->next,或p->next,或其等价形式(4)、s->next,或p->next,或其等价形式(5)、p【试题解析】问题的图和代码中的注释可提供完成操作的主要信息,在充分理解链表概念的基础上填充空缺的代码。
对于含有头结点的单链表,链表为空时,头结点的指针域为空,表示之后没有其他结点了。
因此,空(1)处应填入“!headptr->next”。
根据注释,空(2)处所在语句令p指向链表的第一个元素结点,因此空(2)填入“headptr->next”。
空(3)处的语句执行后,可由图4-1所示的链表得到图4-2(a)的链表,空(3)处应填入“p->next”或者“headptr->next->next”。
代码中的while循环完成链表中除第一个元素结点之外的其他结点的指针域的修改。
根据题目中的说明,s指向未逆置部分的第一个结点。
在while循环中,变量p的作用是辅助完成将s所指结点插入头结点之后的处理,处理步骤为:试题五(共15分)阅读下列说明、C++代码和运行结果,填补代码中的空缺(1)~(5),将解答填入答题纸的对应栏内。
【说明】对部分乐器进行建模,其类图如图5-1所示,包括:乐器(Instrument)、管乐器(Wind)、打击乐器(Percussion)、弦乐器(Stringed)、木管乐器(Woodwind)、铜管乐器(Brass)。
下面是实现上述设计的C++代码,其中音乐类(Music)使用各类乐器(Instrument)进行演奏和调音等操作。
【C++代码】本程序运行后的输出结果为:Wind.play()0。
Wind.adjust()。
Woodwind.play()。
Wind.adjust()。
【参考答案】(1)、virtualvoidplay(Noten)=0(2)、publicInstrument(3)、publicWind(4)、Instrument*(5)、new【试题解析】图中父接口Instrument,代表乐器,C++中设计为抽象基类,包含表示进行演奏的接口函数play()和表示调音的接口函数adjust(),其中函数play()的参数Note实现为枚举类型(enwn),以枚举各种音调。
这两个函数由具体子类型完成实现,所以Instrument的play()和adjust()为纯虚函数,原型中=0表示纯虚函数,实现由子类完成:virtualvoidplay(Not:en)=0;virtualvoidrun()=0;Wind、Percussion和Stringed都是继承自Instrument的三个子类型,所以他们都继承了Instrument的play()和adjust()函数,各自演奏和调音方式有所不同,所以都覆盖了Instrument的play()函数和adjust()函数,并加以实现:voidplay(Noten){/*代码略*/}voidadjust(){/*代码略*/}Wind的两个子类型Woodwind和Brass都继承自Wind,继承用:Public关键字,从而Woodwind和Brass也都继承了Instrument的play()函数和adjust()函数,图5-1中Woodwind类对应的Woodwind的实现中只有play(),没有adjust(),因此其父类Wind的adjust()会自动被调用。
Music类对各类乐器进行演奏和调音操作。
函数tune()为一个乐器的定调,其参数为乐器对象指针Intrument*;函数adjust()为一个乐器进行调音,其参数也为Intrument*,函数tuneAII()为每个乐器定调,其参数是所有乐器数组。