【计算机类职业资格】初级程序员下午试题-17及答案解析.doc
《【计算机类职业资格】初级程序员下午试题-17及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员下午试题-17及答案解析.doc(6页珍藏版)》请在麦多课文档分享上搜索。
1、初级程序员下午试题-17 及答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 实现连通图 G的深度优先遍历(从顶点 v出发)的非递归过程。 【算法】 第一步:首先访问连通图 G的指定起始顶点 v; 第二步:从 V出发,访问一个与 vU (1) /Up,再从顶点 P出发,访问与 pU (2) /U顶点 q,然后从 q出发,重复上述过程,直到找不到存在U (3) /U的邻接顶点为止。 第三步:回退到尚有U (4) /U顶点,从该顶点出发,重复第二、三步,直到所有被访问过的顶点的邻接点都已被访问为止。 因此,在这个算法中应设一个栈保存被U
2、 (5) /U的顶点,以便回溯查找被访问过顶点的未被访问过的邻接点。(分数:15.00)_二、B试题二/B(总题数:1,分数:15.00)2.【函数 1说明】 函数 palindrome(char s)的功能是:判断字符串 s是否为回文字符串。若是,则返回 0,否则返回-1。若一个字符串顺读和倒读都一样时,则可称该字符串是回文字符串。例如,“LEVEL”是回文字符串,而“LEVAL”不是。 【函数 1】 int palindrome(char s char *pi, *pj; pi=s; pj=s+strlen(s)-1; while(pipj pj-; if(U (2) /U)return-
3、1; else return 0; 【函数 2说明】 函数 f(char *str, char del)的功能是:将非空字符串str分割成若干个子字符串并输出,del 表示分割时的标志字符。 例如,若 str的值为“33123333435”,del的值为“3”,调用此函数后,将输出三个子字符串,分别为“12”、“4”和“5”。 【函数 2】 void f(char *str, char del) int i,j, len; len=strlen(str); i=0; while(ilen) While(U (3) /U) i+; /*忽略连续的标志字符*/ /*寻找从 stri开始直到标志字符
4、出现的一个子字符串*/ j=i+1; while(strj!=del U (4) /U=/0; /*给找到的字符序列置字符串结束标志*/ printf(“%s/t“, U (5) /U; (分数:15.00)_三、B试题三/B(总题数:1,分数:15.00)3.【说明】 本题中的函数 encode()和 decode()分别实现对字符串的变换和复原。其中变换函数 encode()顺序考查已知字符串的字符,按以下规则逐组生成新字符串: (1)若已知字符串的当前字符不是数字字符,则将该字符复制在新字符串中。 (2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符
5、串中。 (3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字字符的面值为 n,则将它的后继字符(包括后继字符是一个数字字符)重复复制 n+1次到新字符串中。(4)以上述一次变换为一组,在不同组之间另插入一个下划线“_”用于分隔。例如,encode()函数对字符串 26a3t2的变换结果为 666_a_tttt_2。 复原函数 decode()做与变换函数 encode()相反的工作。即复制不连续相同的单个字符,而将一组连续相同的字符(不超过 10个)变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中略过变换函数,为不同组之间添加的一个下划线字符。 假定调用
6、变换函数 encode()时的已知字符串中不含下划线字符。 【函数】 int encode(char *instr, char *outstr) char *ip, *op, c; int k,n; ip=instr; op=outstr; while(*ip) if(*ip=0 c=U (2) /U; for(k=0; kn;k+) *op+=c; elseU (3) /U; *op+=_; ip+; if(opoutstr)op-; U (4) /U; return op-outstr; int decode(char *instr, char *outstr) char *ip, *op
7、, c; int n; ip=instr; op=outstr; while(*ip) c=*ip; n=0; while(*ip=c n+; if(U (5) /U)*op+=0+n-1; *op+=c; if(U (6) /U)ip+; *op=/0; return op-outstr; (分数:15.00)_四、B试题四/B(总题数:1,分数:15.00)4.【说明】 编写程序,利用带参数的主函数 main(),实现二进制文件的复制。比如,若该程序已生成可执行文件 filebin.exe,在 DOS操作系统命令状态下键入如下命令行: filebin f0.fil f1.fil 则实现将已
8、存在的二进制文件 f1.fil依原样复制给名为 f0.fil的二进制文件。 【函数】 #includestdio.h void fcopy(FILE *fout, FILE *fin) char k; do k=fgetc(U (1) /U);if(feof(fin) break; fputc(U (2) /U); while(1); void main(int argc,char *argv) FILE *fin,*fout; if(argc!=U (3) /U) return; if(fin=fopen(argv2,“rb“)=NULL) return; fout=U (4) /U; fc
9、opy(U (5) /U); fclose(fin); fclose(fout); (分数:15.00)_五、B试题五/B(总题数:1,分数:15.00)5.【说明】 在矩形类中重载关系运算符“=”,采用友元,比较的依据是矩形面积的大小。重载算术运算符“+=”,采用成员函数,更新矩形对象的长与宽,分别加上形参矩形的长与宽。重载算术运算符+,利用构造函数,采用友元。 【代码】 class Crect int length,witdth; public; CRect(int l,int w) length=l; width=w; friend int operator=(CRect/比较面积 vo
10、id operator+=(CRect/求长 U (4) /U;/求宽 friend operater+(CRect /利用构造函数 (分数:15.00)_六、B试题六/B(总题数:1,分数:15.00)6.【说明】 下面程序完成从键盘读入一个字符串,然后采用 parseInt方法将其转换为一个相应的整数。 import java.io.*; public class testThrows public staticU (1) /UreadString()U (2) /UIOException int ch; String r=“; boolean done=false; while(U (3
11、) /U) ch=System.in.read(); if(ch0 | ch=0xd) /处理回车符中第一个符号 done=true; else r=r+(char)ch; return r; public static void main(Stling args) String str; U (4) /U str=readString(); U (5) /U(IOException e) System.out.println(“error“); return; System.out.println(“input integer: “+Integer.parselnt(str); (分数:15
12、.00)_初级程序员下午试题-17 答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 实现连通图 G的深度优先遍历(从顶点 v出发)的非递归过程。 【算法】 第一步:首先访问连通图 G的指定起始顶点 v; 第二步:从 V出发,访问一个与 vU (1) /Up,再从顶点 P出发,访问与 pU (2) /U顶点 q,然后从 q出发,重复上述过程,直到找不到存在U (3) /U的邻接顶点为止。 第三步:回退到尚有U (4) /U顶点,从该顶点出发,重复第二、三步,直到所有被访问过的顶点的邻接点都已被访问为止。 因此,在这个算法中应设一个栈
13、保存被U (5) /U的顶点,以便回溯查找被访问过顶点的未被访问过的邻接点。(分数:15.00)_正确答案:()解析:(1)邻接的顶点 (2)邻接的且未被访问的 (3)未访问过 (4)未被访问过的邻接点的 (5)访问过 分析 本题考查连通图的深度优先遍历算法的非递归过程。 在做题前,我们首先来了解一下图的遍历。和树的遍历类似,图的遍历也是从某个顶点出发,沿着某条搜索路径对图中每个顶点各做一次且仅做一次访问。 连通图的深度优先遍历可定义如下:首先访问出发点 v,并将其标记为已访问过;然后依次从 v出发搜索 v的每个邻接点 w。若 w未曾访问过,则以 w为新的出发点继续进行深度优先遍历,直至图中所
14、有和源点 v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。其关键是每次遍历都是往下直到最后再往回搜索,找到还未被访问过的邻接点的顶点,然后从该顶点出发,对它及下面的顶点进行深度优先遍历。下面来具体分析其算法。 第(1)空在第二步中,在访问起始顶点 v后应该访问的结点,那么这个结点肯定是与起始顶点 v邻接的顶点,因此此空答案为“邻接的顶点”。 第(2)空是在访问 p顶点后应该访问的顶点,接下来应该也是访问与 p顶点邻接的顶点,但这个时候 p顶点的邻接顶点中有已经被访问过了的顶点,因此在访问前还需判断此顶点是否被访问过了,所以此空答案为“邻接的且未被访问的”。 第(3)空也在第二步中,
15、结合前后的内容,可以知道此空是要判断是否还可以找到与当前访问顶点邻接而未被访问的顶点,根据上面分析,如果找不到,才往回搜索,因此此空答案为“未访问过”。 第(4)空是回退过程中要注意的地方,一般回退到还未被访问过的邻接点的顶点,接着访问这个未被访问过的邻接点。因此此空答案为“未被访问过的邻接点的”。 第(5)空是存放在栈中的内容,栈具有后进先出的特点,根据上面对深度优先遍历的分析可以知道,在回退的过程中需要用到被访问过的顶点,而且回退的过程是按遍历的顶点的顺序回退的,越后被访问的顶点越先被回退,因此此空答案是“访问过”。二、B试题二/B(总题数:1,分数:15.00)2.【函数 1说明】 函数
16、 palindrome(char s)的功能是:判断字符串 s是否为回文字符串。若是,则返回 0,否则返回-1。若一个字符串顺读和倒读都一样时,则可称该字符串是回文字符串。例如,“LEVEL”是回文字符串,而“LEVAL”不是。 【函数 1】 int palindrome(char s char *pi, *pj; pi=s; pj=s+strlen(s)-1; while(pipj pj-; if(U (2) /U)return-1; else return 0; 【函数 2说明】 函数 f(char *str, char del)的功能是:将非空字符串str分割成若干个子字符串并输出,de
17、l 表示分割时的标志字符。 例如,若 str的值为“33123333435”,del的值为“3”,调用此函数后,将输出三个子字符串,分别为“12”、“4”和“5”。 【函数 2】 void f(char *str, char del) int i,j, len; len=strlen(str); i=0; while(ilen) While(U (3) /U) i+; /*忽略连续的标志字符*/ /*寻找从 stri开始直到标志字符出现的一个子字符串*/ j=i+1; while(strj!=del U (4) /U=/0; /*给找到的字符序列置字符串结束标志*/ printf(“%s/t“
18、, U (5) /U; (分数:15.00)_正确答案:()解析:(1)*pi=*pi (2)pipj 或*pi!=*pj (3)stri=del (4)strj (5)i=j+1 分析 本题考查在 C语言中对字符串的处理。 【函数 1】 使用数组 sn来存储一个字符串,因为要根据回文字符串的定义来判断一个串是否是回文字符串,所以需要循环比较。 (1)拿该字符串的第一个元素 s0和最后一个元素sn-1比较,如果 s0不等于 sn-1,则 s不是回文字符串。 (2)如果 s0等于 sn-1,则拿第二个元素 s1和倒数第二个元素 sn-2比较,如果 s1不等于 sn-2,则 s不是回文字符串。 (
19、3)依次类推,直到最中间的两个元素也比较完毕(如果 s有偶数个元素),或者只剩下中间的一个元素(如果 s有奇数个元素)。 当上述循环结束时,如果最中间的元素没有进行比较,就说明 s不是回文字符串;如果进行了比较,则 s是回文字符串。 在函数 1中,pi 和 pj是两个指向字符的指针,程序首先将 s的首地址赋给pi(即*pi =a0),将元素 sstrlen(s)-1的地址赋给 pj(即*pj=sstrlen(s)-1),当 pipj 并且 pi和 pj所指向的值相等时进行循环:pi 自增,pj 自减。 退出循环后,如果 pipj,则 s是回文字符串(如果 s有偶数个元素,则为 pipj;如果
20、s有奇数个元素,则为 pi=pj);如果 pipj,则 s不是回文字符串。 【函数 2】 由函数 2说明可知,此函数对给定的字符串进行从左至右的扫描,找出不包含标志字符的子字符串。 在函数 2中,i 的初值为 0,len 表示字符串的长度。当 ilen 时进行循环:如果当前字符是标志字符,则不作处理,继续扫描。当退出该循环时,当前字符 stri不是标志字符,这时从stri开始寻找,直到找到在标志字符中出现的一个子字符串(i 保持不变,用 i标记寻找的过程),给找到的字符序列置字符串结束标志,以便于后面语句的输出。 输出语句结束后,就要继续寻找后面的不包含标志字符的子字符串,这时,需要把指针 i
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 下午 试题 17 答案 解析 DOC
