版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第八章 數(shù)組一、引入課題例輸入 100 個(gè)同學(xué)的成果,一起正序輸出顯示,換行后再一起反序輸出;思路:為了將輸入的 100 個(gè)同學(xué)的成果,先一起正序輸出顯示,換行后再一起反序輸出顯示;就必需將這 100 個(gè)成果一個(gè)一個(gè)儲存起來,顯示完一次后,才能再顯示一次;不儲存起來,就無法再顯示;問題:如何將這 100 個(gè)成果一個(gè)一個(gè)儲存起來?基本方法:可以設(shè)立一個(gè)一個(gè)的變量,將這些成果按次序賦值給這些變量,就等于儲存起來了;只要儲存起來,就可以隨便正序、反序輸出顯示了;量呢?問題: 要設(shè)立幾個(gè)變量才夠呢?100 個(gè)成果就需要100 個(gè)變量, 如何設(shè)立 100 個(gè)變簡潔想到:用x1, x2, x3, , x1
2、00?但是如何對x1, x2, x3, , x100 輸入、輸出呢?輸入 100 個(gè)變量,重復(fù)輸入100 次,必需用循環(huán)!循環(huán)體如何寫呢?是否可以寫成:For i=1 To 100 xi=InputBox 請輸入成果 X Next i 不行以!xi 只能代表一個(gè)變量,它不會隨著 I 的變化,自動變成 x1, x2, x3, , x100,即 xi 不行能代表 100 個(gè)變量;即使輸入 100 個(gè)成果,最終 xi 只留下一個(gè);那么應(yīng)當(dāng)怎么辦呢?能不能將 x 與 i 分別,而且實(shí)現(xiàn) x 不動,但 i 的確會隨著 For i 的變化而變化呢?可以!方法: VB 的分別方法是 x i 象 x i 這樣
3、的變量稱為“ 數(shù)組”(即一組數(shù)) ;當(dāng) i = 1 100 變化時(shí), x i 也跟著一起變化為產(chǎn)生 100 個(gè)變量;于是,輸入 100 個(gè)成果可以這樣解決:For i=1 To 100 X i = InputBox 請輸入成果 X Next i VB 中象 x i 這樣的變量稱為“ 數(shù)組”;x1、x2、x3、 、x100 ,前面學(xué)的 Integer、Long、Single、 Double、String、Date、Boolean 等都是 VB 的基 本數(shù)據(jù)類型,可以處理少量的單個(gè)數(shù)據(jù),稱為簡潔變量;但無法處理大批量的數(shù)據(jù);為了 處理大批量的數(shù)據(jù),VB 供應(yīng)了數(shù)組;1. 數(shù)組的作用 數(shù)組通常和循環(huán)
4、一起使用可以大大削減編程的復(fù)雜性,有些算法不用數(shù)組就無法實(shí)現(xiàn);例 1:輸入 10 名同學(xué)的成果,并將它們的成果打印到窗體上;Private Sub Form_click For i=1 To 10 X xi = InputBox 請輸入成果Next i For i=1 To 10 print xi ; Next End Sub i 2. 數(shù)組的概念 數(shù)組是一批數(shù)據(jù)或控件的集合;數(shù)組:由肯定數(shù)目的同類元素按肯定次序排列而成的結(jié)構(gòu)類型數(shù)據(jù),是一組具有同一名 字、不同下標(biāo)的下標(biāo)變量;一般格式:sn其中: s 稱為數(shù)組名, n 是下標(biāo)一個(gè)數(shù)組可以含有如干個(gè)下標(biāo)變量(或稱數(shù)組元素)組中的位置;如 s3代
5、表 s 數(shù)組中的下標(biāo)為 3 的元素;,下標(biāo)用來指出某個(gè)數(shù)組元素在數(shù)例如,定義一個(gè)integer 型數(shù)組 a10,它包含 11 個(gè)同類型的變量:a0,a1, ,a10 Variant 型數(shù)組就可以存放不同類型的數(shù)據(jù)3.數(shù)組元素和數(shù)組的維數(shù)數(shù)組的成員稱為數(shù)組元素,其名稱與數(shù)組名相同,其下標(biāo)表示該元素在數(shù)組中的位置;因此,數(shù)組元素也稱下標(biāo)變量;數(shù)組的維數(shù)表示數(shù)組元素需要幾個(gè)下標(biāo)才能正確表示其在數(shù)組中的位置,它代表數(shù)組的規(guī)律結(jié)構(gòu),最多 60 維;一維數(shù)組的規(guī)律結(jié)構(gòu)是線性的,只用一個(gè)下標(biāo)表示各個(gè)元素在數(shù)組中的位置例 a10:含 11 個(gè)元素的一維數(shù)組a0,a1,a2,a3,a4,a5,a6,a7,a8,
6、a9,a10 二維數(shù)組的規(guī)律結(jié)構(gòu)是一個(gè)二維表,用兩個(gè)下標(biāo)表示各個(gè)元素在數(shù)組中的位置:第一個(gè)下標(biāo)表示行,其次個(gè)下標(biāo)表示列;例 b2,3:含三行四列共 12 個(gè)元素的二維數(shù)組b0,0 b0,1 b0,2 b0,3 b1,0 b1,1 b1,2 b1,3 b2,0 b2,1 b2,2 b2,3 4.數(shù)組的儲備結(jié)構(gòu)數(shù)組在內(nèi)存中占用一片連續(xù)的儲備單元;一維數(shù)組的儲備結(jié)構(gòu)與規(guī)律結(jié)構(gòu)相同,即各個(gè)元素按下標(biāo)次序依次存放;二維數(shù)組的儲備結(jié)構(gòu)是按行的次序儲備各個(gè)元素;例如,數(shù)組 b2,3的儲備形式為:b0,0 b0,1 b0,2 b0,3 b1,0 b1,1 b1,2 b1,3 b2,0 b2,1 b2,2 b2
7、,3 三維數(shù)組是由如干個(gè)二維數(shù)組組成的,其儲備結(jié)構(gòu)是按次序儲備各個(gè)二維數(shù)組;例如,數(shù)組 c1,2,1的儲備形式為:c0,0,0 c0,1,0 c0,2,0 c1,0,0 c1,1,0 c1,2,0 c0,0,1 c0,1,1 c0,2,1 c1,0, 1 c1,1,1 c1,2,1 說明:(1)數(shù)組是一些具有相同類型的數(shù)據(jù)的有序集合;所謂“ 有序” 是指數(shù)組中的每個(gè)元素依據(jù)肯定的次序排列在一起;如: x1、x2、x3、 、x100 就是數(shù)組 x 的 100 個(gè)元素,按1 100 的編號順序排列;(2)同一數(shù)組中的每個(gè)元素有統(tǒng)一的名稱(變量名);同一數(shù)組中的元素一般都是同一類型的數(shù)據(jù);VB 答應(yīng)
8、同一數(shù)組中的元素包含不同類型的數(shù)據(jù);x,x 也叫如: x1、x2、x3、 、x100 都是 Single 型,它們統(tǒng)一的變量名是數(shù)組名;(3)數(shù)組用不同的序號來區(qū)分各個(gè)不同的元素;數(shù)組的序號稱為“ 下標(biāo)”;下標(biāo)用 來指出某個(gè)元素在數(shù)組中的排列位置;如:x8 中的 8 就是下標(biāo),x8 代表數(shù)組 x 中的第 8 個(gè)元素;x8 不能寫成 x8 或 x8 ;(4)下標(biāo)的形式可以是常量、變量、運(yùn)算式;如: x99 、yi 、Sum a+b;(5)數(shù)組可以擁有多個(gè)下標(biāo);具有一個(gè)下標(biāo)的數(shù)組叫一維數(shù)組,具有兩個(gè)下標(biāo)的數(shù)組叫二維數(shù)組;如: x I 是一維數(shù)組, s x , y 是二維數(shù)組;(6)數(shù)組的操作一般與
9、循環(huán)同時(shí)使用;如上例;(7)數(shù)組必需先定義,后使用;如上例;一、引入要使用數(shù)組,應(yīng)當(dāng)先定義數(shù)組;定義數(shù)組的作用:通知運(yùn)算機(jī)為數(shù)組留出所需的內(nèi)存空間,預(yù)備存放數(shù)據(jù);數(shù)組的定義方式; Dim :用在窗體模塊或標(biāo)準(zhǔn)模塊及過程中,定義窗體或標(biāo)準(zhǔn)模塊級數(shù)組; ReDim :用來重新定義動態(tài)數(shù)組; Static :用來說明該數(shù)組為靜態(tài)數(shù)組; GlobalPublic :用在全局模塊中 標(biāo)準(zhǔn)模塊 中,說明數(shù)組為全局的;在這里我們可以和前面第 4 章的變量的作用域進(jìn)行比較學(xué)習(xí);名稱 作用域 聲明位置 使用語句局部變量 過程 過程中 Dim 或 Static 模塊變量 窗體模塊或標(biāo)準(zhǔn)模塊 模塊的聲明部分 Dim
10、 或 Pravite 全局變量 整個(gè)應(yīng)用程序 標(biāo)準(zhǔn)模塊的聲明部分 Public 或 Global 二、新課這里先介紹最常用的 Dim 方法;有 2 種格式:1格式一一維數(shù)組 Dim 數(shù)組名 下標(biāo)上界 As 類型 下標(biāo)上界為常數(shù)、已有值的表達(dá)式或變量;下標(biāo)下界為0;一維數(shù)組的大小為:下標(biāo)上界+1;例: Dim mark99 As Integer 聲明白一維定長整型數(shù)組 mark ,共有 100 個(gè)元素,下標(biāo)范疇為 0 To 99 ;mark 數(shù)組的各元素是 mark0 ,mark1 , , mark99 ;marki 表示由下標(biāo) i 的值打算是哪一個(gè)元素; mark 數(shù)組內(nèi)存安排如下:mark1
11、 mark2 marki mark99 mark100 每個(gè)數(shù)組元素有一個(gè)唯獨(dú)的次序號,下標(biāo)不能超出數(shù)組聲明時(shí)的上、下界范疇,否就會產(chǎn) 生“ 索引超出了數(shù)組界限” 錯(cuò)誤;數(shù)組元素的使用規(guī)章與同類型的簡潔變量相同二維數(shù)組聲明 Dim 數(shù)組名 下標(biāo) 1,下標(biāo) 2 As 類型 下標(biāo)數(shù)打算了數(shù)組的維數(shù),每一維的大小 =上界 +1 ;數(shù)組的大小為每一維大小的乘積;例 Dim x2,4 As Long 聲明白一個(gè)長整型的二維數(shù)組 x;共占據(jù) 3 5 個(gè)長整型變量的空間例如:Dim Age20 As Integer 定義一維數(shù)組 Age ,最大下標(biāo) 20 Dim Test2, 3 As Double 定義二
12、維數(shù)組 Test, 2 個(gè)下標(biāo)最大分別為 2、3 留意:(1) 問題:數(shù)組定義后下標(biāo)是從什么開頭的?如Age20 的元素有幾個(gè):Age., Age., Age. ;問題:能不能使用元素Age-1 、Age21 . Test2, 3 的元素有幾個(gè)?是哪幾個(gè)?(2)定義數(shù)組時(shí) As 后可以是任何的基本類型;(初值:數(shù)值 0;字符空串;布爾False )Dim Sum50 問題:能不能省略“As 類型” ;如:此時(shí)定義的數(shù)組Sum50 是什么類型?(3)演示程序Private Sub Form_click Dim s10 As Integer For i = 0 To 10 Si=2*i Print
13、 s; i ;= ; si Next i End Sub 問題:程序中的 Dim s10 ,它有哪幾個(gè)元素?下標(biāo)能否改成從 1 開頭(以符合使用習(xí)慣)?要改怎么改?這個(gè)語句放在哪里?(用 Option base 語句設(shè)置,且只能顯現(xiàn)在窗體層或模塊層,不能顯現(xiàn)在過程中,并且必需放在數(shù)組定義之前;)改成從 1 開頭后 Dim s10 的元素有哪幾個(gè)?仍有沒有 s0 這個(gè)元素?不改行不行?比如 Dim s10 ,不改下標(biāo)從 1 開頭,仍舊從 0 開頭,直接使用 s1 s10 ,會不會有問題?數(shù)組 S10 的下標(biāo)能不能改成從 2 開頭?用第一種定義格式不行,其次種定義格式可以:2格式二一維數(shù)組一個(gè)數(shù)組
14、如只有一個(gè)下標(biāo)就能確定一個(gè)數(shù)組元素的數(shù)組中的位置,就稱為一維數(shù)組;定義形式:Dim 數(shù)組名 下標(biāo)下界 To 下標(biāo)上界 As 類型名稱如: Dim a1 to10 as integer Dim s2 To 10 下標(biāo)從 2 開頭到 10 Dim x-2 To 3 此時(shí)有哪幾個(gè)元素?Dim P1990 To 2022 此時(shí)有哪幾個(gè)元素?二維數(shù)組 由具有兩個(gè)或多個(gè)下標(biāo)變量所組成的數(shù)組稱為二維或多維數(shù)組;定義形式:Dim 數(shù)組名 第一維下標(biāo)下界 To 第一維下標(biāo)上界,其次維下標(biāo)下界 To 其次維下標(biāo)界 As 類型名稱如: Dim a1 to10 ,3 To 20 as String 其次種格式比較敏捷
15、;定義數(shù)組的爭論:(1)定義數(shù)組 Dim x10 時(shí),括號內(nèi)一般是常數(shù),能不能是變量?不行!即使變量是有數(shù)值的也不行;即: xn 、Suma To b 這樣定義對不對?問題:數(shù)組定義后,使用時(shí)下標(biāo)可否用變量?演示:上面的程序改為:n=10 sn As Integer Dim 運(yùn)行后提示 sn “ 要求常數(shù)表達(dá)式”留意:數(shù)組定義后,程序后面可以使用,即使改為 s5+5 都可以,就是不能用變量;si=2*I ;爭論:定義數(shù)組時(shí)Dim s10 非要用變量Dim sn 行不行?;可以!但 Dim 必需改成 ReDim (重定義)或?qū)?shù)組定義成“ 動態(tài)數(shù)組”演示:上面的程序改為:n=10 ReDim s
16、n As Integer 運(yùn)行后是正常的;(2)Dim x10 后省略 As Integer ,但又要把號代替?類型符號應(yīng)當(dāng)放在 Dim x10 的什么位置?A Dim x10% B Dim x10% C Dim x%10 D Dim% x10 說明:x10 定義為整數(shù),能不能用類型符格式中的數(shù)組名的命名與簡潔變量名相同,可以是任意合法的變量名 類型名稱可以是任何 定義類型;VB 所定義的合法類型,包括基本類型和用戶自格式 中部分為可選部分,如省略,就下標(biāo)下界默認(rèn)為 面方式定義下標(biāo)下界的默認(rèn)值:Option Base n 0,或通過下其中: n 只能為 0 或 1;Option 只能顯現(xiàn)在窗體
17、層或模塊層,且該定 義必需在數(shù)組定義之前完成,如是多維數(shù)組就對每一維都有效;例如:Option Base 1 設(shè)置下標(biāo)默認(rèn)為1 15 Dim a5 as integer a 數(shù)組的各元素下標(biāo)取值為:Dim x3,2 as single x 數(shù)組的第一維下標(biāo)取值:13,其次維下標(biāo)取值: 1 2 數(shù)組必需先定義后使用,未定義不能使用,下標(biāo)為整型常量;當(dāng)用 Dim 語句定義數(shù)組時(shí),該語句把數(shù)組元素初始化為 0 或空字符串;同一過程中,數(shù)組名不能與其他數(shù)組名或變量名相同;數(shù)組聲明中的下標(biāo)不能是變量,只能是常量;確定數(shù)組的上下界值的函數(shù):LBound 函數(shù)和 UBound 函數(shù)LBound 函數(shù)返回?cái)?shù)組
18、某維的下界(最小下標(biāo));用法: LBound 數(shù)組名, 維值 UBound 函數(shù)返回?cái)?shù)組某維的上界(最大下標(biāo));用法: UBound 數(shù)組名, 維值 (1)對于一維數(shù)組,在使用這兩個(gè)函數(shù)時(shí),可以省略維值;例如:Dim r10 As Integer Print LBoundr, Uboundr 運(yùn)行的結(jié)果會輸出 0 和 10 兩個(gè)數(shù)(2)對于多維數(shù)組,在使用這兩個(gè)函數(shù)時(shí),要指定維值從而說明是要獵取哪一維的下界或上界;例如:Option Base 1 Dim a0 To 9,5 Private Sub Form_Click Print UBounda,2 打印其次維的上界,5 Print LBou
19、nda,1 打印第一維的下界,0 Print LBounda,2 打印其次維的下界,1 End Sub (3)也可以通過使用這兩個(gè)函數(shù)獲得數(shù)組某一維的大?。焕纾篋im b9,1 To 5 10 5 m = UBoundb,1 Lboundb,1 + 1 獲得第一維的大?。簄 = UBoundb,2 Lboundb,2 + 1 獲得其次維的大?。簊 = m * n 運(yùn)算數(shù)組的大?。?0 例:隨機(jī)產(chǎn)生20 個(gè) 10 100 之間的整數(shù),求它們的積;Dim a1 to 20 as Integer sum=1 For i=1 to 20 ai=intRND*100-10+1+10 next i Fo
20、r i=1 to 20 sum=sum*ai next I print “ sum=” ;sumx10000 保一、引入如我們用 Dim x10000 定義數(shù)組以后, 即使程序不運(yùn)行, 運(yùn)算機(jī)也要為數(shù)組留 10000 個(gè)元素的內(nèi)存空間;這會造成內(nèi)存資源的極大鋪張;爭論 :能不能實(shí)現(xiàn)程序不運(yùn)行,數(shù)組 內(nèi)存空間?x10000 就不占用內(nèi)存?程序運(yùn)行時(shí)才為數(shù)組開創(chuàng)可以!但需把數(shù)組定義成“ 動態(tài)數(shù)組”!什么是“ 動態(tài)數(shù)組” ?一般數(shù)組又叫什么?這就是我們這一次所要學(xué)習(xí)的內(nèi)容;二、新課1、靜態(tài)數(shù)組與動態(tài)數(shù)組的區(qū)分 在 VB 中,依據(jù)數(shù)組元素的個(gè)數(shù)能否變化,數(shù)組分為靜態(tài)數(shù)組和動態(tài)數(shù)組;靜態(tài)數(shù)組:數(shù)組元素的
21、個(gè)數(shù)固定不變;動態(tài)數(shù)組:數(shù)組元素的個(gè)數(shù)在運(yùn)行時(shí)可以轉(zhuǎn)變;使用動態(tài)數(shù)組就可以在任何時(shí)候轉(zhuǎn)變其大小,并且可以在不需要時(shí)清除動態(tài)數(shù)組所占 的儲備空間;因此,使用動態(tài)數(shù)組更加敏捷、便利,并有助于高效治理內(nèi)存;動態(tài)數(shù)組:程序在運(yùn)行時(shí)才為它開創(chuàng)內(nèi)存空間的數(shù)組就叫“ 動態(tài)數(shù)組”;靜態(tài)數(shù)組:程序在編譯時(shí)(未運(yùn)行)就為它開創(chuàng)內(nèi)存空間的數(shù)組就叫“ 靜態(tài)數(shù)組”;前面 定義的都是“ 靜態(tài)數(shù)組”;2、動態(tài)數(shù)組的定義( 1)靜態(tài)數(shù)組:在聲明時(shí)就確定其大小的數(shù)組;靜態(tài)數(shù)組是用數(shù)值常量或符號常量作為 下標(biāo)定維的;靜態(tài)數(shù)組在運(yùn)算機(jī)內(nèi)存中運(yùn)行:靜態(tài)數(shù)組在編譯階段給數(shù)組安排內(nèi)存空間,即靜態(tài)數(shù)組沒有運(yùn)行時(shí)已有了相應(yīng)的內(nèi)存 區(qū)間,故在
22、定義靜態(tài)數(shù)組時(shí)要求在編譯階段就知道該數(shù)組的元素個(gè)數(shù);靜態(tài)數(shù)組元素的值在定義該數(shù)組的運(yùn)行后,該數(shù)組所擁有的內(nèi)存空間不釋放,變量 的值仍在內(nèi)存中,再次運(yùn)行時(shí),將上次運(yùn)行的結(jié)果作為該變量的初始值,只有當(dāng)整個(gè)應(yīng)用 程序退出后,所占內(nèi)存才會被釋放;靜態(tài)數(shù)組定義方法:Global 語句定義;在全局模塊中使用 在窗體或模塊級用 Dim 定義;靜態(tài)定義: 在過程中用 Static 語句定義;或用 Static 定義過程,而在過 程中使用 Dim 語句定義數(shù)組;例1 靜態(tài)數(shù)組與非靜態(tài)數(shù)組的對比b Static a4 As Integer 定義靜態(tài)數(shù)組a Static start As Integer 定義靜態(tài)變
23、量Dim b4 As Integer 定義非靜態(tài)數(shù)組Dim i As Integer If start = 0 Then Print 靜態(tài)數(shù)組: , , 非靜態(tài)數(shù)組: End If For i = 0 To 4 ai = ai + i 賦值給靜態(tài)數(shù)組a b bi = bi + i 賦值給非靜態(tài)數(shù)組Next For i = 0 To 4 Print ai; Next Print , For i = 0 To 4 Print bi; Next Print start = 1 (2)動態(tài)數(shù)組 動態(tài)數(shù)組在定義時(shí)并不知道數(shù)組的大小,要在運(yùn)行期確定,并依據(jù)需要在運(yùn)行期可改 變數(shù)組的大小;動態(tài)數(shù)組的定義過程
24、:在窗體、標(biāo)準(zhǔn)模塊和過程中用Dim 或 Public 聲明一個(gè)沒有下標(biāo)的數(shù)組括號不能省略 ;如: dim a as integer 數(shù)組重定義;在過程中需要使用該數(shù)組前,用 Redim 語句定義數(shù)組的大小 數(shù)組元素個(gè)數(shù) ,下標(biāo)可為常量、變量或表達(dá)式,但變量或表達(dá)式此時(shí)必需有值;如: Redim a4 動態(tài)數(shù)組定義格式:Dim 數(shù)組名 As 類型名定義數(shù)組名Redim Preserve 變量名 下標(biāo) 重定義數(shù)組大小在重定義時(shí),按下標(biāo)說明的上、下界重新安排內(nèi)存儲備單元;當(dāng)重新定義動態(tài)數(shù)組時(shí),數(shù)組的內(nèi)容將被清除;如在 Redim 語句中使用了 Preserve 選項(xiàng),就不清除數(shù)組中的內(nèi)容,但使用“P
25、reserve ” 只能轉(zhuǎn)變最終一維的大小,使用動態(tài)數(shù)組時(shí)應(yīng) 留意 以下幾點(diǎn):前面幾維的大小不能轉(zhuǎn)變;使用動態(tài)數(shù)組可重新定義數(shù)組的大小和維數(shù),但不能轉(zhuǎn)變數(shù)組的類型:Dim a as integer Redim a4 此句有錯(cuò)誤,試圖轉(zhuǎn)變數(shù)組的類型Redim a3,2 Redim a6 a1= “Visual Basic ”建立局部動態(tài)數(shù)組時(shí),可省略Dim 語句,由 Redim 語句直接定義數(shù)組;使用 Dim 時(shí),所定義數(shù)組的維數(shù)不超過8 維,直接使用Redim 定義數(shù)組,維數(shù)可達(dá)到60 維;在同一過程中,可多次使用 大小和維數(shù);Redim 語句定義同一個(gè)數(shù)組,以轉(zhuǎn)變數(shù)組的3、數(shù)組的清除和重定義
26、 要清除數(shù)組的內(nèi)容或?qū)?shù)組重新定義,這可以用Erase ,留意,在 Erase 語句中, 只給出要刷新的數(shù)組名,Erase 語句來實(shí)現(xiàn);其格式如下:不帶括號和下標(biāo); 例如:Erase Test 幾點(diǎn)說明:1 當(dāng)把 Erase 語句用于靜態(tài)數(shù)組時(shí),就清空數(shù)組元素的值 2 當(dāng)把 Erase 語句用于動態(tài)數(shù)組時(shí),就刪除數(shù)組 3 當(dāng)把 Erase 語句用于變體數(shù)組時(shí),就每個(gè)元素重置為空 4 Erase 釋放動態(tài)數(shù)組所使用的內(nèi)存;例 2:ReDim 語句應(yīng)用示例Private Sub Form_Load Dim a As Integer 聲明一個(gè)整型動態(tài)數(shù)組Show ReDim a800 用 ReDim
27、 語句重新定義k = 0 For x = 100 To 600 Step 7 If x Mod 8 = 0 Then k = k + 1 End If ak = x Next x Preserve 能保留數(shù)組中原有的數(shù)據(jù)ReDim Preserve ak For i = 1 To k Print ai Next i End Sub 例 3:請編程,輸出楊輝三角形,其一般形式如下:1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 為了輸出楊輝三角形,第一找到形成上述矩陣的規(guī)律:對角線和每行的第 1 列均為 1,其余各項(xiàng)是它的上一行中前一個(gè)元素和上一行的同一列
28、元素之和;從而可以得出形成矩陣數(shù)據(jù)的一般規(guī)律:ai,j=ai-1,j-1+ai-1,j;1. 控件及屬性表 表 8-2 控件及屬性表控件 名稱 Name 屬性文本框 Label1 Caption= ” 楊輝三角形 ”圖片框 Picture1 按鈕 Command1 Caption= ” 顯示 ”2設(shè)計(jì)界面3代碼 Option Base 1 Dim a% 顯示按鈕代碼Private Sub Command1_Click Dim m% m = ValInputBox請輸入要顯示楊輝三角形的級數(shù)m 小于等于 14 的正整數(shù) , 獵取顯示級數(shù) , 6 If m 14 Then MsgBox 請輸入大于
29、等于 Exit Sub End If ReDim am, m Picture1.Cls For i = 1 To m ai, 1 = 1: ai, i = 1 Next i For i = 3 To m For j = 2 To i - 1 3 小于等于 14 的整數(shù) ,64, ”楊輝三角形 ”ai, j = ai - 1, j - 1 + ai - 1, j Next j Next i Dim n%, k% n = 42 For i = 1 To m Picture1.Print Tabn; k = n For j = 1 To i Picture1.Print Tabk; Picture1
30、.Print ai, j; k = k + 6 Next j Picture1.Print n = n - 3 Next i End Sub 一、引入建立一個(gè)數(shù)組之后,可以對數(shù)組或數(shù)組元素進(jìn)行操作;數(shù)組的基本操作包括輸入、輸出及 復(fù)制,這些操作都是對數(shù)組元素進(jìn)行的;二、新課1. 數(shù)組的引用例如:數(shù)組的引用通常是指對數(shù)組元素的引用,其方法是, 在數(shù)組后面的括號中指定下標(biāo),x8 ,y2,3 ,z%3 要留意區(qū)分?jǐn)?shù)組定義和數(shù)組元素!在引用數(shù)組時(shí),應(yīng)留意以下幾點(diǎn):(1)在引用數(shù)組元素時(shí),數(shù)組名、類型和維數(shù)必需與定義數(shù)組時(shí)一樣;(2)假如建立的是二維或多維數(shù)組,就在引用時(shí)必需給出兩個(gè)或多個(gè)下標(biāo);(3)引
31、用數(shù)組元素時(shí),其下標(biāo)值應(yīng)在建立數(shù)組時(shí)所指定的范疇內(nèi);2、數(shù)組元素的賦值 1 靜態(tài)數(shù)組只能對數(shù)組元素逐一賦值,不能用數(shù)組名整體賦值Dim a4 As Integer For i = 0 To 4 ai=10 a 數(shù)組的每個(gè)元素值為10 Next I 是答應(yīng)的;a=1,2,3,4,5 是不答應(yīng)的;2 變體型動態(tài)數(shù)組可以用 Array 函數(shù)定界和整體賦值Dim a As Variant, b As variant, i% a=Array1,2,3,4,5 b=Array “ abc ” ,” derf ” ,67, True For i=Lbounda To Ubounda Picture1.Pri
32、nt ai Next i For i=Lboundb To Uboundb Picture1.Print bi Next I 其中, Lbound 和 Ubound 用來確定數(shù)組的下界和上界 3 動態(tài)數(shù)組也可以用同類型的靜態(tài)數(shù)組整體賦值 Dim a4 As Integer, b As Integer a0=1:a1=3:a2=5:a3=-8:a4=7 b,b 為動態(tài)數(shù)組b=a 將數(shù)組 a 整體賦給數(shù)組其中,b=a 相當(dāng)于For i=Lbounda To Ubounda bi=ai Next i 3. 數(shù)組元素的輸入a 對于數(shù)組元素較少的數(shù)組,可通過單個(gè)賦值語句進(jìn)行輸入操作; b 對于數(shù)組元素較
33、多的數(shù)組,一般通過For 語句和 InputBox 函數(shù)輸入;Option Base 1 默認(rèn)下標(biāo)下界為1 dim b2,3 as single for i=1 to 2 for i=1 to 3 bi,j=inputbox“ 輸入 b”& i & “ ,”& j & ” 的值”next next c 對數(shù)組元素的的賦值和使用,可將數(shù)組看作簡潔變量,任何簡潔變量能使用和出 現(xiàn)的地方,數(shù)組元素均可顯現(xiàn);使用數(shù)組時(shí)要留意下標(biāo)不能出界;使用多維數(shù)組時(shí),下標(biāo)之間用逗號隔開;Dim a10 as integer,b2,4 as long a16=100 錯(cuò)誤,下標(biāo)出界b1,4=a6*5 使用 b 數(shù)組的
34、一個(gè)元素 4、數(shù)組元素的輸出 數(shù)組的輸出同樣是以數(shù)組元素為操作對象,可通過 Print 方法來實(shí)現(xiàn);5 個(gè)元素與后 5 個(gè) 例 1:從鍵盤上輸入 10 個(gè)整數(shù),并放入一個(gè)一維數(shù)組中,然后將其前元素對換,即:第 1 個(gè)元素與第 10 個(gè)元素互換,第 2 個(gè)元素與第 9 個(gè)元素互換 第 5 個(gè)元素與第 6 個(gè)元素互換;分別輸出數(shù)組原先各元素的值和對換后各元素的值;Option Base 1 Private Sub Form_Click arr = Array1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Print 原先數(shù)組: For i = 1 To 10 Print arri; N
35、ext i Print For i = 1 To 5 For j = 6 To 10 t = arri : arri = arrj : arrj = t Next j Next i Print 對換后數(shù)組: For i = 1 To 10 Print arri; Next i End Sub 5、數(shù)組元素的復(fù)制 單個(gè)數(shù)組可以像簡潔變量一樣,從一個(gè)數(shù)組復(fù)制到另一個(gè)數(shù)組;Dim b4,8,a6,5 數(shù)組定義也可以復(fù)制給一個(gè)一維數(shù)b2,3=a3,2 數(shù)組復(fù)制二維數(shù)組中的元素也可以復(fù)制給另一個(gè)二維數(shù)組中的某個(gè)元素,組中的某個(gè)元素,并且反之亦然;Dim a8,b3,2 a3=b1,2: b3,2=a7
36、為了復(fù)制整個(gè)數(shù)組,仍要使用 For 循環(huán)語句;option base 1 name1 ,name2 dim redim name110,name210 for i=1 to10 name1i=inputbox給 name1 的 10 個(gè)元素賦值“ 請輸入姓名: ” next 利用 For 循環(huán)將 name1 的數(shù)據(jù)復(fù)制給name2 for i=1 to 10 name2i=name1i next 例 2: 設(shè)有如下兩組數(shù)據(jù);(1) 2,8,7,6,4,28 ,70,25 (2) 79,27 ,32 ,41,57 ,66 ,78, 80 編寫一個(gè)程序,把上面兩組數(shù)據(jù)分別讀入兩個(gè)數(shù)組中,然后把兩個(gè)
37、數(shù)組中對應(yīng)下標(biāo)的元素 相加,即 2+79 ,8+27 , , 25 80 ,并把相應(yīng)的結(jié)果放入第三個(gè)數(shù)組中,最終輸出第三個(gè)數(shù)組的值;程序如下:Option Base 1 Private Sub Form_Click Dim A, B, C8 As Integer A = Array2, 8, 7, 6, 4, 28, 70, 25 B = Array79, 27, 32, 41, 57, 66, 78, 80 For i = 1 To 8 Ci = Ai + Bi Next i Print 第一個(gè)數(shù)組為:For i = 1 To 8 ; Print Ai; Next i Print Print
38、 其次個(gè)數(shù)組為:; For i = 1 To 8 Print Bi; Next i Print Print 第三個(gè)數(shù)組為:For i = 1 To 8 ; Print Ci; Next i Print End Sub 例 3:隨機(jī)產(chǎn)生 10 個(gè) 70-99 之間的整數(shù),輸出其中的最大數(shù)和最小數(shù);提示: 1、先定義一個(gè)有 10 數(shù)組元素的整型數(shù)組;2、運(yùn)用 for 循環(huán)給每一個(gè)數(shù)組元素賦上 程序代碼:Dim max%,min% Max=a1 Min=a1 For i=2 to 10 If maxai then Min=aI End if Next I Print “ 最大數(shù)”;max ,” 最小
39、數(shù)”;min 70-99 之間的隨機(jī)數(shù);例 4:用隨機(jī)函數(shù)產(chǎn)生100 個(gè)0,99范疇內(nèi)的隨機(jī)整數(shù),統(tǒng)計(jì)個(gè)位上的數(shù)字分別為1,2,3,4,5,6,7, 8,9,0 的數(shù)的個(gè)數(shù)并打印出來;提示:用數(shù)組 a1 to 100 存放產(chǎn)生的確 100 個(gè)隨機(jī)整數(shù),數(shù)組 x1 to 10 來存放個(gè)位上的數(shù)字分別為 1,2,3,4,5,6,7,8,9,0 的數(shù)的個(gè)數(shù);即個(gè)位是 1 的個(gè)數(shù)存放在 x1中,個(gè)位是 2 的個(gè)數(shù)存放在 x2 中, 個(gè)位是 0 的個(gè)數(shù)存放在 x10 ;將程序代碼如下:Public Sub Form_Click Dim a1 To 100 As Integer Dim x1 To 10
40、As Integer Dim i As Integer, p As Integer 產(chǎn)生 100 個(gè)0,99 范疇內(nèi)的隨機(jī)整數(shù),每行 10 個(gè)打印出來For i = 1 To 100 ai = IntRnd * 100 If ai aj Then imin = j Next j temp = ai ai = aimin aimin = temp Next I 例 1:隨機(jī)產(chǎn)生十個(gè)10100 的整數(shù),用“ 挑選排序法” 按值從小到大次序排序,最終輸出結(jié)果;解題方法:1利用 Int91*Rnd+10產(chǎn)生值為 10 到 100 的隨機(jī)整數(shù)即 10 個(gè)使用 Randomize得到不同的隨機(jī)數(shù)序列2按值
41、從小到大進(jìn)行排序;排序方法:將 10 個(gè)數(shù)放入數(shù)組a 中,對以下下標(biāo)變量進(jìn)行排序處理:a1, a2, a3, , a8 , a9 , a10 從這 10 個(gè)下標(biāo)變量中,選出最小值,通過交換把該值存入a1 中 除 a1 之外 a1 已存放最小值 ,從其余 9 個(gè)下標(biāo)變量中選出最小值數(shù)中的次小值 ,通過交換把該值存入a2 中 選出 a3 a10 中的最小值,通過交換,把該值存入a3 中 重復(fù)上述處理,至a8 ,可使 a1 a8 按小到大排列 第 9 次處理,選出a9 及 a10 中的最小值,通過交換把該值存入a9 中,此時(shí) a10 存放的就是最大值程序代碼如下:Private Sub Form_c
42、lick Randomize Dim a1 To 10 As Integer Print 原始數(shù)據(jù): For i = 1 To 10 產(chǎn)生 10 個(gè)隨機(jī)數(shù)ai = Int91 * Rnd + 10 Print ai; Next i Print: Print For i = 1 To 9 For j = i + 1 To 10 Next j If ai aj Then 交換位置t = ai: ai = aj: aj = t End If Next i Print 排序結(jié)果: For i = 1 To 10 Print ai; Next i End Sub For i=1 To 9 ” “Next
43、 i ” 共 7 個(gè)程序行 改寫中間程序段“For i = 1 To 9 k = i k 用來記錄每次挑選的最小值的下標(biāo)For j = i + 1 To 10 If ak aj Then k = j End If Next j t = ak: ak = ai: ai = t 交換位置Next i 變量 k 記錄每一次選出的最小值的下標(biāo),在本次比較終止后,使 ai 與 ak 一次換位即可2、冒泡法排序基本思想: 將相鄰兩個(gè)數(shù)比較,小的調(diào)到前頭 1)有 n 個(gè)數(shù)(存放在數(shù)組 an 中),第一趟將每相鄰兩個(gè)數(shù)比較,小的調(diào)到前頭,經(jīng) n-1次兩兩相鄰比較后,最大的數(shù)已“ 沉底”,放在最終一個(gè)位置,小數(shù)
44、上升“ 浮起”;2)其次趟對余下的 n-1 個(gè)數(shù)(最大的數(shù)已“ 沉底”)按上法比較,經(jīng) n-2 次兩兩相鄰比較后得次大的數(shù);3)依次類推, n 個(gè)數(shù)共進(jìn)行 n-1 趟比較,在第 j 趟中要進(jìn)行 n-j 次兩兩比較;程序段如下For i = 1 To n - 1 For j = 1 To n-i If aj aj+1 Then temp=aj : aj=aj+1 : aj+1=temp End if Next j Next i 其次種方法:For i = n To 2 step -1 For j = 1 To i -1 If aj aj+1 Then temp=aj : aj=aj+1 : aj
45、+1=temp End if Next j Next i 例 2:隨機(jī)產(chǎn)生十個(gè)10100 的整數(shù),用“ 冒泡排序法” 按值從小到大次序排序,最終輸出結(jié)果;請同學(xué)們試著寫一寫二、數(shù)組中元素的插入和刪除操作數(shù)組元素的插入、刪除操作一般是在已排序好的數(shù)組中插入或刪除一個(gè)元素,使得插入或刪除以后的數(shù)組仍是有序的;這涉及到查找問題,在數(shù)組中先找到插入的位置或刪除的元素,然后進(jìn)行相應(yīng)的操作;1、插入例 3:設(shè)有一按升序排列的有n 個(gè)元素的數(shù)組a(數(shù)組元素為整型) ,現(xiàn)將一個(gè)數(shù) (如:“ 11” )插入后,仍保持其有序;解題思路:查找插入位置 k1k n-1 ;從 n 1 到 k 逐一往后移動一個(gè)位置,將第
46、 將數(shù)據(jù)插入;程序代碼如下:k 個(gè)元素的位置騰出;Private Sub Form_click Dim a n = ValInputBox請輸入一個(gè)整數(shù) ReDim an For i = 0 To n ai = i * 3 + 1 Print ai; Next i Print :b = ValInputBox請輸入要插入的一個(gè)數(shù):Print 插入 ; b; 后 For k = 0 To n If b Max Then Max = ai iMax = i End If Next i Print 數(shù)組中的最大數(shù)為:End Sub 例 3:交換數(shù)組中各元素A & iMax & =; aiMax 將數(shù)
47、組的第一個(gè)元素與最終一個(gè)元素交換,其次個(gè)元素與倒數(shù)其次個(gè)元素交換,依次類推;Option Base 1 Dim a As Integer, t As String Dim i a = Arraya, b, c, d, e, f, g, h, i, j Print 交換前: ; For i = 1 To 10 Print ai; ; Next For i = 1 To 10 2 t = ai ai = a10 - i + 1 a10 - i + 1 = t Next Print: Print Print 交換后: ; For i = 1 To 10 Print ai; ; Next 1、控件數(shù)組
48、的概念 控件數(shù)組:是由一組相同類型的控件組成,這些控件據(jù)有一個(gè)相同的名稱,相同的屬性名;特點(diǎn):(1)這些控件由控件數(shù)組的下標(biāo)來區(qū)分,而下標(biāo)由每個(gè)控件的唯獨(dú)標(biāo)識索引號 Index 來標(biāo)識,通過Index 屬性即可區(qū)分控件數(shù)組元素,Index 從 0 開頭取值,如:控件數(shù)組Text12 表示控件數(shù)組Text1 的第 3 個(gè)元素;(2)同一個(gè)控件數(shù)組的全部元素,具有相同的 屬性就沒有規(guī)定必需完全相同;Name 屬性值,但對于其他(3)控件數(shù)組的全部元素,共享同樣的大事過程,故控件數(shù)組適用于如 干個(gè)控件執(zhí)行的操作相像的場合;為區(qū)分觸發(fā)某個(gè)大事是由哪個(gè)控件觸發(fā)的,VB 會把該控件的下標(biāo)索引 值Index
49、 值傳遞給過程;如:設(shè)命令按鈕控件數(shù)組名為 Command ,其單擊大事過程為:Sub Command_ClickIndex as Integer End Sub 經(jīng)過參數(shù)傳遞判定 Index 的值,便知道用戶按下哪一個(gè)按鈕,也就知道可以對該按鈕 進(jìn)行相應(yīng)編程;Sub Command_ClickIndex as Integer if index=4 then label1.caption=“ 第五個(gè)按鈕被點(diǎn)擊”end if End Sub 2、控件數(shù)組的建立 建立控件數(shù)組有三種方法:1給控件起相同的名稱 2將現(xiàn)有的控件復(fù)制并粘貼到窗體等上面 3將控件的 Index 屬性設(shè)置為非 Null 數(shù)值
50、 第一種方法步驟如下:在窗體上畫出作為數(shù)組元素的各個(gè)控件;單擊要包含到數(shù)組的某個(gè)控件,將其激活;在屬性窗口中通過名稱屬性鍵入控件名稱;對每個(gè)要加到數(shù)組中的控件重復(fù)、步;鍵入相同的名稱;其次種方法步驟如下:在窗體上畫出一個(gè)控件;將其激活;執(zhí)行“ 編輯” 菜單中的“ 復(fù)制” 命令,將該控件放入剪貼板;執(zhí)行“ 編輯” 菜單中的“ 粘貼” 命令,將顯示一個(gè)對話框,詢問是否建立控件數(shù)組;單擊對話框中的“ 是” 按鈕,窗體左上角將顯現(xiàn)一個(gè)控件,它是控件數(shù)組的其次個(gè);執(zhí)行“ 編輯” 菜單中的“ 粘貼” 命令,建立控件數(shù)組的其他元素;3、控件數(shù)組的使用例 1: 建立一個(gè)文本框控件數(shù)組Text1 和一個(gè)文本框T
51、ext2 ,在控件數(shù)組Text1 中輸入一組數(shù)后,把累加值存放在Text2 ;Text2 Text10 Text11 文本框Text12 Text1 ;第一次Command1 或按 Ctrl+V ,控件數(shù)組Text13單擊工具欄上的“ 粘貼” 按鈕通過“ 復(fù)制” 方法控件數(shù)組此時(shí)系統(tǒng)彈出一個(gè)如下的對話框控件數(shù)組 Text1 的 4 個(gè)元素為: Text10 Text13 Private Sub Command1_Click s = 0 For i = 0 To 3 s = s + ValText1i.Text Next i Text2.Text = s End Sub 留意:控件數(shù)組元素的表示方法與列表框表項(xiàng)有所不同 列表框 List1 的表項(xiàng)內(nèi)容為: List1.List0 、 List1.List1 、 ;下標(biāo)規(guī)定為次序號0,1,2, ;一個(gè)列表框控件,其 List 屬性是一個(gè)數(shù)組;控件數(shù)組 Text1 的元素內(nèi)容為:指定,不肯定為次序號;Text10.Text 、Text11.Text 、 ;下標(biāo)可由用戶多個(gè)控件組成一個(gè)數(shù)組,相同名稱;使用這些控件的 Text 屬性;例 2:按下圖設(shè)計(jì)一個(gè)窗體,其中一組 共 3 個(gè)單項(xiàng)按鈕構(gòu)成控件數(shù)組,要求當(dāng)單擊某個(gè)單項(xiàng)按鈕時(shí),能夠轉(zhuǎn)變文本框中文字的大小控件數(shù)組設(shè)計(jì)步驟:1設(shè)計(jì)控件數(shù)組 Option1 ,其中包含 3
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度公益崗位用工合作協(xié)議3篇
- 2025年度電商平臺會員消費(fèi)返利協(xié)議3篇
- 2025年度廢塑料瓶回收與環(huán)保瓶蓋生產(chǎn)合同樣板3篇
- 二零二五年度農(nóng)機(jī)智能化作業(yè)合同書3篇
- 二零二五年度電子信息產(chǎn)品開發(fā)合作協(xié)議書2篇
- 二零二五年度消防安全風(fēng)險(xiǎn)評估與整改方案協(xié)議3篇
- 農(nóng)村土地經(jīng)營權(quán)抵押貸款擔(dān)保合同
- 2025年度醫(yī)藥研發(fā)人員競業(yè)禁止勞動合同書3篇
- 2025年度餐飲業(yè)食品安全責(zé)任書3篇
- 二零二五年度歷史文化名城拆遷房產(chǎn)分割與文物保護(hù)合同3篇
- 2023年河北中煙工業(yè)有限責(zé)任公司筆試試題及答案
- 物質(zhì)與意識的辯證關(guān)系
- 小學(xué)英語考試教師總結(jié)反思8篇
- SJ-T 11798-2022 鋰離子電池和電池組生產(chǎn)安全要求
- 多智能體仿真支撐技術(shù)、組織與AI算法研究
- 安全管理中人因素
- 銅礦的選礦工藝與設(shè)備選擇
- 餐廳年度總結(jié)計(jì)劃
- 83廣東省深圳市寶安區(qū)2023-2024學(xué)年六年級上學(xué)期期末數(shù)學(xué)試卷
- 陜西省渭南市2023-2024學(xué)年高一上學(xué)期1月期末數(shù)學(xué)試題
- 2024屆新疆維吾爾自治區(qū)烏魯木齊市高三上學(xué)期第一次質(zhì)量監(jiān)測生物試題【含答案解析】
評論
0/150
提交評論