1、二级 VISUAL+BASIC 机试-122 及答案解析(总分:100.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:30.00)请根据以下各小题的要求设计 Visual Basic 应用程序(包括界面和代码)。(分数:30.00)(1).在名称为 Form1,标题为“框架”的窗体上画一个名称为 Frame1,且没有标题的框架。框架内含有 2个单选按钮,名称分别为 Opt1 和 Opt2、标题分别为“字体”、“大小”,如图 1 所示。*注意:存盘时必须存放在考生文件夹下,工程文件名为 sjt1.vbp,窗体文件名为 sjt1.frm。(分数:15.00)_(2).考生文件夹下的
2、工程文件 sjt2.vbp 中有一个由直线 Line1、Line2 和 Line3 组成的三角形,直线Line1、Line2 和 Line3 的坐标值如表 1 所示。表 1 名称 X1 Y1 X2 Y2Line1 600 1200 1600 300Line2 600 1200 2600 1200Line3 1600 300 2600 1200要求画一条直线 Line4 以构成三角形的高,且该直线的初始状态为不可见。再画 2 个命令按钮,名称分别为 Cmd1、Cmd2,标题分别为“显示高”、“隐藏高”,如图 2 所示。*请编写适当的事件过程使得在运行时,单击“显示高”按钮,则显示三角形的高;单击
3、“隐藏高”按钮,则隐藏三角形的高。注意:要求程序中不得使用变量,每个事件过程只能写一条语句。不得修改已经存在的控件,最后将修改后的文件按原文件名存盘。(分数:15.00)_二、简单应用题(总题数:1,分数:40.00)完成下列问题:(分数:40.00)(1).在考生文件夹下有一个工程文件 sjt3.vbp,在 Form1 的窗体中有 1 个文本框、2 个命令按钮和 1 个计时器。程序的功能是在运行时,单击“开始计数”按钮,就开始计数,每隔 1s,文本框中的数加 1;单击“停止计数”按钮,则停止计数(如图 3 所示)。*要求:修改适当的控件的属性,在程序中的横线处填写正确的内容,使其实现上述功能
4、,但不能修改程序中的其他部分。最后把修改后的文件以原来的文件名存盘。题目提供的源程序Private Sub C1_Click(Index As Integer)Select Case (1) Case 1Timer1.Enabled=FalseCase (2) Timer1.Enabled=TrueEnd SelectEnd SubPrivate Sub Timer1_Timer()Text1.Text=Text1.Text (3) End Sub(分数:20.00)_(2).已知出租车行驶不超过 4km 时一律收费 10 元。超过 4km 时分段处理,具体处理方式为:15km 以内每公里加收
5、 1.2 元,15km 以上每公里收 1.8 元。在考生文件夹下有一个工程文件 sjt4.vbp。程序的功能是:单击“输入”按钮,将弹出一个输入对话框,接收出租车行驶的里程数;单击“计算”按钮,则根据输入的里程数计算应付的出租车费,并将计算结果显示在名称为 Text1 的文本框内。在窗体文件中已经给出了全部控件(如图 4 所示),但程序不完整,在程序中的横线处填写正确的内容。*注意:不得修改已经存在的内容和控件属性。最后把修改后的文件按原文件名存盘。题目提供的源程序Dim s As IntegerPrivate Sub Command1_Click()s=Val(InputBox(“输入里程数
6、(单位:km)“)End SubPrivate Sub Command2_Click()If s0 ThenSelect Case (1) Case Is=4 (2) Case Is=15f=10+ (3) Case Is15f=10+ (4) +(s-15)*1.8End SelectText1.Text=fElseMsgBox “请单击“输入“按钮输入里程数!“End IfEnd Sub(分数:20.00)_三、综合应用题(总题数:1,分数:30.00)1.在考生文件夹下有一个工程文件 sjt5.vbp,窗体上有两个标题分别是“读数据”和“统计”的命令按钮。请画两个标签,名称分别为 Lab
7、el1 和 Label2,标题分别为“出现次数最多的字母是”和“它出现的次数为”;再画两个名称分别为 Text1 和 Text2、初始值为空的文本框,如图 5 所示。(分数:30.00)_二级 VISUAL+BASIC 机试-122 答案解析(总分:100.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:30.00)请根据以下各小题的要求设计 Visual Basic 应用程序(包括界面和代码)。(分数:30.00)(1).在名称为 Form1,标题为“框架”的窗体上画一个名称为 Frame1,且没有标题的框架。框架内含有 2个单选按钮,名称分别为 Opt1 和 Opt2、标题分
8、别为“字体”、“大小”,如图 1 所示。*注意:存盘时必须存放在考生文件夹下,工程文件名为 sjt1.vbp,窗体文件名为 sjt1.frm。(分数:15.00)_正确答案:(操作步骤第 1 步:建立一个新工程,并将窗体的 Caption 属性改为“框架”。第 2 步:添加一个框架控件,删除其 Caption 属性内的内容。第 3 步:在框架中画一个单选按钮将其“名称”属性改为 Opt1,将其 Caption 属性改为“字体”;再在框架中画一个单选按钮,将其“名称”属性改为 Opt2,将其 Caption 属性改为“大小”。第 4 步:调试并运行程序,最后按题目要求存盘。)解析:解析 本题主要
9、考查基本控件框架和单选按钮的使用。框架是一个容器型控件,可以容纳其他控件。要将其他控件放在框架中,可以直接在框架中画控件,也可以将事先画好的控件复制(或剪切)到剪切板中,然后选中框架,粘贴控件。要检查一个控件是否在框架中,可以用鼠标拖动框架,若框架中的控件能随框架移动,则说明控件在框架中;也可以用鼠标拖动控件,如果控件不能移出框架,也说明控件已经在框架中了。(2).考生文件夹下的工程文件 sjt2.vbp 中有一个由直线 Line1、Line2 和 Line3 组成的三角形,直线Line1、Line2 和 Line3 的坐标值如表 1 所示。表 1 名称 X1 Y1 X2 Y2Line1 60
10、0 1200 1600 300Line2 600 1200 2600 1200Line3 1600 300 2600 1200要求画一条直线 Line4 以构成三角形的高,且该直线的初始状态为不可见。再画 2 个命令按钮,名称分别为 Cmd1、Cmd2,标题分别为“显示高”、“隐藏高”,如图 2 所示。*请编写适当的事件过程使得在运行时,单击“显示高”按钮,则显示三角形的高;单击“隐藏高”按钮,则隐藏三角形的高。注意:要求程序中不得使用变量,每个事件过程只能写一条语句。不得修改已经存在的控件,最后将修改后的文件按原文件名存盘。(分数:15.00)_正确答案:(操作步骤第 1 步:打开工程,进入
11、窗体编辑状态。第 2 步:在窗体上绘制一条直线,坐标点分别为:X1=1600,Y1=300,X2=1600,Y2=1200。第 3 步:在窗体上画一个命令按钮,设置“名称”属性为 Cmd1,Caption 属性为“显示高”;再在窗体上画另一个命令按钮,设置“名称”属性为 Cmd2,Caption 属性为“隐藏高”。第 4 步:分别为“显示高”和“隐藏高”按钮编写代码。Private Sub Cmd1_Click( )Line4.Visible=TrueEnd SubPrivate Sub Cmd2_Click()Line4.Visible=FalseEnd Sub第 5 步:调试、运行并保存程
12、序。)解析:解析 本题主要考查直线控件的使用。直线控件由其两个端点控制其位置,端点坐标分别为(X1,Y1)和(X2,Y2),坐标原点是窗体的左上角,X1、X2 是距窗体左边界的距离,Y1、Y2 是距窗体上边界的距离。题目中的三角形由 3 个直线对象 Line1、Line2 和 Line3 组成,绘制三角形的高也就是设置新的直线对象 Line4 的端点坐标的问题。Line4 上端在三角形的顶点上,下端在直线 Line3 上。Line2 的上端坐标即是顶点坐标(1600,300),底端坐标的距窗体左边界的距离与顶点坐标一样,距窗体上边界的距离与 Line3 一样,因此另一端的坐标为(1600,12
13、00)。直线 Line4(三角形的高)的显示与隐藏由其Visible 属性控制。二、简单应用题(总题数:1,分数:40.00)完成下列问题:(分数:40.00)(1).在考生文件夹下有一个工程文件 sjt3.vbp,在 Form1 的窗体中有 1 个文本框、2 个命令按钮和 1 个计时器。程序的功能是在运行时,单击“开始计数”按钮,就开始计数,每隔 1s,文本框中的数加 1;单击“停止计数”按钮,则停止计数(如图 3 所示)。*要求:修改适当的控件的属性,在程序中的横线处填写正确的内容,使其实现上述功能,但不能修改程序中的其他部分。最后把修改后的文件以原来的文件名存盘。题目提供的源程序Priv
14、ate Sub C1_Click(Index As Integer)Select Case (1) Case 1Timer1.Enabled=FalseCase (2) Timer1.Enabled=TrueEnd SelectEnd SubPrivate Sub Timer1_Timer()Text1.Text=Text1.Text (3) End Sub(分数:20.00)_正确答案:(操作步骤第 1 步:打开工程文件 sjt3.vbp。第 2 步:分析并修改程序。第 3 步:调试、运行并保存程序。1Index 20 3+1)解析:解析 只要计时器按照 1 秒的时间间隔触发 Timer 事
15、件,并在每次 Timer 事件中使文本框中的内容增加 1 就实现了题目要求的功能。文本框的内容增加 1 可用语句 Text1=Text1+1 实现。要让计时器按照1 s 的时间间隔触发 Timer 事件,计时器的 Interval 属性应设置为 1000(ms)。计时器不停地触发 Timer事件,必须同时满足计时器的 Interval 属性大于 0 和 Enabled 属性为真两个条件。从题目源程序可以看出“开始计数”和“停止计数”按钮正是通过控制计时器的 Enabled 属性来达到计数和停止计数的作用。具体实现时,程序中“开始计数”按钮和“停止计数”按钮是一个命令按钮数组,根据 Index
16、参数判断当前被单击的按钮。(2).已知出租车行驶不超过 4km 时一律收费 10 元。超过 4km 时分段处理,具体处理方式为:15km 以内每公里加收 1.2 元,15km 以上每公里收 1.8 元。在考生文件夹下有一个工程文件 sjt4.vbp。程序的功能是:单击“输入”按钮,将弹出一个输入对话框,接收出租车行驶的里程数;单击“计算”按钮,则根据输入的里程数计算应付的出租车费,并将计算结果显示在名称为 Text1 的文本框内。在窗体文件中已经给出了全部控件(如图 4 所示),但程序不完整,在程序中的横线处填写正确的内容。*注意:不得修改已经存在的内容和控件属性。最后把修改后的文件按原文件名
17、存盘。题目提供的源程序Dim s As IntegerPrivate Sub Command1_Click()s=Val(InputBox(“输入里程数(单位:km)“)End SubPrivate Sub Command2_Click()If s0 ThenSelect Case (1) Case Is=4 (2) Case Is=15f=10+ (3) Case Is15f=10+ (4) +(s-15)*1.8End SelectText1.Text=fElseMsgBox “请单击“输入“按钮输入里程数!“End IfEnd Sub(分数:20.00)_正确答案:(操作步骤第 1 步:
18、打开工程文件 sjt4.vbp。第 2 步:分析并修改程序。其中 Command2_Click()修改后结果如下:第 3 步:调试、运行并保存程序。1s 2f=10 3(s-4)*1.2 4(s-4)*1.2)解析:解析 程序中在“输入”按钮的单击事件里将里程数存放到变量 s 中。在“计算”按钮的单击事件里首先判断 s0 这一条件,如果 s0 说明已输入了里程数,可以计算出租车费。计算时采用 Select Case 语句根据里程数来处理 3 个分支,当然判断表达式就应该是 s。再根据已有程序可以看出存放出租车的变量为 f,所以里程小于或等于 4 时,出租车费为 f=10;超过 4km 并在 1
19、5km 内的出租车费为 f=10+(s-4)*1.2;15km 以上的出租车费为:f=10+(s-4)*1.2+(s-15)*1.8。三、综合应用题(总题数:1,分数:30.00)1.在考生文件夹下有一个工程文件 sjt5.vbp,窗体上有两个标题分别是“读数据”和“统计”的命令按钮。请画两个标签,名称分别为 Label1 和 Label2,标题分别为“出现次数最多的字母是”和“它出现的次数为”;再画两个名称分别为 Text1 和 Text2、初始值为空的文本框,如图 5 所示。(分数:30.00)_正确答案:(操作步骤第 1 步:打开工程文件 sjt5.vbp。第 2 步:添加控件添加一个标
20、签控件,修改其 Caption 属性为“出现次数最多的字母是”。添加一个标签控件,修改其 Caption 属性为“它出现的次数为”。添加两个文本框控件:第一个文本框控件与第一个标签控件在同一水平线上,第二个文本框控件与第二个标签控件在同一水平线上,清空两个文本框控件的 Text 属性中的内容。第 3 步:编写程序。Private Sub Command2_Click()考生应编写的程序Dim zm(1 To 26) As Integer, c As String *1Dim i As Integer, j As IntegerDim max As IntegerFor i=1 To Len(s
21、)c=UCase(Mid(s,i,1)If e=“A“ And c=“Z“ Thenj=Asc(c)-65+1 将字母转换成 126 的下标,A 字母的 ASCII 码为 65zm(j)=zm(j)+1End IfNext imax=1For j=2 To 26If zm(i)zm(max) Then max=iNext iText1=Chr(max+65) 根据下标转换为对应的字母Text2=zm(max)End Sub第 4 步:调试、运行并保存程序。)解析:解析 为统计 26 个字母出现的个数,可声明一个具有 26 个元素的数组,每个元素的下标表示对应的字母,元素的值表示对应字母出现的次
22、数。如:zm(1)=10,表示字母 A 出现 10 次,zm(2)=3 表示字母 B 出现 3 次,也就是说,zm 数组中下标为 1 的元素存储 A 字母出现的次数,下标为 2 的元素存储 B 字母出现的次数,以此类推。对已有的字符串可以通过 Mid()函数逐一取出字母,统一转换成大写字母或小写字母,进行归类统计,由 zm 数组存储各字母出现的次数。统计完各字母出现次数后,找出 zm 数组元素的最大值,该数组元素的下标对应的字母就是出现次数最多的字母。找出 zm 数组元素的最大值的算法是:先假定第一个元素就是最大值,记下其下标,然后依次将每一个元素值与最大值比较,若遇到更大的值,则记下新的更大值的下标,直到与最后一个元素比较完毕。Command1_Click()过程用于读取文件中的内容,Form_Unload()过程用于在关闭窗体时将统计结果保存到文件 out5.dat 中。