版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
VisualBasic程序設(shè)計(jì)簡(jiǎn)明教程第三版北京印刷學(xué)院計(jì)算機(jī)系范士喜fanshixi@1第5章數(shù)組和自定義類型
5.1數(shù)組的概念5.2數(shù)組的基本操作和排序5.3列表框和組合框控件5.4自定義類型及其數(shù)組5.5綜合應(yīng)用本章目錄25.1數(shù)組的概念1.引例例5.1
求100個(gè)學(xué)生的平均成績(jī),并統(tǒng)計(jì)高于平均分的人數(shù)。用簡(jiǎn)單變量和循環(huán),求平均成績(jī)程序段如下:
aver=0Fori=1To100mark=InputBox("輸入學(xué)生成績(jī)")aver=aver+markNextiaver=aver/100問題(1)mark只能放一個(gè)學(xué)生的成績(jī),無法統(tǒng)計(jì)高于平均分的人數(shù)。(2)若用簡(jiǎn)單變量保存100個(gè)學(xué)生的成績(jī),則需定義100個(gè)變量和使用100句輸入語句。由此引入了數(shù)組。本章目錄mark3用數(shù)組解決問題的程序如下:
Dimmark(99)AsInteger'聲明數(shù)組markDimaver!,overn%,i%aver=0Fori=0To99'輸入成績(jī),求分?jǐn)?shù)和
mark(i)=InputBox("輸入學(xué)生的成績(jī)")aver=aver+mark(i)Nextiaver=aver/100'求100人的平均分
overn=0Fori=0To99'統(tǒng)計(jì)高于平均分的人數(shù)
Ifmark(i)>averThenovern=overn+1Nexti
MsgBox("平均分:"&aver&"高于平均分人數(shù):"&overn)
本章目錄mark(99)mark(98)…mark(2)mark(1)mark(0)4數(shù)組:
不是一種數(shù)據(jù)類型,而是一組相同類型的變量的集合。作用:用一個(gè)數(shù)組名代表邏輯上相關(guān)的一批數(shù)據(jù),用下標(biāo)表示該數(shù)組中的各個(gè)元素,和循環(huán)語句結(jié)合使用,使得程序書寫簡(jiǎn)潔。使用:必須先聲明后使用本章目錄55.1.2數(shù)組聲明一維數(shù)組
Dim數(shù)組名([下標(biāo)下界To]
上界)
[As類型]說明:下標(biāo)下界缺省為0,下標(biāo)上界為常數(shù)。數(shù)組大小為:下標(biāo)上界-下標(biāo)下界+1。作用:聲明了數(shù)組名、類型、維數(shù)、數(shù)組大小在內(nèi)存分配一塊連續(xù)的區(qū)域。本章目錄6例:Dimmark(99)AsInteger
聲明了一維定長(zhǎng)整型數(shù)組mark
,共有100個(gè)元素,下標(biāo)范圍為0To99;mark數(shù)組的各元素是mark(0),mark(1),…,mark(99);mark(i)表示由下標(biāo)i的值決定是哪一個(gè)元素。mark數(shù)組內(nèi)存分配如下:mark(99)mark(98)…mark(2)mark(1)mark(0)每個(gè)數(shù)組元素有一個(gè)唯一的順序號(hào),下標(biāo)不能超出數(shù)組聲明時(shí)的上、下界范圍,否則會(huì)產(chǎn)生“下標(biāo)越界”錯(cuò)誤
。數(shù)組元素的使用規(guī)則與同類型的簡(jiǎn)單變量相同本章目錄7多維數(shù)組聲明
Dim數(shù)組名(([下標(biāo)1下界To]
上界1,([下標(biāo)下界2To]
上界2…)
[As類型]下標(biāo)數(shù)決定了數(shù)組的維數(shù),數(shù)組的大小為每一維大小的乘積。例Dimx(2,4)AsLong聲明了一個(gè)長(zhǎng)整型的二維數(shù)組
x;共占據(jù)3×5個(gè)長(zhǎng)整型變量的空間
x(1,4)x(1,3)x(1,2)x(1,1)x(1,0)x(2,4)x(2,3)x(2,2)x(2,1)x(2,0)x(0,4)x(0,3)x(0,2)x(0,1)x(0,0)本章目錄85.1.3動(dòng)態(tài)數(shù)組及聲明
建立動(dòng)態(tài)數(shù)組要分兩步:用Dim語句聲明數(shù)組,但不能指定數(shù)組大小Dim
數(shù)組名()As數(shù)據(jù)類型用ReDim語句動(dòng)態(tài)地分配元素個(gè)數(shù)ReDim
數(shù)組名
(下標(biāo)[,下標(biāo)2…])例:Dims()AsSingleSubForm_Load()
…
ReDims(4,8)
…
EndSub
本章目錄9定義動(dòng)態(tài)數(shù)組大小注意:
Dim
是說明語句,可出現(xiàn)在程序的任何地方,而ReDim
是執(zhí)行語句,只能在過程中在過程中可多次使用ReDim語句來改變數(shù)組的大小,但不能改變維數(shù)和類型可在ReDim
后加Preserve參數(shù)用來保留數(shù)組中的數(shù)據(jù),若使用Preserve參數(shù)后,只能改變最后一維的大小。例5.2編一個(gè)程序,顯示有n個(gè)數(shù)的非波那契數(shù)序列本章目錄10PrivateSubCommand1_Click()Dimx()AsIntegerDimn%,i%n=Val(InputBox("輸入序列數(shù)"))
ReDim
x(n-1)x(0)=1x(1)=1Fori=2Ton-1
x(i)=x(i-1)+x(i-2)NextiFori=0Ton-1Printx(i),If(i+1)Mod5=0ThenPrintNextEndSub115.2數(shù)組的基本操作1、數(shù)組的輸入
通過TextBox控件或InputBox函數(shù)輸入Dims(3,4)ASIntegerFori=0To3Forj=0To4
s(I,j)=
InputBox("輸入"&i&“,"&j&"元素")NextjNexti本章目錄122、數(shù)組的輸出例5.3
形成5×5的方陣,分別輸出方陣中各元素、上三角和下三角元素
本章目錄方陣規(guī)律:第一行的元素為0~4,以后每一行是前一行對(duì)應(yīng)元素增加5上三角規(guī)律:
每一行的起始列與行號(hào)相同,只要控制內(nèi)循環(huán)的初值
用Tab函數(shù)或Space定位控制輸出的空格,13PrivateSubForm_Click()
Dimsc%(4,4)
Picture1.Print"產(chǎn)生方陣數(shù)據(jù)"
Fori=0To4
Forj=0To4
sc(i,j)=i*5+j
Picture1.PrintTab(j*5);sc(i,j);
Nextj
Picture1.Print'換行
Nexti
Picture2.Print"顯示上三角數(shù)組元素"
Fori=0To4
Forj=iTo4
Picture2.PrintTab(j*5);sc(i,j);
Nextj
Picture2.Print'換行
Nexti
Picture3.Print"顯示下三角數(shù)組元素"
Fori=0To4
Forj=0Toi
Picture3.PrintTab(j*5);sc(i,j);
Nextj
Picture3.Print
Nexti
EndSub143、求數(shù)組和、最值、位置例5.4
求一維數(shù)組中各元素之和、最小數(shù)組元素,并將最小值數(shù)組元素與數(shù)組中第一個(gè)元素交換求元素和通過循環(huán)將每個(gè)元素進(jìn)行累加求數(shù)組中最小元素假設(shè)第一個(gè)元素為最小,然后將該數(shù)與其他元素逐一比較,若發(fā)現(xiàn)小于最小值,就用新值替換最小值,同時(shí)記錄下標(biāo)值。求最大值的方法與求最小值相似本章目錄15PrivateSubCommand1_Click()
Dima,i%,min%,imin%,sum%,t%a=Array(26,43,61,87,33,19,37,59,76,69)min=a(0):imin=0:sum=a(0)'假定a(0)元素為最小值
Fori=1ToUBound(a)sum=sum+a(i)Ifa(i)<minThenmin=a(i)
imin=iEndIfNextit=a(0):a(0)=a(imin):a(imin)=tPrint"數(shù)組元素和=";sum,"最小元素值為:";a(0)EndSub164、交換元素下標(biāo)0123456789初值26436187331937597669下標(biāo)0123456789交換19436187332637597669本章目錄175、數(shù)組排序排序是將一組數(shù)按遞增或遞減的次序排列,例如按學(xué)生的成績(jī)、球賽積分等排序。排序的算法有許多,常用的有選擇法、冒泡法、插入法、合并排序等。(1)選擇法排序基本思想:每次在若干個(gè)無序數(shù)中找最小(大)數(shù),并放在相應(yīng)的位置。本章目錄18例對(duì)于有n個(gè)數(shù)的數(shù)組,按遞增次序排序的步驟:1)從n個(gè)數(shù)中找出最小數(shù)的下標(biāo),出了內(nèi)循環(huán),最小數(shù)與第1個(gè)數(shù)交換位置;通過這一輪排序,第1個(gè)數(shù)已確定好。2)除已排序的數(shù)外,其余數(shù)再按步驟1)的方法選出最小的數(shù),與未排序數(shù)中的第1個(gè)數(shù)交換位置。3)重復(fù)步驟2),最后構(gòu)成遞增序列。選擇法演示本章目錄19例5.5
對(duì)已知存放在數(shù)組中的6個(gè)數(shù),用選擇法按遞增順序排序。
原始數(shù)據(jù)869327a(1)a(2)a(3)a(4)a(5)a(6)第1輪比較269387
a(2)a(3)a(4)a(5)a(6)第2輪比較239687
a(3)a(4)a(5)a(6)第3輪比較236
987
a(4)a(5)a(6)第4輪比較236789
a(5)a(6)第5輪比較236789選擇法排序過程示意
本章目錄20PrivateSubCommand1_Click()Dima(),iMin%,n%,i%,j%,t%a=Array(8,6,9,3,2,7)n=UBound(a)'獲得數(shù)組的下標(biāo)上界
Fori=0Ton-1'進(jìn)行n-1輪比較
iMin=i'對(duì)第i輪比較時(shí),初始假定第i個(gè)元素最小
Forj=i+1Ton'在數(shù)組i+1~n個(gè)元素中選最小元素的下標(biāo)
Ifa(j)<a(iMin)TheniMin=jNextjt=a(i)'i+1~n個(gè)元素中選出的最小元素與第i個(gè)元素交換
a(i)=a(iMin)
a(iMin)=tNextiFori=LBound(a)ToUBound(a)Printa(i);Next
EndSub21(2)冒泡法排序基本思想是:
1)從第一個(gè)元素開始,對(duì)數(shù)組中兩兩相鄰的元素比較,將值較小的元素放在前面,值較大的元素放在后面,一輪比較比較完畢,一個(gè)最大的數(shù)沉底成為數(shù)組中的最后一個(gè)元素,一些較小的數(shù)如同氣泡一樣上浮一個(gè)位置。2)n個(gè)數(shù),經(jīng)過n-1輪比較后完成排序。冒泡法演示本章目錄22冒泡法排序
原始數(shù)據(jù)869327a(1)a(2)a(3)a(4)a(5)a(6)第1輪比較683279a(1)a(2)a(3)a(4)a(5)
第2輪比較632789a(1)a(2)a(3)a(4)
第3輪比較326789a(1)a(2)a(3)
第4輪比較236789a(1)a(2)
第5輪比較236789例5.6用冒泡排序法實(shí)現(xiàn)例5.5的問題。本章目錄23PrivateSubCommand1_Click()Dima(),iMin%,n%,i%,j%,t%a=Array(8,6,9,3,2,7)n=UBound(a)'獲得數(shù)組的下標(biāo)上界
Fori=0Ton-1'有n+1個(gè)數(shù),進(jìn)行n趟比較
Forj=0Ton-1-i'在每一趟比較對(duì)n-1-i個(gè)元素中兩兩相鄰比較,大數(shù)沉底
Ifa(j)>a(j+1)Thent=a(j):a(j)=a(j+1):a(j+1)=t'次序不對(duì)交換
EndIfNextjNextiFori=0Ton:Printa(i);:NextiEndSub24(3)插入數(shù)據(jù)
插入數(shù)據(jù)基本思想是:1)首先查找待插入數(shù)據(jù)在數(shù)組中的位置k;2)然后從最后一個(gè)元素開始往前直到下標(biāo)為k的元素依次往后移動(dòng)一個(gè)位置;3)第k個(gè)元素的位置騰出,將數(shù)據(jù)插入。例5.7在有序數(shù)組a中插入數(shù)值x。
本章目錄數(shù)據(jù)插入演示25PrivateSubForm_Click()Dima(),i%,k%,x%,n%a=Array(1,4,7,9,12,23,56)n=UBound(a)'獲得數(shù)組的上界
x=14Fork=0Ton'查找欲插入數(shù)x在數(shù)組中的位置
Ifx<a(k)ThenExitForNextk
ReDimPreservea(n+1)'數(shù)組增加一個(gè)元素
Fori=nTokStep-1'數(shù)組元素后移一位,騰出位置
a(i+1)=a(i)Nexti
a(k)=x'數(shù)x插入在對(duì)應(yīng)的位置,使數(shù)組保持有序
Fori=0Ton+1'顯示插入后的各數(shù)組元素
Printa(i);NextiEndSub26(4)刪除數(shù)據(jù)刪除操作首先也是要找到欲刪除的元素的位置k;然后從k+1到n個(gè)位置開始向前移動(dòng);最后將數(shù)組元素減1。
例5.8要將值為13的元素刪除。
本章目錄數(shù)據(jù)刪除演示27PrivateSubForm_Click()Dima(),i%,k%,x%,n%a=Array(1,4,7,9,12,14,23,56)n=UBound(a)'獲得數(shù)組的上界
x=14Fork=0Ton'查找欲刪除的數(shù)組元素位置
Ifx=a(k)ThenExitForNextkIfk>nThenMsgBox("找不到此數(shù)據(jù)"):ExitSubFori=k+1Ton'將x后的元素左移
a(i-1)=a(i)Nextin=n-1
ReDimPreservea(n)'數(shù)組元素減少一個(gè)
Fori=0Ton'顯示刪除后的各數(shù)組元素
Printa(i);NextiEndSub285.3列表框和組合框列表框和組合框?qū)嵸|(zhì)是一維字符串?dāng)?shù)組的使用列表框可顯示多個(gè)選項(xiàng)供用戶選擇,不能直接修改其中的內(nèi)容。組合框組合了文本框和列表框的特性而形成的一種控件。組合框有3種式樣。本章目錄291、列表框和組合框重要屬性(1)
ListList是一個(gè)集合(2)ListIndex
選項(xiàng)的序號(hào)(從0開始)(3)ListCount項(xiàng)目數(shù)量
(4)Sorted排序(5)Text被選定的文本內(nèi)容
本章目錄30List1.ListIndex=2List1.ListCount=6List1.Sorted=FalseList1.Text為
"C/C++程序設(shè)計(jì)"
List1.List(List1.ListIndex)等于List1.Text本章目錄312、常用方法
AddItem方法把一個(gè)項(xiàng)目加入列表
對(duì)象.AddItem
項(xiàng)目字符串[,索引值]索引值:決定新增項(xiàng)在列表中的位置,如果省略,則新增項(xiàng)目添加在最后。
RemoveItem方法刪除列表中指定項(xiàng)目對(duì)象.RemoveItem
索引值
Clear
清除列表中所有項(xiàng)目例如:List1.Clear 全部清除本章目錄323、重要事件列表框:Click、DblClick組合框:Click例5.9編寫一個(gè)能對(duì)列表框進(jìn)行項(xiàng)目添加、修改和刪除的應(yīng)用程序。關(guān)鍵:1)獲得選中的下標(biāo)ListIndex2)不能直接修改列表框,先將選項(xiàng)顯示在文本框中,更改文本框中內(nèi)容后,再更新列表框
本章目錄334、應(yīng)用例5.10編寫一個(gè)使用屏幕字體、字號(hào)的程序
例5.11使用列表框?qū)崿F(xiàn)排序、查找、刪除例5.12使用組合框?qū)κ『椭陛犑忻Q管理本章目錄345.4自定義類型及數(shù)組1、概念和定義數(shù)組存放性質(zhì)相同的數(shù)據(jù)集合。若不同類型信息作為一個(gè)整體來描述,例如姓名、性別、出生年月等,通過Type語句來實(shí)現(xiàn)。
Type自定義類型名
元素名1As數(shù)據(jù)類型名
…
元素名nAs數(shù)據(jù)類型名
EndType本章目錄35例如,定義一個(gè)有關(guān)學(xué)生信息的類型:TypeStudType
'StudType為自定義類型名
NameAs
String*5
'姓名
SexAs
String*1
'性別
TelephoneAs
Long
'電話
SchoolAs
String*10
'學(xué)校EndType自定義類型不能在過程內(nèi)定義,一般放在標(biāo)準(zhǔn)模塊文件,默認(rèn)為Public;若在窗體模塊的通用聲明段定義,必須加Private。
本章目錄362、自定義類型變量的使用
定義了自定義類型,就可在變量的聲明時(shí)使用。
Dim變量名As
自定義類型名例如,如下語句:
DimS1AsStudType,S2AsStudType
聲明S1、S2為兩個(gè)同種類型的變量本章目錄37注意:不要混淆StudType
和S1,前者如同Integer等的類型名,后者根據(jù)該類型分配所需的內(nèi)存空間,存儲(chǔ)各成員數(shù)據(jù)。(2)類型變量和數(shù)組相同之處它們都是由若干個(gè)成員組成;不同之處,前者的成員代表不同性質(zhì)、不同類型的數(shù)據(jù),以各個(gè)不同的成員名表示;而數(shù)組一般存放的是同種性質(zhì)、同種類型的數(shù)據(jù),以下標(biāo)表示不同的元素。本章目錄383、自定義類型變量成員的引用
引用自定義類型變量中的某個(gè)成員,形式如下:
自定義類型變量名.成員名例如,S1.NameS1變量中的姓名
S1.S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度生物科技抵押貸款反擔(dān)保合同3篇
- 二零二五年度版權(quán)許可使用合同:影視作品授權(quán)協(xié)議2篇
- 二零二五年度房地產(chǎn)股權(quán)投資基金合同3篇
- 2024版砌體抹灰分包合同模板
- 2024秋季房地產(chǎn)經(jīng)紀(jì)服務(wù)合同
- 家校深度融合共筑孩子未來夢(mèng)
- 二零二五年度綠色生態(tài)建筑工程專項(xiàng)借款合同3篇
- 2025年度撫養(yǎng)權(quán)變更涉及子女醫(yī)療費(fèi)用合同模板
- 二零二五年度知識(shí)產(chǎn)權(quán)侵權(quán)和解賠款調(diào)解合同
- 二零二五年度員工入股生物科技項(xiàng)目合作協(xié)議
- 福建省廈門市2023-2024學(xué)年高二上學(xué)期期末考試語文試題(解析版)
- 中國(guó)風(fēng)中國(guó)武術(shù)武術(shù)介紹PPT模板課件
- 兗州一中“循環(huán)大課堂教學(xué)模式”
- 藥理治療中樞神經(jīng)系統(tǒng)退行性疾病藥.pptx
- 膠原蛋白行業(yè)報(bào)告
- 養(yǎng)老機(jī)構(gòu)安全隱患排查清單、自查表、治理整改臺(tái)賬
- 標(biāo)準(zhǔn)預(yù)防--ppt課件
- 壓力管道氬電聯(lián)焊作業(yè)指導(dǎo)書
- 江西省特種作業(yè)人員體檢表(共1頁(yè))
- 室間隔缺損教學(xué)查房
- 審計(jì)資料封面(共6頁(yè))
評(píng)論
0/150
提交評(píng)論