過程學時理論學時上機課件_第1頁
過程學時理論學時上機課件_第2頁
過程學時理論學時上機課件_第3頁
過程學時理論學時上機課件_第4頁
過程學時理論學時上機課件_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

關于過程學時理論學時上機第1頁,講稿共47頁,2023年5月2日,星期三2過程的引入:

使同類的操作不重復編寫,寫一次多次用把一項復雜的工作分成簡單的功能塊,分而治之過程:

完成一段獨立功能,可供其他過程使用(調用)。調用過程:

調用其他過程的過程調用過程:調用Sprg1調用Sprg1調用Sprg2子過程:Sprg1子過程:Sprg2第2頁,講稿共47頁,2023年5月2日,星期三3

常用過程分類:Sub過程Function過程事件過程自定義子過程

內部函數(標準函數)自定義函數過程第3頁,講稿共47頁,2023年5月2日,星期三46.1函數過程的定義和調用

引例6.1已知多邊形各條邊的長度和對角線的長度,計算多邊形的面積。計算多邊形面積,可將多邊形分解成若干個三角形。計算三角形面積的公式如下:x,y,z為三角形的三邊長第4頁,講稿共47頁,2023年5月2日,星期三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頁,2023年5月2日,星期三66.1.2函數過程的定義

在窗體、模塊等的代碼窗口把插入點放在所有現有過程之外,直接輸入函數過程。定義函數過程的形式如下:Public

全局函數過程,可被程序任何模塊調用Private

僅供本模塊中的其它過程調用函數名命名規(guī)則同變量名的命名規(guī)則形參只能是變量或數組名(),僅表示參數的個數、類型,無值[Public|Private]Function函數名(形參列表)[As類型]

變量聲明語句塊

函數名=表達式EndFunction形參名1[As類型],形參名2[As類型],…必須要有第6頁,講稿共47頁,2023年5月2日,星期三7定義函數過程areaFunction

area(

)AsSingleDimc!c=(x+y+z)/2area=Sqr(c*(c-x)*(c-y)*(c-z))EndFunctionx!,y!,z!使用函數解決引例6.1

Subcommand1_click()

…輸入若干個三角形邊長

S=area(a,b,c)+area(c,d,e)+area(e,f,g)msgbox(“面積=”&S)EndSub調用函數過程第7頁,講稿共47頁,2023年5月2日,星期三8第五章課后習題講解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頁,2023年5月2日,星期三9實驗C2

PrivateSubCommand1_Click()Dimx!x=Val(Text1)Ifx<10Theny=30ElseIfx>=10Andx<50Theny=2.5*xElseIfx>=50Theny=2*x

ify>150theny=150EndIfprintyEndSub第9頁,講稿共47頁,2023年5月2日,星期三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;")人數有";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頁,2023年5月2日,星期三116.1.2函數過程的定義

定義函數過程的形式如下:[Public|Private]Function函數名(形參列表)[As類型]

變量聲明語句塊

函數名=表達式EndFunction形參名1[As類型],形參名2[As類型],…必須要有第11頁,講稿共47頁,2023年5月2日,星期三PublicFunctiongcd(m%,n%)AsIntegerEndFunction例6.2編一求最大公約數的函數過程Ifm<nThent=m:m=n:n=tr=mModnDoWhiler<>0m=n:n=r:r=mModnLoopgcd=n第12頁,講稿共47頁,2023年5月2日,星期三136.1.3函數過程的調用

調用形式:函數名([實參列表])實參列表:必須與形參個數相同,位置與類型一一對應??梢允峭愋偷某A俊⒆兞?、表達式。SubForm_Click

Dimx%,y%,z%x=124:y=24

z=gcd(x,y)

MsgBox("最大公約數是"&z)EndSub

程序運行流程

Functiongcd(m%,n%)AsIntegerIfm<nThent=m:m=n:n=tr=mModnDoWhiler<>0m=n:n=r:r=mModnLoop

gcd=nEndFunction第13頁,講稿共47頁,2023年5月2日,星期三14Functionsum(m,n)EndFunction練習:編一個計算m到n的和的函數過程,使用該函數求1+2+3+…+100的和,并輸出s=0Fori=mTons=s+iNextisum=sPrivateSubForm_Click()Printsum(1,100)EndSub第14頁,講稿共47頁,2023年5月2日,星期三15例6.3編一函數,統(tǒng)計字符串中漢字的個數。分析:字符以Unicode碼存放,每個漢字和英文是一個字符、占有兩個字節(jié)漢字的機內碼最高位為1,若利用Asc函數求其碼值為小于0(以補碼表示)西文字符的最高位為0,Asc函數求其碼值為大于0第15頁,講稿共47頁,2023年5月2日,星期三16FunctionCountC%(s$)Dimi%,t%,k%,c$

Fori=1ToLen(s)c=Mid(s,i,1)'取一個字符

IfAsc(c)<0Thenk=k+1

'漢字數加1

Nexti

CountC=kEndFunctionPrivateSubCommand1_Click()Dimc1%

c1=CountC(Text1.Text)

Picture1.PrintText1;Tab(15);"有";c1;"個漢字數"EndSub例6.3第16頁,講稿共47頁,2023年5月2日,星期三176.2子過程的定義和調用

6.2.1引例例6.4編一過程,對image1控件進行移動,通過參數Tag的值(1或-1)決定移動方向。

該過程不是為了計算獲得某個結果,而是進行對控件移動的處理。

以下情況使用函數過程存在不便:不是為了獲得某個函數值,而是為了某種功能的處理。要獲得多個結果。VB中提供了使用更靈活的子過程。第17頁,講稿共47頁,2023年5月2日,星期三186.2.2子過程的定義

格式:Sub子過程名[(參數列表)]

局部變量或常數定義語句

[ExitSub]

語句EndSub子過程名、形參與函數過程中對應項的規(guī)定相同子過程名無值,所以也沒有類型,也不能在子過程內對子過程名賦值第18頁,講稿共47頁,2023年5月2日,星期三

子過程與函數過程的區(qū)別一般若程序有一個返回值時,用函數過程直觀;當有多個返回值時,習慣用子過程函數過程必須有返回值,函數名有類型子過程名沒有值,過程名沒有類型,不能在子過程體內對子過程名賦值形參個數的確定:通過形參,過程從主調程序獲得初值,或將計算結果返回給主調程序注意:不要將過程中所有變量均作為形參如:求最大公約數的函數過程參數確定形參沒有具體的值,只代表參數的個數、位置和類型gcd%(m%,n%)如:求最大公約數的子過程參數確定gcd(m%,n%,result%)而變量t作為臨時變量,不必作為形參第19頁,講稿共47頁,2023年5月2日,星期三子過程的調用是一句獨立的調用語句,有兩種形式:

Call子過程名[(實參列表)]

或者

子過程名

[實參列表]用Call關鍵字時,若有實參,則實參必須用圓括號括起,無實參圓括號可省略。注意:若實參要獲得子過程的返回值,則實參只能是變量(與形參同類型的簡單變量、數組名),不能是常量、表達式,也不能是控件名。

6.2.3子過程的調用如:求最大公約數的子過程定義Sub

gcd(m%,n%)……EndSub這里的n既用于獲得初值,也用于將最大公約數返回。判斷下面那種調用正確gcd12,16×Dimm%,n%m=12n=16gcdm,n√第20頁,講稿共47頁,2023年5月2日,星期三例6.5分別編一統(tǒng)計字符串S中定冠詞The出現個數的子過程和函數過程,并分別調用。InStr(c1,c2)在c1中查找c2是否存在,若找不到,結果為0如:InStr(“ABCDE”,”CD”),結果為3;InStr(“ABCDE”,”CE”),結果為0;處理方法:利用InStr函數反復在字符串S找The子串若找到后,再用Mid函數取“the”后的那部分字符串,再用Instr繼續(xù)找。先定義函數過程,之后抓住函數過程和子過程的區(qū)別,定義子過程。第21頁,講稿共47頁,2023年5月2日,星期三22FunctionFuncThe(ByVals$)DimCount%,i%,st$Count=0

st=Trim(s)

i=InStr(st,"the")

DoWhilei>0

'當i>0說明找到

Count=Count+1'統(tǒng)計個數加1

st=Mid(st,i+1)

'為找下一個準備

i=InStr(st,"the")

Loop

FuncThe=CountEndFunctionPrivateSubCommand1_Click()'調用函數過程

Label3=FuncThe(Text1)EndSub例6.5第22頁,講稿共47頁,2023年5月2日,星期三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()'調用子過程

Dimn%

CallProcThe(Text1,n)Label4=nEndSub例6.5第23頁,講稿共47頁,2023年5月2日,星期三246.3參數傳遞

6.3.1形參與實參在參數傳遞中,一般是按位置傳送,與參數名沒有關系。如:在調用標準函數時,用戶根本不知道形參名,只要關心形參的個數、類型、位置。見下面Mid函數形式:

Mid(字符串$,起始位%,取幾位%)

調用語句:s=Mid("ThisisVB",9,2)

則s中的結果為“VB”。第24頁,講稿共47頁,2023年5月2日,星期三256.3.2傳地址(ByRef)與傳值(ByVal)傳址方式:當調用一個過程時,它將實參的地址傳遞給形參。因此在被調過程體中對形參的任何操作都變成了對相應實參的操作,實參的值就會隨過程體內對形參的改變而改變。傳值方式:當調用一個過程時,系統(tǒng)將實參的值復制給形參,實參與形參斷開了聯系。在過程體內對形參的任何操作不會影響到實參。第25頁,講稿共47頁,2023年5月2日,星期三26例6.6傳地址與傳值形參獲得實參的值形參獲得實參的地址實參必須是同類型的變量名(包括簡單變量、數組名),不能是常量、表達式。第26頁,講稿共47頁,2023年5月2日,星期三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"調用Swap1前a和b的值為:";Tab(40);a;b

CallSwap1(a,b)Print"調用Swap1后按傳值方式a和b的值為:";Tab(40);a;b

a=10:b=20

CallSwap2(a,b)Print"調用Swap2后按傳地址方式a和b的值為:";Tab(40);a;bEndSub編寫交換兩個數的過程,Swap1用傳值方式,Swap2用傳地址方式(ByRef

x%,ByRef

y%)例6.6第27頁,講稿共47頁,2023年5月2日,星期三28傳地址與傳值方式選擇

要將被調過程中的結果返回給主調程序,則形參必須是---

不希望過程修改實參的值,則應選用(),減少各過程間的關聯。形參是數組是地址傳遞。傳址方式傳值方式第28頁,講稿共47頁,2023年5月2日,星期三形參是數組要以數組名加圓括號表示,不要給出維數下/上界;在過程中通過Lbound()/Ubound()函數確定每維的上界。實參是數組要給出數組名(可以不加圓括號)。當數組作為參數傳遞時,系統(tǒng)將實參數組的起始地址傳給過程,使形參數組也具有與實參數組相同的起始地址。

6.3.3數組參數的傳遞Functionf(a%(),xAsInteger)AsLongf=xEndFunctionPrivateSubForm_Click()Dima%(1To10)y=f(a,10)PrintyEndSub………………Dima%(1To10)第29頁,講稿共47頁,2023年5月2日,星期三30例6.7如下sum函數和子過程求數組a各元素和、并改變數組各元素值。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"調用sum過程后數組b的各元素和為:";sPrint"調用sum過程后數組b的各元素值為:"

Fori=0ToUBound(b)Printb(i);"";

NextiEndSub13579形參數組實參數組第30頁,講稿共47頁,2023年5月2日,星期三316.5變量的作用域

過程級變量

在一個過程內用Dim或Static語句 聲明的變量,只能在本過程中使用模塊級變量

在模塊內、任何過程外用Dim、Private語句聲明的變量,可被本模塊的任何過程訪問全局變量

在模塊級用Public語句聲明的變量,可被應用程序的任何過程或函數訪問

第31頁,講稿共47頁,2023年5月2日,星期三326.5.1變量的作用域

例如:在下面一個標準模塊文件中不同級的變量聲明

PublicPaAsinteger

'全局變量

PrivateMbAsstring*10

'窗體/模塊級變量

SubF1()

DimFaAsinteger

‘過程級變量

……EndSub

SubF2()

DimFbAsSingle

‘過程級變量

EndSub第32頁,講稿共47頁,2023年5月2日,星期三336.5.2靜態(tài)變量

靜態(tài)變量程序運行過程中可保留變量的值聲明形式:Static變量名

[AS類型]用Dim聲明的變量,每次調用過程時重新初始化例6.10比較Dim和Static兩者的區(qū)別。PrivateSubForm_Click()Staticcount%count=count+1Print"已單擊窗體";count;"次"EndSub

Dimcount%第33頁,講稿共47頁,2023年5月2日,星期三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頁,2023年5月2日,星期三35作業(yè)P277實驗F:1,2,3復習書上例題第35頁,講稿共47頁,2023年5月2日,星期三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求數組中最小值第36頁,講稿共47頁,2023年5月2日,星期三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求最大公約數能去掉ByVal嗎第37頁,講稿共47頁,2023年5月2日,星期三386.6綜合應用

1、數制轉換不同進制數之間的轉換,可通過編程來實現;也可通過VB提供的內部函數來實現。例6.13編一函數,實現一個十進制整數轉換成二至十六任意進制的字符。分析:十進制正整數m轉換成r進制數,將m不斷除r取余數(若余數超過9,還要進行相應的轉換,例如10變成A,11變成B等),直到商為零,以反序得到結果,即最后得到的余數在最高位。第38頁,講稿共47頁,2023年5月2日,星期三39綜合應用-加密2、加密和解密信息加密有各種方法,最簡單的加密方法是將每個字母平移一個位置(稱為密鑰)。例如,后移5個位置,這時,A→F,B→G…Y→D,Z→E,a→f;解密是加密的逆操作。例6.14編一加密和解密的程序,即將輸入的一行字符串中的所有字母加密,加密后還可再進行解密。

第39頁,講稿共47頁,2023年5月2日,星期三40WelcomestudWC87IAsc=Asc(C)92+5IAsc>90IAsc=IAsc-26B對取得的一個字符”W”放入變量C中,加密的過程如左所示:C=Chr(IAsc)第40頁,講稿共47頁,2023年5月2日,星期三41綜合應用-查找3、查找什么是查找:查找是在線性表(在此為數組

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論