精编版上半年软件设计师考试真题及答案下午卷文档格式.docx

上传人:b****5 文档编号:17282228 上传时间:2022-11-30 格式:DOCX 页数:22 大小:137.39KB
下载 相关 举报
精编版上半年软件设计师考试真题及答案下午卷文档格式.docx_第1页
第1页 / 共22页
精编版上半年软件设计师考试真题及答案下午卷文档格式.docx_第2页
第2页 / 共22页
精编版上半年软件设计师考试真题及答案下午卷文档格式.docx_第3页
第3页 / 共22页
精编版上半年软件设计师考试真题及答案下午卷文档格式.docx_第4页
第4页 / 共22页
精编版上半年软件设计师考试真题及答案下午卷文档格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

精编版上半年软件设计师考试真题及答案下午卷文档格式.docx

《精编版上半年软件设计师考试真题及答案下午卷文档格式.docx》由会员分享,可在线阅读,更多相关《精编版上半年软件设计师考试真题及答案下午卷文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

精编版上半年软件设计师考试真题及答案下午卷文档格式.docx

缺少对应右括号:

第5行,第4列;

第4行,第1列

在算法2-1中,stack为一整数栈。

算法中各函数的说明如表4-1所示。

[算法2-1]

将栈stack置空,置EOF为False

ch←nextch();

while(notEOF.

k←kind(ch);

if(k== 

(1) 

push( 

(2) 

);

push( 

(3) 

elself(k== 

(4) 

if(notempty())

pop(),pop(),

else

显示错误信息(缺少对应左括号或右括号);

显示行号row;

显示列号col;

endif

ch←nextch();

endwhile

if(notempty())

显示错误信息(缺少对应左括号或右括号);

while(notempty())

row←pop();

col←pop();

显示行号row;

显示列号col

cndwhile

为了识别更多种类的括号,对算法2-1加以改进后得到算法2-2。

算法2-2能够识别圆括号,方括号和花括号(不同类型的括号不能互相匹配)。

改进后,函数kinnd(charch)的参数及其对应的返回值如表4-2所示。

表4-2 

函数的参数及其返回值

[算法2-2]

if(k>0)

if( 

判断条件1 

(5) 

(6) 

(7) 

elseif( 

判断条件2 

and 

判断条件3 

pop();

ch←nexteh();

endif

5、[问题1]

试将[算法2-1)和[算法2-2]中

(1)~(7)处补充完整。

[问题2]

从下面的选项中选择相应的判断逻辑填补[算法2-2]中的“判断条件1”至“判断条件3”。

注意,若“判断条件2”的逻辑判断结果为假,就无需对“判断条件3”进行判断。

(a)字符是括号(b)字符是左括号(c)字符是右括号(d)栈空(e)栈不空

(f)栈顶元素表示的是与当前字符匹配的左括号

(g)栈顶元素表示的是与当前字符匹配的右括号

试题三

阅读下列说明以及图4-4和图4-5,回答问题1、问题2和问题3,将解答填入答题纸的对应栏内。

某电话公司决定开发一个管理所有客户信息的交互式网络系统。

系统的功能如下。

1.浏览客户信息:

任何使用因特网的用户都可以浏览电话公司所有的客户信息(包括姓名、住址、电话号码等)。

2.登录:

电话公司授予每个客户一个账号。

拥有授权账号的客户,可以使用系统提供的页面设置个人密码,并使用该账号和密码向系统注册。

3.修改个人信息:

客户向系统注册后,可以发送电子邮件或者使用系统提供的页面,对个人信息进行修改。

4.删除客户信息:

只有公司的管理人员才能删除不再接受公司服务的客户的信息。

系统采用面向对象方法进行开发,在开发过程中确定的类如表4-3所示。

表4-3 

开发过程中确定的类

[图4-4]

[图4-5]

6、[问题1]

在需求分析阶段,采用UML的用例图(usecasediagram)描述系统功能需求,如图4-4所示。

指出图中的A,B,C和D分别是哪个用例?

7、[问题2]

在UML中,重复度(multiplicity)定义了某个类的一个实例可以与另一个类的多个实例相关联。

通常把它写成一个表示取值范围的表达式或者一个具体的值。

例如,图4-5中的类InternetClient和CustomerList,InternetClient端的“0...*”表示:

1个CustomerList的实例可以与0个或多个InternetClient的实例相关联;

CustomerList端的“1”表示:

1个InternetClient的实例只能与1个CustomerList的实例相关。

指出图4-5中

(1)~(4)处的重复度分别为多少?

8、[问题3]

类通常不会单独存在,因此当对系统建模时,不仅要识别出类,还必须对类之间的相互关系建模。

在面向对象建模中,提供了4种关系:

依赖(dependency)、概括(generalization)、关联(association)和聚集(aggregation)。

分别说明这4种关系的含义,并说明关联和聚集之间的主要区别。

试题四

9、[程序4]

START

PRUGBC 

LD 

GR0,DATA

LEA 

GR1,0

GR3,48

LOOP1 

CPL 

GR0,WDT,GR1

JP2 

LOOP2

ST 

GR3,BTASC,GR1

GR1,1,GR1

GR2,-4,GR1

JN2 

LOOP1

 

LOOP2 

LEA 

GR2,48

LOOP3 

JMI 

NEXT

GR2,1,GR2

JMP 

LOOP3

NEXT 

JNZ 

LOOP2

LAST 

处理个位数

EXIT

C48 

DC 

48

WDT 

10000

1000

DC 

100

10

BTASC 

DS 

5

DATA 

#FA59H

END

试题五

10、[函数5]

intDeleteNode(Bitree*r,inte){

Bitreep=*r,pp,s,c;

while( 

){/*从树根结点出发查找键值为e的结点*/

pp=p;

if(e<p->data) p=p->Lchild;

elsep=p->Rchild

}

if(!

p)return-1;

/*查找失败*/

if(p->Lchild&

&

p->Rchild){/*处理情况③*/

s= 

pp=p;

){pp=s;

s=s->Rchild;

}

p->dara=s->data;

P=s;

/*处理情况①、②*/

if( 

)c=p->Lchild;

elsec=p->Rchild

if(p==*r) 

*r=c;

elseif( 

)pp->Lchild=c;

elsepp->Rchild=c;

free(p);

return0;

试题六

11、[程序6]

#include<ioStream.h>

template<classT>classArray;

template<classT>classArrayBody{

friend 

T*tpBody;

intiRows,iCurrentRow;

ArrayBOdy(intiRsz,intiCsz){

tpBody= 

iRows=iRsz,iColumns=iCsz;

iCurrentRow=-1;

public:

T&

operator[](intj){

boolrow_error,column_error;

row_error=column_error=false;

try{

if(iCurrentRow<0||iCurrentRow≥iRows)

row_error=;

if(j<0||j≥iColumns

column_error=;

if(row_error==true||column_error==true)

eatch(char){

if(rowerror==true)

cerr<<“行下标越界[“<<iCurrentRow<<”]”;

if(columnerror==true)

cerr<<“列下标越界[“<<j<<”]”;

cout<<“\n”;

returntpBody[iCurrentRow*iColumns+j];

~ArrayBody(){delere[]tpBody;

};

template<classT>classArray{

ArrayBody<T>tBody;

public:

ArrayBody<T>&

operator[](inti){

returntBody;

};

voidmain()

{

Array<int>a1(10,20);

Array<double>a2(3,5);

intb1;

doubleb2;

b1=a1[-5][10];

/*有越界提示:

行下标越界[-5]*/

b1=a1[10][15];

行下标越界[10]*/

b1=a1[1][4];

/*没有越界提示*/

b2=a2[2][6];

列下标越界[6]*/

b2=a2[10][20];

行下标越界[10]列下标越界[20]*/

b2=a2[1][4];

答案:

1、A:

传感器;

B:

报警器

试题1[分析]

本题是一道分层数据流图的题目。

解答此类问题最关键的一点就是要细心,把题目看清,不要丢掉任何一个条件。

另外解题有一定的技巧,从一些常规的入口作为突破口,会事半功倍。

现在就利用分层数据流图的数据流的平衡原则(即父图和子图(加工图)的一致性)来解题。

子图是其父图中某一部分内部的细节图(加工图)。

它们的输入输出数据流应该保持一致。

如同看到地上有只蚂蚁有6条细细的腿,中间是一个小黑点,要看得更清楚一些就拿放大镜看。

这时能看到它的头、触角、身体和比较粗的腿,但是看到的一定还是6条腿,不是7条,也不是3条。

子图也是如此,在上一级中有几个数据流,它的子图也一定有同样的数据流,而且它们的输送方向是一致的(也就是说原图有3条进的数据流,2条出的数据流,子图同样也是)。

用这条原则可以轻松地解决问题3。

在0层图中,“4监控传感器”模块有1条输入数据流——“传感器状态”和3条输出数据流——“电话拨号”、“传感器数据”和“告警类型”。

在加工4的细化图中,仅看到了输出数据流“告警类型”,所以知道此加工图少了“传感器状态”、“电话拨号”、“传感器数据”这3条数据流。

加工4的结构非常清晰,所以只需把这3条数据流对号入座即可,“电话拨号”应是“4.5拨号”的输出数据流;

“传感器状态”应是作为“4.4读传感器”处理的输入数据流;

“传感器数据”应该是经“4.1显示格式”处理过的数据流,所以作为“4.1显示格式”的输出数据流。

[问题1]

此题和以往试题有所不同。

以往都给定了完整正确的顶层图。

现在顶层图不完整,可以通过题目说明信息以及顶层图来分析顶层图并解答问题。

题目中提到了“房主可以在安装该系统时配置安全监控设备(如传感器,显示器,报警器等)”在顶层图中这3个名词都没有出现,但仔细观察,可以看出“电视机”实际上就是“显示器”。

因为它接收TV信号并输出。

再看其他的几个实体都和“传感器”“报警器”没有关联。

又因为A中输出“传感器状态”到“住宅安全系统”所以A应填“传感器”。

B接收“告警类型”,所以应填“报警器”。

2、密码处理;

4.监控传感器;

5.显示信息和状态

首先,毫无疑问“4监控传感器”用到了配置信息文件,这点可以在加工4的细化图中看出。

接着,观察。

层图,“3密码处理”这个处理是用于检验密码的,且它只有1个输出数据流“检验ID信息”到“显示信息和状态”,没有反馈回来的数据流,所以“检验ID信息”是已经验证通过的用户的信息,用户输入密码应是在“3密码处理”这个环节中进行验证的(因为如果密码验证是在“5显示信息和状态”中进行的,那么从“5显示信息和状态”应有1条不合法用户的数据流反馈到“密码处理”)。

所以“密码处理”一定要用到配置信息文件中的用户名和密码。

同时由于输出到“5显示信息和状态”的数据流是“检验ID信息”,所以“5显示信息和状态”也用到了配置信息文件。

3、  4、物理数据流图关注的是系统中的物理实体,以及一些具体的文档、报告和其他输入输出硬拷贝。

物理数据流图用作系统构造和实现的技术性蓝图。

逻辑数据流图强调参与者所做的事情,可以帮助设计者决定需要哪些系统资源;

为了运行系统用户必须执行的活动;

在系统安装之后如何保护和控制这些系统等。

在逻辑数据流图中说明应该具有哪些加工和数据存储,而不关心这些加工和数据存储是如何实现的;

物理数据流图则要说明加工和数据存储是如何实现的。

  

5、1

(2)col

(3)row

(4)2

(5)col

(6)row

(7)k

判断条件1:

(b)

判断条件2:

(e)

判断条件3:

(f)

[解析]

本程序的功能是检查文本文件中的圆括号是否匹配。

从提示信息中,可以看出程序不但可以检查出是否有括号匹配错误,而且还知道具体错在哪个括号。

由于括号匹配的规则是把最近的左右括号配成一对,所以括号匹配最常用的方法是遇到左括号则入栈,遇到右括号就出栈,出栈的友括号与当前的右括号是匹配的。

此算法也不例外。

下面具体分析算法:

首先,把栈置空,置EOF为False,并从文件中读取第一个字符到ch。

然后进入循环,循环体执行一次处理一个ch。

进入循环,利用kind函数算出ch的类型k,接下来就是一大堆的空了,这个算法本身并不长,但空有这么多,而且比较集中,为解题增加了一定的难度。

这里虽然空多,但基本结构却很明显,大致流程如下:

当k等于什么的时候把什么入栈,当k等于什么的时候且栈不为空的时候出栈,如栈为空打印错误信息,如果都不是则读文件下一个字符再次进入循环。

再结合上面提到的算法,可以知道,入栈应是在类型k为1(即ch为左括号时),出栈应是在类型k为2(即ch为右括号时)。

所以

(1)空应填1,(4)空应填2。

(2)和(3)到底是把什么压入栈了呢?

在(4)下面出栈时,并没有用到栈的内容。

在此有些考生理所当然地认为栈中的内容没有什么用,随便压个ch进去了,而且2个都是写的ch。

其实从逻辑上就可以推翻这种解答,如果是压的同样的数据,又是在同一位置出栈,算法大可只用个push,pop就可以了。

这时继续往后面看,来寻找正确的答案。

当看到“row<-pop();

col<-pop();

”时,所有的疑惑可迎刃而解了,应该把row和col压入堆栈!

那么row和col谁先谁后呢?

由于是先弹出row后弹出col,按栈的后进先出的规则,可知先压入栈的是col,再压入row。

所以

(2)空填写col,(3)空填写row。

完成[算法2-1]的分析后,分析[算法2-2]就比较轻松了。

(5)(6)(7)空的答案可直接到后面找到,因为后面有“pop();

row<-pop();

”所以(5)空应填col,(6)空应填row。

因为判断条件1为真时要人栈,所以判断条件1应是判断字符是否是左括号,如果是就入栈。

所以判断条件1选b。

判断条件2和3是联系在一起的,当判断条件2和3都为真时,要进行出栈操作,因此要判断栈是否为空。

由此可以得出判断条件2和3中,有一个是用来判断栈是否为空的。

备选答案的一些选项给了一些提示,就是用判断栈顶元素,来确定当前括号是否和栈中压人括号是同一类型的。

但前提是左括号类型入了栈,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1