2012下半年程序员考试真题及答案-下午卷_第1页
2012下半年程序员考试真题及答案-下午卷_第2页
2012下半年程序员考试真题及答案-下午卷_第3页
2012下半年程序员考试真题及答案-下午卷_第4页
2012下半年程序员考试真题及答案-下午卷_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2012下半年程序员考试真题及答案 试题一 【说明】 本流程图用于计算菲波那契数列a1=1 , a2=1,,an=an-1+an-2!n=3,4,的前n项 (n=2)之和S。例如,菲波那契数列前 6项之和为20。计算过程中,当前项之前的两项分 别动态地保存在变量 A和B中。 【流程图】 阅读说明和流程图,填补流程图中的空缺(1) ? (5) (1)2 或 A+B (3) A+B (4) B-A (5) S+B 菲波那契数列的特点是首 2项都是1,从第3项开始,每一项都是前两项之和。该数列的前 几项为 1, 1, 2, 3 , 5, 8,。 在流程图中,送初始值 1 A, 2 B后,显然前2项的

2、和S应等于2,所以(1)处应填2 (或 A+B)。此时2 i (i表示动态的项编号),说明已经计算出前 2项之和。接着判断循环的结 束条件。显然当i=n时表示已经计算出前n项之和,循环可以结束了。因此(2)处填n。 判断框中用“ ”或的效果是一样的,因为随着i的逐步增1,只要有i=n结束条件 就不会遇到in的情况。不过编程的习惯使循环结束条件扩大些,以防止逻辑出错时继续循 环。 接下来i+1 7i表示数列当前项的编号增 1,继续往下计算。原来的前两项值(分别在变量 A 和B中)将变更成新的前两项再放到变量 A和B中。 on 首先可以用A+B- B实现(原A) + (原B)(新B),因此(3)处

3、填A+B为了填新A值(原 来的B值),不能用B A,因为变量B的内容已经改变为 (原A) + (原B),而B-A正是(原 A) + (原B)-(原A)=(原B),因此可以用 B-AA来实现新A的赋值。这样,(4)处填B-A。 最后应是前n项和值的累加(比原来的 S值增加了新B值),所以(5)处应填S+B填完各 (这是防止逻辑上出 个空后,最好再用具体的数值来模拟流程图走几个循环检查所填的结果 错的好办法)。 试题二 【说明】 如果矩阵A中的元素AW满足条件:Aij是第i行中值最小的元素,且又是第 j列中 值最大的元素,则称之为该矩阵的一个马鞍点。 一个矩阵可能存在多个马鞍点,也可能不存在马鞍点

4、。下面的函数求解并输出一个 阵中的所有马鞍点,最后返回该矩阵中马鞍点的个数。 【C函数】 int f indS4ddle(int a l int Ml i / a MIT 3 ?dWfft. N 垦宏义符兮ITU */ ini int int column, it k/ miJiElerr; count 0; y* GtMint JU r记廉阵坤吕戴点的半割*/ for (row = 0; row 11J ; rowt + )1 mmEIwe用于表示黑rev荷的小元案値.KWffi邀为课订第0列朗元#值 ; for ( eoluitifi M L; column ;coL-uinn+ / (1

5、)M if a|co1 uinn) mnE-ie/r. j (tow】column】J for ( k - 0; k c 悼:kM、 if ( a row l!=fT.inElftHL J I ;*对第row行前邯节咖冗at刿为所庄列的*夫充 */ for (I - 0;1 ainlem br 1f 1 i= pr intfltd, Id) ; %dn , row, k* minElem) i /截点 *Z courit+4-; Ji F*f indSaddle/ 阅读说明和C函数,填充函数中的空缺。 (2)mi nElem = arow0或其等价形式 (4)aik 或其等价形式 (5)M 本

6、题考查C程序设计基本技术。 题目中涉及的主要知识点为二维数组和程序控制逻辑。 首先应认真阅读题目的说明部分,以 了解函数代码的功能和大致的处理思路,然后理清代码的框架,明确各个变量(或数组元素) 所起的作用,并以语句组分析各段代码的功能,从而完成空缺处的代码填充。 由于矩阵屮的马鞍点 Aij是其所在行的最小元素,同时又是其所在列的最大元素,因此, 对于矩阵中的每一行元素,先找出其最小者之值(用 minElem表示),然后判断每一行的最 Mo 小元素是否为其所在列的最大元素,若是则找到了一个马鞍点。 显然,空(1)所在的表达式用于判断 M行N列矩阵中的行数,因此应填入“ 空(2)处应对变量 mi

7、nElem设置初始值。根据注释,minElem用于表不第row行的最小元素 值,其初值设为该行第0列的元素值,因此空(2)处应填入“ minElem = arow0”。 空(3)所在的for语句用于找出一行中的最小元素,column应索引至每行的最后一个元素, 因此空(3)处应填入“ N o 由于可能存在多个 找出一行中的最小元素后,还要判断该元素是否为其所在列的最大元素。 马鞍点,因此,一行中的最小元素可能不唯一,所以需要重新扫描该行的所有元素,一旦其 等于最小元素值,则有可能成为马鞍点。实现该功能的代码如下: fek k 0; It if (Lx|*=iciiia:lein ) f /樹第

8、ID*杆的毎牛量小朮柬.拥新其是杏为帝在商的fi人兀餐*/ for1 tninElem ) tiredk; if i 丄)1 printfId :rcw, k,八输冊马鞍血/ count tt; )/if-/ /if*/ 由于k的取值范围为0 , N),且k作为元素arOwk的列下标(或第二下标),因此 当 arowk=minElem时,即在第row行上找到了一个最小元素 arowk,接下来就判断它是否为所在列的最大元素了,空 (4) 所在的语句“ for(i = 0;ikey_wala f 倩找谱恒为 k町的点 */ fachdc - pj 丄 ( Hey key_vfllufl j p -

9、;/进入坯子樹/ eLme p = _U) F/进人務 f啊/ if(p return, 0;/* =貝1厠中已布在Wffl为gy IK站氐 无需Ih捕入/ s 沖丄Qg *maUoc(1; /*点类槪宅诫新绩点 if I!a) return s-ke_vj 1 ue Iteyr;r HUS;* NULL; if ( !athel I J /新结A作为二义在找*时席点/ /師MA播人=义程找W的适当恸 “ 1于(key ky_vaIuft els* fither-right = a; recurn i: 阅读说明和C函数,填充函数中的空缺。 (1)p 或 P!=NULL (2) p-left

10、(3) p-right (4)sizeof(BiT node) (5)*root = s 本题考查c程序设计基本技术及指针的应用。 题目中涉及的考点主要有链表的査找、插入运算以及程序逻辑, 分析程序时首先要明确各个 变量所起的作用,并按照语句组分析各段代码的功能,从而完成空缺处的代码填充。 在二叉排序树上插入结点时,首先应通过查找运算确定结点的插入位置。空( 1)? (3)所在 代码段即用来实现二叉排序树的查找运算。 根据说明,指针变量 P的初始值设置为指向根结点(P = *r0ot),在通过指针访问链表中的 结点时,应确保P的值为非空指针才行,因此空(2)处应填入“ P”或“ P!=NULL

11、”。若待查 找的键值key等于P指向结点的键值 key value,则査找成功且p正指向所找到的结点;若 keykey_value ,则应令 p 指向左子树结点,即空( 2) 处应填入“ p-left ” ; 否则令 p 指向右子树结点,即空( 3) 处应填入“ p-right ”,从而根据待查找键值的大小进入了结点 的子树。 空( 4)所在代码生成待插入键值所需结点,根据链表结点类型的定义,此处应填入 sizeof(BiTnode) ”。 root 的作用,此 空( 5) 所在语句处理将新结点作为二叉查找树的根结点的情况,根据参数 处应填入“ *root = s ”。 试题四 【说明】 已知

12、两个整数数组 A和B中分别存放了长度为m和n的两个非递减有序序列,函数 m个整数存入A中, Adjustment(A , B, m n)的功能是合并两个非递减序列,并将序列的前 其余元素依序存入 B中。 含井前 ft组人的内器 15.2S 13J KiH (Ai BfO continue; 林动ft的无*幷将*自B的*小元陕抽入人中*7 ;D 八 蒋為屮的J光元鸞辑密蠻temp -/ /*孙后林冊依決导7F ft的沅背. for (k M m-1 J _i Alii AtX * : “ 祥*龄崔匸萌哪|的ft躺輛入融fflB的适晋忖 -/ for(fc - I; e ii R n; fc+l

13、erk-l: - Bik Bk-lJ s _: 阅读以下说明和 C函数,填充函数中的空缺。 (1)Am-1,或*(A+m-l),或其等价表示 B0,或* (4)te mp Bk,或 temp *(B+k),或其等价表示 (5)temp 本题考查c程序设计基本技术。 题目中涉及的考点主要有一维数组及程序的运算逻辑, 分析代码时首先要明确各个变量所起 的作用,并按照语句组分析各段代码的功能,从而完成空缺处的代码。 根据题目中的说明和注释,此题的代码逻辑较为清楚。显然, A的最大元素总是其最后一个 元素,因此,空(1)处应填入 空(2)所在语句从后往前移动 A的元素,然后将来自 B的最小元素插入 A

14、数组的适当位置, 显然需要通过比较 B0与A中的元素来查找插入位置。 对于B0与A中的元素的比较处理,其对应的语句如下: if (K i I B0时为止,即B0是正好小于Ai 且最接近Ai 的元素时i的值。 因此,空(2)处应填入“ ki”,使得其所在的for语句能完成将大于或等于 B0的元素 向后移动(Ak = Ak-1),接下来在空(3)处将元素B0的值放入Ai, 即空(3)处应填 入“ B0 ”。 最后需要将备份在temP的数据插入数组B的适当位置。由于原来保存在 B0中的值已插入 A中,因此B0目前是一个空闲单元,如果 temp的值比B1、B2等元素都要大,则需要 将B1、B2等元素的

15、值依次前移,因此空(4)处应填入“ tempBk ”。完成元素的移动 后,将暂存于temp中的元素放入 B的适当位置,即空(5)处应填入“temp ”。 试题五 【说明】 F面的程序用来计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输 其中的一对即可)。程序运行时,先输入点的个数和一组互异的点的坐标, 通过计算每 对点 之间的距离,从而确定出距离最近的点对。例如,在图 5-1所示的8个点中,点(1, 1)与 (2, 0.5)是间距最近的点对。 hl斗 【C+弋码】 riRClud? *includ us*r扌 nanespae* stdj uLq禺耳 Gfoint 1 private

16、i do Lib 1! e Kf putodI 0 J voidI double x) 1 LhiG-3t -孟:J do Libiay - yj | thtj5-x;) this-v; m Gfoi nt b ( rcLuin 3qrt b,g#tX () + U.getY (J - b.g L points new GFotnt numberOf Points : / ZfiJIIVi VI?flJft til mema号t (ptUnLy. 3, 3iieof (poltitsijj cout nuEnberOfPointa * 个点的半杯;”; for U - 0; i ; (2)co

17、mputeDistance nw ComputeDistant()j int pl - Or p5 - 1;打时利p2用于*示區If*血的点对崔ft坦中的下标 double shorteatDistance = ecnnputeDiatanc圭一、distance (poi nts,【pl ;, pointsp2 J); 计ff毎一討点之刚的阳 foe ( 0; 1 numberOrPoints; i+*) f ior(1 = 1+1; i N) If I t pl - I; pJ V aherlestPistanct = tmpDistance f eout -SI葛矍垢的点对S;(; co

18、uit, pQintcj 卩H,吐tJS 弘 pointaipll .qctY OC*)和广 f eouit “ poLnt3lp21 ,getX(J * point A lp21V () L t mp Dista nee 本题考查C+语言程序设计的能力,涉及类、对象、函数的定义和相关操作。要求考生 GPS 根据给出的案例和执行过程说明,认真阅读理清程序思路,然后完成题目。 先考察题目说明。计算平面或空间中点之间的距离是目前很多应用中需要的,如 计算等。本题目简化了点之间距离的要求,其主要任务是计算并寻找平面坐标系中给定点中 最近的点对(若存在多对,则输出其中的一对即可) 。数轴上两点之间的距

19、离等于相应两数 差的绝对值,而平面坐标系中两点之间的距离等于相应两点的横坐标差和纵坐标差的平方和 的算数平方根。假设平面左边系中的两点P(x1,y1)和P(x2,y2)两者之间的距离 I片耳卜J(孔-耳),(必F”)如题中图5-1所示的8个点中,点(1,1)和 (2,0.5)之间的距离为。 根据说明,点是一种类型,设计为类GPoint,点之间的距离设计为类ComputeDistanee, 整体主逻辑代码在 main函数中实现。类设计时,一般将属性设置为private,而对其的获取 和更改等操作通过其中Public方法进行。因此,在 GPoint设计时,将x和y坐标设计为 private 属性,

20、将读取和设置x和y坐标的值设计为相应的get和set函数;在设计点之间 的距离类ComputeDistanee时,将两个 GPoint类的对象作为distanee 函数的参数传递。 main函数中实现控制流程,在程序运行时,先输入点的个数,创建相应大小的数组,再输 入相应个数的一组互异的点的坐标,将点保存在一个数组中。 C+中定义指向对象 数组的指 针的创建方式为: ClassName * varName = new ClassName nu mberOfArray; 用new创建对象数据返回的是指针类型,此处需要ClassName *。然后在对数组内存空 间清零之后,输入相应个数的互异的点的

21、坐标,存入点数组,然后通过计算每对点之间的距 离,从而确定距离最近的点对。其计算方式是:预设定第一次参与运算的两个点之间的距离 为最短距离,然后计算每一对点之间的距离,其计算过程为从第一个点开始依次和其后所有 的点之间调用两点之间距离计算函数计算其他点之间距离, 每次计算和设定的最短距离进行 比较,如果比当前最短距离短,则更新最短距离并记录相应的点。 最后输出所记录的最短 距离和相应的点。 因此,空(1)需要指向GPoint类型的对象数组的指针,即为 GPoint*;空(2)需要计算 两点之间距离的对象,用 new创建,所以 ComputeDistanee *. 空(3)处判定是否所有与当 完

22、成,即 j tmpDistanceo 试题六 【说明】 F面的程序用来计算并寻找平面坐标系中给定点中最近的点对 (若存在多对,则输出其 中的一对即可)。程序运行时,先输入点的个数和一组互异的点的坐标,通过计算每对点之 间的距离,从而确定出距离最近的点对。例如,在图6-1所示的8个点中,点(1,1)与(2, 0.5) 是间距最近的点对。 d.i) D iii Java代码】 import java .litil,scanner: class GPcint pt kva double k* public publIc public pub丄址 void 3etX(double void setY

23、louMe de肚bl色 getzn doutilefI ii.n X) I this + = )(; 屮(this.y - y;) 1 return this.w; J 4thi3,y? I I cldsm FindNearestPoints I pub 1 i(7 static void ntd-in SLrlngl arq%)( scanftfir input * n电u Scanner(5yatfem.in).; systenoutprint ; * j i hC iiuiFnt rOf toints input -nKt Int O ; 11) points - new GPoint

24、 Lnuiabe rOf points J j和创 S保fr 点坐杯 韵ft蛆 System.out .print 输入+ nunberOf Points * 4*頑的乍插:); for licit i - Oi 1 ; FindHflsre 扑 ePoints fip - nw Fi nd NedPoLn U f ant pl -九p3 - li U pl和P2用于S乐便JW近的点时枉ft甜申的下标 double shorteatDaa=fap-qetDistance 1 pGintstplj r point3p?p J ff计ff毎一对点冈的匏简 for (int L 0; i points.length; i十*3 * i + 1; t J + + double 讣ffffi点何的竊 tmpDlsLAnce - fnp* i t pl L; P2 - j; teSitDistance * tnipDistmA亡e; 5y3tEn.oiiL.prifttln(*iaefjj)rj是(+ poirtsEpLJ ,getxn + * point3p2) .getXn + , * points tpl+弔(杓 + pointaLpi .,yet) * )j public 10 bill e get Distinct tGP寻找点之间的距离设计为类 FindNearestPoint

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论