在窗体上画一个名称为Command1的命令按钮,然后编写以下程序代码: Option Base 1 Private Sub Command1_Click() Dim data As Variant, m As Integer, n As Integer

admin2015-06-30  17

问题 在窗体上画一个名称为Command1的命令按钮,然后编写以下程序代码:
Option Base 1
Private Sub Command1_Click()
  Dim data As Variant, m As Integer, n As Integer
  m = Val(InputBox("输入"))
  data = Array(-2, -1, 0, 1, 2)
  Call ser(data, m, n)
  Print n
End Sub
Private Sub ser(d, a, b)
  Dim m As Integer, n As Integer, k As Integer
  Dim i As Integer
  m = LBound(d): n = UBound(d)
  k = (m + n) / 2
  Do While m < n And d(k) <> a
        If a < d(k) Then n = k - 1
        If a > d(k) Then m = k + 1
        k = (m + n) / 2
  Loop
  If d(k) = a Then b = k Else b = -1
End Sub
程序运行过程中单击命令按钮Command1,在出现的输入对话框中输入"-1"并回车后,则程序的输出结果为

选项 A、-1
B、1
C、2
D、-2

答案C

解析 InputBox函数可以产生一个对话框,作为输入数据的界面,等待用户输入数据,并且返回输入的内容。类型转换函数Val(s),返回值为字符串表达式s中所包含的数值,若遇到字母(指数符号除外)则终止转换。m = Val(InputBox("输入"))=Val(-1) = -1。变体型数组data。用Call语句调用Sub过程。如果形参前面有关键字ByVal,则该参数以传值方式传送。默认是按地址传递,data,m,n把地址传给了形参d,a,b后,d,a,b值的变化会引起相应实参值的变化。在过程ser中,UBound函数返回为指定的数组维可用的最大下标,LBound函数返回为指定的数组维可用的最小下标。程序开头定义了Option Base 1这时定义一维数组下标从1开始;故m = LBound(d)=1,n= UBund(d)=5。k=(m+n)/2=6/2=3。Do While…Loop,当程序开始执行时,先计算循环"条件"值,当条件为假时结束循环,否则执行循环体。while m a,第一次执行,循环条件1<5 And d(3)< >-1,其中d(3)=0,a=-1,a-1为假,结束循环,再执行if ……Then……else语句,d(k)=d(2)=-1,故b=k=2,对应的实参为n,所以n=2。故本题正确答案为C。
转载请注明原文地址:https://kaotiyun.com/show/eNQp777K
0

最新回复(0)