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