1、初级程序员下午试题-85 及答案解析(总分:120.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.说明下面的流程图用于统计一个英文句子中单词的个数 N。假设该英文句子中只含字母、空格和句点“.”,其中句点表示结尾,空格之间连续的字母串称为单词。流程图(分数:15.00)_二、试题二(总题数:1,分数:15.00)2.函数 2.1说明函数 void find(int *a, int n, int * max, int * min)的功能是在长度为 n的整型数组 a中,查找最大元素和最小元素的下标。main()中给出了调用 find函数的一个实例。函数 2.1#incl
2、udestdio.hvoid find(int *a, int n,int *max,int * min)int i;*max =* min=0;for(i=1;in;i+ +)if(aia* max) (1) ;else if(aia*min) (2) ;return;main()int a=4,6,8,9,0,6,max,min;find(a,6, (3) );printf(“%5d%5d/n“, max,min);函数 2.2说明以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串前端的公共部分。例如:输入的两个字符串分别是 abcdefg和 abceef,则输出为 abc
3、。函数 2.2#include stdio.hmain()char str1100,str2100,str100,c;int i=0,s;printf(“/nInput string 1:“);gets(str1);printf(“/nInput string 2:“);gets(str2);while( (4) )i+;printf(“%s/n“,str);(分数:15.00)_三、试题三(总题数:1,分数:15.00)3.说明二叉树的二叉链表存储结构描述如下:typedef struct BiTNodedatatype data;struct BiTNode *lchild, * rchi
4、ld; /*左右孩子指针*/BiTNode,* BiTree;对二叉树进行层次遍历时,可设置一个队列结构,遍历从二叉树的根结点开始,首先将根结点指针入队列,然后从队首取出一个元素,执行下面两个操作:(1) 访问该元素所指结点;(2) 若该元素所指结点的左、右孩子结点非空,则将该元素所指结点的左孩子指针和右孩子指针顺序入队。此过程不断进行,当队列为空时,二叉树的层次遍历结束。下面的函数实现了这一遍历算法,其中 Visit(datatype a)函数实现了对结点数据域的访问,数组queueMAXNODE用以实现队列的功能,变量 front和 rear分别表示当前队首元素和队尾元素在数组中的位置。函
5、数void LevelOrder(BiTree bt) /*层次遍历二叉树 bt*/BiTree QueueMAXNODE;int front,rear;if(bt= =NULL)return;front=-1;rear=0;queuerear= (1) ;while(front (2) )(3) ;Visit(queuefront-data); /*访问队首结点的数据域*/if(queuefrontlchild!:NULL)rear+;queuerear= (4) ;if(queuefront-rchild! =NULL)rear+;queuerear= (5) ;(分数:15.00)_四、
6、试题四(总题数:1,分数:15.00)4.说明本程序在 33方格中填入 1到 10以内 9个互不相等的整数,使所有相邻两个方格内的两个整数之和为质数。程序的输出是全部满足条件的方格。方格的序号如下图所示。程序采用试探法,从序号为 0的方格开始,依次为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数;如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的填入整数;当序号为 8的方格也填入合理的整数后,就找到了一个解。(分数:15.00)_五、试题五(总题数:1,分数:15.00)5.说明某单位组织一次职业技术考核比赛,由十名评委对选手的现
7、场表现打分(0 到 100以内的数值)。本程序接收原始评分后,去掉一个最高分、一个最低分,最后计算并输出选手最后得分。在接收输入第 i个评分时,若输入数据的类型、范围不正确,程序将给出相应提示,并等待下一次输入,直至正确接收第 i个评分为止。程序的运行界面如下:(分数:15.00)_六、试题六(总题数:1,分数:15.00)6.说明本程序使用类来管理员工的通讯地址信息。已知程序的输出为:输出记录:5姓名:王丽华街道地址:中华路 15号市:襄樊市省:湖北省邮政编码:430070Java代码public class Employeeprotected String (1) ;protected S
8、tring street;protected String city;protected String prov;protected String post;protected int no;public Empbyee()public Employee(String name,String street,String city,String prov,String post, (2) )this.name=name;this.street=street;this.city=city;this.prov=prov;this.post=post;this.no=no;public static
9、void main(Stringargs)Employee emp=new Employee(“王华”,“中华路 15号”,“武汉市”,“湖北省”,“430070”,1);emp.changeName(“王丽华”);(3) (“襄樊市”);emp.changeNo(5);(4) ;void changeName(String name)this.name=name;void changeStreet(String street)this.street=street;void changeCity(String city)this.city=city;void changeProv(String
10、 prov)this.prov=prov;void changeNo(int no) (5) ;void display()System.out.println(“输出记录:”+this.no);System.out.Println(“姓名:”+this.name);System.out.println(“街道地址:”+this.street);System.out.println(“市:”+this.city);System.out.println(“省:”+this.prov);System.out.println(“邮政编码:”+this.post);(分数:15.00)_七、试题七(总
11、题数:1,分数:15.00)7.说明某公司的服务器上为每位员工提供了一定大小的存储空间,用于数据的备份。下面的程序面向公司员工,提供了本地计算机与服务器端之间文件传输的功能。主要操作介绍如下:(1)连接服务器:员工需要输入用户名和口令才能连接到服务器端,checkUser 函数用于检查用户名和口令是否合法,返回真假值。(2)上传文件:从本地计算机上传文件到服务器。员工可以在本地文件列表中选择一个或多个文件,这些文件通过上传操作被复制到服务器端指定的某个文件夹中;(3)下载文件:从服务器端下载文件到本地。(分数:15.00)_八、试题八(总题数:1,分数:15.00)8.说明以下程序的功能是统计
12、学生成绩,包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前百分之七十的学生定为合格(PASS),而后百分之三十的学生定为不合格(FAIL)。例如,当输入 4名学生的姓名和成绩“Alice 67 Mary 90 Tom 56 John 88”后,程序的执行结果如下:姓名 成绩 合格否Mary 90 PASSJohn 88 PASSAlice 67 FAILTom 56 FAILC+程序#include stdio.h#include string.h#define N 10class studentprotected:char name10;int deg;public:void se
13、tname(charna) strcpy(name,na);char * getname() return name;void setdeg(int d) deg= d;int getdeg()return deg;class computeint ns;student naN;public:void getdata();void sort();void disp();void compute:getdata()int i,tdeg;char tname10;printf(“输入学生人数:“);scanf(“%d“,printf(“输入学生姓名和成绩:/n“);for(i=0;ins;i+ +
14、)scanf(“%s%d“,tname,(1) ;nai.setdeg(tdeg);void compute:sort()int i,j,pick;(2) ;for(i=0;ins-1;i+ +)pick=i;for(j=i+1;jns;j+ +)if(naj.getdeg()napick.getdeg() (3) ;temp=nai;nai=napick;napick=temp;void compute:disp()int cutoff,i;printf(“RESULT/n“);printf(“姓名 成绩 合格否/n“);cutoff=ns*7/10-1;for(i=0;ins;i+ +)
15、printf(“%-6s%3d“, (4) );if( (5) ) printf(“/tPASS/n“);else printf(“/tFAIL/n“);void main()compute obj;obj.getdata();obj.sort();obj.disp();(分数:15.00)_初级程序员下午试题-85 答案解析(总分:120.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.说明下面的流程图用于统计一个英文句子中单词的个数 N。假设该英文句子中只含字母、空格和句点“.”,其中句点表示结尾,空格之间连续的字母串称为单词。流程图(分数:15.00)_正确答案
16、:(1) N0 (2) N+1 (3) 是 (4) 否 (5) =)解析:考点分析 考查算法的流程图表示。解析 本题用到的两个变量及其作用分别为:A,存放输入的一个字符;N 存放当前读取的单词个数。(1)使用变量 N应先赋予初值,由上下文知其初值为 0;(2)读取单词的首字母后,单词个数 N应增 1;(3)读取单词的首字母后,循环读入单词的后继字母,直到遇到下一个非字母字符(空格或句点)为止;(4)略;(5)读到句点表明句子结束,这时输出结果并结束算法。二、试题二(总题数:1,分数:15.00)2.函数 2.1说明函数 void find(int *a, int n, int * max, i
17、nt * min)的功能是在长度为 n的整型数组 a中,查找最大元素和最小元素的下标。main()中给出了调用 find函数的一个实例。函数 2.1#includestdio.hvoid find(int *a, int n,int *max,int * min)int i;*max =* min=0;for(i=1;in;i+ +)if(aia* max) (1) ;else if(aia*min) (2) ;return;main()int a=4,6,8,9,0,6,max,min;find(a,6, (3) );printf(“%5d%5d/n“, max,min);函数 2.2说明以
18、下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串前端的公共部分。例如:输入的两个字符串分别是 abcdefg和 abceef,则输出为 abc。函数 2.2#include stdio.hmain()char str1100,str2100,str100,c;int i=0,s;printf(“/nInput string 1:“);gets(str1);printf(“/nInput string 2:“);gets(str2);while( (4) )i+;printf(“%s/n“,str);(分数:15.00)_正确答案:(1) * max=i (2) * min=i
19、(3) struct BiTNode *lchild, * rchild; /*左右孩子指针*/BiTNode,* BiTree;对二叉树进行层次遍历时,可设置一个队列结构,遍历从二叉树的根结点开始,首先将根结点指针入队列,然后从队首取出一个元素,执行下面两个操作:(1) 访问该元素所指结点;(2) 若该元素所指结点的左、右孩子结点非空,则将该元素所指结点的左孩子指针和右孩子指针顺序入队。此过程不断进行,当队列为空时,二叉树的层次遍历结束。下面的函数实现了这一遍历算法,其中 Visit(datatype a)函数实现了对结点数据域的访问,数组queueMAXNODE用以实现队列的功能,变量 f
20、ront和 rear分别表示当前队首元素和队尾元素在数组中的位置。函数void LevelOrder(BiTree bt) /*层次遍历二叉树 bt*/BiTree QueueMAXNODE;int front,rear;if(bt= =NULL)return;front=-1;rear=0;queuerear= (1) ;while(front (2) )(3) ;Visit(queuefront-data); /*访问队首结点的数据域*/if(queuefrontlchild!:NULL)rear+;queuerear= (4) ;if(queuefront-rchild! =NULL)r
21、ear+;queuerear= (5) ;(分数:15.00)_正确答案:(1) bt (2) ! =rear (3) front+ + (4) queue front-lchild(5) queuefront-rchild)解析:考点分析 考查用 C语言实现二叉树的层次遍历。解析 (1)遍历开始时队列长度为 1,其中只存放了根结点 bt;(2)遍历过程是一个循环访问队列的过程,其终止条件是队列为空,即 front等于 rear;(3)遍历到某结点时,该结点应退出队列,因此队首元素的位置应该增 1;(4)此处应将队首结点的左孩子结点放入队列,即插在队尾;(5)此处应将队首结点的右孩子结点放入队
22、列,即插在队尾。四、试题四(总题数:1,分数:15.00)4.说明本程序在 33方格中填入 1到 10以内 9个互不相等的整数,使所有相邻两个方格内的两个整数之和为质数。程序的输出是全部满足条件的方格。方格的序号如下图所示。程序采用试探法,从序号为 0的方格开始,依次为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数;如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的填入整数;当序号为 8的方格也填入合理的整数后,就找到了一个解。(分数:15.00)_正确答案:(1) checkMatrixposi (2) apos+aj (3)
23、a+pos (4) bapos=1(5) pos= =8或 pos=8 或 pos7)解析:考点分析 考查 C语言程序设计,主要是试探和回溯算法。解析 程序中主要变量及其作用说明如下:pos 用于标记当前要填数的方格序号;数组元素 ai表示第i个方格所填的内容;数组元素 bj标记整数 j是否被使用 (初始化时设为 1,表示没有使用);一维数组 checkMatrixi记录了填写第 i个方格需要检查的方格序号,例如 checkMatrix4=1,3,-1,其中-1用作结束标记。(1)此循环遍历一维数组 checkMatrixpos,取出第 i个数 checkMatrixposi赋给 j,直至-1
24、;(2)j是 checkMatrixpos中不等于-1 的值,即表示需要检查当前方格(第 pos个)与第 j个的和是否是素数;(3)这条语句应包含 pos增 1以及 apos=selectNum (1)前后两个操作,因此需用+pos;(4)若能为当前方格找到下一个未被使用的数,则应先释放当前格中的数,再填入新数;(5)这条语句包含输出方格操作,因此判断的条件是全部方格被填满,即 pos值已增至 8。五、试题五(总题数:1,分数:15.00)5.说明某单位组织一次职业技术考核比赛,由十名评委对选手的现场表现打分(0 到 100以内的数值)。本程序接收原始评分后,去掉一个最高分、一个最低分,最后计
25、算并输出选手最后得分。在接收输入第 i个评分时,若输入数据的类型、范围不正确,程序将给出相应提示,并等待下一次输入,直至正确接收第 i个评分为止。程序的运行界面如下:(分数:15.00)_正确答案:(1) Not (2) marks(1)或 marks(i) (3) minMark=marks(i) (4) sumMark-maxMark-minMark(5) Text1)解析:考点分析 考查 VB语言程序设计,主要是控件的使用。解析 (1)程序在输入数据 temp不是数值(即 IsNumeric (temp)返回 False值)时报告错误,因而此处应填写逻辑运算符:取非;(2)由程序最后的输
26、出可推断:maxMark 和 minMark分别用于记录最高分和最低分。它们通过 For循环求得,此处需要为其赋初值;(3)当第 i个评分 marks(i)小于当前 minMark的值时,应该更新 minMark;(4)根据程序说明,选手最后的分为去掉一个最高分、一个最低分后的平均分;(5)略。六、试题六(总题数:1,分数:15.00)6.说明本程序使用类来管理员工的通讯地址信息。已知程序的输出为:输出记录:5姓名:王丽华街道地址:中华路 15号市:襄樊市省:湖北省邮政编码:430070Java代码public class Employeeprotected String (1) ;prote
27、cted String street;protected String city;protected String prov;protected String post;protected int no;public Empbyee()public Employee(String name,String street,String city,String prov,String post, (2) )this.name=name;this.street=street;this.city=city;this.prov=prov;this.post=post;this.no=no;public s
28、tatic void main(Stringargs)Employee emp=new Employee(“王华”,“中华路 15号”,“武汉市”,“湖北省”,“430070”,1);emp.changeName(“王丽华”);(3) (“襄樊市”);emp.changeNo(5);(4) ;void changeName(String name)this.name=name;void changeStreet(String street)this.street=street;void changeCity(String city)this.city=city;void changeProv(
29、String prov)this.prov=prov;void changeNo(int no) (5) ;void display()System.out.println(“输出记录:”+this.no);System.out.Println(“姓名:”+this.name);System.out.println(“街道地址:”+this.street);System.out.println(“市:”+this.city);System.out.println(“省:”+this.prov);System.out.println(“邮政编码:”+this.post);(分数:15.00)_正
30、确答案:(1) name (2) int no (3) emp.changeCity (4) emp.display() (5)this.no=no)解析:考点分析 考查 Java语言程序设计,主要是类的使用。解析 本程序创建一个 employee类,包括姓名、街道地址、市、省、邮政编码和记录号等信息以及若干函数:构造函数 employee()初始化每个成员;changname()、changeno()等用于更改类中各属性的值;display()函数用于打印数据。七、试题七(总题数:1,分数:15.00)7.说明某公司的服务器上为每位员工提供了一定大小的存储空间,用于数据的备份。下面的程序面向
31、公司员工,提供了本地计算机与服务器端之间文件传输的功能。主要操作介绍如下:(1)连接服务器:员工需要输入用户名和口令才能连接到服务器端,checkUser 函数用于检查用户名和口令是否合法,返回真假值。(2)上传文件:从本地计算机上传文件到服务器。员工可以在本地文件列表中选择一个或多个文件,这些文件通过上传操作被复制到服务器端指定的某个文件夹中;(3)下载文件:从服务器端下载文件到本地。(分数:15.00)_正确答案:(1) Dir1.Path=Drive1.Drive (2) InpatBox (3) File1.ListCount-1 (4) File1.Selected(i) (5) G
32、etFile)解析:考点分析 考查 VB语言程序设计,主要是文件系统对象的使用。解析 (1)驱动器列表框的 Drive属性表示当前选择的驱动器;目录列表框的 Path属性表示当前目录的路径;文件列表框的 path属性则表示列表中文件所在的目录的路径;(2)此处需要提供输入框以供用户输入用户名和密码;(3)Flie1.ListCount表示 File1中文件的总数目,因文件编号自 0起,所以还应减去 1;(4)若文件列表框中某项被选中,则其 Selected(index)属性将为 True,此循环中,index 就足循环变量i;(5)FSO对象的 GetFile方法返回一个和指定路径中文件相对应
33、的 File对象。八、试题八(总题数:1,分数:15.00)8.说明以下程序的功能是统计学生成绩,包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前百分之七十的学生定为合格(PASS),而后百分之三十的学生定为不合格(FAIL)。例如,当输入 4名学生的姓名和成绩“Alice 67 Mary 90 Tom 56 John 88”后,程序的执行结果如下:姓名 成绩 合格否Mary 90 PASSJohn 88 PASSAlice 67 FAILTom 56 FAILC+程序#include stdio.h#include string.h#define N 10class student
34、protected:char name10;int deg;public:void setname(charna) strcpy(name,na);char * getname() return name;void setdeg(int d) deg= d;int getdeg()return deg;class computeint ns;student naN;public:void getdata();void sort();void disp();void compute:getdata()int i,tdeg;char tname10;printf(“输入学生人数:“);scanf(
35、“%d“,printf(“输入学生姓名和成绩:/n“);for(i=0;ins;i+ +)scanf(“%s%d“,tname,(1) ;nai.setdeg(tdeg);void compute:sort()int i,j,pick;(2) ;for(i=0;ins-1;i+ +)pick=i;for(j=i+1;jns;j+ +)if(naj.getdeg()napick.getdeg() (3) ;temp=nai;nai=napick;napick=temp;void compute:disp()int cutoff,i;printf(“RESULT/n“);printf(“姓名 成绩
36、 合格否/n“);cutoff=ns*7/10-1;for(i=0;ins;i+ +) printf(“%-6s%3d“, (4) );if( (5) ) printf(“/tPASS/n“);else printf(“/tFAIL/n“);void main()compute obj;obj.getdata();obj.sort();obj.disp();(分数:15.00)_正确答案:(1) nai.setname(tname) (2) student temp(3) pick=j(4) nai.getname(),nai.getdeg() (5) i=cutoff)解析:考点分析 考查
37、C+语言程序设计,主要是类的使用。解析 本程序定义了两个类 student和 compute,另有三个公共成员函数 getdata()、sort()和 disp(),它们分别用于获取数据、按成绩排序和输出数据。(1)此处获取扑更新学生对象 nai的姓名属性;(2)sort()函数后半部分使用了 student类型的变量 temp,应该在此处声明;(3)sort()函数的功能是将数组 na按成绩降序排列,这里使用的是简单选择排序算法,pick 和 i都是数组下标,且 pick记录了自第 i个位置起最大元素的下标;(4)根据程序输出的示例,此处应依次输出 nai的姓名和成绩,分别需使用 getname()和 getdeg()方法获得;(5)cutoff是前百分之七十学生的序号。