利用數組可以有效地存儲和處理成批數據本章主要內容數組_第1頁
利用數組可以有效地存儲和處理成批數據本章主要內容數組_第2頁
利用數組可以有效地存儲和處理成批數據本章主要內容數組_第3頁
利用數組可以有效地存儲和處理成批數據本章主要內容數組_第4頁
免費預覽已結束,剩余53頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 利用數組可以有效地存儲和處理成批數據利用數組可以有效地存儲和處理成批數據 本章主要內容 數組的概念數組的概念 數組的聲明和應用數組的聲明和應用 動態數組動態數組 For Each.NextFor Each.Next循環語句循環語句 控件數組控件數組 程序舉例程序舉例 第第6 6章章 數數 組組 6.1.1 數組與數組元素數組與數組元素 簡單變量用一個變量名標識,不同的變量使用不同的簡單變量用一個變量名標識,不同的變量使用不同的變量名表示。處理成批的數據時,必須使用數組來處理表變量名表示。處理成批的數據時,必須使用數組來處理表示示100個學生的成績,采用簡單變量來表示:個學生的成績,采用簡單變

2、量來表示: s1,s2,s3, s99,s100 采用數組來表示:采用數組來表示:t(0), t(1), t(2), t(98), t(99) t(k) (k=0,1,2,99)為數組元素為數組元素(或稱或稱下標變量下標變量),它表,它表示第示第k個學生的成績個學生的成績, k稱為下標變量的稱為下標變量的下標下標 數組的一個主要特點是通過下標數組的一個主要特點是通過下標(相當于索引相當于索引)來引用來引用數組元素數組元素 6.1 數組的概念數組的概念 例如計算這例如計算這100個學生成績的平均分,可用:個學生成績的平均分,可用: S S0 0 For k=0 To 99For k=0 To 9

3、9 S = S + t(k) S = S + t(k) 累加分數累加分數 Next kNext k Aver=S/100 Aver=S/100 求平均分求平均分 數組是一組按一定順序排列的數據的集合數組是一組按一定順序排列的數據的集合 例如,學生成績例如,學生成績t(0), t(1), t(99) 是一個數組是一個數組 三元一次方程組的系數矩陣三元一次方程組的系數矩陣 a11 a12 a13 A a21 a22 a23 a31 a31 a33 也是一個數組也是一個數組 數組名數組名(不能與簡單變量同名不能與簡單變量同名);數組類型;數組類型 又稱有序的變量又稱有序的變量下標變量下標變量 默認情

4、況下,下標從默認情況下,下標從0開始開始, option base n 必須在定義數組前使用。必須在定義數組前使用。 例如,由一行共例如,由一行共5個元素組成的數組個元素組成的數組x,它的,它的5個下標變量個下標變量為:為: x(0) x(1) x(2) x(3) x(4) 由三行四列元素組成的數組由三行四列元素組成的數組y,它的,它的12個下標變量可表個下標變量可表示為:示為: y(0,0) y(0,1) y(0,2) y(0,3) y(1,0) y(1,1) y(1,2) y(1,3) y(2,0) y(2,1) y(2,2) y(2,3) 下標變量下標變量與與簡單變量簡單變量具有基本相同

5、的性質和作用具有基本相同的性質和作用 數組元素數組元素 下標用來標明該下標變量在數組中的位置下標用來標明該下標變量在數組中的位置 下標可以是常數值,也可以是變量下標可以是常數值,也可以是變量(包括下標變包括下標變量量)或數值表達式或數值表達式 例如:例如: 若若x(2)=10, k=2,則,則y(x(2)就是就是y(10), y(x(2)+k)就是就是y(12) 只要有規則地改變下標值,就可以很方便地使下標變量只要有規則地改變下標值,就可以很方便地使下標變量(如如a(i)成為所需要的具體下標變量成為所需要的具體下標變量 數組的維數數組的維數 6.1.2 下標和數組的維數下標和數組的維數 6.2

6、.1 數組聲明語句數組聲明語句 使用數組之前,一般需要定義數組,以便讓系統分配相應使用數組之前,一般需要定義數組,以便讓系統分配相應的存儲單元。格式為:的存儲單元。格式為: Dim Dim 數組名數組名(下界下界1 to1 to上界上界1,1,下界下界2 to2 to上界上界2)As 2)As 數據類型數據類型 功能:指定數組的維數、各維的上下界和數據類型功能:指定數組的維數、各維的上下界和數據類型 舉例:舉例:dim a%(10),b!(2 t0 8),c#(15),b(3,4) as Long Dim Sum(10) As Long 下標號從下標號從010,共,共11個元素個元素Dim A

7、ry(1 to 20) As Integer 下標號從下標號從120,共,共20個元素個元素Dim d(1 to 5,1 to 10) As Double 定義二維數組定義二維數組 dim c(-2 to 2 ) as string*20 還可以使用還可以使用Public、Static、Private等語句來聲明數組等語句來聲明數組 6.2 6.2 數組的聲明和應用數組的聲明和應用數組下標測試函數 Ubound(數組名,維) Lbound(數組名,維) Dim y(1 to 12,5 to 20,-3 to 6) Print Lbound(y,1), Ubound(y,1) Print Lbo

8、und(y,2), Ubound(y,2) Print Lbound(y,3), Ubound(y,3) 設定下界的方法設定下界的方法 Option Base 1 設定下界為設定下界為1 Dim Data(10) As Single 下標號從下標號從110 6.2.2 Array函數函數 使用使用Array函數可以為數組元素賦值函數可以為數組元素賦值 示例示例 Dim D As Variant 定義數組名定義數組名(變體類型變體類型) D = Array(1, 2, 3, 4) 執行結果:執行結果:1D(0),2D(1), 3D(2), 4D(3) 數組刷新語句可以作用于動態數組和靜態數組數組

9、刷新語句可以作用于動態數組和靜態數組 格式:格式: Erase 數組名數組名,數組名,數組名 功能:功能:該語句用來清除靜態數組的內容,或者釋放動態數該語句用來清除靜態數組的內容,或者釋放動態數組占用的內存空間組占用的內存空間 例如例如: Dim Array1(20) As IntegerDim Array1(20) As Integer Dim Array2() As SingleDim Array2() As Single ReDim ReDim Array2(9,10) Array2(9,10) Erase Array1,Array2Erase Array1,Array2 對靜態數組,對

10、靜態數組,Erase語句將數組重新初始化語句將數組重新初始化; 對動態數組,對動態數組,Erase語句將釋放動態數組所使用的內存語句將釋放動態數組所使用的內存 6.3.2 數組刷新語句數組刷新語句(Erase) Erase 數組名,數組名, 重新對靜太數組進行初始化,數值置0,字符為空字符串,而原數組存在。 釋放動態數組存儲空間,原有數組不再存在。 變體數組,每個元素重新置為空。數組的引用和賦值:Option Base 1 Dim B1 As VariantB1 = Array(89, 96, 81, 67, 79, 90, 63, 85, 95, 83) y=B1(3) C=B1(5)+B1

11、(7) 數組的引用下標不能越界 數組的賦值: 使用循環語句: dim k(10)dim k(10) For k=0 To 10 For k=0 To 10 t(k) = 2 t(k) = 2* *k+1k+1 Next kNext k Dim d(5) As Integer For i = 1 To 5 輸入成績輸入成績 d(i) = Val(InputBox(請輸入第請輸入第 & Str(i) & _ 個學生的成績個學生的成績, 輸入成績輸入成績) Next i數組輸出數組輸出For i = 1 To 5 Print d(i); Next i 與前面的循環語句與前面的循環語句For.Next

12、類似,都是用來執行指定重類似,都是用來執行指定重復次數的循環。但復次數的循環。但For Each.Next語句專門作用于數組或對語句專門作用于數組或對象集合中的每一成員。語法格式:象集合中的每一成員。語法格式: For Each 成員成員 In 數組名數組名 循環體循環體 Exit For Next 成員成員 “成員成員”是一個是一個Variant變量,它實際上代表數組中每一變量,它實際上代表數組中每一個元素個元素 本語句可以對數組元素進行讀取、查詢或顯示,它所重本語句可以對數組元素進行讀取、查詢或顯示,它所重復執行的次數由數組中元素的個數確定復執行的次數由數組中元素的個數確定 在不知道數組中

13、元素的數目時非常有用在不知道數組中元素的數目時非常有用 6.46.4 For Each.Next For Each.Next循環語句循環語句Private Sub Form_Load() Dim a(1 To 10) As Long, sum As Long, t As Long Dim n As Integer Show t = 1 For n = 1 To 10 t = t * n a(n) = t Next n sum = 0 For Each x In a sum = sum + x Next x Print 1! + 2! + 3! + 10! =; sumEnd Sub輸出結果:輸

14、出結果:1! + 2! + 3! + + 10! 4037913 例例6.6 求求1! + 2! + + 10! 的值的值 兩種形式的數組:兩種形式的數組:靜態數組靜態數組和和動態數組動態數組 靜態數組是指數組元素的個數固定不變;動態數組的元素個靜態數組是指數組元素的個數固定不變;動態數組的元素個數,在程序運行時可以改變數,在程序運行時可以改變 動態數組可以在運行過程中改變數組的大小,提高存儲區的動態數組可以在運行過程中改變數組的大小,提高存儲區的使用效率使用效率 6.3.1 建立動態數組建立動態數組 建立動態數組的步驟:建立動態數組的步驟: 第一步:聲明一個沒有下標第一步:聲明一個沒有下標(

15、或稱空維數或稱空維數)的數組為動態數組的數組為動態數組 第二步:在過程中用第二步:在過程中用ReDim語句重新定義帶下標的動態數組語句重新定義帶下標的動態數組 ReDim語句語句格式格式: ReDim Preserve 數組名數組名(下界下界1 T0 上界上界1,下界下界 T0 上界上界2) As數據類型數據類型 功能:功能:重新定義動態數組,按定義的上下界重新分配存儲單元重新定義動態數組,按定義的上下界重新分配存儲單元 6.36.3 動態數組動態數組 聲明聲明F為動態數組的示例:為動態數組的示例: Private Sub Command1_Click() Dim F() As Integer

16、 聲明一個整型動態數組聲明一個整型動態數組 Size=20 ReDim F(Size) End Sub 每次執行每次執行ReDim時,系統會清除指定數組的內容時,系統會清除指定數組的內容 若采用:若采用:ReDim Preserve F(Size) 則能保留數組中原有的數據則能保留數組中原有的數據Private Sub Form_Load() Dim a() As Integer Show ReDim a(800) k = 0 For x = 200 To 600 Step 3 If x Mod 8 = 0 Then k = k + 1 a(k) = x End If Next x ReDim

17、 Preserve a(k) For i = 1 To k Print a(i) Next iEnd Sub 例例6.56.5 ReDim ReDim語句應用示例語句應用示例 兩類數組:兩類數組:一般數組一般數組和和控件數組控件數組 6.5.1 控件數組的概念控件數組的概念 控件數組是一組具有相同名稱、類型和事件過程的控件控件數組是一組具有相同名稱、類型和事件過程的控件 例如,例如,Label1(0),Label1(1),Label1(2), 但但Label1, Label2, Label3, 不是控件數組不是控件數組 控件數組具有以下特點:控件數組具有以下特點: (1)相同的控件名稱相同的控

18、件名稱(即即Name屬性屬性); (2)控件數組中的控件具有相同的一般屬性;控件數組中的控件具有相同的一般屬性; (3)所有控件共用相同的事件過程。所有控件共用相同的事件過程。 以下標索引值以下標索引值(Index)來標識各個控件,第一個下標索引號為來標識各個控件,第一個下標索引號為0 6.5 6.5 控件數組控件數組6.5.2 控件數組的建立控件數組的建立 建立控件數組有三種方法:建立控件數組有三種方法: (1)給控件起相同的名稱給控件起相同的名稱 (2)將現有的控件復制并粘貼到窗體等上面將現有的控件復制并粘貼到窗體等上面 (3)將控件的將控件的Index屬性設置為非屬性設置為非Null數值

19、數值 6.5.3 控件數組的使用控件數組的使用 例例6.7 按圖按圖6.46.4設計窗體,其中一組設計窗體,其中一組( (共共5 5個個) )單選按鈕單選按鈕構成控件數組,要求當單擊某個單選按鈕時,能夠改變文構成控件數組,要求當單擊某個單選按鈕時,能夠改變文本框中文字的大小本框中文字的大小控件數組控件數組設計步驟:設計步驟: (1)設計控件數組設計控件數組Option1,其中包含,其中包含5個單選按鈕對象個單選按鈕對象 具體操作方法:具體操作方法: 畫出第一個單選按鈕控件,名稱采用默認的畫出第一個單選按鈕控件,名稱采用默認的Option1。此。此時該控件處于選定狀態。時該控件處于選定狀態。 單

20、擊工具欄上的單擊工具欄上的“復制復制”按鈕按鈕(或按或按Ctrl+C)。 單擊工具欄上的單擊工具欄上的“粘貼粘貼”按鈕按鈕(或按或按Ctrl+V),此時系統彈,此時系統彈出一個如圖出一個如圖6.5所示的對話框所示的對話框 單擊單擊“是是”,就建立一個控件數組元素,其,就建立一個控件數組元素,其Index屬性為屬性為1,而已畫出的第一個控件的而已畫出的第一個控件的Index屬性值為屬性值為0。 通過鼠標拖放可以調整新控件的位置通過鼠標拖放可以調整新控件的位置 繼續單擊繼續單擊“粘貼粘貼”按鈕按鈕(或按或按Ctrl+V)和調整控件位置,和調整控件位置,可得到控件數組中的其他三個控件,其可得到控件數

21、組中的其他三個控件,其Index屬性值分別為屬性值分別為2,3和和4(即從上而下為即從上而下為0,1,2,3,4) 設置控件數組各元素設置控件數組各元素(從上而下從上而下)的的Caption屬性分別為屬性分別為10,14,18,24和和28 (2)建立一個文本框建立一個文本框Text1,其,其Text屬性設置為屬性設置為“控件數組的使用控件數組的使用”。再建立一個標簽再建立一個標簽,其,其Caption屬性為屬性為“字號控制字號控制” (3)編寫程序代碼編寫程序代碼Private Sub Form_Load() Option1(0).Value = True 選定第一個單選按鈕選定第一個單選按

22、鈕 Text1.FontSize = 10 設定文本框中的字號設定文本框中的字號End SubPrivate Sub Option1_Click(Index As Integer) Select Case Index 系統自動返回系統自動返回Index值值 Case 0 Text1.FontSize = 10 Case 1 Text1.FontSize = 14 Case 2 Text1.FontSize = 18 Case 3 Text1.FontSize = 24 Case 4 Text1.FontSize = 28 End Select End Sub 例例6.1 輸入某小組輸入某小組5

23、個同學的成績,計算總分和個同學的成績,計算總分和平均分平均分(取小數后一位取小數后一位) 本例利用本例利用InputBox函數來輸入成績,輸入完畢后函數來輸入成績,輸入完畢后經過計算,再采用經過計算,再采用Print直接在窗體上輸出結果直接在窗體上輸出結果 6.2.36.2.3 數組的應用數組的應用 Private Sub Form_Load() Dim d(5) As Integer Dim i As Integer, total As Single, average As Single Show For i = 1 To 5 輸入成績輸入成績 d(i) = Val(InputBox(請輸入

24、第請輸入第 & Str(i) & _ 個學生的成績個學生的成績, 輸入成績輸入成績) Next i total = 0 For i = 1 To 5 計算總分和平均分計算總分和平均分 total = total + d(i) Next i average = total / 5 Print 總分:總分: & total Print 平均分:平均分: & Format(average, #.0)End Sub 程序中,先通過程序中,先通過Dim語句為數組語句為數組d定義維數及下定義維數及下標范圍,也即為數組安排一塊連續的內存存儲區,標范圍,也即為數組安排一塊連續的內存存儲區,但這并不意味著內存里

25、該數組已建立了應有的內容但這并不意味著內存里該數組已建立了應有的內容 本例中輸入數組中的數據是由本例中輸入數組中的數據是由InputBox函數來函數來實現的,共循環了五次,輸入的五個數依次賦值給實現的,共循環了五次,輸入的五個數依次賦值給下標變量下標變量d(1)d(5) 建立了數組中的數據后,就可以按要求進行處理建立了數組中的數據后,就可以按要求進行處理 (1)創建應用程序的用戶界面和設置對象屬性創建應用程序的用戶界面和設置對象屬性例例6.26.2 輸入輸入1010名學生的成績,求出最高分和最低分名學生的成績,求出最高分和最低分 功能要求:功能要求:通過通過Array函數輸入函數輸入10個分數

26、;單擊個分數;單擊“查找查找”按按鈕鈕(Command2)后,開始查找最高分和最低分,找到后顯示在標后,開始查找最高分和最低分,找到后顯示在標簽簽Label1上上 Option Base 1 Dim score As Variant Private Sub Form_Load() Label1.Caption = 單擊單擊“查找查找”按鈕開始查找最高分和最低按鈕開始查找最高分和最低分分 score = Array(89, 96, 81, 67, 79, 90, 63, 85, 95, 83) End Sub (2) 編寫程序代碼編寫程序代碼 Private Sub Command1_Click

27、() Dim max As Integer, min As Integer max = score(1) 設定初值設定初值 min = score(1) For i = 2 To 10 If max score(i) Then 找最低分找最低分 min = score(i) End If Next i Chr(13)起換行作用起換行作用 Label1.Caption = 最高分:最高分: + Str(max) + _ Chr(13) + 最低分:最低分: + Str(min) End Sub 例例6.3 6.3 分別計算分別計算5 5個學生和個學生和3 3門課的平均分門課的平均分 某學習小組有

28、某學習小組有5名學生,成績如表名學生,成績如表6.1所示所示 分析:分析:用一個用一個二維數組二維數組a(5, 3)來描述。程序中設置兩重循來描述。程序中設置兩重循環,用以環,用以實現每行和每列上的累加實現每行和每列上的累加。本例采用賦值語句來輸。本例采用賦值語句來輸入學生成績,并采用入學生成績,并采用Print直接在窗體上輸出結果直接在窗體上輸出結果 r=1 c=1, 2, 3r=2 c=1, 2, 3r=3 c=1, 2, 3r=4 c=1, 2, 3r=5 c=1, 2, 3求求5個學生的平均分個學生的平均分 下標使用情況下標使用情況 Option Base 1 Private Sub

29、Form_Load() Dim a(5, 3) As Integer Dim r As Integer, c As Integer, s As Integer k = Array(數學數學, 英語英語, 計算機計算機) 輸入課程名輸入課程名 a(1, 1) = 69: a(1, 2) = 89: a(1, 3) = 74 輸入學生成績輸入學生成績 a(2, 1) = 94: a(2, 2) = 80: a(2, 3) = 90 a(3, 1) = 57: a(3, 2) = 62: a(3, 3) = 73 a(4, 1) = 98: a(4, 2) = 94: a(4, 3) = 90 a(

30、5, 1) = 73: a(5, 2) = 76: a(5, 3) = 63 例例6.36.3 Show Print 學生學生, 平均分平均分“ 輸出輸出20個減號個減號“-” Print String(20, -) For r = 1 To 5 s = 0 累加前清累加前清0 For c = 1 To 3 累加同一行數據累加同一行數據 s = s + a(r, c) Next c Print r, Format(s / 3, #.0) Next r Print Print 課程課程, 平均分平均分 Print String(20, -) For c = 1 To 3 s = 0 For r

31、= 1 To 5 累加同一列數據累加同一列數據 s = s + a(r, c) Next r Print k(c), Format(s / 5, #.0) Next cEnd Sub 程序運行結果程序運行結果 解題方法:解題方法: (1)利用利用Int(91*Rnd+10)產生值為產生值為10到到100的隨機整數的隨機整數 使用使用Randomize得到不同的隨機數序列得到不同的隨機數序列 (2)按值從小到大進行排序。排序方法:按值從小到大進行排序。排序方法: 將將10個數放入數組個數放入數組a中,對下列下標變量進行排序處理:中,對下列下標變量進行排序處理: a(1), a(2), a(3),

32、 ,a(10) 從這從這10個下標變量中,選出最小值,通過交換把該值存入個下標變量中,選出最小值,通過交換把該值存入a(1)中中 除除a(1)之外之外(a(1)已存放最小值已存放最小值),從其余,從其余9個下標變量中選出最小值個下標變量中選出最小值(即即10個數中的次小值個數中的次小值),通過交換把該值存入,通過交換把該值存入a(2)中中 選出選出a(3)a(10)中的最小值,通過交換,把該值存入中的最小值,通過交換,把該值存入a(3)中中 重復上述處理,重復上述處理,至至a(8),可使,可使a(1)a(8)按小到大排列按小到大排列 第第9次處理,選出次處理,選出a(9)及及a(10)中的最小

33、值,通過交換把該值存入中的最小值,通過交換把該值存入a(9)中,中,此時此時a(10)存放的就是最大值存放的就是最大值 例例6.46.4 隨機產生十個隨機產生十個1010100100的整數,用的整數,用“選擇排序法選擇排序法”按值按值從小到大順序排序,最后輸出結果從小到大順序排序,最后輸出結果排列要求排列要求 小小 大大 示例:示例: a(1) a(2) a(3) a(4) 90 64 65 59 1. a(1)與與a(2) a(4)比較,選出最小值,結果比較,選出最小值,結果 59 90 65 64 2. a(2)與與a(3) a(4)比較,選出次小值,結果比較,選出次小值,結果 59 64

34、 90 65 3. a(3)與與a(4)比較,選出較小值,結果比較,選出較小值,結果 59 64 65 90 i=1 j=2, 3, 4 i=2 j=3, 4 i=3 j=4For i=1 to 3 For j=i+1 to 4 Next jNext i程程序序結結構構 完成上述比較及排序處理過程,可以采用兩重循環結構,完成上述比較及排序處理過程,可以采用兩重循環結構,外循環的循環變量外循環的循環變量i從從1到到9,共循環九次;內循環的循環變量,共循環九次;內循環的循環變量j從從i+1到到10。 本例采用默認的用戶界面,所需數據由隨機函數產生,處本例采用默認的用戶界面,所需數據由隨機函數產生,

35、處理后結果信息通過理后結果信息通過Print方法直接輸出在窗體上。方法直接輸出在窗體上。 Private Sub Form_Load() Show Randomize Dim a(1 To 10) As Integer Print 原始數據:原始數據: For i = 1 To 10 產生產生10個隨機數個隨機數 a(i) = Int(91 * Rnd + 10) Print a(i); Next i (3) 程序結構程序結構 Print: Print For i = 1 To 9 For j = i + 1 To 10 If a(i) a(j) Then t = a(i): a(i) = a

36、(j): a(j) = t 交換位置交換位置 End If Next j Next i Print 排序結果:排序結果: For i = 1 To 10 Print a(i); Next i End Sub 改寫中間程序段改寫中間程序段“For i=1 To 9”“Next i”(共共7個程序個程序行行) For i = 1 To 9 k = i k用來記錄每次選擇的最小值的下標用來記錄每次選擇的最小值的下標 For j = i + 1 To 10 If a(k) a(j) Then k = j End If Next j t = a(k): a(k) = a(i): a(i) = t 交換位

37、置交換位置 Next i 變量變量k記錄每一次選出的最小值的下標,在本次比較結束后,記錄每一次選出的最小值的下標,在本次比較結束后,使使a(i)與與a(k)一次換位即可一次換位即可 6.6 程序舉例程序舉例 例例6.8 查找考場教室號查找考場教室號 某課程統考憑準考證入場,考場教室安排如表某課程統考憑準考證入場,考場教室安排如表6.2。編制程。編制程序,查找準考證號碼所對應的教室號碼序,查找準考證號碼所對應的教室號碼 (1)分析分析:為便于查找,通過二維數組:為便于查找,通過二維數組rm建立這兩種號碼對建立這兩種號碼對照表。照表。 數組數組rm由由Form_Load事件過程來建立,它的每一行存

38、放了事件過程來建立,它的每一行存放了一個教室資料一個教室資料(包含準考證號碼范圍和教室號碼包含準考證號碼范圍和教室號碼)。當判斷到某。當判斷到某個給定準考證號碼落在某一行的準考證號碼范圍內時,則該行個給定準考證號碼落在某一行的準考證號碼范圍內時,則該行中的教室號碼為所求中的教室號碼為所求 (2)創建應用程序的用戶界面和設置對象屬性創建應用程序的用戶界面和設置對象屬性 (3)編寫程序代碼編寫程序代碼 功能要求:功能要求:用戶在文本框用戶在文本框Text1中輸入準考證號碼,單擊中輸入準考證號碼,單擊“查找查找”按鈕按鈕(Command1)后,則查找出對應的教室,并將教后,則查找出對應的教室,并將教

39、室號碼輸出在文本框室號碼輸出在文本框Text2中中 Dim rm(6, 3) As Integer Private Sub Form_Load() 輸入數組數據輸入數組數據 rm(1, 1) = 2101: rm(1, 2) = 2147: rm(1, 3) = 102 rm(2, 1) = 1741: rm(2, 2) = 1802: rm(2, 3) = 103 rm(3, 1) = 1201: rm(3, 2) = 1287: rm(3, 3) = 114 rm(4, 1) = 3333: rm(4, 2) = 3387: rm(4, 3) = 209 rm(5, 1) = 1803:

40、rm(5, 2) = 1829: rm(5, 3) = 305 rm(6, 1) = 2511: rm(6, 2) = 2576: rm(6, 3) = 306 End Sub Private Sub Command1_Click() Dim no As Integer, flag As Integer flag = 0 查找標記,查找標記,0表示未找到表示未找到 no = Val(Text1.Text) For i = 1 To 6 If no = rm(i, 1) And no = rm(i, 2) Then Text2.Text = rm(i, 3) 顯示教室號碼顯示教室號碼 flag

41、= 1 1表示找到表示找到 Exit For End If Next i If flag = 0 Then Text2.Text = 無此準考證號碼無此準考證號碼 End If Text1.SetFocus 設置焦點設置焦點 End Sub 某學習小組某學習小組10名學生的成績情況如表名學生的成績情況如表6.3所示,現要求采所示,現要求采用折半查找法,通過學號查詢學生成績用折半查找法,通過學號查詢學生成績 (1)分析:分析:折半查找法也稱對半查找法,是一種效率較高的折半查找法也稱對半查找法,是一種效率較高的查找方法。對于大型數組,它的查找速度比順序查找法查找方法。對于大型數組,它的查找速度比順

42、序查找法(例例6.8采用的是順序查找法采用的是順序查找法)快得多快得多 在采用折半查找法之前,要求將數組按查找關鍵字在采用折半查找法之前,要求將數組按查找關鍵字(如本如本例的學號例的學號)排好序排好序(從大到小或小到大從大到小或小到大) 例例6.9 采用折半查找法查詢學生成績采用折半查找法查詢學生成績 先從數組中間開始比較,先從數組中間開始比較, 判別中間的那個元素是不是判別中間的那個元素是不是要找的數據:要找的數據: 是,則查找成功是,則查找成功 否,若被查找的數據是在該數組的上半部,則從上半否,若被查找的數據是在該數組的上半部,則從上半部的中間繼續查找,否則從下半部的中間繼續查找部的中間繼

43、續查找,否則從下半部的中間繼續查找 照此進行下去,不斷縮小查找范圍照此進行下去,不斷縮小查找范圍 至最后,因找到或找不到而停止查找至最后,因找到或找不到而停止查找 對于對于n個數據,若用變量個數據,若用變量Top、Bott分別表示每次分別表示每次“折半折半”的首位置和末位置,則中間位置的首位置和末位置,則中間位置M為為 M=Int(Top+Bott)/2)這樣就將這樣就將Top, Bott分成兩段分成兩段,即,即Top, M-1和和M+1, Bott, 若要找的數據小于由若要找的數據小于由M指示的數據,則該數據在指示的數據,則該數據在Top,M-1范圍內,反之,則在范圍內,反之,則在M+1,Bott范圍內范圍內 折半查找法的過程折半查找法的過程 折半查找法的過程折半查找法的過程學號學號 h()1201120212031205120612071209121012111215先排好序先排好序數學數學 d( x ,1) 語文語文 d( x ,2)9

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論