内容正文:
专题六 数组(讲义)
---《Visual Basic 程序设计》专题复习讲练测
[考纲要求]
1.数组基础知识
2.静态数组
3.动态数组
4.控件数组
5.常用算法实例
[课时安排]
2课时
[知识梳理]
一:数组的基础知识
1. 数组的概念
数组指是用同一个名字来组织一组相同类型的变量,数组中的变量称为元素,数组中的每个元素都有一个唯一的下标来标识自己,使用数组可以缩短和简化程序。数组元素的个数称为数组的长度。
数组的各个元素在内存中是连续存放的,数组名表示这个连续数据区域的名称,下标表示该元素在内存中的位置。一般格式: s(n);其中:s称为数组名,n是下标
元素1
元素2
……
元素100
Score
数组的内存表示
2. 数组的命名规则:数组名的命名规则与简单变量的命名规则一样,即由1~40个字符组成,组成的字符可以是字母、数字或小数点,并且必须以字母开头,当有类型声明符时,必须放在尾部。
3. 数组的维数
(1) 一维数组:数组中的所有元素,能按行、列顺序排成一行,即用一个下标便可以确定它们各自所处的位置。
(2) 二维数组:数组中的所有元素,能按行、列顺序排成一个矩阵,即必须用两个下标才能确定它们各自所处的位置。
(3) 三维数组:由三个下标才能确定所处位置。
4. 数组元素
数组内的每一个成员称为数组元素 。数组元素的类型也就是数组的类型。数组元素的一般形式如:数组名(下标1[,下标2,…])。每个数组元素都有各自的编号即下标,下标确定了数组元素在数组中的位置。
二:静态数组
静态数组在声明的时候即确定数组中元素的个数(数组中元素的个数是固定不变的)
1. 静态数组声明的语法格式
(1) 一维数组定义格式
Dim 数组名([下界 to] 上界) [As 数据类型]
(2) 二维数组定义格式
Dim 数组名([第一维下标下界 To ]第一维下标上界,[第二维下标下界 To ]第二维下标界 ) As 类型名称
说明:
①下界缺省为0,也可重新定义默认的数组的下界。例如:Option Base 1
②错误的声明,下标是变量 。如:n =Inputbox(“输入n”):Dim x(n) As Single
③在数组声明中的下标说明了数组的整体,即每维的大小。
④一维数组长度:上界-下界+1,上界可省略,当省略时上界为0。二维数组中元素个数为:(上界1--下界1+1)*(上界2--下界2+1)
⑤一维数组中引用数组元素的格式为:数组名(下标) 下界≤下标≤上界。
二维数组元素的格式为:数组名(下标1,下标2), 下界1≤下标1≤上界1,下界2≤下标2≤上界2。
三:动态数组
动态数组在定义时并不知道数组的大小,要在运行期确定,并根据需要在运行期可改变数组的大小。
1. 动态数组的定义
⑴在窗体、标准模块和过程中用Dim或Public声明一个没有下标的数组(括号不能省略);如:dim a( ) as integer
⑵数组重定义。在过程中需要使用该数组前,用Redim语句定义数组的大小(数组元素个数),下标可为常量、变量或表达式,但变量或表达式此时必须有值。如:Redim a(4)。
(3)语法格式:
Dim 数组名( )[As 类型],…
ReDim [Preserve]数组名(下标[,下标2…] ) [As 类型],…
说明:
①在过程中可多次使用ReDim来改变数组的大小和维数,但不许改变类型。
②使用ReDim语句将重新对数组元素进行初始化,会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数来保留数组中的数据。使用Preserve只能改变最后一维的大小,前面几维大小不能改变。
③ ReDim中的下标可以是常量,也可以是有了确定值的变量
⑤使用时注意下标的范围。不要越界。
四:For Each…Next语句
For Each…Next语句是专门针对一个数组或集中的每个元素执行重复语句。
一般格式:
For Each 成员 In 数组
循环语句序列
[Exit For]
循环语句序列
Next [成员]
其中:
(1)成员:相当于一个循环变量,它表示数组中的每个元素;
(2)数组:为一个数组名称;
(3)For Each …Next语句主要用来对数组元素进行处理,包括查询、显示或读取。它执行的次数由数组元素的个数决定。
五:控件数组
1. 控件数组的概念
控件数组是由一组相同类型的控件组成,使用相同的名称,具有基本相同的属性,执行不同的功能。
2. 控件数组的特点
(1)这些控件由控件数组的下标来区别,而下标由每个控件的唯一标识索引号(Index)来标识,通过Index属性即可区别控件数组元素,Index从0 开始取值,如:控件数组Text1(2)表示控件数组Text1的第3个元素。
(2)同一个控件数组的所有元素,具有相同的Name属性值,但对于其他属性则没有规定必须完全相同;
(3)控件数组的所有元素,共享同样的事件过程,故控件数组适用于若干个控件执行的操作相似的场合。为区分触发某个事件是由哪个控件触发的,VB会把该控件的下标索引值(Index)值传递给过程。
3. 建立控件数组的3种方法
控件数组的建立有三种方法:
(1)创建同名控件
(2)复制现存控件
(3)运用代码产生控件数组
六:常用算法实例
1. 选择排序法
选择法排序思想方法:
(1)对n个数排序,先将第一个数与第二个数到第n个数逐一比较,找出最小数的位置i(下标),然后将a(1)与a(i)进行交换,将最小数存放在a(1)中;
(2)然后将第二个数依次与第三个到第n个数逐一进行比较,找出第二个到第n个数中最小数,然后将a(2)与a(i)进行交换,最终这n个数中的次小数放在a(2)中;
(3)重复上面的步骤,直到排序结束为止(n-1);
程序代码如下:
Private Sub Command1_Click()
Dim a(), n%, i%, j%, t%,k%
a = Array(8, 6, 9, 3, 2, 7)
n = UBound(a)
For i = 0 To n-1 '双重循环找最小值下标
k=i
For j = i+1 To n
If a(j) < a(k) Then k = j '后项比前项小
Next
t = a(i):a(i) = a(k): a(k) = t '交换值
Next
For i = 0 To n
Print a(i) ;
Next
End Sub
2. 冒泡排序法
冒泡排序的基本思想:冒泡排序法就是每次将两个相邻的数进行比较,并将比较得的大(小)数调换(或称“下沉”)到下面,直至有序。
程序代码:
Private Sub Command1_Click()
Dim a(), n%, i%, j%, t%
Print
a = Array(8, 6, 9, 3, 2, 7)
n = UBound(a)
For i = 0 To n - 1
For j = i+1 To n
If a(i) > a(j) Then
t = a(i ): a(i) = a(j): a(j) = t
End If
Next
Next
For i = 0 To n
Print a(i) ;
Next
End Sub
[真题练讲]
1.数组 a(-3 to5,4)中共有( )个元素。
A. 45
B. 32
C. 36
D. 40
【答案】A
【解析】在 Visual Basic 中,数组元素的个数可通过各维度的长度计算得出,公式为:各维度(上界 - 下界 + 1)的乘积。
2.下列关于数组的说法中,正确的是( )
A.一个数组中只能包含相同类型的数据
B.数组只能在模块中定义,不能在过程中定义
C.在有些情况下,数组与普通变量一样可以不定义,先使用
D.定义数组时,数组中的每一维元素的个数必须是常量,不能是变量或表达式
【答案】A
【解析】数组既可以在模块级定义,也可以在过程内部定义; 在 VB 中,数组必须先定义后使用,定义数组时,除了可以使用常量指定维度大小,还可以使用 “动态数组”:先声明时不指定大小。
3.设有如下数组声明语句:Dim arr(-2 To 2,0 To 3) As Integer该数组所包含的数组元素个数是( )
A.20
B.1
C.15
D.12
【答案】A
【解析】在 Visual Basic 中,数组元素的个数可通过各维度的长度计算得出,公式为:各维度(上界 - 下界 + 1)的乘积。
4.在窗体上画一个名称为 Label1 的标签,然后编写如下事件过程:
Private Sub Form_Click( )
Dim arr(10, 10) As Integer
Dim i As Integer, j As Integer
For i = 1 To 4
For j = 2 To 4
arr(i, j) = i * j
Next j
Next i
Label1.Caption = Str(arr(2, 3) + arr(3, 4))
End Sub
程序运行后,单击窗体,在标签中显示的内容是( )
A. 12
B. 13
C. 15
D. 18
【答案】D
【解析】程序通过嵌套循环给二维数组arr的部分元素赋值,然后计算指定元素的和并显示。
5.设有如下程序:
Private Sub form_Click()
Dim a(10) As Integer,p(3) As Integer
K=5
For i=1 to 10
a(i)=i
Next i
For i=1 to 3
P(i)=a(i*i)
Next i
For i=1 to 3
K=k+p(i)*2
Next i
Print k
End Sub
程序运行后,单击窗体,则在窗体上显示的是( )
A. 33
B.35
C.37
D.38
【答案】A
【解析】在 VB 中数组默认下界为 0,k的初始值是 5,三次累加:第一次:5 + 1×2 = 7第二次:7 + 4×2 = 15;第三次:15 + 9×2 = 33。
[限时练习]
1.以下有关数组说明中,错误的是( )。
A.在通用声明区可用Private 语句声明数组
B.根据数组大小是否可变,可将数组分为动态数组和静态数组
C.用ReDim语句重新建立数组后,原有的数组元素内容将不予保留
D.用ReDim语句重新建立数组时,不得改变原有数组的维数
【答案】C
【解析】ReDim语句重新定义数组大小时,若使用Preserve关键字,可保留原有数组元素的内容。
2.假定建立了一个名为Command1的命令按钮数组,则以下说法中错误的是( )。
A.数组中每个命令按钮的名称均为Command1
B.数组中每个命令按钮的标题必须相同
C.数组中所有命令按钮可以使用同一个事件过程
D.用Command1(下标)可以访问数组中每一个命令按钮
【答案】B
【解析】控件数组中各元素的标题(Caption属性)可以不同,标题是独立设置的,并非必须相同。
3.控件数组是通过( )来区分控件数组元素的。
A.名称
B.Count属性
C.Index属性
D.控件标题
【答案】C
【解析】在 Visual Basic 中,控件数组是由一组名称相同的控件组成的集合,它们通过Index 属性来区分不同的元素。
4.一个数组说明为Dim a(0 to 5,1 to 5) As Integer,则该数组共有( )个元素。
A.25
B.36
C.30
D.不确定
【答案】C
【解析】在 Visual Basic 中,计算二维数组元素个数的方法是各维度(上界 - 下界 + 1)的乘积。
5.在Visual Basic中,关于数组的叙述,错误的是( )
A.Visual Basic中的数组必须先定义,后使用
B.语句Option Base n中的n用以设置数组下标的下界,它可以是任意的非负整数
C.同一个过程中定义的数组与变量不能同名
D.在定义数组时,每一维的元素个数必须是常数,不能是变量或表达式
【答案】B
【解析】Option Base n语句用于设置数组下标的默认下界,n只能是 0 或 1(默认是 0),不能是任意非负整数。
6.在Visual Basic中,有以下程序代码:
Private Sub Command1_Click()
Dim i As Integer
Dim n As Integer
Dim arr() As Integer
n = InputBox("请输入数值:")
ReDim arr(n)
For i = 1 To UBound(arr)
arr(i) = i
Next i
For i = 1 To UBound(arr) \ 2
temp = arr(i)
arr(i) = arr(n - i + 1)
arr(n - i + 1) = temp
Next i
For i = 1 To UBound(arr)
Print arr(i);
Next i
End Sub
程序运行后,单击命令按钮,并在输入框中输入7,则程序的输出结果为( )
A.7 6 5 4 3 2 1
B.1 2 3 4 5 6 7
C.3 2 1 4 7 6 5
D.4 3 2 1 5 6 7
【答案】A
【解析】程序的功能是对数组元素进行赋值后反转。
7.若用Dim a(10) As Integer 语句声明了数组a ,以下语句中错误的是( )
A. a(9)=a(-6)
B. a(1)=56
C. a(8)=a(1)+a(3)
D. a(1)=a(8)-34
【答案】A
【解析】a(-6)的下标为 - 6,超出了数组a的有效下标范围(0~10),会导致 “下标越界” 错误。
8.对于动态数组a,如果需要重新定义大小,并保留原有数据,可使用语句( )
A. Dim
B. ReDim
C. Dim Preserve
D. ReDim Preserve
【答案】D
【解析】在 Visual Basic 中,动态数组的大小可以通过ReDim语句重新定义。若需要在重新定义数组大小时保留原有数据,必须使用Preserve关键字,语法为ReDim Preserve 数组名(新范围)。
9.在Visual Basic中,用_______语句既可以改变数组的大小,也可以改变数组类型。
【答案】ReDim
【解析】在 Visual Basic 中,ReDim语句用于重新定义动态数组的大小。
10.在Visual Basic中,对于数组a(2 to 3 ,4 to 6),它的第二维的下界为______。
【答案】4
【解析】对于数组a(2 to 3 ,4 to 6),逗号分隔的两部分分别对应第一维和第二维的范围。其中第二维明确指定为4 to 6,因此第二维的下界为 4。
[内容小结]
1.本章节的内容是数组、控件数组相关的内容,可以利用思维导图对本章知识点进行梳理总结。
2.本章节的重点在于数组的应用,如静态数组、动态数组、数组的排序。
3.本章节的难点在于对各种典型算法的应用。
学科网(北京)股份有限公司
学科网(北京)股份有限公司
原始数据 8 6 9 3 2 7
a(1) a(2) a(3) a(4) a(5) a(6) 第1趟交换后 8 6 3 2 7 9
a(2) a(3) a(4) a(5) a(6) 第2趟交换后 6 3 2 7 8
a(3) a(4) a(5) a(6) 第3趟交换后 6 3 2 7
a(4) a(5) a(6) 第4趟交换后 3 2 6
a(5) a(6) 第5趟无交换2 3
排序过程示意图
$