《Visual Basic程序設(shè)計(jì)》課件1第6章_第1頁(yè)
《Visual Basic程序設(shè)計(jì)》課件1第6章_第2頁(yè)
《Visual Basic程序設(shè)計(jì)》課件1第6章_第3頁(yè)
《Visual Basic程序設(shè)計(jì)》課件1第6章_第4頁(yè)
《Visual Basic程序設(shè)計(jì)》課件1第6章_第5頁(yè)
已閱讀5頁(yè),還剩99頁(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)介

第6章過(guò)程6.1Sub過(guò)程

6.2Function過(guò)程

6.3過(guò)程、變量的作用域

6.4應(yīng)用舉例6.5遞歸

教學(xué)小結(jié)

習(xí)題

6.1Sub過(guò)程

6.1.1Sub過(guò)程的定義

Sub過(guò)程的建立有兩種方法,第一種方法是通過(guò)菜單建立,第二種方法是在代碼窗口下直接建立。這里介紹后一種方法。

在窗體的通用聲明段或標(biāo)準(zhǔn)模塊的代碼窗口中,直接輸入Sub過(guò)程。格式如下:

[Static][Private|Public]Sub過(guò)程名([參數(shù)列表])

語(yǔ)句組

EndSub6.1.2Sub過(guò)程的調(diào)用

Sub過(guò)程的調(diào)用有兩種格式:

格式一:

Call過(guò)程名[(參數(shù)列表)]

格式二:

過(guò)程名參數(shù)列表

其中,參數(shù)列表代表要傳送給Sub過(guò)程的實(shí)際值,稱(chēng)為實(shí)際參數(shù)(簡(jiǎn)稱(chēng)實(shí)參),可以為常量、變量、數(shù)組元素、數(shù)組名或表達(dá)式等形式。與形參類(lèi)似,參數(shù)之間用逗號(hào)分隔。

例6-1

求組合數(shù) 的值,設(shè)m=6,n=10。

分析:本題需要計(jì)算不同數(shù)的階乘3次,可以編寫(xiě)一個(gè)Sub過(guò)程,求任意整型數(shù)x的階乘,以供主程序中多次調(diào)用。定義過(guò)程時(shí)需要設(shè)置兩個(gè)形參,一個(gè)用于傳入x值,另一個(gè)用于存放計(jì)算結(jié)果。

程序代碼如下:為了便于描述程序的運(yùn)行過(guò)程,程序中注釋字母用于標(biāo)記程序執(zhí)行的位置。

程序執(zhí)行過(guò)程描述如下:

(1)當(dāng)單擊窗體上命令按鈕(Command1),程序運(yùn)行Command1_Click事件,聲明變量后,變量獲得初值為0。

(2)程序運(yùn)行到A處,調(diào)用fact過(guò)程,通過(guò)參數(shù)傳遞將實(shí)參n、y的地址傳給過(guò)程形參x、f,使得n與x、y與f分別共用同一存儲(chǔ)區(qū)域,在過(guò)程中對(duì)形參x、f的操作也就是對(duì)實(shí)參n、y的操作。

(3)程序運(yùn)行到B處,f獲得值為1,開(kāi)始進(jìn)行階乘運(yùn)算。

(4)程序運(yùn)行到C處,f中保存的就是n(本次n=10)的階乘值,返回主程序D處。

(5)程序運(yùn)行到D處,此時(shí)的y就是10!,轉(zhuǎn)存到變量s中。

(6)程序運(yùn)行到E處,再次調(diào)用fact過(guò)程,將實(shí)參m、y的地址傳給過(guò)程形參x、f(注意,這時(shí)m的值為6,f的值仍為10!)。

(7)程序再次運(yùn)行到B處,f原來(lái)的值被1取代,開(kāi)始進(jìn)行6的階乘運(yùn)算。

(8)程序運(yùn)行到F處,將6!?計(jì)算到變量s中。

(9)程序運(yùn)行到G處,第三次調(diào)用fact過(guò)程,計(jì)算(10-?6)!。

(10)程序運(yùn)行到H處,將4!?計(jì)算到變量s中,最后輸出結(jié)果。6.1.3過(guò)程調(diào)用中的參數(shù)傳遞

形參與實(shí)參之間的數(shù)據(jù)傳遞作用可以簡(jiǎn)單理解為:它是過(guò)程傳遞運(yùn)算對(duì)象和將過(guò)程執(zhí)行結(jié)果返回給主程序的“橋梁”。在過(guò)程被調(diào)用之前,所有形參只是起到標(biāo)識(shí)運(yùn)算對(duì)象的“模板”的作用,當(dāng)程序流程轉(zhuǎn)去執(zhí)行過(guò)程時(shí),實(shí)參按一定方式將數(shù)據(jù)傳給形參后過(guò)程體被執(zhí)行,過(guò)程的運(yùn)算結(jié)果還可通過(guò)形參將數(shù)據(jù)傳給實(shí)參返回到主程序。過(guò)程調(diào)用中參數(shù)傳遞有兩種方式:傳值和傳地址,默認(rèn)為傳地址。

1.傳地址方式

傳地址是VB默認(rèn)的參數(shù)傳遞方式。在這種方式下,實(shí)參傳給形參的是存儲(chǔ)地址,使得形參與實(shí)參共用同一存儲(chǔ)單元,因此,在過(guò)程中對(duì)形參的任何操作實(shí)質(zhì)都是對(duì)相應(yīng)實(shí)參的操作。在程序設(shè)計(jì)中,利用傳地址方式可以獲得過(guò)程處理的結(jié)果。要實(shí)現(xiàn)傳地址方式可在過(guò)程定義時(shí)對(duì)形參作標(biāo)識(shí)或在過(guò)程調(diào)用時(shí)對(duì)實(shí)參作限制,具體辦法是:

(1)在過(guò)程定義時(shí),形參前加ByRef顯式說(shuō)明(省略也可以)。

(2)在過(guò)程調(diào)用時(shí),與形參對(duì)應(yīng)位置的實(shí)參必須是相同類(lèi)型的變量或數(shù)組名,實(shí)參為常數(shù)或表達(dá)式是無(wú)法實(shí)現(xiàn)地址傳遞的。參數(shù)傳遞時(shí),當(dāng)實(shí)參為變量時(shí),把實(shí)參的地址傳遞給形參,使實(shí)參與形參共享同一存儲(chǔ)單元段;當(dāng)實(shí)參為數(shù)組時(shí),把實(shí)參數(shù)組的存儲(chǔ)地址傳遞給形參數(shù)組,使實(shí)參數(shù)組與形參數(shù)組共享同一存儲(chǔ)區(qū)域。

例6-2

一個(gè)整型數(shù)組有10個(gè)元素,將第一個(gè)元素與最后一個(gè)元素對(duì)調(diào),第二個(gè)與倒數(shù)第二個(gè)對(duì)調(diào),……,輸出對(duì)調(diào)前后數(shù)組各元素的值。

根據(jù)題意可知,需要兩次輸出數(shù)組各元素的值,可以定義一個(gè)過(guò)程供主程序中調(diào)用,其作用為輸出任意一個(gè)一維整型數(shù)組。

新建一個(gè)工程,在窗體的通用聲明段中定義過(guò)程parray。程序代碼如下:

例6-3

編寫(xiě)求兩個(gè)整數(shù)的最大公約數(shù)過(guò)程,在主程序中調(diào)用該過(guò)程求兩個(gè)數(shù)的最大公約數(shù),并根據(jù)最大公約數(shù)求最小公倍數(shù)。

分析:要求兩個(gè)整數(shù)的最大公約數(shù),需要在過(guò)程定義中設(shè)置兩個(gè)形參用于接收這兩個(gè)整數(shù),再設(shè)置一個(gè)參數(shù)用于存放過(guò)程中得到的最大公約數(shù)。

程序代碼如下:

2.傳值方式

當(dāng)以傳值方式調(diào)用一個(gè)過(guò)程時(shí),實(shí)參將其值復(fù)制給形參后,就失去與形參的“聯(lián)系”,此時(shí)形參擁有獨(dú)立的存儲(chǔ)單元,過(guò)程執(zhí)行中如果形參的值發(fā)生變化,對(duì)應(yīng)位置的實(shí)參值不會(huì)受任何影響。當(dāng)過(guò)程調(diào)用結(jié)束時(shí),形參所占用的存儲(chǔ)單元也同時(shí)被釋放。

實(shí)現(xiàn)傳值方式也可體現(xiàn)在過(guò)程調(diào)用和過(guò)程聲明中。

(1)在過(guò)程調(diào)用時(shí),如果實(shí)參為常量、表達(dá)式或?yàn)閹Юㄌ?hào)的變量,參數(shù)傳遞是按傳值方式進(jìn)行的。

(2)定義過(guò)程時(shí),如果形參前加ByVal關(guān)鍵字,調(diào)用過(guò)程時(shí),不管實(shí)參以何種形式,參數(shù)傳遞均采用傳值方式。

例6-4

分別用傳地址方式和傳值方式編寫(xiě)交換兩個(gè)整數(shù)的過(guò)程并調(diào)用。

程序代碼如下:使用過(guò)程編寫(xiě)程序時(shí),初學(xué)者往往思想比較混亂,總覺(jué)得無(wú)從下手。為此,本書(shū)提出如下建議:

(1)定義過(guò)程時(shí),應(yīng)根據(jù)處理問(wèn)題的需要確定形參的個(gè)數(shù)及其作用,明確參數(shù)傳遞方式,以確定對(duì)形參與實(shí)參的具體要求。在形參前加ByVal和ByRef(或省略ByRef),以確定形參的類(lèi)型和作用。

(2)調(diào)用過(guò)程時(shí),要根據(jù)形參個(gè)數(shù)、數(shù)據(jù)類(lèi)型及參數(shù)傳遞方式確定實(shí)參的個(gè)數(shù)與類(lèi)型。

(3)在選擇參數(shù)傳遞方式時(shí),遵照如下原則:

①過(guò)程中處理的對(duì)象是數(shù)組時(shí),只能采用傳地址方式。

②過(guò)程的運(yùn)算結(jié)果需要通過(guò)參數(shù)返回時(shí),必須采用傳地址方式。該方式有如下優(yōu)點(diǎn):

第一,過(guò)程中各參數(shù)作用明確,形參m和n接收的是實(shí)參的值,形參t可以返回過(guò)程運(yùn)算結(jié)果,參數(shù)傳遞方式分別是傳值和傳地址。

第二,調(diào)用過(guò)程格式簡(jiǎn)單,實(shí)參不需要加括號(hào)。例如,調(diào)用gys過(guò)程語(yǔ)句Callgys(a,b,x),無(wú)論實(shí)參a、b帶括號(hào)與否,均不會(huì)出現(xiàn)錯(cuò)誤。

第三,調(diào)用過(guò)程時(shí)實(shí)參數(shù)據(jù)類(lèi)型的限制較寬松。在傳值方式下,實(shí)參與形參數(shù)據(jù)類(lèi)型只要相容即可。比如,若形參為雙精度時(shí),實(shí)參可以是任何數(shù)值型數(shù)據(jù)。而在傳地址方式時(shí),實(shí)參的類(lèi)型必須與形參一致,否則會(huì)出現(xiàn)如圖6-1所示錯(cuò)誤。圖6-1實(shí)參與形參類(lèi)型不一致時(shí)的出錯(cuò)信息

例6-5

編寫(xiě)求一組整數(shù)平均值的過(guò)程,并在主程序中調(diào)用。

分析:編寫(xiě)過(guò)程代碼時(shí),首先考慮形參個(gè)數(shù)及參數(shù)傳遞方式。因?yàn)橐幚淼氖且唤M整數(shù),個(gè)數(shù)并沒(méi)有確定,所以設(shè)置一個(gè)整型形參數(shù)組接收處理對(duì)象。而運(yùn)算結(jié)果只有一個(gè)平均值,所以設(shè)置1個(gè)普通變量返回(平均值),參數(shù)傳遞方式均為傳地址方式。過(guò)程調(diào)用時(shí),實(shí)參的個(gè)數(shù)應(yīng)與形參個(gè)數(shù)一樣,第一個(gè)實(shí)參應(yīng)為數(shù)組,第二個(gè)實(shí)參只能為變量。

實(shí)現(xiàn)求一組整數(shù)平均值的過(guò)程如下:

例6-6

編寫(xiě)能獲得一組整數(shù)的平均值、最大值和最小值的過(guò)程并調(diào)用。

程序代碼如下: 6.2Function過(guò)程

6.2.1Function過(guò)程的定義

定義Function過(guò)程格式為:

[Static][Private|Public]Function過(guò)程名([參數(shù)列表])[As數(shù)據(jù)類(lèi)型]

語(yǔ)句組

EndFunction說(shuō)明:

(1)與Sub過(guò)程相比,F(xiàn)unction過(guò)程的過(guò)程名不僅標(biāo)識(shí)函數(shù)過(guò)程,而且還有返回函數(shù)運(yùn)算結(jié)果的功能,所以比Sub過(guò)程多了數(shù)據(jù)類(lèi)型聲明。

(2)語(yǔ)句組中一般應(yīng)有一條語(yǔ)句將過(guò)程的運(yùn)算結(jié)果賦給過(guò)程名。格式為:

過(guò)程名=表達(dá)式

(3)如果在過(guò)程體中含有ExitFunction語(yǔ)句時(shí),表示強(qiáng)行退出過(guò)程。6.2.2Function過(guò)程的調(diào)用

Function過(guò)程一經(jīng)定義,調(diào)用方式就與系統(tǒng)提供的內(nèi)部函數(shù)完全相同。

例6-7

求組合數(shù) 的值,設(shè)m=6,n=10。

函數(shù)過(guò)程及調(diào)用代碼如下:比較例6-1與例6-7可以看出,使用函數(shù)過(guò)程時(shí),定義時(shí)因?yàn)楹瘮?shù)名可以返回一個(gè)值,所以就可以少一個(gè)形式參數(shù);調(diào)用時(shí)因?yàn)楹瘮?shù)名就帶著處理結(jié)果,所以可以像使用內(nèi)部函數(shù)一樣直接寫(xiě)入表達(dá)式中。

實(shí)際上,將過(guò)程定義為Sub過(guò)程還是Function過(guò)程沒(méi)有必然的界限??梢赃@樣考慮:使用Sub過(guò)程能實(shí)現(xiàn)的功能也一定能使用Function過(guò)程實(shí)現(xiàn),反之亦然。但一般情況下,如果不需要過(guò)程返回處理結(jié)果,或者需要返回多個(gè)處理結(jié)果,則選擇Sub過(guò)程;如果需要返回的運(yùn)算結(jié)果只有一個(gè),則選擇Function過(guò)程會(huì)更方便些。 6.3過(guò)程、變量的作用域

6.3.1過(guò)程的作用域

過(guò)程的作用域分為模塊級(jí)和全局級(jí)兩種。

1.模塊級(jí)過(guò)程

模塊級(jí)過(guò)程是指在窗體或標(biāo)準(zhǔn)模塊通用聲明段定義的、用Private關(guān)鍵字限制的過(guò)程,這類(lèi)過(guò)程只能被它所屬的窗體或標(biāo)準(zhǔn)模塊中的其他過(guò)程調(diào)用。

例如,在窗體1的通用聲明段定義一個(gè)模塊級(jí)過(guò)程fact,分別被窗體1下的Command1_Click()和Form_Click()所調(diào)用是允許的。若在窗體2下調(diào)用窗體1中定義的過(guò)程“fact”,會(huì)出現(xiàn)如圖6-2所示的提示信息。圖6-2調(diào)用無(wú)效過(guò)程時(shí)提示信息

2.全局級(jí)過(guò)程

在窗體或標(biāo)準(zhǔn)模塊中定義的過(guò)程默認(rèn)是全局級(jí)的,也可用Public關(guān)鍵字顯式聲明。全局級(jí)過(guò)程可供該應(yīng)用程序中所有窗體和所有標(biāo)準(zhǔn)模塊中的過(guò)程調(diào)用,但根據(jù)過(guò)程所處的位置不同,其調(diào)用方式有所區(qū)別:

(1)在窗體中定義的全局級(jí)過(guò)程,該窗體之外的其他過(guò)程要調(diào)用,必須在過(guò)程名前加該過(guò)程所在的窗體名。

(2)在標(biāo)準(zhǔn)模塊中定義的全局級(jí)過(guò)程,該工程的任何過(guò)程都可以直接調(diào)用。6.3.2變量的作用域

變量的作用域可分為過(guò)程級(jí)、模塊級(jí)和全局級(jí)。過(guò)程級(jí)和模塊級(jí)常被稱(chēng)為私有級(jí)變量,而全局級(jí)也常被稱(chēng)為公有級(jí)變量。

1.過(guò)程級(jí)變量

過(guò)程級(jí)變量的作用范圍限制在聲明它的過(guò)程內(nèi)部,只有該過(guò)程內(nèi)部的代碼才能訪問(wèn)或改變變量的值。該類(lèi)變量通常用來(lái)存儲(chǔ)過(guò)程中的臨時(shí)數(shù)據(jù),在過(guò)程內(nèi)部使用關(guān)鍵字Dim或Static來(lái)聲明變量。例如:

DimaAsinteger,bAsSingle

StaticaAsString如果在過(guò)程中未說(shuō)明而直接使用了某個(gè)變量,則該變量被默認(rèn)為局部于該過(guò)程的過(guò)程級(jí)變量。

用Static聲明的變量稱(chēng)為靜態(tài)變量,該類(lèi)變量在過(guò)程執(zhí)行結(jié)束后一直存在,直到窗體關(guān)閉。而用Dim聲明的變量只在過(guò)程執(zhí)行時(shí)存在,退出過(guò)程后這類(lèi)變量就會(huì)消失。請(qǐng)看下面的代碼段:

PrivateSubForm_Click()

DimiAsInteger

i=i+1

Printi

EndSub每單擊一次窗體,窗體上均顯示相同的數(shù)“1”。這是因?yàn)椋^(guò)程每次運(yùn)行時(shí),為變量i分配存儲(chǔ)空間,過(guò)程運(yùn)行結(jié)束后,變量i所占用的存儲(chǔ)空間被釋放,再次運(yùn)行時(shí)變量i重新被分配內(nèi)存空間。

再看下面的代碼段:

PrivateSubForm_Click()

StaticiAsInteger

i=i+1

Printi

EndSub每單擊一次窗體,過(guò)程變量i累加1次,第n次運(yùn)行i的值為“n”。原因是用Static定義的變量為靜態(tài)變量,過(guò)程第一次運(yùn)行時(shí),為變量i分配存儲(chǔ)空間,運(yùn)行結(jié)束后,i所占用的存儲(chǔ)空間被保護(hù)起來(lái),其值也被保留下來(lái),再次運(yùn)行時(shí),變量i還使用原來(lái)的存儲(chǔ)空間,其值也是上一次保留下來(lái)的值,所以之后的運(yùn)算也就是在上一次值的基礎(chǔ)上進(jìn)行的。

2.模塊(窗體)級(jí)變量

模塊級(jí)(也稱(chēng)窗體級(jí))變量的作用域限制在聲明它的窗體(模塊)中,該窗體(模塊)中的所有過(guò)程均可訪問(wèn)該變量,其他窗體(模塊)則不能。該類(lèi)變量在窗體(模塊)的通用段中用關(guān)鍵字Private或Dim聲明。

例6-8

窗體級(jí)變量的作用范圍示例。

程序代碼如下:圖6-3窗體級(jí)變量作用范圍

3.全局級(jí)變量

全局級(jí)變量在所有模塊的所有過(guò)程都能訪問(wèn),它的作用范圍是整個(gè)應(yīng)用程序,該類(lèi)變量在模塊的通用段中使用關(guān)鍵字Public聲明。

例6-9

變量的作用范圍綜合示例。

程序代碼如下:程序運(yùn)行結(jié)果如圖6-4所示。由此可以看出,當(dāng)變量名相同而作用域不同時(shí),將優(yōu)先訪問(wèn)作用域小的變量。圖6-4變量作用范圍示例在定義變量時(shí)應(yīng)將變量聲明為哪一個(gè)級(jí)別呢?這主要取決于變量要在什么范圍內(nèi)使用。

(1)如果變量只在某一個(gè)過(guò)程中使用,它的運(yùn)算結(jié)果也不被其他過(guò)程再次使用,則可以聲明為過(guò)程級(jí)變量。如本書(shū)中的大部分例題采用的都是這種級(jí)別的變量。

(2)如果變量將在同一窗體的多個(gè)過(guò)程中被用到,且彼此之間還有相互關(guān)系,則可以聲明為窗體(模塊)級(jí)變量。

(3)如果變量將在多個(gè)窗體被用到,且彼此之間還有相互關(guān)系,則可以聲明為全局級(jí)變量。 6.4應(yīng)用舉例

例6-10

編程對(duì)鍵盤(pán)上輸入的任意個(gè)數(shù)排序。

分析:排序算法在第5章已經(jīng)介紹過(guò),這里回顧一下算法過(guò)程。

(1)定義數(shù)組。

(2)為數(shù)組元素賦值。

(3)輸出排序前的數(shù)組元素值。

(4)選擇一種排序算法對(duì)數(shù)組各元素排序。

(5)輸出排序后的數(shù)組元素值。

(6)結(jié)束。在這個(gè)算法中輸出數(shù)組元素值的程序段被執(zhí)行了兩次,不需要返回值,可以將其寫(xiě)成一個(gè)Sub過(guò)程。排序是對(duì)數(shù)組中元素進(jìn)行了重新排列,因?yàn)閿?shù)組是傳地址的,在過(guò)程中對(duì)形參數(shù)組排好序?qū)嶋H上會(huì)直接反映在實(shí)參中,沒(méi)有其他結(jié)果需要返回,所以也用Sub過(guò)程。

在窗體上添加1個(gè)文本框,用于輸入待排序的數(shù)據(jù),數(shù)據(jù)之間用逗號(hào)分隔;1個(gè)圖片框用于顯示排序前的數(shù)組及排序后的數(shù)組;1個(gè)Option1控件數(shù)組,元素分別為Option1(0)、Option1(1),用于選擇是按升序還是降序排序,它們被置于框架Frame1中。窗體界面如圖6-5a所示,各控件屬性設(shè)置放在Form_Load事件中,排序代碼放在Option1控件數(shù)組的DblClick事件中。圖6-5a窗體界面圖6-5b程序運(yùn)行界面本例中定義了兩個(gè)Sub過(guò)程,一個(gè)用于輸出一維數(shù)組,一個(gè)用于排序,前者有一個(gè)數(shù)組參數(shù),后者除了一個(gè)數(shù)組參數(shù)外,還有一個(gè)決定升、降序的參數(shù)。

例6-11

判斷一個(gè)整數(shù)是否是回文數(shù)。所謂回文數(shù)是這樣的數(shù),將這個(gè)數(shù)從左向右讀和從右向左讀的值相等。如121就是回文數(shù),345就不是回文數(shù)。

分析:判斷回文數(shù)可以有很多方法,由于VB中可以自動(dòng)進(jìn)行數(shù)值與數(shù)字字符串的類(lèi)型互換,所以這里可以將輸入的數(shù)當(dāng)成字符串來(lái)處理。

程序代碼如下:

例6-12

設(shè)計(jì)一個(gè)數(shù)值轉(zhuǎn)換函數(shù),能夠?qū)⑹M(jìn)制整數(shù)轉(zhuǎn)換成十六進(jìn)制以內(nèi)的任意進(jìn)制數(shù)。

分析:十進(jìn)制數(shù)轉(zhuǎn)換成n進(jìn)制常采用的方法是“除n取余,余數(shù)倒寫(xiě)”,當(dāng)n大于9時(shí),需要把大于9的余數(shù)轉(zhuǎn)換成字母。為了方便轉(zhuǎn)換,可以將余數(shù)0~9、A~F分別放在一個(gè)字符串?dāng)?shù)組中。

轉(zhuǎn)換函數(shù)過(guò)程名為DecToN,有兩個(gè)參數(shù),一個(gè)是待轉(zhuǎn)換的十進(jìn)制整數(shù),一個(gè)是需要轉(zhuǎn)換的進(jìn)制,轉(zhuǎn)換結(jié)果是一個(gè)字符串(即函數(shù)值為一個(gè)字符型)。

程序代碼如下:

6.5遞歸

簡(jiǎn)單地說(shuō),遞歸就是一個(gè)過(guò)程調(diào)用自己本身。VB的過(guò)程具有遞歸調(diào)用功能。許多問(wèn)題都具有遞歸的特性,用遞歸調(diào)用來(lái)解決會(huì)非常方便。

例6-13

利用遞歸調(diào)用計(jì)算n!。

分析:根據(jù)階乘的定義,求n的階乘可以轉(zhuǎn)換為求n×(n-1)!,利用過(guò)程遞歸來(lái)完成。說(shuō)明:當(dāng)n>0時(shí),在過(guò)程fact中調(diào)用fact過(guò)程,參數(shù)為n-1,這種操作一直持續(xù)到n=0為止。下面以n=5為例,說(shuō)明遞歸調(diào)用的過(guò)程。編寫(xiě)遞歸過(guò)程的關(guān)鍵是寫(xiě)出能構(gòu)成遞歸的兩個(gè)條件:

(1)遞歸結(jié)束條件及結(jié)束時(shí)的值。

(2)能用遞歸形式表示,并且遞歸向結(jié)束條件收斂。

例6-14

用遞歸求兩個(gè)數(shù)的最大公約數(shù)。

分析求最大公約數(shù)的方法可以得到構(gòu)成遞歸的兩個(gè)條件:

函數(shù)代碼如下:

教學(xué)小結(jié)

使用VB編寫(xiě)應(yīng)用軟件時(shí),提倡用“可視化的思想進(jìn)行界面設(shè)計(jì),結(jié)構(gòu)化的思想進(jìn)行功能實(shí)現(xiàn)”。本章講解的過(guò)程就是將功能相對(duì)完整的程序段組織在一起,便于在程序中多處調(diào)用,既提高了程序段的共享能力,也便于整個(gè)程序的維護(hù),同時(shí)也體現(xiàn)了結(jié)構(gòu)化程序設(shè)計(jì)思想。由于本章某些概念、程序組織的結(jié)構(gòu)是全新的,教學(xué)中存在教師講授費(fèi)勁,學(xué)生學(xué)習(xí)“吃不消”的現(xiàn)象,但這章又是本書(shū)的重點(diǎn)和難點(diǎn),應(yīng)在教學(xué)中引起足夠的重視。

(1)與事件過(guò)程對(duì)比,充分理解用戶自定義過(guò)程在程序設(shè)計(jì)中的作用,了解應(yīng)用自定義過(guò)程后程序總體結(jié)構(gòu)的變化。

(2)掌握Sub過(guò)程和Function過(guò)程的定義與調(diào)用格式,熟悉參數(shù)傳遞方式及其特點(diǎn),具備正確設(shè)置過(guò)程參數(shù)及參數(shù)傳遞的能力。

(3)在編程時(shí),對(duì)Sub過(guò)程和Function過(guò)程不應(yīng)刻意區(qū)別,用Sub過(guò)程實(shí)現(xiàn)的問(wèn)題,同樣可以用Function過(guò)程來(lái)實(shí)現(xiàn);反之亦然。編寫(xiě)過(guò)程的關(guān)鍵是確定參數(shù)的個(gè)數(shù)及其作用,明確參數(shù)傳遞方式,以確定對(duì)形參與實(shí)參的具體要求。

(4)變量和過(guò)程的作用域是規(guī)定變量能被訪問(wèn)或過(guò)程能被調(diào)用的范圍,讀者可通過(guò)本章實(shí)例熟練掌握并靈活應(yīng)用。

習(xí)題

一、選擇題

1.VB中在模塊的通用聲明段用DimX聲明的變量是

變量。

(A)過(guò)程級(jí) (B)模塊級(jí)

(C)全局級(jí) (D)靜態(tài)

2.在VisualBasic應(yīng)用程序中,以下描述正確的是

。

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

(B)過(guò)程的定義不可以嵌套,但過(guò)程的調(diào)用可以嵌套

(C)過(guò)程的定義和過(guò)程的調(diào)用均可以嵌套

(D)過(guò)程的定義和過(guò)程的調(diào)用均不可以嵌套則以下說(shuō)法中正確的是

(A)調(diào)用過(guò)程S1可以實(shí)現(xiàn)交換兩個(gè)變量的值的操作,S2不能實(shí)現(xiàn)

(B)調(diào)用過(guò)程S2可以實(shí)現(xiàn)交換兩個(gè)變量的值的操作,S1不能實(shí)現(xiàn)

(C)調(diào)用過(guò)程S1和S2都可以實(shí)現(xiàn)交換兩個(gè)變量的值的操作

(D)調(diào)用過(guò)程S1和S2都不能實(shí)現(xiàn)交換兩個(gè)變量的值的操作

14.下面過(guò)程說(shuō)明語(yǔ)句合法的是

。

(A)

Subf1(ByValn%())

(B)

Subf1(n%)AsInteger

(C)?Functionf1%(f1%)

(D)?Functionf1(ByValn%)

15.要想從過(guò)程調(diào)用后通過(guò)參數(shù)返回兩個(gè)結(jié)果,下面過(guò)程說(shuō)明合法的是

。

(A)

Subf2(ByValn%,ByValm%)

(B)

Subf1(n%,ByValm%)

(C)

Subf1(n%,m%)

(D)

Subf1(ByValn%,m%)

17.下列敘述錯(cuò)誤的是

。

(A)?Sub過(guò)程可以遞歸調(diào)用

(B)?Sub過(guò)程不可以由其過(guò)程名返回結(jié)果值

(C)表達(dá)式中可以調(diào)用Function過(guò)程

(D)表達(dá)式中可以調(diào)用Sub過(guò)程

18.以下關(guān)于過(guò)程及過(guò)程參數(shù)的描述中,錯(cuò)誤的是

。

(A)過(guò)程的參數(shù)可以是控件名稱(chēng)

(B)過(guò)程的參數(shù)可以是窗體

(C)只有函數(shù)過(guò)程能夠?qū)⑦^(guò)程中處理的信息傳回到調(diào)用的程序中

(D)用數(shù)組作為過(guò)程的參數(shù)時(shí),使用的是傳地址方式

19.模塊中采用以下方式定義的過(guò)程,能被其他模塊調(diào)用的是

。

(A)?PrivateSubS1()

(B)?PublicSubS2()

(C)?PrivateFunctionF1()

(D)均不能被其他模塊調(diào)用

20.為了在同一模塊中的不同過(guò)程之間互相傳遞數(shù)據(jù),下述方法中錯(cuò)誤的是

。

(A)利用全局變量

(B)利用傳地址方式的變量作為過(guò)程參數(shù)

(C)利用靜態(tài)變量

(D)利用模塊級(jí)變量運(yùn)行以上程序,正確的結(jié)果是

。

(A)?Form1的Caption屬性值為"V

溫馨提示

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