1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 19及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读以下说明和数据流图,回答问题 1 3问题。 说明 干部信息管理系统(CMIS)是用于对干部信息进行管理的特定系统。利用该系统,干部科可以对本单位干部信息进行管理,根据不同命令对信息进行增、删、改、内部调动,打印人事表格,进行统计、检索。干部科输入的系统命令需要合法性检查才能被接受、处理。系统命令可以是检索命令、统计命令、打印命令、维护命令中的任何一种。干部科的输入的干部信息数据 包括输入信息、检索项、统计项、打印项、维护项等条目。一个完整的输入信息应包括干部的档号
2、、干部的姓名、干部的性别、干部的年龄、干部的级别、干部的职称、干部的政治面貌等内容。系统进行检索处理时可以根据干部的档号、姓名或年龄进行简单检索,也可以根据 “档号 +姓名 ”或者 “性别 +年龄 ”进行组合检索。系统进行统计处理时,可以根据干部的性别、年龄或职称进行简单统计,也可以根据 “年龄 +职称 ”或 “性别 +职称 ”进行综合统计。通过系统授权,用户可以对系统进行维护。当用户需要对系统进行维护时,输入维护命令,得到合法性确认后,可以对系 统数据库信息进行修改维护。维护命令包括:增加命令,根据输入信息增加干部信息;修改命令,根据修改项修改干部信息;检索命令,根据检索项检索干部信息。系统
3、可以输出统计信息、人事表格、检索信息以供干部科用户使用。 干部信息管理系统的顶层图如图 9-1所示;干部信息管理系统的第 0层 DFD图如图 9-2所示,其中,加工 3的细化图如图 9-3所示。1 数据流图 9-1缺少了一条数据流 (在图 9-2中也未给出该数据流 ),请给出此数据流的起点和终点,并采用说明中的词汇给出此数据流名。 2 数据流图 9-3中缺少了与 “增加干部 信息 3.2”加工相关的数据流,请指出此数据流的方向,并采用说明中的词汇给出此数据流名。 3 请补齐下列数据字典条目: 系统命令 =检索命令 |统计命令 |打印命令 |维护命令; 干部信息 =_ 输入信息 =_ 检索项 =
4、_ 统计项 =_ 4 阅读以下说明和表,回答问题 1 4问题。 说明 一个描述学校的部分关系模式的结果描述如下: 1一个系有若干学生,但一个学生只能在一个系; 2一个系只有一名主任; 3一个学生可以选修多门课程,每门课程有若干学生选修; 4每个学生所学的每门课程都有一个成绩; 5 “学生 ”和 “课程表 ”及 “选课表 ”的关系示例分别如表 9-1、表 9-2、表 9-3所示。 Student(学生表 )的字段按顺序为学号(Sno)、姓名 (Sname)、性别 (Ssex)、年龄 (Sage)、所属院系 (Sdept)、系主任(Smaster); Course(课程表 )的字段按顺序为课程编号
5、 (Cno)、课程名 (Cname)、先行课程 (Cpno)、课程学分 (Ccredit); SC(选课表 )的字段按顺序为学号 (Sno)、课程号(Cno)、成绩 (Grade)。 各表的记录如下:4 试分析该关系模式中的函数依赖,并指出关系模式的候地选码。 5 如下的 SQL语句是检索 “信息系 (IS)和计算机科学系 (CS)的学生的姓名和性别 ”的不完整语句,请在空缺处填入正确的内容。 SELECT(1) FROM(2) WHERE(3) 6 如下的 SQL语句是检索 “每个学生及其选修的课程名和成绩 ”的不完整语句,请在空缺处填入正确的内容。 SELEC(1) FROM(2) WHE
6、RE(3) 7 阅读下列说明以及图 3-1和图 3-2,回答问题 1、问题 2和问题 3。 说明 下面是某公司开发的电梯管理系统,系统功能如下: 1响应用户召唤指令。当用户需要电梯时可以通过按楼层面板召唤。 2进入电梯后,乘客可以通过电梯面板选择目的楼层。 3当电梯到达调度楼层后,判断是否响应停止运行,开启电梯 门,完成调度。 4当电梯到达非调度楼层时,不作响应,继续运行。 5乘客在电梯中能够知道电梯的运动状态,如运动方向、电梯运行到的楼层等。 6电梯超载报警。 系统采用面向对象方法进行开发。在开发过程中某设计室设计的电梯管理系统用例如表 9-4所示。电梯管理系统用例图如图 9-4所示。根据说
7、明,回答下面问题: 7 仔细分析系统的用例说明和用例图,从功能要求角度来看,该系统的用例并不完善。请根据功能要求补充至少两个用例,并作简单说明。 8 图 9-5为电梯管理系统状态图。以下有 8个引起状态转移的事件。请根据 说明和系统状态图将对应的事件标号填入相应的 (n)内。 A召唤请求 B发生超载 C超载解除 D电梯就绪且状态正常 E电梯就绪但状态异常 P电梯到达非调度层 G电梯响应目的地请求 H电梯到达调度层或遇到紧急情况 9 根据 Steve Cook和 John Danils的观点,类图可以分为三个层次:概念层(Conseptual)、说明层 (Specification)和实现层 (
8、Implementation)。如何理解着三个层的划分 ?这种观点在软件开发中有什么样指导作用 ?请简要说明。 10 阅读以下说 明和 C程序,填入 (n)外。 说明 以下 C程序实现了将字符串转化为浮点数的功能。例如字符串 “1234567”转化为浮点数 1234567;字符串 “100.02035”转化为浮点数 100.02035;字符串 “-100.02035”转化为浮点数 -100.02035。程序中的部分变量的含义如表 9-5。 C程序 double StrToDouble(char*s) char hexch=“0123456789“; int i,j,psign=1; DWORD
9、 n,k,intpart=0; double doublepart=0,kdouble,resoult; char ch; if (*s=. (1); (2); char*s1=s,*temp=NULL; temp=strrchr ( s1,. ); if (!temp) k=1; intpart=0; for (i=strlen (s); i 0;i-) ch=si-1; if (ch 0x3f) ch n=0; for (j=0; j 10; j+) if ( ch=hexchj) n=j; intpart+= (n*k); k*=10; else s1=temp+1; kdouble=0
10、.1; doublepart=0; for (3) ch=s1i-1; if (ch 0x3f) ch n=0; for (j=0; j 10; j+ ) if (ch=hexchj) n=j; doublepart+= (n*kdouble); (4); *temp=NULL; k=1; intpart=0; for (5);) ch=si-1; if (ch 0x3f) ch n=0; for (j=0; j 10; j+) if (ch=hexchj) n=j; intpart+= (n*k); k*=10; /end else (6); return resoult; 二、选答题(共
11、3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 11 阅读下列程序说明和 C程序,将应填入程序中 (n)处的字句,写在对应栏内。 【程序说明】 本程序 先从文件读人各考生的准考证号 (设为整型数 )及成绩,并将其存放在一棵检索二叉树上,二叉树结点的健值是成绩,每个结点带一链表,链表结点存放取得该成绩的考生的准考证号。然后,程序按中序遍历检索二叉树,从高分到低分输出结果,使每行输出成绩及其取得成绩的考生的准考证号。 【程序】 #include stdio. h typedef struet idnode int id;
12、struct idnode * next; ldNode; typedef struct marknode I int mark; ldNode * head; struct marknode * left, * right; MarkNode; char fname = “sp07.dat“; main( ) int id, mark; MarkNode * root = null; FILE * fp = fopen(fname,“ r“ ); if(!fp) printf(“file%s open error, n“ , fname); exit(0); while (!feop(fp)
13、 fscanf(fp,“ %d%d“, btree( fclose(fp); print(root); btree(MarkNod * * mpptr, int id, int mark) ldNode * ip; MarkNode *mp = * mpptr; if (1) if (mark=p- mark) addldNODE (2), id); else if ( mark mp - mark) btree ( else btree( else Imp = ( marknode * ) malloc(sizeo (marknode) ); mp - mark = mark; mp - l
14、eft =mp - right = NULL; (3) addldNode( (4); addldNode(ldNode * * ipp, int id) ldNode * ip = * ipp; if (5)addldNode (6), id; else ip = (ldNode * )malloc(sizeof(ldNode) ); sp - id = id; ip - next = NULL; (7) print(MarkNode * rap) ldNode *ip, *ip0; if (mp) print ( mp - left); printf(“ %6d: t“ ,mp - mar
15、k); ip = mp - head; while(ip) printf(“ %6d“ ,ip - id); ip0 =ip; ip = ip - next; free (ip0); printf(“ n“ ); printf( mp - right); free(mp); 12 阅读以下说明和 C+代码,将应填 (n)处的字句写在对应栏内。 【说明】 本题将有向网 (带权有向图 )定义为类 Adjacency WDigraph。类中的数据成员 n表示有向网中的顶点数; a为带权邻接矩阵,用于存储有向网中每一对顶点间弧上的权值; c为二维数组,存储有向网中每一对顶点间的最短路径长度; kay为
16、二维数组,存储最短路径, kayij=k表示顶点 i到达顶点 j的最短路径必须经过顶点 k。类中的主要成员 函数有: Input():输入有向网的顶点数、各条弧及权值,建立带权领接矩阵 a。若顶点 i到顶点 j有弧,则 aij取弧上的权值,否则 aij的值取 NoEdge。 AllPairs();用弗洛伊德 (Floyd)算法求有向网中每一对顶点间的最短路径长度。 OutShortestPath (int i, int j:计算顶点 i到顶点 j的最短路径。 outputPath(int i, int j):输出顶点 i到顶点 j的最短路径上的顶点。 Floyd算法的基本思想是递推地产生一 个
17、矩阵序列 C0, C1, C2, , Cn,其中C0是已知的带权邻接矩阵, a, Ck(i, j(0i, j )表示从顶点 i到顶点 j的中间顶点序号不大于 k的最短路径长度。如果 i到 j的路径没有中间顶点,则对于 0k n,有 Ck(i,j)=C0(i,j)= aij。递推地产生 C1, C2, , Cn的过程就是逐步将可能是最短路径上的顶点作为路径上的中间顶点进行试探,直到为全部路径都找遍了所有可能成为最短路径上的中间顶点,所有的最短路径也就全部求出,算法就此结束。 【 C+代码】 #include iostream. h #define NoEdge 10000/ 当两个顶点之间没有边
18、相连时,在邻接矩阵中用 NoEdge表示 void Make2DArray(int * * class AdjacencyWDigraph private int n; /有向网中的顶点数目 int* *a; /存储顶点间弧上的权值 int* *c; /存储计算出的最短路径长度 int* * kay; /存储求出的最短路径 pubic: int Vertices( )const j return n; void AllPairs( ); void Input( ); /输入有向网的顶点数、各条弧及权值,建立邻接矩阵 a void OutShortestPath(int i, int j); /
19、计算顶点 i到 j的最短路径 (试卷中未列出 ) AdjacencyWDigraph ( ); /析构函数 (试卷中未列出 ) private: void outputPath(int i, int j); ; void AdjacencyWDigraph: :AllPairs( ) int i,j,k,t1,t2,t3; for(i=1;i =n; k+) for(j=1;j =n; +j) cij=(1); kayij=0; for(k=1;k =n; k+) for(i=1;i =n; i+) if(i= =k) continue; t1=cik; for(j=1;j =n; j+) i
20、f(j=k|j=i) continue; t2 =ck j; t3 =ci j; if( t1 ! = NoEdge kayij=(3); /for /for void AdjacencyWDigraph: outputPath(int i, int j) /输出顶点 i到 j的最短路径上的顶点 if(i=j) return; if(kayi j=0)cout j “; else outputPath(i,(4); outputPath(5); void Adjacency WDigraph: :lnput( ) int i,j,u,v,w,E; cout “输入网中顶点个数 :“;cin n
21、; cout “输入网中弧的个数 :“; cin E; Make2DArray (a, n+1, n+1); for(i=1;i =n; i+) for(j=1; j =n; j+) aij=NoEdge; for(i=1;i =n; i+) aii=0; Make2DArray(c, n+1, n+1); Make2DArray(kay, n+1, n+1) for(i=1;i =E; i+) cout “输入弧的信息 (起点终点权值 ); “; cin u v w; auv =w; void Make2DArray(int * * x=new int* rows+1; for(i=0;i
22、rows+1;i + ) xi=new int cols+1; for(i=1;i = rows; i +) for(j=1;j =cols; j+) xij=0; 13 【说明】 下面是一个 Applet程序,其功能是通过一个按钮控制一个窗口的创建,显示与隐藏,并且以按钮文字作为提示,可以随着窗口的状态改变 ,即如果窗口出现,则按钮文字为 “Hide myFrm“,提示用户点击按钮,则隐藏窗口,反之亦然。请将横线处语句补充完整。 程序运行结果如图 5所示: import java. awt. *; import java. applet. *; applet code =“ ex8_7. c
23、lass“ width =800 height =400 /applet */ public class ex8_7 extends Applet private Frame frm; private Button showBtn; public void init() showBtn = new Button(“Show Frame“); (1); public boolean action( Event e, Object o ) if( e. target = = showBtn ) if( (2) ) (3); frm. dispose() (4) showBtn, setLabel(
24、“Show myFrm“); else frm = new Frame( “myFrm“ ); frm. resize( 200, 150 ); frm. setBackground( Color. gray ); (5); showBtn, setLabel (“ Hide myFrm“ ); return true; ex8_7, html HTML HEAD TITLE ex8_7 /TITLE /HEAD BODY appletcode =“ ex8_7, class“ width=800 height=400 /applet /BODY /HTML 软件水平考试(中级)软件设计师下午
25、(应用技术)试题模拟试卷 19答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 数据流名称: “系统命令 ”,起点为 “干部科 ”,终点为 “干部信息系统 ”(或 CMIS)。 2 【正确答案】 数据流名称: “维护项 ”;方向:流向 “维护数据库 3”加工。 3 【正确答案】 干部信息 =输入信息 |检索项 |统计项 |打印项 |维护项; 输入信息 =档号 +姓名 +性别 +年龄 +级别 +职称 +政治面貌; 检索项 =档号 |姓名 |年龄 |档 号 +姓名 |性别 +年龄 |; 统计项 =性别 |年龄 |职称 |年龄 +职称 |性别 +职称; 【试题解析】 本题设
26、计了干部信息管理系统 (CMIS)。对于问题 1,已知 “数据流图 9-1缺少了一条数据流 ”,那么分析数据流图 9-1,对比 说明 文档可知,干部科需要输入系统命令,才能对系统进行管理,那么数据流图 9-1缺少的数据流名称就是 “系统命令 ”,起点为 “干部科 ”,终点为 “干部信息系统 ”(或 CMIS)。 (图 9-2也缺少 “系统命令 ”,指向 “检索命令合法性 1”。 ) 问题 2。图 9-3是图 1-2中加工 3“维护数据库 3”的 细化,仔细对比图 9-2和图 9-3,可知缺少的数据流名称为 “维护项 ”;方向为流向 “维护数据库 3”加工。 问题 3。阅读 说明 可得。 4 【
27、正确答案】 在该关系模式中,存在以下函数依赖: 学号 姓名 学号 所在系 所在系 系主任 (学号,课程名 ) 成绩 系主任传递的依赖学号; 该关系模式的候选码为 (学号,课程名 ); 姓名、所在系部分依赖候选码。 5 【正确答案】 (1)Sname, Ssex (2)Student (3)Sdept IN(IS,CS) 6 【正确答案】 (1)Student.Sno,Sname,Course.Cname,SC.Grade (2)Student,SC,Course (3)Student.Sno=SC.Sno and SC.Cno=Course.Cno; 【试题解析】 本题考查的是基础知识,考生如
28、果掌握对关系模式和 SQL语言的相关知识可得出答案。 7 【正确答案】 运行方向标识:电梯应该有这种机制,即让乘客知道电梯目前的运动方向,决定是否进电梯。 电梯位置标识:电梯应该让乘客知道其的目的层是否到达,决定是否离 开电梯。 (注:不要求文字相同,意义相近即可 ) 8 【正确答案】 1(G) 2(C) 3(B) 4(D) 5(E) 6(H) 7(F) 8(A) 9 【正确答案】 根据 Steve Cook和 John Danils的观点,类图可以分为三个层次:概念层 (Conseptual)、说明层 (Specification)和实现层 (Implementation)。其中概念层的概念
29、模型与实现它的软件无关,独立于程序设计语言。说明层中主要关心的是软件的类型 (type,即软件接口部分 ),而不是软件的类 (class,即实现部分 )。只有在实现层才有类的概念,并说明软件的实现部分。使用类图时,要根据项目开发的不同阶段来正确绘制类图,如在软件分析阶段,应该使用概念层类图;在软件设计阶段,使用说 【试题解析】 本题为 UML建模应用题。仔细阅读文档说明和用例说明,结合平时的应用习惯,不难发现用例设计时忽略了电梯运行方向标示和电梯位置标示。当然,考生如果还有更好的想法,只要合理就可认为正确,设计此题的目的在于考查考生运用 UML建模的能力。问题 1答案,并不惟一,合理就可得分。
30、 问题 2。根据说明文档和用例说明,可 以得出状态之间的转移逻辑关系。例如,从 “空闲 ”状态转移到 “忙 ”状态的条件是 “电梯响应目的地请求 ”,即 (1)选 G。用同样的方法分析可得其他答案。 问题 3。考查的是基本概念。 10 【正确答案】 (1)psign=-1 (2)s=(s+1) (3)i=1; i =strlen(s1); i+ (4)kdouble*=0.1; (5)i=strlen(s); i 0; i- (6)resoult=(intpart+doublepart)*psign 【试题解析】 本题实现了数字字符串转换成浮点 数的程序设计。程序中含空的语句功能分别是: (1
31、)记录符号。如 “-0.01”。 (2)将字符串中的 “-”号剔除; (3)转换所有小数部分; (4)记录小数点阶数; (5)转换所有整数部分; (6)整合小数和整数部分。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 11 【正确答案】 (1)mp或 mp!=NULL(2)mp- head或 &(mp- head) (3)&mp- head=NULL(4)*mpptr=mp(5)ip或 ip!=NULL (6)&ip- next或 &(ip- next)(7)*ipp=ip 12 【正确答案】 (1
32、)aij(2)t1+t2,其中 t1可以写成 cik, t2可以写成 ckj (3)k(4)kayij(5)kayij,j 【试题解析】 (1)此处的双层循环的作用是给数组 c赋初值。即把最初的 i号结点到 j号结点的路径长度存入 c。由题目中已经有说明: “Input ();输入有向图的顶点数、各条弧及权值,建立带权邻近矩阵 a。若顶点 i到顶点 j有弧,则 aij取弧上的权值,否则 aij的值取 NoEdge。 ”所以应填 aij。 (2)首先应该说明的是此处的三层循环所完成的功能是用递推的方式,在 i号结点和 j号结点中插入一个k号结点,然后比较 cij与 cik+ckj,如果 cik+
33、ckj小于 cij,则用cik+ck代替 cii。这里用到的原则就是: cik, ckj分别是 i到 k, k到 j的最短路径,若 i到 j要经过 k,则 cik+ck就是 i到 j过结点 k的最短路径。 (3)由于题目 中提到 “kay为二维数组,存储最短路径, kayij=k表示顶点 i到达顶点j的最短路径必须经过顶点 k。 ”所以,应填 k。 (5)此处用到了程序的递归,其实这个过程很好理解,也就是判断当中间结点为 0,表示 i, j直接为最短路径,则直接打印即可。如果有中间结点 k,则先打印从 i到 k的路径,再打印从 k到 j的路径。此处的中间结点存在 kayij里,所以 (4)填
34、kayij。 13 【正确答案】 (1)add( showBtn )(2)fml !=null(3)frm. show() (4)frm=null(5)frm. hide() 【试题解析】 本题主要考查 Applet窗口及 Applet程序的执行过程,和图形用户界面程序的设计。解题关键是熟悉 Applet窗口程序设计及其执行过程,这里要求加入一个 Button构件;同时需要熟悉图形用户界面的设计,这里要求通过 Applet中的 Button构件控制一个 Frame窗口的显示与隐藏,要熟悉如何建立一个新窗口,如何设置窗口的标题,如何利用 Component类的方法将窗口关闭。本题中,要正确解答,需要明确程序的控制流程:首先判断用户是否按下按钮,其次判断当前 窗口对象是否存在,如果窗 u不存在则定义一个窗口,反之将窗 u隐藏,并同时修改按钮文字作为提示,要明白提示作用是如果存在则提示关掉,如果不存在则提示显示。判断当前窗口对象是否存在的语句,存在的情况下才应该隐藏;用来隐藏窗口的语句,是 frm. hide();用来显示的语句是 frm. show()。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1