1、初级程序员下午试题-78 及答案解析(总分:120.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.说明设学生某次考试的成绩按学号顺序逐行存放于某文件中,文件以单行句点“.”为结束符。下面的流程图读取该文件,统计出全部成绩中的最高分 max和最低分 min。(分数:15.00)_二、试题二(总题数:1,分数:15.00)2.函数 2.1说明Fibonacci数列中头两个数均为 1,从第三个数开始,每个数等于前两个数之和。下述程序计算Fibonacci数列中前 15个数,并以每行 5个数的格式输出。函数 2.1#include stdio.hmain()int i,f,
2、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) ;试题一流程图(分数:15.00)_三、试题三(总题数:1,分数:15.00)3.说明链式存储的队列称为链队。根据队列的 FIFO原则,为了操作上的方便,可以使用带头指针 front和尾指针 rear的单链表来实现链队。若链队元素的数据类型为 datatype,则链队结构描述如下:typedef struct nodedatatypedata;structnode *next;
3、QNode; /*链队结点的类型*/typedef structQNnode *front,*rear;LQueue; /*将头尾指针封装在一起的链队*/以下这种链队的几个例子:(分数:15.00)_四、试题四(总题数:1,分数:15.00)4.说明函数 encode()和 decode()分别通过参数传递实现对字符串的变换和复原,返回值均为处理以后的字符串长度。变换函数 encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:(1)若已知字符串的当前字符不是数字字符,则复制该字符于新字符串中;(2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新
4、字符串中;(3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字值为 n,则将其后继字符重复复制 n+1次到新字符串中;(4)以上述一次变换为一组,在不同组之间另插入一个下划线_用于分隔。例如:encode()函数对字符中 26a3t2的变换结果为 666_a_tttt_2。函数 decode()用于经函数 encode()处理的字符中,即复制不连续相同的单个字符,而将一组连续相同的字符(不超过 10个)变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中掠过变换函数为不同组之间添加的一个下划线字符。注:假定调用变换函数 encode()时的原始字符串中不包含
5、下划线字符。函数int encode(char *instr,char *outstr)char *ip, *op,c;int k,n;ip=instr;op=outstr;while ( * ip) if(*ip=0c= (1) ;for (k=0;kn;k+) *op+=c;else *op+=*ip;(2) ;ip+;if (opoutstr) (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(
6、 *ip=c n+; if(n1) *op+ + =0+n-1;* op+=c;if(*ip=_) ip+;*op=/0;(4) ;(分数:15.00)_五、试题五(总题数:1,分数:15.00)5.说明某银行新近开通外汇定期存款业务。为方便用户查询不同存款方式下的日利率、计算本利,特开发了日利率查询及本利计算程序,其运行窗口如下图所示。用户只要在界面上选择相应的存款方式(包括外汇币种、存期等),便可单击按钮一查询存款日利率。若输入一定数量的本金。程序还会根据所选择的存期计算并输出本利和。(分数:15.00)_六、试题六(总题数:1,分数:15.00)6.说明当用户启动 html浏览器并首次打
7、开下面的 html文档时,Java Applet 小程序在第一个显示面板上显示字符串“HelloWorld“;在第二个显示面板上画一条直线。Java代码import java.awt. *;import javax.swing. *;public class HelloWorldApplet extends JAppletpubhc void (1) (2) str=“HetloWorld“;JLabel label = new JLabel(str);this. getContentPane().add(label);import java.applet.Applet;import java
8、.awt.Graphics;public class AppletPaint extends (3) public void paint( (4) ) g.drawLine(0,0,300,200);HTML文档htmlheadtitle HTML Test Page /title/headbodyapplet code=“ (5) “ width=“300“ height=“100“/appletapplet code=“ AppletPaint.class“ width=“300“ height=“100“/applet/body/html(分数:15.00)_七、试题七(总题数:1,分数
9、:15.00)7.说明下图是一个简易文本编辑器程序的运行界面:(分数:15.00)_八、试题八(总题数:1,分数:15.00)8.说明本程序中预设了若干个用户名和口令。用户输入正确的用户名后,可以查找对应的口令,一旦输入结束标记“end”,程序结束。C+程序#include iostream. h#include string. hclass Userprotected:char user10;char pass7;public:User(char ,char);(1) return user;(2) return pass;User:User(char u,char p)strcpy(use
10、r,u);strcpy(pass,p); void main()User ua=User(“Li“,“123456“),User(“wang“,“654321“),User(“Song“,“666666“)char name10;while(1)cout “输入用户名:“;cin name;if( (3) = =0) break;for(int i=0;i3;i+ +)if(strcmp(name,uai.getuser() = =0)cout “密码:“ uai.getpass() endl;(4) ;if( (5) )cout “该用户不存在!“ endl;(分数:15.00)_初级程序员
11、下午试题-78 答案解析(总分:120.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.说明设学生某次考试的成绩按学号顺序逐行存放于某文件中,文件以单行句点“.”为结束符。下面的流程图读取该文件,统计出全部成绩中的最高分 max和最低分 min。(分数:15.00)_正确答案:(1) maxa (2) mina (3) a=“.“(4) amax 或 amax 或 maxa 或 maxa(5) amin 或 amin 或 mina 或 mina)解析:解析 本题用到的三个变量及其作用分别为:a,存放读入的一行数据;max 存放最高分;min 存放最低分。算法首先读入文
12、件的第一行数据 a,若 a为文件结束符“.”,则算法提前结束;否则为 max和 min赋初值 a,循环读入文件其余部分,直至文件末尾。循环过程中,当某行数据 a大于 max时,更新max的值;当某行数据 a小于 min时,更新 min的值。二、试题二(总题数:1,分数:15.00)2.函数 2.1说明Fibonacci数列中头两个数均为 1,从第三个数开始,每个数等于前两个数之和。下述程序计算Fibonacci数列中前 15个数,并以每行 5个数的格式输出。函数 2.1#include stdio.hmain()int i,f,f1=1,f2=1;printf(“%5d%5d“,f1,f2);
13、for(i=3;i=15;i+)f= (1) ;printf(“%5d“,f);if( (2) = =0) printf(“/n“);f1=12;(3) ;试题一流程图(分数:15.00)_正确答案:(1) 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末尾;
14、(5)函数结束前应在 str1末尾添加结束符。三、试题三(总题数:1,分数:15.00)3.说明链式存储的队列称为链队。根据队列的 FIFO原则,为了操作上的方便,可以使用带头指针 front和尾指针 rear的单链表来实现链队。若链队元素的数据类型为 datatype,则链队结构描述如下:typedef struct nodedatatypedata;structnode *next;QNode; /*链队结点的类型*/typedef structQNnode *front,*rear;LQueue; /*将头尾指针封装在一起的链队*/以下这种链队的几个例子:(分数:15.00)_正确答案:
15、(1) q-front=q-rear (2) = = (3)q- rear-next (4) p-data (5) q-front-next)解析:解析 (1)初始化链队 q时,需要初始化其头尾指针,空链队的头尾指针相等;(2)链队头尾指针重合当且仅当链队为空;(3)向链队插入新元素的操作是在链队末尾进行的,需要将新元素结点接在原链队队尾,再让新的尾指针指向这一新结点;(4)(5):链队 q的第一个元素存放在其头结点之后的第一个结点(即 p=q-front-next)中。*x= p-data 表示将这个元素取出,以参数*x 的形式返回:q-front-next=p-next 表示将结点 p从链
16、队中取出。四、试题四(总题数:1,分数:15.00)4.说明函数 encode()和 decode()分别通过参数传递实现对字符串的变换和复原,返回值均为处理以后的字符串长度。变换函数 encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:(1)若已知字符串的当前字符不是数字字符,则复制该字符于新字符串中;(2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中;(3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字值为 n,则将其后继字符重复复制 n+1次到新字符串中;(4)以上述一次变换为一组,在不同组之间另插入一个下划
17、线_用于分隔。例如:encode()函数对字符中 26a3t2的变换结果为 666_a_tttt_2。函数 decode()用于经函数 encode()处理的字符中,即复制不连续相同的单个字符,而将一组连续相同的字符(不超过 10个)变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中掠过变换函数为不同组之间添加的一个下划线字符。注:假定调用变换函数 encode()时的原始字符串中不包含下划线字符。函数int encode(char *instr,char *outstr)char *ip, *op,c;int k,n;ip=instr;op=outstr;while (
18、* ip) if(*ip=0c= (1) ;for (k=0;kn;k+) *op+=c;else *op+=*ip;(2) ;ip+;if (opoutstr) (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(n1) *op+ + =0+n-1;* op+=c;if(*ip=_) ip+;*op=/0;(4) ;(分数:15.00)_正确答案:(1) *+ip (2)
19、*op+=_(3) op- -或- -op (4) return op - outstr (5) ip+)解析:解析 在 encode和 decode函数中,参数 ip和 op分别指向输入字符串和输出字符串。(1)读到一个非零数字 n时,读取其后一个字符放入 c,将其循环写入输出字符串 n遍;(2)完成一组变换后,应向输出字符中中添加一个下划线字符;(3)如果输出字符串不空,应删除其末尾多余的下划线字符;(4)根据程序说明,此处应返回输出字符串的长度,这里用尾、首位置指针的差表示;(5)此处 while循环的作用是读取连续相同的若干字符,输入字符串的位置指针应后移。五、试题五(总题数:1,分数
20、:15.00)5.说明某银行新近开通外汇定期存款业务。为方便用户查询不同存款方式下的日利率、计算本利,特开发了日利率查询及本利计算程序,其运行窗口如下图所示。用户只要在界面上选择相应的存款方式(包括外汇币种、存期等),便可单击按钮一查询存款日利率。若输入一定数量的本金。程序还会根据所选择的存期计算并输出本利和。(分数:15.00)_正确答案:(1) Exit For (2) Option1.Value (3) getInterestRate (4) Select Case strTime(5) sngCorpus * intDays * getInterestRate()解析:解析 (1)此处
21、需要查询 interestRate中数组元素的下标,即组合框中所选择项的编号。因此循环遍历组合框的各项,当某项与所选项匹配时,应即刻退出循环;(2)由于数组元素 interestRate(i,j,0)对应于个人单位,即单选钮 Option1被选中,其 Value属性为真;(3)函数最后需要返回日利率的值,其形式为:函数名=表达式;(4)“Select Case表达式End Case”是 VB提供的多分支选择结构,这里需要根据用户选择的存期strTime来确定天数;(5)此处应填入计算利息的表达式。六、试题六(总题数:1,分数:15.00)6.说明当用户启动 html浏览器并首次打开下面的 ht
22、ml文档时,Java Applet 小程序在第一个显示面板上显示字符串“HelloWorld“;在第二个显示面板上画一条直线。Java代码import java.awt. *;import javax.swing. *;public class HelloWorldApplet extends JAppletpubhc void (1) (2) str=“HetloWorld“;JLabel label = new JLabel(str);this. getContentPane().add(label);import java.applet.Applet;import java.awt.Gr
23、aphics;public class AppletPaint extends (3) public void paint( (4) ) g.drawLine(0,0,300,200);HTML文档htmlheadtitle HTML Test Page /title/headbodyapplet code=“ (5) “ width=“300“ height=“100“/appletapplet code=“ AppletPaint.class“ width=“300“ height=“100“/applet/body/html(分数:15.00)_正确答案:(1) init() (2) S
24、tring (3) Applet (4) Graphics g (5) HelloWorldApplet.class)解析:解析 (1)applet 初始化的时候要调用该方法,它仅被调用一次。初始化的代码经常放到这里。(2)程序在标签 JLabe1在构造过程中赋予其显示的文本,它的构造函数的输入参数是 String类型的,这个在 str 的定义中也可以看出。(3)AppletPaint继承自 Applet类。(4)很明显,这里需要一个 Graphics类来画直线。(5)这是 Applet的 html标记的使用方法,code 属性给出特定的类文件名,并且必须包括扩展名.class。width 和
25、 height属性定义了该 Applet的窗口大小。七、试题七(总题数:1,分数:15.00)7.说明下图是一个简易文本编辑器程序的运行界面:(分数:15.00)_正确答案:(1) FileSystemObject (2) CommonDialog1.filename (3) ts.ReadAll (4) ts. Write Text1.Text(5) Text1.SelLength)解析:解析 (1)FSO 对象的声明格式是:Dim 对象名 As New FileSystemObject;(2)文件对话框中选中的文件名称(含磁盘路径)包含在 filename属性中;(3)此处要获取文件的全部
26、内容,因此需用 ReadAll方法读取整个文件;(4)此处要将文本框内容 Text1.Text更新至文件,应使用 Write方法一次性写入;(5)文本框中是否选定了内容可以根据属性 SelLength (选定长度)是否为零来判断。八、试题八(总题数:1,分数:15.00)8.说明本程序中预设了若干个用户名和口令。用户输入正确的用户名后,可以查找对应的口令,一旦输入结束标记“end”,程序结束。C+程序#include iostream. h#include string. hclass Userprotected:char user10;char pass7;public:User(char
27、,char);(1) return user;(2) return pass;User:User(char u,char p)strcpy(user,u);strcpy(pass,p); void main()User ua=User(“Li“,“123456“),User(“wang“,“654321“),User(“Song“,“666666“)char name10;while(1)cout “输入用户名:“;cin name;if( (3) = =0) break;for(int i=0;i3;i+ +)if(strcmp(name,uai.getuser() = =0)cout “密
28、码:“ uai.getpass() endl;(4) ;if( (5) )cout “该用户不存在!“ endl;(分数:15.00)_正确答案:(1) char *getuser() (2) char *getpass()(3) strcmp(name, “end“) (4) break(5) i= =3或 i=3 或 i2 或其他等效形式)解析:解析 由上下文可知,User 类中包括数据成员 User和 pass,分别存储用户名和口令,另有一个构造函数和 getuser()、getpass()两个成员函数,分别用于获取用户名和口令。main()中包含一个 User类型的数组 ua,当用户输入一个用户名后,在 ua中查找,若找得到则输出对应的口令,否则输出相应的提示信息。(1)(2)由于 user和 pass属性都是字符串类型,这里的返回值类型为 char *;(3)此处给出了退出程序的判断条件,即输入的用户名等于“end”;(4)此处的 for循环用于查找用户名,若找到了可即刻退出循环;(5)当输入的用户名不正确时,for 循环一直执行直到 i等于 3。