【计算机类职业资格】软件水平考试(中级)软件设计师下午(应用技术)历年真题试卷汇编2及答案解析.doc
《【计算机类职业资格】软件水平考试(中级)软件设计师下午(应用技术)历年真题试卷汇编2及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】软件水平考试(中级)软件设计师下午(应用技术)历年真题试卷汇编2及答案解析.doc(13页珍藏版)》请在麦多课文档分享上搜索。
1、软件水平考试(中级)软件设计师下午(应用技术)历年真题试卷汇编 2 及答案解析(总分:44.00,做题时间:90 分钟)一、必答题(总题数:9,分数:44.00)1.必答题(共 4 道大题,每道大题)_阅读下列说明和 C 代码,回答问题 1 至问题 3,将解答写在答题纸的对应栏内。 【说明】 设有 m 台完全相同的机器运行 n 个独立的任务,运行任务 i 所需要的时间为 t i ,要求确定一个调度方案,使的完成所有任务所需要的时间最短。假设任务已经按照其运行时间从大到小排序,算法基于最长运行时间作业优先的策略;按顺序先把每个任务分配到一台机器上,然后将剩余的任务一次放入最先空闲的机器。 【C
2、代码】 下面是算法的 C 语言实现。 (1)常量和变量说明 m:机器数 n:任务数 t:输入数组,长度为n,其中每个元素表示任务的运行时间,下标从 0 开始 s:二维数组,长度为 m*n,下标从 oF 始,其中元素 sii表示机器 i 运行的任 j 的编号 d:数组,长度为 m 其中元素 di表示机器 i 的运行时间,下标从 0 开始 count:数组,长度为 m,下标从 0 开始,其中元素 counti 一表示机器 i 运行的任务数 i:循环变量 i:循环变量 k:临时变量 max:完成所有任务的时间 min:临时变量 (2)函数schedule void schedule() int i,
3、j,k max=0; for(i=0;idj)( ( min:dj; k=j; 机器k 空闲 (3) ; countk=countk+1; dk=dk+ti; for(i=0;i(分数:6.00)(1).根据说明和 C 代码,填充 C 代码中的空(1)(4)。(分数:2.00)_(2).根据说明和 C 代码,该问题采用了(5)算法设计策略,时间复杂度为(6)(用 O 符号表示)(分数:2.00)_(3).考虑实例 m=3(编号 02),n=7(编号 06),各任务的运行时间为16,14,6,5,4,3,2。则在机器 0、1 和 2 上运行的任务分别为(7)、(8)和(9)(给出任务编号)。从任
4、务开始运行到完成所需要的时间为(10)。(分数:2.00)_阅读以下说明和 C 代码,根据要求回答问题 1问题 3。 【说明】 某工程计算中要完成多个矩阵相乘(链乘)的计算任务。两个矩阵相乘要求第一个矩阵的列数等于第二个矩阵的行数,计算量主要由进行乘法运算的次数决定。采用标准的矩阵相乘算法,计算 A mn *B np ,需要 m*n*p 次乘法运算。矩阵相乘满足结合律,多个矩阵相乘,不同的计算顺序会产生不同的计算量。以矩阵 A 110100 ,A2 1005 ,A3 550 三个矩阵相乘为例,若按(A1*A2)*A3 计算,则需要进行 10*100*5+10*5*50=7500 次乘法运算;若
5、按A1*(A2*A3)计算,则需要进行 100*5*50+10*100*50=75000 次乘法运算。可见不同的计算顺序对计算量有很大的影响。矩阵链乘问题可描述为:给定 n 个矩阵 n,矩阵 Ai的维数为 Pi-1Pi,其中i=1,2,n。确定一种乘法顺序,使得这 n 个矩阵相乘时进行乘法的运算次数最少。由于可能的计算顺序数量非常庞大,对较大的 n,用蛮力法确定计算顺序是不实际的。经过对问题进行分析,发现矩阵链乘问题具有最优子结构,即若 AI*A2*An 的一个最优计算顺序从第 k 个矩阵处断开,即分为A1*A2*Ak 和 Ak+1*Ak+2*An 两个子问题,则该最优解应该包含 A1*A2*
6、Ak 的一个最优计算顺序和Ak+1*Ak+2*An 的一个最优计算顺序。据此构造递归式, * 其中,costij表示Ai+1*Ai+2*Aj+1 的最优计算的计算代价。最终需要求解 cost0n1。 【C 代码】 算法实现采用自底向上的计算过程。首先计算两个矩阵相乘的计算量,然后依次计算 3 个矩阵、4 个矩阵n 个矩阵相乘的最小计算量及最优计算顺序。下面是该算法的 C 语言实现。 (1)主要变量说明 n:矩阵数 seq:矩阵维数序列 cost:二维数组,长度为 n*n,其中元素 costij表示 Ai+1*Ai+2*Aj+l 的最优计算的计算代价 trace:二维数组,长度为 n*n,其中元
7、素 traceij表示Ai+1*Ai+2:i:*Aj+1 的最优计算对应的划分位置,即 k (2)函数 cmm #define N 100 int cost NIN; int trace NN; int cmm(int n,int seq) int tempCost; int tempTrace; int i,j,k , P; int temp; for(i=0;itemp) tempCost=temp; (4) costij=tempCost; traceij=tempTrace: return cost0n1; (分数:6.00)(1).根据以上说和 C 代码,填充 C 代码中的空(1)(
8、4)。(分数:2.00)_(2).根据以上说明和 C 代码,该问题采用了(5)算法设计策略,时间复杂度为(6)(用 0 符号表示)。(分数:2.00)_(3).考虑实例 n=6,各个矩阵的维数:A1 为 5*10,A2 为 10*3,A3 为 3*12,A4 为 12*5,A5 为 5*50,A6为 50*6,即维数序列为 5,10,3,12,5,50,6。则根据上述 C 代码得到的一个最优计算顺序为(7)(用加括号方式表示计算顺序),所需要的乘法运算次数为(8)。(分数:2.00)_阅读下列说明 C 代码,回答问题 1 至问题 3,将解答写在答题纸的对应栏内。 【说明】 用两台处理机 A和
9、B 处理 n 个作业。设 A 和 B 处理第 i 个作业的时间分别为 a i 和 b i 。由于各个作业的特点和机器性能的关系,对某些作业,在 A 上处理时间长,而对某些作业在 B 上处理时间长。一台处理机在某个时刻只能处理一个作业,而且作业处理是不可中断的,每个作业只能被处理一次。现要找出一个最优调度方案,使得 n 个作业被这两台处理机处理完毕的时间(所有作业被处理的时间之和)最少。 算法步骤: (1)确定候选解上界为最短的单台处理机处理所有作业的完成时间 m, (分数:6.00)(1).根据以上说明和 C 代码,填允 C 代码中的空(1)(5)。(分数:2.00)_(2).根据以上 C 代
10、码,算法的时间复杂度为(6)(用 O 符号表示)。(分数:2.00)_(3).考虑 6 个作业的实例,各个作业在两台处理机上的处理时间如表 15 一 1 所示。该实例的最优解为(7),最优解的值(即最短处理时间)为(8)。最优解用(x 1 ,x 2 ,x 3 ,x 4 ,x 5 ,x 6 )表示,其中若第 i个作业在 A 上处理,则 x i =1,否则 x i =2。如(1,1,1,1,2,2)表示作业 1,2,3 和 4 在 A 上处理,作业 5 和 6 在 B 上处理。 (分数:2.00)_阅读下列说明和 C 代码,回答问题 1 至问题 3,将解答写在答题纸的对应栏内。 【说明】设有 n
11、个货物要装入若干个容重为 C 的集装箱以便运输,这 n 个货物的体积分别为s1,s2,sn,且有siC(1in)。为节省运输成本,用尽可能少的集装箱来装运这 n 个货物。下面分别采用最先适宜策略和最优适宜策略来求解该问题。最先适宜策略(firstfit)首先将所有的集装箱初始化为空,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱中。最优适宜策略(bestfit)与最先适宜策略类似,不同的是,总是把货物装到能容纳它且目前剩余容重最小的集装箱,使得该箱子装入货物后闲置空间最小。 【C 代码】 下面是这两个算法的 C 语言核心代码。 (1)变量说明 n:货物数 C:集装箱容量
12、 s:数组,长度为 n,其中每个元素表示货物的体积,下标从 0 开始。 b:数组,长度为 n,bi表示第 n+i 个集装箱当前已经装入货物的体积,下标从 0 开始 i,j:循环变量 k:所需的集装箱数 min:当前所用的各集装箱装入了第 i 个货物后的最小剩余容量 m:当前所需的集装箱数 temp:临时变量 (2)函数 firstfit intfirs 七 fit()( inti,j; k=0; for(i=0;i(j+1)?k:(j+1); returnk; (3)函数 bestfit intbestfit() inti,j,min,m,temp; k=0; for(i=0;iO intc3
13、3=(1,2,3),(3,2,1),(2,2,2; int bestW=8; int bestC=0; int bestX3=(0,0,0); int CW=0; int cp=0; int x3=(0,0,0);int backtrack(int i) int j=0; int found=0; if(in 一 1)*得到问题解* beStW=cw: bestC=cp; for(j=0;j (分数:2.00)_阅读下列说明和 C 代码,回答问题 1 至问题 3,将解答写在答题纸的对应栏内。 【说明】某应用中需要对 100000 个整数元素进行排序,每个元素的取值在 05 之间。排序算法的基本
14、思想是:对每一个元素x,确定小于等于 x 的元素个数(记为 m),将 x 放在输出元素序列的第 m 个位置。对于元素值重复的情况,依次放入第 m1、m 一 2、个位置。例如,如果元素值小于等于 4 的元素个数有 10 个,其中元素值等于 4 的元素个数有 3 个,则 4 应该在数据元素序列的第 10 个位置、第 9 个位置和第 8 个位置上。 算法具体的步骤为: 步骤 1:统计每个元素值的个数。 步骤 2:统计小于等于每个元素值的个数。 步骤 3:将输入元素序列中的每个元素放入有序的输出元素序列。 【C 代码】 下面是该排序算法的 C 语言实现。 (1)常量和变量说明 R 常量,定义元素取值范
15、围中的取值个数,如上述应用中 R 值应取 6 i:循环变量 n:待排序元素个数 a:输入数组,长度为 n b:输出数组,长度为 n c:辅助数组,长度为 R,其中每个元素表示小于等于下标所对应的元素值的个数。 (2)函数 sort voidsort(intn,inta,intb) intcR,i; for(i=0;i(1).根据说明和 C 代码,填充 C 代码中的空缺(1)(4)。(分数:2.00)_(2).根据 C 代码,函数的时间复杂度和空间复杂度分别为(5)和(6)(用 O 符号表示)。(分数:2.00)_(3).根据以上 C 代码,分析该排序算法是否稳定。若稳定,请简要说明(不超过 1
16、00 字);若不稳定,请修改其中代码使其稳定(给出要修改的行号和修改后的代码)。(分数:2.00)_阅读下列说明和 C 代码,回答问题 1 至问题 3,将解答写在答题纸的对应栏内。 【说明】 堆数据结构定义如下:对于 n 个元素的关键字序列a 1 ,a 2 ,a n ,当且仅当满足下列关系时称其为堆。 在一个堆中,若堆顶元素为最大元素,则称为大顶堆;若堆顶元素为最小元素,则称为小顶堆。堆常用完全二叉树表示,图 152 是一个大顶堆的例子。 (分数:6.00)(1).根据以上说明和 C 代码,填充 C 代码中的空(1)(5)。(分数:2.00)_(2).根据以上 c 代码,函数 heapMaxi
17、mum,heapExtractMax 和 maxHeaplnsert 的时间复杂度的上界分别为(6)、(7)和(8)(用 O 符号表示)。(分数:2.00)_(3).若将元素 10 插入到堆 A=(15,13,9,5,12,8,7,4,0,6,2,1)中,调用 maxHeaplnsert 函数进行操作,则新插入的元素在堆 A 中第(9)个位置(从 1 开始)。(分数:2.00)_阅读下列说明和 C 代码,回答问题 1 至问题 3,将解答写在答题纸的对应栏内。 【说明】对有向图进行拓扑排序的方法是: (1)初始时拓扑序列为空: (2)任意选择一个入度为 0 的顶点,将其放入拓扑序列中,同时从图中
18、删除该顶点以及从该顶点出发的弧; (3)重复(2),直到不存在入度为 0 的顶点为止(若所有顶点都进入拓扑序列则完成拓扑排序,否则由于有向图中存在回路无法完成拓扑排序)。函数int*TopSoa(LinkedDigraphG)的功能是对有向图 G 中的顶点进行拓扑排序,返回拓扑序列中的顶点编号序列,若不能完成拓扑排序,则返回空指针。其中,图 G 中的顶点从 1 开始依次编号,顶点序列为v1,v2,vn,图 G 采用邻接表示,其数据类型定义如下: #def ine NAXVNUM 50 *最大顶点数* typedef structArcNode( *表节点类型* int adjvex; *邻接顶
19、点编号* struct ArcNode*nextarc; *指示下一个邻接顶点* ArcNode: typedef struct Adj List( *头节点类型* char vdata; *顶点的数据信息* ArcNode*firstarc; *指向邻接表的第一个表节点* Adj List; typedef struct LinkedDigraph( *图的类型* int n; *图中顶点个数* AdjLiSt VheadMAXVNUM; *所有顶点的头节点数组* LinkedDigraph; 例如,某有向图 G 如图 153 所示,其邻接表如图 15-4 所示。 函数 T0pSon 中用到
20、了队列结构(Queue 的定义省略),实现队列基本操作的函数原型如表 152 所示: 【C 代码】 int *TopSort(LinkedDigraph G) ArcNode*P; *临时指针,指示表节点* Queue Q;*临时队列,保存入度为 0 的顶点编号* int k=0; *临时变量,用作数组元素的下标* int j=0,W=0; *临时变量,用作顶点编号* int*toporder,*inDegree; toporder=(int*)malloc(Gn+1)*Si zeof(int); *存储拓扑序列中的顶点编号* inDegree=(int*)malloc(Gn+1)*sizeo
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 软件 水平 考试 中级 设计师 下午 应用技术 历年 试卷 汇编 答案 解析 DOC

链接地址:http://www.mydoc123.com/p-1340173.html