vfp8.1-三種程序結(jié)構(gòu)_第1頁
vfp8.1-三種程序結(jié)構(gòu)_第2頁
vfp8.1-三種程序結(jié)構(gòu)_第3頁
vfp8.1-三種程序結(jié)構(gòu)_第4頁
vfp8.1-三種程序結(jié)構(gòu)_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

大綱要求:(1)1、程序文件的建立與運行;2、程序文件中常用的命令:輸入類、輸出類、注釋命令,中止程序執(zhí)行命令等。3、程序的三種基本結(jié)構(gòu):

1)順序結(jié)構(gòu);

2)選擇結(jié)構(gòu):IF…ELSE…ENDIF及其嵌套;

DOCASE…ENDCASE;3)循環(huán)結(jié)構(gòu):DOWHILE…ENDDO

及其嵌套;第八章VFP程序設(shè)計基礎(chǔ)

大綱要求:

4、多模塊程序:

1)子程序設(shè)計與調(diào)用;

2)自定義函數(shù)與過程;

3)變量作用域;5、代碼式菜單設(shè)計。6、程序的調(diào)試方法。第八章程序設(shè)計基礎(chǔ)

程序的三種基本結(jié)構(gòu)

結(jié)構(gòu)化程序設(shè)計方法中,所有程序只能由三種結(jié)構(gòu)構(gòu)成:順序結(jié)構(gòu):程序的流程是簡單、順序的,從第一條語句順序地執(zhí)行到結(jié)束或返回語句。選擇結(jié)構(gòu):程序執(zhí)行中,根據(jù)某些條件的不同,可以有選擇地執(zhí)行不同的語句部分。循環(huán)結(jié)構(gòu):程序執(zhí)行中,可以根據(jù)某些條件是否成立,而重復執(zhí)行某些程序語句。程序的三種基本結(jié)構(gòu)程序的基本構(gòu)成開始部分:注釋與說明、初始化程序部分:輸入、處理、輸出結(jié)束部分:恢復環(huán)境,程序結(jié)束的命令*TEST2.PRGUSE學生管理!學生

ACCE'輸入姓名:'TOXMLOCAFOR學生.姓名=XMDISPUSE&&初始化,打開表&&處理&&恢復、結(jié)束*TEST4.PRG關(guān)聯(lián)查詢學生選課成績&&初始化部分CLEA&&清屏SELE1&&選擇1號工作區(qū)USE選課

ALIASXK&&打開選課表SETORDERTOTAGXHASELE2USE學生ALIASXSSETRELATO學號INTOXK&&建立關(guān)聯(lián)

&&執(zhí)行部分ACCE“請輸入姓名:”

TOXM&&交互式輸入姓名LOCAFOR姓名=ALLTRIM(XM)&&查詢?姓名,XK.課程號,XK.成績

&&顯示&&恢復部分CLEAALL&&關(guān)閉表,清變量程序的三種基本結(jié)構(gòu)【例】已知雞兔的頭數(shù)為16,腳數(shù)為40,求雞、兔數(shù)目。*雞兔同籠問題;

CLEAH=16F=40X=(4*H–F)/2Y=(F–2*H)/2?’共有雞’,X?’共有兔’,YCANCEL&&處理部分&&初始化部分&&輸出與結(jié)束部分程序的三種基本結(jié)構(gòu)2、選擇結(jié)構(gòu)

根據(jù)某邏輯表達式的值,判斷與決定程序的走向。分為:單分支、雙分支、多分支三種。1)單分支結(jié)構(gòu)

IF<條件>

語句序列

ENDIF執(zhí)行方式:當條件為真時,執(zhí)行語句序列,否則直接執(zhí)行ENDIF后的語句。條件語句序列.T.ENDIF后的語句單選擇結(jié)構(gòu)流程圖程序的三種基本結(jié)構(gòu)1)單分支結(jié)構(gòu)【例】輸出兩數(shù)X,Y中大的一個(IF…ENDIF)

INPUT‘輸入X’TOXINPUT‘輸入Y’TOYS=XIFY>XS=Yendif

?Scancel.T..F.Y>X輸入X輸入YS=Y結(jié)束輸出SS=X輸入47輸出7輸入52輸出5程序的三種基本結(jié)構(gòu)2、選擇結(jié)構(gòu)2)雙分支結(jié)構(gòu)

IF<條件><語句序列1>ELSE<語句序列2>ENDIF執(zhí)行方式:當條件為真時,執(zhí)行語句序列1,否則執(zhí)行語句序列2。任何情況下,兩個序列中只會有一個被執(zhí)行。雙選擇結(jié)構(gòu)流程圖條件語句序列1語句序列2.T..F.ENDIF后的語句程序的三種基本結(jié)構(gòu).T..F.Y>X輸入X輸入Y結(jié)束輸出YS=X輸出X2)雙分支結(jié)構(gòu)【例】輸出兩數(shù)X,Y中大的一個(IF…ELSE…ENDIF)

INPUT‘輸入X’TOXINPUT‘輸入Y’TOYIFX>Y?Xelse?Yendifcancel輸入47輸出7輸入52輸出5程序的三種基本結(jié)構(gòu).T..F.總分>=650打開表輸入姓名到XM關(guān)閉表并結(jié)束輸出‘Y’查詢XM輸出‘N’【例】判斷某同學是否可以獲得獎學金(入校總分>=650)

CLEAUSE學生

ACCE‘學生姓名:’

TOXMLOCAFOR姓名=XMIF入??偡?gt;=650?姓名+‘可以獲得?!?/p>

ELSE?姓名+‘不能獲得?!?/p>

ENDIFUSECANC可以獲得不能程序的三種基本結(jié)構(gòu)【例】輸入并判斷某年是否是閏年。分析:1)定義變量輸入量:Y年份;2)數(shù)學模型與算法:

閏年的計算方法:(1)年份能被4整除但不能被100整除;或:(2)年份能被400整除;邏輯表達式:中間變量(L型)TJ=MOD(Y,4)=0ANDMOD(Y,100)!=0ORMOD(Y,400)=0算法:(1)輸入年份;INPUT‘輸入年份’TOY(2)判斷是否閏年,并輸出結(jié)果;程序的三種基本結(jié)構(gòu)程序:CLEAINPUT‘輸入年:’TOYTJ=MOD(Y,4)=0ANDMOD(Y,100)!=0;ORMOD(Y,400)=0IFTJ?Y,’是閏年’ELSE?Y,’不是閏年’ENDIFCANC條件?‘是閏年’?‘不是’.T..F.結(jié)束輸入年份計算條件程序的三種基本結(jié)構(gòu)3)多分支結(jié)構(gòu)格式:

DOCASECASE條件1

語句序列1CASE條件2

語句序列2…..CASE條件n

語句序列nOTHERWISE

語句序列

ENDCASE條件1條件2條件nOTHERWISE語句序列1語句序列2語句序列N語句序列ENDCASE后面語句.T..F.F.程序的三種基本結(jié)構(gòu)注意:1、每次至多只執(zhí)行一個語句序列。2、從DOCASE入口,滿足哪個條件就執(zhí)行對應語句序列,并立即跳出CASE結(jié)構(gòu)。3、各條件是互斥的,如:語句序列n的執(zhí)行條件是:不滿足條件1、條件2、…條件n-1,但滿足條件n。4、若所有條件都不滿足,則執(zhí)行OTHERWISE后的語句序列,OTHERWISE可以省略,5、注意結(jié)構(gòu)的完整性。條件1條件2條件nOTHERWISE語句序列1語句序列2語句序列N語句序列ENDCASE后面語句.T..F.F.程序的三種基本結(jié)構(gòu)SETTALKOFFINPUTTOXDOCASECASEX>0Y=1&&x>0CASEX=0Y=0&&!X>0.and.x=0OTHERWISEY=-1&&!X>0.and.!x=0ENDCASE?“Y=”,YCANCEL【例】求Y(X)的值。1(X>0)Y=0(X=0)-1(X<0)【例】根據(jù)選課表中成績判斷該生成績屬于優(yōu)、良、合格、不合格;分析:基本步驟如下:

1、打開表;

2、輸入姓名,查詢成績;

3、根據(jù)成績n判斷等級nj;對本步驟:用docase…endcase

解決將成績變量n的值域(<60,60-79,80-89,90以上)從值域的一端向另一端依次劃分(此處從左到右):0n<60n<80608090100n<90n<100由于每一步都是對前一步的否定,所以只需要

<0n<60n<80608090100n<90n<100Use選課Acce‘輸入姓名’toxmLocafor姓名=xmN=成績Docasecasen<60

nj=‘不合格’

casen<80

nj=‘合格’

casen<90

nj=‘良’

otherwise

nj=‘優(yōu)’Endcase?xm,’同學的成績’,n??‘等級為:’,njUseCanc0其它n>=60608090100n>=80n>=90Use選課Acce‘輸入姓名’toxmLocafor姓名=xmN=成績Docasecasen>=90

nj=‘優(yōu)’

casen>=80

nj=‘良’

casen>=60

nj=‘合格’

otherwise

nj=‘不合格’Endcase?xm,’同學的成績:’,n??‘等級為:’,njUseCanc右端向左端依次劃分:讀程序:分析下面的一個程序:Docasecase計算機<60?“不及格”

case計算機>=60?‘及格’

case計算機>=70?“中”

case計算機>=80?‘良’

case計算機>=90?‘優(yōu)’Endcase

問題:1、若輸入計算機=75,輸出什么?2、若輸入85、95,分別輸入什么?3、若有錯,錯在何處?如何修改?0n<606080901003、循環(huán)結(jié)構(gòu)

在程序的執(zhí)行過程中,某些語句需要多次重復執(zhí)行,控制這些語句反復執(zhí)行的結(jié)構(gòu),稱為循環(huán)結(jié)構(gòu)?!纠坑嬎?+2+3+4+……+100,可以是:

S=1+2+3+4+5+6……..

無法寫下

或:S=0S=S+1S=S+2…………..S=S+100

共計100句實質(zhì)上,這100句形式上基本相同??梢詺w結(jié)為

S=S+i(i=1,2,…100)程序的三種基本結(jié)構(gòu)3、循環(huán)結(jié)構(gòu)

DOWHILE<條件><語句序列>ENDDO

1)首先判斷條件是否成立,當條件為真時,執(zhí)行語句序列,否則執(zhí)行ENDDO后面的語句。

2)每次執(zhí)行完語句序列,都回到循環(huán)結(jié)構(gòu)首部,再次判斷條件是否成立,只要條件為真,則一直循環(huán)。

3)只要某次判斷條件為假,立即結(jié)束循環(huán),執(zhí)行ENDDO后面的語句。

4)因此,循環(huán)體有可能一次也不執(zhí)行.F..T.條件語句序列ENDDO后面的語句程序的三種基本結(jié)構(gòu)基本結(jié)構(gòu)示例:計算1到100的平方和。分析:

1、用變量S裝結(jié)果,初值為02、人工執(zhí)行的過程是:

S=0步數(shù)KS=S+1*11S=S+2*22…………..S=S+100*100100引進一個數(shù)值型變量K計算步數(shù),則上述每一步:

1)S=S+K*K2)K=K+1直到K>100

為止。因此,可以寫成循環(huán)結(jié)構(gòu):循環(huán)條件為:

K<=100循環(huán)體為:

S=S+K

K=K+1.F..T.K<=100S=S+K*KK=K+1ENDDO后面的語句S=0K=1問題:在?S處K的值是多少?.F..T.K<=100S=S+K*KK=K+1ENDDO后面的語句S=0K=1循環(huán)初值循環(huán)體循環(huán)條件基本結(jié)構(gòu)示例:計算1到100的平方和。命令序列:S=0K=1DOWHILEK<=100ENDDOS=S+K*KK=K+1?SRETU

在數(shù)據(jù)庫應用中,循環(huán)往往用于逐條處理記錄,此時:LOCAFOR條件GOTOP循環(huán)體語句是:SKIP處理每條滿足條件的記錄CONTINUE或循環(huán)條件是:(只處理滿足條件的記錄)循環(huán)的初始語句是:(處理全部記錄)DOWHILNOTEOF()ENDDO循環(huán)的初始語句是:循環(huán)條件是:DOWHILNOTEOF()循環(huán)體語句是:處理每條記錄ENDDO統(tǒng)計XSQK.DBF表中入校總分在**分以上的學生人數(shù)

USE學生情況表

STN=0INPUT"請輸入要統(tǒng)計學生人數(shù)的分數(shù)點:"TOSCDOWHILENOTEOF()IF入學總分>=SCSTN=STN+1ENDIFSKIPENDDO?"學生入學總分在"+STR(SC,3)+"以上者的人數(shù)是:"+STR(STN,2)USERETURNlocafor入學總分>=SCDOWHILENOTEOF()

STN=STN+1

contENDDO

USE學生

LOCAFOR入??偡?gt;=580DOWHILEnoteof()DISPCONTINUEENDDO?’結(jié)束’

USECANCEL初始語句循環(huán)條件循環(huán)體

【例】顯示學生表中總分高于580分的學生記錄;如果表中沒有總分高于580的記錄,則循環(huán)一次也不會執(zhí)行。帶LOOP和EXIT的循環(huán)

DOWHILE<條件><語句序列1>[LOOP]<語句序列2>[EXIT]<語句序列3>ENDDO1)當執(zhí)行到LOOP語句時,將跳過循環(huán)體中后續(xù)語句,直接回到循環(huán)首部。2)當執(zhí)行到EXIT語句時,立即結(jié)束循環(huán),執(zhí)行ENDDO后面的語句。條件.F..T.循環(huán)體ENDDO后面的語句LOOPEXIT

USE學生

gotopDOWHILEnoteof()if入??偡?lt;580skiploop

endifDISPskipENDDOUSECANCEL初始語句循環(huán)條件循環(huán)體【例】顯示學生表中總分高于580分的學生記錄;如果本記錄總分低于580,則跳過,回到循環(huán)首部,繼續(xù)下一條。

USE學生

counttonDOWHILE.T.input‘輸入記錄號’toidocasecasei<=0exitcasei>n?’記錄號超界’

Othergoi

disp

endcaseENDDOUSE另類循環(huán):死循環(huán)——dowhile.t.

死循環(huán)一般用于交互式輸入或菜單選單程序中,能夠無限循環(huán)執(zhí)行,直到滿足某條件為止。所以,死循環(huán)中必然有分支判斷語句,并包含EXIT語句,以便滿足某條件時,強行退出循環(huán),轉(zhuǎn)而執(zhí)行ENDDO后面的語句。計數(shù)循環(huán)FOR……..ENDFOR|NEXT格式:

FOR<循環(huán)變量>=<循環(huán)初值>TO<循環(huán)終值>[STEP<步長>]ENDFOR|NEXT[<循環(huán)變量>]【例】fori=1to10……endforfori=10to0step-1……Nextifori=1to10?inext同樣地,循環(huán)中可以有LOOP和EXIT。2、計數(shù)循環(huán)FOR…ENDFOR循環(huán)變量<=終值.T.循環(huán)體循環(huán)變量+STEP循環(huán)變量=初值.F.ENDFOR后面的語句1)循環(huán)變量賦初值;2)檢查循環(huán)變量是否超過終值否則,跳出循環(huán)若未超過,則進入循環(huán)3)執(zhí)行循環(huán)體4)當執(zhí)行到ENDFOR或NEXT時,循環(huán)變量=循環(huán)變量+步長回到循環(huán)首部,繼續(xù)第2)步?!纠坑嬎?到100的和。K<=100.T.S=s+kK=k+1K=1.F.?‘s=’,s循環(huán)初值為:S=0K=1循環(huán)條件為:K<=100循環(huán)體為:S=S+KK=K+1s=0forK=1to100step1s=s+kendfor?’s=‘,scancel相比之下,F(xiàn)OR循環(huán)更簡潔一些。.F..T.K<=100S=S+KK=K+1ENDDO后面的語句S=0K=1循環(huán)初值循環(huán)體循環(huán)條件回顧用DOWHILE……ENDDO解題:

命令序列:S=0K=1DOWHILEK<=100ENDDOS=S+KK=K+1?SRETU【例】計算n的階乘。Fac=1Input‘請輸入n的值:’tonFork=1tonfac=fac*kNext?str(n,5)+‘!=’+str(fac,5)CancelFac=1Input‘請輸入n的值:’tonK=1Dowhilek<=nfac=fac*kk=k+1enddo?str(n,5)+‘!=’+str(fac,5)Cancel方法二:用dowhile循環(huán)方法一:用for循環(huán)循環(huán)初值為:K=1循環(huán)體為:

S=S*K循環(huán)條件為:

K<=100K=K+13、表文件掃描循環(huán)SCAN

SCAN[<范圍>][FOR<條件>][WHILE<條件>]<語句序列1>ENDSCAN當無FOR時,等價于:GOTOP(或到范圍的第一條記錄)DOWHILE.NOT.EOF()<語句序列>SKIPENDDO當有FOR時:等價于:LOCAFOR/WHILE<條件>DOWHILE.NOT.EOF()<語句序列>CONTINUEENDDO3、表文件掃描循環(huán)SCAN

USE學生

scanfor入校總分<580

DISPENDSCANUSECANCEL

USE學生

gotop

locafor入??偡?gt;=580DOWHILEnoteof()

dispcontinueENDDOUSECANCEL4、多重循環(huán)

(嵌套循環(huán)結(jié)構(gòu))

【例】

DOWHILE<條件1><語句序列1>forj=1tok<語句序列2>fori=1tom<語句序列31>

ENDforfori=1ton<語句序列32>

ENDfor

ENDforENDDO第一層循環(huán)(外層循環(huán))第二層循環(huán)并列第三層循環(huán)(內(nèi)循環(huán))

溫馨提示

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

評論

0/150

提交評論