精编版上半年软件设计师考试真题及答案下午卷.docx
- 文档编号:4357190
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:22
- 大小:137.39KB
精编版上半年软件设计师考试真题及答案下午卷.docx
《精编版上半年软件设计师考试真题及答案下午卷.docx》由会员分享,可在线阅读,更多相关《精编版上半年软件设计师考试真题及答案下午卷.docx(22页珍藏版)》请在冰豆网上搜索。
精编版上半年软件设计师考试真题及答案下午卷
2004上半年软件设计师考试真题及答案-下午卷
试题一
阅读下列说明和数据流图,回答问题1至问题4,将解答填入答题纸的对应栏内。
[说明]
某基于微处理器的住宅安全系统,使用传感器(如红外探头、摄像头等)来检测各种意外情况,如非法进入、火警、水灾等。
房主可以在安装该系统时配置安全监控设备(如传感器、显示器、报警器等),也可以在系统运行时修改配置,通过录像机和电视机监控与系统连接的所有传感器,并通过控制面板上的键盘与系统进行信息交互。
在安装过程中,系统给每个传感器赋予一个编号(即id)和类型,并设置房主密码以启动和关闭系统,设置传感器事件发生时应自动拨出电话号码。
当系统检测到一个传感器事件时,就激活警报,拨出预置的电话号码,并报告关于位置和检测到事件的性质等信息。
[数据流图4-1]
1、[问题1]
数据流图4-1(住宅安全系统顶层图)中的A和B分别是什么?
[数据流图4-2]
2、[问题2]
数据流图4-2(住宅安全系统第0层DFD图)中的数据存储“配置信息”会影响图中的哪些加工?
[数据流图4-3]
3、[问题3]
将数据流图4-3(加工4的细化图)中的数据流补充完整,并指明加工名称、数据流的方向(输入/输出)和数据流名称。
4、[问题4]
试说明逻辑数据流图(logicaldataflowdiagram)和物理数据流图(physicaldataflowdiagram)之间的主要差别。
试题二
阅读下列说明和算法,回答问题1和问题2,将解答填入答题纸的对应栏内。
[说明]
算法2-1是用来检查文本文件中的圆括号是否匹配。
若文件中存在圆括号没有对应的左括号或者右括号,则给出相应的提示信息,如下所示:
文件 提示信息
(1+2)
abc) 缺少对应左括号:
第2行,第4列
((def)8x)) 缺少对应左括号:
第3行,第10列
(((h)
ij)(k
(1ml) 缺少对应右括号:
第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
endif
ch←nextch();
endwhile
if(notempty())
显示错误信息(缺少对应左括号或右括号);
while(notempty())
row←pop();col←pop();
显示行号row;显示列号col
cndwhile
endif
为了识别更多种类的括号,对算法2-1加以改进后得到算法2-2。
算法2-2能够识别圆括号,方括号和花括号(不同类型的括号不能互相匹配)。
改进后,函数kinnd(charch)的参数及其对应的返回值如表4-2所示。
表4-2 函数的参数及其返回值
[算法2-2]
将栈stack置空,置EOF为False
ch←nextch();
while(notEOF.
k←kind(ch);
if(k>0)
if( 判断条件1 )
push( (5) );push( (6) );push( (7) );
elseif( 判断条件2 and 判断条件3 )
pop();pop();pop();
else
显示错误信息(缺少对应左括号或右括号);
显示行号row;显示列号col;
endif
endif
ch←nexteh();
endwhile
if(notempty())
显示错误信息(缺少对应左括号或右括号);
while(notempty())
pop();row←pop();col←pop();
显示行号row;显示列号col;
endwhile
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
LEA GR3,48
LOOP1 CPL GR0,WDT,GR1
JP2 LOOP2
ST GR3,BTASC,GR1
LEA GR1,1,GR1
LEA GR2,-4,GR1
JN2 LOOP1
(1)
LOOP2 LEA GR2,48
LOOP3 CPL GR0,WDT,GR1
JMI NEXT
(2)
LEA GR2,1,GR2
JMP LOOP3
NEXT (3)
LEA GR1,1,GR1
LEA GR2,-4,GR1
JNZ LOOP2
LAST (4) ;处理个位数
(5)
EXIT
C48 DC 48
WDT DC 10000
DC 1000
DC 100
DC 10
BTASC DS 5
DATA DC #FA59H
END
试题五
10、[函数5]
intDeleteNode(Bitree*r,inte){
Bitreep=*r,pp,s,c;
while(
(1) ){/*从树根结点出发查找键值为e的结点*/
pp=p;
if(e<p->data) p=p->Lchild;
elsep=p->Rchild
}
if(!
p)return-1;/*查找失败*/
if(p->Lchild&&p->Rchild){/*处理情况③*/
s=
(2) ;pp=p;
while( (3) ){pp=s;s=s->Rchild;}
p->dara=s->data;P=s;
}
/*处理情况①、②*/
if( (4) )c=p->Lchild;
elsec=p->Rchild
if(p==*r) *r=c;
elseif( (5) )pp->Lchild=c;
elsepp->Rchild=c;
free(p);
return0;
}
试题六
11、[程序6]
#include<ioStream.h>
template<classT>classArray;
template<classT>classArrayBody{
friend
(1) ;
T*tpBody;
intiRows,iCurrentRow;
ArrayBOdy(intiRsz,intiCsz){
tpBody=
(2) ;
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)
(3) ;
}
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){
(4) ;
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();col<-pop();”所以(5)空应填col,(6)空应填row。
因为判断条件1为真时要人栈,所以判断条件1应是判断字符是否是左括号,如果是就入栈。
所以判断条件1选b。
判断条件2和3是联系在一起的,当判断条件2和3都为真时,要进行出栈操作,因此要判断栈是否为空。
由此可以得出判断条件2和3中,有一个是用来判断栈是否为空的。
备选答案的一些选项给了一些提示,就是用判断栈顶元素,来确定当前括号是否和栈中压人括号是同一类型的。
但前提是左括号类型入了栈,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精编 上半年 软件 设计师 考试 答案 下午