vb電子教案程序設計第7章_第1頁
vb電子教案程序設計第7章_第2頁
vb電子教案程序設計第7章_第3頁
vb電子教案程序設計第7章_第4頁
vb電子教案程序設計第7章_第5頁
已閱讀5頁,還剩103頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1數 組本章要點:數組的基本概念數組的定義數組的操作(輸入、輸出、刪除等)數組應用舉例控件數組第7章 27.1 數組的基本概念 前面的各種問題中,一般只涉及少量的數據,這些數據使用簡單變量就可以很方便地進行存取或處理。但是,在實際問題中往往會有大量相關的數據需要處理。例如,要處理全校3000個學生的數學成績,如果使用簡單變量,就要引入3000個不同的變量來存儲這些數據。這樣顯然太繁瑣,如果數據量再大,采用這種處理幾乎是難以做到的。另外,這種數據除了量比較大以外,各數據在整組數中的位置是明確的,即數據是有序的。這種順序使用簡單變量難以體現,而使用本章要介紹的數組,在多數場合可以很方便地處理這種大

2、量的性質相同的有序數。37.1.1 數組與數組元素定義: 一組性質相同的有序的數 例如, 全班40名同學的英語成績: G(1) G(2) G(3) G(40)所有班級(如6個班,每班40人)同學的英語成績: 表示1: G(1) G(2) G(3) G(240) 表示2: G(1,1) G(1,2) G(1,40) G(2,1) G(2,2) G(2,40) G(6,1) G(6,2) G(6,40)4例: 矩陣矩陣中各元素b11-b33可表示成: B(1,1) B(1,2) B(1,3) B(2,1) B(2,2) B(2,3) B(3,1) B(3,2) B(3,3)5數組名:一組數用一個統

3、一的名稱表示。數組元素(下標變量): 數組中的每一個元素 表示成: 數組名(下標) 下標的取值可以是常量、變量、表達式 如: G(8) B(I) C(3+K) 下標還可以是下標變量 如: A(A(5) 令A(5)=4 則 A(A(5)=A(4)每個數組元素用來保存一個數據,其使用與簡單變量類似。 例如,G(8)=87 表示給數組元素G(8)賦值。6注意:要用圓括號把下標括起來 例如,將X(8)表示成: X8、X8、或X8都是錯誤的。下標必須是整數,否則將被自動四舍五入為整數。下標的最小取值稱為下界,下標的最大取值稱為上界。數組元素的下標必須在其下界和上界之間,否則將會出錯。77.1.2 數組的

4、維數數組的維數:下標個數 一維數組: 由一個下標組成。 如 A(2),C(6) 二維數組: 由兩個下標組成。 如 B(2,3) 三維數組: 由三個下標組成。 如 G(3,4,23) 三維以上的數組稱為多維數組,最多60維通常也將二維數組的第一個下標叫行下標,第二個下標叫列下標。87.2 數組的定義數組在使用之前必須先定義(聲明)。定義數組的目的是為數組分配存儲空間,數組名即為這個存儲空間的名稱,而數組元素即為存儲空間的每一個單元。每個單元的大小與數組的類型有關。 例如,定義某數組X為整型(Integer)數組,共有10個元素,則每個元素占2個字節(jié),則所有數組元素占20個字節(jié)。按數組占用存儲空間

5、的方式不同,分為兩種數組:靜態(tài)數組和動態(tài)數組。兩種數組的定義方法不同,使用方法也略有不同。97.2.1 靜態(tài)數組的定義1. 格式 Public|Private|Dim 數組名(維數定義) As 類型,2. 功能 聲明數組名稱、維數、維大小、類型。 為數組分配存儲空間。例:定義數組G保存全班40名同學的英語成績 Dim G( 1 To 40) As Integer例:定義數組B,保存3行3列的矩陣的各元素 Dim B(1 To 3, 1 To 3)103. 說明1) Public|Private|Dim:在標準模塊的通用聲明段使用Public語句建立一個全局級數組;在模塊的通用聲明段使用Priv

6、ate語句或Dim語句建立一個模塊級數組; 在過程中用Dim語句建立一個過程級數組。2)數組名:需遵循變量命名約定。3)“維數定義”: 下界1 To 上界1,下界2 To 上界2,11如果下界省略,則使用默認下界定義默認下界: Option Base 0|1不加任何定義時,默認下界為0數組元素個數: (上界1-下界1+1)*(上界2-下界2+1)*4): Integer Long Single Double Boolean String String*n Curency Byte Date Variant Object 用戶定義類型125)數組在定義后自動被初始化 例如: 將數值型數組元素值置

7、為0; 將字符串類型數組元素值置為零長度字符串6)靜態(tài)數組被定義后,VB為其分配固定大小的存儲空間,在運行期大小不能改變。13例: Dim C(9) As Integer 一維整型數組;下界0,上界為9 元素:C(0) C(1) C(2) C(9) 例: Dim A(-4 TO 10) As Integer 一維整型數組;下界 -4,上界 10 元素 A(-4) A(-3) . A(0) A(1) . A(10)例: DIM M(-3 TO 10) 一維可變類型數組 例: CONST Y1=10 CONST Y2=50 DIM ABC(Y1 TO Y2) AS INTEGER14例: Dim

8、B(-1 to 7,0 to 3) As String DIM B(-1 To 7,3) As String 二維字符串類型數組 第一維:下界-1,上界 7; 第二維: 下界0,上界 3 元素: B(-1,0) B(-1,1) B(-1,2) B(-1,3) B(0,0) B(0,1) B(0,2) B(0,3) . B(7,0) B(7,1) B(7,2) B(7,3)15 在預先不知道要處理的數據量有多大時,如果使用靜態(tài)數組,就需要在聲明數組時使數組的大小盡可能達到最大,以適應不同的數據量。因為靜態(tài)數組在整個程序的執(zhí)行過程中一直占用存儲空間,因此會浪費一定的內存空間,過度使用靜態(tài)數組會影響

9、整個系統的性能。 在解決實際問題時,所需要的數組到底應該有多大才合適,有時可能不得而知,所以希望能夠在運行時改變數組的大小。使用動態(tài)數組就可以在任何時候改變其大小,并且可以在不需要時清除動態(tài)數組所占的存儲空間。因此,使用動態(tài)數組更加靈活、方便,并有助于高效管理內存。161. 定義動態(tài)數組分以下兩步進行: 1) 在模塊級或過程級定義一個沒有下標的數組 : Public|Private|Dim 數組名()As 類型, 例:Dim G() As Integer2) 在過程級使用ReDim語句定義數組的實際大小 ReDim Preserve 數組名(維數定義) As 類型,例: ReDim G(1 T

10、o 100) As Integer ReDim Preserve G(1 To 100) As Integer7.2.2 動態(tài)數組的定義172. 說明ReDim語句只能出現在過程中。維數定義:常包含具有明確值的變量或表達式??梢杂肦eDim反復改變數組元素及維數的數目。若用步驟1定義了類型,則不許用步驟2改變類型。18每次執(zhí)行ReDim語句時,如果不使用Preserve關鍵字,當前存儲在數組中的值會全部丟失。Visual Basic重新對數組元素進行初始化,如將數值型數組元素值置為0,將可變長度字符串類型數組元素值置為零長度字符串。Preserve為可選的關鍵字。有時,希望改變數組的大小又不丟

11、失數組中原有的數據,使用帶Preserve關鍵字的ReDim語句就可以做到這一點。使用Preserve關鍵字的Redim語句只能改變多維數組中最后一維的上界,且不能改變維數的數目。如果改變了其他維或最后一維的下界,那么運行時就會出錯。19例: Dim A() As Integer Private Sub Command1_Click() N = 4 ReDim A(N) For I = 0 To N A(I) = 1: Print A(I); Next I Print N = 8 ReDim A(N) For I = 0 To N Print A(I); Next I End Sub運行時輸出

12、結果為:1 1 1 1 10 0 0 0 0 0 0 020例: Dim A() As Integer Private Sub Command1_Click() N = 4 ReDim A(N) For I = 0 To N A(I) = 1: Print A(I); Next I Print N = 8 ReDim Preserve A(N) For I = 0 To N Print A(I); Next I End Sub運行時輸出結果為:1 1 1 1 1 1 1 1 1 1 0 0 0 0217.3 數組的輸入輸出 數組在聲明之后,VB對其進行了初始化,但在實際應用中,往往要給數組元素

13、賦一定的初始值。例如,在處理學生成績時,首先需要向數組中輸入所有的成績,在使用二維數組表示矩陣時,要向數組中輸入矩陣中各元素的值。對數組元素的輸入可以有多種方法。例如:賦值語句;文本框;InputBox函數;Array函數等,可以對數組的個別元素輸入數據,也可以對整個數組輸入數據。 數組元素經過處理后,常需要將結果顯示給用戶,即輸出數組元素的值。輸出方法如:Print方法;標簽;文本框等。22例:用輸入框輸入10個學生的成績并存放到數組A中,然后將這些成績顯示在文本框中。 Dim A(1 To 10) As Integer 輸入: For i = 1 To 10 A(i) = Val(Inpu

14、tBox(請輸入第 & Str(i) & 個學生的成績) Next i 輸出: For i = 1 To 10 Text1.Text = Text1.Text & Str(A(i) Next i23使用文本框顯示多個數據時,常需要給文本框設置滾動條,依據滾動條的方向,要注意每顯示一個或多個數據后是否要在文本框中加上回車換行符號。24例:假設用二維數組B來表示一個6行6列的矩陣,以下代碼生成包含1,10之間的隨機整數的矩陣,并以6行6列的形式將該矩陣打印在窗體上。 Dim B(1 To 6, 1 To 6) As Integer 輸入: For I = 1 To 6 For J = 1 To 6

15、 B(I, J) = Int(Rnd * 10 + 1) Next J Next I25 輸出:For I = 1 To 6 For J = 1 To 6 Print Format(B(I, J), ); Next J Print Next I261. 格式 Erase 數組名2. 功能刪除靜態(tài)數組將對其中的所有元素進行初始化。例如,將數值型數組元素值置為0;將可變長度字符串類型數組元素值置為零長度字符串。注意,Erase語句不能釋放靜態(tài)數組所占的存儲空間。刪除動態(tài)數組將釋放動態(tài)數組所占的存儲空間,在下次引用該動態(tài)數組之前,必須使用ReDim語句重新定義該數組。7.4 數組的刪除271. 格式

16、 For Each 變量 In 數組名 語句組1 Exit For 語句組2 Next 變量 7.5 使用For Each.Next循環(huán)處理數組只能是一個可變類型的變量2. 功能: 首先將數組中的第一個元素賦給”變量”,然后進入循環(huán)體中執(zhí)行其中的語句。如果數組中還有其他元素,則繼續(xù)將下一個元素賦值給”變量”后執(zhí)行循環(huán)體,當針對數組中的所有元素都執(zhí)行完了,便會退出循環(huán),執(zhí)行Next之后的語句。28例: 以下程序段使用For Each.Next語句打印一維數組X中的所有元素。 Dim X(15) For Each A In X Print A; Next A比較:For I= 0 To 10 Fo

17、r J=0 To10 Sum=Sum+ Y(I,J) Next JNext I比較:For I= 0 To 15 Print X(i);Next i例: 求二維數組Y的所有元素之和。 Dim Y(10, 10) For Each A In Y Sum = Sum + A Next A Print Sum 297.6 數組操作函數1LBound和UBound函數格式:LBound(數組名,N)UBound(數組名,N)功能:LBound函數返回“數組名”指定的數組的第N維的下界;UBound函數返回“數組名”指定的數組的第N維的上界。說明:N為1表示第一維,N為2表示第二維,等等。如果省略N,則

18、默認為1。30例:要打印一維數組A的各個值,可以通過下面的代碼實現: For I = LBound(A) To UBound(A) Print A(I); Next I例:要打印二維數組B的各個值,可以通過下面的代碼實現: For I = LBound(B, 1) To UBound(B, 1) For J = LBound(B, 2) To UBound(B, 2) Print B(I, J); Next J Print Next I312Array函數格式:Array(參數表)功能:返回一個數組,數組元素的值由“參數表”指定。說明:“參數表”是一系列用逗號分隔的值,這些值構成數組的各元素值

19、。Array函數只能給Variant類型的變量賦值,賦值后的數組大小由參數的個數決定,數組下標的下界由Option Base語句指定的下界決定。32例:要將1,2,3,4,5,6,7,8,9,10這些值賦給數組A,可以使用下面方法: Dim A A = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)執(zhí)行以上賦值之后:A(0)=1,A(1)=2,A(2)=3,A(9)=10。333Split函數格式:Split(字符串表達式,分隔符)功能:以某個指定符號作為分隔符,將“字符串表達式”指定的字符串分離為若干個子字符串,以這些子字符串為元素構成一個下標從零開始的一維數組。說

20、明:“字符串表達式”用于指定要被分隔的字符串,“分隔符”是可選的,如果忽略,則使用空格作為分隔符。34例:執(zhí)行以下代碼段: Dim A A = Split(how are you, )執(zhí)行以上賦值之后:A(0)=how,A(1)=are,A(2)=you。也可以用Split函數給一個動態(tài)數組賦值。例: Dim A() As String A = Split(how are you, )354Join函數格式:Join(一維數組名,分隔符)功能:將一維數組中的各元素連接成一個字符串,連接時各子字符串之間加上“分隔符”指定的字符。說明:分隔符用于指定在返回的字符串中分隔各子字符串的字符。如果忽略該

21、項,則使用空格來分隔子字符串。如果“分隔符”是零長度字符串,則將所有數組元素連接在一起,中間沒有分隔符。36例:執(zhí)行以下代碼段: Dim a a = Array(吃葡萄, 不吐, 葡萄皮) b = Join(a, ) Print b打印“吃葡萄不吐葡萄皮”377.7 數組應用舉例【例7-1】輸入若干個學生的成績,統計不及格人數和優(yōu)秀人數。Text1Command1Picture1設計界面:38分析:設運行時學生成績直接輸入到文本框Text1中,各成績之間用逗號分隔。代碼首先使用Split函數將文本框Text1中輸入的成績分離開,保存到數組A中。引入計數變量設兩個計數變量num1和num2,分別

22、用來保存不及格學生人數和優(yōu)秀學生人數。將計數變量初始化為0,統計過程逐一取數組元素進行判斷,如果數組元素的值小于60,則讓num1累加1,如果數組元素的值大于或等于90,則讓num2累加1。39代碼設計:Private Sub Command1_Click() Dim A, N As Integer Dim num1 As Integer, num2 As Integer A = Split(Text1.Text, ,) N = UBound(A) num1 = 0: num2 = 0 For i = 0 To N Select Case Val(A(i) Case Is = 90 num2

23、= num2 + 1 End Select Next i40 顯示統計結果 Picture1.Cls 定義打印位置 Picture1.CurrentX = 100 Picture1.CurrentY = 100 Picture1.Print 不及格人數:; num1; _ Tab(18); 優(yōu)秀人數:; num2End Sub運行界面:41【例7-2】輸入若干名學生的成績,求平均分、最高分、最低分。設計界面:Text2Text3Text4Text142分析: 假設運行時輸入到文本框Text1中的各成績之間用逗號分隔。代碼首先使用Split函數將文本框Text1中輸入的成績分離開,保存到數組A中

24、,然后進行求值。求平均分時只需先求數組所有元素之和,再除以數組元素的個數即可。求最高分、最低分的問題實際上就是求一組數據的最大值、最小值問題。43求最大值的方法:1)設一個存放最大值的變量MaxNum,其初值為數組的第一個元素,即MaxNum=A(0);2)依次將MaxNum與A(1)到A(N)的所有數據進行比較,如果數組中的某個數A(I)大于MaxNum,則用該數替換MaxNum,即MaxNumx=A(I),所有數據比較完后,MaxNum中存放的數即為整個數組的最大數。求最小值的方法與求最大值的方法類似。44“求值”按鈕Command1的Click事件過程:Private Sub Comma

25、nd1_Click() Dim A, N As Integer Dim MaxNum As Integer, MinNum As _ Integer, Average As Single A = Split(Text1.Text, “,”) N = UBound(A) Total = 0 MaxNum = Val(A(0) MinNum = Val(A(0)45 通過循環(huán)依次比較,求最大值、最小值、總和 For i = 0 To N If Val(A(i) MaxNum Then _ MaxNum = Val(A(i) If Val(A(i) X(J)(J=2,3,N),則交換X(1)、X(J

26、)的內容;2) 將第2個數與第3個數到第N個數依次比較,如果X(2)X(J)(J=3,4,N),則交換X(2)、X(J)的內容;3) 重復以上方法,將第I個數與第I+1個數到第N個數依次比較,如果X(I)X(J)(J=I+1,N),則交換X(I)、X(J)的內容;共重復N-1輪。49代碼設計:(1)設用數組X保存學生成績,用變量N保存學生人數。因為數組X和變量N要在兩個命令按鈕的事件過程中公用,所以,在窗體模塊的通用聲明段定義數組X和變量N。因為學生人數可以由用戶來指定,因此這里應將X定義成動態(tài)數組: Option Base 1 Dim N As Integer, X() As Integer

27、50(2) “輸入成績”按鈕的Click事件過程:Private Sub Command1_Click() N = Val(InputBox(請輸入總人數) ReDim X(N) Text1.Text = For I = 1 To N X(I) = Val(InputBox(請輸入第 & Str(I) & 個學生的成績, 成績排序, ) Text1.Text = Text1.Text & Str(X(I) Next IEnd Sub51(3)“排序”按鈕的Click事件過程:Private Sub Command2_Click() 用比較交換法進行排序 For I = 1 To N - 1 F

28、or J = I + 1 To N If X(I) X(J) Then 交換X(I)和X(J)的值 T = X(I) X(I) = X(J) X(J) = T End If Next J Next I 52 顯示排序結果 Text2.Text = For I = 1 To N Text2.Text = Text2.Text & Str(X(I) Next IEnd Sub選擇排序法:自學:P126冒泡排序法:自學P126P12753【例7-4】生成100個0,100之間的隨機整數作為原始數據,存于數組A中,在數組A中查找指定的元素Number。設計界面:Text1Command1 Comman

29、d254分析:這是一個查找問題,查找的方法有很多種,如順序查找、折半查找、分塊查找等。不同的查找方法效率不同。1)“順序查找”算法: 設用變量K保存查找位置,初始值為0。從數組A的第一個元素開始,按順序依次與Number比較,如果A(I)=Number,則保存查找位置K,即讓K=I,結束查找;否則,繼續(xù)與下一個數比較。 結束查找后,若K仍然為0,則說明沒找到,否則找到位置即為K。55Private Sub Command1_Click() Randomize For i = 1 To 100 A(i) = Int(Rnd * 101) Text1.Text = Text1.Text & Str

30、(A(i) Next iEnd Sub(1)在窗體模塊的通用聲明段定義數組A:Dim A(1 To 100) As Integer代碼設計:(2)編寫“生成隨機數”按鈕的Click事件過程:56(3)編寫“查找”按鈕Command2的Click事件過程:Private Sub Command2_Click() Number = Val(InputBox(請輸入要查找的數) k = 0 用k保存查找位置 順序查找 For I = 1 To 100 If A(I) = Number Then 如果找到 k = I 保存找到的位置 Exit For 退出循環(huán) End If Next I 57 根據k

31、的值判斷查找結果 If k 0 Then MsgBox 所找的數在第 & Str(k) & _ 個位置 Else MsgBox 沒找到 End IfEnd Sub*2)折半查找算法:自學P128P12958【例7-5】生成20個0,100區(qū)間的隨機整數作為原始數據,存于數組A中,然后刪除數組A中指定位置的元素。設計界面:Text2Command1Text1Text359posA(Pos)=A(Pos+1)A(Pos+1)=A(Pos+2)A(N-1)=A(N)For I = Pos To N - 1 A(I) = A(I + 1)Next I 分析: 60代碼設計:1)由于數組A的大小在刪除元

32、素后變小,因此這里將數組A定義成動態(tài)數組。 在窗體模塊的通用聲明段聲明: Option Base 1 Dim N As Integer, A() As Integer612)在窗體的Load事件過程中生成20個0到100之間的隨機整數,顯示于文本框Text1中。 Private Sub Form_Load() Text1.Text = N = 20 ReDim A(1 To N) For I = 1 To N A(I) = Int(Rnd * 101) Text1.Text = Text1.Text & Str(A(I) Next I End Sub623)編寫“刪除”按鈕Command1的C

33、lick事件過程,實現按指定位置刪除。 Private Sub Command1_Click() Pos = Val(Text2.Text) If Pos N Then MsgBox 位置越界,請重新輸入 Text2.SetFocus Text2.SelStart = 0 Text2.SelLength = Len(Text2.Text) Else For I = Pos To N - 1 A(I) = A(I + 1) Next I63 N = N 1 ReDim Preserve A(1 To N) Text3.Text = For I = 1 To N Text3.Text = Text

34、3.Text & Str(A(I) Next I End If End Sub64【例7-6】將數Num插在數組A中指定的Pos位置 。 如果Pos0,則將Num插在第1個位置 如果PosN,則將Num插在最后一個位置設計界面:Text3Text2Command165posNum1) 對數組中原Pos位置的元素到最后一個元素全部向后移動一個位置: A(N+1)=A(N)A(N)=A(N-1)A(Pos+1)=A(Pos)2) 插入:A(Pos)=NumFor I=N+1 To Pos+1 Step -1 A(I) = A(I - 1)Next I分析:661) 在“通用”位置聲明: Optio

35、n Base 1 Dim N As Integer, A() As Integer2) 在窗體的Load事件過程中生成20個0,100之間的隨機整數,顯示于文本框Text1中: Private Sub Form_Load() Text1.Text = N = 20 : ReDim A(N) For I = 1 To N A(I) = Int(Rnd * 101) Text1.Text = Text1.Text & Str(A(I) Next I End Sub673) “插入”按鈕的Click事件過程:Private Sub Command1_Click() 插入 Text4.Text = N

36、um = Val(Text2.Text) Pos = Val(Text3.Text) N = N + 1 ReDim Preserve A(N) Select Case Pos Case Is = N 插在第N個位置,即pos=N A(N) = Num Case Else For I = N To Pos + 1 Step -1 A(I) = A(I - 1) Next I A(Pos) = Num End Select 顯示插入后的結果 For I = 1 To N Text4.Text = Text4.Text & Str(A(I) Next IEnd Sub69 【例7-7】在窗體上輸出

37、一個N行、N列、主對角線和次對角線元素為1,其余元素均為零的矩陣。N由用戶指定。 分析:矩陣中的每個數據在矩陣中所處的位置由行號和列號決定,可以使用二維數組直觀地表示矩陣中的每一個元素。例如,用二維數組A表示矩陣,第一個下標表示矩陣中數據的行號,第二個下標表示列號,因此矩陣中第I行第J列元素表示為A(I,J)。而N行N列矩陣的主對角線元素指數組中行下標與列下標相同的元素,次對角線元素的行下標與列下標之和為N+1。70Private Sub Form_Click() Dim A() As Integer Dim N As Integer, I As Integer, _ J As Integer

38、 Cls N = Val(InputBox(請輸入N值, 生成矩陣, 4) ReDim A(1 To N, 1 To N) As Integer代碼設計:71 生成矩陣 For I = 1 To N For J = 1 To N If I = J Then A(I, J) = 1 主對角線元素置1 ElseIf I + J = N + 1 Then A(I, J) = 1 次對角線元素置1 Else A(I, J) = 0 其他元素置0 End If Next J, I72 按N行N列的格式顯示矩陣 For I = 1 To N CurrentY = I * 300 For J = 1 To

39、N CurrentX = J * 300 Print A(I, J); Next J Next IEnd Sub73 【例7-8】求兩個矩陣的和。 分析: M行N列的矩陣A與M行N列的矩陣B的和,結果為一個M行N列的矩陣C,C矩陣中第I行第J列的元素,等于A矩陣中第I行第J列的元素與B矩陣中第I行第J列的元素相加。即: C(I,J)=A(I,J)+B(I,J) 配合循環(huán)變量控制下標取所有可能的值:For I = 1 To M For J = 1 To N C(I, J) = A(I, J) + B(I, J) Next JNext I74Text1Text2Text3Command1Comma

40、nd2運行界面:751) 在代碼窗口的通用聲明段聲明: Dim M As Integer, N As Integer, _ A() As Integer, B() As Integer, _ C() As Integer2) 在窗體的Load事件過程中用輸入框輸入M和N的值,再根據該值定義動態(tài)數組A、B和C的大小。生成矩陣中的數據、保存在數組A和B中,同時顯示在文本框Text1和Text2中:代碼設計:76Private Sub Form_Load() M = Val(InputBox(請輸入行數, 矩陣相加, ) N = Val(InputBox(請輸入列數, 矩陣相加, ) ReDim A

41、(1 To M, 1 To N), B(1 To M, 1 To N), C(1 To M, 1 To N) Randomize 77 在文本框Text1中生成矩陣A Text1.Text = For I = 1 To M S1 = S1用于保存矩陣的第I行 For J = 1 To N A(I, J) = Int(Rnd * 11) S1 = S1 & Format(A(I, J), !) Next J Text1.Text = Text1.Text & S1 & vbCrLf Next I78 在文本框Text2中生成矩陣B Text2.Text = For I = 1 To M S1 =

42、 S1用于保存矩陣的第I行 For J = 1 To N B(I, J) = Int(Rnd * 11) S1 = S1 & Format(B(I, J), !) Next J Text2.Text = Text2.Text & S1 & vbCrLf Next IEnd Sub793)“求和”按鈕的Click事件過程如下:Private Sub Command1_Click() 求A矩陣與B矩陣的和C矩陣,顯示在Text3中 Text3.Text = For I = 1 To M s1 = For J = 1 To N C(I, J) = A(I, J) + B(I, J) s1 = s1

43、& Format(C(I, J), !) Next J Text3.Text = Text3.Text & s1 & vbCrLf Next IEnd Sub80*【例7-9】將上例改成求兩個矩陣的積。 分析:M行N列的矩陣A與N行M列的矩陣B相乘,結果為一個M行M列的矩陣C,C矩陣中第I行第J列的元素,等于A矩陣中第I行的元素與B矩陣中第J列的元素分別相乘后再相加。即:81運行界面如下:Command1Text1Text2Text3Command282代碼如下: Dim M As Integer, N As Integer, _ A() As Integer, B() As Integer,

44、 C() As IntegerPrivate Sub Form_Load() M=InputBox(請輸入A矩陣行數, _ 矩陣相乘, ) N = InputBox(請輸入A矩陣列數, _ 矩陣相乘, ) ReDim A(1 To M, 1 To N), _ B(1 To N, 1 To M), C(1 To M, 1 To M) Randomize83 在文本框Text1中生成矩陣A Text1.Text = For I = 1 To M S1 = For J = 1 To N A(I, J) = Int(Rnd * 11) S1 = S1 & Format(A(I, J), !) Next

45、 J Text1.Text = Text1.Text & S1 & vbCrLf Next I84 在文本框Text2中生成矩陣B Text2.Text = For I = 1 To N S1 = For J = 1 To M B(I, J) = Int(Rnd * 11) S1 = S1 & Format(B(I, J), !) Next J Text2.Text = Text2.Text & S1 & vbCrLf Next IEnd Sub85 Private Sub Command1_Click() 求積C Text3.Text = For I = 1 To M S1 = For J

46、= 1 To M C(I, J) = 0 For K = 1 To N C(I, J) = C(I, J) + A(I, K) * B(K, J) Next K S1 = S1 & Format(C(I, J), !) Next J Text3.Text = Text3.Text & S1 & vbCrLf Next IEnd Sub86【例7-10】求矩陣每行元素的和,每列元素的和。分析:用二維數組X來表示矩陣,X有M行N列,行元素的和共有M個,可以設置一個有M個元素的一維數組A來存放,同樣,可設置一個有N個元素的一維數組B來存放:自學:P135137程序X(1,1) X(1,2) X(1,

47、N)X(2,1) X(2,2) X(2,N) .X(M,1) X(M,2) X(M,N)A(1)A(2)A(M)B(1) B(2) B(N)行的和列的和877.8 控件數組在應用程序中,往往要使用一些類型相同、功能相似的控件,可以將這種同一類型的控件定義成一個控件數組。例如,可以將一批文本框定義成一個控件數組,也可以將一批命令按鈕定義成一個控件數組。同一個控件數組中的控件具有相同的名稱??丶到M中的每個控件是該控件數組的一個元素,表示為: 控件數組名(索引) 例如:Text1(0) Text1(1) Text1(2)88各控件(數組元素)的索引(下標)不同,該索引由控件的Index屬性決定。使

48、用控件數組消耗的資源少。當希望若干控件共享代碼時,控件數組也很有用,因為同一個控件數組中的不同控件共享相同的事件過程。例如,設已經創(chuàng)建了一個控件數組Command1,包含10個命令按鈕,則它們的Click事件過程如下:Private Sub Command1_Click(Index As Integer) End Sub897.8.1 創(chuàng)建控件數組1. 在設計階段創(chuàng)建控件數組的方法 1) 將多個控件取相同的名稱 2) 復制、粘貼現有的控件 3) 給控件設置一個Index屬性值2. 在運行時創(chuàng)建控件數組的方法 1) 通常在設計時首先創(chuàng)建一個Index屬性為0的控件 2) 在運行時使用Load語句

49、添加控件: Load 控件數組名(索引) 903)新添加的控件是不可見的,必須編寫代碼將其Visible屬性設置為True,通常還要調整其位置,才可以在界面上顯示出來例: 設已經在設計時建立了一個控件Text1(0),在運行時可以用以下語句加載該數組的一個新的控件: Load Text1(1) Text1(1).Visible = True Text1(1).Left = 1000 視具體情況而定913. 刪除控件數組中的控件: Unload 控件數組名(索引)例如, 刪除以上創(chuàng)建的Text1(1)控件: Unload Text1(1)注意:Unload語句無法刪除設計時創(chuàng)建的控件92示例:控

50、件數組的添加與刪除93代碼如下:Dim i As IntegerPrivate Sub Command1_Click() i = i + 1 Load Image1(i) Image1(i).ZOrder 0 將控件置前 Image1(i).Visible = True Image1(i).Left = Image1(i - 1).Left + 500 Image1(i).Top = Image1(i - 1).Top + 500End Sub94Private Sub Command2_Click() If i 0 Then Unload Image1(i) i = i - 1 Else M

51、sgBox 不能再收牌 End IfEnd Sub 以下代碼實現在單擊控件時將其置前Private Sub Image1_Click(Index As Integer) Image1(Index).ZOrder 0 End Sub957.8.2 控件數組的使用 同一個控件數組的所有控件共享相同的事件過程。控件數組的事件過程會返回一個參數Index,以表示當前是在控件數組的哪一個控件上發(fā)生了該事件。例如, 命令按鈕數組Command1的單擊事件過程為: Private Sub Command1_Click(Index As _ Integer) 在此過程中可以根據Index的值決定 當前按下哪個

52、按鈕,以便做相應的處理 End Sub96【例7-11】設計如下圖所示的界面,創(chuàng)建一個單選按鈕控件數組Option1(0)Option1(5),包含6個單選按鈕。運行時,當按下某一單選按鈕時,對圖形設置相應的形狀。Option1Shape1界面設計:97代碼設計: 由于6個單選按鈕為一個控件數組,因此共享同一個Click事件過程,在單選按鈕數組的Click事件過程中可以根據Index參數值判斷在哪一個單選按鈕上發(fā)生了單擊事件,以決定對圖形設置相應的形狀。圖形的形狀可以通過設置Shape1控件的Shape屬性實現。Shape屬性的取值與對應的形狀見P139表7-1Private Sub Option1_Click(Index As Integer) Shape1.Shape = IndexEnd Sub98【例7-12】使用控件數組創(chuàng)建電影膠片播放特效。Piture1(0)Piture1(1)Piture1(2)Piture1(3)Timer1使用復制粘貼的方法創(chuàng)建控件數組Piture1。設置Timer1的Interval屬性值為10界面設計:991)在窗體的Load事件過程中調整好各圖片的初始位置:Private Sub Form_Load() Form1.Width = 3 * Picture1(0).Width Pict

溫馨提示

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

評論

0/150

提交評論