【计算机类职业资格】2016年下半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案解析.doc
《【计算机类职业资格】2016年下半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】2016年下半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案解析.doc(7页珍藏版)》请在麦多课文档分享上搜索。
1、2016 年下半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案解析(总分:16.00,做题时间:90 分钟)一、必答题(总题数:7,分数:16.00)1.必答题(共 4 道大题,每道大题)_2.阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。【说明】设有整数数组A1:N(N1),其元素有正有负。下面的流程图在该数组中寻找连续排列的若干个元素,使其和达到最大值,并输出其起始下标 K、元素个数 L 以及最大的和值 M。例如,若数组元素依次为 3,一 6,2,4,一2,3,一 1,则输出 k=3,L=4,M=7。该流程图中考察了 A1:N中所有从下标 i 到下标 j
2、(ji)的各元素之和 S,并动态地记录其最大值 M。【流程图】 (分数:2.00)_阅读以下代码,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。【代码 1】#includestdiohVoid swap(int x, int y)int tmp=x; x=y; y=tmp;int main()int a=3, b=7;printf(“a1=d b1=dn”, a, b);swap(a,b);printf(“a2=d b2=dn”, a, b);return 0;【代码 2】#includestdioh#define SPACE 空格字符 int main()char str128=“N
3、othing is impossible! ”;int i,num=0,wordMark=0;for(i=0;stri;i+)if(stri:=SPACE)wordMark=0;elseif(wordMark=0)wordMark=1;num+;printf(“dn”,num);return 0;【代码 3】#includestdioh #define SPACE 空格字符 int countStrs(char*);int main() char str128=“Nothing is impossible! ”;printf(“dn”,(1)(str);return 0;int countSt
4、rs(char*p)int num=0,wordMark=0;for(;(2);p+) if( (3) =SPACE) wordMark=0;elseif(!wordMark)(WordMark=1;+numreturn (4);(分数:6.00)(1).写出代码 1 运行后的输出结果。(分数:2.00)_(2).写出代码 2 运行后的输出结果。(分数:2.00)_(3).代码 3 的功能与代码 2 完全相同,请补充代码 3 中的空缺,将解答写入答题纸的对应栏内。(分数:2.00)_3.阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】下面的程序利用快速排序中划分的思想
5、在整数序列中找出第 k 小的元素(即将元素从小到大排序后,取第 k 个元素)。对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序的序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子序列);然后再对左子序列和右子序列分别进行快速排序,最终得到非递减的有序序列。例如,整数序列“19,12,30,11,7,53,78,25”的第 3 小元素为 12。整数序列“19,12,7,30,11,11,7,53,78,25,7”的第 3 小元素为 7。函数 partition(int a,int low,int high)以 alo
6、w的值为基准,对 alow,alow+1,ahigh进行划分,最后将该基准值放入ai(lowihigh),并使得 alow,alow+1,ai1都小于或等于 ai,而 ai+1,ai+2,ahigh都大于 ai。函数 findkthElem(int a,int startldx,int endldx,int k)在 astartldx,astartldx+1,aendIdx中找出第 k 小的元素。【代码】#includestdioh#includestdlib.hint partition(int a,int low,int high)对alowhigh进行划分,使得 alowi中的元素都不大
7、于 ai+1high中的元素。int pivot=alow; pivot 表示基准元素 int i=low,j=high;while( (1) )while(ijajpivot)一一 j;ai=aj;while(ijai=pivot)+i;aj=ai;(2); 基准元素定位 return i; int findkthElem(int a,int startIdx,int endIdx,int k)整数序列存储在astartIdxendIdx中,查找并返回第 k 小的元素。if(startIdx0 endIdx0 startIdxendIdx k1 klendIdx k 一 1startIdx)
8、return 一 1; 参数错误if(startIdxendIdx)int loc=partition(a,startIdx,endIdx);进行划分,确定基准元素的位置 if(loc=k 一 1) 找到第 k 小的元素 return (3) ; if(k 一 1loc) 继续在基准元素之前查找 return findkthElem(a, (4),k);else 继续在基准元素之后查找 return findkthElem(a,(5),k); return astartIdx, int main()int i,k;int n;int a = 19, 12, 7, 30, 11, 11, 7,
9、53, 7 8, 25, 7;n=sizeof(a)sizeof(int); 计算序列中的元素个数 for(k=1; kn+1; k+) for(i=0; in; i+) printf(“dt”,ai);printf(“n”);printf(“elemd=dn”, k, findkthElem(a,0,n 一 1,k);输出序列中第 k 小的元素return 0;(分数:2.00)_4.阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 图是很多领域中的数据模型,遍历是图的一种基本运算。从图中某顶点 v 出发进行广度优先遍历的过程是: 访问顶点v; 访问 v 的所有未
10、被访问的邻接顶点 w 1 ,w 2 ,w k ; 依次从这些邻接顶点 w 1 ,w 2 ,w k 出发,访问其所有未被访问的邻接顶点;依此类推,直到图中所有访问过的顶点的邻接顶点都得到访问。 显然,上述过程可以访问到从顶点 v 出发且有路径可达的所有顶点。对于从 v 出发不可达的顶点 u,可从顶点 u 出发再次重复以上过程,直到图中所有顶点都被访问到。 例如,对于图 41 所示的有向图 G,从 a 出发进行广度优先遍历,访问顶点的一种顺序为 a,b,c,e,f,d。 设图 G 采用数组表示法(即用邻接矩阵 arcs 存储),元素 arcsij定义如下: 图 4-1 的邻接矩阵如图 4-2 所示
11、,顶点 af 对应的编号依次为 05。因此,访问顶点 a 的邻接顶点的顺序为 b,C,e。 函数BFSTraverse(Graph G)利用队列实现图 G 的广度优先遍历。 相关的符号和类型定义如下: #define MaxN 50 *图中最多顶点数* typedef int AdjMatrixMaxNMaxN; typedef struct int vexnum, edgenum; *图中实际顶点数和边(弧)数* AdjMatrix arcs; *邻接矩阵* Graph; typedef int QElemType; enumERROR=0 ; OK=1); 代码中用到的队列运算的函数原型如
12、表 4-1 所述,队列类型名为 QUEUE。 (分数:2.00)_5.阅读以下说明和 Java 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】以下 Java 代码实现一个简单的聊天室系统(ChatRoomSystem),多个用户(User)可以向聊天室(ChatRoom)发送消息,聊天室将消息展示给所有用户。类图如图 51 所示。 (分数:2.00)_6.阅读下列说明和 C+代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 以下 C+代码实现一个简单的聊天室系统(ChatRoomSystem),多个用户(User)可以向聊天室(ChatRoom)发送消息,聊天室将消
13、息展示给所有用户。类图如图 6-1 所示。 (分数:2.00)_2016 年下半年软件水平考试(初级)程序员下午(应用技术)真题试卷答案解析(总分:16.00,做题时间:90 分钟)一、必答题(总题数:7,分数:16.00)1.必答题(共 4 道大题,每道大题)_解析:2.阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。【说明】设有整数数组A1:N(N1),其元素有正有负。下面的流程图在该数组中寻找连续排列的若干个元素,使其和达到最大值,并输出其起始下标 K、元素个数 L 以及最大的和值 M。例如,若数组元素依次为 3,一 6,2,4,一2,3,一 1,则输出 k=3,L
14、=4,M=7。该流程图中考察了 A1:N中所有从下标 i 到下标 j(ji)的各元素之和 S,并动态地记录其最大值 M。【流程图】 (分数:2.00)_正确答案:(正确答案:(1)i,N 或 i,N,l 或等效形式 (2)S+Aj或等效形式 (3)S (4)ji+1 或等效形式 (5)S)解析:解析:本题考查程序员对算法流程进行设计的能力。 既然要考察整数数组 A1:N中所有从下标i 到下标 j(ji)的各元素之和 S,因此需要执行对 i 和 j 的双重循环。显然,对 i 的外循环应从 l 到 N进行。在确定了 i 后,可以从 Ai开始依次将元素 Aj累加到 S 中。所以,对 j 的内循环应从
15、 i 开始直到 N,以保持(ji)。因此空(1)处应填入“i,N”,而空(2)处应填写“S+Aj”。 为了在内循环中累计计算若干个连续元素之和 S,在 i 循环之后,j 循环之前,首先应将 S 清 0。 由于已知数组元素中有正数,所以 S 的最大值 M 肯定是正数,因此,流程图一开始就应将 M 赋值 0,以后,每当计算出一个 S,就应将其与 M 比较。当 SM 时,就应将 S 的值送入 M(替代原来的值)。因此,空(3)处和(5)处都应填写“S”。此时,从下标 i 到 j 求和各元素的开始下标 K 为 i,个数 L 为 ji+1,因此,空(4)处应填写“j-i+1”。阅读以下代码,回答问题 1
16、 至问题 3,将解答填入答题纸的对应栏内。【代码 1】#includestdiohVoid swap(int x, int y)int tmp=x; x=y; y=tmp;int main()int a=3, b=7;printf(“a1=d b1=dn”, a, b);swap(a,b);printf(“a2=d b2=dn”, a, b);return 0;【代码 2】#includestdioh#define SPACE 空格字符 int main()char str128=“Nothing is impossible! ”;int i,num=0,wordMark=0;for(i=0;
17、stri;i+)if(stri:=SPACE)wordMark=0;elseif(wordMark=0)wordMark=1;num+;printf(“dn”,num);return 0;【代码 3】#includestdioh #define SPACE 空格字符 int countStrs(char*);int main() char str128=“Nothing is impossible! ”;printf(“dn”,(1)(str);return 0;int countStrs(char*p)int num=0,wordMark=0;for(;(2);p+) if( (3) =SP
18、ACE) wordMark=0;elseif(!wordMark)(WordMark=1;+numreturn (4);(分数:6.00)(1).写出代码 1 运行后的输出结果。(分数:2.00)_正确答案:(正确答案:a1=3 b1=7, a2=3 b2=7)解析:解析:本问题考查函数调用时的参数传递。 C 语言仅支持传值调用方式,实参传递给形参的值可以是数值,也可以是地址值。根据题目中给出的函数 swap(int x,int y)定义信息,在 main 中执行函数调用“swap(a,b)”时,是将实参 a 的值传递给形参 x、实参 b 的值传递给形参 y,这个传递过程是单方向的,此后再执行
19、 swap 中的操作时,x、y 的修改与 a、b 再无关联,因此在 main 函数中,a 和 b 的值没有变化。(2).写出代码 2 运行后的输出结果。(分数:2.00)_正确答案:(正确答案:3)解析:解析:本问题考查程序的基本结构和运算逻辑。 首先确定变量的作用,num 用来对单词进行计数。for 循环语句的作用是遍历字符串中的字符。对字符串中的每个字符 stri,如果是空格字符,则将wordMark 设置为 0,然后继续考查下一个字符。观察存储在数组 str 中的字符串,空格字符的作用是作为单词的分隔符。显然,对于每个单词的第一个字符,此时 wordMark 的值一定为 0。当字符 st
20、ri不是空格字符,接下来通过判断 wordMark 是否为 0 来决定 num 是否增加,以及是否改变 wordMark。据此可以看出,对于一个单词的第一个字符之后的其他字符,通过将 wordMark 设置为 1,使得对每个单词,num 的值仅自增 1 次。因此,程序的功能是对字符串中的单词进行计数(与单词连载一起的特殊符号也算作单词的一部分,单词仅以空格分隔)。(3).代码 3 的功能与代码 2 完全相同,请补充代码 3 中的空缺,将解答写入答题纸的对应栏内。(分数:2.00)_正确答案:(正确答案:(1)countStrs (2)*p 或 p0 或*(p+0)或*p!=0 或*p!=0或等
21、效形式 (3)*p 或 p0或*(p+0)或等效形式 (4)num)解析:解析:本问题考查程序的基本结构、运算逻辑和函数调用规范。 在代码 3 中,将对字符串中的单词计数用一个函数来实现,需要在理解代码 2 的基础上来完善代码 3。 空(1)处的要求很明确,就是要通过函数调用来完成单词计数,为防止考生误解,该函数调用的实参已给出,因此填入函数名“countStrs”即可。 空(2)处的 for 循环用来遍历字符串中的字符,显然,p 是指向串中字符的指针,循环条件应为是否遇到串结束标志字符,因此空(2)处应填入“*p!=0”或者等效方式。 空(3)处所在表达式是串中的字符与空格字符进行相等比较,
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 2016 年下 半年 软件 水平 考试 初级 程序员 下午 应用技术 试卷 答案 解析 DOC

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