vf子程序、函數(shù)與過程_第1頁
vf子程序、函數(shù)與過程_第2頁
vf子程序、函數(shù)與過程_第3頁
vf子程序、函數(shù)與過程_第4頁
vf子程序、函數(shù)與過程_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

7.5

程序的模塊化模塊化程序設(shè)計(jì)思想子程序、函數(shù)、過程內(nèi)存變量的作用域調(diào)用子程序時(shí)的數(shù)據(jù)傳遞7.5.1

子程序、過程和函數(shù)

應(yīng)用程序一般都是多模塊程序,包含多個(gè)程序模塊。模塊是相對(duì)獨(dú)立的一個(gè)程序段,他可以被其它模塊調(diào)用,也可以去調(diào)用其他的模塊。被其它程序調(diào)用的模塊稱為子程序。調(diào)用其它模塊而沒被其它模塊調(diào)用的模塊稱為主程序。子程序、過程、函數(shù)。一、子程序定義形式:[PROCEDURE|FUNCTION<子程序名>][PARAMETERS<形參>]<命令序列>

[RETURN[<表達(dá)式>]][ENDPROC|ENDFUNC]說明:1、PROCEDURE或FUNCTION命令表示一個(gè)子程序的開始,并命名子程序名。通常稱PROCEDURE為過程,F(xiàn)UNCTION為自定義函數(shù)。如果缺省該命令表明子程序是一個(gè)獨(dú)立的程序文件;若寫上該命令,表明子程序通常要放在某程序文件代碼后面。獨(dú)立的子程序文件同樣用MODIFYCOMMAND命令來建立、修改和保存,擴(kuò)展名默認(rèn)為.PRG。一、子程序定義形式:[PROCEDURE|FUNCTION<子程序名>][PARAMETERS<形參>]<命令序列>

[RETURN[<表達(dá)式>]][ENDPROC|ENDFUNC]說明:2、ENDPROC或ENDFUNC表示一個(gè)子程序的結(jié)束。如果缺省,子程序自動(dòng)結(jié)束于文件結(jié)尾或下一條PROCEDURE或FUNCTION命令。3、如果調(diào)用子程序時(shí)需引用參數(shù),則在子程序的第一行使用PARAMETERS<形參>命令,否則可省略。一、子程序定義形式:[PROCEDURE|FUNCTION<子程序名>][PARAMETERS<形參>]<命令序列>

[RETURN[<表達(dá)式>]][ENDPROC|ENDFUNC]說明:4、子程序執(zhí)行到RETURN命令,控制權(quán)轉(zhuǎn)回到上級(jí)調(diào)用程序。需要返回一個(gè)值,則選用RETURN<表達(dá)式>命令;使用RETURNTOMASTER轉(zhuǎn)回到最上級(jí)主程序;缺省RETURN命令,子程序結(jié)束處自動(dòng)執(zhí)行一條隱含的RETURN命令;若RETURN命令不帶表達(dá)式,則返回邏輯真.T.。*main.prgsettalkoffinput"輸入x:"toxinput"輸入y:"toyz=fun1(x,y)?x,y,zsettalkonreturnfunctionfun1parametersa,bc=a*a-b*breturncendfuncmodifycommandmain*fun2.prgparametersa,bc=a*a-b*breturnc*main.prgsettalkoffinput"輸入x:"toxinput"輸入y:"toyz=fun2(x,y)?x,y,zsettalkonreturnmodifycommandmainmodifycommandfun2*main.prgsettalkoffinput"輸入n:"tons=0dosumwithn?ssettalkonreturnproceduresumparameterssnfork=1tosns=s+kendforendproc*main.prgsettalkoffinput“輸入圓半徑"tordoareawithrreturn*area.prgparacrs=pi()*cr*cr?cr,sreturnmodifycommandmainmodifycommandareamodifycommandmain二、子程序的調(diào)用DO<子程序名>[WITH<實(shí)參表>]DO<子程序名>

<子程序名>(實(shí)參表)<子程序名>()說明:1、執(zhí)行子程序,子程序結(jié)束后返回到上級(jí)調(diào)用該子程序命令的下一條命令處。子程序可嵌套調(diào)用。2、實(shí)參表:指定傳遞到子程序的參數(shù),實(shí)參可以是表達(dá)式、內(nèi)存變量、常量、字段名或用戶定義函數(shù)等。各參數(shù)之間用逗號(hào)分隔。傳遞給一個(gè)子程序的參數(shù)最多為24個(gè)。實(shí)參與形參的個(gè)數(shù)、類型、順序要匹配?!璂OA…主程序…DOB…RETURN子程序A…RETURN子程序B…DOA…主程序…DOB…RETURN子程序A…RETURNTOMASTER子程序B…DOA…主程序…DOB…RETURN子程序A…RETURN……子程序B主程序:z.prgsettalkoffstore2tox1,x2,x3x1=x1+1doz1?x1+x2+x3return子程序:z1.prgx2=x2+1doz2x1=x1+1return子程序:z2.prgx3=x3+1return10主程序:z.prgsettalkoffstore2tox1,x2,x3x1=x1+1doz1?x1+x2+x3return子程序:z1.prgx2=x2+1doz2x1=x1+1return子程序:z2.prgx3=x3+1returntomaster9例建立函數(shù),計(jì)算N!functionjc&&自定義jc函數(shù)

parametersjcn&&將n的值傳給參數(shù)jcnf=1&&階乘初值

fork=1tojcnf=f*k&&計(jì)算階乘,結(jié)果存入fendforreturnf&&將f的值返回調(diào)用函數(shù)

m

例求組合:Cnmodifycommandcmnsettalkoffinput“輸入m”tominput“輸入n”tonc=jc(m)/(jc(n)*jc(n-m))?csettalkonreturnfunctionjcparametersjcnf=1fork=1tojcnf=f*kendfor

returnf

例創(chuàng)建過程文件,計(jì)算1+2+3+….+nproceduresumparameterssn&&將n的值傳遞給參數(shù)snfork=1tosns=s+k&&計(jì)算連加和,結(jié)果存入sendforreturn&&返回調(diào)用程序

*main.prgsettalkoffinput"輸入n:"tons=0dosumwithn?ssettalkonreturnproceduresumparameterssnfork=1tosns=s+kendfor

return

SETTALKOFFarea=0CLEARINPUT"請(qǐng)輸入第一邊大小:"TOxINPUT"請(qǐng)輸入第二邊大小:"TOyINPUT"請(qǐng)輸入第三邊大小:"TOz

area=sub(x,y,z)?"Area="+STR(area,6,2)RETURNFUNCTIONsubPARAMETERa,b,cp=(a+b+c)/2s=SQRT(p*(p-a)*(p-b)*(p-c))RETURNs例計(jì)算三角形面積SETTALKOFFarea=0CLEARINPUT"請(qǐng)輸入第一邊大小:"TOxINPUT"請(qǐng)輸入第二邊大小:"TOyINPUT"請(qǐng)輸入第三邊大小:"TOz

DOsubWITHx,y,z?"Area="+STR(area,6,2)RETURNPROCEDUREsubPARAMETERa,b,cp=(a+b+c)/2area=SQRT(p*(p-a)*(p-b)*(p-c))

RETURN

7.5.2內(nèi)存變量的作用域變量的作用域指的是變量在什么范圍內(nèi)是有效或能夠被訪問的。VisualFoxPro中,分為公共變量、私有變量和局部變量3類。公共變量在任何程序模塊中都可使用的變量稱為公共變量。公共變量必須先定義后使用。

PUBLIC<內(nèi)存變量名表>該命令是建立公共的內(nèi)存變量,并賦以初值邏輯假.F.。建立好的公共變量一直有效,即使程序結(jié)束返回命令窗口也不會(huì)消失,只有執(zhí)行CLEARMEMORY,RELEASE或QUIT等命令后,才能被釋放。私有變量在程序中直接使用(沒有預(yù)先聲明),而由系統(tǒng)自動(dòng)隱含建立的變量都是私有變量。私有變量的作用域是建立它的模塊及其下屬的各層模塊。*主程序main.prgr=100DOsub?pRETURN*子程序sub.prgp=2*3.14*rRETURN*主程序main.prgr=100DOsub?pRETURN*子程序sub.prgPUBLICpp=2*3.14*rRETURN628.00當(dāng)子程序中定義的變量名與主程序中同名時(shí),為避免子程序中的變量值改變主程序中的變量值,可在子程序中使用PRIVATE命令隱藏主程序中可能存在的變量,使這些變量在子程序中暫時(shí)無效。

PRIVATE<內(nèi)存變量表>該命令并不建立內(nèi)存變量,它只是隱藏指定的在上層模塊中可能已經(jīng)存在的內(nèi)存變量,但是當(dāng)模塊程序返回到上層模塊時(shí),被隱藏的變量就自動(dòng)恢復(fù)有效性,保持原值。隱藏變量*exa.prgr=100p=10dosub?preturnproceduresubp=2*3.14*rreturn*exb.prgr=100p=10dosub?preturnproceduresubprivatepp=2*3.14*rreturn628.0010局部變量局部變量只能在建立它的模塊中使用,不能在上層或下層模塊中使用。程序結(jié)束時(shí),自動(dòng)釋放局部變量。

LOCAL<內(nèi)存變量表>該變量同樣給建立的內(nèi)存變量賦以初值邏輯假.F.,也必須先定義后使用。7.5.3調(diào)用子程序時(shí)的數(shù)據(jù)傳遞1.利用變量的作用域?qū)崿F(xiàn)數(shù)據(jù)傳遞例計(jì)算矩形面積的程序。*main.prg主程序

gao=8kuan=6c=0DOsub?cCANCEL*sub.prg子程序

c=gao*kuanRETURN2.利用參數(shù)實(shí)現(xiàn)數(shù)據(jù)傳遞形參為子程序中的局部變量,這些局部變量可以接收上級(jí)程序中實(shí)參傳遞來的參數(shù),也可以回送子程序運(yùn)行的結(jié)果。實(shí)參可以是常量、變量或一般表達(dá)式,調(diào)用模塊程序時(shí),形參的數(shù)目不能少于實(shí)參的數(shù)目,當(dāng)形參數(shù)目多于實(shí)參數(shù)目時(shí),多余的形參取初值邏輯假.F.。*main.prgsettalkoffinput"輸入x:"toxinput"輸入y:"toyz=fun1(x,y)?x,y,zsettalkonreturnfunctionfun1

parametersa,bc=a*a-b*breturncendfunc

值傳遞和地址傳遞(實(shí)參與形參之間的數(shù)據(jù)傳遞)值傳遞方式:則子程序中參數(shù)變化后的值不回傳給上級(jí)調(diào)用程序。地址傳遞方式:則子程序中參數(shù)變化后的值要回傳給上級(jí)調(diào)用程序如果不允許子程序改變傳遞參數(shù)變量的值,應(yīng)該使用值傳遞方式。如果允許子程序改變傳遞參數(shù)變量的值,則要使用地址傳遞方式。

值傳遞和地址傳遞(實(shí)參與形參之間的數(shù)據(jù)傳遞)常量和表達(dá)式只能使用值傳遞方式內(nèi)存變量既可以使用值傳遞方式,又可以使用地址傳遞方式。使用值傳遞方式的變量要用括號(hào)括起來,使用地址傳遞方式的變量不加括號(hào)。采用子程序名(實(shí)參)方式調(diào)用時(shí),默認(rèn)按值傳遞方式傳遞參數(shù)。例寫出下列程序的輸出

settalkoffx=1y=3dosubwithx,(y),5?x,yreturnproceduresubparametera,b,ca=a+b+cb=a+b-creturnclear

store3tox

store5toy

dopluswithx,y

?x,y

procedureplus

parametersa1,a2

a1=a1+a2

a2=a1+a2

endproc例寫出下列程序的輸出dopluswith(x),(y)

plus(x,y)

dopluswith(x,y)錯(cuò)

plusx,y錯(cuò)*主程序:MAIN.PRG

SET

TALK

OFF

CLEAR

S=0

DO

SUB

WITH

10,S

?S

RETU

*子程序SUB.PRG

PARAMETERS

D1,D2

D1=D1+D1

D2=D1*2

RETURN作業(yè)與實(shí)驗(yàn)1、利用子程序?qū)崿F(xiàn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論