




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1數(shù) 組本章要點(diǎn):數(shù)組的基本概念數(shù)組的定義數(shù)組的操作(輸入、輸出、刪除等)數(shù)組應(yīng)用舉例控件數(shù)組第7章 27.1 數(shù)組的基本概念 前面的各種問題中,一般只涉及少量的數(shù)據(jù),這些數(shù)據(jù)使用簡單變量就可以很方便地進(jìn)行存取或處理。但是,在實(shí)際問題中往往會有大量相關(guān)的數(shù)據(jù)需要處理。例如,要處理全校3000個(gè)學(xué)生的數(shù)學(xué)成績,如果使用簡單變量,就要引入3000個(gè)不同的變量來存儲這些數(shù)據(jù)。這樣顯然太繁瑣,如果數(shù)據(jù)量再大,采用這種處理幾乎是難以做到的。另外,這種數(shù)據(jù)除了量比較大以外,各數(shù)據(jù)在整組數(shù)中的位置是明確的,即數(shù)據(jù)是有序的。這種順序使用簡單變量難以體現(xiàn),而使用本章要介紹的數(shù)組,在多數(shù)場合可以很方便地處理這種大
2、量的性質(zhì)相同的有序數(shù)。37.1.1 數(shù)組與數(shù)組元素定義: 一組性質(zhì)相同的有序的數(shù) 例如, 全班40名同學(xué)的英語成績: G(1) G(2) G(3) G(40)所有班級(如6個(gè)班,每班40人)同學(xué)的英語成績: 表示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數(shù)組名:一組數(shù)用一個(gè)統(tǒng)
3、一的名稱表示。數(shù)組元素(下標(biāo)變量): 數(shù)組中的每一個(gè)元素 表示成: 數(shù)組名(下標(biāo)) 下標(biāo)的取值可以是常量、變量、表達(dá)式 如: G(8) B(I) C(3+K) 下標(biāo)還可以是下標(biāo)變量 如: A(A(5) 令A(yù)(5)=4 則 A(A(5)=A(4)每個(gè)數(shù)組元素用來保存一個(gè)數(shù)據(jù),其使用與簡單變量類似。 例如,G(8)=87 表示給數(shù)組元素G(8)賦值。6注意:要用圓括號把下標(biāo)括起來 例如,將X(8)表示成: X8、X8、或X8都是錯(cuò)誤的。下標(biāo)必須是整數(shù),否則將被自動(dòng)四舍五入為整數(shù)。下標(biāo)的最小取值稱為下界,下標(biāo)的最大取值稱為上界。數(shù)組元素的下標(biāo)必須在其下界和上界之間,否則將會出錯(cuò)。77.1.2 數(shù)組的
4、維數(shù)數(shù)組的維數(shù):下標(biāo)個(gè)數(shù) 一維數(shù)組: 由一個(gè)下標(biāo)組成。 如 A(2),C(6) 二維數(shù)組: 由兩個(gè)下標(biāo)組成。 如 B(2,3) 三維數(shù)組: 由三個(gè)下標(biāo)組成。 如 G(3,4,23) 三維以上的數(shù)組稱為多維數(shù)組,最多60維通常也將二維數(shù)組的第一個(gè)下標(biāo)叫行下標(biāo),第二個(gè)下標(biāo)叫列下標(biāo)。87.2 數(shù)組的定義數(shù)組在使用之前必須先定義(聲明)。定義數(shù)組的目的是為數(shù)組分配存儲空間,數(shù)組名即為這個(gè)存儲空間的名稱,而數(shù)組元素即為存儲空間的每一個(gè)單元。每個(gè)單元的大小與數(shù)組的類型有關(guān)。 例如,定義某數(shù)組X為整型(Integer)數(shù)組,共有10個(gè)元素,則每個(gè)元素占2個(gè)字節(jié),則所有數(shù)組元素占20個(gè)字節(jié)。按數(shù)組占用存儲空間
5、的方式不同,分為兩種數(shù)組:靜態(tài)數(shù)組和動(dòng)態(tài)數(shù)組。兩種數(shù)組的定義方法不同,使用方法也略有不同。97.2.1 靜態(tài)數(shù)組的定義1. 格式 Public|Private|Dim 數(shù)組名(維數(shù)定義) As 類型,2. 功能 聲明數(shù)組名稱、維數(shù)、維大小、類型。 為數(shù)組分配存儲空間。例:定義數(shù)組G保存全班40名同學(xué)的英語成績 Dim G( 1 To 40) As Integer例:定義數(shù)組B,保存3行3列的矩陣的各元素 Dim B(1 To 3, 1 To 3)103. 說明1) Public|Private|Dim:在標(biāo)準(zhǔn)模塊的通用聲明段使用Public語句建立一個(gè)全局級數(shù)組;在模塊的通用聲明段使用Priv
6、ate語句或Dim語句建立一個(gè)模塊級數(shù)組; 在過程中用Dim語句建立一個(gè)過程級數(shù)組。2)數(shù)組名:需遵循變量命名約定。3)“維數(shù)定義”: 下界1 To 上界1,下界2 To 上界2,11如果下界省略,則使用默認(rèn)下界定義默認(rèn)下界: Option Base 0|1不加任何定義時(shí),默認(rèn)下界為0數(shù)組元素個(gè)數(shù): (上界1-下界1+1)*(上界2-下界2+1)*4): Integer Long Single Double Boolean String String*n Curency Byte Date Variant Object 用戶定義類型125)數(shù)組在定義后自動(dòng)被初始化 例如: 將數(shù)值型數(shù)組元素值置
7、為0; 將字符串類型數(shù)組元素值置為零長度字符串6)靜態(tài)數(shù)組被定義后,VB為其分配固定大小的存儲空間,在運(yùn)行期大小不能改變。13例: Dim C(9) As Integer 一維整型數(shù)組;下界0,上界為9 元素:C(0) C(1) C(2) C(9) 例: Dim A(-4 TO 10) As Integer 一維整型數(shù)組;下界 -4,上界 10 元素 A(-4) A(-3) . A(0) A(1) . A(10)例: DIM M(-3 TO 10) 一維可變類型數(shù)組 例: 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 二維字符串類型數(shù)組 第一維:下界-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 在預(yù)先不知道要處理的數(shù)據(jù)量有多大時(shí),如果使用靜態(tài)數(shù)組,就需要在聲明數(shù)組時(shí)使數(shù)組的大小盡可能達(dá)到最大,以適應(yīng)不同的數(shù)據(jù)量。因?yàn)殪o態(tài)數(shù)組在整個(gè)程序的執(zhí)行過程中一直占用存儲空間,因此會浪費(fèi)一定的內(nèi)存空間,過度使用靜態(tài)數(shù)組會影響
9、整個(gè)系統(tǒng)的性能。 在解決實(shí)際問題時(shí),所需要的數(shù)組到底應(yīng)該有多大才合適,有時(shí)可能不得而知,所以希望能夠在運(yùn)行時(shí)改變數(shù)組的大小。使用動(dòng)態(tài)數(shù)組就可以在任何時(shí)候改變其大小,并且可以在不需要時(shí)清除動(dòng)態(tài)數(shù)組所占的存儲空間。因此,使用動(dòng)態(tài)數(shù)組更加靈活、方便,并有助于高效管理內(nèi)存。161. 定義動(dòng)態(tài)數(shù)組分以下兩步進(jìn)行: 1) 在模塊級或過程級定義一個(gè)沒有下標(biāo)的數(shù)組 : Public|Private|Dim 數(shù)組名()As 類型, 例:Dim G() As Integer2) 在過程級使用ReDim語句定義數(shù)組的實(shí)際大小 ReDim Preserve 數(shù)組名(維數(shù)定義) As 類型,例: ReDim G(1 T
10、o 100) As Integer ReDim Preserve G(1 To 100) As Integer7.2.2 動(dòng)態(tài)數(shù)組的定義172. 說明ReDim語句只能出現(xiàn)在過程中。維數(shù)定義:常包含具有明確值的變量或表達(dá)式??梢杂肦eDim反復(fù)改變數(shù)組元素及維數(shù)的數(shù)目。若用步驟1定義了類型,則不許用步驟2改變類型。18每次執(zhí)行ReDim語句時(shí),如果不使用Preserve關(guān)鍵字,當(dāng)前存儲在數(shù)組中的值會全部丟失。Visual Basic重新對數(shù)組元素進(jìn)行初始化,如將數(shù)值型數(shù)組元素值置為0,將可變長度字符串類型數(shù)組元素值置為零長度字符串。Preserve為可選的關(guān)鍵字。有時(shí),希望改變數(shù)組的大小又不丟
11、失數(shù)組中原有的數(shù)據(jù),使用帶Preserve關(guān)鍵字的ReDim語句就可以做到這一點(diǎn)。使用Preserve關(guān)鍵字的Redim語句只能改變多維數(shù)組中最后一維的上界,且不能改變維數(shù)的數(shù)目。如果改變了其他維或最后一維的下界,那么運(yùn)行時(shí)就會出錯(cuò)。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運(yùn)行時(shí)輸出
12、結(jié)果為: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運(yùn)行時(shí)輸出結(jié)果為:1 1 1 1 1 1 1 1 1 1 0 0 0 0217.3 數(shù)組的輸入輸出 數(shù)組在聲明之后,VB對其進(jìn)行了初始化,但在實(shí)際應(yīng)用中,往往要給數(shù)組元素
13、賦一定的初始值。例如,在處理學(xué)生成績時(shí),首先需要向數(shù)組中輸入所有的成績,在使用二維數(shù)組表示矩陣時(shí),要向數(shù)組中輸入矩陣中各元素的值。對數(shù)組元素的輸入可以有多種方法。例如:賦值語句;文本框;InputBox函數(shù);Array函數(shù)等,可以對數(shù)組的個(gè)別元素輸入數(shù)據(jù),也可以對整個(gè)數(shù)組輸入數(shù)據(jù)。 數(shù)組元素經(jīng)過處理后,常需要將結(jié)果顯示給用戶,即輸出數(shù)組元素的值。輸出方法如:Print方法;標(biāo)簽;文本框等。22例:用輸入框輸入10個(gè)學(xué)生的成績并存放到數(shù)組A中,然后將這些成績顯示在文本框中。 Dim A(1 To 10) As Integer 輸入: For i = 1 To 10 A(i) = Val(Inpu
14、tBox(請輸入第 & Str(i) & 個(gè)學(xué)生的成績) Next i 輸出: For i = 1 To 10 Text1.Text = Text1.Text & Str(A(i) Next i23使用文本框顯示多個(gè)數(shù)據(jù)時(shí),常需要給文本框設(shè)置滾動(dòng)條,依據(jù)滾動(dòng)條的方向,要注意每顯示一個(gè)或多個(gè)數(shù)據(jù)后是否要在文本框中加上回車換行符號。24例:假設(shè)用二維數(shù)組B來表示一個(gè)6行6列的矩陣,以下代碼生成包含1,10之間的隨機(jī)整數(shù)的矩陣,并以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 數(shù)組名2. 功能刪除靜態(tài)數(shù)組將對其中的所有元素進(jìn)行初始化。例如,將數(shù)值型數(shù)組元素值置為0;將可變長度字符串類型數(shù)組元素值置為零長度字符串。注意,Erase語句不能釋放靜態(tài)數(shù)組所占的存儲空間。刪除動(dòng)態(tài)數(shù)組將釋放動(dòng)態(tài)數(shù)組所占的存儲空間,在下次引用該動(dòng)態(tài)數(shù)組之前,必須使用ReDim語句重新定義該數(shù)組。7.4 數(shù)組的刪除271. 格式
16、 For Each 變量 In 數(shù)組名 語句組1 Exit For 語句組2 Next 變量 7.5 使用For Each.Next循環(huán)處理數(shù)組只能是一個(gè)可變類型的變量2. 功能: 首先將數(shù)組中的第一個(gè)元素賦給”變量”,然后進(jìn)入循環(huán)體中執(zhí)行其中的語句。如果數(shù)組中還有其他元素,則繼續(xù)將下一個(gè)元素賦值給”變量”后執(zhí)行循環(huán)體,當(dāng)針對數(shù)組中的所有元素都執(zhí)行完了,便會退出循環(huán),執(zhí)行Next之后的語句。28例: 以下程序段使用For Each.Next語句打印一維數(shù)組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例: 求二維數(shù)組Y的所有元素之和。 Dim Y(10, 10) For Each A In Y Sum = Sum + A Next A Print Sum 297.6 數(shù)組操作函數(shù)1LBound和UBound函數(shù)格式:LBound(數(shù)組名,N)UBound(數(shù)組名,N)功能:LBound函數(shù)返回“數(shù)組名”指定的數(shù)組的第N維的下界;UBound函數(shù)返回“數(shù)組名”指定的數(shù)組的第N維的上界。說明:N為1表示第一維,N為2表示第二維,等等。如果省略N,則
18、默認(rèn)為1。30例:要打印一維數(shù)組A的各個(gè)值,可以通過下面的代碼實(shí)現(xiàn): For I = LBound(A) To UBound(A) Print A(I); Next I例:要打印二維數(shù)組B的各個(gè)值,可以通過下面的代碼實(shí)現(xiàn): 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函數(shù)格式:Array(參數(shù)表)功能:返回一個(gè)數(shù)組,數(shù)組元素的值由“參數(shù)表”指定。說明:“參數(shù)表”是一系列用逗號分隔的值,這些值構(gòu)成數(shù)組的各元素值
19、。Array函數(shù)只能給Variant類型的變量賦值,賦值后的數(shù)組大小由參數(shù)的個(gè)數(shù)決定,數(shù)組下標(biāo)的下界由Option Base語句指定的下界決定。32例:要將1,2,3,4,5,6,7,8,9,10這些值賦給數(shù)組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函數(shù)格式:Split(字符串表達(dá)式,分隔符)功能:以某個(gè)指定符號作為分隔符,將“字符串表達(dá)式”指定的字符串分離為若干個(gè)子字符串,以這些子字符串為元素構(gòu)成一個(gè)下標(biāo)從零開始的一維數(shù)組。說
20、明:“字符串表達(dá)式”用于指定要被分隔的字符串,“分隔符”是可選的,如果忽略,則使用空格作為分隔符。34例:執(zhí)行以下代碼段: Dim A A = Split(how are you, )執(zhí)行以上賦值之后:A(0)=how,A(1)=are,A(2)=you。也可以用Split函數(shù)給一個(gè)動(dòng)態(tài)數(shù)組賦值。例: Dim A() As String A = Split(how are you, )354Join函數(shù)格式:Join(一維數(shù)組名,分隔符)功能:將一維數(shù)組中的各元素連接成一個(gè)字符串,連接時(shí)各子字符串之間加上“分隔符”指定的字符。說明:分隔符用于指定在返回的字符串中分隔各子字符串的字符。如果忽略該
21、項(xiàng),則使用空格來分隔子字符串。如果“分隔符”是零長度字符串,則將所有數(shù)組元素連接在一起,中間沒有分隔符。36例:執(zhí)行以下代碼段: Dim a a = Array(吃葡萄, 不吐, 葡萄皮) b = Join(a, ) Print b打印“吃葡萄不吐葡萄皮”377.7 數(shù)組應(yīng)用舉例【例7-1】輸入若干個(gè)學(xué)生的成績,統(tǒng)計(jì)不及格人數(shù)和優(yōu)秀人數(shù)。Text1Command1Picture1設(shè)計(jì)界面:38分析:設(shè)運(yùn)行時(shí)學(xué)生成績直接輸入到文本框Text1中,各成績之間用逗號分隔。代碼首先使用Split函數(shù)將文本框Text1中輸入的成績分離開,保存到數(shù)組A中。引入計(jì)數(shù)變量設(shè)兩個(gè)計(jì)數(shù)變量num1和num2,分別
22、用來保存不及格學(xué)生人數(shù)和優(yōu)秀學(xué)生人數(shù)。將計(jì)數(shù)變量初始化為0,統(tǒng)計(jì)過程逐一取數(shù)組元素進(jìn)行判斷,如果數(shù)組元素的值小于60,則讓num1累加1,如果數(shù)組元素的值大于或等于90,則讓num2累加1。39代碼設(shè)計(jì):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 顯示統(tǒng)計(jì)結(jié)果 Picture1.Cls 定義打印位置 Picture1.CurrentX = 100 Picture1.CurrentY = 100 Picture1.Print 不及格人數(shù):; num1; _ Tab(18); 優(yōu)秀人數(shù):; num2End Sub運(yùn)行界面:41【例7-2】輸入若干名學(xué)生的成績,求平均分、最高分、最低分。設(shè)計(jì)界面:Text2Text3Text4Text142分析: 假設(shè)運(yùn)行時(shí)輸入到文本框Text1中的各成績之間用逗號分隔。代碼首先使用Split函數(shù)將文本框Text1中輸入的成績分離開,保存到數(shù)組A中
24、,然后進(jìn)行求值。求平均分時(shí)只需先求數(shù)組所有元素之和,再除以數(shù)組元素的個(gè)數(shù)即可。求最高分、最低分的問題實(shí)際上就是求一組數(shù)據(jù)的最大值、最小值問題。43求最大值的方法:1)設(shè)一個(gè)存放最大值的變量MaxNum,其初值為數(shù)組的第一個(gè)元素,即MaxNum=A(0);2)依次將MaxNum與A(1)到A(N)的所有數(shù)據(jù)進(jìn)行比較,如果數(shù)組中的某個(gè)數(shù)A(I)大于MaxNum,則用該數(shù)替換MaxNum,即MaxNumx=A(I),所有數(shù)據(jù)比較完后,MaxNum中存放的數(shù)即為整個(gè)數(shù)組的最大數(shù)。求最小值的方法與求最大值的方法類似。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、)的內(nèi)容;2) 將第2個(gè)數(shù)與第3個(gè)數(shù)到第N個(gè)數(shù)依次比較,如果X(2)X(J)(J=3,4,N),則交換X(2)、X(J)的內(nèi)容;3) 重復(fù)以上方法,將第I個(gè)數(shù)與第I+1個(gè)數(shù)到第N個(gè)數(shù)依次比較,如果X(I)X(J)(J=I+1,N),則交換X(I)、X(J)的內(nèi)容;共重復(fù)N-1輪。49代碼設(shè)計(jì):(1)設(shè)用數(shù)組X保存學(xué)生成績,用變量N保存學(xué)生人數(shù)。因?yàn)閿?shù)組X和變量N要在兩個(gè)命令按鈕的事件過程中公用,所以,在窗體模塊的通用聲明段定義數(shù)組X和變量N。因?yàn)閷W(xué)生人數(shù)可以由用戶來指定,因此這里應(yīng)將X定義成動(dòng)態(tài)數(shù)組: Option Base 1 Dim N As Integer, X() As Integer
27、50(2) “輸入成績”按鈕的Click事件過程:Private Sub Command1_Click() N = Val(InputBox(請輸入總?cè)藬?shù)) ReDim X(N) Text1.Text = For I = 1 To N X(I) = Val(InputBox(請輸入第 & Str(I) & 個(gè)學(xué)生的成績, 成績排序, ) Text1.Text = Text1.Text & Str(X(I) Next IEnd Sub51(3)“排序”按鈕的Click事件過程:Private Sub Command2_Click() 用比較交換法進(jìn)行排序 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 顯示排序結(jié)果 Text2.Text = For I = 1 To N Text2.Text = Text2.Text & Str(X(I) Next IEnd Sub選擇排序法:自學(xué):P126冒泡排序法:自學(xué)P126P12753【例7-4】生成100個(gè)0,100之間的隨機(jī)整數(shù)作為原始數(shù)據(jù),存于數(shù)組A中,在數(shù)組A中查找指定的元素Number。設(shè)計(jì)界面:Text1Command1 Comman
29、d254分析:這是一個(gè)查找問題,查找的方法有很多種,如順序查找、折半查找、分塊查找等。不同的查找方法效率不同。1)“順序查找”算法: 設(shè)用變量K保存查找位置,初始值為0。從數(shù)組A的第一個(gè)元素開始,按順序依次與Number比較,如果A(I)=Number,則保存查找位置K,即讓K=I,結(jié)束查找;否則,繼續(xù)與下一個(gè)數(shù)比較。 結(jié)束查找后,若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)在窗體模塊的通用聲明段定義數(shù)組A:Dim A(1 To 100) As Integer代碼設(shè)計(jì):(2)編寫“生成隨機(jī)數(shù)”按鈕的Click事件過程:56(3)編寫“查找”按鈕Command2的Click事件過程:Private Sub Command2_Click() Number = Val(InputBox(請輸入要查找的數(shù)) k = 0 用k保存查找位置 順序查找 For I = 1 To 100 If A(I) = Number Then 如果找到 k = I 保存找到的位置 Exit For 退出循環(huán) End If Next I 57 根據(jù)k
31、的值判斷查找結(jié)果 If k 0 Then MsgBox 所找的數(shù)在第 & Str(k) & _ 個(gè)位置 Else MsgBox 沒找到 End IfEnd Sub*2)折半查找算法:自學(xué)P128P12958【例7-5】生成20個(gè)0,100區(qū)間的隨機(jī)整數(shù)作為原始數(shù)據(jù),存于數(shù)組A中,然后刪除數(shù)組A中指定位置的元素。設(shè)計(jì)界面: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代碼設(shè)計(jì):1)由于數(shù)組A的大小在刪除元
32、素后變小,因此這里將數(shù)組A定義成動(dòng)態(tài)數(shù)組。 在窗體模塊的通用聲明段聲明: Option Base 1 Dim N As Integer, A() As Integer612)在窗體的Load事件過程中生成20個(gè)0到100之間的隨機(jī)整數(shù),顯示于文本框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事件過程,實(shí)現(xiàn)按指定位置刪除。 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】將數(shù)Num插在數(shù)組A中指定的Pos位置 。 如果Pos0,則將Num插在第1個(gè)位置 如果PosN,則將Num插在最后一個(gè)位置設(shè)計(jì)界面:Text3Text2Command165posNum1) 對數(shù)組中原Pos位置的元素到最后一個(gè)元素全部向后移動(dòng)一個(gè)位置: 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個(gè)0,100之間的隨機(jī)整數(shù),顯示于文本框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個(gè)位置,即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 顯示插入后的結(jié)果 For I = 1 To N Text4.Text = Text4.Text & Str(A(I) Next IEnd Sub69 【例7-7】在窗體上輸出
37、一個(gè)N行、N列、主對角線和次對角線元素為1,其余元素均為零的矩陣。N由用戶指定。 分析:矩陣中的每個(gè)數(shù)據(jù)在矩陣中所處的位置由行號和列號決定,可以使用二維數(shù)組直觀地表示矩陣中的每一個(gè)元素。例如,用二維數(shù)組A表示矩陣,第一個(gè)下標(biāo)表示矩陣中數(shù)據(jù)的行號,第二個(gè)下標(biāo)表示列號,因此矩陣中第I行第J列元素表示為A(I,J)。而N行N列矩陣的主對角線元素指數(shù)組中行下標(biāo)與列下標(biāo)相同的元素,次對角線元素的行下標(biāo)與列下標(biāo)之和為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代碼設(shè)計(jì):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】求兩個(gè)矩陣的和。 分析: M行N列的矩陣A與M行N列的矩陣B的和,結(jié)果為一個(gè)M行N列的矩陣C,C矩陣中第I行第J列的元素,等于A矩陣中第I行第J列的元素與B矩陣中第I行第J列的元素相加。即: C(I,J)=A(I,J)+B(I,J) 配合循環(huán)變量控制下標(biāo)取所有可能的值:For I = 1 To M For J = 1 To N C(I, J) = A(I, J) + B(I, J) Next JNext I74Text1Text2Text3Command1Comma
40、nd2運(yùn)行界面:751) 在代碼窗口的通用聲明段聲明: Dim M As Integer, N As Integer, _ A() As Integer, B() As Integer, _ C() As Integer2) 在窗體的Load事件過程中用輸入框輸入M和N的值,再根據(jù)該值定義動(dòng)態(tài)數(shù)組A、B和C的大小。生成矩陣中的數(shù)據(jù)、保存在數(shù)組A和B中,同時(shí)顯示在文本框Text1和Text2中:代碼設(shè)計(jì):76Private Sub Form_Load() M = Val(InputBox(請輸入行數(shù), 矩陣相加, ) N = Val(InputBox(請輸入列數(shù), 矩陣相加, ) 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】將上例改成求兩個(gè)矩陣的積。 分析:M行N列的矩陣A與N行M列的矩陣B相乘,結(jié)果為一個(gè)M行M列的矩陣C,C矩陣中第I行第J列的元素,等于A矩陣中第I行的元素與B矩陣中第J列的元素分別相乘后再相加。即:81運(yùn)行界面如下:Command1Text1Text2Text3Command282代碼如下: Dim M As Integer, N As Integer, _ A() As Integer, B() As Integer,
44、 C() As IntegerPrivate Sub Form_Load() M=InputBox(請輸入A矩陣行數(shù), _ 矩陣相乘, ) N = InputBox(請輸入A矩陣列數(shù), _ 矩陣相乘, ) 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】求矩陣每行元素的和,每列元素的和。分析:用二維數(shù)組X來表示矩陣,X有M行N列,行元素的和共有M個(gè),可以設(shè)置一個(gè)有M個(gè)元素的一維數(shù)組A來存放,同樣,可設(shè)置一個(gè)有N個(gè)元素的一維數(shù)組B來存放:自學(xué):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 控件數(shù)組在應(yīng)用程序中,往往要使用一些類型相同、功能相似的控件,可以將這種同一類型的控件定義成一個(gè)控件數(shù)組。例如,可以將一批文本框定義成一個(gè)控件數(shù)組,也可以將一批命令按鈕定義成一個(gè)控件數(shù)組。同一個(gè)控件數(shù)組中的控件具有相同的名稱??丶?shù)組中的每個(gè)控件是該控件數(shù)組的一個(gè)元素,表示為: 控件數(shù)組名(索引) 例如:Text1(0) Text1(1) Text1(2)88各控件(數(shù)組元素)的索引(下標(biāo))不同,該索引由控件的Index屬性決定。使
48、用控件數(shù)組消耗的資源少。當(dāng)希望若干控件共享代碼時(shí),控件數(shù)組也很有用,因?yàn)橥粋€(gè)控件數(shù)組中的不同控件共享相同的事件過程。例如,設(shè)已經(jīng)創(chuàng)建了一個(gè)控件數(shù)組Command1,包含10個(gè)命令按鈕,則它們的Click事件過程如下:Private Sub Command1_Click(Index As Integer) End Sub897.8.1 創(chuàng)建控件數(shù)組1. 在設(shè)計(jì)階段創(chuàng)建控件數(shù)組的方法 1) 將多個(gè)控件取相同的名稱 2) 復(fù)制、粘貼現(xiàn)有的控件 3) 給控件設(shè)置一個(gè)Index屬性值2. 在運(yùn)行時(shí)創(chuàng)建控件數(shù)組的方法 1) 通常在設(shè)計(jì)時(shí)首先創(chuàng)建一個(gè)Index屬性為0的控件 2) 在運(yùn)行時(shí)使用Load語句
49、添加控件: Load 控件數(shù)組名(索引) 903)新添加的控件是不可見的,必須編寫代碼將其Visible屬性設(shè)置為True,通常還要調(diào)整其位置,才可以在界面上顯示出來例: 設(shè)已經(jīng)在設(shè)計(jì)時(shí)建立了一個(gè)控件Text1(0),在運(yùn)行時(shí)可以用以下語句加載該數(shù)組的一個(gè)新的控件: Load Text1(1) Text1(1).Visible = True Text1(1).Left = 1000 視具體情況而定913. 刪除控件數(shù)組中的控件: Unload 控件數(shù)組名(索引)例如, 刪除以上創(chuàng)建的Text1(1)控件: Unload Text1(1)注意:Unload語句無法刪除設(shè)計(jì)時(shí)創(chuàng)建的控件92示例:控
50、件數(shù)組的添加與刪除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 以下代碼實(shí)現(xiàn)在單擊控件時(shí)將其置前Private Sub Image1_Click(Index As Integer) Image1(Index).ZOrder 0 End Sub957.8.2 控件數(shù)組的使用 同一個(gè)控件數(shù)組的所有控件共享相同的事件過程。控件數(shù)組的事件過程會返回一個(gè)參數(shù)Index,以表示當(dāng)前是在控件數(shù)組的哪一個(gè)控件上發(fā)生了該事件。例如, 命令按鈕數(shù)組Command1的單擊事件過程為: Private Sub Command1_Click(Index As _ Integer) 在此過程中可以根據(jù)Index的值決定 當(dāng)前按下哪個(gè)
52、按鈕,以便做相應(yīng)的處理 End Sub96【例7-11】設(shè)計(jì)如下圖所示的界面,創(chuàng)建一個(gè)單選按鈕控件數(shù)組Option1(0)Option1(5),包含6個(gè)單選按鈕。運(yùn)行時(shí),當(dāng)按下某一單選按鈕時(shí),對圖形設(shè)置相應(yīng)的形狀。Option1Shape1界面設(shè)計(jì):97代碼設(shè)計(jì): 由于6個(gè)單選按鈕為一個(gè)控件數(shù)組,因此共享同一個(gè)Click事件過程,在單選按鈕數(shù)組的Click事件過程中可以根據(jù)Index參數(shù)值判斷在哪一個(gè)單選按鈕上發(fā)生了單擊事件,以決定對圖形設(shè)置相應(yīng)的形狀。圖形的形狀可以通過設(shè)置Shape1控件的Shape屬性實(shí)現(xiàn)。Shape屬性的取值與對應(yīng)的形狀見P139表7-1Private Sub Option1_Click(Index As Integer) Shape1.Shape = IndexEnd Sub98【例7-12】使用控件數(shù)組創(chuàng)建電影膠片播放特效。Piture1(0)Piture1(1)Piture1(2)Piture1(3)Timer1使用復(fù)制粘貼的方法創(chuàng)建控件數(shù)組Piture1。設(shè)置Timer1的Interval屬性值為10界面設(shè)計(jì):991)在窗體的Load事件過程中調(diào)整好各圖片的初始位置:Private Sub Form_Load() Form1.Width = 3 * Picture1(0).Width Pict
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 武威職業(yè)學(xué)院《數(shù)據(jù)分析與工程數(shù)學(xué)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年醫(yī)療器械出口市場分析與發(fā)展趨勢研究報(bào)告
- 石家莊鐵道大學(xué)四方學(xué)院《乳品微生物學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 畢節(jié)幼兒師范高等專科學(xué)?!段鞣揭魳肥放c名作賞析(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廈門工學(xué)院《外貿(mào)英語函電》2023-2024學(xué)年第一學(xué)期期末試卷
- 綿陽城市學(xué)院《鉆井儀器》2023-2024學(xué)年第一學(xué)期期末試卷
- 主動(dòng)脈腔內(nèi)隔絕術(shù)護(hù)理
- 河南師范大學(xué)《網(wǎng)球(三)》2023-2024學(xué)年第一學(xué)期期末試卷
- 汽車消費(fèi)信貸課件
- 廣西工商職業(yè)技術(shù)學(xué)院《生物制品生產(chǎn)與檢驗(yàn)技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 12-機(jī)器視覺應(yīng)用實(shí)例分析教學(xué)課件
- 專題04:演講魅力-2023-2024學(xué)年八年級語文下冊單元主題閱讀(統(tǒng)編版)(原卷版)
- 湖南省岳陽市第九中學(xué)2023-2024學(xué)年八年級下學(xué)期期末考試道德與法治試題
- 簽訂預(yù)算合同范本
- 浙江省寧波市鎮(zhèn)海區(qū)2023-2024學(xué)年下學(xué)期八年級科學(xué)期末試卷
- 公司董事會與股東會議管理制度
- 汽車車身飾件DFMEA-后視鏡系統(tǒng)
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計(jì)規(guī)范
- 企業(yè)運(yùn)營與模擬競爭智慧樹知到期末考試答案2024年
- 內(nèi)科胸腔鏡風(fēng)險(xiǎn)處置預(yù)案
- SL345-2007水利水電工程注水試驗(yàn)規(guī)程
評論
0/150
提交評論