版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第六章項目與程序設(shè)計學(xué)習(xí)目標(biāo)了解項目管理的基本概念,掌握VFP“項目管理器”的使用方法;理解程序的概念,掌握程序的建立、編輯和運行的方法;理解并掌握算法的表示方法,尤其是流程圖方法;理解并掌握結(jié)構(gòu)化程序的三種基本結(jié)構(gòu);了解模塊化程序設(shè)計的思想;理解并掌握用戶自定義函數(shù)的定義、調(diào)用和返回值和參數(shù)傳遞的概念;掌握程序調(diào)試的基本方法。重點與難點重點在于結(jié)構(gòu)化程序設(shè)計與調(diào)試、函數(shù)設(shè)計與使用;難點在于靈活掌握三種基本結(jié)構(gòu)的嵌套、正確地傳遞函數(shù)的參數(shù)。6.1項目管理進(jìn)行VFP數(shù)據(jù)庫應(yīng)用系統(tǒng)的項目開發(fā)時,常常要與各種文件、數(shù)據(jù)和對象打交道,如:數(shù)據(jù)庫、數(shù)據(jù)表、視圖、查詢、菜單、表單、程序文件和其他文件。項目就是有關(guān)文件、數(shù)據(jù)和對象的集合。項目管理是按照一定的順序和邏輯關(guān)系,對數(shù)據(jù)庫應(yīng)用系統(tǒng)涉及到的各種類型文件、數(shù)據(jù)和對象進(jìn)行有效組織,并將它們編譯成.app或exe文件。VFP提供了管理功能強(qiáng)大的項目管理器來創(chuàng)建和管理項目。VFP的項目管理器6.2程序初步知識如果完成一項任務(wù)不是一兩個命令就能完成,而需要一組命令來完成,并且這組命令出現(xiàn)的先后順序不能顛倒,這樣的要求對一般的數(shù)據(jù)庫系統(tǒng)的操作人員來說是十分困難的。本章介紹的程序方式,系統(tǒng)設(shè)計人員將完成某一項任務(wù)的一組操作命令保存在程序文件中,操作人員只需調(diào)用該程序文件就可以完成該項任務(wù),可明顯地降低了操作的難度。6.2.1程序的概念程序(Program)是指完成特定任務(wù)的一組命令的有序集合。在VFP中,程序是以文本的形式保存在程序文件(.prg)中,當(dāng)該程序被調(diào)用時,系統(tǒng)會從前往后地、按次序地和自動地執(zhí)行包含在程序文件中的命令直至結(jié)束。程序方式同交互方式和菜單方式相比
具有非常明顯的優(yōu)點:(1)程序以文本文件的形式保存,方便創(chuàng)建、修改;(2)程序一旦編好,就可以被無限次調(diào)用,具有“一勞永逸”的特點;(3)具有通用性的程序,還可以被其他程序調(diào)用,或調(diào)用其他程序,提高了編寫程序的效率。6.2.2程序的建立與編輯在VFP中,程序可以通過菜單方式和命令方式來建立與編輯。命令方式:modifycommand[文件名|?]其中,(1)命令動詞:Modify(修改)。(2)文件名或“?”是可選項:文件名包括主文件名和類型名,主文件名由用戶自定義,而類型名為“.prg”,用戶不指定時,系統(tǒng)會自動添加上“.prg”注意事項在建立和編輯程序文件時,需要注意以下幾點:(1)命令的書寫要符合命令書寫的規(guī)則。(2)為了增加程序的可讀性,可以在程序中加上注釋。(3)為了增加程序的可讀性,常常在編寫程序時采用縮進(jìn)方式,本書采用縮進(jìn)方式編寫程序。(4)在程序的編寫過程中,合理使用“剪貼板”可以提高程序編寫效率。(5)程序編寫過程中要注意及時保存??梢栽凇拔募辈藛沃羞x擇“保存”或“另存為”命令,也可以使用Ctrl+W組合鍵。放棄本次修改可以直接按Esc鍵。其他編輯器編寫程序文件除了使用VFP自帶的編輯器外,也可以使用任何其他的文本編輯系統(tǒng),譬如:記事本、EDIT,但不能使用具有格式編排的系統(tǒng),譬如:Word??梢詮腤ord中復(fù)制程序到記事本,但需要從“選擇性粘帖”中選擇“無格式文本”。記事本默認(rèn)的文件類型名為“.txt”,所以,在保存對話框中,請用雙引號界定,譬如:"test.prg",否則會自動添加“.txt”,像這個樣子“test.prg.txt”。6.2.3程序的執(zhí)行程序的執(zhí)行同程序的建立和編輯一樣也有兩種方式:菜單方式和命令方式。從“程序”菜單中選擇“運行”菜單項
在命令窗口中輸入如下命令:do程序文件名[with參數(shù)表]其中,程序文件名無需帶上類型名;“with參數(shù)表”是可選項:通過參數(shù)表向程序傳遞數(shù)據(jù),參數(shù)表如果有多個參數(shù),則需要用逗號隔開,在編寫帶參數(shù)的程序時,必須把如下命令:parameters參數(shù)表放在程序的開頭。6.2.4程序的注釋為了增加程序的可讀性,通常需要在程序中添加上注釋。有兩種形式的注釋:(1)整行為注釋:以*或Note開頭。*注釋文本或note注釋文本(2)在命令尾部注釋:以&&引出注釋文本。
注意:程序的注釋不影響程序的執(zhí)行效率,因為在編譯時,系統(tǒng)并不會將注釋編譯到編譯后的文件(.fxp)中去?!纠?.1】編寫一個簡單的程序,通過參數(shù)傳遞兩個數(shù),在屏幕上顯示兩個數(shù)的和、兩個數(shù)的積(Eg6_1.prg)。*第一個簡單的程序note在實際的程序中,并不需要每行都注釋的parametersm,n&&m,n是形式參數(shù)settalkoff&&狀態(tài)的設(shè)置,關(guān)閉交互模式clear&&清除顯示屏幕?"m+n=",m+n&&"m+n="是提示,m+n是表達(dá)式?"m*n=",m*n&&"m*n="是提示,m*n是表達(dá)式return&&結(jié)束本程序返回VFP系統(tǒng)程序執(zhí)行命令格式如下:DoEg6_1with6,9↙程序運行的結(jié)果:m+n=15m*n=546.2.6輸入輸出命令程序的運行離開不了輸入、輸出命令。輸入命令完成從鍵盤上接收數(shù)據(jù)。輸出命令完成將運行的結(jié)果顯示在屏幕上。1.輸入命令(1)單字符輸入命令wait[提示信息][to內(nèi)存變量][window[nowait]][timeout數(shù)值表達(dá)式](2)字符型數(shù)據(jù)輸入命令A(yù)ccept[提示信息][To內(nèi)存變量](3)任意類型數(shù)據(jù)輸入命令I(lǐng)nput[提示信息][To內(nèi)存變量](4)格式化輸入@行,列[say表達(dá)式][get變量]read[save][cycle][timeout等待時間]舉例(在命令窗口測試)wait"按Y鍵退出系統(tǒng)"tochaccept"你的姓名:"toXMinput"姓名"toxm&&字符型input"出生日期"tocsrq&&日期型input"身高"tosg&&數(shù)值型input"是否黨員"tosfdy&&邏輯型name=space(8)@5,10say"姓名"getnameread2.輸出命令前面已經(jīng)講述了“?”和“??”的用法。(1)文本輸出命令\|\\文本行或text
文本內(nèi)容
endtext(2)格式輸出命令@行,列Say表達(dá)式picture格式控制字符舉例(在命令窗口測試)\程序測試行1
\\程序測試行2Text========Menu==========1.輸入2.修改3.刪除4.打印0.退出=======================Endtext@3,6say姓名@4,6say工資picture"99999.99"&&有兩位小數(shù)6.3結(jié)構(gòu)化程序設(shè)計
6.3.1算法的表示數(shù)據(jù)結(jié)構(gòu)+算法=程序一個好的程序離不開好的算法,設(shè)計程序的實質(zhì)就是設(shè)計算法。算法:廣義地說,為了解決一個問題而采取的方法和步驟。為了表示一個算法,可以用不同的方法。常用的有自然語言、傳統(tǒng)的流程圖、N-S流程圖、偽代碼、PAD圖等。1.傳統(tǒng)的流程圖符號起止框處理框輸出框判斷框注釋框連接點流程線或2.三種基本結(jié)構(gòu)及其流程圖表示1966年,Bohra和Jacopini提出了以下三種基本結(jié)構(gòu)ppABABppA(a)順序結(jié)構(gòu)(b)選擇結(jié)構(gòu)(c)循環(huán)結(jié)構(gòu)3.“結(jié)構(gòu)化”的算法三種基本結(jié)構(gòu)有以下共同特點:
①只有一個入口;②只有一個出口;③結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會被執(zhí)行到;④結(jié)構(gòu)內(nèi)不存在“死循環(huán)”(無終止的循環(huán))。已經(jīng)證明,以上三種結(jié)構(gòu)及其嵌套而順序組成的算法結(jié)構(gòu),可以解決任何復(fù)雜的問題。由基本結(jié)構(gòu)所構(gòu)成的算法屬于“結(jié)構(gòu)化”的算法,它不存在無規(guī)律的轉(zhuǎn)向,只在基本結(jié)構(gòu)內(nèi)才允許存在分支和向前或向后的跳轉(zhuǎn)。其他結(jié)構(gòu)都可以由三種基本結(jié)構(gòu)及其嵌套派生出來。6.3.2順序結(jié)構(gòu)在單個處理器的計算機(jī)中,程序是按順序串行方式執(zhí)行,即上一條命令執(zhí)行完畢才能執(zhí)行下一條命令,自上而下地一條一條地執(zhí)行命令直至程序執(zhí)行完畢。這里的命令可以是單條命令,也可以是包括多條命令且具有內(nèi)部結(jié)構(gòu)的復(fù)合命令、函數(shù)或過程?!纠?.2】編寫一個程序,輸入a和b的值,計算a除以b并顯示結(jié)果(Eg6_2.prg)。
clear*inputinput"a="toainput"b="tob*processc=a/b*output?creturn6.3.3選擇結(jié)構(gòu)選擇結(jié)構(gòu)也叫分支結(jié)構(gòu),它能夠根據(jù)指定關(guān)系表達(dá)式或邏輯表達(dá)式(或稱條件表達(dá)式)的值在兩條或多條程序執(zhí)行路徑中選擇其中一條執(zhí)行。在VFP中,選擇結(jié)構(gòu)分為if~endif、if~else~endif和docase~endcase。1.if~else~endif結(jié)構(gòu)if表達(dá)式命令組1else命令組2endifpp命令組1命令組2表達(dá)式.T..F.【例6.3】編寫一個程序,判斷輸入的一個年份是否為閏年,如果是閏年,顯示“閏年”,否則顯示“不是閏年”。判斷閏年的條件:年份能被4整除但不能被100整除;或者能被400整除(Eg6_3.prg)。clearinput"year="toyif(mod(y,4)=0.and.mod(y,100)<>0.or.mod(y,400)=0)?"閏年"else?"不是閏年"endif整除是通過判斷余數(shù)是否為0,若為0,表示整除,否則不能被整除。整除可以用函數(shù)mod()或求余運算符“%”來完成。
2.if~endif結(jié)構(gòu)if表達(dá)式命令組1endifpp命令組1表達(dá)式.T..F.【例6.4】編程實現(xiàn):輸入一個口令,如果口令符合,顯示“口令驗證通過!”。,否則直接結(jié)束程序(Eg6_4.prg)。clearaccept"口令:"topsdifupper(psd)="HELLO"?"口令驗證通過!"endifreturn*說明:upper函數(shù)是為了統(tǒng)一各種輸入的情況。3.docase~endcase結(jié)構(gòu)docasecase條件1命令組1case條件2命令組2……[otherwise命令組n+1]endcase條件1條件2條件n命令組1命令組2命令組n命令組n+1….F..F..F..T..T..T.【例6.5】編程實現(xiàn):輸入一個百分制成績,輸出它對應(yīng)的等級,優(yōu)秀:90~100、良好:80~89、中等:70~79、及格:60~69和不及格:60分以下(Eg6_5.prg)。*變量cj存放百分制成績;dj存放對應(yīng)的等級描述。clearinput"百分制成績:"tocjdocasecasecj>=90.and.cj<=100dj="優(yōu)秀"casecj>=80.and.cj<90dj="良好"casecj>=70.and.cj<80dj="中等"casecj>=60.and.cj<70dj="及格"
casecj>=0.and.cj<60dj="不及格"otherwisedj="輸入的成績不在[0,100]"endcase?"對應(yīng)的等級:",djreturn【例6.5】程序也可以由if~else~endif來實現(xiàn)(Eg6_5a.prg)clearinput"百分制成績:"tocjif(cj>=90.and.cj<=100)dj="優(yōu)秀"elseif(cj>=80)dj="良好"elseif(cj>=70)dj="中等"elseif(cj>=60)dj="及格"else
if(cj>=0)dj="不及格"elsedj="輸入的成績不在[0,100]"endifendifendifendifendif?"對應(yīng)的等級:",djreturn6.3.4循環(huán)結(jié)構(gòu)環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu)之一,它是在給定條件成立(即表達(dá)式的值為.T.)時,反復(fù)執(zhí)行語句組(稱為循環(huán)體)。VFP中的循環(huán)結(jié)構(gòu):dowhile~enddo、for~endfor和scan~endscan結(jié)構(gòu)。1.dowhile~enddo結(jié)構(gòu)dowhile表達(dá)式命令組1[loop][exit]命令組2enddo表達(dá)式循環(huán)體命令組.T..F.【例6.6】編程,計算,并顯示結(jié)果(eg6_6.prg)。clearn=1s=0dowhile(n<=100)s=s+nn=n+1enddo?"1+2+...+100=",sreturnn現(xiàn)值(初始:1)s(初始:0)n增值后(n=n+1)10+1=11+1=221+2=32+1=333+3=63+1=4………………1004950+100=5050100+1=101101結(jié)束循環(huán)2.for~endfor結(jié)構(gòu)for控制變量=初始值to終止值step步長命令組1[loop][exit]命令組2endfor|next控制變量=初始值控制變量超過終止值命令組控制變量=控制變量+步長.T..F.【例6.7】編程,計算,并顯示結(jié)果(eg6_7.prg)。clearn=1t=1forn=1to100step1t=t*nendfor?"100!=1*2*...*100=",treturn3.scan~endscan結(jié)構(gòu)該結(jié)構(gòu)用于數(shù)據(jù)表循環(huán)掃描。功能:如果條件表達(dá)式的值為.T.,scan命令自動將記錄指針移動到下一條滿足條件的記錄上,然后執(zhí)行命令組,當(dāng)遇到文件末尾.或遇到了exit命令則結(jié)束該循環(huán)。scanfor條件表達(dá)式1|while條件表達(dá)式2命令組1[loop][exit]命令組2endscan注意:for子句與while子句用法不同。如果for子句,所有滿足“條件表達(dá)式1”為.T.的記錄都會執(zhí)行命令組;如果while字句,只要“條件表達(dá)式2”為.T.才執(zhí)行命令組,直至遇到使該表達(dá)式為.F.的記錄為止,即不一定能夠找出所有滿足條件的記錄。因此,常用for子句。【例6.8】編程,循環(huán)掃描成績表(cj.dbf),顯示需要補(bǔ)考學(xué)生的記錄。比較for子句和while子句的不同,假設(shè)成績表已經(jīng)存在并輸入了記錄,表結(jié)構(gòu):學(xué)號(C,4)、姓名(C,8)、語文(N,5,1)、數(shù)學(xué)(N,5,1)和英語(N,5,1)。(eg6_8.prg)。clearusecj?"for子句:"scanfor語文<60.or.數(shù)學(xué)<60.or.英語<60dispendscan?"while子句:"scanwhile語文<60.or.數(shù)學(xué)<60.or.英語<60dispendscan6.3.5Exit和Loop命令Exit和Loop命令用在循環(huán)結(jié)構(gòu)中,都用于控制程序的流程。但是Exit命令用于結(jié)束本層循環(huán),執(zhí)行本層循環(huán)后面的命令;而Loop用于結(jié)束本次循環(huán),進(jìn)入下一次循環(huán)條件的判斷?!纠?.9】輸入若干個學(xué)生的百分制成績,輸入負(fù)數(shù)表示結(jié)束并不計算在總分以內(nèi),如果輸入成績大于100,則需要重新輸入。計算平均分并輸出(eg6_9.prg)。
clears=0n=0dowhile.T.input"x="toxif(x<0)exitendifif(x>100)loopendifn=n+1s=s+nenddoif(n=0)?"沒有輸入有效數(shù)據(jù)!"else?"平均成績:",s/nendifreturn開始.T.結(jié)束.T.s=0n=0沒有數(shù)據(jù)x<0x>100n=n+1s=s+nn=0輸出平均輸入x.T..T..F.6.3.6結(jié)構(gòu)化程序設(shè)計舉例【例6.10】編程實現(xiàn)在屏幕上顯示乘法口訣表?!纠?.11】用公式л/4≈1-+-+...求л的近似值,直到最后一項的絕對值小于10-6為止?!纠?.12】編程實現(xiàn)一個文本菜單程序?!纠?.10】編程實現(xiàn)在屏幕上顯示乘法口訣表(eg6_10.prg)。分析:乘法口訣表有9行,第1行有一個算式,第2行有兩個算式,…,第9行有九個算式。所以,第1層循環(huán)控制從1到9行,內(nèi)部嵌套的第2層循環(huán)控制第i行從第1到第i個算式的顯示。clearfori=1to9?forj=1toi??str(i,1,0)+"*"+str(j,1,0)+"="+str(i*j,2,0)+spac(2)endforendfor分析:公式可以變形為+(-)++(-)+...,從變形后的式子可以看出:
①這是一個累加的式子②每項的分子保持為1,分母為奇數(shù),即后一項是前一項的值加2。③每項的符號是正號與符號交替出現(xiàn)。即正、負(fù)、正...④循環(huán)終止條件是最后一項的值小于10-6,即循環(huán)繼續(xù)的條件是每項的值大于或等于10-6。【例6.11】程序代碼右邊的程序中:t表示某項,s表示分子和正負(fù)符號,n表示分母,則t=s/n;pi表示累加結(jié)果;正負(fù)符號交替s=-s;分母后一項是前一項加2可以表示為n=n+2。clearpi=0store1tos,nt=s/ndowhile(abs(t)>1e-6)pi=pi+tn=n+2s=-st=s/nenddo?"PI=",pi*4return【例6.12】編程實現(xiàn)一個文本菜單程序(eg6_12.prg)。分析:菜單程序包括菜單顯示、菜單選取和分支執(zhí)行三個部分,當(dāng)然這三個部分必須放在一個循環(huán)內(nèi),并且循環(huán)的終止必須通過選取的條件判斷來實現(xiàn)。【例6.12】程序代碼dowhile.T.ch=0clear@5,10say"==========mainmenu=========="@6,10say"1.輸入功能"@7,10say"2.修改功能"@8,10say"3.刪除功能"@9,10say"4.列表功能"@10,10say"0.退出"@11,10say"============================="@12,10say"你的選擇(0-4):"getchpict"9"&&"9"是數(shù)字摸板。readcleardocasecasech=0?"你選了退出"wait"任按一鍵退出。"exitcasech=1?"你選輸入功能"wait"任按一鍵返回菜單選擇。"casech=2?"你選修改功能"wait"任按一鍵返回菜單選擇。"casech=3?"你選刪除功能"wait"任按一鍵返回菜單選擇。"casech=4?"你選列表功能"wait"任按一鍵返回菜單選擇。"otherwise?"你的選擇不在0到4之間"wait"任按一鍵返回菜單選擇。"endcaseenddoreturn6.4模塊化思想與實現(xiàn)
6.4.1模塊化結(jié)構(gòu)化程序設(shè)計方法是把一個復(fù)雜問題的求解過程分階段進(jìn)行,每個階段處理的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。根據(jù)問題的規(guī)模和對問題的熟悉程度決定了問題處理的具體方法。如果問題規(guī)模較大,對問題還有些地方不太清楚,可以采用“自下而上,逐步積累”方法。但是一般采用“自頂向下,逐步細(xì)化”的方法,因為使用該方法便于驗證算法的正確性,在進(jìn)行下一層展開之前必須檢查本層的設(shè)計是否正確,只有本層設(shè)計正確的條件下才能向下細(xì)化,這樣可以保證算法的正確性。具體步驟:首先進(jìn)行系統(tǒng)整體規(guī)劃,其次進(jìn)行模塊化規(guī)劃與設(shè)計,最后進(jìn)行結(jié)構(gòu)化編碼與調(diào)試。模塊化所謂模塊化就是獨立地完成某項功能的函數(shù)或過程。在VFP中,系統(tǒng)提供了不少可以獨立完成功能的函數(shù),并且允許自定義函數(shù)或過程,所以,用戶自定義函數(shù)或過程是VFP實現(xiàn)模塊化的手段。模塊化思想使得編寫、修改、調(diào)試、維護(hù)和擴(kuò)充更加容易,并且多人之間合作完成一個大的項目更方便。6.4.2自定義函數(shù)與過程1.自定義函數(shù)與過程的創(chuàng)建2.自定義函數(shù)與過程的調(diào)用1.自定義函數(shù)與過程的創(chuàng)建function函數(shù)名[lparameters參數(shù)1[,參數(shù)2],…]命令段return表達(dá)式endfunc或funciton函數(shù)名([參數(shù)1[,參數(shù)2],…])命令段return表達(dá)式endfuncprocedure過程名[lparameters參數(shù)1[,參數(shù)2],…]命令段[return表達(dá)式]endproc或procedure過程名([參數(shù)1[,參數(shù)2],…])命令段[return表達(dá)式]endproc2.自定義函數(shù)與過程的調(diào)用由于自定義函數(shù)與過程可以存放在一個程序文件中,也可能集中存放在一個過程文件中,類似庫文件,可以減少打開文件的個數(shù)和便于維護(hù)。所以調(diào)用方法有兩種方式。(1)調(diào)用程序文件中的自定義函數(shù)或過程(2)調(diào)用過程文件中的自定義函數(shù)或過程(1)調(diào)用程序文件中的自定義函數(shù)或過程
函數(shù)名([參量1[,參量2,…]])
do過程名[with[參量1[,參量2,…]]]或過程名([參量1[,參量2,…]])(2)調(diào)用過程文件中的自定義函數(shù)或過程首先打開過程文件,使用如下命令:setprocedureto過程文件名然后采用方式(1)中的調(diào)用命令調(diào)用自定義函數(shù)與過程。最后關(guān)閉過程文件,命令格式如下:setprocedureto或closeprocedure3.自定義函數(shù)與過程的舉例【例6.13】編程計算,并顯示計算結(jié)果。要求計算階乘用自定義函數(shù)實現(xiàn)。【例6.14】編程實現(xiàn)在屏幕上以矩陣形式顯示二維數(shù)組,要求顯示部分使用自定義過程?!纠?.15】編程實現(xiàn),菜單選擇如下功能:顯示乘法口訣表、求累加、計算階乘。要求使用過程文件存儲各個功能?!纠?.13】編程計算,并顯示計算結(jié)果。要求計算階乘用自定義函數(shù)實現(xiàn)(eg6_13.prg)。clears=0forn=1to100s=s+jc(n)&&jc(n)是函數(shù)調(diào)用,出現(xiàn)在表達(dá)式中endfor?"1!+2!+...+100!=",sreturnfunctionjclparametersmt=1forj=1tomt=t*jendforreturntendfunc【例6.14】編程實現(xiàn)在屏幕上以矩陣形式顯示二維數(shù)組,要求顯示部分使用自定義過程(eg6_14.prg)。cleardimea(3,4)fori=1to3forj=1to4a(i,j)=int(rand()*100)%100endforendfordoprint_awith3,4returnprocedureprint_a(m,n)fori=1tom?forj=1ton??str(a(i,j),3)+spac(2)endforendforreturn說明:rand()隨機(jī)值函數(shù),返回值<1,int()函數(shù)是取整數(shù),int(rand()*100)%100將數(shù)值限制在100以內(nèi)?!纠?.15】編程實現(xiàn),菜單選擇如下功能:顯示乘法口訣表、求累加、計算階乘。要求使用過程文件存儲各個功能(eg6_15.prg,過程文件:proc6_15.prg)。*eg6_15.prgclearsetproceduretoproc6_15dowhile.T.cleartext1.乘法口訣2.累加3.階乘0.退出endtextinput"你的選擇(0-3):"toch
docasecasech=1docfkjcasech=2doqhcasech=3dojccasech=0exitotherwisewait"你的選擇不在[0,3],任按一鍵重新選擇!"endcaseenddosetproceduretoreturn【例6.15】的過程文件(proc6_15.prg)*proc6_15.prg*過程文件開始procedurecfkjclear?"功能1:顯示乘法口訣"fori=1to9?forj=1toi??str(i,1)+"*"+str(j,1)+;"="+str(i*j,2)+spac(2)endforendforwait"任按一鍵返回菜單選擇。"endprocprocedurejcclear?"功能3:計算1*2*...*n的積"input"n="tons=1fori=1tons=s*iendfor?"1*2*...*n=",swait"任按一鍵返回菜單選擇。"endproc*過程文件結(jié)束procedureqhclear?"功能2:計算1+2+...+n的和"input"n="tons=0fori=1tons=s+iendfor?"1+2+...+n=",swait"任按一鍵返回菜單選擇。"endproc6.4.3參數(shù)的傳遞參數(shù)分為形式參數(shù)和實際參數(shù)。在自定義函數(shù)與過程的創(chuàng)建中定義的參數(shù)是形式參數(shù),簡稱形參;在函數(shù)與過程調(diào)用中使用的參數(shù)是實際參數(shù),簡稱實參。注意:形參必須為變量名,而實參可以是變量名也可以是表達(dá)式。【例6.16】編程實現(xiàn),按從大到小的順序顯示三個數(shù)。要求使用函數(shù)求兩個中較大的數(shù)、兩個中較小的數(shù)(eg6_16.prg)。clearinput"a="toainput"b="tobinput"c="tocd=nmax(a,b)&&a,b是實參d=nmax(d,c)&&d,c是實參x=nmin(a,nmin(b,c))&&變量a和nmin(b,c)表達(dá)式是外層nmin的實參z=a+b+c-d-x?"從大到?。?,d,z,xreturnfunctionnmaxlparameterx,y&&x,y是形參ifx>yreturnxelsereturnyendifendfuncfunctionnminlparametera,b&&a,b是形參ifa<breturnaelsereturnbendifendfunc參數(shù)傳遞參數(shù)的傳遞是單向傳遞,即由實參傳遞給形參。如果實參是表達(dá)式,則計算表達(dá)式的值,將該值傳遞給形參。如果實參是變量,可以有兩種情形:將實參變量的值拷貝到形參變量,或者是形參共用實參變量的地址,也就是說可以分為:值傳遞和引用傳遞。1.值傳遞值傳遞是將實參表達(dá)式或變量的值拷貝到形參變量,之后實參與形參沒有聯(lián)系,即形參改變后的值不能影響實參。在VFP中,默認(rèn)情況下就是采用這種傳遞方式?!纠?.17】編程實現(xiàn)兩個數(shù)的交換,要求交換用過程實現(xiàn)(eg6_17.prg)。clearinput"a="toainput"b="tobswap(a,b)?"交換后:",a,breturnprocswaplparametera,bt=aa=bb=tendproc程序執(zhí)行后發(fā)現(xiàn)交換后的值沒有變,為什么呢?
abt②③①①t=a②a=b③b=tabab實參形參2.引用傳遞引用傳遞,也叫地址傳遞,它可以實現(xiàn)形參改變實參的值,即將改變后的值返回給主程序,要求實參為變量名。在VFP中,默認(rèn)情況下對象通常以引用的方式傳遞參數(shù)。引用傳遞可以通過以下兩種形式進(jìn)行:(1)使用SetUDFParams命令的ToReference子句在調(diào)用用戶自定義函數(shù)或過程前,使用SetUDFParams命令指定VFP是引用方式傳遞參數(shù),其命令格式如下:setudfparamstovalue|reference其中,ToValue表示值傳遞方式;ToReference表示引用方式。(2)使用@標(biāo)記參數(shù)如果在實參變量前加@標(biāo)志,則將強(qiáng)制變量以引用的方式傳遞參數(shù)。(1)使用SetUDFParams命令的ToReference子句
【例6.18】分析下面程序的運行結(jié)果(eg6_18.prg)。clearx=100setudfparamstovalueprocx(x)?"value:x=",xsetudfparamstoreferenceprocx(x)?"reference:x=",xprocedureprocxlparayy=y*2endproc(2)使用@標(biāo)記參數(shù)
【例6.19】分析下面程序的運行結(jié)果(eg6_19.prg)cleara=10proc_a(@a)?"a=",aprocedureproc_alparaxx=1endproc6.4.3內(nèi)存變量的作用域內(nèi)存變量的作用域是按變量在程序中的作用范圍來區(qū)分的,可以分為:全局、局部和本地作用域的內(nèi)存變量三種。1.全局型內(nèi)存變量使用Public命令定義的內(nèi)存變量視為全局型內(nèi)存變量。命令格式:public
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)廠房通風(fēng)空調(diào)拆除施工方案
- 商場公共區(qū)域精裝修施工方案
- 農(nóng)村飲水安全監(jiān)管體系方案
- 住宅小區(qū)彩鋼瓦屋面防水方案
- 設(shè)計人俱樂部市場推廣升級方案
- 地鐵建設(shè)鋼板樁專項方案
- 商場防暑防疫措施實施方案
- 風(fēng)力發(fā)電站移動腳手架安置方案
- 電導(dǎo)率儀在環(huán)保監(jiān)測中的應(yīng)用方案
- 動漫專業(yè)應(yīng)用型美術(shù)與設(shè)計人才培養(yǎng)方案的研究
- 2023年醫(yī)療器械經(jīng)營質(zhì)量管理制度
- 教學(xué)能力大賽“教案”【決賽獲獎】-
- 諾貝爾獎介紹-英文幻燈片課件
- 球墨鑄鐵管、鋼管頂管穿路施工方案
- GB/T 44672-2024體外診斷醫(yī)療器械建立校準(zhǔn)品和人體樣品賦值計量溯源性的國際一致化方案的要求
- 手術(shù)室課件教學(xué)課件
- 2024年新人教版一年級上冊數(shù)學(xué)課件 四 11~20的認(rèn)識 第7課時 解決問題
- 人教版2024八年級上冊物理期中測試卷(含答案)
- 2024年普通高等學(xué)校招生全國統(tǒng)一考試·新課標(biāo)卷(物理)附試卷分析
- 2024-2025學(xué)年北京版小學(xué)四年級上學(xué)期期中數(shù)學(xué)試題與參考答案
- 六年級上冊道德與法治認(rèn)識居民身份證人教部編版
評論
0/150
提交評論