版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024屆新疆博爾塔拉蒙古自治州第五師高級(jí)中學(xué)高三第二學(xué)期第二次檢測(cè)試題數(shù)學(xué)試題
- 尋隱者不遇大班課件
- 2024年鄭州客運(yùn)從業(yè)資格證考什么內(nèi)容
- 2024年四川小型客運(yùn)從業(yè)資格證考試
- 2024年昆明駕駛員客運(yùn)從業(yè)資格證模擬考試題
- 2024年紅河客運(yùn)從業(yè)資格證
- 2024年黑河客運(yùn)資格證仿真試題
- 2024年駕駛員客運(yùn)資格證模擬考試題答案大全
- 浙江省金華市金華十校2025屆高二上生物期末質(zhì)量跟蹤監(jiān)視試題含解析
- 安徽省太和縣民族中學(xué)2025屆高二上數(shù)學(xué)期末質(zhì)量跟蹤監(jiān)視試題含解析
- 林業(yè)政策與法律法規(guī)
- 長(zhǎng)沙找工作分析報(bào)告
- 中耳炎健康教育護(hù)理課件
- 孕期vte的預(yù)防及護(hù)理
- 《區(qū)塊鏈原理詳解》課件
- 2024年廣西廣投臨港工業(yè)有限公司招聘筆試參考題庫(kù)含答案解析
- 腦出血后遺癥康復(fù)護(hù)理查房課件
- ISO9001與ISO22000二合一體系的內(nèi)審檢查表(食品安全部)
- Unit 4 默寫(xiě)練習(xí) 人教版英語(yǔ)九年級(jí)全冊(cè)
- 院感迎檢院本部-課件
- 泌尿外科降低持續(xù)膀胱沖洗患者膀胱痙攣的發(fā)生率根本原因分析柏拉圖魚(yú)骨圖對(duì)策擬定
評(píng)論
0/150
提交評(píng)論