




已閱讀5頁(yè),還剩77頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
5.1 數(shù)組的概念,5.2 數(shù)組的基本操作,5.3 數(shù)組應(yīng)用舉例,5.4 控件數(shù)組,5.5 自定義數(shù)據(jù)類(lèi)型,數(shù)組與自定義數(shù)據(jù)類(lèi)型,第 5 章,第 2 頁(yè),方法1:把10個(gè)學(xué)生的成績(jī)均賦值給一個(gè)變量。,Dim i%, s!, a!, avg!, p% For i = 1 To 10 a = Val(InputBox(“Enter a number“) s = s + a next i avg = s / 10 Print avg p = 0 For i = 1 To 10 a = Val(InputBox(“Enter a number“) If a avg Then p = p + 1 next i Print “高于平均分“ & avg & “的學(xué)生共有“ & p & “人“,引例:求一個(gè)班10個(gè)學(xué)生的平均成績(jī),統(tǒng)計(jì)高于平均分的人數(shù)。,第 3 頁(yè),分析表明: 程序中采用一個(gè)變量a,只能保存最后一個(gè)學(xué)生成績(jī),無(wú)法保存所有學(xué)生成績(jī),因此,在統(tǒng)計(jì)高于平均分人數(shù)時(shí),不得不重復(fù)輸入成績(jī), 這種方法存在著: (1)重復(fù)錄入數(shù)據(jù):用戶輸入數(shù)據(jù)的工作量成倍增加; (2)容易出錯(cuò):若本次輸入的成績(jī)與上次不同,則統(tǒng)計(jì)的結(jié)果不正確。,第 4 頁(yè),如果使用:A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,Dim s!,p%, Avg!, A1!,A2!,A3!,A4!,A5!,A6!,A7!,A8!,A9!,A10! A1=Val(InputBox(“ ) A2=Val(InputBox(“) A3=Val(InputBox(“) A4=Val(InputBox(“) A5=Val(InputBox(“) A6=Val(InputBox(“) A7=Val(InputBox(“) A8=Val(InputBox(“) A9=Val(InputBox(“) A10=Val(InputBox(“),方法2:用多個(gè)變量保存每個(gè)學(xué)生成績(jī)。,s=A1+A2+A3+A4+A5+A6+A7+A8+A9+A10 Avg=s/10 P=0 Print “10個(gè)學(xué)生平均分?jǐn)?shù)為“ & Avg IF A1Avg Then pp+ IF A2Avg Then pp+ IF A3Avg Then pp+ Print “高于平均分“ & Avg _ & “的學(xué)生共有“ & p & “人“,第 5 頁(yè),如果使用:A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,方法2:用多個(gè)變量保存每個(gè)學(xué)生成績(jī)。,優(yōu)點(diǎn):能夠保存每位學(xué)生的成績(jī),不用重新輸入,采用定義多個(gè)變量的方法雖然解決了成績(jī)保存的問(wèn)題,但當(dāng)數(shù)據(jù)量較大時(shí),程序編寫(xiě)麻煩,不易實(shí)現(xiàn)或者無(wú)法實(shí)現(xiàn)。 如果將A后面的下標(biāo)改為i,使用循環(huán)為其賦值程序會(huì)更簡(jiǎn)潔! 解決方法:利用數(shù)組可以很方便的實(shí)現(xiàn)!,第 6 頁(yè),方法3:用數(shù)組實(shí)現(xiàn),Dim a(1 to 10) As Integer, s!, Avg!, p%, i% 數(shù)組定義 s = 0 求成績(jī)總和 For i = 1 To 10 a(i)= InputBox(“輸入第“ & i & “位學(xué)生的成績(jī)“) s = s +a(i) next i Avg = s / 10 求平均成績(jī) p=0 For i = 1 To 10 統(tǒng)計(jì)高于平均分人數(shù) If a(i)=avg Then p=p+1 next i Print “高于平均分” & Avg “的學(xué)生共有” & p “人”,結(jié)論: 數(shù)組能始終保持輸入的數(shù)據(jù),一次輸入,多次使用。 使用數(shù)組,能在程序中引入循環(huán),簡(jiǎn)化程序編寫(xiě)。,第 7 頁(yè),5.1 數(shù)組,1、數(shù)組的有關(guān)概念 (1)數(shù)組:是一個(gè)由多個(gè)同類(lèi)型變量組成的數(shù)據(jù)集合,簡(jiǎn)單的講就是一組同類(lèi)型的變量。 (2)數(shù)組名:這組變量有統(tǒng)一的名稱(chēng),就是數(shù)組名。 (3)數(shù)組元素:構(gòu)成數(shù)組的成員。每個(gè)數(shù)組元素和一個(gè)普通變量一樣能存放一個(gè)數(shù)據(jù)。 (4)下標(biāo):用來(lái)標(biāo)識(shí)數(shù)組中的每一個(gè)元素的序號(hào)。 如,有一個(gè)數(shù)組a(n),數(shù)組元素可分別表示為: a(1), a(2), a(3), a(4),第 8 頁(yè),5.1 數(shù)組,2、數(shù)組的特點(diǎn) (1)數(shù)組由若干個(gè)數(shù)組元素組成,數(shù)組元素的數(shù)據(jù)類(lèi)型一致。 (2)數(shù)組元素是有次序存放的,下標(biāo)代表它在數(shù)組中的位置。 (3)數(shù)組中各元素之間有內(nèi)在聯(lián)系,在內(nèi)存中占連續(xù)的一段存儲(chǔ)單元。,第 9 頁(yè),3、數(shù)組的分類(lèi) (1)按照定義時(shí)數(shù)組元素個(gè)數(shù)確定與否,數(shù)組可分為: 靜態(tài)數(shù)組:定義時(shí)數(shù)組元素的個(gè)數(shù)就已經(jīng)確定(大小不可以調(diào)整) 動(dòng)態(tài)數(shù)組:定義時(shí)數(shù)組元素的個(gè)數(shù)不確定,在程序運(yùn)行時(shí)根據(jù)需要才確定數(shù)組元素的多少(大小多少可以調(diào)整) (2)按照數(shù)組元素下標(biāo)的個(gè)數(shù),數(shù)組可分為: 一維數(shù)組:數(shù)組元素有一個(gè)下標(biāo) 二維數(shù)組:數(shù)組元素有兩個(gè)下標(biāo) 多維數(shù)組:數(shù)組元素有多個(gè)下標(biāo),第 10 頁(yè),1.一維數(shù)組,(A(0) A(1) A(2) A(3) A(4),一、按下標(biāo)的個(gè)數(shù)分,2.二維數(shù)組,5.1 .1 數(shù)組的分類(lèi),3.多維數(shù)組,Dim A(1,2) As Integer,Dim A(4)As Integer,第 11 頁(yè),二、按聲明時(shí)數(shù)組元素個(gè)數(shù)是否確定分,1、靜態(tài)數(shù)組,特點(diǎn):定義時(shí)數(shù)組元素的個(gè)數(shù)就已經(jīng)確定(多少不可以調(diào)整),2、動(dòng)態(tài)數(shù)組,特點(diǎn):定義時(shí)數(shù)組元素的個(gè)數(shù)不確定,在程序運(yùn)行時(shí)根據(jù)需要才確定數(shù)組元素的多少(多少可以調(diào)整),第 12 頁(yè),1、靜態(tài)數(shù)組,1)一維數(shù)組,功能:定義一個(gè)一維數(shù)組,并初始化所有數(shù)組元素。,格式:Dim 數(shù)組名(下界 To 上界)As 數(shù)據(jù)類(lèi)型,作用:定義“(上界-下界+1)”個(gè)數(shù)組元素,這些元素 按照下標(biāo)由小到大的順序連續(xù)存儲(chǔ)在內(nèi)存中。,第 13 頁(yè),說(shuō)明 數(shù)組名的定義同變量,以字母開(kāi)頭,不能使用VB中的關(guān)鍵字,但盡可能有意義。例如: Dim x(10) As Single 正確 Dim Sub(20) As Long 錯(cuò)誤 Dim Math(1 To 8) As Single 正確 Dim 5X(20) As Long 錯(cuò)誤,格式:Dim 數(shù)組名 (下界 To 上界)As 數(shù)據(jù)類(lèi)型,第 14 頁(yè),說(shuō)明: 靜態(tài)數(shù)組的維界定義必須為常數(shù)或符號(hào)常量,或是常量表達(dá)式,不能是變量或其表達(dá)式。例如: Const k as integer=10 Dim x(10) As Single 正確 Dim a(k) as long 正確 Dim B(5+3) as String 正確 而 Dim x(n) As Single 錯(cuò)誤,格式:Dim 數(shù)組名 (下界 To 上界)As,第 15 頁(yè), 維界的形式是: 下界 To 上界 1、當(dāng)下界 To缺省時(shí),默認(rèn)值為0 2、下界上界 3、數(shù)組元素的個(gè)數(shù)是:上界下界1 4、維界說(shuō)明如果不是整數(shù),將按四舍五入處理。,Dim A(1 To 9.8) As Single 定義了有10個(gè)元素的數(shù)組 A(1)、A(2)、A(9)、A(10),Dim B(10) As String 定義了有11個(gè)元素的數(shù)組 B(0)、B(1) B(9)、B(10),Dim A(5 To 6+2) As Integer 定義了有4個(gè)元素的數(shù)組,7.1 .2 數(shù)組的定義說(shuō)明,格式:Dim 數(shù)組名 (下界 To 上界)As,第 16 頁(yè), As 用來(lái)說(shuō)明數(shù)組元素的類(lèi)型,缺省為變體型(Variant)。,例如: Dim a(12) As Single 單精度型,下標(biāo)范圍為012. Dim x!(1 To 50 ) 單精度,下標(biāo)范圍為150. Dim y(1 To 10 ) 變體型,下標(biāo)范圍為110.,格式:Dim 數(shù)組名 (下界 To 上界)As,第 17 頁(yè), 靜態(tài)數(shù)組必須先聲明后使用。,聲明數(shù)組后,各數(shù)組元素的初值與聲明普通變量相同 1、置數(shù)值型數(shù)組中的全部元素值為0 2、置字符串?dāng)?shù)組和變體數(shù)組中的元素值為空串 3、布爾型數(shù)組元素值初始化為False,注: 一維靜態(tài)數(shù)組包含數(shù)組元素的個(gè)數(shù)必須確定!,可以使用“Option Base n”來(lái)重新定義數(shù)的下界,格式:Option Base n 說(shuō)明:n為數(shù)組下標(biāo)的下界,只能是0或1。 在模塊的通用部分說(shuō)明,第 18 頁(yè),說(shuō)明: 和一維數(shù)組相同,維界由上界、下界組成,格式: Dim 數(shù)組名(下界1 to 上界1,下界2 to 上界2) As 數(shù)據(jù)類(lèi)型,1、靜態(tài)數(shù)組,2)二維數(shù)組,和一維數(shù)組相同,可以使用“Option Base n”來(lái)重新定義數(shù)的下界 二維數(shù)組一般可以看成一個(gè)二維表、行列式、矩陣、或平面坐標(biāo), 通常用第一維表示數(shù)組有多少行、第二維表示數(shù)組有多少列。,第 19 頁(yè),靜態(tài)數(shù)組注意事項(xiàng) (1)維說(shuō)明中下界和上界只能取直接常量或直接常量表達(dá)式,符號(hào)常量和符號(hào)常量表達(dá)式,不能為變量或包含變量的表達(dá)式。 (2)下界維說(shuō)明可以省略,默認(rèn)從0開(kāi)始 Dim x(6) As String * 6 (3)維說(shuō)明中使用的常量可以為小數(shù),系統(tǒng)自動(dòng)四舍五入。 Dim x(1 To 4.3 + 2) As Integer,定義數(shù)組x是有x(0)到x(6)連續(xù)的7個(gè)數(shù)組元素,每個(gè)元素可以存儲(chǔ)6個(gè)字符,Dim n As Integer n=10 Dim a(1 To n) As Single,Const n As Integer = 6 Dim x(1 To n) As Double Dim y(1 To n + 6),第 20 頁(yè),靜態(tài)數(shù)組注意事項(xiàng) (4)用“Option Base 1”可設(shè)定數(shù)組元素下界為1,將下界默認(rèn)值從0改為1。 (5)一維靜態(tài)數(shù)組在同一過(guò)程中只能聲明一次 (6)聲明數(shù)組后,各數(shù)組元素的初值與聲明普通變量相同。 (7)聲明數(shù)組和聲明變量一樣,數(shù)組也有作用范圍。,Private Sub Command1_Click() Dim a(1 To 6) As Integer Dim a(8) As Single End Sub,第 21 頁(yè),Pravate Sub Form_Click() Print A(2) End Sub,(8)數(shù)組必須先聲明明,后使用,第 22 頁(yè),7.2 數(shù)組元素的引用,數(shù)組元素可以通過(guò)數(shù)組名加下標(biāo)的方式引用,他可以通過(guò)下標(biāo)變量進(jìn)行批量數(shù)據(jù)的計(jì)算,用法與一般變量相同 例如:a(1)=3.14259 x(1,2)=100 下面的語(yǔ)句可以為多個(gè)數(shù)組元素賦值,dim a%(1 to 20) For i=1 to 20 a(i)=2*i-1 next i,dim p%(10) For k=0 to 10 p(k)=k next k,第 23 頁(yè),例5-1 用InputBox函數(shù)向數(shù)組a中輸入10個(gè)整數(shù),找出其中最大值、最小值以及他們對(duì)應(yīng)的數(shù)組元素的下標(biāo),Private Sub Form_Click() Dim a%(1 To 10), i%, max%, min%, k%, p% For i = 1 To 10 a(i) = Val(InputBox(“a(“ Next i Print max = a(1): p = 1 min = a(1): k = 1,第 24 頁(yè),For i = 2 To 10 If a(i) max Then max = a(i): p = i End If If a(i) min Then min = a(i): k = i End If Next i Print “max=a(“ & p & “)=“ & max Print “min=a(“ & k & “)=“ & min End Sub,第 25 頁(yè),例5-2 用Rnd函數(shù)產(chǎn)生50,100區(qū)間的隨機(jī)整數(shù)放入數(shù)組,計(jì)算平均值,輸出大于平均值的所有的數(shù)及下標(biāo)。,Private Sub Form_Click() Dim a(1 To 30) As Integer, i%, p! p = 0 For i = 1 To 30 a(i) = Int(51 * Rnd + 50) p = p + a(i) Next i p = p / 30 Print “平均值是:“; p For i = 1 To 30 If a(i) p Then Print “a(“ a(i) Next i End Sub,第 26 頁(yè),例5-3 二維數(shù)組 用Rnd函數(shù)隨機(jī)產(chǎn)生30個(gè)同學(xué)4門(mén)課程的成績(jī)放到一個(gè)二維數(shù)組中,計(jì)算并輸出每個(gè)同學(xué)的平均成績(jī) 分析: 需要引進(jìn)一個(gè)有30行,4列的二維數(shù)組;用循環(huán)結(jié)構(gòu)給數(shù)組變量賦值、計(jì)算、輸出,第 27 頁(yè),Private Sub Form_Click() Dim s(30, 5) As Integer, i%, j% For i = 1 To 30 For j = 1 To 4 s(i, j) = Int(51 * Rnd) + 50 s(i, 5) = s(i, 5) + s(i, j) Next j s(i, 5) = s(i, 5) / 4 Next i,第 28 頁(yè),Print “學(xué)號(hào)“, “數(shù)學(xué)“, “英語(yǔ)“, “物理“, “化學(xué)“, “總評(píng)“ For i = 1 To 30 Print i, For j = 1 To 5 Print s(i, j), Next j Print Next i End Sub,第 29 頁(yè),例5-4 用InputBox函數(shù)給一個(gè)四行四列的矩陣輸入數(shù)據(jù),然后交換矩陣中各元素行列位置(矩陣的轉(zhuǎn)置),第 30 頁(yè),Private Sub Form_Click() Dim s(4, 4) As Single, x As Single, i%, j% For j = 1 To 4 For i = 1 To 4 s(i, j) = InputBox(“s(“ Next j Print Next i,第 31 頁(yè),For i = 1 To 4 For j = 1 To 4 x = s(i, j): s(i, j) = s(j, i): s(j, i) = x Next j Next i Print “交換后:“ For i = 1 To 4 For j = 1 To 4 (i) Print s(i, j); Next j Print Next i End Sub,第 32 頁(yè),5.1 數(shù)組的概述,靜態(tài)數(shù)組不能解決的問(wèn)題,有時(shí)候在寫(xiě)程序代碼時(shí)并不知道要處理多少個(gè)數(shù);,定義靜態(tài)數(shù)組時(shí)又必須要確定數(shù)組元素個(gè)數(shù);,我們可以在定義時(shí)將元素定義多一點(diǎn);,但又會(huì)浪費(fèi)寶貴的內(nèi)存空間,而且,多少才算多??!,能不能在寫(xiě)代碼時(shí)先定義一個(gè)空數(shù)組,在用時(shí)根據(jù)實(shí) 際需要再確定大小呢?,有!VB允許動(dòng)態(tài)定義數(shù)組!,第 33 頁(yè),5.1 數(shù)組的概述,2、動(dòng)態(tài)數(shù)組,(1)聲明時(shí)不說(shuō)明數(shù)組元素個(gè)數(shù)的數(shù)組稱(chēng)為動(dòng)態(tài)數(shù)組; (2)通常聲明步驟有兩步; 第一步:用Dim聲明一個(gè)空數(shù)組; 第二步:在確定數(shù)組大小后再用ReDim確定大小 (3)也可以直接省略第一步而直用ReDim定義;,Private Sub Command1_Click() Dim a%(), b!(10), n% n = InputBox(“請(qǐng)輸入要處理的數(shù)據(jù)個(gè)數(shù)“) ReDim a(n) End Sub,第 34 頁(yè),7. 動(dòng)態(tài)數(shù)組,(1)聲明時(shí)不說(shuō)明數(shù)組元素個(gè)數(shù)的數(shù)組稱(chēng)為動(dòng)態(tài)數(shù)組; (2)通常聲明步驟有兩步; 第一步:用Dim聲明一個(gè)空數(shù)組; 第二步:在確定數(shù)組大小后再用ReDim確定大小 (3)也可以直接省略第一步而直用ReDim定義;,Private Sub Command1_Click() Dim n% n = InputBox(“請(qǐng)輸入要處理的數(shù)據(jù)個(gè)數(shù)“) ReDim a(n) End Sub,第 35 頁(yè),例5-5 用Rnd產(chǎn)生n個(gè)0到100之間的隨機(jī)整數(shù)放到a數(shù)組中,并計(jì)算平均值,將大于平均值的數(shù)和下標(biāo)輸出。,Option Base 1 Private Sub Form_Click() Dim a() As Integer, i%, p! n = InputBox(“請(qǐng)確定數(shù)組的大小“) ReDim a(n) For i = 1 To n a(i) = Int(Rnd * 101) p = p + a(i) Next i p = p / n Print “平均值=“; p For i = 1 To n If a(i) p Then Print “a(“ a(i) Next i End Sub,第 36 頁(yè),7. 動(dòng)態(tài)數(shù)組,(4)利用Preserve關(guān)鍵字可以在擴(kuò)充或壓縮數(shù)組大小時(shí)保留原來(lái)的值。,Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i); Next i,第 37 頁(yè),7. 動(dòng)態(tài)數(shù)組,(4)利用Preserve關(guān)鍵字可以在擴(kuò)充或壓縮數(shù)組大小時(shí)保留原來(lái)的值。,Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i); Next i,第 38 頁(yè),7. 動(dòng)態(tài)數(shù)組,(4)利用Preserve關(guān)鍵字可以在擴(kuò)充或壓縮數(shù)組大小時(shí)保留原來(lái)的值。,Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i); Next i,n,6,第 39 頁(yè),7. 動(dòng)態(tài)數(shù)組,(4)利用Preserve關(guān)鍵字可以在擴(kuò)充或壓縮數(shù)組大小時(shí)保留原來(lái)的值。,Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim a%(1 To n) For i = 1 To n Print a(i); Next i,n,6,a,0,0,0,0,0,0,第 40 頁(yè),7. 動(dòng)態(tài)數(shù)組,(4)利用Preserve關(guān)鍵字可以在擴(kuò)充或壓縮數(shù)組大小時(shí)保留原來(lái)的值。,Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim a%(1 To n) For i = 1 To n Print a(i); Next i,n,6,a,1,2,3,4,5,6,第 41 頁(yè),7. 動(dòng)態(tài)數(shù)組,(4)利用Preserve關(guān)鍵字可以在擴(kuò)充或壓縮數(shù)組大小時(shí)保留原來(lái)的值。,Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim a%(1 To n) For i = 1 To n Print a(i); Next i,n,8,a,1,2,3,4,5,6,第 42 頁(yè),7. 動(dòng)態(tài)數(shù)組,(4)利用Preserve關(guān)鍵字可以在擴(kuò)充或壓縮數(shù)組大小時(shí)保留原來(lái)的值。,Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim a%(1 To n) For i = 1 To n Print a(i); Next i,n,8,a,0,0,0,0,0,0,0,0,第 43 頁(yè),7. 動(dòng)態(tài)數(shù)組,(4)利用Preserve關(guān)鍵字可以在擴(kuò)充或壓縮數(shù)組大小時(shí)保留原來(lái)的值。,Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim a%(1 To n) For i = 1 To n Print a(i) Next i,第 44 頁(yè),7. 動(dòng)態(tài)數(shù)組,(4)利用Preserve關(guān)鍵字可以在擴(kuò)充或壓縮數(shù)組大小時(shí)保留原來(lái)的值。,Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i); Next i,n,8,a,第 45 頁(yè),7. 動(dòng)態(tài)數(shù)組,(4)利用Preserve關(guān)鍵字可以在擴(kuò)充或壓縮數(shù)組大小時(shí)保留原來(lái)的值。,Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i); Next i,n,8,a,0,0,第 46 頁(yè),7. 動(dòng)態(tài)數(shù)組,(4)利用Preserve關(guān)鍵字可以在擴(kuò)充或壓縮數(shù)組大小時(shí)保留原來(lái)的值。,Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i) Next i,第 47 頁(yè),8. 獲得數(shù)組下標(biāo)上下界的函數(shù),(1)UBound(數(shù)組名),可以獲得指定一維數(shù)組的下標(biāo)上界; (2)LBound(數(shù)組名),可以獲得指定一維數(shù)組的下標(biāo)下界; (3)UBound(數(shù)組名,1),可以獲得多維數(shù)組第1維的下標(biāo)上界; (4)Lbound(數(shù)組名,N),可以獲得多維數(shù)組第N維的下標(biāo)下界。,第 48 頁(yè),例5-6 定義一個(gè)動(dòng)態(tài)數(shù)組來(lái)存放學(xué)生名單,并可以在其中隨時(shí)添加新的學(xué)生姓名。,Dim a() As String Private Sub Form_Load() Dim n As Integer n = 2 ReDim a(n) a(0) = “張三“ a(1) = “李四“ a(2) = “王五“ End Sub,第 49 頁(yè),Private Sub Form_Click() m = UBound(a) ReDim Preserve a(m + 1) a(m + 1) = InputBox(“請(qǐng)輸入姓名“) For i = LBound(a) To UBound(a) Print a(i) Next i End Sub,第 50 頁(yè),9. 數(shù)組元素的遍歷,對(duì)一個(gè)數(shù)組中所有數(shù)組元素的執(zhí)行同一個(gè)操作,稱(chēng)之為數(shù)組元素的遍歷,這是對(duì)數(shù)組元素最常見(jiàn)的操作,一般要通過(guò)循環(huán)完成,一維用單循環(huán):,一維數(shù)組賦值 For i = LBound(a) To UBound(a) a(i) = Int(Rnd() * 100) Next i 一維數(shù)組輸出 For i = LBound(a) To UBound(a) Print a(i) Next i,第 51 頁(yè),9. 數(shù)組元素的遍歷,對(duì)一個(gè)數(shù)組中所有數(shù)組元素的執(zhí)行同一個(gè)操作,稱(chēng)之為數(shù)組元素的遍歷,這是對(duì)數(shù)組元素最常見(jiàn)的操作,一般要通過(guò)循環(huán)完成,二維用雙循環(huán):,二維數(shù)組賦值 Dim a%(3, 4), i%, j% For i = LBound(a, 1) To UBound(a, 1) For j = LBound(a, 2) To UBound(a, 2) a(i, j) = Int(Rnd() * 100) Next j Next i,第 52 頁(yè),10. 用數(shù)組解決問(wèn)題的步驟,(1) 根據(jù)要求聲明數(shù)組; (2) 為各數(shù)組元素賦值,一般通過(guò)遍歷完成; (3) 處理各數(shù)組元素中的數(shù)據(jù);一般通過(guò)遍歷完成 (4) 輸出處理結(jié)果,第 53 頁(yè),5.2 數(shù)組元素的賦值方法,1. 用循環(huán)逐一為數(shù)組元素賦有規(guī)律的數(shù)據(jù) 示例:聲明一個(gè)一維數(shù)組,給下標(biāo)為奇數(shù)的元素賦值為0,下標(biāo)為偶數(shù)的元素賦值為1。,Private Sub Command1_Click() Dim a%(1 To 10), i% For i = 1 To 10 a(i) = IIf(i / 2 = i 2, 1, 0) Next i End Sub,第 54 頁(yè),用循環(huán)逐一為數(shù)組元素賦有規(guī)律的數(shù)據(jù) 例7-7 聲明一個(gè)二維數(shù)組,給兩條對(duì)角線元素賦值為1,其它元素賦值為0。,Private Sub Command1_Click() Dim a%(1 To 10, 1 To 10), i%, j% For i = 1 To 10 For j = 1 To 10 If i = j Or i + j = 11 Then a(i, j) = 1 Else a(i, j) = 0 End If Next j Next i End Sub,優(yōu)點(diǎn):快速 缺點(diǎn):數(shù)據(jù)必須有規(guī)律,第 55 頁(yè),2. 用Array函數(shù)一次為所有元素賦值 (1)只能給一維動(dòng)態(tài)變體類(lèi)型數(shù)組各元素賦值; (2)一次給全部數(shù)組元素賦值,快速高效; (3)如果數(shù)組尚未聲明,數(shù)組元素的個(gè)數(shù)由列表中的數(shù)據(jù)個(gè)數(shù)決定。 格式 : 數(shù)組名=Array(數(shù)組元素值列表),例7-8 為二維數(shù)組數(shù)組賦初值,第 56 頁(yè),Private Sub Form_Click() Dim x(), a%(1 To 3, 1 To 3), i%, j% x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) For i = LBound(x) To UBound(x) a(1 + i 3, 1 + i Mod 3) = x(i) Next i For i = 1 To 3 For j = 1 To 3 Print a(i, j); Next j Print Next i End Sub,第 57 頁(yè),3. 用Inputbox為元素逐一賦值 (1)與普通變量賦值相同,可以在程序運(yùn)行時(shí)再輸入要處理的數(shù)據(jù),增強(qiáng)了程序的靈活性; (2)每為一個(gè)元素賦值時(shí)都要暫停程序運(yùn)行,效率低; (3)輸入的數(shù)據(jù)一旦有錯(cuò),修改只能重頭再來(lái)。,第 58 頁(yè),4. 用Split函數(shù)為數(shù)組各元素一次性賦值 數(shù)組名=Split(字符串表達(dá)式,分隔符) (1)只能為字符型數(shù)組賦值; (2)數(shù)據(jù)之間要有明確的、統(tǒng)一的分隔符; 例: Nam=Split(“王強(qiáng),李軍,劉平,王晶”,“,”) Score=Split(Text1.text,”) 說(shuō)明:字符串表達(dá)式可以是任何字符串;分隔符可以是各種字符,用以分隔數(shù)據(jù),第 59 頁(yè),例7-9 用文本框輸入一組英文單詞,統(tǒng)計(jì)單詞個(gè)數(shù),找出排在最前面和最后面的單詞。,Option Base 1 Private Sub Command1_Click() Dim a() As String, i%, n%, F$, E$ a = Split(Text1.Text, “ “) n = UBound(a) F = a(1): E = a(1) For i = 2 To n If a(i) E Then E = a(i) Next i Label2.Caption = F Label4.Caption = E Label6.Caption = n End Sub,Split函數(shù)賦值的數(shù)組最小下標(biāo)與Option Base n 無(wú)關(guān),數(shù)組元素下標(biāo)總是從零開(kāi)始,第 60 頁(yè),5.3 輸出數(shù)組元素的方法,1. 一維數(shù)組 一般通過(guò)單層循環(huán)將各數(shù)組元素輸出在一行或一列,如果數(shù)據(jù)量大,可以使用分行控制輸出在一屏中。 2. 二維數(shù)組 一般通過(guò)雙層循環(huán)將各行列元素按行列輸出,代碼如下:,For i = LBound(a, 1) To UBound(a, 1) 行循環(huán) For j = LBound(a, 2) To UBound(a, 2) 列循環(huán) Print a(i, j); 由行號(hào)和列號(hào)確定輸出的元素 Next j Print 一行輸出結(jié)束后換行 Next i,第 61 頁(yè),例5-10:假設(shè)有一個(gè)數(shù)組,內(nèi)有10個(gè)元素,按照由小到大順序?qū)⑺麄冞M(jìn)行排列。(用Rnd產(chǎn)生這十個(gè)元素),第一種方法:比較交換法,Private Sub Form_Click() Dim a(1 To 10) As Integer, i%, j%, t% Print “排序前:“ For i = 1 To 10 a(i) = Int(Rnd * 51) + 50 Print a(i); Next i Print,7 6 8 10 20 2 3 19 5,第 62 頁(yè),For i = 1 To 9 For j = i + 1 To 10 If a(i) a(j) Then t = a(i): a(i) = a(j): a(j) = t End If Next j Next i Print “排序后:“ For i = 1 To 10 Print a(i); Next i End Sub,缺點(diǎn):交換次數(shù)太多,效率低!,第 63 頁(yè),第二種方法:選擇排序法,在整個(gè)過(guò)程中只記錄比較結(jié)果,并不立即交換數(shù)據(jù),當(dāng)一輪比較結(jié)束后再進(jìn)行交換。,For i = 1 To 9 p = i For j = i + 1 To 10 If a(p) a(j) Then p = j Next j If p i Then t = a(i): a(i) = a(p): a(p) = t End If Next i,第 64 頁(yè),例5-11:給定一組數(shù)15,8,4,13,6,10,17,1,從鍵盤(pán)輸入一個(gè)數(shù),用順序查找法找出該數(shù)在數(shù)組總的位置,Option Base 1 Dim a(), m%, n%, i% Private Sub Form_Load() Show a = Array(15, 8, 4, 13, 6, 10, 17, 1) m = LBound(a) n = UBound(a) Print “數(shù)組元素如下:“ For i = m To n Print a(i) Next i Print End Sub,Show是窗體的一個(gè)方法,省略的話在窗體的Load事件中要用print方法輸出的內(nèi)容將看不到!,第 65 頁(yè),Private Sub Form_Click() Dim x%, p As Boolean x = InputBox(“請(qǐng)輸入要查找的數(shù)!“) p = False For i = m To n If a(i) = x Then p = True: Exit For Next i If p = True Then Print “在數(shù)組中的第“ & i & “位找到了該數(shù)!“ Else Print “沒(méi)有在數(shù)組中找到這個(gè)數(shù)!“ End If End Sub,第 66 頁(yè),例5-12 將由鍵盤(pán)輸入的一個(gè)數(shù)據(jù)插入到一個(gè)排好序的數(shù)列中,使其仍然保持有序。,Dim a() Private Sub Form_Load() a = Array(1, 3, 5, 7, 9, 10, 12, 14, 16, 18) Show Print “初始數(shù)據(jù):“ For i = 0 To UBound(a) Print a(i); Next i Print End Sub,第 67 頁(yè),Private Sub Form_Click() Dim x%, i%, t% x = InputBox(“請(qǐng)輸入要插入的數(shù)!“) ReDim Preserve a(UBound(a) + 1) For i = 0 To UBound(a) - 1 If x a(i) Then t = x: x = a(i): a(i) = t End If Next i a(i) = x Print “新的序列:“ For i = 0 To UBound(a) Print a(i); Next i Print End Sub,第 68 頁(yè),i = UBound(a) - 1 Do While i = LBound(a) If a(i) x Then a(i + 1) = a(i): i = i - 1 Else Exit Do End If Loop a(i + 1) = x,方法二:,第 69 頁(yè),例5-13 用Rnd函數(shù)產(chǎn)生一個(gè)4行5列的二維數(shù)組,找出最大數(shù)組元素和他所在的行號(hào)和列號(hào)。 分析: 產(chǎn)生一個(gè)二維數(shù)組; 輸出產(chǎn)生的二維數(shù)組; 找最大值; 輸出結(jié)果。,第 70 頁(yè),Private Sub Form_Click() Dim a%(1 To 4, 1 To 5), Max%, L%, H% For i = 1 To 4 For j = 1 To 5 a(i, j) = Int(Rnd * 101) Next j Next i For i = 1 To 4 For j = 1 To 5 Print a(i, j); Next j Print Next i Max = a(1, 1): L = 1: H = 1 For i = 1 To 4 For j = 1 To 5 If a(i, j) Max Then Max = a(i, j) H = i L = j End If Next j Next i Print “最大的數(shù)組元素是a(“ & H & “,“ & L & “)=“ & Max End Sub,第 71 頁(yè),例5-14 找二維數(shù)組的鞍點(diǎn)。 鞍點(diǎn):某個(gè)數(shù)既是他所在行的最大值,又是他所在列的最小值,該數(shù)稱(chēng)為該數(shù)組的鞍點(diǎn)。,Dim a%(1 To 4, 1 To 4), p%, i%, j%, n% Private Sub Form_Load() For i = 1 To 4 For j = 1 To 4 a(i, j) = InputBox(“請(qǐng)輸入數(shù)組元素!“) Next j Next i Show Print “該數(shù)組為:“ For i = 1 To 4 For j = 1 To 4 Print a(i, j); Next j Print Next i End Sub,第 72 頁(yè),Private Sub Form_Click() For i = 1 To 4 p = 1 For j = 2 To 4 If a(i, j) a(i, p) Then p = j Next j For n = 1 To 4 If a(i, p) a(n, p) Then Exit For Next n If n 4 Then Print “第“ & i & “行有鞍點(diǎn)!此點(diǎn)為:a(“ & i & “,“ & p & “)“ Else Print “第“ & i & “行無(wú)鞍點(diǎn)!“ End If Next i End Sub,第 73 頁(yè),1. 基本概念 控件數(shù)組是指在同一個(gè)窗體上、擁有相同對(duì)象名、相同事件過(guò)程的一組同類(lèi)型控件。 控件數(shù)組中的每一個(gè)控件的Name屬性值相同,每個(gè)控件由其Index(索引)屬性的值(即控件數(shù)組元素的下標(biāo))惟一地確定,例如:第個(gè)控件數(shù)組元素的索引號(hào)為,第個(gè)控件數(shù)組元素的索引號(hào)為1,依次類(lèi)推。 控件數(shù)組中每個(gè)元素的其他屬性可以單獨(dú)設(shè)置??丶?shù)組中元素個(gè)數(shù)受系統(tǒng)資源的限制,并且最大的Index屬性值不能超過(guò)32 767。一個(gè)控件數(shù)組中至少要有一個(gè)控件。,5.4 控件數(shù)組,第 74 頁(yè),2、建立控件數(shù)組的方法,第 75 頁(yè),步驟:,創(chuàng)建一個(gè)新的工程,把窗體的Caption屬性改為“計(jì)算器”。 使用常規(guī)方法在窗體上放置控件數(shù)組中的第一個(gè)按鈕。然后把按鈕的Caption屬性改為“0”。 選擇這個(gè)按鈕,然后單擊“編輯”菜單中的“復(fù)制”菜單項(xiàng) 選擇“編輯”菜單中的“粘貼”命令.Visual Basic顯示出一個(gè)消息框,詢問(wèn)是否要?jiǎng)?chuàng)建控件數(shù)組,單擊“是”。窗體上會(huì)添加一個(gè)與已有按鈕外觀相同的新按鈕。 重復(fù)執(zhí)行上一步驟,添加多個(gè)按鈕。這時(shí),Visual Basic不會(huì)再詢問(wèn)。多次粘貼到窗體上的按鈕可能相互重疊在一起,應(yīng)該及時(shí)地把它們移開(kāi),按粘貼的前后順序排列在窗體上。,第 76 頁(yè),注意:選擇控件數(shù)組中任意一個(gè)按鈕,在屬性窗口中會(huì)發(fā)現(xiàn),它們的Name屬性都是一樣的,它們的Index屬性的值各不相同,這是數(shù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)高營(yíng)養(yǎng)熱帶魚(yú)魚(yú)糧行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 企業(yè)業(yè)績(jī)?cè)u(píng)價(jià)課件
- 宣傳部干事工作總結(jié)
- 大班幼兒老師個(gè)人工作方案
- 兒童線描課件素材
- 社會(huì)工作小組方案設(shè)計(jì)
- 2025年中國(guó)保險(xiǎn)絲護(hù)套行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 中國(guó)靜止式變流器行業(yè)發(fā)展前景預(yù)測(cè)及投資方向研究報(bào)告
- 企業(yè)S管理培訓(xùn)課件
- 兒童素描課件公眾號(hào)
- 2025工會(huì)基礎(chǔ)知識(shí)題庫(kù)與參考答案
- 地鐵安檢培訓(xùn)課件
- 摸魚(yú)活動(dòng)策劃方案
- 化療所致血小板減少癥CIT
- 2025中國(guó)數(shù)字營(yíng)銷(xiāo)行業(yè)人工智能應(yīng)用趨勢(shì)研究報(bào)告
- 2025年北京市中考物理試卷真題(含答案)
- 湖北省八校聯(lián)考2024-2025學(xué)年高一下學(xué)期6月期末物理試卷(含答案)
- 管理學(xué)基礎(chǔ)期末考試試題及答案
- 2025年定向士官心理測(cè)試題及答案
- 2025年安徽高考地理試卷真題(含答案)
- 2025至2030中國(guó)覆銅板行業(yè)項(xiàng)目調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
評(píng)論
0/150
提交評(píng)論