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