




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
關(guān)于過程學(xué)時理論學(xué)時上機第1頁,共47頁,2022年,5月20日,10點11分,星期六2過程的引入:
使同類的操作不重復(fù)編寫,寫一次多次用把一項復(fù)雜的工作分成簡單的功能塊,分而治之過程:
完成一段獨立功能,可供其他過程使用(調(diào)用)。調(diào)用過程:
調(diào)用其他過程的過程調(diào)用過程:調(diào)用Sprg1調(diào)用Sprg1調(diào)用Sprg2子過程:Sprg1子過程:Sprg2第2頁,共47頁,2022年,5月20日,10點11分,星期六3
常用過程分類:Sub過程Function過程事件過程自定義子過程
內(nèi)部函數(shù)(標(biāo)準(zhǔn)函數(shù))自定義函數(shù)過程第3頁,共47頁,2022年,5月20日,10點11分,星期六46.1函數(shù)過程的定義和調(diào)用
引例6.1已知多邊形各條邊的長度和對角線的長度,計算多邊形的面積。計算多邊形面積,可將多邊形分解成若干個三角形。計算三角形面積的公式如下:x,y,z為三角形的三邊長第4頁,共47頁,2022年,5月20日,10點11分,星期六5PrivateSubForm_Click()Dima!,b!,c!,d!,e!,f!,g!,x!,y!,z!,s1!,s2!,s3!
a=InputBox("輸入a"):b=InputBox("輸入b")c=InputBox("輸入c"):d=InputBox("輸入d")e=InputBox("輸入e"):f=InputBox("輸入f")g=InputBox("輸入g")
x=(a+b+c)/2s1=Sqr(x*(x-a)*(x-b)*(x-c))
y=(c+d+e)/2s2=Sqr(y*(y-c)*(y-d)*(y-e))
z=(e+f+g)/2s3=Sqr(z*(z-e)*(z-f)*(z-g))MsgBox("多邊形面積="&s1+s2+s3)EndSub引例6.1第5頁,共47頁,2022年,5月20日,10點11分,星期六66.1.2函數(shù)過程的定義
在窗體、模塊等的代碼窗口把插入點放在所有現(xiàn)有過程之外,直接輸入函數(shù)過程。定義函數(shù)過程的形式如下:Public
全局函數(shù)過程,可被程序任何模塊調(diào)用Private
僅供本模塊中的其它過程調(diào)用函數(shù)名命名規(guī)則同變量名的命名規(guī)則形參只能是變量或數(shù)組名(),僅表示參數(shù)的個數(shù)、類型,無值[Public|Private]Function函數(shù)名(形參列表)[As類型]
變量聲明語句塊
函數(shù)名=表達(dá)式EndFunction形參名1[As類型],形參名2[As類型],…必須要有第6頁,共47頁,2022年,5月20日,10點11分,星期六7定義函數(shù)過程areaFunction
area(
)AsSingleDimc!c=(x+y+z)/2area=Sqr(c*(c-x)*(c-y)*(c-z))EndFunctionx!,y!,z!使用函數(shù)解決引例6.1
Subcommand1_click()
…輸入若干個三角形邊長
S=area(a,b,c)+area(c,d,e)+area(e,f,g)msgbox(“面積=”&S)EndSub調(diào)用函數(shù)過程第7頁,共47頁,2022年,5月20日,10點11分,星期六8第五章課后習(xí)題講解n=12Dima(1ton)asintegerDimb%()n=11Redimb(n)Dimc%[2,3]Dimd(1,1,2)asintegerDime%(10)Redime(1to12)Dimf!()Redimf(3,2)asintegerDimg%(2,3)Dimh(1to31to4)asinteger√√×√××××第8頁,共47頁,2022年,5月20日,10點11分,星期六9實驗C2
PrivateSubCommand1_Click()Dimx!x=Val(Text1)Ifx<10Theny=30ElseIfx>=10Andx<50Theny=2.5*xElseIfx>=50Theny=2*x
ify>150theny=150EndIfprintyEndSub第9頁,共47頁,2022年,5月20日,10點11分,星期六10PrivateSubCommand2_Click()Dims%(5To9)Fori=1To20k=mark(i)\10
SelectCasek
Case0To5s(5)=s(5)+1
Case6To8s(k)=s(k)+1
Case9To10s(9)=s(9)+1
EndSelectNextiFori=5To9
Picture2.Print"s(";i;")人數(shù)有";s(i);"個"NextiEndSubDimmark(1To20)AsInteger
'也可寫成mark%(1To20)PrivateSubCommand1_Click()Fori=1To20mark(i)=Int(Rnd*101)
IfiMod4=0ThenPicture1.Printmark(i)
ElsePicture1.Printmark(i);
EndIfNextiEndSub實驗E3
第10頁,共47頁,2022年,5月20日,10點11分,星期六116.1.2函數(shù)過程的定義
定義函數(shù)過程的形式如下:[Public|Private]Function函數(shù)名(形參列表)[As類型]
變量聲明語句塊
函數(shù)名=表達(dá)式EndFunction形參名1[As類型],形參名2[As類型],…必須要有第11頁,共47頁,2022年,5月20日,10點11分,星期六PublicFunctiongcd(m%,n%)AsIntegerEndFunction例6.2編一求最大公約數(shù)的函數(shù)過程Ifm<nThent=m:m=n:n=tr=mModnDoWhiler<>0m=n:n=r:r=mModnLoopgcd=n第12頁,共47頁,2022年,5月20日,10點11分,星期六136.1.3函數(shù)過程的調(diào)用
調(diào)用形式:函數(shù)名([實參列表])實參列表:必須與形參個數(shù)相同,位置與類型一一對應(yīng)??梢允峭愋偷某A?、變量、表達(dá)式。SubForm_Click
Dimx%,y%,z%x=124:y=24
z=gcd(x,y)
MsgBox("最大公約數(shù)是"&z)EndSub
程序運行流程
Functiongcd(m%,n%)AsIntegerIfm<nThent=m:m=n:n=tr=mModnDoWhiler<>0m=n:n=r:r=mModnLoop
gcd=nEndFunction第13頁,共47頁,2022年,5月20日,10點11分,星期六14Functionsum(m,n)EndFunction練習(xí):編一個計算m到n的和的函數(shù)過程,使用該函數(shù)求1+2+3+…+100的和,并輸出s=0Fori=mTons=s+iNextisum=sPrivateSubForm_Click()Printsum(1,100)EndSub第14頁,共47頁,2022年,5月20日,10點11分,星期六15例6.3編一函數(shù),統(tǒng)計字符串中漢字的個數(shù)。分析:字符以Unicode碼存放,每個漢字和英文是一個字符、占有兩個字節(jié)漢字的機內(nèi)碼最高位為1,若利用Asc函數(shù)求其碼值為小于0(以補碼表示)西文字符的最高位為0,Asc函數(shù)求其碼值為大于0第15頁,共47頁,2022年,5月20日,10點11分,星期六16FunctionCountC%(s$)Dimi%,t%,k%,c$
Fori=1ToLen(s)c=Mid(s,i,1)'取一個字符
IfAsc(c)<0Thenk=k+1
'漢字?jǐn)?shù)加1
Nexti
CountC=kEndFunctionPrivateSubCommand1_Click()Dimc1%
c1=CountC(Text1.Text)
Picture1.PrintText1;Tab(15);"有";c1;"個漢字?jǐn)?shù)"EndSub例6.3第16頁,共47頁,2022年,5月20日,10點11分,星期六176.2子過程的定義和調(diào)用
6.2.1引例例6.4編一過程,對image1控件進(jìn)行移動,通過參數(shù)Tag的值(1或-1)決定移動方向。
該過程不是為了計算獲得某個結(jié)果,而是進(jìn)行對控件移動的處理。
以下情況使用函數(shù)過程存在不便:不是為了獲得某個函數(shù)值,而是為了某種功能的處理。要獲得多個結(jié)果。VB中提供了使用更靈活的子過程。第17頁,共47頁,2022年,5月20日,10點11分,星期六186.2.2子過程的定義
格式:Sub子過程名[(參數(shù)列表)]
局部變量或常數(shù)定義語句
[ExitSub]
語句EndSub子過程名、形參與函數(shù)過程中對應(yīng)項的規(guī)定相同子過程名無值,所以也沒有類型,也不能在子過程內(nèi)對子過程名賦值第18頁,共47頁,2022年,5月20日,10點11分,星期六
子過程與函數(shù)過程的區(qū)別一般若程序有一個返回值時,用函數(shù)過程直觀;當(dāng)有多個返回值時,習(xí)慣用子過程函數(shù)過程必須有返回值,函數(shù)名有類型子過程名沒有值,過程名沒有類型,不能在子過程體內(nèi)對子過程名賦值形參個數(shù)的確定:通過形參,過程從主調(diào)程序獲得初值,或?qū)⒂嬎憬Y(jié)果返回給主調(diào)程序注意:不要將過程中所有變量均作為形參如:求最大公約數(shù)的函數(shù)過程參數(shù)確定形參沒有具體的值,只代表參數(shù)的個數(shù)、位置和類型gcd%(m%,n%)如:求最大公約數(shù)的子過程參數(shù)確定gcd(m%,n%,result%)而變量t作為臨時變量,不必作為形參第19頁,共47頁,2022年,5月20日,10點11分,星期六子過程的調(diào)用是一句獨立的調(diào)用語句,有兩種形式:
Call子過程名[(實參列表)]
或者
子過程名
[實參列表]用Call關(guān)鍵字時,若有實參,則實參必須用圓括號括起,無實參圓括號可省略。注意:若實參要獲得子過程的返回值,則實參只能是變量(與形參同類型的簡單變量、數(shù)組名),不能是常量、表達(dá)式,也不能是控件名。
6.2.3子過程的調(diào)用如:求最大公約數(shù)的子過程定義Sub
gcd(m%,n%)……EndSub這里的n既用于獲得初值,也用于將最大公約數(shù)返回。判斷下面那種調(diào)用正確gcd12,16×Dimm%,n%m=12n=16gcdm,n√第20頁,共47頁,2022年,5月20日,10點11分,星期六例6.5分別編一統(tǒng)計字符串S中定冠詞The出現(xiàn)個數(shù)的子過程和函數(shù)過程,并分別調(diào)用。InStr(c1,c2)在c1中查找c2是否存在,若找不到,結(jié)果為0如:InStr(“ABCDE”,”CD”),結(jié)果為3;InStr(“ABCDE”,”CE”),結(jié)果為0;處理方法:利用InStr函數(shù)反復(fù)在字符串S找The子串若找到后,再用Mid函數(shù)取“the”后的那部分字符串,再用Instr繼續(xù)找。先定義函數(shù)過程,之后抓住函數(shù)過程和子過程的區(qū)別,定義子過程。第21頁,共47頁,2022年,5月20日,10點11分,星期六22FunctionFuncThe(ByVals$)DimCount%,i%,st$Count=0
st=Trim(s)
i=InStr(st,"the")
DoWhilei>0
'當(dāng)i>0說明找到
Count=Count+1'統(tǒng)計個數(shù)加1
st=Mid(st,i+1)
'為找下一個準(zhǔn)備
i=InStr(st,"the")
Loop
FuncThe=CountEndFunctionPrivateSubCommand1_Click()'調(diào)用函數(shù)過程
Label3=FuncThe(Text1)EndSub例6.5第22頁,共47頁,2022年,5月20日,10點11分,星期六23SubProcThe(ByVals$,ByRefCount%)Dimi%,st$Count=0
st=Trim(s)
i=InStr(st,"the")
DoWhilei>0Count=Count+1
st=Mid(st,i+1)
i=InStr(st,"the")
LoopEndSubPrivateSubCommand2_Click()'調(diào)用子過程
Dimn%
CallProcThe(Text1,n)Label4=nEndSub例6.5第23頁,共47頁,2022年,5月20日,10點11分,星期六246.3參數(shù)傳遞
6.3.1形參與實參在參數(shù)傳遞中,一般是按位置傳送,與參數(shù)名沒有關(guān)系。如:在調(diào)用標(biāo)準(zhǔn)函數(shù)時,用戶根本不知道形參名,只要關(guān)心形參的個數(shù)、類型、位置。見下面Mid函數(shù)形式:
Mid(字符串$,起始位%,取幾位%)
調(diào)用語句:s=Mid("ThisisVB",9,2)
則s中的結(jié)果為“VB”。第24頁,共47頁,2022年,5月20日,10點11分,星期六256.3.2傳地址(ByRef)與傳值(ByVal)傳址方式:當(dāng)調(diào)用一個過程時,它將實參的地址傳遞給形參。因此在被調(diào)過程體中對形參的任何操作都變成了對相應(yīng)實參的操作,實參的值就會隨過程體內(nèi)對形參的改變而改變。傳值方式:當(dāng)調(diào)用一個過程時,系統(tǒng)將實參的值復(fù)制給形參,實參與形參斷開了聯(lián)系。在過程體內(nèi)對形參的任何操作不會影響到實參。第25頁,共47頁,2022年,5月20日,10點11分,星期六26例6.6傳地址與傳值形參獲得實參的值形參獲得實參的地址實參必須是同類型的變量名(包括簡單變量、數(shù)組名),不能是常量、表達(dá)式。第26頁,共47頁,2022年,5月20日,10點11分,星期六27SubSwap1(ByValx%,ByValy%)Dimt%t=x:x=y:y=tEndSubSubSwap2(x%,y%)Dimt%t=x:x=y:y=tEndSubSubCommand1_Click()Dima%,b%a=10:b=20Print"調(diào)用Swap1前a和b的值為:";Tab(40);a;b
CallSwap1(a,b)Print"調(diào)用Swap1后按傳值方式a和b的值為:";Tab(40);a;b
a=10:b=20
CallSwap2(a,b)Print"調(diào)用Swap2后按傳地址方式a和b的值為:";Tab(40);a;bEndSub編寫交換兩個數(shù)的過程,Swap1用傳值方式,Swap2用傳地址方式(ByRef
x%,ByRef
y%)例6.6第27頁,共47頁,2022年,5月20日,10點11分,星期六28傳地址與傳值方式選擇
要將被調(diào)過程中的結(jié)果返回給主調(diào)程序,則形參必須是---
不希望過程修改實參的值,則應(yīng)選用(),減少各過程間的關(guān)聯(lián)。形參是數(shù)組是地址傳遞。傳址方式傳值方式第28頁,共47頁,2022年,5月20日,10點11分,星期六形參是數(shù)組要以數(shù)組名加圓括號表示,不要給出維數(shù)下/上界;在過程中通過Lbound()/Ubound()函數(shù)確定每維的上界。實參是數(shù)組要給出數(shù)組名(可以不加圓括號)。當(dāng)數(shù)組作為參數(shù)傳遞時,系統(tǒng)將實參數(shù)組的起始地址傳給過程,使形參數(shù)組也具有與實參數(shù)組相同的起始地址。
6.3.3數(shù)組參數(shù)的傳遞Functionf(a%(),xAsInteger)AsLongf=xEndFunctionPrivateSubForm_Click()Dima%(1To10)y=f(a,10)PrintyEndSub………………Dima%(1To10)第29頁,共47頁,2022年,5月20日,10點11分,星期六30例6.7如下sum函數(shù)和子過程求數(shù)組a各元素和、并改變數(shù)組各元素值。Functionsum%(x())Dimi%sum=0
Fori=0ToUBound(x)
sum=sum+x(i):x(i)=2*x(i)
NextiEndFunctionPrivateSubCommand1_Click()Dimb(),s%b=Array(1,3,5,7,9)
s=sum(b())Print"調(diào)用sum過程后數(shù)組b的各元素和為:";sPrint"調(diào)用sum過程后數(shù)組b的各元素值為:"
Fori=0ToUBound(b)Printb(i);"";
NextiEndSub13579形參數(shù)組實參數(shù)組第30頁,共47頁,2022年,5月20日,10點11分,星期六316.5變量的作用域
過程級變量
在一個過程內(nèi)用Dim或Static語句 聲明的變量,只能在本過程中使用模塊級變量
在模塊內(nèi)、任何過程外用Dim、Private語句聲明的變量,可被本模塊的任何過程訪問全局變量
在模塊級用Public語句聲明的變量,可被應(yīng)用程序的任何過程或函數(shù)訪問
第31頁,共47頁,2022年,5月20日,10點11分,星期六326.5.1變量的作用域
例如:在下面一個標(biāo)準(zhǔn)模塊文件中不同級的變量聲明
PublicPaAsinteger
'全局變量
PrivateMbAsstring*10
'窗體/模塊級變量
SubF1()
DimFaAsinteger
‘過程級變量
……EndSub
SubF2()
DimFbAsSingle
‘過程級變量
EndSub第32頁,共47頁,2022年,5月20日,10點11分,星期六336.5.2靜態(tài)變量
靜態(tài)變量程序運行過程中可保留變量的值聲明形式:Static變量名
[AS類型]用Dim聲明的變量,每次調(diào)用過程時重新初始化例6.10比較Dim和Static兩者的區(qū)別。PrivateSubForm_Click()Staticcount%count=count+1Print"已單擊窗體";count;"次"EndSub
Dimcount%第33頁,共47頁,2022年,5月20日,10點11分,星期六34PublicaAsInteger'全局變量DimbAsInteger'模塊級變量PrivateSubCommand1_Click()
DimcAsInteger'局部變量
StaticdAsInteger'局部變量+靜態(tài)變量
a=1b=1c=1d=1Printa;b;c;dEndSubPrivateSubCommand2_Click()
DimaAsInteger'局部變量,作用域小的優(yōu)先于大的變量
a=a+1b=b+1c=c+1d=d+1Printa;b;c;dEndSubd=d+1第34頁,共47頁,2022年,5月20日,10點11分,星期六35作業(yè)P277實驗F:1,2,3復(fù)習(xí)書上例題第35頁,共47頁,2022年,5月20日,10點11分,星期六36上機題解答:Subs(b(),min)Dimi%
min=b(LBound(b))Fori=LBound(b)+1ToUBound(b)
Ifb(i)<minThenmin=b(i)NextiEndSubPrivateSubForm_Click()Dima(1To10),amin,i%'定義時要寫上類型a%(1To10),amin%Fori=1To10
a(i)=-Int(Rnd*101+300)Printa(i);NextiCalls(a(),amin)PrintPrint"最小值為";aminEndSub實驗F1求數(shù)組中最小值第36頁,共47頁,2022年,5月20日,10點11分,星期六37上機題解答:Functiongcd(ByValm!,ByValn!)AsIntegerIfm<nThent=m:m=n:n=tr=mModnDoWhiler<>0m=n:n=r:r=mModnLoop
gcd=nEndFunctionPrivateSubcommand1_Click()Dimx!,y!,z!x=Val(Text1)y=Val(Text2)
z=gcd(x,y)Picture1.Printx;y;zEndSub實驗F2求最大公約數(shù)能去掉ByVal嗎第37頁,共47頁,2022年,5月20日,10點11分,星期六386.6綜合應(yīng)用
1、數(shù)制轉(zhuǎn)換不同進(jìn)制數(shù)之間的轉(zhuǎn)換,可通過編程來實現(xiàn);也可通過VB提供的內(nèi)部函數(shù)來實現(xiàn)。例6.13編一函數(shù),實現(xiàn)一個十進(jìn)制整數(shù)轉(zhuǎn)換成二至十六任意進(jìn)制的字符。分析:十進(jìn)制正整數(shù)m轉(zhuǎn)換成r進(jìn)制數(shù),將m不斷除r取余數(shù)(若余數(shù)超過9,還要進(jìn)行相應(yīng)的轉(zhuǎn)換,例如10變成A,11變成B等),直到商為零,以反序得到結(jié)果,即最后得到的余數(shù)在最高位。第38頁,共47頁,2022年,5月20日,10點11分,星期六39綜合應(yīng)用-加密2、加密和解密信息加密有各種方法,最簡單的加密方法是將每個字母平移一個位置(稱為密鑰)。例如,后移5個位置,這時,A→F,B→G…Y→D,Z→E,a→f;解密是加密的逆操作。例6.14編一加密和解密的程序,即將輸入的一行字符串中的所有字母加密,加密后還可再進(jìn)行解密。
第39頁,共47頁,2022年,5月20日,10點11分,星期六40WelcomestudWC87IAsc=Asc(C)92+5IAsc>90IAsc=IAsc-26B對取得的一個字符”W”放入變量C中,加密的過程如左所示:C=Chr(IAsc)第40頁,共47頁,2022年,5月20日,10點11分,星期六41綜合應(yīng)用-查找3、查找什么是查找:查找是在線性表(在此為數(shù)組)中,根據(jù)指定的關(guān)鍵值,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)資化肥服務(wù)合同范本
- 70代勞動合同范本
- 公司設(shè)備收購合同范本
- 云南元旦晚會舞臺施工方案
- 出口黃金加工合同范本
- 公司交接合同范本
- 勞務(wù)委托施工合同范本
- 倉庫地面清潔合同范本
- 兼職推廣合同范本
- 加盟貨車合同范本
- 《火力發(fā)電廠水處理技術(shù)概述》課件
- 3.1產(chǎn)業(yè)轉(zhuǎn)移對區(qū)域發(fā)展的影響(第1課時) 【知識精研】高二地理課件(湘教版2019選擇性必修2)
- 2025年醫(yī)院實習(xí)協(xié)議書樣本
- 2022新教材蘇教版科學(xué)5五年級下冊全冊教學(xué)設(shè)計
- 2024-2025學(xué)年全國中學(xué)生天文知識競賽考試題庫(含答案)
- 加利福尼亞批判性思維技能測試后測試卷班附有答案
- 仿真技術(shù)在車架防腐性能開發(fā)中的應(yīng)用
- 初一平面直角坐標(biāo)系集體備課
- 公務(wù)員登記表
- 高一年級英語必修二學(xué)科導(dǎo)學(xué)案全冊
- 胡菊仁愛版九年級英語上教學(xué)計劃及教學(xué)進(jìn)度表
評論
0/150
提交評論