VB.NET 北京印刷學(xué)院_第1頁(yè)
VB.NET 北京印刷學(xué)院_第2頁(yè)
VB.NET 北京印刷學(xué)院_第3頁(yè)
VB.NET 北京印刷學(xué)院_第4頁(yè)
VB.NET 北京印刷學(xué)院_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論