版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)組,利用數(shù)組可以有效地存儲和處理成批數(shù)據(jù) 本章主要內(nèi)容,第6章 數(shù) 組,處理成批的數(shù)據(jù)時,必須使用數(shù)組來處理表示100個學生的成績,采用簡單變量來表示: s1,s2,s3,… s99,s100 采用數(shù)組來表示:t(0), t(1), t(2),… t(98), t(99) t(k) (k=0,1,2,…99)為數(shù)組元素(或稱下標變量),它表示第k個
2、學生的成績, k稱為下標變量的下標(默認情況下,下標從0開始) 由三行四列組成的二維數(shù)組y,其12個下標變量可表示為 y(0,0) y(0,1) y(0,2) y(0,3) y(1,0) y(1,1) y(1,2) y(1,3) y(2,0) y(2,1) y(2,2) y(2,3)
3、 只要有規(guī)則地改變下標值,就可以很方便地使下標變量(如t(k))成為所需要的具體下標變量,6.1 數(shù)組的概念,6.2.1 數(shù)組聲明語句 使用數(shù)組之前,一般需要定義數(shù)組,以便讓系統(tǒng)分配相應(yīng)的存儲單元。格式為: Dim 數(shù)組名([下界1 to]上界1[,[下界2 to]上界2…]) [As 數(shù)據(jù)類型] 功能:指定數(shù)組的維數(shù)、各維的上下界和數(shù)據(jù)類型
4、 舉例:Dim Sum(10) As Long ‘下標號從0~10,共11個元素Dim Ary(1 to 20) As Integer ‘下標號從1~20,共20個元素Dim d(1 to 5,1 to 10) As Double ‘定義二維數(shù)組 還可以使用Public、Static、Private等語句來聲明數(shù)組,6.2 數(shù)組的聲明和應(yīng)用,設(shè)
5、定下界的方法 Option Base 1 ‘設(shè)定下界為1 Dim Data(10) As Single ‘下標號從1~10 6.2.2 Array函數(shù) 使用Array函數(shù)可以為數(shù)組元素賦值 示例 Dim D As Variant ‘定義數(shù)組名
6、(變體類型) D = Array(1, 2, 3, 4) 執(zhí)行結(jié)果:1→D(0),2→D(1), 3→D(2), 4→D(3),例6.1 輸入某小組5個同學的成績,計算總分和平均分(取小數(shù)后一位) 本例利用InputBox函數(shù)來輸入成績,輸入完畢后經(jīng)過計算,再采用Print直接在窗體上輸出結(jié)果,6.2.3 數(shù)組的應(yīng)用,Private Sub Form_Load()
7、 Dim d(5) As Integer Dim i As Integer, total As Single, average As Single Show For i = 1 To 5 '輸入成績 d(i) = Val(InputBox(&qu
8、ot;請輸入第" & Str(i) & _ "個學生的成績", "輸入成績")) Next i total = 0 For i = 1 To 5 '計算總分和
9、平均分 total = total + d(i) Next i average = total / 5 Print "總分:" & total Print "平均分:" & Format(average, "##.0")End Sub,例6.1,(1)創(chuàng)建應(yīng)用程序的
10、用戶界面和設(shè)置對象屬性,例6.2 輸入10名學生的成績,求出最高分和最低分,例6.2,功能要求:通過Array函數(shù)輸入10個分數(shù);單擊“查找”按鈕(Command2)后,開始查找最高分和最低分,找到后顯示在標簽Label1上 Option Base 1 Dim score As Variant Private Sub Form_Load() Label1.Caption = "
11、;單擊“查找”按鈕開始查找最高分和最低分" score = Array(89, 96, 81, 67, 79, 90, 63, 85, 95, 83) End Sub,(2) 編寫程序代碼,Private Sub Command1_Click() Dim max As Integer, min As Integer max = score(1)
12、 '設(shè)定初值 min = score(1) For i = 2 To 10 ‘與后面的數(shù)據(jù)逐一比較 If max score(i) Then
13、39;找最低分 min = score(i) End If Next i 'Chr(13)起換行作用 Label1.Caption = &
14、quot;最高分:" + Str(max) + _ Chr(13) + "最低分:" + Str(min) End Sub,例6.3 分別計算5個學生和3門課的平均分,某學習小組有5名學生,成績?nèi)绫?.1所示 分析:用一個二維數(shù)組a(5, 3)來描述。程序中設(shè)置兩重循環(huán),用以實現(xiàn)每行和每列上的累加。本例采用賦值語句
15、來輸入學生成績,并采用Print直接在窗體上輸出結(jié)果 Option Base 1 Private Sub Form_Load() Dim a(5, 3) As Integer Dim r As Integer, c As Integer, s As Integer k = Array("數(shù)學&quo
16、t;, "英語", "計算機") '輸入課程名 a(1, 1) = 69: a(1, 2) = 89: a(1, 3) = 74 '輸入學生成績 a(2, 1) = 94: a(2, 2) = 80: a(2, 3) = 90
17、 a(3, 1) = 57: a(3, 2) = 62: a(3, 3) = 73 a(4, 1) = 98: a(4, 2) = 94: a(4, 3) = 90 a(5, 1) = 73: a(5, 2) = 76: a(5, 3) = 63,Show Print "學生", "平均分" Pri
18、nt String(20, "-") '輸出20個減號“-” For r = 1 To 5 s = 0 '累加前清0 For c = 1 To 3 '累加同一行數(shù)據(jù) s = s + a(r, c) Next c Print r, Form
19、at(s / 3, "##.0") Next r Print,Print "課程", "平均分" Print String(20, "-") For c = 1 To 3 s = 0 For r = 1 To 5
20、 '累加同一列數(shù)據(jù) s = s + a(r, c) Next r Print k(c), Format(s / 5, "##.0") Next cEnd Sub,程序運行結(jié)果,例6.3,1. 執(zhí)行下列程序段后,輸出的結(jié)果是_
21、_____。 Dim a(1 To 3, 1 To 3) For j = 1 To 3 For k = 1 To 3 a(j, k) = j Print a(j, k); Next k Print
22、 Next j A. 3 2 1 B. 0 1 2 C. 1 2 3 D. 1 1 1 2 3 2 1 0 1 2 1 2 2 2 2 1 2 3 2 1 0
23、 3 2 1 3 3 3,下列程序的運行結(jié)果?,想一想,思考題,D,1. 執(zhí)行下列程序段后,輸出的結(jié)果是______。 Dim a(1 To 4, 1 To 4) For j = 1 To 4 For k = 1 To 4 a(j, k) = Abs(j - k) Print
24、a(j, k); Next k Print Next j A. 3 2 1 0 B. 0 1 2 3 C. 0 1 1 1 D. 3 3 3 3 2 1 0 3 1 0 1 2
25、 1 0 1 1 2 2 2 2 1 0 3 2 2 1 0 1 1 1 0 1 1 1 1 1 0 1 2 3 3 2 1 0
26、 1 1 1 0 0 0 0 0,下列程序的運行結(jié)果?,想一想,思考題,B,兩種形式的數(shù)組:靜態(tài)數(shù)組和動態(tài)數(shù)組 靜態(tài)數(shù)組(前面介紹的)是指數(shù)組元素的個數(shù)固定不變;動態(tài)數(shù)組的元素個數(shù),在程序運行時可以改變 動態(tài)數(shù)組可以在運行過程中改變數(shù)組的大小,提高存儲區(qū)的使用效率 6.3.1 建立動態(tài)數(shù)組
27、 用ReDim語句重新定義帶下標的動態(tài)數(shù)組 6.3.2 數(shù)組刷新語句 Erase語句用來清除靜態(tài)數(shù)組的內(nèi)容,或者釋放動態(tài)數(shù)組占用的內(nèi)存空間,6.3 動態(tài)數(shù)組,Private Sub Form_Load() Dim a() As Integer '聲明一個整型動態(tài)數(shù)組 Show ReDim
28、 a(800) '用ReDim語句重新定義 k = 0 For x = 200 To 600 Step 3 If x Mod 8 = 0 Then k = k + 1 a(k) = x
29、 End If Next x ReDim Preserve a(k) 'Preserve 能保留數(shù)組中原有的數(shù)據(jù) For i = 1 To k Print a(i) Next iEnd Sub,例6.4 ReDim語句應(yīng)用示例,例6.4,與前面的循環(huán)語句For...Next類似,都是用來執(zhí)行指定重
30、復次數(shù)的循環(huán)。但For Each...Next語句專門作用于數(shù)組或?qū)ο蠹现械拿恳怀蓡T。語法格式: For Each 成員 In 數(shù)組名 循環(huán)體 [Exit For] Next 成員 “成員”是一個Variant變量,它實際上代表數(shù)組中每一個元素 本語句可以對數(shù)組元素進行讀取、查詢或顯示,
31、它所重復執(zhí)行的次數(shù)由數(shù)組中元素的個數(shù)確定 在不知道數(shù)組中元素的數(shù)目時非常有用,6.4 For Each...Next循環(huán)語句,6.5 控件數(shù)組,兩類數(shù)組:一般數(shù)組和控件數(shù)組 6.5.1 控件數(shù)組的概念 控件數(shù)組是一組具有相同名稱、類型和事件過程的控件 例如,Label1(0),Label1(1),Label1(2),…… 但Label1, Label
32、2, Label3, ……不是控件數(shù)組 控件數(shù)組具有以下特點: (1)相同的控件名稱(即Name屬性); (2)控件數(shù)組中的控件具有相同的一般屬性; (3)所有控件共用相同的事件過程。 以下標索引值(Index)來標識各個控件,第一個下標索引號默認為0,6.5.2 控件數(shù)組的建立,建立控件數(shù)組有三種方法: (1)給控件起相同的名稱 (2)將現(xiàn)有的控件復制
33、并粘貼到窗體等上面 (3)將控件的Index屬性設(shè)置為非Null數(shù)值 6.5.3 控件數(shù)組的使用 例6.6 建立一個文本框控件數(shù)組Text1和一個文本框Text2,在控件數(shù)組Text1中輸入一組數(shù)后,把累加值存放在Text2。,通過“復制”方法控件數(shù)組Text1。第一次 單擊工具欄上的“粘貼”按鈕(或按Ctrl+V),此時系統(tǒng)彈出一個如下的對話框,例6.6,控件數(shù)組Text1的4個元素為:Text1
34、(0)~Text1(3) Private Sub Command1_Click() s = 0 For i = 0 To 3 s = s + Val(Text1(i).Text) Next i Text2.Text = s End Sub,注意:控件數(shù)組元素的表示方法
35、與列表框表項有所不同 列表框List1的表項內(nèi)容為:List1.List(0)、 List1.List(1)、……。下標規(guī)定為順序號0,1,2,……。 一個列表框控件,其List屬性是一個數(shù)組。 控件數(shù)組Text1的元素內(nèi)容為:Text1(0).Text、Text1(1).Text、……。下標可由用戶指定,不一定為順序號。 多個控件組成一個數(shù)組,相同名稱。使用這些控件的Text屬性。,例6.7 按圖
36、6.5設(shè)計窗體,其中一組(共3個)單選按鈕構(gòu)成控件數(shù)組,要求當單擊某個單選按鈕時,能夠改變文本框中文字的大小,例6.7,設(shè)計步驟: (1)設(shè)計控件數(shù)組Option1,其中包含3個單選按鈕對象 設(shè)置控件數(shù)組各元素(從上而下)的Caption屬性分別為12,20和28 (2)建立一個文本框Text1,其Text屬性設(shè)置為“控件數(shù)組的使用”。再建立一個標簽,其Caption屬性為“字號控制”
37、 (3)編寫程序代碼,Private Sub Form_Load() Option1(0).Value = True '選定第一個單選按鈕 Text1.FontSize = 12 '設(shè)定文本框中的字號 End Sub Private Sub Option1_Click(Index A
38、s Integer) Select Case Index '系統(tǒng)自動返回Index值 Case 0 Text1.FontSize = 12 Case 1 Text1.FontSize = 20
39、Case 2 Text1.FontSize = 28 End Select End Sub,例6.8 隨機產(chǎn)生十個10~100的整數(shù),用“選擇排序法”按值從小到大順序排序,最后輸出結(jié)果。 解題方法: (1)利用Int(91*Rnd+10)產(chǎn)生值為10到100的隨機整數(shù) 使用Randomize得到不同的隨機數(shù)序列
40、 (2)按值從小到大進行排序。排序方法: 將10個數(shù)放入數(shù)組a中,對下列下標變量進行排序處理: a(1), a(2), a(3), … , a(8) , a(9) , a(10) ① 從這10個下標變量中,選出最小值,通過交換把該值存入a(1)中 ② 除a(1)之外(a(1)已存放最小值),從其余9個下標變量中選出最小值(即10個數(shù)中的次小值),
41、通過交換把該值存入a(2)中 ③ 選出a(3)~a(10)中的最小值,通過交換,把該值存入a(3)中 ④ 重復上述處理,至a(8),可使a(1)~a(8)按小到大排列 ⑤ 第9次處理,選出a(9)及a(10)中的最小值,通過交換把該值存入a(9)中,此時a(10)存放的就是最大值,6.6 程序舉例,排列要求 小
42、大 示例: a(1) a(2) a(3) a(4) 90 64 65 59 1. a(1)與a(2) ~a(4)比較,選出最小值,結(jié)果 59 90 65 64 2. a(2)與a(3) ~a(4)比較,
43、選出次小值,結(jié)果 59 64 90 65 3. a(3)與a(4)比較,選出較小值,結(jié)果 59 64 65 90 i=1 j=2, 3, 4 i=2 j=3, 4 i=3 j=
44、4,,For i=1 to 3 For j=i+1 to 4 …… Next jNext i,程序結(jié)構(gòu),循環(huán)體比較a(i)與a(j)若a(i)大于a(j)則a(i)與a(j)交換值,假設(shè)要對4個數(shù)排序,對4個數(shù)排序外循環(huán) i 次數(shù)為3內(nèi)循環(huán) j 次數(shù)為i+1~4,完成上述比較及排序處理過程,可以采用兩重循環(huán)結(jié)構(gòu),外循環(huán)的循環(huán)變量i從1到9,共循環(huán)九次;內(nèi)循環(huán)的循環(huán)變量j從i+1到
45、10。 本例采用默認的用戶界面,所需數(shù)據(jù)由隨機函數(shù)產(chǎn)生,處理后結(jié)果信息通過Print方法直接輸出在窗體上。 Private Sub Form_Load() Show Randomize Dim a(1 To 10) As Integer Print &quo
46、t;原始數(shù)據(jù):" For i = 1 To 10 '產(chǎn)生10個隨機數(shù) a(i) = Int(91 * Rnd + 10) Print a(i); Next i,(3
47、) 程序結(jié)構(gòu),Print: 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
48、 '交換位置 End If Next j Next i Print "排序結(jié)果:" For i = 1 To 10 Print a(i); Next i
49、 End Sub,例6.8,改寫中間程序段“For i=1 To 9”~“Next i”(共7個程序行) For i = 1 To 9 k = i 'k用來記錄每次選擇的最小值的下標 For j = i + 1 To 10 If a(k) > a(j) Then
50、 k = j End If Next j t = a(k): a(k) = a(i): a(i) = t '交換位置 Next i 變量k記錄每一次選出的最小值的下標,在本次比較結(jié)束后,使a(i)與a(k)一次換位即可,例6.8a,例6.9
51、查找考場教室號 某課程統(tǒng)考憑準考證入場,考場教室安排如表6.2。編制程序,查找準考證號碼所對應(yīng)的教室號碼 (1)分析:為便于查找,通過二維數(shù)組rm建立這兩種號碼對照表。 數(shù)組rm由Form_Load事件過程來建立,它的每一行存放了一個教室資料(包含準考證號碼范圍和教室號碼)。當判斷到某個給定準考證號碼落在某一行的準考證號碼范圍內(nèi)時,則該行中的教室號碼為所求
52、 (2)創(chuàng)建應(yīng)用程序的用戶界面和設(shè)置對象屬性,(3)編寫程序代碼 功能要求:用戶在文本框Text1中輸入準考證號碼,單擊“查找”按鈕(Command1)后,則查找出對應(yīng)的教室,并將教室號碼輸出在文本框Text2中 Dim rm(6, 3) As Integer Private Sub Form_Load() ‘輸入數(shù)組數(shù)據(jù),一行存放1個教室信息
53、 rm(1, 1) = 2101: rm(1, 2) = 2147: rm(1, 3) = 102 rm(2, 1) = 1741: rm(2, 2) = 1802: rm(2, 3) = 103 rm(3, 1) = 1201: rm(3, 2) = 1287: rm(3, 3) = 114
54、 rm(4, 1) = 3333: rm(4, 2) = 3387: rm(4, 3) = 209 rm(5, 1) = 1803: rm(5, 2) = 1829: rm(5, 3) = 305 rm(6, 1) = 2511: rm(6, 2) = 2576: rm(6, 3) = 306 End Sub
55、,例6.9,Private Sub Command1_Click() Dim no As Integer, flag As Integer flag = 0 '查找標記,0表示未找到 no = Val(Text1.Text) For
56、i = 1 To 6 If no >= rm(i, 1) And no <= rm(i, 2) Then Text2.Text = rm(i, 3) '顯示教室號碼 flag = 1
57、 ‘ 1表示找到 Exit For End If Next i If flag = 0 Then Text2.Text = "無此準考證號碼" End If
58、 Text1.SetFocus ‘設(shè)置焦點 End Sub,某學習小組10名學生的成績情況如表6.3所示,現(xiàn)要求采用折半查找法,通過學號查詢學生成績 (1)分析:折半查找法也稱對半查找法,是一種效率較高的查找方法。對于大型數(shù)組,它的查找速度比順序查找法(例6.8采用的是順序查找法)快得多
59、 假設(shè)要查找的數(shù)據(jù)個數(shù)為n=1000 順序查找的平均次數(shù)為500,即1000/2 折半查找的最大次數(shù)為x=10, 即 2x = 1000 在采用折半查找法之前,要求將數(shù)組按查找關(guān)鍵字(如本例的學號)排好序(從大到小或小到大),例6.10 采用折半查找法查詢學生成績,· 先從數(shù)組中間開始比較, 判別中間的那個元
60、素是不是要找的數(shù)據(jù): 是,則查找成功 否,若被查找的數(shù)據(jù)是在該數(shù)組的上半部,則從上半部的中間繼續(xù)查找,否則從下半部的中間繼續(xù)查找 · 照此進行下去,不斷縮小查找范圍 · 至最后,因找到或找不到而停止查找 對于n個數(shù)據(jù),若用變量Top、Bott分別表示每次“折半”的首位置和末位置,則中間位置M
61、為 M=Int((Top+Bott)/2)這樣就將[Top, Bott]分成兩段,即[Top, M-1]和[M+1, Bott], 若要找的數(shù)據(jù)小于由M指示的數(shù)據(jù),則該數(shù)據(jù)在[Top,M-1]范圍內(nèi),反之,則在[M+1,Bott]范圍內(nèi),折半查找法的過程,,折半查找法的過程,學號 h(),1201120212031205120612071209121012111215,先排好序,數(shù)
62、學 d( x ,1) 語文 d( x ,2),92 8678 7183 7467 7571 5562 8098 8399
63、 8057 6780 78,,m=Int((Top + Bott)/2)要找的學號No h(m) = m為所求 m Top = m + 1,,Top=1,Bott=10,,(2) 創(chuàng)建應(yīng)用程序的用戶界面和設(shè)置對象屬性
64、 (3)編寫程序代碼,例6.10,Dim h(10) As Integer, d(10, 2) As Integer Private Sub Form_Load() '學號存放在數(shù)組h()中 h(1) = 1201: h(2) = 1202:
65、h(3) = 1203 h(4) = 1205: h(5) = 1206: h(6) = 1207 h(7) = 1209: h(8) = 1210: h(9) = 1211: h(10) = 1215
66、 '成績存放在數(shù)組d(,)中 d(1, 1) = 92: d(1, 2) = 86 d(2, 1) = 78: d(2, 2) = 71 d(3, 1) = 83: d(3, 2) = 74 d(4, 1) = 67: d(4, 2) = 75 d(5, 1) = 71: d(5, 2) = 55 d
67、(6, 1) = 62: d(6, 2) = 80 d(7, 1) = 98: d(7, 2) = 83 d(8, 1) = 99: d(8, 2) = 80 d(9, 1) = 57: d(9, 2) = 67 d(10, 1) = 80: d(10, 2) = 78 End Sub,Private Sub Command1_Click()
68、 Dim no As Integer, flag As Integer Dim m As Integer, top As Integer, bott As Integer flag = -1 '置未找到標志 top = 1: bott = 10
69、 '設(shè)定范圍 no = Val(Text1.Text) '取學號 If no h(bott) Then flag = -2 '若超出學號范圍, 置特殊標志-2 End If,Do While
70、flag = -1 And top h(m) '大于中間數(shù)據(jù) top = m + 1 '下半部 End Select Loop,If flag < 0 Then '
71、判是否找不到 Text2.Text = "" Text3.Text = "" Text4.Text = "" Text5.Text = "" MsgB
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 利用數(shù)組處理批量數(shù)據(jù)
- 主要內(nèi)容
- 戰(zhàn)略采購和操作采購的分開可以更有效地配置管理資源
- [教育]有效地輔導和培養(yǎng)部屬
- 主要內(nèi)容.doc
- 牛和鵝課文主要內(nèi)容
- 安全監(jiān)理程序和主要內(nèi)容
- 牛和鵝課文主要內(nèi)容
- 課程主要內(nèi)容
- 主要內(nèi)容.doc
- 何有效地組織會議?
- 章程制定程序和主要內(nèi)容說明
- 詩經(jīng)的主要內(nèi)容和藝術(shù)特色
- 詩經(jīng)的主要內(nèi)容和藝術(shù)特色
- 實踐教學主要內(nèi)容
- 314活動主要內(nèi)容
- 面試的主要內(nèi)容
- 面試的主要內(nèi)容
- 安全培訓主要內(nèi)容
- 房顫的主要內(nèi)容
評論
0/150
提交評論