[计算机类试卷]2016年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc
《[计算机类试卷]2016年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]2016年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc(15页珍藏版)》请在麦多课文档分享上搜索。
1、2016年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析 1 阅读以下说明和流程图,填补流程图和问题中的空缺 (1) (5),将解答填入答题纸的对应栏内。【说明】设整型数组 A1: N每个元素的值都是 l到 N之间的正整数。一般来说,其中会有一些元素的值是重复的,也有些数未出现在数组中。下面流程图的功能是查缺查重,即找出 A1: N中所有缺失的或重复的整数,并计算其出现的次数 (出现次数为 0时表示缺 )。流程图中采用的算法思想是将数组 A的下标与值看作是整数集 1: N上的一个映射,用数组 C1: N依次记录各整数 k出现的次数 ck,并输出所有缺失的或重复的数及其出现
2、的次数。【流程图】【问题】如果数组 A1: 5的元素分别为 3, 2, 5, 5, 1,则算法流程结束后输出结果为: (5)。输出格式为:缺失或重复的数,次数 (0表示缺少 )。 2 阅读以下说明和 C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 说明 1 递归函数 is elem(char ch, char*set)的功能是判断 ch中的字符是否在 set表示的字符集合中,若是,则返回 1,否则返回 0。 C代码 1 int iselem(char ch, char*set) if(*set= 0) return 0; else if ( (1) ) return 1; else r
3、eturn iselem( (2) ); 【说明 2】 函数 char*combine(char*setA, char*setB)的功能是将字符集合 A(元素互异,由setA表示 )和字符集合 B(元素互异,由 setB表示 )合并,并返回合并后的字符集合。 【 C代码 2】 char* combj ne(char*setA, char*setB) int i, lenA, lenB, lenC; lenA=strlen(setA); lenB=strlen(setB); char*setC= (char*)malloc(1enA+lenB+1); if (!setC) return NULL
4、 ; strncpy(setc, setA, lenA); 将 setA的前 lenA个字符复制后存 入 setc lenc= (3); for (i=0; i typedef struct int year, month, day; *年,月,日 * DATE; int isLeapYear(int y) *判断 y表示的年份是否为闰年,是则返回 1,否则返回0* return(y 4=0 y 100 1=0)(y 400=0); int isLegal(DATE date) *判断 date表示的日期是否合法,是则返回 1,否则返回 0* int y=date year, m=date m
5、onth, d=date day; if(y201 0 m12 d31) return 0; if(m=4 m=6 m=9m=i 1)& (1) ) return 0; if(m=2) if(isLeapYear(y) (2) ) return 1; eise if (d2 8) return 0; return 1; int Lteq(DATE dl, DATE d2) *比较日期 d1和 d2,若 dl在 d2之前或相同则返回 1,否则返回 0* long t1, t2; t1=d1 year*10000+d1 month*100+d1 day; t2=d2 year*10000+d2 m
6、onth*100+d2 day; if( (3) ) return 1; else return 0; int main() DATE date, start=1 98 5, 1, 1, end=2 01 0, 12, 31); FILE*fp; fp=fopen(“dtxt”, “r”); if( (4) ) return一 1; while(!feof(fp) if(fscanf(fp, “ d d d”, &date year, &date month, &date day)!=3) break; if( (5) ) *判断是否为非法日期 * continue; if( (6) ) *调
7、用 Lteq判断是否在起至日期之间 * printf(“ d d d n”, date year, date month, date day); fclose(fp); return 0; 4 阅读以下说明和 C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】二叉查找树又称为二叉排序树,它或者是一棵空树,或者是具有如下性质的二叉树。 (1)若它的左子树非空,则左子树上所有结点的值均小于根结点的值。 (2)若它的右子树非空,则右子树上所有结点的 值均大于根结点的值。 (3)左、右子树本身就是两棵二叉查找树。二叉查找树是通过依次输入数据元素并把它们插入到二叉树的适当位置上构造起来的,具
8、体的过程是:每读入一个元素,建立一个新结点,若二叉查找树非空,则将新结点的值与根结点的值相比较,如果小于根结点的值,则插入到左子树中,否则插入到右子树中;若二叉查找树为空,则新结点作为二叉查找树的根结点。根据关键码序列 46, 25, 54, 1 3, 29, 91构造一个二叉查找树的过程如图 41所示。设二叉查找树采用二叉链表存储,结点类型定义如下: typedef int KeyType; typedef struct BSTNode KeyType key; struct BSTNode*left, *right ; BSTNode,*BSTree; 图 4一 1(g)所示二叉查找树的二
9、叉链表表示如图 4-2所示。函数 int InsertBST(BSTree*rootptr,KeyType kword)功能是将关键码 kword插入到由 rootptr指示出根结点的二叉查找树中。若插入成功,函数返回 1,否则返回 0。【 C代码】 int InsertBST(BSTree*rootptr, KeyType kword) *在二叉查找树中插入一个键值为 kword的结点,若插入成功返回 1,否则返回 0; *rootptr为二叉查找树根结点的指针 * BSTree P, father; (1); *将 father初始化为空指针 * P=*rootptr; *P指向二叉查找树
10、的根结点 * while(p (2) ) *在二叉查找树中查找键值 kword的结点 * father=p; if ( kwordkey) p=p一 left; else p=p一 right; if( (3) )return 0; *二叉查找树中已包含键值 kword,插入失败: p=(BSTree)malloc (4) ); *创建新结点用来保存键值 kword* if(!p)return 0 ; *创建新结点失败 * p一 key= kword; p一 left=NULL; p一 right: NULL; if (!father ) (5) =p; *二叉查找树为空树时新结点作为树根插入
11、 * else if ( kwordkey) (6) ; *作为左孩子结点插入 * else (7) ; *作为右孩子 结点插入 * return l; *InsertBST* 5 阅读下列说明和 C+代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】以下 C+代码实现两类交通工具 (Flight和 Train)的简单订票处理,类Vehicle、 Flight、 Train之间的关系如图 61所示。 【 C+代码】 #include#includeusing namespace std; clasS Vehiclepublic:virtualVehicle()void book(in
12、t n) 订 n张票 if(getTicket()=n) decreaseTicket(n); else coutv; V pushback(new Flight(); V push back(new Train(); V push back(new Flight(); V push_back(new Train(); V push_back(new Train(); cout: iterator it=V begin(); it !=V end(); it+) if(NULL!=*it) delete*it; *it=NULL; V clear(); return 0; 运行该程序时输出如下
13、: 欢迎订票 ! 剩余票数: 215 剩余票数: 2014 剩余票数: (6) 剩余票数: (7) 剩余票数: (8) 6 阅读以下说明和 Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】以下 Java代码实现两类交通工具 (Flight和 Train)的简单订票处理,类Vehicle、 Flight、 Train之间的关系如图 5-1所示。 Java代码 import Java.util ArrayList; import Java.util List; abstract clasS Vehicle void book(int n) 订 n张票 if(getTicket(
14、)=n) decreaseTicket(n); else System out println(“余票不足 !”); abstract int getTicket(); abstract void decreaseTicket(int n); ; class Flight (1) private (2)tickets=216; Flight的票数 int getTicket() return tiCkets ; void decreaseTicket(int n) tickets=ticketsn; class Train (3) private(4)tickets=201 6; Train的
15、票数 int getTicket() return tickets; void decreaseTicket(int n) tickets=ticketsn; public class Test public static void main(Stringargs)2016年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷答案与解析 1 【正确答案】 (1)Ai (2)Ck+1 (3)1 (4)k, Ck (5)4, 0 5, 2 【试题解析】 本题考查程序设计算法即流程图的设计。 先以问题中的简例来理解算法过程。 已知 A1: 5=3, 2, 5, 5, 1。初始时计数数组 c1:
16、5=0, 0, 0, 0, 0。 再逐个处 理数组 A的各个元素 (根据 Ai的值在 cAi中计数加 1): A1=3,计数 c3=1; A2: 2,计数 c2=1; A3=5,计数 c5=1; A4=5,计数 c5=2; A5=1,计数 c1=1。最后,计算得到 c1: 5=1, 1, 1, 0, 2),即表明 A1: 5中数 4缺失,数 5有 2,其他数都只有 1个。 再看流程图。左面先对数组 C初始化 (赋值都是 0)。再对 Ai各个元素逐个进行处理。将 Ai送 k,再对 ck计数加 1。因此, (1)处应填 Ai, (2)处 应填ck+1ck 。 流程图右面需要输出计算结果。对于 k的
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 2016 上半年 软件 水平 考试 初级 程序员 下午 应用技术 答案 解析 DOC
