VB-數(shù)組的用法_第1頁(yè)
VB-數(shù)組的用法_第2頁(yè)
VB-數(shù)組的用法_第3頁(yè)
VB-數(shù)組的用法_第4頁(yè)
VB-數(shù)組的用法_第5頁(yè)
已閱讀5頁(yè),還剩77頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第8章 數(shù) 組,數(shù)組的基本概念,數(shù)組一組相同類型的變量,使用同一個(gè)名字來(lái)組織 一個(gè)班(48個(gè))學(xué)生的成績(jī) Score 30種圖書的名字 BookName 100種商品的價(jià)格 Cost 數(shù)組元素?cái)?shù)組中的各個(gè)變量 使用唯一的下標(biāo)(索引)來(lái)標(biāo)識(shí) Score(1)、 Score(2)Score(48) BookName(0) BookName(29) Cost(0) Cost(99) 數(shù)組的長(zhǎng)度數(shù)組元素的個(gè)數(shù),數(shù)組的基本概念,數(shù)組的維數(shù) 一維數(shù)組 多維數(shù)組 二維數(shù)組 三維數(shù)組 ,(2,5,7,9,10,4,8),行,行列,行列層,數(shù)組的基本概念,數(shù)組的分類 按維數(shù)分: 一維、二維、三維 按在內(nèi)存分配是

2、否可變分: 靜態(tài)數(shù)組 動(dòng)態(tài)數(shù)組(可重新定義數(shù)組的維數(shù)和長(zhǎng)度),靜態(tài)數(shù)組的聲明-一維數(shù)組,格式:Dim|Public|Static 數(shù)組名(下標(biāo)) As 類型名,只能由常數(shù)表示,Dim Score(1 to 48) As Integer Dim Cost(100) As Single Static BookName(30) As String,下標(biāo)的格式,下界 to 上界 省略下界,則默認(rèn)為0 如:Dim Score(1 to 48) As Integer數(shù)組元素: Score(1)、 Score(2)Score(48) Dim Cost(100) As Single 數(shù)組元素: Cost(0)

3、、 Cost(1) Cost(100),格式:Dim 數(shù)組名(下標(biāo)1,下標(biāo)2) As 類型名 二維數(shù)組: Dim db(3,1 to 5) As Integer Public N(5,5) As Single 三維數(shù)組: Dim Tr(3,4,4) As Long Dim A(1 to 5,1 to 5,1 to 5) As Long 元素: 數(shù)組db共有4行5列4520個(gè)元素,靜態(tài)數(shù)組的聲明-多維數(shù)組,二維數(shù)組在內(nèi)存中的存放,以列為單位存放!,動(dòng)態(tài)數(shù)組的聲明,格式:Dim 數(shù)組名( ) As 類型名 如:Dim s( ) As Single,聲明時(shí)未指定數(shù)組的大小,動(dòng)態(tài)數(shù)組在需要時(shí)使用Red

4、im語(yǔ)句指定維數(shù)和大小,格式:Redim Preserve 數(shù)組名(下標(biāo)1,下標(biāo)2)As 類型名 如:Redim s(10) Redim s(2,3),下標(biāo)可以是常量、變量和表達(dá)式; 與靜態(tài)數(shù)組的聲明不同之處! Dim a() As Single, i As Integer k=5 Redim a(3) Redim a(k) Redim a(k*3+1) ,Redim的注意點(diǎn),As 類型名可以省略 不省略則必須與Dim語(yǔ)句聲明的類型一致; Preserve保留數(shù)組中原有的數(shù)據(jù) 使用Preserve的Redim只能改變最后一維的大小且不能改變維數(shù) Dim b() As Integer Redim

5、 b(1,2) Redim Preserve b(1,4),二維數(shù)組按列存放,Redim的注意點(diǎn),Redim語(yǔ)句只能出現(xiàn)在過程內(nèi)部原因:是VB的執(zhí)行語(yǔ)句,不是聲明語(yǔ)句 Private Sub Form_Click() Dim A( ) As Integer, i As Integer Print “一維數(shù)組:” ReDim A(1 To 10) 重新指定數(shù)組A為一維數(shù)組,大小為10 For i = 1 To 10 使用一維數(shù)組A A(i) = Int(Rnd * 101) Print A(i), Next i PrintEnd Sub,若沒有Redim語(yǔ)句而直接使用數(shù)組的元素,則:無(wú)論引用哪個(gè)

6、元素都將出錯(cuò), 出錯(cuò)類型為:下標(biāo)越界,Redim的注意點(diǎn),Private Sub Form_Click() Dim A( ) As Integer, i As Integer Print “二維數(shù)組:” ReDim A(1 To 9, 1 To 5) 重新指定數(shù)組A為二維數(shù)組,大小為95 For i = 1 To 9 使用二維數(shù)組A For j = 1 To 5 A(i, j) = 10 + Int(Rnd * 21) Print A(i, j), Next j Print Next i End Sub,二重循環(huán):i控制行,j控制列,但是切不可思維定勢(shì)!,動(dòng)態(tài)數(shù)組求某個(gè)正整數(shù)的所有因子,X :

7、 27,For I=1 to 13,因子個(gè)數(shù)k 動(dòng)態(tài)數(shù)組a,x=val(text1.text)k=0 ,目前沒有因子,Private Sub Command1_Click() Dim a() As Integer :k = 0:x = Val(Text1.Text),For i = 1 To x 2 If x Mod i = 0 Then k = k + 1 :ReDim Preserve a(k) a(k) = i End If Next i,動(dòng)態(tài)數(shù)組求某個(gè)正整數(shù)的所有因子,要求將輸入的10進(jìn)制正整數(shù) 根據(jù)用戶的輸入轉(zhuǎn)換為n進(jìn)制 n=2,8,16,動(dòng)態(tài)數(shù)組進(jìn)制轉(zhuǎn)換 102/8/16,1011

8、00101,357,2,.1,178,2,.0,89,2,.1,44,2,.0,22,2,.0,11,2,.1,5,2,.1,2,2,.0,1,2,.1,0,10101,21,2,.1,10,2,.0,5,2,.1,2,2,.0,1,2,.1,0,動(dòng)態(tài)數(shù)組進(jìn)制轉(zhuǎn)換 102/8/16,33,27,8,.3,3,8,.3,0,1F,31,16,.15,1,16,.1,0,動(dòng)態(tài)數(shù)組進(jìn)制轉(zhuǎn)換 102/8/16,假設(shè)使用動(dòng)態(tài)數(shù)組 bin() as string 存儲(chǔ)每 一個(gè)余數(shù) 變量k代表余數(shù)的個(gè)數(shù) Num代表要轉(zhuǎn)換的10進(jìn)制正整數(shù) N代表要轉(zhuǎn)換為的進(jìn)制,動(dòng)態(tài)數(shù)組進(jìn)制轉(zhuǎn)換 102/8/16,K=0 目前

9、余數(shù)個(gè)數(shù)為0 Do Loop unitl num=0 當(dāng)商為0結(jié)束循環(huán),求出余數(shù),存放在bin數(shù)組中 num=numn,將數(shù)組元素從尾到頭組合,輸出,數(shù)量 k=k+1 數(shù)組bin重新定義大小 bin(k)=num取n的余數(shù),動(dòng)態(tài)數(shù)組進(jìn)制轉(zhuǎn)換 102/8/16,問題:求得的余數(shù)是10進(jìn)制的,對(duì)于16進(jìn)制而言, 要完成10A 11B 15F 的轉(zhuǎn)換,解決:使用一個(gè)字符數(shù)組chr dim ch (15) as string來(lái)完成,利用下標(biāo)與數(shù)組元素內(nèi)容的對(duì)應(yīng)完成轉(zhuǎn)換,動(dòng)態(tài)數(shù)組進(jìn)制轉(zhuǎn)換 102/8/16,k = 0 Do k = k + 1 ReDim Preserve bin(k) r = num

10、Mod n bin(k) = ch (r) num = num n Loop Until num = 0,For i = k To 1 Step 1 顛倒輸出 ch = ch + bin(i) Next i,動(dòng)態(tài)數(shù)組進(jìn)制轉(zhuǎn)換 102/8/16,Option Base語(yǔ)句,格式:Option Base n ( n : 0 , 1 ) 如:Option Base 1 位置:模塊的通用部分 跟Option Explict語(yǔ)句一樣是設(shè)置的功能語(yǔ)句; 如: Option Base 1 Dim a(5) 元素a(1)a(5) Dim b(3,4) 3行4列,b(1,1)b(3,4),Option Base

11、 1Dim a(2 To 5) 元素a(2)a(5)Dim b(3,4) 3行4列,b(1,1)b(3,4),LBound(aname , d),Private Sub Form_Click( ) Dim A(5) As Integer , B(3 to 8,200 to 208) Print Lbound(A), Lbound(B,1),Lbound(B,2) End Sub,0 3 200,UBound(aname , d),Private Sub Form_Click( ) Dim A(5) As Integer , B(3 to 8,200 to 208) Print Ubound(A

12、), Ubound(B,1),Ubound(B,2) End Sub,5 8 208,數(shù)組的基本操作,數(shù)組的輸入 數(shù)組的輸出 數(shù)組的查找 數(shù)組的排序 數(shù)組的插入 數(shù)組的刪除,數(shù)組的輸入,給數(shù)組元素賦值 (一般采用循環(huán)結(jié)構(gòu) ) 鍵盤讀入 使用InputBox()函數(shù)實(shí)現(xiàn) 靜態(tài)數(shù)組Dim A(1 To 10) As Integer, i As IntegerFor i = 1 To 10 A(i) = Val(InputBox(“請(qǐng)輸入第” Next L Next K,A. 1 2 1 B. 1 2 3 C. 2 4 6 D. 1 3 1,練 習(xí),Dim A(1 To 100) As Intege

13、r Dim B(1 To 10, 1 To 10 ) As Integer For I=1 To _ A(I)=Int(Rnd*5+1) Next I For I=1 To _ For J=1 To _ B(I,J)= _ Print B(I,J); Next J Print Next I,以下程序代碼將具有100個(gè)元素的數(shù)組A按每行10個(gè)數(shù)的形式賦值給二維數(shù)組B。即將A(1)到 A(10)依次賦值給B(1,1)到B(1,10);將A(11)到A(20)依次賦值給B(2,1)到B(2,10);.將A(91)到A(100)依次賦值給B(10,1)到B(10,10)。,100,10,10,A(I-

14、1)*10+J),數(shù)組的查找,在已知數(shù)組中尋找是否存在關(guān)鍵值為Key的元素 若找到則給出元素所在的位置,否則給出失敗信息 1.順序法查找 2.二分法查找,順序法查找,基本思想: 從第一個(gè)元素開始逐個(gè)判斷,直到找到或數(shù)組結(jié)束 實(shí)現(xiàn) - a(1)a(N) For i = 1 To N If a(i) = key Then Exit For Next i If i = N + 1 Then Print “數(shù)組中沒有元素” & key Else Print key & “是數(shù)組中的第” & i & “個(gè)元素” End If,二分法查找 (折半查找),僅適用于有序數(shù)組! 基本思想:在下標(biāo)區(qū)間left,r

15、ight間,用mid將區(qū)間一分為二,根據(jù)mid位置元素和key的大小關(guān)系,確定下一次查找區(qū)間, amidkey 則 right=mid-1 amid=key 找到! amidkey 則 left=mid+1,結(jié)束條件: 找到 未找到(leftright),Left = 1 : Right = N Do While Left Key Then Right = Mid 1 Else Left = Mid + 1 End If Loop If Left Right Then Print “數(shù)組中沒有元素” & Key Else Print Key & “是數(shù)組中的第” & Mid & “個(gè)元素” E

16、nd If,求一個(gè)二維數(shù)組中的鞍點(diǎn)元素,鞍點(diǎn)元素 該元素在所在行中最大, 且所在列中最小, 它可能存在,也可能不存在,Private Sub Form_Click() Dim a(3, 3) As Integer, i As Integer, j As Integer Dim maxvr As Integer, col As Integer, flg As Integer a(1, 1) = 1: a(1, 2) = 9: a(1, 3) = 6 a(2, 1) = 15: a(2, 2) = 10: a(2, 3) = 4 a(3, 1) = 4: a(3, 2) = 12: a(3, 3)

17、 = 18 End Sub, 初始化數(shù)組,求一個(gè)二維數(shù)組中的鞍點(diǎn)元素,針對(duì)每一行循環(huán)(For i = 1 To 3) 找出該行最大的元素 判斷其是否在一列中最小 如果最小,打印出來(lái),如果所有行都不存在鞍點(diǎn)元素, 則打印 不存在,求一個(gè)二維數(shù)組中的鞍點(diǎn)元素,2) 找出該行最大的元素,maxvr = a(i, 1) For j = 2 To 3 If maxvr a(i, j) Then maxvr = a(i, j) End If Next j,2) 判斷其是否在一列中最小,For j = 1 To 3 If maxvr a(j, ?) Then Exit For End ifNext j,問題

18、1: 只是求出了該行的最大值 忘了記載下他所在的列號(hào),求一個(gè)二維數(shù)組中的鞍點(diǎn)元素,問題1解決:利用變量col,記載最大值所在的列號(hào)。,maxvr = a(i, 1) : col = 1 For j = 2 To 3 If maxvr a(i, j) Then maxvr = a(i, j) : col = j End If Next j,求一個(gè)二維數(shù)組中的鞍點(diǎn)元素,2) 判斷其是否在一列中最小 3) 如果最小,打印出來(lái),For j = 1 To 3 If maxvr a(j, col) Then Exit For Next j If j = 4 Then Print a( & i & , &

19、col & )= & a(i, col) End If,求一個(gè)二維數(shù)組中的鞍點(diǎn)元素,For i = 1 To 3 找出該行最大的元素 判斷其是否在一列中最小 如果最小,打印出來(lái) Next I,求一個(gè)二維數(shù)組中的鞍點(diǎn)元素,如果所有行都不存在鞍點(diǎn)元素,則打印 不存在,問題2:如何判斷所有行都不存在鞍點(diǎn)元素,使用變量flg, 如果剛才循環(huán)中每一行找到一個(gè)鞍點(diǎn)元素,就flg=1 循環(huán)結(jié)束后,如果還是flg=0, 則表示不存在鞍點(diǎn)元素,求一個(gè)二維數(shù)組中的鞍點(diǎn)元素,For j = 1 To 3 If maxvr a(j, col) Then Exit For Next j If j = 4 Then Pr

20、int a( & i & , & col & )= & a(i, col) End If,flg = 1,求一個(gè)二維數(shù)組中的鞍點(diǎn)元素,For i = 1 To 3 找出該行最大的元素 判斷其是否在一列中最小 如果最小,打印出來(lái),并且改變flg Next I 如果所有行都不存在鞍點(diǎn)元素, 則打印 不存在,If flg = 0 Then Print “鞍點(diǎn)元素不存在”,求一個(gè)二維數(shù)組中的鞍點(diǎn)元素,數(shù)組的排序,將一維數(shù)組按各元素值的一定規(guī)律(升序或降序 )重新排放的過程 1.冒泡法排序 2.選擇法排序,If a(j) a(j + 1) Then temp = a(j) a(j) = a(j + 1)

21、 a(j + 1) = temp End If,冒泡法排序,基本思想: 類似于水泡,每趟排序?qū)⒁粋€(gè)最大(小)值沉到最后 使用相鄰元素的兩兩比較實(shí)現(xiàn)每趟排序,元素:(12、7、3、10、18、15、1、5、25、9),12,A(1),A(2),A(3),A(4),A(5),A(6),A(7),A(8),A(9),A(10),7,3,10,18,15,1,5,25,9,12,7,12,3,10,12,18,12,15,18,1,18,5,18,18,25,25,9,第1趟,3,7,7,10,10,12,12,15,1,15,5,15,15,18,9,18,3,25,結(jié)論:N個(gè)元素需要N1趟排序,F

22、or i = 1 To N - 1 For j = 1 To N - i If a(j) a(j + 1) Then temp = a(j) a(j) = a(j + 1) a(j + 1) = temp End If Next j Next i,冒泡法排序,選擇法排序,基本思想: 對(duì)每一趟排序,都在數(shù)組的無(wú)序部分找到一個(gè)最?。ù螅┲捣旁跓o(wú)序部分的第一個(gè) 即:每趟確定一個(gè)數(shù)的位置,For i = 1 To N - 1 For j = i+1 To N If a(i) a(j) Then temp = a(i) a(i) = a(j) a(j) = temp End If Next j Next

23、 i,注意:與冒泡法的區(qū)別!,數(shù)組的插入,已知一數(shù)組和一待插入的數(shù)據(jù)e,根據(jù)要求將其插入到數(shù)組的相應(yīng)位置。 1.已知插入位置k 2.在有序數(shù)組中插入,已知插入位置k,在數(shù)組a的第k個(gè)位置插入一元素e,已知插入位置k, 數(shù)組長(zhǎng)度加一(動(dòng)態(tài)數(shù)組),N = N + 1 數(shù)組的長(zhǎng)度加1 ReDim Preserve a(N),保留原有的數(shù)組元素,在最后添加一個(gè)元素,若使用靜態(tài)數(shù)組,則需在聲明時(shí)將添加的元素空間事先考慮在內(nèi)。, 將數(shù)組中a(k)a(N)向后移一個(gè)元素,For i = N To k + 1 Step -1 a(i) = a(i - 1) Next i,問題:為什么移動(dòng)要從最后一個(gè)位置開始向

24、前處理?,答:若從第k個(gè)位置向后處理, 則會(huì)把未處理數(shù)據(jù)覆蓋。, 將e放入a(k)位置 a(k) = e,已知插入位置k,在有序數(shù)組中插入,已知數(shù)組b有序,插入元素e后,使得數(shù)組保持原序 分析:(設(shè)b中元素按從小到大排列),e,步驟:找到插入位置 按已知位置插入的方法實(shí)施插入操作, 找到插入位置,則:b(k)eb(k+1) 即:b(k+1)為第一個(gè)比e大的元素,For k = 1 To N If b(k) e Then Exit For Next k k為插入位置,在有序數(shù)組中插入,若從后往前找呢?, 按已知位置插入的方法實(shí)施插入操作,N = N + 1 ReDim Preserve b(N)

25、 For i = N To k + 1 Step -1 b(i) = b(i - 1) Next i b(k) = e,在有序數(shù)組中插入,數(shù)組的刪除,已知一數(shù)組,根據(jù)要求將其中某個(gè)位置的元素刪除 要求數(shù)組元素保持連續(xù)存放,步驟: 將數(shù)組中a(k+1)a(N)向前移一個(gè)元素 數(shù)組長(zhǎng)度減一,將數(shù)組中a(k+1)a(N)向前移一個(gè)元素,For i = k To N - 1 a(i) = a(i + 1) Next i,問題:1.為什么移動(dòng)不使用向前處理? 2.這里為什么不使用a(i-1)=a(i)?,答:會(huì)把未處理數(shù)據(jù)覆蓋,答:結(jié)合i的取值,不是處理a(k+1)a(N),數(shù)組長(zhǎng)度減一,N = N -

26、 1 ReDim Preserve a(N),數(shù)組的刪除,刪除整個(gè)數(shù)組Erase函數(shù) 格式: Erase 數(shù)組名1,數(shù)組名2 功能:重新初始化靜態(tài)數(shù)組的元素 釋放動(dòng)態(tài)數(shù)組的存儲(chǔ)空間 如:Dim a(10) As Integer,Dim b() As Integer Erase a,b 將a(0)a(10)都置為0 釋放b數(shù)組空間,數(shù)組的刪除,Private Sub Form_Click( ) Dim A(5) As Integer , B( ) As Integer A(1)=1: A(2)=2: A(3)=3: Redim B(4): B(2)=9 Print A(1),A(2),A(3),

27、B(2) Erase A, B Print A(1),A(2),A(3) End Sub,B(2),數(shù)組的刪除,約瑟夫問題,15個(gè)學(xué)生,從1到15號(hào)排列,依次1-3報(bào)數(shù),報(bào)到3者出圈,直到所有學(xué)生都出列為止,顯示出學(xué)生出列的順序,問題1,如何解決15個(gè)學(xué)生的表示?,dim Old_No(15) as integer Old_No(1)代表1號(hào)學(xué)生, Old_No(2)代表2號(hào)學(xué)生,,問題2,如何表示出列還是在隊(duì)伍中,若在隊(duì)列中,Old_No(1)=1,若出列 ,Old_No(1)=0 ,問題3,如何顯示出出列的順序,Dim New_No(15) As Integer, 第1個(gè)出列的學(xué)生的編號(hào)存

28、放在New_No(1) 中 第2個(gè)出列的學(xué)生的編號(hào)存放在New_No(2) 中 ,約瑟夫問題,約瑟夫問題,認(rèn)為報(bào)數(shù)13為一輪,每一輪出列1名,總共要進(jìn)行15輪,For I= 1 to 15 還沒有人報(bào)數(shù) 找到報(bào)到3的學(xué)生 將該學(xué)生出列,并且New_No(i)=它的編號(hào) Next i,約瑟夫問題,使用變量idx代表當(dāng)前報(bào)數(shù)的學(xué)生的編號(hào) 使用count來(lái)代表當(dāng)前報(bào)的數(shù),還沒有人報(bào)數(shù) 2) 找到報(bào)到3的學(xué)生,count = 0 還沒有人報(bào)數(shù),Do While count 3 當(dāng)還沒有報(bào)到3 idx指向下個(gè)報(bào)數(shù)的學(xué)生,count+1 如果下個(gè)學(xué)生已經(jīng)出列,跳過他的位置 Loop,idx = idx + 1 下一個(gè)人報(bào)數(shù) If idx 15 Then idx = 1,coun

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論