




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
項目六數(shù)組任務6.1數(shù)組和數(shù)組元素任務6.2靜態(tài)數(shù)組任務6.3動態(tài)數(shù)組任務6.4控件數(shù)組
任務6.1數(shù)組和數(shù)組元素
任務導入
計算機處理的數(shù)據(jù)各種各樣,這些數(shù)據(jù)根據(jù)有序與否可分為兩類:
(1)無序性數(shù)據(jù),僅與其取值有關,而與其所在的位置無關。前面介紹的變量都是簡單變量,如a、i、x等,并可以給簡單變量賦予一個某種數(shù)據(jù)類型的數(shù)值,各個簡單變量是各自獨立的,與其所在的位置無關。
(2)有序性數(shù)據(jù),不僅與其取值有關,而且與其所在的位置也密切相關,如體育比賽的成績,就隱含著名次。
在程序設計中,利用簡單變量可以解決不少問題。但是僅使用簡單變量,勢必受到簡單變量單獨性和無序性的限制,而難以或無力解決那些不僅與取值有關,而且與其所在位置也有關的較復雜的問題。學習目標
(1)理解數(shù)組、數(shù)組維數(shù)、數(shù)組元素等概念。
(2)了解數(shù)組的類型和形式。
1.理解數(shù)組的概念
在程序設計中,將一組排列有序、個數(shù)有限的數(shù)據(jù)作為一個整體,用一個統(tǒng)一的名字來表示,即數(shù)組。
假如有5個學生的成績,這一組成績可以用一個名字cj來表示,其中第一個學生的成績?yōu)?0,第二個學生的成績?yōu)?8,第三個學生的成績?yōu)?0,第四個學生的成績?yōu)?5,第五個學生的成績?yōu)?5,則這一組有排列順序的數(shù)80,68,90,85,95,就是一個數(shù)組。在VB中,為了確定各數(shù)據(jù)與數(shù)組中每個元素的一一對應關系,必須給數(shù)組中的這些數(shù)據(jù)編號,即順序號(用下標來指出順序號,數(shù)組中也稱為下標變量)。
因此可以說,數(shù)組即用一個名字代表順序排列的一組數(shù),順序號就是下標變量的值。簡單變量是無序的,無所謂誰先誰后,數(shù)組中的各元素是有排列順序的。例如,在成績數(shù)組cj中:
第一個學生的成績用cj(1)來表示,其值為80;
第二個學生的成績用cj(2)來表示,其值為68;
第三個學生的成績用cj(3)來表示,其值為90;
第四個學生的成績用cj(4)來表示,其值為85;
第五個學生的成績用cj(5)來表示,其值為95。
2.掌握數(shù)組的命名
數(shù)組的命名規(guī)則與簡單變量的命名規(guī)則一樣,即由1~40個字符組成,組成的字符可以是字母、數(shù)字和小數(shù)點,并且必須以字母開頭,如a、x、xscj等。
3.理解數(shù)組的維數(shù)
數(shù)組中下標的個數(shù)稱為數(shù)組的維數(shù)。
如果數(shù)組中的所有元素能按行(或列)順序排成一行(或一列),也就是說,用一個下標便可以確定它們各自所處的位置,則這樣的數(shù)組稱為一維數(shù)組。
如果數(shù)組中的所有元素能按行、列順序排成一個矩陣,換句話說,必須用兩個下標才能確定它們各自所處的位置,則這樣的數(shù)組稱為二維數(shù)組。依此類推,三個下標的數(shù)組,就構成三維數(shù)組,有多少個下標的數(shù)組,就構成多少維的數(shù)組,如四維數(shù)組、五維數(shù)組等。通常又把二維以上的數(shù)組稱為多維數(shù)組。
例如:
a(10) 為一維數(shù)組
x(2,3) 為二維數(shù)組
b(4,5,6) 為三維數(shù)組
4.理解數(shù)組元素
1)數(shù)組中的元素
組成數(shù)組的各個元素一般為變量,由于這些變量共用一個變量名,即所在的數(shù)組名,因此必須要通過下標才能相互區(qū)別,故數(shù)組元素也稱為下標變量。
在VB中,引用數(shù)組中的某一元素時,要指出數(shù)組名和用括號括起來的數(shù)組元素在數(shù)組中的位置(順序號)的下標,即下標變量的標識為
〈數(shù)組名〉(〈下標表〉)其中,〈下標表〉是指一個或者幾個下標(代表一維或者幾維),各下標之間應該用逗號分隔。例如:
a(5) 代表數(shù)組a中順序號為5的那個元素
x(26) 代表數(shù)組x中順序號為26的那個元素
c(2,3) 代表數(shù)組c中第2排第3列的那個元素
2)下標的使用說明
(1)下標放在數(shù)組名后的括號內(nèi),如x(10)、a(4,5)、
b(2,3,4)等。
(2)下標可以是常量、變量或表達式,如a(3)、x(i)、
a(10-n,n+2)等。
(3)下標反映的是在數(shù)組中的位置。下標值若為非整數(shù),則系統(tǒng)將按四舍五入自動取整,其值的范圍在–32768
~32767之間。例如,對于下標變量x(3.4),系統(tǒng)將下標按四舍五入自動取整后進行使用,即x(3)。
5.了解數(shù)組的類型
VB中,數(shù)據(jù)有多種數(shù)據(jù)類型,相應地,數(shù)組也有多種類型??梢月暶魅魏位緮?shù)據(jù)類型的數(shù)組,包括用戶自定義類型和對象變量,但是一個數(shù)組中的所有元素應該具有相同的數(shù)據(jù)類型。
當然,數(shù)據(jù)類型為Variant(變體)型時,各個元素能夠包含不同類型的數(shù)據(jù)(對象、字符串、數(shù)值等)。
6.了解數(shù)組的形式
在VB中,根據(jù)數(shù)組元素的個數(shù)能否變化,數(shù)組分為靜態(tài)數(shù)組和動態(tài)數(shù)組。
靜態(tài)數(shù)組:數(shù)組元素的個數(shù)固定不變。
動態(tài)數(shù)組:數(shù)組元素的個數(shù)在運行時可以改變。任務6.2靜態(tài)數(shù)組
任務導入
靜態(tài)數(shù)組是在聲明時就已經(jīng)確定了數(shù)組元素個數(shù)的數(shù)組。靜態(tài)數(shù)組是最常用的數(shù)組。學習目標
(1)會聲明靜態(tài)數(shù)組。
(2)會對數(shù)組元素進行輸入、輸出、復制、初始化等操作。
(3)會使用靜態(tài)數(shù)組編寫程序。任務實施
1.聲明靜態(tài)數(shù)組
聲明靜態(tài)數(shù)組的語法格式為
Dim〈數(shù)組名〉(〈維數(shù)定義〉)[As〈類型〉]
【說明】(1)<維數(shù)定義>指定數(shù)組的維數(shù)以及各維的范圍:
[〈下標下界1〉To]〈下標上界1〉[,[〈下標下界2〉To]〈下標上界2〉]…
例如:
Dima(2To4)AsInteger ‘3個元素,下標范圍為2到4
Dimb(5To12)AsString
'8個元素,下標范圍為5到12
(2)下標的上、下界不得超過長整型數(shù)據(jù)類型的范圍
(-2147483648~2147483647)。
(3)二維數(shù)組的各維之間用逗號分隔。例如:
Dima(1To3,1To4)AsDouble
(4)可以將所有這些推廣到二維以上的數(shù)組。例如:
Dimb(2,1To3,1To4)
2.了解OptionBase語句
如果不指定〈下標下界〉,則數(shù)組的下界由OptionBase語句控制。語法格式為
OptionBase〈n〉
【說明】(1)?n只能為0或1。
(2)如果沒有使用OptionBase語句,則默認的下界為0。例如:
Dima(4)AsInteger‘5個元素,下標范圍為0到4
Dimb(20)AsDouble '21個元素,下標范圍為0到20
(3)如果使用OptionBase1語句,如:
OptionBase1 ‘默認下界為1
Dimb(2,1To3,1To4)
則建立了一個三維數(shù)組b,大小為3×3×4,元素總數(shù)為三個維數(shù)的乘積,即36。
3.了解引用數(shù)組元素時的注意事項
在建立(聲明)一個數(shù)組之后,就可以使用數(shù)組了。使用數(shù)組就是對數(shù)組元素進行各種操作,如賦值、表達式運算、輸入、輸出等。
對數(shù)組元素的操作與對簡單變量的操作類似,但在引用數(shù)組元素的時候要注意以下幾點:
(1)數(shù)組聲明語句不僅可以定義數(shù)組、為數(shù)組分配存儲控件,而且還能對數(shù)組進行初始化,使得數(shù)值型數(shù)組的元素值初始化為0,字符型數(shù)組的元素值初始化為空等。
(2)引用數(shù)組元素的方法是在數(shù)組名后的括號中指定下標。例如:
t=A(5):s=B(3,4)
其中,A(5)表示數(shù)組A中索引值為5的元素,B(3,4)表示二維數(shù)組B中行下標為3、列下標為4的元素。注意與數(shù)組聲明語句中下標的上界相區(qū)別。
(3)引用數(shù)組元素時,數(shù)組名、數(shù)組類型和維數(shù)必須與數(shù)組聲明時一致。
(4)引用數(shù)組元素時,下標值應在數(shù)組聲明時所指定的范圍之內(nèi)。
(5)在同一過程中,數(shù)組與簡單變量不能同名。
4.應用靜態(tài)數(shù)組
【課堂演練】
【實例6-1】計算某組10個同學的總分、平均分。
【實現(xiàn)步驟】
(1)首先從“文件”菜單中選擇“新建工程”,在打開的“新建工程”對話框中雙擊“標準EXE”,新建一個標準工程。
(2)建立應用程序用戶界面。在窗體設計器中加入兩個標簽Label1、Label2和一個Command1,調(diào)整它們的位置及大小,如圖6.1所示。圖6.1建立用戶界面
(3)設置對象屬性,參見圖6.2。
(4)編寫事件過程代碼??紤]到要在不同的過程中使用數(shù)組,所以首先在模塊的通用段聲明數(shù)組。從“視圖”菜單中選擇“代碼窗口”,在“代碼窗口”中的對象下拉列表框中選“(通用)”,在事件程序下拉列表框中選“(聲明)”,輸入下面代碼:
OptionBase1
Dima(1To10)AsSingle“統(tǒng)計”按鈕Command1的單擊Click事件代碼為
PrivateSubCommand1_Click()
DimiAsInteger,totalAsSingle,averageAsSingle
Fori=1To10
a(i)=Val(InputBox(“請輸入第”&Str(i)&“個學生的成績”,“輸入成績”))
total=total+a(i)
Nexti
average=total/10
Label1.Caption=Label1.Caption+Format(total)
Label2.Caption=Label2.Caption+Format(average)
EndSub
(5)運行程序。單擊“統(tǒng)計”按鈕,依次輸入10個學生的成績,如圖6.2(a)所示,計算結果如圖6.2(b)所示。圖6.2依次輸入學生成績和統(tǒng)計結果
【實例6-2】輸入一串字符,統(tǒng)計各字母出現(xiàn)的次數(shù),不區(qū)分大小寫。
【實現(xiàn)步驟】
(1)問題分析。統(tǒng)計26個英文字母出現(xiàn)的個數(shù),必須聲明一個具有26個元素的數(shù)組,每個元素的下標與26個英文字母的次序?qū)?。從輸入的字符串中逐一取出字符,轉換成大寫字符(使得大小寫不分),進行判斷。
(2)建立用戶界面,并設置對象屬性,如圖6.3所示。圖6.3建立用戶界面和程序運行結果
(3)編寫事件代碼?!敖y(tǒng)計字母”命令按鈕Command1的Click事件代碼為
PrivateSubCommand1_Click()
Dima(1To26)AsInteger
DimiAsInteger,jAsInteger,cAsString*1
tot=Len(Text1) '求字符串的長度Fori=1Totot
c=UCase(Mid(Text1,i,1))'取一個字符,將其轉換成相應的大寫字母
Ifc>="A"Andc<="Z"Then
j=Asc(c)–65+1'將大寫字母A~Z轉換成1~26的下標
a(j)=a(j)+1 '對應數(shù)組元素加1
EndIf
Nexti
Forj=1To26 ‘輸出字母及其出現(xiàn)的次數(shù)
Ifa(j)>0Then
Label2.Caption=Label2.Caption&Chr$(j+64)&
“=”&a(j)&“”
EndIf
Nextj
EndSub
(4)運行程序,結果如圖6.3所示。
【實例6-3】隨機產(chǎn)生10個數(shù),用“選擇排序法”按遞增順序排序。
【實現(xiàn)步驟】
(1)問題分析。遞增選擇排序的思路是:
①對有n個數(shù)的序列,從中選出最小的數(shù)(遞增),與第1個數(shù)交換位置;
②除第1個數(shù)外,其余n?-?1個數(shù)再按步驟①的方法選出次小的數(shù),與第2個數(shù)交換位置。
③重復步驟②?n-1遍,最后構成遞增序列。為了便于理解,我們假定a數(shù)組有5個元素,下標從1To5,且數(shù)組中已賦值,上述過程如圖6.4所示。圖6.4選擇排序法示意圖(2)建立用戶界面,并設置對象屬性,如圖6.5所示。圖6.5用戶界面和排序結果
(3)編寫事件代碼。“排序”命令按鈕Command1的Click事件代碼為
PrivateSubCommand1_Click()
Dima(1To10)AsSingle
Randomize
Fori=1To10‘產(chǎn)生10個隨機數(shù)
a(i)=Int(Rnd*90+10)
Label1.Caption=Label1.Caption&a(i)&""Nexti
Fori=1To9 '進行排序
Forj=i+1To10
Ifa(j)<a(i)Then
t=a(i) '交換數(shù)據(jù)
a(i)=a(j)
a(j)=t
EndIf
Nextj
Nexti
Fori=1To10 ‘輸出排序后的結果
Label2.Caption=Label2.Caption&a(i)&“”
Nexti
Command1.Enabled=False
EndSub
(4)運行程序,結果如圖6.5所示。
【實例6-4】將文本框的數(shù)據(jù)存入數(shù)組中,編寫程序,要求能輸入個人情況,并可根據(jù)姓名進行查詢。
【實現(xiàn)步驟】
(1)建立應用程序用戶界面,并設置對象屬性,如圖6.6
所示。圖6.6建立用戶界面并設置對象屬性
(2)編寫事件代碼。在通用段聲明數(shù)組:
Dima(10,6)AsVariant‘定義變體數(shù)組,其數(shù)組元素可以是Integer、Long等類型
DimnumAsInteger
“輸入”命令按鈕Command1的Click事件代碼為
PrivateSubCommand1_Click()
StaticiAsInteger ’用Static聲明,只重設0一次,其值可保留到下次過程調(diào)用
Text1.SetFocus‘使程序開始時,光標(焦點)位于輸入框Text1中
i=i+1
Form1.Caption=“請輸入第”&Str(i+1)&“位同志的情況”
a(i,1)=Text1.Text ‘數(shù)據(jù)輸入
a(i,2)=Text2.Text
a(i,3)=Text3.Text
a(i,4)=Text4.Text
a(i,5)=Text5.Text
a(i,6)=Text6.Text
num=i
Text1.Text=“”‘清空各文本框內(nèi)容,為下次輸入或查詢做準備
Text2.Text=“”
Text3.Text=“”
Text4.Text=“”
Text5.Text=“”
Text6.Text=“”
EndSub“查詢”命令按鈕Command2的Click事件代碼為
PrivateSubCommand2_Click()
StaticiAsInteger
Fori=1Tonum
Ifa(i,1)=Text1.TextThen‘確定輸入姓名存在
Text2.Text=a(i,2)’調(diào)出相應數(shù)據(jù)
Text3.Text=a(i,3)
Text4.Text=a(i,4)
Text5.Text=a(i,5)
Text6.Text=a(i,6)
ExitSub‘跳出本過程
EndIf
Nexti
MsgBox“查無此人!”,vbOKOnly,“抱歉”
’姓名不相符時,輸出消息框
EndSub“結束”命令按鈕Command3的Click事件代碼為
PrivateSubCommand3_Click()
UnloadMe
EndSub
(3)運行程序,結果如圖6.7所示。圖6.7輸入和查詢個人情況
【實例6-5】矩陣的加法運算。兩個相同階數(shù)的矩陣A和
B相加,是將相應位置上的元素相加后放到同階矩陣C的相應位置。
【實現(xiàn)步驟】
(1)問題分析。定義三個二維數(shù)組a(n,m)、b(n,m)和c(n,m),利用雙重循環(huán)和隨機函數(shù)產(chǎn)生a(n,m)和b(n,m)中各元素的值。然后通過雙重循環(huán)得到c(n,m)。
(2)設計程序界面,并設置對象屬性。選擇“新建”工程,進入窗體設計器,在窗體中增加三個圖片框Picture1~Picture3,兩個標簽Label1、Label2和兩個命令按鈕Command1、Command2。設置對象屬性如圖6.8所示。圖6.8設計窗體界面與運行程序
(3)編寫代碼。在“通用”段聲明數(shù)組:
Dima(5,3)AsInteger,b(5,3)AsInteger
“重置”按鈕Command1的Click事件代碼為
PrivateSubCommand1_Click()
Forn=1To5 ‘控制矩陣行數(shù)
Form=1To3
'控制矩陣列數(shù)
x=Int(Rnd*100):a(n,m)=Val(x)‘產(chǎn)生隨機數(shù)
x=Int(Rnd*100):b(n,m)=Val(x)’產(chǎn)生隨機數(shù)
Next
Next
Picture1.Cls:Picture2.Cls:Picture3.Cls
‘清空圖片框
Picture1.CurrentY=80:Picture2.CurrentY=80
’控制輸出位置
Forn=1To5
Form=1To3
Picture1.PrintFormat(a(n,m),“@@@@”); ‘輸出產(chǎn)生的隨機數(shù)
Picture2.PrintFormat(b(n,m),“@@@@”); ’輸出產(chǎn)生的隨機數(shù)
Next
Picture1.Print:Picture2.Print ‘換行
Next
EndSub“計算”按鈕Command2的Click事件代碼為
PrivateSubCommand2_Click()
Dimc(5,3)AsInteger
Fori=1To5
Forj=1To3
c(i,j)=a(i,j)+b(i,j)
‘求兩矩陣相加的各項值
Next
Next
Picture3.Cls'清空
Picture3.CurrentY=80'確定輸出位置
Forn=1To5
Form=1To3
Picture3.PrintFormat(c(n,m),"@@@@");'輸出結果數(shù)據(jù)
Next
Picture3.Print‘換行
Next
EndSub
(4)運行程序。單擊“重置”按鈕產(chǎn)生原始數(shù)據(jù),單擊“計算”按鈕得到相加結果。如果再次單擊“重置”按鈕,則重新產(chǎn)生數(shù)據(jù),如圖6.9所示。圖6.9兩矩陣相加運行結果任務6.3動態(tài)數(shù)組
任務導入
對于前一種情況,可以一面輸入數(shù)據(jù)一面隨著數(shù)據(jù)量的增加而重新聲明數(shù)組的大??;而對于后一種情況,可在需要使用特別大數(shù)組的過程中重新聲明數(shù)組大小,離開該過程前取消該數(shù)組。
本任務將學習動態(tài)數(shù)組的程序設計方法。學習目標
(1)會使用動態(tài)數(shù)組編寫程序。
(2)會使用ForEach…Next語句對數(shù)組中的元素進行處理。任務實施
1.創(chuàng)建動態(tài)數(shù)組
創(chuàng)建動態(tài)數(shù)組的步驟如下:
(1)用Public語句(公用數(shù)組)、Dim語句(模塊級數(shù)組)、Static語句或Private語句(局部數(shù)組)在過程中聲明一個未指明大小及維數(shù)的空數(shù)組,這樣就將數(shù)組聲明為動態(tài)數(shù)組了。語法格式為
Public|Private|Dim|Static〈數(shù)組名〉()As〈類型〉
(2)用ReDim語句分配實際的元素個數(shù)。語法格式為
ReDim[Preserve]〈數(shù)組名〉(〈維數(shù)定義〉)[As〈類型〉]
例如,第一次聲明在模塊級所建立的動態(tài)數(shù)組a:
Dima()AsInteger
然后,在過程中給數(shù)組分配空間:
PrivateSubForm_Activate()
ReDima(9,19)
EndSub這里的ReDim語句給a分配一個10×20的整數(shù)矩陣(元素總數(shù)為200)空間。
【說明】
(1)ReDim語句只能出現(xiàn)在過程中。與Dim語句、Static語句不同,ReDim語句是一個可執(zhí)行語句,由于這一語句的存在,應用程序在運行時將執(zhí)行一個操作。
(2)每次運行程序時,ReDim語句都會清除數(shù)組內(nèi)容,當前存儲在數(shù)組中的值將全部丟失,VB重新將數(shù)組元素的值置為0(對Numeric數(shù)組)、置為零長度字符串(對String數(shù)組)或置為Empty(對Variant數(shù)組)。此時可以用Preserve關鍵字保留原先的數(shù)據(jù)。
(3)聲明動態(tài)數(shù)組的時候并不指定數(shù)組的維數(shù),數(shù)組的維數(shù)由第一次出現(xiàn)的ReDim語句指定。
(4)對于任一維數(shù),ReDim語句都能改變元素的數(shù)目及其上下界,但是,數(shù)組的維數(shù)不能改變。
2.保留動態(tài)數(shù)組的原有數(shù)據(jù)
使用ReDim語句時,將清除數(shù)組中的原有數(shù)據(jù)。但是,有時需要改變數(shù)組大小而又不丟失數(shù)組中的數(shù)據(jù),這時就可以使用具有Preserve關鍵字的ReDim語句了。
使用具有Preserve關鍵字的ReDim語句可增加數(shù)組大小,又不丟失原數(shù)據(jù)。例如:
ReDima(2,4)
ReDimPreservea(2,6)原數(shù)組中數(shù)據(jù)均可保留,且增加了a(1,5)、a(1,6)、a(2,5)、a(2,6)四個位置。
如果聲明ReDima(3,4),將會清除原數(shù)組內(nèi)容。
使用Preserve關鍵字,只能改變多維數(shù)組中最后一維的上界,而不能改變維數(shù)。如果數(shù)組就是一維的,則可以重定義該維的大小,因為它是最末維,也是僅有的一維。如果數(shù)組是二維或多維的,則只能改變其最末維才可同時保留數(shù)組中的內(nèi)容,若改變了其他維或最后一維的下界,運行時就會出錯。
【課堂演練】
【實例6-6】用動態(tài)數(shù)組修改【實例6-4】,輸入個人情況并可根據(jù)姓名進行查詢。
【實現(xiàn)步驟】
(1)問題分析。首先聲明一個未指明維數(shù)及大小的數(shù)組。如果同【實例6-4】一樣直接聲明ReDima(1,7),則原先輸入的數(shù)組內(nèi)容完全清除,所以必須使用ReDimPreservea(i,7),但是VB規(guī)定的使用Preserve保留原數(shù)組內(nèi)容只限于最后一個維數(shù)擴展長度,此法不能實現(xiàn)。
(2)建立應用程序用戶界面,并設置對象屬性,如【實例6-4】中一樣,只需修改事件編碼。
在通用段聲明數(shù)組:
Dima()AsVariant‘聲明一個未指定維數(shù)及大小的數(shù)組
DimnumAsInteger修改“輸入”命令按鈕Command1的Click事件代碼如下:
PrivateSubCommand1_Click()
StaticiAsInteger
Text1.SetFocus ‘使程序開始時,光標(焦點)位于輸入框Text1中
i=i+1
ReDimPreservea(7,i)'聲明動態(tài)數(shù)組,保留原先數(shù)據(jù)Form1.Caption="請輸入第"&Str(i+1)&"位同志的情況"
a(1,i)=Text1.Text
a(2,i)=Text2.Text
a(3,i)=Text3.Text
a(4,i)=Text4.Text
a(5,i)=Text5.Text
a(6,i)=Text6.Textnum=i
Text1.Text=""
Text2.Text=""
Text3.Text=""
Text4.Text=""
Text5.Text=""
Text6.Text=""
EndSub“查詢”命令按鈕Command2的Click事件代碼如下:
PrivateSubCommand2_Click()
StaticiAsInteger
Fori=1Tonum
Ifa(1,i)=Text1.TextThen
Text2.Text=a(2,i)
Text3.Text=a(3,i)
Text4.Text=a(4,i)
Text5.Text=a(5,i)
Text6.Text=a(6,i)
ExitSub ‘跳出本過程
EndIf
Nexti
MsgBox“查無此人!”,vbOKOnly,“抱歉”
EndSub“結束”命令按鈕Command3的Click事件代碼如下:
PrivateSubCommand3_Click()
UnloadMe
EndSub
(3)運行程序,結果同【實例6-4】。
【實例6-7】編寫程序,輸出楊輝三角形,如圖6.10所示。圖6.10楊輝三角形
【實現(xiàn)步驟】
(1)問題分析。楊輝三角形中的各行是二項式(a+b)
n展開式中各項的系數(shù)。由圖6.10的排列格式可以看出,楊輝三角形每行的第一列和最后一列均為1,其余各項的值都是其上一行中前一列元素與后一列元素之和。上一行同一列沒有元素時認為是0。由此可得算法為
A(i,j)
=A(i-1,j-1)+A(i-1,j)
(2)建立應用程序用戶界面并設置對象屬性,參見圖6.11所示。圖6.11楊輝三角形
(3)編寫代碼。
在模塊的通用段聲明一個動態(tài)數(shù)組:
Dima()
為了能輸入行數(shù)并按回車后可以得到各項,編寫文本框Text1的按鍵(KeyPress)事件代碼如下:
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
DimnAsInteger
IfKeyAscii=13Then‘按回車鍵時執(zhí)行
n=Val(Text1.Text)’在文本框中輸入的行數(shù)
Ifn>10Then‘設定不超過10行
MsgBox“請不要超過10”’消息框
ExitSub
'退出過程
EndIf
ReDima(n,n)‘分配動態(tài)數(shù)組實際的元素個數(shù)
Fori=1Ton
a(i,1)=1:a(i,i)=1’使得每行兩邊的元素值為1
Next
PrintTab(20);Format(1,"!@@@")&Chr(13)
PrintTab(18);Format(1,“!@@@”)&Space(2)&Format(1,“!@@@”)&Chr(13)
Fori=3Ton
PrintTab(20–i*2);Format(a(i,1),“!@@@@”)&Space(2);
Forj=2Toi–1
a(i,j)=a(i–1,j–1)+a(i–1,j)
PrintFormat(a(i,j),"!@@@@@");
Next
PrintSpace(2)&Format(a(i,i),“!@@@@”)&Chr(13)
Next
EndIf
EndSub
(4)運行程序,在文本框中輸入行數(shù),如8,回車后顯示出楊輝三角形,如圖6.11所示。
4.了解ForEach…Next語句
與For…Next循環(huán)語句類似,F(xiàn)orEach…Next循環(huán)語句也被用來執(zhí)行指定重復次數(shù)的循環(huán)。但是,F(xiàn)orEach…Next語句專門用于數(shù)組或?qū)ο蠹现械拿總€元素。
ForEach…Next語句的語法格式為
ForEach〈成員〉In〈數(shù)組〉
[〈語句組〉]
[ExitFor]
Next[〈成員〉]
【說明】
(1)〈成員〉是一個Variant(變體)型變量,代表數(shù)組中的每個元素。
(2)〈數(shù)組〉是一個數(shù)組名,沒有括號和上下界。
5.理解ForEach…Next語句的執(zhí)行過程
用ForEach…Next語句可以對數(shù)組中的元素進行處理,包括查詢、顯示或讀取。它所重復執(zhí)行的次數(shù)由數(shù)組中元素的個數(shù)確定,也就是說,數(shù)組中有多少個元素,就自動重復執(zhí)行多少次。例如:
Dima(1To8)
ForEachxIna
Printx;
Nextx
以上程序中的Print語句重復八次(因為數(shù)組a中有八個元素),每次輸出數(shù)組中一個元素的值。這里的x類似于For…Next循環(huán)中的循環(huán)控制變量,但不需要為其提供初值和終值,而是根據(jù)數(shù)組元素的個數(shù)確定執(zhí)行循環(huán)體的次數(shù)。此外,x的值處于不斷的變化之中:開始執(zhí)行時,x是數(shù)組第一個元素的值;執(zhí)行完一次循環(huán)體后,x變?yōu)閿?shù)組第二個元素的值……當x為最后一個元素的值時,執(zhí)行最后一次循環(huán)。
【課堂演練】
【實例6-8】用ForEach…Next語句求1+2+3+…+100的值。
【實現(xiàn)步驟】
(1)建立用戶界面并設置對象屬性,如圖6.12所示。圖6.12建立用戶界面和設置對象屬性
(2)編寫事件代碼。編寫“計算”命令按鈕Command1的Click事件代碼:
PrivateSubCommand1_Click()
Dimx(100),a ‘聲明數(shù)組和變量
Fori=1To100’為數(shù)組元素賦值
x(i)=i
Nexti
ForEachaInx() ‘求和
s=s+a
Next
Label1.Caption=s ’輸出結果
EndSub
(3)運行程序,結果如圖6.12所示。任務6.4控件數(shù)組
任務導入
許多同樣的數(shù)據(jù)類型保存在一個變量中稱為數(shù)組;同理,許多相同的控件集合在一起就是控件數(shù)組。使用控件數(shù)組可以方便地對界面上相同的控件進行統(tǒng)一編程,以簡化代碼。
本任務將學習控件數(shù)組的概念和使用方法。學習目標
(1)理解控件數(shù)組的概念。
(2)會建立控件數(shù)組。
(3)會使用控件數(shù)組編程。任務實施
1.理解控件數(shù)組的概念
控件數(shù)組是由一組相同類型的控件組成的,它們共用一個控件名,具有相同的屬性。當建立控件數(shù)組時,系統(tǒng)給每個元素賦一個唯一的索引號(Index)。通過屬性窗口的Index屬性可以知道該控件的下標是多少,第一個控件的下標是0。例如,控件數(shù)組cmdName(5)表示控件數(shù)組名為cmdName的第六個
元素??丶?shù)組可以在命令按鈕組、單選鈕組、復選框組、文本框組、標簽組等控件中使用。
控件數(shù)組的特點為:
具有相同的名稱(Name)。
用下標索引值(Index)來識別各個控件。
控件數(shù)組適用于若干個控件執(zhí)行相似操作的場合,控件數(shù)組共享同樣的事件過程。
2.建立控件數(shù)組
可以使用下述三種方法之一建立控件數(shù)組:
為控件起相同的名字。
復制現(xiàn)有控件。
設置控件的Index屬性為非Null數(shù)值。
1)通過為控件起相同的名字建立控件數(shù)組
(1)畫出控件數(shù)組中要添加的控件(必須為同一類型的控件),并且決定哪一個控件作為數(shù)組中的第一個元素。
(2)選定控件,將其Name屬性設置成數(shù)組名稱。
(3)在為數(shù)組中的其他控件輸入相同名稱時,VB將顯示一個對話框,要求確認是否要創(chuàng)建控件數(shù)組。此時回答“是”,確認此操作。例如,若控件數(shù)組的第一個元素名為Command1,此時選擇另一個命令按鈕添加到數(shù)組中,并將其名稱也設置為Command1,將顯示這樣一段信息:“已經(jīng)有一個控件為'Command1'。創(chuàng)建一個控件數(shù)組嗎?”。選擇“是”按鈕,確認操作,如圖6.13所示。圖6.13確認創(chuàng)建控件數(shù)組
2)通過復制現(xiàn)有控件建立控件數(shù)組
(1)畫出控件數(shù)組中的第一個控件。
(2)當控件獲得焦點時,單擊“復制”按鈕。
(3)單擊“粘貼”按鈕,VB將顯示一個對話框詢問是否確認創(chuàng)建控件數(shù)組?;卮稹笆恰保_認操作,得到控件數(shù)組中的第二個控件。
(4)繼續(xù)單擊“粘貼”按鈕,可得到控件數(shù)組中的其他控件。每個新數(shù)組元素的索引值與其添加到控件數(shù)組中的次序相同,如圖6.14中第二次粘貼的Option1控件,其Index的值為2。并且在添加控件時,大多數(shù)可視屬性,如高度、寬度和顏色等,都將從數(shù)組中第一個控件復制到新控件中。圖6.14新數(shù)組元素的索引值與其添加到控件數(shù)組中的次序一樣
【實例6-9】設計一個窗體,輸入兩個數(shù),根據(jù)不同運算符計算結果。
【實現(xiàn)步驟】
(1)問題分析。假設需要進行的有加、減、乘、除、整除、余數(shù)、指數(shù)和字符串連接8種運算。根據(jù)運算方式,顯示計算結果。
(2)建立應用程序用戶界面,并設置對象屬性。利用Label控件,在窗體上拖曳出四個標簽對象Label1~Label4;利用TextBox控件,拖曳出Text1和Text2兩個文本框?qū)ο?;利用Frame控件,拖曳出Frame1框?qū)ο?。利用OptionButton控件,拖曳出置于Frame1中的Option1單選鈕,單擊“復制”按鈕,將Option1單選鈕的對象復制到剪貼板中,再選中Frame1對象,單擊“粘貼”按鈕,單擊“是”,表示將產(chǎn)生一個屬于單選鈕類別的控件數(shù)組。將Frame1對象內(nèi)左上角新產(chǎn)生的Option1對象拖曳到Frame1框內(nèi)已有項目的下方,如此重復粘貼,直到產(chǎn)生8個Option1對象,如圖6.15(a)所示,并依次改變標題名。圖6.15用戶界面與程序運行結果
(3)編寫程序代碼。單選鈕Option1的Click事件代碼:
PrivateSubOption1_Click(IndexAsInteger)
DimxAsSingle,yAsSingle
x=Val(Text1.Text)
y=Val(Text2.Text)
SelectCaseIndex‘Index值從0開始
Case0’加
Label4.Caption=x+y
Case1 '減
Label4.Caption=x–y
Case2 '乘
Label4.Caption=x*y
Case3 '除
Label
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年農(nóng)產(chǎn)品的安全試題及答案
- 保健按摩師中級練習卷含答案
- 中醫(yī)基礎理論試題-定科練習卷含答案
- 2025年職業(yè)病試題及答案
- 2025年酒醉心理測試題及答案
- 2025年大學藝術類試題及答案
- 2025年裝配電工筆試題及答案
- 2025年高一物理動能試題及答案
- 2025年校招專員面試試題及答案
- 2025年廣西單招數(shù)學試題及答案
- 部編版六年級下冊語文教案(全冊)
- 2022年湖北成人學士學位英語真題及答案
- DB43∕T 801-2013 二次張拉低回縮鋼絞線豎向預應力短索錨固體系設計、施工和驗收規(guī)范
- 附表1:網(wǎng)絡及信息安全自查表
- 奇妙的海洋生物
- 精裝修工程一戶一驗記錄表
- 公共場所健康證體檢表
- 普通高等學校獨立學院教育工作合格評估指標體系(第六稿)
- 哈薩克斯坦共和國有限責任公司和補充責任公司法
- 多維閱讀第13級—A Stolen Baby 小猩猩被偷走了
- 三愛三節(jié)-主題班會
評論
0/150
提交評論