[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷18及答案与解析.doc
《[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷18及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷18及答案与解析.doc(21页珍藏版)》请在麦多课文档分享上搜索。
1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 18及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读下列说明以及图示 (如图 1所示 ),回答问题 1 3。【说明】 某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成,绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。 在每个学期的开始,学生可 以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、
2、开课系和选课条件等。 新学期开始前两周为选课注册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过 4门课程,同时指定 2门侯选课程以备主选课程未选上。每门课程最多不能超过 10人,最少不能低于 3人,低于 3人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付费。如果在实际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改。 在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。 【用例图】【时序图】 注释 1:学生打算注册
3、新的课程。 注释 2:一张这学期可选择的课程列表。 注释 3:显示一张为学生选课用的空白登记表。 1 在 UML中,用例代表一个完整的功能,如与角色通信、进行计算或在系统内工作等。请简要说明用例具有哪些的特征,并指出用例图中 (1) (3)处表示的内容。 2 协作图与时序图是同构的,二者表示的都是同样的系统交互活动,只是各自的侧重点不同而已。根据题目提 供的信息,指出协作图中 (4) (8)处表示的内容。 3 UML采用 5个互联的视图来描述软件系统的体系结构,即用例视图 (Usecase View)、设计视图 (Design View)、进程视图 (Process View)、实现视图(Im
4、plementation View)和展开视图 (Deployment View)。系统模型中每一个视图的内容是由一些图来描述的, UML中包含用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、分布图等 9种图。对整个系统而言,其功能由用例图描述,静态结构由类图和对象 图描述,动态行为由状态图、时序图、协作图和活动图描述,而物理架构则是由组件图和分布图描述。请分别指出用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、分布图的作用。4 阅读下列说明和算法,回答问题 1和问题 2。【说明】 算法 2-1是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号
5、或者右括号,则给出相应的提示信息,如下所示: 文件 提示信息 (1+2) abc) 缺少对应左括号:第 2行,第 4列 (def)gx) 缺少对应左括号:第 3行,第 10列 (h) ij)(k (1ml) 缺少对应右括号:第 5行,第 4列;第 4行,第 1列 在算法 2-1中, stack为一整数栈。算法中各函数的说明见表 4。【算法 2-1】将栈 stack 置空,置 EOF为 false ch - nextch(); while( not EOF) k - kind(CH); if(k= (1) ) push( (2) );push( (3) ); elseif(k= (4) ) if
6、(not empty() pop( ) ;pop( ); else 显示错误信息 (缺少对应左括号或右括号 ); 显示 行号 row;显示列号 col; endif endif ch - nextch( ); endwhile if(not empty() 显示错误信息 (缺少对应左括号或右括号 ); while(not empty() row - pop() ; col - pop(); 显示行号 row; 显示列号 col; endwhile endif 为了识别更多种类的括号,对算法 2-1加以改进后得到算法 2-2。算法 2-2能够识别圆括号、方括号和花括号 (不同类型的括号不能互相匹
7、配 )。改进后,函数 kind(char ch)的参数及其对应的返回值见表 5。 【算法 2-2】 将栈 stack置空,置 EOF为 false ch -nextch(); while(not EOF) 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 - nextch();endwhileif(not empty( ) ) 显示错误信息 (缺少对
8、应左括号或右括号 ); while( not empty( ) ) pop( ); rowpop( ); colpop( ); 显示行号 row;显示列号 col; endwhileendif 4 请将【算法 2-1】和【算法 2-2】中 (1) (7)处补充完整。 5 请从下面的选项中选择相应的判断逻辑填补【算法 2-1】中的 “判断条件 1”至 “判断条件 3”。注意,若 “判断条件 2”的逻辑判断结果为假,就无需对 “判断条件 3”进行判断。 (a)字符是括号 (b)字符是左括号 (c)字符是右括号 (d)栈空 (e)栈不空 (f)栈顶元素表示的是与当前字符匹配的左括号 (R)栈顶元素表
9、示的是与当前字符匹配的右括号 6 阅读下列说明,回答问题 1问题 4。【说明】 某超市的销售业务由一个销售业务管理系统进行管理,该系统每完成一次交易都需要提供顾客发票,其格式见表 6所示。 对于这样一个销售业务管理系统,分别给出了以下两种关系数据库的设计 (下划线表示主关键字 ) 设计一: 顾客 Customer(顾客代码 Cno,姓名 name,住址 address,联系电话 phone) 收银员 Salesman(收银员代码 Sno,身份证号 idno,姓名 name,住址 address,联系电话 phone) 商品 Merchandise(商品代码 Mno,商品名称 Mname,价格
10、price) 发票 Invoice(发票号码 Ino,交易日期 Idate,顾客代码 Cno,收银员代码 Sno,商品代码 Mno,单价 unitpfice,数量 amount) 设计二: 顾客 Customer(顾客代码 Cno,姓名 name,住址 address,联系电话 phone) 收银员 Salesman(收银员代码 Sno,身份证号 idno,姓名 name,住址 address,联系电话 phone) 商品Memhandise(商品代码 Mno,商品名称 Mname,价格 price) 发票 Ivoice(发票号码Ino,交易日期 Idate,顾客代码 Cno,收银员代码 Sn
11、o) 发票明细 Invoicedetail(发票号码 Ino,商品代码 Mno,单价 unitprice,数量 amount) 6 设计一的关系模式 Invoice最高满足第几范式 ?为什么 ?设计一和设计二哪个更加合理 ?为什么 ? 7 根据设计二中关系模式,以下 SQL语句是用于 “建立 2005年 1月期间 每张发票的发票号,交易日期,交易商品件数和交易总金额的视图 ”的不完整语句,请填补其中的空缺。 CREATE VIEW Invoice -total(1) SELECT Invoice. ino, ldate,(2), (3) FROM Invoice, lnvoicedetail
12、WHERE(4)AND ldate BETWEEN 2005-01-01AND 2005-01-31 GROUPBY(5); 8 根据设计二中关系模式,以下 SQL语句是用于 “查询从未售 出的商品信息 ”的不完整语句,请填补其中的空缺。 SELECT Mno, Mname, price FROM Merchandise(1) WHERE(2) (SELECT(3) FROM lnvoicedetail WHERE A. Mno=lnvoicedetail. Mno); 9 设计二中关系 Merchandise中由属性 price表示商品价格,关系 lnvoicedetail中的属性 unit
13、price也表示商品价格。两个是否有必要同时存在 ?为什么 ? 10 阅读下 列函数说明,将应填入 (n)处的字句写在对应栏内。 【函数 1说明】 函数 compare(SqList A, SqList B)的功能是:设 A=(al, , am)和 B=(b1, , bn)均为顺序表, “比较 ”,两个顺序表 A和 B的大小。设 A 和 B 分别为 A和 B中除去最大共同前缀后的子表 (例如, A=(y, x, x, z, x, z), B=(y, x, x, 2, y, x,x, z),则两者中最大的共同前缀为 (y, x, x, z),在两表中除去最大共同前缀后的子表分别为 A=(x, z
14、)和 B=(y, x, x, z)。若 A=B=空表,则 A=B;若 A=空表,而 B空表,或者两者均不为空表,且 A的首元小于 B首元,则 A B:否则A B。 提示:算法的基本思想为:若相等,则 j+1,之后继续比较后继元素;否则即可得出比较结果。显然, j的初值应为 0,循环的条件是 j不超出其中任何一个表的范围。若在循环内不能得出比较结果,则循环结束时有 3种可能出现的情况需要区分。 【函数 1】 int compare ( SqListA, SqList B) /若 A B,则返回 -1;若 A=B,则返回 0:若 A B,则返回 1 j =0; while(i (1) else (
15、2); if(A. length = B. length) return(0); else if(A. length B. length)return(-1); else return(1) /compare /函数 1的时间复杂度是 (3)。 【函数 2说明】 函数 exchanse_L(SLnk L, int m)的功能是:用尽可能少的辅助空间将单链表中前 m个结点和后 n个结点的互换。即将单链表 (a1、 a2 , am, b1, b2, , bn)改变成 (b1, b2, , bn, a1, a2, , am, )。 【函数 2】 void exchange_L(SLink k=1;
16、while( k m+k; if( (6) /以指针 ha记 a1结点的位置 L - next = p - next; /将 B1结点链接在头结点之后 p - next = NULL; /设 am的后继为空 q=(7); /令 q指向 b1结点 while(q- next)q =(8); /查找 bn结点 q- next=(9); /将 a1结点链接到 bn结点之后 /函数 2的时间复杂度是 (10)。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 11 阅读下列程序说明和 C代码,将应填入 (n)处
17、。 【程序 5说明】 著名的四色定理 指出任何平面区域图均可用四种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过四种颜色的着色方案。 程序中用 1 4表示四种颜色。要着色的 N个区域用 0 N-1编号,区域相邻关系用 adj矩阵表示,矩阵的 i行 j列的元素为 1,表示区域 i与区域 j相邻;矩阵的 i行 j列的元素为 0,表示区域 i与区域 j不相邻。数组 color用来存储着色结果,colori的值为区域 i所着颜色。 【程序 5】 #include stdio.h #define N 10 void output(int color)/*输出一种着色方案 */
18、 int i; for(i=0; i N; i+) printf(“%4d“, colori); printf(“n“); int back (int * ip, int color)/*回溯 */ int c=4; while(c=4) if(*ip =0)return 0; (*ip); c=(1); color*ip=-1; return c; /*检查区域 i,对 c种颜色的可用性 */ int colorOk(int i, int c, int N, int color int j; for(j=0; j i; j+) if(2) return 0; return 1; /*为区域
19、i选一种可着的颜色 */ int select (int i, int c, int adjN, int color) int k; for(k=c; k =4; k+) if(colorOK(3) return k; return 0; int coloring(int adjN)/*寻找各种着色方案 */ int colorN, i, c, cnt; for(i=0; i N; i+)colori =-1; i=c=0; cnt=0; while(1) if(c=(4)=0) c=back( public: List()list=NULL; void reverseList(); void
20、 multiplyList(List L1, List L2); void createList(); ; void List:createList() |tem * p, * u, *pre; int exp; doubte quot; list=NULL; while(1) cout “输入多项式中的一项 (系数、指数 ): “ endl; cin quot exp: if(exp 0)break; /指数小于零,结束输入 if(quot=0)continue; p=list; while(2) /查找插入点 pre=p; p=p- next; if(p!=NULL&exp=p- exp)
21、 p- quot+=quot; continue; u=(3); if(p=list) list=u; else pre- next=u; u- next=p; void List: reverseList() |tem*p, *u; if(list=NULL)return; p=list- next; list- next NULL; while(p! NULL) u=p- next; p- next=list; list=p; p=u; void List: multiplyList(List L1, List L2) |tem*pLI, *pL2, *u; int k, maxExp;
22、double quot; maxExp=(4); L2.reverseList(); list NULL; for(k=maxExp; k =0; k-) pL1=L1.list; while(pL1!=NULL&pL1- exp k)pL1=pL1- next; pL2 L2.list; while(pL2!=NULL&(5) pL2=pL2- next; quot=0.0; while(pL1!=NULL&pL2!=NULL) if(pL1- exp+pL2- exp=k) (6); pL1=pL1- next; pL2=pL2- next; else if(pL1- exp+pL2- e
23、xp k) pL1=pL1- next; else pL2=pL2- next; if(quot!=0.0) u=new |tem(quot, k); u- next=list; list=u; reverseList(: ); L2.reverseList(): void main() ListL1, L2, L; cout “创建第一个多项式链表 n“; L1.createList(); cout “创建第二个多项式链表 n“; L2.createList(); L.multiplyList(L1, L2); 13 【 说明】 下面是一个 Applet程序,其功能是根据给出的小时,分钟和秒
24、数计算相等的秒数,即将 1分钟化为 60秒,依此类推。要求建立一个时间类,时间参数均作为类的成员变量,并且给出换算时间的方法,也作为这个类的成员函数,可以供外部对象进行调用。同时还需要在输出窗口中显示换算结果,并且将结果写到out3_3.txt文件中,本题给出确定的时间为 4小时 23分 47秒,要求换算成以秒做单位的时间。 程序运行结果如图 11所示。 import java.io.*; import java.awt.*; impOrt java.applet.*; /* applet code=ex7_7.class width=800 height=400 /applet */ pub
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 软件 水平 考试 中级 设计师 下午 应用技术 试题 模拟 18 答案 解析 DOC
