江蘇計(jì)算機(jī)等級(jí)考試第八章過(guò)程_第1頁(yè)
江蘇計(jì)算機(jī)等級(jí)考試第八章過(guò)程_第2頁(yè)
江蘇計(jì)算機(jī)等級(jí)考試第八章過(guò)程_第3頁(yè)
江蘇計(jì)算機(jī)等級(jí)考試第八章過(guò)程_第4頁(yè)
江蘇計(jì)算機(jī)等級(jí)考試第八章過(guò)程_第5頁(yè)
已閱讀5頁(yè),還剩86頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

VisualBasic

(程序選Wl

第8章過(guò)程

江蘇省計(jì)算機(jī)等級(jí)考試

VisualBasic

教學(xué)要求程序送

“掌握VB的兩種過(guò)程:事件過(guò)程和通用過(guò)程

“掌握Sub過(guò)程的定義

“掌握Function過(guò)程的定義

今掌握過(guò)程的調(diào)用

“掌握參數(shù)的傳遞—按值傳遞和按地址傳遞

“掌握遞歸算法

今掌握變量的作用域

2江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

教學(xué)內(nèi)容(程序送山|

8.1Sub過(guò)程

8.2Fimction過(guò)程

8.3過(guò)程調(diào)用

8.4參數(shù)傳遞

8.5速歸過(guò)程

8.6變量的作用域

8.7程序示例

3江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

模塊化程序設(shè)計(jì)程序送

今基本思想:將一個(gè)大的程序按功能分割成一些小模塊

”特點(diǎn):

A各模塊相對(duì)獨(dú)立、功能單一、結(jié)構(gòu)清晰、接口簡(jiǎn)單

?控制了程序設(shè)計(jì)的復(fù)雜性

A提高元件的可靠性

?縮短開發(fā)周期

A避免程序開發(fā)的重復(fù)勞動(dòng)

?易于維護(hù)和功能擴(kuò)充

今開發(fā)方法:自上向下,逐步分解,分而治之

4江蘇計(jì)算機(jī)等

級(jí)考試

5江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

8.1Sub過(guò)程程序設(shè)計(jì)/

8.1.1事件過(guò)程

?當(dāng)對(duì)象識(shí)別某事件后,進(jìn)行的操作處理——以代碼的形式存

儲(chǔ)在事件過(guò)程中。

?分類:

A窗體事件過(guò)程

A控件事件過(guò)程

江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

1定義事件過(guò)程程序送H/

?[形式]:

PrivateSubForm_事件名([參數(shù)列表])

[局部變量木常數(shù)聲明]完全由系統(tǒng)

決定,用戶

語(yǔ)句塊___________________無(wú)權(quán)修改

EndSub窗體的事件過(guò)程名

中不使用其具體名

稱,而固定用Form

窗體事件固定有“Private”

關(guān)鍵字,說(shuō)明它是模塊級(jí)的

7江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

2窗體的Initialize、Load、Activate、Gotfocus事省■啰設(shè)

?Initialize(初始化)事件——配置窗體時(shí)觸發(fā)

?Load(加載)事件——窗體裝入內(nèi)存時(shí)觸發(fā)

?Activate(激活)事件——窗體被激活時(shí)觸發(fā)

?Gotfocus事件(得到焦點(diǎn))事件——窗體成為當(dāng)前焦點(diǎn)時(shí)觸發(fā)

“窗體上無(wú)可視控件時(shí),觸發(fā)窗體的Gotfocus事件;

“窗體上有可視控件時(shí),觸發(fā)控件的Gotfocus事件;

?執(zhí)行次序:

Initialize-?Load-?Activate-?Gotfocus

8江蘇計(jì)算機(jī)等

級(jí)考試

注意VisualBasic

程序送H/

?窗體的Initialize、Load事件發(fā)生在窗體被顯示之前,其中可放置

系統(tǒng)初始化命令,但其中語(yǔ)句有所限制;

?窗體加載后,只要不被卸載,就不會(huì)再執(zhí)行Initialize、Load事件,

但Activate事件會(huì)多次發(fā)生;

?當(dāng)訪問(wèn)另一窗體上的“非可視”數(shù)據(jù)或調(diào)用其中定義的全局過(guò)

程時(shí),只會(huì)觸發(fā)該窗體的Initialize事件,而Load事件不觸發(fā);

?當(dāng)訪問(wèn)另一窗體上的“可視”數(shù)據(jù)時(shí),會(huì)同時(shí)觸發(fā)該窗體的

Initialize和Load事件;

9江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

3定義控件的事件過(guò)程程序山41

?[一般形式]:

PrivateSub控件名—事件名([參數(shù)列表])

[局部變量和常數(shù)聲明]由系統(tǒng)決定,

語(yǔ)句塊用戶無(wú)權(quán)修改

EndSub

控件的事件過(guò)程名中必須

使用其具體名稱

控件事件固定有“Private”

關(guān)鍵字,說(shuō)明它是模塊級(jí)的

ro江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

4建立事件過(guò)程程序送H/

?打開“代碼編輯器”窗口;

?先選定某對(duì)象,再選定事件過(guò)程;

?編輯代碼;Hi工程1-Forml(Code)_]口國(guó)I

三]Load三1

Activate

Click

PrivateSubForm_Load()DblClick

Deactivate

EndSubDragDrop

Di-agOver

GotFocus

Initialize

KeyDown

KeyPress

KeyUp

LinkClose過(guò)程

算機(jī)等

VisualBasic

PrivateSubCommand1Click。程序山41

使用函數(shù)DimmAsInteger,nAsInteger

DimiAsInteger,kAsInteger

DimtAsLong,sAsLong

函數(shù)調(diào)用(三次)n=Val(Textl.Text)

m=Val(Text2.Text)

~~~fact(n)/(fact(m)*fact(n-m))

Text3.Text=Str(s)

<、EndSub

函數(shù)定義PrivateFunctionfact(kAsInteger)AsLong

計(jì)算k!DimiAsInteger

<_______fact=1

Fori=1Tok

fact=fact*i

Nexti

EndFunction算機(jī)等

級(jí)芍依

VisualBasic

過(guò)程的引入:程序送

在以下兩種情況下,經(jīng)常使用自定義過(guò)程:

(1)應(yīng)用程序中出現(xiàn)較頻繁的處理,僅僅是每次處理的數(shù)據(jù)不

同而已;

(2)程序中比較復(fù)雜的算法,獨(dú)立出來(lái),增強(qiáng)程序的可讀性;

“過(guò)程”的引入使得整個(gè)程序的結(jié)構(gòu)更加清晰,模塊化更強(qiáng)。

14江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

8.1.2通用過(guò)程程序送

?完成某一特定功能的程序段

——通用過(guò)程(自定義)

?必須顯式調(diào)用方可執(zhí)行;

?分為:

今公有過(guò)程(Public)

今私有過(guò)程(Private)

15江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

1通用Sub過(guò)程的定義程序送H/

。[一般形式]:

[PrivateIPublic][static]Sub<過(guò)程名>([<參數(shù)列表>])

<過(guò)程體)

EndSub

?[說(shuō)明]:

(1)以Sub開頭,EndSub結(jié)束,,中間是過(guò)程體——包括變量聲

明和語(yǔ)句塊;

(2)以Private為前綴的過(guò)程是模塊級(jí)的,以Public為前綴的過(guò)

程是應(yīng)用程序級(jí)的,缺省默認(rèn)是Public;

(3)Static選項(xiàng)說(shuō)明過(guò)程中的局部變量是靜態(tài)變量;

(4)過(guò)程名的命名規(guī)則和變量名相同,在同一個(gè)模塊中,過(guò)程

名必須是唯一的;16江蘇計(jì)算機(jī)等

級(jí)考試

說(shuō)明VisualBasic

程序送H/

(5)參數(shù)列表中的參數(shù)稱為形式參數(shù),可以沒(méi)有,但無(wú)參數(shù)時(shí)圓

括號(hào)不能省略;有多個(gè)參數(shù)時(shí),參數(shù)之間用逗號(hào)間隔;

(6)參數(shù)說(shuō)明格式:

[Optional][ByVal|ByRef]v變量名>[()][Asv數(shù)據(jù)類型刁

其中:

a)若參數(shù)是數(shù)組,則在變量名后面加一對(duì)圓括號(hào),但無(wú)維界定義

b)ByVai:指明參數(shù)傳遞方式是傳值;

c)ByRef:指明參數(shù)傳遞方式是傳地址,為缺省值;

d)若參數(shù)是字符型的,必須是不定長(zhǎng)字符串;

e)Optional:參數(shù)是可選的,必須定義在必選參數(shù)后面。

(7)當(dāng)過(guò)程調(diào)用結(jié)束,即執(zhí)行到EndSub語(yǔ)句,系統(tǒng)自動(dòng)返回調(diào)

用程序的調(diào)用語(yǔ)句處,執(zhí)行調(diào)用語(yǔ)句的下一條語(yǔ)句;

(8)過(guò)程不能嵌套定義,但可嵌套調(diào)用;

(9)ExitSub語(yǔ)句的功能是提前退出過(guò)程調(diào)用,返回調(diào)用語(yǔ)句。

VisualBasic

程序送H/

傷J:PrivateSubExchange(xAsInteger,yAsInteger)

DimTempAsInteger

Temp=x:x=y:y=Temp

EndSub

該通用過(guò)程實(shí)現(xiàn)交換功能,包含兩

個(gè)參數(shù),均是ByRef形式的參數(shù)。

18江蘇計(jì)算機(jī)等

級(jí)考試

2建立通用Sub過(guò)程VisualBasic

方法一:在“代碼編輯窗口”的“通用”中自行輸入;

方法二:進(jìn)入代碼編輯器窗口,執(zhí)行“工具”菜單的“添加

過(guò)程”,在“添加過(guò)程”對(duì)話框中輸入定義過(guò)程的名稱、類型

和范圍后單擊“確定”按鈕,系統(tǒng)會(huì)自動(dòng)在代碼窗口添加自定

義過(guò)程的框架C

19江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

3Sub過(guò)程調(diào)用____________________程序送

必須在事件過(guò)程或其它通用過(guò)程中顯示調(diào)用。

PrivateSubsubl()PrivateSubsub2(形參表)

......I①

CallSub2(實(shí)參表口過(guò)程語(yǔ)句

■"■"I5I■■的

EndSub1-EndSub

主調(diào)程序被調(diào)過(guò)程

注意:一個(gè)過(guò)程或函數(shù)可以被調(diào)用多次:

20江蘇計(jì)算機(jī)等

級(jí)考試

Sub過(guò)程調(diào)用P164VisualBasic

程序山41

[格式一]:Call<過(guò)程名>[(<實(shí)在參數(shù)表))]

[格式二]:<過(guò)程名>[<實(shí)在參數(shù)表》]

[功能]:對(duì)已定義的過(guò)程進(jìn)行調(diào)用。

如:

1.CallFact(x)

2.Factx

江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

說(shuō)明程序送

(1)調(diào)用的過(guò)程必須是已經(jīng)定義的,否則系統(tǒng)會(huì)出現(xiàn)“子程

序或函數(shù)未定義”的信息提示;

(2)實(shí)在參數(shù)可以是常量、變量或表達(dá)式;

(3)實(shí)在參數(shù)的數(shù)目及類型要和定義時(shí)必選參數(shù)保持一致,

否則系統(tǒng)會(huì)出現(xiàn)“參數(shù)不可選”的信息提示,參數(shù)之間用逗號(hào)

間隔;

(4)若子程序沒(méi)有參數(shù),則格式一中的括號(hào)可以省略;

(5)格式一和格式二的區(qū)別在于:格式二的參數(shù)表無(wú)須括號(hào),

而是和過(guò)程名之間用空格隔開;

江蘇計(jì)算機(jī)等

22

級(jí)考試

VisualBasic

"程序選id

例8?2試編寫一個(gè)找出任意一個(gè)正整數(shù)的因子的程序

P165

23江蘇計(jì)算機(jī)等

級(jí)考試

程序說(shuō)明:

OptionExplicit定義子程序factor

PrivateSubCommandl_Click()求因子,該子程序定義

DimintaAsInteger,stAsString

了兩個(gè)參數(shù),來(lái)傳遞求

inta=Textl

Callfactorfinta^st)因子實(shí)現(xiàn)前的原始數(shù)據(jù)

Text2=st過(guò)程factor和返回功能實(shí)現(xiàn)后的結(jié)

EndSub果數(shù)據(jù);

PrivateSubfactor/ByValnAsInteger,iAsString)

DimiAsInteger定義過(guò)程

Fori=1Ton-1

IfnModi=0Thens=s&Str(i)

Nexti

EndSub

優(yōu)點(diǎn):程序即Sub過(guò)程的使用不僅可以縮短程序的長(zhǎng)度,還能

24江蘇計(jì)算機(jī)等

夠使程序的結(jié)構(gòu)更加清楚。級(jí)考試

VisualBasic

程序設(shè)計(jì))

例:定義一個(gè)通用過(guò)程用以求一維數(shù)組中的最小值

PrivateSubvalue(a()AsInteger,minAsInteger)

DimiAsInteger

min=a(l)

Fori=2ToUBound(a)

Ifa(i)<minThenmin=a(i)

Nexti

EndSub

25江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

8?2Function過(guò)程程序送H/

Function過(guò)程的特點(diǎn)是返回一個(gè)值,因此我們通常也稱之

為自定義函數(shù)。通常我們利用Function過(guò)程得到一個(gè)數(shù)值或一個(gè)

字符串或一個(gè)邏輯值。

函數(shù)返回值的類型

[格式]:

[Private|Public]Functionv函數(shù)名〉([參數(shù)歹]表D[Asv婁I據(jù)類型>]

v函數(shù)體〉

EndFunction函數(shù)名=表達(dá)式

江蘇計(jì)算機(jī)等

26

級(jí)考試

VisualBasic

說(shuō)明程聲殳%!

(1)以Function開頭,以EndFunction結(jié)束,中間是函數(shù)體;

(2)函數(shù)名命名規(guī)則、參數(shù)列表的表示都和Sub過(guò)程相同;

(3)As數(shù)據(jù)類型:函數(shù)過(guò)程修由函數(shù)名返回一個(gè)值,值的類型

由[As數(shù)據(jù)類型]定義;★

(4)函數(shù)體中一定要有對(duì)函數(shù)名賦值的語(yǔ)句——函數(shù)名=表達(dá)式,

否則返回相應(yīng)類型的初值;★

(5)函數(shù)體內(nèi)可有ExitFunction語(yǔ)句---無(wú)條件退出函數(shù)過(guò)程,

返回主程序。

(6)Function過(guò)程不能嵌套定義,但可嵌套調(diào)用。

27江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

程序送H/

例:定義函數(shù):/(x)=3x3—2x2+6x—l

函數(shù)返回值的類型

PrivateFunctionf(ByValxAsInteger)AsInteger

f=3*xA3-2*xA2+6*x?l__________

EndFunction函數(shù)名=表達(dá)式

28江蘇計(jì)算機(jī)等

級(jí)考試

ExitFunction

Else

ForK=1ToN

Fact=Fact*K函數(shù)名=表達(dá)式

NextK

EndIf

EndFunction

江蘇計(jì)算機(jī)等

29

級(jí)考試

VisualBasic

2調(diào)用Function過(guò)程______________程聲殳%!

[格式]:〈函數(shù)名〉([實(shí)在參數(shù)表])

?:?[功能]:返回一個(gè)函數(shù)值。

?:?[說(shuō)明]:

(1)一般情況下,函數(shù)的調(diào)用出現(xiàn)在賦值語(yǔ)句中,并且在賦值號(hào)

的右側(cè);

(2)若函數(shù)沒(méi)有參數(shù),函數(shù)名后的括號(hào)不能省略;

(3)雖然VB允許象調(diào)用Sub過(guò)程那樣調(diào)用Function過(guò)程,但這樣

調(diào)用時(shí)系統(tǒng)不返回函數(shù)值,建議大家不要使用這種調(diào)用方法。

例Callfact(x)

如:Factx這兩種方法均放棄函數(shù)的返回值

30江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

例:用函數(shù)實(shí)現(xiàn)求一維數(shù)組中的最小值,對(duì)比前例(Sub)

PrivateFunctionmin(a()AsInteger)AsInteger

DimiAsInteger

min=a⑴回?cái)?shù)類型

Fori=2ToUBound(a)

Ifa(i)<minThenmin=a(i)

函數(shù)名=表達(dá)式

Nexti

EndSub

31江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

程序送H/

例:定義函數(shù)用以判斷一個(gè)數(shù)是否是素?cái)?shù)一

PrivateFunctionPrime(NAsInteger)AsBoolean

DimiAsInteger

Prime=False-------1----

可省略,因Prime的初始值就是fake

Fori=2ToN-l

IfNModi=0ThenExitFor

Nexti

Ifi=NthenPrime=True-------

函數(shù)名=表達(dá)式

EndFunction

32江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

[例]:S=l!+2!+…+10!對(duì)比P171

PrivateSubForm_Click()

DimSAsLong,iAsInteger

Fori=1To10

Nexti函數(shù)調(diào)用:s=s+Fg電。

Print"S=";S

EndSub

江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

例8-3:利用函數(shù)過(guò)程編寫一個(gè)求兩個(gè)正整數(shù)的最大公約數(shù)的程序

P166

PrivateFunctionGcd(ByValAAsInteger,ByVaiBAsInteger)AsInteger

DimRAsInteger

R=AModB

DoWhileR<>0PrivateSubForm_Click(),上調(diào)過(guò)程

A=BDimNAsInteger,MAsInteger,GAsInteger

輸入

B=RN=InputBoxC'N")

M=InputBoxC'輸入M")

R=AModB

G=Gcd(N,M)

LoopPrintN;"和";M;”的最大公約數(shù)是:";G

Gcd=BEndSub

EndFunction

34江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

834調(diào)用其他模塊中的過(guò)程程序送

1、調(diào)用其他窗體模塊中的公有過(guò)程

[格式]:CallV窗體名>.V過(guò)程名>[(V實(shí)在參數(shù)表,)]

[功能]:調(diào)用其他窗體模塊中定義的公有過(guò)程。

PrivateSubForm_Click()在Form2

中調(diào)用

DimaAsInteger

a=10

PrintFurml.Fact(a)

EndSub

江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

2、調(diào)用標(biāo)準(zhǔn)模塊中的公有過(guò)程程序送H/

[格式]:Call卜標(biāo)準(zhǔn)模塊名>.]<過(guò)程名刁(v實(shí)參表>)]

[功能]:調(diào)用其他標(biāo)準(zhǔn)模塊中定義的公有過(guò)程。

?[說(shuō)明]:

?:?若公有過(guò)程唯一,則直接調(diào)用,不加模塊名。

?:?若存在同名的公有過(guò)程,貝上

A調(diào)用本模塊中過(guò)程:直接調(diào)用,不加模塊名

A調(diào)用其它模塊中過(guò)程:必須加模塊名。

A被調(diào)用的函數(shù)和過(guò)程必須是公有的;

A函數(shù)也可以這樣調(diào)用。

36江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

3調(diào)用類模塊中的過(guò)程程序送H/

*[格式]:(不做要求、

dimdemoclassasnewclassl/—

calldemoclass,clssub([實(shí)參表]KZ

?:?[注意]:

調(diào)用類模塊中的共有過(guò)程,須用該類的某一實(shí)例修飾過(guò)程。

37江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

8.4參數(shù)的傳遞程序送H/

8.4.1形式參數(shù)和實(shí)在參數(shù)

①形式參數(shù):

米過(guò)程定義時(shí),在過(guò)程名后面的圓括號(hào)里的一系列變量;

*過(guò)程被調(diào)用執(zhí)行時(shí),系統(tǒng)才給形參分配存儲(chǔ)空間;

*可以是除定長(zhǎng)字符串外的任一簡(jiǎn)單變量;

*可以是數(shù)組,變量名后接吠

米簡(jiǎn)稱,形參"1stAsString*3X

St()AsString^3N

StAsString<

江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

①實(shí)在參數(shù)程序送H/

米主調(diào)程序中,調(diào)用語(yǔ)句中,出現(xiàn)在過(guò)程名后面圓括號(hào)里的變

量,是實(shí)在參數(shù),可以是常量、變量或表達(dá)式;

*過(guò)程調(diào)用傳遞參數(shù)時(shí),實(shí)參按“位置”和形參結(jié)合;

*實(shí)在參數(shù)和形式參數(shù),要求個(gè)數(shù)一樣,位置對(duì)應(yīng),類型一

致,否則會(huì)出錯(cuò);

*定長(zhǎng)字符串變量可以作為實(shí)在參數(shù);

*簡(jiǎn)稱“實(shí)參”

39江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

參數(shù)結(jié)合:(程序送山|

形參實(shí)參

變量變量、常量、表達(dá)式、數(shù)組元素

數(shù)組數(shù)組

40江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

舉例:程序送H/

常量

41江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

舉例:寫出下列程序執(zhí)行的結(jié)果(程序送山|

PrivateSubExamSubf\asinteger,y^asinteger)

x=x+10:y=y-10

過(guò)程的先

EndSub后順序無(wú)

PrivateSubForm-click()

o

Dimxasinteger,yasinteger

x=10:y=100—

CallExamSub(y,x)--------------

調(diào)用子過(guò)程時(shí),進(jìn)行的實(shí)

Print“x=”;x;"y=”;y際操作是丫=丫+10雙=乂-10

EndSub

42江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

842按值傳遞參數(shù)程序送H/

[格式]:ByVaiv變量說(shuō)明》

[傳遞方式]:

調(diào)用時(shí),系統(tǒng)為形參分配一個(gè)臨時(shí)存儲(chǔ)單元,并修實(shí)參

的值存儲(chǔ)到該臨時(shí)單元中。

若在被調(diào)用的過(guò)程體中改變了形參的值,只是改變了臨時(shí)

存儲(chǔ)單元中的數(shù)據(jù),對(duì)實(shí)參的值無(wú)任何影響。

43江蘇計(jì)算機(jī)等

級(jí)考試

[參數(shù)傳值傳遞]舉例:VisualBasic

程序送H/

PrivateSubForm_Click()

DimMAsInteger,NAsInteger

M=15:N=20

CallValue_change(M,N)

Print,,M金;MJ,N=,,;N

EndSub

PrivateSubValue_change(ByValxAsInteger,ByVaiyAsInteger)

x=x+20

y=y+20

PrintnX=n;x,"Y=";y

EndSub

44江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

傳值是單向的:(程序送山|

實(shí)在參數(shù)

形式參數(shù)

調(diào)用時(shí),實(shí)參將值傳遞給形參,兩者就無(wú)任何關(guān)聯(lián)。過(guò)

程中形參的值發(fā)生變化,對(duì)實(shí)參無(wú)任何影響。

45江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

843按地址傳遞參數(shù)程序送H/

[格式]:ByRefv變量說(shuō)明》

[傳遞方式]:

系統(tǒng)在調(diào)用執(zhí)行過(guò)程時(shí),為形參分配臨時(shí)存儲(chǔ)單元,并修實(shí)

參的內(nèi)存單元地址傳送給形參,存儲(chǔ)在臨時(shí)存儲(chǔ)單元中

在被調(diào)用的過(guò)程體中一切對(duì)形參的操作,都是直接對(duì)地址保

存在形參中的內(nèi)存單元中的數(shù)據(jù)進(jìn)行的,而實(shí)參就是保存在此內(nèi)

存單元中的數(shù)據(jù),所以任何對(duì)形參的操作也就是對(duì)實(shí)參的操作;

按地址傳遞時(shí),形式參數(shù)和實(shí)在參數(shù)共用同一“內(nèi)存單元”。

江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

[參數(shù)傳址傳遞]舉例:(對(duì)比前例)(程序送山|

PrivateSubForm_Click()

DimMAsInteger,NAsInteger

M=15:N=20

CallValue(M9N)

PrintMM=M;M,nN=M;N

EndSub

PrivateSubValue(xAsInteger,yAsInteger)

x=x+20

y=y+20

PrintnX=n;x,nY=n;y

EndSub

47江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

傳地址是雙向的:(程序送山|

實(shí)在參數(shù)

形式參數(shù)

48江蘇計(jì)算機(jī)等

級(jí)考試

舉例:計(jì)算5!+4!+3!+2!+1!P171VisualBasic

PrivateSubForm_Click()

DimSumAsInteger,IAsInteger

ForI=5To1Step-1

Sum=Sum+Fact(I)

NextI

PrintnSum=n;Sum

EndSub

PrivateFunctionFact(nAsInteger)AsInteger

DoWhilen>0修改:

Fact=Fact*n方法一:在形參n前加ByVai

n=n-1

Loop方法二:將調(diào)用語(yǔ)句中fact⑴改為

EndFunctionfact(⑴)

a人y

注意VisualBasic

程序送H/

參數(shù)有兩種傳遞方式:傳值(ByVai)和傳地址(ByRef)o

若調(diào)用時(shí)實(shí)參為常量或表達(dá)式,這兩種方式?jīng)]有區(qū)另山無(wú)論形

參定義的是按值傳遞還是按地址傳遞,系統(tǒng)都是按傳值方式傳遞

系統(tǒng)在調(diào)用時(shí)為形參分配一個(gè)臨時(shí)存儲(chǔ)單元,圈表達(dá)式的值

計(jì)算出來(lái),存儲(chǔ)到該臨時(shí)單元;調(diào)用結(jié)束,系統(tǒng)收回臨時(shí)單元。

調(diào)用函數(shù)或過(guò)程時(shí),將單個(gè)變量轉(zhuǎn)換成表達(dá)式的方法:將變

量放在一對(duì)括號(hào)中。如用Fact((I))的方式調(diào)用函數(shù),系統(tǒng)會(huì)按傳

值來(lái)處理。

50江蘇計(jì)算機(jī)等

級(jí)考試

VisualBasic

注意程聲殳%!

?按地址傳遞時(shí),當(dāng)實(shí)參是變量時(shí),實(shí)參與形參必須類型完

全一致;

?按地址傳遞時(shí),當(dāng)實(shí)參是常量或表達(dá)式時(shí),VB會(huì)自動(dòng)進(jìn)

行類型轉(zhuǎn)換,然后再傳遞相應(yīng)的值(即類型無(wú)須完全一致)函

?在算術(shù)表達(dá)式中,函數(shù)的優(yōu)先級(jí)最高,若表達(dá)式中有函數(shù)

的實(shí)參,而函數(shù)的參數(shù)又是按地址傳遞的,則函數(shù)中有可能改變

了實(shí)參的值,即改變了表達(dá)式中變量的值,會(huì)引起混淆。見樹

51江蘇計(jì)算機(jī)等

級(jí)考試

舉例:VisualBasic

程序送H/

PrivateSubForm_Click()

DimSAsSingle

S=125.5

CallConvert(⑸,”12笛.5”)

EndSub

實(shí)際的參數(shù)傳遞方式是按

Sing=Sing+23值傳遞,強(qiáng)制轉(zhuǎn)換后,

Print“Inx=";Inx,"Sing=";Singinx=126sing=12?5

EndSub

52TT77F

級(jí)考

練習(xí)

4-

(1)寫出程序運(yùn)行結(jié)果(2)若改為按值傳遞,結(jié)果又如何?

DimpAsinteger,qAsinteger,rAsinteger

PrivateSubForm_Click()

p=2:q=3

Printp9q,r

Callpq(p,q,r)

Printp,q,r

EndSub

PrivateSubpq(xAsinteger,yAsinteger,zAsinteger)

x=p+q

y=p-q

z=x+y

EndSub

級(jí)芍諷

VisualBasic

(程序送山|

寫程序運(yùn)行的結(jié)果:------

OptionExplicit?Forml

PrivateSubcommandl_click()二叵區(qū)I

工二11產(chǎn)2K=43

DimiAsInteger,jAsInteger

DimkAsInteger

i=l:j=2

k=fun(i,fun(i,j))+i+j.笄逋

Print"1='';i;f,J=n;j;"K='';k

EndSub

PrivateFunctionfun(aAsInteger,ByVaibAsInteger)AsInteger

a=a+b

b=b+a

fun=a+b

EndFunction學(xué)

VisualBasic

844數(shù)組參數(shù)____________________程序送H/

VB允許把數(shù)組作為形式參數(shù),聲明數(shù)組的格式是:

v數(shù)組名〉()Asv數(shù)據(jù)類型〉

[注意]:

(1)數(shù)組參數(shù)只能按地址傳遞,即不能用ByVa]來(lái)4多飾數(shù)組參數(shù)

(2)定義數(shù)組參數(shù)時(shí)無(wú)須說(shuō)明數(shù)組的維數(shù)和下標(biāo)變化范圍;

(3)調(diào)用過(guò)程時(shí),對(duì)應(yīng)的實(shí)在參數(shù)也必須是數(shù)組,但只需要數(shù)

組名,無(wú)須后跟括號(hào),且數(shù)據(jù)類型也要一致。'

(4)在過(guò)程體或函數(shù)體中無(wú)須對(duì)數(shù)組參數(shù)再次說(shuō)明;

(5)若實(shí)參是動(dòng)態(tài)數(shù)組,在過(guò)程體或函數(shù)體中可以使用重定義

語(yǔ)句修改數(shù)組的維界;

56江蘇計(jì)算機(jī)等

級(jí)考試

舉例VisualBasic

PrivateSubForm_Click()PrivateSubPrintArray(x()AsInteger)

Dima()AsInteger,iAsIntegerDimiAsInteger

DimnAsIntegerFori=LBound(x)ToUBound(x)

n=InputBox("請(qǐng)輸入數(shù)組的初始大小,Printx(i);

ReDima(n)Nexti

Fori=1TonPrint

a(i)=iEndSub

NextiPrivateSubArrayl(a()AsInteger)

CallPrintArray(a)DimmAsInteger,nAsInteger

CallArrayl(a)n=UBound(a)

CallPrintArray(a)m=InputBox—請(qǐng)輸入新大小”)

EndSubReDimPreservea(m)

輸入5和8,程序執(zhí)行結(jié)果為:DimiAsInteger

Fori=n+1Tom

a(i)=0

Nexti

EndSub

舉例:自定義一個(gè)將一維數(shù)組按從小到大排序的通用過(guò)程。

PrivateSubsort(a()AsInteger)PrivateSubCommandl_Click()

DimiAsInteger,jAsIntegerDimiAsInteger,jAsInteger

Fori=1ToUBound(a)-1Dima(10)AsInteger

Forj=i+1ToUBound(a)Fori=1To10

Ifa(i)>aO)Thena(i)=Int(8*Rnd)

temp=a(i)Picturel.Printa(i);

a(i)=a(j)Nexti

a(j)=tempCallsort(a)

EndIfFori=1To10

NextjPicturel.Printa(i);

NextiNexti

EndSubEndSub

廠江蘇計(jì)算機(jī)廿

級(jí)考試

練習(xí)

4-

完善程序:本程序的功能是找出100?200之間的所有素?cái)?shù)。

PrivateSubForm_Click()

DimiAsInteger,xAsInte

若不希望實(shí)參隨形參

Fori=100To200改變,就將參數(shù)傳遞

IfPrimed)Then

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論