




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
結(jié)構(gòu)化程序設(shè)計第一頁,共七十三頁,2022年,8月28日1、VFP數(shù)據(jù)庫管理系統(tǒng)提供了交互執(zhí)行和程序執(zhí)行二種工作方式。所謂程序執(zhí)行方式,就是將實現(xiàn)某一功能的VFP命令序列,在編輯器中編成特定的程序文件,存放在磁盤中,其文件擴展名為Prg。當(dāng)我們需要實現(xiàn)這一功能時,就執(zhí)行該程序。2、程序文件編輯的注意事項輸入程序時要注意以下三點:⑴按回車鍵表明完成一條命令(語句)的輸入。⑵一條命令(語句)可以在一行寫完,也可以分多行寫完,當(dāng)分多行寫時,除最后一行外,每行結(jié)尾處放入一個分號(;),表明下行繼續(xù)。⑶在文本輸入窗口中,輸入程序時應(yīng)注意各關(guān)鍵符號為英文狀態(tài)。(4)可以利用鼠標(biāo)器和鍵盤,在編輯窗口中完成各種編輯操作。9.1程序文件的建立、執(zhí)行和編譯第二頁,共七十三頁,2022年,8月28日一、程序文件的建立
1.命令方式
ModifyCommand<程序文件名>2.菜單方式◆單擊系統(tǒng)菜單“文件”、“新建”,彈出“新建”窗口?!粼凇靶陆ā贝翱谥?,選擇“程序”、“新建文件”,進入“程序文件編輯”窗口?!粼凇俺绦蛭募庉嫛贝翱谥?,逐條輸入命令行?!艚Y(jié)束后,單擊系統(tǒng)菜單“文件”、“保存”,在窗口的“保存文檔為:”對話框中,輸入程序文件名,默認(rèn)的文件類型為*.Prg,單擊“保存”按鈕,建立程序文件的操作結(jié)束。第三頁,共七十三頁,2022年,8月28日二、程序文件的執(zhí)行
程序文件保存在磁盤上,在需要運行時可從磁盤調(diào)入內(nèi)存執(zhí)行。注意:程序運行后,會自動產(chǎn)生一個文件類型為.Fxp的同名的編譯程序。1.命令方式
Do〈程序文件名〉2.菜單方式單擊系統(tǒng)菜單的“程序”、“運行”,在彈出的“運行”窗口中,選擇路徑、雙擊需要運行的程序名。第四頁,共七十三頁,2022年,8月28日二、程序設(shè)計中的常用語句程序設(shè)計中的常用語句包括輸入語句、輸出語句、終止程序執(zhí)行語句、清屏與注釋語句。1、輸入、輸出語句輸入語句是程序運行時人機交互的界面,用于輸入程序運行時所需要的數(shù)據(jù)。而輸出語句是用于輸出程序運行的結(jié)果。第五頁,共七十三頁,2022年,8月28日1.輸入語句輸入語句提供了在程序運行的過程中暫停程序的執(zhí)行,等待用戶從鍵盤上輸入數(shù)據(jù),當(dāng)用戶以回車鍵結(jié)束輸入時,系統(tǒng)將表達式的值存入指定的內(nèi)存變量,程序繼續(xù)運行。輸入語句有非格式化輸入命令和格式化輸入命令兩種。(1)非格式化輸入命令非格式化輸入命令共有三條:
Input、Accept和Wait。Input[<提示信息>]To〈內(nèi)存變量〉A(chǔ)ccept[<提示信息>]To〈內(nèi)存變量〉Wait[<提示信息>]To〈內(nèi)存變量第六頁,共七十三頁,2022年,8月28日參數(shù)說明:◆Input命令能接受除備注型、通用型以外的數(shù)據(jù)類型,但數(shù)據(jù)為字符型、日期型或邏輯型時應(yīng)使用相應(yīng)的定界符?!鬉ccept命令只接受字符型數(shù)據(jù)。輸入字符串時,不需要用定界符?!鬢ait[<提示信息>][To〈內(nèi)存變量〉]命令只接受單個字符。如果執(zhí)行不帶任何參數(shù)的Wait命令會彈出“按任意鍵繼續(xù)……”的提示。
第七頁,共七十三頁,2022年,8月28日例9-1:在學(xué)生檔案表中,按學(xué)號直接定位查詢學(xué)生記錄。Use學(xué)生檔案表accept"請輸入查詢學(xué)生的學(xué)號:"ToA1LocateFor學(xué)號=A1Display例9-2:在學(xué)生檔案表中,按年齡順序定位查詢學(xué)生記錄。Use學(xué)生檔案表Input“請輸入查詢學(xué)生的年齡:”ToA2LocateFor年齡=A2DisplayContinueDisplay第八頁,共七十三頁,2022年,8月28日例9-3:在學(xué)生檔案數(shù)據(jù)表中,以性別和年齡為表達式索引定位查詢學(xué)生記錄。Use學(xué)生檔案表IndexOn性別+Str(年齡,2)ToXbnlInput“請輸入查詢學(xué)生的年齡:”ToA4Accept“請輸入查詢學(xué)生的性別:”ToA5SeekA5+Str(A4,2)Display第九頁,共七十三頁,2022年,8月28日(2)屏幕格式輸入語句在指定行、列的位置,從鍵盤上為變量賦值。這個變量可以是內(nèi)存變量,也可以是字段變量。如果是內(nèi)存變量,必須事先定義好。如果是字段變量,必須事先打開相應(yīng)的數(shù)據(jù)表。
@<行,列>[Say<表達式>]Get<變量>第十頁,共七十三頁,2022年,8月28日參數(shù)說明:◆[Say<表達式>]:作為被編輯的變量前面出現(xiàn)的提示,一般都是用字符串表示?!鬐et<變量>:變量可以是內(nèi)存變量,也可以是字段變量。若是內(nèi)存變量必須在使用前先定義。如果是字段變量,則要先打開相應(yīng)的數(shù)據(jù)表。數(shù)據(jù)類型可以是數(shù)值型、字符型、日期型、邏輯型或備注型?!鬇……Get<變量>命令,必須用Read語句來激活才能完成對數(shù)據(jù)的編輯。多個@……Get命令,可以用一個READ語句來激活。第十一頁,共七十三頁,2022年,8月28日例9-5:用屏幕格式輸入語句輸入數(shù)值,計算公式C=2A+3B的值。
A=0B=0@10,20Say"請輸入A的值:"GetA@11,20Say"請輸入B的值:"GetBRead?"C=2a+2b="+Str(2*A+2*B)
第十二頁,共七十三頁,2022年,8月28日思考:請編輯一個程序,能根據(jù)學(xué)號和課程代碼來修改成績。
Xh=Space(7)Kcdm=Space(4)cj=0UseE:\課件\vf程序設(shè)計\VF2006-2007.2\vfsy\學(xué)生成績表Excl@10,20Say'請輸入要修改成績的學(xué)號'GetXh@12,20Say'請輸入要修改成績的課程代碼'GetKcdmReadLocateFor學(xué)號=Xh.And.課程代碼=Kcdm@14,20Say'請輸入修改成績'Get成績
Readuse第十三頁,共七十三頁,2022年,8月28日例9-8用屏幕格式輸入法設(shè)計一個程序,向“專業(yè)代碼表”中增加一條新記錄。Use專業(yè)代碼表AppendBlankGotoBottom@10,20say"專業(yè)代碼:"get專業(yè)代碼@12,20say"專業(yè)名稱:"get專業(yè)名稱Readuse第十四頁,共七十三頁,2022年,8月28日2.輸出語句(1)非格式化輸出命令格式1:?〈表達式表〉
格式2:??〈表達式表〉
格式3:???〈表達式表〉
計算表達式的值并輸出。參數(shù)說明:◆“?”表示在當(dāng)前行的下一行的首位輸出,”??”表示在當(dāng)前行光標(biāo)所處輸出,”???”表示向打印機輸出?!?lt;表達式表>如果是字符、日期、邏輯常量應(yīng)使用定界符。如果是一個表達式的各部分的數(shù)據(jù)類型必須一致。如果是<表達式表列表>,各表達式之間用逗號“,”分隔。第十五頁,共七十三頁,2022年,8月28日例9-9:顯示當(dāng)前的日期和時間與表達式的值。
?”今天的日期是:”,DATE(),”時間是:”,TIME()&&如果用“+”連接該如何表達
A=10B=20?“A*10-B=”,Str(A*10-B),Space(2)??“A*20-B=”+Str(A*20-B,4)例9-10:顯示字符型表達式的值。
?“祝賀”+’北京申奧’+[成功]&&字符串的連接第十六頁,共七十三頁,2022年,8月28日(2)屏幕格式輸出命令
@<行,列>SAY<表達式>
在指定行、列位置上輸出表達式的值,輸出數(shù)據(jù)的格式由Picture選項或Function選項中的控制符控制。Size、Font、Style和Color選項是用來控制輸出結(jié)果的字符范圍、字體、字型、字號大小和顏色的。參數(shù)說明:◆Say<表達式>:表達式可以是常量(字符、日期、邏輯常量需要使用相應(yīng)的定界符)、內(nèi)存變量、字段變量以及由它們組成的表達式。表達式只能是一個,而且,表達式的各部分的數(shù)據(jù)類型必須一致。第十七頁,共七十三頁,2022年,8月28日例9-11:顯示字符串常數(shù)。@3,5Say"這是一個顯示字符串常數(shù)的例子“例9-12:顯示學(xué)生檔案表的第四條記錄的字段內(nèi)容。
Use學(xué)生檔案表
Goto4@6,6Say“學(xué)號::”+學(xué)號
@7,6Say“姓名::”+姓名
@9,6Say“入學(xué)年齡:”+Str(入學(xué)年齡,2)&&數(shù)據(jù)類型必須一致
@10,6Say“出生日期:”+Dtoc(出生日期)第十八頁,共七十三頁,2022年,8月28日例9-13:屏幕格式輸出命令常用來制作應(yīng)用系統(tǒng)的主菜單。Clear@2,30Say'**************'@3,30Say'學(xué)籍檔案管理系統(tǒng)'@4,30Say'1.建立數(shù)據(jù)表'@5,30Say'2.添加數(shù)據(jù)'@6,30Say'3.查詢數(shù)據(jù)'@7,30Say'4.退出系統(tǒng)'@8,30Say'**************'@11,30Say"請輸入相應(yīng)的操作序號:"GetARead第十九頁,共七十三頁,2022年,8月28日二、清屏與注釋語句1.清屏語句
Clear
清除屏幕上所有顯示的內(nèi)容。2.注釋語句
Note<注釋內(nèi)容>*<注釋內(nèi)容>&&<注釋內(nèi)容>
Note和“*”注釋語句在程序中單獨作為一行,作為程序的注釋。
&&注釋語句一般寫在命令的后面,作為該命令的注釋。第二十頁,共七十三頁,2022年,8月28日三、終止程序執(zhí)行語句1.Return或Cancel
終止程序的執(zhí)行,關(guān)閉打開的命令文件,返回到Foxpro系統(tǒng)的命令窗口。2.Quit
終止程序的執(zhí)行,關(guān)閉打開的命令文件,返回到windows操作系統(tǒng)狀態(tài)。3.Retry
終止程序的執(zhí)行,返回到調(diào)用行本身,可以實現(xiàn)程序的重復(fù)調(diào)用。第二十一頁,共七十三頁,2022年,8月28日8-3結(jié)構(gòu)化程序設(shè)計概述所謂結(jié)構(gòu)化,就是指程序或算法的控制結(jié)構(gòu)必須并且只能由順序結(jié)構(gòu),分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)所構(gòu)成,程序的執(zhí)行是由這三種結(jié)構(gòu)來控制的。這三大基本程序結(jié)構(gòu)可以設(shè)計任何復(fù)雜問題的程序。一、順序結(jié)構(gòu)程序設(shè)計順序結(jié)構(gòu)是最基本、最普通的結(jié)構(gòu)形式。運行時,也是按照命令書寫時的先后次序來執(zhí)行,在程序執(zhí)行的過程中不改變命令執(zhí)行次序的一種結(jié)構(gòu)。第二十二頁,共七十三頁,2022年,8月28日例9-15:編寫一個求梯形面積的程序。
Input"請輸入梯形的上底:"ToMInput"請輸入梯形的下底:"ToNInput"請輸入梯形的高:"ToH?"梯形面積=",Str((M+N)*H/2,10,2)Return例9-16:編寫一個在“學(xué)生檔案表”中查詢年齡大于18歲的98級浙江籍的學(xué)生記錄的程序(注意:假設(shè)數(shù)據(jù)表字段中只有出生日期而無年齡字段、學(xué)號前二位為年級)。ClearUse學(xué)生檔案表ListForYear(Date())-Year(出生日期)>23.And.Subs(學(xué)號,1,2)='98'.And.籍貫='浙江'UseReturn第二十三頁,共七十三頁,2022年,8月28日二、分支選擇結(jié)構(gòu)
編寫順序結(jié)構(gòu)程序雖然簡單,但在實際應(yīng)用中,經(jīng)常需要對事物做出一定的判斷,并依據(jù)判斷的結(jié)果采取不同的處理行為。例如:求圓的面積,對半徑要做處判斷,是否大于0,如果是才能參加運算,否則不能運算,輸出參數(shù)錯誤信息。分支結(jié)構(gòu)有三種基本格式:單分支選擇、二分支選擇(選擇函數(shù))和多分支選擇。第二十四頁,共七十三頁,2022年,8月28日1.單分支選擇
If<條件表達式><語句序列1>Endif<語句序列2>Return參數(shù)說明:◆單分支選擇結(jié)構(gòu)是當(dāng)條件表達式為真時,執(zhí)行<語句序列1>,然后,再執(zhí)行EndIf后面的<語句序列2>。如果條件表達式為假,則直接執(zhí)行EndIf后面的<語句序列
2>?!鬒F和EndIf必須成對出現(xiàn),缺一不可?!?lt;條件表達式>可以是表達式或表達式的邏輯組合,表達式的值必須是邏輯值。第二十五頁,共七十三頁,2022年,8月28日例9-17:從鍵盤上輸入一個數(shù),若是偶數(shù),則輸出。
Input“請輸入數(shù)據(jù):”ToXIfInt(X/2)=X/2?X,”為偶數(shù)”
EndifReturn例9-18:在學(xué)生檔案表中,查詢王啟明的籍貫是否為“江西”。如果是,則輸出本記錄的姓名、學(xué)號、班級和年齡。
ClearUse學(xué)生檔案表
LocateFor姓名="王啟明"&&定位姓名為王啟明的記錄
If籍貫="江西"?"姓名:",姓名,"學(xué)號:",學(xué)號,"班級:",班級,"年齡:",年齡
EndifUse第二十六頁,共七十三頁,2022年,8月28日例9-19:任意輸入三角形三邊,求此三角形的面積。Input"輸入三角形的a邊:"ToAInput"輸入三角形的b邊:"ToBInput"輸入三角形的c邊:"ToCIfA+B>C.And.B+C>A.And.C+A>BP=(A+B+C)/2S=Sqrt(P*(P-A)*(P-B)*(P-C))?"三角形的面積為:",SEndifReturn第二十七頁,共七十三頁,2022年,8月28日以上程序并不完善,即當(dāng)條件不滿足時,程序中不能做出進一步的處理。這就說明單分支的功能是有限的,不能完善地解決分支處理問題。而二分支選擇結(jié)構(gòu)就可以處理好這個問題。2.二分支選擇結(jié)構(gòu)
If〈條件表達式〉〈A系列命令〉Else〈B系列命令〉Endif〈D系列命令〉Return第二十八頁,共七十三頁,2022年,8月28日二分支選擇結(jié)構(gòu),首先判斷〈條件表達式〉的邏輯值,若條件為“真”時,執(zhí)行〈A系列命令〉。然后,再執(zhí)行ENDIF后面的〈D系列命令〉。若條件為“假”時,執(zhí)行Else后面的〈B系列命令〉。然后,再執(zhí)行ENDIF后面的〈D系列命令〉。第二十九頁,共七十三頁,2022年,8月28日例9-20:當(dāng)行李重量W<=20Kg時,每公斤按0.15元計算,當(dāng)重量>20KG時,其超過部分則加倍計算收費。
Input“請輸入行李重量:”ToWIfW<=20Y=W*0.15ElseY=20*0.15+(W-20)*0.3Endif?“運費y=”,YReturn第三十頁,共七十三頁,2022年,8月28日例9-21:用二分支選擇結(jié)構(gòu)完善例9-19程序。Input"輸入三角形的a邊:"ToAInput"輸入三角形的b邊:"ToBInput"輸入三角形的c邊:"ToCIfA+B>C.And.B+C>A.And.C+A>BP=(A+B+C)/2S=Sqrt(P*(P-A)*(P-B)*(P-C))?"三角形的面積為:",SElse?"輸入的邊長有錯,無法構(gòu)成三角形!"EndifReturn第三十一頁,共七十三頁,2022年,8月28日思考:從鍵盤上輸入一個整數(shù),判斷該數(shù)是否滿足(被3除余2、被5除余3)設(shè)計步驟:輸入數(shù)值、判斷條件、輸出結(jié)果第三十二頁,共七十三頁,2022年,8月28日3.IIF()選擇函數(shù)
IIF()函數(shù)是雙分支選擇語句If—Else—Endif的簡單形式。在某些情況下,可以用IIF()函數(shù)代替If-Else—Endif語句,從而簡化條件描述,提高程序的執(zhí)行速度。IIF(<條件表達式>,<表達式1>,<表達式2>)參數(shù)說明:◆若<條件表達式>的值為真,則函數(shù)返回<表達式1>的值。否則,返回<表達式2>的值。返回值的類型可以是字符型、日期型、數(shù)值型和邏輯型?!?lt;表達式1>與<表達式2>的數(shù)據(jù)類型必須是一致。第三十三頁,共七十三頁,2022年,8月28日例9-23:在工資管理數(shù)據(jù)表中,如果基本工資小于700時,將基本工資加150。否則,加120。Use工資管理數(shù)據(jù)表ReplAll基本工資With基本工資+iif(基本工資<700,150,120)例9-24:閱讀程序,分析結(jié)果。連續(xù)執(zhí)行下列命令之后,輸出結(jié)果是。SetExactOff&&非精確比較X="A"?IIF("A”=X,X-"BCD",X+"BCD")A)AB)BCDC)ABCDD)ABCD第三十四頁,共七十三頁,2022年,8月28日思考:INPUT"請輸入X的值(X>=0):"TOXX=IIF(X>=200,X+20,X+50)?"X=",XRETURN若程序運行時輸入100,則運行結(jié)果為?第三十五頁,共七十三頁,2022年,8月28日4.分支語句的嵌套對于二分支以上的問題,二分支的結(jié)構(gòu)也不能解決,它需要使用分支語句的嵌套。VFP中允許在程序的任何位置進行嵌套。
第三十六頁,共七十三頁,2022年,8月28日注意層次關(guān)系,要求各個層次的IF語句之間不能交叉,每一層的If、Else以及EndIf必須一一對應(yīng)。當(dāng)然,這種分支語句嵌套結(jié)構(gòu),在編寫的過程中,稍不注意就會使層次交叉。在VFP中提供了更為簡單方便的多重分支結(jié)構(gòu)。第三十七頁,共七十三頁,2022年,8月28日例9-25:成績用優(yōu)秀(>90)、良好(80-90)、中(70-80)及格(60-70)與不及格(<60)來劃分的,當(dāng)你輸入一名同學(xué)的分?jǐn)?shù)后就輸出該同學(xué)的成績等級P185input"請輸入該同學(xué)的分?jǐn)?shù)"tocjifcj>=90?"你的成績是:優(yōu)秀"elseifcj>=80?"你的成績是:良好"elseifcj>=70?"你的成績是:中"elseifcj>=60?"你的成績是:及格"else?"你的成績是:不及格"endifendifendifendif第三十八頁,共七十三頁,2022年,8月28日習(xí)題:編寫程序,計算函數(shù)Y的值。
1/x+5x>0Y=10x=0X^2+12x<0第三十九頁,共七十三頁,2022年,8月28日5.多重分支選擇結(jié)構(gòu)雖然可用IF語句嵌套的方式解決多分支選擇問題。但是,如果選擇的分支很多,則編寫的程序可讀性差且易出錯。這時,一般使用DOCASE-ENDCASE多重分支選擇結(jié)構(gòu)來解決。第四十頁,共七十三頁,2022年,8月28日第四十一頁,共七十三頁,2022年,8月28日參數(shù)說明:◆執(zhí)行多重分支選擇結(jié)構(gòu)時,會依次判斷<條件表達式1>至<條件表達式N>的邏輯值,只要一遇到條件表達式為真時,就執(zhí)行該條件表達式下面的語句序列。執(zhí)行結(jié)束后,立即轉(zhuǎn)向執(zhí)行Endcase之后的語句。其余的Case語句,即使條件成立,也不執(zhí)行判斷。當(dāng)所有的Case語句條件都不成立時,如果有Otherwise選項,則執(zhí)行Otherwise選項下面的語句。否則,轉(zhuǎn)向執(zhí)行Endcase之后的語句?!鬌oCase—Endcase必須配套。◆DoCase與第一個Case之間不允許插入任何可執(zhí)行語句。第四十二頁,共七十三頁,2022年,8月28日例9-26、用多分支選擇結(jié)構(gòu)改寫9-25(學(xué)生成績),其程序為:CLEARINPUT"請輸入該同學(xué)的分?jǐn)?shù):"TOfsDOCASECASEfs<60?"你的成績?yōu)椋翰患案?CASEfs>=60andfs<70?"你的成績?yōu)椋杭案?CASEfs>=70andfs<80?"你的成績?yōu)椋褐?CASEfs>=80andfs<90?"你的成績?yōu)椋毫己?OTHERWISE?"你的成績?yōu)椋簝?yōu)秀"ENDCASE第四十三頁,共七十三頁,2022年,8月28日法二:CLEARINPUT"請輸入該同學(xué)的分?jǐn)?shù):"TOfsDOCASECASEfs<60?"你的成績?yōu)椋翰患案?CASEfs>=60?"你的成績?yōu)椋杭案?CASEfs>=70?"你的成績?yōu)椋褐?CASEfs>=80?"你的成績?yōu)椋毫己?OTHERWISE?"你的成績?yōu)椋簝?yōu)秀"ENDCASE法一:CLEARINPUT"請輸入該同學(xué)的分?jǐn)?shù):"TOfsDOCASEcasefs>90?"你的成績?yōu)椋簝?yōu)秀"CASEfs>=80?"你的成績?yōu)椋毫己?CASEfs>=70?"你的成績?yōu)椋褐?CASEfs>=60?"你的成績?yōu)椋杭案?OTHERWISE?"你的成績?yōu)椋翰患案?ENDCASE第四十四頁,共七十三頁,2022年,8月28日例9-27、利用DOCASE…ENDCASE語句實現(xiàn)菜單選擇。第四十五頁,共七十三頁,2022年,8月28日例9-28、執(zhí)行下面的程序,當(dāng)輸入10之后,輸出的結(jié)果是________。INPUT'請任意輸入一個數(shù):X='TOXDOCASECASEX>10Y=2*X+5casex>15andx<20y=x+5OTHERWISEY=10*X-5ENDCASE?"Y=",Y第四十六頁,共七十三頁,2022年,8月28日settalkoffclearaa=1docase?'12345'caseaa=1bb=1endcase?bbreturn思考:
閱讀下面程序,輸出的結(jié)果是________第四十七頁,共七十三頁,2022年,8月28日§4.循環(huán)結(jié)構(gòu)程序設(shè)計
我們已經(jīng)學(xué)習(xí)了順序結(jié)構(gòu)和分支結(jié)構(gòu),這種結(jié)構(gòu)的特點是任何一條語句至多只執(zhí)行一次,但是在處理實際問題的過程中,用這種結(jié)構(gòu)來編寫程序就長得不能忍受。比如:計算S=1+2+3+4+5+……+1000就需要1001條語句。
S=0S=S+1S=S+2S=S+3
。。。。。。。。實際上這就是一種重復(fù)循環(huán)操作,F(xiàn)oxPro提供了這種循環(huán)結(jié)構(gòu)程序設(shè)計。事實上70%以上的實際問題的處理過程都需要使用循環(huán)結(jié)構(gòu),重點掌握循環(huán)結(jié)構(gòu)程序設(shè)計是非常重要的第四十八頁,共七十三頁,2022年,8月28日
在FoxPro中,循環(huán)結(jié)構(gòu)有三種:條件循環(huán)(DOWHILE…ENDDO)
計數(shù)循環(huán)(FOR…ENDFOR)
庫文件掃描循環(huán)(SCAN…ENDSCAN)
第四十九頁,共七十三頁,2022年,8月28日
⒈
條件循環(huán)
事先不知道循環(huán)次數(shù)的事件,用條件循環(huán)較好。⑴
格式:
DOWHILE〈條件表達式〉〈循環(huán)體語句〉
<修改條件表達式語句>ENDDO(2)流程圖:第五十頁,共七十三頁,2022年,8月28日⑶
說明:①
DOWHILE<條件表達式>是循環(huán)語句的起始語句,ENDDO是循環(huán)語句的終端語句,必須配套使用;中間是循環(huán)體。②
循環(huán)初值中的條件表達式可以是算術(shù)表達式,例如:X<=100等,可以是關(guān)系表達式,例如:A<B等,也可以是邏輯表達式。即凡符合FoxPro系統(tǒng)的一切表達式都可以。
③
修改循環(huán)變量的值,防止死循環(huán)。注意:
1.在對數(shù)據(jù)庫進行操作時,必須用相應(yīng)的命令來控制記錄指針的移動,如SKIP、CONTINUE.2.<循環(huán)體語句序列>中,還可以包含另一種循環(huán)結(jié)構(gòu),也就是說WHILE循環(huán)能嵌套,但不能出現(xiàn)交叉。第五十一頁,共七十三頁,2022年,8月28日(4)循環(huán)程序的五個主要部分初始部分:寫在起始語句前,給循環(huán)變量賦初值。起始語句:控制循環(huán)正常運行。工作部分:循環(huán)體部分,完成循環(huán)的主要工作。修改部分:保證循環(huán)體在循環(huán)的過程中,使控制循環(huán)的條件能按一定的規(guī)律變化,修改循環(huán)變量的值,防止死循環(huán)。在對數(shù)據(jù)庫操作時,用SKIP、CONTINUE;當(dāng)條件表達式是關(guān)系表達式時用K=K+1來修改循環(huán)變量的值。結(jié)束部分:循環(huán)的結(jié)束,退出循環(huán),執(zhí)行ENDDO后面的語句。第五十二頁,共七十三頁,2022年,8月28日(5)
例題
例1:任意輸入10個自然數(shù),編程求其和及平均值。分析:依題意用循環(huán)控制輸入10個自然數(shù)并求和,故設(shè)置一個累加器sum和循環(huán)計數(shù)器k。
第五十三頁,共七十三頁,2022年,8月28日例題2、求出XSDA.DBF數(shù)據(jù)庫中99212、98321和其他班級的人數(shù)。(DOWHILE和DOCASE嵌套)例題3、求12+22+32+...........+1002的和例題4、求1到100之間的奇數(shù)和。第五十四頁,共七十三頁,2022年,8月28日習(xí)題、執(zhí)行以下程序,屏幕上顯示的結(jié)果是_______。SETTALKOFFCLEARNO=6DOWHILENO>0@7-NO,3SAYSTR(NO,1)NO=NO-1ENDDORETURN第五十五頁,共七十三頁,2022年,8月28日⒉
帶轉(zhuǎn)移的條件循環(huán)結(jié)構(gòu)
在條件循環(huán)中,還有另外兩種選項,在循環(huán)體中加入EXIT或LOOP語句。它們常與分支結(jié)構(gòu)一起使用,其形式如下:⑴
格式:
DOWHILE〈條件1〉
〈語句行序列1〉
IF〈條件2〉
EXIT|LOOP
ENDIF
〈語句行序列2〉
ENDDO第五十六頁,共七十三頁,2022年,8月28日⑶
說明:①
在循環(huán)語句中的LOOP語句(短路循環(huán)),其作用是終止本次循環(huán)的執(zhí)行。返回DOWHILE語句,使LOOP后面的語句在這一次循環(huán)中不被執(zhí)行,它可出現(xiàn)在循環(huán)體中的任意位置。②
在循環(huán)體中的EXIT語句是一種強制退出循環(huán)體的語句。當(dāng)執(zhí)行到該語句時,不管循環(huán)語句運行在什么地方,也不管循環(huán)次數(shù)是否到,都強制轉(zhuǎn)去執(zhí)行ENDDO后面的語句。第五十七頁,共七十三頁,2022年,8月28日④
例題:例1:求1到100之間的奇數(shù)和。(P193)分析:判斷某一數(shù)N是否為奇數(shù),只要INT(N/2)=N/2,即該數(shù)除以2的商與取整后的結(jié)果一致,該數(shù)為偶數(shù),否則為奇數(shù)。通過計數(shù)器N=N+1產(chǎn)生0~100之間的數(shù)據(jù),逐一進行判斷,當(dāng)為偶數(shù)時,用LOOP語句返回DOWHILE起始循環(huán),當(dāng)為奇數(shù)時進行累加求和。例2:在學(xué)生檔案(XSDA.DBF)中,按姓名查找某一同學(xué),找到后輸出該同學(xué)的情況,否則輸出“查無此人”;要求進行多次查找。第五十八頁,共七十三頁,2022年,8月28日習(xí)題:閱讀程序,寫結(jié)果。STORE0TON,SDOWHILE.T.N=N+1IFmod(N,3)=1S=S+NENDIFIFN>=10EXITENDIFENDDO?“S=”,SRETURN第五十九頁,共七十三頁,2022年,8月28日根據(jù)例題,我們可以看出,在應(yīng)用程序中常用的循環(huán)語句條件有以下幾種:①
對于循環(huán)次數(shù)已知的情況,常用模式為:
INPUT"N="TON
K=1&&置K的初始值
DOWHILEK<=N
《循環(huán)體語句》
K=K+1&&修改循環(huán)變量值
ENDDO②在“永真”循環(huán)中,用結(jié)束標(biāo)志,通過EXIT退出循環(huán),
INPUT"X="TOxDOWHILE
.T.
IF<x結(jié)束標(biāo)志>
EXIT
ENDIF
[改變x的值的語句]ENDDO第六十頁,共七十三頁,2022年,8月28日③
對數(shù)據(jù)庫的操作,常用模式為:
USE〈數(shù)據(jù)庫名〉
[置初始值]
DOWHILE
.NOT.EOF()
[執(zhí)行某一任務(wù)的語句系列]
SKIP
ENDDO④
對某些重復(fù)性的工作,由用戶隨意確定,可多可少。
yn="Y"DOWHILEUPPER(yn)="Y"[執(zhí)行某一任務(wù)的語句系列]
WAIT"還繼續(xù)嗎(Y/N)?"TOynENDDO第六十一頁,共七十三頁,2022年,8月28日⒊
計數(shù)循環(huán)
對于事先已經(jīng)知道某一個事件需要循環(huán)多少次時,往往使用FOR循環(huán)結(jié)構(gòu)。
⑴
結(jié)構(gòu):
FOR<循環(huán)變量>=(初值)
TO(終值)〉[STEP(步長)]
〈循環(huán)體語句〉[LOOP]
[EXIT]
ENDFOR第六十二頁,共七十三頁,2022年,8月28日⑵
功能:從〈初值〉到〈終值〉,循環(huán)執(zhí)行FOR和ENDFOR之間的語句。該結(jié)構(gòu)常用于已知循環(huán)次數(shù)的數(shù)值運算。⑶
說明:①
FOR表示循環(huán)的開始,ENDFOR表示循環(huán)的結(jié)束,兩者之間是循環(huán)體。②〈循環(huán)變量〉:是循環(huán)計數(shù)器,是數(shù)值型的內(nèi)存變量,不必先定義。③步長:〈循環(huán)變量〉自動按步長增加,它為可選項,省略,系統(tǒng)默認(rèn)步長為1。若為正值,則為遞增型循環(huán);若為負(fù)值,則為遞減型循環(huán)。
④
LOOP和EXIT:為可選項,LOOP表示轉(zhuǎn)到FOR執(zhí)行下一個循環(huán)操作,EXIT表示強行結(jié)束循環(huán)。
第六十三頁,共七十三頁,2022年,8月28日(4)
例題
例題1、FORK=1TO4?"k=",kENDFORRETURN例題2、FORK=4TO1STEP–1?"k=",kENDFORRETURN第六十四頁,共七十三頁,2022年,8月28日例題3、求1…100的累加和。例題4、完成下面實現(xiàn)計算P=1+1/(2*2)+...1/(10*10)的程序
SETTALKOFFCLEARP=0FOR
N=1TO10
ENDFOR?PRETURN第六十五頁,共七十三頁,2022年,8月28日⒋
庫文件掃描循環(huán)在數(shù)據(jù)庫應(yīng)用程序中,經(jīng)常要對數(shù)據(jù)表文件中符合條件的記錄逐個進行某種統(tǒng)計操作。雖然可用DOWHILEnoteof()來處理,但是系統(tǒng)還提供了另外一種更好的循環(huán)結(jié)構(gòu),即庫文件掃描循環(huán)。它內(nèi)含有EOF()、SKIP的作用,不需移動記錄指針。⑴
結(jié)構(gòu):
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年生活垃圾焚燒爐項目建議書
- 產(chǎn)業(yè)研究報告-2024年中國錄播系統(tǒng)行業(yè)發(fā)展現(xiàn)狀、市場規(guī)模、投資前景分析(智研咨詢)
- 腦卒中各種量表培訓(xùn)
- 2025年碳纖維預(yù)浸布項目合作計劃書
- 麥秸板企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 2025年干部休養(yǎng)所服務(wù)項目建議書
- 硫酸鋁銨企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 活性酵母企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 母乳儲存袋與吸奶器套裝企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 合成甜味劑企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 采礦學(xué)-I課件第七章-主要開拓巷道類型和位置的選擇
- 人員招收、招聘來源及人員穩(wěn)定性保障措施
- 小學(xué)科學(xué)教育科學(xué)三年級下冊植物的生長變化開花了PPT
- 生育保險待遇申請表
- 春節(jié)復(fù)工復(fù)產(chǎn)安全交底
- 四年級下冊綜合實踐活動教案 跟著節(jié)氣去探究 全國通用
- 培智康復(fù)課教案模板(共7篇)
- 楊光斌《政治學(xué)導(dǎo)論》考研重點整理(自己整理的超實用)
- CCS電氣電子產(chǎn)品型式認(rèn)可試驗指南
- 員工面試登記表
- rcs-9611c-線路保護測控裝置-技術(shù)使用說明
評論
0/150
提交評論