第8章程序設(shè)計(jì)基礎(chǔ)2_第1頁(yè)
第8章程序設(shè)計(jì)基礎(chǔ)2_第2頁(yè)
第8章程序設(shè)計(jì)基礎(chǔ)2_第3頁(yè)
第8章程序設(shè)計(jì)基礎(chǔ)2_第4頁(yè)
第8章程序設(shè)計(jì)基礎(chǔ)2_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Visual Foxpro程序設(shè)計(jì)程序設(shè)計(jì)第第8章程序設(shè)計(jì)基礎(chǔ)章程序設(shè)計(jì)基礎(chǔ)本章主要內(nèi)容本章主要內(nèi)容8.1 程序設(shè)計(jì)的基本概念與步驟程序設(shè)計(jì)的基本概念與步驟8.2 程序中的常用命令程序中的常用命令 8.3 程序控制結(jié)構(gòu)程序控制結(jié)構(gòu)8.4 多模塊程序設(shè)計(jì)多模塊程序設(shè)計(jì)總頁(yè)第2頁(yè)8.3.3 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)在程序設(shè)計(jì)中,經(jīng)常需要對(duì)某一個(gè)程序段(即在程序設(shè)計(jì)中,經(jīng)常需要對(duì)某一個(gè)程序段(即一條或多條命令)反復(fù)執(zhí)行,這種程序結(jié)構(gòu)稱為循一條或多條命令)反復(fù)執(zhí)行,這種程序結(jié)構(gòu)稱為循環(huán)結(jié)構(gòu)。環(huán)結(jié)構(gòu)。 循環(huán)結(jié)構(gòu)的特點(diǎn)是:當(dāng)給出的循環(huán)條件為真時(shí),循環(huán)結(jié)構(gòu)的特點(diǎn)是:當(dāng)給出的循環(huán)條件為真時(shí),反復(fù)執(zhí)行一

2、組命令,這組被重復(fù)執(zhí)行的命令序列稱反復(fù)執(zhí)行一組命令,這組被重復(fù)執(zhí)行的命令序列稱為循環(huán)體。當(dāng)循環(huán)條件為假時(shí),則終止循環(huán)體的執(zhí)為循環(huán)體。當(dāng)循環(huán)條件為假時(shí),則終止循環(huán)體的執(zhí)行。循環(huán)結(jié)構(gòu)也就是由循環(huán)條件控制循環(huán)體是否重行。循環(huán)結(jié)構(gòu)也就是由循環(huán)條件控制循環(huán)體是否重復(fù)執(zhí)行的一種語(yǔ)句結(jié)構(gòu),它可以簡(jiǎn)化程序,提高程復(fù)執(zhí)行的一種語(yǔ)句結(jié)構(gòu),它可以簡(jiǎn)化程序,提高程序效率。常用的循環(huán)語(yǔ)句有以下幾種形式:序效率。常用的循環(huán)語(yǔ)句有以下幾種形式:條件型循環(huán):條件型循環(huán):DO WHILEDO WHILEENDDOENDDO計(jì)數(shù)型循環(huán)計(jì)數(shù)型循環(huán):FORFORTOTOENDFORENDFOR掃描型循環(huán):掃描型循環(huán):SCANSCAN

3、ENDSCANENDSCAN總頁(yè)第3頁(yè)一、條件循環(huán)一、條件循環(huán)條件循環(huán)是根據(jù)條件表達(dá)式的值,決定循環(huán)體內(nèi)語(yǔ)句的執(zhí)條件循環(huán)是根據(jù)條件表達(dá)式的值,決定循環(huán)體內(nèi)語(yǔ)句的執(zhí)行次數(shù),也稱為當(dāng)型循環(huán)。一般用于未知循環(huán)次數(shù)的循行次數(shù),也稱為當(dāng)型循環(huán)。一般用于未知循環(huán)次數(shù)的循環(huán)。環(huán)。【格式【格式】DO WHILE LOOP EXIT ENDDO【功能【功能】 語(yǔ)句執(zhí)行時(shí),先判斷語(yǔ)句執(zhí)行時(shí),先判斷 的值,若為真,的值,若為真,則執(zhí)行循環(huán)體內(nèi)的命令,即則執(zhí)行循環(huán)體內(nèi)的命令,即DO DO 與與ENDDOENDDO之間的命令;若之間的命令;若為假,則執(zhí)行為假,則執(zhí)行ENDDOENDDO后面的命令。后面的命令。總頁(yè)第4頁(yè)

4、【說明【說明】1.DO WHILE 1.DO WHILE 和和ENDDOENDDO要配對(duì)使用;要配對(duì)使用;2.DO WHILE 2.DO WHILE 是循環(huán)語(yǔ)句的入口,是循環(huán)語(yǔ)句的入口, 一般為邏輯型,一般為邏輯型, ENDDOENDDO是循環(huán)語(yǔ)句的出口,中間是循環(huán)語(yǔ)句的出口,中間 是重復(fù)執(zhí)行的循環(huán)體;是重復(fù)執(zhí)行的循環(huán)體;3.LOOP3.LOOP和和EXITEXIT只能在循環(huán)體中使用,是循環(huán)跳轉(zhuǎn)和控制語(yǔ)句。其中只能在循環(huán)體中使用,是循環(huán)跳轉(zhuǎn)和控制語(yǔ)句。其中LOOPLOOP是轉(zhuǎn)到循環(huán)的入口語(yǔ)句,是轉(zhuǎn)到循環(huán)的入口語(yǔ)句,EXITEXIT是強(qiáng)行退出循環(huán)的語(yǔ)句,它們一是強(qiáng)行退出循環(huán)的語(yǔ)句,它們一般都放在

5、分支結(jié)構(gòu)中;般都放在分支結(jié)構(gòu)中;4.4.循環(huán)結(jié)構(gòu)允許嵌套。這種嵌套不僅限于循環(huán)結(jié)構(gòu)自身的嵌套,而且循環(huán)結(jié)構(gòu)允許嵌套。這種嵌套不僅限于循環(huán)結(jié)構(gòu)自身的嵌套,而且還可以是和選擇結(jié)構(gòu)的相互嵌套;還可以是和選擇結(jié)構(gòu)的相互嵌套;5.5.循環(huán)一般要有退出機(jī)制,否則,會(huì)形成死循環(huán)。循環(huán)一般要有退出機(jī)制,否則,會(huì)形成死循環(huán)。總頁(yè)第5頁(yè)條件循環(huán)流程圖條件循環(huán)流程圖無跳轉(zhuǎn)流程圖無跳轉(zhuǎn)流程圖跳轉(zhuǎn)及控制流程圖跳轉(zhuǎn)及控制流程圖總頁(yè)第6頁(yè)例:例:編寫程序,其功能是循環(huán)查找學(xué)編寫程序,其功能是循環(huán)查找學(xué)生姓名,并根據(jù)用戶選擇確定是否繼生姓名,并根據(jù)用戶選擇確定是否繼續(xù)查找。續(xù)查找。CleaCleause use 學(xué)生學(xué)生Do

6、 while .t.Do while .t.cleacleatexttext根據(jù)姓名查找記錄根據(jù)姓名查找記錄endtextendtext? ?accepaccep 請(qǐng)輸入查詢學(xué)生姓名請(qǐng)輸入查詢學(xué)生姓名: to xm: to xmLocaLoca for for 姓名姓名=xm=xmif found()if found()row()+1,15 say row()+1,15 say 學(xué)號(hào)學(xué)號(hào)get get 學(xué)號(hào)學(xué)號(hào)row(),30 sayrow(),30 say姓名姓名get get 姓名姓名row()+1,15sayrow()+1,15say性別性別 get get 性別性別row(),30sa

7、yrow(),30say出生日期出生日期get get 出生日期出生日期elseelse?查無查無+xm+xm+姓名姓名!EndifEndifwait wait 是否繼續(xù)查詢是否繼續(xù)查詢?(Y/N) ?(Y/N) to cxto cx window at 20,10 window at 20,10 if uppe(cxif uppe(cx)=Y)=YlooploopelseelseexitexitendifendifenddoenddouseuseSet talk onSet talk onreturnreturn總頁(yè)第7頁(yè)二、計(jì)數(shù)型循環(huán)語(yǔ)句二、計(jì)數(shù)型循環(huán)語(yǔ)句計(jì)數(shù)型循環(huán)語(yǔ)句適用于循環(huán)次數(shù)已知的

8、情況下,它是根據(jù)用計(jì)數(shù)型循環(huán)語(yǔ)句適用于循環(huán)次數(shù)已知的情況下,它是根據(jù)用戶設(shè)置的循環(huán)變量的初值、終值和步長(zhǎng)來決定循環(huán)體的執(zhí)戶設(shè)置的循環(huán)變量的初值、終值和步長(zhǎng)來決定循環(huán)體的執(zhí)行次數(shù)。計(jì)數(shù)型循環(huán)語(yǔ)句又稱行次數(shù)。計(jì)數(shù)型循環(huán)語(yǔ)句又稱FORFOR循環(huán)語(yǔ)句。循環(huán)語(yǔ)句。【格式【格式】 FOR FOR = TO TO STEP STEP LOOP LOOP EXIT EXIT ENDFOR | NEXT ENDFOR | NEXT【功能【功能】通過比較通過比較 與與 來決定是否執(zhí)行來決定是否執(zhí)行 。執(zhí)行。執(zhí)行FORFOR語(yǔ)句時(shí),首先將循環(huán)初值賦給循環(huán)變量,語(yǔ)句時(shí),首先將循環(huán)初值賦給循環(huán)變量,然后將循環(huán)變量與循環(huán)

9、終值比較,當(dāng)然后將循環(huán)變量與循環(huán)終值比較,當(dāng) 為正數(shù)時(shí),若為正數(shù)時(shí),若 的值不大于的值不大于 ,執(zhí)行循環(huán)體;當(dāng),執(zhí)行循環(huán)體;當(dāng) 為為負(fù)數(shù)時(shí),若負(fù)數(shù)時(shí),若 的值不小于的值不小于 ,執(zhí)行循環(huán)體。,執(zhí)行循環(huán)體。一旦遇到一旦遇到ENDFORENDFOR或或NEXTNEXT語(yǔ)句,語(yǔ)句, 值自動(dòng)加上值自動(dòng)加上 ,然后返回到,然后返回到FORFOR語(yǔ)句,重新與語(yǔ)句,重新與 進(jìn)行比較。直到進(jìn)行比較。直到循環(huán)變量大于或小于循環(huán)終值時(shí),結(jié)束循環(huán)。步長(zhǎng)的默認(rèn)循環(huán)變量大于或小于循環(huán)終值時(shí),結(jié)束循環(huán)。步長(zhǎng)的默認(rèn)值為值為1 1??傢?yè)第8頁(yè)【說明【說明】1.1.步長(zhǎng)值省略時(shí),系統(tǒng)默認(rèn)步長(zhǎng)值為步長(zhǎng)值省略時(shí),系統(tǒng)默認(rèn)步長(zhǎng)值為1

10、 1。當(dāng)初值小于終值時(shí),。當(dāng)初值小于終值時(shí),步長(zhǎng)值為正值;當(dāng)初值大于終值時(shí),步長(zhǎng)值為負(fù)值。步步長(zhǎng)值為正值;當(dāng)初值大于終值時(shí),步長(zhǎng)值為負(fù)值。步長(zhǎng)值不能為長(zhǎng)值不能為0 0,否則造成死循環(huán);,否則造成死循環(huán);2.2.在循環(huán)體內(nèi)不要隨便改變循環(huán)變量的值,否則會(huì)引起循在循環(huán)體內(nèi)不要隨便改變循環(huán)變量的值,否則會(huì)引起循環(huán)次數(shù)發(fā)生改變;環(huán)次數(shù)發(fā)生改變;3.LOOP3.LOOP和和EXITEXIT命令的功能和用法與條件循環(huán)中該命令命令的功能和用法與條件循環(huán)中該命令的用法相同。的用法相同。 總頁(yè)第9頁(yè)計(jì)數(shù)循環(huán)流程圖計(jì)數(shù)循環(huán)流程圖總頁(yè)第10頁(yè)例:例:編寫程序,其功能是用計(jì)編寫程序,其功能是用計(jì)數(shù)循環(huán)統(tǒng)計(jì)學(xué)生表中入校

11、總分?jǐn)?shù)循環(huán)統(tǒng)計(jì)學(xué)生表中入??偡衷谠?70570分以上的學(xué)生人數(shù)。分以上的學(xué)生人數(shù)。CleaCleaSet talk offSet talk offuse use 學(xué)生學(xué)生coun to zrscoun to zrsrsrs=0=0list for list for 入??偡秩胄?偡?570=570go topgo topfor i=1 to zrsfor i=1 to zrsif if 入??偡秩胄?偡?570=570rsrs=rs+1=rs+1endifendifskipskipendforendfor?入??偡植坏陀谌胄?偡植坏陀?70570的學(xué)的學(xué)生人數(shù)是:生人數(shù)是:,rs,rsuseu

12、seset talk onset talk onreturetu總頁(yè)第11頁(yè)三、指針型循環(huán)語(yǔ)句三、指針型循環(huán)語(yǔ)句指針型循環(huán)語(yǔ)句是在數(shù)據(jù)表中建立的循環(huán),它是根據(jù)用戶在指針型循環(huán)語(yǔ)句是在數(shù)據(jù)表中建立的循環(huán),它是根據(jù)用戶在表中設(shè)置的當(dāng)前記錄指針來對(duì)一組記錄進(jìn)行的循環(huán)操作,表中設(shè)置的當(dāng)前記錄指針來對(duì)一組記錄進(jìn)行的循環(huán)操作,是是Visual FoxProVisual FoxPro中特有的一種循環(huán)語(yǔ)句。中特有的一種循環(huán)語(yǔ)句。【格式【格式】SCAN SCAN FOR FOR WHILE WHILE 2 LOOP LOOP EXIT EXIT ENDSCAN ENDSCAN【功能【功能】針對(duì)當(dāng)前表進(jìn)行循環(huán)操作

13、,用記錄指針控制循環(huán)次針對(duì)當(dāng)前表進(jìn)行循環(huán)操作,用記錄指針控制循環(huán)次數(shù)。在指定的數(shù)。在指定的 中依次尋找滿足中依次尋找滿足 FORFOR條件或條件或 WHILE WHILE 條件的記錄,并對(duì)找到的記錄執(zhí)行條件的記錄,并對(duì)找到的記錄執(zhí)行 中的命令。中的命令??傢?yè)第12頁(yè)【說明【說明】1.SCANENDSCAN1.SCANENDSCAN循環(huán)語(yǔ)句中隱含函數(shù)循環(huán)語(yǔ)句中隱含函數(shù)EOF()EOF()和命令和命令SKIPSKIP的的處理;處理;2.2.執(zhí)行執(zhí)行SCAN語(yǔ)句時(shí),首先判斷函數(shù)語(yǔ)句時(shí),首先判斷函數(shù)EOF() 的值,若為的值,若為“真真”,則結(jié)束循環(huán),執(zhí)行,則結(jié)束循環(huán),執(zhí)行ENDSCAN后面的語(yǔ)句;否

14、則,后面的語(yǔ)句;否則,結(jié)合結(jié)合或或,記錄指針移到指,記錄指針移到指定的范圍和條件內(nèi)的第一條記錄,定的范圍和條件內(nèi)的第一條記錄,執(zhí)行執(zhí)行 中的中的命令;命令;3.3.執(zhí)行執(zhí)行ENDSCANENDSCAN時(shí),記錄指針自動(dòng)移到下一條記錄,轉(zhuǎn)到時(shí),記錄指針自動(dòng)移到下一條記錄,轉(zhuǎn)到SCANSCAN重新判斷,直到重新判斷,直到EOF()EOF()函數(shù)值為真或到指定范圍末尾函數(shù)值為真或到指定范圍末尾, ,退出循環(huán)退出循環(huán), ,執(zhí)行執(zhí)行ENDSCAN后面的語(yǔ)句后面的語(yǔ)句;3.3.無無 選項(xiàng)時(shí),則表示對(duì)所有記錄進(jìn)行處理;選項(xiàng)時(shí),則表示對(duì)所有記錄進(jìn)行處理;4.LOOP4.LOOP和和EXITEXIT命令的功能和用

15、法與條件循環(huán)中該命令的命令的功能和用法與條件循環(huán)中該命令的用法相同。用法相同??傢?yè)第13頁(yè)指針循環(huán)流程圖指針循環(huán)流程圖總頁(yè)第14頁(yè)例:例:編寫程序,其功能是編寫程序,其功能是用指針循環(huán)統(tǒng)計(jì)學(xué)生表中用指針循環(huán)統(tǒng)計(jì)學(xué)生表中入??偡衷谌胄?偡衷?70570分以上的學(xué)分以上的學(xué)生人數(shù)。生人數(shù)。CleaCleaSet talk offSet talk offuse use 學(xué)生學(xué)生list for list for 入??偡秩胄?偡?570=570rsrs=0=0scan for scan for 入??偡秩胄?偡?570=570rsrs=rs+1=rs+1endscanendscan?入??偡植坏陀谌?/p>

16、校總分不低于570570的學(xué)的學(xué)生人數(shù)是:生人數(shù)是:,rs,rsuseuseset talk onset talk onreturetu總頁(yè)第15頁(yè)四、多重循環(huán)四、多重循環(huán)多重循環(huán)是指在一個(gè)循環(huán)語(yǔ)句內(nèi)又包含另一個(gè)循環(huán)語(yǔ)句,多重循環(huán)是指在一個(gè)循環(huán)語(yǔ)句內(nèi)又包含另一個(gè)循環(huán)語(yǔ)句,多重循環(huán)也稱為循環(huán)嵌套。下面以條件循環(huán)為例,進(jìn)行多重循環(huán)也稱為循環(huán)嵌套。下面以條件循環(huán)為例,進(jìn)行說明。說明。【格式【格式】 DO WHILE DO WHILE 1 11DO WHILE DO WHILE 2 21 ENDDO ENDDO 12ENDDOENDDO總頁(yè)第16頁(yè)【功能【功能】 在多重循環(huán)中,首先從外循環(huán)進(jìn)入內(nèi)循環(huán),

17、執(zhí)行在多重循環(huán)中,首先從外循環(huán)進(jìn)入內(nèi)循環(huán),執(zhí)行內(nèi)循環(huán)的語(yǔ)句。當(dāng)內(nèi)循環(huán)的條件為假時(shí),返回到外循環(huán)內(nèi)循環(huán)的語(yǔ)句。當(dāng)內(nèi)循環(huán)的條件為假時(shí),返回到外循環(huán);當(dāng)外循環(huán)的條件為真時(shí),又進(jìn)入內(nèi)循環(huán);否則,退出;當(dāng)外循環(huán)的條件為真時(shí),又進(jìn)入內(nèi)循環(huán);否則,退出循環(huán)。循環(huán)。 【說明【說明】1.1.循環(huán)嵌套層次不限,但內(nèi)循環(huán)的所有語(yǔ)句必須完全嵌套循環(huán)嵌套層次不限,但內(nèi)循環(huán)的所有語(yǔ)句必須完全嵌套在外層循環(huán)之中。否則,就會(huì)出現(xiàn)循環(huán)的交叉,造成邏在外層循環(huán)之中。否則,就會(huì)出現(xiàn)循環(huán)的交叉,造成邏輯上的混亂;輯上的混亂;2.2.循環(huán)結(jié)構(gòu)和分支結(jié)構(gòu)允許混合嵌套使用,但不允許交叉。循環(huán)結(jié)構(gòu)和分支結(jié)構(gòu)允許混合嵌套使用,但不允許交叉。其

18、入口語(yǔ)句和相應(yīng)的出口語(yǔ)句必須成對(duì)出現(xiàn)。其入口語(yǔ)句和相應(yīng)的出口語(yǔ)句必須成對(duì)出現(xiàn)??傢?yè)第17頁(yè)例例: : 編寫程序,其功能是使用多重循環(huán)打印一個(gè)九九乘法口訣表。編寫程序,其功能是使用多重循環(huán)打印一個(gè)九九乘法口訣表。SET TALK OFFSET TALK OFFCLEARCLEARFOR I=1 TO 9 &IFOR I=1 TO 9 &I循環(huán)為外層,共循環(huán)九次,控制循環(huán)為外層,共循環(huán)九次,控制“九九表九九表”的行的行 FOR j=1 TO I &JFOR j=1 TO I &J循環(huán)為內(nèi)層,共循環(huán)循環(huán)為內(nèi)層,共循環(huán)4545次(次(I I從從1 1到到9 9), ,控

19、制列控制列 ? SPACE(2) +STR(j,1)+? SPACE(2) +STR(j,1)+STR(I,1)+=+STR(I+STR(I,1)+=+STR(I* *J,2)+SPACE(2) &?J,2)+SPACE(2) &?輸輸出不換行出不換行 ENDFORENDFOR? ? & &每輸出九九表一行要換行每輸出九九表一行要換行 ENDFORENDFORSET TALK ONSET TALK ON RETURN RETURN思考:如果改用條件循環(huán),程序應(yīng)作如何修改?思考:如果改用條件循環(huán),程序應(yīng)作如何修改?總頁(yè)第18頁(yè)相關(guān)概念相關(guān)概念模塊化是結(jié)構(gòu)化程序的重

20、要原則,所謂模塊化就是模塊化是結(jié)構(gòu)化程序的重要原則,所謂模塊化就是把大程序按照功能分為較小的程序,具有一定功能的每把大程序按照功能分為較小的程序,具有一定功能的每個(gè)小程序即為模塊。一般來講,一個(gè)程序是由一個(gè)主控個(gè)小程序即為模塊。一般來講,一個(gè)程序是由一個(gè)主控模塊和若干子模塊組成的,主控模塊用來完成某些公用模塊和若干子模塊組成的,主控模塊用來完成某些公用操作及功能選擇,而子模塊用來完成某項(xiàng)特定的功能。操作及功能選擇,而子模塊用來完成某項(xiàng)特定的功能。這種設(shè)計(jì)風(fēng)格便于分工合作,將一個(gè)龐大的模塊這種設(shè)計(jì)風(fēng)格便于分工合作,將一個(gè)龐大的模塊分解為若干個(gè)子模塊分別完成,然后用主控模塊調(diào)用子分解為若干個(gè)子模塊

21、分別完成,然后用主控模塊調(diào)用子模塊。這種程序的模塊化結(jié)構(gòu)如下圖所示。模塊。這種程序的模塊化結(jié)構(gòu)如下圖所示。結(jié)構(gòu)化程序的設(shè)計(jì)過程就是將問題求解由抽象逐結(jié)構(gòu)化程序的設(shè)計(jì)過程就是將問題求解由抽象逐步具體化的過程。這種方法符合人們解決復(fù)雜問題遵循步具體化的過程。這種方法符合人們解決復(fù)雜問題遵循的普遍規(guī)律,可以顯著提高程序設(shè)計(jì)的效率。的普遍規(guī)律,可以顯著提高程序設(shè)計(jì)的效率。 8.4 多模塊程序設(shè)計(jì)多模塊程序設(shè)計(jì) 總頁(yè)第19頁(yè)程序的模塊化結(jié)構(gòu)程序的模塊化結(jié)構(gòu) 總頁(yè)第20頁(yè)總39頁(yè)第20頁(yè) 在編制程序時(shí),經(jīng)常會(huì)遇到有些運(yùn)算或某段程序在在編制程序時(shí),經(jīng)常會(huì)遇到有些運(yùn)算或某段程序在程序運(yùn)行中被多次調(diào)用的情況,為

22、了有效解決上述重復(fù)程序運(yùn)行中被多次調(diào)用的情況,為了有效解決上述重復(fù)調(diào)用,有必要設(shè)計(jì)相對(duì)獨(dú)立并能完成特定功能的程序段,調(diào)用,有必要設(shè)計(jì)相對(duì)獨(dú)立并能完成特定功能的程序段,這種程序段稱為這種程序段稱為子程序子程序( (該程序段單獨(dú)保存為一個(gè)程序文該程序段單獨(dú)保存為一個(gè)程序文件件) )或或過程過程( (該程序段附在調(diào)用程序末尾或放在過程文件該程序段附在調(diào)用程序末尾或放在過程文件中中) )。調(diào)用子程序的程序稱為。調(diào)用子程序的程序稱為調(diào)用程序調(diào)用程序。對(duì)于一個(gè)子程序。對(duì)于一個(gè)子程序來說,除了被調(diào)用以外,還可以調(diào)用其他子程序來說,除了被調(diào)用以外,還可以調(diào)用其他子程序( (子程序子程序的嵌套調(diào)用的嵌套調(diào)用)

23、)。此時(shí),該子程序便成為其被調(diào)用程序的調(diào)。此時(shí),該子程序便成為其被調(diào)用程序的調(diào)用程序。在一個(gè)應(yīng)用系統(tǒng)中,處于最高層次的調(diào)用程序用程序。在一個(gè)應(yīng)用系統(tǒng)中,處于最高層次的調(diào)用程序稱為稱為主程序主程序??傢?yè)第21頁(yè)總39頁(yè)第21頁(yè) 在應(yīng)用系統(tǒng)的開發(fā)中,一般會(huì)根據(jù)實(shí)際的需要將整個(gè)系在應(yīng)用系統(tǒng)的開發(fā)中,一般會(huì)根據(jù)實(shí)際的需要將整個(gè)系統(tǒng)劃分成若干個(gè)模塊,然后在主控模塊的控制下,調(diào)用各個(gè)統(tǒng)劃分成若干個(gè)模塊,然后在主控模塊的控制下,調(diào)用各個(gè)功能模塊以實(shí)現(xiàn)系統(tǒng)的各種功能操作,通常將這些可調(diào)用的功能模塊以實(shí)現(xiàn)系統(tǒng)的各種功能操作,通常將這些可調(diào)用的功能模塊也設(shè)計(jì)成過程或子程序。功能模塊也設(shè)計(jì)成過程或子程序。特點(diǎn):特點(diǎn)

24、:(1)(1)過程或子程序一般不單獨(dú)運(yùn)行,而是通過上級(jí)程序調(diào)用過程或子程序一般不單獨(dú)運(yùn)行,而是通過上級(jí)程序調(diào)用; ;(2)(2)過程可以附在調(diào)用程序的末尾過程可以附在調(diào)用程序的末尾, ,也可以放在單獨(dú)的文件中也可以放在單獨(dú)的文件中(過程文件)(過程文件); ;(3)(3)子程序可以嵌套調(diào)用。子程序可以嵌套調(diào)用??傢?yè)第22頁(yè)總39頁(yè)第22頁(yè)8.4.1 8.4.1 子程序子程序1 1子程序的建立子程序的建立 子程序作為一個(gè)獨(dú)立程序,與其他程序一樣可以用子程序作為一個(gè)獨(dú)立程序,與其他程序一樣可以用MODIFY COMMANDMODIFY COMMAND命令、菜單或項(xiàng)目管理器等多種方法建立和命令、菜單

25、或項(xiàng)目管理器等多種方法建立和調(diào)試,也是以程序文件名調(diào)試,也是以程序文件名.PRG.PRG的形式獨(dú)立存盤。的形式獨(dú)立存盤??傢?yè)第23頁(yè)總39頁(yè)第23頁(yè)2 2子程序的調(diào)用子程序的調(diào)用子程序的調(diào)用是通過調(diào)用語(yǔ)句實(shí)現(xiàn)的。子程序的調(diào)用是通過調(diào)用語(yǔ)句實(shí)現(xiàn)的?!靖袷健靖袷健緿O DO 或或 ( )( )【功能【功能】執(zhí)行執(zhí)行DODO調(diào)用命令時(shí),將指定的子程序調(diào)入內(nèi)存并執(zhí)行,調(diào)用命令時(shí),將指定的子程序調(diào)入內(nèi)存并執(zhí)行,當(dāng)執(zhí)行到當(dāng)執(zhí)行到RETURNRETURN命令時(shí),返回到該命令指定位置。命令時(shí),返回到該命令指定位置?!菊f明【說明】調(diào)用程序可以調(diào)用任何子程序。子程序還可以調(diào)用下一調(diào)用程序可以調(diào)用任何子程序。子程序

26、還可以調(diào)用下一級(jí)子程序,但子程序不能調(diào)用自己上層的調(diào)用程序。子程序級(jí)子程序,但子程序不能調(diào)用自己上層的調(diào)用程序。子程序可以返回到調(diào)用它的調(diào)用程序中,也可以直接返回到主程序可以返回到調(diào)用它的調(diào)用程序中,也可以直接返回到主程序中。中??傢?yè)第24頁(yè)總39頁(yè)第24頁(yè)子程序調(diào)用子程序調(diào)用嵌套調(diào)用嵌套調(diào)用總頁(yè)第25頁(yè)總39頁(yè)第25頁(yè)3 3子程序的返回子程序的返回 子程序執(zhí)行后,可以采用下面語(yǔ)句返回到調(diào)用程序。子程序執(zhí)行后,可以采用下面語(yǔ)句返回到調(diào)用程序。【格式【格式】RETURN RETURN |TO |TO |TO |TO MASTERMASTER【功能【功能】該語(yǔ)句終止子程序執(zhí)行,返回到調(diào)用程序中調(diào)該

27、語(yǔ)句終止子程序執(zhí)行,返回到調(diào)用程序中調(diào)用語(yǔ)句的下一個(gè)語(yǔ)句執(zhí)行用語(yǔ)句的下一個(gè)語(yǔ)句執(zhí)行( (或到指定位置或到指定位置) )。如無調(diào)用。如無調(diào)用程序,則返回命令窗口。程序,則返回命令窗口??傢?yè)第26頁(yè)總39頁(yè)第26頁(yè)【說明【說明】(1 1)子程序的一個(gè)重要標(biāo)志是:以)子程序的一個(gè)重要標(biāo)志是:以RETURNRETURN語(yǔ)句作為結(jié)束語(yǔ)句,語(yǔ)句作為結(jié)束語(yǔ)句,而一般在主程序和無上一級(jí)調(diào)用程序的程序尾部用而一般在主程序和無上一級(jí)調(diào)用程序的程序尾部用CANCELCANCEL語(yǔ)語(yǔ)句作為結(jié)束語(yǔ)句;句作為結(jié)束語(yǔ)句;(2 2)在返回語(yǔ)句中,若選擇可選項(xiàng)在返回語(yǔ)句中,若選擇可選項(xiàng) ,將表達(dá)式的值,將表達(dá)式的值返回給調(diào)用程

28、序。選擇可選項(xiàng)返回給調(diào)用程序。選擇可選項(xiàng)TOTO,可直接返,可直接返回指定的程序文件。選擇可選項(xiàng)回指定的程序文件。選擇可選項(xiàng)TO MASTERTO MASTER,則不論前面,則不論前面有多少級(jí)調(diào)用而直接返回到主程序。有多少級(jí)調(diào)用而直接返回到主程序。總頁(yè)第27頁(yè)總39頁(yè)第27頁(yè)8.4.2 8.4.2 過程及過程文件過程及過程文件把多個(gè)子程序合并成一個(gè)大的文件,在該文件中,每把多個(gè)子程序合并成一個(gè)大的文件,在該文件中,每個(gè)子程序仍然是獨(dú)立的,這個(gè)大的公用程序文件被稱作個(gè)子程序仍然是獨(dú)立的,這個(gè)大的公用程序文件被稱作過過程文件程文件。其中的每個(gè)子程序模塊稱為過程。在系統(tǒng)執(zhí)行過。其中的每個(gè)子程序模塊稱

29、為過程。在系統(tǒng)執(zhí)行過程中,只需打開相應(yīng)的過程文件即可調(diào)用其中的多個(gè)過程,程中,只需打開相應(yīng)的過程文件即可調(diào)用其中的多個(gè)過程,從而大大減少了訪問磁盤的次數(shù),可提高程序運(yùn)行效率。從而大大減少了訪問磁盤的次數(shù),可提高程序運(yùn)行效率。過程文件的擴(kuò)展名仍然是過程文件的擴(kuò)展名仍然是.PRG.PRG?!靖袷健靖袷健縋ROCEDURE PROCEDURE PARAMETERS PARAMETERS RETURN RETURN ENDPROC ENDPROC總頁(yè)第28頁(yè)總39頁(yè)第28頁(yè)1 1過程定義過程定義【命令【命令】 MODIFY COMMAND MODIFY COMMAND 過程文件的基本書寫格式:過程文件

30、的基本書寫格式:PROCEDURE PROCEDURE 1 1RETURNRETURNENDPROCENDPROCPROCEDURE PROCEDURE N NRETURNRETURNENDPROCENDPROC總頁(yè)第29頁(yè)總39頁(yè)第29頁(yè)【功能【功能】建立過程。建立過程?!菊f明【說明】過程名和過程文件名是兩個(gè)不同的概念,過程名和過程文件名是兩個(gè)不同的概念,每個(gè)過程是具有獨(dú)立功能的一段程序,過程名是一每個(gè)過程是具有獨(dú)立功能的一段程序,過程名是一個(gè)沒有擴(kuò)展名的過程名稱。一個(gè)過程文件可以由一個(gè)沒有擴(kuò)展名的過程名稱。一個(gè)過程文件可以由一個(gè)或多個(gè)過程構(gòu)成,個(gè)或多個(gè)過程構(gòu)成,擴(kuò)展名是擴(kuò)展名是.PRG.P

31、RG。在在PROCEDURE與與ENDPROC之間如果使用之間如果使用RETURN命令,可以返回到上一層程序。命令,可以返回到上一層程序。2調(diào)用(執(zhí)行)過程調(diào)用(執(zhí)行)過程【格式【格式】DO 【功能【功能】用于調(diào)用用于調(diào)用指定的過程。指定的過程??傢?yè)第30頁(yè)總39頁(yè)第30頁(yè)3 3過程文件的打開和關(guān)閉過程文件的打開和關(guān)閉 調(diào)用過程時(shí),首先打開包含被調(diào)用過程的過程文件。調(diào)用過程時(shí),首先打開包含被調(diào)用過程的過程文件。過程文件使用后需要及時(shí)關(guān)閉。過程文件使用后需要及時(shí)關(guān)閉。(1 1)打開過程文件)打開過程文件【命令【命令】 SET PROCEDURE TO SET PROCEDURE TO 【功能【功

32、能】 打開指定的過程文件,將過程文件中所包含打開指定的過程文件,將過程文件中所包含的過程全部調(diào)入內(nèi)存。的過程全部調(diào)入內(nèi)存。【說明【說明】 系統(tǒng)在同一時(shí)刻只能打開一個(gè)過程文件,打系統(tǒng)在同一時(shí)刻只能打開一個(gè)過程文件,打開新過程文件的同時(shí)將關(guān)閉原來打開的過程文件。若開新過程文件的同時(shí)將關(guān)閉原來打開的過程文件。若要修改過程文件的內(nèi)容,一定要先關(guān)閉該過程文件。要修改過程文件的內(nèi)容,一定要先關(guān)閉該過程文件。(2 2)關(guān)閉過程文件)關(guān)閉過程文件【命令【命令】 CLOSE PROCEDURECLOSE PROCEDURE 或或 SET PROCEDURE TOSET PROCEDURE TO【功能【功能】 關(guān)

33、閉已打開的過程文件。關(guān)閉已打開的過程文件??傢?yè)第31頁(yè)總39頁(yè)第31頁(yè)8.4.3 8.4.3 內(nèi)存變量的作用域及帶參數(shù)調(diào)用子程序內(nèi)存變量的作用域及帶參數(shù)調(diào)用子程序1 1內(nèi)存變量作用域內(nèi)存變量作用域 在程序設(shè)計(jì)中,特別是模塊程序中,往往會(huì)用到許在程序設(shè)計(jì)中,特別是模塊程序中,往往會(huì)用到許多內(nèi)存變量,這些內(nèi)存變量有的在整個(gè)程序運(yùn)行過程中多內(nèi)存變量,這些內(nèi)存變量有的在整個(gè)程序運(yùn)行過程中起作用,而有的僅在某些程序模塊中起作用,內(nèi)存變量起作用,而有的僅在某些程序模塊中起作用,內(nèi)存變量的這些作用范圍稱為內(nèi)存變量的這些作用范圍稱為內(nèi)存變量作用域作用域。內(nèi)存變量的作用。內(nèi)存變量的作用域根據(jù)作用范圍可以分為三類

34、:域根據(jù)作用范圍可以分為三類:全局變量全局變量、局部變量局部變量和和本地變量本地變量。2.2.內(nèi)存變量的一般性質(zhì)內(nèi)存變量的一般性質(zhì)在多模塊程序設(shè)計(jì)中在多模塊程序設(shè)計(jì)中, ,不同的程序塊分為主程序、調(diào)用程不同的程序塊分為主程序、調(diào)用程序、子程序,程序調(diào)用時(shí)有上下級(jí)關(guān)系,在不同的程序序、子程序,程序調(diào)用時(shí)有上下級(jí)關(guān)系,在不同的程序中的變量有其一般如下性質(zhì):中的變量有其一般如下性質(zhì):(1)(1)上級(jí)程序生成的變量,調(diào)用的下級(jí)程序可以使用,反之上級(jí)程序生成的變量,調(diào)用的下級(jí)程序可以使用,反之下級(jí)程序生成的變量,在上級(jí)程序中不可使用。下級(jí)程序生成的變量,在上級(jí)程序中不可使用。(2)(2)上級(jí)程序中已有的

35、變量,如果在下級(jí)程序中未重新定義,上級(jí)程序中已有的變量,如果在下級(jí)程序中未重新定義,則返回上級(jí)程序時(shí),保留下級(jí)程序重新賦的值。則返回上級(jí)程序時(shí),保留下級(jí)程序重新賦的值??傢?yè)第32頁(yè)總39頁(yè)第32頁(yè)3 3全局變量全局變量 全局變量又稱為公共變量,在程序運(yùn)行中,上下各級(jí)全局變量又稱為公共變量,在程序運(yùn)行中,上下各級(jí)程序或任何程序模塊中都可以使用該內(nèi)存變量。當(dāng)程序執(zhí)程序或任何程序模塊中都可以使用該內(nèi)存變量。當(dāng)程序執(zhí)行完畢,回到命令窗后,其值仍然保存。行完畢,回到命令窗后,其值仍然保存?!靖袷健靖袷健縋UBLIC PUBLIC 【功能【功能】將將 中指定的變量定義為全局內(nèi)存變量。中指定的變量定義為全局

36、內(nèi)存變量??傢?yè)第33頁(yè)總39頁(yè)第33頁(yè)【說明【說明】(1 1)用)用PUBLICPUBLIC語(yǔ)句定義的內(nèi)存變量系統(tǒng)設(shè)置初值為邏輯型語(yǔ)句定義的內(nèi)存變量系統(tǒng)設(shè)置初值為邏輯型.F.F.;(2 2)一個(gè))一個(gè)PUBLICPUBLIC語(yǔ)句可以定義多個(gè)內(nèi)存變量,可以是簡(jiǎn)單變量,也可語(yǔ)句可以定義多個(gè)內(nèi)存變量,可以是簡(jiǎn)單變量,也可以是下標(biāo)變量,每個(gè)內(nèi)存變量之間均用以是下標(biāo)變量,每個(gè)內(nèi)存變量之間均用“,”隔開;隔開;(3 3)全局變量必須先定義后賦值,故稱為建立全局型變量;)全局變量必須先定義后賦值,故稱為建立全局型變量;(4 4)在程序中已被定義成全局變量的變量也可以在下一級(jí)程序中進(jìn)一)在程序中已被定義成全局

37、變量的變量也可以在下一級(jí)程序中進(jìn)一步定義成局部變量;但已定義成局部變量的,卻不可反過來再定義成步定義成局部變量;但已定義成局部變量的,卻不可反過來再定義成全局變量;全局變量;(5 5)若下層模塊中建立的內(nèi)存變量要供上層模塊使用,或某模塊中建)若下層模塊中建立的內(nèi)存變量要供上層模塊使用,或某模塊中建立的內(nèi)存變量要供并列模塊使用,必須將這種變量設(shè)置成全局變量立的內(nèi)存變量要供并列模塊使用,必須將這種變量設(shè)置成全局變量; ;(6 6)在)在Visual FoxProVisual FoxPro的命令窗口中所定義的內(nèi)存變量,系統(tǒng)默認(rèn)為的命令窗口中所定義的內(nèi)存變量,系統(tǒng)默認(rèn)為是全局變量是全局變量, ,但不能

38、在程序方式下利用但不能在程序方式下利用 ;(7 7)由于全局變量的作用范圍為整個(gè)系統(tǒng),當(dāng)程序執(zhí)行完畢后,全局)由于全局變量的作用范圍為整個(gè)系統(tǒng),當(dāng)程序執(zhí)行完畢后,全局變量仍占用內(nèi)存,不會(huì)自動(dòng)被清除。因此,不再使用全局變量時(shí),可變量仍占用內(nèi)存,不會(huì)自動(dòng)被清除。因此,不再使用全局變量時(shí),可以使用下列語(yǔ)句清除:以使用下列語(yǔ)句清除:RELEASE RELEASE 、CLEAR ALLCLEAR ALL總頁(yè)第34頁(yè)總39頁(yè)第34頁(yè)4 4局部變量局部變量 局部變量又稱私有變量。在局部變量又稱私有變量。在Visual FoxProVisual FoxPro的程序中,的程序中,未加未加PUBLICPUBLIC

39、語(yǔ)句定義的內(nèi)存變量,系統(tǒng)默認(rèn)為局部變量,局語(yǔ)句定義的內(nèi)存變量,系統(tǒng)默認(rèn)為局部變量,局部變量的作用域限制在定義它的程序和被該程度所調(diào)用的下部變量的作用域限制在定義它的程序和被該程度所調(diào)用的下級(jí)程序過程中,一旦定義它的程序運(yùn)行完畢,局部變量將從級(jí)程序過程中,一旦定義它的程序運(yùn)行完畢,局部變量將從內(nèi)存中自動(dòng)被清除。內(nèi)存中自動(dòng)被清除?!靖袷健靖袷健縋RIVATE PRIVATE 內(nèi)存變量表內(nèi)存變量表ALLLIKE|EXCEPTALLLIKE|EXCEPT【功能【功能】聲明局部變量并隱藏上級(jí)程序中的同名內(nèi)存變量。將聲明局部變量并隱藏上級(jí)程序中的同名內(nèi)存變量。將 中所列的內(nèi)存變量定義為本級(jí)程序和下一級(jí)程中

40、所列的內(nèi)存變量定義為本級(jí)程序和下一級(jí)程序中專用的局部變量。序中專用的局部變量??傢?yè)第35頁(yè)總39頁(yè)第35頁(yè)【說明【說明】(1 1)在同一過程中,用隱式或顯式定義的局部變量的)在同一過程中,用隱式或顯式定義的局部變量的作用域完全相同。在主程序或上級(jí)過程中未經(jīng)作用域完全相同。在主程序或上級(jí)過程中未經(jīng)PRIVATEPRIVATE語(yǔ)句定義的局部變量,在下級(jí)過程中也未經(jīng)顯式定義,語(yǔ)句定義的局部變量,在下級(jí)過程中也未經(jīng)顯式定義,那么它的新值可以帶回主程序或上級(jí)過程;若在下級(jí)那么它的新值可以帶回主程序或上級(jí)過程;若在下級(jí)過程中進(jìn)行了顯式定義,其新值不能帶回主程序或上過程中進(jìn)行了顯式定義,其新值不能帶回主程序

41、或上級(jí)過程中使用;級(jí)過程中使用;(2 2)用)用PRIVATEPRIVATE定義的局部變量只對(duì)本級(jí)程序及下級(jí)定義的局部變量只對(duì)本級(jí)程序及下級(jí)子程序有效,當(dāng)返回上級(jí)程序時(shí),這種局部型變量便子程序有效,當(dāng)返回上級(jí)程序時(shí),這種局部型變量便自動(dòng)被消除;自動(dòng)被消除;(3 3)當(dāng)下級(jí)程序或過程中顯式定義了與上級(jí)程序中同)當(dāng)下級(jí)程序或過程中顯式定義了與上級(jí)程序中同名的局部變量時(shí),上級(jí)程序中的名的局部變量時(shí),上級(jí)程序中的 同名變量將被隱藏起同名變量將被隱藏起來,一旦含有來,一旦含有PRIVATEPRIVATE的內(nèi)存變量程序運(yùn)行完畢,上級(jí)的內(nèi)存變量程序運(yùn)行完畢,上級(jí)程序被隱藏的同變量自行恢復(fù)原來的狀態(tài);程序被隱

42、藏的同變量自行恢復(fù)原來的狀態(tài);總頁(yè)第36頁(yè)總39頁(yè)第36頁(yè)(4 4)用用PRIVATE定義的內(nèi)存變量?jī)H指明變量的類型,定義的內(nèi)存變量?jī)H指明變量的類型,沒有賦初值;沒有賦初值;(5 5)PRIVATE ALL:表示將所有位于本級(jí)程序中的內(nèi):表示將所有位于本級(jí)程序中的內(nèi)存變量定義為局部型量;存變量定義為局部型量;(6 6)PRIVATE ALL LIKE :將位于本級(jí)程序:將位于本級(jí)程序中符合中符合的變量定義為局部型變量;的變量定義為局部型變量;(7 7)PRIVATE ALL EXCEPT :將位于本級(jí)程:將位于本級(jí)程序中不符合序中不符合的變量定義為局部型變量。的變量定義為局部型變量??傢?yè)第37

43、頁(yè)總39頁(yè)第37頁(yè)5 5本地變量本地變量 本地變量只能在定義它的程序中使用,一旦定義它本地變量只能在定義它的程序中使用,一旦定義它的程序運(yùn)行完畢,本地變量將從內(nèi)存中釋放。的程序運(yùn)行完畢,本地變量將從內(nèi)存中釋放?!靖袷健靖袷健縇OCAL LOCAL 【功能【功能】將將 中指定的變量定義為本地變量。中指定的變量定義為本地變量?!菊f明【說明】(1 1)用)用LOCALLOCAL定義的本地變量,系統(tǒng)自動(dòng)將其初值賦以定義的本地變量,系統(tǒng)自動(dòng)將其初值賦以邏輯型邏輯型.F.F.;(2 2)LOCALLOCAL與與LOCATELOCATE前前4 4個(gè)字母相同,故不可縮寫。本地個(gè)字母相同,故不可縮寫。本地型內(nèi)存

44、變量只能在定義它的程序中使用,不能在上級(jí)或型內(nèi)存變量只能在定義它的程序中使用,不能在上級(jí)或下級(jí)的調(diào)用程序中使用。下級(jí)的調(diào)用程序中使用。總頁(yè)第38頁(yè)總39頁(yè)第38頁(yè)例:例:建立一個(gè)程序,內(nèi)容是子程序的嵌套調(diào)用及在過程調(diào)用建立一個(gè)程序,內(nèi)容是子程序的嵌套調(diào)用及在過程調(diào)用中查看變量值的變化。中查看變量值的變化。程序如下:程序如下: * *主程序主程序GCCS.PRGGCCS.PRG SET TALK OFF SET TALK OFF CLEAR CLEAR PUBLIC X,Z PUBLIC X,Z X=1 X=1 Y=1 Y=1 Z=1 Z=1 DO SUB1 DO SUB1 ?“SUB1 ?“S

45、UB1結(jié)束后結(jié)束后:”:” ? MAIN-X=,X ? MAIN-X=,X ? MAIN-Y=,Y ? MAIN-Y=,Y WAIT WAIT DO SUB2 DO SUB2 ?“SUB2 ?“SUB2結(jié)束后結(jié)束后:”:” ? MAIN-Z=,Z ? MAIN-Z=,Z RETURN RETURNPROCEDURE SUB1 X=X+1 Y=Y*X RETURN &過程 SUB1結(jié)束PROCEDURE SUB2 PRIVATE Z Z=4 X=Z+2DO SUB3 ?“SUB2中中” ? SUB2-X=,XWAITRETURN &過程SUB2結(jié)束PROCEDURE SUB3LO

46、CAL X X=4Z=Z+3 ?”SUB3中中” ? SUB3-X=,X? SUB3-Z=,ZWAITRETURN&過程過程SUB3結(jié)束結(jié)束總頁(yè)第39頁(yè)總39頁(yè)第39頁(yè)6. 6. 子程序或過程的帶參調(diào)用子程序或過程的帶參調(diào)用 在調(diào)用過程時(shí),有時(shí)需要將數(shù)據(jù)傳遞到被調(diào)用過程,在調(diào)用過程時(shí),有時(shí)需要將數(shù)據(jù)傳遞到被調(diào)用過程,有時(shí)又需要從被調(diào)用過程將數(shù)據(jù)返回,實(shí)現(xiàn)數(shù)據(jù)相互傳有時(shí)又需要從被調(diào)用過程將數(shù)據(jù)返回,實(shí)現(xiàn)數(shù)據(jù)相互傳遞。遞。Visual FoxProVisual FoxPro為此提供了過程的帶參調(diào)用方法。為此提供了過程的帶參調(diào)用方法。 在調(diào)用過程的命令和被調(diào)用過程的相關(guān)語(yǔ)句中,分在調(diào)用過程的

47、命令和被調(diào)用過程的相關(guān)語(yǔ)句中,分別設(shè)置數(shù)量相同、數(shù)據(jù)類型一致且排列順序相互對(duì)應(yīng)的別設(shè)置數(shù)量相同、數(shù)據(jù)類型一致且排列順序相互對(duì)應(yīng)的參數(shù)表。調(diào)用過程的命令將一系列參數(shù)的值傳遞給被調(diào)參數(shù)表。調(diào)用過程的命令將一系列參數(shù)的值傳遞給被調(diào)用過程中的對(duì)應(yīng)參數(shù),被調(diào)用過程運(yùn)行結(jié)束時(shí),再將參用過程中的對(duì)應(yīng)參數(shù),被調(diào)用過程運(yùn)行結(jié)束時(shí),再將參數(shù)的值返回到調(diào)用它的上一級(jí)過程或主程序中。數(shù)的值返回到調(diào)用它的上一級(jí)過程或主程序中??傢?yè)第40頁(yè)總39頁(yè)第40頁(yè)(1)(1)帶參調(diào)用帶參調(diào)用【命令【命令】 DO DO WITH WITH 【功能【功能】 調(diào)用指定過程,并為被調(diào)用過程提供參數(shù)。調(diào)用指定過程,并為被調(diào)用過程提供參數(shù)。

48、【說明【說明】 該命令只用在調(diào)用過程的程序中。此處該命令只用在調(diào)用過程的程序中。此處 又稱為實(shí)參表,其中的參數(shù)可以是常量、已賦值的變量又稱為實(shí)參表,其中的參數(shù)可以是常量、已賦值的變量或數(shù)值表達(dá)式,參數(shù)之間用逗號(hào)分開?;驍?shù)值表達(dá)式,參數(shù)之間用逗號(hào)分開。總頁(yè)第41頁(yè)總39頁(yè)第41頁(yè)(2)(2)接受參數(shù)接受參數(shù)【命令【命令】 PARAMETERS PARAMETERS 【功能【功能】 接受調(diào)用過程的命令傳遞過來的參數(shù)。接受調(diào)用過程的命令傳遞過來的參數(shù)?!菊f明【說明】 該命令必須位于被調(diào)用過程的第一條可執(zhí)行語(yǔ)句該命令必須位于被調(diào)用過程的第一條可執(zhí)行語(yǔ)句處。此處處。此處 又稱為形參表,其中的參數(shù)一般為內(nèi)

49、又稱為形參表,其中的參數(shù)一般為內(nèi)存變量。形參與實(shí)參的個(gè)數(shù)應(yīng)相等、數(shù)據(jù)類型和個(gè)數(shù)要存變量。形參與實(shí)參的個(gè)數(shù)應(yīng)相等、數(shù)據(jù)類型和個(gè)數(shù)要對(duì)應(yīng)相同。對(duì)應(yīng)相同??傢?yè)第42頁(yè)總39頁(yè)第42頁(yè)(3) (3) 參數(shù)的傳遞形式參數(shù)的傳遞形式 在在VF VF 的過程及自定義函數(shù)中都涉及參數(shù)傳遞。參數(shù)的的過程及自定義函數(shù)中都涉及參數(shù)傳遞。參數(shù)的傳遞形式分為傳遞形式分為值參數(shù)傳遞值參數(shù)傳遞和和引用參數(shù)傳遞引用參數(shù)傳遞( (傳地址傳地址) )。值參數(shù)傳遞值參數(shù)傳遞: : 在調(diào)用過程或自定義函數(shù)時(shí)在調(diào)用過程或自定義函數(shù)時(shí), , 先計(jì)算出實(shí)先計(jì)算出實(shí)參的值參的值, , 并將其按位置對(duì)應(yīng)關(guān)系傳遞給形式參數(shù)變量并將其按位置對(duì)應(yīng)關(guān)

50、系傳遞給形式參數(shù)變量, , 形式形式參數(shù)變量值的改變不影響實(shí)際參數(shù);參數(shù)變量值的改變不影響實(shí)際參數(shù);引用參數(shù)傳遞引用參數(shù)傳遞: : 在調(diào)用過程或自定義函數(shù)時(shí)在調(diào)用過程或自定義函數(shù)時(shí), , 將實(shí)際參將實(shí)際參數(shù)的地址傳遞給形式參數(shù)數(shù)的地址傳遞給形式參數(shù), , 形式參數(shù)值的改變會(huì)影響實(shí)際參形式參數(shù)值的改變會(huì)影響實(shí)際參數(shù)。數(shù)??傢?yè)第43頁(yè)總39頁(yè)第43頁(yè)在過程調(diào)用中的參數(shù)傳遞方式在過程調(diào)用中的參數(shù)傳遞方式: : VF VF 中的過程在調(diào)用時(shí)中的過程在調(diào)用時(shí): : 當(dāng)實(shí)參是常數(shù)、當(dāng)實(shí)參是常數(shù)、( (變量變量) )或表達(dá)式時(shí)或表達(dá)式時(shí), , 實(shí)參傳遞給形參屬于值傳實(shí)參傳遞給形參屬于值傳遞遞; ;當(dāng)實(shí)參是變

51、量時(shí)當(dāng)實(shí)參是變量時(shí), , 實(shí)參傳遞給形參屬于引用實(shí)參傳遞給形參屬于引用傳遞。傳遞。總頁(yè)第44頁(yè)總39頁(yè)第44頁(yè)例例: :cleacleacleaclea all allset talk offset talk offx=5x=5y=10y=10?主程序未調(diào)用過程時(shí)變量的值主程序未調(diào)用過程時(shí)變量的值:?X=+str(X,2),Y=+str(Y,2)?X=+str(X,2),Y=+str(Y,2)do sub with x,(ydo sub with x,(y) )?主程序調(diào)用過程后變量的值主程序調(diào)用過程后變量的值:?X=+str(X,2),Y=+str(Y,2)?X=+str(X,2),Y=+s

52、tr(Y,2)set talk onset talk onreturnreturnprocedure subprocedure subparameters a,bparameters a,ba=a+5a=a+5b=b+10b=b+10?過程中變量的值過程中變量的值:?A=+str(a,2),B=+str(b,2)?A=+str(a,2),B=+str(b,2)returnreturn總頁(yè)第45頁(yè)總39頁(yè)第45頁(yè)8.4.4 8.4.4 自定義函數(shù)自定義函數(shù)Visual FoxProVisual FoxPro除了提供許多系統(tǒng)函數(shù)外,也允許用戶自定除了提供許多系統(tǒng)函數(shù)外,也允許用戶自定義函數(shù)(義函數(shù)(User Defined FuntionUser Defined Funtion),簡(jiǎn)稱),簡(jiǎn)稱UDFUDF。自定義。自定義函數(shù)既可以放在主程序中,只對(duì)主程序有效,也可以作函數(shù)既可以放在主程序中,只對(duì)主程序有效,也可以作為獨(dú)立文件保存,其擴(kuò)展名為為獨(dú)立文件保存,其擴(kuò)展名為. . PRG。在。在Visual FoxProVisual FoxPro中中UDFUDF可以分為:獨(dú)立可以分為:獨(dú)立UDFUDF和依附和依附UDFUDF。1 1獨(dú)立獨(dú)立UDFUDF獨(dú)立自定義函數(shù)和子程序的區(qū)別在于自定義函數(shù)必須有返獨(dú)立自定義函數(shù)和子程序的區(qū)別在于自定義函

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論