VB程序設(shè)計(jì) 第八章.ppt
《VB程序設(shè)計(jì) 第八章.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《VB程序設(shè)計(jì) 第八章.ppt(39頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、Visual Basic程序設(shè)計(jì)教程,,內(nèi)蒙古科技大學(xué)實(shí)踐訓(xùn)練中心,第八章 過(guò)程,8.1 過(guò)程的定義與調(diào)用,VB的過(guò)程: 系統(tǒng)提供的內(nèi)部函數(shù)過(guò)程,其中,事件是構(gòu)成VB應(yīng)用程序的主體,應(yīng) 用設(shè)計(jì)基本上是對(duì)事件過(guò)程進(jìn)行設(shè)計(jì); 用戶根據(jù)應(yīng)用的需要而設(shè)計(jì)的過(guò)程; VB的過(guò)程分類: 以”Sub”保留字開始的子過(guò)程; 以“Function”保留字開始的函數(shù)過(guò)程; 以“Property”保留字開始的屬性過(guò)程; 以“Event”保留字開始的事件過(guò)程;,8.1 過(guò)程的定義與調(diào)用,8.1.1 Sub過(guò)程的定義與調(diào)用 用戶自定義子過(guò)程通常來(lái)完成一個(gè)特定的功能,其名字可由用戶根據(jù)自己的習(xí)慣而定義。 VB的事
2、件過(guò)程只在用戶觸發(fā)該事件后啟動(dòng),而用戶自定義的子過(guò)程只有在被其他過(guò)程調(diào)用時(shí)才啟動(dòng)。 1、用戶自定義子過(guò)程的一般格式 Static Private | Public Sub 子過(guò)程名 (參數(shù)列表) 語(yǔ)句塊 Exit Sub 語(yǔ)句塊 End Sub 說(shuō)明: 格式中“Sub 子過(guò)程名”和”End Sub“不可缺; 子過(guò)程名的命名規(guī)則與 變量命名規(guī)則相同;,8.1 過(guò)程的定義與調(diào)用,8.1.1 Sub過(guò)程的定義與調(diào)用 Static:在過(guò)程名之前使用Static,表示過(guò)程中的局部變量都是靜態(tài)變 量。當(dāng)程序退出該程序時(shí),局部變量的值仍然保留作為下次調(diào)用的初 值。Static對(duì)
3、數(shù)組變量也有效,但對(duì)動(dòng)態(tài)變量則無(wú)法轉(zhuǎn)換為靜態(tài)變量; Private:表示該過(guò)程為私有過(guò)程,只有本模塊中的其他過(guò)程訪問(wèn),不能 被其他模塊中的模塊訪問(wèn); Public:表示該過(guò)程為公有過(guò)程,即可以被程序中所有模塊調(diào)用。本窗 體和其他模塊均可調(diào)用,但過(guò)程名必須是唯一的, 否則在過(guò)程名前加上 該過(guò)程所在的窗體名或模塊名。 參數(shù)列表:其他過(guò)程與本過(guò)程進(jìn)行參數(shù)傳遞和交換的形式參數(shù),當(dāng)參數(shù) 個(gè)數(shù)大于等于2時(shí),參數(shù)之間用”,”隔開; Exit Sub:在過(guò)程任意位置終止過(guò)程的運(yùn)行而退出過(guò)程而使用的語(yǔ)句; End Sub:過(guò)程結(jié)束標(biāo)識(shí),用來(lái)正常終止過(guò)程;,8.1 過(guò)程的定義與調(diào)用,8.1.1 Sub過(guò)程
4、的定義與調(diào)用 過(guò)程參數(shù)的傳遞默認(rèn)方式為引用(地址)傳遞(ByRef),若只傳參數(shù)(實(shí)參) 的值則必須將形式參數(shù)說(shuō)明為Byval,格式如下: Byval 變量名或數(shù)組名( ) As 數(shù)據(jù)類型 過(guò)程內(nèi)部不能再定義其他過(guò)程,可以調(diào)用其他合法的過(guò)程,事件過(guò)程中 也不允許定義子過(guò)程。,,sub command_click( ) call test() end sub,static sub test( ) dim a(2) as integer a(0)=a)(0)+1 a(1)=a(1)+1 print a(0);a(1) end sub,8.1 過(guò)程的定義與調(diào)用,8.1.1 Sub
5、過(guò)程的定義與調(diào)用 定義過(guò)程的方式: 手工方式:在過(guò)程、事件代碼窗口中,編寫事件程序: sub 過(guò)程名(參數(shù)列表) End Sub 系統(tǒng)方式 進(jìn)入模塊代碼窗口:系統(tǒng)菜單”工程“”添加” “新建”,則新建一 個(gè)模塊,在標(biāo)準(zhǔn)模塊中填寫子過(guò)程代碼; 系統(tǒng)菜單”工具“”添加過(guò)程“,確定子過(guò)程的名稱以及類型后,即回 到模塊的代碼窗口;,8.1 過(guò)程的定義與調(diào)用,8.1.1 Sub過(guò)程的定義與調(diào)用 2、子過(guò)程調(diào)用 Call 過(guò)程名(實(shí)參列表);如:call text(12,”abc”) 過(guò)程名實(shí)參列表;如:test 12,”abc” 例8-1求n! 解題思路:
6、在標(biāo)準(zhǔn)模塊中定義一個(gè)子過(guò)程n,用于實(shí)現(xiàn)求任意正整數(shù)的階乘。,8.1 過(guò)程的定義與調(diào)用,8.1.1 Sub過(guò)程的定義與調(diào)用 2、子過(guò)程調(diào)用 Call 過(guò)程名(實(shí)參列表);如:call text(12,”abc”) 過(guò)程名實(shí)參列表;如:test 12,”abc” 例8-2給出矩形的長(zhǎng)和寬,求矩形的面積。 解題思路:定義一個(gè)過(guò)程area,計(jì)算矩形的面積。,8.1 過(guò)程的定義與調(diào)用,8.1.2 Function過(guò)程的定義與調(diào)用 函數(shù)過(guò)程(Function)與子過(guò)程一樣,可將一組完成特定功能的程序代碼組織起來(lái),作為一個(gè)相對(duì)獨(dú)立的過(guò)程使用;但子過(guò)程沒(méi)有值的返回,函數(shù)過(guò)程有值的返回。 1、函數(shù)過(guò)程的定
7、義 Static Public Private Function 函數(shù)過(guò)程名(參數(shù)列表)As 類型 語(yǔ)句塊 Exit Function 語(yǔ)句塊給函數(shù)名賦返回值 End Funtion,8.1 過(guò)程的定義與調(diào)用,8.1.2 Function過(guò)程的定義與調(diào)用 說(shuō)明: 格式中的Static、Public、Private的含義與作用以及參數(shù)列表的格式 和使用方法,Byval傳值的作用等均與子過(guò)程的定義相同; Exit Function的作用與Exit Sub相同; As類型,指定該函數(shù)的返回值的類型; 語(yǔ)句塊為符合VB語(yǔ)法的一條語(yǔ)句或多條語(yǔ)句; 給函數(shù)
8、名賦值:一般情況下,定義一個(gè)函數(shù)過(guò)程,就是能返回一個(gè)值 給調(diào)用程序,故函數(shù)過(guò)程應(yīng)有一條語(yǔ)句給函數(shù)名賦值即調(diào)用后的返回 值;若不賦值,則默認(rèn)返回值為0(數(shù)值型函數(shù)),或空值(可變類 型函數(shù))。 與Sub定義一樣,函數(shù)過(guò)程定義的函數(shù)體內(nèi)不允許定義其他的函數(shù)過(guò) 程和子過(guò)程。,8.1 過(guò)程的定義與調(diào)用,8.1.2 Function過(guò)程的定義與調(diào)用 2、函數(shù)過(guò)程的定義方法 在代碼窗口中手工輸入函數(shù)過(guò)程的框架; 如: Static Private Function Areturn( a as integer, b as integer) as Integer
9、 End Function 系統(tǒng)菜單“工具”“添加過(guò)程”,選擇相應(yīng)的類型和范圍屬性; 3、函數(shù)過(guò)程的調(diào)用 函數(shù)過(guò)程的調(diào)用如同調(diào)用VB的系統(tǒng)內(nèi)部函數(shù)一樣;程序中。函數(shù)過(guò)程的 調(diào)用一般放在表達(dá)式中賦值號(hào)”“的右邊,將它看成某種類型的值而參加 表達(dá)式的組成。,8.1 過(guò)程的定義與調(diào)用,8.1.2 Function過(guò)程的定義與調(diào)用 3、函數(shù)過(guò)程的調(diào)用 例8-3函數(shù)過(guò)程的定義與調(diào)用:判斷某個(gè)成績(jī)(百分制)的等級(jí). 解題思路:定義一個(gè)函數(shù)過(guò)程,用于判斷分?jǐn)?shù)的等級(jí),判斷后的結(jié)果返回為 字符串:優(yōu)、良、中、及格或不及格。,8.1 過(guò)程的定義與調(diào)用,8.1.2 Function過(guò)程的定義與調(diào)用 例8
10、-4 編寫求任意給定兩個(gè)自然數(shù)的最大公約數(shù)的程序。 解題思路: 對(duì)于已知兩個(gè)數(shù)m、n,使得mn; m除以n得余數(shù) r; 若r0,則n為所求的最大公約數(shù),算法結(jié)束,否則執(zhí)行(1); nm,rn,再重復(fù)步驟(2);,8.2 函數(shù)和過(guò)程的參數(shù)傳遞,參數(shù)傳遞: 在調(diào)用過(guò)程時(shí),過(guò)程參數(shù)使用的是實(shí)際參數(shù),它要與定義過(guò)程時(shí)的形式參數(shù)一一對(duì)應(yīng),并以適當(dāng)?shù)男问綄?shí)參傳給行參,供過(guò)程使用。 參數(shù)傳遞的方式:傳值;傳址; 8.2.1 傳值 形參:指在定義過(guò)程時(shí)出現(xiàn)在參數(shù)列表中的變量名,這些變量名的使用只 能在過(guò)程內(nèi)部。 實(shí)參:是在調(diào)用該過(guò)程時(shí)調(diào)用過(guò)程中已組織好的準(zhǔn)備傳給形參的常量、變 量
11、、表達(dá)式或數(shù)組控件對(duì)象等,它是在調(diào)用過(guò)程(主程序或父過(guò)程)中 組織好的數(shù)據(jù),實(shí)參若是常量,則傳遞就相當(dāng)于將該常量的值賦給 形參。實(shí)參若為一個(gè)簡(jiǎn)單變量的表達(dá)式,也是與常量一樣將該表達(dá) 式的值賦給對(duì)應(yīng)的形式參數(shù)。 傳遞參數(shù)時(shí),形參和實(shí)參的個(gè)數(shù)一定相同,傳遞時(shí)要一一對(duì)應(yīng); 參數(shù)之間要用“,”隔開; 每個(gè)實(shí)參的類型必須與相對(duì)應(yīng)的行參類型相同;,8.2 函數(shù)和過(guò)程的參數(shù)傳遞,8.2.1 傳值 Sub tempSub(a as integer,b as single , c as string) End Sub 可采用調(diào)用方式:call tempsub(a%,b!,”comm”),過(guò)
12、程定義中默認(rèn)的參數(shù)傳遞是地址傳遞,但在定義過(guò)程中,若某個(gè)參數(shù)用Byval來(lái)說(shuō)明。則該參數(shù)便是傳值。 傳值的一個(gè)特點(diǎn)是將實(shí)參的值復(fù)制一份給形式參數(shù)所代表的臨時(shí)內(nèi)存單元,此后實(shí)參與形參之間再無(wú)任何聯(lián)系,形式參數(shù)的任何變化均不會(huì)對(duì)實(shí)參產(chǎn)生任何影響。,8.2 函數(shù)和過(guò)程的參數(shù)傳遞,8.2.1 傳值 例【8-5】傳值調(diào)用 Private sub command1_click() dim x as integer , y as integer x=10: y=20 print “x=“;x;”y=“;y; call temp(x,y) print “x=“;x;”y=“;
13、y; End Sub Sub temp(Byval x as integer,Byval y as integer) x=x+100:y=x*60 print “x=“;x,”y=“,y; End Sub 運(yùn)行結(jié)果: x=10 y=20 調(diào)用前的實(shí)參 x=110 y=6600 temp中的行參 x=10 y=20 調(diào)用后的實(shí)參,8.2 函數(shù)和過(guò)程的參數(shù)傳遞,8.2.1 傳值 例8-6求冪級(jí)數(shù) 解題思路:定義temp函數(shù)用于計(jì)算x的冪,需要用到2個(gè)參數(shù),x和y,x用于傳遞某個(gè)數(shù),y用于傳遞冪的次方數(shù)。y是傳值參數(shù),因此,函數(shù)中y值的改變不會(huì)影響它相
14、應(yīng)的實(shí)際參數(shù)。,8.2 函數(shù)和過(guò)程的參數(shù)傳遞,8.2.2 傳址 在過(guò)程調(diào)用過(guò)程中,參數(shù)傳遞的默認(rèn)方式是按地址傳遞,故不加任何關(guān)鍵字就是傳址調(diào)用。 傳址的特點(diǎn)是形參與對(duì)應(yīng)實(shí)參用相同的內(nèi)存地址,形參的改變將影響實(shí)參的改變,實(shí)際上,形參也是實(shí)參的別名。 通常情況下,形式參數(shù)為傳值形式,則形式參數(shù)可認(rèn)為是一個(gè)局部變量; 但若為傳址方式,則由形參與實(shí)參連系起來(lái),使形參為非局部變量,因?yàn)樾螀⒌母淖兘Y(jié)果直接傳給了實(shí)參。 例【8-7】對(duì)于例8-5中的過(guò)程temp將其定義為: sub temp(x as integer,y as integer) End Sub 則Call temp(x,
15、y)變?yōu)榱藗髦氛{(diào)用,故形參的改變會(huì)引起實(shí)參x、y的值改變。,8.2 函數(shù)和過(guò)程的參數(shù)傳遞,8.2.2 傳址 例8-8傳值與傳址兩種方式下,形參與實(shí)參的改變。,8.2 函數(shù)和過(guò)程的參數(shù)傳遞,8.2.3 數(shù)組及對(duì)象作為過(guò)程的參數(shù) 1、數(shù)組作為參數(shù) 用數(shù)組名作為形參或?qū)崊ⅲ? 用數(shù)組元素作為實(shí)參進(jìn)行傳遞; 注意: 第中方法相當(dāng)于傳址方式,即將數(shù)組的起始地址傳給形參,但在使 用時(shí)應(yīng)注意以下幾點(diǎn): 用數(shù)組名進(jìn)行地址傳遞時(shí),在參數(shù)列表中說(shuō)明數(shù)組,不需要說(shuō)明其維 數(shù)的定義,但圓括號(hào)不可省略; 在過(guò)程定義體內(nèi)如需要知道參數(shù)的上、下界,可用UBound和 LBound 確定參數(shù)組的上、
16、下界; 形參數(shù)組和實(shí)參數(shù)組的類型必須一致; 例8-9求一個(gè)nn方陣所有元素之和;,8.2 函數(shù)和過(guò)程的參數(shù)傳遞,8.2.3 數(shù)組及對(duì)象作為過(guò)程的參數(shù) 1、數(shù)組作為參數(shù) 例8-9求一個(gè)nn方陣所有元素之和; 解題思路:利用隨機(jī)函數(shù)產(chǎn)生一個(gè)6階方陣a,并保存在二維數(shù)組中,將此數(shù)組作為參數(shù)傳給函數(shù)suma,在函數(shù)suma中計(jì)算方陣的元素之和;在函數(shù)過(guò)程內(nèi)部使用Ubound(a,1)確定數(shù)組a的第一維上界。,8.2 函數(shù)和過(guò)程的參數(shù)傳遞,8.2.3 數(shù)組及對(duì)象作為過(guò)程的參數(shù) 2、對(duì)象參數(shù) 對(duì)于過(guò)程中的參數(shù),可以用對(duì)象參數(shù)進(jìn)行傳遞,如窗體、控件等。經(jīng) 過(guò)傳遞后,可以使用對(duì)象的有關(guān)屬性以及方法
17、。 在使用控件作為參數(shù)時(shí),必須考慮到作為實(shí)參的控件是否具有通過(guò)過(guò) 程中所列的控件的屬性,因此必須先判斷控件是哪一類控件。 判斷格式為: If/Elseif Typeof 控件名稱 is 控件類型 其中:控件類型指各種不同的控件的關(guān)鍵字,如文本框的關(guān)鍵字為 TextBox等。 If typeof Testctr is textbox then testctr.text=“Ms” End if,8.3 變量、過(guò)程的作用域,在VB程序中我們定義的變量、過(guò)程、函數(shù)均有其作用范圍,在VB系統(tǒng)內(nèi),該范圍稱為其作用域。 作用域分為三個(gè)層次:過(guò)程、模塊(文件)、全局(工程)
18、; 過(guò)程的作用域最小,僅局限于過(guò)程內(nèi)部(針對(duì)局部變量); 模塊(文件)次之,僅在某個(gè)模塊或文件內(nèi); 全局(工程)范圍最大,在整個(gè)應(yīng)用工程范圍內(nèi)。 8.3.1 過(guò)程的作用域 過(guò)程的作用域:模塊級(jí)(文件級(jí))和全局級(jí); 一個(gè)工程應(yīng)用程序一般由三類模塊構(gòu)成: 窗體模塊(*.frm):通常有:事件過(guò)程、自定義子過(guò)程和自定義函數(shù)過(guò)程 標(biāo)準(zhǔn)模塊文件(*.bas):由若干個(gè)VB子過(guò)程和函數(shù)組成,通常為應(yīng)用程序 提供可調(diào)用的標(biāo)準(zhǔn)程序單元; 類模塊文件(*.cls):包括自定義的類、為相應(yīng)類設(shè)計(jì)的屬性過(guò)程、自定 義方法過(guò)程、自定義事件過(guò)程等;,8.3 變量、過(guò)程的作用域,8.3.1 過(guò)程的作用域,,應(yīng)用程
19、序(.vbp文件),至少一個(gè)或多個(gè) 窗體模塊(*.frm)文件,事件過(guò)程(sub)、 自定義過(guò)程(Sub) 自定義函數(shù)(Function),一個(gè)或多個(gè) 標(biāo)準(zhǔn)模塊(.bas)文件,自定義過(guò)程(Sub) 自定義函數(shù)(Function),一個(gè)或多個(gè) 類模塊(.cls)文件,自定義屬性過(guò)程(Property) 自定義方法過(guò)程(Sub 或Function) 自定義事件過(guò)程(Event),,,,,,,,,8.3 變量、過(guò)程的作用域,8.3.1 過(guò)程的作用域 1、模塊級(jí)(文件級(jí))過(guò)程 指只能在本文件或模塊中被調(diào)用,此類過(guò)程(或函數(shù))定義時(shí)在Sub或 Function前加“Private”關(guān)鍵字
20、; 2、全局級(jí)過(guò)程 指能在整個(gè)應(yīng)用程序中被調(diào)用的過(guò)程,此類過(guò)程與模塊級(jí)過(guò)程的定義過(guò) 程完全相同,只是在定義前不加關(guān)鍵字“Private”,或加關(guān)鍵字“Public”。 調(diào)用方式通常為:標(biāo)準(zhǔn)模塊名(或窗體名).子過(guò)程或函數(shù)名(參數(shù))。,8.3 變量、過(guò)程的作用域,8.3.1 過(guò)程的作用域,8.3 變量、過(guò)程的作用域,8.3.2 變量的作用域 變量的作用域分為三級(jí):局部(過(guò)程)級(jí)、模塊級(jí)(文件)、全局(工程)級(jí) ; 1、局部變量(過(guò)程級(jí)):指在過(guò)程內(nèi)部定義、只能在過(guò)程內(nèi)使用的變量, 別的過(guò)程不能使用;定義方式:Dim、Static; 局部變量隨過(guò)程的調(diào)用而產(chǎn)生,也隨著過(guò)程調(diào)用的結(jié)束而結(jié)
21、束(Dim聲 明的變量將被釋放內(nèi)存,而用Static聲明的變量,變量沒(méi)有被釋放,但已 變得不可訪問(wèn),下次發(fā)問(wèn)時(shí),其值仍存在); 2、窗體模塊級(jí)變量:指在窗體(模塊)文件內(nèi),但在所有過(guò)程之外定義的 變量,即在窗體文件中的“通用聲明”段里用Dim或Private語(yǔ)句聲明的變 量,該變量可被窗體文件中的任何過(guò)程訪問(wèn),但不能被其他模塊文件中 的過(guò)程訪問(wèn)。此類變量隨窗體的產(chǎn)生而產(chǎn)生,也隨著窗體的結(jié)束而結(jié)束。 3、全局變量(工程級(jí)變量):指窗體或任一模塊中定義,但不在任一過(guò)程 內(nèi)定義的變量,此類變量的聲明必須用Public語(yǔ)句完成,次變量在整個(gè) 工程文件中存在,在工程應(yīng)用結(jié)束時(shí)才會(huì)被釋放
22、。,8.3 變量、過(guò)程的作用域,8.3.2 變量的作用域,8.3 變量、過(guò)程的作用域,文件1(*.Bas)(模塊文件 Module1.Bas) public a as integer private b as integer 模塊級(jí)變量 sub f1() dim c as integer 局部變量 print form1.c;c;b end sub,文件2(*.frm) (窗體模塊:Form1.frm) public c as single 全局變量 public a as integer 全局變量 sub command1_click() dim c as i
23、nteger 局部變量 print module1.a;c; form1.c;a end sub,注釋:上面Form1.frm文件print語(yǔ)句中, “Module1.a”是指“Module1.Bas”文件中定義的全局變量a; ”Form1.c“是指Form1.frm中定義的全局變量c; ”c“是指command1_click中定義的局部變量c; “a”是指在Form1.frm中定義的全局變量a;,8.3 變量、過(guò)程的作用域,說(shuō)明: 在同一模塊不同過(guò)程中定義的變量可以同名; 在同一模塊不同級(jí)別中定義的變量可以同名; 在不同模塊中定義的全局變量可以同名; 在過(guò)程中直
24、接引用的變量總是同名變量中作用域最小的那個(gè)變量; 在其他模塊(定義全局變量所在模塊)中引用全局變量時(shí),必須在該變 量前加上模塊名;,8.3 變量、過(guò)程的作用域,8.3.3 靜態(tài)變量 局部變量除了用Dim語(yǔ)句聲明外,還可以用Static語(yǔ)句將變量聲明為靜態(tài)變量,它在程序運(yùn)行中保留變量的值。即每次調(diào)用過(guò)程,用Static說(shuō)明的變量保持原來(lái)的值;而用Dim說(shuō)明的變量,每次調(diào)用過(guò)程時(shí),重新初始化。 形式: Static 變量名 As 類型 Static Function 函數(shù)名 (參數(shù)列表) As 類型 Static Sub 過(guò)程名(參數(shù)列表) 若函數(shù)名、過(guò)程名前加”Static“,表
25、示該函數(shù)、過(guò)程內(nèi)的局部變量都是靜態(tài) 變量。,8.3 變量、過(guò)程的作用域,8.3.3 靜態(tài)變量 例8-10 一個(gè)窗體單擊事件過(guò)程(Form_click())和一個(gè)求和函數(shù)(sum())組成的應(yīng)用程序,在Form_click()過(guò)程中5次調(diào)用函數(shù)sum(),Dim i As Integer, isum As Integer For i = 1 To 5 isum = sum(i) Print isum=; isum; Next Private Function sum(n As Integer) Static j As Integer Dim j As Integer j = j + n su
26、m = j End Function,8.4 遞歸,遞歸是指一個(gè)自己調(diào)用自己的過(guò)程。 VB允許定義一個(gè)自定義過(guò)程或函數(shù)在過(guò)程內(nèi)部自己調(diào)用自己,這樣的子過(guò)程或函數(shù)叫做遞歸子過(guò)程或遞歸函數(shù)。 例8-11 求n!的函數(shù)。 解題思路:遞歸就是一個(gè)自己不斷調(diào)用自己的過(guò)程,直到達(dá)到遞歸結(jié)束條件,而后逐級(jí)返回到上一次調(diào)用過(guò)程。每一次調(diào)用自己,先把形參、局部變量、調(diào)用結(jié)束時(shí)的返回地址壓棧,直到遞歸結(jié)束,這個(gè)過(guò)程叫做遞歸過(guò)程;然后一級(jí)一級(jí)從堆棧彈出參數(shù),直到??眨@個(gè)過(guò)程叫做回歸。 定義階乘運(yùn)算如下: n!=n(n1)! (n1)!=(n1)(n2)! 若用fn(n)表示n!,則由有:,
27、8.4 遞歸,求n!的函數(shù)定義如下: public function fn(n as integer) as integer if n=1 then fn=1 else fn=n*fn(n-1) endif end function 假設(shè)n3,則上訴函數(shù)的步驟如下: fn(3) =3*fn(2),n3時(shí)調(diào)用fn(2); fn(2)=2*fn(1),n2時(shí)調(diào)用fn(1); fn(1)=1,n1時(shí)求得fn(1)的值; fn(2)=2*1,返回fn(2)的值; fn(3)=3*fn(2)=3*2,返回fn(3)的值; 設(shè)計(jì)一個(gè)遞歸過(guò)程或函數(shù)應(yīng)具備的條件: 具備
28、遞歸條件及遞歸的條件; 遞歸調(diào)用遞歸結(jié)束的條件發(fā)展;,8.4 遞歸,例8-12在一個(gè)三角形中,取三邊的中點(diǎn)構(gòu)成一個(gè)三角形,然后在所畫的三角形的邊與相鄰的三角形的角構(gòu)成的三角形內(nèi)又畫一個(gè)三角形,如此循環(huán)下去直到滿足給定層次為止。,,,,,,,,,,,,,,,,解題思路:本題中的遞歸子過(guò)程為triangle(x1,x2,x3,y1,y2,k),k的初值為三角形的層次,遞歸結(jié)束條件為k1,在遞歸子過(guò)程中,每調(diào)用一次,k的值就減1。,(x1,y1),(x2,y2),(x3,y1),(u1,v1),(x2,y1),(u2,v1),8.5 常用算法與數(shù)據(jù)結(jié)構(gòu)三,8.5.1 素?cái)?shù)問(wèn)題 求素?cái)?shù)的方法:對(duì)于
29、一個(gè)自然數(shù)N,用大于1小于N的各個(gè)自然數(shù)都去除N,若都除不盡,則N為素?cái)?shù);否則為合數(shù)。 例8-13 編寫程序,求500,1999十位數(shù)字為7的素?cái)?shù)的個(gè)數(shù) 解題思路:定義一個(gè)函數(shù)isprime(k as integer) 來(lái)判斷一個(gè)數(shù)是否素?cái)?shù),再判斷這個(gè)數(shù)的十位數(shù)是否為7。,8.5 常用算法與數(shù)據(jù)結(jié)構(gòu)三,8.5.2 加密和解密 例8-14 編寫一個(gè)加密和解密程序,將輸入的一行字符串中的所有字母加密 解題思路:加密方法為將每一個(gè)字母加一序數(shù),例如,加序數(shù)3,這時(shí)”A“變換為”D“,”B“變換為”E“,“a”變換為“d”,“Y”變換為“B”,“Z”變換為”C“。在本題中,用字母的ASCII碼值加序數(shù)
30、3進(jìn)行加密,若大寫的字母加密后超過(guò)Z或小寫字母超過(guò)z,則將字母的ASCII碼值26。,8.5 常用算法與數(shù)據(jù)結(jié)構(gòu)三,8.5.3 數(shù)據(jù)檢索 數(shù)據(jù)檢索 就是從一組數(shù)據(jù)中找出具有某種特征的數(shù)據(jù)項(xiàng)。 最常用的一種檢索方式是順序檢索,是指對(duì)所存儲(chǔ)的數(shù)據(jù)從第一項(xiàng)開始,依次與所要檢索的數(shù)據(jù)進(jìn)行比較,直到找到該數(shù)據(jù),或?qū)⑷吭囟颊彝赀€沒(méi)有找到該數(shù)據(jù)為止。 例8-15 在線性表(數(shù)組)中根據(jù)給定的關(guān)鍵值,找出與其值相同的元素 解題思路:本題采用順序查找,即根據(jù)關(guān)鍵值與數(shù)組中的元素逐一比較,若相同,查找成功,若找不到,則查找成功。,8.5 常用算法與數(shù)據(jù)結(jié)構(gòu)三,8.5.3 數(shù)據(jù)檢索 例8-16 采用二分法在線性表(數(shù)組)中查找元素,5 11 23 27 29 32 38 43 58 77 89,low,,high,,mid,,初始:,
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業(yè)管理制度:常見(jiàn)突發(fā)緊急事件應(yīng)急處置程序和方法
- 某物業(yè)公司冬季除雪工作應(yīng)急預(yù)案范文
- 物業(yè)管理制度:小區(qū)日常巡查工作規(guī)程
- 物業(yè)管理制度:設(shè)備設(shè)施故障應(yīng)急預(yù)案
- 某物業(yè)公司小區(qū)地下停車場(chǎng)管理制度
- 某物業(yè)公司巡查、檢查工作內(nèi)容、方法和要求
- 物業(yè)管理制度:安全防范十大應(yīng)急處理預(yù)案
- 物業(yè)公司巡查、檢查工作內(nèi)容、方法和要求
- 某物業(yè)公司保潔部門領(lǐng)班總結(jié)
- 某公司安全生產(chǎn)舉報(bào)獎(jiǎng)勵(lì)制度
- 物業(yè)管理:火情火災(zāi)應(yīng)急預(yù)案
- 某物業(yè)安保崗位職責(zé)
- 物業(yè)管理制度:節(jié)前工作重點(diǎn)總結(jié)
- 物業(yè)管理:某小區(qū)消防演習(xí)方案
- 某物業(yè)公司客服部工作職責(zé)