版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目六數(shù)組任務(wù)6.1數(shù)組和數(shù)組元素任務(wù)6.2靜態(tài)數(shù)組任務(wù)6.3動(dòng)態(tài)數(shù)組任務(wù)6.4控件數(shù)組
任務(wù)6.1數(shù)組和數(shù)組元素
任務(wù)導(dǎo)入
計(jì)算機(jī)處理的數(shù)據(jù)各種各樣,這些數(shù)據(jù)根據(jù)有序與否可分為兩類:
(1)無序性數(shù)據(jù),僅與其取值有關(guān),而與其所在的位置無關(guān)。前面介紹的變量都是簡單變量,如a、i、x等,并可以給簡單變量賦予一個(gè)某種數(shù)據(jù)類型的數(shù)值,各個(gè)簡單變量是各自獨(dú)立的,與其所在的位置無關(guān)。
(2)有序性數(shù)據(jù),不僅與其取值有關(guān),而且與其所在的位置也密切相關(guān),如體育比賽的成績,就隱含著名次。
在程序設(shè)計(jì)中,利用簡單變量可以解決不少問題。但是僅使用簡單變量,勢必受到簡單變量單獨(dú)性和無序性的限制,而難以或無力解決那些不僅與取值有關(guān),而且與其所在位置也有關(guān)的較復(fù)雜的問題。學(xué)習(xí)目標(biāo)
(1)理解數(shù)組、數(shù)組維數(shù)、數(shù)組元素等概念。
(2)了解數(shù)組的類型和形式。
1.理解數(shù)組的概念
在程序設(shè)計(jì)中,將一組排列有序、個(gè)數(shù)有限的數(shù)據(jù)作為一個(gè)整體,用一個(gè)統(tǒng)一的名字來表示,即數(shù)組。
假如有5個(gè)學(xué)生的成績,這一組成績可以用一個(gè)名字cj來表示,其中第一個(gè)學(xué)生的成績?yōu)?0,第二個(gè)學(xué)生的成績?yōu)?8,第三個(gè)學(xué)生的成績?yōu)?0,第四個(gè)學(xué)生的成績?yōu)?5,第五個(gè)學(xué)生的成績?yōu)?5,則這一組有排列順序的數(shù)80,68,90,85,95,就是一個(gè)數(shù)組。在VB中,為了確定各數(shù)據(jù)與數(shù)組中每個(gè)元素的一一對應(yīng)關(guān)系,必須給數(shù)組中的這些數(shù)據(jù)編號,即順序號(用下標(biāo)來指出順序號,數(shù)組中也稱為下標(biāo)變量)。
因此可以說,數(shù)組即用一個(gè)名字代表順序排列的一組數(shù),順序號就是下標(biāo)變量的值。簡單變量是無序的,無所謂誰先誰后,數(shù)組中的各元素是有排列順序的。例如,在成績數(shù)組cj中:
第一個(gè)學(xué)生的成績用cj(1)來表示,其值為80;
第二個(gè)學(xué)生的成績用cj(2)來表示,其值為68;
第三個(gè)學(xué)生的成績用cj(3)來表示,其值為90;
第四個(gè)學(xué)生的成績用cj(4)來表示,其值為85;
第五個(gè)學(xué)生的成績用cj(5)來表示,其值為95。
2.掌握數(shù)組的命名
數(shù)組的命名規(guī)則與簡單變量的命名規(guī)則一樣,即由1~40個(gè)字符組成,組成的字符可以是字母、數(shù)字和小數(shù)點(diǎn),并且必須以字母開頭,如a、x、xscj等。
3.理解數(shù)組的維數(shù)
數(shù)組中下標(biāo)的個(gè)數(shù)稱為數(shù)組的維數(shù)。
如果數(shù)組中的所有元素能按行(或列)順序排成一行(或一列),也就是說,用一個(gè)下標(biāo)便可以確定它們各自所處的位置,則這樣的數(shù)組稱為一維數(shù)組。
如果數(shù)組中的所有元素能按行、列順序排成一個(gè)矩陣,換句話說,必須用兩個(gè)下標(biāo)才能確定它們各自所處的位置,則這樣的數(shù)組稱為二維數(shù)組。依此類推,三個(gè)下標(biāo)的數(shù)組,就構(gòu)成三維數(shù)組,有多少個(gè)下標(biāo)的數(shù)組,就構(gòu)成多少維的數(shù)組,如四維數(shù)組、五維數(shù)組等。通常又把二維以上的數(shù)組稱為多維數(shù)組。
例如:
a(10) 為一維數(shù)組
x(2,3) 為二維數(shù)組
b(4,5,6) 為三維數(shù)組
4.理解數(shù)組元素
1)數(shù)組中的元素
組成數(shù)組的各個(gè)元素一般為變量,由于這些變量共用一個(gè)變量名,即所在的數(shù)組名,因此必須要通過下標(biāo)才能相互區(qū)別,故數(shù)組元素也稱為下標(biāo)變量。
在VB中,引用數(shù)組中的某一元素時(shí),要指出數(shù)組名和用括號括起來的數(shù)組元素在數(shù)組中的位置(順序號)的下標(biāo),即下標(biāo)變量的標(biāo)識為
〈數(shù)組名〉(〈下標(biāo)表〉)其中,〈下標(biāo)表〉是指一個(gè)或者幾個(gè)下標(biāo)(代表一維或者幾維),各下標(biāo)之間應(yīng)該用逗號分隔。例如:
a(5) 代表數(shù)組a中順序號為5的那個(gè)元素
x(26) 代表數(shù)組x中順序號為26的那個(gè)元素
c(2,3) 代表數(shù)組c中第2排第3列的那個(gè)元素
2)下標(biāo)的使用說明
(1)下標(biāo)放在數(shù)組名后的括號內(nèi),如x(10)、a(4,5)、
b(2,3,4)等。
(2)下標(biāo)可以是常量、變量或表達(dá)式,如a(3)、x(i)、
a(10-n,n+2)等。
(3)下標(biāo)反映的是在數(shù)組中的位置。下標(biāo)值若為非整數(shù),則系統(tǒng)將按四舍五入自動(dòng)取整,其值的范圍在–32768
~32767之間。例如,對于下標(biāo)變量x(3.4),系統(tǒng)將下標(biāo)按四舍五入自動(dòng)取整后進(jìn)行使用,即x(3)。
5.了解數(shù)組的類型
VB中,數(shù)據(jù)有多種數(shù)據(jù)類型,相應(yīng)地,數(shù)組也有多種類型??梢月暶魅魏位緮?shù)據(jù)類型的數(shù)組,包括用戶自定義類型和對象變量,但是一個(gè)數(shù)組中的所有元素應(yīng)該具有相同的數(shù)據(jù)類型。
當(dāng)然,數(shù)據(jù)類型為Variant(變體)型時(shí),各個(gè)元素能夠包含不同類型的數(shù)據(jù)(對象、字符串、數(shù)值等)。
6.了解數(shù)組的形式
在VB中,根據(jù)數(shù)組元素的個(gè)數(shù)能否變化,數(shù)組分為靜態(tài)數(shù)組和動(dòng)態(tài)數(shù)組。
靜態(tài)數(shù)組:數(shù)組元素的個(gè)數(shù)固定不變。
動(dòng)態(tài)數(shù)組:數(shù)組元素的個(gè)數(shù)在運(yùn)行時(shí)可以改變。任務(wù)6.2靜態(tài)數(shù)組
任務(wù)導(dǎo)入
靜態(tài)數(shù)組是在聲明時(shí)就已經(jīng)確定了數(shù)組元素個(gè)數(shù)的數(shù)組。靜態(tài)數(shù)組是最常用的數(shù)組。學(xué)習(xí)目標(biāo)
(1)會聲明靜態(tài)數(shù)組。
(2)會對數(shù)組元素進(jìn)行輸入、輸出、復(fù)制、初始化等操作。
(3)會使用靜態(tài)數(shù)組編寫程序。任務(wù)實(shí)施
1.聲明靜態(tài)數(shù)組
聲明靜態(tài)數(shù)組的語法格式為
Dim〈數(shù)組名〉(〈維數(shù)定義〉)[As〈類型〉]
【說明】(1)<維數(shù)定義>指定數(shù)組的維數(shù)以及各維的范圍:
[〈下標(biāo)下界1〉To]〈下標(biāo)上界1〉[,[〈下標(biāo)下界2〉To]〈下標(biāo)上界2〉]…
例如:
Dima(2To4)AsInteger ‘3個(gè)元素,下標(biāo)范圍為2到4
Dimb(5To12)AsString
'8個(gè)元素,下標(biāo)范圍為5到12
(2)下標(biāo)的上、下界不得超過長整型數(shù)據(jù)類型的范圍
(-2147483648~2147483647)。
(3)二維數(shù)組的各維之間用逗號分隔。例如:
Dima(1To3,1To4)AsDouble
(4)可以將所有這些推廣到二維以上的數(shù)組。例如:
Dimb(2,1To3,1To4)
2.了解OptionBase語句
如果不指定〈下標(biāo)下界〉,則數(shù)組的下界由OptionBase語句控制。語法格式為
OptionBase〈n〉
【說明】(1)?n只能為0或1。
(2)如果沒有使用OptionBase語句,則默認(rèn)的下界為0。例如:
Dima(4)AsInteger‘5個(gè)元素,下標(biāo)范圍為0到4
Dimb(20)AsDouble '21個(gè)元素,下標(biāo)范圍為0到20
(3)如果使用OptionBase1語句,如:
OptionBase1 ‘默認(rèn)下界為1
Dimb(2,1To3,1To4)
則建立了一個(gè)三維數(shù)組b,大小為3×3×4,元素總數(shù)為三個(gè)維數(shù)的乘積,即36。
3.了解引用數(shù)組元素時(shí)的注意事項(xiàng)
在建立(聲明)一個(gè)數(shù)組之后,就可以使用數(shù)組了。使用數(shù)組就是對數(shù)組元素進(jìn)行各種操作,如賦值、表達(dá)式運(yùn)算、輸入、輸出等。
對數(shù)組元素的操作與對簡單變量的操作類似,但在引用數(shù)組元素的時(shí)候要注意以下幾點(diǎn):
(1)數(shù)組聲明語句不僅可以定義數(shù)組、為數(shù)組分配存儲控件,而且還能對數(shù)組進(jìn)行初始化,使得數(shù)值型數(shù)組的元素值初始化為0,字符型數(shù)組的元素值初始化為空等。
(2)引用數(shù)組元素的方法是在數(shù)組名后的括號中指定下標(biāo)。例如:
t=A(5):s=B(3,4)
其中,A(5)表示數(shù)組A中索引值為5的元素,B(3,4)表示二維數(shù)組B中行下標(biāo)為3、列下標(biāo)為4的元素。注意與數(shù)組聲明語句中下標(biāo)的上界相區(qū)別。
(3)引用數(shù)組元素時(shí),數(shù)組名、數(shù)組類型和維數(shù)必須與數(shù)組聲明時(shí)一致。
(4)引用數(shù)組元素時(shí),下標(biāo)值應(yīng)在數(shù)組聲明時(shí)所指定的范圍之內(nèi)。
(5)在同一過程中,數(shù)組與簡單變量不能同名。
4.應(yīng)用靜態(tài)數(shù)組
【課堂演練】
【實(shí)例6-1】計(jì)算某組10個(gè)同學(xué)的總分、平均分。
【實(shí)現(xiàn)步驟】
(1)首先從“文件”菜單中選擇“新建工程”,在打開的“新建工程”對話框中雙擊“標(biāo)準(zhǔn)EXE”,新建一個(gè)標(biāo)準(zhǔn)工程。
(2)建立應(yīng)用程序用戶界面。在窗體設(shè)計(jì)器中加入兩個(gè)標(biāo)簽Label1、Label2和一個(gè)Command1,調(diào)整它們的位置及大小,如圖6.1所示。圖6.1建立用戶界面
(3)設(shè)置對象屬性,參見圖6.2。
(4)編寫事件過程代碼。考慮到要在不同的過程中使用數(shù)組,所以首先在模塊的通用段聲明數(shù)組。從“視圖”菜單中選擇“代碼窗口”,在“代碼窗口”中的對象下拉列表框中選“(通用)”,在事件程序下拉列表框中選“(聲明)”,輸入下面代碼:
OptionBase1
Dima(1To10)AsSingle“統(tǒng)計(jì)”按鈕Command1的單擊Click事件代碼為
PrivateSubCommand1_Click()
DimiAsInteger,totalAsSingle,averageAsSingle
Fori=1To10
a(i)=Val(InputBox(“請輸入第”&Str(i)&“個(gè)學(xué)生的成績”,“輸入成績”))
total=total+a(i)
Nexti
average=total/10
Label1.Caption=Label1.Caption+Format(total)
Label2.Caption=Label2.Caption+Format(average)
EndSub
(5)運(yùn)行程序。單擊“統(tǒng)計(jì)”按鈕,依次輸入10個(gè)學(xué)生的成績,如圖6.2(a)所示,計(jì)算結(jié)果如圖6.2(b)所示。圖6.2依次輸入學(xué)生成績和統(tǒng)計(jì)結(jié)果
【實(shí)例6-2】輸入一串字符,統(tǒng)計(jì)各字母出現(xiàn)的次數(shù),不區(qū)分大小寫。
【實(shí)現(xiàn)步驟】
(1)問題分析。統(tǒng)計(jì)26個(gè)英文字母出現(xiàn)的個(gè)數(shù),必須聲明一個(gè)具有26個(gè)元素的數(shù)組,每個(gè)元素的下標(biāo)與26個(gè)英文字母的次序?qū)?yīng)。從輸入的字符串中逐一取出字符,轉(zhuǎn)換成大寫字符(使得大小寫不分),進(jìn)行判斷。
(2)建立用戶界面,并設(shè)置對象屬性,如圖6.3所示。圖6.3建立用戶界面和程序運(yùn)行結(jié)果
(3)編寫事件代碼?!敖y(tǒng)計(jì)字母”命令按鈕Command1的Click事件代碼為
PrivateSubCommand1_Click()
Dima(1To26)AsInteger
DimiAsInteger,jAsInteger,cAsString*1
tot=Len(Text1) '求字符串的長度Fori=1Totot
c=UCase(Mid(Text1,i,1))'取一個(gè)字符,將其轉(zhuǎn)換成相應(yīng)的大寫字母
Ifc>="A"Andc<="Z"Then
j=Asc(c)–65+1'將大寫字母A~Z轉(zhuǎn)換成1~26的下標(biāo)
a(j)=a(j)+1 '對應(yīng)數(shù)組元素加1
EndIf
Nexti
Forj=1To26 ‘輸出字母及其出現(xiàn)的次數(shù)
Ifa(j)>0Then
Label2.Caption=Label2.Caption&Chr$(j+64)&
“=”&a(j)&“”
EndIf
Nextj
EndSub
(4)運(yùn)行程序,結(jié)果如圖6.3所示。
【實(shí)例6-3】隨機(jī)產(chǎn)生10個(gè)數(shù),用“選擇排序法”按遞增順序排序。
【實(shí)現(xiàn)步驟】
(1)問題分析。遞增選擇排序的思路是:
①對有n個(gè)數(shù)的序列,從中選出最小的數(shù)(遞增),與第1個(gè)數(shù)交換位置;
②除第1個(gè)數(shù)外,其余n?-?1個(gè)數(shù)再按步驟①的方法選出次小的數(shù),與第2個(gè)數(shù)交換位置。
③重復(fù)步驟②?n-1遍,最后構(gòu)成遞增序列。為了便于理解,我們假定a數(shù)組有5個(gè)元素,下標(biāo)從1To5,且數(shù)組中已賦值,上述過程如圖6.4所示。圖6.4選擇排序法示意圖(2)建立用戶界面,并設(shè)置對象屬性,如圖6.5所示。圖6.5用戶界面和排序結(jié)果
(3)編寫事件代碼?!芭判颉泵畎粹oCommand1的Click事件代碼為
PrivateSubCommand1_Click()
Dima(1To10)AsSingle
Randomize
Fori=1To10‘產(chǎn)生10個(gè)隨機(jī)數(shù)
a(i)=Int(Rnd*90+10)
Label1.Caption=Label1.Caption&a(i)&""Nexti
Fori=1To9 '進(jìn)行排序
Forj=i+1To10
Ifa(j)<a(i)Then
t=a(i) '交換數(shù)據(jù)
a(i)=a(j)
a(j)=t
EndIf
Nextj
Nexti
Fori=1To10 ‘輸出排序后的結(jié)果
Label2.Caption=Label2.Caption&a(i)&“”
Nexti
Command1.Enabled=False
EndSub
(4)運(yùn)行程序,結(jié)果如圖6.5所示。
【實(shí)例6-4】將文本框的數(shù)據(jù)存入數(shù)組中,編寫程序,要求能輸入個(gè)人情況,并可根據(jù)姓名進(jìn)行查詢。
【實(shí)現(xiàn)步驟】
(1)建立應(yīng)用程序用戶界面,并設(shè)置對象屬性,如圖6.6
所示。圖6.6建立用戶界面并設(shè)置對象屬性
(2)編寫事件代碼。在通用段聲明數(shù)組:
Dima(10,6)AsVariant‘定義變體數(shù)組,其數(shù)組元素可以是Integer、Long等類型
DimnumAsInteger
“輸入”命令按鈕Command1的Click事件代碼為
PrivateSubCommand1_Click()
StaticiAsInteger ’用Static聲明,只重設(shè)0一次,其值可保留到下次過程調(diào)用
Text1.SetFocus‘使程序開始時(shí),光標(biāo)(焦點(diǎn))位于輸入框Text1中
i=i+1
Form1.Caption=“請輸入第”&Str(i+1)&“位同志的情況”
a(i,1)=Text1.Text ‘?dāng)?shù)據(jù)輸入
a(i,2)=Text2.Text
a(i,3)=Text3.Text
a(i,4)=Text4.Text
a(i,5)=Text5.Text
a(i,6)=Text6.Text
num=i
Text1.Text=“”‘清空各文本框內(nèi)容,為下次輸入或查詢做準(zhǔn)備
Text2.Text=“”
Text3.Text=“”
Text4.Text=“”
Text5.Text=“”
Text6.Text=“”
EndSub“查詢”命令按鈕Command2的Click事件代碼為
PrivateSubCommand2_Click()
StaticiAsInteger
Fori=1Tonum
Ifa(i,1)=Text1.TextThen‘確定輸入姓名存在
Text2.Text=a(i,2)’調(diào)出相應(yīng)數(shù)據(jù)
Text3.Text=a(i,3)
Text4.Text=a(i,4)
Text5.Text=a(i,5)
Text6.Text=a(i,6)
ExitSub‘跳出本過程
EndIf
Nexti
MsgBox“查無此人!”,vbOKOnly,“抱歉”
’姓名不相符時(shí),輸出消息框
EndSub“結(jié)束”命令按鈕Command3的Click事件代碼為
PrivateSubCommand3_Click()
UnloadMe
EndSub
(3)運(yùn)行程序,結(jié)果如圖6.7所示。圖6.7輸入和查詢個(gè)人情況
【實(shí)例6-5】矩陣的加法運(yùn)算。兩個(gè)相同階數(shù)的矩陣A和
B相加,是將相應(yīng)位置上的元素相加后放到同階矩陣C的相應(yīng)位置。
【實(shí)現(xiàn)步驟】
(1)問題分析。定義三個(gè)二維數(shù)組a(n,m)、b(n,m)和c(n,m),利用雙重循環(huán)和隨機(jī)函數(shù)產(chǎn)生a(n,m)和b(n,m)中各元素的值。然后通過雙重循環(huán)得到c(n,m)。
(2)設(shè)計(jì)程序界面,并設(shè)置對象屬性。選擇“新建”工程,進(jìn)入窗體設(shè)計(jì)器,在窗體中增加三個(gè)圖片框Picture1~Picture3,兩個(gè)標(biāo)簽Label1、Label2和兩個(gè)命令按鈕Command1、Command2。設(shè)置對象屬性如圖6.8所示。圖6.8設(shè)計(jì)窗體界面與運(yùn)行程序
(3)編寫代碼。在“通用”段聲明數(shù)組:
Dima(5,3)AsInteger,b(5,3)AsInteger
“重置”按鈕Command1的Click事件代碼為
PrivateSubCommand1_Click()
Forn=1To5 ‘控制矩陣行數(shù)
Form=1To3
'控制矩陣列數(shù)
x=Int(Rnd*100):a(n,m)=Val(x)‘產(chǎn)生隨機(jī)數(shù)
x=Int(Rnd*100):b(n,m)=Val(x)’產(chǎn)生隨機(jī)數(shù)
Next
Next
Picture1.Cls:Picture2.Cls:Picture3.Cls
‘清空圖片框
Picture1.CurrentY=80:Picture2.CurrentY=80
’控制輸出位置
Forn=1To5
Form=1To3
Picture1.PrintFormat(a(n,m),“@@@@”); ‘輸出產(chǎn)生的隨機(jī)數(shù)
Picture2.PrintFormat(b(n,m),“@@@@”); ’輸出產(chǎn)生的隨機(jī)數(shù)
Next
Picture1.Print:Picture2.Print ‘換行
Next
EndSub“計(jì)算”按鈕Command2的Click事件代碼為
PrivateSubCommand2_Click()
Dimc(5,3)AsInteger
Fori=1To5
Forj=1To3
c(i,j)=a(i,j)+b(i,j)
‘求兩矩陣相加的各項(xiàng)值
Next
Next
Picture3.Cls'清空
Picture3.CurrentY=80'確定輸出位置
Forn=1To5
Form=1To3
Picture3.PrintFormat(c(n,m),"@@@@");'輸出結(jié)果數(shù)據(jù)
Next
Picture3.Print‘換行
Next
EndSub
(4)運(yùn)行程序。單擊“重置”按鈕產(chǎn)生原始數(shù)據(jù),單擊“計(jì)算”按鈕得到相加結(jié)果。如果再次單擊“重置”按鈕,則重新產(chǎn)生數(shù)據(jù),如圖6.9所示。圖6.9兩矩陣相加運(yùn)行結(jié)果任務(wù)6.3動(dòng)態(tài)數(shù)組
任務(wù)導(dǎo)入
對于前一種情況,可以一面輸入數(shù)據(jù)一面隨著數(shù)據(jù)量的增加而重新聲明數(shù)組的大??;而對于后一種情況,可在需要使用特別大數(shù)組的過程中重新聲明數(shù)組大小,離開該過程前取消該數(shù)組。
本任務(wù)將學(xué)習(xí)動(dòng)態(tài)數(shù)組的程序設(shè)計(jì)方法。學(xué)習(xí)目標(biāo)
(1)會使用動(dòng)態(tài)數(shù)組編寫程序。
(2)會使用ForEach…Next語句對數(shù)組中的元素進(jìn)行處理。任務(wù)實(shí)施
1.創(chuàng)建動(dòng)態(tài)數(shù)組
創(chuàng)建動(dòng)態(tài)數(shù)組的步驟如下:
(1)用Public語句(公用數(shù)組)、Dim語句(模塊級數(shù)組)、Static語句或Private語句(局部數(shù)組)在過程中聲明一個(gè)未指明大小及維數(shù)的空數(shù)組,這樣就將數(shù)組聲明為動(dòng)態(tài)數(shù)組了。語法格式為
Public|Private|Dim|Static〈數(shù)組名〉()As〈類型〉
(2)用ReDim語句分配實(shí)際的元素個(gè)數(shù)。語法格式為
ReDim[Preserve]〈數(shù)組名〉(〈維數(shù)定義〉)[As〈類型〉]
例如,第一次聲明在模塊級所建立的動(dòng)態(tài)數(shù)組a:
Dima()AsInteger
然后,在過程中給數(shù)組分配空間:
PrivateSubForm_Activate()
ReDima(9,19)
EndSub這里的ReDim語句給a分配一個(gè)10×20的整數(shù)矩陣(元素總數(shù)為200)空間。
【說明】
(1)ReDim語句只能出現(xiàn)在過程中。與Dim語句、Static語句不同,ReDim語句是一個(gè)可執(zhí)行語句,由于這一語句的存在,應(yīng)用程序在運(yùn)行時(shí)將執(zhí)行一個(gè)操作。
(2)每次運(yùn)行程序時(shí),ReDim語句都會清除數(shù)組內(nèi)容,當(dāng)前存儲在數(shù)組中的值將全部丟失,VB重新將數(shù)組元素的值置為0(對Numeric數(shù)組)、置為零長度字符串(對String數(shù)組)或置為Empty(對Variant數(shù)組)。此時(shí)可以用Preserve關(guān)鍵字保留原先的數(shù)據(jù)。
(3)聲明動(dòng)態(tài)數(shù)組的時(shí)候并不指定數(shù)組的維數(shù),數(shù)組的維數(shù)由第一次出現(xiàn)的ReDim語句指定。
(4)對于任一維數(shù),ReDim語句都能改變元素的數(shù)目及其上下界,但是,數(shù)組的維數(shù)不能改變。
2.保留動(dòng)態(tài)數(shù)組的原有數(shù)據(jù)
使用ReDim語句時(shí),將清除數(shù)組中的原有數(shù)據(jù)。但是,有時(shí)需要改變數(shù)組大小而又不丟失數(shù)組中的數(shù)據(jù),這時(shí)就可以使用具有Preserve關(guān)鍵字的ReDim語句了。
使用具有Preserve關(guān)鍵字的ReDim語句可增加數(shù)組大小,又不丟失原數(shù)據(jù)。例如:
ReDima(2,4)
ReDimPreservea(2,6)原數(shù)組中數(shù)據(jù)均可保留,且增加了a(1,5)、a(1,6)、a(2,5)、a(2,6)四個(gè)位置。
如果聲明ReDima(3,4),將會清除原數(shù)組內(nèi)容。
使用Preserve關(guān)鍵字,只能改變多維數(shù)組中最后一維的上界,而不能改變維數(shù)。如果數(shù)組就是一維的,則可以重定義該維的大小,因?yàn)樗亲钅┚S,也是僅有的一維。如果數(shù)組是二維或多維的,則只能改變其最末維才可同時(shí)保留數(shù)組中的內(nèi)容,若改變了其他維或最后一維的下界,運(yùn)行時(shí)就會出錯(cuò)。
【課堂演練】
【實(shí)例6-6】用動(dòng)態(tài)數(shù)組修改【實(shí)例6-4】,輸入個(gè)人情況并可根據(jù)姓名進(jìn)行查詢。
【實(shí)現(xiàn)步驟】
(1)問題分析。首先聲明一個(gè)未指明維數(shù)及大小的數(shù)組。如果同【實(shí)例6-4】一樣直接聲明ReDima(1,7),則原先輸入的數(shù)組內(nèi)容完全清除,所以必須使用ReDimPreservea(i,7),但是VB規(guī)定的使用Preserve保留原數(shù)組內(nèi)容只限于最后一個(gè)維數(shù)擴(kuò)展長度,此法不能實(shí)現(xiàn)。
(2)建立應(yīng)用程序用戶界面,并設(shè)置對象屬性,如【實(shí)例6-4】中一樣,只需修改事件編碼。
在通用段聲明數(shù)組:
Dima()AsVariant‘聲明一個(gè)未指定維數(shù)及大小的數(shù)組
DimnumAsInteger修改“輸入”命令按鈕Command1的Click事件代碼如下:
PrivateSubCommand1_Click()
StaticiAsInteger
Text1.SetFocus ‘使程序開始時(shí),光標(biāo)(焦點(diǎn))位于輸入框Text1中
i=i+1
ReDimPreservea(7,i)'聲明動(dòng)態(tài)數(shù)組,保留原先數(shù)據(jù)Form1.Caption="請輸入第"&Str(i+1)&"位同志的情況"
a(1,i)=Text1.Text
a(2,i)=Text2.Text
a(3,i)=Text3.Text
a(4,i)=Text4.Text
a(5,i)=Text5.Text
a(6,i)=Text6.Textnum=i
Text1.Text=""
Text2.Text=""
Text3.Text=""
Text4.Text=""
Text5.Text=""
Text6.Text=""
EndSub“查詢”命令按鈕Command2的Click事件代碼如下:
PrivateSubCommand2_Click()
StaticiAsInteger
Fori=1Tonum
Ifa(1,i)=Text1.TextThen
Text2.Text=a(2,i)
Text3.Text=a(3,i)
Text4.Text=a(4,i)
Text5.Text=a(5,i)
Text6.Text=a(6,i)
ExitSub ‘跳出本過程
EndIf
Nexti
MsgBox“查無此人!”,vbOKOnly,“抱歉”
EndSub“結(jié)束”命令按鈕Command3的Click事件代碼如下:
PrivateSubCommand3_Click()
UnloadMe
EndSub
(3)運(yùn)行程序,結(jié)果同【實(shí)例6-4】。
【實(shí)例6-7】編寫程序,輸出楊輝三角形,如圖6.10所示。圖6.10楊輝三角形
【實(shí)現(xiàn)步驟】
(1)問題分析。楊輝三角形中的各行是二項(xiàng)式(a+b)
n展開式中各項(xiàng)的系數(shù)。由圖6.10的排列格式可以看出,楊輝三角形每行的第一列和最后一列均為1,其余各項(xiàng)的值都是其上一行中前一列元素與后一列元素之和。上一行同一列沒有元素時(shí)認(rèn)為是0。由此可得算法為
A(i,j)
=A(i-1,j-1)+A(i-1,j)
(2)建立應(yīng)用程序用戶界面并設(shè)置對象屬性,參見圖6.11所示。圖6.11楊輝三角形
(3)編寫代碼。
在模塊的通用段聲明一個(gè)動(dòng)態(tài)數(shù)組:
Dima()
為了能輸入行數(shù)并按回車后可以得到各項(xiàng),編寫文本框Text1的按鍵(KeyPress)事件代碼如下:
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
DimnAsInteger
IfKeyAscii=13Then‘按回車鍵時(shí)執(zhí)行
n=Val(Text1.Text)’在文本框中輸入的行數(shù)
Ifn>10Then‘設(shè)定不超過10行
MsgBox“請不要超過10”’消息框
ExitSub
'退出過程
EndIf
ReDima(n,n)‘分配動(dòng)態(tài)數(shù)組實(shí)際的元素個(gè)數(shù)
Fori=1Ton
a(i,1)=1:a(i,i)=1’使得每行兩邊的元素值為1
Next
PrintTab(20);Format(1,"!@@@")&Chr(13)
PrintTab(18);Format(1,“!@@@”)&Space(2)&Format(1,“!@@@”)&Chr(13)
Fori=3Ton
PrintTab(20–i*2);Format(a(i,1),“!@@@@”)&Space(2);
Forj=2Toi–1
a(i,j)=a(i–1,j–1)+a(i–1,j)
PrintFormat(a(i,j),"!@@@@@");
Next
PrintSpace(2)&Format(a(i,i),“!@@@@”)&Chr(13)
Next
EndIf
EndSub
(4)運(yùn)行程序,在文本框中輸入行數(shù),如8,回車后顯示出楊輝三角形,如圖6.11所示。
4.了解ForEach…Next語句
與For…Next循環(huán)語句類似,F(xiàn)orEach…Next循環(huán)語句也被用來執(zhí)行指定重復(fù)次數(shù)的循環(huán)。但是,F(xiàn)orEach…Next語句專門用于數(shù)組或?qū)ο蠹现械拿總€(gè)元素。
ForEach…Next語句的語法格式為
ForEach〈成員〉In〈數(shù)組〉
[〈語句組〉]
[ExitFor]
Next[〈成員〉]
【說明】
(1)〈成員〉是一個(gè)Variant(變體)型變量,代表數(shù)組中的每個(gè)元素。
(2)〈數(shù)組〉是一個(gè)數(shù)組名,沒有括號和上下界。
5.理解ForEach…Next語句的執(zhí)行過程
用ForEach…Next語句可以對數(shù)組中的元素進(jìn)行處理,包括查詢、顯示或讀取。它所重復(fù)執(zhí)行的次數(shù)由數(shù)組中元素的個(gè)數(shù)確定,也就是說,數(shù)組中有多少個(gè)元素,就自動(dòng)重復(fù)執(zhí)行多少次。例如:
Dima(1To8)
ForEachxIna
Printx;
Nextx
以上程序中的Print語句重復(fù)八次(因?yàn)閿?shù)組a中有八個(gè)元素),每次輸出數(shù)組中一個(gè)元素的值。這里的x類似于For…Next循環(huán)中的循環(huán)控制變量,但不需要為其提供初值和終值,而是根據(jù)數(shù)組元素的個(gè)數(shù)確定執(zhí)行循環(huán)體的次數(shù)。此外,x的值處于不斷的變化之中:開始執(zhí)行時(shí),x是數(shù)組第一個(gè)元素的值;執(zhí)行完一次循環(huán)體后,x變?yōu)閿?shù)組第二個(gè)元素的值……當(dāng)x為最后一個(gè)元素的值時(shí),執(zhí)行最后一次循環(huán)。
【課堂演練】
【實(shí)例6-8】用ForEach…Next語句求1+2+3+…+100的值。
【實(shí)現(xiàn)步驟】
(1)建立用戶界面并設(shè)置對象屬性,如圖6.12所示。圖6.12建立用戶界面和設(shè)置對象屬性
(2)編寫事件代碼。編寫“計(jì)算”命令按鈕Command1的Click事件代碼:
PrivateSubCommand1_Click()
Dimx(100),a ‘聲明數(shù)組和變量
Fori=1To100’為數(shù)組元素賦值
x(i)=i
Nexti
ForEachaInx() ‘求和
s=s+a
Next
Label1.Caption=s ’輸出結(jié)果
EndSub
(3)運(yùn)行程序,結(jié)果如圖6.12所示。任務(wù)6.4控件數(shù)組
任務(wù)導(dǎo)入
許多同樣的數(shù)據(jù)類型保存在一個(gè)變量中稱為數(shù)組;同理,許多相同的控件集合在一起就是控件數(shù)組。使用控件數(shù)組可以方便地對界面上相同的控件進(jìn)行統(tǒng)一編程,以簡化代碼。
本任務(wù)將學(xué)習(xí)控件數(shù)組的概念和使用方法。學(xué)習(xí)目標(biāo)
(1)理解控件數(shù)組的概念。
(2)會建立控件數(shù)組。
(3)會使用控件數(shù)組編程。任務(wù)實(shí)施
1.理解控件數(shù)組的概念
控件數(shù)組是由一組相同類型的控件組成的,它們共用一個(gè)控件名,具有相同的屬性。當(dāng)建立控件數(shù)組時(shí),系統(tǒng)給每個(gè)元素賦一個(gè)唯一的索引號(Index)。通過屬性窗口的Index屬性可以知道該控件的下標(biāo)是多少,第一個(gè)控件的下標(biāo)是0。例如,控件數(shù)組cmdName(5)表示控件數(shù)組名為cmdName的第六個(gè)
元素??丶?shù)組可以在命令按鈕組、單選鈕組、復(fù)選框組、文本框組、標(biāo)簽組等控件中使用。
控件數(shù)組的特點(diǎn)為:
具有相同的名稱(Name)。
用下標(biāo)索引值(Index)來識別各個(gè)控件。
控件數(shù)組適用于若干個(gè)控件執(zhí)行相似操作的場合,控件數(shù)組共享同樣的事件過程。
2.建立控件數(shù)組
可以使用下述三種方法之一建立控件數(shù)組:
為控件起相同的名字。
復(fù)制現(xiàn)有控件。
設(shè)置控件的Index屬性為非Null數(shù)值。
1)通過為控件起相同的名字建立控件數(shù)組
(1)畫出控件數(shù)組中要添加的控件(必須為同一類型的控件),并且決定哪一個(gè)控件作為數(shù)組中的第一個(gè)元素。
(2)選定控件,將其Name屬性設(shè)置成數(shù)組名稱。
(3)在為數(shù)組中的其他控件輸入相同名稱時(shí),VB將顯示一個(gè)對話框,要求確認(rèn)是否要?jiǎng)?chuàng)建控件數(shù)組。此時(shí)回答“是”,確認(rèn)此操作。例如,若控件數(shù)組的第一個(gè)元素名為Command1,此時(shí)選擇另一個(gè)命令按鈕添加到數(shù)組中,并將其名稱也設(shè)置為Command1,將顯示這樣一段信息:“已經(jīng)有一個(gè)控件為'Command1'。創(chuàng)建一個(gè)控件數(shù)組嗎?”。選擇“是”按鈕,確認(rèn)操作,如圖6.13所示。圖6.13確認(rèn)創(chuàng)建控件數(shù)組
2)通過復(fù)制現(xiàn)有控件建立控件數(shù)組
(1)畫出控件數(shù)組中的第一個(gè)控件。
(2)當(dāng)控件獲得焦點(diǎn)時(shí),單擊“復(fù)制”按鈕。
(3)單擊“粘貼”按鈕,VB將顯示一個(gè)對話框詢問是否確認(rèn)創(chuàng)建控件數(shù)組?;卮稹笆恰?,確認(rèn)操作,得到控件數(shù)組中的第二個(gè)控件。
(4)繼續(xù)單擊“粘貼”按鈕,可得到控件數(shù)組中的其他控件。每個(gè)新數(shù)組元素的索引值與其添加到控件數(shù)組中的次序相同,如圖6.14中第二次粘貼的Option1控件,其Index的值為2。并且在添加控件時(shí),大多數(shù)可視屬性,如高度、寬度和顏色等,都將從數(shù)組中第一個(gè)控件復(fù)制到新控件中。圖6.14新數(shù)組元素的索引值與其添加到控件數(shù)組中的次序一樣
【實(shí)例6-9】設(shè)計(jì)一個(gè)窗體,輸入兩個(gè)數(shù),根據(jù)不同運(yùn)算符計(jì)算結(jié)果。
【實(shí)現(xiàn)步驟】
(1)問題分析。假設(shè)需要進(jìn)行的有加、減、乘、除、整除、余數(shù)、指數(shù)和字符串連接8種運(yùn)算。根據(jù)運(yùn)算方式,顯示計(jì)算結(jié)果。
(2)建立應(yīng)用程序用戶界面,并設(shè)置對象屬性。利用Label控件,在窗體上拖曳出四個(gè)標(biāo)簽對象Label1~Label4;利用TextBox控件,拖曳出Text1和Text2兩個(gè)文本框?qū)ο螅焕肍rame控件,拖曳出Frame1框?qū)ο蟆@肙ptionButton控件,拖曳出置于Frame1中的Option1單選鈕,單擊“復(fù)制”按鈕,將Option1單選鈕的對象復(fù)制到剪貼板中,再選中Frame1對象,單擊“粘貼”按鈕,單擊“是”,表示將產(chǎn)生一個(gè)屬于單選鈕類別的控件數(shù)組。將Frame1對象內(nèi)左上角新產(chǎn)生的Option1對象拖曳到Frame1框內(nèi)已有項(xiàng)目的下方,如此重復(fù)粘貼,直到產(chǎn)生8個(gè)Option1對象,如圖6.15(a)所示,并依次改變標(biāo)題名。圖6.15用戶界面與程序運(yùn)行結(jié)果
(3)編寫程序代碼。單選鈕Option1的Click事件代碼:
PrivateSubOption1_Click(IndexAsInteger)
DimxAsSingle,yAsSingle
x=Val(Text1.Text)
y=Val(Text2.Text)
SelectCaseIndex‘Index值從0開始
Case0’加
Label4.Caption=x+y
Case1 '減
Label4.Caption=x–y
Case2 '乘
Label4.Caption=x*y
Case3 '除
Label
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度石灰石礦山安全生產(chǎn)責(zé)任追究制度合同3篇
- 水性油漆銷售合同范例
- 2024外墻仿石漆定制化施工合作協(xié)議3篇
- 2024年智慧城市系統(tǒng)集成項(xiàng)目合同
- 2024年物業(yè)服務(wù)前期合作合同模板一
- 惠東租房合同范例
- 商務(wù)英語寫作(2)-Notice
- 轉(zhuǎn)讓租賃商鋪合同范例
- 演員合作合同范例
- 勞動(dòng)合同范例和續(xù)保合同
- TAVI(經(jīng)皮導(dǎo)管主動(dòng)脈瓣植入術(shù))術(shù)后護(hù)理
- 員工心理健康培訓(xùn)課件
- IEC60287中文翻譯版本第一部分課件
- 巴赫作品《前奏曲》Prelude-BWV1006a-;J.S.Bach古典吉他譜
- 質(zhì)量檢驗(yàn)員培訓(xùn)教材(共62張)課件
- (日文文書模板范例)請求書-請求書
- 燃?xì)忮仩t培訓(xùn)(39張)課件
- 血管瘤的護(hù)理診斷及護(hù)理措施ppt
- 國家開放大學(xué)實(shí)驗(yàn)學(xué)院生活中的法律第四單元測驗(yàn)答案
- 廣東工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)二叉樹課程設(shè)計(jì)報(bào)告
- 肽的健康作用及應(yīng)用課件
評論
0/150
提交評論