版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第7章 數(shù)組,從存儲(chǔ)角度看,前面使用的變量都是相互獨(dú)立的、無(wú)關(guān)的,通常稱(chēng)它們?yōu)楹?jiǎn)單變量。但如果處理將200個(gè)學(xué)生的成績(jī)按大小順序排序這類(lèi)問(wèn)題,只使用簡(jiǎn)單變量將會(huì)非常麻煩,而利用數(shù)組卻很容易實(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ù)組的概念,在實(shí)際應(yīng)用中,常常需要處理相同類(lèi)型的一批數(shù)據(jù)。例如,為了處理100個(gè)員工的工資,可以用S(1),S(2),…,S(100)來(lái)分別代表每個(gè)員工的工資,其中S(1)代表第一個(gè)員工的工資,S(2)代表第二個(gè)員工的工資……。在VB中,把一組相互關(guān)系密切的數(shù)據(jù)放在一起并用一個(gè)統(tǒng)一的名字作為標(biāo)志,這就是數(shù)組。,,,數(shù)組中的每一個(gè)數(shù)據(jù)稱(chēng)為數(shù)組元素,用數(shù)組名和該數(shù)據(jù)在數(shù)組中的序號(hào)來(lái)標(biāo)識(shí)。序號(hào)又稱(chēng)為下標(biāo),數(shù)組元素又稱(chēng)為下標(biāo)變量。例如,S(
3、2)是一個(gè)數(shù)組元素,其中的S稱(chēng)為數(shù)組名,2是下標(biāo)。在使用數(shù)組元素時(shí),必須把下標(biāo)放在一對(duì)緊跟在數(shù)組名之后的括號(hào)中。S(3)是一個(gè)數(shù)組元素,而S3是一個(gè)簡(jiǎn)單變量。如果只用一個(gè)下標(biāo)就能確定某個(gè)數(shù)組元素在數(shù)組中的位置,這樣的數(shù)組稱(chēng)為一維數(shù)組。如果用兩個(gè)或多個(gè)下標(biāo)才能確定某個(gè)數(shù)組元素在數(shù)組中的位置,則數(shù)組分別稱(chēng)為二維數(shù)組或多維數(shù)組。,,,7.2 一維數(shù)組,7.2.1 一維數(shù)組的定義數(shù)組應(yīng)當(dāng)先定義后使用,數(shù)組的定義又稱(chēng)為數(shù)組的聲明或
4、說(shuō)明。對(duì)于固定大小的一維數(shù)組,用如下格式進(jìn)行定義:說(shuō)明符 數(shù)組名(下標(biāo))[As 類(lèi)型]例如:Dim y(5)As Integer定義了一個(gè)一維數(shù)組,該數(shù)組的名字為y,類(lèi)型為Integer,占據(jù)6個(gè)(0~5)整型變量的空間。,,,說(shuō)明:(1)“說(shuō)明符”為保留字,可以為Dim,Public,Private,Static中的任意一個(gè)。在使用過(guò)程中可以根據(jù)實(shí)際情況進(jìn)行選用。本章主要講述用Dim聲明數(shù)組,其它參
5、數(shù)的意義在8.4節(jié)介紹。定義數(shù)組后,數(shù)值數(shù)組中的全部元素都初始化為0,字符串?dāng)?shù)組中的全部元素都初始化為空字符串。(2)“數(shù)組名”的命名遵守標(biāo)識(shí)符規(guī)則。(3)“下標(biāo)”的一般形式為“[下界 to] 上界”。 下標(biāo)的上界、下界為整數(shù),不得超過(guò)Long數(shù)據(jù)類(lèi)型的范圍,并且下界應(yīng)該小于上界。如果不指定下界,下界默認(rèn)為0。,,,(4)要注意區(qū)分“可以使用的最大下標(biāo)值”和“元素個(gè)數(shù)”。(5)“As類(lèi)型”用來(lái)說(shuō)明“數(shù)組元素”的類(lèi)型,
6、可以是Integer,Long,Single,Double,Currency,String(定長(zhǎng)或變長(zhǎng))等基本類(lèi)型或用戶(hù)定義的類(lèi)型,也可以是Variant類(lèi)型。如果省略“As類(lèi)型”,則數(shù)組為Variant類(lèi)型。(6)在同一個(gè)過(guò)程中,數(shù)組名不能與變量名同名,否則會(huì)出錯(cuò)。(7)可以通過(guò)類(lèi)型說(shuō)明符來(lái)指定數(shù)組的類(lèi)型。例如:Dim A%(5),B?。? To 5),C#(12),,,7.2.2 一維數(shù)組的引用數(shù)組的引用通
7、常是對(duì)數(shù)組元素的引用。一維數(shù)組元素的表示形式為:數(shù)組名(下標(biāo))一般通過(guò)循環(huán)語(yǔ)句及InputBox函數(shù)、文本框給數(shù)組輸入數(shù)據(jù)。數(shù)組的輸出一般用Print方法、標(biāo)簽或文本框?qū)崿F(xiàn)。,,,【例7.2】編寫(xiě)程序,把輸入的10個(gè)整數(shù)按逆序輸出。 Private Sub Command1_Click() Dim a(10)As Integer,i% Print "輸入的數(shù)據(jù)為"
8、 For i = 1 To 10 a(i)= InputBox("請(qǐng)輸入一個(gè)整型數(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】從鍵盤(pán)上輸入40人的考試成績(jī),輸出高于平均成績(jī)的分?jǐn)?shù)。分析:該問(wèn)題可分三部分處理:一是輸入40個(gè)人的成績(jī);二是求平均分;三是把這40個(gè)分?jǐn)?shù)逐一和平均成績(jī)進(jìn)行比較,若高于平均成績(jī),則輸出。,,,程序如下: Private Sub Command1_Click() Dim score(40)As Single,aver!,i% aver =
10、 0 For i = 1 To 40 score(i)= InputBox("請(qǐng)輸入成績(jī)") 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】從鍵盤(pán)上輸入10個(gè)整數(shù),把這些數(shù)按由小到大的順序排序輸出。排序的方法很多,如選擇法、冒泡法等。這里介紹最容易理解的“冒泡法”。設(shè)10個(gè)數(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個(gè)數(shù)中的最小者放入了A(1)中。第2輪:將A(2)分別與A(3)、…、A(10)比較,并依次作出同第1輪一樣的處理。最后,第1輪余下的9個(gè)數(shù)中的最小者放入A(2)中,亦即A(2)是10個(gè)數(shù)中的第二小的數(shù)。照此方法,繼續(xù)進(jìn)行第3輪……直到第9輪后,余下的A(
13、10)是10個(gè)數(shù)中的最大者。至此,10個(gè)數(shù)已從小到大順序存放在A(1)~A(10)中。,,,為簡(jiǎn)單起見(jiàn),我們以7,5,3三個(gè)數(shù)為例,再做說(shuō)明:第1輪:找出最小值3作為第一個(gè)數(shù)組元素 7 5 3 比較7和5,7>5,需要交換,交換后的序列為5 7 3; 5 7 3 比較5和3,5>3,需要交換,交換后的序列為3 7 5;第2輪:找出剩下的元素中的
14、最小值5作為第二個(gè)數(shù)組元素 3 7 5 比較7和5,7>5,需要交換,交換后的序列為3 5 7。剩下的一個(gè)元素7為三個(gè)元素中的最大者,排序完成。,,,程序如下: Private Sub Command1_Click() Dim t%,i%,j%,a(10)As Integer For i = 1 To 10 a(i)= InputBox(&
15、quot;輸入一個(gè)整數(shù)") Next i Print "輸入的10個(gè)整數(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個(gè)兩位整數(shù),找出其中最大值、最小值。分析:該問(wèn)題可以分為兩部分處理:一是產(chǎn)生1
17、0個(gè)隨機(jī)整數(shù),并保存到一維數(shù)組中;二是對(duì)這10個(gè)整數(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個(gè)學(xué)生,每個(gè)學(xué)生有5門(mén)考試成績(jī),如何來(lái)表示這些數(shù)據(jù)呢?VB中可以用有兩個(gè)下標(biāo)的數(shù)組來(lái)表示,如第i個(gè)學(xué)生第j門(mén)課的成績(jī)可以用S(i,j)表示。其中i表示學(xué)生號(hào),稱(chēng)為行下標(biāo)(
20、i=1,2,…,30);j表示課程號(hào),稱(chēng)為列下標(biāo)(j=1,2,3,4,5)。有兩個(gè)下標(biāo)的數(shù)組稱(chēng)為二維數(shù)組。,,,7.3.1 二維數(shù)組的定義對(duì)于固定大小的二維數(shù)組,可以用如下格式進(jìn)行定義:說(shuō)明符 數(shù)組名([下界to]上界,[下界to]上界)[As 類(lèi)型]例如:Dim T(2,3)As Integer定義了一個(gè)二維數(shù)組,名字為T(mén),類(lèi)型為Integer,該數(shù)組有3行(0~2)4列(0~3),占據(jù)12(3×4)個(gè)
21、整型變量的空間,如圖7-3所示。,,,,,說(shuō)明:(1)可以將二維數(shù)組的定義方法推廣至多維數(shù)組的定義。例如:Dim D(3,1 To 10,1 To 15)定義了一個(gè)3維數(shù)組,大小為 4 × 10 × 15。注意在增加數(shù)組的維數(shù)時(shí),數(shù)組所占的存儲(chǔ)空間會(huì)大幅度增加,所以要慎用多維數(shù)組,尤其是Variant 數(shù)組,因?yàn)樗麄冃枰蟮拇鎯?chǔ)空間。(2)在實(shí)際使用時(shí),可能需要數(shù)組的上界值和下界值,這可以通過(guò)LB
22、ound函數(shù)和UBound函數(shù)來(lái)求得。其格式為: LBound(數(shù)組名[,維]) UBound(數(shù)組名[,維])這兩個(gè)函數(shù)分別返回一個(gè)數(shù)組中指定維的下界和上界。,,,7.3.2 二維數(shù)組的引用二維數(shù)組的引用和一維數(shù)組基本相同,格式為: 數(shù)組名(下標(biāo)1,下標(biāo)2)對(duì)二維數(shù)組進(jìn)行賦值或輸出時(shí),一般采用二重循環(huán)來(lái)實(shí)現(xiàn)。,,,7.3.3 二維數(shù)組的應(yīng)用舉例【例7.8】打印4名同學(xué)的英語(yǔ)、數(shù)學(xué)、
23、法律3門(mén)課的考試成績(jī),并計(jì)算出每個(gè)同學(xué)的平均成績(jī)。分析:把4名同學(xué)的姓名及各科的考試分?jǐn)?shù)分別存入一個(gè)一維字符串?dāng)?shù)組xm(4)和一個(gè)二維數(shù)值數(shù)組a(4,3)中,然后對(duì)數(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);"成績(jī)表" Print Print "姓名";Tab(15);"英語(yǔ)";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)& "的一個(gè)成績(jī) "),,,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ù)組,通過(guò)前兩
27、節(jié)的學(xué)習(xí),我們知道,定義數(shù)組,是用數(shù)值常數(shù)或符號(hào)常量定義數(shù)組的維數(shù)及下標(biāo)的上、下界。VB編譯程序在編譯時(shí)為數(shù)組分配了相應(yīng)的存儲(chǔ)空間,并且在應(yīng)用程序運(yùn)行期間,數(shù)組一直占據(jù)這塊內(nèi)存區(qū)域,這樣的數(shù)組稱(chēng)為固定數(shù)組。但是,在實(shí)際應(yīng)用中,有時(shí)事先無(wú)法確定到底需要多大的數(shù)組,數(shù)組應(yīng)定義多大,要在程序運(yùn)行時(shí)才能決定。如果定義的數(shù)組過(guò)大,顯然會(huì)造成內(nèi)存空間的朔選可調(diào)數(shù)組提供了一種靈活有效的管理內(nèi)存機(jī)制,能夠在程序運(yùn)行期間可以根據(jù)用戶(hù)的需要隨時(shí)改變數(shù)
28、組的大小。,,,7.4.1 可調(diào)數(shù)組的定義可調(diào)數(shù)組的定義分為兩步:第一步:聲明一個(gè)沒(méi)有下標(biāo)參數(shù)的數(shù)組。格式為:說(shuō)明符 數(shù)組名()[As 類(lèi)型]第二步:引用數(shù)組前用 ReDim語(yǔ)句重新定義。格式為:ReDim [Preserve] 數(shù)組名([下界 to ] 上界[,[下界 to ] 上界……])[As 類(lèi)型],,,例如: Private Sub Command1_Click()
29、 Dim a()As Integer Dim n% …… n = Val(InputBox("input n")) ReDim a(n) …… End Sub,,,說(shuō)明:(1)格式中的“說(shuō)明符”、“ 數(shù)組名”、“ 類(lèi)型”等說(shuō)明同一維數(shù)組的定義。(2)下界、上界可以是常量,也可以是有了
30、確定值的變量。(3)ReDim語(yǔ)句用來(lái)重新定義數(shù)組,能改變數(shù)組的維數(shù)及上、下界,但不能用其改變可調(diào)數(shù)組的數(shù)據(jù)類(lèi)型,除非可調(diào)數(shù)組被聲明為Variant類(lèi)型。(4)每次使用ReDim語(yǔ)句都會(huì)使原來(lái)數(shù)組中的值丟失,可以在ReDim后加Preserve參數(shù)來(lái)保留數(shù)組中的數(shù)據(jù),但Preserve只能改變多維數(shù)組中最后一維的大小,前幾維的大小不能改變。(5)ReDim語(yǔ)句只能出現(xiàn)在過(guò)程中。,,,7.4.2 可調(diào)數(shù)組的應(yīng)用舉例
31、【例7.10】編程輸出Fibonacci數(shù)列:l,1,2,3,5,8,……的前n項(xiàng)。分析:在例7.6中,是輸出Fibonacci數(shù)列的前20項(xiàng),我們使用了固定數(shù)組;本例要求輸出前n項(xiàng),n是一個(gè)變量,因此,應(yīng)該使用可調(diào)數(shù)組。程序代碼如下: Private Sub Command1_Click() Dim Fib(),i%,n% ‘ 避免溢出,定義數(shù)組為Variant類(lèi)型
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個(gè)數(shù) Next i End Sub請(qǐng)思考:如果例7.8中的學(xué)生數(shù)為n人,課程為m門(mén),應(yīng)該如何編程實(shí)現(xiàn)?,,,7.5 控件數(shù)組,本節(jié)介紹控件數(shù)組,控件數(shù)組為我們處理功能相近的控件提供了極大的方便。7.5.1 控件數(shù)組的概念在實(shí)際應(yīng)用中,我們有時(shí)會(huì)用到一些類(lèi)型相同且功能類(lèi)似的控件。如果對(duì)每一個(gè)控件都單獨(dú)處理,就會(huì)多做一些麻煩而重復(fù)的
34、工作。這時(shí),我們可以用控件數(shù)組來(lái)簡(jiǎn)化程序。,,,控件數(shù)組由一組相同類(lèi)型的控件組成,這些控件共用一個(gè)控件名字,具有相似的屬性設(shè)置,共享同樣的事件過(guò)程。控件數(shù)組中各個(gè)控件相當(dāng)于普通數(shù)組中的各個(gè)元素,同一控件數(shù)組中各個(gè)控件的Index屬性相當(dāng)于普通數(shù)組中的下標(biāo)。比如,假設(shè)有一個(gè)包含3個(gè)按鈕的控件數(shù)組Command1,它的3個(gè)元素就是Command1(0),Command1(1),Command1(2)。,,,7.5.2 控件數(shù)組的建立
35、控件數(shù)組中每一個(gè)元素都是控件,它的定義方式與普通數(shù)組不同??梢酝ㄟ^(guò)以下兩種方法建立控件數(shù)組。方法一:復(fù)制已有的控件并將其粘貼到窗體上。方法二:將窗體上已有的類(lèi)型相同的多個(gè)控件的Name屬性設(shè)置為同一值。,,,7.5.3 控件數(shù)組的應(yīng)用舉例建立了控件數(shù)組之后,控件數(shù)組中所有控件共享同一事件過(guò)程。例如,假定某個(gè)控件數(shù)組含有10個(gè)標(biāo)簽,則不管單擊哪個(gè)標(biāo)簽,系統(tǒng)都會(huì)調(diào)用同一個(gè)Click過(guò)程。由于每個(gè)標(biāo)簽在程序中的作用不
36、同,系統(tǒng)會(huì)將被單擊的標(biāo)簽的Index屬性值傳遞給過(guò)程,由事件過(guò)程根據(jù)不同的Index值執(zhí)行不同的操作。,,,【例7.12】設(shè)計(jì)一個(gè)簡(jiǎn)易計(jì)算器,能進(jìn)行整數(shù)的加、減、乘、除運(yùn)算。其運(yùn)行界面如圖7-8所示。界面設(shè)計(jì):一個(gè)標(biāo)簽用于計(jì)算器輸出;數(shù)字按鈕控件數(shù)組Number;操作符控件數(shù)組Operator;一個(gè)“=”按鈕用于計(jì)算結(jié)果;一個(gè)“Cls”按鈕用于清屏。,,,,,,,程序如下: ' 窗體級(jí)變量聲明
37、 Dim op1 As Byte ' 用來(lái)記錄前面輸入的操作符 Dim ops1&,ops2& ' 兩個(gè)操作數(shù) Dim res As Boolean ' 用來(lái)表示是否已算出結(jié)果 Private Sub clear_Click() dataout.Caption = "" End Sub
38、 Private Sub Form_Load() res = False End Sub,,,' 按下數(shù)字鍵0~9的事件過(guò)程 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,,,' 按下操作鍵+、-、×、/的事件過(guò)程 Private Sub operator_Click(i2 As Integer) ops1 = dataout.Caption op1 = i2 ' 記下對(duì)應(yīng)的操作符 dataout.Capti
40、on = "" End Sub,,,' 按下=鍵的事件過(guò)程 Private Sub result_Click() ops2 =dataout.Caption Select Case op1 Case 0 dataout.Caption = ops1 + ops2 Case 1 dataout.Caption = o
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息法教程第2版朱慶華第07章節(jié)
- vb.net程序設(shè)計(jì)教程第11章圖形應(yīng)用程序開(kāi)發(fā)
- 第07章 資源稅法
- 第07章uml建模-2
- vb基礎(chǔ)教程
- 第07章負(fù)債(zheng,2.24)
- 第07章 風(fēng)險(xiǎn)評(píng)估(2014)
- 第9章_endnote最全教程
- 第07章 混凝土工程
- vb教程——常用控件
- 營(yíng)銷(xiāo)第07章?tīng)I(yíng)銷(xiāo)戰(zhàn)略策劃
- 第07章病理練習(xí)題
- 第07章團(tuán)隊(duì)建設(shè)與管理
- vb基礎(chǔ)入門(mén)教程
- vb神童教程 - search readpudncom
- 第07章_無(wú)線寬帶網(wǎng)絡(luò)
- 第07章 光的衍射習(xí)題答案
- cad經(jīng)典教程_第7章_圖案填充
- 光學(xué)教程第1章-參考答案
- 光學(xué)教程第3章參考答案
評(píng)論
0/150
提交評(píng)論