




已閱讀5頁,還剩122頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1,程序設(shè)計初步,2,程序設(shè)計基本內(nèi)容,程序文件的建立、運行和修改,順序結(jié)構(gòu)程序設(shè)計,選擇結(jié)構(gòu)程序設(shè)計,循環(huán)結(jié)構(gòu)程序設(shè)計,數(shù)組,子程序及變量的局域性,3,程序文件,由命令組成,計算機可以自動執(zhí)行 可由任何編輯軟件生成(VFP本身有編輯器) 文件名:程序源文件為 .PRG 編譯后的程序文件 .FXP,4,程序設(shè)計概述,進行程序設(shè)計一般要經(jīng)過以下步驟: 1分析問題或任務(wù),總結(jié)或抽象出問題的數(shù)學(xué)模型。 2根據(jù)數(shù)學(xué)模型確定解決問題的算法思想。 3根據(jù)算法思想確定要建立的數(shù)據(jù)表或數(shù)據(jù)庫的基本結(jié)構(gòu)及其數(shù)據(jù)表之間的關(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. 單擊菜單文件新建或者單擊常用工具欄的“新建“按鈕,再單擊“程序“單選按鈕,最后單擊“新文件“大按鈕。 2. 輸入程序,最后保存文件。 如:建立如下命令文件cx1.prg。,8,舉例,a=2 b=5 c=a+b ? “a=“,a ? “b=“,b ? a,“+“,b,“=“,c,9,注意以下幾點:,(1)一個命令語句中只能有一個命令動詞; (2)每輸入完一個語句按“回車“鍵表示該語句結(jié)束; (3)程序中用到的所有標點符號一律用半角符號; (4)每一個程序一般應(yīng)有一個結(jié)束語句,以表示該程序的結(jié)束。,10,建立程序文件,二、命令方式 功能:打開一個編輯窗口,從中可以修改或創(chuàng)建程序文件。 語法:MODIFY COMMAND |?NOEDIT 如:MODIFY COMMAND CX2 輸入程序后保存文件。,11,運行程序文件,一、菜單方式 單擊!常用工具欄按鈕。 單擊程序執(zhí)行,選擇要執(zhí)行的命令文件。 二、命令方式 功能:執(zhí)行一個Visual FoxPro程序或過程。 語法:DO ,12,修改程序文件,一、菜單方式 單擊菜單文件打開或單擊常用工具欄上的“打開“按鈕,啟動“打開“對話框。在該對話框中選擇想修改的程序文件名后單擊“確定“按鈕或直接雙擊想修改的程序文件名。 二、命令方式 使用建立命令文件同樣的命令。,13,順序結(jié)構(gòu)程序設(shè)計,5 任意類型鍵盤輸入命令I(lǐng)NPUT,1 順序結(jié)構(gòu)程序設(shè)計的概念,2 輸出命令?|?,3 輸出打印命令?,4 內(nèi)存變量內(nèi)部賦值命令STORE|=,6 字符型鍵盤輸入命令A(yù)CCEPT,14,順序結(jié)構(gòu)程序設(shè)計,7 程序暫停、等待接收單字符命令WAIT,8 計算表達式值命令=,9 終止程序運行命令CANCEL,10 程序注釋命令,11 文本輸出命令TEXTENDTEXT,12 輸出文本行信息命令|,13 輸入輸出命令,15,順序結(jié)構(gòu) 程序設(shè)計的概念,順序結(jié)構(gòu)是一種線性結(jié)構(gòu),是程序設(shè)計中最基礎(chǔ)的結(jié)構(gòu),該結(jié)構(gòu)中各操作塊按照各自出現(xiàn)的先后順序,依次逐塊執(zhí)行。,16,2 輸出命令?|?,功能:計算一批表達式的值,然后按指定格式在Visual FoxPro主窗口、用戶自定義窗口或打印機輸出表達式的值。 語法:?|? PICTUREFUNCTIONVATFONT,STYLE 如: ? 3*45/26 AT 2 FONT COURIER, 34 STYLE BI,17,3 輸出打印命令?,功能:將輸出結(jié)果直接送到打印機上。 語法:? 字符表達式,18,4 內(nèi)存變量內(nèi)部 賦值命令STORE|=,功能:建立內(nèi)存變量,并把一個數(shù)據(jù)保存到一個或多個內(nèi)存變量中。 語法: STORE TO = 如:STOR 34*56/8 TO X Y=45/3-672,19,說明:,1.內(nèi)存變量的類型由的類型而定。 STORE 1.0 TO M2,M3 STORE .T. TO L1 STORE 6*2=18 TO L2 C1=“xyzabc“ L3=.F. Store 99/05/06 to D1 D2=date(),20,說明:,2. 可以給變量重新賦值,將以新值替代舊值。例: X=8 ?X X=16 ?X X=“abcd“ ? X,21,說明:,3.STORE可以給多個變量同時賦同一個值,=只能給一個變量賦值。如果給多個變量賦不同的值,必須使用多條STORE|=命令。 如:STOR 0 TO A,B,C A=0 B=0 C=0,22,說明:,4引用變量的值不會改變被引用變量的值。 如: A=5 B=A C=B ?A,B,C,23,說明:,5數(shù)值型變量可以與自身相加,字符型變量可以與自身相連接。例:,X=10 X=X+1 ?X X=X+12 ?X,C=“Good“ C=C+“ Morning!“ ?C,24,舉例,例6-1:已知X=16,Y=18,編寫程序,將它們的值互換后輸出。程序如下:,CLEAR X=16 Y=18 T=X X=Y Y=T,?“X=“,X,“Y=“,Y CANCEL 程序運行結(jié)果: X=18 Y=16,X Y T 16 16 18 16 18 16 18 18 16 18 16 16,25,6.2 順序結(jié)構(gòu)程序設(shè)計,例6-1:已知X=16,Y=18,編寫程序,將它們的值互換后輸出。程序如下: CLEAR X=16 Y=18 T=X X=Y Y=T ?“X=“,X,“Y=“,Y,“T=“,T CANCEL,26,舉例,例6-2:雞兔同籠,已知雞兔總頭數(shù)為16(heads),總腳數(shù)為40(feet),編寫程序求雞兔各有多少。 解:設(shè)雞為X只,兔為Y只,列出方程組為: X+Y=H 解得:X=(4H-F)/2 2X+4Y=F Y=(F-2H)/2 程序如下:,27,舉例,H=16 F=40 X=(4*H-F)/2 Y=(F-2*H)/2 ?“共有雞:“,x,“只“ ?“共有兔:“,y,“只“ CANCEL,結(jié)果為: 共有雞:12 只 共有兔:4 只,28,5 任意類型鍵盤 輸入命令I(lǐng)NPUT,功能:建立內(nèi)存變量,并且用鍵盤輸入的方式將數(shù)值型、字符型、邏輯型或日期型數(shù)據(jù)賦值給內(nèi)存變量。 語法:INPUTTO 例6-3:已知圓半徑為R,計算圓面積S、球體積V,球表面積F(要求四舍五入保留三位小數(shù))。公式分別為: S=r2 V=4/3r3 F=4r2,29,程序如下:,INPUT “請輸入圓半徑R=“ TO R S=ROUND(PI()*R2,3) V=ROUND(4/3*PI()*R3,3) F=ROUND(4*PI()*R2,3) ?“圓面積為:“,S ?“球體積為:“,V ?“球表面積為:“,F CANCEL,30,6 字符型鍵盤 輸入命令A(yù)CCEPT,功能:建立內(nèi)存變量,并用鍵盤輸入的方式將字符型數(shù)據(jù)賦值給內(nèi)存變量。 語法:ACCEPT TO 例6-4:假設(shè)JSDA.DBF數(shù)據(jù)表文件在A盤根目錄下,編寫一程序,打開數(shù)據(jù)表JSDA.DBF,運行程序時輸入姓名,并將該姓名的記錄內(nèi)容顯示出來。,31,程序如下:,SET DEFA TO A: USE JSDA ACCEPT “ 請輸入姓名:“ TO NAME LOCATE ALL FOR 姓名=NAME DISPLAY Cancel,32,7 程序暫停、等待接收單字符命令WAIT,功能:顯示一條提示并暫停程序運行,直到按下任一鍵或鼠標按鍵,程序才繼續(xù)執(zhí)行。 語法:WAIT TO WINDOWAT ,NOWAITCLEAR|NOCLEARTIMEOUT,33,舉例,例6-5:用WAIT命令暫停顯示。 Clear Wait to a ?a ?“1 Visual FoxPro“ WAIT “請稍候,按任意鍵繼續(xù)“ ?“2 Visual FoxPro“ WAIT “這是查看功能“ WINDOW AT 10,10 ?“3 Visual FoxPro“ WAIT WINDOW TIMEOUT 3 CANCEL,34,8 計算表達式值命令=,語法:=, 功能:計算一個或多個表達式的值,并且不返回其值。常用于需要執(zhí)行一個系統(tǒng)函數(shù)或用戶自定義函數(shù)的功能,但不需要將該函數(shù)的返回值賦給一個內(nèi)存變量、數(shù)組或數(shù)組元素的情況下。 如為了進入插入狀態(tài),可輸入命令: =insmode(.t.),35,9 終止程序 運行命令CANCEL,語法:CANCEL 功能:終止程序的運行,釋放所有局部內(nèi)存變量,返回到“命令“窗口。,36,10 程序注釋命令,一、行首注釋命令NOTE|* 功能:在程序中加注釋行信息。 語法:NOTE|* 注釋內(nèi)容 二、行尾注釋命令& 功能:在命令語句的尾部加注釋信息。 語法:&注釋 例6-6:計算發(fā)放工資中各種大小鈔票最少的程序。程序如下:(L6_6.PRG),37,NOTE 根據(jù)輸入的錢數(shù),計算各種面額 * 鈔票張數(shù)最少的程序。 INPUT “請輸入總錢款數(shù)量(單位:元):“ TO X & 單位為:元。 Y100=int(x/100) &求100元最少張數(shù) X=x-100*y100 &求剩余款額 Y50=int(x/50) &求50元最少張數(shù) X=x-50*y50 &求剩余款額 Y10=int(x/10) &求10元最少張數(shù) X=x-10*y10 &求剩余款額 Y5=int(x/5) &求5元最少張數(shù) X=x-5*y5 &求剩余款額 Y2=int(x/2) &求2元最少張數(shù) X=x-2*y2 &求剩余款額 Y1=int(x) &求1元最少張數(shù) X=x-y1 &求剩余“零頭“款額,38,X=x*10 &將“零頭“化為角 J5=int(x/5) &求5角最少張數(shù) X=x-5*j5 &求剩余款額 J2=int(x/2) &求2角最少張數(shù) X=x-2*j2 &求剩余款額 J1=int(x) &求1角最少張數(shù) X=(x-j1)*10 &將剩余零頭化為分 F5=int(x/5) &求5分最少張數(shù) X=x-5*f5 &求剩余款額 F2=int(x/2) &求2分最少張數(shù) X=x-2*f2 &求剩余款額 F1=int(x) &求1分最少張數(shù) * 以下為輸出部分: ?“100元票:“,y100,“張“,39,?“50元票:“,y50,“張“ ?“10元票:“,y10,“張“ ?“5元票: “,y5,“張“ ?“2元票: “,y2,“張“ ?“1元票: “,y1,“張“ wait ?“5角票: “,j5,“張“ ?“2角票: “,j2,“張“ ?“1角票: “,j1,“張“ ?“5分票: “,f5,“張“ ?“2分票: “,f2,“張“ ?“1分票: “,f1,“張“ cancel,40,11 文本輸出命令TEXTENDTEXT,功能:在屏幕上顯示TEXT和ENDTEXT之間的所有文本信息。 語法: TEXT 文本信息 ENDTEXT,41,舉例,例6-7:利用TEXTENDTEXT語句在屏幕上輸出“21世紀是信息化時代!“ clear text 21世紀是信息化時代! endtext cancel,42,12 輸出文本行 信息命令|,功能:輸出文本行信息。 語法: :輸出信息時,輸出行以回車符開頭。 :輸出信息時,輸出行不以回車符開頭。,43,舉例,如輸入下面兩個命令: 計算機世界 計算機世界 美好的明天 執(zhí)行結(jié)果為: 計算機世界 計算機世界美好的世界,44,13、輸入輸出格式命令,顯示輸出并接受輸入的命令 (1) SAY GET PICTURE FUNCTION RANGE (2)READ &激活get語句,顯示并可以修改 (3)CLEAR GETS &不激活get后clear gets前的語句,使其只顯示不能修改.稱隔斷語句,45,.say.get舉例,例:命令 X=“ASDFG“ 10,10 SAY “ZIFU“ GET X CLEAR GETS READ 例:打開JSDA.dbf表,顯示該表每個記錄的姓名,職稱,基本工資字段,其中基本工資范圍在2000元以內(nèi),要求以逗號格式顯示且保留兩位小數(shù)點,并且姓名只顯示不能修改. (L7-2.prg),46,L7-2.PRG USE JSDA SCAN FOR NOT EOF() 0,0 SAY “姓名:“ GET 姓名 CLEAR GETS 0,14 SAY “職稱:“ GET 職稱 0,32 SAY “基本工資:“ GET 基本工資 RANGE 0,2000 PICTURE “9,999.99“ READ ENDSCAN CANCEL,47,選擇結(jié)構(gòu)程序設(shè)計,一、選擇結(jié)構(gòu)程序設(shè)計的概念,二、單條件選擇命令I(lǐng)F,三、多分支選擇命令 DO CASE,48,選擇結(jié)構(gòu) 程序設(shè)計的概念,程序設(shè)計中的分支,是指在程序中從某一程序塊分支出兩個或兩個以上相對獨立、彼此不同的子程序塊的現(xiàn)象,并稱這些子程序塊為它的分支。,49,選擇結(jié)構(gòu) 程序設(shè)計的概念,一、雙分支選擇結(jié)構(gòu) 通常也稱為單條件雙分支選擇結(jié)構(gòu),或單條件選擇結(jié)構(gòu)。它僅描述具有兩個分支的分支現(xiàn)象,是最簡單的選擇結(jié)構(gòu)。 二、多分支選擇結(jié)構(gòu) 該分支機構(gòu)的特點是:從多個選擇結(jié)構(gòu)中,選擇一個條件為真的路線作為程序執(zhí)行的路線。,50,單條件選擇命令I(lǐng)F,功能:該命令用來進行各種條件判斷,使程序中的命令有條件的執(zhí)行。 語法: IF 命令組1 ELSE 命令組2 ENDIF,51,舉例,例6-8:鐵路托運行李,從甲地到乙地,按規(guī)定每張客票托運行李不超過50公斤時,每公斤0.25元,如超過50公斤,超過部分按每公斤0.45元計算。編寫一個程序,把行李重量輸入計算機,計算出運費,并打印出付款清單。 運費公式為: p=0.25w 當(dāng)W50 p=500.25+(w-50)0.45 當(dāng)W50,52,程序如下:,Input “請輸入行李重量:“ TO w IF w=50 P=0.25*w Else P=50*0.25+(w-50)*0.45 Endif ?“行李重量為:“,w ?“應(yīng)付運費為:“,p cancel,53,舉例,例6-9:求表達式的值。 Y=x3 當(dāng)X10 Y=X5 當(dāng)0X10 Y=X2 當(dāng)X0 根據(jù)所給公式和條件,寫出程序: input “請輸入X的值:“ to x,54,舉例,if x10 y=x3 else if x=0 y=x5 else y=x2 endif,endif ?“X的值為:“,x ?“Y的值為:“,y cancel,55,填空練習(xí): input “請輸入X的值:“ to x if x10 y=x3 else if &1 y=x5 else &2 endif ?“X的值為:“,x ?“Y的值為:“,y cancel,求表達式的值。 Y=x3 當(dāng)X10 Y=X5 當(dāng)0X10 Y=X2 當(dāng)X0 程序如右,請?zhí)羁?56,例:已知系數(shù)a、b、c,編寫程序,求一元二次方程: ax2+bx+c=0的根。 問題分析:解上述方程:得到求解方程為: 根據(jù)一元二次方程的系數(shù)a、b、c的取值, 有以下幾種情況:,57,1. 當(dāng)a0時,有兩個根。 當(dāng)判別式b2-4ac0時,有兩個不同的實根; 當(dāng)判別式b2-4ac=0時,有兩個相同的實根; 當(dāng)判別式b2-4ac0時,有一個根。 3. 當(dāng)a=0,b=0時,方程無意義。 根據(jù)分析,寫出程序:,58,*解方程 input “a=“ to a input “b=“ to b input “c=“ to c if a0 delta=b2-4*a*c re=-b/(2*a) im=sqrt(abs(delta)/(2*a),59,if delta=0 root1=re+im root2=re-im ?“兩個實根為:“,root1,root2 else ?“兩個虛根為:“,re,“+“,im,“i“ ?“ “,re,“-“,im,“i“ endif,60,else if b0 ?“只有一個根:“,-c/b else ?“方程無解!“ endif endif cancel,61,例:能打開任意表瀏覽的程序,5,10 SAY “請輸入表名“ get bm default space(10) READ BM=ALLTRIM(BM) IF FILE(“&bmdbf“) Use &bm & use bm是錯誤的,不能直接用表名 Browse Else Wait “該文件不存在“ window endif,62,多分支選擇命令 DO CASE,功能:從多個選擇結(jié)構(gòu)中,選擇一個條件為真的路線作為程序執(zhí)行的路線。,語法: DO CASE CASE 命令組1 CASE 命令組2, OTHERWISE 命令組n+1 ENDCASE,63,例:設(shè)計個人納稅計算程序。按稅法規(guī)定,工資、薪金所得,使用超額累進稅率。以每月收入額減去800元后的余額,為應(yīng)納稅所得額。 (L6_11.PRG) 其稅率表為: 級數(shù) 全月應(yīng)納稅所得額 稅率(%) 1 不超過500元 5 2 500-2000元 10 3 2000-5000元 15 4 5000-20000元 20,64,級數(shù) 全月應(yīng)納稅所得額 稅率(%) 5 20000-40000元 25 6 40000-60000元 30 7 60000-80000元 35 8 80000-100000元 40 9 100000元以上 45 分析:由于采用超額累計法計算,因此要計算出每級的納稅數(shù)額,設(shè)500元、2000元、100000元時應(yīng)納稅數(shù)額為SW500、SW2000、SW100000。,65,問題分析: sw500=500*0.05 sw2000=sw500+(2000-500)*0.10 sw5000=sw2000+(5000-2000)*0.15 sw20000=sw5000+(20000-5000)*0.20 設(shè)收入-800為:23000 js=sw20000+(23000-20000)*0.25 根據(jù)分析,程序為 L6_11.PRG 框圖為:,66,67,sw500=500*0.05 sw2000=sw500+(2000-500)*0.10 sw5000=sw2000+(5000-2000)*0.15 sw20000=sw5000+(20000-5000)*0.20 sw40000=sw20000+(40000-20000)*0.25 sw60000=sw40000+(60000-40000)*0.30 sw80000=sw60000+(80000-40000)*0.35 sw100000=sw80000+(100000-80000)*0.40 input “請輸入本月應(yīng)納稅所得額(元):“ to t do case case t=500 js=t*0.05 case t=2000 js=sw500+(t-500)*0.10 case t=5000 js=sw2000+(t-2000)*0.15 case t=20000 js=sw5000+(t-5000)*0.20 case t=40000 js=sw20000+(t-20000)*0.25 case t=60000 js=sw40000+(t-40000)*0.30 case t=80000 js=sw60000+(t-60000)*0.35 case t=100000 js=sw80000+(t-80000)*0.40 otherwise js=sw100000+(t-100000)*0.45 endcase ?“本月應(yīng)納稅:“,js,“元“ cancel,程序如右,可復(fù)制運行:,68,舉例,例6-12:任給一個年份,判斷是否為閏年,并根據(jù)輸入的月份,判斷屬于什么季節(jié)以及該月天數(shù)。(L_12.PRG) 問題分析:閏年的條件是能被4整除但不能被100整除,或者能被400整除。根據(jù)閏年條件可得出閏年的邏輯表達式: MOD(Y,4)=0.AND.MOD(Y,100)0.OR.MOD(Y,400)=0,69,*求閏年、季節(jié)、每月的天數(shù) CLEAR input “請輸入年份:“ to y if mod(y,4)=0.and.mod(y,100)0.or.mod(y,400)=0 rn=.t. ?y,“年是閏年。“ Else rn=.f. ?y,“年不是閏年。“ Endif Input “請輸入月份(1-12):“ to m Do case Case m=3.or.m=4.or.m=5 ?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.)“ endcase do case case m=4.or.m=6.or.m=9.or.m=11 ?m,“月有30天?!?Case m=2 If rn=.f. Days=28 Else Days=29 Endif ?m,“月有“,days,“天?!?Otherwise ?m, “月有“,31,“天?!?Endcase Cancel,程序如右,可復(fù)制運行:,70,循環(huán)結(jié)構(gòu)程序設(shè)計,1 循環(huán)結(jié)構(gòu)程序設(shè)計的概念,2 當(dāng)型循環(huán)命令DO WHILE,3 步長型循環(huán)命令FOR,4 數(shù)據(jù)表掃描循環(huán)命令SCAN,71,循環(huán)結(jié)構(gòu) 程序設(shè)計的概念,所謂循環(huán)是指在程序設(shè)計中,從某處開始有規(guī)律地反復(fù)執(zhí)行某一操作塊(或程序塊)的現(xiàn)象,并稱重復(fù)執(zhí)行的該操作塊(或程序塊)為它的循環(huán)體。按循環(huán)體內(nèi)是否嵌套有從屬的子循環(huán),可分為單循環(huán)結(jié)構(gòu)和多循環(huán)結(jié)構(gòu);按其循環(huán)體執(zhí)行方式和條件,可分為當(dāng)型、直到型與步長型循環(huán)結(jié)構(gòu)。,72,調(diào)試工具,工具/調(diào)試器 (跟蹤窗口和監(jiān)視窗口) VFP 3.0 為:調(diào)試窗口和跟蹤窗口,73,當(dāng)型循環(huán)命令DO WHILE,功能:當(dāng)給定的條件為真時,就使DO WHILE ENDDO之間的命令重復(fù)執(zhí)行,實現(xiàn)程序循環(huán)。 語法:DO WHILE 命令組 EXIT LOOP ENDDO,74,舉例,例:用循環(huán)語句打印5個“Visual FoxPro“字符串。 X=1 Do while x=5 ?“Visual FoxPro“ x=x+1 ENDDO CANCEL,75,舉例,例:有一張厚0.5毫米,面積足夠大的紙,將它不斷地對折。問對折多少次后,其厚度可達珠穆朗瑪峰的高度(8848米)。 問題分析: 0.5,1,2,4,8,16,32,64,128,256,512,h=0.5 h=2*h=1 h=2*h=2 h=2*h=4 n=0 n=n+1=1 n=n+1=2 n=n+1=3,76,n=0 h=0.5 do while h8848000 n=n+1 h=2*h enddo ?“對折的次數(shù):“,n ?“此時的H為:“,h cancel,77,舉例,例:打開數(shù)據(jù)表JSDA.DBF,從鍵盤上輸入某一職稱(比如講師),然后列出符合該職稱的所有記錄的內(nèi)容,用循環(huán)來作,直到直接按回車鍵時結(jié)束程序。(L6_15.PRG) 外循環(huán)用來控制不同職稱的輸入,內(nèi)循環(huán)用來控制滿足條件的多條記錄的輸出。程序如下:,78,CLEAR USE jsda SORT ON 職稱 TO jsda1 USE jsda1 DO WHILE .T. ACCEPT “請輸入要查找的職稱“ TO ZC IF ZC=“ EXIT ENDIF LOCATE FOR 職稱=ZC DO WHILE 職稱=ZC DISP OFF SKIP ENDDO ENDDO CANCEL,79,注意,1DO WHILE 命令只能在程序中使用。 2每一個DO WHILE 必須有一個ENDDO與其配對。 3在程序中應(yīng)避免出現(xiàn)死循環(huán)。 4在命令組中可以嵌套IFENDIF、DO CASEENDCASE、DO WHILEENDDO、FORENDFOR、SCANENDSCAN結(jié)構(gòu)。,80,步長型循環(huán)命令FOR,功能:根據(jù)給定的次數(shù)重復(fù)執(zhí)行一組命令,實現(xiàn)程序循環(huán)。 語法:FOR = to step 命令組 EXIT LOOP ENDFOR|NEXT,81,舉例,例:求1+2+3+99+100的值。,s=0 for x=1 to 100 s=s+x endfor ?“s=“,s cancel,X S 0 1 1=1 2 3=1+2 3 6=1+2+3 100 5050=1+100 101,82,舉例(FOR語句與DO WHILE 語句),例:求1+2+3+99+100的值。,s=0 for x=1 to 100 s=s+x endfor ?“s=“,s cancel,x=1 s=0 Do while x=100 x=x+1 s=s+x enddo ?“s=“,s cancel,83,舉例,例:求1+2!+3!+4!+20!,S=0 T=1 For N=1 to 20 T=T*N S=S+T Endfor ? “S=“,S CANCEL,N T S 1 0 1 1 1=1! 2 2 3=1!+2! 3 6 9=1!+2!+3! 20 20! 1!+20! 21,84,舉例,例:用雙重循環(huán)打印九九乘法表。(l6_18.prg) clear For a=1 to 9 For b=1 to a p=a*b ?str(a,1)+“+str(b,1)+“=“+ str(p,2)+“ “ endfor ? endfor,85,數(shù)據(jù)表掃描循環(huán)命令SCAN,功能:在當(dāng)前選擇的表Table/.DBF文件中移動記錄指針,如果遇到符合條件的記錄就執(zhí)行一組命令。 語法:SCAN NOOPTIMIZE FOR|WHILE 命令組 EXITLOOP ENDSCAN,86,舉例,例:將xscj數(shù)據(jù)表中電腦成績不及格者的學(xué)號、姓名、電腦三個字段的值輸出。(l6_19.prg) Close all Use xscj Clear Scan for 電腦60 ?學(xué)號,姓名,電腦 endscan Cancel,87,子程序及變量的局域性,1 子程序,2 內(nèi)存變量的屬性和作用域,3 調(diào)用子程序時的數(shù)據(jù)傳遞,4 用戶定義函數(shù),5 過程文件,88,子程序及變量的局域性,子程序 分類:子程序、函數(shù)、過程三類。 功能:多次使用的可供其他程序(主程序)使用(調(diào)用)的程序(子程序) 語法:子程序: RETURN 主程序: . DO ,89,子程序及變量的局域性,內(nèi)存變量 主從內(nèi)存變量:主程序定義,子程序返回的值, 主程序繼續(xù)使用;子程序定義,返回清除 全局內(nèi)存變量:功能:不管是主程序子程序定義,主 程序子程序都可使用、修改。 語法:PUBLIC 局部內(nèi)存變量:功能:子程序中定義局部變量,隱藏 上級同名變量,解決變量同名問題. 語法:PRIVATE | LOCAL ,90,子程序及變量的局域性,調(diào)用子程序時的數(shù)據(jù)傳遞 主從變量:直接傳遞數(shù)據(jù)(主變量) 全局變量:直接傳遞數(shù)據(jù) 用參數(shù)傳遞數(shù)據(jù): 功能:利用形參與實參的對應(yīng)關(guān)系(數(shù)量, 順序)解決變量不同名問題. DO時, (傳遞); RETURN時, (返回) 語法:主程序:DOWITH 子程序:PARAMETES ,91,子程序及變量的局域性,用戶定義函數(shù) 獨立用戶定義函數(shù):說明:獨立的程序文件,任何 程序都可以以函數(shù)形式或子程序形 式調(diào)用,函數(shù)名即文件名. 語法:PARAMETES RETURN 依附用戶定義函數(shù):說明:依附在程序后面,不獨 立存在. 語法:FUNCTIONRETURN ,92,子程序及變量的局域性,過程文件 功能:由多個子程序組成的程序文件,一次打開(讀入),可減少調(diào)用子程序時訪問磁盤的次數(shù)。 組成:由多個 PROCEDURE 子程序 . RETURN 組成 打開: SET PROCEDURE TO 調(diào)用子程序: DO ,93,子程序,能夠完成一定功能的可供其它程序使用(調(diào)用)的獨立程序段稱為子 程序。它獨立存在,但可以被多次調(diào)用,調(diào)用的程序稱為主程序。 子程序結(jié)構(gòu)分為:子程序、函數(shù)、過程三類。 一、子程序的建立 在程序的末尾放上RETURN語句即可。,94,子程序,二、RETURN語句 功能:終止一個程序、過程或用戶定義函數(shù)的執(zhí)行,返回到上一級調(diào)用序、最高級調(diào)用程序、另外一個程序或者命令窗口。 語法:return to master |to |,95,子程序舉例,例:主程序 r=10 *s=0 do 程序2 ?“s=“,s cancel,例:子程序(程序2) S=ROUND(PI()*R2,2) RETURN,96,子程序舉例,例:寫一個求P的階乘的子程序。 ps=1 for I=1 to p ps=ps*I endfor return 以JC.PRG為文件名保存。,97,子程序,一、子程序的調(diào)用 調(diào)用子程序的命令DO: 功能:執(zhí)行一個Visual FoxPro主程序或調(diào)用一個子程序。 語法:DO | with 如:DO JC,98,子程序應(yīng)用舉例,例:編寫計算求S=A!+B!+C!程序。,clear input “a=“ to a input “b=“ to b input “c=“ to c ps=1 p=a do jc s=ps,p=b do jc s=s+ps p=c do jc s=s+ps ?“s=“,s cancel,99,內(nèi)存變量 的屬性和作用域,Visual FoxPro 中內(nèi)存變量按其屬性可以分為主從型、全局型(public)和局部型(private)三種。,一、主從型內(nèi)存變量,二、全局型內(nèi)存變量,三、局部型內(nèi)存變量,100,一、主從型內(nèi)存變量,程序中使用的內(nèi)存變量,凡未經(jīng)特殊說明的均屬于主從型內(nèi)存變量,這些內(nèi)存變量可以在本級程序及以下各級子程序中使用,其值可以在子程序中改變,返回主程序時保留改變后的值。,101,主從型內(nèi)存變量舉例,例:主程序 r=10 *s=0 &定義s do 程序2 ?“s=“,s &返回有效 cancel,子程序(程序2) S=ROUND(PI()*R2,2) RETURN,102,二、全局型內(nèi)存變量,全局型內(nèi)存變量是指在上、下各級程序中都可使用、修改的內(nèi)存變量。它可以由主程序定義,也可以由子程序定義,全局變量就像在一個程序中定義的變量一樣,可以任意改變和調(diào)用,當(dāng)程序執(zhí)行完后,其值仍然保存。 若要清除全局變量,必須用release命令。,103,定義全局變量的命令,功能:定義全局內(nèi)存變量或數(shù)組。 語法: a:PUBLIC |ALL|ALL LIKE|ALL EXCEPT b:PUBLIC ARRAY(,),(), 例如:看例630,104,全局型內(nèi)存變量舉例,例:主程序 r=10 *PUBLIC S *s=0 do 程序2 ?“s=“,s cancel,子程序(程序2) *PUBLIC S S=ROUND(PI()*R2,2) RETURN,105,說明:,1.任何全局內(nèi)存變量或者數(shù)組必須先定義,后賦值。 2.定義后尚未賦值的全局變量其值為邏輯值.f.。 3.全局變量在程序結(jié)束時不釋放。 4.在子程序里,可以用PRIVATE,或者用DOWHILE傳遞參數(shù)的方法將全局變量暫時隱蔽起來。 6.命令窗口中建立的變量為全局型。,106,三、局部型內(nèi)存變量,局部內(nèi)存變量和內(nèi)存變量數(shù)組只能在創(chuàng)建它們的過程或函數(shù)中使用和更改,不能被高層或低層程序訪問。一旦包含局部內(nèi)存變量和數(shù)組的過程或函數(shù)執(zhí)行完畢,則釋放這些局部內(nèi)存變量和數(shù)組。 用 LOCAL 創(chuàng)建的內(nèi)存變量和數(shù)組都初始化為“假“(.F.)。必須在賦值之前把內(nèi)存變量或數(shù)組聲明為局部。 不能縮寫 LOCAL。,107,三、局部型內(nèi)存變量,功能:創(chuàng)建局部內(nèi)存變量和內(nèi)存變量數(shù)組。 語法:LOCAL 或者 LOCAL ARRAY ( , ) , ( , ). 例6-31,108,三、局部型內(nèi)存變量,語法:PRIVATE |ALL|ALL LIKE|ALL EXCEPT 語法中的參數(shù)含義與PUBLIC中的一樣。 對PRIVATE中內(nèi)存變量的修改并不影響上級程序中與之同名的內(nèi)存變量的值。此命令只對本級程序及以下各級子程序有效,當(dāng)返回到上級程序時,被PRIVATE隱蔽的當(dāng)前程序中的內(nèi)存變量自動被清除。,109,局部型內(nèi)存變量舉例,例:主程序(程序1) clear X=1 ?“11“,X do 程序2 ?“22“,X X=5 ?“33“,X do 程序3 ?“44“,x cancel,子程序(程序2) private x *local x x=2 ?“程序2“ x RETURN,子程序(程序3) private x x=3 ?“程序3“ ,x return,110,調(diào)用子程序時 的數(shù)據(jù)傳遞,一、用主從變量和全局變量實現(xiàn)數(shù)據(jù)傳遞 二、用參數(shù)實現(xiàn)數(shù)據(jù)傳遞 功能:指定子程序中的局部變量名,并由這些局部變量接收由上級程序傳遞來的參數(shù),將其依次賦給中的各局部變量,也可以返送子程序運行的結(jié)果。 語法:PARAMETERS ,111,用主從變量和全局變量 實現(xiàn)數(shù)據(jù)傳遞,例:主程序(程序1) g=5 k=6 *c=0 do 程序2 ?c cancel,子程序(程序2) *public c c=g*k RETURN,112,例:用參數(shù)實現(xiàn)數(shù)據(jù)傳遞,主程序(程序1) g=5 k=6 mj=0 do 程序2 with g,k,mj ?mj cancel,子程序(程序2) parameters g1,k1,m1 m1=g1*k1 RETURN,113,說明,1.該命令必須放在子程序的首行。 2.該命令必須和D
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲企業(yè)餐飲產(chǎn)業(yè)鏈整合與供應(yīng)鏈優(yōu)化顧問服務(wù)協(xié)議
- 代駕租賃車輛合同服務(wù)質(zhì)量規(guī)范
- 高端制造廠房租賃合同樣本
- 農(nóng)村交房協(xié)議書范本
- 跨國貿(mào)易保理融資合作協(xié)議
- 股權(quán)退出協(xié)議范本:針對公司撤資的全面合作協(xié)議
- 標準商鋪租賃及商業(yè)活動策劃服務(wù)合同
- 高新技術(shù)廠房交易合同模板
- 出差人員交通補貼及費用結(jié)算規(guī)范合同
- 車輛抵押租賃與汽車維修保養(yǎng)合作協(xié)議
- 英語新閩教版小學(xué)四年級下冊全冊教案
- 人才梯隊培養(yǎng)計劃
- 新疆阿克蘇地區(qū)(2024年-2025年小學(xué)六年級語文)統(tǒng)編版小升初真題(下學(xué)期)試卷及答案
- 2025年初級社會工作者綜合能力全國考試題庫(含答案)
- 課程思政示范課程申報書
- 河南天一大聯(lián)考2024屆高一數(shù)學(xué)第二學(xué)期期末考試試題含解析
- 北京101中學(xué)2023-2024學(xué)年七下英語期末檢測試題含答案
- 國家開放大學(xué)本科《管理英語4》一平臺機考真題及答案(第六套)
- 2024年廣東省中考生物試卷附答案
- 合肥市瑤海區(qū)2022-2023學(xué)年七年級下學(xué)期期中歷史試題【帶答案】
- 一年級下冊口算題卡大全(口算練習(xí)題50套直接打印版)
評論
0/150
提交評論