'数字0~9的Click事件
Private Sub cmdnum_Click(Index As Integer)
If Flag Then lblscreen.Caption = "": Flag = False
lblscreen.Caption = lblscreen.Caption + cmdnum(Index).Caption
End Sub
'CE的Click事件
Private Sub cmdreset_Click()
lblscreen.Caption = ""
Num1 = 0
Num2 = 0
End Sub
'=的Click事件
Private Sub cmdresult_Click()
Dim result As Single
Num2 = Val(lblscreen.Caption)
Flag = True
Select Case Cul
Case 0: result = Num1 + Num2
Case 1: result = Num1 - Num2
Case 2: result = Num1 * Num2
Case 3
If Num2 <> 0 Then
result = Num1 / Num2
Else
MsgBox "出错!被0除!"
End If
End Select
If result \ 1 <> result Then 'result不是整数时
lblscreen.Caption = Format(result, "0.#")
Else
lblscreen.Caption = Str(result)
End If
End Sub
'±的Click事件
Private Sub cmdsign_Click()
If lblscreen.Caption <> "" Then
If InStr(lblscreen.Caption, "-") = 0 Then
lblscreen.Caption = "-" + lblscreen.Caption
Else
lblscreen.Caption = _
Right(lblscreen.Caption, Len(lblscreen.Caption) - 1)
End If
End If
End Sub
1.数组函数
(1)Array函数
Array函数是将元素列表中的数据赋给一个Variant型数组的数组元素。
格式:Array (元素列表)
说明:
l 元素列表由各种类型的数据组成,这些数据用逗号分隔。如果元素列表中不包含任何元素,则该函数创建一个元素个数为0的空数组。
l 没有被声明为数组的Variant型变量也可以表示数组。除了定长字符串以及用户自定义类型数据之外,Variant变量可以表示任何类型的数组。
(2)Lbound(下界)函数
返回数组可用的最小下标,其中维数表示求哪一维的下界。
格式:Lbound (数组名[,维数])
说明:变量参数为数组变量名。【维数】是可选参数,可以是任何有效的数值表达式,表示求哪一维的下界。1表示第一维,2表示第二维,依次类推。如果省略该参数,则默认为1。
(3)Ubound(上界)函数
返回数组可用的最大下标,其中维数表示求哪一维的上界。
格式:Ubound (数组名[,维数])
2.For Each…Next语句
For Each…Next语句与For…Next循环语句类似,它是对数组中的每一个数组元素重复执行同一组语句序列。如果不知道一个数组有多少个数组元素,使用For Each…Next语句是非常方便的。
格式:
For Each 变量 In 数组
循环体
Next 变量
说明:
(1)变量是一个Variant类型变量,代表数组中的每个元素。
(2)数组是一个数组名,没有括号和上下界。
【实例4.25】 用For Each…Next语句求1+2+3+…+100的值。
打开代码编辑窗口,在其中输入如下代码:
Private Sub Form_Click()
Dim x(100), a
Dim i As Integer, s As Integer
For i = 1 To 100
x(i) = i
Next i
For Each a In x()
s = s + a
Next
Print s
End Sub
【实例4.26】 求矩阵A中每一行的最小值以及最小值所在的列。
程序界面如图4-37所示。打开代码编辑窗口,在其中输入如下代码:

图4-37 程序运行界面
Const N = 4
Dim A(N, N) As Integer
Private Sub cmdLinemin_Click()
Dim i As Integer, j As Integer, k As Integer
For i = 1 To N
k = 1
For j = 2 To N
If A(i, j) < A(i, k) Then k = j
Next j
Print "第" & i & "行的第" & k & "列元素" & A(i, k) & "为最小值"
Next i
End Sub
【实例4.27】 有n个人围成一圈,他们的编号为1~n,第一个人从1开始报数,凡报到3的人出列,后一个继续从1开始报数,报到m的出列,如此下去,直到最后一个人出列为止,输出依次出列的人的序号。程序示意图如图4-38所示。

图4-38 示意图
令数组的元素值和编号相等,k为出列人数,m为每次的报数,当m=3时,当前编号对象出列,并且出列后将元素值设置为0,这样在继续报数时将其跳过。
打开代码编辑窗口,在其中输入如下代码:
Private Sub Form_Click()
Dim a() As Integer, n As Integer, i As Integer
Dim k As Integer, s As Integer, m As Integer
n = Val(InputBox("请输入人数"))
ReDim a(n)
For i = 1 To n
a(i) = i
Next i
Print "依次出列的顺序:"
Do While k < n
s = s Mod n + 1
If a(s) <> 0 Then
m = m + 1
If m = 3 Then
Print a(s);
a(s) = 0
k = k + 1
m = 0
End If
End If
Loop
End Sub
【实例4.28】 随机产生10个1~20间各不相同的数存放在数组中。
本题中主要需要解决【各不相同】,改变随机数产生的公式并不能保证产生的数据不相同,因此,必须通过比较判断实现。具体实现的方法是:逐个产生随机数,并和之前产生的数据比较,若有与之相同的数则重新产生,若没有则放入数组相应位置。
打开代码编辑窗口,在其中输入如下代码:
Private Sub Form_Click()
Dim a(10) As Integer, x As Integer
Dim i As Integer, j As Integer
Randomize
For i = 1 To 10
x = Int(20 * Rnd) + 1
For j = 1 To i - 1
If x = a(j) Then Exit For
Next j
If j = i Then 'x与前面产生的数都不相等
a(i) = x
Else
i = i – 1 '使For循环的循环变量i在进入下一次循环时跟本次循环相等
End If
Next i
For i = 1 To 10
Print a(i);
Next i
End Sub
【实例4.29】 A、B均为N×N矩阵,求矩阵C=A+B。
矩阵的加法运算规则是:两个大小一样的矩阵,相同位置元素之和为结果矩阵中的对应位置的元素。如:
已知矩阵A和B,则C矩阵的运算过程代码如下:
Const N = 4
Dim A(N, N) As Integer
Dim B(N, N) As Integer
Dim C(N, N) As Integer
Private Sub GetC_Click()
Dim i As Integer, j As Integer
Print "C=A+B"
For i = 1 To N
For j = 1 To N
C(i, j) = A(i, j) + B(i, j)
Print C(i, j);
Next j
Next i
End Sub
程序运行结果如图4-39所示。

图4-39 程序运行界面
【实例4.30】 输入一串字符,统计各字母出现的次数,不区分大小写。
统计26个英文字母出现的次数,必须声明一个具有26个元素的数组,每个数组元素的下标表示对应的字母。从输入的字符串中逐一取出字符,并将其转换成大写字母,再进行判断。
程序界面及运行结果如图4-40所示。打开代码编辑窗口,在其中输入如下代码:

图4-40 程序运行结果
Private Sub Command1_Click()
Dim a(1 To 26) As Integer
Dim i As Integer, j As Integer, c As String * 1, tot As Integer
tot = Len(Text1)
For i = 1 To tot
c = UCase(Mid(Text1, i, 1))
If c >= "A" And c <= "Z" Then
j = Asc(c) - 65 + 1
a(j) = a(j) + 1
End If
Next i
For j = 1 To 26
If a(j) > 0 Then
Label2.Caption = Label2.Caption & Chr(j + 64) & "=" & a(j) & " "
End If
Next j
End Sub
【实例4.31】 设有一个5×5的方阵,其中元素是由计算机随机生成的小于100的整数,求:
(1)对角线上元素只和。
(2)对角线上元素之积。
(3)方阵中最大的元素。
方阵中的元素可以用一个二维数组来表示。利用单层循环可以计算出对角线上元素的和、积,方阵中的最大元素则需要利用双层的循环计算。
程序界面如图4-41所示,程序运行后单击【计算】按钮的结果如图4-42所示。

图4-41 程序界面 图4-42 程序运行结果
打开代码编辑窗口,在其中输入如下代码:
Private Sub Form_Load()
List1.Clear
Dim p As String
Randomize
For i = 1 To 5
p = ""
For j = 1 To 5
a(i, j) = Int(Rnd * 99) + 1
p = p & Format(a(i, j), "!@@@")
Next