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