vb教程 第07章_第1頁
已閱讀1頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第7章 數(shù)組,從存儲角度看,前面使用的變量都是相互獨立的、無關(guān)的,通常稱它們?yōu)楹唵巫兞俊5绻幚韺?00個學(xué)生的成績按大小順序排序這類問題,只使用簡單變量將會非常麻煩,而利用數(shù)組卻很容易實現(xiàn)。本章講述VB數(shù)組的基本概念和使用方法,主要內(nèi)容有:數(shù)組的概念、數(shù)組的定義及應(yīng)用、可調(diào)數(shù)組的概念及應(yīng)用、控件數(shù)組的概念及應(yīng)用。,退出,7.1 數(shù)組的概念7.2 一維數(shù)組7.3 二維數(shù)組7.4 可調(diào)數(shù)組7.5 控件數(shù)組,,,7.1

2、 數(shù)組的概念,在實際應(yīng)用中,常常需要處理相同類型的一批數(shù)據(jù)。例如,為了處理100個員工的工資,可以用S(1),S(2),…,S(100)來分別代表每個員工的工資,其中S(1)代表第一個員工的工資,S(2)代表第二個員工的工資……。在VB中,把一組相互關(guān)系密切的數(shù)據(jù)放在一起并用一個統(tǒng)一的名字作為標(biāo)志,這就是數(shù)組。,,,數(shù)組中的每一個數(shù)據(jù)稱為數(shù)組元素,用數(shù)組名和該數(shù)據(jù)在數(shù)組中的序號來標(biāo)識。序號又稱為下標(biāo),數(shù)組元素又稱為下標(biāo)變量。例如,S(

3、2)是一個數(shù)組元素,其中的S稱為數(shù)組名,2是下標(biāo)。在使用數(shù)組元素時,必須把下標(biāo)放在一對緊跟在數(shù)組名之后的括號中。S(3)是一個數(shù)組元素,而S3是一個簡單變量。如果只用一個下標(biāo)就能確定某個數(shù)組元素在數(shù)組中的位置,這樣的數(shù)組稱為一維數(shù)組。如果用兩個或多個下標(biāo)才能確定某個數(shù)組元素在數(shù)組中的位置,則數(shù)組分別稱為二維數(shù)組或多維數(shù)組。,,,7.2 一維數(shù)組,7.2.1 一維數(shù)組的定義數(shù)組應(yīng)當(dāng)先定義后使用,數(shù)組的定義又稱為數(shù)組的聲明或

4、說明。對于固定大小的一維數(shù)組,用如下格式進(jìn)行定義:說明符 數(shù)組名(下標(biāo))[As 類型]例如:Dim y(5)As Integer定義了一個一維數(shù)組,該數(shù)組的名字為y,類型為Integer,占據(jù)6個(0~5)整型變量的空間。,,,說明:(1)“說明符”為保留字,可以為Dim,Public,Private,Static中的任意一個。在使用過程中可以根據(jù)實際情況進(jìn)行選用。本章主要講述用Dim聲明數(shù)組,其它參

5、數(shù)的意義在8.4節(jié)介紹。定義數(shù)組后,數(shù)值數(shù)組中的全部元素都初始化為0,字符串?dāng)?shù)組中的全部元素都初始化為空字符串。(2)“數(shù)組名”的命名遵守標(biāo)識符規(guī)則。(3)“下標(biāo)”的一般形式為“[下界 to] 上界”。 下標(biāo)的上界、下界為整數(shù),不得超過Long數(shù)據(jù)類型的范圍,并且下界應(yīng)該小于上界。如果不指定下界,下界默認(rèn)為0。,,,(4)要注意區(qū)分“可以使用的最大下標(biāo)值”和“元素個數(shù)”。(5)“As類型”用來說明“數(shù)組元素”的類型,

6、可以是Integer,Long,Single,Double,Currency,String(定長或變長)等基本類型或用戶定義的類型,也可以是Variant類型。如果省略“As類型”,則數(shù)組為Variant類型。(6)在同一個過程中,數(shù)組名不能與變量名同名,否則會出錯。(7)可以通過類型說明符來指定數(shù)組的類型。例如:Dim A%(5),B?。? To 5),C#(12),,,7.2.2 一維數(shù)組的引用數(shù)組的引用通

7、常是對數(shù)組元素的引用。一維數(shù)組元素的表示形式為:數(shù)組名(下標(biāo))一般通過循環(huán)語句及InputBox函數(shù)、文本框給數(shù)組輸入數(shù)據(jù)。數(shù)組的輸出一般用Print方法、標(biāo)簽或文本框?qū)崿F(xiàn)。,,,【例7.2】編寫程序,把輸入的10個整數(shù)按逆序輸出。 Private Sub Command1_Click() Dim a(10)As Integer,i% Print "輸入的數(shù)據(jù)為"

8、 For i = 1 To 10 a(i)= InputBox("請輸入一個整型數(shù)") Print a(i), Next i Print Print "逆序輸出為" For i = 10 To 1 step -1 Print a(i), Next i End Sub,,

9、,7.2.3 一維數(shù)組的應(yīng)用舉例【例7.3】從鍵盤上輸入40人的考試成績,輸出高于平均成績的分?jǐn)?shù)。分析:該問題可分三部分處理:一是輸入40個人的成績;二是求平均分;三是把這40個分?jǐn)?shù)逐一和平均成績進(jìn)行比較,若高于平均成績,則輸出。,,,程序如下: Private Sub Command1_Click() Dim score(40)As Single,aver!,i% aver =

10、 0 For i = 1 To 40 score(i)= InputBox("請輸入成績") aver = aver + score(i) Next i aver = aver / 40 For i = 1 To 40 If score(i)> aver Then Print score(i)

11、 Next i End Sub,,,【例7.4】從鍵盤上輸入10個整數(shù),把這些數(shù)按由小到大的順序排序輸出。排序的方法很多,如選擇法、冒泡法等。這里介紹最容易理解的“冒泡法”。設(shè)10個數(shù)存放在A數(shù)組中,分別為:A(1)、A(2)、A(3)、A(4)、A(5)、A(6)、A(7)、A(8)、A(9)、A(10)。第1輪:先將A(1)與A(2)比較,若A(1)>A(2),則將A(1)、A(2)的值互換

12、,否則,不作交換;這樣處理后,A(1)一定是A(1)、A(2)中的較小者。,,,再將A(1)分別與A(3)、…、A(10)比較,并且依次作出同樣的處理。最后,10個數(shù)中的最小者放入了A(1)中。第2輪:將A(2)分別與A(3)、…、A(10)比較,并依次作出同第1輪一樣的處理。最后,第1輪余下的9個數(shù)中的最小者放入A(2)中,亦即A(2)是10個數(shù)中的第二小的數(shù)。照此方法,繼續(xù)進(jìn)行第3輪……直到第9輪后,余下的A(

13、10)是10個數(shù)中的最大者。至此,10個數(shù)已從小到大順序存放在A(1)~A(10)中。,,,為簡單起見,我們以7,5,3三個數(shù)為例,再做說明:第1輪:找出最小值3作為第一個數(shù)組元素 7 5 3 比較7和5,7>5,需要交換,交換后的序列為5 7 3; 5 7 3 比較5和3,5>3,需要交換,交換后的序列為3 7 5;第2輪:找出剩下的元素中的

14、最小值5作為第二個數(shù)組元素 3 7 5 比較7和5,7>5,需要交換,交換后的序列為3 5 7。剩下的一個元素7為三個元素中的最大者,排序完成。,,,程序如下: Private Sub Command1_Click() Dim t%,i%,j%,a(10)As Integer For i = 1 To 10 a(i)= InputBox(&

15、quot;輸入一個整數(shù)") Next i Print "輸入的10個整數(shù)為" For i = 1 To 10 Print a(i), Next i Print,,,For i = 1 To 9 For j = i + 1 To 10 If a(i)> a(j)Then

16、t = a(i):a(i)= a(j):a(j)= t Next j Next i Print "排序后的結(jié)果為" For i = 1 To 10 Print a(i), Next i End Sub,,,【例7.5】隨機(jī)產(chǎn)生10個兩位整數(shù),找出其中最大值、最小值。分析:該問題可以分為兩部分處理:一是產(chǎn)生1

17、0個隨機(jī)整數(shù),并保存到一維數(shù)組中;二是對這10個整數(shù)求最大、最小值。程序代碼為: Private Sub Command1_Click() Dim min%,max%,i%,a(10)As Integer Randomize,,,For i = 1 To 10 a(i)= Int(Rnd * 90)+ 10 Next i Print "

18、;產(chǎn)生的隨機(jī)數(shù)為" For i = 1 To 10 Print a(i), Next i Print min = a(1):max = a(1),,,For i = 2 To 10 If a(i)> max Then max = a(i) If a(i)< min Then min = a(i)

19、 Next i Print "最大值為" Print max Print "最小值為" Print min End Sub,,,7.3 二維數(shù)組,假如有30個學(xué)生,每個學(xué)生有5門考試成績,如何來表示這些數(shù)據(jù)呢?VB中可以用有兩個下標(biāo)的數(shù)組來表示,如第i個學(xué)生第j門課的成績可以用S(i,j)表示。其中i表示學(xué)生號,稱為行下標(biāo)(

20、i=1,2,…,30);j表示課程號,稱為列下標(biāo)(j=1,2,3,4,5)。有兩個下標(biāo)的數(shù)組稱為二維數(shù)組。,,,7.3.1 二維數(shù)組的定義對于固定大小的二維數(shù)組,可以用如下格式進(jìn)行定義:說明符 數(shù)組名([下界to]上界,[下界to]上界)[As 類型]例如:Dim T(2,3)As Integer定義了一個二維數(shù)組,名字為T,類型為Integer,該數(shù)組有3行(0~2)4列(0~3),占據(jù)12(3×4)個

21、整型變量的空間,如圖7-3所示。,,,,,說明:(1)可以將二維數(shù)組的定義方法推廣至多維數(shù)組的定義。例如:Dim D(3,1 To 10,1 To 15)定義了一個3維數(shù)組,大小為 4 × 10 × 15。注意在增加數(shù)組的維數(shù)時,數(shù)組所占的存儲空間會大幅度增加,所以要慎用多維數(shù)組,尤其是Variant 數(shù)組,因為他們需要更大的存儲空間。(2)在實際使用時,可能需要數(shù)組的上界值和下界值,這可以通過LB

22、ound函數(shù)和UBound函數(shù)來求得。其格式為: LBound(數(shù)組名[,維]) UBound(數(shù)組名[,維])這兩個函數(shù)分別返回一個數(shù)組中指定維的下界和上界。,,,7.3.2 二維數(shù)組的引用二維數(shù)組的引用和一維數(shù)組基本相同,格式為: 數(shù)組名(下標(biāo)1,下標(biāo)2)對二維數(shù)組進(jìn)行賦值或輸出時,一般采用二重循環(huán)來實現(xiàn)。,,,7.3.3 二維數(shù)組的應(yīng)用舉例【例7.8】打印4名同學(xué)的英語、數(shù)學(xué)、

23、法律3門課的考試成績,并計算出每個同學(xué)的平均成績。分析:把4名同學(xué)的姓名及各科的考試分?jǐn)?shù)分別存入一個一維字符串?dāng)?shù)組xm(4)和一個二維數(shù)值數(shù)組a(4,3)中,然后對數(shù)組(主要是二維數(shù)組)進(jìn)行處理。,,,程序如下: Private Sub Command1_Click() Dim a(4,3)As Single,xm(4)As String * 10,i%,j%,aver! Print

24、Tab(25);"成績表" Print Print "姓名";Tab(15);"英語";Tab(25);"數(shù)學(xué)"; Print Tab(35);"法律";Tab(45);"平均分" Print,,,For i = 1 To 4

25、 aver = 0 xm(i)= InputBox("輸入姓名") Print xm(i); For j = 1 To 3 a(i,j)= InputBox("輸入" & xm(i)& "的一個成績 "),,,aver = aver + a(i,j)

26、 Next j aver = aver / 3 Print Tab(15);a(i,1);Tab(25);a(i,2); Print Tab(35);a(i,3);Tab(45);aver Print Next i End Sub,,,7.4 可調(diào)數(shù)組,通過前兩

27、節(jié)的學(xué)習(xí),我們知道,定義數(shù)組,是用數(shù)值常數(shù)或符號常量定義數(shù)組的維數(shù)及下標(biāo)的上、下界。VB編譯程序在編譯時為數(shù)組分配了相應(yīng)的存儲空間,并且在應(yīng)用程序運行期間,數(shù)組一直占據(jù)這塊內(nèi)存區(qū)域,這樣的數(shù)組稱為固定數(shù)組。但是,在實際應(yīng)用中,有時事先無法確定到底需要多大的數(shù)組,數(shù)組應(yīng)定義多大,要在程序運行時才能決定。如果定義的數(shù)組過大,顯然會造成內(nèi)存空間的朔選可調(diào)數(shù)組提供了一種靈活有效的管理內(nèi)存機(jī)制,能夠在程序運行期間可以根據(jù)用戶的需要隨時改變數(shù)

28、組的大小。,,,7.4.1 可調(diào)數(shù)組的定義可調(diào)數(shù)組的定義分為兩步:第一步:聲明一個沒有下標(biāo)參數(shù)的數(shù)組。格式為:說明符 數(shù)組名()[As 類型]第二步:引用數(shù)組前用 ReDim語句重新定義。格式為:ReDim [Preserve] 數(shù)組名([下界 to ] 上界[,[下界 to ] 上界……])[As 類型],,,例如: Private Sub Command1_Click()

29、 Dim a()As Integer Dim n% …… n = Val(InputBox("input n")) ReDim a(n) …… End Sub,,,說明:(1)格式中的“說明符”、“ 數(shù)組名”、“ 類型”等說明同一維數(shù)組的定義。(2)下界、上界可以是常量,也可以是有了

30、確定值的變量。(3)ReDim語句用來重新定義數(shù)組,能改變數(shù)組的維數(shù)及上、下界,但不能用其改變可調(diào)數(shù)組的數(shù)據(jù)類型,除非可調(diào)數(shù)組被聲明為Variant類型。(4)每次使用ReDim語句都會使原來數(shù)組中的值丟失,可以在ReDim后加Preserve參數(shù)來保留數(shù)組中的數(shù)據(jù),但Preserve只能改變多維數(shù)組中最后一維的大小,前幾維的大小不能改變。(5)ReDim語句只能出現(xiàn)在過程中。,,,7.4.2 可調(diào)數(shù)組的應(yīng)用舉例

31、【例7.10】編程輸出Fibonacci數(shù)列:l,1,2,3,5,8,……的前n項。分析:在例7.6中,是輸出Fibonacci數(shù)列的前20項,我們使用了固定數(shù)組;本例要求輸出前n項,n是一個變量,因此,應(yīng)該使用可調(diào)數(shù)組。程序代碼如下: Private Sub Command1_Click() Dim Fib(),i%,n% ‘ 避免溢出,定義數(shù)組為Variant類型

32、n = InputBox("輸入n的值(n>1)") ReDim Fib(n),,,Fib(1)= 1:Fib(2)= 1 For i = 3 To n Fib(i)= Fib(i - 1)+ Fib(i - 2) Next i For i = 1 To n Print Fib(i), If i Mod

33、 5 = 0 Then Print '每行輸出5個數(shù) Next i End Sub請思考:如果例7.8中的學(xué)生數(shù)為n人,課程為m門,應(yīng)該如何編程實現(xiàn)?,,,7.5 控件數(shù)組,本節(jié)介紹控件數(shù)組,控件數(shù)組為我們處理功能相近的控件提供了極大的方便。7.5.1 控件數(shù)組的概念在實際應(yīng)用中,我們有時會用到一些類型相同且功能類似的控件。如果對每一個控件都單獨處理,就會多做一些麻煩而重復(fù)的

34、工作。這時,我們可以用控件數(shù)組來簡化程序。,,,控件數(shù)組由一組相同類型的控件組成,這些控件共用一個控件名字,具有相似的屬性設(shè)置,共享同樣的事件過程??丶?shù)組中各個控件相當(dāng)于普通數(shù)組中的各個元素,同一控件數(shù)組中各個控件的Index屬性相當(dāng)于普通數(shù)組中的下標(biāo)。比如,假設(shè)有一個包含3個按鈕的控件數(shù)組Command1,它的3個元素就是Command1(0),Command1(1),Command1(2)。,,,7.5.2 控件數(shù)組的建立

35、控件數(shù)組中每一個元素都是控件,它的定義方式與普通數(shù)組不同??梢酝ㄟ^以下兩種方法建立控件數(shù)組。方法一:復(fù)制已有的控件并將其粘貼到窗體上。方法二:將窗體上已有的類型相同的多個控件的Name屬性設(shè)置為同一值。,,,7.5.3 控件數(shù)組的應(yīng)用舉例建立了控件數(shù)組之后,控件數(shù)組中所有控件共享同一事件過程。例如,假定某個控件數(shù)組含有10個標(biāo)簽,則不管單擊哪個標(biāo)簽,系統(tǒng)都會調(diào)用同一個Click過程。由于每個標(biāo)簽在程序中的作用不

36、同,系統(tǒng)會將被單擊的標(biāo)簽的Index屬性值傳遞給過程,由事件過程根據(jù)不同的Index值執(zhí)行不同的操作。,,,【例7.12】設(shè)計一個簡易計算器,能進(jìn)行整數(shù)的加、減、乘、除運算。其運行界面如圖7-8所示。界面設(shè)計:一個標(biāo)簽用于計算器輸出;數(shù)字按鈕控件數(shù)組Number;操作符控件數(shù)組Operator;一個“=”按鈕用于計算結(jié)果;一個“Cls”按鈕用于清屏。,,,,,,,程序如下: ' 窗體級變量聲明

37、 Dim op1 As Byte ' 用來記錄前面輸入的操作符 Dim ops1&,ops2& ' 兩個操作數(shù) Dim res As Boolean ' 用來表示是否已算出結(jié)果 Private Sub clear_Click() dataout.Caption = "" End Sub

38、 Private Sub Form_Load() res = False End Sub,,,' 按下數(shù)字鍵0~9的事件過程 Private Sub number_Click(i1 As Integer) If Not res Then dataout.Caption = dataout.Caption & i1 Else dat

39、aout.Caption = i1 res = False End If End Sub,,,' 按下操作鍵+、-、×、/的事件過程 Private Sub operator_Click(i2 As Integer) ops1 = dataout.Caption op1 = i2 ' 記下對應(yīng)的操作符 dataout.Capti

40、on = "" End Sub,,,' 按下=鍵的事件過程 Private Sub result_Click() ops2 =dataout.Caption Select Case op1 Case 0 dataout.Caption = ops1 + ops2 Case 1 dataout.Caption = o

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論