2016上半年程序员考试真题及答案-下午卷.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2016上半年程序员考试真题及答案-下午卷.doc》由会员分享,可在线阅读,更多相关《2016上半年程序员考试真题及答案-下午卷.doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2016上半年程序员考试真题及答案-下午卷试题一阅读以下说明和流程图,填补流程图和问题中的空缺(1)(5),将解答填入答题纸的对应栏内。【说明】设整型数组A1:N每个元素的值都是1到N之间的正整数。一般来说,其中会有一些元素的值是重复的,也有些数未出现在数组中。下面流程图的功能是查缺查重,即找出A1:N中所有缺的或重复的整数,并计算其出现的次数(出现次数为0时表示缺)。流程图中采用的算法思想是将数组A的下标与值看作是整数集1:N加上的一个映射,并用数组C1:N记录各整数出现的次数,需输出所有缺少的或重复的数及其出现的次数。【流程图】【问题】 如果数组A1:5的元素分别为3,2,5,5,1,则算
2、法流程结束后输出结果为: (5) 输出格式为:缺少或重复的元素,次数(0表示缺少)参考答案:(1)Ai(2)Ck+1(3)0(4)k和Ck(5)4,1,1,1,0,2试题分析:(1)Ai/Ai赋给K,(2)Ck+1/Ck值加1,i循环中,将Ai中存在的值在Ck中相应位数上加1。以A1:5=3,2,5,5,1为例,当i=1时,k=A1=3,则C3+1,即C1:5变成0,0,1,0,0。(3)0/判断Ck值是否为0,为零这说明k未缺少值(4)k和Ck/k位重复数,Ck为重复次数(5)在范例中,4没有出现,1、2、3分别出现了1次,5出现了两次。试题二阅读以下说明和C代码,填补代码中的空缺,将解答填
3、入答题纸的对应栏内。【说明1】递归函数is_elem(char ch, char *set)的功能是判断ch中的字符是否在set表示的字符集合中,若是,则返回1,否则返回0。【C代码1】int is_elem (char ch ,char*set) If(*set=0) return 0; else If(1) return 1; else return is_elem(2)【说明2】函数char*combine(char* setA,char *setB)的功能是将字符集合A(元素互异,由setA表示)和字符集合B(元素互异,由setB表示)合并,并返回合并后的字符集合。【C代码2】char
4、*combine(char *setA, char*setB) int i,lenA, lenB, lenC; lenA=strlen(setA); lenB=strlen(setB); char*setC=(char*)malloc(lenA+lenB+1);if(!setC)return NULL;strncpy(setC,setA,lenA); /将setA的前lenA个字符复制后存入setClenC = (3);for(i=0;ilenB;i+) if(4) /调用is_elem判断字符是否在setA中 setClenC+=setBi; (5) =/0; /设置合并后字符集的结尾标识r
5、eturn setC;参考答案:(1)set0=ch(2)ch,*set-1(3)lenA(4)is_elem(setBi,*setA)=0(5)setClenC+1试题分析:If(set0=ch)/取出set第一个元素与ch字符比较是否相等returnis_elem(ch,*set-1)/从set第二个元素开始重新递归代入函数执行strncpy(setC,setA,lenA);/将setA的前lenA个字符复制后存入setClenC=lenA;for(i=0;ilenB;i+)ifis_elem(setBi,*setA)=0)/调用is_elem判断字符是否在setA中setClenC+=s
6、etBi;setClenC+1=/0;/设置合并后字符集的结尾标识returnsetC;试题三阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】某文本文件中保存了若干个日期数据,格式如下(年月日):2005/12/12013/2/291997/10/111980/5/15.但是其中有些日期是非法的,例如2013/2/29是非法日期,闰年(即能被400整除或者能被4整除而不能被100整除的年份)的2月份有29天,2013年不是闰年。现要求将其中自1985/1/1开始、至2010/12/31结束的合法日期挑选出来并输出。下面的C代码用于完成上述要求。【C代码】#inclu
7、detypedefstructintyear, month, day;/* 年,月,日*/DATE;int isLeap Year(int y) /*判断y表示的年份是否为闰年,是则返回1,否则返回0*/return(y%4=0 & y%100!=0)Il(y%400=0);int isLegal(DATE date) /*判断date表示的日期是否合法,是则返回1,否则返回0*/int y=date.year,m=date.month,d=date.day;if(y2010 II m12 II d31) return 0;if(m=4 ll m=6 ll m=9 II m=11)&(1) r
8、eturn 0;If(m=2)if(isLeap Year(y) & (2) return 1;elseif(d28) return 0;return 1;Int Lteq(DATE d1,DATE d2)/*比较日期d1和d2,若d1在d2之前或相同则返回1,否则返回0*/Long t1,t2;t1=d1.year*10000+d1.month*100+d1.day;t2=d2.year*10000+d2.month*100+d2.day;if(3) return 1;else return 0;int main()DATE date,start=1985,1,1,end=2010,12,3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2016 上半年 程序员 考试 答案 下午
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内