《Visual Basic NET程序設(shè)計》課件第5章 枚舉、數(shù)組和結(jié)構(gòu)_第1頁
《Visual Basic NET程序設(shè)計》課件第5章 枚舉、數(shù)組和結(jié)構(gòu)_第2頁
《Visual Basic NET程序設(shè)計》課件第5章 枚舉、數(shù)組和結(jié)構(gòu)_第3頁
《Visual Basic NET程序設(shè)計》課件第5章 枚舉、數(shù)組和結(jié)構(gòu)_第4頁
《Visual Basic NET程序設(shè)計》課件第5章 枚舉、數(shù)組和結(jié)構(gòu)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

前面提到的數(shù)據(jù)類型,如整型、實型、日期型等屬于存儲單一信息的簡單數(shù)據(jù)類型。而實際應(yīng)用中,有些數(shù)據(jù)是由若干種相關(guān)數(shù)據(jù)構(gòu)成的,這些數(shù)據(jù)可以通過枚舉、數(shù)組和結(jié)構(gòu)等復(fù)雜數(shù)據(jù)類型存儲。5.1枚舉所謂“枚舉”,是指將變量的值逐一列舉出來,變量的值只限于列舉出來的值的范圍。例如,可以把一周七天相關(guān)聯(lián)的一組整數(shù)常數(shù)聲明為一個枚舉類型,然后在代碼中使用這七天的名稱而不是它們的整數(shù)值。5.1.1枚舉類型的定義枚舉類型通過Enum語句來定義,語法如下:[Public|Private]Enum類型名稱成員名[=常數(shù)表達(dá)式]成員名[=常數(shù)表達(dá)式]…EndEnum例如,在Enum語句定義中定義了一個枚舉類型CourseCodes,其中使用賦值語句為一組課程命名常數(shù):PublicEnumCourseCodesComputer=1 English=2 Math=3EndEnum在Enum語句定義中,常數(shù)表達(dá)式可以省略,在默認(rèn)情況下,枚舉中的第一個常數(shù)被初始化為0,其后的常數(shù)將按步長1遞增??梢宰远x每個枚舉成員相關(guān)聯(lián)的常量值,但是要求必須在該枚舉的類型范圍內(nèi)。下面的示例將產(chǎn)生編譯錯誤,原因是常量值-1、-2和-3不在Uinteger的范圍內(nèi)。EnumColorsASUinteger Red=-1 Green=-2 Blue=-3EndEnum多個枚舉成員可以共享一個關(guān)聯(lián)值。下面的示例中,兩個枚舉成員(Blue和Max)具有相同的關(guān)聯(lián)值11。EnumColorsASUinteger Red ‘成員常量值=0 Green=10 ‘成員常量值=10 Blue ‘成員常量值=11 Max=Blue ‘成員常量值=11EndEnum5.1.2枚舉的使用聲明枚舉類型后,就可以定義該枚舉類型的變量。引用枚舉類型變量的成員的語法如下:

枚舉類型變量名.成員名稱例如,利用前面例子中定義的一個枚舉類型CourseCodes,定義一個該枚舉類型的變量,然后訪問它的Math常量:DimMyCourseAsCourseCodesMyCourse=CourseCodes.Math 'MyCourse值為3例5.1枚舉類型應(yīng)用示例。PublicClassForm1PublicEnumDaysSundayMondayTuesdayWednesdayThursdayFridaySaturdayEndEnumPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimMyDayAsDaysMyDay=Days.MondayIfMyDay<Days.SaturdayThenMsgBox("今天是星期一,不是周末",,"")EndIf

EndSubEndClass5.2數(shù)組數(shù)組是同類型變量的一個有序集合。數(shù)組中的元素稱為數(shù)組元素,數(shù)組元素具有相同名字和數(shù)據(jù)類型,通過下標(biāo)(索引)來識別它們。只有一個下標(biāo)的數(shù)組稱一維數(shù)組,有兩個下標(biāo)的數(shù)組稱為二維數(shù)組,有三個以上下標(biāo)的數(shù)組稱多維數(shù)組。如:A%(10)、B$(5,5)、C!(2,3,4)5.2.1數(shù)組聲明語法:數(shù)組名(第一維下標(biāo)上界[,第二維下標(biāo)上界,...])[As數(shù)據(jù)類型]數(shù)組具有以下屬性。①數(shù)組使用類型聲明,通過數(shù)組下標(biāo)(或稱索引)來訪問數(shù)組中的數(shù)據(jù)元素。②數(shù)組元素可以為任何數(shù)據(jù)類型,包括數(shù)組類型。③每個維度的下標(biāo)(索引)從0開始。④數(shù)組的大小與其元素的數(shù)據(jù)類型無關(guān)。數(shù)組的大小表示數(shù)組中的元素總數(shù),而不是元素所占用的存儲字節(jié)數(shù)。數(shù)組大小的計算方法數(shù)組的大小是數(shù)組的所有維度的長度乘積。它表示數(shù)組中當(dāng)前包含的元素的總數(shù)。每一維度的長度是其對應(yīng)的下標(biāo)值加1。例如,聲明一個三維數(shù)組Dimprices(3,4,5)AsLong,則數(shù)組prices的總大小是(3+1)×(4+1)×(5+1)=120。關(guān)于數(shù)組,要注意以下事項。①“數(shù)組名”可以是任何合法的VB.NET變量名。②數(shù)組元素下標(biāo)上界"的個數(shù)表示數(shù)組的維數(shù),當(dāng)只有一個時表示一維數(shù)組,最多可聲明32維數(shù)組。③數(shù)組元素下標(biāo)上界只能是常數(shù),不能是變量或表達(dá)式,其最大值可為264-1。④數(shù)組元素下標(biāo)下界為0,不能改變。⑤數(shù)組的數(shù)據(jù)類型可以是基本的數(shù)據(jù)類型,也可以是Object類型。如果省略“As數(shù)據(jù)類型”,則默認(rèn)為Object類型。例如:DimA(14)AsInteger '15個元素,從A(0)到A(14)DimB(5,3)AsDecimal

'24個元素,從B(0,0)到B(5,3)DimC(2+7)AsString '出錯數(shù)組下標(biāo)函數(shù):1.LBound函數(shù)LBound函數(shù)來獲得數(shù)組任一維的下界。語法:Lbound(數(shù)組名[,維])說明:維是指定返回數(shù)組的哪一維。1(默認(rèn))表示第一維,2表示第二維,依次類推。例如:DimA(9,14)AsInteger,LAsIntegerL=Lbound(A,1) '獲得數(shù)組第一維的下界,返回0

2.UBound函數(shù)UBound函數(shù)來獲得數(shù)組任一維的上界。語法:Ubound(數(shù)組名[,維])說明:維是指定返回數(shù)組的哪一維。1(默認(rèn))表示第一維,2表示第二維,依次類推。例如:DimA(9,14)AsInteger,UAsIntegerU=Ubound(A,2) '獲得數(shù)組第二維的上界,返回14通過組合使用Lbound和Ubound函數(shù),可以確定一個數(shù)組的大小。5.2.2數(shù)組的初始化在聲明的時候指定各數(shù)組元素的初始值,稱為初始化。1.一維數(shù)組的初始化一維數(shù)組的初始化,語法如下:Dim數(shù)組名()[As數(shù)據(jù)類型]={值1,值2,值3,……,值n}如:DimA()AsInteger={1,2,3,4,5}2.二維數(shù)組的初始化二維數(shù)組的初始化,語法如下:Dim數(shù)組名(,)[As數(shù)據(jù)類型]={{第1行值},{第2行值},{第3行值},……,{第n行值}}例如:DimA(,)AsInteger={{1,2,3,4},{5,6,7,8},{9,10,11,12}}5.2.3動態(tài)數(shù)組動態(tài)數(shù)組指其大小可以在運行時改變。使用動態(tài)數(shù)組有助于有效管理內(nèi)存。定義動態(tài)數(shù)組的方法:(1)用Dim語句聲明數(shù)組。給數(shù)組附以一個空維數(shù)表,這樣就將數(shù)組聲明為動態(tài)數(shù)組。(2)在過程中用ReDim語句分配實際的數(shù)組元素個數(shù),形式如下:ReDim[Preserve]數(shù)組名(數(shù)組下標(biāo)上界,…)其中,下標(biāo)的上、下界可以是常量,也可以是有了確定值的變量或表達(dá)式。例5.2正確使用Dim、ReDim和Preserve語句。PublicClassForm1PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadDimArr(,)AsInteger'聲明動態(tài)數(shù)組Arr(,)DimiAsInteger,jAsIntegerLabel1.text=""ReDimArr(2,3)'指明數(shù)組的大小Fori=0To2'為每一個數(shù)組元素賦值并顯示Forj=0To3Arr(i,j)=2*j+8*iLabel1.Text&="Arr("&i&","&j&")="&Arr(i,j)&""NextjLabel1.text&=vbcrlfNextiLabel1.text&=vbcrlfReDimPreserveArr(2,4)'重新指明數(shù)組的大小,并保留原來的值,只能改變第二維大小Fori=0To2'為新增加的數(shù)組元素賦值A(chǔ)rr(i,4)=Arr(i,0)+Arr(i,1)+Arr(i,2)+Arr(i,3)NextiFori=0To2'重新顯示數(shù)組的元素Forj=0To4Label1.Text&="Arr("&i&","&j&")="&Arr(i,j)&""NextjLabel1.text&=vbcrlfNextiEndSubEndClass5.2.4數(shù)組的使用使用數(shù)組就是對數(shù)組元素進(jìn)行各種操作,如賦值、表達(dá)式運算、數(shù)組元素統(tǒng)計、查找、排序等。1.給數(shù)組元素賦值給數(shù)組元素賦值,可以采用下面二種方式:(1)利用循環(huán)結(jié)構(gòu)可以使用循環(huán)語句為數(shù)組元素賦值。(2)數(shù)組直接對數(shù)組賦值就像變量給變量賦值一樣,也可以將一個數(shù)組的內(nèi)容賦值給另一個數(shù)組。例5.3一個數(shù)組直接對另一個數(shù)組賦值。PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadDimarrA(5)AsInteger,arrB()AsIntegerDimi%Label1.Text=""Fori=1To5arrA(i)=iNextiReDimarrB(UBound(arrA))arrB=arrAFori=LBound(arrA)ToUBound(arrA)Label1.Text&=arrB(i)&""NextiEndSub2.數(shù)組中元素的統(tǒng)計例5.4求數(shù)組中所有元素之和、之積,以及數(shù)組中最大元素及其下標(biāo)。PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimArr(10)AsIntegerDimi%,max%,imax%,sum%'max中放最大值,imax中放最大值的下標(biāo),sum中放求和值Label1.Text=""Fori=1To10'隨機(jī)產(chǎn)生10個1~100的自然數(shù)Arr(i)=Int(Rnd()*100)+1Label1.Text&=Arr(i)&""NextiLabel1.Text&=vbCrLfimax=1:max=Arr(1)sum=Arr(1)Fori=2To10sum=sum+Arr(i)IfArr(i)>maxThenmax=Arr(i):imax=iEndIfNextiLabel2.Text="最大值下標(biāo)="&imax&""&"最大值="&max&""&"和="&sumEndSub3.在數(shù)組中查找元素查找是指在數(shù)組中,根據(jù)指定的值,找出與其值相同的元素。查找算法有很多,最簡單的方法有順序查找和二分法查找。順序查找是將待查找值與數(shù)組中的元素逐一比較,若相同,則查找成功;若找不到,則查找失敗。二分法查找的思想是:待查找值同數(shù)組的中間項元素比較,若相同則查找成功結(jié)束;否則,判別待查找值落在數(shù)組的哪半部分,然后在剩下的這半部分里重復(fù)上述查找,直到找到或數(shù)組中沒有待查找值。例5.5二分法查找。PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimArr()AsInteger={1,2,4,6,8,9,11,18,29,30}‘?dāng)?shù)組下標(biāo)從0開始Dimkey%,mid%,p%,q%key=Val(TextBox1.Text)p=0:q=9Domid=(p+q)/2Ifkey=Arr(mid)ThenExitDoElseIfkey>Arr(mid)Thenp=mid+1Elseq=mid-1EndIfEndIfLoopWhilep<=qIfp>qThenLabel1.Text="未找到數(shù)"&keyElseLabel1.Text=key&"是數(shù)組中第"&mid&"個數(shù)"EndIfEndSub4.交換數(shù)組中元素的位置例5.6設(shè)有一個4×4的方陣,求其轉(zhuǎn)置矩陣。程序運行結(jié)果如圖5-3所示。PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimMetrix(4,4)AsIntegerDimiAsInteger,tAsIntegerLabel1.Text=""Fori=1To4'用二維數(shù)組存放矩陣Forj=1To4Metrix(i,j)=j+4*(i-1)Label1.Text&=Str(Metrix(i,j)).PadRight(4)NextjLabel1.Text&=vbCrLfNextiLabel1.Text&=vbCrLfFori=1To4'矩陣轉(zhuǎn)置Forj=1Toit=Metrix(i,j)Metrix(i,j)=Metrix(j,i)Metrix(j,i)=tNextjNextiFori=1To4Forj=1To4Label1.Text&=Str(Metrix(i,j)).PadRight(4)NextjLabel1.Text&=vbCrLfNextiLabel1.Text&=vbCrLfEndSub5.數(shù)組元素排序排序是將一組數(shù)按遞增或遞減的次序排列。排序的算法有很多,下面采用冒泡法對10個數(shù)由小到大排序。算法思想是:設(shè)有10個待排序數(shù)存放在數(shù)組A中,分別表示為A(1)~A(10)。第1趟:先將A(1)與A(2)比較,若A(1)>A(2),則將A(1)、A(2)中的值互換,使得A(1)存放較小者。再將A(2)與A(3)、A(3)與A(4)、……、A(9)與A(10)比較,并且依次作出同樣的處理。最后,10個數(shù)中的最大者放入A(10)中。第2趟:將A(1)與A(2)、……、A(8)與A(9)比較,并且依次作出同樣的處理,使得10個數(shù)中的次大者放如A(9)中。如此進(jìn)行第3趟、第4趟……,直到第9趟。至此,將得到A(1)~A(10)中存放的有序數(shù),算法結(jié)束。例5.7冒泡法排序。PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimA(10)AsIntegerDimiAsInteger,jAsInteger,tAsIntegerLabel1.Text=""Fori=1To10'隨機(jī)產(chǎn)生10個1~100的自然數(shù)A(i)=Int(Rnd()*100)+1Label1.Text&=A(i)&""NextiLabel1.Text&=vbCrLf&vbCrLfFori=1To9'起泡法排序Forj=1To10-iIfA(j)>A(j+1)Thent=A(j):A(j)=A(j+1):A(j+1)=tEndIfNextjNextiFori=1To10Label1.Text&=A(i)&""NextiLabel1.Text&=vbCrLfEndSub5.3結(jié)構(gòu)結(jié)構(gòu)是一種較為復(fù)雜但非常靈活的復(fù)合數(shù)據(jù)類型,一個結(jié)構(gòu)類型可以由若干個稱為成員的數(shù)據(jù)成分組成,每個成員的數(shù)據(jù)類型可以互不相同,不同的結(jié)構(gòu)可以包含不同的成員。例如,一個學(xué)生的基本信息包括學(xué)號、姓名、電話號碼、出生日期、成績等數(shù)據(jù),這些數(shù)據(jù)類型、長度各不同,但它們都是學(xué)生的基本信息。對這種數(shù)據(jù),就可以用結(jié)構(gòu)類型。5.3.1定義結(jié)構(gòu)結(jié)構(gòu)類型的定義是用Structure語句開始,用EndStructure語句結(jié)束,其定義的語法如下:[DimIPublicIFriendIPrivate]Structure結(jié)構(gòu)名變量聲明[過程聲明]EndStructure例如,使用Structure語句定義學(xué)生的一系列信息:PublicStructurestruStudentsPublicstrIdAsStringFriendstrNameAsStringPrivatestrBirthDayAsDatePrivateintScoreAsInteger‘下面定義一個過程成員,它可以訪問結(jié)構(gòu)的私有成員FriendSubDoubleScore(ByvalinScoreAsInteger)intScore=intScore*2EndSubEndStructure在結(jié)構(gòu)中可以包含其他結(jié)構(gòu),例如先定義telephone結(jié)構(gòu)如下:PublicStructuretelephonePublicstrPhoneAsStringFriendstrMobilPhoneAsstringEndStructure然后,再定義newStudents結(jié)構(gòu),其中包含telephone結(jié)構(gòu):PublicStructurenewStudentsPublicstrIdAsStringFriendstrNameAsStringPrivatestrBirthDayAsDatePrivateintScoreAsIntegerDimphoneAstelephone '定義結(jié)構(gòu)類型的成員EndStructure5.3.2定義結(jié)構(gòu)類型的變量結(jié)構(gòu)類型的變量(簡稱結(jié)構(gòu)變量)的定義與普通變量的定義類似,格式如下:[Dim|Public|Private]變量名1,變量名2,…,變量名nAs結(jié)構(gòu)名例如,定義struStudents結(jié)構(gòu)類型的兩個變量Stu1和Stu2的語句如下: DimStu1,Stu2AsstruStudents5.3.3初始化結(jié)構(gòu)變量結(jié)構(gòu)變量的初始化不能直接對結(jié)構(gòu)變量本身進(jìn)行,只能用賦值語句對結(jié)構(gòu)變量的各個成員分別賦值。例如,定義兩個具有telephone結(jié)構(gòu)類型的變量X1和X2,并初始化它們:PublicStructuretelephonePublicstrPhoneAsStringFriendstrMobilPhoneAsStringEndStructureDimX1,X2AstelephoneX1.strPhone="6210087"X1.strMobilPhone=X2.strPhone="6253023"X2.strMobilPhone=5.3.4引用結(jié)構(gòu)變量對結(jié)構(gòu)變量的引用主要是對它的成員引用,即對成員進(jìn)行賦值、運算、輸入和輸出等操作。在引用結(jié)構(gòu)變量時,可以采用如下幾種方式:1.成員引用結(jié)構(gòu)變量名.成員名說明:例如,引用5.3.3節(jié)舉例中的X1和X2變量如下:DimX1,X2Astelephone ‘定義結(jié)構(gòu)變量X1.strPhone="12345678" ‘對x1的成員strPhone賦值X1.strMobilPhone= ‘對x1的成員strMobilPhone賦值X2.strPhone=X1.strPhone ‘將X1的成員strPhone賦值給x2的相應(yīng)的成員2.成員變量的運算結(jié)構(gòu)中的成員變量具有各種類型,根據(jù)其類型可以像普通變量一樣進(jìn)行各種運算和輸入輸出,如算術(shù)運算、賦值運算、關(guān)系運算、邏輯運算等。例如,下面代碼對5.3.3節(jié)舉例中的X1變量的strPhone成員進(jìn)行賦值運算和關(guān)系運算:DimX1,X2Astelephone ‘定義結(jié)構(gòu)變量X1.strPhone="12345678" ‘對x1的成員strPhone進(jìn)行賦值運算IfX1.strMobilPhone<>X1.strPhoneThen ‘對X1的成員進(jìn)行關(guān)系運算X2.strPhone=X1.strPhoneEndIf3.嵌套引用如果一個結(jié)構(gòu)中的成員本身又是一個結(jié)構(gòu)類型,則在引用時需要使用多個成員運算符,按照從高到低的原則,一級一級地找到最低一級的成員,最后對最低級的成員進(jìn)行訪問。例如,下面代碼定義了一個具有5.3.1節(jié)舉例中的newStudents結(jié)構(gòu)的變量X1,然后訪問其嵌套的strPhone成員,對該成員進(jìn)行賦值運算。DimX1AsnewStudents '定義結(jié)構(gòu)變量X1.Phone.strPhone="12345678" ‘對X1的Phone成員的子成員strPhone進(jìn)行賦值運算X1.strName="李明" ‘對x1的成員strName進(jìn)行賦值運算4.結(jié)構(gòu)變量整體賦值VB.NET允許將一個結(jié)構(gòu)變量作為一個整體賦值給另一個同類型的結(jié)構(gòu)變量,即將一個結(jié)構(gòu)變量的所有成員的值依次賦給另一個結(jié)構(gòu)變量的相應(yīng)的成員。例如,下面代碼中X1和X2被聲明為同類型結(jié)構(gòu)變量,可以將X1結(jié)構(gòu)變量整體賦值給X2結(jié)構(gòu)變量。DimX1,X2Astelephone ‘定義結(jié)構(gòu)變量X1.strPhone="12345678" ‘對x1的成員strPhone進(jìn)行賦值運算X1.strMobilPhone= ‘對X1的成員strMobilPhone賦值運算X2=X1 5.3.5結(jié)構(gòu)數(shù)組結(jié)構(gòu)變量中可以存放一組數(shù)據(jù),例如一個學(xué)生的學(xué)號、姓名、出生日期等,如果有多個學(xué)生的數(shù)據(jù)需要處理,顯然應(yīng)該使用數(shù)組,這種存儲具有結(jié)構(gòu)類型數(shù)據(jù)的數(shù)組稱為結(jié)構(gòu)數(shù)組。與普通數(shù)據(jù)類型數(shù)組不同,結(jié)構(gòu)數(shù)組的每個數(shù)組元素都是一個結(jié)構(gòu)類型的數(shù)據(jù),它們都分別包含各個成員項。定義結(jié)構(gòu)數(shù)組變量的語法格式如下:Dim數(shù)組變量名(下標(biāo)上界)As結(jié)構(gòu)名如:DimMyArray(99)AsnewStudents ‘定義結(jié)構(gòu)數(shù)組變量1.引用結(jié)構(gòu)數(shù)組元素的成員結(jié)構(gòu)數(shù)組名(下標(biāo)).成員名例如,引用前面例中的MyArray結(jié)構(gòu)數(shù)組變量的第10個元素的strName成員:DimxAsStringx=MyArray(9).strName

2.結(jié)構(gòu)數(shù)組元素間的賦值運算例如,將前面例中的MyArray結(jié)構(gòu)數(shù)組變量的第10個元素賦給第1個元素:MyArray(0)=MyArray(9)3.結(jié)構(gòu)成員的輸入輸出例如對前面例中的MyArray結(jié)構(gòu)數(shù)組變量的第10個元素的strName成員進(jìn)行輸出:Debug.WriteLine(MyArray(9).strName) ‘在集成環(huán)境的“輸出”窗口顯示成員值例5.8編寫程序?qū)崿F(xiàn)學(xué)生基本信息的數(shù)據(jù)輸入和輸出操作。程序代碼如下:PublicStructurenewStudentsPublicXHAsString '學(xué)號PublicXMAsString '姓名PublicZYMAsString '專業(yè)名PublicXBAsString '性別PublicNLAsInteger '年齡EndStructurePrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadConstMAX_STU=2DimarrayXS(MAX_STU)AsnewStudentsDimIAsInteger‘從鍵盤依次輸入每個學(xué)生的基本信息ForI=0ToMAX_STUarrayXS(I).XH=InputBox("請輸入學(xué)號")arrayXS(I).XM=InputBox("請輸入姓名.")arrayXS(I).ZYM=InputBox("請輸入專業(yè)名稱")arrayXS(I).XB=InputBox("請輸入性別")arrayXS(I).NL=Val(InputBox("請輸入年齡"))NextIDebug.WriteLine("")Debug.WriteLine("學(xué)號

姓名

專業(yè)

性另

年齡")ForI=0ToMAX_STUDebug.Write(arrayXS(I).XH&Space(4))Debug.Write(arrayXS(I).XM&Space(4))Debug.Write(arrayXS(I).XH&Space(4))Debug.Write(arrayXS(I).ZYM&Space(4))Debug.Write(arrayXS(I).XB&Space(4))Debug.Write(arrayXS(I).NL) NextIEndSub5.4綜合應(yīng)用1.選擇排序當(dāng)對數(shù)組元素進(jìn)行排序時,“選擇法”比“冒泡法”的效率高。選擇排序的算法是:對一個有N個元素的數(shù)組進(jìn)行遞增排序,從第2到第N個元素中選出最小值和第1個元素進(jìn)行比較,如果第1個元素的值大于這個該最小值,則交換兩個元素的值,否則什么都不做;再從第3到第N個元素中選出最小值和第2個元素進(jìn)行比較,如果第2個元素的值大于該最小值,則交換兩個元素的值,否則什么都不做……這樣,比較完第N-1個元素和第N個元素之后,排序完畢。選擇排序程序代碼如下:(升序)PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimnAsInteger,k%,temp%DimNum(100)AsIntegerDimi,jAsIntegerRandomize()n=100Fori=1TonNum(i)=Int(100*Rnd()+1)NextiFori=1Ton-1k=iForj=i+1TonIfNum(j)<Num(k)Thenk=jNextjIfk<>iThenTemp=Num(i)Num(i)=Num(k)Num(k)=TempEndIfNextiFori=1TonTextBox1.Text=TextBox1.Text&vbCrLf&Num(i)NextiEndSub2.比較排序比較排序法的原理是這樣的,先拿數(shù)組的第一個元素I(1)與第二個元素I(2)進(jìn)行比較,如果I(1)大于I(2)則交換二者的值,如果I(1)不大于I(2)就什么也不做。接著再比較第一個元素I(1)和第三個元素I(3)的值,如果I(1)大于I(3)則交換二者的數(shù)據(jù),否則就什么也不做。這樣,用第一個元素I(1)和所有的元素進(jìn)行比較之后,第一個元素I(1)的值就是所有元素中最小的一個。然后,拿第二個元素I(2)和它后面所有的元素進(jìn)行與上面類似的比較,比較完畢之后,I(2)保存的就是所有元素中的次小值。這樣一直循環(huán)執(zhí)行,當(dāng)比較完I(n-1)與I(n)的大小之后,整個數(shù)組中元素的值就已經(jīng)按從小到大的順序進(jìn)行了排列。比較排序法程序代碼如下:(降序)PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimnAsInteger,k%,temp%DimNum(100)AsIntegerDimi,jAsIntegerRandomize()n=100Fori=1TonNum(i)=Int(100*Rnd()+1)NextiFori=1Ton '對數(shù)組Num中的數(shù)進(jìn)行排序Forj=i+1TonIfNum(i)<Num(j)Thentemp=Num(i)Num(i)=Num(j)Num(j)=tempEndIfNextjNextiFori=1TonTextBox1.Text=TextBox1.Text&vbCrLf&Num(i)NextiEndSub3.學(xué)生成績表表5-1是一張學(xué)生成績表。設(shè)計程序,定義一個結(jié)構(gòu)類型,存儲表5-1的相關(guān)數(shù)據(jù),即學(xué)號、姓名、性別、成績l、成績2、成績3。學(xué)號姓名性別成績1成績2成績3總分201312001萬里女908788

201312002王彤女896987

201312003張大力男789085

201312004李麗女858780

201312005錢圖男938992

本例的界面設(shè)計,需要在窗體中添加7個標(biāo)簽控件,1個文本框控件和1個按鈕控件。文本框控件的Multiline屬性設(shè)置為True,ReadOnly屬性設(shè)置為True。“輸入數(shù)據(jù)”按鈕的Click事件處理程序如下。PublicClassForm1PublicStructurexscjPublicxhAsStringPublicxmAsStringPublicxbAsStringPublicscore()AsSingleEndStructurePrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimstudentAsxscjDimn,sumAsIntegern

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論