程序設(shè)計初步_第1頁
程序設(shè)計初步_第2頁
程序設(shè)計初步_第3頁
程序設(shè)計初步_第4頁
程序設(shè)計初步_第5頁
已閱讀5頁,還剩121頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1程序設(shè)計初步程序設(shè)計初步2程序設(shè)計基本內(nèi)容程序設(shè)計基本內(nèi)容程序文件的建立、運行和修改程序文件的建立、運行和修改順序結(jié)構(gòu)程序設(shè)計順序結(jié)構(gòu)程序設(shè)計選擇結(jié)構(gòu)程序設(shè)計選擇結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計數(shù)組數(shù)組子程序及變量的局域性子程序及變量的局域性3程序文件程序文件 由命令組成,計算機可以自動執(zhí)行 可由任何編輯軟件生成(VFP本身有編輯器) 文件名:程序源文件為 .PRG 編譯后的程序文件 .FXP4程序設(shè)計概述進行程序設(shè)計一般要經(jīng)過以下步驟:1分析問題或任務(wù),總結(jié)或抽象出問題的數(shù)學(xué)模型。2根據(jù)數(shù)學(xué)模型確定解決問題的算法思想。3根據(jù)算法思想確定要建立的數(shù)據(jù)表或數(shù)據(jù)庫的基本結(jié)構(gòu)及其數(shù)據(jù)表

2、之間的關(guān)系。4畫出程序流程圖。5程序設(shè)計概述5編寫程序,實現(xiàn)功能要求,并在計算機上調(diào)試通過。6用典型數(shù)據(jù)對所編寫的程序進行測試,驗證程序的可靠性。發(fā)現(xiàn)問題進行修改,修改后再進行調(diào)試,直到程序正確運行為止。7編寫使用說明書,整理有關(guān)資料,進行總結(jié)。6 程序文件的建立、運行和修改程序文件的建立、運行和修改一、建立程序文件一、建立程序文件二、運行程序文件二、運行程序文件三、修改程序文件三、修改程序文件7建立程序文件建立程序文件一、一、菜單方式菜單方式1. 1. 單擊菜單單擊菜單 文件文件新建新建 或者單擊或者單擊常用工具欄的常用工具欄的 新建新建 按鈕按鈕, ,再單擊再單擊 程序程序 單選按鈕單選按

3、鈕, ,最后單擊最后單擊 新文件新文件 大按鈕。大按鈕。2. 2. 輸入程序輸入程序, ,最后保存文件。最后保存文件。如:建立如下命令文件如:建立如下命令文件cx1.prgcx1.prg。 8舉例 a=2 b=5 c=a+b ? a=,a ? b=,b ? a,+,b,=,c9注意以下幾點:(1 1)一個命令語句中只能有一個命令)一個命令語句中只能有一個命令動詞;動詞;(2 2)每輸入完一個語句按)每輸入完一個語句按 回車回車 鍵表鍵表示該語句結(jié)束;示該語句結(jié)束;(3 3)程序中用到的所有標(biāo)點符號一律)程序中用到的所有標(biāo)點符號一律用半角符號;用半角符號;(4 4)每一個程序一般應(yīng)有一個結(jié)束語)

4、每一個程序一般應(yīng)有一個結(jié)束語句句, ,以表示該程序的結(jié)束。以表示該程序的結(jié)束。10建立程序文件二、命令方式二、命令方式功能:打開一個編輯窗口功能:打開一個編輯窗口, ,從中可以修從中可以修改或創(chuàng)建程序文件。改或創(chuàng)建程序文件。語法:語法:MODIFY COMMAND MODIFY COMMAND |?NOEDITNOEDIT如:如:MODIFY COMMAND CX2MODIFY COMMAND CX2輸入程序后保存文件。輸入程序后保存文件。11運行程序文件一、菜單方式一、菜單方式 單擊!常用工具欄按鈕。單擊!常用工具欄按鈕。 單擊單擊程序程序執(zhí)行執(zhí)行,選擇要執(zhí)行的命令文選擇要執(zhí)行的命令文件。件

5、。二、命令方式二、命令方式 功能:執(zhí)行一個功能:執(zhí)行一個Visual FoxProVisual FoxPro程序或程序或過程。過程。 語法:語法:DO DO 12修改程序文件一、菜單方式一、菜單方式 單擊菜單單擊菜單 文件文件打開打開 或單擊或單擊常用工具欄上的常用工具欄上的 打開打開 按鈕按鈕, ,啟動啟動 打打開開 對話框。在該對話框中選擇想修改對話框。在該對話框中選擇想修改的程序文件名后單擊的程序文件名后單擊 確定確定 按鈕或直按鈕或直接雙擊想修改的程序文件名。接雙擊想修改的程序文件名。二、命令方式二、命令方式 使用建立命令文件同樣的命令。使用建立命令文件同樣的命令。13順序結(jié)構(gòu)程序設(shè)計

6、5 5 任意類型鍵盤輸入命令任意類型鍵盤輸入命令I(lǐng)NPUTINPUT1 1 順序結(jié)構(gòu)程序設(shè)計的概念順序結(jié)構(gòu)程序設(shè)計的概念2 2 輸出命令輸出命令?|?|?3 3 輸出打印命令輸出打印命令?4 4 內(nèi)存變量內(nèi)部賦值命令內(nèi)存變量內(nèi)部賦值命令STORE|=STORE|=6 6 字符型鍵盤輸入命令字符型鍵盤輸入命令A(yù)CCEPTACCEPT14順序結(jié)構(gòu)程序設(shè)計7 7 程序暫停、等待接收單字符命令程序暫停、等待接收單字符命令WAITWAIT8 8 計算表達式值命令計算表達式值命令= =9 9 終止程序運行命令終止程序運行命令CANCELCANCEL10 10 程序注釋命令程序注釋命令11 11 文本輸出命

7、令文本輸出命令TEXTTEXTENDTEXTENDTEXT12 12 輸出文本行信息命令輸出文本行信息命令|13 13 輸入輸出命令輸入輸出命令15順序結(jié)構(gòu)程序設(shè)計的概念 順序結(jié)構(gòu)是一種線性結(jié)構(gòu)順序結(jié)構(gòu)是一種線性結(jié)構(gòu),是程序設(shè)計中最基礎(chǔ)的結(jié)構(gòu)是程序設(shè)計中最基礎(chǔ)的結(jié)構(gòu),該結(jié)構(gòu)該結(jié)構(gòu)中各操作塊按照各自出現(xiàn)的先后順中各操作塊按照各自出現(xiàn)的先后順序序,依次逐塊執(zhí)行。依次逐塊執(zhí)行。ABC162 輸出命令?|?功能:計算一批表達式的值功能:計算一批表達式的值, ,然后按指定格然后按指定格式在式在Visual FoxProVisual FoxPro主窗口、用戶自定義主窗口、用戶自定義窗口或打印機輸出表達式的

8、值。窗口或打印機輸出表達式的值。語法:語法:?|? ?|? PICTUREPICTUREFUNCTIONFUNCTIONVVATATFONTFONT,STYLESTYLE 如如: : ? 3*45/26 AT 2 FONT COURIER, 34 STYLE BI173 輸出打印命令?功能:將輸出結(jié)果直接送到打印機上。功能:將輸出結(jié)果直接送到打印機上。語法:語法:? ? 字符表達式字符表達式 184 內(nèi)存變量內(nèi)部賦值命令STORE|=功能:建立內(nèi)存變量功能:建立內(nèi)存變量, ,并把一個數(shù)據(jù)保并把一個數(shù)據(jù)保存到一個或多個內(nèi)存變量中。存到一個或多個內(nèi)存變量中。語法:語法: STORE STORE T

9、O TO = 如:如:STOR 34STOR 34* *56/8 TO X56/8 TO X Y=45/3-672 Y=45/3-67219說明:1.1.內(nèi)存變量的類型由內(nèi)存變量的類型由 的類型而定。的類型而定。 STORE 1.0 TO M2,M3STORE 1.0 TO M2,M3 STORE .T. TO L1 STORE .T. TO L1 STORE 6 STORE 6* *2=18 TO L22=18 TO L2 C1=xyzabc C1=xyzabc L3=.F. L3=.F. Store 99/05/06 to D1 Store 99/05/06 to D1 D2=date()

10、 D2=date()20說明: 2. 2. 可以給變量重新賦值可以給變量重新賦值, ,將以新值替代將以新值替代舊值。例:舊值。例: X=8X=8 ?X ?X X=16 X=16 ?X ?X X=X=abcdabcd ? X ? X21說明:3.STORE3.STORE可以給多個變量同時賦同一個可以給多個變量同時賦同一個值值,=,=只能給一個變量賦值。如果給多只能給一個變量賦值。如果給多個變量賦不同的值個變量賦不同的值, ,必須使用多條必須使用多條STORE|=STORE|=命令。命令。如:如:STOR 0 TO A,B,CSTOR 0 TO A,B,C A=0 A=0 B=0 B=0 C=0

11、C=022說明: 4 4引用變量的值不會改變被引用變量引用變量的值不會改變被引用變量的值。的值。如:如:A=5A=5B=AB=AC=BC=B?A,B,C ?A,B,C 23說明:5 5數(shù)值型變量可以與自身相加數(shù)值型變量可以與自身相加, ,字符型字符型變量可以與自身相連接。例:變量可以與自身相連接。例:X=10X=10X=X+1X=X+1?X X X=X+12X=X+12?X X C=GoodC=GoodC=C+ Morning! C=C+ Morning! ?C ?C 24舉例例例6-16-1:已知:已知X=16,Y=18,X=16,Y=18,編寫程序編寫程序, ,將它將它們的值互換后輸出。程

12、序如下:們的值互換后輸出。程序如下:CLEAR CLEAR X=16X=16Y=18Y=18T=XT=XX=YX=YY=TY=T?X=,X,Y=,Y?X=,X,Y=,YCANCELCANCEL程序運行結(jié)果:程序運行結(jié)果:X=18 Y=16X=18 Y=16 X Y TX Y T161616 1816 1816 18 1616 18 1618 18 1618 18 1618 16 1618 16 16256.2 順序結(jié)構(gòu)程序設(shè)計例例6-16-1:已知:已知X=16,Y=18X=16,Y=18,編寫程序,將它們的,編寫程序,將它們的值互換后輸出。程序如下:值互換后輸出。程序如下:CLEARCLEA

13、RX=16X=16Y=18Y=18T=XT=XX=YX=YY=TY=T?X=,X,Y=,Y,T=,T ?X=,X,Y=,Y,T=,T CANCELCANCEL清 屏X=16Y=18T=XX=YY=T輸出X、Y、T程序結(jié)束26舉例例例6-26-2:雞兔同籠:雞兔同籠, ,已知雞兔總頭數(shù)為已知雞兔總頭數(shù)為1616(headsheads), ,總腳數(shù)為總腳數(shù)為4040(feetfeet), ,編寫編寫程序求雞兔各有多少。程序求雞兔各有多少。解:設(shè)雞為解:設(shè)雞為X X只只, ,兔為兔為Y Y只只, ,列出方程組為:列出方程組為: X+Y=H X+Y=H 解得:解得:X=X=(4H-F4H-F)/2/2

14、 2X+4Y=F Y= 2X+4Y=F Y=(F-2HF-2H)/2/2 程序如下:程序如下:27舉例H=16H=16F=40F=40X=(4X=(4* *H-F)/2H-F)/2Y=(F-2Y=(F-2* *H)/2H)/2?共有雞:共有雞:,x,x,只只 ?共有兔:共有兔:,y,y,只只 CANCELCANCEL結(jié)果為:結(jié)果為:共有雞:共有雞:12 12 只只共有兔:共有兔:4 4 只只285 任意類型鍵盤輸入命令I(lǐng)NPUT功能:建立內(nèi)存變量功能:建立內(nèi)存變量, ,并且用鍵盤輸入并且用鍵盤輸入的方式將數(shù)值型、字符型、邏輯型或的方式將數(shù)值型、字符型、邏輯型或日期型數(shù)據(jù)賦值給內(nèi)存變量。日期型數(shù)

15、據(jù)賦值給內(nèi)存變量。語法:語法:INPUTINPUTTO TO 例例6-36-3:已知圓半徑為:已知圓半徑為R,R,計算圓面積計算圓面積S S、球體積球體積V,V,球表面積球表面積F F(要求四舍五入保(要求四舍五入保留三位小數(shù))。公式分別為:留三位小數(shù))。公式分別為: S=r2 V=4/3r3 S=r2 V=4/3r3 F=4r2F=4r229程序如下:INPUT INPUT 請輸入圓半徑請輸入圓半徑R= TO R R= TO R S=ROUND(PI()S=ROUND(PI()* *R2,3) R2,3) V=ROUND(4/3V=ROUND(4/3* *PI()PI()* *R3,3)R3

16、,3)F=ROUND(4F=ROUND(4* *PI()PI()* *R2,3)R2,3)?圓面積為:圓面積為:,S,S?球體積為:球體積為:,V,V?球表面積為:球表面積為:,F,FCANCELCANCEL306 字符型鍵盤輸入命令A(yù)CCEPT功能:建立內(nèi)存變量功能:建立內(nèi)存變量, ,并用鍵盤輸入的并用鍵盤輸入的方式將字符型數(shù)據(jù)賦值給內(nèi)存變量。方式將字符型數(shù)據(jù)賦值給內(nèi)存變量。語法:語法:ACCEPT ACCEPT TO TO 例例6-46-4:假設(shè):假設(shè)JSDA.DBFJSDA.DBF數(shù)據(jù)表文件在數(shù)據(jù)表文件在A A盤盤根目錄下根目錄下, ,編寫一程序編寫一程序, ,打開數(shù)據(jù)表打開數(shù)據(jù)表JSD

17、A.DBF,JSDA.DBF,運行程序時輸入姓名運行程序時輸入姓名, ,并將并將該姓名的記錄內(nèi)容顯示出來。該姓名的記錄內(nèi)容顯示出來。31程序如下:SET DEFA TO A:SET DEFA TO A:USE JSDAUSE JSDAACCEPT ACCEPT 請輸入姓名:請輸入姓名: TO NAME TO NAMELOCATE ALL FOR LOCATE ALL FOR 姓名姓名=NAME=NAMEDISPLAYDISPLAYCancelCancel327 程序暫停、等待接收單字符命令WAIT功能:顯示一條提示并暫停程序運行功能:顯示一條提示并暫停程序運行, ,直到按下任一鍵或鼠標(biāo)按鍵直到

18、按下任一鍵或鼠標(biāo)按鍵, ,程序才程序才繼續(xù)執(zhí)行。繼續(xù)執(zhí)行。語法:語法:WAIT WAIT TO TO WINDOWAT WINDOWAT ,NOWAITCLEAR|NOCLEARTIMENOWAITCLEAR|NOCLEARTIMEOUTOUT33舉例例例6-56-5:用:用WAITWAIT命令暫停顯示。命令暫停顯示。ClearClearWait to aWait to a?a?a?1 Visual FoxPro?1 Visual FoxProWAIT WAIT 請稍候,按任意鍵繼續(xù)請稍候,按任意鍵繼續(xù) ?2 Visual FoxPro?2 Visual FoxProWAIT WAIT 這是查

19、看功能這是查看功能 WINDOW AT 10,10 WINDOW AT 10,10?3 Visual FoxPro?3 Visual FoxProWAIT WINDOW TIMEOUT 3WAIT WINDOW TIMEOUT 3CANCELCANCEL348 計算表達式值命令=語法:語法:=,2 功能:計算一個或多個表達式的值功能:計算一個或多個表達式的值, ,并并且不返回其值。常用于需要執(zhí)行一個且不返回其值。常用于需要執(zhí)行一個系統(tǒng)函數(shù)或用戶自定義函數(shù)的功能系統(tǒng)函數(shù)或用戶自定義函數(shù)的功能, ,但但不需要將該函數(shù)的返回值賦給一個內(nèi)不需要將該函數(shù)的返回值賦給一個內(nèi)存變量、數(shù)組或數(shù)組元素的情況下。

20、存變量、數(shù)組或數(shù)組元素的情況下。如為了進入插入狀態(tài)如為了進入插入狀態(tài), ,可輸入命令:可輸入命令:=insmode(.t=insmode(.t.).)359 終止程序運行命令CANCEL語法:語法:CANCELCANCEL功能:終止程序的運行功能:終止程序的運行, ,釋放所有局部釋放所有局部內(nèi)存變量內(nèi)存變量, ,返回到返回到 命令命令 窗口。窗口。3610 程序注釋命令一、行首注釋命令一、行首注釋命令NOTE|NOTE|* * 功能:在程序中加注釋行信息。功能:在程序中加注釋行信息。 語法:語法:NOTE|NOTE|* * 注釋內(nèi)容注釋內(nèi)容 二、行尾注釋命令二、行尾注釋命令&功能:在命

21、令語句的尾部加注釋信息。功能:在命令語句的尾部加注釋信息。語法:語法:&注釋注釋 例例6-66-6:計算發(fā)放工資中各種大小鈔票:計算發(fā)放工資中各種大小鈔票最少的程序。程序如下:最少的程序。程序如下:(L6_6.PRG)(L6_6.PRG)37NOTE NOTE 根據(jù)輸入的錢數(shù),計算各種面額根據(jù)輸入的錢數(shù),計算各種面額* * 鈔票張數(shù)最少的程序。鈔票張數(shù)最少的程序。INPUT INPUT 請輸入總錢款數(shù)量請輸入總錢款數(shù)量( (單位:元):單位:元): TO X & TO X & 單位為:元。單位為:元。Y100=int(x/100) &Y100=int(x/100

22、) &求求100100元最少張數(shù)元最少張數(shù)X=x-100X=x-100* *y100 &y100 &求剩余款額求剩余款額Y50=int(x/50) &Y50=int(x/50) &求求5050元最少張數(shù)元最少張數(shù)X=x-50X=x-50* *y50 &y50 &求剩余款額求剩余款額Y10=int(x/10) &Y10=int(x/10) &求求1010元最少張數(shù)元最少張數(shù)X=x-10X=x-10* *y10 &y10 &求剩余款額求剩余款額Y5=int(x/5) &Y5=int(x/5) &

23、求求5 5元最少張數(shù)元最少張數(shù)X=x-5X=x-5* *y5 &y5 &求剩余款額求剩余款額Y2=int(x/2) &Y2=int(x/2) &求求2 2元最少張數(shù)元最少張數(shù)X=x-2X=x-2* *y2 &y2 &求剩余款額求剩余款額Y1=int(xY1=int(x) &) &求求1 1元最少張數(shù)元最少張數(shù)X=x-y1 &X=x-y1 &求剩余求剩余 零頭零頭 款額款額38X=xX=x* *10 &10 &將將 零頭零頭 化為角化為角J5=int(x/5) &J5=int(x/5) &am

24、p;求求5 5角最少張數(shù)角最少張數(shù)X=x-5X=x-5* *j5 &j5 &求剩余款額求剩余款額J2=int(x/2) &J2=int(x/2) &求求2 2角最少張數(shù)角最少張數(shù)X=x-2X=x-2* *j2 &j2 &求剩余款額求剩余款額J1=int(xJ1=int(x) &) &求求1 1角最少張數(shù)角最少張數(shù)X=(x-j1)X=(x-j1)* *10 &10 &將剩余零頭化為分將剩余零頭化為分F5=int(x/5) &F5=int(x/5) &求求5 5分最少張數(shù)分最少張數(shù)X=x-5X=x-5*

25、 *f5 &f5 &求剩余款額求剩余款額F2=int(x/2) &F2=int(x/2) &求求2 2分最少張數(shù)分最少張數(shù)X=x-2X=x-2* *f2 &f2 &求剩余款額求剩余款額F1=int(xF1=int(x) &) &求求1 1分最少張數(shù)分最少張數(shù)* * 以下為輸出部分:以下為輸出部分:?100?100元票:元票:,y100,y100,張張 39?50?50元票:元票:,y50,y50,張張 ?10?10元票:元票:,y10,y10,張張 ?5?5元票:元票: ,y5,y5,張張 ?2?2元票:元票: ,y2,y2,張張

26、 ?1?1元票:元票: ,y1,y1,張張 waitwait?5?5角票:角票: ,j5,j5,張張 ?2?2角票:角票: ,j2,j2,張張 ?1?1角票:角票: ,j1,j1,張張 ?5?5分票:分票: ,f5,f5,張張 ?2?2分票:分票: ,f2,f2,張張 ?1?1分票:分票: ,f1,f1,張張 cancelcancel4011 文本輸出命令TEXTENDTEXT功能:在屏幕上顯示功能:在屏幕上顯示TEXTTEXT和和ENDTEXTENDTEXT之之間的所有文本信息。間的所有文本信息。語法:語法:TEXTTEXT文本信息文本信息ENDTEXTENDTEXT41舉例例例6-76-7

27、:利用:利用TEXTTEXTENDTEXTENDTEXT語句在屏語句在屏幕上輸出幕上輸出2121世紀(jì)是信息化時代!世紀(jì)是信息化時代! clearcleartexttext2121世紀(jì)是信息化時代!世紀(jì)是信息化時代!endtextendtextcancelcancel4212 輸出文本行信息命令|功能:輸出文本行信息。功能:輸出文本行信息。語法:語法: :輸出信息時:輸出信息時, ,輸出行以輸出行以回車符開頭?;剀嚪_頭。 :輸出信息時:輸出信息時, ,輸出行輸出行不以回車符開頭。不以回車符開頭。43舉例如輸入下面兩個命令:如輸入下面兩個命令: 計算機世界計算機世界 計算機世界計算機世界美好的明

28、天美好的明天執(zhí)行結(jié)果為:執(zhí)行結(jié)果為:計算機世界計算機世界計算機世界美好的世界計算機世界美好的世界441313、輸入輸出格式命令、輸入輸出格式命令顯示輸出并接受輸入的命令顯示輸出并接受輸入的命令(1) (1) SAY SAY GET GET PICTUREPICTURE 1 FUNCTIONFUNCTION 2 RANGERANGE (2)(2)READ &READ &激活激活getget語句語句, ,顯示并可以修改顯示并可以修改(3)(3)CLEAR GETS &CLEAR GETS &不激活不激活getget后后clear getsclear gets前的語句

29、前的語句, ,使其只顯示不能修改使其只顯示不能修改. .稱隔斷語句稱隔斷語句45.say.get.舉例舉例例:命令X=ASDFG 10,10 SAY ZIFU GET XCLEAR GETS READ例:打開JSDA.dbf表,顯示該表每個記錄的姓名,職稱,基本工資字段,其中基本工資范圍在2000元以內(nèi),要求以逗號格式顯示且保留兩位小數(shù)點,并且姓名只顯示不能修改. (L7-2.prg)46L7-2.PRGUSE JSDASCAN FOR NOT EOF() 0,0 SAY 姓名姓名: GET 姓名姓名CLEAR GETS 0,14 SAY 職稱職稱: GET 職稱職稱 0,32 SAY 基本工

30、資基本工資: GET 基本工資基本工資 RANGE 0,2000 PICTURE 9,999.99READENDSCANCANCEL47選擇結(jié)構(gòu)程序設(shè)計一、選擇結(jié)構(gòu)程序設(shè)計的概念一、選擇結(jié)構(gòu)程序設(shè)計的概念二、單條件選擇命令二、單條件選擇命令I(lǐng)FIF三、多分支選擇命令三、多分支選擇命令 DO CASEDO CASE48選擇結(jié)構(gòu)程序設(shè)計的概念 程序設(shè)計中的分支程序設(shè)計中的分支,是指在程序是指在程序中從某一程序塊分支出兩個或兩個以上中從某一程序塊分支出兩個或兩個以上相對獨立、彼此不同的子程序塊的現(xiàn)象相對獨立、彼此不同的子程序塊的現(xiàn)象,并稱這些子程序塊為它的分支。并稱這些子程序塊為它的分支。條件條件

31、A B49選擇結(jié)構(gòu)程序設(shè)計的概念一、雙分支選擇結(jié)構(gòu)一、雙分支選擇結(jié)構(gòu) 通常也稱為單條件雙分支選擇結(jié)構(gòu)通常也稱為單條件雙分支選擇結(jié)構(gòu), ,或或單條件選擇結(jié)構(gòu)。它僅描述具有兩個分單條件選擇結(jié)構(gòu)。它僅描述具有兩個分支的分支現(xiàn)象支的分支現(xiàn)象, ,是最簡單的選擇結(jié)構(gòu)。是最簡單的選擇結(jié)構(gòu)。二、多分支選擇結(jié)構(gòu)二、多分支選擇結(jié)構(gòu) 該分支機構(gòu)的特點是:從多個選該分支機構(gòu)的特點是:從多個選擇結(jié)構(gòu)中擇結(jié)構(gòu)中,選擇一個條件為真的路線作為選擇一個條件為真的路線作為程序執(zhí)行的路線。程序執(zhí)行的路線。50單條件選擇命令I(lǐng)F功能:該命令用來進行各種條件判斷功能:該命令用來進行各種條件判斷, ,使程使程序中的命令有條件的執(zhí)行。序

32、中的命令有條件的執(zhí)行。語法:語法:IF IF 命令組命令組11ELSEELSE 命令組命令組22ENDIFENDIFIFIFENDIFENDIFIFIFENDIFENDIF嵌套錯誤嵌套錯誤嵌套正確嵌套正確51舉例例例6-86-8:鐵路托運行李:鐵路托運行李, ,從甲地到乙地從甲地到乙地, ,按規(guī)按規(guī)定每張客票托運行李不超過定每張客票托運行李不超過5050公斤時公斤時, ,每每公斤公斤0.250.25元元, ,如超過如超過5050公斤公斤, ,超過部分按超過部分按每公斤每公斤0.450.45元計算。編寫一個程序元計算。編寫一個程序, ,把行把行李重量輸入計算機李重量輸入計算機, ,計算出運費計算

33、出運費, ,并打印并打印出付款清單。出付款清單。運費公式為:運費公式為:p=0.25p=0.25w w 當(dāng)當(dāng)W50W50p=50p=500.25+(w-50)0.25+(w-50)0.45 0.45 當(dāng)當(dāng)W W505052程序如下:Input Input 請輸入行李重量:請輸入行李重量: TO w TO wIF w=50IF w=50 P=0.25 P=0.25* *w wElseElse P=50 P=50* *0.25+(w-50)0.25+(w-50)* *0.450.45EndifEndif?行李重量為:行李重量為:,w,w?應(yīng)付運費為:應(yīng)付運費為:,p,pcancelcancel從鍵

34、盤輸入數(shù)據(jù)從鍵盤輸入數(shù)據(jù)WW10if x10 y=x3 y=x3elseelse if x=0 if x=0 y=x5 y=x5 else else y=x2 y=x2 endif endifendifendif?X?X的值為:的值為:,x,x?Y?Y的值為:的值為:,y,ycancelcancel55填空練習(xí):input input 請輸入請輸入X X的值:的值: to x to xif x10if x10 y=x3 y=x3elseelse if if &1 &1 y=x5 y=x5 else else &2 &2 endif endif?X的值為:的值為:

35、,x?Y的值為:的值為:,ycancel求表達式的值。求表達式的值。Y=x3 當(dāng)當(dāng)X10Y=X5 當(dāng)當(dāng)0X10Y=X2 當(dāng)當(dāng)X0程序如右,請?zhí)羁粘绦蛉缬?,請?zhí)羁?6例:已知系數(shù)例:已知系數(shù)a a、b b、c c,編寫程序,求一元二,編寫程序,求一元二次方程:次方程: axax2 2+bx+c=0+bx+c=0的根。的根。 問題分析:解上述方程:得到求解方程為:問題分析:解上述方程:得到求解方程為: 根據(jù)一元二次方程的系數(shù)根據(jù)一元二次方程的系數(shù)a a、b b、c c的取值,的取值,有以下幾種情況:有以下幾種情況:aacbbX24212571. 1. 當(dāng)當(dāng)a0a0時時, ,有兩個根。有兩個根。 當(dāng)

36、判別式當(dāng)判別式b b2 2-4ac0-4ac0時,有兩個不同的實根;時,有兩個不同的實根; 當(dāng)判別式當(dāng)判別式b b2 2-4ac=0-4ac=0時,有兩個相同的實根;時,有兩個相同的實根; 當(dāng)判別式當(dāng)判別式b b2 2-4ac0-4ac0時,有兩個不同的虛根。時,有兩個不同的虛根。2. 2. 當(dāng)當(dāng)a=0,b0a=0,b0時,有一個根。時,有一個根。3. 3. 當(dāng)當(dāng)a=0,b=0a=0,b=0時,方程無意義。時,方程無意義。根據(jù)分析,寫出程序:根據(jù)分析,寫出程序:58* *解方程解方程input a= to ainput a= to ainput b= to binput b= to binpu

37、t c= to cinput c= to cif a0if a0 delta=b2-4 delta=b2-4* *a a* *c c re=-b/(2 re=-b/(2* *a)a) im im=sqrt(abs(delta)/(2=sqrt(abs(delta)/(2* *a)a) 59if delta=0if delta=0 root1=re+im root1=re+im root2=re-im root2=re-im ? ?兩個實根為:兩個實根為:,root1,root2,root1,root2 else else ? ?兩個虛根為:兩個虛根為:,re,+,im,i,re,+,im,i

38、? ,re,-,im,i ? ,re,-,im,i endif endif60elseelse if b0 if b0 ? ?只有一個根:只有一個根:,-c/b,-c/belseelse ? ?方程無解!方程無解! endifendifendifendifcancelcancel61例:能打開任意表瀏覽的程序5,10 SAY 請輸入表名 get bm default space(10)READBM=ALLTRIM(BM)IF FILE(&bm.dbf)Use &bm & use bm是錯誤的,不能直接用表名BrowseElseWait 該文件不存在 windowendi

39、f62多分支選擇命令 DO CASE功能:從多個選擇結(jié)構(gòu)中功能:從多個選擇結(jié)構(gòu)中, ,選擇一個條件為選擇一個條件為真的路線作為程序執(zhí)行的路線。真的路線作為程序執(zhí)行的路線。語法:語法:DO CASEDO CASE CASE CASE 1 命令組命令組11 CASE CASE 2 命令組命令組22 OTHERWISE OTHERWISE 命令組命令組n+1n+1ENDCASEENDCASE63例:設(shè)計個人納稅計算程序。按稅法規(guī)定,工資、薪例:設(shè)計個人納稅計算程序。按稅法規(guī)定,工資、薪金所得,使用超額累進稅率。以每月收入額減去金所得,使用超額累進稅率。以每月收入額減去800800元后的余額,為應(yīng)納稅

40、所得額。元后的余額,為應(yīng)納稅所得額。 (L6_11.PRG)(L6_11.PRG) 其稅率表為:其稅率表為:級數(shù)級數(shù) 全月應(yīng)納稅所得額全月應(yīng)納稅所得額 稅率(稅率(% %)1 1 不超過不超過500500元元 5 52 500-20002 500-2000元元 10103 2000-50003 2000-5000元元 15154 5000-200004 5000-20000元元 202064級數(shù)級數(shù) 全月應(yīng)納稅所得額全月應(yīng)納稅所得額 稅率(稅率(% %)5 20000-400005 20000-40000元元 25256 40000-600006 40000-60000元元 30307 600

41、00-800007 60000-80000元元 35358 80000-1000008 80000-100000元元 40409 1000009 100000元以上元以上 4545 分析:由于采用超額累計法計算,因此要計分析:由于采用超額累計法計算,因此要計算出每級的納稅數(shù)額,設(shè)算出每級的納稅數(shù)額,設(shè)500500元、元、20002000元、元、100000100000元時應(yīng)納稅數(shù)額為元時應(yīng)納稅數(shù)額為SW500SW500、SW2000SW2000、SW100000SW100000。65問題分析:問題分析:sw500=500sw500=500* *0.050.05sw2000=sw500+(200

42、0-500)sw2000=sw500+(2000-500)* *0.100.10sw5000=sw2000+(5000-2000)sw5000=sw2000+(5000-2000)* *0.150.15sw20000=sw5000+(20000-5000)sw20000=sw5000+(20000-5000)* *0.200.20設(shè)收入設(shè)收入-800-800為:為:2300023000jsjs=sw20000+(23000-20000)=sw20000+(23000-20000)* *0.250.25根據(jù)分析根據(jù)分析, ,程序為程序為 L6_11.PRGL6_11.PRG 框圖為:框圖為:66

43、清 屏計算各級別納稅額T=500?輸入工資總額TT=T-800T100000?YESJS=SW100000+T*0.45NO輸 出程序結(jié)束程序結(jié)束67sw500=500*0.05sw2000=sw500+(2000-500)*0.10sw5000=sw2000+(5000-2000)*0.15sw20000=sw5000+(20000-5000)*0.20sw40000=sw20000+(40000-20000)*0.25sw60000=sw40000+(60000-40000)*0.30sw80000=sw60000+(80000-40000)*0.35sw100000=sw80000+(1

44、00000-80000)*0.40input 請輸入本月應(yīng)納稅所得額(元): to t do casecase t=500 js=t*0.05case t=2000 js=sw500+(t-500)*0.10case t=5000 js=sw2000+(t-2000)*0.15case t=20000 js=sw5000+(t-5000)*0.20case t=40000 js=sw20000+(t-20000)*0.25case t=60000 js=sw40000+(t-40000)*0.30case t=80000 js=sw60000+(t-60000)*0.35case t=1000

45、00 js=sw80000+(t-80000)*0.40otherwise js=sw100000+(t-100000)*0.45endcase?本月應(yīng)納稅:,js,元cancel程序如右,可復(fù)制運行:程序如右,可復(fù)制運行:68舉例例例6-126-12:任給一個年份:任給一個年份, ,判斷是否為閏年判斷是否為閏年, ,并根據(jù)輸入的月份并根據(jù)輸入的月份, ,判斷屬于什么季節(jié)以判斷屬于什么季節(jié)以及該月天數(shù)。及該月天數(shù)。(L_12.PRG)(L_12.PRG)問題分析:閏年的條件是能被問題分析:閏年的條件是能被4 4整除但不能整除但不能被被100100整除整除, ,或者能被或者能被400400整除。

46、根據(jù)閏年整除。根據(jù)閏年條件可得出閏年的邏輯表達式:條件可得出閏年的邏輯表達式:MOD(Y,4)=0.AND.MOD(Y,100)0.OR.MODMOD(Y,4)=0.AND.MOD(Y,100)0.OR.MOD(Y,400)=0(Y,400)=069*求閏年、季節(jié)、每月的天數(shù) CLEARinput 請輸入年份: to yif mod(y,4)=0.and.mod(y,100)0.or.mod(y,400)=0 rn=.t. ?y,年是閏年。Else rn=.f. ?y,年不是閏年。EndifInput 請輸入月份(1-12): to mDo caseCase m=3.or.m=4.or.m=5

47、 ?m,月是春季(,m,month is spring.)case m=6.or.m=7.or.m=8 ?m,月是夏季(,m,month is summer.)case m=9.or.m=10.or.m=11 ?m,月是秋季(,m,month is Autumn.)case m=12.or.m=1.or.m=2 ?m,月是冬季(,m,month is winter.)endcasedo casecase m=4.or.m=6.or.m=9.or.m=11 ?m,月有30天。Case m=2 If rn=.f. Days=28Else Days=29Endif?m,月有,days,天。Other

48、wise?m, 月有,31,天。EndcaseCancel程序如右,可復(fù)制運行:程序如右,可復(fù)制運行:70循環(huán)結(jié)構(gòu)程序設(shè)計1 1 循環(huán)結(jié)構(gòu)程序設(shè)計的概念循環(huán)結(jié)構(gòu)程序設(shè)計的概念2 2 當(dāng)型循環(huán)命令當(dāng)型循環(huán)命令DO WHILEDO WHILE3 3 步長型循環(huán)命令步長型循環(huán)命令FORFOR4 4 數(shù)據(jù)表掃描循環(huán)命令數(shù)據(jù)表掃描循環(huán)命令SCANSCAN71循環(huán)結(jié)構(gòu)程序設(shè)計的概念 所謂循環(huán)是指在程序設(shè)計中所謂循環(huán)是指在程序設(shè)計中, ,從某處開從某處開始有規(guī)律地反復(fù)執(zhí)行某一操作塊(或始有規(guī)律地反復(fù)執(zhí)行某一操作塊(或程序塊)的現(xiàn)象程序塊)的現(xiàn)象, ,并稱重復(fù)執(zhí)行的該操并稱重復(fù)執(zhí)行的該操作塊(或程序塊)為它的

49、循環(huán)體。按作塊(或程序塊)為它的循環(huán)體。按循環(huán)體內(nèi)是否嵌套有從屬的子循環(huán)循環(huán)體內(nèi)是否嵌套有從屬的子循環(huán), ,可可分為單循環(huán)結(jié)構(gòu)和多循環(huán)結(jié)構(gòu);按其分為單循環(huán)結(jié)構(gòu)和多循環(huán)結(jié)構(gòu);按其循環(huán)體執(zhí)行方式和條件循環(huán)體執(zhí)行方式和條件, ,可分為當(dāng)型、可分為當(dāng)型、直到型與步長型循環(huán)結(jié)構(gòu)。直到型與步長型循環(huán)結(jié)構(gòu)。72調(diào)試工具調(diào)試工具工具工具/調(diào)試器調(diào)試器 (跟蹤窗口和監(jiān)視窗口)(跟蹤窗口和監(jiān)視窗口)VFP 3.0 為:調(diào)試窗口和跟蹤窗口為:調(diào)試窗口和跟蹤窗口73當(dāng)型循環(huán)命令DO WHILE功能:當(dāng)給定的條件為真時功能:當(dāng)給定的條件為真時, ,就使就使DO DO WHILE WHILE ENDDO ENDDO之間的

50、命令重復(fù)執(zhí)行之間的命令重復(fù)執(zhí)行, ,實實現(xiàn)程序循環(huán)?,F(xiàn)程序循環(huán)。語法:語法:DO WHILE DO WHILE 命令組命令組 EXIT EXIT LOOP LOOPENDDOENDDO74舉例例:用循環(huán)語句打印例:用循環(huán)語句打印5 5個個Visual FoxProVisual FoxPro字符串。字符串。X=1X=1Do while x=5Do while x=5 ?Visual FoxPro ?Visual FoxPro x=x+1 x=x+1ENDDOENDDOCANCELCANCEL75舉例 例:有一張厚例:有一張厚0.50.5毫米毫米, ,面積足夠大的紙面積足夠大的紙, ,將它不斷地對

51、折。問對折多少次后將它不斷地對折。問對折多少次后, ,其厚其厚度可達珠穆朗瑪峰的高度(度可達珠穆朗瑪峰的高度(88488848米)。米)。問題分析:問題分析:0.5,1,2,4,8,16,32,64,128,256,512,0.5,1,2,4,8,16,32,64,128,256,512,h=0.5 h=2h=0.5 h=2* *h=1 h=2h=1 h=2* *h=2 h=2h=2 h=2* *h=4h=4 n=0 n=n+1=1 n=n+1=2 n=n+1=3 n=0 n=n+1=1 n=n+1=2 n=n+1=376n=0n=0h=0.5h=0.5do while h8848000do

52、while h8848000 n=n+1 n=n+1 h=2 h=2* *h henddoenddo?對折的次數(shù)對折的次數(shù):,n:,n?此時的此時的H H為:為:,h,hcancelcancel77舉例例:打開數(shù)據(jù)表例:打開數(shù)據(jù)表JSDA.DBF,JSDA.DBF,從鍵盤上輸從鍵盤上輸入某一職稱(比如講師)入某一職稱(比如講師), ,然后列出符然后列出符合該職稱的所有記錄的內(nèi)容合該職稱的所有記錄的內(nèi)容, ,用循環(huán)來用循環(huán)來作作, ,直到直接按回車鍵時結(jié)束程序。直到直接按回車鍵時結(jié)束程序。(L6_15.PRG)(L6_15.PRG) 外循環(huán)用來控制不同職稱的輸入外循環(huán)用來控制不同職稱的輸入, ,

53、內(nèi)內(nèi)循環(huán)用來控制滿足條件的多條記錄的循環(huán)用來控制滿足條件的多條記錄的輸出。程序如下:輸出。程序如下:78CLEARUSE jsdaSORT ON 職稱職稱 TO jsda1USE jsda1DO WHILE .T. ACCEPT 請輸入要查找的職稱請輸入要查找的職稱 TO ZC IF ZC= EXIT ENDIF LOCATE FOR 職稱職稱=ZC DO WHILE 職稱職稱=ZC DISP OFF SKIP ENDDOENDDOCANCEL79注意1 1DO WHILE DO WHILE 命令只能在程序中使用。命令只能在程序中使用。2 2每一個每一個DO WHILE DO WHILE 必須

54、有一個必須有一個ENDDOENDDO與其配對。與其配對。3 3在程序中應(yīng)避免出現(xiàn)死循環(huán)。在程序中應(yīng)避免出現(xiàn)死循環(huán)。4 4在命令組中可以嵌套在命令組中可以嵌套IFIFENDIFENDIF、DO CASEDO CASEENDCASEENDCASE、DO DO WHILEWHILEENDDOENDDO、FORFORENDFORENDFOR、SCANSCANENDSCANENDSCAN結(jié)構(gòu)。結(jié)構(gòu)。80步長型循環(huán)命令FOR功能:根據(jù)給定的次數(shù)重復(fù)執(zhí)行一組命令功能:根據(jù)給定的次數(shù)重復(fù)執(zhí)行一組命令, ,實現(xiàn)程序循環(huán)。實現(xiàn)程序循環(huán)。語法:語法:FOR FOR = to to step step 命令組命令組

55、EXITEXITLOOPLOOPENDFOR|NEXTENDFOR|NEXT81舉例例:求例:求1+2+3+1+2+3+99+100+99+100的值。的值。s=0s=0for x=1 to 100for x=1 to 100 s=s+x s=s+xendforendfor?s=,s?s=,scancelcancelX S 01 1=12 3=1+23 6=1+2+3100 5050=1+10010182舉例(FOR語句與DO WHILE 語句)例:求例:求1+2+3+1+2+3+99+100+99+100的值。的值。s=0s=0for x=1 to 100for x=1 to 100 s=s

56、+x s=s+xendforendfor?s=,s?s=,scancelcancelx=1s=0Do while x=100 x=x+1 s=s+xenddo?s=,scancel83舉例例:求例:求1+2!+3!+4!+1+2!+3!+4!+20!+20!S=0S=0T=1T=1For N=1 to 20For N=1 to 20 T=T T=T* *N N S=S+T S=S+TEndforEndfor? S=,S? S=,SCANCELCANCEL N T S 1 0 1 1 1=1! 2 2 3=1!+2! 3 6 9=1!+2!+3! 20 20! 1!+20!2184舉例例:用雙重

57、循環(huán)打印九九乘法表。例:用雙重循環(huán)打印九九乘法表。(l6_18.prg)(l6_18.prg)clearclearFor a=1 to 9For a=1 to 9 For b=1 to a For b=1 to a p=a p=a* *b b?str(a,1)+?str(a,1)+str(b,1)+=+ str(p,2)+ +str(b,1)+=+ str(p,2)+ endfor endfor ? ?endforendfor85數(shù)據(jù)表掃描循環(huán)命令SCAN功能:在當(dāng)前選擇的表功能:在當(dāng)前選擇的表Table/.DBFTable/.DBF文件中文件中移動記錄指針移動記錄指針, ,如果遇到符合條件的

58、記錄如果遇到符合條件的記錄就執(zhí)行一組命令。就執(zhí)行一組命令。語法:語法:SCAN NOOPTIMIZESCAN NOOPTIMIZE FOR|WHILE FOR|WHILE 命令組命令組 EXITLOOP EXITLOOP ENDSCAN ENDSCAN86舉例例:將例:將xscjxscj數(shù)據(jù)表中電腦成績不及格者的學(xué)號、數(shù)據(jù)表中電腦成績不及格者的學(xué)號、姓名、電腦三個字段的值輸出。姓名、電腦三個字段的值輸出。(l6_19.prg) (l6_19.prg) Close allClose allUse xscjUse xscjClearClearScan for Scan for 電腦電腦6060 ?

59、 ?學(xué)號學(xué)號, ,姓名姓名, ,電腦電腦endscanendscan CancelCancel87子程序及變量的局域性1 1 子程序子程序2 2 內(nèi)存變量的屬性和作用域內(nèi)存變量的屬性和作用域3 3 調(diào)用子程序時的數(shù)據(jù)傳遞調(diào)用子程序時的數(shù)據(jù)傳遞4 4 用戶定義函數(shù)用戶定義函數(shù)5 5 過程文件過程文件88子程序及變量的局域性子程序子程序分類分類:子程序、函數(shù)、過程三類。:子程序、函數(shù)、過程三類。功能功能:多次使用的可供其他程序多次使用的可供其他程序(主程序主程序)使用使用(調(diào)用調(diào)用)的程序的程序(子程序子程序)語法語法:子程序子程序: RETURN 主程序主程序: . DO 89子程序及變量的局域

60、性 內(nèi)存變量內(nèi)存變量主從主從內(nèi)存變量:主程序定義內(nèi)存變量:主程序定義, ,子程序返回的值子程序返回的值, , 主程序繼續(xù)使用;子程序定義主程序繼續(xù)使用;子程序定義, ,返回清除返回清除全局全局內(nèi)存變量:內(nèi)存變量:功能功能: :不管是主程序子程序定義不管是主程序子程序定義, ,主主 程序子程序都可使用、修改。程序子程序都可使用、修改。 語法語法: :PUBLIC PUBLIC 局部局部內(nèi)存變量內(nèi)存變量: :功能功能: :子程序中定義局部變量子程序中定義局部變量, ,隱藏隱藏 上級同名變量上級同名變量, ,解決變量同名問題解決變量同名問題. . 語法語法: :PRIVATE | LOCAL PRIVATE | LOCAL 90子程序及變量的局域性調(diào)用子程序時的數(shù)據(jù)傳遞調(diào)用子程序時的數(shù)據(jù)傳遞主從變量主從變量: :直接傳遞數(shù)據(jù)直接傳遞數(shù)據(jù)( (主變量主變量) )全局變量全局變量: :直接傳遞數(shù)據(jù)直接傳遞數(shù)據(jù)用參數(shù)傳遞數(shù)據(jù)用參數(shù)傳遞數(shù)據(jù): : 功能功能: :利用形參與實參的對應(yīng)關(guān)系利用形參與實參的對應(yīng)關(guān)系( (數(shù)量數(shù)量, , 順序順序) )解決變量不同名問題解決變量不同名問題. . DO DO時時, , (傳遞傳遞);); RETURN RETURN時時, ,

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論