【计算机类职业资格】初级程序员下午试题-15及答案解析.doc
《【计算机类职业资格】初级程序员下午试题-15及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员下午试题-15及答案解析.doc(7页珍藏版)》请在麦多课文档分享上搜索。
1、初级程序员下午试题-15 及答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 本程序可以将字符串 s1中出现的所有 s2子串替换成 s3,形成一个新串,但不破坏字符串s1。 【代码】 #includestdio.h #includestdlib.h #includestring.h char*replace(char *s1, char *s2,char *s3) char *p, *q, *r, *s; int |2,|3, i=0; |2=strlen(s2); |3=strlen(s3); p=s1; while(p=strs
2、tr(p,s2)!=NULL) i+; /* 统计 s2串出现的次数*/ U (1) /U; i=U (2) /U; s=r=(char*)malloc(i); /*分配动态内存存放新字符串*/ p=s1; while(1) q=strstr(p, s2); /* s2 串是否在 s1中出现,q 是首次出现的位置*/ if(q!=NULL) i=q-p; U(3) /U; r+=i; U(4) /U; r+=|3; p=q+|2; /*将指向 s1串的指针移到 s2子串出现的位置后, 为下一次循环做好准备*/ else /*q 为空,表示剩余的 s1串中已经没有 s2*/ U(5) /U; b
3、reak; /*终止循环*/ return(s); /*返回指向所形成的新串的指针*/ void main() char *a=“sabcababde“, *b=“ab“, *c=“efg“, *d; d=replace(a, b, c); printf(“result=%s/n“, d); free(d); (分数:15.00)_二、B试题二/B(总题数:1,分数:15.00)2.1说明】 本程序可以打印出如下图形(菱形): * * * * * * * 【函数 2.1】 main() int i,j,k; for(i=0;i=3;i+) for(j=0;j=2-i;j+) printf(“
4、“); for(U (1) /U) printf(“*“); printf(“/n“); for(i=0;i=2;i+) for(U (2) /U) printf(“ “); for(k=0;k=4-2*i;k+) printf(“*“); printf(“/n“); 【函数 2.2说明】 通过本程序,可以从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“CsaiWgm”中保存,输入的字符串以“!”结束。 【函数 2.2】 #include “stdio.h“ main() FILE *fp; char str100,filename10; int i=0; if(f
5、p=fopen(“CsaiWgm“,“w“)=NULL) printf(“cannot open the file/n“); exit(0); printf(“please input a string:/n“); gets(str); while(U (3) /U) if(stri=a fputc(stri,fp); U(5) /U; fclose(fp); fp=fopen(“CsaiWgm“,“r“); fgets(str,stden(str)+1,fp); printf(“%s/n“,str); fclose(fp); (分数:15.00)_三、B试题三/B(总题数:1,分数:15.0
6、0)3.【说明】设 M叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值后跟用“()”括起来的各子树的列表(若有子树的话),各子树的列表间用“,”分隔。例如,如下图所示的三叉树可用列表a(b(c,d),e,f(g,h,i)表示。本程序根据输入的列表生成一棵 M叉树,并由 M叉树再输出列表。(分数:15.00)_四、B试题四/B(总题数:1,分数:15.00)4.【说明】 本程序利用非递归算法实现二叉树后序遍历。 【函数】 #includestdio.h #includestdlib.h typedef struct node/*二叉树的结点数据结构类型*/ char da
7、ta; struct node *left; struct node *right; BTREE; void SortTreelnsert(BTREE *tree, BTREE *s) if(*tree=NULL)*tree=s; else if(s-data(*tree)-data) SortTreelnsert(U (1) /U,s); else if(s-data=(*tree)-data) SortTreelnsert(U (2) /U,s); void TraversalTree(BTREE *tree) BTREE *stack1 000,*p; int tag1000,top=0
8、; p=tree; do while(p !=NULL) stack+top=p; U (3) /U; tagtop=0; /*标记栈顶结点的左子树已进行过后序遍历*/ while(top0 putchar(p-data); if(top0)/*对栈顶结点的右子树进行后序遍历*/ U (5) /U; tagtop=1; while(top0); void PrintSortTree(BTREE *tree) if(tree !=NULL) printSortTree(tree-left); putchar(tree-data); pdntSortTree(tree-right); main()
9、 BTREE *root=NULL, *node; char ch; ch=getchar(); while(ch !=#) node=(BTREE*)malloc(sizeof(BTREE); node-data=ch; node-left=node-right=NULL; SortTreelnsert( ch=getchar(); PrintSortTree(root); putchar(/n); TraversalTree(root); (分数:15.00)_五、B试题五/B(总题数:1,分数:15.00)5.【说明】 主窗口有一个按钮、一个文本框和一个复选框,初始时窗口大小不能调整,选
10、中复选框后窗口大小可以调整,如果撤销复选框的选择,则窗口的大小又不能调整,如下图所示。 (分数:15.00)_六、B试题六/B(总题数:1,分数:15.00)6.【说明】 本程序的功能是实现任意两个大整数的乘法运算,例如: 输入整数1:8934793850094505800243958034985058 输入整数 2:234584950989689084095803583095820923 二者之积: 209596817742739508050978890737675662366433464256830959194834854876 8534 【C+代码】 #includeiostream.h
11、 const int MAXINPUTBIT=100; const int MAXRESULTBIT=500; class LargeNumber int i,j; int temp; int oneMAXINPUTBIT+1; int onebit; /one的位数 int twoMAXINPUTBIT+1; int twobit; /two的位数 int resultMAXRESULTBIT+1; public: LargeNumber(); LargeNumber(); int inputone(); /出错返叫 0,否则返回 1 int inputtwo(); /同上 void mul
12、tiplication(); /乘 void clearresult(); /清零 void showresult(); /显示 ; LargeNumberLargeNumber() for(i=0;i=MAXINPUTBIT;i+) onei=0; twoi=0; onebit=0; twobit=0; inputone(); inputtwo(); LargeNumberLargeNumber() int LargeNumberinputone() char NumberMAXINPUTBIT+1; cout“Please enter one:“; cinNumber; i=0; j=MA
13、XINPUTBIT; while(Numberi!=/0) i+; onebit=i; for(i-;i=0;i-,j-) if(int(Numberi)=48 /由字符转换为数字 else return 0; return 1; int LargeNumberinputtwo() char NumberMAXINPUTBIT+1; cout“Please enter two:“; cinNumber; i=0; j=MAXINPUTBIT; while(Numberi!=/0) i+; twobit=i; for(i-;i=0;i-,j-) if(int(Numberi)=48 /由字符转换
14、为数字 else return 0; return 1; void LargeNumbermultiplication() /乘法 clearresult(); int m; for(i=MAXINPUTBIT;i=0;i-) temp=twoi; for(j=U (2) /U,m=MAXINPUTBIT;m=0;m-,j-) resultj+=temp*onem; if(resultj9) resultj-1+=resultj/10; U (3) /U; cout“one*two=“; showresult(); void LargeNumbershowresult() i=0; while
15、(resulti=0 if(iMAXRESULTBIT) cout“0“; /输出 0 for(;i=MAXRESULTBIT;i+) coutU (4) /U; coutendl; void LargeNumberclearresult() for(i=0;i=MAXRESULTBIT;i+) U (5) /U; void main() LargeNumber a; a.multiplication(); (分数:15.00)_初级程序员下午试题-15 答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 本程序可以将字符串 s1中出
16、现的所有 s2子串替换成 s3,形成一个新串,但不破坏字符串s1。 【代码】 #includestdio.h #includestdlib.h #includestring.h char*replace(char *s1, char *s2,char *s3) char *p, *q, *r, *s; int |2,|3, i=0; |2=strlen(s2); |3=strlen(s3); p=s1; while(p=strstr(p,s2)!=NULL) i+; /* 统计 s2串出现的次数*/ U (1) /U; i=U (2) /U; s=r=(char*)malloc(i); /*分
17、配动态内存存放新字符串*/ p=s1; while(1) q=strstr(p, s2); /* s2 串是否在 s1中出现,q 是首次出现的位置*/ if(q!=NULL) i=q-p; U(3) /U; r+=i; U(4) /U; r+=|3; p=q+|2; /*将指向 s1串的指针移到 s2子串出现的位置后, 为下一次循环做好准备*/ else /*q 为空,表示剩余的 s1串中已经没有 s2*/ U(5) /U; break; /*终止循环*/ return(s); /*返回指向所形成的新串的指针*/ void main() char *a=“sabcababde“, *b=“ab
18、“, *c=“efg“, *d; d=replace(a, b, c); printf(“result=%s/n“, d); free(d); (分数:15.00)_正确答案:()解析:(1)p+=12 (2)strlen(s1)-i*12+i*13+1 (3)strncpy(r,p,i) (4)strcpy(r,s3) (5)strcpy(r,p) 分析 本题考查用 C语言实现对字符串的操作。 题目要求将字符串 s1中出现的所有子串 s2替换成s3,形成一个新串,但不破坏字符串 s1。要不破坏字符串 s1,只有用一个新串来存放处理结果;要用到新串,那么就需要重新分配空间。 第(1)空在第一个
19、循环体中,此循环体的作用在注释中已经给出,用来统计串 s2在串 s1中出现的次数,这里的统计变量已经给出,并将结果存放在统计变量 i中,但每次统计成功后串 s1的位置应该往后移动串 s2的长度,由程序我们可以看出,串 s1存放在指针变量 p中,因此,指针变量 p指的位置需要往后移动串 s2的长度,而串 s2的长度存放在变量 12中。因此,此空答案为p+=12。 第(2)空很明显是用来给变量 i赋一个值,但根据 s=r=(char*)malloc(i)语句我们可以推断出,当前变量 i中存放的是新串的长度。而新串的长度应该等于串 s1的长度减去串中 x个串 s2的长度,加上x个串 s3的长度再加
20、1,而在上面的循环中已经求出了串 s2在串 s1中出现的次数,结果存放在变量 i中。因此,此空答案为 strlen(sl)-i*12+i*13+1。 第(3)空是在 if(q !=NULL)成立的情况下运行的语句,而变量 q指向的是 s2在 s1中首次出现的位置,如果条件成立,说明串 s2在串 s1中出现了,语句 i=q-p用来表示出现的位置到 s1开始位置的距离。在这些条件都清楚了后,应该往新的串中写字符了,首先写串s1的前 i个字符,此空就是用来完成这个功能的,因此,此空答案为 strncpy(r,p,i)。 第(4)空是接着上一空而来的,在上面我们分析到,把串 s1的前 i个字符写入新串
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 下午 试题 15 答案 解析 DOC
