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