Visual Basic程序設計應用教程課件第5章 數組_第1頁
Visual Basic程序設計應用教程課件第5章 數組_第2頁
Visual Basic程序設計應用教程課件第5章 數組_第3頁
Visual Basic程序設計應用教程課件第5章 數組_第4頁
Visual Basic程序設計應用教程課件第5章 數組_第5頁
已閱讀5頁,還剩45頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第5章數組

5.1數組的概念

5.2固定數組

5.3動態數組5.4ForEach…Next循環5.5控件數組5.6自定義數據類型

5.1數組的概念

在現實生活中,存在著各種各樣的數據,有些數據之間沒有太多的內在聯系,用簡單變量就可以進行存取和處理,前幾章我們用到的變量都屬于這種情況。但是,在實際工作中,常常會遇到大批的有著內在聯系的數據需要處理,例如,學生成績的統計、人口普查的數據處理、農業實驗觀測值等等。如果仍然用簡單變量來存取和處理,不僅很不方便,甚至不可能處理的。針對這個問題,我們需要引入一個重要的概念——數組來解決。在許多場合,使用數組可以簡化程序,提高程序的運行效率。

返回5.1數組的概念5.1.1下標變量

5.1.2數組和數組元素

5.1.3數組元素的存放

返回5.1.1

下標變量1.下標:在一組類型相同的數據中,每個數據在其中的順序位置是一定的,我們用下標來標識。2.下標變量:帶下標的變量,我們稱為下標變量。關于下標變量的規定:(1)下標變量在程序中的用法和簡單變量的用法一樣。(2)下標可以是常數、數值變量、算術表達式甚至下標變量。下標中如含有變量,使用前應給該變量提前賦值。例如,當i=5時,a(i)表示a(5),a(i+3)表示a(8);如果b(3)=5,則a(b(3))表示a(5)。(3)下標變量的下標值應該為整數,否則計算機將對下標進行自動取整。如a(3.2)將被視為a(3),a(-3.7)將被視為a(-4)。

返回5.1.2

數組和數組元素

數組是由一系列具有相同變量名、相同數據類型的下標變量構成的有序排列。變量名就是數組名,每個下標變量稱為該數組的一個數組元素。數組的數據類型也就是該數組包含的下標變量的數據類型。在VisualBasic中,可以聲明任何基本數據類型的數組,包括用戶自定義類型和對象變量,但是一個數組中的所有元素應該具有相同的數據類型,只有當數據類型為Variant時,各個元素才能夠包含不同類型的數據。返回5.1.3

數組元素的存放

數組中的各個元素在內存中的存儲是按照一定的規律,占據著一片連續的存儲區域。一維數組的存放順序就是它的下標順序;而多維數組的元素的存放順序遵照下述規定:首先變化的是最后一維的下標,然后變化倒數第二維的下標,第一個下標最后變化(按行存放)。下表顯示數組A(4,3)在內存中的分配情況:返回A(0,0)A(0,1)A(0,2)A(0,3)A(1,0)A(1,1)A(1,2)A(1,3)A(2,0)A(2,1)A(2,2)A(2,3)A(3,0)A(3,1)A(3,2)A(3,3)A(4,0)A(4,1)A(4,2)A(4,3)5.2

固定數組5.2.1數組的聲明

5.2.2數組的使用

返回5.2.1

數組的聲明

固定數組也稱為靜態數組,是指數組元素的個數固定不變的數組。數組的聲明格式如下:

[Private|Public|Dim]數組名(<維數說明>)[As數據類型]其中:(1)Private|dim用來聲明局部數組或模塊數組,Public用來聲明公用數組。(2)數組名的命名規則與簡單變量的命名規則相同。(3)如果省略[As數據類型],數組按Variant型處理。如果數組的數據類型可以確定,最好不要省略<數據類型>。返回5.2.1

數組的聲明

(4)<維數說明>指定數組的維數以及各維的范圍,為了規定下界,用關鍵字To顯式提供下界(為Long數據類型)。定義格式為:

[<下標下界1>To]<下標上界1>[,<下標下界2>To]<下標上界2>]…

如果沒有使用To顯式指定下標下界,則可以用OptionBasen語句控制下界。如果沒有使用OptionBasen語句,則默認數組的下界為0。(5)數組的大小:每一維的大小為上界-下界+1;數組的大小為各維大小的乘積。例如:PrivateA(6)AsInteger

‘聲明一個長度為7的整型數組A,下標為0~6Dimgrade(1To50,3)assingle'聲明包含50×4個元素的二維數組返回注意:(1)在聲明數組時,下標必須是常量,不能是變量。而在應用數組元素時下標可以是常數、變量或表達式。例如:下面的靜態數組聲明是錯誤的。

n=InputBox("輸入數組的上界")Dima(1Ton)AsInteger‘聲明數組時下標出現變量(2)數組下標越界錯誤:引用的下標比數組聲明時的下標范圍大或小。例如:

Dima(1To30)AsLong,i%a(1)=1:a(2)=1Fori=2To30a(i)=a(i-2)+a(i-1)‘a(0)不存在

Nexti5.2.1

數組的聲明返回5.2.1

數組的聲明(3)數組維數錯:數組聲明時的維數與引用數組元素時的維數不一致。例如:Dima(3,5)AsLonga(i)=10(4)在增加數組的維數時,數組所占的存儲空間會大幅度的增加,所以要慎用多維數組。使用Variant數組時更要格外小心,因為它們需要更大的存儲空間。返回5.2.2

數組的使用

數組的使用是通過對數組元素進行賦值、表達式運算、輸入和輸出等操作來實現。對數組元素的操作和對簡單變量的操作類似,但對數組元素的使用要注意以下幾點:(1)在同一過程中,不能聲明與簡單變量同名的數組。(2)聲明數組后,數值型數組的各個數組元素被初始化為0,字符串型數組的各個數組元素被初始化為空字符串。(3)使用數組元素時,數組名、數組的數據類型、維數必須與數組聲明時一致。(4)使用數組元素時,下標值應在數組聲明時所指定的范圍之內。返回5.2.2

數組的使用【例5-1】編寫程序,將輸入的10個數據,按照輸入的順序逆向輸出。返回圖5-110個數的逆序輸出【例5-2】隨機產生10個1~100的正整數放入數組,顯示產生的數,求最大值、最小值、平均值。5.2.2

數組的使用圖5-2例5-2界面設置及運行結果返回5.2.2

數組的使用【例5-3】從已知的數組a中查找是否存在數b(由用戶輸入要查找的數)。解法1:順序查找法

程序分析:所謂“順序查找法”就是從第一個數據開始一個一個的比較,直到找到輸入的數據或找完全部數據為止。由此可以看出“順序查找”可以對無序序列進行處理。查找結束后,如果被查找數據在該序列中,則顯示輸入數據所在的位置;如果被查找數據不在該序列中,則顯示輸入的數據“不在序列中”。返回5.2.2

數組的使用【例5-3】控件屬性設置及運行界面如圖5-3所示。圖5-3順序查找數據返回

【例5-3】解法2:對分法查找分析:對分法查找只能用于有序數列。對分法查找的算法思想是:每次都取數據區間的中間值,并且通過這個中間值與被查找數據比較,來判斷是否找到。如果沒有找到,再比較這個中間值與被查找數據的大小,從而決定被查找數據可能存在的新區間。由于這個新區間是由原區間“對分”得到的,因此這種方法被叫做“對分查找”。5.2.2

數組的使用返回5.2.2數組的使用【例5-4】產生10個互不相同的兩位數的進行排序,將其從小到大的順序輸出(選擇法排序)分析:這是一個數組的排序問題,排序的算法有許多,常用的有選擇法、冒泡法插入法等。這里介紹選擇法和冒泡法來排序。(1)使用“選擇排序法”由小到大排序,方法如下:先將10個數存入數組a的10個數組元素中,然后對10個下標變量a(1),a(2),a(3),…,a(10)進行“選擇排序法”處理。返回5.2.2數組的使用①第一輪:從這10個下標變量中選出最小值,共需比較9次(n個數需要比較n-1次),通過交換把最小值存入a(1)。②第二輪:除a(1)之外(a(1)已存放最小值),還剩9個(n-1個)下標變量需要比較選出最小值,共需比較8次(n-2次),通過交換把選出的最小值存入a(2)。③根據上述方法,可以總結出任意的第i輪比較進行的操作是:從后n-i+1個數中選出最小者存入a(i),共需比較n-i次。④重復上述的處理,直至進行到最后一輪,即第9輪(第n-1輪)的比較,此時就需要從最后的2個下標變量a(9)、a(10)中選出最小值,需要比較1次,通過交換把最小值存入a(9)(也就是a(n-1))。找出了前9個(n-1個)數,實際上此時a(10)(即a(n))存放的就是整個數組中的最大數了。返回5.2.2數組的使用6個數的選擇排序法的示意圖如圖5-4所示

原始數據865327a(1)a(2)a(3)a(4)a(5)a(6)第1輪比較265387a(1)a(2)a(3)a(4)a(5)

第2輪比較235687a(1)a(2)a(3)a(4)

第3輪比較235687a(1)a(2)a(3)

第4輪比較235686a(1)a(2)

第5輪比較235678圖5-4選擇排序示意圖返回5.2.2數組的使用【例5-4】產生10個互不相同的兩位數的進行排序,將其從小到大的順序輸出。(冒泡法排序)(2)使用“冒泡排序法”從小到大排序:冒泡排序總體思想是大數沉底,小數上浮。參加比較的兩個元素是相臨的,每輪比較可以找出一個本輪最大放在本輪最后,使所有小數前移位置。第1輪比較之后,最大的數沉底,即放到a(10)位置;第2輪比較a(1)~a(9),使該輪最大數沉底,即放到a(9)位置;依次類推,最后一輪比較a(1)和

a(2),使大數放到a(2),最小數為a(1),比較結束。返回5.2.2數組的使用6個數的冒泡排序法示意圖如圖5-6所示。

原始數據758326a(1)a(2)a(3)a(4)a(5)a(6)第1輪比較573268a(1)a(2)a(3)a(4)a(5)

第2輪比較532678a(1)a(2)a(3)a(4)

第3輪比較325678a(1)a(2)a(3)

第4輪比較235678a(1)a(2)

第5輪比較235678圖5-6冒泡排序示意圖5.5.2

數組的使用【例5-5】利用隨機函數生成一個4×4的矩陣(即二維矩陣),范圍是[20,80]內的整數,求它的最小值及所對應的下標。返回圖5-8界面設計及運行結果5.5.2

數組的使用【例5-6】聲明一個整型的二維數組a(1to4,1to4),用隨機函數產生各元素,范圍介于[1,100]之間,將第1行和第3行對應元素交換。分析:二維數組的生成及輸出可以用雙重循環;元素的交換要注意交換的對應位置。

圖5-9例5-6界面及運行結果返回5.3

動態數組5.3.1動態數組的定義

5.3.2動態數組的應用5.3.3字符串數組

返回5.3.1

動態數組的定義動態數組指在聲明數組時未給出數組的大小(省略括號中的下標),當要使用它時,隨時用ReDim語句重新指出數組大小。創建動態數組的步驟為:(1)聲明數組為動態數組,只需給數組附以一個空維數表(括號不能省略)。(2)在過程中用ReDim語句為聲明的動態數組分配實際的元素個數,格式為:

ReDim[Preserve]數組名〈維數說明)[As類型]說明:①ReDim語句只能出現在事件過程或通用過程中。②<維數說明>的格式為:[<下標下界1>To]<下標上界1>[,<下標下界2>To]<下標上界2>]…

其中,中括號的內容可以省略,當省略了上下界的說明時,可以用Ubound和Lbound函數來獲取數組的上界和下界。返回5.3.1

動態數組的定義(3)在一個過程中,可以多次使用Redim語句定義同一個數組,隨時修改數組中的元素個數,而且可以改變數組的維數。但是不能改變數組類型。

例:Redim語句的使用(4)當再次使用ReDim語句重新分配動態數組時,當前存儲在數組中的數據將被清除,利用這一點,可以隨時對數組進行初始化。但如果在ReDim語句中使用了Preserve選擇項,可保持數組中原有的數據不變。但Preserve只能改變數組最后維的大小,且不能改變數組的維數。返回5.3.1

動態數組的定義(5)用Array函數對數組賦值。格式:數組變量名=Array(數組元素值)。說明:“數組變量名”后面沒有括號、沒有維數、沒有上下界。“數組元素值”是需要賦給數組各元素的值,各值之間以逗號分開。例如:a=Array(1,3,5,7,9,11,13,15,17,19),則a(0)=1,a(1)=3,a(2)=5,……,a(9)=19。

Array函數只適合于一維變體型數組,不能對二維或多維數組進行初始化。返回5.3.2

動態數組的應用【例5-7】已知一維數組a()中的元素已排序,分別為{12,15,21,25,27,33,39,43,48,52},編程將30插入數組a,并使a依然有序。分析:(1)首先查找待插入數據在數組中的位置k;(2)然后從最后一個元素開始往前到下標為k的元素依次往后移動一個位置;(3)第k個元素的位置騰出,將數據插入。插入數據的操作過程如圖5-11所示。返回12152125273339434852X30K圖5-11插入數據5.3.2

動態數組的應用【例5-8】已知數組a(),編程刪除a中第5個元素。數組a中的元素分別為{12,6,4,89,75,63,100,20,31}。分析:要從數組中刪除某個數k的步驟如下:(1)刪除操作首先也是要找到欲刪除的元素的位置k;(2)然后從k+1到n個位置開始向前移動;(3)最后將數組元素減1。K圖5-12刪除數據刪除數據的操作過程如圖5-12所示12648975631002031K圖5-12刪除數據返回5.3.3

字符串數組字符串數組是指存放元素是字符串的數組。與前面介紹的數值型數組一樣,字符串數組也可以是一維、二維和多維的,其定義方法及其規則等也基本相同。使用字符串數組的目的,是為了處理諸如人名、書名、國名、銀行賬號、電話號碼等字符串型數據。【例5-9】輸入一系列字符串,按升序排列輸出。要求:(1)按回車鍵后即把該字符串存放到數組中,并輸出在排序前的文本框text1中。(2)單擊“排序”命令按紐,字符數組“升序”排序,并在排序后的文本框text2中輸出。返回5.3.3

字符串數組分析:(1)定義窗體級字符型動態數組s和整型變量n(表示輸入字符串的個數),即在通用聲明段聲明如下:

dimnasinteger,s()asstring(2)文在本框text1的KeyPress事件中編寫程序處理單詞,并存入數組中,同時記錄輸入次數。圖5-13字符排序返回5.4

ForEach…Next循環ForEach...Next語句與For...Next循環語句類似,都可以用來執行已知次數的循環。但ForEach...Next語句循環專門用于數組或對象集合中的每個成員,這里只介紹數組中ForEach...Next的應用。

它的格式為:

ForEach<成員>In<數組>[<循環體>][ExitFor]Next[<成員>]返回5.4

ForEach…Next循環格式說明:(1)<成員>實際上在循環執行過程中,依次代表數組中的各個元素。<成員>必須是一個Variant型的變量,若定義成其他數據類型將會出錯,所以在使用中通常不定義。(2)<數組>是一個數組名,注意沒有括號和上下界(3)循環執行的次數由數組中元素的個數確定,數組元素的個數,就是循環執行的次數。(4)它比For...next循環使用更簡單,因為它不需要提供循環的條件(循環變量、初值、終值、步長)。【例5-10】計算一個班100個學生的平均成績,然后統計高于平均分的人數。返回5.5

控件數組5.5.1控件數組的概念

5.5.2控件數組的建立5.5.3控件數組的應用

返回5.5.1

控件數組的概念

控件數組是由一組類型相同的控件組成的數組,這些控件共用一個相同的控件名,共享相同事件過程。每一個控件具有一個唯一的索引(index)。當數組中的一個控件識別某一事件時,它將調用此控件數組的相應事件過程,并把相應索引作為參數傳遞給事件過程。一個控件數組至少應有一個元素,在控件數組中可用到的最大索引值為32767。同一控件數組中的元素有自己的屬性設置值。返回5.5.2

控件數組的建立控件數組的建立與一般數組的聲明不同,通常有以下兩種方法:1.設計時創建控件數組設計時創建控件數組的步驟為:(1)在窗體上添加一個新的控件,以決定控件的類型和控件數組中的第1個控件。(2)設置控件的Name屬性值,為控件命名。(3)選擇以下方法之一創建控件數組返回5.5.2

控件數組的建立

方法一:選定控件,單擊“復制”按鈕,再單擊“粘貼”按鈕,則顯示圖5-1所示對話框,單擊“是”,則創建一個控件數組。以后可以根據需要向控件數組中添加新的控件元素。圖5-1復制控件5.5.2

控件數組的建立

方法二:在步驟(1)創建一個同類型的新控件,在設置新控件的Name屬性值(注意,不是Caption屬性值)時,鍵入與上面創建的控件相同的名字,則同樣會顯示圖5-1所示的對話框,單擊“是”創建控件數組。方法三:直接將步驟(1)創建的控件的索引值指定為0,然后按照方法一和方法二創建控件數組中的成員,不會有對話框出現。返回5.5.2

控件數組的建立

2.運行時添加控件數組控件數組必須是設計時創建的,在程序運行時,可以通過Load方法向控件數組中添加新的控件成員,并給其屬性賦值。控件數組建立以后,只要改變其中某個控件的Name屬性值,就能把該控件從控件數組中刪除。返回5.5.3

控件數組的應用

【例5-11】建立包含三個命令按鈕的控件數組。設計步驟如下:(1)首先在窗體上添加三個命令按鈕Command1~Command3(2)改變Command2的名稱為Command1,彈出對話框詢問是否創建控件數組,選則“是”。(3)按方法二改變Command3的名稱為Command1。

【例5-12】在窗體上有若干個以Command1命名的命令按鈕,點擊其中一個按鈕后,該按鈕不可用,而其它的按鈕均可用。分析:在窗體上建一個控件數組command1(6個命令按鈕)返回圖5-15程序界面及運行結果返回5.6

自定義數據類型5.6.1自定義數據類型的定義5.6.2自定義數據類型的聲明和使用5.6.3自定義數據類型數組及其應用返回5.6.1

自定義類型的定義

返回

自定義數據類型,也可以稱為記錄類型,通過Type語句來定義,其格式為:

[Public|Private]Type自定義類型名元素名1As數據類型名

元素名nAs數據類型名

EndType說明:(1)<自定義類型名>是用戶定義的新數據類型名,其命名規則與變量名相同。(2)<元素名>表示自定義類型中的一個成員,可以是簡單變量,也可以是數組說明符。5.6.1

自定義類型的定義(3)<數據類型名>是每個字段的數據類型,它可以是任何基本數據類型,也可以是用戶已經定義的自定義類型;當<數據類型名>為字符串數據類型時,必須指定長度。(4)在標準模塊中定義用Public(可以省略),在窗體模塊的通用聲明段定義必須用Private。自定義類型不能在過程內定義例如,在標準模塊中,定義一個有關學生信息的類型:

TypeStudType'StudType為自定義類型名

NameAsString*5'姓名

SexAsString*1'性別

TelephoneAsLong'電話

SchoolAsString*10'學校

EndType返回5.6.2

自定義類型變量的聲明和使用1.自定義類型變量的聲明定義了自定義類型,就可在變量的聲明時使用。形式如下:

Dim變量名As自定義類型名如下語句,聲明S1、S2為兩個相同類型(StudType)的變量

DimS1AsStudType,S2AsStudType

溫馨提示

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

評論

0/150

提交評論