【计算机类职业资格】初级程序员下午试题-109及答案解析.doc
《【计算机类职业资格】初级程序员下午试题-109及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员下午试题-109及答案解析.doc(8页珍藏版)》请在麦多课文档分享上搜索。
1、初级程序员下午试题-109 及答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.说明如图 8-7 所示的流程图用于从数组 K 中找出一切满足:K(I)+K(J)=M 的元素对(K(I),K(J)(1IJN)。假定数组 K 中的 N 个不同的整数已按由小到大的顺序进行排列,M 是给定的常数。流程图(分数:15.00)填空项 1:_二、试题二(总题数:2,分数:15.00)2.说明 1函数 BTREE*SortTreeSearch(BTREE*tree,int key)采用非递归方法,在二叉排序树(二叉查找树)中查找键值为 key 的结点。若找到,则返
2、回键值所在结点的指针,否则返回 NULL。typedef struct nodeint data; /*结点的键值*/struct node *left;struct node *right;C 程序代码 1以上C 程序代码 1中共有 3 处错误。请在表 8-5 中指出这些错误所在代码的行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行。(分数:7.50)填空项 1:_3.说明 2C 程序代码 2是能求得“背包问题”的一组解的递归算法程序。“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为 S,设有件物品,其重量分别为 W1,W 2,W n,希望从 N 件物品中选
3、择若干件物品,所选物品的重量之和恰能放入该背包中,即所选物品的重量之和等于 S。C 程序代码 2BTREE;#includestdio.h#define N 7#define S 15int wN+1 = 0,1,4,3,4,5,2,7;int knap ( int S, int n) if (S = 0)return 1 ;if ( s0 ( s0 if ( (1) ) ) printf( “4d“,wn );return 1 ;return (2) ;main () if (knap(S,N) )printf( “OK!/n“ );elseprintf ( “N0 ! /n“ ) ;请将C
4、 程序代码 2中空缺处的内容填补完整。(分数:7.50)填空项 1:_三、试题三(总题数:1,分数:15.00)4.说明喜迎 2012 年伦敦夏季奥运会!以下C 程序代码能将一个给定汉字(例如,奥运会的“会”字)的点阵逆时针旋转 90 度,并输出旋转前后的点阵数据及字形。图 8-8 是汉字“会”字的 1616 点阵字形,用数字 0 表示空白位置,用数字 1 表示非空白位置,“会”字的第 1 行即可表示成如下的 0,1 序列。0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0若将它看做一个字的 16 个位,则“会”字的第 1 行可以用 16 进制数的 0100 来表示。同理,“会”字
5、的第 2 行可以用 16 进制数的 0240 表示,第 3 行可以用 16 进制数的 0420 表示,。以此类推,用 16 个双字节整型数即可存放一个汉字点阵字形。“会”字的点阵数据及字形如图 8-8 的左半部分所示。将一个汉字逆时针旋转 90 度,就是把该汉字点阵的最右列作为旋转后新点阵的第 1 行,次最右列作为旋转后新点阵的第 2 行,以形成一个旋转后的点阵字形。图 8-8 的右半部分就是将“会”字逆时针旋转 90 度后的点阵数据和字形(提示:读者可将书本顺时针旋转 90 度,以查看旋转 90 度后的点阵字形)。在C 程序代码中,数组 old 中存放着“会”字的 16 个双字节整型点阵数据
6、。函数 turnleft 能将该点阵数据逆时针旋转 90 度,旋转后的点阵数据存放在数组 new 中。函数 display 能将旋转前后的点阵数据加以编辑,用点字符“.”表示值为 0 的位,用字符“x”表示值为 1 的位,从而将旋转前后的点阵按行输出其 16 进制的数据及字形,如图 8-8 所示。(分数:15.00)填空项 1:_四、试题四(总题数:1,分数:15.00)5.说明函数 DelXInsY(LinkedList Lx,LinkedList Ly,int key 1,int key2,int len)的功能是,将线性表 X中关键码为 key1 的结点开始的 len 个结点,按原顺序移
7、至线性表 Y 中关键码为 key2 的结点之前,若移动成功,则返回 0;否则返回-1。线性表的存储结构为带头结点的单链表,Lx 为表 X 的头指针,Ly 为表 Y的头指针。单链表结点的类型定义如下。typedef struct nodeint key;struct node *next;*LinkedList;C 程序代码(分数:15.00)填空项 1:_五、试题五(总题数:1,分数:15.00)6.说明某绘图系统中有两个画矩形的程序 DP1 和 DP2。程序 DP1 用函数 draw a line(x1,y1,x2,y2)画一条直线,程序 DP2 则用函数 drawline(x1,x2,y1
8、,y2)画一条直线。当实例化矩形时,确定使用 DP1 还是 DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。若将“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)和具体实现不同,则将这种应用称为 Bridge(桥接)模式。图 8-9 显示了该系统与矩形绘制相关的各个类之间的关系。系统始终只处理 3 个对象:Shape 对象、Drawing 对象,以及 DP1 或 DP2 对象。以下是 C+语言的实现过程,能够正确编译通过。(分数:15.00)填空项 1:_六、试题六(总题数:1,分数:15.00)7
9、.说明某绘图系统中有两个画矩形的程序 DP1 和 DP2。程序 DP1 用函数 draw_a_line(x1,y1,x2,y2)画一条直线,程序 DP2 则用函数 drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,确定使用 DP1 还是 DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。若将“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)和具体实现不同,则将这种应用称为 Bridge(桥接)模式。图 8-10 显示了该系统与矩形绘制相关的各个类之间的关系。系统始终只处理 3 个对
10、象:Shape 对象、Drawing 对象,以及 DP1 或 DP2 对象。以下是 Java语言实现,能够正确编译通过。(分数:15.00)填空项 1:_初级程序员下午试题-109 答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.说明如图 8-7 所示的流程图用于从数组 K 中找出一切满足:K(I)+K(J)=M 的元素对(K(I),K(J)(1IJN)。假定数组 K 中的 N 个不同的整数已按由小到大的顺序进行排列,M 是给定的常数。流程图(分数:15.00)填空项 1:_ (正确答案:NJ (2) IJ?(3)I-1I (4) J-1J(5)
11、 |N/2|)解析:依题意,理顺图 8-7 所示的从数组 K 中查找相关元素对的算法基本思想是:设置了两个变量 I 和J,初始时分别指向数组 K 的第一个元素和最后一个元素。若这两个元素之和等于 M,则输出结果,并且使这两个指针都向中间移动一个位置;若这两个元素之和小于 M,则将指针,向中间移动(因为数组 K 已按由小到大的顺序进行排列);若这两个元素之和大于 M,则将指针 J 向中间移动;以此类推。当 IJ 时,说明数组 K 中所有的元素都搜索完毕,则退出循环。结合以上分析,(1) 空缺处应将数组 K 中最后一个元素的下标赋予 J,即应填入 NJ。(2) 空缺处应判断循环体是否退出,其所填入
12、的条件表达式是 IJ?。当 I=J 时,说明这两个指针指向同一元素,则应当退出循环。(3) 空缺处在流程图中有两处,一处是当 K(I)+K(J)=M 时,另一处是当 K(I)+K(J)M 时,在这两种情况下,都要将指针 I 向中间移动一个位置,即该空缺处应填入 I+1I。同理,(4) 空缺处应填入将指针 J 向中间移动一个位置的表达式 J-1J。在如图 8-7 所示的流程图中,比较“K(I)+K(J)=M?”最少执行次数发生在第 1 元素与第 N 个元素之和等于M、第 2 元素与第 N-1 个元素之和等于 M、第 3 元素与第 N-2 个元素之和等于 M、。若符合此类型的情况,则每次比较时,指
13、针 I 和 J 都向中间移动,因此比较“K(I)+K(J)=M”最少执行次数约为 N/2 次(计算结果应向上取整数)。二、试题二(总题数:2,分数:15.00)2.说明 1函数 BTREE*SortTreeSearch(BTREE*tree,int key)采用非递归方法,在二叉排序树(二叉查找树)中查找键值为 key 的结点。若找到,则返回键值所在结点的指针,否则返回 NULL。typedef struct nodeint data; /*结点的键值*/struct node *left;struct node *right;C 程序代码 1以上C 程序代码 1中共有 3 处错误。请在表 8
14、-5 中指出这些错误所在代码的行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行。(分数:7.50)填空项 1:_ (正确答案:行号 修改正确后的完整代码行3 while(ptr!=NULL”,或其他等价表达形式。第 3 个错误是第 9 行的“return *ptr;”语句。若在二叉排序树中找到键值为 key 的结点,则返回键值所在结点的指针,即该行代码应修改为“retun ptr;”。3.说明 2C 程序代码 2是能求得“背包问题”的一组解的递归算法程序。“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为 S,设有件物品,其重量分别为 W1,W 2,W n,希望
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 下午 试题 109 答案 解析 DOC
