2024年3月18日发(作者:丘清俊)
第5章 数组与记录
5.1 填空题
1.若要定义一个包含10个字符串元素,且下界为1的一维数组s,则数组说明语句为
( )。
答案:Dim s(1 To 10) As String
2.若要定义一个元素为整型数据的二维数组a,且第一维的下标从0到5,第二维下
标从-3到6,则数组说明语句为( )。
答案:Dim a(0 To 5,-3 To 6) As Integer
3.如果数组元素的下标值为实数,则VB系统会按( )进行处理。
答案:四舍五入原则
4.数组元素个数可以改变的数组称为( );数组元素可以存放不同类型数据的数组
称为( )。
答案:可调数组、可变类型数组
5.数组刷新语句用于( )。若被刷新的数组是数值数组,则把所有元素置( );
若被刷新的数组为字符串数组,则把所有元素置( )。
答案:清除指定数组内容、0、空字符串
10.控件数组是由一组类型和( )相同的控件组成,共享( )。
答案:名字、同一个事件过程
11.控件数组中的每一个控件都有唯一的下标,下标值由( )属性指定。
答案:Index
12.建立控件数组有两种方法:( )和( )。
答案:在设计阶段通过相同Name属性值来建立、在程序代码中使用Load方法
5.2 选择题
1.下列一维数组说明语句错误的是( )。
a) Dim b(100) AS Double
b) Dim b(-5 To 0) AS Byte
c) Dim b(-10 To –20) AS Integer
d) Dim b(5 To 5) AS String
答案:c
2.若有数组说明语句为:Dim a(-3 To 8), 则数组a包含元素的个数是( )。
a) 5 b) 8 c) 11 d) 12
答案:d
3.设有数组说明语句:Dim c(1 To 10),则下面表示数组c的元素选项中( )是
错误的。
a) c(i-1) b) c(5+0.5) c) c(0) d) c(10)
答案:c
4.下列数组说明语句中正确的是( )。
a) Dim a(-1 To 5,8)AS String
b) Dim a(n,n)AS Integer
c) Dim a(0 To 8,5 To –1)AS Single
d) Dim a(10,-10)AS Double
答案:a
5.设有数组说明语句:Dim b(-1To2,-2To2),则数组b中元素的个数是( )。
a) 12 b) 15 c) 16 d) 20
答案:d
6.设有数组说明语句:Dim c(-1To1,1To5),则下列表示数组c的元素选项中
( )是正确的。
a) c(i+j) b) c(i)(j) c) c(i+1,j-1) d) c(1,0)
答案:c
7.若有数组说明语句:Dim a()AS Integer,则a被定义为( )。
a)定长数组 b)可调数组 c)静态数组 d)可变类型数组
答案:b
8.若有数组说明语句:Dim t(1 To 10)AS Variant,则t被定义为(
a)数值数组 b)可调数组 c)字符串数组 d)可变类型数组
答案:d
9.下面选项中,错误的是( )。
a) Dim s As variant :s = Array("one ", " two ", " Three ")
b) Dim b :b=Array(1,2,3)
c) Dim b As Integer :b=Array(1,2,3)
d) Dim b As variant :b=Array(1,2,3)
答案:c
10.若有以下说明语句
Type employee
num As Integer
salary As Single
End Type
Dim programmer As employee
则下面表示记录变量programmer的 成员Salary正确的是( )。
a) programmer→salary b) .salary
c) mmer d)
答案:d
11.已知有说明语句
Type dat
year As Integer
month As Integer
day As Integer
End Type
Type emp
no As Integer
name As String﹡10
sex As String*1
birthday As dat
salary As single
End Type
Dim programmer As emp
。 )
并假设变量programmer所表示职工的出生日期是“1978年10月1日”,则下列正确的赋值
语句是( )。
a) year=1978:month=10:day=1
b) =1978:=10: =1
c) =1978:=10 :=1
d)=1978:=10:
=1
答案:d
12.假设有第11题的说明语句,则下列With语句正确的是( )。
a) with progammer
no=1000:name= "张勇" : sex= "男"
with birthday
year=1978 :month=10 :day=1
End with
salary=2800
End with
b) with programmer
.no=1000:.name= "张勇" :.sex="男"
with .birthday
.year=1978 :.month=10 :.day=1
End with
.salary=2800
End with
c) with programmer
.no=1000 :.name="张勇" :.sex="男"
.=1978 :.=10 :.=1
.salary=2800
End with
d) with programmer,birthday
.no=1000:.name="张勇" :.sex="男"
.year=1978 :month.=10 :day.=1
.salary=2800
End with
答案:c
5.3 解答题
1.使用关键字Dim,ReDim和Static定义的数组分别称为什么数组?它们各有什么特
点?
答:使用关键字Dim说明的数组称为定长数组。说明定长数组时,应同时确定维数和下
标范围。VB编译程序在编译时为定长数组分配相应的内存区域,并且在应用程序运行期间,
定长数组都占有这块内存区域。
使用关键字ReDim说明的数组称为可调数组或动态数组。若在程序运行前,不能确定数
组的大小或在程序运行时需要改变数组的大小,则该数组应定义为可调数组。在应用程序运
行期间,可调数组占用的内存区域可能会改变。
使用Static说明的数组称为静态数组。在整个应用程序运行期间,系统分配固定内存
区域。定义该数组的过程执行结束时,数组的值仍保留,该过程再次被调用时,数组的值为
上次过程调用结束时的值。而定长数组和可调数组则不然,定义它们的过程执行结束时,它
们的值不保留。
5.4 阅读程序,并写出执行结果
1.
Private Sub Command1_Click()
Dim f(10) As Integer
f(0) = 1: f(1) = 1
For i = 2 To 10
f(i) = f(i - 2) + f(i - 1)
Next i
For i = 0 To 10
If i Mod 4 = 0 Then Print
Print f(i),
Next i
End Sub
答案:
1 1 2 3
5 8 13 21
34 55 89
2.
Private Sub Command1_Click()
Dim s(1 To 6) As Integer
For i = 1 To 6
s(i) = i
Next i
For i = 1 To 3
For j = 4 To 6
t = s(i) :s(i) = s(j) :s(j) = t
Next j
Next i
For i = 1 To 6
Print s(i);
Next i
End Sub
答案:
6 5 4 3 2 1
3.
Private Sub Command1_Click()
Dim a(1 To 9) As Integer
Dim b(1 To 3, 1 To 3) As Integer
Dim i%, j%
For i = 1 To 9
a(i) = i
Next i
For i = 1 To 3
For j = 1 To 3
b(i, j) = a(i * j)
If j <= i Then Print b(i, j),
Next j
Next i
End Sub
答案:
1
2 4
3 6 9
4.
Private Sub Command1_Click()
Dim a(1 To 5, 1 To 5) As Integer, i%, j%
For i = 1 To 5
For j = 1 To 5
If i <= j Then a(i, j) = 1 Else a(i, j) = i - j + 1
Next j
Next i
For i = 1 To 5
For j = 1 To 5
Print a(i, j);
Next j
Next i
End Sub
答案:
1
2
3
4
5
1
1
2
3
4
1
1
1
2
3
1
1
1
1
2
1
1
1
1
1
5.5编程题
2.编一程序,使用随机函数产生10个互不相同的两位整数存放到一维数组中,并输出
该数组,然后求这组数中的最大值及最大值在数组中的位置。
解答:
(1)界面设计和属性设置
在窗体上建立两个命令按钮。窗体和命令按钮的主要属性设置如表3.5.2所示。
表3.5.2 属性设置
控件名称
Form1
属性名
Caption
属性值
求两两不相同随机
数最大值及其位置
Command1 Caption 开始
Command2 Caption 结束
(2)程序代码
Private Sub Command1_Click()
Cls
Dim a(1 To 10), i%, j%, max%, p%
Randomize
For i = 1 To 10
l: a(i) = Int((90 * Rnd + 10))
For j = 1 To i - 1
If a(i) = a(j) Then GoTo l
Next j
Next i
Print: Print
Print Tab(15); "产生的随机数为:"
For i = 1 To 10
Print "a("; i; ")="; a(i),
If i Mod 4 = 0 Then Print
Next i
max = a(1): p = 1
For i = 2 To 10
If a(i) > max Then max = a(i): p = i
Next i
Print: Print
Print Tab(15); "最大值为:"; max
Print Tab(10), "最大值所在数组元素的下标为:"; p
End Sub
Private Sub Command2_Click()
End
End Sub
(3)运行情况
运行程序后,屏幕出现用户界面。单击标题为“开始”的命令按钮,系统执行相应的
Click事件过程。执行结果如图3.5.2所示。单击标题为“结束”的命令按钮,结束程序的
执行。
图3.5.2 执行结果
4.给定两组已按升序排列好的整型数据,编写一个程序把它们合并为一组仍按升序排
列的数据。
解答:
(1)界面设计和属性设置
在窗体上建立两个命令按钮。窗体和命令按钮的主要属性设置如表3.5.4所示。
表3.5.4 属性设置
控件名称
Form1
属性名
Caption
属性值
把两个升序数组合并
为一个升序数组
Command1
Command2
Caption
Caption
合并
结束
(2)程序代码
Dim a As Variant, b As Variant, c%(0 To 11)
Private Sub Form_Activate()
Dim i%
a = Array(1, 2, 7, 8)
Print: Print: Print
Print Tab(5); "第一个升序数组:";
For i = 0 To 3
Print a(i);
Next i
Print: Print
b = Array(3, 4, 8, 8, 9, 10, 12, 12)
Print Tab(5); "第二个升序数组:";
For i = 0 To 7
Print b(i);
Next i
End Sub
Private Sub Command1_Click()
Dim i%, j%, k%
i = 0: j = 0: k = 0
While i < 4 And j < 8
If a(i) > b(j) Then
c(k) = b(j): k = k + 1: j = j + 1 '比较a和b中的元素,把较大的元素移到
Else 'c中,直到其中一个数组搬空为止
c(k) = a(i): k = k + 1: i = i + 1
End If
Wend
While i < 4
c(k) = a(i): i = i + 1: k = k + 1 '把a中剩余的元素搬到c中
Wend
While j < 8
c(k) = b(j): j = j + 1: k = k + 1 '把b中剩余的元素搬到c中
Wend
Print: Print
Print Tab(5); "合并后的升序数组:"
Print Tab(8);
For i = 0 To 11
Print c(i);
Next i
End Sub
Private Sub Command2_Click()
End
End Sub
(3)运行情况
运行程序后,系统执行
Form_Activate
事件过程,屏幕出现用户界面,并显示两个升序数
组。单击标题为“合并”的命令按钮,系统执行相应的Click事件过程。执行结果如图3.5.4
所示。单击标题为“结束”的命令按钮,结束程序的执行。
图3.5.4 执行结果
5.从键盘上输入一个正整数,判别它是否为回文数。所谓回文数是指正读和反读都一
样的数。例如,123321是回文数。
解答:
(1)界面设计和属性设置
在窗体上建立两个命令按钮。窗体和命令按钮的主要属性设置如表3.5.5所示。
表3.5.5 属性设置
控件名称
Form1
属性名
Caption
属性值
判别一个整数是否
为回文数
Command1
Command2
Caption
Caption
开始
结束
(2)程序代码
Private Sub Command1_Click()
Cls
Dim num As Long, n As Long, i%, k%, f%, b%(10)
num = InputBox("请输入一个整数:")
k = 0: n = num
Do
b(k) = n Mod 10 '把num的各位数字存入数组b中
k = k + 1
n = n 10
Loop While n <> 0
f = 1
For i = 0 To (k - 1) / 2
If b(i) <> b(k - 1 - i) Then f = 0 'num的第i位与第k-1-i位数字不相同时f置0
Next i '说明num不是回文数
Print: Print: Print: Print
If f Then
Print Tab(18); num; "是回文数!"
Else
Print Tab(16); num; "不是回文数!"
End If
End Sub
Private Sub Command2_Click()
End
End Sub
(3)运行情况
运行程序后,屏幕出现用户界面。单击标题为“开始”的命令按钮,系统执行相应的
Click事件过程。在调用InputBox 函数出现对话框时,输入一个整数,例如,1234321。执
行结果如图3.5.5所示。单击标题为“结束”的命令按钮,结束程序的执行。
图3.5.5 执行结果
6. 编一程序,把一个m行n列矩阵中的元素存放到一个二维数组中,并求出该数组的平
均值、最大值和最小值。
解答:
(1) 界面设计和属性设置
在窗体上建立两个命令按钮。窗体和命令按钮的主要属性设置如表3-5-6所示。
表3-5-6 第6题的属性设置
控件名称 属性名 属性值
Form1 Caption 求矩阵的平均值、最小值和
最大值
Command1 Caption 开始
Command2 Caption 结束
(2) 程序代码
Private Sub Command1_Click()
Dim i%, j%, m%, n%, sum!, ave!, max!, min!
Dim a() As Single
m = InputBox("请输入矩阵的行数:")
n = InputBox("请输入矩阵的列数:")
ReDim a(1 To m, 1 To n)
Print Tab(2); "输入的矩阵为:"
For i = 1 To m
Print Tab(15);
For j = 1 To n
a(i, j) = InputBox("输入第" & Str(i) & "行" & "第" & Str(j) & "列元素:")
Print a(i, j);
Next j
Next i
sum = 0
For i = 1 To m
For j = 1 To n
sum = sum + a(i, j) '求和
Next j
Next i
ave = sum / (m * n) '求平均值
max = a(1, 1)
For i = 1 To m
For j = 1 To n
If a(i, j) > max Then max = a(i, j) '求最大值
Next j
Next i
min = a(1, 1)
For i = 1 To m
For j = 1 To n
If a(i, j) < min Then min = a(i, j) '求最小值
Next j
Next i
Print Tab(2); "平均值为:"; ave
Print Tab(2); "最大值为:"; max
Print Tab(2); "最小值为:"; min
End Sub
Private Sub Command2_Click()
End
End Sub
(3)运行情况
运行程序后,需多次调用InputBox 函数。在调用InputBox 函数出现对话框时,输入
矩阵的行数、矩阵的列数和数组元素的值。例如,输入矩阵的行数3、矩阵的列数3和数组
元素的值1、2、3、4、5、6、7、8、9。执行结果如图3.5.6所示。
7. 某城市三个百货公司某个季度销售电视机的情况和价格由如下表格表示,求各个百
货公司的电视机营业额。
牌子
公司
第一百货商店 300 250
240
210
150
200
180
康 佳
TCL
长 虹
第二百货商店 200
第三百货商店 280
牌 子
康 佳
TCL
长 虹
解答:
(1)界面设计和属性设置
价 格
3500
3300
3800
在窗体上建立两个命令按钮。窗体和命令按钮的主要属性设置如表3.5.7所示。
表3.5.7 属性设置
控件名称 属性名 属性值
Form1
Command1
Command2
Caption
Caption
Caption
计算电视机销售额
开始
结束
(2)程序代码
Option Explicit
Private Sub Command1_Click()
Cls
Dim i%, j%, sum!
Dim a%(1 To 3, 1 To 3), p!(3)
Print Tab(23); "各百货公司的销售量"
Print Tab(20); "康佳"; Tab(30); "TCL"; Tab(40); "长虹"
For i = 1 To 3
Print Tab(5); "第" & Str(i) & " 百货公司";
For j = 1 To 3
a(i, j) = InputBox("输入第" & Str(i) & "百货公司" & "第" & Str(j) & "种牌子销售量:")
Print Tab(j * 10 + 10); a(i, j);
Next j
Next i
Print Tab(25); "各种牌子价格"
Print Tab(20); "康佳"; Tab(30); "TCL"; Tab(40); "长虹"
For i = 1 To 3
p(i) = InputBox("输入第" & Str(i) & "种牌号价格:")
Print Tab(i * 10 + 10); p(i);
Next i
Print: Print
For i = 1 To 3
sum = 0
For j = 1 To 3
sum = sum + a(i, j) * p(j)
Next j
Print Tab(10); "第" & Str(i) & "百货公司的销售额为:"; sum; "元"
Next i
End Sub
Private Sub Command2_Click()
End
End Sub
(3)运行情况
运行程序后,屏幕出现用户界面。单击标题为“开始”的命令按钮,系统执行相应的
Click事件过程。在执行的过程中,需多次调用InputBox 函数。在调用InputBox 函数出
现对话框时,按表格中的数据输入每个百货公司销售电视机的数量和各种牌子的价格。执行
结果如图3.5.7所示。单击标题为“结束”的命令按钮,结束程序的执行。
图3.5.7 执行结果
2024年3月18日发(作者:丘清俊)
第5章 数组与记录
5.1 填空题
1.若要定义一个包含10个字符串元素,且下界为1的一维数组s,则数组说明语句为
( )。
答案:Dim s(1 To 10) As String
2.若要定义一个元素为整型数据的二维数组a,且第一维的下标从0到5,第二维下
标从-3到6,则数组说明语句为( )。
答案:Dim a(0 To 5,-3 To 6) As Integer
3.如果数组元素的下标值为实数,则VB系统会按( )进行处理。
答案:四舍五入原则
4.数组元素个数可以改变的数组称为( );数组元素可以存放不同类型数据的数组
称为( )。
答案:可调数组、可变类型数组
5.数组刷新语句用于( )。若被刷新的数组是数值数组,则把所有元素置( );
若被刷新的数组为字符串数组,则把所有元素置( )。
答案:清除指定数组内容、0、空字符串
10.控件数组是由一组类型和( )相同的控件组成,共享( )。
答案:名字、同一个事件过程
11.控件数组中的每一个控件都有唯一的下标,下标值由( )属性指定。
答案:Index
12.建立控件数组有两种方法:( )和( )。
答案:在设计阶段通过相同Name属性值来建立、在程序代码中使用Load方法
5.2 选择题
1.下列一维数组说明语句错误的是( )。
a) Dim b(100) AS Double
b) Dim b(-5 To 0) AS Byte
c) Dim b(-10 To –20) AS Integer
d) Dim b(5 To 5) AS String
答案:c
2.若有数组说明语句为:Dim a(-3 To 8), 则数组a包含元素的个数是( )。
a) 5 b) 8 c) 11 d) 12
答案:d
3.设有数组说明语句:Dim c(1 To 10),则下面表示数组c的元素选项中( )是
错误的。
a) c(i-1) b) c(5+0.5) c) c(0) d) c(10)
答案:c
4.下列数组说明语句中正确的是( )。
a) Dim a(-1 To 5,8)AS String
b) Dim a(n,n)AS Integer
c) Dim a(0 To 8,5 To –1)AS Single
d) Dim a(10,-10)AS Double
答案:a
5.设有数组说明语句:Dim b(-1To2,-2To2),则数组b中元素的个数是( )。
a) 12 b) 15 c) 16 d) 20
答案:d
6.设有数组说明语句:Dim c(-1To1,1To5),则下列表示数组c的元素选项中
( )是正确的。
a) c(i+j) b) c(i)(j) c) c(i+1,j-1) d) c(1,0)
答案:c
7.若有数组说明语句:Dim a()AS Integer,则a被定义为( )。
a)定长数组 b)可调数组 c)静态数组 d)可变类型数组
答案:b
8.若有数组说明语句:Dim t(1 To 10)AS Variant,则t被定义为(
a)数值数组 b)可调数组 c)字符串数组 d)可变类型数组
答案:d
9.下面选项中,错误的是( )。
a) Dim s As variant :s = Array("one ", " two ", " Three ")
b) Dim b :b=Array(1,2,3)
c) Dim b As Integer :b=Array(1,2,3)
d) Dim b As variant :b=Array(1,2,3)
答案:c
10.若有以下说明语句
Type employee
num As Integer
salary As Single
End Type
Dim programmer As employee
则下面表示记录变量programmer的 成员Salary正确的是( )。
a) programmer→salary b) .salary
c) mmer d)
答案:d
11.已知有说明语句
Type dat
year As Integer
month As Integer
day As Integer
End Type
Type emp
no As Integer
name As String﹡10
sex As String*1
birthday As dat
salary As single
End Type
Dim programmer As emp
。 )
并假设变量programmer所表示职工的出生日期是“1978年10月1日”,则下列正确的赋值
语句是( )。
a) year=1978:month=10:day=1
b) =1978:=10: =1
c) =1978:=10 :=1
d)=1978:=10:
=1
答案:d
12.假设有第11题的说明语句,则下列With语句正确的是( )。
a) with progammer
no=1000:name= "张勇" : sex= "男"
with birthday
year=1978 :month=10 :day=1
End with
salary=2800
End with
b) with programmer
.no=1000:.name= "张勇" :.sex="男"
with .birthday
.year=1978 :.month=10 :.day=1
End with
.salary=2800
End with
c) with programmer
.no=1000 :.name="张勇" :.sex="男"
.=1978 :.=10 :.=1
.salary=2800
End with
d) with programmer,birthday
.no=1000:.name="张勇" :.sex="男"
.year=1978 :month.=10 :day.=1
.salary=2800
End with
答案:c
5.3 解答题
1.使用关键字Dim,ReDim和Static定义的数组分别称为什么数组?它们各有什么特
点?
答:使用关键字Dim说明的数组称为定长数组。说明定长数组时,应同时确定维数和下
标范围。VB编译程序在编译时为定长数组分配相应的内存区域,并且在应用程序运行期间,
定长数组都占有这块内存区域。
使用关键字ReDim说明的数组称为可调数组或动态数组。若在程序运行前,不能确定数
组的大小或在程序运行时需要改变数组的大小,则该数组应定义为可调数组。在应用程序运
行期间,可调数组占用的内存区域可能会改变。
使用Static说明的数组称为静态数组。在整个应用程序运行期间,系统分配固定内存
区域。定义该数组的过程执行结束时,数组的值仍保留,该过程再次被调用时,数组的值为
上次过程调用结束时的值。而定长数组和可调数组则不然,定义它们的过程执行结束时,它
们的值不保留。
5.4 阅读程序,并写出执行结果
1.
Private Sub Command1_Click()
Dim f(10) As Integer
f(0) = 1: f(1) = 1
For i = 2 To 10
f(i) = f(i - 2) + f(i - 1)
Next i
For i = 0 To 10
If i Mod 4 = 0 Then Print
Print f(i),
Next i
End Sub
答案:
1 1 2 3
5 8 13 21
34 55 89
2.
Private Sub Command1_Click()
Dim s(1 To 6) As Integer
For i = 1 To 6
s(i) = i
Next i
For i = 1 To 3
For j = 4 To 6
t = s(i) :s(i) = s(j) :s(j) = t
Next j
Next i
For i = 1 To 6
Print s(i);
Next i
End Sub
答案:
6 5 4 3 2 1
3.
Private Sub Command1_Click()
Dim a(1 To 9) As Integer
Dim b(1 To 3, 1 To 3) As Integer
Dim i%, j%
For i = 1 To 9
a(i) = i
Next i
For i = 1 To 3
For j = 1 To 3
b(i, j) = a(i * j)
If j <= i Then Print b(i, j),
Next j
Next i
End Sub
答案:
1
2 4
3 6 9
4.
Private Sub Command1_Click()
Dim a(1 To 5, 1 To 5) As Integer, i%, j%
For i = 1 To 5
For j = 1 To 5
If i <= j Then a(i, j) = 1 Else a(i, j) = i - j + 1
Next j
Next i
For i = 1 To 5
For j = 1 To 5
Print a(i, j);
Next j
Next i
End Sub
答案:
1
2
3
4
5
1
1
2
3
4
1
1
1
2
3
1
1
1
1
2
1
1
1
1
1
5.5编程题
2.编一程序,使用随机函数产生10个互不相同的两位整数存放到一维数组中,并输出
该数组,然后求这组数中的最大值及最大值在数组中的位置。
解答:
(1)界面设计和属性设置
在窗体上建立两个命令按钮。窗体和命令按钮的主要属性设置如表3.5.2所示。
表3.5.2 属性设置
控件名称
Form1
属性名
Caption
属性值
求两两不相同随机
数最大值及其位置
Command1 Caption 开始
Command2 Caption 结束
(2)程序代码
Private Sub Command1_Click()
Cls
Dim a(1 To 10), i%, j%, max%, p%
Randomize
For i = 1 To 10
l: a(i) = Int((90 * Rnd + 10))
For j = 1 To i - 1
If a(i) = a(j) Then GoTo l
Next j
Next i
Print: Print
Print Tab(15); "产生的随机数为:"
For i = 1 To 10
Print "a("; i; ")="; a(i),
If i Mod 4 = 0 Then Print
Next i
max = a(1): p = 1
For i = 2 To 10
If a(i) > max Then max = a(i): p = i
Next i
Print: Print
Print Tab(15); "最大值为:"; max
Print Tab(10), "最大值所在数组元素的下标为:"; p
End Sub
Private Sub Command2_Click()
End
End Sub
(3)运行情况
运行程序后,屏幕出现用户界面。单击标题为“开始”的命令按钮,系统执行相应的
Click事件过程。执行结果如图3.5.2所示。单击标题为“结束”的命令按钮,结束程序的
执行。
图3.5.2 执行结果
4.给定两组已按升序排列好的整型数据,编写一个程序把它们合并为一组仍按升序排
列的数据。
解答:
(1)界面设计和属性设置
在窗体上建立两个命令按钮。窗体和命令按钮的主要属性设置如表3.5.4所示。
表3.5.4 属性设置
控件名称
Form1
属性名
Caption
属性值
把两个升序数组合并
为一个升序数组
Command1
Command2
Caption
Caption
合并
结束
(2)程序代码
Dim a As Variant, b As Variant, c%(0 To 11)
Private Sub Form_Activate()
Dim i%
a = Array(1, 2, 7, 8)
Print: Print: Print
Print Tab(5); "第一个升序数组:";
For i = 0 To 3
Print a(i);
Next i
Print: Print
b = Array(3, 4, 8, 8, 9, 10, 12, 12)
Print Tab(5); "第二个升序数组:";
For i = 0 To 7
Print b(i);
Next i
End Sub
Private Sub Command1_Click()
Dim i%, j%, k%
i = 0: j = 0: k = 0
While i < 4 And j < 8
If a(i) > b(j) Then
c(k) = b(j): k = k + 1: j = j + 1 '比较a和b中的元素,把较大的元素移到
Else 'c中,直到其中一个数组搬空为止
c(k) = a(i): k = k + 1: i = i + 1
End If
Wend
While i < 4
c(k) = a(i): i = i + 1: k = k + 1 '把a中剩余的元素搬到c中
Wend
While j < 8
c(k) = b(j): j = j + 1: k = k + 1 '把b中剩余的元素搬到c中
Wend
Print: Print
Print Tab(5); "合并后的升序数组:"
Print Tab(8);
For i = 0 To 11
Print c(i);
Next i
End Sub
Private Sub Command2_Click()
End
End Sub
(3)运行情况
运行程序后,系统执行
Form_Activate
事件过程,屏幕出现用户界面,并显示两个升序数
组。单击标题为“合并”的命令按钮,系统执行相应的Click事件过程。执行结果如图3.5.4
所示。单击标题为“结束”的命令按钮,结束程序的执行。
图3.5.4 执行结果
5.从键盘上输入一个正整数,判别它是否为回文数。所谓回文数是指正读和反读都一
样的数。例如,123321是回文数。
解答:
(1)界面设计和属性设置
在窗体上建立两个命令按钮。窗体和命令按钮的主要属性设置如表3.5.5所示。
表3.5.5 属性设置
控件名称
Form1
属性名
Caption
属性值
判别一个整数是否
为回文数
Command1
Command2
Caption
Caption
开始
结束
(2)程序代码
Private Sub Command1_Click()
Cls
Dim num As Long, n As Long, i%, k%, f%, b%(10)
num = InputBox("请输入一个整数:")
k = 0: n = num
Do
b(k) = n Mod 10 '把num的各位数字存入数组b中
k = k + 1
n = n 10
Loop While n <> 0
f = 1
For i = 0 To (k - 1) / 2
If b(i) <> b(k - 1 - i) Then f = 0 'num的第i位与第k-1-i位数字不相同时f置0
Next i '说明num不是回文数
Print: Print: Print: Print
If f Then
Print Tab(18); num; "是回文数!"
Else
Print Tab(16); num; "不是回文数!"
End If
End Sub
Private Sub Command2_Click()
End
End Sub
(3)运行情况
运行程序后,屏幕出现用户界面。单击标题为“开始”的命令按钮,系统执行相应的
Click事件过程。在调用InputBox 函数出现对话框时,输入一个整数,例如,1234321。执
行结果如图3.5.5所示。单击标题为“结束”的命令按钮,结束程序的执行。
图3.5.5 执行结果
6. 编一程序,把一个m行n列矩阵中的元素存放到一个二维数组中,并求出该数组的平
均值、最大值和最小值。
解答:
(1) 界面设计和属性设置
在窗体上建立两个命令按钮。窗体和命令按钮的主要属性设置如表3-5-6所示。
表3-5-6 第6题的属性设置
控件名称 属性名 属性值
Form1 Caption 求矩阵的平均值、最小值和
最大值
Command1 Caption 开始
Command2 Caption 结束
(2) 程序代码
Private Sub Command1_Click()
Dim i%, j%, m%, n%, sum!, ave!, max!, min!
Dim a() As Single
m = InputBox("请输入矩阵的行数:")
n = InputBox("请输入矩阵的列数:")
ReDim a(1 To m, 1 To n)
Print Tab(2); "输入的矩阵为:"
For i = 1 To m
Print Tab(15);
For j = 1 To n
a(i, j) = InputBox("输入第" & Str(i) & "行" & "第" & Str(j) & "列元素:")
Print a(i, j);
Next j
Next i
sum = 0
For i = 1 To m
For j = 1 To n
sum = sum + a(i, j) '求和
Next j
Next i
ave = sum / (m * n) '求平均值
max = a(1, 1)
For i = 1 To m
For j = 1 To n
If a(i, j) > max Then max = a(i, j) '求最大值
Next j
Next i
min = a(1, 1)
For i = 1 To m
For j = 1 To n
If a(i, j) < min Then min = a(i, j) '求最小值
Next j
Next i
Print Tab(2); "平均值为:"; ave
Print Tab(2); "最大值为:"; max
Print Tab(2); "最小值为:"; min
End Sub
Private Sub Command2_Click()
End
End Sub
(3)运行情况
运行程序后,需多次调用InputBox 函数。在调用InputBox 函数出现对话框时,输入
矩阵的行数、矩阵的列数和数组元素的值。例如,输入矩阵的行数3、矩阵的列数3和数组
元素的值1、2、3、4、5、6、7、8、9。执行结果如图3.5.6所示。
7. 某城市三个百货公司某个季度销售电视机的情况和价格由如下表格表示,求各个百
货公司的电视机营业额。
牌子
公司
第一百货商店 300 250
240
210
150
200
180
康 佳
TCL
长 虹
第二百货商店 200
第三百货商店 280
牌 子
康 佳
TCL
长 虹
解答:
(1)界面设计和属性设置
价 格
3500
3300
3800
在窗体上建立两个命令按钮。窗体和命令按钮的主要属性设置如表3.5.7所示。
表3.5.7 属性设置
控件名称 属性名 属性值
Form1
Command1
Command2
Caption
Caption
Caption
计算电视机销售额
开始
结束
(2)程序代码
Option Explicit
Private Sub Command1_Click()
Cls
Dim i%, j%, sum!
Dim a%(1 To 3, 1 To 3), p!(3)
Print Tab(23); "各百货公司的销售量"
Print Tab(20); "康佳"; Tab(30); "TCL"; Tab(40); "长虹"
For i = 1 To 3
Print Tab(5); "第" & Str(i) & " 百货公司";
For j = 1 To 3
a(i, j) = InputBox("输入第" & Str(i) & "百货公司" & "第" & Str(j) & "种牌子销售量:")
Print Tab(j * 10 + 10); a(i, j);
Next j
Next i
Print Tab(25); "各种牌子价格"
Print Tab(20); "康佳"; Tab(30); "TCL"; Tab(40); "长虹"
For i = 1 To 3
p(i) = InputBox("输入第" & Str(i) & "种牌号价格:")
Print Tab(i * 10 + 10); p(i);
Next i
Print: Print
For i = 1 To 3
sum = 0
For j = 1 To 3
sum = sum + a(i, j) * p(j)
Next j
Print Tab(10); "第" & Str(i) & "百货公司的销售额为:"; sum; "元"
Next i
End Sub
Private Sub Command2_Click()
End
End Sub
(3)运行情况
运行程序后,屏幕出现用户界面。单击标题为“开始”的命令按钮,系统执行相应的
Click事件过程。在执行的过程中,需多次调用InputBox 函数。在调用InputBox 函数出
现对话框时,按表格中的数据输入每个百货公司销售电视机的数量和各种牌子的价格。执行
结果如图3.5.7所示。单击标题为“结束”的命令按钮,结束程序的执行。
图3.5.7 执行结果