




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
VB程序設(shè)計(jì)教程主編:陳素教授第三章VB程序結(jié)構(gòu)控制VB程序設(shè)計(jì)采用結(jié)構(gòu)化程序設(shè)計(jì)的思想,結(jié)構(gòu)化程序設(shè)計(jì)的特點(diǎn)是程序結(jié)構(gòu)清晰,易讀性強(qiáng),并易于查錯(cuò)糾錯(cuò)。在VB中有三種根本的程序控制結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。VB所有的程序都可以由這假設(shè)干個(gè)這三種根本結(jié)構(gòu)的組合,通過各種算法,以解決不同的實(shí)際問題。3VB程序結(jié)構(gòu)控制3.1順序結(jié)構(gòu)3.2選擇結(jié)構(gòu)3.3循環(huán)結(jié)構(gòu)3.4數(shù)組3.5常用算法3.1順序結(jié)構(gòu)順序結(jié)構(gòu)是一種線性結(jié)構(gòu),也是程序設(shè)計(jì)中最簡(jiǎn)單、最常用的根本結(jié)構(gòu)。它在程序運(yùn)行過程中,按照語句出現(xiàn)的順序從上到下依此執(zhí)行。順序結(jié)構(gòu)流程圖如圖3-1所示,先執(zhí)行語句A,再執(zhí)行語句B。
賦值語句順序結(jié)構(gòu)中主要的語句是賦值語句,通過賦值語句,可以在程序中改變變量的值,或改變對(duì)象屬性值。其語法格式為:
[Let]變量=表達(dá)式[Let]對(duì)象.屬性=表達(dá)式其中表達(dá)式中可以包含變量、常量、屬性。此時(shí)等號(hào)稱為賦值等號(hào)。例如:
DimAAsStringA=Text1.TextLabel1.Caption=A賦值語句說明:(1)賦值語句兼有計(jì)算和賦值雙重功能。(2)“=〞是賦值等號(hào),與數(shù)學(xué)上的等號(hào)意義不同。(3)賦值等號(hào)兩邊的數(shù)據(jù)類型通常要求一致,但VB提供的對(duì)某些數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換機(jī)制,可強(qiáng)制變量轉(zhuǎn)換為適當(dāng)?shù)臄?shù)據(jù)類型。例如,當(dāng)邏輯型賦值給數(shù)值型時(shí),True轉(zhuǎn)換為-1,F(xiàn)alse轉(zhuǎn)換為0;反之,非0轉(zhuǎn)換為True,0轉(zhuǎn)換為False;(4)賦值等號(hào)左邊的只能是變量或?qū)ο蟮膶傩?,不能是常量、常?shù)符號(hào)、表達(dá)式,否那么出錯(cuò)。注釋、結(jié)束與暫停語句1.注釋語句注釋語句用于對(duì)程序的注解和說明。有兩種格式:格式1:Rem內(nèi)容格式2:'內(nèi)容格式1形成一個(gè)語句行。格式2使用一個(gè)撇號(hào),可以用在語句行的末尾,也可以單獨(dú)占據(jù)一行。注釋語句不被編譯成二進(jìn)制代碼,它只出現(xiàn)在源程序中。適量的注釋可以增加程序的可讀性。例如:Rem通過設(shè)置文本框的"Text"屬性用來顯示"Hello"TxtInput.Text="Hello,今天是"&Date'函數(shù)Date返回當(dāng)前日期注釋、結(jié)束與暫停語句2.暫停語句暫停語句用于設(shè)置斷點(diǎn),調(diào)試程序。格式:Stop說明:(1)可放置在過程中的任何地方,相當(dāng)于在程序代碼中設(shè)置斷點(diǎn),類似于執(zhí)行“運(yùn)行〞菜單中的“中斷〞命令。(2)執(zhí)行Stop語句時(shí),系統(tǒng)將自動(dòng)翻開“立即窗口〞,方便程序員調(diào)試跟蹤程序。(3)程序調(diào)試結(jié)束后,生成可執(zhí)行文件之前,應(yīng)刪除代碼中的所有Stop語句。注釋、結(jié)束與暫停語句3.結(jié)束語句結(jié)束語句通常用來結(jié)束一個(gè)程序的執(zhí)行。格式:End在不同環(huán)境下的用法不同:EndSub:結(jié)束一個(gè)Sub過程EndFunction:結(jié)束一個(gè)Function過程EndIf:結(jié)束一個(gè)If語句塊EndSelect:結(jié)束情況語句3.2選擇結(jié)構(gòu)計(jì)算機(jī)智能化的標(biāo)志之一就是具有邏輯判斷的能力;即針對(duì)不同的情況作出不同的選擇。在程序設(shè)計(jì)中,這一功能的實(shí)現(xiàn)是借助相應(yīng)的選擇結(jié)構(gòu)語句來完成的。選擇結(jié)構(gòu)也稱為分支結(jié)構(gòu),其特點(diǎn)是根據(jù)給定的條件來選擇執(zhí)行相應(yīng)的程序語句。VB中提供的選擇結(jié)構(gòu)語句主要有:If語句、Iif函數(shù)以及Select
Case語句。3.2.1If語句
1.If…Then…Else結(jié)構(gòu)語法格式:If條件表達(dá)式Then語句序列1[Else
語句序列2]EndIf說明:(1)條件表達(dá)式可為關(guān)系表達(dá)式、邏輯表達(dá)式或數(shù)據(jù)表達(dá)式,但都要將其轉(zhuǎn)換為Boolean類型。(2)先對(duì)給定的條件表達(dá)式進(jìn)行判斷,如果條件成立(即表達(dá)式的值為True),那么執(zhí)行Then后的語句序列1,執(zhí)行完畢再跳到EndIf后的其他語句。(3)如果條件不成立(即表達(dá)式的值為False),那么執(zhí)行Else后的語句序列2,執(zhí)行完畢再執(zhí)行EndIf后的其他語句。(4)如果If語句中省略“Else語句序列2〞,那么是單分支語句,如圖3-2所示;否那么是雙分支語句,如圖3-3所示。3.2.1If語句3.2.1If語句【范例3-1】設(shè)計(jì)程序,對(duì)輸入的兩個(gè)整數(shù)a和b進(jìn)行比較,并輸出其中較大的數(shù)〔用單分支語句實(shí)現(xiàn)〕。3.2.1If語句〔1〕設(shè)計(jì)用戶界面如圖3-4所示?!?〕設(shè)置界面對(duì)象屬性,如表3-1所示。3.2.1If語句〔3〕程序代碼設(shè)計(jì)如下:PrivateSubCommand1_Click()DimaAsInteger,bAsInteger,maxAsIntegera=Val(Text1.Text)b=Val(Text2.Text)max=aIfb>maxThenmax=bText3.Text=Str(max)EndSub3.2.1If語句【范例3-2】設(shè)計(jì)程序,對(duì)輸入的兩個(gè)整數(shù)a和b進(jìn)行比較,并輸出其中較大的數(shù)〔用雙分支語句實(shí)現(xiàn)〕。將【范例3-1】程序代碼設(shè)計(jì)改為如下代碼即可。PrivateSubCommand1_Click()DimaAsInteger,bAsInteger,maxAsIntegera=Val(Text1.Text)b=Val(Text2.Text)Ifa>bThenmax=aElsemax=bEndIfText3.Text=CStr(max)EndSub3.2.1If語句2.If…Then…ElseIf結(jié)構(gòu)語法格式:If條件表達(dá)式1Then語句序列1[ElseIf條件表達(dá)式2Then語句序列2……ElseIf條件表達(dá)式n-1Then語句序列n-1Else語句序列n]EndIf說明:〔1〕Else子句與ElseIf都是可選項(xiàng),可以放置多個(gè)ElseIf子句,但必須在Else子句之前?!?〕執(zhí)行時(shí)先對(duì)條件表達(dá)式1進(jìn)行判斷,如果條件成立,執(zhí)行語句序列1;否那么依次測(cè)試ElseIf局部的條件,假設(shè)成立,那么執(zhí)行相應(yīng)的語句組;如果沒有一個(gè)條件成立的話,那么執(zhí)行Else子句的語句序列n?!?〕不管有多少個(gè)分支,程序執(zhí)行了一個(gè)分支后,其余分支不再執(zhí)行,當(dāng)多分支中有多個(gè)表達(dá)式同時(shí)滿足,那么只執(zhí)行第一個(gè)與之匹配的語句序列?!?〕ElseIf不能寫成ElseIf。3.2.1If語句If…Then…ElseIf結(jié)構(gòu)流程圖如圖3-5所示。3.2.1If語句【范例3-3】設(shè)計(jì)程序,輸入血壓舒張壓的值〔單位mmHg〕,判斷血壓是否正常,其中輸入值小于60,那么低血壓,輸入值60-90〔含60及90〕之間,那么正常;輸入值大于90,那么高血壓?!?〕設(shè)計(jì)用戶界面如圖3-6所示。3.2.1If語句〔2〕設(shè)置界面對(duì)象屬性,如表3-2所示。3.2.1If語句〔3〕程序代碼設(shè)計(jì)如下:PrivateSubCommand1_Click()DimaAsInteger,resultAsStringa=Val(Text1.Text)Ifa>90Thenresult="高血壓"ElseIfa>=60Thenresult="血壓正常"Elseresult="低血壓"EndIfText2.Text=resultEndSub3.2.1If語句【范例3-4】某藥品銷售管理系統(tǒng)中,要設(shè)置顧客的折扣值,并供查詢。規(guī)那么如下:假設(shè)顧客為VIP會(huì)員〔卡號(hào)首字母為V〕,折扣為90%;假設(shè)為普通會(huì)員〔卡號(hào)首字母為P〕,折扣為80%;非會(huì)員〔卡號(hào)首字母為N〕那么沒有折扣?!?〕用戶界面如圖3-7所示,圖3-8所示。3.2.1If語句〔2〕設(shè)置界面對(duì)象屬性,如表3-3所示。3.2.1If語句〔3〕程序代碼設(shè)計(jì)如下:PrivateSubCommand1_Click()DimaAsString,bAsStringa=Text1.TextIfLeft(a,1)="V"Thenb="90%,歡送光臨!"Label2.Visible=TrueLabel3.Visible=TrueElseIfLeft(a,1)="P"Thenb="80%,歡送光臨!"Label2.Visible=TrueLabel3.Visible=TrueElseIfLeft(a,1)="N"ThenLabel2.Visible=FalseLabel3.Visible=Trueb="歡送光臨,您晢時(shí)沒有折扣。"Elseb="對(duì)不起,您還沒有注冊(cè)!"EndIfLabel3.Caption=bEndSub3.2.1If語句語法格式:If條件表達(dá)式1ThenIf條件表達(dá)式2Then……EndIf……EndIf說明:〔1〕對(duì)于嵌套結(jié)構(gòu),為了增強(qiáng)程序的可讀性,應(yīng)該采用縮進(jìn)形式書寫。〔2〕If語句形式假設(shè)不在一行上書寫,必須與EndIf配對(duì),多個(gè)if嵌套,EndIf與它最接近的EndIf配對(duì)。IF語句的嵌套流程圖如圖3-9所示。3.2.1If語句3.2.2IIf函數(shù)IIf函數(shù)可以用來執(zhí)行簡(jiǎn)單的條件判斷操作,它是“If…Then…Else〞結(jié)構(gòu)的簡(jiǎn)寫版本,是“ImmediateIf〞的縮略。語法格式:IIf〔條件表達(dá)式,條件成立時(shí)的返回值,條件不成立時(shí)的返回值〕說明:〔1〕條件表達(dá)式可以是關(guān)系表達(dá)式、邏輯表達(dá)式或數(shù)值表達(dá)式,假設(shè)為數(shù)值表達(dá)式,那么按照非0為真,0為假的規(guī)那么轉(zhuǎn)化為Boolean類型的值?!?〕IIf函數(shù)的返回值可以為表達(dá)式、變量或其他函數(shù)。〔3〕IIf函數(shù)中的3個(gè)參數(shù)都不能省略,而且要求返回值的類型及結(jié)果變量的類型一致。3.2.2IIf函數(shù)例如,當(dāng)成績(jī)x>=60時(shí)為合格,否那么不及格,用If語句表示如下:Ifx>=60Thenr=〞合格〞Elser=〞不合格〞EndIf而用IIf函數(shù)來代替那么為:r=IIf(x>=60,〞合格〞,〞不合格〞)再看下面的例子:用IIf函數(shù)判斷數(shù)的奇偶性x是被判斷的整數(shù),result為接收結(jié)果的字符串變量Result=IIf(xmod2=0,〞x是偶數(shù)〞,〞x是奇數(shù)〞)由上可見,對(duì)于一些簡(jiǎn)單的選擇結(jié)構(gòu),用IIF函數(shù)可以使程序大大簡(jiǎn)化。3.2.3Select
Case語句使用IF語句的嵌套可以實(shí)現(xiàn)多分支選擇,但對(duì)于多條件選擇時(shí),使用SelectCase語句代碼效率更高,更易讀。語法格式:SelectCase表達(dá)式|變量
Case表達(dá)式列表1
語句序列1Case表達(dá)式列表2
語句序列2……Case表達(dá)式列表n-1
語句序列n-1[CaseElse
語句序列n]EndSelectSelectCase結(jié)構(gòu)流程圖如圖3-10所示。3.2.3Select
Case語句3.2.3Select
Case語句說明:〔1〕“表達(dá)式〞可以是數(shù)值型或字符型〔2〕“表達(dá)式〞和“表達(dá)式列表〞的類型必須相同;〔3〕“表達(dá)式列表〞形式有以下3種:①一個(gè)表達(dá)式或用逗號(hào)隔開的假設(shè)干表達(dá)式例如:判斷10以內(nèi)整數(shù)的奇偶性。x=inputbox("輸入一個(gè)整數(shù)")SelectCasexCase1,3,5,7,9Printx;"這是奇數(shù)"Case2,4,6,8,10Printx;"這是偶數(shù)"EndSelect②表達(dá)式1To表達(dá)式2例如:變量stringc中存放了一個(gè)字符,判斷該字符類型。SelectCasestringcCase"a"To"z","A"To"Z"Printstringc+"isaletter"Case"0"To"9"Printstringc+"isanumber"CaseElsePrintstringc+“isonlyachar"EndSelect
3.2.3Select
Case語句③Is關(guān)系表達(dá)式用Is關(guān)系表達(dá)式實(shí)現(xiàn)學(xué)生成績(jī)等次的評(píng)定。score=inputbox("輸入一個(gè)學(xué)生成績(jī)")SelectCasexCaseis>=90Printscore;"成績(jī)等次為:A"Caseis>=80Printscore;"成績(jī)等次為:B"Caseis>=70Printscore;"成績(jī)等次為:C"CaseElsePrintscore;"成績(jī)等次為:D"EndSelect
對(duì)于VB中的兩種選擇語句If語句和SelectCase語句的應(yīng)用選擇,一般來說,SelectCase語句主要應(yīng)用于對(duì)單一條件表達(dá)式的結(jié)果有多個(gè)判斷(因此也稱多分支語句)的情況,結(jié)構(gòu)清晰;而If語句可以對(duì)多個(gè)條件表達(dá)式的結(jié)果進(jìn)行判斷,應(yīng)用更廣泛。一般情況下,能使用SelectCase語句來判斷的也可以使用If語句。3.3循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是程序設(shè)計(jì)中的一種根本結(jié)構(gòu)。當(dāng)程序中出現(xiàn)需要反復(fù)執(zhí)行相同的代碼解決同一問題時(shí),就可以用循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)。循環(huán)結(jié)構(gòu)既可以簡(jiǎn)化程序,又可以提高程序的效率。VB繼承了所有Basic語言中的各種循環(huán)語句,而且在VB中實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的語句最多。循環(huán)結(jié)構(gòu)可分為計(jì)數(shù)型和條件型兩種根本的結(jié)構(gòu),實(shí)現(xiàn)計(jì)數(shù)型循環(huán)結(jié)構(gòu)的語句是For…Next,而實(shí)現(xiàn)條件型循環(huán)結(jié)構(gòu)的語句有Do…Loop及While…Wend。3.3.1For…Next語句For…Next語句按指定的循環(huán)次數(shù)或按變量變化的范圍執(zhí)行循環(huán)體,在循環(huán)體中使用一個(gè)計(jì)數(shù)器來控制循環(huán)執(zhí)行的次數(shù)。For…Next語句執(zhí)行過程:開始時(shí),循環(huán)控制計(jì)數(shù)器為初值。每執(zhí)行完一次循環(huán)體內(nèi)所有語句后,循環(huán)控制計(jì)數(shù)器自動(dòng)增加一個(gè)步長(zhǎng)值,然后與終值進(jìn)行比較。如果循環(huán)控制變量小于終值,那么繼續(xù)循環(huán),直到循環(huán)控制變量的值大于終值,才退出循環(huán),去執(zhí)行Next語句后的語句。在循環(huán)的過程中,可以使用Exit語句隨時(shí)退出循環(huán)。For…Next語句流程圖如圖3-11所示。3.3.1For…Next語句3.3.1For…Next語句語法格式:For計(jì)數(shù)器=初值To終值[Step步長(zhǎng)]語句序列1[ExitFor]語句序列2Next[計(jì)數(shù)器]說明:(1)計(jì)數(shù)器一般為數(shù)值型。(2)步長(zhǎng)一般為正值,初值小于終值;假設(shè)為負(fù)值,初值大于終值;缺省步長(zhǎng)為1;循環(huán)次數(shù)=int〔〔終值-初值〕/步長(zhǎng)+1〕。(3)語句序列可以是一個(gè)或多個(gè)語句,稱為循環(huán)體。(4)ExitFor是可選項(xiàng),表示當(dāng)程序執(zhí)行過程中遇到該語句時(shí),退出循環(huán)體,執(zhí)行Next的下一句。3.3.1For…Next語句例如,計(jì)算1到100的和〔本例未使用循環(huán)退出語句ExitFor〕。Sum=0Fori=1To100step1Sum=Sum+iNextiPrintSum再如,計(jì)算1到100的和,當(dāng)和大于2000時(shí)終止循環(huán)〔本例使用循環(huán)退出語句ExitFor〕。Sum=0Fori=1To100step1Sum=Sum+iIfSum>=2000ThenExitForNextiPrintSum3.3.1For…Next語句(5)退出循環(huán)后,計(jì)數(shù)器的值保持退出時(shí)的值。(6)在循環(huán)體內(nèi)對(duì)計(jì)數(shù)器可屢次引用,但不要對(duì)其賦值,否那么影響循環(huán)執(zhí)行的次數(shù),從而影響程序運(yùn)行結(jié)果。例如:PrivateSubCommand1_Click()Count1=0Fori=1To20Step2i=i+2Count1=Count1+1Print"第";Count1;"次循環(huán)i=";iNextiPrint"退出循環(huán)后i=";iEndSub以上程序循環(huán)的次數(shù)不是10次,而是5次,原因是代碼中的i=i+2改變了步長(zhǎng)。程序運(yùn)行結(jié)果如圖3-12所示。3.3.1For…Next語句3.3.1For…Next語句【范例3-5】設(shè)計(jì)程序,輸入一個(gè)班〔設(shè)全班人數(shù)不超過100人〕學(xué)生的VB學(xué)習(xí)成績(jī),統(tǒng)計(jì)其中及格的學(xué)生人數(shù),并計(jì)算出全班的平均分。由于學(xué)生人數(shù)不定,輸入負(fù)數(shù)時(shí)截止。〔1〕用戶界面及數(shù)據(jù)測(cè)試如圖3-13,3-14,3-15所示。3.3.1For…Next語句3.3.1For…Next語句〔2〕設(shè)置界面對(duì)象屬性,如表3-4所示。3.3.1For…Next語句〔3〕程序代碼設(shè)計(jì)如下:PrivateSubCommand1_Click()DimGradeAsSingle,PassCountAsInteger,totalAsIntegerDimiAsInteger,SumAsSingleSum=0PassCount=0Average=0total=0Fori=1To100'當(dāng)輸入學(xué)生成績(jī)個(gè)數(shù)大于100時(shí)停止循環(huán)Grade=Val(InputBox("請(qǐng)輸入學(xué)生的VB成績(jī):"))IfGrade<0Then'輸入負(fù)數(shù)時(shí)退出循環(huán)ExitForElseIfGrade>=60ThenPassCount=PassCount+1'計(jì)算及格學(xué)生人數(shù)total=total+1'計(jì)算總?cè)藬?shù)Sum=Sum+Grade'計(jì)算總分EndIfNextiIftotal<>0ThenAverage=Sum/total'防止用戶未輸入值時(shí)溢出Text1.Text=Str(total)Text2.Text=Str(PassCount)Text3.Text=Str(Average)EndSub3.3.2Do…Loop語句對(duì)于在程序中循環(huán)的次數(shù)事先不能確定的,不能使用For…Next語句實(shí)現(xiàn)循環(huán),這時(shí)使用Do…Loop循環(huán)(條件循環(huán))語句。Do…Loop語句有2種形式,即當(dāng)型循環(huán)〔While結(jié)構(gòu)〕和直到型〔DoWhile結(jié)構(gòu)〕循環(huán)。當(dāng)型循環(huán)結(jié)構(gòu)流程圖如圖3-16所示,直到型循環(huán)結(jié)構(gòu)流程圖如圖3-17所示。
3.3.2Do…Loop語句語法1(當(dāng)型循環(huán)):DoWhile|Until條件表達(dá)式語句序列1[ExitDo]語句序列2Loop說明:(1)先測(cè)試條件表達(dá)式,當(dāng)條件為True時(shí)就執(zhí)行語句序列,否那么退出循環(huán)。(2)While循環(huán)在條件成立時(shí)執(zhí)行循環(huán)體語句,否那么退出循環(huán)執(zhí)行Loop后的語句。而Until循環(huán)相反,在條件不成立時(shí)進(jìn)入循環(huán),直到條件成立時(shí)才退出循環(huán)。(3)在程序執(zhí)行過程中,假設(shè)遇到Exitdo語句時(shí),表示退出循環(huán),執(zhí)行Loop后的語句。3.3.2Do…Loop語句例:用當(dāng)型循環(huán)語句計(jì)算1到100的和DimSumasinteger,iasintegerSum=0:i=1DoWhilei<=100Sum=Sum+ii=i+1LoopPrintSum語法2(直到型循環(huán)):Do語句序列1[ExitDo]語句序列2LoopWhile|Until條件表達(dá)式說明:(1)先執(zhí)行語句序列后判斷條件表達(dá)式,語句序列至少執(zhí)行一次。(2)While循環(huán)在條件成立時(shí)執(zhí)行循環(huán)體語句,否那么退出循環(huán)執(zhí)行Loop后的語句。而Until循環(huán)相反,在條件不成立時(shí)進(jìn)入循環(huán),直到條件成立時(shí)才退出循環(huán)。(3)在程序執(zhí)行過程中,假設(shè)遇到Exitdo語句時(shí),表示退出循環(huán),執(zhí)行Loop后的語句。例:用直到型循環(huán)語句計(jì)算1到100的和DimSumasinteger,iasintegerSum=0:i=1DoSum=Sum+ii=i+1LoopWhilei<=100PrintSum3.3.3While…Wend語句對(duì)于循環(huán)次數(shù)不確定的情況下,除了可以使用Do…Loop語句外,還可以使用While…Wend語句。語法格式:While條件表達(dá)式語句序列1Wend說明:While…Wend的條件是以關(guān)系或邏輯表達(dá)式的形式直接出現(xiàn)在語句中的,如果要使循環(huán)有限次地執(zhí)行,必須在While的循環(huán)體中改變條件。例如:測(cè)試計(jì)數(shù)器的值DimCounterAsintegerCounter=0WhileCounter<20'測(cè)試計(jì)數(shù)器的值Counter=Counter+1'將計(jì)數(shù)器的值+1Wend'當(dāng)Counter>19時(shí)那么循環(huán)終止PrintCounter循環(huán)的嵌套循環(huán)的嵌套是指循環(huán)語句中又包含其他循環(huán)語句的情況,前面所述的幾種循環(huán)語句均可以互相嵌套,也可以在循環(huán)中嵌套選擇結(jié)構(gòu)。要求:(1)多重循環(huán)中,各層循環(huán)變量不能重名。(2)內(nèi)層循環(huán)必須完整地包含在外層循環(huán)中,不能交叉。例如下面的循環(huán)嵌套是錯(cuò)誤的:Fori=1To100step1Forj=1To100step1……NextiNextj(3)在多重循環(huán)中的分支結(jié)構(gòu)必須完全包含在里面,不能交叉。循環(huán)的嵌套【范例3-6】用循環(huán)的嵌套設(shè)計(jì)程序,實(shí)現(xiàn)如圖3-18所示的數(shù)字金字塔。循環(huán)的嵌套程序代碼設(shè)計(jì)如下:PrivateSubCommand1_Click()Fori=1To9Forj=1To28-3*iPrint"";NextjFork=1ToiPrintk;NextkFork=i-1To1Step-1Printk;NextkPrintNextiEndSub循環(huán)的嵌套下面對(duì)上述提到的循環(huán)語句作一比較,方便讀者進(jìn)一步區(qū)分及應(yīng)用。VB中循環(huán)結(jié)構(gòu)有3種形式:For循環(huán)、While循環(huán)以及Do循環(huán)(可分為4種語句),它們的語句語法分別為:For…Next,DoWhile…Loop,DoUntil…Loop,Do…WhileLoop,Do…UntilLoop,While…Wend,其中除For…Next語句用于循環(huán)次數(shù)已經(jīng)知道的循環(huán),其它都是用于循環(huán)次數(shù)預(yù)先不知首,而由邏輯條件控制循環(huán)的循環(huán)。While循環(huán)是條件成立時(shí)循環(huán),而Until循環(huán)是條件不成立時(shí)循環(huán)。DoWhile|Until…Loop語句是先判斷再執(zhí)行,而Do…While|UntilLoop語句是先執(zhí)行再判斷。While…Wend語句與DoWhile…Loop相同。下表3-5用不同的循環(huán)語句編寫程序,執(zhí)行結(jié)果相同,均為10。循環(huán)的嵌套3.4數(shù)組
在處理具體問題時(shí),常會(huì)涉及到批量數(shù)據(jù)的處理,例如:對(duì)一個(gè)班學(xué)生的成績(jī)排序,找出最高分,最低分,計(jì)算平均分等。使用定義多個(gè)變量的方法來記錄學(xué)生的成績(jī),并不是最好的解決方法。在VB中,提供了數(shù)組這種特殊的數(shù)組類型,來表示類型相同的一批數(shù)據(jù)。而借助數(shù)組與循環(huán),可以有效的處理批量數(shù)據(jù)。
數(shù)組的概念1.數(shù)組數(shù)組是一組邏輯上相互關(guān)聯(lián)的值的有序集合。所謂邏輯上相互關(guān)聯(lián)是指數(shù)組中的數(shù)據(jù)必須具有相同的類型。例如:(1,34,234,45,49,100)、(“abort〞,〞boat〞,〞car〞,〞zoo〞)都可以使用數(shù)組來表示。而〔12,〞ab〞,12.4,“abort〞〕那么不行。VB中可以定義任何類型的數(shù)組,包括用戶自定義的類型。數(shù)組名用于表示數(shù)組,其命名規(guī)那么遵循標(biāo)識(shí)符的命名規(guī)那么。2.數(shù)組元素?cái)?shù)組中每一個(gè)值稱為數(shù)組元素,使用數(shù)組名和一些稱為“索引〞或“下標(biāo)〞的數(shù)字可以表示每一個(gè)數(shù)組元素。3.數(shù)組分類在VB中,根據(jù)數(shù)組長(zhǎng)度來劃分,數(shù)組可以分為動(dòng)態(tài)數(shù)組和靜態(tài)數(shù)組。而從維度上劃分那么可以分為一維數(shù)組和多維數(shù)組。靜態(tài)數(shù)組無論是靜態(tài)數(shù)組還是動(dòng)態(tài)數(shù)組,都可以使用Dim語句來聲明數(shù)組變量。與普通變量定義不同的是,在數(shù)組變量名后面加上一對(duì)圓括號(hào),以指示該變量將存儲(chǔ)數(shù)組而不是單個(gè)值。本節(jié)中所討論的靜態(tài)數(shù)組是指存放數(shù)組元素個(gè)數(shù)固定的數(shù)組。1.聲明語法[Public|Private|Dim]數(shù)組名(維數(shù))As數(shù)據(jù)類型說明〔1〕方括號(hào)局部可以省略。〔2〕數(shù)據(jù)類型可以是VB支持的根本數(shù)據(jù)類型,也可以是用戶自定義的類型。〔3〕數(shù)組名的命名規(guī)那么參照標(biāo)識(shí)符命名原那么。〔4〕關(guān)于維數(shù)①數(shù)組的維數(shù)表示:[下界To]上界,其中下界必須小于等于上界。如果是多維數(shù)組,維數(shù)局部定義可以表示為([下界1To]上界1,[下界2To]上界2,……)例如:Dima(1To3)AsInteger‘定義一維整型數(shù)組Dimb(3)AsString‘定義一維整型數(shù)組Dimc(1To3,1to3)AsInteger‘定義二維整型數(shù)組Dimd(3,3,3)AsInteger‘定義三維整型數(shù)組②下界聲明可以省略,省略的話默認(rèn)下界為0,OptionBase語句可以將數(shù)組的默認(rèn)下界設(shè)置為1。OptionBase語句必須在通用模塊定義,語法格式為:OptionBase0|1。靜態(tài)數(shù)組圖3-19中設(shè)置數(shù)組的默認(rèn)下標(biāo)為1此時(shí)有下面聲明語句:Dimc(10)AsInteger那么數(shù)組c的下界為1,上界為10。靜態(tài)數(shù)組③當(dāng)上下界是小數(shù)時(shí)系統(tǒng)會(huì)自動(dòng)進(jìn)行四舍五入。〔5〕數(shù)組中元素個(gè)數(shù)的計(jì)算數(shù)組元素個(gè)數(shù)的計(jì)算可以用下面公式表示:〔上界1-下界1+1〕*〔上界2-下界2+1〕*……例如:Dima(1To10)AsInteger‘a(chǎn)數(shù)組的元素個(gè)數(shù)為10Dimb(1To2,3To5)asInteger‘b數(shù)組的元素個(gè)數(shù)為〔2-1+1〕*〔5-3+1〕=6靜態(tài)數(shù)組2.?dāng)?shù)組元素的表示數(shù)組中的每個(gè)元素使用數(shù)組名以及下標(biāo)來表示。注意每一維下標(biāo)的取值范圍是[每一維的下界,每一維的上界]。數(shù)組元素的表示:數(shù)組名〔下標(biāo)1[,下標(biāo)2,……]〕。根據(jù)以上的形式,對(duì)于常用的一維與二維數(shù)組,元素的表示方法為:〔1〕一維數(shù)組元素:數(shù)組名〔下標(biāo)〕。例如:Dima(1to2)asinteger,那么a中的元素可以表示為a(1)、a(2)〔2〕二維數(shù)組元素:數(shù)組名〔下標(biāo)1,下標(biāo)2〕。例如:Dimb(1,1)asinteger,那么b中的元素可以表示為b(0,0)、b(0,1)、b(1,0)、b(1,1)靜態(tài)數(shù)組3.?dāng)?shù)組的賦值與輸出對(duì)于靜態(tài)數(shù)組,賦值與輸出常用的方法一是把數(shù)組元素當(dāng)成普通變量對(duì)待,二是使用循環(huán)語句?!?〕一維數(shù)組的賦值與輸出【范例3-7】將10以內(nèi)的奇數(shù)使用保存在數(shù)組中,并使用print語句輸出在窗體上。運(yùn)行界面如圖3-20所示:靜態(tài)數(shù)組方法一:?jiǎn)螕舭粹oCommand1時(shí)運(yùn)行程序:PrivateSubCommand1_Click()Dima(1To5)AsIntegera(1)=1a(2)=3a(3)=5a(4)=7a(5)=9Printa(1);a(2);a(3);a(4);a(5)EndSub方法二:使用循環(huán)語句實(shí)現(xiàn)PrivateSubCommand1_Click()Dima(1To5)AsIntegerDimiAsInteger,jAsIntegerj=1Fori=1To5a(i)=jj=j+2NextiFori=1To5Printa(i);NextiEndSub靜態(tài)數(shù)組〔2〕二維數(shù)組的賦值與輸出二維數(shù)組可以看成是一個(gè)矩陣,第一維的下標(biāo)表示元素所在的行,第二維下標(biāo)表示元素所在的列。例如:Dima(1To2,1To3)AsInteger‘a(chǎn)相當(dāng)于一個(gè)2行3列的矩陣在實(shí)際的存儲(chǔ)中,二維數(shù)組還是按照行的順序存放的。一般可以采用二重循環(huán)的方法來處理二維數(shù)組中的元素。靜態(tài)數(shù)組【范例3-8】將一個(gè)矩陣存放在一個(gè)二維數(shù)組中,并在窗體上打印將其轉(zhuǎn)置的形式。運(yùn)行界面如圖3-21所示:靜態(tài)數(shù)組程序設(shè)計(jì)代碼如下:PrivateSubCommand1_Click()Dima(1To5,1To2)AsInteger‘說明一個(gè)5行2列矩陣Print"原始矩陣"Fori=1To5‘使用二重循環(huán)為矩陣賦值Forj=1To2a(i,j)=jPrinta(i,j);Spc(5);NextjPrintNextiPrint"轉(zhuǎn)置矩陣"Forj=1To2‘先列后行的原那么輸出轉(zhuǎn)置形式Fori=1To5Printa(i,j);Spc(5);NextiPrintNextjEndSub靜態(tài)數(shù)組〔3〕ForEach…Next語句在用于處理數(shù)組或集合中的每一個(gè)元素時(shí),F(xiàn)orEach…Next比For...Next語句更適合,因?yàn)樵贔orEach…Next語句中不必指定數(shù)組或集合的元素個(gè)數(shù)。語法:
ForEachelementIn數(shù)組
語句序列1
[EXITFOR]
語句序列2
NEXT[element]
說明:
〔1〕格式中的element是一個(gè)variant類型的變量,它代表數(shù)組中的每個(gè)元素,可以在循環(huán)體外定義?!?〕格式中的數(shù)組可以是一個(gè)已定義的數(shù)組變量?!?〕循環(huán)次數(shù)由VB在循環(huán)開始之前自動(dòng)計(jì)算。〔4〕ForEach循環(huán)可以嵌套。但每個(gè)循環(huán)必須具有唯一的element變量。靜態(tài)數(shù)組【范例3-9】求數(shù)組中所有元素的和。PrivateSubForm_Activate()Dima(1To5)AsIntegerDimxAsVariantDimiAsIntegerFori=1To5a(i)=iNextii=0ForEachxInai=x+iNextPrintiEndSub靜態(tài)數(shù)組4.靜態(tài)數(shù)組使用舉例
【范例3-10】設(shè)計(jì)一個(gè)程序,統(tǒng)計(jì)5個(gè)候選人的得票數(shù)。程序中使用InputBox接收投票,投票時(shí)輸入的是候選人的選號(hào)。一維數(shù)組P用于記錄得票數(shù)。程序代碼設(shè)計(jì)如下:PrivateSubForm_Activate()DimN,IAsIntegerDimP(5)AsInteger'聲明數(shù)組P記錄候選人得票數(shù)
PrintPrintForI=1To5N=Val(InputBox("請(qǐng)輸入候選人的選號(hào)","選舉投票",0))P(N)=P(N)+1'統(tǒng)計(jì)各候選人的選票
NextIForI=1To5'顯示所有候選人的票數(shù)
Print"第"&Str(I)&"個(gè)候選人的票數(shù)是:";P(I);PrintNextIEndSub靜態(tài)數(shù)組投票界面如圖3-22所示,當(dāng)依次輸入數(shù)據(jù)1,1,1,2,3,那么程序運(yùn)行結(jié)果如圖3-23所示。靜態(tài)數(shù)組【范例3-11】編程求一個(gè)3×4的矩陣中值最大的元素以及其所在的位置。程序設(shè)計(jì)如下:
PrivateSubForm_Activate()Dima(1To3,1To4)AsInteger'定義a數(shù)組存放矩陣DimiAsInteger,jAsIntegerDimmaxAsInteger,rAsInteger,cAsInteger'定義max存放最大值,r,c分別存放最大值最在的行和列RandomizePrint"A數(shù)組為:"PrintFori=1To3Forj=1To4a(i,j)=Int(30*Rnd())+1'使用隨機(jī)函數(shù)產(chǎn)生1-30之間的數(shù)
Printa(i,j);NextjPrintNextiPrint靜態(tài)數(shù)組max=a(1,1):r=1:c=1'假定a(1,1)為當(dāng)前最大元素Fori=1To3'將數(shù)組元素與max比較Forj=1To4Ifa(i,j)>maxThen'找到新的最大數(shù),那么保存在max中,并同時(shí)記錄位置max=a(i,j)r=i:c=jEndIfNextjNextiPrint"最大數(shù)是"&max&"它在第"&r&"行"&c&"列"EndSub靜態(tài)數(shù)組程序運(yùn)行的界面如下:圖3-24范例3-11運(yùn)行界面動(dòng)態(tài)數(shù)組本節(jié)將討論如何創(chuàng)立和使用動(dòng)態(tài)數(shù)組。1.聲明語法建立動(dòng)態(tài)數(shù)組的方法是:利用Dim、Private、Public語句聲明括號(hào)內(nèi)為空的數(shù)組,然后在過程中用ReDim語句指明該數(shù)組的大小。語法是:Dim數(shù)組名〔〕[As數(shù)據(jù)類型]ReDim[Preserve]數(shù)組名〔下標(biāo)1[,下標(biāo)2…]〕[As數(shù)據(jù)類型]其中下標(biāo)可以是常量,也可以是有了確定值的變量,類型可以省略,假設(shè)不省略,必須與Dim中的聲明語句保持一致。例如:DimA〔〕AsSingleReDimA〔4,6〕說明〔1〕ReDim語句中的下標(biāo)可以是常量、表達(dá)式,也可以是有了確定值的變量〔2〕在程序中可以屢次使用ReDim來改變數(shù)組的大小和維數(shù)?!?〕每次使用ReDim語句都會(huì)重新初始化原數(shù)組的值。例如將整型數(shù)組的值初始化為0。可以使用Preserve參數(shù)來保存數(shù)組的數(shù)據(jù),但使用Preserve只能改變最后一維的大小。動(dòng)態(tài)數(shù)組【范例3-12】動(dòng)態(tài)數(shù)組的使用。PrivateSubForm_Activate()Dimarr()AsInteger'定義動(dòng)態(tài)數(shù)組arrDimnAsIntegern=10ReDimarr(n)'重定義數(shù)組arr,將其大小定義為11Fori=0To10arr(i)=i:Printarr(i);NextPrintReDimPreservearr(15)'再次定義數(shù)組arr,保存之'前arr(0)~arr(10)的值Fori=0To15Printarr(i);NextEndSub動(dòng)態(tài)數(shù)組程序運(yùn)行的界面如下:圖3-25范例3-12運(yùn)行界面假設(shè)語句ReDimPreservearr(15)去掉保存字Preserve,那么arr數(shù)組的元素值將被重置為0。數(shù)組相關(guān)函數(shù)1.Array函數(shù)語法:Array(參數(shù)表)功能:給一個(gè)Variant型的數(shù)組賦值。說明:參數(shù)表是一個(gè)用逗號(hào)隔開的值表,如果不提供參數(shù),那么創(chuàng)立一個(gè)長(zhǎng)度為0的數(shù)組。請(qǐng)看下面的語句:DimAAsVariantA=Array(10,20,30)在上面的例如中,第一條語句創(chuàng)立一個(gè)Variant的變量A。第二條語句將一個(gè)數(shù)組賦給變量A。動(dòng)態(tài)數(shù)組2.IsArray函數(shù)語法:IsArray(變量名)功能:判斷一個(gè)指定的變量是否為數(shù)組。說明:如果待判斷的變量指向一個(gè)數(shù)組,那么IsArray函數(shù)返回true,否那么返回false。對(duì)于以下語句:Dima,bb=1a=Array(1,2,3,4,5)PrintIsArray(b),IsArray(a)程序運(yùn)行結(jié)果為falsetrue數(shù)組相關(guān)函數(shù)2.動(dòng)態(tài)數(shù)組使用舉例【范例3-13】打印裴波納契數(shù)列。裴波納契數(shù)列具有以下特點(diǎn):它的第一個(gè)數(shù)為0,第二個(gè)數(shù)為1,第三個(gè)數(shù)以后的數(shù)是前兩個(gè)數(shù)的和。在程序中將使用InputBox輸入的值來確定要打印的數(shù)列項(xiàng)數(shù),產(chǎn)生的數(shù)列存放在一維數(shù)組中。程序代碼如下:OptionBase1PrivateSubForm_Click()DimnAsInteger,mAsInteger,kAsInteger,f()AsLongm=InputBox("請(qǐng)輸入要打印的數(shù)列項(xiàng)數(shù)","輸入項(xiàng)數(shù)",10)ReDimf(m)f(1)=0:f(2)=1'給數(shù)組第1、2位元素賦值
Forn=3Tom'利用循環(huán)計(jì)算3-m位數(shù)組元素
f(n)=f(n-1)+f(n-2)NextnClsPrintTab(10);"裴波納契數(shù)列"Print數(shù)組相關(guān)函數(shù)k=1'給打印定位變量k賦初值
Forn=1Tom'利用循環(huán)打印數(shù)組元素
PrintTab(k*10);f(n);Ifk=4Then'每行打印4個(gè)數(shù)值后換行
Printk=0EndIfk=k+1'更改打印位置
NextnEndSub數(shù)組相關(guān)函數(shù)3.LBound函數(shù)語法:LBound(數(shù)組名[,dimension])功能:返回?cái)?shù)組指定的維dimension的最小下標(biāo)。說明:如果省略dimension參數(shù),默認(rèn)返回?cái)?shù)組第一維的最小下標(biāo)例如:DimaAsVariantDimb(1To3,2To4)AsIntegerDimc(-1To2,1To3)AsIntegera=Array(1,2,3,4,5)PrintLBound(a),LBound(b,2),LBound(c)運(yùn)行的結(jié)果為02-1數(shù)組相關(guān)函數(shù)4.UBound函數(shù)語法:UBound(數(shù)組名[,dimension])功能:返回?cái)?shù)組指定的維dimension的最大下標(biāo)。說明:如果省略dimension參數(shù),默認(rèn)返回?cái)?shù)組第一維的最大下標(biāo)此函數(shù)與上述的Lbound函數(shù)一起使用可以確定一個(gè)數(shù)組的大小。例如:Dimb(1To3,2To4)AsIntegerPrint(UBound(b,1)-LBound(b,1)+1)*(UBound(b,2)-LBound(b,2)+1)程序?qū)⑤敵?數(shù)組相關(guān)函數(shù)5.Erase函數(shù)語法:Erase(數(shù)組名1[,數(shù)組名2,…])功能:重新初始化靜態(tài)數(shù)組以及釋放動(dòng)態(tài)數(shù)組對(duì)應(yīng)的內(nèi)存空間。說明:〔1〕對(duì)于靜態(tài)數(shù)組,Erase函數(shù)將按表3-5重新初始化數(shù)組的值。數(shù)組相關(guān)函數(shù)〔2〕對(duì)于動(dòng)態(tài)數(shù)組,Erase釋放動(dòng)態(tài)數(shù)組所使用的內(nèi)存。在下次引用該動(dòng)態(tài)數(shù)組之前,程序必須使用ReDim語句來重新定義該數(shù)組變量的維數(shù)。例如:DimaAsVarianta=Array(1,2,3,4,5)EraseaReDima(1,2)'語句APrintLBound(a)上述程序段,如果沒有語句A,編譯時(shí)就會(huì)出現(xiàn)下標(biāo)越界的錯(cuò)誤。用戶自定義類型除了Integer,String等標(biāo)準(zhǔn)的數(shù)據(jù)類型,VB還支持用戶自定義類型。所謂的自定義類型,類似于C語言中的結(jié)構(gòu)〔struct〕,這種類型的數(shù)據(jù)由假設(shè)干個(gè)不同類型的根本數(shù)據(jù)組成。自定義類型由Type語句來實(shí)現(xiàn):1.自定義類型的聲明形式Type類型名元素名1As類型名元素名2As類型名……元素名nAs類型名EndType用戶自定義類型例如要定義一個(gè)存放學(xué)生信息的類型,可以自定義類型student:TypeStudentNumAsLong‘學(xué)號(hào)NameAsString*10‘姓名,用長(zhǎng)度為10的定長(zhǎng)字符串來存儲(chǔ)SexAsString*5‘性別,用長(zhǎng)度為5的定長(zhǎng)字符串來存儲(chǔ)ScoreAsSingle‘得分,用單精度數(shù)來存儲(chǔ)EndType說明:〔1〕自定義類型一般在標(biāo)準(zhǔn)模塊中定義?!?〕自定義類型變量的聲明,與普通變量一樣,使用Dim語句定義。例如使用上述的Student類型定義變量Stu,可以表示為:DimStuAsStudent。〔3〕要訪問自定義類型中的元素,應(yīng)使用變量名.元素名的方法表示。例如要為上述的Stu變量中的Num賦值,可以寫成:Stu.Num="1"用戶自定義類型2.自定義類型數(shù)組的使用同樣可以使用自定義類型來定義數(shù)組。例如:Dima(1to10)asStudent。范例3-14說明了自定義類型數(shù)組的使用方法。用戶自定義類型【范例3-14】5種草藥的名稱、銷售量和單價(jià),計(jì)算各種草藥的銷售額。定義一個(gè)類型Herb,它包含name,salenum,price,total等5個(gè)元素。使用Herb說明數(shù)組a,將草藥的信息存放在數(shù)組中。其中total元素的值通過計(jì)算得出,其他元素的值通過inputbox接收。程序代碼如下:PrivateTypeherb‘定義類型HerbnameAsStringsalenumAsIntegerpriceAsSingletotalAsSingleEndTypePrivateSubForm_Click()Dima(1To5)AsherbDimiAsInteger用戶自定義類型Fori=1To5‘為a數(shù)組的每個(gè)元素賦值a(i).name=InputBox("輸入草藥名","數(shù)據(jù)錄入","")a(i).salenum=InputBox("輸入銷售數(shù)量","數(shù)據(jù)錄入","")a(i).price=InputBox("輸入草藥單價(jià)","數(shù)據(jù)錄入","")a(i).total=a(i).salenum*a(i).priceNextPrint"草藥名";Tab(10);"銷售數(shù)量";Tab(30);"草藥單價(jià)";Tab(50);"總額"Fori=1To5Printa(i).name;Tab(10);a(i).salenum;Tab(30);a(i).price;Tab(50);a(i).totalNextEndSub用戶自定義類型程序運(yùn)行的結(jié)果如下:圖3-26范例3-14運(yùn)行界面:
控件數(shù)組控件數(shù)組是一組具有共同名稱和類型的控件。它們的事件過程也相同。在設(shè)計(jì)時(shí),使用控件數(shù)組,可以讓一組類型相同的控件執(zhí)行相同的代碼。1.控件數(shù)組的創(chuàng)立設(shè)計(jì)時(shí)可以使用以下方法創(chuàng)立控件數(shù)組:〔1〕對(duì)同一類型的控件使用相同的名字。創(chuàng)立步驟如下:①繪制控件數(shù)組中要添加的控件〔必須為同一類型的控件〕。②選擇其中一個(gè)作為第一個(gè)控件,并使用其名字命名其它控件。③在為其它控件輸入現(xiàn)有名稱時(shí),VisualBasic將顯示一個(gè)對(duì)話框,要求確認(rèn)是否要?jiǎng)?chuàng)立控件數(shù)組。例如:在窗體上放置假設(shè)干個(gè)CommandButton控件,將其中一個(gè)名稱改為bcmd,并將其它的控件名稱均改為bcmd,此時(shí)VB將自動(dòng)創(chuàng)立控件數(shù)組〔2〕使用復(fù)制的方法添加控件。創(chuàng)立步驟如下:①繪制控件數(shù)組中的控件。②當(dāng)控件獲得焦點(diǎn)時(shí),選擇“編輯〞菜單中的“復(fù)制〞命令。③在“編輯〞菜單中,選擇“粘貼〞命令。VisualBasic將顯示一個(gè)對(duì)話框詢問是否創(chuàng)立控件數(shù)組。控件數(shù)組2.控件數(shù)組的使用舉例【范例3-15】設(shè)計(jì)圖3-27界面,實(shí)現(xiàn)單擊“重置〞按鈕時(shí),實(shí)現(xiàn)清空所有Text控件的文本信息。圖3-27范例3-15界面設(shè)計(jì)控件數(shù)組程序?qū)崿F(xiàn)步驟如下:〔1〕先在窗體上繪制一個(gè)TextBox控件?!?〕選擇TextBox控件,使用復(fù)制的方法再繪制另外兩個(gè)TextBox控件。在詢問是否創(chuàng)立控件數(shù)組時(shí),選擇“是〞〔3〕在窗體上繪制CommandButton控件,并將Caption屬性設(shè)置為“重置〞。〔4〕在CommandButton控件的Click事件中參加以下代碼:PrivateSubCommand1_Click()ForEachxInText1x.Text=""NextxEndSub或者使用下面的代碼:PrivateSubCommand1_Click()Fori=0ToText1.Count-1Text1(i).Text=""NextiEndSub使用ForEach…Next語句不需要知道控件數(shù)組的元素個(gè)數(shù),而使用For…Next語句那么必須通過訪問控件數(shù)組的Count方法獲得控件數(shù)組中元素的個(gè)數(shù)〔注意控件數(shù)組索引從0開始〕,并使用控件數(shù)組名〔下標(biāo)〕方式訪問數(shù)組中每個(gè)元素。3.5常用算法在本節(jié)中,將介紹檢索以及排序中常用的算法。3.5.1檢索算法3.5.2排序算法檢索算法檢索是數(shù)據(jù)處理中經(jīng)常使用的一種重要運(yùn)算。所謂的檢索,就是根據(jù)給定的關(guān)鍵字,在指定的集合中找出值為關(guān)鍵字的過程。如果找到那么檢索成功,否那么檢索失敗。下面將介紹順序檢索以及二分檢索兩種算法。檢索算法1.順序檢索算法順序檢索的根本思想是:從集合的一端開始順序掃描,將集合中的元素與給定值比較,如果相等那么檢索成功,當(dāng)掃描結(jié)束時(shí),未找到給定值,那么檢索失敗?!痉独?-16】設(shè)計(jì)如圖3-28的界面,隨機(jī)產(chǎn)生10個(gè)1-20之間的整數(shù),從鍵盤上輸入要查找的數(shù),如果找到,那么顯示其位置??丶傩栽O(shè)置如表3-6所示。檢索算法檢索算法程序代碼如下:Dima(1To10)AsInteger'通用模塊中定義數(shù)組PrivateSubCommand1_Click()DimkeyAsInteger,IAsInteger,findAsIntegerkey=Val(Text1.Text)'key為要查找的數(shù)find=0'find值為1表示查找成功,為0表示失敗ForI=1To10Ifa(I)=keyThenLabel3.Caption="這個(gè)數(shù)在第"&I&"個(gè)位置上"find=1ExitForEndIfNextIIf(find=0)ThenLabel3.Caption="找不到"EndSubPrivateSubForm_Activate()RandomizeForI=1To10a(I)=Int(20*Rnd)+1'產(chǎn)生隨機(jī)數(shù)Label1.Caption=Label1.Caption&a(I)&","'在Label上顯示數(shù)組NextIEndSub檢索算法2.二分檢索算法二分檢索算法又稱為折半查找,這個(gè)算法要求檢索的集合是一個(gè)有序序列。算法的根本思想是:將給定的值與集合中間位置上的元素比較,如果相等,那么檢索成功。否那么,如果給定值比中間位置元素小,那么在集合的前半局部繼續(xù)檢索,否那么在集合后半局部檢索。這樣每次檢索縮小一半的查找范圍,重復(fù)這個(gè)過程,直到檢索成功或者失敗。例如:在有序集合〔1,4,10,20,25,30,32,45,56,57,60〕中查找數(shù)字20方括號(hào)表示查找范圍,帶下劃線的數(shù)字為中間位置元素。經(jīng)過3次比較后檢索成功。查找過程如下:[1,4,10,20,25,30,32,45,56,57,60][1,4,10,20,25],30,32,45,56,57,601,4,10,[20,25],30,32,45,56,57,60假設(shè)查找數(shù)字37,經(jīng)過4次比較后檢索失敗。查找過程如下:[1,4,10,20,25,30,32,45,56,57,60]1,4,10,20,25,30,[32,45,56,57,60]1,4,10,20,25,30,[32,45],56,57,601,4,10,20,25,30,32,[45],56,57,60檢索算法【范例3-17】使用二分檢索法在集合〔1,4,10,20,25,30,32,45,56,57,60〕中查找給定數(shù)字。界面設(shè)計(jì)參照范例3-16。程序代碼如下:DimaPrivateSubCommand1_Click()DimkeyAsInteger,IAsInteger,findAsIntegerDimlowAsInteger,highAsInteger,midAsIntegerkey=Val(Text1.Text)'key為要查找的數(shù)find=0'find值為1表示查找成功,為0表示失敗low=0:high=10'low,high表示查找范圍DoWhilelow<=highmid=(low+h
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式虛擬平臺(tái)評(píng)測(cè)試題及答案
- 姓氏文化創(chuàng)意管理制度
- 農(nóng)村移風(fēng)易俗管理制度
- 婦幼衛(wèi)生監(jiān)測(cè)管理制度
- 行政組織理論的精細(xì)管理試題及答案
- 工廠營(yíng)銷設(shè)備管理制度
- 發(fā)酵工藝菌種管理制度
- 監(jiān)理師考試合作學(xué)習(xí)試題及答案
- 廚具用品倉(cāng)庫(kù)管理制度
- 學(xué)校班規(guī)班級(jí)管理制度
- ECMO并發(fā)癥教學(xué)課件
- 胸椎骨折的護(hù)理查房
- 【知識(shí)精講精研】高中英語備課組長(zhǎng)工作匯報(bào)
- 工程招標(biāo)代理服務(wù)投標(biāo)方案(技術(shù)方案)
- 錯(cuò)漏混料點(diǎn)檢稽核表空白模板
- 2021城鎮(zhèn)燃?xì)庥枚酌褢?yīng)用技術(shù)規(guī)程
- 地面三維激光掃描作業(yè)技術(shù)規(guī)程
- GB/T 15587-2023能源管理體系分階段實(shí)施指南
- 工程項(xiàng)目部組織機(jī)構(gòu)架構(gòu)
- 【保安服務(wù)】服務(wù)承諾
- 老年醫(yī)學(xué)科臨床營(yíng)養(yǎng)管理流程
評(píng)論
0/150
提交評(píng)論