1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 15及答案与解析 1 阅读以下说明和流程图,将应填入 (n)处的字句写在对应栏内。 说明 下面的流程图用于计算一个英文句子中最长单词的长度 (即单词中字母个数 )MAX。假设该英文句子中只含字母、空格和句点 “.”,其中句点表示结尾,空格之间连续的字母串称为单词。 流程图 2 阅读下列函数说明和 C函数,将应填入 (n)处的字句写在对应栏内。 函数 2.1说明 Fibonacci数列中头两个数均为 1,从第三个数开始,每个数等于前两个数之和。下述程序 计算 Fibonacci数列中前 15个数,并以每行 5个数的格式输出。 函数 2.1 #i
2、nclude stdio.h main() int i,f,f1=1,f2=1; printf(“%5d%5d“,f1,f2); for(i=3;i =15;i+) f=(1); printf(“%5d“,f); if(2)= =0) printf(“n“); f1=12; (3); 函数 2.2说明 函数 fun(char *str1,char *str2)的功能是将字符串 str2拼接到 str1之后。 函数 2.2 fun(char *str1,char *str2) int i,j; for(i=0;str1i!=0;i+); for(j=0;str2j!=0;j+) (4); (5)
3、; 3 阅读下列函数说明和 C函数,将应填入 (n)处的字句写在对应栏内。 说明 链式存储的队列称为链队。根据队列的 FIFO原则,为了操作上的方便,可以使用带头指针 front和尾指针 rear的单链表来实现链队。若链队元素的数据类型为 datatype,则链队结构描述如下: typedef struct node datatypedata; structnode *next; QNode; /*链队结点的类型 */typedef struct QNnode *front,*rear; LQueue; /*将头尾指针封装在一起的链队 */ 以下这种链队的几个例子: 设 q是一个指向链队的指针
4、,即 LQueue *q。下面各函数的功能说明如下: (1) LQueue *Init_LQueue():创建并返回一个带头尾结点的空链队; (2) intEmpty_LQueue( LQueue *q):判断链队 q是否空; (3) void In_LQueue(LQueue *q, datatypex):将数据 x压入链队 q; (4) int Out_LQueue(LQuere *q, datatype *x):弹出链队 q的第一个元素 x,若成功则返回返回 1否则返回 0。 函数 LQueae *Init_LQueue() LQueue *q, *p; q=malloc(sizeof(
5、LQueue); /*申请链队指针 */ P=malloc(sized(QNode);/*申请头尾指针结点 */ p- next=NULL; (1)=p; return q;int Empty_LQueue(LQueue *q) if(q- front (2) q rear) return 0; else return 1;void In_LQueue(LQueue *q, datatype x) QNoda *p; p=malloc(sizeof(QNnode);/*申请新接点 */ p- data=x; p- next=NULL; (3)=p; q- rear=p;int Out_LQue
6、ue(LQueue *q, datatype *x) QNnode *p; if(Empty_LQueue(q) return 0; /*队空 ,操作失败 */ else p=q- front- next; *x=(4); (5)=p- next; free(p); if (q- front- next= =NULL)q-rear=q- front; return 1; 4 阅读下列函数说明和 C函数,将应 填入 (n)处的字句写在对应栏内。 说明 函数 encode()和 decode()分别通过参数传递实现对字符串的变换和复原,返回值均为处理以后的字符串长度。变换函数 encode()顺序
7、考察已知字符串的字符,按以下规则逐组生成新字符串: (1)若已知字符串的当前字符不是数字字符,则复制该字符于新字符串中; (2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中; (3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字值为n,则将其 后继字符重复复制 n+1次到新字符串中; (4)以上述一次变换为一组,在不同组之间另插入一个下划线 _用于分隔。 例如: encode()函数对字符中 26a3t2的变换结果为 666_a_tttt_2。 函数 decode()用于经函数 encode()处理的字符中,即复制不连续相同的单个字
8、符,而将一组连续相同的字符 (不超过 10个 )变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中掠过变换函数为不同组之间添加的一个下划线字符。 注:假定调用变换函数 encode()时的原始 字符串中不包含下划线字符。 函数 int encode(char *instr,char *outstr) char *ip, *op,c; int k,n; ip=instr; op=outstr; while ( * ip) if(*ip =0 c=(1); for (k=0;k n;k+) *op+=c; else *op+=*ip; (2); ip+; if (op outs
9、tr) (3); *op=0; (4); int decode(char *instr,char *outstr) char *ip,*op,c; int n; ip=instr; op=outstr; while ( *ip) c=*ip; n=0; while( *ip=c n+; if(n 1) *op+ + =0+n-1; * op+=c; if(*ip=_) ip+; *op=0; (4); 5 阅读以下说明及 Visual Basic程序代码,将应填入 (n)处的字句写在对应栏内。 说明 某单位组织一次职业技术考核比赛,由十名评委对选手的现场表现打分 (0到100以内的数值 )。本
10、程 序接收原始评分后,去掉一个最高分、一个最低分,最后计算并输出选手最后得分。在接收输入第 i个评分时,若输入数据的类型、范围不正确,程序将给出相应提示,并等待下一次输入,直至正确接收第 i个评分为止。程序的运行界面如下: 在开发过程中,文本框名为 Text1,界面上有上至下三个按钮分别取名为 CmdMark、CmdReresh和 CmdExit。 Visual Basic代码 Private Sub CmdMark_Click() 按钮 “输入评分 ”的单击事件响应代码 Dim i As Integer,temp As Variant 声明变量 Dim marks(1 To 10),maxM
11、ark,minMark,sumMark,mark As Single sumMark=0 Text1.Text=“编号 ” /雇员姓名 short age; /年龄 float salary;/工资 public: employee(); void set_name(char *); void set_age(short a) age=a; void set_salary(float s) salary=s; (1); employee()delete name; ; employee:employee() name=“; age=0; salary=0.0; void employee:se
12、t_name(char *n) name=new charstrlen(n)+1; (2) (name,n); void employee:print() cout “姓名 “:“ name “ 年龄 :“ agc “ 工资 :“ salary endl; void main() char *na; short ag=0; float sa=0; (3); na=new char10; cin na ag sa; emp.set_name(na); emp.set_age(ag); emp.set_salary(sa); emp.print(); (4) (3500.0); emp.print
13、(); (5); emp.set_name(“Mary“); emp.set_age(23); emp.set_salary(2500.0); emp.print(); 8 阅读以下程序说明和 java代码,将应填入 (n)处的字句写在对应栏内。 说明 本程序接收输入的学生信息,包括学号、姓名、成绩,原样输出信息并计算学生的平均成绩。其中学生类 Stud除了包括 no(学号 )、 name(姓名 )和 grade(成绩 )数据成员外,还有两个静态变量 sum和 num,分别存放总分和人数,另有一个构造函数、一个普通成员函数 disp()和一个静态成员函数 avg()用于计算平均分。 Java代
14、码 public class Stud public int no; public String name; public double grade; public (1) double sum=0; public static int num=0; public Stud(int no,String name,double grade) this.no = no; this.name = name; this.grade = grade; this.sum=(2); (3); public static double avg() return (4); public void disp()
15、System.out.println(this.no+“t“+this.name+“t“+this.grade); public static void main(String args) Stud students = new Stud (1,“Li“, 81), new Stud(2,“Zhao“,84.5), new Stud(3,“Zhang“, 87); System.out.pfintln(“notnametgrade“); students0.disp(); students1.disp(); students2.disp(); System.out.println(“avg=“
16、+(5); 软件水平考试(初级)程序员下午(应用技术)模拟试卷 15答案与解析 1 【正确答案】 (1)MAX0 (2)L+1 (3)MAXL (4) (5)L0 【试题解析】 本题用到的三个变量及其作用分别为: A,存放输入的一个字符;MAX,存放当前为止最长单词的长度; L,存放当前单同的长度。 (1)使用变量 MAX应先赋予初值,由上下文知其初值为 0; (2)读取当前单词时,每读人一个字母, 单词长度值 L应增 1; (3)当前单词长度 L比 MAX时,应更新 MAX的值; (4)若当前字符不是句点,应当继续读取字符; (5)读取下一个单词前,应当重置 L的值。 2 【正确答案】 (1
17、) f1+f2 (2) i%5 (3) f2=f (4) str1i+=str2j (5) str1i=0 【试题解析】 (1)根据 Fibonacci数列的性质, f等于前两数 f1与 f2之和; (2)每输出 5个数以后应当换行,此条件即: i除以 5余 0; (3)计算一个数值前, f1与 f2都应更新 ,其中 f2应为刚计算出的 f; (4)此循环的功能是将 str2的字符添加到 str1末尾; (5)函数结束前应在 str1末尾添加结束符。 3 【正确答案】 (1) q- front=q- rear (2) = = (3)q- rear- next (4) p- data (5) q
18、- front- next 【试题解析】 (1)初始化链队 q时,需要初始化其头尾指针,空链队的头尾指针相等; (2)链队头尾指针重合当且仅当链队为空; (3)向链队插入新元素的操作是在链队末尾进行的,需要将新元素结点接 在原链队队尾,再让新的尾指针指向这一新结点; (4) (5):链队 q的第一个元素存放在其头结点之后的第一个结点 (即 p=q- front- next)中。 *x= p- data表示将这个元素取出,以参数 *x的形式返回: q- front- next=p- next表示将结点 p从链队中取出。 4 【正确答案】 (1) *+ip (2) *op+=_ (3) op- -
19、或 - -op (4) return op - outstr (5) ip+ 【试题解析】 在 encode和 decode函数 中,参数 ip和 op分别指向输入字符串和输出字符串。 (1)读到一个非零数字 n时,读取其后一个字符放入 c,将其循环写入输出字符串 n遍; (2)完成一组变换后,应向输出字符中中添加一个下划线字符; (3)如果输出字符串不空,应删除其末尾多余的下划线字符; (4)根据程序说明,此处应返回输出字符串的长度,这里用尾、首位置指针的差表示; (5)此处 while循环的作用是读取连续相同的若干字符,输入字符串的位置指针应后移。 5 【正确答案】 (1) Not (2)
20、 marks(1)或 marks(i) (3) minMark=marks(i) (4) sumMark-maxMark-minMark (5) Text1 【试题解析】 (1)程序在输入数据 temp不是数值 (即 IsNumeric (temp)返回 False值 )时报告错误,因而此处应填写逻辑运算符:取非; (2)由程序最后的输出可推断: maxMark和 minMark分别用于记录最高分和最低分。它们通过 For循环求得,此处需要为其赋初值; (3)当第 i个评分 marks(i)小于当前 minMark的值时,应该更新 minMark; (4)根 据程序说明,选手最后的分为去掉一个
21、最高分、一个最低分后的平均分; (5)略。 6 【正确答案】 (1) Dir1.Path=Drive1.Drive (2) InpatBox (3) File1.ListCount-1 (4) File1.Selected(i) (5) GetFile 【试题解析】 (1)驱动器列表框的 Drive属性表示当前选择的驱动器;目录列表框的 Path属性表示当前目录的路径;文件列表框的 path属性则表示列表中文件所在的目录的路径; (2)此处需要提供输 入框以供用户输入用户名和密码; (3)Flie1.ListCount表示 File1中文件的总数目,因文件编号自 0起,所以还应减去1; (4)
22、若文件列表框中某项被选中,则其 Selected(index)属性将为 True,此循环中,index就足循环变量 i; (5)FSO对象的 GetFile方法返回一个和指定路径中文件相对应的 File对象。 7 【正确答案】 (1) void print() (2) strcpy (3) employee emp (4) emp.set_salary (5)emp. employee() 【试题解析】 程序定义了一个 employee类,它包含了一个雇员的档案数据,及对这些数据的若干处理函数:构造函数 employee创建一个雇员空档案;set_name(),set_age ()和 set_
23、salary()分别用来为雇员档案填入姓名、年龄和工资;print()函数的功能是输出该雇员的档案内容;析构函数 employee()的功能是当某雇员档案撤销或改成另一姓名时,释放原数据占用的空。 (1)此处应声明 print函数; (2)此处应调用字符申拷贝函数,以更改 name属性 的值; (3)此处显然应声明 emp变量; (4) (5):由程序的输出可知 (4)处重新设置了 emp变量 salary属性的值, (5)处则应调用析构函数 8 【正确答案】 (1) static (2) this.sum+grade (3) this. num+ (4) sum/num (5) Stud.avg() 【试题解析】 (1)根据题意, sum数据成员是静态变量; (2) (3):在 Stud类的构造函数中,应该对 sum数据成员累加并对 num成员增1; (4)avg函数是计算平均数的,所 以应该返回 sum/num; (5)avg函数是个静态函数,所以它的调用方式是类名 .函数名即 Stud.avg()。