[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷29及答案与解析.doc

上传人:ownview251 文档编号:507374 上传时间:2018-11-29 格式:DOC 页数:15 大小:91KB
下载 相关 举报
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷29及答案与解析.doc_第1页
第1页 / 共15页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷29及答案与解析.doc_第2页
第2页 / 共15页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷29及答案与解析.doc_第3页
第3页 / 共15页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷29及答案与解析.doc_第4页
第4页 / 共15页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷29及答案与解析.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 29 及答案与解析 1 阅读以下说明和流程图,将应填入 (n)处的字句写在对应栏内。 【说明】 已知头指针分别为 La和 lb的有序单链表,其数据元素都是按值非递减排列。现要归并La 和 Lb得到单链表 Lc,使得 Lc中的元素按值非递减排列。程序流程图如下所示: 2 阅读以下函数说明和 C语言函数,将应填入 (n)处的语句写在对应栏内。 【函数 2.1说明】 将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5。 【函数 2.1】 Fun1 (int n) int i; for(i=2;i =n;i+) while (1)

2、 if (n%i=0) printf(“%d*“,i); (2); else break; printf(“%d“,n); 【函数 2.2说明】 下面程序的功能是:海滩上有一堆桃子, 5只猴子来分。第 1只猴子把这堆桃子平均分为 5份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第 2只猴子把剩下的桃子又平均分成 5份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第 3、 4、 5只猴子都是这样做的,问海滩上原来最少有多少个猴子 ? 【函数 2.2】 main() int i,m,j,k,count; for(i=4;i 10000;i+=4) count=0; (3); for(

3、k=0;k 5;k+) (4); i=j; if(j%4=0) (5); else break; i=m; if(count=4) printf(“%dn“,count); break; 3 阅读以下说 明和 C语言函数,将应填入 (n)处的语句写在对应栏内。 【说明】 下面的程序构造一棵以二叉链表为存储结构的二叉树。 【函数】 BitTree *createbt(BitTree *bt) BitTree *q; struct node *s30; int j,i; char x; printf(“i,x=“); scant(“%d,%c“, while(i!=0 /生成一个结点 (1); q

4、- lchild=NULL; q- rchild=NULL; (2) ; if (3) j=i/2; / j为 i的双亲结点 if(i%2=0) (4); /i为 j的左孩子 else (5); /i为 j的右孩子 printf(“i,x=“); scanf(“%d,%c“, return si; 4 阅读以下说明和 C语言函数,将应填入 (n)处的语句写在对应栏内。 【说明】 本程序从正文文件 text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件 word.out中。 程序用一棵有序二叉树存储这些单词及其出现的次数,边读入边建立,然

5、后中序遍历该二叉树,将遍历经过的二叉树上的结点内容输出。 【函数】 # include stdio.h # include malloc.h # include ctype.h # include string.h # define INF “text.in“ # define OUTF “word.our typedef struct treenode char *word; int count; struct treenode *left, *right; BNODE; int getword(FILE *fpt, char *word) char c; c=fgetc(tpt); if

6、(c=EOF) return 0; while(!(tolower(c) = a if (c=EOF) return 0; /* 跳过单词间的所有非字母字符 */ while(tolower(c) = a c=fgetc(fpt); *word=0; return 1; void binary_tree(BNODE *t, char *word) BNODE *ptr, *p; int compres; p=NULL; (1); while (ptr) /* 寻找插入位置 */ compres=strcmp(word, ptr- word);/* 保存当前比较结果 */ if (!compre

7、s) (2); return; else p=ptr; ptr=compres 0 ? ptr- right: ptr- left; ptr=(BNODE *)malloc(sizeof(BNODE); ptr- left=ptr- right=NULL; ptr- word=(char *)malloc(strlen(word)+1); strcpy(ptr- word, word); (3); if (p=NULL) *t=ptr; else if (compres 0) p- right=ptr; else p- left=ptr; void midorder(FILE *fpt, BN

8、ODE *t) if (t=NULL) return; midorder(fpt,(4); fprintf(fpt, “%s %dn“, t- word, t- count); midorder(fpt, t- right); void main() FILE *fpt; char word40; BNODE *root=NULL; if (fpt=fopen(INF, “r“)=NULL) printf(“Cant open file %sn“, INF); return; while(getword(fpt, word)=1) binary_tree(5); fclose(fpt); fp

9、t=fopen(OUTF, “w“); if (fpt=NULL) printf(“Cant open fife %sn“, OUTF); return; midorder(fpt, root); fclose(fpt); 5 阅读以下说明及 C+程序代码,将应填入 (n)处的语句写在对应栏内。 【说明】 本程序的功能是生成螺旋方阵,用户可以输入该方阵的行列数,然后就生成对应的螺旋方阵。例如:当 n=5时,对应的螺旋方阵如下: 1 16 15 14 13 2 17 24 23 12 3 18 25 22 11 4 19 20 21 10 5 6 7 8 9 【 C+代码】 #include“s

10、tdio.h“ #include“iostream,h“ int array1111; int temp; int ROW; void godown(int temp =ROW;temp+) if(arraytempa=0) arraytempa=(1); a+; void goright(int temp =ROW;temp+) if(arraybtemp=0) arraybtemp=m+; b-; void goup(int temp 0;temp-) if(arraytempc=0) arraytempc=m+; c-; void goleft(int temp 0;temp-) if(

11、arraydtemp=0) arraydtemp=m+; (2); void main() int a,b,c,d,max,m; cin ROW; cout end1; for(a=1;a =ROW;a+) for(b=1;b =ROW;b+) (3); m=1; a=d=1; b=c=ROW; max=(4); whiie(m =max) godown(m,a); (5) (m,b); goup(m,c); goleft(m,d): for(a=1;a =ROW;a+) for(b=1;b =ROW;b+) printf(“%3d “,arrayab); cout end1; 6 阅读以下说

12、明和 Java代码,将应填入 (n)处的语句写在对应栏内。 【说明】 主窗口有一个按钮、 一个文本框和一个复选框,初始时窗口大小不能调整,选中复选框后窗口大小可以调整,如果撤销复选框的选择,则窗口的大小又不能调整,如下图所示。 【 Java代码】 import java.awt.*; import java.awt.event.*; class MyFrame extends Frame implements ItemListener,ActionListener Checkbox box; TextArea text; Button button; MyFrame(1) super(s);

13、box=new Checkbox(“设置窗口是否可调整大小 “); text=new TextArea(12,12); button=(2) (“关闭窗口 “); button.addActionListener(this); box.addltemListener(this); setBounds(100,100,200,300); setVisible(true); add(text,BorderLayout.CENTER); add(box,BorderLayout.SOUTH); add(button,BorderLayout.NORTH); setResizable(3); vali

14、date(); public void itemStateChanged(ItemEvent e) if(box.getState()=true) setResizable(true); else setResizable(false); public void actionPerformed(ActionEvent e) (4); class simple public static void main(String args) (5) (“simple“); 软件水平考试(初级)程序员下午(应用技术)模拟试卷 29 答案与解析 1 【正确答案】 (1)pa- data =pb- data

15、(2)pc- next=pa (3)pc=pb (4)pb=pb- next (5)pc- next=pa?pa:pb 【试题解析】 本题考查程序流程图和有序链表的归并。 题目要求我们归并头指针分别为 La和 Lb的有序单链表,组成一个新的有序单链表 Lc,而 Lc又是指向 La的。首先,我们来了解一下单链表的结构。单链表中一般有两个域,一个是数据域,用来存放链表中的数据;另一个是指针域,用来存放指向下个结点的指针。其归并的过程应该是先比较链表 La和 Lb 中第一个元素,将较小的从其链表中取出放到 k中,再取下一个结点的值去比较,重复这个过程,直到一个链表被全部取完,再将另一个链表剩下的部分

16、连接到 Lc后面即可。 下面,我们来看程序流程图的内容。首先是用两个指针变量 pa和 pb分别 指向La和 Lb的当前待比较插入的结点,而 pc指向 Lc表中当前最后一个结点。再下面是一个条件判断语句,其作用是判断链表 La 和 Lb是否为空,如果有一个为空,只要将另一个链表剩下的部分连接到 Lc后面,程序应该就可以结束了。 第 (1)空是条件判断语句的条件,根据我们上面的分析,再结合流程图下面的内容,我们可以知道,这个条件语句的作用是比较当前待插入的两个值的大小,而指针变量 pa和 pb分别指向 La和 Lb的当前待比较插入的结点,因此,此空的答案为 pa- data =pb- data。

17、第 (2)空是在条件为 真的情况下执行的语句,如果条件判断为真,应该将 pa所指结点连接到 pc所指结点后面,因此, pc所指结点的指针域应该存放 pa所指结点的地址。所以,此空的答案为 pc- next=pa。 第 (3)空和第 (4)空都是在条件为假的情况下执行的语句,如果条件为假,说明 pb所指结点的值小于 pa所指结点的值,应该将 pb所指结点连接到 pc所指结点后面,图中已经实现这一功能,要我们完成的是在插入后的后继工作。由于 pc指向的是 Lc表中当前最后一个结点,在插入一个结点后,要修改 pc的值。在将 pb所指结点插入后,链表中的最后一 个结点就是 pb 所指结点,第 (3)空

18、的答案应该为pc=pb。执行完这些功能后,指针 pb应该要往后移动,即指向下一个结点,第 (4)用来完成这个功能,所以答案为 pb=pb- next。 在前面,我们已经讲到如果链表 La和 Lb有一个为空,只要将另一个链表剩下的部分连接到 Lc后面即可。第 (5)空就是用来完成这个功能的,但我们不知道具体是哪个链表为空,还需要判断,因此,此空答案为 pc- next=pa?pa:pb。 2 【正确答案】 (1)n!=i (2)n=n/i (3)m=i (4)j=i/4*5+1 (5)count+ 【试题解析】 本题考查 C语言中正整数分解质因数算法和猴子分桃算法的实现。 在程序 2.1中,要求

19、将一个正整数分解质因数。我们先来了解一下质因数的概念,一个自然数的因数中,为质数的因数叫做这个数的质因数。把一个合数,用质因数相乘的形式表示出来,叫做分解质因数。如 90=2*3*3*5,其中 2, 3, 5都是质数。在对数 n进行分解质因数时,应先找到一个最小的质数 i,然后按下述步骤完成: (1)判断这个质数 i是否等于 n,如果相等,则说明分解质因数的过程已经结束,打印 出结果即可。 (2)如果 ni,但 n能被 i整除,则 i是 n的质因数,应打印出 i的值,并用 n除以 i的商,作为新的正整数 n。 (3)如果 n 不能被 i整除,则用 i+1作为 i的值,重复执行第 (1)步。 通

20、过代码我们已经知道了最小的质数为 2,第 (1)空是循环的判断条件,结合我们上面的分析,应该是判断质数 i是否等于 n,因此,此空答案为 n!=i。 第 (2)空在条件判断语句下,条件 n%i=0 成立,说明 n能被 i整除,根据分析,应打印出 i的值,并用 n 除以 i的商,作为新的正整数 n。代码中已经实现了对 i的输 出,第 (2)空的任务是用 n除以 i的商,作为新的正整数 n,因此,答案为n=n/i。 在程序 2.2中,要求我们求出原来海滩上的桃子数,这个数的特点是除以 5余1,且减去它的商和余数后再除以 5又余 1,一直这样下去,直到最后一次。要求这样一个有特点的数,我们可以在一个

21、较大的范围里编程去找具有这种性质的数。结合代码我们知道,程序设计是从 4到 10000这个范围里去找具有这种特征的数的基数。 第 (3)空所在位置是第一层循环下面,应该是给变量赋初值阶段,结合后面的程序,可以发现 m是用来临时存放当前求的基数乙因此, 此空答案为 m=i。 第 (4)空在第二层循环下面,这个循环的作用是利用当前的基数 i来求桃子数,那么求解的过程肯定是分桃过程的逆向过程。即此空的答案为 i=i/4*5+1。 第 (5)空在条件判断语句下面,如果条件成立,则执行此语句。我们接着看下面的程序,发现程序中有语句 if(count=4),而在程序中一直没有出现变量 count的值改变的

22、语句,而它的初值是 0,因此,此空肯定用来改变 count的值的,再结合猴子分桃的特性,可以得到此空的答案为 count+。 3 【正确答案】 (1)q- data=x (2)si=q (3)i!=1 (4)sj- lchild=q (5)sj-rchild=q 【试题解析】 本题考查二叉树的构造。 题目要求构造一棵二叉树,而二叉树的性质如下:如果对一棵有 n个结点的完全二叉树的结点按层序编号 (从第 1层到第 log2n+1层,每层从左到右 ),则对任一结点 i(1in),有: (1)如果 i=1,则结点 i无双亲,是二叉树的根;如果 i 1,则其双亲是结点i/2。 (2)如果 2i n,则

23、结点 i为叶子结点,无左孩子: 否则,其左孩子是结点 2i。 (3)如果 2i+1 n,则结点 i无右孩子;否则,其右孩子是结点 2i+1。 下面我们来看程序。程序中声明了一个结点指针数组,用来保存生成的树中结点。用从键盘输入的方式来确定要插入的字符 x和此结点在二叉树中的位置 i(这个位置是指在完全二叉树中编号的位置 )。 第 (1)空是在生成一个新结点后的操作,生成了一个新结点后,自然要将从键盘输入的字符 x值存放进来,以及修改结点的两个指针域。程序中指针域都赋了空,因此,第 (1)空的任务应该是将字符 x写进来,因此,此空答案为 q-data=x。 第 (2)空是在对结点完成操作后的操作

24、,根据题目意思,生成的结点应该要保存到数组 s中,此数组是一个指针数组,保存结点时,是将结点的地址保存进数组中相应的位置,因此,此空答案为 sil=q。 第 (3)空是条件判断语句的条件,结合下面的程序可以知道,此条件语句用来判断当前结点是不是根结点,如果不是,才执行条件语句中的内容。根据上面的分析,如果 i=1,则结点 i无双亲,是二叉树的根,因此,此空的答案为 i!=1。 第 (4)空处后面有注释,说明 i是 j的左孩子结点,这个时候我们应该让 j结点的左孩子指针指向结点 i,此空就是要实现这一功能。而结点, j被存放在数组 s中的第 j个位置,因此,此空答案为 si- lchild=q。

25、 从程序中很容易看出,第 (5)空与第 (4)空功能相似,只是说 i 是 j的右孩子结点,因此,让 j结点的右孩子指针指向结点乙此空答案为 sj- rchild=q。 4 【正确答案】 (1)ptr=*t (2)ptr- count+ (3)ptr- count=1 (4)t- left (5)&root, word 【试题解析】 本题考查在 C语言中实现 字母的统计和有序二叉树的建立及遍历。 题目要求统计一篇英文短文中不同单词及出现次数,并将这些单词及其出现的次数用一棵有序二叉树存储,然后中序遍历该二叉树,将遍历经过的二叉树上的结点的内容输出。内容的输出是按词典编辑顺序将单词及出现次数输出的

26、,因此二叉树的排序是按单词在词典中编辑顺序进行的,并且有序二叉树是动态生成的。 本题目的关键是有序二叉树是动态生成的,我们先来看其生成的步骤: (1)如果相同键值的结点已在二叉排序中,则不再插入,只需修改其 count的值即可; (2)如果二叉排序树 为空树,则以新结点为根建立二叉排序树; (3)根据要插入结点的键值与插入后父结点的键值比较,就能确定新结点是父结点的左子结点,还是右子结点,并作相应插入。 重复这几步,直到单词统计结束。 下面我们来分析代码。函数 getword()已经完全实现了,用来统计短文中的单词,并返回 1,说明此单词出现了一次。函数 binary_tree()是用来生成有

27、序二叉树的。函数 midorder()用来实现中序遍历。 第 (1)空在函数 binary_tree()中,结合程序不难看出,此空应该是赋初值,而且是给指针变量 ptr赋值。函数 binary_tree()的形参中有一个指针变量 *t,用来传递待插入到有序二叉树中的结点地址,在这里是让指针变量 ptr指向这个地址,因此答案为 ptr=*t。 第 (2)空在条件判断语句 if(!compres)下,而 compres 存放的是上步的比较结果值,如果条件判断语句结果为真,说明 word与 ptr- word的值相等,即树中已经存在该字母结点,根据有序二叉树的生成步骤知道,不需要再插入,只需修改其

28、count的值即可,因此,第 (2)空答案为 ptr- count+。 第 (3)空在动态生成了新结点后面。生成了一个新结点后,自然要对新结点的几个域值进行赋初值,程序中对指针域都赋了空,对字符指针域也赋了值,剩下的只有 count值没有被修改,那么此空应该是用来修改 count的值。在一个字母对应的结点刚插入树中时,它肯定是第一次出现,因此,此空答案为 ptr- count=1。 第 (4)空在函数 midorder()中,此函数的功能是实现对有序二叉树的中序遍历。它是用递归方法来实现的,如果树不为空,应该先对其左子树进行递归遍历,然后才是右子树,因此,第 (4)空答案为 t- left。

29、第 (5)空是当主函数调用函数 binary_tree()时,需要传递的参数。根据binary_tree()的定义,我们知道它的第一个参数是指向有序二叉树的二重指针,而第二个参数是指向当前需要处理的字母的指针。在主函数中,表明有序二叉树是一重指针 root,而存放当前需要处理字母的是 word数组。在一重指针与二重指针进行参数传递时,需要注意加取地址运算符 “&”,因此,此空答案为 &root,word。 5 【正确答案】 (1)m+ (2)d+ (3)arrayab=0 (4)ROW*ROW (5)goright 【试题解析】 本题考查 C+中螺旋方阵的实现。 题目要求在用户输入该方阵的行列

30、数后,自动生成对应的螺旋方阵。首先我们来简单分析一下螺旋方阵的特点,顾名思义,其基本结构是成螺旋形状的,按照螺旋的方向数值逐渐增大,直到最中间的一点结束。程序中分别用 4个函数来实现其螺旋方向向下、向右、向上和向左时,数组中相应元素的变化,结合程序可以发现数组的初值是全 0。 第 (1)空在螺旋方向向下的实现函数中,当螺旋方向向下时,二维数组中列不变而逐行加 1,从程序中可以看出 此空所在行的作用就是用来改变数组中元素的值,结合整个程序知道变量 m中存放的是当前位置的数值,因此,此空答案为 m+。 第 (2)空在螺旋方向向左的实现函数中,当螺旋方向向左时,二维数组中行不变而随列下标 temp

31、的变化逐列加 1,直到数组元素不为 0,这个时候说明已经到了被螺旋线经过的列,因此,要往后退一列即列下标变量 d加 1,此空答案为 d+。 第 (3)空在一个二重循环下面,程序声明了一个二维数组且没有初值,结合程序可以推断出此空的任务就是给数组赋初值。而根据上面的分析,数组的初值应该是全 0,因此,此空 答案为 arrayab=0。 第 (4)空很明显是给变量 max赋初值,这要求先去弄清楚变量 max的作用。由语句 while(m =max)我们可以推断出变量 max中存放的是最大的数据项,而一个 n阶的方阵中最多有 nn个元素,从程序中可以知道,这是一个 ROW阶的方阵,因此,此空答案为

32、ROW*ROW。 第 (5)空是调用上面的 4个函数,根据螺旋方阵的生成规则,应该是先向下,接着向右,再向上,最后向左,结合程序我们知道此空是调用向右的函数。因此,此空答案为 goright。 6 【正确答案】 (1)String s (2)new Button (3)false (4)dispose() (5)new MyFrame 【试题解析】 本题考查 Java的程序界面设计与窗口大小改变的实现。 题目要求主窗口中有一个按钮、一个文本框和一个复选框,初始时窗口大小不能调整,选中复选框后窗口大小可以调整,如果撤销,则窗口的大小又不能调整。 第 (1)空很明显是窗口类 MyFrame的构造函

33、数的参数,通过对函数体进行 分析 可以发现,函数体中出现了一个未定义的变量 s,而窗口类 MyFrame的构造函数的参数一般是窗口名,应该是字符串型变量。因此,此空答案为 String s。 第 (2)空是给 button变量赋一个值,此空后面的参数表示关闭窗口,由此不难想到这行语句的作用是创建关闭窗口按钮。在 Java中,一般用关键字 new 来实现创建新的对象,因此,此空答案为 new Button。 第 (3)空是函数 setResizable()的参数,这个函数的作用是对窗口大小进行设置,其参数是一个布尔型变量,如果参数为真,可以改变窗口的大小;如果参数为假,则不能改变窗口的大小。根据

34、题目要求,在选中复选框 以前,应该不能改变窗口的大小,那么函数的参数应该为假,因此,此空答案为 false。 第 (4)空在函数 actionPerformed()中,此函数用来释放对象的资源。在 Java中,可以消除对象的函数是 dispose(),因此,此空答案为 dispose()。 第 (5)空是在主函数中,主函数是 Java程序的入口函数,在主函数中只有一条语句,再结合后面的 simple,我们可以推断出这条语句的功能应该是实现 simple窗口的创建。在上面程序中已经给出了这类窗口的定义,而在 Java中用关键字 new来创建新的 对象,因此,此空答案为 new MyFrame。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1