第5章 数组和用户自定义类型
一. 例题与解析
(1)在窗体上画一个名称为Command1的命令按钮,然后编写如下代码: Option Base 1
Private Sub Command1_Click()
d = 0: c = 10
x = Array(10, 12, 21, 32, 24) For i = 1 To 5 If x(i) > c Then
d = d + x(i) c = x(i) Else
d = d - c End If Next i Print d End Sub
程序运行后,单击命令按钮,则窗体上的输出结果为 。
A)89 B)99 C)23 D)77 【答案】C
【解析】语句Option Base 1使得数组的下标从1开始,因此,语句x = Array(10, 12, 21, 32, 24)使得数组x各元素的值分别为:x(1)=10,x(2)=12,x(3)=21,x(4)=32,x(5)=24。当i为1时,x(i)>c的值为假,执行语句d=d-c,使得d的值为-10;i为2时,x(i)>c的值为真,执行语句d=d+x(i)和c=x(i),使得d和c的值分别为2和12;i为3时,x(i)>c的值为真,执行语句d=d+ x(i)和c=x(i),使得d和c的值分别为23和21; i为4时,x(i)>c的值为真,执行语句d=d+x(i)和c=x(i),使得d和c的值分别为55和32; i为5时,x(i)>c的值为假,执行语句d=d-c,使得d的值为55-32=23。
(2)在窗体画一个名称为Text1的文本框和一个名称为Command1的命令按钮,然后编写如下事件过程:
Private Sub Command1_Click() Dim array1(10, 10) As Integer Dim i, j As Integer For i = 1 To 3 For j = 2 To 4 array1(i, j) = i + j Next j Next i
Text1.Text = array1(2, 3) + array1(3, 4) End Sub
程序运行后,单击命令按钮,在文本框中显示的值是 。
A)12 B)13 C)14 D)15 【答案】A
【解析】根据程序,i=1时,j的值分别为2、3、4,则array(1,2)=3,array(1,3)=4,array(1,4)=5;i=2时,j的值分别为2、3、4,则array(2,2)=4,array(2,3)=5,array(2,4)=6;i=3时,j的值分别为2、3、4,则array(3,2)=5,array(3,3)=6,array(3,4)=7。因此文本框内显示的值应该为12。
(3)设有如下程序:
Private Sub Command1_Click() Dim a
Dim i As Integer
a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) For i = 0 To 3 Print a(5 - i); Next End Sub
程序运行后,单击命令按钮,则在窗体上显示的是 。 A)4 3 2 1 B)5 4 3 2 C)6 5 4 3 D)7 6 5 4 【答案】C
【解析】数组a初始化后,数组各元素的值分别是: a(0)=1,a(1)=2,a(2)=3,a(3)=4,a(4)=5,a(5)=6,a(6)=7,a(7)=8,a(8)=9。 For循环内的Print语句在同一行输出元素a(5)、a(4)、a(3)、a(2)的值,即6、5、4、3。
(4)用下面语句定义的数组的元素个数是 。
Dim A(-3 To 5) As Integer A)6 B)7 C)8 D)9 【答案】D 【解析】在声明数组的同时指定数组下标下界(如本例的-3)和下标上界(如本例的5),则数组A的元素分别是A(-3)、A(-2)、A(-1)、A(0)、A(1)、A(2)、A(3)、A(4)、A(5),共9个元素。
(5)设有如下数组声明语句,则下列对数组元素的引用中错误的是 。 Dim A(5) A)A(0)=1.57 B)A(6)=12 C)A(5)=\ D)A(1)=True 【答案】B
【解析】在声明数组时,没有指定数组下标下界,系统默认的下界值是0,则数组A的元素应该是A(0)、A(1)、A(2)、A(3)、A(4)、A(5)。使用A(6)会产生数组下标越界的错误。 另外,在本题中声明数组A时省略了数据类型,则系统默认为Variant类型,即数组的每个元素可以存放不同类型的数据。 (6)运行下列程序,单击窗体,则运行结果是 。
Option Base 1
Private Sub Form_Click() Dim a(10) For i = 1 To 10
a(i) = 10 - i + i Mod 2 Next i
For i = 10 To 1 Step -2
Print a(i); Next i End Sub A) 0 2 4 6 8 B) 8 6 4 2 0
C) 1 3 5 7 9 D) 9 7 5 3 1
【答案】A 【解析】本题要注意两点:第一个For语句的循环体有一条a(i) = 10- i + i Mod 2 语句,完成数组元素的生成;另外,第二个For语句的参数是10 To 1 Step -2,逆向间隔输出。计算数组元素中Mod运算符优先,当i是奇数时,i Mod 2的值为1,当i是偶数时,i Mod 2的值为0,10-i在循环中得到9 8 7,6,5,4,3,2,1,0,当i是奇数时加1,因此a数组中的 数是10,8,8,6,6,4,4,2,2,0,最后逆向间隔输出,输出的结果是0,2,4,6,8。 (7)运行下列程序,单击窗体,则运行结果是 。
Option Base 1
Private Sub Form_Click() Dim a
a = Array(1, 5, \ For i = 1 To 3 Print a(i); Next i End Sub
A) 1 5 abcde B) 1 5 \C) 出错信息 D) 1
5
abcde 【答案】A 【解析】a是变体变量,使用Array函数进行数组初始化时,数组的各个元素类型可以不同;并且字符串输出是不带定界符(一对西文双引号)。
(2)设窗体上有一个列表框控件List1,且其中含有若干列表项。则以下能表示当前被选中的列表项内容的是 。 A) List1.List B) List1.ListIndex C) List1.Index D) List1.Text 【答案】D
【解析】列表框的Text属性的值是最后一次选中的列表项的文本;ListIndex属性的值是最后一次选中的列表项的Index值;List属性和Index属性均为数组。因而本题的正确答案是选项D。
(3)为了清除列表框中的所有内容,应使用的方法是 。 A)Cls B)Clear C)Remove D)RemoveItem 【答案】B
【解析】Cls和Remove不是列表框的方法;Clear方法用来删除列表框中的所有项目;RemoveItem方法从列表框删除指定项目。
(15)设置组合框的样式,可用的属性是 。
A)BackStyle B)BorderStyle C)Style D)Sorted
【答案】C 【解析】组合框没有BackStyle和BorderStyle属性。组合框的Sorted属性控制列表项是否按序排列,若设置为True按升序排列,否则按加入先后顺序排列。组合框的Style属性控制组合框的样式,0为下拉式组合框,1为简单组合框,2为下拉式列表(只能选择不能输入)。
二.练习题
1.单项选择题
(1)下面程序运行后,单击窗体,窗体输出为 。
Option Base 1
Private Sub Form_Click()
x = Array(10, 25, 15, 20, 25, 25, 50, 40, 50, 60) p = x(1)
For i = 2 To 10 If x(i) > p Then
p = x(i) s = s + p
End If Next i Print p; s End Sub
A) 10 10 B) 60 70 C) 60 135
D) 10 65
(2)在窗体上放一个命令按钮,并编写如下程序,运行后单击命令按钮,则输出结果
是 。
Private Sub Command1_Click( ) Dim A
A = Array(1, 2, 3, 4) S = 0
For I = 1 To 2 S = S + A(I) Print S; Next I End Sub A)2 5 B)1 3 C)5 D)4 (3)在窗体上画一个名称为Command1的命令按钮,然后编写如下程序: Private Sub Command1_Click() Dim i, j As Integer
Dim a(10, 10) As Integer
For i = 1 To 3 For j = 1 To 3
a(i, j) = (i - 1) * 3 + j Print a(i, j); Next j Print Next i End Sub
程序运行后,单击命令按钮,窗体上显示的是 。 A) 1 2 3 B) 2 3 4 C) 1 4 7 D) 1 2 3 2 4 6 3 4 5 2 5 8 4 5 6 3 6 9 4 5 6 3 6 9 7 8 9
(4)设有如下程序
Private Sub Form_Click() Dim abc() As Integer n1 = Int(10 * Rnd())
n2 = Int(10 * Rnd() + 50) ReDim abc(n1 To n2)
Print LBound(abc); UBound(abc) End Sub
运行程序后,多次单击窗体,则输出结果范围最大的两个数是 A)10 60 B)10 59 C)0 59 D)0 60 (5)下面四个选项中,正确的用户定义类型是 。
A) Dec abc B) Dec abc xm As String xm As String * 4 nl As Integer nl As Integer xb As Boolean xb As Boolean End Dec End Dec C) Type abc D) Type abc xm As String xm As String * 4 nl As Integer nl As Integer xb As Boolean xb As Boolean End Type End Type (6)设有如下程序 Option Base 1
Private Sub Form_Click()
a = Array(\张\刘\郝\陈\王\ w = a(1)
For i = 1 To 4 a(i) = a(i + 1) Next i a(5) = w
For i = 5 To 1 Step -1 Print a(i); Next i