《Visual Basic程序設(shè)計(jì)》課件項(xiàng)目六_第1頁
《Visual Basic程序設(shè)計(jì)》課件項(xiàng)目六_第2頁
《Visual Basic程序設(shè)計(jì)》課件項(xiàng)目六_第3頁
《Visual Basic程序設(shè)計(jì)》課件項(xiàng)目六_第4頁
《Visual Basic程序設(shè)計(jì)》課件項(xiàng)目六_第5頁
已閱讀5頁,還剩116頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論