VB8 過(guò)程教學(xué)課件_第1頁(yè)
VB8 過(guò)程教學(xué)課件_第2頁(yè)
VB8 過(guò)程教學(xué)課件_第3頁(yè)
VB8 過(guò)程教學(xué)課件_第4頁(yè)
VB8 過(guò)程教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩89頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

VisualBasic

'程序選id

第八章過(guò)程

武小川xiaochuan_wu@163.com

中國(guó)藥科大學(xué)計(jì)算機(jī)教研室

VisualBasic

教學(xué)要求'程序:

今掌握函數(shù)和過(guò)程的使用

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

“掌握變量的作用域(局部變量和全局變量)

今掌握遞歸算法

今會(huì)創(chuàng)建多窗體應(yīng)用程序

2中國(guó)藥科大學(xué)

計(jì)算機(jī)教研室

VisualBasic

教學(xué)內(nèi)容'程序選id

8.1Sub過(guò)程

8.2Function過(guò)程

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

8.4參數(shù)傳遞

8.5遞歸過(guò)程

8.6變量的作用域

8.7程序示例

8.8多窗體程序設(shè)計(jì)

.念.中國(guó)藥科大學(xué)

3儂計(jì)算機(jī)教研室

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

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

”特點(diǎn):

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

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

A提高元件的可靠性

?縮短開(kāi)發(fā)周期

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

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

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

京東中國(guó)藥科大學(xué)

4儂計(jì)算機(jī)教研室

VisualBasic

VB中過(guò)程的分類(lèi)'程序選id

京東中國(guó)藥科大學(xué)

y計(jì)算機(jī)教研室

VisualBasic

8.1Sub過(guò)程'程序:

8.1.1事件過(guò)程

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

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

?分類(lèi):

A窗體事件過(guò)程

A控件事件過(guò)程

京東中國(guó)藥科大學(xué)

學(xué)計(jì)算機(jī)教研室

VisualBasic

1定義事件過(guò)程'程序:

?[形式]:

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

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

決定,用戶(hù)

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

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

中不使用其具體名

稱(chēng),而固定用Form

窗體事件固定有“Private”

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

,裕品中國(guó)藥科大學(xué)

7

U計(jì)算機(jī)教研室

VisualBasic

2窗體的Initialize、Load、Activate、Gotfocus事中'程序山J

?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循相中國(guó)藥科大學(xué)

以計(jì)算機(jī)教研室

VisualBasic

注意'程序:

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

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

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

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

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

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

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

Initialize和Load事件。

.漓卜中國(guó)藥科大學(xué)

9

U計(jì)算機(jī)教研室

VisualBasic

3定義控件的事件過(guò)程'程序:

?[一般形式]:

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

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

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

EndSub

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

使用其具體名稱(chēng)

控件事件固定有“Private”

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

ro,裕品中國(guó)藥科大學(xué)

y計(jì)算機(jī)教研室

VisualBasic

4建立事件過(guò)程'程序:

?打開(kāi)“代碼編輯器”窗口;

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

?編輯代碼;FJ■工程1-Forml(Code)IT5網(wǎng)

Load三]

Activate

Click

DblClick

Deactivate

DragDrop

Di-agOver

GotFocus

Initialize

KeyDown

KeyPress

KeyUp

對(duì)象LinkClose過(guò)程

EndSub

VisualBasic

PrivateSubCommand1Click。'程序:

使用函數(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科大學(xué)

0計(jì)算機(jī)教研室

過(guò)程的引入VisualBasic

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

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

同而已;

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

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

,裕品中國(guó)藥科大學(xué)

14

以計(jì)算機(jī)教研室

VisualBasic

8.1.2通用過(guò)程'程序:

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

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

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

?分為:

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

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

京東中國(guó)藥科大學(xué)

15學(xué)計(jì)算機(jī)教研室

VisualBasic

1通用Sub過(guò)程的定義'程序:

。[一般形式]:

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

<過(guò)程體)

EndSub

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

(1)以Sub開(kāi)頭,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ò)程名

京東中國(guó)藥科大學(xué)

必須是唯一的;16學(xué)計(jì)算機(jī)教研室

VisualBasic

說(shuō)明(續(xù))'程序:

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

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

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

[Optional][ByVaiIByRef]<變量名>[()][As<數(shù)據(jù)類(lèi)型>]

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

b)ByVai:指明參藪傳遞方式是傳殖;

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ǔ)句。

17臨'中國(guó)藥科大學(xué)

母計(jì)算機(jī)教研室

VisualBasic

'程序:

傷J:PrivateSubExchange(xAsInteger,yAsInteger)

DimTempAsInteger

Temp=x:x=y:y=Temp

EndSub

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

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

,裕品中國(guó)藥科大學(xué)

18

以計(jì)算機(jī)教研室

VisualBasic

2建立通用Sub過(guò)程F'程序:

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

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

過(guò)程”,在“添加過(guò)程”對(duì)話(huà)框中輸入定義過(guò)程的名稱(chēng)、類(lèi)型

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

義過(guò)程的框架。

應(yīng).中國(guó)藥科大學(xué)

U計(jì)算機(jī)教研室

8.2Function過(guò)程定義VisualBasic

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

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

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

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

[格式]:\

[Private|Public]Function<函數(shù)名>([參數(shù)列表])LAs<數(shù)

據(jù)類(lèi)型>]

《函數(shù)體>

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

,念.中國(guó)藥科大學(xué)

20

U計(jì)算機(jī)教研室

VisualBasic

說(shuō)明'程序:

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

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

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

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

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

否則返回相應(yīng)類(lèi)型的初值;★(見(jiàn)例8T)

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

返回主程序。

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

.漓卜中國(guó)藥科大學(xué)

21

U計(jì)算機(jī)教研室

VisualBasic

'程序:

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

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

PrivateFunctionf(ByvalxAsInteger)AsInteger

f=3*x'3?2*xA2+6*x?l__________

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

22商中國(guó)藥科大學(xué)

垓計(jì)算機(jī)教研室

傳值的參數(shù)E

例8?1:編寫(xiě)一個(gè)求n!的函數(shù)。

23中國(guó)藥科大學(xué)

計(jì)算機(jī)教研室

VisualBasic

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

8.3.1事件過(guò)程的調(diào)用

事件過(guò)程由一個(gè)發(fā)生在VB中的事件來(lái)自動(dòng)調(diào)

用或由同一個(gè)模塊中的其他過(guò)程顯式調(diào)用。

例見(jiàn)P163

總之,事件過(guò)程可以由發(fā)生的事件自動(dòng)激活以響

應(yīng)系統(tǒng)或用戶(hù)的活動(dòng),也可以被其他過(guò)程調(diào)用而

激活。

.漓卜中國(guó)藥科大學(xué)

24

U計(jì)算機(jī)教研室

VisualBasic

8.3.2Sub過(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)用多次

「中國(guó)藥科大學(xué)

25

?計(jì)算機(jī)教研室

VisualBasic

'程序:

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

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

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

如:

1.CallFact(x)

2.Factx

P165

26(?!褐袊?guó)藥科大學(xué)

學(xué)計(jì)算機(jī)教研室

VisualBasic

說(shuō)明'程序:

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

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

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

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

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

間隔;

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

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

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

27中國(guó)藥科大學(xué)

計(jì)算機(jī)教研室

VisualBasic

'程序選id

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

P165

應(yīng).中國(guó)藥科大學(xué)

28

U計(jì)算機(jī)教研室

產(chǎn)序毀學(xué)程匿r

OptionExplicit

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

DimintaAsInteger,stAsString

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

inta=Textl

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

Text2=st過(guò)程factorI和返回功能實(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)度,還能

夠使程序的結(jié)構(gòu)更加清楚。

VisualBasic

'程序:

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

PrivateSubvalue(a()AsInteger,minAsInteger)

DimiAsInteger

min=a(l)

Fori=2ToUBound(a)

Ifa(i)<minThenmin=a(i)

Nexti

EndSub

,裕云中國(guó)藥科大學(xué)

30

以計(jì)算機(jī)教研室

VisualBasic

8.3.3調(diào)用Function過(guò)程'程序:

[格式]:V函數(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ù)的返回值

31/密鼠中國(guó)藥科大學(xué)

a計(jì)算機(jī)教研室

VisualBasic

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

PrivateFunctionmin(a()AsInteger)AsInteger

DimiAsInteger

min=a(l)函數(shù)類(lèi)型

Fori=2ToUBound(a)

Ifa(i)<minThenmin=a(i)

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

Nexti

EndSub

應(yīng).中國(guó)藥科大學(xué)

32

母計(jì)算機(jī)教研室

VisualBasic

'程序:

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

PrivateFunctionPrime(NAsInteger)AsBoolean

DimiAsInteger

Prime=False

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

Fori=2ToN-l

IfNModi=0ThenExitFor

Nexti

Ifi=NthenPrime=True

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

EndFunction

「中國(guó)藥科大學(xué)

33

?計(jì)算機(jī)教研室

[例]:

VisualBasic

例8-3:利用函數(shù)過(guò)程編寫(xiě)一個(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

35,?滴除中國(guó)藥科大學(xué)

母計(jì)算機(jī)教研室

VisualBasic

8.3.4調(diào)用其他模塊中的過(guò)程_________'程序:

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

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

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

PrivateSubForm_Click()在Form2

中調(diào)用

DimaAsInteger

a=10

PrintFurml.Fact(a)

EndSub

,裕品中國(guó)藥科大學(xué)

b計(jì)算機(jī)教研室

VisualBasic

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

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

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

[說(shuō)明]:

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

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

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

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

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

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

37循除中國(guó)藥科大學(xué)

以計(jì)算機(jī)教研室

VisualBasic

3.調(diào)用類(lèi)模塊中的過(guò)程'程序:

?:?[格式]:^受哀)

dimdemoclassasnewclassl/

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

?:?[注意]:

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

,念.中國(guó)藥科大學(xué)

38

U計(jì)算機(jī)教研室

VisualBasic

8.4參數(shù)的傳遞'程序:

8.4.1形參和實(shí)參

①形參:

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

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

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

*可以是數(shù)組,變量名后接括號(hào);

StAsString*3X

St()AsString^37

StAsString<

,念.中國(guó)藥科大學(xué)

39

U計(jì)算機(jī)教研室

VisualBasic

'程序:

?實(shí)參

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

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

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

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

會(huì)出錯(cuò);

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

健去中國(guó)藥科大學(xué)

40

計(jì)算機(jī)教研室

VisualBasic

參數(shù)結(jié)合P168'程序選id

形參實(shí)參

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

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

,裕品中國(guó)藥科大學(xué)

41

a計(jì)算機(jī)教研室

VisualBasic

舉例'程序:

VisualBasic

舉例:寫(xiě)出下列程序執(zhí)行的結(jié)果'程序選id

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

,裕品中國(guó)藥科大學(xué)

43

a計(jì)算機(jī)教研室

VisualBasic

8.4.2按值傳遞參數(shù)'程序:

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

[傳遞方式]:

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

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

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

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

,裕品中國(guó)藥科大學(xué)

44

以計(jì)算機(jī)教研室

VisualBasic

[參數(shù)傳值傳遞]舉例'程序:

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

,念.中國(guó)藥科大學(xué)

45

b計(jì)算機(jī)教研室

傳值是單向的VisualBasic

'程序選id

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

形式參數(shù)

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

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

扁中國(guó)藥科大學(xué)

y計(jì)算機(jī)教研室

VisualBasic

8?4?3按地址傳遞參數(shù)'程序:

[格式]: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)存單元”。

,裕品中國(guó)藥科大學(xué)

47

以計(jì)算機(jī)教研室

[參數(shù)傳址傳遞]舉例:(對(duì)比前例)VisualBasic

'程序選id

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

應(yīng).中國(guó)藥科大學(xué)

48

U計(jì)算機(jī)教研室

傳地址是雙向的VisualBasic

'程序選id

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

形式參數(shù)

,諭中國(guó)藥科大學(xué)

49

以計(jì)算機(jī)教研室

舉例:計(jì)算VisualBasic

5!+4!+3!+2!+1!P171'程序選id

PrivateSubForm_Click()

DimSumAsInteger,IAsInteger

ForI=5To1Step-1

Sum=Sum+Fact(I)M回昭

NextISum-120

PrintnSum=n;Sum

EndSub

PrivateFunctionFact(nAsInteger)AsInteger

Fact=1

DoWhilen>0修改:

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

n=n-1

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

EndFunctionfact((i)):

1*4兒的C叨逮

注意VisualBasic

'程序:

參數(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)處理。

中國(guó)藥科大學(xué)

51信.

U計(jì)算機(jī)教研室

注意VisualBasic

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

全一致;

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

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

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

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

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

,念.中國(guó)藥科大學(xué)

52

U計(jì)算機(jī)教研室

VisualBasic

'程序:

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

T產(chǎn)1

'計(jì)算

練習(xí)

4

(1)寫(xiě)出程序運(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

A學(xué)

練習(xí)VisualBasic

'程序選id

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

OptionExplicit*gorml|-||n||X

PrivateSubcommandl_click()

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

DimiAsInteger,jAsInteger

DimkAsInteger

i=l:j=2

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

PrintnI=n;i;j;"K='';k

EndSub

PrivateFunctionfun(aAsInteger,ByVaibAsInteger)AsInteger

a=a+b

b=b+a

fun=a+b

EndFunction

VisualBasic

8.4.4數(shù)組參數(shù)'程序:

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

v數(shù)組名〉()Asv數(shù)據(jù)類(lèi)型,

[注意]:

(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ù)類(lèi)型也要一致。、

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

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

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

京東中國(guó)藥科大學(xué)

57學(xué)計(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)PrivateSub

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論