软考中级软件设计师历年经典真题及解析part12.docx
- 文档编号:4530120
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:14
- 大小:61.83KB
软考中级软件设计师历年经典真题及解析part12.docx
《软考中级软件设计师历年经典真题及解析part12.docx》由会员分享,可在线阅读,更多相关《软考中级软件设计师历年经典真题及解析part12.docx(14页珍藏版)》请在冰豆网上搜索。
软考中级软件设计师历年经典真题及解析part12
第1题
单选题
原码表示法和补码表示法是计算机中用于表示数据的两种编码方法,在计算机系统中常采用补码来表示和运算数据,原因是采用补码可以()。
A.保证运算过程与手工运算方法保持一致
B.简化计算机运算部件的设计
C.提高数据的运算速度
D.提高数据的运算精度
【解析】正确答案:
B。
在计算机中,各类运算都等可以采用补码进行,特别是对于有符号数的运算。
在计算机中设计补码的目的一是为了使符号位能与有效值部分一起参加运算,从而简化运算规则,使运算部件的设计更简单;二是为了使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
因此在计算机系统中常采用补码来表示和运算数据,原因是采用补码可以简化计算机运算部件的设计。
第2题
单选题
王某是一名程序员,每当软件开发完成后均按公司规定完成软件文档,并上交公司存档,自己没有留存。
因撰写论文的需要,王某向公司要求将软件文档原本借出复印,但遭到公司拒绝,理由是该软件文档属于职务作品,著作权归公司。
以下叙述中,正确的是()。
A.该软件文档属于职务作品,著作权归公司
B.该软件文档不属于职务作品,程序员享有著作权
C.该软件文档属于职务作品,但程序员享有复制权
D.该软件文档不属于职务作品,著作权由公司和程序员共同享有
【解析】正确答案:
A。
本题考查知识产权知识,即软件知识产权归属。
公民为完成法人或者其他组织工作任务所创作的作品是职务作品。
职务作品可以是作品分类中的任何一种形式,如文字作品、电影作品、计算机软件都可能由于为执行工作任务而创作,属于职务作品。
其著作权归属分两种情形:
(1)一般职务作品
一般职务作品的著作权由作者享有。
单位或其他组织享有在其业务范围内优先使明的权利,期限为2年。
单位的优先使用权是专有的,未经单位同意,作者不得许可第三人以与单位使用的相同方式使用该作品。
在作品完成两年内,如单位在其业务范围内不使用,作者可以要求单位同意由第三人以与单位使用的相同方式使用,所获报酬,由作者与单位按约定的比例分配。
(2)特殊的职务作品
所谓特殊职务作品一是指是利用法人或者其他组织的物质技术条件创作,并由法人或者其他组织承担责任的工程设计、产品设计图纸、地图、计算机软件等职务作品;二是指法律、行政法规规定或者合同约定著作权由法人或者其他组织享有的职务作品。
对于特殊职务作品,作者享有署名权,其他权利由法人或非法人单位享有。
本题涉及软件知识产权,王某为完成公司指派的工作任务所开发的软件是职务软件,职务软件包括软件文档和源程序。
该软件文档属于特殊职务作品,依据著作权法,对于特殊职务作品,除署名权以外,著作权的其他权利由公司享有。
第3题
单选题
表达式a*(b+c)-d的后缀表达式是()。
A.abcd*+-
B.abc+*d-
C.abc*+d-
D.-+*abcd
【解析】正确答案:
B。
表达式a*(b+c)-d对应的二叉树是:
这棵二叉树对应的前序遍历和后序遍历对应表达式的前缀和后缀形式。
后序遍历为abc+*d-,于是选B。
第4题
单选题
设某程序中定义了全局整型变量x和r,且函数f()的定义如下所示,则在语句“x=r*r+1;”中()。
intf(intr)
{intx;
x=r*r+1;
returnx;
}
A.x和r均是全局变量
B.x是全局变量、r是形式参数
C.x是局部变量、r是形式参数
D.x是局部变量、r是全局变量
【解析】正确答案:
C。
本题考查程序语言的基础知识。
在函数f的形式参数表中声明了r,且在函数中定义了变量小x,因此语言规定语句x=r*r+1;中引用的x和r都是函数中定义的局部量。
第5题
单选题
进行面向对象系统设计时,针对包中的所有类对于同-类性质的变化;一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
这属于()设计原则。
A.共同重用
B.开放-封闭
C.接口分离
D.共同封闭
【解析】正确答案:
D。
共同封闭原则:
包中的所有类对于同一种性质的变化应该是共同封闭的。
一个变化若对一个封闭的包产生影响,则将对该包中的所有类产生影响,而对于其他包则不造成任何影响。
面向对象设计的原则之一。
共同重用原则:
面向对象编程术语,指一个包中的所有类应该是共同重用的。
如果重用了包中的一个类,那么也就相当于重用了包中的所有类。
开放-封闭原则:
对扩展开放,对修改封闭。
接口隔离原则:
使用多个专门的接口比使用单一的总接口要好。
第6题
案例题
阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都有开关按钮,对应着一个不同的灯。
利用该遥控器能够统一控制房间中该厂商所有品牌灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。
Command模式的类图如图5-1所示。
【C++代码】
classLight{
public:
Light(stringname){/*代码省略*/}
voidon(){/*代码省略*/}//开灯
voidoff(){/*代码省略*/}//关灯
};
classCommand{
public:
(1);
};
classLightOnCommand:
publicCommand{//开灯命令
private:
Light*light;
public:
LightOnCommand(Light*light){this->light=light;}
voidexecute(){
(2);}
};
classLightOffCommand:
publicCommand{//关灯命令
private:
Light*light;
public:
LightOffCommand(Light*light){this->light=light;}
voidexecute(){(3);}
};
classRemoteControl{//遥控器
private:
Command*onCommands[7];
Command*offCommands[7];
public:
RemoteControl(){/*代码省略*/}
voidsetCommand(intslot,Command*onCommand,Command*offCommand){
(4)=onCommand;
(5)=offCommand;
}
voidonButtonWasPushed(intslot){(6);}
voidoffButtonWasPushed(intslot){(7);}
};
intmain(){
RemoteControl*remoteControl=newRemoteControl();
Light*livingRoomLight=newLight("LivingRoom");
Light*kitchenLight=newLight("kitchen");
LightOnCommand*livingRoomLightOn=newLightOnCommand(livingRoomLight);
LightOffCommand*livingRoomLightOff=newLightOffCommand(livingRoomLight);
LightOnCommand*kitchenLightOn=newLightOnCommand(kitchenLight);
LightOffCommand*kitchenLightOff=newLightOffCommand(kitchenLight);
remoteControl->setCommand(0,livingRoomLightOn,livingRoomLightOff);
remoteControl->setCommand(1,kitchenLightOn,kitchenLightOff);
remoteControl->onButtonWasPushed(0);
remoteControl->offButtonWasPushed(0);
remoteControl->onButtonWasPushed
(1);
remoteControl->offButtonWasPushed
(1);
/*其余代码省略*/
return0;
}
【解析】正确答案:
(1)virtualvoidexecute()=0
(2)light->on()
(3)light->off()
(4)onCommands[slot]
(5)offCommands[slot]
(6)onCommands[slot]->execute()
(7)offCommands[slot]->execute()。
本题考查设计模式的实现,难度较小。
根据类图和已有代码可写出空缺的代码,书写方式注意java和C++的区别即可。
Command类为所有的命令声明了一个接口,因此需要一个纯虚函数,这个函数根据下面的子类可以看到,应该为execute(),因此第一空填写virtualvoidexecute()=0;
(2)和(3)定义了开灯、关灯action,因此,分别填写
(2)light->on()(3)light->off();
(4)(5)分别设置“开灯”命令对象、“关灯”命令对象,因此分别填写(4)onCommands[slot](5)offCommands[slot];
(6)(7)分别完成对开灯、关灯命令对象的execute方法的调用,因此分别填写(6)onCommands[slot]->execute()
(7)offCommands[slot]->execute()。
第7题
单选题
在程序执行过程中,高速缓存(Cache)与主存间的地址映射由()
A.操作系统进行管理
B.存储管理软件进行管理
C.程序员自行安排
D.硬件自动完成
【解析】正确答案:
D。
Cache的概念考查:
Cache与主存地址映射由硬件完成。
第8题
单选题
对高级语言源程序进行编译的过程可以分为多个阶段,分配寄存器的工作在()阶段进行。
A.词法分析
B.语法分析
C.语义分析
D.目标代码生成
【解析】正确答案:
D。
目标代码生成阶段应考虑直接影响到目标代码速度的三个问题:
一是如何生成较短的目标代码;二是如何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数;三是如何充分利用计算机指令系统的特点,以提高目标代码的质量。
第9题
案例题
阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
某发票(lnvoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。
现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。
【C++代码】
#include
usingnamespacestd;
classInvoice{
public:
(1){
cout<<"Thisisthecontentoftheinvoice!
"<}
};
classDecorator:
publicInvoice{
Invoice*ticket;
public:
Decorator(lnvoice*t){ticket=t;}
voidprintInvoice(){
if(ticket!
=NULL)
(2);
}
};
classHeadDecorator:
publicDecorator{
public:
HeadDecorator(lnvoice*t):
Decorator(t){}
voidprintInvoice(){
cout<<"Thisistheheaderoftheinvoice!
"< (3); } }; classFootDecorator: publicDecorator{ public: FootDecorator(Invoice*t): Decorator(t){} voidprintlnvoice(){ (4); cout<<"Thisisthefootnoteoftheinvoice! "< } }; intmain(void){ Invoicet; FootDecoratorf(&t); HeadDecoratorh(&f); h.printInvoice(); cout<<”------------------------” HeadDecoratorb((5)); b.printInvoice(); return0; } 程序的输出结果为: Thisistheheaderoftheinvoice! Thisisthecontentoftheinvoice! Thisisthefootnoteoftheinvoice! ---------------------------- Thisistheheaderoftheinvoice! Thisisthefootnoteoftheinvoice! 【解析】正确答案: (1)virtualvoidprintInvoice() (2)ticket->printInvoice() (3)Decorator: : printInvoice() (4)Decorator: : printInvoice() (5)&a。 1.Invoice类下,定义虚函数,按类图,函数名是printInvoice。 2.前面定义对象名是ticket,那么在ticket不为空的时候调用函数printInvoice。 3.这部分填写发票的抬头,看类图应该实现函数printInvoice,Decorator装饰模式使用该方法。 4.这部分是发票的脚注,看类图应该实现函数printInvoice,Decorator装饰模式使用该方法。 5.FootDecoratora(NULL);脚步的装饰参数是a,调用a参数。 第10题 单选题 设系统中有三种类型的资源(A、B、C)和五个进程(P0,P1,P2,P3,P4),某时刻的状态如下: 根据银行家算法可知,该时刻存在着一个安全序列()。 A.P1,P3,P0,P4,P2 B.P2,P4,P1,P3,P0 C.P4,P1,P0,P3,P2 D.P3,P1,P2,P4,P0 【解析】正确答案: A。 简单地说,银行家算法就是保证“贷出去的款能够收得回来”。 从给出的序列中,系统中有三类资源A,B和C,其中Allocation栏表明P0-P4进程已经分得的资源数,MAX栏P0-P4进程需要申请的资源数,Available栏表明系统中还剩余的资源数。 分析该问题的关键是资源C,当前状态下,系统已经没有资源C了,所以,第1个能够运行的进程必须不再需要C,只有P1,P2满足条件,因此就排除了答案C和D。 P2还需要9-3=6个资源A,而系统中只有2个资源A,如果把这两个资源A分配给P2,则会死锁,分配的资源收不回来,所以,只能把剩余的资源分配给P1,则P1可正常运行,等P1运行完后,释放其所有资源,系统再按上述步骤重新分配资源,依次类推。 第11题 单选题 下图所示的有限自动机中,0是初始状态,3是终止状态,该自动机可以识别()。 A.abab B.aaaa C.bbbb D.abba 【解析】正确答案: B。 本题主要考查有限自动机。 在题目中,0是初始状态,3是终止状态,通过选项中的字符串可以从初始状态到达终止状态,则说明该字符串能被题目中的自动机识别。 也可以理解为依次输入选项中的字符串,可以在该自动机中找到相应的路径。 对于选项A的字符串abab,通过ab可以达到终止状态,然后输入a任然可以有路径,但再输入b时,没有路径与其对应。 因此A不可被该自动机识别。 同样的道理,我们可以找到字符串aaaa能被该自动机识别。 第12题 单选题 统一过程(UP)是一种用例驱动的迭代式增量开发过程,每次迭代过程中主要的工作流包括捕获需求、分析、设计、实现和测试等。 这种软件过程的用例图(UseCaseDiagram)是通过()得到的。 A.捕获需求 B.分析 C.设计 D.实现 【解析】正确答案: A。 统一过程的基本特征是用例驱动、以架构为中心的迭代式增量开发。 其核心的工作流包括捕获用户需求、分析、设计、实现和测试等。 首先,开发人员通过和用户的沟通、了解,捕获用户需求并制作软件用例图(用况图),从而得到软件的用况模型。 然后分析并设计满足这些用例的系统,得到分析模型、设计模型和实施模型,进而实现该系统,最后通过测试模型来验证系统是否满足用况中描述的功能。 需求捕获过程中得到的用例将各个核心工作流结合为一个整体,驱动整个软件开发过程。 第13题 单选题 事务的()是指,当某个事务提交(COMMIT)后,对数据库的更新操作可能还停留在服务器磁盘缓冲区而未写入到磁盘时,即使系统发生障碍事务的执行结果仍不会丢失 A.原子性 B.一致性 C.隔离性 D.持久性 【解析】正确答案: D。 本题考查事务的ACID特性: 1、原子性(Atomicity): 事务是原子的,要么做,要么都不做。 2、一致性(Consistency): 事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态。 3、隔离性(lsolation): 事务相互隔离。 当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事物都是不可见的。 4、持久性(Durability): 一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也永久有效。 题干描述的是持久性 第14题 单选题 CPU访问存储器时,被访问数据一般聚集在一个较小的连续存储区域中。 若一个存储单元已被访问,则其邻近的存储单元有可能还要被访问,该特性被称为()。 A.数据局部性 B.指令局部性 C.空间局部性 D.时间局部性 【解析】正确答案: C。 程序的局限性表现在时间局部性和空间局部性: (1)时间局部性是指如果程序中的某条指令一旦被执行,则不久的将来该指令可能再次被执行; (2)空间局部性是指一旦程序访问了某个存储单元,则在不久的将来,其附近的存储单元也最有可能被访问。 题干的描述指的是空间局部性。 第15题 单选题 以下关于TCP/IP协议和层次对应关系的表示中,正确的是()。 A. B. C. D. 【解析】正确答案: A。 本题基于TCP的协议有HTTP、SMTP、FTP、Telnet。 基于UDP的协议有SNMP。 本题符合的只有A选项。 第16题 单选题 海明码利用奇偶性检错和纠错,通过在n个数据位之间插入k个检验位,扩大数据编码的码距。 若n=48,则k应为()。 A.4 B.5 C.6 D.7 【解析】正确答案: C。 设: N为待发送海明码的总位数,n是有效信息位数,r是校验位个数(分成r组作奇偶校验,能产生r位检错信息) 校验位的个数r应满足公式: N=n+r≤2r-1。 此题中n=48,校验位个数为k,则n+k≤2k-1,即48+k≤2k-1,则k为6。 第17题 案例题 设有m台完全相同的机器运行n个独立的任务,运行任务i所需的时间为ti,要求确定一个调度方案,使得完成所有任务所需要的时间最短。 假设任务已经按照其运行时间从大到小排序,算法基于最长运行时间作业优先的策略,按顺序先把每个任务分配到一台机器上,然后将剩余的任务依次放入最先空闲的机器。 【C代码】 下面是算法的C语言实现。 1.常量和变量说明 m: 机器数 n: 任务数 t[]: 输入数组,长度为n,下标从0开始,其中每个元素表示任务的运行时间,下标从0开始。 s[][]: 二维数组,长度为m*n,下标从0开始,其中元素s[i][j]表示机器i运行的任务j的编号。 d[]: 数组,长度为m其中元素d[i]表示机器i的运行时间,下标从0开始。 count[]: 数组,长度为m,下标从0开始,其中元素count[i]表示机器i运行的任务数。 i: 循环变量。 j: 循环变量。 k: 临时变量。 max: 完成所有任务的时间。 min: 临时变量。 2.函数schedule voidschedule(){ inti,j,k,max=0; for(i=0;id[i]=0; for(j=0;js[i][j]=0; } } for(i=0;is[i][0]=i; (1); count[i]=1; } for( (2);iintmin=d[0]; k=0; for(j=1;jif(min>d[j]){ min=d[j]; k=j;//机器k空闲 } } (3); count[k]=count[k]+1; d[k]=d[k]+t[i]; } for(i=0;iif((4)){ max=d[i]; } } } 【问题1】(8分) 根据说明和C代码,填充C代码中的空 (1)~(4)。 【问题2】(2分) 根据说明和C代码,该问题采用了(5)算法设计策略,时间复杂度(6)(用O符号表示) 【问题3】(5分) 考虑实例m=3(编号0~2),n=7(编号0~6),各任务的运行时间为{16,14,6,5,4,3,2}。 则在机器0、1和2上运行的任务分别为(7)、(8)和(9)(给出任务编号)。 从任务开始运行到完成所需的时间为(10)。 【解析】正确答案: 【问题1】 (1)d[i]=t[i] (2)i=m(3)s[k][count[k]]=i(4)max 【问题2】 (5)贪心(6)O(mn) 【问题3】 (7)0(8)1、5(9)2、3、4、6(10)17。 本题考查算法的设计和分析技术中的贪心算法。 贪婪算法(Greedyalgorithm)是一种对某些求最优解问题的更简单、更迅速的设计技术。 用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中级 软件 设计师 历年 经典 解析 part12