1、二级 VISUAL+BASIC 机试-124 及答案解析(总分:100.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:30.00)请根据以下各小题的要求设计 Visual Basic 应用程序(包括界面和代码)。(分数:30.00)(1).在名称为 Form1、标题为“图片”的窗体上画一个名称为 Image1 的图像框,其高为 2500、宽为2000。请通过属性窗口设置适当属性,装入考生目录下的图片文件 pic1.jpg,并使图片适应图像框的大小(如图 1 所示)。*注意:存盘时必须存放在考生文件夹下,工程文件名为 sjt1.vbp,窗体文件名为 sjt1.frm。(分数:15
2、.00)_(2).在名称为 Form1 的窗体上画一个名称为 Label1.Caption 属性值为“口令”的标签;画一个名称为Texl1 的文本框;再画 3 个命令按钮,名称分别为 Command1、Command2、Command3,Caption 属性值分别为“显示口令”、“隐藏口令”、“重新输入”。程序运行时,在 Text1 中输入若干字符,单击“隐藏口令”按钮,则只显示同样数量的“*”(如图 2 所示);单击“显示口令”按钮,则显示输入的字符(如图 3所示),单击“重新输入”按钮,则清除 Text1 中的内容,并把光标定位到 Text1 中。*要求:请画出所有控件,编写命令按钮的 C
3、lick 事件过程,程序中不得使用变量,在“显示口令”、“隐藏口令”按钮的事件过程中只能写一条语句。存盘时必须存放在考生文件夹下,工程文件名为sjt2.vbp,窗体文件名为 sjt2.frm。(分数:15.00)_二、简单应用题(总题数:1,分数:40.00)完成下列问题:(分数:40.00)(1).在考生文件夹下有一个工程文件 sjt3.vbp,在程序运行时,单击“输入整数”按钮,可以从键盘输入一个整数,并在窗体上显示此整数的所有不同因子和因子个数。图 4 是输入 53 后的结果,图 5 是输入100 的结果。已经给出了全部控件和程序,但程序不完整。*要求:请在程序中的横线处填写正确的内容。
4、不能修改程序中的其他部分,也不能修改控件的属性。最后用原来的文件名保存工程文件和窗体文件。题目提供的源程序Private Sub Command1_Click()Dim n As IntegerCls(1) =InputBox(“请输入一个整数“)Print “因子数=“; fun(n)End SubFunction fun(m As Integer)Dim s As Integers=0For k=1 To Abs(m)/2If m Mod k= (2) Thens=s+1Print kEnd IfNext k(3) End Function(分数:20.00)_(2).在考生文件夹下有一个
5、工程文件 sjt4.vbp。在窗体中“待选城市”下的 List1 列表框中有若干城市名称。程序运行时,选中 List1 中若干个列表项(如图 6 所示),单击“选中”按钮则把选中的项目移到List2 中,单击“显示”按钮,则在 Text1 文本框中显示这些选中的城市(如图 7 所示)。已经给出了所有控件和程序,但程序不完整。*要求:在程序中的横线处填写正确的内容,使其能正确运行,但不能修改程序中的其他部分和控件属性。最后用原来的文件名保存工程文件和窗体文件。(题目提供的源程序Private Sub Command1_Click()Dim k%For k=List1.ListCount-1 To
6、 0 (1) If List1.Selected(k)=True ThenList2.AddItem (2) List1.RemoveItem (3) End IfNext kEnd SubPrivate Sub Command2_Click()Dim k%Text1=“已经选中的城市有:“For k=0 To List2.ListCount-1 Step 1Text1= (4) fun(n)End SubFunction fun(m As Integer)Dim s As Integers=0For k=1 To Abs(m)/2If m Mod k= (2) Thens=s+1Print
7、kEnd IfNext k(3) End Function(分数:20.00)_正确答案:(操作步骤第 1 步:打开工程文件 sjt3.vbp。第 2 步:分析并编写程序。第 3 步:调试、运行并保存程序。1n 20 3fun=s)解析:解析 单击“输入整数”按钮时触发 Command1_Click()事件,为完成题目要求,事件过程代码中通过 InputBox()函数来接收用户输入,并通过 fun()函数对存入变量求解因子。因为已知代码中 fun()函数的实参是变量 n,所以输入的值应存放在变量 n 中,1处应填 n。自定义函数 fun 用于求解因子,其算法是:利用循环语句把每一个可能的因子数
8、与原数作求余运算:如果余数为 0,则说明找到一个因子,输出该因子,对因子个数加 1;函数结束时,返回因子个数。(2).在考生文件夹下有一个工程文件 sjt4.vbp。在窗体中“待选城市”下的 List1 列表框中有若干城市名称。程序运行时,选中 List1 中若干个列表项(如图 6 所示),单击“选中”按钮则把选中的项目移到List2 中,单击“显示”按钮,则在 Text1 文本框中显示这些选中的城市(如图 7 所示)。已经给出了所有控件和程序,但程序不完整。*要求:在程序中的横线处填写正确的内容,使其能正确运行,但不能修改程序中的其他部分和控件属性。最后用原来的文件名保存工程文件和窗体文件。
9、(题目提供的源程序Private Sub Command1_Click()Dim k%For k=List1.ListCount-1 To 0 (1) If List1.Selected(k)=True ThenList2.AddItem (2) List1.RemoveItem (3) End IfNext kEnd SubPrivate Sub Command2_Click()Dim k%Text1=“已经选中的城市有:“For k=0 To List2.ListCount-1 Step 1Text1= (4) & “ & List2.List(k)Next kEnd Sub(分数:20.
10、00)_正确答案:(操作步骤第 1 步:打开本题工程文件。第 2 步:分析并编写程序。第 3 步:保存、调试、运行程序。1step-1 2List1.List(k) 3k 4Text1 或 Text1.Text)解析:解析 列表框控件有两个重要的属性Selected 属性和 List 属性,二者都是数组,从 0 开始编号。Selected 下标与 List 的下标一一对应,记录 List 数组中各个项目是否被选中。例如,若列表框List1 中的第二个元素即 List(1)被选中,则 Selected(1)的值就为 True;相反,若 List(1)未被选中,则 Selected(1)的值就为
11、False。运行时,对 Selected 数组的下标从 0ListCount-1 依次检测,可以判断出所有被选择的项目。由于题目中要对被选的项目进行移出操作,移出一个项目后,后续项目自动前移,该项目后的其他项目的下标发生改变,对被选项目的定位就出现错误。为了解决这个问题,程序在循环时下标从 ListCount-10 进行检测,此时 For 循环步长应为-1。当 List1.Selected(k)值为真时,对应被选中的项目就是 List1.List(k),应该把它添加到 List2 中,同时在 List1 中把下标为 k 的项目移去。为了在文本框中把 List2 中所有的项目连接起来,应该是取文
12、本框中原有的值 Text1.Text 连接上 List2 的项目。三、综合应用题(总题数:1,分数:30.00)1.在考生文件夹下有一个工程文件 sjt5.vbp,其窗体中有一个实心圆。程序运行时,当用鼠标左键单击窗体任何位置时,实心圆则向单击位置直线移动;若用鼠标右键单击窗体,则实心圆停止移动。窗体文件中已经给出了全部控件,但程序不完整。要求:请在程序中的横线处填写正确的内容,使其能正确运行,但不能修改程序中的其他部分和控件属性。最后用原来的文件名保存工程文件和窗体文件。题目提供的源程序Dim stepy As Integer 纵向移动增量Dim stepx As Integer 横向移动增
13、量Const LEFT_BUTTON=1Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)Dim x0 As Integer, y0 As Integer, a As Single, radius As Integerradius=Shape1.Width/2 圆的半径If Button=LEFT_BUTTON Thenx0=Shape1.Left+radius 圆心的 x 坐标y0=Shape1.Top+radius 圆心的 y 坐标If x=x0 Thenstep
14、y=Sgn(y-y0)*50stepx= (1) Elsea=(y-y0)/(x-x0) 斜率stepx=Sgn(x-y0)*50(2) =a * stepxIf Abs(stepy)Abs(stepx) Thenstepy=Sgn(y-y0)*50stepx=stepy/aEnd IfEnd If(3) =TrueElse(4) =FalseEnd IfEnd SubPrivate Sub Timer1_Timer()Shape1.Move Shape1.Left+stepx, Shape1.Top+ (5) End Sub(分数:30.00)_正确答案:(操作步骤第 1 步:打开工程文件
15、sjt5.vbp。第 2 步:分析并编写程序。第 3 步:调试、运行并保存程序。1Sgn(x-x0)*50 2stepy 3Timer1.Enabled 4Timer1.Enabled 5stepy)解析:解析 可以使用控件的 Move 方法或改变其 Left 和 Top 属性来实现控件的移动。本题中首先根据鼠标单击位置和实心圆当前位置之间的关系决定移动的步长 stepx 和 stepy,可能是直线运行,也可能是斜线运动;移动步长可为正,也可能为负。其中用到了一个关键函数 sgn(),sgn(x)函数可以检测 x 的正负,如果 x 为正数,则函数值为 1;如果 x 为负数,则函数值为-1;如果 x 为 0,则函数值为 0。例如:在圆的右侧单击时,xx0,sgn(x-x0)=1,计算出 stepx 的值为正,圆会向右移动。具体的移动由 Timer1_Timer 事件过程完成,Form_MouseDown 事件过程负责控制 Timer1 是否有效以及Stepx 和 Stepy 的计算。