【计算机类职业资格】初级程序员下午试题-23及答案解析.doc
《【计算机类职业资格】初级程序员下午试题-23及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员下午试题-23及答案解析.doc(17页珍藏版)》请在麦多课文档分享上搜索。
1、初级程序员下午试题-23 及答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.【说明】已知头指针分别为 La和 lb的有序单链表,其数据元素都是按值非递减排列。现要归并 La和 Lb得到单链表 Lc,使得 Lc中的元素按值非递减排列。程序流程图如下所示:(分数:15.00)_二、试题二(总题数:1,分数:15.00)2.【程序 2.1说明】已知一个排好序的数组,现输入一个数,要求按原来的顺序规律,将它插入到数组中。【程序 2.1】#include stdioh#define N 100void main()float aN+l,x;int i,p;
2、printf(“输入已经排好序的数列: “);for(i=0; iN; i+)scanf(%f“,printf(“输入要插入的数:“);scanf(“%f“,for(i=0,p=N; iN; i+)if(xai)(1) break;for(i=N-1; i=p; i-)(2) (3) for(i=0; i=N; i+)prinff(“%f/t“,ai);【程序 2.2说明】本程序用变量 count统计文件中字符的个数。【程序 2.2】#include stdio.h#include stdlib.hvoid main()FILE *fp;long count=0;if(fp=fopen(“le
3、tter.txt“,“r“)=NULL)printf(“can not open file/n“);exit(0);while(!feof(fp)(4) count+;printf(“count=%d/n“,count);(5) (分数:15.00)_三、试题三(总题数:1,分数:15.00)3.【说明】Fibonacci数列 A=1,1,2,2,5,8,)有如下性质:a0=a1=1ai=ai-1+ai-2,i1对于给定的 n,另外有一个由 n个元素组成的数列 xn,该数列中各元素的值为:xi=ai/ai+1,i=0,1,n现要求对 xn中的元素按升序进行排序,然后以分数形式输出排序后的 xn
4、。例如 n=5时,排序前的xn=1/1,1/2,2/3,3/5,5/8,排序后的 xn=1/2,3/5,5/8,2/3,1/1。程序中函数 make()首先生成排序前的xn,然后调用函数 sort()进行排序,最后输出所求结果。【程序】#include stdio.h#include stdlib.h#include malloc.hstruct factlong m,n;void sort(int n,struct fact *p)int a;long s,t,u,v;struct fact *q,*end;for(end=p+(n-1),a=1;a;end-)for(a=0,q=p;qen
5、d;p+)s=q-m;t=q-n;u=(q+1)-m;v=(q+1)-n;if( (1) )q-m=u;(2) (3) (q+1)-n=t;a=1;void make(int n)int i;long a,b,c;struct fact *x,*y;x=(struct fact *)malloc(sizeof(struct fact)*n);x-m=1:x-n=1;for(a=1,b=1,i=2;i=n;i+)(4) a=b;b=c;(x+(i-1)-m=a;(x+(i-1)-n=b;(5) printf(“x%d=%1d/%1d“,n,x-m,x-n);for(y=x+1;yx+n;y+)p
6、rintf(“,%1d/%1d“,y-m,y-n);printf(“/n“);free(x);void main()int n;printf(“input n:“);scanf(“%d“,make(n);(分数:15.00)_四、试题四(总题数:1,分数:15.00)4.【说明】本程序对某电码文(原文)进行加密形成密码文,其加密算法如下:假定原文为 C1,C2,C3,,C n加密后形成的密文为 S1,S2,S3,,S n,首先读入正整数 key(key1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如下图所示:(分数:15.00)_五、试题五(总题数:1,分数:15.00)5.【说明
7、】字符串在程序设计中扮演着重要角色。现需要设计字符串基类 string,包含设置字 符串、返回字符串长度及内容等功能。另有一个具有编辑功能的串类 edlt_string,派生于 string,在其中设置一个光标,使其能支持在光标处的插入、删除操作。【程序】#include iostream.h#include stdio.h#include string.hclass stringint length;char *data;public:int get_length() return length;char *get_data() return data;string() delete dat
8、a;int set data(int in_length, char *in_data);int set_data(char *data);void print() coutdataendl;class edit_string: public stringint cursor;public:int get_cursor() return cursor;void move_cursor(int dis) cursor=dis;int add_data(string *new_data);void delete_data(int num);int string:set_data(int in_le
9、ngth,char *in_data)length=in_length;if(!data)delete data;(1) strcpy(data,in_data);return length;int string:set data(char *in_data)(2) if(!data)delete data;(1) strcpy(data,in_data);return length;int edit_string:add_data(string *new_data)int n,k,m;char *cp,*pt;n=new_data-get_length();pt=new_data-get_d
10、ata();cp=this-get_data();m=this-get_length();char *news=new charn+m+1;for(int i=0; icursor; i+)newsi=cpi;k=i;for(int j=0; jn; i+,j+)newsi=ptj;cursor=i;for(j=k; jm; j+,i+)(3) newsi=/0;(4) delete news;return cursor;void edit string:delete_data( int num)int m;char *cp;cp=this-get_data();m=this-get_leng
11、th();for(int i=cursor; im; i+)(5) cpi=/0;(分数:15.00)_六、试题六(总题数:1,分数:15.00)6.【说明】IC卡和 200卡都是从电话卡派生的。下面的程序将电话卡定义为抽象类。其中 balance 为双精度变量,代表电话卡中的余额;cardNumber 是长整型变量,代表电话卡的卡号;password 是整型变量,代表电话卡的密码;connectNumber 是字符串变量,代表电话卡的接入号码;connected 是布尔变量,代表电话是否接通。performDial()实现各种电话接通后的扣除费用的操作。其中 200卡每次通话扣除 0.5元的
12、通话费用和附加费用;IC 卡每次通话扣除 0.9元的通话费。TimeLeft()方法用于测试电话卡余额还可以拨打电话的次数。performConnection()用于电话接入操作,如果卡号和密码正确,则接通;否则,接不通。【程序】abstract class PhoneCarddoubte balace;(1) perfermDial();double getBalance()return balance; double TimeLeft()double current=balance;int times=0;do(2) times+;white(balance=0);balance=curr
13、ent;return times-1;abstract class Number_PhoneCard extends PhoneCardlong cardNumber:int password;String connectNumber;Boolean connected;Boolean performConnection(long cn, int pw)if(cn=cardNumber return true;else return false;class IC Card (4) boolean performDial()if(balance0.9)balance-=0.9;return tr
14、ue;else return false;class D200_Card (4) static double additoryFee;static additoryFee=0.1; boolean performDial()if(balance(0,5+additeryFee)(5) return true;else return false;(分数:15.00)_初级程序员下午试题-23 答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.【说明】已知头指针分别为 La和 lb的有序单链表,其数据元素都是按值非递减排列。现要归并 La和 Lb得到单
15、链表 Lc,使得 Lc中的元素按值非递减排列。程序流程图如下所示:(分数:15.00)_正确答案:(1)pa-data=pb-data (2)pc-next=pa (3)pc=pb(4)pb=pb-next (5)pc-next=pa?pa:pb)解析:分析本题考查程序流程图和有序链表的归并。题目要求我们归并头指针分别为 La和 Lb的有序单链表,组成一个新的有序单链表 Lc,而 Lc又是指向La的。首先,我们来了解一下单链表的结构。单链表中一般有两个域,一个是数据域,用来存放链表中的数据;另一个是指针域,用来存放指向下个结点的指针。其归并的过程应该是先比较链表 La和 Lb中第一个元素,将较
16、小的从其链表中取出放到 k中,再取下一个结点的值去比较,重复这个过程,直到一个链表被全部取完,再将另一个链表剩下的部分连接到 Lc后面即可。下面,我们来看程序流程图的内容。首先是用两个指针变量 pa和 pb分别指向 La和 Lb的当前待比较插入的结点,而 pc指向 Lc表中当前最后一个结点。再下面是一个条件判断语句,其作用是判断链表 La和 Lb是否为空,如果有一个为空,只要将另一个链表剩下的部分连接到 Lc后面,程序应该就可以结束了。第(1)空是条件判断语句的条件,根据我们上面的分析,再结合流程图下面的内容,我们可以知道,这个条件语句的作用是比较当前待插入的两个值的大小,而指针变量 pa和
17、pb分别指向 La和 Lb的当前待比较插入的结点,因此,此空的答案为 pa-data=pb-data。第(2)空是在条件为真的情况下执行的语句,如果条件判断为真,应该将 pa所指结点连接到 pc所指结点后面,因此,pc 所指结点的指针域应该存放 pa所指结点的地址。所以,此空的答案为 pc-next=pa。第(3)空和第(4)空都是在条件为假的情况下执行的语句,如果条件为假,说明 pb 所指结点的值小于 pa所指结点的值,应该将 pb所指结点连接到 pc所指结点后面,图中已经实现这一功能,要我们完成的是在插入后的后继工作。由于 pc指向的是 Lc表中当前最后一个结点,在插入一个结点后,要修改
18、pc的值。在将 pb所指结点插入后,链表中的最后一个结点就是 pb所指结点,第(3)空的答案应该为 pc=pb。执行完这些功能后,指针 pb应该要往后移动,即指向下一个结点,第(4)用来完成这个功能,所以答案为pb=pb-next。在前面,我们已经讲到如果链表 La和 Lb有一个为空,只要将另一个链表剩下的部分连接到 Lc后面即可。第(5)空就是用来完成这个功能的,但我们不知道具体是哪个链表为空,还需要判断,因此,此空答案为pc-next=pa?pa:pb。二、试题二(总题数:1,分数:15.00)2.【程序 2.1说明】已知一个排好序的数组,现输入一个数,要求按原来的顺序规律,将它插入到数组
19、中。【程序 2.1】#include stdioh#define N 100void main()float aN+l,x;int i,p;printf(“输入已经排好序的数列: “);for(i=0; iN; i+)scanf(%f“,printf(“输入要插入的数:“);scanf(“%f“,for(i=0,p=N; iN; i+)if(xai)(1) break;for(i=N-1; i=p; i-)(2) (3) for(i=0; i=N; i+)prinff(“%f/t“,ai);【程序 2.2说明】本程序用变量 count统计文件中字符的个数。【程序 2.2】#include st
20、dio.h#include stdlib.hvoid main()FILE *fp;long count=0;if(fp=fopen(“letter.txt“,“r“)=NULL)printf(“can not open file/n“);exit(0);while(!feof(fp)(4) count+;printf(“count=%d/n“,count);(5) (分数:15.00)_正确答案:(1)p=i (2)ai+1=ai; (3)ap=x;(4)fgetc(fp); (5)fclose(fp);)解析:分析本题考查在 C语言中实现对数组的插入和对文件中字符个数的统计。我们先来看程序
21、 2.1。题目要求在程序 2.1中实现在排好序的数组中插入一个数,但不能改变数组中数字排序的规律。由于数组是已经排好序的,它有可能是按不递减的方法排序,也有可能是按不递增的方法排序。在插入时,从数组中第一个数开始,逐个进行比较,直到找到比其大或相等的数,在其前面进行插入,在插入前应该先将数组中的元素逐个后移。下面我们来看代码。代码中有三个循环,第(1)空在第一个循环体下面的条件判断语句里,条件判断语句是判断要插入的数 J与数组中元素的大小,如果数 x小于数组中的元素,就执行第(1)空的语句。从上面的分析,再结合第二个循环语句的条件,我们可以知道,此空的作用是记录数要插入的位置,并把这个结果存放
22、在变量 p中,所以,答案为 p=i。第(2)空所在的位置是第二个循环体下面,根据分析,要完成的任务应该是将数组中要插入位置后的元素逐个往后移动。所以,此空的答案为 ai+1=ai。在完成了上述两空之后,再结合整个程序来看,很明显还有一个功能没有完成,那就是插入数 x,第(3)空就是用于完成这个任务的。由于在代码的前面已经记录下了要插入的位置,所以,此空答案为 ap=x。在程序 2.2中,题目要求完成的任务是用变量 count统计文件中字符的个数,要实现对文件中字符个数的统计,首先需要我们判断出哪些是字符,这就涉及 C语言中对文件中字符的判定。此外,还需要我们掌握对文件的基本操作。下面,我们来看
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 下午 试题 23 答案 解析 DOC
