【计算机类职业资格】中级软件设计师下午试题-108及答案解析.doc
《【计算机类职业资格】中级软件设计师下午试题-108及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】中级软件设计师下午试题-108及答案解析.doc(11页珍藏版)》请在麦多课文档分享上搜索。
1、中级软件设计师下午试题-108 及答案解析(总分:59.00,做题时间:90 分钟)一、试题一(总题数:1,分数:-1.00)1.【说明】所谓货郎担问题,是指给定一个无向图,并已知各边的权,在这样的图中,要找一个闭合回路,使回路经过图中的每一个点,而且回路各边的权之和最小。应用贪婪法求解该问题。程序先计算由各点构成的所有边的长度(作为边的权值),按长度大小对各边进行排序后,按贪婪准则从排序后的各边中选择边组成回路的边,贪婪准则使得边的选择按各边长度从小到大选择。函数中使用的预定义符号如下:#define M 100typedef struct/*x 为两端点 p1、p2 之间的距离,p1、p2
2、 所组成边的长度*/float x;int p1, p2;tdr;typedef struct/*p1、p2 为和端点相联系的两个端点,n 为端点的度*/int n, P1, p2;tr;typedef struct/*给出两点坐标*/float x,y;tpd;typedef int tlM;int n=10;【函数】float distance(tpd a,tpd b);/*计算端点 a、b 之间的距离*/void sortArr(tdr aM, int m);/*将已经计算好的距离关系表按距离大小从小到大排序形成排序表,m 为边的条数*/int isCircuit(trM, int i,
3、 int j);/*判断边(i, j)选入端点关系表 rM后,是否形成回路,若形成回路返回 0*/void selected(tr rM, int i, int j);/*边(i,j)选入端点关系表 r*/void course(tr rM, tl 1M);/*从端点关系表 r 中得出回路轨迹表*/void exchange(tdr aM, int m, int b);/*调整表排序表,b 表示是否可调,即是否有边长度相同的边存在*/void travling(tpd pdM, int n, float dist, t1 locusM)/*dist 记录总路程*/tdr drM;/*距离关系表
4、*/tr rM;/*端点关系表*/int i, j, k, h, m;/*h 表示选入端点关系表中的边数*/int b;/*标识是否有长度相等的边*/k=0;/*计算距离关系表中各边的长度*/for(i=1;in;i+)for(j=i+1;j=n;j+)k+;drk.x= (1) ;drk.p1=i;drk.p2=j;m=k;sortArr(dr,m);/*按距离大小从小到大排序形成排序表*/dob=1;dist=0;k=h=0;dok+;i=drk.p1;j=drk.p2;if(ri.n=1)h+;dist+=drk.x;else if( (4) )/*最后一边选入 r 成回路,则该边必须加
5、入且得到解*/selected(r,i,j);h+;dist+=drk.x;while(k!=n)if(h=n)/*最后一边选入构成回路,完成输出结果*/course(r,locus);else/*找不到解,调整 dr,交换表中边长相同的边在表中的顺序,并将 b 置 0*/(5) ;while(!b);(分数:-1.00)_二、试题二(总题数:1,分数:15.00)2.说明下面的流程图(如图所示)用 N - S 盒图形式描述了数组 A 中的元素被划分的过程。其划分方法是:以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,而大于基准数的元素向高下标端移动。当划分结束时,基准数定位
6、于 Ai,并且数组中下标小于 i 的元素的值均小于基准数,下标大于 i 的元素的值均大于基准数。设数组 A 的下界为 low,上界为 high,数组中的元素互不相同。例如,对数组(4,2,8,3,6),以 4 为基准数的划分过程如下:(分数:15.00)_三、试题三(总题数:1,分数:15.00)3.【说明】银行客户需要从 ATM 取 100 元,他向 ATM 的读卡机插卡,读卡机读取他的卡号,然后 ATM 屏幕初始化,ATM 提示输入密码,客户输入密码(123456),ATM 打开他的账户,密码有效,因此 ATM 提示选择事务,客户选择取钱,ATM 提示输入金额,客户输入 100 元,ATM
7、 验证账户上有足够的钱,就从账上减去 100 元,ATM 吐出 100 元,并退出的卡。【问题】根据上面的描述,在下面填写,完成未完成的协作图。1插卡(客户一读卡机)2_(_)3_(_)4提示输入 PIN (123456) (ATM 显示屏客户)5_(_)6_(_)7验证 PIN(_)8提示选择事务(_)9_(客户ATM 屏幕)10提示金额(ATM 屏幕客户)11输入金额(客户ATM 屏幕)12取钱(ATM 屏幕的账户)13_(_)14_(_)15_(_)16提供收据(客户的账户取钱机)17_(_)*(分数:15.00)_四、试题四(总题数:1,分数:15.00)【说明】快速排序是一种典型的分
8、治算法。采用快速排序对数组 Apr排序的 3 个步骤如下。1分解:选择一个枢轴(pivot)元素划分数组。将数组 Apr划分为两个子数组 (可能为空)Apq-1和 Aq+1r,使得 Aq大于等于 Apq-1)中的每个元素,小于 Aq+1r中的每个元素。q 的值在划分过程中计算。2递归求解:通过递归的调用快速排序,对子数组 Apq-1和 Aq+1r分别排序。3合并:快速排序在原地排序,故不需合并操作。(分数:15.00)(1).【问题 1】下面是快速排序的伪代码,请填补其中的空缺;伪代码中的主要变量说明如下。A:待排序数组p,r: 数组元素下标,从 p 到 rq: 划分的位置x:枢轴元素i:整型
9、变量,用于描述数组下标。下标小于或等于 i 的元素的值小于或等于枢轴元素的值j:循环控制变量,表示数组元素下标QUICKSORT (A,p,r)if (p r)q=PARTITION(A,p,r) ;QUICKSORT(A,p,q-1);QUICKSORT(A,q+1,r);PARTITION(A,p,r)x=Ar;i=p-1;for(j=p;jr-1;j+)if (Ajx)i=i+1;交换 Ai和 Aj交 (1) 和 (2) /注:空(1)和空(2)答案可互换,但两空全部答对方可得分 return (3) (分数:5.00)_(2).【问题 2】(1)假设要排序包含 n 个元素的数组,请给出
10、在各种不同的划分情况下,快速排序的时间复杂度,用 O 记号。最佳情况为 (4) ,平均情况为 (5) ,最坏情况为 (6) 。(2)假设要排序的 n 个元素都具有相同值时,快速排序的运行时间复杂度属于哪种情况? (7) 。(最佳,平均、最坏)(分数:5.00)_(3).【问题 3】(1)待排序数组是否能被较均匀地划分对快速排序的性能有重要影响,因此枢轴元素的选取非常重要。有人提出从待排序的数组元素中随机地取出一个元素作为枢轴元素,下面是随机化快速排序划分的伪代码利用原有的快速排序的划分操作,请填充其中的空缺处。其中,RANDOM(i,j)表示随机取 i 到 j 之间的一个数,包括 i 和 j。
11、RANDOMIZED- PARTITION(A,p,r)i=RANDOM(p,rl);交换 (8) 和 (9) ;/注:空(8)和空(9)答案可互换,但两空全部答对方可得分return PARTITION (A,p,r);(2)随机化快速排序是否能够消除最坏情况的发生? (10) 。(是或否)(分数:5.00)_五、试题五(总题数:1,分数:15.00)4.【说明】栈(Stack)结构是计算机语言实现中的一种重要数据结构。对于任意栈,进行插入和删除操作的一端称为栈顶(Stock Top),而另一端称为栈底(Stock Bottom)。栈的基本操作包括:创建栈(NewStack)、判断栈是否为空
12、(IsEmpty)、判断栈是否已满(IsFull)、获取栈顶数据(Top)、压栈/入栈(Push)、弹栈/出栈(Pop)。当设计栈的存储结构时,可以采取多种方式。其中,采用链式存储结构实现的栈中各数据项不必连续存储(如下图所示)。(分数:15.00)_中级软件设计师下午试题-108 答案解析(总分:59.00,做题时间:90 分钟)一、试题一(总题数:1,分数:-1.00)1.【说明】所谓货郎担问题,是指给定一个无向图,并已知各边的权,在这样的图中,要找一个闭合回路,使回路经过图中的每一个点,而且回路各边的权之和最小。应用贪婪法求解该问题。程序先计算由各点构成的所有边的长度(作为边的权值),按
13、长度大小对各边进行排序后,按贪婪准则从排序后的各边中选择边组成回路的边,贪婪准则使得边的选择按各边长度从小到大选择。函数中使用的预定义符号如下:#define M 100typedef struct/*x 为两端点 p1、p2 之间的距离,p1、p2 所组成边的长度*/float x;int p1, p2;tdr;typedef struct/*p1、p2 为和端点相联系的两个端点,n 为端点的度*/int n, P1, p2;tr;typedef struct/*给出两点坐标*/float x,y;tpd;typedef int tlM;int n=10;【函数】float distance
14、(tpd a,tpd b);/*计算端点 a、b 之间的距离*/void sortArr(tdr aM, int m);/*将已经计算好的距离关系表按距离大小从小到大排序形成排序表,m 为边的条数*/int isCircuit(trM, int i, int j);/*判断边(i, j)选入端点关系表 rM后,是否形成回路,若形成回路返回 0*/void selected(tr rM, int i, int j);/*边(i,j)选入端点关系表 r*/void course(tr rM, tl 1M);/*从端点关系表 r 中得出回路轨迹表*/void exchange(tdr aM, int
15、 m, int b);/*调整表排序表,b 表示是否可调,即是否有边长度相同的边存在*/void travling(tpd pdM, int n, float dist, t1 locusM)/*dist 记录总路程*/tdr drM;/*距离关系表*/tr rM;/*端点关系表*/int i, j, k, h, m;/*h 表示选入端点关系表中的边数*/int b;/*标识是否有长度相等的边*/k=0;/*计算距离关系表中各边的长度*/for(i=1;in;i+)for(j=i+1;j=n;j+)k+;drk.x= (1) ;drk.p1=i;drk.p2=j;m=k;sortArr(dr,
16、m);/*按距离大小从小到大排序形成排序表*/dob=1;dist=0;k=h=0;dok+;i=drk.p1;j=drk.p2;if(ri.n=1)h+;dist+=drk.x;else if( (4) )/*最后一边选入 r 成回路,则该边必须加入且得到解*/selected(r,i,j);h+;dist+=drk.x;while(k!=n)if(h=n)/*最后一边选入构成回路,完成输出结果*/course(r,locus);else/*找不到解,调整 dr,交换表中边长相同的边在表中的顺序,并将 b 置 0*/(5) ;while(!b);(分数:-1.00)_正确答案:(1) dis
17、tance(pdi,pdj)(2) !isCircuit(r,i,j)(3) selected(r,i,j)(4) h=n-1(5) exchange(dr,m,b)解析:解析 本题主要是函数调用的问题。空(1)是计算各边的长度,根据函数的声明及说明,应填 distance(pdi,pdj)。由注释可见空(2)是判断边(i,j)加入 r 后是否形成回路,若形成了回路,不加入。由语句“dist+=drk.x;”可知此处是将边加入,故此处应该是不形成回路条件。参照 isCircuit 函数声明及说明可知,若形成回路返回 0,故空(2)填“!isCircuit(r,i,j)”。空(3)是将边(i,j
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 中级 软件 设计师 下午 试题 108 答案 解析 DOC
