【计算机类职业资格】初级程序员下午试题-106及答案解析.doc

上传人:hopesteam270 文档编号:1330068 上传时间:2019-10-17 格式:DOC 页数:11 大小:50KB
下载 相关 举报
【计算机类职业资格】初级程序员下午试题-106及答案解析.doc_第1页
第1页 / 共11页
【计算机类职业资格】初级程序员下午试题-106及答案解析.doc_第2页
第2页 / 共11页
【计算机类职业资格】初级程序员下午试题-106及答案解析.doc_第3页
第3页 / 共11页
【计算机类职业资格】初级程序员下午试题-106及答案解析.doc_第4页
第4页 / 共11页
【计算机类职业资格】初级程序员下午试题-106及答案解析.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、初级程序员下午试题-106 及答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)说明一个数如果恰好等于它的因子之和,这个数就是“完数”,如 6=1+2+3,下面流程图完成寻找 1000以内的完数,并将其因子存放在 kn中,最后打印结果。注:流程中循环开始的说明按照“循环变量:循环初值,循环终值,增量”格式描述。问题将流程图的(1)(5)处补充完整。(分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_二、试题二(总题数:1,分数:15.00)说明函数 move(int *a,int n)用于整理数组 a的前 n个元素

2、,使其中小于零的元素移到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。令 a0alow-1小于零(初始为空); alowai-1等于零(初始为空); aiahigh还未考察,当前考察元素为 ai。ahigh+1an-1大于零(初始为空)。函数move (int *a,int n)int i,low, high,t;low=i=0; high=n-1; while( (1) )if(ai0)t=ai;ai=alow;alow=t; (2) ; i+; else if( (3) )t=ai; ai =ahigh; ahigh=t;(4) ;else (5) ; (分数:15.0

3、0)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_三、试题三(总题数:1,分数:15.00)说明函数 perm(int n,char *s)用已知字符串 s中的字符,生成由其中 n个字符组成的所有字符排列。设 n小于字符串 s的字符个数,其中 s中的字符在每个排列中最多出现一次。例如,对于 s=“abc”,n=2,则所有字符排列有:ba,ca,ab,cb,ac,bc。函数#define N 20char wN;perm(int n,char *s)char s1 N; int i; if( (1) )printf(“%s/n“,w); elsestrcpy(s1,s);

4、for (i=0; (2) ; i+)(3) ; (4) ; *s1=* (w+n-1); (5) ; (分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_四、试题四(总题数:1,分数:15.00)说明函数 ELEM*proc(FILE*fp)从文件 fp中逐个读入职工的工号及其完成的产品数量,对相同工号的产品数量计入该职工完成的产品总数,并且按照产品总数降序排列,若多个职工完成的产品总数相同,则按工号升序排列。在函数中建立了一个有序链表,来存储每个职工的工号和完成产品总数等数据,其结点类型为:typedef struct ELEint no; /*职工工

5、号*/int num; /*完成的产品总数*/struct ELE *next; ELEM;函数ELEM *proc (FILE *fp)int m,n;ELEM *u, *v, *p, *base;base=NULL; /*bese是链表的首指针*/while(fscanf(fp,“%d%d“, n, m) =2)/*链表中是否存在工号为 n的结点*/for (v=base; v!=NULL v-no! =n; (1) );if(v!=NULL) /*若链表中已有工号为 n的结点 v,则将其从链表中脱钩*/if( (2) ) base=v-next; else u-next=v-next;v

6、-num+=m; /*累加工号为 n的职工完成的产品数量*/else /*创建一个工号为 n的结点*/v=(ELEM *)malloc(sizeof(ELEM);V-no=n:V-num=m;/*寻找结点 v的插入位置*/p=base;while(p!=NULL)if (v-nump-num | v-num=p-num (3) ) break;elseu=p; p=p-next; /*将结点 v插入链表*/if(p=base) (4) ; else u-next=v;(5) ; return base;(分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_五

7、、试题五(总题数:1,分数:15.00)说明下面程序实现十进制向其他进制的转换。C+程序#include “iostream.h“#include “math.h“#include conio.htypedef struct nodeint data;node *next;Node; class Transformpublic :void Trans (int d,int i) ; /d为数字;i 为进制void print () ;private :Node *top;void Transform:Trans(int d,int i)int m,n=0;Node *p;while (d0)(

8、1) ;d=d/i;p=new Node;if(!n)p-data=m;(2) ;(3) ;n+;elsep-data=m;(4) ;(5) ;void Transform: :print ()Node *p;while (top ! =NULL)p=top;if (p-data9)coutdata+55 ;elsecoutdata;top=p-next ;delete p;(分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_六、试题六(总题数:1,分数:15.00)1.已知类 Stock和类 JavaMain都定义在 JavaMain.java文件中,类

9、 Stock的定义中有四处错误,分别在代码的第 01、02、06、07 行。请修改错误并给出修改后该行的完整代码,并写出改正错误后程序运行的输出结果。(分数:15.00)填空项 1:_初级程序员下午试题-106 答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)说明一个数如果恰好等于它的因子之和,这个数就是“完数”,如 6=1+2+3,下面流程图完成寻找 1000以内的完数,并将其因子存放在 kn中,最后打印结果。注:流程中循环开始的说明按照“循环变量:循环初值,循环终值,增量”格式描述。问题将流程图的(1)(5)处补充完整。(分数:15.00)填空项

10、 1:_ (正确答案:1,j-1,1;)解析:填空项 1:_ (正确答案:jmodi=0;)解析:填空项 1:_ (正确答案:s=s-i;)解析:填空项 1:_ (正确答案:kn=i;)解析:填空项 1:_ (正确答案:s=0.)解析:解析 本题目考查流程图。按题目要求,要求 1000以内的完数,除去 1,可以从 2开始循环,终值为 1000。先将 j保护起来,将其赋给 s。然后,开始内循环,i 从 1开始试商,直到 j-1为止,增量为 1,若 s可以被 i除尽,说明 i是s的一个因子,将 n增加 1,把 i存入数组 kn中,并把 s减去 i,继续试商。所以空(1)应填入 1,j-1,1,空(

11、2)填入 jmodi=0,空(3)填入 s=s-i,空(4)填入 kn=i。最后,当 i增加到 j-1,即最后一轮试商也结束后,判断 s是否等于 0,如果等于 0,说明 s可以通过把它的因子的和相加得到,即 s是完数,则打印此完数; 如果 s不为 0,则 j增加 1,开始对新一个数进行判断。二、试题二(总题数:1,分数:15.00)说明函数 move(int *a,int n)用于整理数组 a的前 n个元素,使其中小于零的元素移到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。令 a0alow-1小于零(初始为空); alowai-1等于零(初始为空); aiahigh还未考

12、察,当前考察元素为 ai。ahigh+1an-1大于零(初始为空)。函数move (int *a,int n)int i,low, high,t;low=i=0; high=n-1; while( (1) )if(ai0)t=ai;ai=alow;alow=t; (2) ; i+; else if( (3) )t=ai; ai =ahigh; ahigh=t;(4) ;else (5) ; (分数:15.00)填空项 1:_ (正确答案:i=high)解析:填空项 1:_ (正确答案:low+)解析:填空项 1:_ (正确答案:ai0)解析:填空项 1:_ (正确答案:high-)解析:填空项

13、 1:_ (正确答案:i+)解析:解析 程序的说明已经将程序的功能和相关变量解释得很清楚了,这里就不再重复了。由变量i、变量 low和变量 high的含义和初值可以判断,i 至 high之间的元素还未处理,因此 while循环条件是“i=high”或其等价形式,这就是空(1)所填写的内容。空(2)所在语句块是处理当 ai0 的情况,显然这时需要将 ai与 alow进行交换,交换后需要将 i和 low都要向后移动,因此空(2)处应填写“low+”或其等价形式。空(3)需要填写执行空(4)所在语句块的条件,由空(4)所在语句块可以判断,它是处理当 ai0 的情况,因此空(3)处应填写“ai0”或其

14、等价形式。当 ai0 时,需要将 ai与 ahigh进行交换,交换后需要将 high向前移动,因此空(4)处应填写“high-”或其等价形式。注意这时 i不能向后移动,因为交换后的 ai还没有处理,需要在循环的下一趟进行处理。空(5)所在语句是处理当 ai=0情况,当 ai=0时,不需要进行元素交换,只需将 i向后移动就可以了,因此空(5)处应填写“i+”或其等价形式。三、试题三(总题数:1,分数:15.00)说明函数 perm(int n,char *s)用已知字符串 s中的字符,生成由其中 n个字符组成的所有字符排列。设 n小于字符串 s的字符个数,其中 s中的字符在每个排列中最多出现一次

15、。例如,对于 s=“abc”,n=2,则所有字符排列有:ba,ca,ab,cb,ac,bc。函数#define N 20char wN;perm(int n,char *s)char s1 N; int i; if( (1) )printf(“%s/n“,w); elsestrcpy(s1,s);for (i=0; (2) ; i+)(3) ; (4) ; *s1=* (w+n-1); (5) ; (分数:15.00)填空项 1:_ (正确答案:n1)解析:填空项 1:_ (正确答案:*(s1+i))解析:填空项 1:_ (正确答案:*(w+n-1)=*(s1+i))解析:填空项 1:_ (正

16、确答案:*(s1+i)=*s1)解析:填空项 1:_ (正确答案:perm(n-1,s1+1))解析:解析 本题可采用递归方法来生成用字符串 s中的字符生成由 n个字符组成的字符排列。设程序用字符数组 w存储生成的字符排列。令递归函数为 perm(int n,char*s),其功能是用字符串生成由 n个字符组成的所有排列。其方法是从字符串 s依次选用其中的每个字符填写到字符排列的第 n个位置(wn-1)中,所以空(2)、(3)应分别填入*(s1+i)和*(w+n-_1)=*(s1+i),然后通过递归调用生成由 n-1个字符组成的排列,所以空(5)填入 perm(n-1,s1+1)。当一个字符被

17、选用后,进一步递归调用时可选用的字符中应不再包含该字符,所以空(4)应填入*(s1+i)=*s1。另外,当发现一个字符排列生成后,就不再递归调用,而是输出生成的字符列,所以空(1)填入 n1。四、试题四(总题数:1,分数:15.00)说明函数 ELEM*proc(FILE*fp)从文件 fp中逐个读入职工的工号及其完成的产品数量,对相同工号的产品数量计入该职工完成的产品总数,并且按照产品总数降序排列,若多个职工完成的产品总数相同,则按工号升序排列。在函数中建立了一个有序链表,来存储每个职工的工号和完成产品总数等数据,其结点类型为:typedef struct ELEint no; /*职工工号

18、*/int num; /*完成的产品总数*/struct ELE *next; ELEM;函数ELEM *proc (FILE *fp)int m,n;ELEM *u, *v, *p, *base;base=NULL; /*bese是链表的首指针*/while(fscanf(fp,“%d%d“, n, m) =2)/*链表中是否存在工号为 n的结点*/for (v=base; v!=NULL v-no! =n; (1) );if(v!=NULL) /*若链表中已有工号为 n的结点 v,则将其从链表中脱钩*/if( (2) ) base=v-next; else u-next=v-next;v-

19、num+=m; /*累加工号为 n的职工完成的产品数量*/else /*创建一个工号为 n的结点*/v=(ELEM *)malloc(sizeof(ELEM);V-no=n:V-num=m;/*寻找结点 v的插入位置*/p=base;while(p!=NULL)if (v-nump-num | v-num=p-num (3) ) break;elseu=p; p=p-next; /*将结点 v插入链表*/if(p=base) (4) ; else u-next=v;(5) ; return base;(分数:15.00)填空项 1:_ (正确答案:u=v,v=v-next 或 u=v,v=u-

20、next)解析:填空项 1:_ (正确答案:v=base 或 base-no=n)解析:填空项 1:_ (正确答案:v-nop-no 或 v-no=p-no)解析:填空项 1:_ (正确答案:base=v)解析:填空项 1:_ (正确答案:v-next=p)解析:解析 函数的思路:首先打开文件,然后每次从文件中读出一个职工的工号和产品的数量; 在相应的 base链表中查找该工号,若查找到,则从链表中删除相应的结点并修改结点的数量值,否则生成一个新的结点并赋工号和数量; 将该结点插入到以 base为首地址的链表中。空(1)为查找工号 n,且让 u为找到的结点前驱,故空(1)填 u=v,v=v-n

21、ext 或 u=v,v=u-next。空(2)表示当要查找的工号在首结点中,即 base结点中,则修改 base结点的指针,空(2)填 v=base或 base-no=n。将生成的结点 v插入到以 base为首地址的链表时,依据产品总数降序排列,若多个职工完成的产品总数相同,则按工号升序排列的原则。可见,空(3)表示在数量相同的情况下,比较工号的大小,故空(3)填 v-nop-no 或 v-no=p-no。若插入的位置在首结点之前,则让 base指向 v结点,因此空(4)填 base=v,空(5)填 v-next=p,即插入结点的后继为 p。五、试题五(总题数:1,分数:15.00)说明下面程

22、序实现十进制向其他进制的转换。C+程序#include “iostream.h“#include “math.h“#include conio.htypedef struct nodeint data;node *next;Node; class Transformpublic :void Trans (int d,int i) ; /d为数字;i 为进制void print () ;private :Node *top;void Transform:Trans(int d,int i)int m,n=0;Node *p;while (d0)(1) ;d=d/i;p=new Node;if(!

23、n)p-data=m;(2) ;(3) ;n+;elsep-data=m;(4) ;(5) ;void Transform: :print ()Node *p;while (top ! =NULL)p=top;if (p-data9)coutdata+55 ;elsecoutdata;top=p-next ;delete p;(分数:15.00)填空项 1:_ (正确答案:m=d%i)解析:填空项 1:_ (正确答案:top=p)解析:填空项 1:_ (正确答案:top-next=NULL)解析:填空项 1:_ (正确答案:p-next=top)解析:填空项 1:_ (正确答案:top=p)解

24、析:解析 本题考查 C+编程,主要考查了链表的使用。所有的问题只出在函数 Trans中,它的功能是完成将十进制数 d转换为任意进制 i的数,并存在数组中。函数中首先定义了一个指向链表节点的指针,然后开始进行转换,进制转换应该是一个很常见的问题,就是不断的求模运算,所以空(1)处应填入 m=d%i。然后,我们要把求模的结果保存到链表节点中,并使链表首指针指向该节点,节点中指向的指针设为空,所以空(2)处应填入 top=p,空(3)处应填入 top-next=NULL。由于求模运算是从低位到高位逐位求出的,所以在进行完第二次求模运算后,应该将第二次运算的结果放到链表首位,所以空(4)处应填入 p-

25、next=top,空(5)处应填入 top=p。六、试题六(总题数:1,分数:15.00)1.已知类 Stock和类 JavaMain都定义在 JavaMain.java文件中,类 Stock的定义中有四处错误,分别在代码的第 01、02、06、07 行。请修改错误并给出修改后该行的完整代码,并写出改正错误后程序运行的输出结果。(分数:15.00)填空项 1:_ (正确答案:01 代码行修改结果:class Stock02代码行修改结果:06代码行修改结果:public Stock()getData();07代码行修改结果:public Stock(int n,double pr)程序运行的输

26、出结果为: 0:0.0 1:67.5)解析:解析 程序第 01行和第 19行都定义了 public类,而这两个类定义在同一文件中,这样在 Java中是不允许的,每个文件中只能有一个 public类(若有 main函数,一般是 main函数所在的类),故应去掉 Stock前的 public关键字。程序第 02行用静态初始化块初始化,而块中的 shares和 share val都是非静态变量,故应把 static关键字去掉。程序 21、22 行均使用了类 Stock的构造函数,所以程序第 06行,第 07行的构造函数不能定义为 private。仔细检查一下程序,不难得出程序运行后输出结果为:0:0.0 1:67.5。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1