VF程序命令文件的建立和執(zhí)行_第1頁
VF程序命令文件的建立和執(zhí)行_第2頁
VF程序命令文件的建立和執(zhí)行_第3頁
VF程序命令文件的建立和執(zhí)行_第4頁
VF程序命令文件的建立和執(zhí)行_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

5.1VFP程序——命令文件的建立和執(zhí)行5.2VFP常用編程命令及函數(shù)5.3VFP流程圖介紹5.4順序執(zhí)行5.5判斷分支5.6循環(huán)結(jié)構(gòu)

5.7過程與用戶自定義函數(shù)第五章VisualFoxPro程序設(shè)計入門<<返回

5.1VFP程序——命令文件的建立和執(zhí)行5.1.1建立和編輯命令文件1.用MODIFYCOMMAND命令建立命令文件命令格式:MODIFYCOMMAND[<文件名>]命令功能:打開命令文件編輯窗口創(chuàng)建/編輯指定命令文件。說明:文件名的默認擴展名為.PRG。指定文件存在時,首先在磁盤上復(fù)制一同名、同內(nèi)容的.BAK文件。編輯結(jié)束時,可用^End或^W結(jié)束命令并存盤。也可用Esc鍵作廢編輯并結(jié)束命令。

2.使用菜單操作建立命令文件操作過程:文件→新建→選擇“程序”單選按鈕→單擊“新建文件”,將打開一編輯窗口,供用戶輸入程序。

3.使用項目管理器建立命令文件有關(guān)項目管理器的詳細內(nèi)容參見第十三章。操作過程:首先打開項目管理器→選擇“代碼”選項卡→選擇“程序”選項→單擊“新建”按鈕,也將打開一編輯窗口供用戶輸入程序。

5.1.2執(zhí)行命令文件命令基本格式:DO<命令文件名>命令功能:首先打開指定的命令文件,然后從其第一條語句開始執(zhí)行。執(zhí)行完畢,自動關(guān)閉該命令文件。5.2VFP常用編程命令及函數(shù)1.SETTALK命令命令格式:SETTALKON/OFF命令功能:使命令結(jié)果顯示/不顯示。5.2VFP常用編程命令及函數(shù)1.系統(tǒng)初始化命令——CLEARALL命令格式:CLEARALL命令功能:關(guān)閉所有打開的庫文件、表文件及其相關(guān)文件——索引文件、備注文件等,清除所有內(nèi)存變量,清除所有用戶自定義下拉菜單、彈出式菜單和窗口,選擇1號工作區(qū)為當(dāng)前工作區(qū)。2.清屏命令——CLEAR命令格式:CLEAR命令功能:清除VFP主窗口或當(dāng)前用戶自定義窗口。

3.終止程序執(zhí)行語句——CANCEL命令格式:CANCEL命令功能:終止正在執(zhí)行的程序,把控制權(quán)返回給COMMAND窗口。4.程序注釋語句——NOTE/*命令格式1:NOTE<注釋字符>命令格式2:*<注釋字符>命令功能:標識一個非執(zhí)行的注釋行。5.3VFP流程圖介紹

在編制程序尤其是編制復(fù)雜程序時,常用流程圖來進行程序設(shè)計和介紹程序的結(jié)構(gòu)。流程圖是形象的描述程序設(shè)計思想的好方法,它的特點是比較直觀、清晰。

5.4順順序執(zhí)行行5.4.1順順序執(zhí)行行程序順序執(zhí)行程序序特點:命令令的執(zhí)行順序序就是命令在在程序中的排排列順序,每每條命令均被被執(zhí)行一次。。例1根據(jù)據(jù)圓的半徑徑計算圓的的面積。程序清單:ClearInput’請輸入半徑徑:’tor?‘圓的面積為為:’,pi()*r*r5.5判判斷分分支5.5.1條件件轉(zhuǎn)向語句句——IF…ENDIF這是一種簡簡單的分支支語句,語語句格式如如下:IF<條件表達式式><命令序列列>ENDIF<條件表達式式>值為““真”時,,順序執(zhí)行行IF和ENDIF間的語句行行序列,然然后再執(zhí)行行ENDIF后的語句;;若其值為為“假”時時,則直接接跳到ENDIF后面的語句句繼續(xù)執(zhí)行行。IF和ENDIF必須成對出出現(xiàn)。圖5?–4條條件轉(zhuǎn)向語語句流程圖圖例2讀讀程序清單單,分析程程序功能.ClearInput’請輸入一個個隨機正整整數(shù):’tonIfmod(n,7)=0?‘Pass!’’Endif5.5.2條件件選擇轉(zhuǎn)向向語句———IF…ELSE…ENDIF語句格式::IF?<條件表達式式><命令序列列1>ELSE<命令序列2>ENDIF執(zhí)行過程::計算條件件表達式的的值,若為為真,則執(zhí)執(zhí)行<命令令序列1>,然后跳跳過<命令令序列2>,從ENDIF后面的語句句繼續(xù)執(zhí)行行;否則,,執(zhí)行<命命令序列2>,然后后再執(zhí)行ENDIF后面的語句句。例3讀程序清單單,分析程程序功能.ClearInput’請輸入一個個隨機正整整數(shù):’tonIfmod(n,7)=0?‘Pass!’’Else?‘Sorry!’Endif5.5.3IF語句的嵌套套例4為鼓勵存款款,對定期期存款時間間少于1年年的,利率率為3%;;等于或大大于1年而而少于3年年的,利率率為5%;;等于或大大于3年而而少于5年年的,利率率為7%;;5年以上上的,利率率為9%。。程序清單如如下:圖5?–8例4的流程圖5.5.4情況況語句———DOCASE……ENDCASE情況語句格格式:DOCASECASE<條件表達式式1><語句行序序列1>CASE<條件表達式式2><語句行序序列2>…CASE<條件表達式式n><語句行序列列n>[OTHERWISE<語句行序列列>]ENDCASE執(zhí)行過程::依次計算算每一個CASE語句對應(yīng)的的條件表達達式,遇到到第一個為真值者,,則執(zhí)行該該語句下面面對應(yīng)的語語句序列段段,執(zhí)行完完后,直接接跳轉(zhuǎn)至ENDCASE后。如果所所有的條件件都不為真真值,若無無OTHERWISE子句,則不不執(zhí)行任何何語句序列列,跳轉(zhuǎn)至至ENDCASE后;有可選選項OTHEWISE時,執(zhí)行OTHERWISE子句對應(yīng)的的語句序列列,再跳轉(zhuǎn)轉(zhuǎn)至ENDCASE后。如果有多個個條件表達達式為真值值,也僅僅僅執(zhí)行第一一個條件表表達式為真真值者對應(yīng)應(yīng)的語句序序列。DOCASE和ENDCASE必須成對出出現(xiàn)。DOCASE與第一個CASE之間的任何何語句將不不會被執(zhí)行行。例5用情況語句句重新編制制例4,比比較情況語語句與條件件轉(zhuǎn)向語句句的用法。。5.6循循環(huán)結(jié)結(jié)構(gòu)5.6.1三種種循環(huán)語句句1.DOWHILE循環(huán)(1)語句格式::DOWHILE<條件表達式式><循環(huán)體語語句序列>ENDDO(2)執(zhí)行行過程:①執(zhí)行到DOWHILE語句時,首首先計算<條件表達達式>的值值,為真時時,順序執(zhí)執(zhí)行循環(huán)體體中的語句句,即執(zhí)行行循環(huán)體;;為假時,,跳到ENDDO的下面一句句去執(zhí)行,,即跳出循循環(huán)體,循循環(huán)結(jié)束。。②執(zhí)行到循環(huán)環(huán)結(jié)束語句句ENDDO時,系統(tǒng)返返回循環(huán)起起始語句,,再一次執(zhí)執(zhí)行DOWHILE語句。(3)說明明:ENDDO和DOWHILE語句必須成成對出現(xiàn);;在循環(huán)體體內(nèi)必須有有使<條件件表達式>逐漸為假假的語句,,否則,將將進入死循循環(huán)。圖5–11DOWHILE循環(huán)語句流流程圖例:將一張張厚度0.1mm并充分大的的紙對折多多少次后厚厚度超過珠珠峰的高度度?2.SCAN循環(huán)語句格式:SCAN[<范圍>][FOR<條件>]<循環(huán)體語句句序列>ENDSCAN其中,SCAN為循環(huán)起始始語句,ENDSCAN為循環(huán)結(jié)束束語句。語句功能:對當(dāng)前表表指定范圍圍內(nèi)滿足條條件的記錄錄依次執(zhí)行行<循環(huán)體體語句序列列>所規(guī)定定的操作。。范圍省略略值為ALL。例:使用循循環(huán)在一行行內(nèi)顯示女女職工姓名名。3.FOR循環(huán)(1)語句格式::FOR<循環(huán)變量名名>=<數(shù)數(shù)值表達式式1>TO<數(shù)值表達式式2>[STEP<數(shù)值表達式式3>]<循環(huán)體語語句序列>ENDFOR/NEXT(2)執(zhí)執(zhí)行過程(3)說說明:①在執(zhí)行循循環(huán)體時,,若對初值值、終值和和步長三個個表達式中中所含變量量的值作了了修改,不不會影響循循環(huán)初值、、循環(huán)終值值和步長。。②循環(huán)初值值、循環(huán)終終值和步長長值必須合合理,否則則,不執(zhí)行行循環(huán)。③執(zhí)行循環(huán)環(huán)體時,若若修改了循循環(huán)變量值值,將會影影響到循環(huán)環(huán)執(zhí)行次數(shù)數(shù)。例:計算N!=1*2*3*……*N例:計算∑∑I=1+2+3+………+N例:找出3位的水仙花花數(shù),若一一個3位正整數(shù)的的各位數(shù)字字的立方和和等于該數(shù)數(shù)本身,則則稱這樣的的數(shù)為水仙仙花數(shù)。算法:枚舉舉。把100-999之間的每一一個數(shù)都檢檢驗一遍,,輸出滿足足定義的即即可。5.6.2對表表文件記錄錄進行操作作時的循環(huán)環(huán)控制方式式1.對表文文件記錄進進行逐條操操作的循環(huán)環(huán)控制方式式格式1:SCAN<語句行序列列>ENDSCAN格式2:DOWHILE.NOT.EOF(?)<語句行序列列>SKIPENDDO例11用逐條記錄錄循環(huán)操作作的方法,,打印輸出出表文件職職工.DBF中每條記錄錄的姓名和和工資。依題意,本本例的流程程圖如下。。圖5–13例例11的流流程圖CLEARSETPRINTERON?"姓名工工資"OPENDATABASE雇員管理USE職工SCAN?姓名+""??工資ENDSCANUSECLOSEDATABASESETPRINTEROFF2.選擇表表文件中符符合條件的的記錄進行行循環(huán)操作作格式1:SCAN[<范圍>][FOR<條件>]<語句行序序列>ENDSCAN格式2:LOCATE[<范圍>][FOR<條件>]DOWHILEFOUND()<語句行序列列>CONTINUEENDDO例12修改表文件件職工.DBF中職工的工工資,對工工資不超過過600元元且不低于于500元元者加10元。依題意,畫畫流程圖如如圖所示。。圖5–14例例12的流流程圖采用SCAN語句,程序序如下:CLEAROPENDATABASE雇員管理USE職工SCANFOR工資<=600AND工資>=500REPLACE工資WITH工資+10ENDSCANUSECLOSEDATABASE若采用DOWHILE語句,則程程序其它部部分不變,,僅把循環(huán)環(huán)部分改為為:LOCAFOR工資<=600AND工資>=500DOWHILEFOUND()REPL工資WITH工資+10CONTENDDO5.6.3循環(huán)環(huán)結(jié)構(gòu)的兩兩條專用語語句1.退出循循環(huán)語句———EXIT前面介紹的的循環(huán)語句句格式中,,一旦進入入循環(huán),循循環(huán)次數(shù)實實際上已經(jīng)經(jīng)確定。但但在實際應(yīng)應(yīng)用中,常常希望在某某種情況下下,強迫循循環(huán)語句結(jié)結(jié)束,去繼繼續(xù)執(zhí)行循循環(huán)語句后后的其它語語句。EXIT語句可實現(xiàn)現(xiàn)這一要求求。語句格式:EXIT語句功能:立即退出出循環(huán),轉(zhuǎn)轉(zhuǎn)去執(zhí)行循循環(huán)終端語語句之后的的語句。EXIT語句通常包包含在IF語句或DOCASE語句中,當(dāng)當(dāng)某條件出出現(xiàn)時,才才被執(zhí)行。。通常用于于無限次循循環(huán)的控制制,例如::DOWHILE.T.<語句行序列列>IF<條件表達式式>EXITENDIFENDDO類似地,EXIT可出現(xiàn)在DOCASE的某語句序序列中。例13打印某種報報表,每打打印完一張張,便提示示用戶是否否還要打印印,由用戶戶輸入的信信息來進行行控制,試試編程序?qū)崒崿F(xiàn)這種功功能。依題意畫流流程圖如圖圖所示。程序如下::圖5–15例例13的流流程圖CLEARALLDOWHILE.T.<打印報表程程序段>CLEARANSWER=MESSAGEBOX("繼續(xù)打印嗎嗎?",36,"打印提提示")IFANSWER=7EXITENDIFENDDO2.短路循循環(huán)語句———LOOP語句格式:LOOP語句功能:強迫結(jié)束束本次循環(huán)環(huán)體的執(zhí)行行,使流程程返回循環(huán)環(huán)開始語句句。例14假設(shè)有一個個表文件““工資.DBF”,,其中包括有有“姓名””、“實發(fā)發(fā)工資”等等字段,有有20個記記錄?,F(xiàn)在在要求顯示示出此表中中前10個個記錄的““姓名”和和“實發(fā)工工資”,但但是,如果果遇到“姓姓名”為““王林”的的則不顯示示。編程序序?qū)崿F(xiàn)。依題意繪制制流程圖如如圖所示。。圖5–16例例14的流流程圖采用SCAN循環(huán)語句,,程序如下下:CLEAROPENDATABASE雇員管理USE工資SCANFORRECNO()<=10IF姓名="王王林"LOOPENDIF?姓名,實發(fā)發(fā)工資ENDSCANUSECLOSEDATABASE采用DOWHILE循環(huán)語句的的程序見P.98,,自學(xué)。例15令計算機從從零開始計計數(shù),并將將奇數(shù)累加加求和。當(dāng)當(dāng)奇數(shù)累加加和大于300時,,結(jié)束計數(shù)數(shù);否則,,繼續(xù)計數(shù)數(shù)。依題意意編程如下下:X=0JSH=0DOWHILE.T.X=X+1DOCASECASEINT(X/2)=X/2LOOPCASEINT(X/2)<>X/2JSH=JSH+XIFJSH>300EXITENDIFENDCASEENDDO?"奇數(shù)和="??JSH5.6.4循環(huán)環(huán)結(jié)構(gòu)應(yīng)用用舉例1.循環(huán)環(huán)語句與其其它分支判判斷語句的的嵌套所謂嵌套,,即為:在在一個語句句結(jié)構(gòu)中,,包含了另另一個完整整的語句結(jié)結(jié)構(gòu)。例16建立一個命命令文件修修改表文件件職工.DBF中的工資,,對于工資資500元元與600元之間的的職工增加加20元,,而對于工工資大于600元的的職工增加加100元元。要求逐逐條記錄進進行操作。。OPENDATABASE雇員管理USE職工SCANDOCASECASE工資<600.AND.工資>=500REPLACE工資WITH工資+20CASE工資>600REPLACE工資WITH工資+10ENDCASEENDSCANUSECLOSEDATABASE在嵌套使用用時,注意意不要互相相交叉,下下面給出兩兩種錯誤的的形式,如如圖5––18所示示。例17假設(shè)某中學(xué)學(xué)有一個管管理記錄本本校學(xué)生成成績的表文文件XSCJ.DBF,,它的結(jié)構(gòu)如如下:學(xué)號(N,5),姓名(C,8),性別別(C,2),年年級級(N,2),語文文(N,5,2),數(shù)學(xué)學(xué)(N,5,2),物理理(N,5,2),化化學(xué)學(xué)(N,5,2),英語語(N,5,2),主平平均均(N,5,2),總平平均均(N,5,2),升留留判判定定(C,6)編寫寫程程序序::根根據(jù)據(jù)表表中中錄錄入入的的各各門門課課成成績績,,計計算算出出每每個個學(xué)學(xué)生生的的語語文文和和數(shù)數(shù)學(xué)學(xué)兩兩門門主主課課的的平平均均成成績績與與五五門門課課的的總總平平均均成成績績,,然然后后根根據(jù)據(jù)學(xué)學(xué)生生的的成成績績來來決決定定學(xué)學(xué)生生是是升升級級、、留留級級,,還還是是補補考考。。如如果果主主課課平平均均成成績績及及格格者者,,則則升升級級;;主主課課平平均均成成績績不不及及格格,,但但總總平平均均成成績績及及格格的的,,則則同同意意補補考考;;主主課課平平均均成成績績不不及及格格且且總總平平均均成成績績也也不不及及格格者者,,則則留留級級。。最最后后分分別別打打印印出出升升級級學(xué)學(xué)生生名名單單,,留留級級學(xué)學(xué)生生名名單單和和補補考考學(xué)學(xué)生生名名單單。。依依題題意意,,本本例例的的流流程程圖圖如如圖圖5––19所所示示。。圖5–19例例17的的流流程程圖圖

打開相關(guān)表文件

對每一條記錄,均執(zhí)行

主平均=(語文+數(shù)學(xué))/2總平均=(語文+數(shù)學(xué)+物理+化學(xué)+英語)/5

主平均<60主平均<60主平均>=60且總平均<60且總平均>=60升留判定=“升級”升留判定=“留級”升留判定=“補考”

打印升級記錄

打印留級記錄

打印補考記錄USEXSCJSCANREPLACE主平平均均WITH(語文文+數(shù)數(shù)學(xué)學(xué))/2REPLACE總平平均均WITH;(語文文+數(shù)數(shù)學(xué)學(xué)+物物理理+化化學(xué)學(xué)+英英語語)/5DOCASECASE主平均>=60REPLACE升留判定定WITH"升級"CASE主平均<60.AND.總平均<60REPLACE升留判定定WITH"留級"CASE主平均<60.AND.總平均>=60REPLACE升留判定定WITH"補考"ENDCASEENDSCANLISTFOR升留判定定="升升級"TOPRINTLISTFOR升留判定定="留留級"TOPRINTLISTFOR升留判定定="補補考"TOPRINTUSE2.多重重循環(huán)多重循環(huán)環(huán)即循環(huán)環(huán)的嵌套套,在一一個循環(huán)環(huán)的循環(huán)環(huán)體中,,包含有有另一個個循環(huán)。。我們稱稱外層循循環(huán)為外外循環(huán),,被包含含的循環(huán)環(huán)稱為內(nèi)內(nèi)循環(huán)。。以DOWHILE為例,多多重循環(huán)環(huán)的一般般格式如如圖5––20所所示。例18編制一張張九九乘乘法表,,要求格格式如下下:*12345678911224336944812165510152025661218243036771421283542498816243240485664991827364554637281CLEAR?“*"FORA=1TO9??AENDFOR?FORA=1TO9?AB=1DOWHILEB<=AP=A*B??PB=B+1ENDDO?ENDFORCLEAR?“*"FORA=1TO9??AENDFOR?FORA=1TO9?AFORB=1TOAP=A*B??PENDFOR?ENDFOR例:找出出100以內(nèi)的的素數(shù)-只能被被1和自自身整除除的正整整數(shù)。分析:枚舉法法。檢查2-100之間的的每一個個數(shù)(外外循環(huán))),對每每一個數(shù)數(shù)用2~N-1去除(內(nèi)內(nèi)循環(huán))),均不不能被整整除的數(shù)數(shù)就是要要找的素素數(shù)。例:顯示示矩陣123456789分析:外外循環(huán)變變量I用于表示示行號內(nèi)循環(huán)變變量J用于表示示列號任一數(shù)據(jù)據(jù)可表示示為:(I-1)*3+J又例:生生成一個個4行4列的數(shù)組組存儲兩兩位的隨隨機數(shù)整整數(shù)并顯顯示該數(shù)數(shù)組值。。例:百元元買百雞雞問題。。假設(shè)小小雞每只只5角,公雞雞每只2元,母雞雞每只3元,若要要用100元買到100只雞,共共有多少少種方案案。(枚枚舉法解解多解方方程問題題)設(shè)小雞,,公雞,,母雞各各為x,y,z只,則據(jù)據(jù)題意可可列出方方程:x+y+z=1000.5x+2y+3z=100算法:令令x,y,z分別從0變化到100,檢驗每每一種取取值,輸輸出滿足足上述條條件的組組合。進一步簡簡化:z最大只能能取33,y最大只能能取50,當(dāng)y,z取定后x只能為100-y-z。例:編寫寫程序計計算組合合數(shù)=,,其中n!=1×2××……××n。CLEARCLEARINPUT"請輸入N:"TONINPUT"請輸入N:"TONINPUT"請輸入M:"TOMINPUT"請輸入M:"TOMC1=1STORE1TOC1,C2,C3FORI=1TONDOFACWITHN,C1C1=C1*IDOFACWITHM,C2ENDFOR計算N!DOFACWITHN-M,C3C2=1?"組合數(shù)數(shù):",C1/C2/C3FORI=1TOMSETTALKONC2=C2*IENDFOR計算M!PROCEDUREFACC3=1PARAMETERSX,YFORI=1TON-MFORI=1TOXC3=C3*IY=Y*IENDFOR計算(N-M))!ENDFOR?"組合數(shù)數(shù)=",C1/C2/C3RETURN學(xué)生成績績管理系系統(tǒng)5.7過過程程與用戶戶自定義義函數(shù)5.7.1過過程1.創(chuàng)建建過程過程是為為完成某某個操作作而編寫寫的程序序段。過過程定義義的語法法格式如如下:PROCEDURE<過程名>[PARAMETERS<虛參數(shù)表表>]<命令語語句序列列>[RETURN[TOMASTER]][ENDPROC]RETURN稱返回語語句格式一::RETURN格式二::RETURNTOMASTER格式二在在過程嵌嵌套調(diào)用用時使用用,表示示返回到到最高級級調(diào)用者者;格式式一為返返回上級級調(diào)用過過程,即即當(dāng)程序序執(zhí)行該該語句時時,控制制返回到到其上級級程序,,按程序序流程從從調(diào)用該該過程命命令的下下一條命命令處繼繼續(xù)執(zhí)行行。<過程名名>最多多可使用用254個字符符。過程的存存放位置置:調(diào)用用程序之之后或過過程文件件中。2.調(diào)調(diào)用過程程1)常用格式式:DO<過程名>[WITH<實參數(shù)表表>]這個語句句出現(xiàn)在在要調(diào)用用某過程程的主程程序中。。當(dāng)主程程序執(zhí)行行到該語語句時,,立即轉(zhuǎn)轉(zhuǎn)去執(zhí)行行指定過過程中的的命令語語句塊;;當(dāng)在過過程中遇遇到RETURN語句或遇遇到ENDPROC語句時,,又轉(zhuǎn)回回主程序序,按程程序流程程執(zhí)行DO命令的下下一條語語句。2)其其它格式式VFP還提供了了另外兩兩種調(diào)用用過程的的方法::①命令格式式:=<過程名名>()②命令格式式:<過程程名>()3.過過程調(diào)用用的嵌套套主程序調(diào)調(diào)用一個個過程,,這個過過程又可可以調(diào)用用第二個個過程,,第二個個過程又又可以調(diào)調(diào)用第三三個過程程,在系系統(tǒng)允許許的嵌套套范圍內(nèi)內(nèi)這樣一一個一個個地調(diào)用用下去,,這種調(diào)調(diào)用就稱稱為過程程的嵌套套。如圖圖所示。。————DO<過程名1>————————DO<過程名2>——RETURN

————DO<過程名3>——RETURN————————RETURN圖5–23過過程的的嵌套1————DO<過程名1>————————DO<過程名2>——RETURN

————DO<過程名3>——RETURN————————RETURN過程的嵌嵌套————DO<過程名1>————————DO<過程名2>——RETURN

————DO<過程名3>——RETURN

——————RETURNTOMASTER5.7.2用用戶自自定義函函數(shù)用戶根據(jù)據(jù)具體問問題需要要自己定定義的函函數(shù),稱稱為用戶戶自定義義函數(shù)。。1.創(chuàng)創(chuàng)建自定定義函數(shù)數(shù)語句格式式:FUNCTION<用戶自定定義函數(shù)數(shù)名>[PARAMETERS<變量名表表>]…&&命令語語句序列列[RETURN[<表達式>]]ENDFUNC說明:存放位置置:調(diào)用用程序段段之后或或過程文文件中。。<表達式式>用于于向調(diào)用用程序返返回函數(shù)數(shù)值。2.調(diào)用用自定義義函數(shù)調(diào)用格式式:<自定定義函數(shù)數(shù)名>([<表表達式表表>])執(zhí)行過程程和參數(shù)數(shù)的傳遞遞過程與與過程調(diào)調(diào)用語句句相同。。例創(chuàng)建一自自定義函函數(shù)MYFUN用于計算算N!,再編寫主主程序來來調(diào)用該該函數(shù)計計算組合合數(shù)。自定義函函數(shù)“Myfun”的內(nèi)容如如下:FUNCTIONMyfunPARAMETERSNS=1I=1FORI=1TONS=S*IENDFORRETURNSENDFUN主程序序的內(nèi)內(nèi)容為為:CLEARINPUT"請輸入入N:"TONINPUT"請輸入入M:"TOMA=Myfun(N)/Myfun(M)/Myfun(N-M)?"組合合數(shù)=",,A5.7.3過過程程文件件1.建建立過過程文文件在設(shè)計計過程程時也也可以以把它它們保保存在在單獨獨的程程序文文件中中,我我們把把這種種程序序文件件稱為為過程程文件件。在在一個個過程程文件件中,,可以以包含含某主主程序序所調(diào)調(diào)用的的全部部過程程。打打開一一個過過程文文件就就打開開了它它所包包含的的所有有過程程。采采用這這種方方式,,既可可以使使主程程序代代碼顯顯得簡簡練,,也使使程序序結(jié)構(gòu)構(gòu)更加加緊湊湊。過程文文件的的建立立方法法與命命令文文件一一樣,,使用用MODIFYCOMMAND命令打打開代代碼編編輯窗窗口,,在其其中定定義多多個過過程或或函數(shù)數(shù)。其其默認認的擴擴展名名為.PRG。P.106例20。2.使使用過過程文文件調(diào)用過過程文文件中中的過過程,,應(yīng)首首先打打開該該過程程文件件。命令格格式:SETPROCEDURETO<過程文文件名名>3.關(guān)關(guān)閉過過程文文件(1)用用SETPROCEDURETO<過程文文件名名>打打開一一個過過程文文件時時,原原已在在內(nèi)存存中打打開的的過程程文件件即被被關(guān)閉閉。即即,內(nèi)內(nèi)存中中最多多只能能存在在一個個過程程文件件。(2)在在主程程序末末尾應(yīng)應(yīng)關(guān)閉閉過程程文件件。命令1:CLOSEPROCEDURE命令2:SETPROCEDURETO5.7.4設(shè)設(shè)置置內(nèi)存存變量量屬性性內(nèi)存變變量可可以具具有兩兩種屬屬性::全局局性和和局部部性(本地地性))。內(nèi)存變變量的的屬性性表明明了內(nèi)內(nèi)存變變量的的作用用范圍圍。1.內(nèi)內(nèi)存存變量量的局局部性性在程序序中所所定義義的內(nèi)內(nèi)存變變量,,如果果未加加說明明將具具有局局部性性,其其特點點為::(1)如果果未加加特別別說明明,則則在定定義它它的程程序執(zhí)執(zhí)行完完后,,將被被系統(tǒng)統(tǒng)清除除。(2)如如果定定義它它的程程序還還要調(diào)調(diào)用其其它過過程,,那么么它還還可以以在被被調(diào)用用的過過程中中使用用。(3)在在被調(diào)調(diào)用的的過程程或函函數(shù)執(zhí)執(zhí)行當(dāng)當(dāng)中,,如果果仍未未做特特別說說明而而改變變了該該內(nèi)存存變量量的值值,則則在從從過程程或函函數(shù)返返回主主程序序時,,該變變量仍仍然保保留它它在過過程或或函數(shù)數(shù)中被被改變變了的的值,,主程程序在在此基基礎(chǔ)上上可繼繼續(xù)使使用。。從內(nèi)存存變量量的固固有性性質(zhì)可可知,,在有有過程程嵌套套的情情況下下,較較高一一級的的程序序中生生成的的變量量可以以供較較低一一級使使用,,而反反之則則不可可,這這就是是內(nèi)存存變量量的局局部性性。例22由鍵盤盤輸入入一個個梯形形的上上底、、下底底和高高的值值,在在主程程序中中定義義它們們,然然后在在函數(shù)數(shù)中求求這個個梯形形的面面積,,分別別看看看這些些變量量在主主程序序與函函數(shù)中中的情情況。。P.108,自學(xué)。。2.設(shè)設(shè)置置全局局性內(nèi)內(nèi)存變變量語語句———PUBLIC在程序序設(shè)置置中,,對有有些函函數(shù)中中定義義的內(nèi)內(nèi)存變變量,,我們們希望望在主主程序序中仍仍能使使用,,或者者希望望它在在整個個的程程序中中均能能使用用,這這時,,應(yīng)該該使用用全局局性的的內(nèi)存存變量量。全全局性性內(nèi)存存變量量定義義格式式如下下:命令格格式:PUBLIC<內(nèi)存變變量名名/數(shù)數(shù)組說說明符符清單單>命令功功能:定義義指定定的內(nèi)內(nèi)存變變量或或數(shù)組組具有有全局局性。。全局性性內(nèi)存存變量量的性性質(zhì)::(1)用用PUBLIC語句聲聲明過過的內(nèi)內(nèi)存變變量可可以在在整個個的程程序以以及各各過程程或函函數(shù)中中使用用。在在任何何過程程或函函數(shù)中中改變變了該該變量量的值值,當(dāng)當(dāng)該變變量進進入到到其它它過程程或函函數(shù)時時,仍仍然保保留該該改變變了的的變量量值。。(2)當(dāng)當(dāng)整個個程序序結(jié)束束后,,用PUBLIC語句聲聲明過過的內(nèi)內(nèi)存變變量依依然存存在,,若要要清除除它們們,必必須借借助于于RELEASE命令。。在VFP命令窗窗口下下建立立的內(nèi)內(nèi)存變變量都都是全全局性性內(nèi)存存變量量。無無須用用PUBLIC說明。。在程序序中,,內(nèi)存存變量量用PUBLIC命令說說明為為全局局性變變量之之后,,變量量的初初值為為邏輯輯假((.F.))。例23見P.110。3.隱隱藏藏內(nèi)存存變量量語句句——PRIVATE命令格格式:PRIVATE<內(nèi)存存變量量名清清單>/<ALL[LIKE/EXCEPT<通配符符>]>命令功功能:隱藏藏指定定內(nèi)存存變量量的已已有定定義。。說明:后一一選項項可以以有以以下三三種形形式::(1)ALL:將所有有的內(nèi)內(nèi)存變變量均均隱藏藏。(2)ALLLIKE<通配符符>::內(nèi)存存中所所有變變量名名與通通配符符相匹匹配的的內(nèi)存存變量量均隱隱蔽。。(3)ALLEXCEPT<通配符符>::內(nèi)存存中除除了變變量名名能與與通配配符相相匹配配的內(nèi)內(nèi)存變變量,,其余余的均均隱蔽蔽。PRIVATE并不產(chǎn)產(chǎn)生新新的變變量。。它只只是把把上級級程序序中定定義的的內(nèi)存存變量量隱蔽蔽起來來,不不再使使用,,而在在當(dāng)前前過程程中若若要使使用同同名內(nèi)內(nèi)存變變量,,需重重新定定義((不影影響被被隱蔽蔽的內(nèi)內(nèi)存變變量值值)。。退出出當(dāng)前前過程程后,,所有有與被被隱蔽蔽內(nèi)存存變量量同名名的內(nèi)內(nèi)存變變量的的定義義被清清除,,復(fù)現(xiàn)現(xiàn)原定定義。。PRIVATE語句的的使用用,使使得過過程中中的變變量與與上層層程序序中的的變量量同名名而不不同值值成為為可能能。例24仍采用用上一一例,,但在在函數(shù)數(shù)中把把內(nèi)存存變量量“面面積””隱藏藏起來來。見見P.112。從實例例運行行結(jié)果果來看看,對對于沒沒有做做過任任何說說明的的內(nèi)存存變量量和做做過隱隱藏說說明又又重新新定義義的內(nèi)內(nèi)存變變量,,VFP將它們們都標標記為為priv((局部的的)。。因此此,在在定義義(或或說明明)它它們的的程序序結(jié)束束時,,它們們均被被清除除。兩兩者僅僅有一一點不不同,,即::未做做任何何說明明的內(nèi)內(nèi)存變變量在在過程程返回回時保保持被被改變變了的的值;;而在在函數(shù)數(shù)中做做過隱隱蔽型型說明明的內(nèi)內(nèi)存變變量在在返回回主程程序時時則恢恢復(fù)被被隱藏藏前的的值。。5.7.5過過程程調(diào)用用中的的參數(shù)數(shù)傳遞遞1.帶帶參數(shù)數(shù)調(diào)用用過程程命令令命令格格式:DO<過程名名>WITH<表達式式表>命令功功能:調(diào)用用指定定過程程,并并以表表達式式的值值提供供該過過程所所需的的參數(shù)數(shù)。2.過過程中中的參參數(shù)語語句語句格格式:PARAMETERS<變量名名表>語句功功能:說明明本過過程需需傳遞遞的參參數(shù)。。例25閱讀下下列程程序,,體會會參數(shù)數(shù)傳遞遞規(guī)律律。主程序序“L815.PRG””內(nèi)容如如下::SETTALKOFFCLEARALLMYA=5MYB=5MYC=5?"主程程序中中變量量定義義情況況:"LISTMEMOLIKEMY*DOKKWITH10,MYA+MYB,MYC?"返回主主程序序時變變量情情況::"LISTMEMOLIKEMY*DOKKWITH10,MYA+MYB,MYC?"第二二次返返回主主程序序時變變量情情況::"LISTMEMOLIKEMY*過程““KK.PRG””內(nèi)容如如下::PROCEDUREKKPARAMETERSMYX,MYY,MYZMYX=MYX+3MYA=MYY+3MYZ=MYB+3?"過程中中變量量定義義情況況:"LISTMEMOLIKEMY*?RETURNENDPROC通過對對例25運運行結(jié)結(jié)果的的分析析,可可以看看到在在參數(shù)數(shù)的傳傳遞中中有這這樣一一些規(guī)規(guī)律::(1)如如果在在DO語句中中被傳傳遞的的參數(shù)數(shù)是一一個常常數(shù),,那么么這個個常數(shù)數(shù)在接接收數(shù)數(shù)據(jù)的的過程程中將將作為為PARAMETERS給出的的變量量的值值而被被使用用。(2)如如果在在DO語句中中被傳傳遞的的參數(shù)數(shù)是一一個表表達式式,那那么該該表達達式先先被求求值,,然后后再將將求出出的值值傳遞遞給PARAMETERS給出的的變量量。對(1)、、(2)兩兩種情情況,,通常常又稱稱為值值傳遞遞方式式。(3)如如果在在DO語句中中被傳傳遞的的參數(shù)數(shù)是一一個內(nèi)內(nèi)存變變量,,那么么系統(tǒng)統(tǒng)先用用PARAMETERS給出的的變量量代換換DO的變量量,然然后將將DO語句的的變量量隱藏藏起來來,被被隱藏藏(hid)的內(nèi)內(nèi)存存變變量量在在過過程程中中不不能能使使用用。。在在過過程程中中如如改改變變了了相相應(yīng)應(yīng)變變量量的的值值,,被被隱隱藏藏的的內(nèi)內(nèi)存存變變量量的的值值也也同同時時發(fā)發(fā)生生變變化化,,在在返返回回主主程程序序時時,,系系統(tǒng)統(tǒng)將將恢恢復(fù)復(fù)做做過過隱隱藏藏標標記記的的內(nèi)內(nèi)存存變變量量,,并并清清除除接接收收參參數(shù)數(shù)語語句句給給出出的的所所有有內(nèi)內(nèi)存存變變量量。。這這種種情情況況又又稱稱為為引引用用傳傳遞遞方方式式。。如果果被被傳傳遞遞的的參參數(shù)數(shù)是是一一個個內(nèi)內(nèi)存存變變量量,,又又不不希希望望其其值值被被過過程程改改變變,,則則可可用用一一對對圓圓括括弧弧把把它它括括起起即即可可。。當(dāng)過過程程或或函函數(shù)數(shù)所所接接收收的的參參數(shù)數(shù)多多于于所所需需要要的的個個數(shù)數(shù)時時,,VFP將產(chǎn)產(chǎn)生生一一錯錯誤誤信信息息;;反反之之,,如如果果過過程程接接收收的的參參數(shù)數(shù)個個數(shù)數(shù)少少于于所所需需要要的的個個數(shù)數(shù),,則則VFP僅將將余余下下不不足足的的參參數(shù)數(shù)賦賦初初值值為為““假假””((.F)),,而不不產(chǎn)產(chǎn)生生錯錯誤誤信信息息。。參參見見P.117例26。。作業(yè)業(yè)::P.1254(10)(11)(28)P.1345(5)作業(yè)業(yè)::P.1214(1)(2)(3)(16)P.1345(1)9、靜夜四無無鄰,荒居居舊業(yè)貧。。。1月-231月-23Wednesday,January4,202310、雨雨中中黃黃葉葉樹樹,,燈燈下下白白頭頭人人。。。。23:36:5023:36:5023:361/4/202311:36:50PM11、以我我獨沈沈久,,愧君君相見見頻。。。1月-2323:36:5023:36Jan-2304-Jan-2312、故人江海海別,幾度度隔山川。。。23:36:5023:36:5023:36Wednesday,Janua

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論