内容正文:
专题六 数组
Visual Basic程序设计
专题复习讲练测
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
考纲要求
一
1.数组基础知识
2.静态数组
3.动态数组
4.控件数组
5.常用算法实例
知识点梳理
二
知识点梳理
二
一:数组的基础知识
1.数组的概念
数组指是用同一个名字来组织一组相同类型的变量,数组中的变量称为元素,数组中的每个元素都有一个唯一的下标来标识自己,使用数组可以缩短和简化程序。数组元素的个数称为数组的长度。
数组的各个元素在内存中是连续存放的,数组名表示这个连续数据区域的名称,下标表示该元素在内存中的位置。一般格式: s(n);其中:s称为数组名,n是下标。
知识点梳理
二
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.动态数组的定义
(1)在窗体、标准模块和过程中用Dim或Public声明一个没有下标的数组(括号不能省略);如:dim a( ) as integer
(2)数组重定义。在过程中需要使用该数组前,用Redim语句定义数组的大小(数组元素个数),下标可为常量、变量或表达式,但变量或表达式此时必须有值。如:Redim a(4)。
知识点梳理
二
三:动态数组
1.动态数组的定义
(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 开始取值。
知识点梳理
二
(2)同一个控件数组的所有元素,具有相同的Name属性值,但对于其他属性则没有规定必须完全相同;
(3)控件数组的所有元素,共享同样的事件过程,故控件数组适用于若干个控件执行的操作相似的场合。为区分触发某个事件是由哪个控件触发的,VB会把该控件的下标索引值(Index)值传递给过程。
3.建立控件数组的3种方法
(1)创建同名控件 ;(2)复制现存控件 ;(3)运用代码产生控件数组 。
知识点梳理
二
六:常用算法实例
选择排序法
(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
知识点梳理
二
六:常用算法实例
冒泡排序法
冒泡排序的基本思想:冒泡排序法就是每次将两个相邻的数进行比较,并将比较得的大(小)数调换(或称“下沉”)到下面,直至有序。
知识点梳理
二
程序代码:
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),会导致 “下标越界” 错误
限时练习
四
10.对于动态数组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
排序过程示意图
$