




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quá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 數(shù)組的概念,在實際應(yīng)用中,常常需要處理相同類型的一批數(shù)據(jù)。例如,為了處理100個員工的工資,可以用S(1),S(2),S(100)來分別代表每個員工的工資,其中S(1)代表第
2、一個員工的工資,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(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.
3、2.1 一維數(shù)組的定義 數(shù)組應(yīng)當(dāng)先定義后使用,數(shù)組的定義又稱為數(shù)組的聲明或說明。 對于固定大小的一維數(shù)組,用如下格式進行定義: 說明符 數(shù)組名(下標(biāo))As 類型 例如:Dim y(5)As Integer 定義了一個一維數(shù)組,該數(shù)組的名字為y,類型為Integer,占據(jù)6個(05)整型變量的空間。,說明: (1)“說明符”為保留字,可以為Dim,Public,Private,Static中的任意一個。在使用過程中可以根據(jù)實際情況進行選用。本章主要講述用Dim聲明數(shù)組,其它參數(shù)的意義在8.4節(jié)介紹。定義數(shù)組后,數(shù)值數(shù)組中的全部元素都初始化為0,字符串?dāng)?shù)組中的全部元素都初始化為空字符串。 (2)“
4、數(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ù)組元素”的類型,可以是Integer,Long,Single,Double,Currency,String(定長或變長)等基本類型或用戶定義的類型,也可以是Variant類型。如果省略“As類型”,則數(shù)組為Variant類型。 (6)在同一個過程中,數(shù)組名不能與變量名同名,否則會出錯。 (7)可以通過類型說明符來指定數(shù)
5、組的類型。 例如:Dim A%(5),B?。? To 5),C#(12),7.2.2 一維數(shù)組的引用 數(shù)組的引用通常是對數(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ù)為 For i = 1 To 10 a(i)= InputBox(請輸入一個整型數(shù)) Print a(i), Next i P
6、rint Print 逆序輸出為 For i = 10 To 1 step -1 Print a(i), Next i End Sub,7.2.3 一維數(shù)組的應(yīng)用舉例 【例7.3】從鍵盤上輸入40人的考試成績,輸出高于平均成績的分?jǐn)?shù)。 分析:該問題可分三部分處理:一是輸入40個人的成績;二是求平均分;三是把這40個分?jǐn)?shù)逐一和平均成績進行比較,若高于平均成績,則輸出。,程序如下: Private Sub Command1_Click() Dim score(40)As Single,aver!,i% aver = 0 For i = 1 To 40 score(i)= InputBox(請輸入成
7、績) aver = aver + score(i) Next i aver = aver / 40 For i = 1 To 40 If score(i) aver Then Print score(i) 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)的值互
8、換,否則,不作交換;這樣處理后,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ù)進行第3輪 直到第9輪后,余下的A(10)是10個數(shù)中的最大者。 至此,10個數(shù)已從小到大順序存放在A(1)A(10)中。,為簡單起見,我們以7,5,3三個數(shù)為例,再做說明: 第1輪:找出最小值3作為第一個數(shù)組元素 7 5 3
9、 比較7和5,75,需要交換,交換后的序列為5 7 3; 5 7 3 比較5和3,53,需要交換,交換后的序列為3 7 5; 第2輪:找出剩下的元素中的最小值5作為第二個數(shù)組元素 3 7 5 比較7和5,75,需要交換,交換后的序列為3 5 7。 剩下的一個元素7為三個元素中的最大者,排序完成。,程序如下: Private Sub Command1_Click() Dim t%,i%,j%,a(10)As Integer For i = 1 To 10 a(i)= InputBox(輸入一個整數(shù)) Next i Print 輸入的10個整數(shù)為 For i = 1 To 10 Print a(i
10、), Next i Print,For i = 1 To 9 For j = i + 1 To 10 If a(i) a(j)Then 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】隨機產(chǎn)生10個兩位整數(shù),找出其中最大值、最小值。 分析:該問題可以分為兩部分處理:一是產(chǎn)生10個隨機整數(shù),并保存到一維數(shù)組中;二是對這10個整數(shù)求最大、最小值。 程序代碼為: Private Sub Command1_Click() Dim min%,m
11、ax%,i%,a(10)As Integer Randomize,For i = 1 To 10 a(i)= Int(Rnd * 90)+ 10 Next i Print 產(chǎn)生的隨機數(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) Next i Print 最大值為 Print max Print 最小值為 Print min End Sub,7.3 二維數(shù)組,假如有30
12、個學(xué)生,每個學(xué)生有5門考試成績,如何來表示這些數(shù)據(jù)呢?VB中可以用有兩個下標(biāo)的數(shù)組來表示,如第i個學(xué)生第j門課的成績可以用S(i,j)表示。其中i表示學(xué)生號,稱為行下標(biāo)(i1,2,30);j表示課程號,稱為列下標(biāo)(j1,2,3,4,5)。有兩個下標(biāo)的數(shù)組稱為二維數(shù)組。,7.3.1 二維數(shù)組的定義 對于固定大小的二維數(shù)組,可以用如下格式進行定義: 說明符 數(shù)組名(下界to上界,下界to上界)As 類型 例如:Dim T(2,3)As Integer定義了一個二維數(shù)組,名字為T,類型為Integer,該數(shù)組有3行(02)4列(03),占據(jù)12(34)個整型變量的空間,如圖7-3所示。,說明: (1
13、)可以將二維數(shù)組的定義方法推廣至多維數(shù)組的定義。 例如:Dim D(3,1 To 10,1 To 15)定義了一個3維數(shù)組,大小為 4 10 15。注意在增加數(shù)組的維數(shù)時,數(shù)組所占的存儲空間會大幅度增加,所以要慎用多維數(shù)組,尤其是Variant 數(shù)組,因為他們需要更大的存儲空間。 (2)在實際使用時,可能需要數(shù)組的上界值和下界值,這可以通過LBound函數(shù)和UBound函數(shù)來求得。其格式為: LBound(數(shù)組名,維) UBound(數(shù)組名,維) 這兩個函數(shù)分別返回一個數(shù)組中指定維的下界和上界。,7.3.2 二維數(shù)組的引用 二維數(shù)組的引用和一維數(shù)組基本相同,格式為: 數(shù)組名(下標(biāo)1,下標(biāo)2)
14、對二維數(shù)組進行賦值或輸出時,一般采用二重循環(huán)來實現(xiàn)。,7.3.3 二維數(shù)組的應(yīng)用舉例 【例7.8】打印4名同學(xué)的英語、數(shù)學(xué)、法律3門課的考試成績,并計算出每個同學(xué)的平均成績。 分析:把4名同學(xué)的姓名及各科的考試分?jǐn)?shù)分別存入一個一維字符串?dāng)?shù)組xm(4)和一個二維數(shù)值數(shù)組a(4,3)中,然后對數(shù)組(主要是二維數(shù)組)進行處理。,程序如下: Private Sub Command1_Click() Dim a(4,3)As Single,xm(4)As String * 10,i%,j%,aver! Print Tab(25);成績表 Print Print 姓名;Tab(15);英語;Tab(25)
15、;數(shù)學(xué); Print Tab(35);法律;Tab(45);平均分 Print,For i = 1 To 4 aver = 0 xm(i)= InputBox(輸入姓名) Print xm(i); For j = 1 To 3 a(i,j)= InputBox(輸入 & xm(i)& 的一個成績 ),aver = aver + a(i,j) 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ù)組,通過前兩
16、節(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ù)用戶的需要隨時改變數(shù)組的大小。,7.4.1 可調(diào)數(shù)組的定義 可調(diào)數(shù)組的定義分為兩步: 第一步:聲明一個沒有下標(biāo)參數(shù)的數(shù)組。 格式為: 說明符 數(shù)組名()As 類型 第二步:引用數(shù)組前用
17、 ReDim語句重新定義。 格式為: ReDim Preserve 數(shù)組名(下界 to 上界,下界 to 上界)As 類型,例如: Private Sub Command1_Click() Dim a()As Integer Dim n% n = Val(InputBox(input n) ReDim a(n) End Sub,說明: (1)格式中的“說明符”、“ 數(shù)組名”、“ 類型”等說明同一維數(shù)組的定義。 (2)下界、上界可以是常量,也可以是有了確定值的變量。 (3)ReDim語句用來重新定義數(shù)組,能改變數(shù)組的維數(shù)及上、下界,但不能用其改變可調(diào)數(shù)組的數(shù)據(jù)類型,除非可調(diào)數(shù)組被聲明為Varia
18、nt類型。 (4)每次使用ReDim語句都會使原來數(shù)組中的值丟失,可以在ReDim后加Preserve參數(shù)來保留數(shù)組中的數(shù)據(jù),但Preserve只能改變多維數(shù)組中最后一維的大小,前幾維的大小不能改變。 (5)ReDim語句只能出現(xiàn)在過程中。,7.4.2 可調(diào)數(shù)組的應(yīng)用舉例 【例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%
19、 避免溢出,定義數(shù)組為Variant類型 n = InputBox(輸入n的值(n1) 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 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ù)組的概念
20、 在實際應(yīng)用中,我們有時會用到一些類型相同且功能類似的控件。如果對每一個控件都單獨處理,就會多做一些麻煩而重復(fù)的工作。這時,我們可以用控件數(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ù)組的建立 控件數(shù)組中每一個元素都是控件,它的定義方式與普通數(shù)組不同???/p>
21、以通過以下兩種方法建立控件數(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)簽在程序中的作用不同,系統(tǒng)會將被單擊的標(biāo)簽的Index屬性值傳遞給過程,由事件過程根據(jù)不同的Index值執(zhí)行不同的操作。,【例7.12】設(shè)計一個簡易計算器,能進行整數(shù)的加、減、乘、除運算。其運行界面如圖7-8所示。 界面設(shè)計: 一個標(biāo)簽用于計算器輸出; 數(shù)字按鈕控件數(shù)組Number; 操作符控件數(shù)組Operator; 一個“=”按鈕用于計算結(jié)果; 一個“Cls”按鈕用于清屏。,程序如下: 窗體級變量聲明 Dim op1 As Byte
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 乳品安全監(jiān)管體系構(gòu)建考核試卷
- 教育文具在遠(yuǎn)程教育中的應(yīng)用考核試卷
- 樂器批發(fā)商的品牌市場渠道開發(fā)考核試卷
- 家用換氣扇產(chǎn)業(yè)鏈協(xié)同創(chuàng)新發(fā)展模式與實踐考核試卷
- 城市軌道交通的非折返運行與列車調(diào)度考核試卷
- 辦公自動化軟件綜合應(yīng)用考核試卷
- 絲印染在體育用品上的獨特應(yīng)用考核試卷
- 智能設(shè)備多模態(tài)交互設(shè)計考核試卷
- 工傷案例培訓(xùn)課件
- 快手代運營合同范本
- 冬季感冒知識講座
- 基于OBE理念的項目式學(xué)習(xí)模式設(shè)計與應(yīng)用研究
- 醫(yī)療護理醫(yī)學(xué)培訓(xùn) 小兒麻醉專家共識課件
- 模糊多屬性決策方法及其在物流服務(wù)供應(yīng)鏈管理中的應(yīng)用研究
- 2024年廣東省《輔警招聘考試必刷500題》考試題庫含答案
- 《智能制造技術(shù)基礎(chǔ)》課件-第1章 智能制造技術(shù)概述
- 國網(wǎng)基建安全管理課件
- 10.1.2事件的關(guān)系和運算(教學(xué)課件)高一數(shù)學(xué)(人教A版2019必修第二冊)
- 傳統(tǒng)與現(xiàn)代滋補品的營銷變革
- 陳元方年十一時課件
- 2024解析:第九章固體壓強-講核心(解析版)
評論
0/150
提交評論