




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1教學目的了解程序設計的基本概念掌握VisualBasic程序的基本結構掌握變量、數(shù)組和表達式及運算符的基本用法掌握控制語句的用法掌握過程的用法了解面向對象的概念為進一步理解、實現(xiàn)算法和基本數(shù)據(jù)結構奠定基礎第5章
計算機程序設計2VB6.0程序設計基礎一、VB程序設計概述主要學習內(nèi)容和過程需要首先了解的問題VB程序格式中的注意點41.主要學習內(nèi)容和過程數(shù)據(jù)表達數(shù)值、文字、布爾,類型選擇與轉換操作方式運算符號、優(yōu)先級別,類型相關結構設計分支、循環(huán)、子程序、函數(shù)、類52.學習VB需首先了解的問題IDE
(IntegratedDevelopingEnvironment)菜單,工程,屬性,工具,控件,窗體幫助系統(tǒng)的使用67二、數(shù)據(jù)類型數(shù)據(jù)類型:信息的類別。主要有:數(shù)值數(shù)據(jù),字符數(shù)據(jù),圖像數(shù)據(jù),聲音數(shù)據(jù)等。不同類型的數(shù)據(jù)所占用的存儲空間大小不同。789101.布爾型Boolean占用
16bit(2Byte)存儲空間,常用來表示邏輯判斷的結果;取值只能是
True或是False。使用關鍵字
True和False,將
Boolean變量賦值為這兩個狀態(tài)中的一個。注:在將數(shù)值數(shù)據(jù)類型轉換為
Boolean值時,0轉換為
False,其他所有值轉換為
True。在將
Boolean值轉換為數(shù)值類型時,F(xiàn)alse將轉換為
0,True將轉換為
-1。10112.字符串string指用""括起來的一串字符。包括所有西文字符和漢字。字符串中包含的字符個數(shù)稱為字符串的長度。以無符號的16bit數(shù)字形式存儲,取值范圍為0到65535。每個數(shù)字代表一個按Unicode編碼的字符。11123.日期型Date為8字節(jié)整數(shù);日期表示范圍為:100年1月1日-9999年12月31日,時間表示范圍為:00:00:00-23:59:59必須用#括起。有嚴格的格式要求:如:#5/31/1993#,#2009–05-30#,#08:30:00AM#,#09/10/200008:30:00AM#輸出時自動轉換成年/月/日的形式。12134.數(shù)值型數(shù)據(jù)整型用于存放占不同存儲空間的整數(shù)。指不帶小數(shù)部分的數(shù)??梢员硎菊麛?shù)、負整數(shù)、零。由于占用的字節(jié)數(shù)不同,因此可以表示的數(shù)值范圍也不同。整數(shù)運算速度快、精確。但表示數(shù)的范圍小。字節(jié)型Byte:1Byte;整型Integer:2Byte;長整型Long:4Byte1314實型(浮點數(shù))用于表示不同范圍的帶有小數(shù)部分的實數(shù)。表示數(shù)的范圍大,但運算速度慢。單精度型Single:4Byte;可以用指數(shù)形式來表示,例:3.24E+8表示3.24108。雙精度型Double:8Byte;也可以用指數(shù)形式來表示,例:-5.67E-3表示
-5.6710-3。155.數(shù)據(jù)類型的選擇編程時根據(jù)實際需要選擇相應的數(shù)據(jù)類型;所有數(shù)值型(整型、實型)的數(shù)據(jù)都有一個有效范圍,程序中的數(shù)據(jù)如果超出規(guī)定的范圍,就會出現(xiàn)“溢出”,并顯示出錯誤信息。一般有:整型數(shù)據(jù)多選用Integer;字符型則用String;只有兩種狀態(tài)的布爾值只能選用Boolean。1516三、常量、變量及其聲明VB中的數(shù)據(jù)有兩種基本形式:常量變量16171.常量在程序運行過程中始終保持不變的數(shù)值或字符串。通過聲明和使用常量的標識符,代替一個在程序執(zhí)行時不會改變的值。在程序中直接用數(shù)字或符號表示。VB中提供了很多內(nèi)部常量,也允許用戶自己建立常量。常量一旦聲明,只能引用而不能改變,即不能對符號常量賦新值。如:整型常量1,3,-3,字符型常量:”A”,”ABC”,實型常量:0.3141593×10,-7.23E+9,&O12,&H96A,#09/7/2007#,true,false。17182.常量的聲明常量的聲明:Const常量名[As類型]=表達式例:ConstPI=3.14159ConstPI
AsSingle
=3.14159ConstP
AsInteger=&H14AConstA%=100+5018可選193.變量在程序運行過程中其值可變化的量。變量是一個有名字的內(nèi)存單元。VB進行計算時,使用變量臨時存放數(shù)據(jù)。變量的數(shù)據(jù)類型用于表示該變量占用的存儲空間大小。使用前需要先聲明其類型,以便為其分配相應的內(nèi)存空間。即:“先說明,后使用”。19204.變量的聲明每個變量都有名字和數(shù)據(jù)類型。通過名字對變量進行引用,實際是訪問內(nèi)存中的數(shù)據(jù)。變量的聲明格式:Dim變量名As類型Dim變量名,變量名,…As類型例:DimmyNameAsStringDimageAsIntegerDimaasinteger,basstring20一條Dim語句可以同時聲明多個不同類型變量21變量的有效范圍變量的有效范圍:從聲明起到包含它的程序塊結束語句止。例:PrivateSubcommand1_Click DimxAsInteger …..EndSubX的有效范圍請注意變量的命名規(guī)則變量的命名規(guī)則必須以字母或漢字開頭,由字母、漢字、數(shù)字或下劃線組成,不能含有小數(shù)點、空格等特殊字符。例如:X$Y,?ab,_a1等。變量名的長度不能超過255個字符。不能使用VB中的關鍵字(語句名,函數(shù)名等)。例如:CONST,Public,Print。VB中不區(qū)分變量名的大小寫。22235.自定義數(shù)據(jù)類型通過對已有數(shù)據(jù)類型的組合來定義需要的數(shù)據(jù)類型,Point屬于自定義數(shù)據(jù)類型。TypePointDimxAsSingleDimyAsSingleEndtypePoint屬于自定義變量,可用Point型的變量聲明自定義類型變量,可用變量名.元素名來使用。Dimp1AsPoint
p1.x=23.3
p1.y=44.824四、運算符和表達式VB中的運算符主要有:賦值運算符算術運算符字符串運算符邏輯運算符關系運算符使用運算符時的注意點:運算符表達的含義和功能;運算符與運算對象的關系;運算符的優(yōu)先級;運算符的書寫。24251.賦值運算符格式:變量名=表達式功能:將右端表達式的運算結果賦給左邊的變量作用:通過將運算結果存入等號左邊的變量,可改變變量的值。例:x=4+5注:賦值運算符的左邊必須是變量262.算術運算符運算符含義優(yōu)先級例子結果^乘方13^29-負號2-3-3*乘33*39/除310/33.33333333333333\整除410\33Mod取模510Mod31+加610+313-減63-10-7整除求余運算在一個表達式中表述負號27算術運算符中的優(yōu)先級表示優(yōu)先級別的數(shù)字越小,優(yōu)先級別越高;圓括號的優(yōu)先級別最高;運算按優(yōu)先級順序進行,在優(yōu)先級相同的情況下,計算順序為自左至右。例:表達式-6+15/5Mod16\4*2+3^2的結果是多少?2728例:用VB程序計算以下表達式:程序語句如下:Dimx1AsSingle:x1=1.5Dimx2AsSingle:x2=2.1Dimy1AsSingle:y1=2.9Dimy2AsSingle:y2=4.7DimLAsSingleL=((x1-x2)^2+(y1-y2)^2)^(1/2)28293.字符串運算格式:“字符串1”&“字符串2”“字符串1”+“字符串2”功能:將兩個字符串拼接起來,形成一個新的字符串30連接符“&”與“+”“+”:連接符前后的表達式應均為字符串,若均為數(shù)值則進行加法運算。若一個為字符串,另一個為數(shù)值則出錯。若一個為數(shù)值字符串、另一個為數(shù)值型數(shù)據(jù)則將前者轉換為數(shù)值進行加法運算?!埃Α保哼B接符前后的表達式不管是字符串還是數(shù)值,進行連接操作前,系統(tǒng)先將操作數(shù)轉換成字符串,然后再連接。3031字符串運算符例“高級”+“編程”“高級編程”“Thisisa“&“VB.NET““ThisisaVB.NET““aabbcc”出錯“aabbcc”&123456“aabbcc123456”31練習:寫出下列表達式的結果。32“1000”“1000”+”2000”“Today”+20“Today”+”20”“1000”&”2000”1000&20001000+”200”&20001000&”200”334.關系運算符33運算符含義例結果=等于“ABCDEF”=“ABS”False>
大于“ABCDEF”>”ABS”False>=大于等于“bc”>=”abcdef”True<
小于23<3False<=小于等于23<=3False<>
不等于77<>99TrueLike字符串匹配“ABCDEFG”Like“*DE*”true34關系運算符的規(guī)則如果兩個表達式是數(shù)值,則按其大小比較。如果兩個表達式是字符或字符串,則按字符的ASCII碼值從左到右一一比較,即首先比較兩個字符串的第1個字符,其ASCII碼值大的字符串大,如果第1個字符相同,則比較第2個字符,以此類推,直到出現(xiàn)不同的字符為止。關系運算符的優(yōu)先級相同。355.邏輯運算符用于布爾運算,結果僅為兩種:True或False353636運算符說明優(yōu)先級說明例子結果Not取反1當表達式為False時,結果為TrueNotFTrueAnd與2兩個表達式均為True時,結果才為TrueTAndFTAndTFalseTrueOr或3兩個表達式中有一個為True時,結果為TrueTOrFFOrFTrueFalse例:當A=1,B=2,C=3,DS=“A”,CS=“a”時,下列語句的值為什么?A+B<=COrDS<=CSAndDS+CS<“AA”37邏輯運算例例:變量Y表示年代,為整數(shù)。判斷Y是否是閏年。如是,表達式為True,否則為False。程序語句:DimYAsInteger:y=2011DimleapYearAsBooleanleapYear=((YMod4=0)And(YMod100<>0))Or(YMod400=0)37386.表達式用運算符將運算對象連接起來的、具有合法語義的式子。由常數(shù)、變量、運算符和圓括號按一定規(guī)則組成。表達式通過運算后有一個結果,運算結果的類型由數(shù)據(jù)和運算符共同決定。乘號用“*”表示,并且不能省略。例如a乘以b應寫成:a*b。括號必須成對出現(xiàn),均使用圓括號。表達式從左到右在同一基準上書寫,無高低、大小之分。39表達式中運算符的優(yōu)先級若一個表達式中有不同類型運算符,其優(yōu)先級順序為:括號>算術運算符>字符連接運算符>關系運算符>邏輯運算符如果表達式具有不同的數(shù)據(jù)精度,數(shù)據(jù)類型采用精度高的。按照:Integer<Long<Single<Double例:當a=2,b=3,c=4,d=5時,下列表達式的值為多少?Nota<=COr4*c=b^2Andb<>a+c40表達式的寫法例1:求一元二次方程2x2-x-1=0的根。分析:一元二次方程ax2+bx+c=0的根為-b±(b2-4ac)1/2/2a求一個根的表達式為:Dimx,yAsDoublex=(1.0+(1^2+4*2*1)^(1/2))/(2*2)
Y=(1.0-1^2+4*2*1)^(1/2))/(2*2)例2:輸入半徑R,求球體的體積。分析:球體的體積V=4πR3/3求球體體積的表達式為:DimVAsDoubleDimRAsDoubleV=4*3.14159*R^3/341程序控制語句42VB程序結構順序結構按書寫順序執(zhí)行的程序結構選擇結構循環(huán)結構4344一、條件分支語句當滿足一定條件時程序才能執(zhí)行。包括:單分支結構兩分支結構多分支結構44451.單分支結構格式:If<條件表達式>Then
語句塊EndIf式中:條件表達式的值為Boolean型,不可缺;語句塊可以是一條或多條語句,當條件表達式的值為True時,該語句塊被執(zhí)行。46例:當整數(shù)A大于0時,將A的值存入B中。DimAAsIntegerA=-45DimBAsIntegerB=0IfA>0Then B=AEndIfPrintB472.兩分支結構格式:If<條件表達式>Then<語句塊1>Else<語句塊2>EndIf功能:若表達式的值=True,執(zhí)行語句塊1;若表達式的值=False,執(zhí)行語句塊2。48例:設A和B均為整數(shù)。找出A和B中較大的一個數(shù)并存入到C中。DimAAsIntegerA=val(text1.text)DimBAsIntegerB=33DimCAsIntegerIfA>BThenC=AElseC=BEndIfPrintc例:輸出兩數(shù)中的大數(shù)。DimaAsIntegerDimbAsIntegera=val(inputbox(“請輸入a:”))b=val(inputbox(“請輸入b:”))
Ifa>bThenprinta
Elseprintb
EndIfInputbox函數(shù)運行時可以產(chǎn)生一個對話框,等待用戶向文本框中輸入數(shù)據(jù),當用戶單擊確定按鈕時,將輸入的內(nèi)容作為函數(shù)的返回值。49直接從鍵盤輸入兩個數(shù)進行比較503.多分支結構格式:If<條件表達式1>Then<語句塊1>ElseIf<條件表達式2>Then<語句塊2>……Else<語句塊n+1>EndIf功能:若條件表達式1的值=True,執(zhí)行語句塊1;若條件表達式2的值=True,執(zhí)行語句塊2;….順序為條件表達式1,條件表達式2,…….條件表達式n例:將百分制轉換為等級評分制。Ifscore>=90thenlevel=“優(yōu)”Elseifscore>80thenlevel=“良”….….Elselevel=“不及格”EndifPrintlevel例:找出三個數(shù)中的最大數(shù)。(選擇結構的嵌套)52DimA,B,C,maxAsIntegerA=12:B=33:C=8IfA>BThen
IfA>CThenmax=A
Elsemax=C
EndIfElse
IfB>CThenmax=B
Elsemax=C
EndIfEndIfPrint“最大數(shù)是:”,maxSelectCase語句也稱為情況語句。實現(xiàn)多分支選擇結構的另一種語句。先計算表達式的值,將該值依次與Case子句中表達式列表的值相比較。相匹配則執(zhí)行相應語句塊,然后再執(zhí)行Endselect后的語句。格式:Selectcase變量名或表達式case表達式列表1語句塊1[case表達式列表2]語句塊2┇
[caseelse]語句塊nEndselect5354例:根據(jù)百分制成績轉換對應的等級。SelectCasescore
Case90To100 Level="優(yōu)"
CaseIs>=80 Level="良"
CaseIs>=70 Level="中"
CaseIs>=60‘關系運算符表達式 Level="及格"
CaseElse Level="不及格"EndSelect55二、循環(huán)語句用于某些需要重復執(zhí)行的語句。主要有三種循環(huán)控制方式:For…NextWhile…WendDo…Loop循環(huán)語句561.For循環(huán)語句格式:For循環(huán)變量=初值To終值[Step步長][循環(huán)體][ExitFor][語句塊]Next[循環(huán)變量]執(zhí)行過程:將初值賦給循環(huán)變量判斷循環(huán)變量值是否超過終值,若是,退出循環(huán);若否,執(zhí)行循環(huán)體。遇到Next,修改循環(huán)變量值。再去判斷循環(huán)條件是否滿足,繼續(xù)執(zhí)行。類型一般為Integer循環(huán)變量的增量,默認值為1說明:循環(huán)變量必須為數(shù)值型,用于控制循環(huán)次數(shù)。步長是循環(huán)變量的增量,步長可以為正或負,步長為1時可省略。步長為0時,必須在循環(huán)體中有正常退出循環(huán)的出口,可以使用Exitfor。NEXT后的循環(huán)變量用于結束一次For循環(huán),根據(jù)終值和當前循環(huán)變量的值大小關系決定是否決定執(zhí)行下一次循環(huán)。57例:計算1+1/2+1/3+…+1/n的值,當1/n小于1e-6時結束計算。
DimsumAsSingle:sum=0Dimi%Fori=1To1000000sum=sum+1/i‘If1/i<0.00001ThenExitForNext5859例:計算1+2+…+100,并將結果存入變量
sum中。DimI,sumAsIntegersum=0Fori=1To100sum=sum+iIfi=50thenExitforendifNextIPrintsum602.While格式:While<條件表達式>[語句塊]Wend功能:用于對條件表達式進行計算。若表達式計算值為True,則執(zhí)行循環(huán)體;若為False,則執(zhí)行wend后的語句。While的循環(huán)次數(shù)取決于條件表達式的值。為防止出現(xiàn)死循環(huán),應確保適當時候使表達式的值False。條件表達式的值必須為True或False。61例:計算1+1/2+1/3+…+1/n的值,當1/n小于1e-6時結束計算。DimsumAsSingleDimnAsIntegern=1While1/n>0.000001sum=sum+1/nn=n+1Wend思考:1、如何用while…Wend實現(xiàn)計算1+2+…+100。2、判斷一個數(shù)是不是素數(shù)。62Dimi%,m%,TagAsBooleanm=Val(Text1.Text)Tag=True'假定是素數(shù)
Fori=2Tom-1If(mModi)=0ThenTag=False:exitforNextiIfTagThenPrintm&"是素數(shù)"ElsePrintm&"不是素數(shù)"EndIf6364Do…Loop循環(huán)結構
本章目錄Dimi%,sum%i=11Dowhilei<=10Sum=sum+ii=i+1LoopPrinti,sum65Dimi%,sum%i=11Dosum=sum+ii=i+1LoopWhilei<=10Printi,sum思考:兩段程序的執(zhí)行結果一樣嗎?66例:求兩數(shù)的最大公約數(shù)Ifm<nThent=m:m=n:n=tr=mmodnDoWhile(r<>0)m=nn=rr=mmodnLoopMsgBox“最大公約數(shù)=”&n67補充實驗題6.2編寫在10個數(shù)中選出最大數(shù)和最小數(shù)并輸出的程序.68補充實驗題6.3
編寫程序1-1/2+1/3-1/4+…-1/100之和.69補充實驗題6.4百錢買百雞問題。(循環(huán)的嵌套)數(shù)組71一、數(shù)組的概念和分類數(shù)組:用一個變量表示一組相同性質的數(shù)據(jù)。每個數(shù)據(jù)稱為數(shù)組元素,各元素通過下標區(qū)分。例如:求一個班50名學生的平均分和該班高于平均分的同學的成績。用一個變量無法統(tǒng)計,成績類型相同,人數(shù)確定可用數(shù)組。分類:靜態(tài)數(shù)組動態(tài)數(shù)組一維數(shù)組多維數(shù)組72靜態(tài)數(shù)組在聲明數(shù)組時就確定數(shù)組的維數(shù)及下標界限,即數(shù)組的大小,例a(3)。靜態(tài)數(shù)組聲明后,將有確定的內(nèi)存空間。例:Dimt(4)AsInteger動態(tài)數(shù)組在利用數(shù)組進行程序設計時,會出現(xiàn)數(shù)組長度在程序中發(fā)生變化的情況。在聲明時,僅指定數(shù)組名及類型。例:Dims()AsInteger一維數(shù)組:數(shù)組中的每個元素只有一個下標。例如a(1)。多維數(shù)組:當數(shù)組的下標超過一個時,稱為多維數(shù)組。例如:a(1,1),a(1,2)。Dima(1,1)asinteger共包含4個元素。分別是a(0,0),a(0,1),a(1,0),a(1,1).7374一維靜態(tài)數(shù)組的定義一維數(shù)組格式:Dim數(shù)組名(最大下標)As類型名說明:默認最小下標為0,若希望下標從1開始,可在代碼通用部分使用optionbase1語句將下標設為從1開始;“類型名”用于指定數(shù)組中每個元素的數(shù)據(jù)類型;數(shù)組名與簡單變量的起名方法相同;數(shù)組中元素的數(shù)據(jù)類型可以是任意基本類型;數(shù)組的元素個數(shù)等于:上界-下界+1;若數(shù)組中的元素為數(shù)值類,則初值為0;若為字符或字符串,則初值為Nothing。75動態(tài)數(shù)組動態(tài)數(shù)組:在聲明數(shù)組時不指定數(shù)組的維數(shù)及下標界限,在使用時才通過ReDim語句數(shù)組的下標界限。在程序運行時才為數(shù)組分配內(nèi)存空間。聲明格式:Dim數(shù)組名()As類型名使用方式:ReDim數(shù)組名(下標最大變量)76動態(tài)數(shù)組聲明定義一個含100個元素的動態(tài)數(shù)組:DimA()AsIntegerReDimA(99)通過修改變量的值來調(diào)整動態(tài)數(shù)組的大小:DimintA()AsIntegerDimintNAsIntegerintN=inputbox(“請輸入intN的值”)ReDimintA(intN)動態(tài)數(shù)組補充說明可多次使用ReDim語句定義同一個動態(tài)數(shù)組每次使用ReDim語句后會使原來數(shù)組中元素的值丟失。若要使數(shù)組中原來各元素的值不丟失,可用以下語句:Redimpreserve數(shù)組名()77練習:Dima()asintegerreDima(1to2)a(1)=5a(2)=6Printa(1),a(2)Redima(1to3)Printa(1),a(2),a(3)思考:如果把第6句改為:redimpreservea(1to3),那么第7句的執(zhí)行結果是什么?7879數(shù)組的初始化用法一:利用Array()函數(shù)給動態(tài)數(shù)組賦初值,數(shù)組大小由賦值的個數(shù)決定;Dims()s=Array(98,67,78,99,87,82)用法二:可通過賦值語句和循環(huán)結構給各元素賦值。Dimscore(1to50)asintegerfori=1to50score(i)=inputbox(“輸入第”&i&”名同學的成績”)Nexti80例:設某數(shù)組中存有6名學生的考試成績,要求對數(shù)進行如下操作:
每個分數(shù)*0.8+20,再重新存入到數(shù)組中。程序如下:Dims()s=Array(98,67,78,99,87,82)Fori=0To5Prints(i)s(i)=s(i)*0.8+20Prints(i)Next也可用循環(huán)及inputbox語句給數(shù)組賦值。Dims(5)AsIntegerFori=0To5s(i)=InputBox("請輸入分數(shù):")NextFori=0To5s(i)=s(i)*0.8+20Prints(i);NextI8182
例:跳水比賽采用7名裁判評分,分數(shù)在0到10之間。最后總分的評分標準為:
去掉一個最高分和一個最低分;
剩下的分數(shù)相加后乘以3再除5
然后乘上難度系數(shù)。
編寫程序,輸入以上數(shù)據(jù)并計算運動員得分。題目分析:找出最高和最低分的方法:逐個比較法先排好序再找最大和最小值將第1個數(shù)既假設為最大值,同時也假設為最小值,再逐個進行比較設計思想描述:定義含7個打分值的數(shù)組及難度系數(shù)將數(shù)組中的第1個分值作為最大值MAX和最小值MIN,同時也作為初始總分值SUM取下一個打分值:若該分值>MAX,則兩數(shù)交換;若該分值<MIN,則兩數(shù)交換;SUM=SUM+該分值判斷所有分值比較完否?若沒有則轉向執(zhí)行③;若比較結束則繼續(xù)執(zhí)行⑤;最后得分SUM=(SUM-MAX-MIN)*3/5*難度系數(shù)輸出最后得分8384PrivateSubForm_Click()DimdifficultAsSingledifficult=3.1DimScore()Score=Array(8,8.5,8,8.5,9,9.5,8)Dimmax,min,sumAsSinglemax=Score(0)min=Score(0)sum=Score(0)Fori=0To6IfScore(i)>maxThenmax=Score(i)
'找出得分的最大值
EndIfIfScore(i)<minThenmin=Score(i)
‘找最小值
EndIfsum=sum+Score(i)Nextsum=(sum-max-min)*3/5*difficultPrint("運動員的得分為"),sum
EndSub85冒泡排序(升序排列)算法描述:將待排序的數(shù)存于數(shù)組R中(R的下標范圍為0到n)。第1趟掃描:從R的起始處開始,依次比較相鄰的兩個數(shù)值的大小,若發(fā)現(xiàn)小者在下、大者在上,則交換二者的位置。即若R[j]>R[j+1],則交換R[j+1]和R[j]的內(nèi)容。當?shù)谝惶藪呙柰戤厱r,最大的數(shù)組元素被放在位置R[n]上。第二趟:按上述方法掃描R[0]到R[n-1],掃描的結果將使次大的數(shù)存放于R[n-1]中。最后,經(jīng)過n趟掃描,可以得到排序后的數(shù)組R。OptionBase1'設數(shù)組下標從1開始PrivateSubCommand1_Click()Dimi,n,m,kAsIntegerDimsun(),tempAsSingle'數(shù)組,變量定義n=10ReDimsun(n)'重新定義數(shù)組Print"排序前"sun=Array(12.5,34,45,21,67,4,12,45,47,56)'輸入的數(shù)據(jù)Fori=1Ton‘sun(i)=Val(InputBox("隨機輸入10個數(shù),準備排序:第"+Str(i)+"個","輸入10個數(shù)"))Printsun(i);'打印輸入的10個數(shù)Nexti'下面為排序代碼,n個數(shù)需要n-1次比較Form=1To9'因為只需要比較n-1次,所以1到9即可Fork=1To10-m‘每趟比較大的數(shù)都沉底,下次只需要比較余下的數(shù)大小If(sun(k)>sun(k+1))Thentemp=sun(k)sun(k)=sun(k+1)sun(k+1)=tempEndIfNextkNextmPrint'輸出空行,與前面輸出分開Print"排序后"Fori=1To10Printsun(i);NextiEndSubPrivateSubCommand2_Click()EndEndSub88例6.5
用選擇排序法將N(N=8)個無序數(shù)據(jù)(4938659776132750)按升序排列。89例6.6編寫一個程序,在給定的10個數(shù){8152134485677818799}的列表中查找數(shù)77。過程在設計規(guī)模較大、功能較復雜的程序時,VB通過工程來管理組成應用程序的所有不同模塊文件。模塊文件由若干過程組成,過程可以是事件過程,也可以是用戶自定義的子程序或函數(shù),統(tǒng)稱為通用過程。引入目的:使同類的操作不重復(操作方法相同、參數(shù)不同)過程:完成一定任務的一個VisualBasic語句塊,可供其他過程調(diào)用。1.過程的優(yōu)點過程允許將程序分為不連續(xù)的邏輯單元,獨立單元模塊比整個程序容易調(diào)試可以代碼共享,被其他程序多次調(diào)用,避免代碼重復問題2.過程的調(diào)用
從代碼中的其他某處調(diào)用過程,稱為過程調(diào)用
3.參數(shù)調(diào)用過程時,過程需要處理不同的數(shù)據(jù)(這些數(shù)據(jù)需要傳遞給過程,這些數(shù)據(jù)就稱之為參數(shù))。過程可以定義零個或多個參數(shù),而每個參數(shù)都代表過程希望傳遞給它的一個值。93過程的定義一段具有獨立功能的、在程序中可以被反復調(diào)用的程序段。被調(diào)用才可以執(zhí)行。根據(jù)是否有返回值,VB中的過程可分為:子程序過程(Sub過程)函數(shù)過程(Function過程)94Sub過程格式:Sub過程名([參數(shù)表])
語句序列exitsub
語句序列EndSub完成某個具體功能的過程體不能與關鍵字重名形式參數(shù)95過程添加:①代碼窗口直接定義過程②”工具”/”添加過程”實現(xiàn)添加過程PublicSubSort()
……EndSub在這些情況下就需要使用Sub過程在實際應用中,可能希望過程不返回值,例如,使用過程打印一個圖形有時需要過程執(zhí)行一系列操作,例如,利用過程對一批數(shù)據(jù)進行排序Sub過程例:PublicSubmax(ByValxAsInteger,ByValyAsInteger)DimcAsIntegerIfx>yThenc=xElsec=yEndIfPrintcEndSubPrivateSubForm_Click()Dima,bAsIntegera=InputBox("inputa")b=InputBox("inputb")CallMax(a,b)EndSubPublic和Private表明Sub過程的有效范圍,Public的有效范圍為整個工程,Private的有效范圍為當前模塊,默認為Public。過程名必須符合變量的命名規(guī)則。過程必須以EndSub結束。根據(jù)實際情況選擇形式參數(shù)的類型和個數(shù),過程無形式參數(shù)時,括號不能省略。使用ExitSub語句可以強制退出過程。在VisualBasic中所有的過程都是并列關系,不允許在一個子過程內(nèi)部再定義一個子過程。說明過程的調(diào)用兩種等價的調(diào)用方式Call過程名([實際參數(shù)列表])過程名實際參數(shù)列表例如:PrivateSubForm_Click()DimaAsSinglea=InputBox("輸入一個半徑")
CallArea(a)‘或Areaa
EndSubSubArea(rAsSingle)DimsAsSingles=3.14*r*rMsgBox"area="&sEndSubMsgbox可實現(xiàn)簡單信息輸出,格式為:Msgbox提示,按鈕,標題。按鈕項缺省為【確定】。說明在調(diào)用過程時,實際參數(shù)一定要和形式參數(shù)在類型和個數(shù)上匹配。在使用Call調(diào)用過程時,一定要用括號將實參括起來,除非沒有參數(shù),Call過程名(實參1,實參2,…)。通過過程名直接調(diào)用過程時,一定要去掉參數(shù)兩邊的括號,通過空格字符將過程名與參數(shù)分隔開。實際參數(shù)可以是變量、常量、表達式或數(shù)組。在調(diào)用過程時,一定要注意不要形成循環(huán)調(diào)用,即避免定義A過程時,調(diào)用了B過程,而定義B過程時,又調(diào)用了A過程。101說明過程調(diào)用:在過程調(diào)用時,實參將數(shù)據(jù)傳遞給形參,完成形參與實參的結合。例如,定義一個過程:Subsum(xasinteger,yasinteger)…EndsubPrivateSubForm_Click()…Callsum(a,b)…Endsub102Sub過程例過程定義:SubArea(ByRefAAsInteger,ByRefBAsInteger)DimSAsIntegerS=A*BPrint"Theareais:",SEndSub調(diào)用PrivateSubForm_Click()DimxAsInteger:x=5DimyAsInteger:y=7CallArea(x,y)EndSub后面不帶一對括號及參數(shù)定義格式如下:[Public|Private]Function過程名([形式參數(shù)])As<類型><語句塊>ExitFunction<語句塊>
函數(shù)名=返回值<語句塊>EndFunctionFunction過程定義例如:PublicFunctionmax(ByValxAsInteger,ByValyAsInteger)AsIntegerDimzAsIntegerIfx>yThenz=xElsez=yEndIf
max=z'將最大值返回EndFunctionPrivateSubForm_Click()Dima,bAsIntegera=InputBox("a=")b=InputBox("b=")Print"max=",max(a,b)EndSubFunction過程有一個返回值,以表達式形式調(diào)用。Function過程可以像其它函數(shù)一樣來調(diào)用。調(diào)用格式:過程名([參數(shù)表])Function過程以Function開始,以EndFunction結束。過程名必須符合變量的命名規(guī)則,同時不能與系統(tǒng)函數(shù)或其他過程同名。105說明:說明可以通過ExitFunction強制退出Function過程。函數(shù)過程通過函數(shù)名將返回值返回。因此,函數(shù)過程名要有數(shù)據(jù)類型,用As(數(shù)據(jù)類型)定義。例如:Publicfunctionfact1(byvalaasinteger)asintegerFunction過程的實際返回值的類型應該與定義的返回值類型一致。例:調(diào)用計算階乘的Function過程Facts:PrivateSubForm_Click()DimmAsInteger:m=12DimyAsLongy=facts(m)PrintyEndSub107108Functionfacts(ByValnAsInteger)AsLongDimiAsIntegerDimresultAsLongresult=1Fori=1Tonresult=result*iNextfacts=resultEndFunction109三、參數(shù)傳遞在過程調(diào)用中,用實際參數(shù)代替形式參數(shù)。參數(shù)傳遞的方式:傳值在形式參數(shù)前加:ByVal傳址在形式參數(shù)前加:ByRef參數(shù)項格式:ByVal|ByRef
參數(shù)名[()][As類型名]110按值傳遞按地址傳遞1.傳值方式將實際參數(shù)的值傳遞給形式參數(shù)傳值方式中,VB給形參分配一個臨時的內(nèi)存單元,將實參的值傳遞到這個臨時單元中去,實參向形參傳遞是單向的,如果在被調(diào)用的過程中改變了形參的值,則只是臨時單元的值變動,不會修改實際參數(shù)的值。當被調(diào)用過程結束返回調(diào)用過程時,VB將釋放給形分配的臨時內(nèi)存單元,實參的值保持不變。111實際參數(shù)臨時地址過程形式參數(shù)傳值方式例定義一個完成兩個數(shù)交換的過程exch:Subexch(ByvalxAsInteger,ByvalyAsInteger)DimtempAsIntegerprint"交換前x和y的值:",x,ytemp=xx=yy=tempprint"交換后x和y的值:",x,yEndSub112PrivateSubForm_Click()DimmAsIntegerDimnAsIntegerm=10:n=20print“調(diào)用exch前:",m,ncallexch(m,n)print"調(diào)用exch后:",m,nEndSub2.傳址(引用)方式將實際參數(shù)的引用(地址)傳遞給形式參數(shù)傳址方式是指實參的內(nèi)
溫馨提示
- 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年信息技術服務人工勞務分包合同樣本
- 2025年二手住宅買賣融資合同
- 2025年個人獨資企業(yè)股份買賣協(xié)議
- 2025年勞動合同爭議和解協(xié)議書格式
- 2025年策劃租賃辦公室合同續(xù)約協(xié)議書
- 2025年信息技術策劃顧問服務框架協(xié)議
- 2025年旅游行業(yè)策劃合作聯(lián)盟協(xié)議
- 2025年住宅小區(qū)物業(yè)經(jīng)理聘請協(xié)議
- 2025年合作伙伴年生產(chǎn)合同書標準范本
- 《民用無人駕駛航空器系統(tǒng)分類及分級》考試題庫(含答案)
- Y -S-T 1700-2024 銀礦采選業(yè)綠色工廠評價要求(正式版)
- 中職語文高教版(2023-2024)基礎模塊上冊二《風景談》公開課一等獎創(chuàng)新教學設計
- (高清版)JTGT 5440-2018 公路隧道加固技術規(guī)范
- 簡單的痛(復雜的評估)-醫(yī)學評估
- 第59講-熱重曲線分析(課件)
- 陪診服務項目計劃書
- 心內(nèi)科康復護理個案
- 招聘會會展服務投標方案(技術方案)
- 補鈣科學知識講座
- 物業(yè)園區(qū)污漬清潔工作規(guī)程培訓
評論
0/150
提交評論