程序员模拟试题下午试卷答案_第1页
程序员模拟试题下午试卷答案_第2页
程序员模拟试题下午试卷答案_第3页
程序员模拟试题下午试卷答案_第4页
程序员模拟试题下午试卷答案_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、程序员考试模拟试题2下午试题一阅读下列说明和流程图,将应填入(n)处的语句写在答题纸的对应栏内。【说明】下列流程图用于从数组K中找出一切满足:K(I)+K(J)=M的元素对(K(I),K(J)(1IJN)。假定数组K中的N个不同的整数已按从小到大的顺序排列,M是给定的常数。【流程图】此流程图1中,比较K(I)+K(J)M最少执行次数约为 (5) 。图1试题一【答案】(1)(2)I(4)J-1-J (5)N2【解析】该算法的思路是:设置了两个变量I和J,初始时分别指向数组K的第一个元素和最后一个元素。如果这两个元素之和等于M时,输出结果,并这两个指针都向中间移动;如果小于M,则将指针I向中间移动

2、(因为数组K已按从小到大的顺序排列);如果大于M,则将指针J向中间移动(因为数组K已按从小到大的顺序排列)。当IJ时,说明所有的元素都搜索完毕,退出循环。根据上面的分析,(1)、(2)空要求填写循环结束条件,显然,(1)空处应填写,(2)空处应填写。这里主要要注意I=J的情况,当I=J时,说明指两个指针指向同一元素,应当退出循环。(3)空在流程图有两处,一处是当K(I)+K(J)=M时,另一处是当K(I)+K(J)I。同样的道理,(4)空处应填写J-1-J。比较K(I)+K(J):M最少执行次数发生在第1元素与第N个元素之和等于M、第2元素与第N-1个元素之和等于M、,这样每次比较,两种指针都

3、向中间移动,因此最小执行次数约为N-2。试题二阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】函数print(BinTreeNode*t;DateType x)的功能是在二叉树中查找值为x的结点,并打印该结点所有祖先结点。在此算法中,假设值为x的结点不多于一个。此算法采用后序的非递归遍历形式。因为退栈时需要区分右子树。函数中使用栈ST保存结点指针ptr以及标志tag,Top是栈顶指针。【函数】void print(BinTreeNode*t;DateType x)stack ST;int i,top;top=0;置空栈while(t!=NULL t-data!=x

4、top!=0)while(t!=NULL t-data!=x)寻找值为x的结点 (1) ;STtopptr=t;STtoptag=0; (2) ;if(t!=Null t-data=x)找到值为x的结点for(i=1; (3) ;i)printf(d,STtopptr-data);elsewhile( (4) )top-;if(top0)STtoptag=1; (5) ;试题二【答案】(1)top(2)t=t-leftChild(3)i=top(4)top0 STtoptag=1(5)t=STtopptr-rightChild【解析】这个程序是一个典型二叉树后序遍历非递归算法的应用。算法的实现

5、思路是:先扫描根结点的所有左结点并入栈;当找到一个结点的值为x,则输入出栈里存放的数据,这些数据就是该结点所有祖先结点;然后判断栈顶元素的右子树是否已经被后序遍历过,如果是,或者右子树为空,将栈顶元素退栈,该子树已经全部后序遍历过;如果不是,则对栈顶结点的右子树进行后序遍历,此时应把栈顶结点的右子树的相结点放入栈中。再重复上述过程,直至遍历过树中所有结点。(1)、(2)空年在循环就是扫描根结点的所有左结点并入栈,根据程序中的栈的定义,栈空时top=0,因此在入栈时,先将栈顶指针加1,因此(1)空处应填写top或其等价形式,(2)空是取当前结点的左子树的根结点,因此应填写t=t-leftChil

6、d。(3)空所在循环是处理找到值为x的结点,那么该结点的所有祖先结点都存放在栈中,栈中的栈底是二叉树的根,而栈顶元素是该结点的父结点,因此,(3)空处应填写i=top。(4)空所在循环是判断栈顶元素的右子树是否已经被后序遍历过,如果是,或者右子树为空,将栈顶元素退栈,这里要填写判断条件。tag=0表示左子树,tag=1表示右子树,因此,(4)空处应填写top0&STtoptag=1。(5)空所在语句块是处理栈顶元素的右子树没有被后序遍历情况,则将右子树入栈,因此(5)空处应填写t=STtopptr-rightChild。试题三阅读下列函数说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内

7、。【说明】函数DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线性表A中关键码为key1的结点开始的len个结点,按原顺序移至线性表B中关键码为key2的结点之前,若移动成功,则返回0;否则返回-1。线性表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为typedef struct node int key;struct node *next;*LinkedList;【函数】int DelA_InsB(LinkedList La,LinkdeList Lb,i

8、nt key1,int key2,int len)LinkedList p,q,s,prep,pres;int k;if(!La-next|!Lb-next|len=0)return-1;p=La-next;prep=La;while(p & & p- key != key1)/*查找表A中键值为key1的结点*/prep=p;p=p-next;if(!p)return -1;/*表A中不存在键值为key1的结点*/q=p;k=1;while(q & (1) )/*在表A中找出待删除的len个结点*/ (2) ;k+;if(!q)return -1;/*表A中不存在要被删除的len个结点*/s

9、=Lb-next; (3) ;while(s & s-key !=key2)/*查找表B中键值为key2的结点*/pres=s;s=s-next;if(!s)return -1;/*表B中不存在键值为key2的结点*/ (4) =q-next;/*将表A中的len个结点删除*/q-next= (5) ;pres-next=p;/*将len个结点移至表B*/return 0;试题三【答案】(1)knext 或 q=(*q).next(3)pres=Lb(4)prep-next或(*prep).next(5)s 或 pres-next 或(*pres).next【解析】(1)此处while循环应当

10、循环至k等于len结束,所以应填入knext或 q=(*q).next。(3)此处语句为指针pres赋初值,使他指向s的上一结点。(4)修改指针prep,使prep指向q的下一结点。(5)此处语句为修改指针q,q指向s或者pres的下一结点,达到将A中的len个结点删除的目的。试题四阅读以下说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】将一正整数序列K1,K2,K9重新排列成一个新的序列,新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面),最后调用writeDat()函数的新序列输出到文件outdat中。在程序中已给出了10个序列,每个序列有9

11、个正整数,并存入数组a109中,分别求出这10个新序列。例:序列 6,8,9,1,2,5,4,7,3经重排后成为3,4,5,2,1,6,8,9,7【函数】#include#includevoid jsValue(int a109)int i,j,k,n,temp;int b9;for(i=0;i10;i)temp=ai0;k=8;n=0;for(j=8;j=0;j-)if(tempaij) (2) =aij;if(temp=aij) (3) =temp;for(j=0;j9;j)aij=bj;void main()int a109=6,8,9,1,2,5,4,7,3,3,5,8,9,1,2,6

12、,4,7,8,2,1,9,3,5,4,6,7,3,5,1,2,9,8,6,7,4,4,7,8,9,1,2,5,3,6,4,7,3,5,1,2,6,8,9,9,1,3,5,8,6,2,4,7,2,6,1,9,8,3,5,7,4,5,3,7,9,1,8,2,6,4,7,1,3,2,5,8,9,4,6;int i,j; (4) ;for(i=0;i10;i)for(j=0;j9;j)printf(d,aij);if( (5) )printf(,);printf(n);getch();试题四【答案】(1)bk-(2)bn(3)bn(4)jsValue(a)(5)j=7【解析】在主函数中先要调用函数js

13、Value()对数组a进行处理,所以(4)空应填入jsValue(a)。然后输出数组元素,同一行的元素之间用逗号分隔,所以(5)空应填入j=7。函数jsValue()是将数组按题目要求进行排序。通过观察发现处理后的数组中元素的顺序与原来的顺序相反,并且每一行中没有与第一个数相同的数,所以是从后往前处理,也就是将每组从最后往前倒序逐个同第一个数比较,比它大的就放到临时数组b中的最后,比它小的就放到临时数组b中的最前面,以次类推,所以(1)空应填入bk-,(2)空应填入bn,(3)空应填入bn。最后将b数组赋给a数组。试题五阅读以下应用说明、属性设置及Visual Basic程序代码,将应填入(n

14、)处在字句写在答题纸的对应栏内。【说明】本应用程序的运行窗口如图2所示。只要用户单击闪烁按钮,文字欢迎光临就会以03秒消失、03秒显示反复进行闪烁;单击停止按钮时,闪烁停止,恢复图示的初态。在开发过程中,需要设置的属性如表1所示。在开发过程中,需要编写的程序代码如下:【程序】Private Sub CmdF_Click()Timer1 (3) =TrueLabe1Visible=FalseEnd SubPrivate Sub Timer1_Timer() (4) =not Label.VisibleEnd SubPrivate Sub CmdT_Click()Timer1Enabled= (5

15、) Labe1Visible=trueEnd Sub试题五【答案】(1)false(2)300(3)Enabled(4)Label.Visible(5)false【解析】单击闪烁按钮后,文字才开始闪烁,所以初始时定时器并未启动,(1)处应填false。定时器的时间间隔为0.3秒,即300毫秒,所以(2)处应填300(Interval属性的单位是毫秒)。(3)单击闪烁按钮后,应启动定时器,所以修改Timer1的Enable属性为True。(4)定时器到时的时候,应当使Label的是否可见属性(Visible)取反,所以(4)处应填Label.Visible。(5)单击停止按钮后,要停止定时器,所

16、以应修改Timer1的Enable属性为false。试题六阅读以下说明和C程序,将应填入(n)处的字句写在答题纸的对应栏内。【说明】设计一个类模板Sample用于对一个有序数组采用二分法查找元素下标。【C程序】#include#define Max 100最多元素个数templateclass SampleT AMax:存放有序数序int n:实际元素个数publicSample()默认构造函数Sample(T a,int i);初始化构造函数int seek(T c);void disp()for(int i=0;in;i)coutAi;coutend1:;templateSample:Sa

17、mple(T a,int i)n=i;for(intj=0;ji;j) (1) ;templateint Sample:seek(T c)int low=0,high=n-1,mid;while( (2) )mid=(low+high)2;if( (3) )return mid;else if( (4) )low=mid+l;else (5) ;return-1;void main()char a=acegkmpwxz;Samples(a,1。);cout元素序列:;sdisp();cout元素g的下标:sseek(g)endl;试题六【答案】(1)Aj=aj(2)low=high(3)Ami

18、d=c(4)Amidc(5)high=mid-1【解析】在主函数中,首先由类模板实例化成Sample模板类。(1)空所在处为构造函数的声明,将参数中的值赋值到类的成员变量中,所以(1)空应填入Aj=aj。成员函数seek()采用二分法查找元素下标,变量low和high分别表示查找区间的下标,如果查询到目标,则返回相应的下标,若没有查询到,则其结束的条件即(2)空的内容为low=high。根据二分法的原理,当中间的元素恰好等于目标元素时,则返回其下标,所以(3)空应填入Amid=c;若中间的元素小于目标元素时,则mid+1作为新的查找区间的起始下标,所以(4)空应填入Amidc;否则mid-1作

19、为新的查找区间的结束下标,所以(5)空应填入high=mid-1。试题七阅读以下说明和Java代码,将解答写入答题纸的对应栏内。【说明】下面的程序的功能是利用实现Runnable接口的方法来创建线程,并利用它来执行响应的一些操作。最后使得m的执行结果:100,如图3。注意:请勿改动main()主方法和其他已有的语句内容,仅在下划线处填入适当的语句。class ClassName (1) Runnableint n; (2) tryThrea Dsleep(2000);n=100;catch( (3) e)public static void main(Stringargs)tryClassNa

20、me a=new ClassName(); (4) thread1. (5) ();thread1.join();int m=An;System.out.println(m=+m);catch( (3) e)试题七【答案】 (1)implements(2)ClassName(3)Exception(4)ClassName thread1 = new ClassName();(5)start【解析】此处为实现接口关键字。此处应填类ClassName的构造函数名,即ClassName。此处应填异常类名Exception。定义并初始化对象thread1。线程的启动函数。试题八阅读以下应用说明及Vis

21、ual Basic部分程序代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】该应用程序是用来修改文本框中的字体属性,其运行窗口如图4所示。窗口由1个标签(Labell)、1个文本框(txtPassage)和4个选择框(chkFont,chkltalic,chkSize,chkColor)组成。程序运行后,用户在文本框内输入一段文字,然后按需要单击各选择框,用以改变文本的字体、字型、颜色及大小。文本框的Mulitine属性已经设为True。当不选择黑体时,文字应是宋体。当不选择大小16时,字号为9。当不选择紫色时,字色为黑色。当不选择斜体时,文字采用正常字型。【程序代码】Private Sub chkFont Click()If (1) ThentxtPassageFontName=黑体ElsetxtPassageFontName=

温馨提示

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

评论

0/150

提交评论