版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
6.9順序結(jié)構(gòu)程序設(shè)計(jì)一、順序結(jié)構(gòu):根據(jù)程序中語(yǔ)句的書寫順序依次逐條執(zhí)行。流程圖如下:
語(yǔ)句1語(yǔ)句26.9順序結(jié)構(gòu)程序設(shè)計(jì)一、順序結(jié)構(gòu):根據(jù)程序中語(yǔ)句的1例6.1查找某個(gè)學(xué)生信息(lz1)Opendatabase教學(xué)管理Use學(xué)生Accept“請(qǐng)輸入學(xué)生姓名:”tonameLocatefor姓名=nameDisplayUsereturn例6.1查找某個(gè)學(xué)生信息(lz1)2分類:簡(jiǎn)單分支語(yǔ)句(IF-ENDIF)選擇分支語(yǔ)句(IF-ELSE-ENDIF)結(jié)構(gòu)分支(docase-endcase6.10分支結(jié)構(gòu)分類:6.10分支結(jié)構(gòu)31.簡(jiǎn)單分支語(yǔ)句(Lz1)格式:IF<條件表達(dá)式><語(yǔ)句塊>ENDIF
IF
.T.
條件?
語(yǔ)句塊ENDIF.F.單向IF語(yǔ)句流程圖1.簡(jiǎn)單分支語(yǔ)句(Lz1)條件?語(yǔ)句塊END4功能:計(jì)算條件表達(dá)式的值,若為真(.T.),則執(zhí)行語(yǔ)句塊中的語(yǔ)句;若為假(.F.),不執(zhí)行語(yǔ)句塊。無論執(zhí)行還是不執(zhí)行,程序都將轉(zhuǎn)向ENDIF下一條語(yǔ)句繼續(xù)執(zhí)行。說明:(1)IF和ENDIF必須配對(duì)出現(xiàn),且分兩行書寫。(2)條件表達(dá)式可以是關(guān)系表達(dá)式或邏輯表達(dá)式。功能:計(jì)算條件表達(dá)式的值,若為真(.T.),則執(zhí)行語(yǔ)句塊中的5例6.2Opendatabase教學(xué)管理(lz2)Use學(xué)生Accept“請(qǐng)輸入學(xué)生姓名:”tonameLocatefor姓名=nameIffound()DisplayEndif?“結(jié)束”Usereturn例6.26例6.3Usezgda(lz3)Locatefor基本工資<650.00If.not.Eof()displayEndif例6.372.選擇分支語(yǔ)句格式:IF<條件表達(dá)式><語(yǔ)句塊A>ELSE<語(yǔ)句塊B>ENDIF條件?語(yǔ)句塊1語(yǔ)句塊2IF
.T.
.F.ENDIF雙向IF語(yǔ)句流程圖:2.選擇分支語(yǔ)句條件?語(yǔ)句塊1語(yǔ)句塊2IF.T..F.8功能:條件成立,執(zhí)行<語(yǔ)句塊A>;條件不成立,執(zhí)行<語(yǔ)句塊B>。然后程序轉(zhuǎn)向ENDIF下一條語(yǔ)句繼續(xù)執(zhí)行。說明:(1)無論條件是否成立,在語(yǔ)句塊A和B之間必執(zhí)行一個(gè),且只能執(zhí)行一個(gè)。(2)該語(yǔ)句可以解決一入口,二分支問題功能:條件成立,執(zhí)行<語(yǔ)句塊A>;條件不成立,執(zhí)行<語(yǔ)句塊B9Input“x=”toxifx<>0y=sin(x)+sqrt(x*x+1)elsey=cos(x)-x^3+3*xendif?”x=”,x,”y=”,y(LZ4)Input"x="toxifx=0
y=cos(x)-x^3+3*xendify=sin(x)+sqrt(x*x+1)Input"x="toxy=cos(x)-x^3+3*xifx<>0y=sin(x)+sqrt(x*x+1)endif?x,yInput“x=”tox(LZ4)Input"x="10例6.37鐵路托運(yùn)行李,假設(shè)每張車票可按每公斤0.5元托運(yùn)50公斤以內(nèi)的行李,如果超過50公斤時(shí),超過的部分每公斤加價(jià)0.8元。計(jì)算公式和程序如下:p143X=0.5×W當(dāng)W≤50公斤X=0.5×50+0.8×(w-50)當(dāng)W>50公斤SettalkoffInput“請(qǐng)輸入行李的重量為:”towIfw<=50x=0.5*wElsex=0.5*50+0.8*(w-50)Endif?”行李的重量為:”+str(w,6,2)+”公斤,其運(yùn)費(fèi)為:”+str(x,6,2)+”元”例6.37鐵路托運(yùn)行李,假設(shè)每張車票可按每公斤11例6.4輸入乘出租車的公里數(shù),求乘車費(fèi)(計(jì)費(fèi)標(biāo)準(zhǔn):2.5公里以內(nèi)6元;2.5公里以外,每超過1公里,增加到1.2元,要求四舍五入到元)。(lz5)*PROG6.PRGCLEARINPUT“請(qǐng)輸入公里數(shù):”TOXIFX>2.5PAY=(X-2.5)*1.2+6ELSEPAY=6ENDIF?"應(yīng)付費(fèi)",ROUND(PAY,0),"元"CANCEL例6.4輸入乘出租車的公里數(shù),求乘車費(fèi)(計(jì)費(fèi)標(biāo)準(zhǔn):2.5公12例6.5在學(xué)生信息.DBF中查找某人,若找到,顯示該記錄;若找不到,顯示“查無此人!”。(lz6)*PROG7.PRGSETTALKOFFUSE學(xué)生ACCEPT"輸入待查找人的姓名:"TONAMELOCATEFOR姓名=NAMEIFFOUND()DISPELSE?"查無此人!"ENDIFUSESETTALKONCANCEL例6.5在學(xué)生信息.DBF中查找某人,若找到,顯示該記錄;13有學(xué)生成績(jī)表:現(xiàn)要統(tǒng)計(jì)60分以下有多少人,60到69分的有多少人,70-89分的有多少人,90分以上的有多少人。有學(xué)生成績(jī)表:現(xiàn)要統(tǒng)計(jì)60分以下有多少人,60到69分的有多143.IF語(yǔ)句的嵌套IF-ELSE-ENDIF語(yǔ)句中的語(yǔ)句塊里可以包含任何合法的語(yǔ)句,也可以包含另一條IF語(yǔ)句,這就構(gòu)成了IF語(yǔ)句的嵌套。嵌套IF語(yǔ)句可以解決一入口,三分支甚至更多分支的問題。嵌套形式可以是多種多樣的,以下是其中的一種:IF<條件表達(dá)式1><語(yǔ)句塊1>ELSEIF<條件表達(dá)式2><語(yǔ)句塊2>ELSE<語(yǔ)句塊3>ENDIFENDIF語(yǔ)句塊3.F.ELSE條件2語(yǔ)句塊2條件1語(yǔ)句塊1IF.T..F.ELSEIF.T.ENDIF3.IF語(yǔ)句的嵌套語(yǔ)句塊3.F.ELSE條件2語(yǔ)句塊2條件15If大學(xué)英語(yǔ)>=90a=a+1ElseIf大學(xué)英語(yǔ)>=70b=b+1elseIf大學(xué)英語(yǔ)>=60c=c+1elsed=d+1endifEndifendif
If大學(xué)英語(yǔ)<60d=d+1ElseIf大學(xué)英語(yǔ)<70b=b+1elseIf大學(xué)英語(yǔ)<90c=c+1elsed=d+1endifEndifendifIf大學(xué)英語(yǔ)<6016If大學(xué)英語(yǔ)>60d=d+1ElseIf大學(xué)英語(yǔ)>70c=c+1elseIf大學(xué)英語(yǔ)>90b=b+1elsea=a+1endifEndifendif
這樣可以不可以?If大學(xué)英語(yǔ)>60這樣可以不可以?174.結(jié)構(gòu)分支語(yǔ)句格式:DOCASECASE<條件表達(dá)式1><語(yǔ)句塊1>CASE<條件表達(dá)式2><語(yǔ)句塊2>……CASE<條件表達(dá)式n-1><語(yǔ)句塊n-1>[OTHERWISE<語(yǔ)句塊n>]ENDCASE條件1條件2條件n-1語(yǔ)句塊n語(yǔ)句塊1語(yǔ)句塊n-1DOCASEENDCASEOTHERWISE語(yǔ)句塊2.T..T..F..F..F..T.4.結(jié)構(gòu)分支語(yǔ)句條件1條件n-1語(yǔ)句塊n語(yǔ)句塊1語(yǔ)句塊n-118功能:依次檢測(cè)條件表達(dá)式的值,一旦某一條件滿足,執(zhí)行相應(yīng)語(yǔ)句塊,然后轉(zhuǎn)到ENDCASE下一條語(yǔ)句。如果所有條件表達(dá)式的值都為假,倘若無OTHERWISE子句,則不執(zhí)行任何語(yǔ)句,直接轉(zhuǎn)到ENDCASE下一條語(yǔ)句;如若有OTHERWISE子句,則無條件執(zhí)行OTHERWISE與ENDCASE之間的語(yǔ)句塊,然后轉(zhuǎn)到ENDCASE下一條語(yǔ)句。說明:(1)如果有兩個(gè)或兩個(gè)以上的條件為真,則只執(zhí)行第一個(gè)條件表達(dá)式為真的CASE后的語(yǔ)句組,之后即轉(zhuǎn)去執(zhí)行ENDCASE之后的語(yǔ)句而不會(huì)再去判斷下一個(gè)CASE中的條件。功能:依次檢測(cè)條件表達(dá)式的值,一旦某一條件滿足,執(zhí)行相應(yīng)19Docase
case大學(xué)英語(yǔ)>=90a=a+1
case大學(xué)英語(yǔ)>=70.and.大學(xué)英語(yǔ)<90b=b+1
case大學(xué)英語(yǔ)>=60c=c+1
otherwised=d+1
endcase
Docase20也可以這樣做Docase
case大學(xué)英語(yǔ)<60d=d+1
case大學(xué)英語(yǔ)<70c=c+1
case大學(xué)英語(yǔ)<90b=b+1
otherwisea=a+1
emdcase也可以這樣做21有學(xué)生這樣寫,大家分析一下?Docasecase大學(xué)英語(yǔ)>=60a=a+1case大學(xué)英語(yǔ)>=70b=b+1case大學(xué)英語(yǔ)>=90c=c+1otherwised=d+1emdcase結(jié)果是什么?有學(xué)生這樣寫,大家分析一下?結(jié)果是什么?221.當(dāng)型循環(huán)語(yǔ)句格式:DOWHILE<條件表達(dá)式><循環(huán)體>ENDDO6.11循環(huán)結(jié)構(gòu)初始設(shè)置條件滿足嗎?循環(huán)體語(yǔ)句[LOOP][EXIT].F..T.DOWHILEENDDO1.當(dāng)型循環(huán)語(yǔ)句6.11循環(huán)結(jié)構(gòu)初始設(shè)置條件滿足嗎?循環(huán)體23功能:當(dāng)<條件表達(dá)式>的值為真(.T.)時(shí),執(zhí)行循環(huán)體中的語(yǔ)句,一旦<條件表達(dá)式>的值為假(.F.),程序跳出循環(huán)體,轉(zhuǎn)到ENDDO下一條語(yǔ)句繼續(xù)執(zhí)行。說明:(1)如果條件永遠(yuǎn)成立,形成死循環(huán)。為了避免死循環(huán),在循環(huán)體中必須要有語(yǔ)句能夠改變條件表達(dá)式的值。(2)當(dāng)循環(huán)次數(shù)事先未知時(shí),使用DOWHILE-ENDDO語(yǔ)句。(3)循環(huán)體中,可以出現(xiàn)LOOP語(yǔ)句。遇到LOOP語(yǔ)句時(shí),程序立即轉(zhuǎn)向DOWHILE循環(huán)起始語(yǔ)句,而不再執(zhí)行LOOP下面的循環(huán)體語(yǔ)句。功能:當(dāng)<條件表達(dá)式>的值為真(.T.)時(shí),執(zhí)行循環(huán)體中的語(yǔ)24(4)循環(huán)體中,可以出現(xiàn)EXIT語(yǔ)句。遇到EXIT語(yǔ)句時(shí),程序立即跳出本層循環(huán),轉(zhuǎn)向邏輯上的下一條語(yǔ)句繼續(xù)執(zhí)行。設(shè)置EXIT語(yǔ)句,也是防止死循環(huán)的一種方法。DOWHILE語(yǔ)句的流程圖
(4)循環(huán)體中,可以出現(xiàn)EXIT語(yǔ)句。遇到EXIT語(yǔ)句時(shí),25例6.11ClearLZ7use學(xué)生成績(jī)store0toa,b,c,ddowhile.not.eof()Docasecase大學(xué)英語(yǔ)>=90a=a+1case大學(xué)英語(yǔ)>=70b=b+1case大學(xué)英語(yǔ)>=60c=c+1otherwised=d+1endcaseskipenddo?a,b,c,d例6.1126STORE0TOC,W(LZ8)(用IF語(yǔ)句改寫)USEZGDADOWHILE.NOT.EOF()DOCASECASE(年齡<45).AND.職稱="講師"W=W+1CASE(年齡<45).AND.職稱="副教授"C=C+1ENDCASESKIPENDDO?“45歲以下的講師人數(shù)為:",W?“45歲以下的副教授人數(shù)為:",CSETTALKONCANCEL例6.12統(tǒng)計(jì)職工表中,職稱是”講師”和副教授,年齡在45歲以下的教師人數(shù).STORE0TOC,W(LZ8)(用I27例6.3求N!=1×2×3×……×N(lzn)input"n="tons=1i=1dowhilei<=n
s=s*i
i=i+1enddo?str(N,4)+"!="+ltrim(str(s))循環(huán)結(jié)束i的值是多少?例6.3求N!=1×2×3×……×N(lzn)循環(huán)結(jié)束28例6.14統(tǒng)計(jì)學(xué)生.DBF中1979年以后出生的人數(shù),并顯示他們的記錄。(lz11)SETTALKOFFCLEARUSE學(xué)生N=0&&記數(shù)器通常初始化為0DOWHILE.NOT.EOF()IF出生日期>={^1979-01-01}DISPN=N+1&&記數(shù)器ENDIFSKIP&&修改記錄指針,漏寫該句,程序死循環(huán)ENDDO?"1979年以后出生的人數(shù)為"+STR(N,2)+"人"USESETTALKONCANCEL例6.14統(tǒng)計(jì)學(xué)生.DBF中1979年以后出生的人數(shù),并顯29例6.15完善例6.7,使程序能多次查找學(xué)生的記錄,一旦輸入N,立即結(jié)束查找。lz9USE學(xué)生x="Y"DOWHILEUPPER(x)="Y"ACCEPT"輸入待查找學(xué)生的姓名:"TONAMELOCATEFOR姓名=NAMEIF.NOT.EOF()DISPELSE?"查無此人!"ENDIFWAIT"是否繼續(xù)查找(Y/N)?"TOxENDDO?"結(jié)束查找"USECANCEL例6.15完善例6.7,使程序能多次查找學(xué)生的記錄,一旦輸30例6.16鍵盤輸入兩個(gè)整數(shù),求它們的最大公約數(shù)和最小公倍數(shù)。(lz12)INPUT"輸入一個(gè)整數(shù):"TOMINPUT"輸入另一個(gè)整數(shù):"TONM1=MN1=NT=MOD(M,N)DOWHILET#0M=NN=TT=MOD(M,N)ENDDO?"最大公約數(shù)為:",STR(N,4)?"最小公倍數(shù)為:",STR(M1*N1/N,4)CANCEL例6.16鍵盤輸入兩個(gè)整數(shù),求它們的最大公約數(shù)和最小公倍數(shù)31輾轉(zhuǎn)相減求兩個(gè)自然數(shù)m,n的最大公約數(shù).lz12a
m=m-nm>nn=n-mn>mm,n為公約數(shù)m=n輾轉(zhuǎn)相減求兩個(gè)自然數(shù)m,n的最大公約數(shù).lz12am=m-n321.轉(zhuǎn)跳語(yǔ)句(LOOP)在DOWHILE-ENDDO循環(huán)體內(nèi)提供了一條短路語(yǔ)句,可以起到轉(zhuǎn)跳作用語(yǔ)句格式:Dowhile<條件表達(dá)式1>…if<條件表達(dá)式2>LOOPendif…enddo語(yǔ)句功能:中斷本次循環(huán)體的執(zhí)行,跳回到DOWHILE的開始處,重復(fù)條件的判斷.但要注意具有多重循環(huán)的程序中,只返回到與它本身所處的本層循環(huán)體相匹配的DOWHILE語(yǔ)句.1.轉(zhuǎn)跳語(yǔ)句(LOOP)33Dowhile<條件表達(dá)式1>Dowhile<條件表達(dá)式1>…if<條件表達(dá)式2>LOOPendif…enddoloopEnddoDowhile<條件表達(dá)式1>34【例6.17】工資小于160元的增加10元SETTALKOFFUSEDA2DOWHILE.NOT.EOF()if工資>=160SKIPLOOPENDIFREPLACE工資WITH工資+10SKIPENDDO【例6.17】35【例6.18】lz10求0~100之間奇數(shù)之和SETTALKOFFX=0Y=0DOWHILEX<100X=X+1IFINT(X/2)=X/2LOOPELSEY=Y+XENDIFENDDO?"0~100之間的奇數(shù)之和為:",YSETTALKONCANCEL【例6.18】lz10362.出口語(yǔ)句(EXIT)如果在循環(huán)的中途,需要結(jié)束循環(huán)而轉(zhuǎn)到本層循環(huán)的后繼命令去執(zhí)行,可以用出口命令語(yǔ)句格式:EXIT語(yǔ)句功能:終止DOWHILE-ENDDO的正常循環(huán)無條件地轉(zhuǎn)到ENDDO的后繼命令去執(zhí)行多重循環(huán),只能跳出一層2.出口語(yǔ)句(EXIT)如果在循環(huán)的中途,需要結(jié)束循環(huán)而轉(zhuǎn)到37【例6.19】計(jì)算1+2+3+…+100的和SETTALKOFFN=1S=0DOWHILE.T.IFN>100EXITENDIFS=S+NN=N+1ENDDO?“S=”,S【例6.19】計(jì)算1+2+3+…+100的和382.FOR-EndFor循環(huán)語(yǔ)句格式:FOR<循環(huán)變量>=<初值>TO<終值>[STEP<步長(zhǎng)>]<循環(huán)體>ENDFOR循環(huán)變量超過終值?FOR循環(huán)變量=初值循環(huán)體[LOOP][EXIT]循環(huán)變量+步長(zhǎng)ENDFOR.T..F.記數(shù)型循環(huán)語(yǔ)句流程圖2.FOR-EndFor循環(huán)語(yǔ)句循環(huán)變量超過終值?FOR循環(huán)39功能:語(yǔ)句執(zhí)行時(shí),首先循環(huán)變量賦以初值,與終值比較,若超過終值,則循環(huán)體一次也不執(zhí)行,直接跳到循環(huán)終止語(yǔ)句ENDFOR的下一條語(yǔ)句;若不超過終值,則依次執(zhí)行循環(huán)體語(yǔ)句,遇到ENDFOR后,程序轉(zhuǎn)回到FOR循環(huán)初始語(yǔ)句。然后循環(huán)變量加上步長(zhǎng),再判斷是否超過終值,只要不超過終值就執(zhí)行循環(huán)體。一旦超過終值,程序退出循環(huán)體,繼續(xù)執(zhí)行ENDFOR的下一條語(yǔ)句。說明:(1)步長(zhǎng)可正可負(fù)。若步長(zhǎng)為1,可以省略STEP子句。功能:語(yǔ)句執(zhí)行時(shí),首先循環(huán)變量賦以初值,與終值比較,若超過終40(2)計(jì)數(shù)型循環(huán)語(yǔ)句用于循環(huán)次數(shù)事先已知的場(chǎng)合。循環(huán)次數(shù)可按下式來計(jì)算:INT(ABS((終值-初值)/步長(zhǎng)))+1(3)循環(huán)體內(nèi)可以出現(xiàn)LOOP和EXIT語(yǔ)句,其功能如前所述。(4)循環(huán)結(jié)束語(yǔ)句一般用ENDFOR,(2)計(jì)數(shù)型循環(huán)語(yǔ)句用于循環(huán)次數(shù)事先已知的場(chǎng)合。循環(huán)次數(shù)可按41例6.20找出表中年齡最大的記錄(lz13)SETTALKOFFUSEZGDAMAX=年齡J=RECCOUNT()指表中所含的記錄的總數(shù)FORI=2TOJSKIPIFMAX<年齡MAX=年齡RSC=RECNO()ENDIFENDFORUSE?RSC,MAX例6.20找出表中年齡最大的記錄(lz13)423.SCANENDSCAN循環(huán)語(yǔ)句格式:SCAN[<范圍>][FOR<條件>] <循環(huán)體>ENDSCAN功能:對(duì)打開的數(shù)據(jù)表,在規(guī)定的范圍內(nèi),對(duì)符合條件的記錄逐條進(jìn)行循環(huán)體語(yǔ)句規(guī)定的操作。每執(zhí)行一次,指針下移,直到文件尾為止。說明:(1)scan循環(huán)語(yǔ)句專門用來對(duì)數(shù)據(jù)表操作。SCAN-ENDSCAN語(yǔ)句有自動(dòng)修改指針和判斷是否到達(dá)文件尾的功能。因此,用SCAN-ENDSCAN語(yǔ)句比用DOWHILE-ENDDO語(yǔ)句處理數(shù)據(jù)表速度快,而且編程既方便又簡(jiǎn)潔。(2)循環(huán)體中可以出現(xiàn)[LOOP]和[EXIT]語(yǔ)句,作用如前所述。3.SCANENDSCAN循環(huán)語(yǔ)句43例6.23用SCAN-ENDSCAN語(yǔ)句統(tǒng)計(jì)XSDA.DBF中1979年以后出生的學(xué)生人數(shù),并顯示他們的記錄。(試與例6.14進(jìn)行比較)lz14SETTALKOFFCLEARUSE學(xué)生N=0SCANFOR出生日期>={^1979-01-01}DISPN=N+1ENDSCAN?"1979年以后出生的人數(shù)為"+STR(N,2)+"人"USESETTALKONCANCEL例6.23用SCAN-ENDSCAN語(yǔ)句統(tǒng)計(jì)XSDA.DB44例6.24在教學(xué)管理.DBC中有數(shù)據(jù)庫(kù)表學(xué)生成績(jī).DBF,計(jì)算學(xué)生的總分,并按如下規(guī)定填寫等級(jí)字段:lz15總分>=250為“優(yōu)秀”210≤總分<249為“良好”180≤總分<209為“一般”總分<180為“差”O(jiān)PENDATABASEXJGLUSE學(xué)生成績(jī)LISTREPLALL總分WITH數(shù)學(xué)+大學(xué)英語(yǔ)+語(yǔ)文SCANDOCASECASE總分>=250REPL等級(jí)WITH"優(yōu)秀"CASE總分>=210&&不必寫成:總分>=210AND總分<250REPL等級(jí)WITH"良好"
例6.24在教學(xué)管理.DBC中有數(shù)據(jù)庫(kù)表學(xué)生成績(jī).DBF,計(jì)45CASE總分>=180REPL等級(jí)WITH"一般"OTHERWISEREPL等級(jí)WITH"差"ENDCASEENDSCANLISTCLOSEDATABASECANCELCASE總分>=18046USE學(xué)生成績(jī)REPLALL總分WITH數(shù)學(xué)+大學(xué)英語(yǔ)+語(yǔ)文gotopdowhile.not.eof()DOCASECASE總分>=250REPL等級(jí)WITH"優(yōu)秀"CASE總分>=210&&不必寫成:總分>=210AND總分<250REPL等級(jí)WITH"良好"CASE總分>=180REPL等級(jí)WITH"一般"OTHERWISEREPL等級(jí)WITH"差"ENDCASEskipenddoLISTCANCELUSE學(xué)生成績(jī)474.循環(huán)的嵌套如果單層循環(huán)里的循環(huán)體中又包含另一層循環(huán),即循環(huán)內(nèi)套循環(huán),就構(gòu)成了二重循環(huán)。同理,還有三重循環(huán)或更多重循環(huán)。三種形式的循環(huán)可以互相嵌套,但既然嵌套,必須是完全嵌套,不能交叉嵌套。Dowhile<條件表達(dá)式1>語(yǔ)句1…dowhile<條件表達(dá)式2>語(yǔ)句2...enddo語(yǔ)句3..Enddo4.循環(huán)的嵌套48例6.21打印如圖所示的圖形*PROG21.PRGFORI=1TO4&&打印4行FORJ=1TO5&&每行打印5個(gè)字符??"*"ENDFOR?ENDFOR顯示結(jié)果如下:********************例6.21打印如圖所示的圖形49例6.22打印圖形*PROG22.PRGFORI=1TO5&&打印5行FORJ=1TOI&&每行打印字符數(shù)與I有關(guān)??"*"ENDFOR?ENDFOR運(yùn)行結(jié)果如下:***************例6.22打印圖形50例6.23打印圖形lz16*PROG23.PRGFORI=5TO1STEP–1&&打印5行,STEP用負(fù)值FORJ=1TOI??"*"ENDFOR?ENDFOR?CANCEL結(jié)果如下:***************例6.23打印圖形lz1651例6.24打印圖形lz17*PROG24.PRGFORI=1TO5&&打印5行??SPACE(5-I)FORJ=1TO2*I-1&&隨I改變,打印1,3,5,7,9列??"*"ENDFOR?ENDFOR結(jié)果如下:*************************
clearFORI=1TO5?SPACE(20-i)FORJ=1TOi*2-1??"*"ENDFORENDFOR例6.24打印圖形lz17clear52例6.25打印圖形*PROG25.PRGFORI=5TO1STEP–1&&打印倒三角,STEP為負(fù)值?SPACE(5-I)&&換行效果與例6.24相同F(xiàn)ORJ=1TO2*I-1??"*"ENDFORENDFOR結(jié)果如下:*************************
clearFORI=1TO5?SPACE(20+i)FORJ=1TO(5-i)*2+1??"*"ENDFORENDFOR例6.25打印圖形clear53clearinput"n="tonFORI=1TOn?SPACE(50+I)FORJ=1TO2*n-2*i+1??"*"ENDFORENDFORclear54例6.26打印圖形*PROG26.PRGFORI=1TO5&&打印前5行?SPACE(10-I)&&使圖形向右移5列FORJ=1TO2*I-1&&打印呈三角形??CHR(64+I)&&打印大寫字母ENDFORENDFORFORI=4TO1STEP–1&&打印后4行?SPACE(10-I)&&先換行,再輸出FORJ=1TO2*I-1??CHR(64+I)ENDFORENDFOR例6.26打印圖形55結(jié)果如下:ABBBCCCCCDDDDDDDEEEEEEEEEDDDDDDDCCCCCBBBA結(jié)果如下:56例6.27打印九九乘法表lz18lz9??SPACE(4)+"*"&&輸出第一行FORI=1TO9??STR(I,5)ENDFOR?FORI=1TO50&&輸出一條由50個(gè)“-”組成的直線??“-”ENDFOR?FORA=1TO9??STR(A,5)FORB=1TOA??STR(A*B,5)ENDFOR?ENDFORCANCEL例6.27打印九九乘法表lz18lz957第6章程序設(shè)計(jì)內(nèi)容課件58第6章程序設(shè)計(jì)內(nèi)容課件59數(shù)組一、數(shù)組:名字相同、用下標(biāo)區(qū)分的內(nèi)存變量稱為數(shù)組。二、數(shù)組的定義數(shù)組名的取法和一般的變量名取法相同,數(shù)組名和簡(jiǎn)單變量不能同名.定義數(shù)組命令:DIMENSION<數(shù)組名〉(<數(shù)值表達(dá)式1>[,<數(shù)值表達(dá)式2>])[,<數(shù)組名>(<數(shù)值表達(dá)式1>…]命令功能:定義一個(gè)或多個(gè)內(nèi)存變量數(shù)組。數(shù)組一、數(shù)組:60說明:最多可有3600個(gè)元素,顯示內(nèi)存時(shí)只算一個(gè)變量數(shù)組下標(biāo)起始值是1數(shù)組元素隱含的邏輯值為“假”**二維數(shù)組,可用一維下標(biāo)來存取。這是由于在內(nèi)存中,二維數(shù)組元素是按行列次序排列它們每個(gè)元素都可看作單獨(dú)一個(gè)內(nèi)存變量使用,說明:61主要有以下特點(diǎn):(1)數(shù)組元素的類型,由所賦的值來決定(2)數(shù)組變量可以不帶下標(biāo)使用在賦值語(yǔ)句的右邊,表示該數(shù)組第一個(gè)元素在賦值語(yǔ)句的左邊,表示該數(shù)組所有元素(3)數(shù)組和數(shù)據(jù)表之間可相互轉(zhuǎn)換即數(shù)據(jù)表中數(shù)據(jù)可以轉(zhuǎn)換為數(shù)組數(shù)據(jù)數(shù)組數(shù)據(jù)也可以轉(zhuǎn)換為數(shù)據(jù)表中的數(shù)據(jù)主要有以下特點(diǎn):62數(shù)組實(shí)例DIMENSIONa(2,3)?A4?A(2,1)?A6?A(2,3)A(1,1)A(1,2)A(1,3)
1
23A(2,1)A(2,2)A(2,3)
4 56數(shù)組實(shí)例DIMENSIONa(2,3)數(shù)組實(shí)例A(1,1)A(1,2)A(1,63二、數(shù)組的賦值格式:STORE〈表達(dá)式〉TO〈數(shù)組名〉 〈數(shù)組名〉=〈表達(dá)式〉命令功能:將表達(dá)式的值賦給數(shù)組變量上述兩個(gè)命令是完全等價(jià)的給數(shù)組賦值還可用ACCEPT、INPUT、WAIT語(yǔ)句二、數(shù)組的賦值64Dimes(3,5)lz23Fori=1to3Forj=1to5Input“第”+str(I,1)+”行第”+str(j,1)+”個(gè)元素”tos(I,j)EndforEndforFori=1to3Forj=1to5??s(I,j)Endfor?EndforDimes(3,5)lz2365cleardimea(10)fori=1to10a(i)=int(rand()*20)+1??a(i)endformax=a(1)imax=1fori=2to10ifa(i)>maxmax=a(i)imax=iendifendfor?max,imax產(chǎn)生10個(gè)1-20之間的隨機(jī)數(shù),找出其中最大的數(shù)lz24clear產(chǎn)生10個(gè)1-20之間的隨機(jī)數(shù),找出其中最大的數(shù)l662468101357997531108642交換前交換后Fori=1toint(10/2)T=a(i)A(i)=a(10-i+1)A(10-i+1)=tEndforFori=1to10??a(i)Endforlz252468101357997531108642交換前交換后Fo67表與數(shù)組之間交換數(shù)據(jù)1.當(dāng)前記錄復(fù)制到數(shù)組命令格式:Scatterto<數(shù)組名>[fields<字段名表>]將表中當(dāng)前記錄復(fù)制到指定的數(shù)組.在復(fù)制時(shí),第一個(gè)字段值傳送給第一個(gè)數(shù)組元素,第二個(gè)字段值傳給第二個(gè)數(shù)組元素,依次類推.如果沒有數(shù)組,則自動(dòng)創(chuàng)建數(shù)組,如果已創(chuàng)建的數(shù)組元素個(gè)數(shù)比字段個(gè)數(shù)多,則多余的數(shù)組元素保持原值;如果已創(chuàng)建的數(shù)組元素個(gè)數(shù)比字段個(gè)數(shù)少,則自動(dòng)擴(kuò)展數(shù)組,使得數(shù)組元素個(gè)數(shù)與字段個(gè)數(shù)相等.2.數(shù)組內(nèi)容復(fù)制到當(dāng)前記錄命令格式:Gatherfrom<數(shù)組名>[fields<字段名表>]將數(shù)組中的數(shù)據(jù)復(fù)制到當(dāng)前記錄.表與數(shù)組之間交換數(shù)據(jù)68第一個(gè)數(shù)組元素復(fù)制到第一個(gè)字段,第二個(gè)數(shù)組元素復(fù)制到第二個(gè)字段,依次類推,各個(gè)數(shù)組元素與對(duì)應(yīng)字段的數(shù)據(jù)類型必須一致.如果數(shù)組元素個(gè)數(shù)比字段個(gè)數(shù)少,多出的字段保持原值,如果數(shù)組元素個(gè)數(shù)比字段個(gè)數(shù)多,多出的數(shù)組元素不復(fù)制.第一個(gè)數(shù)組元素復(fù)制到第一個(gè)字段,第二個(gè)數(shù)組元素復(fù)制到第二個(gè)字69兩條記錄換位置use學(xué)生lz20listdimensiona(1),b(1)x="Y"dowhileupper(x)="Y"input"第一條記錄"tominput"第二條記錄"tongom
兩條記錄換位置70scattertoagonscattertobgatherfromagomgatherfrombwait"繼續(xù)嗎(Y/N?)"toxenddo
scattertoa71例:現(xiàn)有數(shù)據(jù)庫(kù)DD.DBF,其結(jié)構(gòu)如下:訂單號(hào)N(3,0),客戶號(hào)C(3),簽單日期D,金額N(6,2)。數(shù)據(jù)庫(kù)TJ2.DBF結(jié)構(gòu)如下:月份N(2,0),數(shù)量N(2,0),總金額N(8,2)編程序統(tǒng)計(jì)出各個(gè)月份所簽訂單的數(shù)量及其總金額,并將結(jié)果按月份的升序放在庫(kù)文件TJ2.DBF。(vf5)例:現(xiàn)有數(shù)據(jù)庫(kù)DD.DBF,其結(jié)構(gòu)如下:訂單號(hào)N(3,0)72settalkoffdimea(12,2)a=0usedddowhile.not.eof()a(month(簽單日期),1)=a(month(簽單日期),1)+1a(month(簽單日期),2)=a(month(簽單日期),2)+金額skipenddosettalkoff73i=1usetj1dowhilei<=12ifa(i,1)<>0appeblankrepl月份withi,數(shù)量witha(i,1),金額witha(i,2)endifi=i+1enddolistsorton金額totj2usetj2listi=174現(xiàn)有數(shù)據(jù)庫(kù)學(xué)生成績(jī).dbf,有如下結(jié)構(gòu):lz21學(xué)號(hào)(c,8),姓名(c,8),大學(xué)英語(yǔ)(n,4),語(yǔ)文(n,4),數(shù)學(xué)(n,4)。編程序統(tǒng)計(jì)出每10分間隔的三門功課的人數(shù),并以下列形式顯示:分?jǐn)?shù)段大學(xué)英語(yǔ)人數(shù)語(yǔ)文人數(shù)數(shù)學(xué)人數(shù)0—9******10—19******20—29******…..90—100******(vf11)現(xiàn)有數(shù)據(jù)庫(kù)學(xué)生成績(jī).dbf,有如下結(jié)構(gòu):lz2175use學(xué)生成績(jī)dimes(10,3)s=0dowhile.not.eof()s(int(大學(xué)英語(yǔ)/10)+1,1)=s(int(大學(xué)英語(yǔ)/10)+1,1)+1s(int(語(yǔ)文/10)+1,2)=s(int(語(yǔ)文/10)+1,2)+1s(int(數(shù)學(xué)/10)+1,3)=s(int(數(shù)學(xué)/10)+1,3)+1skipenddoclearuse學(xué)生成績(jī)76?"分?jǐn)?shù)段英語(yǔ)人數(shù)語(yǔ)文人數(shù)數(shù)學(xué)人數(shù)"i=1dowhilei<=10?str((i-1)*10,2)+"--"+str(i*10-1,3)j=1dowhilej<=3??s(i,j)j=j+1enddoi=i+1enddoretu?"分?jǐn)?shù)段英語(yǔ)人數(shù)語(yǔ)文人數(shù)數(shù)學(xué)77例6.28求100~200之間的所有素?cái)?shù)之和。SUM=0FORI=101TO199STEP2&&除了2以外,所有素?cái)?shù)都是奇數(shù) N=SQRT(I)FORJ=2TONIFMOD(I,J)=0EXIT&&一俟除盡,退出本層循環(huán)ENDIFENDFORIFJ>N&&意味著每個(gè)數(shù)都除不盡SUM=SUM+IENDIFENDFOR?"100~200之間的所有素?cái)?shù)之和為:",SUMCANCEL例6.28求100~200之間的所有素?cái)?shù)之和。78例6.29求出100~999之間的所有水仙花數(shù)。*PROG29.PRGFORI=1TO9FORJ=0TO9FORK=0TO9S=100*I+10*J+KIFI^3+J^3+K^3=S?SENDIFNEXTNEXTNEXTCANCEL結(jié)果有四個(gè)數(shù),分別為153,370,371和407。例6.29求出100~999之間的所有水仙花數(shù)。79例6.30求Fibonacci數(shù)列(1,1,2,3,5,8,13……)的第8,15,19項(xiàng)的值。lz22分析:Fibonacci數(shù)列的特點(diǎn)是第一項(xiàng)是1,第二項(xiàng)是1,從第三項(xiàng)開始,每一項(xiàng)等于前兩項(xiàng)之和。利用數(shù)組是解決這類問題的最佳方法。我們將數(shù)列中的前若干項(xiàng)依次裝入數(shù)組元素中,需要輸出哪一項(xiàng)就輸出哪個(gè)數(shù)組元素。*PROG30.PRGDIMENSIONF(19)F(1)=1F(2)=1FORI=3TO19F(I)=F(I-2)+F(I-1)ENDFOR?F(8),F(15),F(19)CANCEL例6.30求Fibonacci數(shù)列(1,1,2,3,5,880例6.31產(chǎn)生10個(gè)1~20之間的隨機(jī)整數(shù),并將它們按升序排序后輸出。DIMENSIONA(10)RAND(-1)&&將系統(tǒng)時(shí)間作為首個(gè)隨機(jī)函數(shù)的籽值FORI=1TO10A(I)=INT(RAND()*20)+1&&產(chǎn)生1~20之間的隨機(jī)數(shù)??STR(A(I),5)ENDFOR?&&以上語(yǔ)句的功能是建立數(shù)組FORI=1TO9&&氣泡法排序FORJ=I+1TO10IFA(I)>A(J)&&按升序排序,若改為A(I)<A(J),按降序排列T=A(I)&&交換數(shù)組元素的值A(chǔ)(I)=A(J)A(J)=TENDIFENDFORENDFOR&&以上語(yǔ)句的功能是處理數(shù)組(元素)例6.31產(chǎn)生10個(gè)1~20之間的隨機(jī)整數(shù),并將它們按升序81一、子程序的概念在VisualFoxPro中,子程序是被其他程序調(diào)用的程序文件。主程序能調(diào)用子程序,但子程序不能調(diào)用主程序。子程序也可以調(diào)用其他子程序,構(gòu)成子程序的嵌套調(diào)用。在程序設(shè)計(jì)中,有些功能或計(jì)算需要在不同場(chǎng)合重復(fù)進(jìn)行多次,這時(shí)往往將該功能或計(jì)算編寫成一個(gè)獨(dú)立的子程序,需要時(shí)調(diào)用它,程序既簡(jiǎn)潔又節(jié)省存儲(chǔ)空間。事實(shí)上,不但重復(fù)執(zhí)行的程序段可以作為子程序獨(dú)立出去,即使只執(zhí)行一次的程序段也可以編成子程序。每個(gè)子程序完成一種功能或計(jì)算,主程序的任務(wù)就是輸入數(shù)據(jù)、調(diào)用子程序和輸出結(jié)果這三項(xiàng)。二、子程序的建立子程序的建立和主程序一樣,也是modifycommand擴(kuò)展名為prg.但在子程序中應(yīng)有一條返回語(yǔ)句.Return(tomaster)子程序和主程序可以分別放在兩個(gè)文件內(nèi);也可以放在一個(gè)文件內(nèi),此時(shí),在子程序的開頭要有Procedure
6.12子程序一、子程序的概念6.12子程序82三、子程序調(diào)用語(yǔ)句調(diào)用語(yǔ)句格式:DO<子程序文件名>[WITH<實(shí)際參數(shù)表>]說明:WITH<實(shí)際參表數(shù)>是可選項(xiàng),用于主程序與子程序之間的參數(shù)傳遞。實(shí)參表中的各項(xiàng)可以是常量,變量或一般表達(dá)式,互相用逗號(hào)分開。四、子程序返回語(yǔ)句返回語(yǔ)句格式:RETURN[TOMASTER]說明:執(zhí)行子程序時(shí),遇到RETURN命令,就返回到上一級(jí)子程序或主程序中的子程序調(diào)用命令的下一條語(yǔ)句繼續(xù)執(zhí)行。遇到RETURNMASTER命令,就徑直返回主程序。通常子程序的最后一條語(yǔ)句是RETURN。如果缺省RETURN,程序執(zhí)行到最后,自動(dòng)執(zhí)行RETURN語(yǔ)句功能,返回主調(diào)程序。三、子程序調(diào)用語(yǔ)句83下圖6-37是子程序嵌套調(diào)用時(shí)的程序執(zhí)行過程示意圖。………………DOSUB1………………CANCEL…………DOSUB2…………DOSUB3……RETURN………………RETURN
………………RETURNTOMASTERSub1.prgSub2.prgsub3Main.prg下圖6-37是子程序嵌套調(diào)用時(shí)的程序執(zhí)行過程示意圖。…………84例6.32求3!+5!+8!*lz26.PRG(P、N必須在主程序中定義STORE0TOSUM,PN=3DOJC&&調(diào)用子程序JC.PRGSUM=SUM+P&&Sum的值是3!N=5DOJC&&再次調(diào)用子程序JC.PRGSUM=SUM+PN=8DOJC&&第三次調(diào)用子程序JC.PRGSUM=SUM+P?"3!+5!+8!=",SUMCANCELProcedurejcP=1FORI=1TONP=P*IENDFORRETURN例6.32求3!+5!+8!Procedurejc85JC.PRG(子程序)P=1FORI=1TONP=P*IENDFORRETURN注:主程序負(fù)責(zé)三次調(diào)用子程序以及計(jì)算總和,子程序負(fù)責(zé)計(jì)算N!。主程序每次調(diào)用子程序時(shí)都給定N的值,子程序?qū)o定的N值求N!,結(jié)果存入變量S。主程序執(zhí)行時(shí),遇到DOJC語(yǔ)句,程序轉(zhuǎn)入子程序。執(zhí)行子程序語(yǔ)句時(shí),遇到RETURN語(yǔ)句,程序又返回到主程序DOJC的下一條語(yǔ)句繼續(xù)執(zhí)行。JC.PRG(子程序)86例:main.prgwait“下面調(diào)用子程序”dosub1“00000”wait“又返回到主程序”retusub1.prg?’1111111’dosub2?’1111111’Retusub2.prg?’2222222’retu注意:sub11sub2必須是單獨(dú)的文件。例:main.prg87例:main.prgwait“下面調(diào)用子程序”dosub1wait“又返回到主程序”retuproceduresub1?’1111111’dosub2?’1111111’RetuProceduresub2?’2222222’retu注意:主程序和子程序可以放在一個(gè)文件內(nèi)。若把sub2.prg中的retu改成retutomaster,結(jié)果是什么?例:main.prg88五、子程序的參數(shù)傳遞格式一:do<子程序名>with<實(shí)參變量1>,<實(shí)參變量2>,…格式二:<子程序名>(<實(shí)參1>,<實(shí)參2>…)子程序中格式:parameters<形參變量1>,<形參變量2>,…<過程名>(<形參變量1>,<形參變量2>,…)
注意:①parameters必須是被調(diào)用程序的第一條語(yǔ)句,而且參數(shù)的個(gè)數(shù)和數(shù)據(jù)類型必須和被調(diào)用語(yǔ)句的參數(shù)相一致。②調(diào)用語(yǔ)句中參數(shù)可以是常量、已賦值的變量、或表達(dá)式。③在調(diào)用時(shí)參數(shù)傳遞關(guān)系如下:五、子程序的參數(shù)傳遞89(1)按值傳遞方式:實(shí)參的值只能傳遞給形參變量,而形參變量的值不會(huì)傳遞給實(shí)參變量,當(dāng)形參變量的值改變時(shí),不會(huì)影響實(shí)參變量的值,實(shí)參和形參占用不同的內(nèi)存空間。過程名(<實(shí)參1>,<實(shí)參2>,…)括號(hào)不能省過程名(<形參1>,<形參2>,…)parameters(<形參1>,<形參2>,…)(2)引用傳遞方式:傳遞實(shí)參變量的內(nèi)存地址,實(shí)參變量和形參變量實(shí)際上為同一個(gè)內(nèi)存單元,盡管變量名可以不同,如果形參變量的值改變,那么實(shí)參變量的值也會(huì)跟著改變。引用傳遞屬于雙向傳遞。(1)按值傳遞方式:實(shí)參的值只能傳遞給形參變量,而形參變量的90do過程名with<實(shí)參1>,<實(shí)參2>,…過程名(<形參1>,<形參2>,…)parameters(<形參1>,<形參2>,…)(1)如果某個(gè)實(shí)參變量用一對(duì)圓括號(hào)括起來,不管采用哪種調(diào)用格式,這個(gè)實(shí)參變量總是按值傳遞.(2)實(shí)參是表達(dá)式或者常量時(shí)是按值傳遞。(3)在兩種調(diào)用格式下,對(duì)應(yīng)的實(shí)參變量和形參變量的名字可以相同,也可以不相同.do過程名with<實(shí)參1>,<實(shí)參2>,91例:settalkoff(vf12)a=10b=15doswapwitha,b?”主程序:“,a,bswap.prgparametersx,y?’子程序’,x,yt=xx=yy=tretu例:settalkoff(vf12)92cleara=10b=20Swap1(a,b)?"A1=",a,"B1=",ba=10b=20doSwap1witha,b?"A1=",a,"B1=",breturnprocSwap1(x,y)t=xx=yy=tretuclear93例:編程求1!+2!+…+N!*jch.prgparas,ts=1i=1dowhilei<=ts=s*Ii=i+1enddoreturn*vf13.prgsettalkoffinput“n=“tonw=0p=0j=1dowhilej<=ndojchwithp,jw=w+pj=j+1enddo?”w=”,w例:編程求1!+2!+…+N!settalkoff94STORE100TOX,Ylz27PP(X,Y)??"按值傳遞方式:",x,ydoppwith(x),(y)??"按值傳遞方式:",x,ydoppwithx+5,y+5??"按值傳遞方式:",x,ydoppwithx,y??"引用傳遞方式:",x,ydoppwithx,(y)??"兩種傳遞方式:",x,yprocpp(x,y)x=x+100y=y+50?"計(jì)算結(jié)果:",x,yendprocSTORE100TOX,Y95procpp(x,y)x=x+100y=y+50?"計(jì)算結(jié)果:",x,yendprocprocpp(x,y)96內(nèi)存變量在程序中起作用的范圍稱為內(nèi)存變量的作用域。根據(jù)作用域的不同,內(nèi)存變量分為三類:局部變量、私有變量和全局變量。(1)局部變量(本地變量)格式:LOCAL<內(nèi)存變量表>功能:將<內(nèi)存變量表>中的變量定義為局部變量,其作用域僅在本模塊中,不能在上層或下層模塊中使用。在物理上,本地變量一經(jīng)定義,就臨時(shí)分配了存儲(chǔ)單元;一旦離開了本模塊,局部變量所占的存儲(chǔ)單元被釋放,局部變量變成無定義,從而不能再被引用。說明:①LOCAL命令與LOCATE命令前四個(gè)字符相同,因此不可以縮寫為L(zhǎng)OCA②LOCAL命令可以定義局部?jī)?nèi)存變量和局部數(shù)組,且它們的初值皆為.F.例如:LOCALA,B,C(4)&&不必再用DIMENSION語(yǔ)句定義C數(shù)組?A,B,C(2)結(jié)果為.F..F..F.3.內(nèi)存變量的作用域內(nèi)存變量在程序中起作用的范圍稱為內(nèi)存變量的作用域。根據(jù)作用域97(2)私有變量格式:PRIVATE<內(nèi)存變量表>功能:將<內(nèi)存變量表>中的變量定義為私有變量,其作用域在本模塊及下屬模塊中。說明:①PRIVATE命令可以定義私有內(nèi)存變量和私有數(shù)組,且它們的初值皆為.F.②系統(tǒng)默認(rèn),凡在程序中沒作任何說明的變量均為私有變量。它在本程序及其被調(diào)子程序中有效。③一般情況下,私有變量不必用PRIVATE命令作顯式說明。當(dāng)被調(diào)子程序與主調(diào)程序中有同名變量時(shí),可在被調(diào)子程序中對(duì)該變量作顯式說明,使主調(diào)程序中的同名變量在被調(diào)子程序中暫時(shí)無效。返回主調(diào)程序后,主調(diào)程序中的同名變量原來的值仍然保留,且變量有效,而被調(diào)子程序中的變量變成無效,所占存儲(chǔ)單元也被釋放。另外,在多人開發(fā)程序時(shí)為防止主程序與各子程序之間因變量同名而互相影響,可在各自開發(fā)的子程序中定義私有變量,以屏蔽主調(diào)程序中的同名變量。(2)私有變量98(3)全局變量(公共變量)格式:PUBLIC<內(nèi)存變量表>功能:將<內(nèi)存變量表>中的變量定義為全局變量,其作用域涵蓋所有程序說明:①PUBLIC命令可以定義全局內(nèi)存變量和全局?jǐn)?shù)組,且初值皆為.F.②在命令窗口中建立的變量和數(shù)組均為全局變量和全局?jǐn)?shù)組,但這些全局變量和全局?jǐn)?shù)組不能在程序中引用。③用PUBLIC定義的全局變量和數(shù)組在整個(gè)程序運(yùn)行過程中始終有效,始終占有存儲(chǔ)單元。即使程序運(yùn)行結(jié)束,系統(tǒng)也不會(huì)自動(dòng)釋放全局變量。刪除全局變量只能用RELEASE或CLEARALL等命令。④若同一模塊中有同名的各種變量,則優(yōu)先次序?yàn)椋罕镜刈兞克接凶兞咳肿兞浚?)全局變量(公共變量)99求n到m的和clearlz29Input“m=”tomInput“n=“tonDosum1?”M+N的值為:”,sProceduresum1S=0Fori=ntoms=s+IEndfor?”中間結(jié)果:”,sReturnS是在子程序中開辟的變量,有效范圍僅在子程序,返回到主程序時(shí),S已經(jīng)從內(nèi)存中消失。求n到m的和S是在子程序中開辟的變量,有效范圍僅在子程序100(4)同名變量被隱藏某級(jí)程序中使用的局部變量,有可能和上級(jí)程序中的局部變量同名,為了避免混淆,可在子程序中用private命令定義本級(jí)程序?qū)S玫木植孔兞?。用private命令定義的變量,能把上級(jí)同名的變量暫時(shí)隱藏起來,彼此互不影響,子程序運(yùn)行結(jié)束后,在本級(jí)程序建立的同名變量即被清除,而被隱藏的上級(jí)程序中的同名變量即被恢復(fù)出來,而且保留原值不變。命令格式:private<內(nèi)存變量表>(4)同名變量被隱藏101例:settalkoffa=1b=2dosub?”主程序:”,a,bretuprocsubprivateba=100b=200?”子程序:”,a,bretu例:settalkoff102settalkoffpublicaaaa=10.2bb=23dofx25withbb?aa,bbretufx25.prgparaccprivateaaaa=20.3cc=aa*2Retusettalkoff103settalkoffpublica1,b1store1toa1,b1c1=10dos1witha1+b1,c1,a1?a1,b1,c1retuprocs1parax1,x2,x3x2=x1+x3c1=x2+x3b1=b1+1privateb1b1=c1*x2returnsettalkoff1041.內(nèi)部過程定義格式:PROCEDURE<過程名>[PARAMETERS|LPARAMETER<形式參數(shù)表>]<語(yǔ)句序列>[RETURN[<表達(dá)式>]][ENDPROC]調(diào)用語(yǔ)句格式:DO<過程名>[WITH<實(shí)際參數(shù)表>]說明:(1)內(nèi)部過程是作為程序中的一個(gè)獨(dú)立單位出現(xiàn)的。它可以完成某種操作或某種運(yùn)算,通常安排在本程序的后面,供本程序調(diào)用。(2)若定義中有PARAMETERS|LPARAMETER<形式參數(shù)表>,稱為有參過程,否則稱為無參過程。有參過程的PARAMETER命令必須是第一條可執(zhí)行命令,其形參(也叫虛參)最多27個(gè)。為了使過程的功能更強(qiáng)大,適應(yīng)性更廣,過程中應(yīng)多使用形參。6.3.2過程
1.內(nèi)部過程6.3.2過程105(3)用PARAMETERS<形式參數(shù)表>聲明的形參變量被視為私有變量;用LPARAMETERS<形式參數(shù)表>聲明的形參變量被視為局部變量。(4)實(shí)參表中的各項(xiàng)可以是常量,變量或一般表達(dá)式,互相用逗號(hào)分開。形參表中只能是內(nèi)存變量,稱為形參變量。(5)RETURN語(yǔ)句表示控制返回到調(diào)用語(yǔ)句的下一條繼續(xù)執(zhí)行。后跟表達(dá)式,同時(shí)返回表達(dá)式的值;不跟表達(dá)式,則返回邏輯值.T.。若缺省RETURN,則在過程結(jié)束處自動(dòng)執(zhí)行一條隱含的RETURN語(yǔ)句。(6)PROCEDURE為過程起始語(yǔ)句,ENDPROC為過程結(jié)束語(yǔ)句。若省略ENDPROC,過程結(jié)束于下一條PROCEDURE語(yǔ)句或程序文件尾。(7)有關(guān)參數(shù)傳遞調(diào)用過程時(shí),靠虛實(shí)結(jié)合進(jìn)行參數(shù)傳遞。每個(gè)實(shí)參的值按次序一一傳送給虛參變量。虛實(shí)結(jié)合是按次序而不是按名稱逐一結(jié)合的。通常實(shí)參個(gè)數(shù)與虛參個(gè)數(shù)相等,形參個(gè)數(shù)多于實(shí)參個(gè)數(shù),多余的形參取初值.F.。虛實(shí)結(jié)合時(shí),如果實(shí)參為常量或表達(dá)式,按值單向傳送;如果實(shí)參為變量,按地址傳遞。若用內(nèi)存變量作實(shí)參但又不要值的回傳,則可將實(shí)參變量放在一對(duì)圓括號(hào)內(nèi),使之成為表達(dá)式。(3)用PARAMETERS<形式參數(shù)表>聲明的形參變量被106例6.34在程序中多次調(diào)用內(nèi)部過程LINE,畫一條由30個(gè)“-”組成的直線。USEXSDADOLINEFORI=1TO3DISPFIEL學(xué)號(hào),姓名,性別,住校否OFFDOLINESKIPENDFORUSECANCELPROCEDURELINEFORJ=1TO30&&不能使用I作為循環(huán)變量??"-"ENDFORRETURNENDPROC例6.34在程序中多次調(diào)用內(nèi)部過程LINE,畫一條由30107例6.35為使上述過程LINE的功能更強(qiáng),適應(yīng)性更廣,可以增加兩個(gè)虛參。FORI=1TO3WAIT"輸入一個(gè)字符:"TOCINPUT"輸入字符的個(gè)數(shù)"TONDOLINEWITHC,NENDFORCANCELPROCEDURELINEPARAMETERSCH,MFORJ=1TOM??CHENDFOR?RETURNENDPROC例6.35為使上述過程LINE的功能更強(qiáng),適應(yīng)性更廣,可以108例6.36利用內(nèi)部過程計(jì)算多邊形的面積。S=0&&實(shí)參S必須有確定的值A(chǔ)REA=0DOTRIANGLEWITH6.1,6.2,8.6,SAREA=AREA+SDOTRIANGLEWITH8.6,7.8,2.4,SAREA=AREA+SDOTRIANGLEWITH7.8,4,4.5,SAREA=AREA+S?[多邊形的面積為],STR(AREA,6,2)CANCELPROCTRIANGLE&&完成已知三邊求面積的計(jì)算功能PARAX,Y,Z,S&&利用形參變量S回傳三角形面積L=(X+Y+Z)/2S=SQRT(L*(L-X)*(L-Y)*(L-Z))RETURNENDPROC例6.36利用內(nèi)部過程計(jì)算多邊形的面積。109多邊形面積ABCD6.16.28.62.44.54.0E多邊形面積ABCD6.16.28.62.44.54.0E1102.外部過程內(nèi)部過程只能被本程序中的調(diào)用語(yǔ)句調(diào)用。外部過程是將一個(gè)過程寫成一個(gè)程序文件,任何程序都可以通過調(diào)用語(yǔ)句對(duì)它進(jìn)行調(diào)用,通用性強(qiáng)。外部過程的過程名實(shí)際上就是被調(diào)用的文件主名。程序文件中的第一條語(yǔ)句是PROCEDURE<過程名>,這里的<過程名>必須與文件主名相同,也不能省略,否則出錯(cuò)。PROCEDURE<過程名>這條語(yǔ)句可以省略,于是形式上就與前面說的子程序吻合了。如果內(nèi)部過程的過程名與外部過程的文件主名相同,調(diào)用時(shí)系統(tǒng)執(zhí)行的是內(nèi)部過程。2.外部過程1113.過程文件外部過程的通用性是強(qiáng)了,但當(dāng)一個(gè)大型應(yīng)用程序要調(diào)用多個(gè)外部過程時(shí),要進(jìn)行多次讀盤操作,速度受影響,效率降低。另外,系統(tǒng)允許同時(shí)打開的文件數(shù)是有限制的。過程文件可以很好地解決這個(gè)問題。過程文件中包含多個(gè)過程,其建立方法與一般程序文件的建立方法相同,擴(kuò)展名也是.PRG。過程文件不能運(yùn)行,只能打開。一旦打開,其中的所有過程均成為內(nèi)部過程,供程序調(diào)用。命令格式:SETPROCEDURETO[<過程文件名1>[,<過程文件名2>,……]][ADDITIVE]功能:打開過程文件,使其中的所有過程可供調(diào)用。說明:(1)可以同時(shí)打開多個(gè)過程文件。如果命令中帶有ADDITIVE子句,則以前打開的過程文件不關(guān)閉。3.過程文件112(2)如果SETPROCEDURETO后面不帶過程文件名,則關(guān)閉所有已打開的過程文件。(3)用CLOSEPROCEDURE命令也可以關(guān)閉過程文件。(4)過程文件的書寫格式如下:PROCEDURE<過程名1>[PARAMETERS|LPARAMETER<形式參數(shù)表>]<語(yǔ)句序列1>[RETURN[<表達(dá)式>]]ENDPROCPROCEDURE<過程名2>[PARAMETERS|LPARAMETER<形式參數(shù)表>]<語(yǔ)句序列2>[RETURN[<表達(dá)式>]]ENDPROC……(2)如果SETPROCEDURETO后面不帶過程文件113例6.38有8個(gè)黑子和8個(gè)白子,從中隨機(jī)取出8個(gè)子,問取出5黑3白的概率是多少?分析:這是個(gè)超幾何分布的古典概率問題。概率P和組合的計(jì)算公式如下:例6.38有8個(gè)黑子和8個(gè)白子,從中隨機(jī)取出8個(gè)子,問取出114我們編一個(gè)過程FAC求N!,再編一個(gè)過程CMN求組合數(shù),須三次調(diào)用FAC;為求概率P,須三次調(diào)用CMN,于是構(gòu)成了嵌套調(diào)用。編寫一個(gè)過程文件GL.PRG,其中包含F(xiàn)AC和CMN兩個(gè)過程。在程序中打開過程文件GL,實(shí)現(xiàn)過程嵌套調(diào)用,求出概率。SETPROCEDURETOGL&&打開過程文件GL.PRGINPUT"輸入黑子的個(gè)數(shù)"TOHB=8-HR=0DOCMNWITH8,H,R&&設(shè)置實(shí)參R是為了獲得回傳的組合數(shù)Y1=RDOCMNWITH8,B,RY2=RDOCMNWITH16,8,RY3=RP=Y1*Y2/Y3?"取"+STR(H,1)+"黑"+STR(B,1)+"白的概率是"+STR(P,6,4)SETPROCEDURETO&&關(guān)閉過程文件CANCEL我們編一個(gè)過程FAC求N!,再編一個(gè)過程CMN求組合數(shù)115*GL.PRGPROCEDUREFAC&&過程FAC的功能是計(jì)算階乘PARAMETERST,YQ=1FORI=1TOTQ=Q*IENDFORY=Q&&階乘值通過形參Y回傳給實(shí)參變量XRETURNENDPROCPROCEDURECMN&&過程CMN的功能是計(jì)算組合PARAMETERM,N,C&&組合數(shù)通過形參C回傳給實(shí)參變量RX=0DOFACWITHM,XX1=X*GL.PRG116DOFACWITHN,XX2=XDOFACWITHM-N,XX3=XC=X1/(X2*X3)RETURNENDPROC
DOFACWITHN,X117補(bǔ)充作業(yè):1.根據(jù)學(xué)生成績(jī)表,輸入課程號(hào),重復(fù)查詢?cè)撻T課程的最高分、最低分和平均分。2、根據(jù)學(xué)生成績(jī)表,輸入課程號(hào),統(tǒng)計(jì)選修該門課程的人數(shù),要求能夠重復(fù)統(tǒng)計(jì)。3、按照學(xué)號(hào)的升序逐條顯示班級(jí)后兩位為“01”的學(xué)生信息,要求分別用dowhileenddo和scanendscan結(jié)構(gòu)實(shí)現(xiàn)。4、編程實(shí)現(xiàn)m+(m+1)+(m+2)+…Nm、n的值從鍵盤輸入,m<=n補(bǔ)充作業(yè):118演講完畢,謝謝觀看!演講完畢,謝謝觀看!1196.9順序結(jié)構(gòu)程序設(shè)計(jì)一、順序結(jié)構(gòu):根據(jù)程序中語(yǔ)句的書寫順序依次逐條執(zhí)行。流程圖如下:
語(yǔ)句1語(yǔ)句26.9順序結(jié)構(gòu)程序設(shè)計(jì)一、順序結(jié)構(gòu):根據(jù)程序中語(yǔ)句的120例6.1查找某個(gè)學(xué)生信息(lz1)Opendatabase教學(xué)管理Use學(xué)生Accept“請(qǐng)輸入學(xué)生姓名:”tonameLocatefor姓名=nameDisplayUsereturn例6.1查找某個(gè)學(xué)生信息(lz1)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 英語(yǔ) 漫畫 課件
- 《做功了嗎》課件
- 手術(shù)總結(jié) 課件
- 西京學(xué)院《英美文學(xué)導(dǎo)讀》2022-2023學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《書法》2021-2022學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《機(jī)器學(xué)習(xí)》2021-2022學(xué)年期末試卷
- 西京學(xué)院《工程造價(jià)軟件應(yīng)用》2022-2023學(xué)年第一學(xué)期期末試卷
- 2024-2025學(xué)年高考語(yǔ)文試題及參考答案
- 西華師范大學(xué)《智能計(jì)算》2022-2023學(xué)年期末試卷
- 西華師范大學(xué)《寫實(shí)油畫》2023-2024學(xué)年第一學(xué)期期末試卷
- DB31-T 540-2022 重點(diǎn)單位消防安全管理要求
- 語(yǔ)篇的銜接和連貫課件
- 蔣介石-教學(xué)講解課件
- 兒化音變課件
- 國(guó)家開放大學(xué)《傳感器與測(cè)試技術(shù)》實(shí)驗(yàn)參考答案
- NY∕T 3349-2021 畜禽屠宰加工人員崗位技能要求
- 工程造價(jià)司法鑒定實(shí)施方案
- 有效教學(xué)之BOPPPS-模式課件
- 材料成型工藝基礎(chǔ)習(xí)題答案
- 劇本寫作課件
- 計(jì)算方法第三章函數(shù)逼近與快速傅里葉變換課件
評(píng)論
0/150
提交評(píng)論