习题五 P123
1. 2. 3. 4. 5. 6. 7. 8. 参考答案:
1.在VB6.0中,数组的下界默认为0,用什么语句可以重新定义数组的默认下界? 答:Option Base 语句,如:Option Base n
2.要分配存放12个元素的整型数组,下列数组声明(下界若无,按默认规定)哪些符合要求?
(1)n = 12
Dim a(1 To n) As Integer (2)Dim a%() n = 11 ReDim a(n) (3)Dim a%[2,3]
(4)Dim a(1, 1, 2) As Integer (5)Dim a%(10)
ReDim a(1 To 12) (6)Dim a!()
ReDim a(3, 2) As Integer (7)Dim a%(2, 3)
(8)Dim a(1 To 3, 1 To 4) As Integer 答: (2),(4),(7),(8)符合要求。
(1)静态数组在声明数组时的下标必须是常数,不能出现变量 (3)不能使用方括号
(5) 已声明了的静态数组,不能再用重定义语句来重定义静态数组的大小 (6)可以反复地改变数组的元素以及维数的数目,但是不能将一个数组定义为某种数据类型之后,再使用ReDim将该数组改为其他数据类型。
3. 程序运行时显示“下标越界”可能产生的错误有哪几种情况? 答:引用了不存在的数组元素.
下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查数组的声明以确认其上界和下界。若使用的是重新指定范围的数组,应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。
声明数组时没有指定元素的数目 例如:Dim a%() a(8)=5
Visual Basic 并不会将没有指定范围的数组自动设为 0 – 8,相反必须使用 Dim 或 ReDim 来指定数组中元素的数目。
4.已知下面的数组声明,写出它的数组名、数组类型、维数、各维的上下界、数组的大小、并按行的顺序列出各元素。
Dim a(-1 To 2,3) As Single
答:数组名为a、数组类型为单精度、二维、各维的下界分别为-1和0、上界分别为2和3、数组的大小4x4共16个元素,各元素排列顺序见表:
a(-1,0) a(0,0) a(1,0) a(2,0) a(-1,1) a(0,1) a(1,1,) a(2,1) a(-1,2) a(0,2) a(1,2) a(2,2,) a(-1,3) a(0,3) a(1,3) a(2,3)
5.利用随机数生成两个矩阵(数据不一定相同,前者30~70范围、后者101~135)。
?35?33A???47??30674756695266665550??103?13339?? B???11141???38??123115127103109125132134113101?135?? 118??130?要求:
(1)将两个矩阵相加结果放入C矩阵中。 (2)将A矩阵转置。
(3)统计C矩阵中最大值和下标。
(4)以下三角形式显示A矩阵、上三角形式显示B矩阵。
(5)将A矩阵的第一行与第三行对应元素交换位置,即第一行元素放到第三行;第三行元素放到第一行。
(6)求A矩阵两条对角线元素之和。
(7)将A矩阵按列的次序把各元素放入一维数组D中,显示结果。
答:Dim a(4, 4) As Integer, b(4, 4) As Integer, c(4, 4) As Integer Randomize
Print \矩阵A为:\For i = 1 To 4 For j = 1 To 4
a(i, j) = Int(Rnd * 41 + 30) Print Tab(5 * j); a(i, j); Next j Print Next i
Print \矩阵B为:\For i = 1 To 4 For j = 1 To 4
b(i, j) = Int(Rnd * 35 + 101) Print Tab(5 * j); b(i, j); Next j Print Next i
(1)两个矩阵能相加的条件是他们的行数、列数相同,利用两重循环将他们相加即可。 For i= 1 to 4
For j=1 to 4
c(i,j)=a(i,j)+b(i,j) Next j Next i
(2)矩阵转置是将矩阵的行变为列、列变为行。 For i= 1 To 4 For j=i+1 To 4 t=a(i,j)
a(i,j)=a(j,i) a(j,i)=t Next j Next i
(3)因为C是两维数组,所以最大值的下标也有两个,即行下标和列下标。 Dim Max%, Maxi%, Maxj%
Max = c(1, 1): Maxi = 1: Maxj = 1 For i = 1 To 4 For j = 1 To 4
If c(i, i) > Max Then
Max = c(i, j): Maxi = i: Maxj = j End If Next j Next i
(4)输出下三角元素
For i = 1 To 4 For j = 1 To i
Print a(i, j); Spc(2); Next j Print Next i
输出上三角元素 For i = 1 To 4 For j = i To 4
Print Tab(j * 5); b(i, j); Next j Print Next i
(5)For j = 1 To 4
t = a(1, j): a(1, j) = a(3, j): a(3, j) = t
Next j
(6)对角线有主对角线和副对角线。 Sum = 0
For i = 1 To 4
Sum = Sum + a(i, i) + a(i, 5 - i)
Next i
(7)关键要找出两维数组各元素和一维数组各元素的关系。 Dim a(1 to 4, 1 to 4), d(1 to 16) ??
For j = 1 To 4 For i = 1 To 4
k =( j-1) * 4 + i d(k) = a(i, j) Print d(k); Next i Next j
6. 声明一个一维字符类型数组,有20个元素,每个元素最多放10个字符,要求:
(1)由随机数形成小写字母构成的数组,每个元素的字符个数由随机数产生,范围1~10. (2)要求将生成的数组分4行显示,规定每个元素宽度为10。 (3)显示生成的字符数组中字符最多的元素。 答:(1)
Dim a(1 To 20) As String * 10, i%, j%, k%, n%, s$ ,max% Randomize
For i = 1 To 20
n = Int(Rnd * 10 + 1) s = \
For j = 1 To n
s = s & Chr(Int(Rnd * 26 + 97)) Next j a(i) = s Next i (2) k=0
For i=1 to 20 k = k + 1
Print Tab((k - 1) * 10 + 1); a(i); If k = 5 Then k = 0: Print Next i (3)
max=Len(Trim(a(1))) For i = 2 To 20
If Len(Trim(a(i))) > max Then max = Len(Trim(a(i))) Next i Print max
For i = 1 To 20
If Len(Trim(a(i))) = max Then Print a(i); Spc(3); End If Next i
7. 简述列表框和组合框的异同处。 答:相同处都是可存放字符串;不同处在于组合框是文本框和列表框的组合,可以输入内容,但要通过AddItem 方法添加;列表框只能选择项目,不能直接输入内容。
8. 列表框或组合框中选定的项目、总项目数的属性分别是什么?
答:表示选中的内容的属性是Text;总项目数的属性为 ListCounts。