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

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

1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 33及答案与解析 1 阅读下列说明和流程图,将应填入 (n)处的语句写在对应栏内。 【说明】 设学生(学生数少于 50人 )某次考试的成绩按学号顺序逐行存放于某文件中,文件以单行句点 “.”为结束符。下面的流程图用于读取该文件,并把全部成绩从高到低排序到数组 B50中。 【流程图】 2 阅读以下函数说明和 C语言函数,将应填入 (n)处的字句写在对应栏内。 【函数 1说明】 函数 palindrome(char s)的功能是:判断字符串 s是否为 回文字符串。若是,则返回 0,否则返回 -1。若一个字符串顺读和倒读都一样时,则可称该字符串是回

2、文字符串。例如, “LEVEL”是回文字符串,而 “LEVAL”不是。 【函数 1】 int palindrome(char s char *pi, *pj; pi=s; pj=s+strlen(s)-1; while(pi pj pj-; if(2)return-1; else return 0; 【函数 2说明】 函数 f(char *str, char del)的功能是:将非空字符串 str分割成若干个子字符串并输出, del表示分割时的标志字符。 例如,若 str的值为 “33123333435”, del的值为 “3”,调用此函数后,将输出三个子字符串,分别为 “12”、 “4”和

3、“5”。 【函数 2】 void f(char *str, char del) int i,j, len; len=strlen(str); i=0; while(i len) While(3) i+; /*忽略连续的标志字符 */ /*寻找从 stri开始直到标志字符出现的一个子字符串 */ j=i+1; while(strj!=del (4)=0; /*给找到的字符序列置字符串结束标志 */ printf(“%st“, (5); 3 阅读以下函数说明和 C语言函数,将应填入 (n)处的字句写在对应栏内。 【说明】 本题中的函数 encode()和 decode()分别实现对字符串的变换和复

4、原。其中变换函数 encode()顺序考查已知字符串的字符,按以下规则逐组生成新字符串: (1)若已知字符串的当前字符不是数字字符,则将该字符复制在新字符串中。 (2)若已知字符串的当前字符是一个数字字符,且它之后没有 后继字符,则简单地将它复制到新字符串中。 (3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字字符的面值为 n,则将它的后继字符 (包括后继字符是一个数字字符 )重复复制 n+1次到新字符串中。 (4)以上述一次变换为一组,在不同组之间另插入一个下划线 “_”用于分隔。例如, encode()函数对字符串 26a3t2的变换结果为 666_a_tttt_2。

5、复原函数 decode()做与变换函数 encode()相反的工作。即复制不连续相同的单个字符,而将一组连续相同的字符 (不超过 10个 )变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中略过变换函数,为不同组之间添加的一个下划线字符。 假定调用变换函数 encode()时的已知字符串中不含下划线字符。 【函数】 int encode(char *instr, char *outstr) char *ip, *op, c; int k,n; ip=instr; op=outstr; while(*ip) if(*ip =0 c=(2); for(k=0; k n;k+)

6、*op+=c; else (3); *op+=_; ip+; if(op outstr)op-; (4); return op-outstr; int decode(char *instr, char *outstr) char *ip, *op, c; int n; ip=instr; op=outstr; while(*ip) c=*ip; n=0; while(*ip=c n+; if(5)*op+=0+n-1; *op+=c; if(6)ip+; *op=0; return op-outstr; 4 阅读以下函数说明和 C语言函数,将应填入 (n)处的字句写在对应栏内。 【说明】 编写

7、程序,利用带参数的主函数 main(),实现二进制文件的复制。比如,若该程序已生成可执行文件 filebin.exe,在 DOS操作系统命令状态下键入如下命令行: filebin f0.fil f1.fil 则实现将已存在的二进制文件 f1.fil依原样复制给名为 f0.fil的二进制文件。 【函数】 #include stdio.h void fcopy(FILE *fout, FILE *fin) char k; do k=fgetc(1); if(feof(fin) break; fputc(2); while(1); void main(int argc,char *argv) FIL

8、E *fin,*fout; if(argc!=(3) return; if(fin=fopen(argv2,“rb“)=NULL) return; fout=(4); fcopy(5); fclose(fin); fclose(fout); 5 阅读以下说明,以及用 C+在开发过程中所编写的程序代码,将应填入 (n)处的字句写在对应栏内。 【说明】 冒泡排序算法,作为 Orderedlist T,size类的成员函数, last是有序表的元素个数。 template typename T,int size void Orderedlist T,size BubbleSort() bool no

9、swap; /交换标志 int i,j; T temp; for(i=0;i last;i+) noswap=(1); for(j=(2);(3);(4) /从下往上冒泡 if(slistj slistj-1) temp=slistj; slistj=slistj-1; slistj-1=temp; noswap=(5); if(noswap)break; 6 阅读以下说明和 Java代码,将应填入 (n)处的字句写在对应栏内。 【说明】 下面代码里, instr是一个抽象类,它被两个子类 wind和 rain分别实现,而 brass又继承了 wind类,并覆盖了 play方法。 【程序】 (

10、1) class instr (2) Void play(); class wind (3) instr void play()System.out.println(“wind play!“); class rain extends instr void play()System.out.println(“rain play!“); class brass extends (4) void play()System.out.println(“brass play!“); public class music static void tuneAll(instr e) for(int i=0;i

11、e.length;i+) ei.play(); public (5) void main(Stringargs) instr orch=new instr3; int i=0; orchi+=new wind(); orchi+=new rain(); orchi+=new brass(); tuneAll(orch); 软件水平考试(初级)程序员下午(应用技术)模拟试卷 33答案与解析 1 【正确答案】 (1)B0a (2)i0 (3)a=“.“ (4)a Bj (5)j- 【试题解析】 本题考查用程序流程图来描述排序。 题目要求将文件中学生的成绩读出,并把全部成绩从高到低排序到数组 B50

12、中。这里面涉及两个问题,第一是从文件中读数,文件中的数据是 以单行句点 “.”为结束符的,在未读到此符号前,应该将继续取数据。第二是排序,每取到一个学生的成绩都要与数组的学生成绩比较,按照从高到低的顺序在数组中找到合适的位置存放。下面来具体分析流程图。 第 (1)空在条件判断为假的情况下执行流程中,如果条件为假说明从文件中取到的数据是学生成绩。从程序流程图中可以看到,从文件中读的数据存放在变量 a中,而此空是第一次取数据,应该存放数组 B的第一个位置,因此此空答案为B0a 。 第 (2)空是紧接着第 (1)空来的,在上面已经把从文件中读到的第一个数存放到了数组中 ,接下来应该处理数组的下标问题

13、,从后面的流程中可以推断出变量 i是存放数组当前下标的,而且没有初值,那么此空的任务应该是用来给变量 i赋一个初值,而对数组的操作应该从头开始,因此此空答案为 i0 。 第 (3)空是循环的判断条件,如果条件成立则结束,在这之前又对文件进行了一次读数,根据我们上面的分析只有在读到了结束符时程序才结束,那么此空肯定是判断从文件中读到的数据是否为结束符,因此此空答案为 a=“.“?。 第 (4)空也是一个循环的判断条件,如果条件成立,则将取到的数存放到数组的当前下标位置;如果不成立 ,则循环找到合适的位置再存放。从这里我们不难推断出,流程图中是将从文件取到的成绩与当前数组中的最小成绩进行比较的,而

14、当前数组中的最小成绩存放在位置 j中,因此此空答案为 a Bi?。 第 (5)空在循环体中,这个循环的作用是为当前从文件中读到的成绩在已经排好序的数组元素中找到合适的位置,找到了就要插入,数组中的元素是按从大到小排列的,在查找合适位置时是从后往前依次比较,因此此空的任务应该是将数组的下标往前移动,所以此空答案为 “i-”。 2 【正确答案】 (1)*pi=*pi (2)pi pj或 *pi!=*pj (3)stri=del (4)strj (5)i=j+1 【试题解析】 本题考查在 C语言中对字符串的处理。 【函数 1】 使用数组 sn来存储一个字符串,因为要根据回文字符串的定义来判断一个串是

15、否是回文字符串,所以需要循环比较。 (1)拿该字符串的第一个元素 s0和最后一个元素 sn-1比较,如果 s0不等于sn-1,则 s不是回文字符串。 (2)如果 s0等于 sn-1,则拿第二个元素 s1和倒数第二个元素 sn-2比较,如果 s1不等于 sn-2,则 s不是回文字符串。 (3)依次类推,直到最中间的两个元素也比较完毕 (如果 s有偶数个元素 ),或者只剩下中间的一个元素 (如果 s有奇数个元素 )。 当上述循环结束时,如果最中间的元素没有进行比较,就说明 s不是回文字符串;如果进行了比较,则 s是回文字符串。 在函数 1中, pi和 pj是两个指向字符的指针,程序首先将 s的首地

16、址赋给 pi(即*pi =a0),将元素 sstrlen(s)-1的地址赋 给 pj(即 *pj=sstrlen(s)-1),当 pi pj并且 pi和 pj所指向的值相等时进行循环: pi自增, pj自减。 退出循环后,如果 pipj,则 s是回文字符串 (如果 s有偶数个元素,则为 pipj;如果 s有奇数个元素,则为 pi=pj);如果 pi pj,则 s不是回文字符串。 【函数 2】 由函数 2说明可知,此函数对给定的字符串进行从左至右的扫描,找出不包含标志字符的子字符串。 在函数 2中, i的初值为 0, len表示字符串的长度。当 i len时进行循环:如果当前字符是标志字符,则不

17、作 处理,继续扫描。当退出该循环时,当前字符 stri不是标志字符,这时从 stri开始寻找,直到找到在标志字符中出现的一个子字符串 (i保持不变,用 i标记寻找的过程 ),给找到的字符序列置字符串结束标志,以便于后面语句的输出。 输出语句结束后,就要继续寻找后面的不包含标志字符的子字符串,这时,需要把指针 i移动至 j的后面,继续扫描。 3 【正确答案】 (1)*ip-0+1 (2)*+ip (3)*op+=*ip (4)*op=0 (5)n 1 (6)*ip=_ 【试题解析】 本题考查 C语言对字符串的处理。 本题对字符串按一定要求进行编码解码,所以编码规则至关重要。在做题前一定要看清规则

18、,并按规则对程序说明中所举的例子进行手动的编码解码工作。必要时,可以将其和程序比较着看。 下面我们来开始分析程序。 int encode(char *instr, char *outstr) char *ip, *op, c; int k, n; ip=instr; op=outstr; while(*ip) if(*ip =0 k n;k+) *op+=c; else (3); 这里对应规则 (1)和 (2)直接把字符拷贝到新串。所以 (3)空应填 *op+=*ip。 *op+=_; ip+; if(op outstr)op-; (4); 这里应是给新串 outstr加上字符串结束符 0。因

19、为如果执行了上 面的 while循环,则会把字符串 26a3t2变换结果为 666_a_tttt_2_,而不是程序说明中的666_a_tttt_2。因为上面的 while循环中有 “while()(.*op+=_;ip+;”。所以要把最后一个 _用字符串结束符 0替换掉,刚好 “if(op outstr)op-; ”把 op指针定位到了最后的 _。所以 (4)空应填 *op=0。这里要注意一点, “if(op outstr)op-”不能直接写成 op-。因为当输入串 instr为空时, outstr也为空, while()不作处理,则 op=outstr。这种情况下,直接把 0写到 *outs

20、tr,表示 outstr是一个空串。 return op-outstr; 接下来我们分析解码程序 decode()。 int decode(char *instr, char *outstr) char *ip, *op, c; int n; ip=instr; op=outstr; while(*ip) c=*ip;n=0; while(*ip=c n+; 上面的循环用于统计字符 c的个数。 if(5)*op+=0+n-1; 此处把统计个数存到输出串,则表示当前情况符合编码规则 (3)。所以 (5)空应填n 1。 *op+=c; if(6)ip+; 因为解码规则中有 “并在复原过程中略过变换

21、函数,为不同组之间添加的一个下划线字符 ”。所以 (6)空应填 *ip=_。 4 【正确答案】 (1)fin (2)k,fout (3)3 (4)fopen(argv1,“wb“) (5)fout,fin 【试题解析】 本题考查用 C语言对二进制文件的操作。 题目要求程序实现二进制文件的复制。此题的关键是我们对文件基本操作的掌握,如文件的打开,对文件内容进行读 /写等。下面来具体分析程序。 第 (1)空是在复制函数 fcopy()中,这个函数的功能是对文件进行复制,函数中的两个参数分别是指向被操作的两个文件的指针。此空是函数 fgetc()的参数,这个函数的作用是从文件中逐个读字符,其参数是文

22、件要读的地址,结合后面的if(feof(fin),可以很清楚地知道,当前操作的文件是指针 fin指向的文件,因此此空答案为 fin。 第 (2)空也在复制函数 fcopy()中,是函数 fputc()的参数,这个函数的作用与函数fgetc()相反,是往文件中写内容,其参数是当前文件中要写的内容和地址。根据题目的意思,应该是往另一个文件中写内容,因此此空答案为 k,fout。 第 (3)空在主函数中,此空是一个条件判断语句的条件,看它的内容是否等于变量 argc的内容,如果不等,则程序返回。题目中要求在 DOS操作系统命令状态下键入命令行 “filebin f0.fil f1.fil”后,实现将

23、已存在的二进制文件 f1.fil依原样复制给名为 f0.fil的二进制文件。那么主函数参数 argc的值应该等于 3,是后面 argv指针数组中内容的个数,而数组中的内容分别是 argv0=“filebin“,argv1=“f0.fil“, argv2=“f1.fil“,因此此空答案为 3。 第 (4)空是给指针变量 fout赋一个值,或者说是让指针变量 fout指向该地方,从上面的程序中知道指针变量 fout指向一个文件,那么此空的任务就是打开一个文件,在 C语言中打开一个文 件用函数 fopen(),这个函数一般有两个参数,第一个参数是要打开的文件名 (指针数组 argv的第二个元素 ),

24、第二个参数是对文件的操作属性,这里要往文件中写数据,因此此空答案为 fopen(argv1, “wb“)。 第 (5)空是复制函数 fcopy()的两个参数,程序到这里,这两个参数应该很好确定了,第一个参数是指向被写文件的指针变量 fout,而第二个参数是指向被读文件的指针变量 fin,因此此空答案为 fout,fin。 5 【正确答案】 (1)true (2)last (3)j i (4)j- (5)false 【试题解析】 本题考查用 C+实现冒泡排序。 题目要求用程序实现冒泡排序,其中 last是有序表的元素个数,即需排序元素的个数。首先我们需要了解一下冒泡排序的方法。冒泡排序将被排序的

25、记录数组R1n垂直排列,每个记录 Ri看做是重量为 ki的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组 R:凡扫描到违反本原则的轻气泡,就使其向上 “飘浮 ”。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。 冒泡排序的具体过程为: 第一步, 先比较 k1和 k2,若 k1 k2,则交换 k1和 k2所在的记录,否则不交换。继续对 k2和 k3重复上述过程,直到处理完 kn-1和 kn。这时最大的排序码记录转到了最后位置,称第 1次起泡,共执行 n-1次比较。 第二步,与第一步类似,从 k1和 k2开始比较,到 kn-2和 kn-1为止,共执行 n-2次比较,称第 2

26、次起泡。 依此类推,共做 n-1次起泡,完成整个排序过程。下面我们来具体分析程序。 第 (1)空很明显是给布尔型交换标志变量 noswap赋一个初值,从程序中不难发现,这个变量为真时,当前元素才可以进行交 换操作,那么其初值应该是一个为真的值,因此此空答案为 true。 第 (2)空是给循环变量赋一个初值,这个循环的作用注释已经给出,是从下往上冒泡。题目中告诉我们序列中有 last个元素,那么最下面的元素应该是第 last个,因此此空答案为 last。 第 (3)空是循环的判断条件,根据我们上面的分析,每次起泡需要比较的次数为:总元素个数 -已经起泡的次数,起泡的过程只需要执行到当前已经排好序

27、的最后一个元素即可,因此此空答案为 j i。 第 (4)空也在循环中,很明显是用来改变循环变量 j的值,而这个循环变量是 从last开始依次往上的过程,因此循环变量 j的值应该是每次减少 1,所以此空答案为 j-。 第 (5)空是给布尔型交换标志变量 noswap赋一个值,它在循环的最后面,也就是说,在一次冒泡排序结束时的操作,根据题目的分析我们可以知道,每次冒泡排序都能排好一个元素在序列中的位置,而这个已经排好序的元素以后就不需要再参加排序过程了,因此应该将其标志变量 noswap赋一个假值,因此此空答案为false。 6 【正确答案】 (1)abstract (2)abstract (3)

28、extends (4)wind (5)static 【试题解析】 本题考查了 Java抽象类的定义、继承,以及主函数定义的一些相关知识。 定义抽象类时只需在类标识符前加上关键字 abstract即可,在 Java语言中,抽象类中的方法也为抽象方法。因此,第 (1)空与第 (2)空的答案是 abstract。 题目要求类 wind和 rain是抽象类 instr的子类,即类 wind和 rain都继承抽象类instr,在 Java语言中,对抽象类的继承用关键字 extends,如果不能确定,还可以往下看程序,就清楚了。因此,第 (3)空应该填 extends。 又由于题目要求类 brass继承类 wind,第 (4)空的答案也变得非常明显了,填写 wind。 第 (5)空所在的位置是对 Java语言的主函数的定义, Java语言中主函数也和其他一些高级语言一样,是入口函数,它的声明规定用 public static void main(Stringargs)这种结构。因此,第 (5)空答案是 static。

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

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

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