![江蘇計(jì)算機(jī)等級(jí)考試第八章過(guò)程_第1頁(yè)](http://file4.renrendoc.com/view2/M01/10/2D/wKhkFmaVsbOAbxigAADSoV2_j_o607.jpg)
![江蘇計(jì)算機(jī)等級(jí)考試第八章過(guò)程_第2頁(yè)](http://file4.renrendoc.com/view2/M01/10/2D/wKhkFmaVsbOAbxigAADSoV2_j_o6072.jpg)
![江蘇計(jì)算機(jī)等級(jí)考試第八章過(guò)程_第3頁(yè)](http://file4.renrendoc.com/view2/M01/10/2D/wKhkFmaVsbOAbxigAADSoV2_j_o6073.jpg)
![江蘇計(jì)算機(jī)等級(jí)考試第八章過(guò)程_第4頁(yè)](http://file4.renrendoc.com/view2/M01/10/2D/wKhkFmaVsbOAbxigAADSoV2_j_o6074.jpg)
![江蘇計(jì)算機(jī)等級(jí)考試第八章過(guò)程_第5頁(yè)](http://file4.renrendoc.com/view2/M01/10/2D/wKhkFmaVsbOAbxigAADSoV2_j_o6075.jpg)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球電子鎮(zhèn)痛泵行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)正照式CMOS制冷相機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球生活用紙頭膠行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)奧美沙坦酯氫氯噻嗪片行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球帆布繪畫套件行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)防靜電HPL架空地板行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球ADAS清洗系統(tǒng)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)TGV激光微孔設(shè)備行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)導(dǎo)熱平臺(tái)和導(dǎo)熱板行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)13C-尿素呼氣測(cè)試試劑盒行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 醫(yī)療器械經(jīng)營(yíng)規(guī)范培訓(xùn)
- 2024拳擊比賽計(jì)劃書
- 管道直飲水系統(tǒng)技術(shù)和方案
- 婦產(chǎn)科國(guó)家臨床重點(diǎn)??乞?yàn)收匯報(bào)
- 行政處罰-行政處罰種類和設(shè)定(行政法課件)
- 柔性機(jī)械臂的振動(dòng)控制
- DB34T 4510-2023 靜脈用藥調(diào)配中心潔凈區(qū)管理規(guī)范
- 【課件】免疫系統(tǒng)組成和功能(人教版2019選擇性必修1)
- 土力學(xué)與地基基礎(chǔ)(課件)
- IT系統(tǒng)災(zāi)備和容災(zāi)解決方案項(xiàng)目設(shè)計(jì)方案
- 青島版二年級(jí)數(shù)學(xué)下冊(cè)(六三制)全冊(cè)課件【完整版】
評(píng)論
0/150
提交評(píng)論