Ch04_外部過(guò)程_第1頁(yè)
Ch04_外部過(guò)程_第2頁(yè)
Ch04_外部過(guò)程_第3頁(yè)
Ch04_外部過(guò)程_第4頁(yè)
Ch04_外部過(guò)程_第5頁(yè)
已閱讀5頁(yè),還剩27頁(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)介

1、第第4 4章章 函數(shù)過(guò)程和函數(shù)過(guò)程和SUBSUB過(guò)程過(guò)程 主要介紹:主要介紹:v函數(shù)過(guò)程函數(shù)過(guò)程vSUBSUB過(guò)程過(guò)程v參數(shù)傳遞規(guī)則參數(shù)傳遞規(guī)則 v變量作用域變量作用域 舉例:舉例: 例例1:輸出數(shù)列:輸出數(shù)列: 1, 1,1, 1,2,1, 1,3,3,1, 1,4,6,4 1, 1,5,10,10,5,1, ., 的前的前55項(xiàng)。項(xiàng)。 使用公式使用公式 Cnk=n!/(k!*(n-k)!) 來(lái)計(jì)算。對(duì)于來(lái)計(jì)算。對(duì)于給定的給定的n, k=1 to n。 前前55項(xiàng):項(xiàng):n=1 to 10將求階乘編制成將求階乘編制成函數(shù)。函數(shù)。Private Function fact(ByVal k As

2、Integer) As Long fact=1 For i% = 2 To k fact = fact * i% Next i%End Function 程序如下:程序如下: Private Sub Form_click()Dim zh As Long, n as Integer, k as IntegerFor n = 0 To 9 For k = 0 To n zh = fact(n)/fact(k)/fact(n-k) Print Space(5 - Len(Str(zh); Print Str(zh); Next k PrintNext nEnd Sub函數(shù):寫(xiě)在通用函數(shù):寫(xiě)在通用對(duì)象

3、聲明部分對(duì)象聲明部分 調(diào)用調(diào)用3次次函數(shù)過(guò)程的編寫(xiě)函數(shù)過(guò)程的編寫(xiě)函數(shù)過(guò)程用于函數(shù)過(guò)程用于計(jì)算計(jì)算/ /返回一個(gè)值返回一個(gè)值。格式格式:Type Function (形參列表形參列表) As 函數(shù)體函數(shù)體 End Function 函數(shù)體為實(shí)現(xiàn)運(yùn)算的若干語(yǔ)句,其中至少應(yīng)有函數(shù)體為實(shí)現(xiàn)運(yùn)算的若干語(yǔ)句,其中至少應(yīng)有一一個(gè)賦值語(yǔ)句為函數(shù)名賦值個(gè)賦值語(yǔ)句為函數(shù)名賦值。 將調(diào)用、被調(diào)用過(guò)程之間要相互傳遞的數(shù)據(jù)作為將調(diào)用、被調(diào)用過(guò)程之間要相互傳遞的數(shù)據(jù)作為形參(形式參數(shù))。形參(形式參數(shù))??梢允牵嚎梢允牵篜rivate / Public / Static函數(shù)過(guò)程的調(diào)用函數(shù)過(guò)程的調(diào)用 定義為定義為Publi

4、c(缺省屬性)的任何過(guò)程,可以被當(dāng)(缺省屬性)的任何過(guò)程,可以被當(dāng)前工程中其它窗體中的過(guò)程調(diào)用。前工程中其它窗體中的過(guò)程調(diào)用。 調(diào)用格式為調(diào)用格式為 窗體名窗體名.函數(shù)名函數(shù)名(實(shí)參列表實(shí)參列表) 一般應(yīng)像使用一般應(yīng)像使用VBVB內(nèi)部函數(shù)一樣來(lái)調(diào)用函數(shù)過(guò)程,內(nèi)部函數(shù)一樣來(lái)調(diào)用函數(shù)過(guò)程,調(diào)用后返回結(jié)果是一個(gè)函數(shù)值。(調(diào)用后返回結(jié)果是一個(gè)函數(shù)值。(放在表達(dá)式中放在表達(dá)式中) 定義為定義為Private的任何過(guò)程,只能被當(dāng)前窗體的過(guò)的任何過(guò)程,只能被當(dāng)前窗體的過(guò)程調(diào)用。程調(diào)用。 調(diào)用格式為調(diào)用格式為 函數(shù)名函數(shù)名(實(shí)參列表實(shí)參列表) 沒(méi)有形參時(shí),沒(méi)有形參時(shí),()()不能省略。不能省略。閱讀下面程序閱

5、讀下面程序 Function f(byVal x as integer) as integerFunction f(byVal x as integer) as integer f = x f = x* *x + 1x + 1 End function End function Private Sub Form_click() Private Sub Form_click() Dim i As Byte Dim i As Byte For i = 1 To 10 For i = 1 To 10 If i Mod 3 = 0 then print f(i) If i Mod 3 = 0 then

6、 print f(i) Next i Next i End Sub End Sub 1010 37 37 82 82舉例:舉例:例例4 4:打印:打印1000100020002000之間的素?cái)?shù)。之間的素?cái)?shù)。 編制函數(shù),用于判斷編制函數(shù),用于判斷1 1個(gè)整數(shù)是否是素?cái)?shù)。個(gè)整數(shù)是否是素?cái)?shù)。例例3 3:編制函數(shù)求:編制函數(shù)求x x、y y、z z中的最大值。中的最大值。例例2 2:編制一個(gè)函數(shù),求兩點(diǎn)的距離。:編制一個(gè)函數(shù),求兩點(diǎn)的距離。問(wèn)題:?jiǎn)栴}: 什么是形參?什么是形參? 什么是實(shí)參?什么是實(shí)參?編寫(xiě)函數(shù)總結(jié):編寫(xiě)函數(shù)總結(jié):3 3、確定形參(自變量)的個(gè)數(shù)、類型和傳遞方式。、確定形參(自變量)的

7、個(gè)數(shù)、類型和傳遞方式。2 2、確定函數(shù)的返回值的類型。、確定函數(shù)的返回值的類型。1 1、確定函數(shù)名。(不可與其他符號(hào)重名)、確定函數(shù)名。(不可與其他符號(hào)重名)4 4、函數(shù)體中至少有一次對(duì)、函數(shù)體中至少有一次對(duì)函數(shù)名賦值函數(shù)名賦值。舉例:舉例:例例5 5:計(jì)算數(shù)組:計(jì)算數(shù)組a a中最大值與數(shù)組中最大值與數(shù)組b b中最大值之中最大值之差(數(shù)組元素個(gè)數(shù)均小于差(數(shù)組元素個(gè)數(shù)均小于2020)。)。 定義一個(gè)函數(shù)過(guò)程,其功能是在定義一個(gè)函數(shù)過(guò)程,其功能是在n n個(gè)元素個(gè)元素的數(shù)組中找最大值。的數(shù)組中找最大值。例例6 6:試用:試用“函數(shù)函數(shù)”對(duì)前面的對(duì)前面的“牛頓迭代法求牛頓迭代法求根根”的程序進(jìn)行修改

8、。的程序進(jìn)行修改。SUB過(guò)程的編寫(xiě)過(guò)程的編寫(xiě)SUB過(guò)程用于完成某個(gè)操作,過(guò)程名不能被賦值,不過(guò)程用于完成某個(gè)操作,過(guò)程名不能被賦值,不能用于能用于返回一個(gè)值。返回一個(gè)值。格式: Type Sub (形參列表) SUB過(guò)程體 End sub 可以是:可以是:Private / Public / StaticSUB過(guò)程的調(diào)用過(guò)程的調(diào)用 Public或或Private屬性對(duì)過(guò)程調(diào)用的影響,與函數(shù)過(guò)屬性對(duì)過(guò)程調(diào)用的影響,與函數(shù)過(guò)程相同程相同 調(diào)用格式:調(diào)用格式: Call Sub過(guò)程名過(guò)程名(實(shí)參列表實(shí)參列表) 或或 Sub過(guò)程名過(guò)程名 實(shí)參列表實(shí)參列表 如:如:Call aaa(x, y, z) 或

9、或 aaa x, y, z 當(dāng)沒(méi)有形參時(shí),當(dāng)沒(méi)有形參時(shí),()()可以省略。可以省略。舉例:舉例:例例7 7:編程,將數(shù)組中各元素按值從大到小排:編程,將數(shù)組中各元素按值從大到小排 序,要求將數(shù)組排序編寫(xiě)為序,要求將數(shù)組排序編寫(xiě)為SubSub過(guò)程。過(guò)程。 例例6 6:編制一個(gè)過(guò)程,輸出:編制一個(gè)過(guò)程,輸出n n個(gè)字符。個(gè)字符。 輸出的字符作為形參。輸出的字符作為形參。請(qǐng)看下面程序請(qǐng)看下面程序Sub swap(x as single, y as single)Sub swap(x as single, y as single) Dim t as single Dim t as single t =

10、 x : x = y : y = t t = x : x = y : y = tEnd SubEnd SubPrivate Sub Form_click()Private Sub Form_click() Dim a as single, b as single Dim a as single, b as single a = 10 : b =5 a = 10 : b =5 print a, b print a, b call swap(a,b) call swap(a,b) print a, b print a, bEnd SubEnd Sub 10 5 10 5 10 5 10 5關(guān)于外部

11、過(guò)程關(guān)于外部過(guò)程 Q1Q1:如何將數(shù)據(jù)傳遞給外部過(guò)程?:如何將數(shù)據(jù)傳遞給外部過(guò)程? 外部過(guò)程是一個(gè)獨(dú)立的程序,完成一個(gè)相外部過(guò)程是一個(gè)獨(dú)立的程序,完成一個(gè)相對(duì)完整的功能。對(duì)完整的功能。 通過(guò)調(diào)用來(lái)運(yùn)行外部過(guò)程。通過(guò)調(diào)用來(lái)運(yùn)行外部過(guò)程。Q2Q2:如何將計(jì)算結(jié)構(gòu)返回到主控:如何將計(jì)算結(jié)構(gòu)返回到主控( (調(diào)用調(diào)用) )過(guò)程?過(guò)程?參數(shù)傳遞規(guī)則參數(shù)傳遞規(guī)則 按地址傳遞:按地址傳遞: 缺省屬性,或修飾符為缺省屬性,或修飾符為“Byref” 按值傳遞:按值傳遞: 形參聲明處變量名前的修飾符是形參聲明處變量名前的修飾符是“Byval” Byval” 按值傳遞按值傳遞2 2、調(diào)用時(shí),將實(shí)參的值賦給按值傳遞的形

12、參。、調(diào)用時(shí),將實(shí)參的值賦給按值傳遞的形參。在函數(shù)或過(guò)程中,對(duì)按值傳遞形參變量值的改在函數(shù)或過(guò)程中,對(duì)按值傳遞形參變量值的改變不會(huì)導(dǎo)致對(duì)應(yīng)實(shí)參變量值的改變。變不會(huì)導(dǎo)致對(duì)應(yīng)實(shí)參變量值的改變。 1 1、形參聲明處變量名前的修飾符是、形參聲明處變量名前的修飾符是“Byval”,實(shí)參應(yīng)為與形參相同類型的表達(dá)式。實(shí)參應(yīng)為與形參相同類型的表達(dá)式。 按值傳遞過(guò)程按值傳遞過(guò)程如:如:fact(i)fact(i)對(duì)對(duì) function fact(ByVal i as Byte)function fact(ByVal i as Byte)的調(diào)用的調(diào)用 。函數(shù):函數(shù):fact(ByVal i as ByteByVa

13、l i as Byte)5主程序:主程序:Form_Click()i:i:5調(diào)用調(diào)用返回返回1、調(diào)用時(shí),創(chuàng)建虛參、調(diào)用時(shí),創(chuàng)建虛參i的存儲(chǔ)單元。的存儲(chǔ)單元。2、將實(shí)參的值復(fù)制給虛參。、將實(shí)參的值復(fù)制給虛參。3、調(diào)用結(jié)束后,虛參被釋放。、調(diào)用結(jié)束后,虛參被釋放。0i=0運(yùn)行運(yùn)行 fact(i)按地址傳遞按地址傳遞1、數(shù)組只能按地址傳遞。、數(shù)組只能按地址傳遞。2、如果實(shí)參是一個(gè)常量或表達(dá)式,只能按值、如果實(shí)參是一個(gè)常量或表達(dá)式,只能按值 傳遞。傳遞。3、按地址傳遞時(shí),過(guò)程中對(duì)形參變量值的改、按地址傳遞時(shí),過(guò)程中對(duì)形參變量值的改 變即是對(duì)實(shí)參變量的改變。變即是對(duì)實(shí)參變量的改變。 按值傳送為單向傳遞;

14、按值傳送為單向傳遞; 按地址傳送為雙向傳遞。按地址傳送為雙向傳遞。缺省屬性為缺省屬性為“Byref”,按地址傳遞,實(shí)參應(yīng)為按地址傳遞,實(shí)參應(yīng)為與形參同類型的變量名或數(shù)組名。與形參同類型的變量名或數(shù)組名。 按地址傳遞過(guò)程按地址傳遞過(guò)程如:如:fact(i)fact(i)對(duì)對(duì) function fact(function fact(ByRefByRef i as Byte) i as Byte)的調(diào)用的調(diào)用 。函數(shù):函數(shù):fact(ByRefByRef i as Byte i as Byte)5主程序:主程序:Form_Click()i:i調(diào)用調(diào)用返回返回1、調(diào)用時(shí),創(chuàng)建虛參、調(diào)用時(shí),創(chuàng)建虛參i,

15、將,將i指向?qū)崊⒅赶驅(qū)崊的存儲(chǔ)單元。的存儲(chǔ)單元。2、在調(diào)用過(guò)程中對(duì)虛參操作即時(shí)是對(duì)實(shí)參操作。、在調(diào)用過(guò)程中對(duì)虛參操作即時(shí)是對(duì)實(shí)參操作。3、調(diào)用結(jié)束后,虛參被釋放。、調(diào)用結(jié)束后,虛參被釋放。運(yùn)行運(yùn)行 fact(i)舉例:舉例:例例9 9:編程,將輸入在文本框中的文本刪除其:編程,將輸入在文本框中的文本刪除其 中空格符后、在標(biāo)簽控件內(nèi)輸出。中空格符后、在標(biāo)簽控件內(nèi)輸出。 例例8 8:編制過(guò)程,用于在數(shù)組中找出最大值:編制過(guò)程,用于在數(shù)組中找出最大值 和最小值。和最小值。 變量作用域變量作用域(先介紹工程)(先介紹工程)工程工程窗體窗體1窗體窗體2過(guò)程過(guò)程1過(guò)程過(guò)程2過(guò)程過(guò)程n過(guò)程量模塊量全局量變

16、量作用域變量作用域 局部量:在事件過(guò)程、函數(shù)、局部量:在事件過(guò)程、函數(shù)、Sub過(guò)程中過(guò)程中 用用Dim語(yǔ)句聲明的變量(包括數(shù)組)、或語(yǔ)句聲明的變量(包括數(shù)組)、或 用用Const語(yǔ)句聲明的符號(hào)常量。語(yǔ)句聲明的符號(hào)常量。 局部量的作用局部量的作用域限于它們所域限于它們所在過(guò)程,而不在過(guò)程,而不能被其它過(guò)程能被其它過(guò)程引用。引用。 前面使用的大多數(shù)變量屬于局前面使用的大多數(shù)變量屬于局部量。部量。如在如在Form_click和和Command1_Click事件過(guò)程,或事件過(guò)程,或自定義過(guò)程中定義的變量。自定義過(guò)程中定義的變量。當(dāng)訪問(wèn)該過(guò)程時(shí),局部量有效,當(dāng)訪問(wèn)該過(guò)程時(shí),局部量有效,退出后失效。退出后

17、失效。變量作用域變量作用域 模塊模塊(窗體窗體)級(jí)量:在模塊的通用對(duì)象聲明部級(jí)量:在模塊的通用對(duì)象聲明部 分用分用Dim語(yǔ)句聲明的變量、用語(yǔ)句聲明的變量、用Const語(yǔ)句聲語(yǔ)句聲 明的符號(hào)常量。明的符號(hào)常量。 模塊級(jí)量的作用域模塊級(jí)量的作用域限于它們所在的模限于它們所在的模塊,即不能被其它塊,即不能被其它窗體的過(guò)程引用。窗體的過(guò)程引用。 例例10: 編程,在窗體設(shè)計(jì)編程,在窗體設(shè)計(jì)兩個(gè)命令按鈕和兩個(gè)標(biāo)簽,兩個(gè)命令按鈕和兩個(gè)標(biāo)簽,在標(biāo)簽上顯示點(diǎn)擊命令按在標(biāo)簽上顯示點(diǎn)擊命令按鈕鈕Command1/ Command2的次數(shù)。的次數(shù)。變量作用域變量作用域 全局量:在模塊的通用對(duì)象聲明部分,用全局量:在

18、模塊的通用對(duì)象聲明部分,用 Public語(yǔ)句聲明的變量(不包括數(shù)組)、語(yǔ)句聲明的變量(不包括數(shù)組)、 或用或用Public Const語(yǔ)句聲明的符號(hào)常量。語(yǔ)句聲明的符號(hào)常量。 全局量可以在整個(gè)全局量可以在整個(gè)工程中被引用。工程中被引用。 在窗體在窗體Form1Form1的通用聲明部分有:的通用聲明部分有: Public k as IntegerPublic k as Integer在窗體在窗體Form2Form2的過(guò)程中引用的過(guò)程中引用k k: x = Form2.kx = Form2.k在被其它窗體引用時(shí),在變量在被其它窗體引用時(shí),在變量名或符號(hào)常量名前,必須指出名或符號(hào)常量名前,必須指出窗

19、體名稱。窗體名稱。變量的生存期變量的生存期 根據(jù)變量在程序運(yùn)行期間的生命周期,根據(jù)變量在程序運(yùn)行期間的生命周期,可以分為:可以分為: 動(dòng)態(tài)變量(動(dòng)態(tài)變量(Dynamic) 靜態(tài)變量(靜態(tài)變量(Static) 動(dòng)態(tài)變量動(dòng)態(tài)變量 動(dòng)態(tài)變量動(dòng)態(tài)變量: 進(jìn)入過(guò)程,給變量分配存儲(chǔ)單進(jìn)入過(guò)程,給變量分配存儲(chǔ)單元:退出過(guò)程,變量所占的內(nèi)存空間自動(dòng)釋元:退出過(guò)程,變量所占的內(nèi)存空間自動(dòng)釋放,其值消失。放,其值消失。 Dim語(yǔ)句在過(guò)程中聲明的局部變量就屬于語(yǔ)句在過(guò)程中聲明的局部變量就屬于動(dòng)態(tài)變量。動(dòng)態(tài)變量。 程序中使用的絕大部分變量都屬于動(dòng)態(tài)程序中使用的絕大部分變量都屬于動(dòng)態(tài)變量。變量。 靜態(tài)變量靜態(tài)變量 靜態(tài)

20、變量:退出過(guò)程,靜態(tài)變量所占的靜態(tài)變量:退出過(guò)程,靜態(tài)變量所占的內(nèi)存空間沒(méi)有釋放;當(dāng)以后再次進(jìn)入該過(guò)程內(nèi)存空間沒(méi)有釋放;當(dāng)以后再次進(jìn)入該過(guò)程時(shí),原來(lái)變量的值可以繼續(xù)使用。時(shí),原來(lái)變量的值可以繼續(xù)使用。 使用使用Static語(yǔ)句在過(guò)程中聲明的局部變量語(yǔ)句在過(guò)程中聲明的局部變量就是靜態(tài)變量。就是靜態(tài)變量。 靜態(tài)變量只能在過(guò)程中聲明,而不能在靜態(tài)變量只能在過(guò)程中聲明,而不能在通用對(duì)象聲明部分聲明。通用對(duì)象聲明部分聲明。 靜態(tài)變量舉例靜態(tài)變量舉例 例例1111:動(dòng)態(tài)變量和靜態(tài)變量使用示例。動(dòng)態(tài)變量和靜態(tài)變量使用示例。Dim a As IntegerPrivate Sub Command1_Click(

21、) Static b As Integer Dim c As Integer a = a + 1 b = b + 1 c = c + 1 Print a=; a, b=; b, c=; cEnd Sub 當(dāng)程序運(yùn)行時(shí),連續(xù)單擊當(dāng)程序運(yùn)行時(shí),連續(xù)單擊Command1Command1按鈕四次,按鈕四次,窗體上的輸出結(jié)果是什么?窗體上的輸出結(jié)果是什么?靜態(tài)變量舉例靜態(tài)變量舉例 例例1212:閱讀下列程序,當(dāng)點(diǎn)擊兩次寫(xiě)出命令閱讀下列程序,當(dāng)點(diǎn)擊兩次寫(xiě)出命令按鈕后的運(yùn)行結(jié)果。按鈕后的運(yùn)行結(jié)果。Function sum(Byval n as integer) as integerFunction sum(Byval n as integer) as integer static s as integer static s as integer for I%=0 to n-1 for I%=0 to n-1 s=s+I% s=s+I% next I% next I% sum=s sum=sEnd functionEnd functionPrivate Sub Command1_Click() Print sum(2)+sum(3)End Sub作業(yè):作業(yè):1、P101:程序設(shè)計(jì)題:程序設(shè)計(jì)題-1。2、P101:程序設(shè)計(jì)題:程

溫馨提示

  • 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)論