第五章 VB中的數(shù)組
5.1 數(shù)組的概念
1.引例
求100個(gè)學(xué)生的平均成績(jī)及超過平均成績(jī)的人數(shù)。
如果用一般變量來表示成績(jī),需要用100個(gè)變量,如:mark1、mary2、……mark100。若用數(shù)組,可以只用一個(gè)來表示mark(1
To 100)。
2.基本概念
數(shù)組:是同類型變量的一個(gè)有序的集合。
如:A(1 To 100),表示一個(gè)包含100個(gè)數(shù)組元素的名為A的數(shù)組。
數(shù)組元素: 即數(shù)組中的變量。用下標(biāo)表示數(shù)組中的各個(gè)元素。
表示方法:數(shù)組名(P1,P2,……)
其中P1、P2表示元素在數(shù)組中的排列位置,稱為“下標(biāo)”。
如:A(3,2)代表二維數(shù)組A中第3行第2列上的那個(gè)元素。
數(shù)組維數(shù): 由數(shù)組元素中下標(biāo)的個(gè)數(shù)決定,一個(gè)下標(biāo)表示一維數(shù)組,二個(gè)下標(biāo)表示二維數(shù)組。
VB中有一維數(shù)組、二維數(shù)組、……最多60維數(shù)組。
下標(biāo):下標(biāo)表示順序號(hào),每個(gè)數(shù)組有一個(gè)唯一的順序號(hào),下標(biāo)不能超過數(shù)組聲明時(shí)的上、下界范圍。下標(biāo)可以是整型的常數(shù)、變量、表達(dá)式,甚至又是一個(gè)數(shù)組元素。
下標(biāo)的取值范圍是:下界 To上界 ,缺省下界時(shí),系統(tǒng)默認(rèn)取0。
3.數(shù)組聲明
數(shù)組必須先聲明后使用。聲明數(shù)組就是讓系統(tǒng)在內(nèi)存中分配一個(gè)連續(xù)的區(qū)域,用來存儲(chǔ)數(shù)組元素。
聲明內(nèi)容:數(shù)組名、類型、維數(shù)、數(shù)組大小。
一般情況下,數(shù)組中各元素類型必須相同,但若數(shù)組為Variant時(shí),可包含不同類型的數(shù)據(jù)。
靜態(tài)數(shù)組:聲明時(shí)確定了大小的數(shù)組。
動(dòng)態(tài)數(shù)組: 聲明時(shí)沒有給定數(shù)組大?。ㄊ÷粤死ㄌ?hào)中的下標(biāo)),使用時(shí)需要用ReDim語句重新指出其大小。
使用動(dòng)態(tài)數(shù)組的優(yōu)點(diǎn)是根據(jù)用戶需要,有效地利用存儲(chǔ)空間,它是在程序執(zhí)行到ReDim語句時(shí)才分配存儲(chǔ)單元,而靜態(tài)數(shù)組是在程序編譯時(shí)分配存儲(chǔ)單元。
5.2 靜態(tài)數(shù)組及聲明
1. 一維數(shù)組
靜態(tài)一維數(shù)組的聲明形式:
Dim 數(shù)組名(下標(biāo))[As 類型]
說明:(1)下標(biāo)必須為常數(shù),不可以為表達(dá)式或變量;
(2)下標(biāo)下界最小為-32768,最大上界為32767;省略下界,其默認(rèn)值為為0,一維數(shù)組的大小為:上界-下界+1
(3) 如果省略類型,則為變體型
例: (1) Dim A(10) As Integer
聲明了A是數(shù)組名、整型、一維數(shù)組、有11個(gè)元素,下標(biāo)的范圍是0~10。
(2) Dim B(-3 To 5) As String*3
聲明了B是數(shù)組名、字符串型、一維數(shù)組、有9個(gè)元素,下標(biāo)的范圍是-3~5,每個(gè)元素最多存放3個(gè)字符。
2.多維數(shù)組
靜態(tài)多維數(shù)組的聲明形式:
Dim 數(shù)組名(下標(biāo)1[,下標(biāo)2…]) [As 類型]
說明:?。?/span>1)下標(biāo)個(gè)數(shù)決定數(shù)組的維數(shù),最多60維。
(2)每一維的大小=上界-下界+1;數(shù)組的大小=每一維大小的乘積。
例:Dim C(-1 To 5, 4) As Long
聲明了C是數(shù)組名、長(zhǎng)整型、二維數(shù)組、第一維下標(biāo)范圍為-1~5,第二維下標(biāo)的范圍是0~4,占據(jù)7x 5個(gè)長(zhǎng)整型變量的空間。
3.注意事項(xiàng)
(1)在有些語言中,下界一般從1開始,為了便于使用,在VB的窗體層或標(biāo)準(zhǔn)模塊層用OptionBase n 語句可重新設(shè)定數(shù)組的下界,如OptionBase 1。
(2) 在數(shù)組聲明中的下標(biāo)關(guān)系到每一維的大小,是數(shù)組說明符,而在程序其他地方出現(xiàn)的下標(biāo)為數(shù)組元素,兩者寫法相同,但意義不同。
(3) 在數(shù)組聲明時(shí)的下標(biāo)只能是常數(shù),而在其他地方出現(xiàn)的數(shù)組元素的下標(biāo)可以是變量。
5.3 動(dòng)態(tài)數(shù)組及聲明
1. 動(dòng)態(tài)數(shù)組的建立與聲明
建立動(dòng)態(tài)數(shù)組的方法是:利用Dim、Private、Public語句聲明括號(hào)內(nèi)為空的數(shù)組,然后在過程中用ReDim語句指明該數(shù)組的大小。語法是:
ReDim 數(shù)組名(下標(biāo)1[,下標(biāo)2…]) [As 類型]
其中下標(biāo)可以是常量,也可以是有了確定值的變量,類型可以省略,若不省略,必須與Dim中的聲明語句保持一致。
例: Dim D() As Single
Sub Form_Load()
……
ReDim D(4,6)
……
End Sub
2.注意事項(xiàng)
(1)在動(dòng)態(tài)數(shù)組ReDim語句中的下標(biāo)可以是常量,也可以是有了確定值的變量;
(2)在過程中可以多次使用ReDim來改變數(shù)組的大小,也可改變數(shù)組的維數(shù)。
(3)每次使用ReDim語句都會(huì)使原來數(shù)組中的值丟失,可以在ReDim語句后加Preserve參數(shù)來保留數(shù)組中的數(shù)據(jù),但使用Preserve只能改變最后一維的大小,前面幾維大小不能改變。
3.動(dòng)態(tài)數(shù)組使用示例
5.4 數(shù)組的基本操作
1. 給數(shù)組元素賦初值
(1) 利用循環(huán)結(jié)構(gòu)
例:Dim iA(1 To 10) As Integer
For i=1 To 10
A(i)=0
Next i
(2) 利用Array函數(shù)
例:Dim a As Variant, b As Variant,i%
a= Array (1,2,3,4,5)
b = Array ("abc","def","67")
For i=0 To Ubound (a)
Picture1.print a(i);"";
Next i
For i=0 To Ubound (b)
Picture1.print b(i);"";
Next i
2.數(shù)組的輸入
(1) 通過InputBox函數(shù)輸入適合輸入少量數(shù)據(jù)。
例:Dim sB(3,4) As singer
For i=0 To 3
For j=0 To 4
SB(i,j) =InputBox("輸入" &i & j & "的值")
Next j
Next i
(2) 通過文本框控件輸入
對(duì)大批量的數(shù)據(jù)輸入,采用文本框和函數(shù)split()\join()進(jìn)行處理,效率更高。
3.數(shù)組的賦值
在VB6.0中可以直接將一個(gè)數(shù)組的值賦值給另一個(gè)數(shù)組:
Dim a(3) as integer, b() as integer
A(0)=2: A(1)=5: A(2)=-2: A(3)=2
b=a
在早期的VB中,這需要用循環(huán)語句才可以實(shí)現(xiàn):
ReDim b(UBound(a))
For I=0 to UBound(a)
b(I)=a(I)
Next i
注意:(1)賦值號(hào)兩邊的數(shù)據(jù)類型必須一致;
(2)如果賦值號(hào)左邊的是一個(gè)動(dòng)態(tài)數(shù)組,則賦值時(shí)系統(tǒng)自動(dòng)將動(dòng)態(tài)數(shù)組ReDim成右邊相同大小的數(shù)組;
(3)如果賦值號(hào)左邊的是一個(gè)大小固定的數(shù)組,則數(shù)組賦值出錯(cuò)。
4.數(shù)組的輸出
用For……Next循環(huán)語句輸出。
5.求數(shù)組中最大元素和所在下標(biāo)及各元素之和
求數(shù)組中最大元素及下標(biāo),一般假設(shè)第一個(gè)元素及下標(biāo)為最大,然后將該數(shù)與數(shù)組中的其他元素逐一比較,若有比其大的就替換,同時(shí)替換下標(biāo)。
6.交換數(shù)組中各元素
交換的要求是將數(shù)組第一個(gè)元素與最后一個(gè)交換,第二個(gè)與倒數(shù)第二個(gè)交換,依次類推。
5.5 控件數(shù)組
1.控件數(shù)組的概念
控件數(shù)組是由一組相同類型的控件組成的,它們共用一個(gè)控件名,具有相同的數(shù)組??丶?shù)組適用于若干個(gè)控件執(zhí)行的操作相似的場(chǎng)合,控件組共享同樣的事件過程。控件數(shù)組通過索引號(hào)(屬性中的Index)來標(biāo)識(shí)各控件,第一個(gè)下標(biāo)是0 。如:Text1(0)、Text1(1)、Text1(2)、Text1(3)……
2.控件數(shù)組的建立
(1)在設(shè)計(jì)時(shí)建立
步驟:1)在窗體上畫出某控件,并進(jìn)行屬性設(shè)置。
2)選中該控件進(jìn)行“復(fù)制”和“粘貼”操作,系統(tǒng)提示“是否建立控件數(shù)組”,選擇是即可。多次粘貼就可以創(chuàng)建多個(gè)控件元素。
3)進(jìn)行事件過程的編程。
(2)運(yùn)行時(shí)添加控件數(shù)組
方法:1)在窗體上畫出某控件,設(shè)置該控件的Index值為0,表示該控件為數(shù)組。
2)在編程時(shí)通過Load方法添加其余若干個(gè)元素,也可以通過Unload刪除某個(gè)添加的元素。
3)每個(gè)添加的控件數(shù)組通過Left和Top屬性,確定其在窗體上的位置,并將Visible設(shè)置為True。
使用示例:建立一個(gè)類似國(guó)際象棋的棋盤,要求黑白交替,運(yùn)行時(shí)單擊某個(gè)棋格,會(huì)改變顏色并顯示其序號(hào)。
5.6 自定義數(shù)據(jù)類型
1. 自定義數(shù)據(jù)類型的定義
是指由若干標(biāo)準(zhǔn)數(shù)據(jù)類型組成的一種復(fù)合類型,也稱為記錄類型。
(1)定義方式:
Type 自定義類型名
元素名[(下標(biāo))] As 類型名
……
元素名[(下標(biāo))] As 類型名
EndType
元素名:表示自定義類型中的一個(gè)成員
下標(biāo)(可選):表示是數(shù)組,
類型名:為標(biāo)準(zhǔn)類型
例:定義一個(gè)學(xué)生信息的自定義類型:
Type studtype
No As Integer '定義學(xué)號(hào)
Name As String*10 ' 定義姓名
Sex As String*2 ' 定義性別
Mark(1 TO 4) As Single ' 定義4門課程的成績(jī)
Total As Single ' 定義總分
End Type
(2)注意事項(xiàng)
1)自定義類型一般在標(biāo)準(zhǔn)模塊(.bas)中定義,默認(rèn)是Public
2)自定義類型中的元素可以是字符串,但應(yīng)是定長(zhǎng)字符串
3) 不可把自定義類型名與該類型的變量名混淆
4) 注意自定義類型變量與數(shù)組的差別:它們都由若干元素組成,前者的元素代表不同性質(zhì)、不同類型的數(shù)據(jù),以元素名表示不同的元素;后者存放的是同種性質(zhì)、同種類型的數(shù)據(jù),以下標(biāo)表示不同元素。
2. 自定義型變量的聲明和使用
使用形式:Dim 變量名 As 自定義類型名
例如: Dim studentAs studtype, mystud As studtype
自定義類型中元素的表示方法是:變量名 . 元素名 如:student.name student.mark(4)
為了簡(jiǎn)單起見,可以用With …… End With 語句進(jìn)行簡(jiǎn)化。 例:
With student
.no=99001
.name=""
.sex=""
.total=0
for I=1 to 4
.mark(I)=int(rnd*101) '隨機(jī)產(chǎn)生0 - 100之間的分?jǐn)?shù)
.total=.total+.may(I)
next I
End With
Mystud=student '同種自定義類型變量可以直接賦值
3.自定義類型數(shù)組的使用
自定義類型數(shù)組就是數(shù)組中的每個(gè)元素都是自定義類型。
例如:自定義一個(gè)由學(xué)生姓名、成績(jī)組成的學(xué)生記錄類型,用來存放100個(gè)學(xué)生的記錄。
聯(lián)系客服