《程序設(shè)計(jì)初步》PPT課件.ppt_第1頁(yè)
《程序設(shè)計(jì)初步》PPT課件.ppt_第2頁(yè)
《程序設(shè)計(jì)初步》PPT課件.ppt_第3頁(yè)
《程序設(shè)計(jì)初步》PPT課件.ppt_第4頁(yè)
《程序設(shè)計(jì)初步》PPT課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩122頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1,程序設(shè)計(jì)初步,2,程序設(shè)計(jì)基本內(nèi)容,程序文件的建立、運(yùn)行和修改,順序結(jié)構(gòu)程序設(shè)計(jì),選擇結(jié)構(gòu)程序設(shè)計(jì),循環(huán)結(jié)構(gòu)程序設(shè)計(jì),數(shù)組,子程序及變量的局域性,3,程序文件,由命令組成,計(jì)算機(jī)可以自動(dòng)執(zhí)行 可由任何編輯軟件生成(VFP本身有編輯器) 文件名:程序源文件為 .PRG 編譯后的程序文件 .FXP,4,程序設(shè)計(jì)概述,進(jìn)行程序設(shè)計(jì)一般要經(jīng)過以下步驟: 1分析問題或任務(wù),總結(jié)或抽象出問題的數(shù)學(xué)模型。 2根據(jù)數(shù)學(xué)模型確定解決問題的算法思想。 3根據(jù)算法思想確定要建立的數(shù)據(jù)表或數(shù)據(jù)庫(kù)的基本結(jié)構(gòu)及其數(shù)據(jù)表之間的關(guān)系。 4畫出程序流程圖。,5,程序設(shè)計(jì)概述,5編寫程序,實(shí)現(xiàn)功能要求,并在計(jì)算機(jī)上調(diào)試通過。 6用典型數(shù)據(jù)對(duì)所編寫的程序進(jìn)行測(cè)試,驗(yàn)證程序的可靠性。發(fā)現(xiàn)問題進(jìn)行修改,修改后再進(jìn)行調(diào)試,直到程序正確運(yùn)行為止。 7編寫使用說明書,整理有關(guān)資料,進(jìn)行總結(jié)。,6,程序文件的建立、運(yùn)行和修改,一、建立程序文件,二、運(yùn)行程序文件,三、修改程序文件,7,建立程序文件,一、菜單方式 1. 單擊菜單文件新建或者單擊常用工具欄的“新建“按鈕,再單擊“程序“單選按鈕,最后單擊“新文件“大按鈕。 2. 輸入程序,最后保存文件。 如:建立如下命令文件cx1.prg。,8,舉例,a=2 b=5 c=a+b ? “a=“,a ? “b=“,b ? a,“+“,b,“=“,c,9,注意以下幾點(diǎn):,(1)一個(gè)命令語句中只能有一個(gè)命令動(dòng)詞; (2)每輸入完一個(gè)語句按“回車“鍵表示該語句結(jié)束; (3)程序中用到的所有標(biāo)點(diǎn)符號(hào)一律用半角符號(hào); (4)每一個(gè)程序一般應(yīng)有一個(gè)結(jié)束語句,以表示該程序的結(jié)束。,10,建立程序文件,二、命令方式 功能:打開一個(gè)編輯窗口,從中可以修改或創(chuàng)建程序文件。 語法:MODIFY COMMAND |?NOEDIT 如:MODIFY COMMAND CX2 輸入程序后保存文件。,11,運(yùn)行程序文件,一、菜單方式 單擊!常用工具欄按鈕。 單擊程序執(zhí)行,選擇要執(zhí)行的命令文件。 二、命令方式 功能:執(zhí)行一個(gè)Visual FoxPro程序或過程。 語法:DO ,12,修改程序文件,一、菜單方式 單擊菜單文件打開或單擊常用工具欄上的“打開“按鈕,啟動(dòng)“打開“對(duì)話框。在該對(duì)話框中選擇想修改的程序文件名后單擊“確定“按鈕或直接雙擊想修改的程序文件名。 二、命令方式 使用建立命令文件同樣的命令。,13,順序結(jié)構(gòu)程序設(shè)計(jì),5 任意類型鍵盤輸入命令I(lǐng)NPUT,1 順序結(jié)構(gòu)程序設(shè)計(jì)的概念,2 輸出命令?|?,3 輸出打印命令?,4 內(nèi)存變量?jī)?nèi)部賦值命令STORE|=,6 字符型鍵盤輸入命令A(yù)CCEPT,14,順序結(jié)構(gòu)程序設(shè)計(jì),7 程序暫停、等待接收單字符命令WAIT,8 計(jì)算表達(dá)式值命令=,9 終止程序運(yùn)行命令CANCEL,10 程序注釋命令,11 文本輸出命令TEXTENDTEXT,12 輸出文本行信息命令|,13 輸入輸出命令,15,順序結(jié)構(gòu) 程序設(shè)計(jì)的概念,順序結(jié)構(gòu)是一種線性結(jié)構(gòu),是程序設(shè)計(jì)中最基礎(chǔ)的結(jié)構(gòu),該結(jié)構(gòu)中各操作塊按照各自出現(xiàn)的先后順序,依次逐塊執(zhí)行。,16,2 輸出命令?|?,功能:計(jì)算一批表達(dá)式的值,然后按指定格式在Visual FoxPro主窗口、用戶自定義窗口或打印機(jī)輸出表達(dá)式的值。 語法:?|? PICTUREFUNCTIONVATFONT,STYLE 如: ? 3*45/26 AT 2 FONT COURIER, 34 STYLE BI,17,3 輸出打印命令?,功能:將輸出結(jié)果直接送到打印機(jī)上。 語法:? 字符表達(dá)式,18,4 內(nèi)存變量?jī)?nèi)部 賦值命令STORE|=,功能:建立內(nèi)存變量,并把一個(gè)數(shù)據(jù)保存到一個(gè)或多個(gè)內(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可以給多個(gè)變量同時(shí)賦同一個(gè)值,=只能給一個(gè)變量賦值。如果給多個(gè)變量賦不同的值,必須使用多條STORE|=命令。 如:STOR 0 TO A,B,C A=0 B=0 C=0,22,說明:,4引用變量的值不會(huì)改變被引用變量的值。 如: 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 程序運(yùn)行結(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è)計(jì),例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,計(jì)算圓面積S、球體積V,球表面積F(要求四舍五入保留三位小數(shù))。公式分別為: S=r2 V=4/3r3 F=4r2,29,程序如下:,INPUT “請(qǐng)輸入圓半徑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,運(yùn)行程序時(shí)輸入姓名,并將該姓名的記錄內(nèi)容顯示出來。,31,程序如下:,SET DEFA TO A: USE JSDA ACCEPT “ 請(qǐng)輸入姓名:“ TO NAME LOCATE ALL FOR 姓名=NAME DISPLAY Cancel,32,7 程序暫停、等待接收單字符命令WAIT,功能:顯示一條提示并暫停程序運(yùn)行,直到按下任一鍵或鼠標(biāo)按鍵,程序才繼續(xù)執(zhí)行。 語法:WAIT TO WINDOWAT ,NOWAITCLEAR|NOCLEARTIMEOUT,33,舉例,例6-5:用WAIT命令暫停顯示。 Clear Wait to a ?a ?“1 Visual FoxPro“ WAIT “請(qǐng)稍候,按任意鍵繼續(xù)“ ?“2 Visual FoxPro“ WAIT “這是查看功能“ WINDOW AT 10,10 ?“3 Visual FoxPro“ WAIT WINDOW TIMEOUT 3 CANCEL,34,8 計(jì)算表達(dá)式值命令=,語法:=, 功能:計(jì)算一個(gè)或多個(gè)表達(dá)式的值,并且不返回其值。常用于需要執(zhí)行一個(gè)系統(tǒng)函數(shù)或用戶自定義函數(shù)的功能,但不需要將該函數(shù)的返回值賦給一個(gè)內(nèi)存變量、數(shù)組或數(shù)組元素的情況下。 如為了進(jìn)入插入狀態(tài),可輸入命令: =insmode(.t.),35,9 終止程序 運(yùn)行命令CANCEL,語法:CANCEL 功能:終止程序的運(yùn)行,釋放所有局部?jī)?nèi)存變量,返回到“命令“窗口。,36,10 程序注釋命令,一、行首注釋命令NOTE|* 功能:在程序中加注釋行信息。 語法:NOTE|* 注釋內(nèi)容 二、行尾注釋命令& 功能:在命令語句的尾部加注釋信息。 語法:&注釋 例6-6:計(jì)算發(fā)放工資中各種大小鈔票最少的程序。程序如下:(L6_6.PRG),37,NOTE 根據(jù)輸入的錢數(shù),計(jì)算各種面額 * 鈔票張數(shù)最少的程序。 INPUT “請(qǐng)輸入總錢款數(shù)量(單位:元):“ TO X & 單位為:元。 Y100=int(x/100) &求100元最少?gòu)垟?shù) X=x-100*y100 &求剩余款額 Y50=int(x/50) &求50元最少?gòu)垟?shù) X=x-50*y50 &求剩余款額 Y10=int(x/10) &求10元最少?gòu)垟?shù) X=x-10*y10 &求剩余款額 Y5=int(x/5) &求5元最少?gòu)垟?shù) X=x-5*y5 &求剩余款額 Y2=int(x/2) &求2元最少?gòu)垟?shù) X=x-2*y2 &求剩余款額 Y1=int(x) &求1元最少?gòu)垟?shù) X=x-y1 &求剩余“零頭“款額,38,X=x*10 &將“零頭“化為角 J5=int(x/5) &求5角最少?gòu)垟?shù) X=x-5*j5 &求剩余款額 J2=int(x/2) &求2角最少?gòu)垟?shù) X=x-2*j2 &求剩余款額 J1=int(x) &求1角最少?gòu)垟?shù) X=(x-j1)*10 &將剩余零頭化為分 F5=int(x/5) &求5分最少?gòu)垟?shù) X=x-5*f5 &求剩余款額 F2=int(x/2) &求2分最少?gòu)垟?shù) X=x-2*f2 &求剩余款額 F1=int(x) &求1分最少?gòu)垟?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世紀(jì)是信息化時(shí)代!“ clear text 21世紀(jì)是信息化時(shí)代! endtext cancel,42,12 輸出文本行 信息命令|,功能:輸出文本行信息。 語法: :輸出信息時(shí),輸出行以回車符開頭。 :輸出信息時(shí),輸出行不以回車符開頭。,43,舉例,如輸入下面兩個(gè)命令: 計(jì)算機(jī)世界 計(jì)算機(jī)世界 美好的明天 執(zhí)行結(jié)果為: 計(jì)算機(jī)世界 計(jì)算機(jī)世界美好的世界,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表,顯示該表每個(gè)記錄的姓名,職稱,基本工資字段,其中基本工資范圍在2000元以內(nèi),要求以逗號(hào)格式顯示且保留兩位小數(shù)點(diǎn),并且姓名只顯示不能修改. (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è)計(jì),一、選擇結(jié)構(gòu)程序設(shè)計(jì)的概念,二、單條件選擇命令I(lǐng)F,三、多分支選擇命令 DO CASE,48,選擇結(jié)構(gòu) 程序設(shè)計(jì)的概念,程序設(shè)計(jì)中的分支,是指在程序中從某一程序塊分支出兩個(gè)或兩個(gè)以上相對(duì)獨(dú)立、彼此不同的子程序塊的現(xiàn)象,并稱這些子程序塊為它的分支。,49,選擇結(jié)構(gòu) 程序設(shè)計(jì)的概念,一、雙分支選擇結(jié)構(gòu) 通常也稱為單條件雙分支選擇結(jié)構(gòu),或單條件選擇結(jié)構(gòu)。它僅描述具有兩個(gè)分支的分支現(xiàn)象,是最簡(jiǎn)單的選擇結(jié)構(gòu)。 二、多分支選擇結(jié)構(gòu) 該分支機(jī)構(gòu)的特點(diǎn)是:從多個(gè)選擇結(jié)構(gòu)中,選擇一個(gè)條件為真的路線作為程序執(zhí)行的路線。,50,單條件選擇命令I(lǐng)F,功能:該命令用來進(jìn)行各種條件判斷,使程序中的命令有條件的執(zhí)行。 語法: IF 命令組1 ELSE 命令組2 ENDIF,51,舉例,例6-8:鐵路托運(yùn)行李,從甲地到乙地,按規(guī)定每張客票托運(yùn)行李不超過50公斤時(shí),每公斤0.25元,如超過50公斤,超過部分按每公斤0.45元計(jì)算。編寫一個(gè)程序,把行李重量輸入計(jì)算機(jī),計(jì)算出運(yùn)費(fèi),并打印出付款清單。 運(yùn)費(fèi)公式為: p=0.25w 當(dāng)W50 p=500.25+(w-50)0.45 當(dāng)W50,52,程序如下:,Input “請(qǐng)輸入行李重量:“ TO w IF w=50 P=0.25*w Else P=50*0.25+(w-50)*0.45 Endif ?“行李重量為:“,w ?“應(yīng)付運(yùn)費(fèi)為:“,p cancel,53,舉例,例6-9:求表達(dá)式的值。 Y=x3 當(dāng)X10 Y=X5 當(dāng)0X10 Y=X2 當(dāng)X0 根據(jù)所給公式和條件,寫出程序: input “請(qǐng)輸入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 “請(qǐng)輸入X的值:“ to x if x10 y=x3 else if &1 y=x5 else &2 endif ?“X的值為:“,x ?“Y的值為:“,y cancel,求表達(dá)式的值。 Y=x3 當(dāng)X10 Y=X5 當(dāng)0X10 Y=X2 當(dāng)X0 程序如右,請(qǐng)?zhí)羁?56,例:已知系數(shù)a、b、c,編寫程序,求一元二次方程: ax2+bx+c=0的根。 問題分析:解上述方程:得到求解方程為: 根據(jù)一元二次方程的系數(shù)a、b、c的取值, 有以下幾種情況:,57,1. 當(dāng)a0時(shí),有兩個(gè)根。 當(dāng)判別式b2-4ac0時(shí),有兩個(gè)不同的實(shí)根; 當(dāng)判別式b2-4ac=0時(shí),有兩個(gè)相同的實(shí)根; 當(dāng)判別式b2-4ac0時(shí),有一個(gè)根。 3. 當(dāng)a=0,b=0時(shí),方程無意義。 根據(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 ?“兩個(gè)實(shí)根為:“,root1,root2 else ?“兩個(gè)虛根為:“,re,“+“,im,“i“ ?“ “,re,“-“,im,“i“ endif,60,else if b0 ?“只有一個(gè)根:“,-c/b else ?“方程無解!“ endif endif cancel,61,例:能打開任意表瀏覽的程序,5,10 SAY “請(qǐng)輸入表名“ get bm default space(10) READ BM=ALLTRIM(BM) IF FILE(“&bmdbf“) Use &bm & use bm是錯(cuò)誤的,不能直接用表名 Browse Else Wait “該文件不存在“ window endif,62,多分支選擇命令 DO CASE,功能:從多個(gè)選擇結(jié)構(gòu)中,選擇一個(gè)條件為真的路線作為程序執(zhí)行的路線。,語法: DO CASE CASE 命令組1 CASE 命令組2, OTHERWISE 命令組n+1 ENDCASE,63,例:設(shè)計(jì)個(gè)人納稅計(jì)算程序。按稅法規(guī)定,工資、薪金所得,使用超額累進(jìn)稅率。以每月收入額減去800元后的余額,為應(yīng)納稅所得額。 (L6_11.PRG) 其稅率表為: 級(jí)數(shù) 全月應(yīng)納稅所得額 稅率(%) 1 不超過500元 5 2 500-2000元 10 3 2000-5000元 15 4 5000-20000元 20,64,級(jí)數(shù) 全月應(yīng)納稅所得額 稅率(%) 5 20000-40000元 25 6 40000-60000元 30 7 60000-80000元 35 8 80000-100000元 40 9 100000元以上 45 分析:由于采用超額累計(jì)法計(jì)算,因此要計(jì)算出每級(jí)的納稅數(shù)額,設(shè)500元、2000元、100000元時(shí)應(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ù)分析,程序?yàn)?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 “請(qǐng)輸入本月應(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ù)制運(yùn)行:,68,舉例,例6-12:任給一個(gè)年份,判斷是否為閏年,并根據(jù)輸入的月份,判斷屬于什么季節(jié)以及該月天數(shù)。(L_12.PRG) 問題分析:閏年的條件是能被4整除但不能被100整除,或者能被400整除。根據(jù)閏年條件可得出閏年的邏輯表達(dá)式: MOD(Y,4)=0.AND.MOD(Y,100)0.OR.MOD(Y,400)=0,69,*求閏年、季節(jié)、每月的天數(shù) CLEAR input “請(qǐng)輸入年份:“ 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 “請(qǐng)輸入月份(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ù)制運(yùn)行:,70,循環(huán)結(jié)構(gòu)程序設(shè)計(jì),1 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的概念,2 當(dāng)型循環(huán)命令DO WHILE,3 步長(zhǎng)型循環(huán)命令FOR,4 數(shù)據(jù)表掃描循環(huán)命令SCAN,71,循環(huán)結(jié)構(gòu) 程序設(shè)計(jì)的概念,所謂循環(huán)是指在程序設(shè)計(jì)中,從某處開始有規(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)型、直到型與步長(zhǎ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)給定的條件為真時(shí),就使DO WHILE ENDDO之間的命令重復(fù)執(zhí)行,實(shí)現(xiàn)程序循環(huán)。 語法:DO WHILE 命令組 EXIT LOOP ENDDO,74,舉例,例:用循環(huán)語句打印5個(gè)“Visual FoxPro“字符串。 X=1 Do while x=5 ?“Visual FoxPro“ x=x+1 ENDDO CANCEL,75,舉例,例:有一張厚0.5毫米,面積足夠大的紙,將它不斷地對(duì)折。問對(duì)折多少次后,其厚度可達(dá)珠穆朗瑪峰的高度(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 ?“對(duì)折的次數(shù):“,n ?“此時(shí)的H為:“,h cancel,77,舉例,例:打開數(shù)據(jù)表JSDA.DBF,從鍵盤上輸入某一職稱(比如講師),然后列出符合該職稱的所有記錄的內(nèi)容,用循環(huán)來作,直到直接按回車鍵時(shí)結(jié)束程序。(L6_15.PRG) 外循環(huán)用來控制不同職稱的輸入,內(nèi)循環(huán)用來控制滿足條件的多條記錄的輸出。程序如下:,78,CLEAR USE jsda SORT ON 職稱 TO jsda1 USE jsda1 DO WHILE .T. ACCEPT “請(qǐng)輸入要查找的職稱“ TO ZC IF ZC=“ EXIT ENDIF LOCATE FOR 職稱=ZC DO WHILE 職稱=ZC DISP OFF SKIP ENDDO ENDDO CANCEL,79,注意,1DO WHILE 命令只能在程序中使用。 2每一個(gè)DO WHILE 必須有一個(gè)ENDDO與其配對(duì)。 3在程序中應(yīng)避免出現(xiàn)死循環(huán)。 4在命令組中可以嵌套IFENDIF、DO CASEENDCASE、DO WHILEENDDO、FORENDFOR、SCANENDSCAN結(jié)構(gòu)。,80,步長(zhǎng)型循環(huán)命令FOR,功能:根據(jù)給定的次數(shù)重復(fù)執(zhí)行一組命令,實(shí)現(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文件中移動(dòng)記錄指針,如果遇到符合條件的記錄就執(zhí)行一組命令。 語法:SCAN NOOPTIMIZE FOR|WHILE 命令組 EXITLOOP ENDSCAN,86,舉例,例:將xscj數(shù)據(jù)表中電腦成績(jī)不及格者的學(xué)號(hào)、姓名、電腦三個(gè)字段的值輸出。(l6_19.prg) Close all Use xscj Clear Scan for 電腦60 ?學(xué)號(hào),姓名,電腦 endscan Cancel,87,子程序及變量的局域性,1 子程序,2 內(nèi)存變量的屬性和作用域,3 調(diào)用子程序時(shí)的數(shù)據(jù)傳遞,4 用戶定義函數(shù),5 過程文件,88,子程序及變量的局域性,子程序 分類:子程序、函數(shù)、過程三類。 功能:多次使用的可供其他程序(主程序)使用(調(diào)用)的程序(子程序) 語法:子程序: RETURN 主程序: . DO ,89,子程序及變量的局域性,內(nèi)存變量 主從內(nèi)存變量:主程序定義,子程序返回的值, 主程序繼續(xù)使用;子程序定義,返回清除 全局內(nèi)存變量:功能:不管是主程序子程序定義,主 程序子程序都可使用、修改。 語法:PUBLIC 局部?jī)?nèi)存變量:功能:子程序中定義局部變量,隱藏 上級(jí)同名變量,解決變量同名問題. 語法:PRIVATE | LOCAL ,90,子程序及變量的局域性,調(diào)用子程序時(shí)的數(shù)據(jù)傳遞 主從變量:直接傳遞數(shù)據(jù)(主變量) 全局變量:直接傳遞數(shù)據(jù) 用參數(shù)傳遞數(shù)據(jù): 功能:利用形參與實(shí)參的對(duì)應(yīng)關(guān)系(數(shù)量, 順序)解決變量不同名問題. DO時(shí), (傳遞); RETURN時(shí), (返回) 語法:主程序:DOWITH 子程序:PARAMETES ,91,子程序及變量的局域性,用戶定義函數(shù) 獨(dú)立用戶定義函數(shù):說明:獨(dú)立的程序文件,任何 程序都可以以函數(shù)形式或子程序形 式調(diào)用,函數(shù)名即文件名. 語法:PARAMETES RETURN 依附用戶定義函數(shù):說明:依附在程序后面,不獨(dú) 立存在. 語法:FUNCTIONRETURN ,92,子程序及變量的局域性,過程文件 功能:由多個(gè)子程序組成的程序文件,一次打開(讀入),可減少調(diào)用子程序時(shí)訪問磁盤的次數(shù)。 組成:由多個(gè) PROCEDURE 子程序 . RETURN 組成 打開: SET PROCEDURE TO 調(diào)用子程序: DO ,93,子程序,能夠完成一定功能的可供其它程序使用(調(diào)用)的獨(dú)立程序段稱為子 程序。它獨(dú)立存在,但可以被多次調(diào)用,調(diào)用的程序稱為主程序。 子程序結(jié)構(gòu)分為:子程序、函數(shù)、過程三類。 一、子程序的建立 在程序的末尾放上RETURN語句即可。,94,子程序,二、RETURN語句 功能:終止一個(gè)程序、過程或用戶定義函數(shù)的執(zhí)行,返回到上一級(jí)調(diào)用序、最高級(jí)調(diào)用程序、另外一個(gè)程序或者命令窗口。 語法:return to master |to |,95,子程序舉例,例:主程序 r=10 *s=0 do 程序2 ?“s=“,s cancel,例:子程序(程序2) S=ROUND(PI()*R2,2) RETURN,96,子程序舉例,例:寫一個(gè)求P的階乘的子程序。 ps=1 for I=1 to p ps=ps*I endfor return 以JC.PRG為文件名保存。,97,子程序,一、子程序的調(diào)用 調(diào)用子程序的命令DO: 功能:執(zhí)行一個(gè)Visual FoxPro主程序或調(diào)用一個(gè)子程序。 語法:DO | with 如:DO JC,98,子程序應(yīng)用舉例,例:編寫計(jì)算求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)存變量可以在本級(jí)程序及以下各級(jí)子程序中使用,其值可以在子程序中改變,返回主程序時(shí)保留改變后的值。,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)存變量是指在上、下各級(jí)程序中都可使用、修改的內(nèi)存變量。它可以由主程序定義,也可以由子程序定義,全局變量就像在一個(gè)程序中定義的變量一樣,可以任意改變和調(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é)束時(shí)不釋放。 4.在子程序里,可以用PRIVATE,或者用DOWHILE傳遞參數(shù)的方法將全局變量暫時(shí)隱蔽起來。 6.命令窗口中建立的變量為全局型。,106,三、局部型內(nèi)存變量,局部?jī)?nèi)存變量和內(nèi)存變量數(shù)組只能在創(chuàng)建它們的過程或函數(shù)中使用和更改,不能被高層或低層程序訪問。一旦包含局部?jī)?nèi)存變量和數(shù)組的過程或函數(shù)執(zhí)行完畢,則釋放這些局部?jī)?nèi)存變量和數(shù)組。 用 LOCAL 創(chuàng)建的內(nèi)存變量和數(shù)組都初始化為“假“(.F.)。必須在賦值之前把內(nèi)存變量或數(shù)組聲明為局部。 不能縮寫 LOCAL。,107,三、局部型內(nèi)存變量,功能:創(chuàng)建局部?jī)?nèi)存變量和內(nèi)存變量數(shù)組。 語法:LOCAL 或者 LOCAL ARRAY ( , ) , ( , ). 例6-31,108,三、局部型內(nèi)存變量,語法:PRIVATE |ALL|ALL LIKE|ALL EXCEPT 語法中的參數(shù)含義與PUBLIC中的一樣。 對(duì)PRIVATE中內(nèi)存變量的修改并不影響上級(jí)程序中與之同名的內(nèi)存變量的值。此命令只對(duì)本級(jí)程序及以下各級(jí)子程序有效,當(dāng)返回到上級(jí)程序時(shí),被PRIVATE隱蔽的當(dāng)前程序中的內(nèi)存變量自動(dòng)被清除。,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í) 的數(shù)據(jù)傳遞,一、用主從變量和全局變量實(shí)現(xiàn)數(shù)據(jù)傳遞 二、用參數(shù)實(shí)現(xiàn)數(shù)據(jù)傳遞 功能:指定子程序中的局部變量名,并由這些局部變量接收由上級(jí)程序傳遞來的參數(shù),將其依次賦給中的各局部變量,也可以返送子程序運(yùn)行的結(jié)果。 語法:PARAMETERS ,111,用主從變量和全局變量 實(shí)現(xiàn)數(shù)據(jù)傳遞,例:主程序(程序1) g=5 k=6 *c=0 do 程序2 ?c cancel,子程序(程序2) *public c c=g*k RETURN,112,例:用參數(shù)實(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論