版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第4章章 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計本章內(nèi)容本章內(nèi)容 程序和算法的概念 結(jié)構(gòu)化程序的三種邏輯結(jié)構(gòu) 運(yùn)用三種邏輯結(jié)構(gòu)編寫結(jié)構(gòu)化程序 子程序、過程和自定義函數(shù)的 概念及使用4.14.1結(jié)構(gòu)化程序設(shè)計基礎(chǔ)結(jié)構(gòu)化程序設(shè)計基礎(chǔ) 4.1.1 4.1.1 結(jié)構(gòu)化程序的概念結(jié)構(gòu)化程序的概念 4.1.2 4.1.2 結(jié)構(gòu)化程序文件的建立結(jié)構(gòu)化程序文件的建立 4.1.34.1.3結(jié)構(gòu)化程序文件的執(zhí)行結(jié)構(gòu)化程序文件的執(zhí)行4.14.1結(jié)構(gòu)化程序設(shè)計基礎(chǔ)結(jié)構(gòu)化程序設(shè)計基礎(chǔ) 1程序的概念 程序是解決實(shí)際問題的計算機(jī)語言語句的有序集合。程序設(shè)計是用計算機(jī)能夠接收的形式,把解決問題的步驟用程序設(shè)計語言描述出來的工作過程。
2、 2算法的概念及其描述 算法的概念 算法是指解決給定問題的有窮操作步驟的準(zhǔn)確而又完整的描述。 算法有4個特征: 有窮性。算法在執(zhí)行有窮的操作步驟后必須結(jié)束。 確定性。算法的計算規(guī)則及相應(yīng)的計算步驟必須唯一確定,無二義。 可行性。每一個步驟在有限時間內(nèi)必須完成。 數(shù)據(jù)輸入和信息輸出。算法要求有原始的數(shù)據(jù)輸入,至少有一個有效信息的輸出。4.14.1結(jié)構(gòu)化程序設(shè)計基礎(chǔ)結(jié)構(gòu)化程序設(shè)計基礎(chǔ) 算法的描述 算法可以用多種方法進(jìn)行描述。常用的有程序流程圖、結(jié)構(gòu)化框圖(N-S圖)和偽碼表示。 3結(jié)構(gòu)化程序的概念 結(jié)構(gòu)化程序由三種基本邏輯(順序、選擇和循環(huán))組成的程序,結(jié)構(gòu)化程序有如下特點(diǎn)。 程序的執(zhí)行路徑只有一
3、個入口,一個出口。 程序中任何一個位置都存在從入口的一個路徑,經(jīng)過該結(jié)點(diǎn)到達(dá)出口。 無死循環(huán)。4.1.2 4.1.2 結(jié)構(gòu)化程序文件的建立結(jié)構(gòu)化程序文件的建立 VFP所建立的文件稱為源程序,也稱命令文件,是由一系列VFP命令組成的程序。其擴(kuò)展名為.PRG。源程序在執(zhí)行時自動翻譯成目標(biāo)文件,其擴(kuò)展名為.FXP。 VFP本身提供了程序編輯器,可以用菜單方式、項(xiàng)目管理器或者命令窗口中輸入命令來創(chuàng)建程序文件。4.1.2 4.1.2 結(jié)構(gòu)化程序文件的建立結(jié)構(gòu)化程序文件的建立 1用菜單方式創(chuàng)建程序文件 選擇“文件”菜單中的“新建”命令,選擇“程序”單選按鈕,再單擊“新建文件”命令即可創(chuàng)建程序文件。 2用項(xiàng)
4、目管理器創(chuàng)建程序文件 新建一個項(xiàng)目文件,打開項(xiàng)目管理器,選擇項(xiàng)目管理器中的“全部”或“代碼”選項(xiàng)卡的“程序”選項(xiàng),再單擊“新建”按鈕,即可打開程序編輯窗口。 3用命令窗口創(chuàng)建程序文件 在命令窗口鍵入命令:“MODIFY COMMAND 程序文件名”,回車即可打開程序編輯窗口。在程序窗口輸入、編輯完成程序代碼后,保存文件即可。4.1.34.1.3結(jié)構(gòu)化程序文件的執(zhí)行結(jié)構(gòu)化程序文件的執(zhí)行 1程序文件的打開 在項(xiàng)目管理器中,選擇要打開的程序文件,然后選擇“修改”按鈕,即可打開程序文件并顯示在程序編輯窗口,可以對其進(jìn)行編輯修改,或使用命令:“MODIFY COMMAND”,回車也可打開程序文件。 2程
5、序文件的執(zhí)行 在項(xiàng)目中的文件,打開項(xiàng)目后,選中要運(yùn)行的程序文件,再單擊“運(yùn)行”按鈕,即可運(yùn)行該程序。在命令窗口中使用命令:“DO ”,回車也可運(yùn)行該程序。 運(yùn)行程序時,若有錯誤,將會出現(xiàn)錯誤提示窗口,并且提示是什么樣的錯誤,單擊“取消”回到程序的編輯窗口進(jìn)行修改,修改完成后保存文件即可。程序執(zhí)行后,生成擴(kuò)展名為.FXP文件,主文件名同命令文件同名。4.2 4.2 順序結(jié)構(gòu)程序設(shè)計順序結(jié)構(gòu)程序設(shè)計 4.2.14.2.1輔助語句輔助語句 4.2.2 4.2.2 輸入命令輸入命令 4.2.3 4.2.3 格式輸入格式輸入/ /出命令出命令 4.2.44.2.4順序結(jié)構(gòu)程序設(shè)計順序結(jié)構(gòu)程序設(shè)計4.2.
6、14.2.1輔助語句輔助語句 1注釋語句 格式一:NOTE 格式二: * 格式三:& 說明:注釋語句是非執(zhí)行語句,對程序進(jìn)行注釋,幫助閱讀理解源程序。格式一和格式二,放在一行的開頭,對前后程序段進(jìn)行注釋;格式三,放在某條語句的后面對本語句注釋。 2系統(tǒng)初始化命令 格式:CLEAR ALL 說明:清除所有內(nèi)存變量和數(shù)組,關(guān)閉所有打開的各類文件,選擇1號工作區(qū)為當(dāng)前工作區(qū),使系統(tǒng)恢復(fù)到初始狀態(tài)。4.2.14.2.1輔助語句輔助語句 3清屏命令 格式:CLEAR 說明:清除當(dāng)前屏幕上所有信息,光標(biāo)定位在屏幕左上角。 4信息顯示控制命令 格式:SET TALK ON|OFF 說明:在ON狀態(tài)即
7、會話狀態(tài),有些命令執(zhí)行后,會在屏幕上返回有關(guān)信息,實(shí)現(xiàn)與用戶“對話”(TALK)。這不僅會減慢程序的運(yùn)行速度,而且還會與程序本身的輸出相互夾雜,引起混淆。所以通常在程序的開始設(shè)置為OFF,關(guān)閉對話。在程序的末尾設(shè)置為ON狀態(tài),打開對話。默認(rèn)為ON狀態(tài)。 5警告信息顯示控制命令 格式:SET SAFETY ON|OFF4.2.14.2.1輔助語句輔助語句 說明:為了安全,在執(zhí)行一些不能再恢復(fù)的操作前,系統(tǒng)在屏幕上顯示“警告信息”提示謹(jǐn)慎操作。如ZAP命令刪除記錄,INDEX 命令是否覆蓋文件等。設(shè)置OFF狀態(tài)將不作提示直接操作,默認(rèn)為ON狀態(tài)。 6返回語句 格式:RETURN TO MASTER
8、|TO | 說明:結(jié)束程序的執(zhí)行。TO MASTER直接返回到主程序,如果程序是被另一程序調(diào)用,則返回到調(diào)用程序,否則返回到命令窗口。4.2.2 4.2.2 輸入命令輸入命令 1輸入一個字符命令(等待命令) 格式:WAITTOWINDOWAT,NOWAITTIMEOUT 功能:暫停程序執(zhí)行,等待用戶單擊鍵盤上的一個鍵,并繼續(xù)執(zhí)行。 說明:該命令只能從鍵盤接收一個字符,為提示語,缺省為“按任意鍵繼續(xù)”。 選TO短語將接收的字符賦值給內(nèi)存變量。 選擇WINDOW短語,則將提示語顯示在屏幕右上角的窗口中;再選AT項(xiàng),提示語在屏幕指定坐標(biāo)位置顯示;缺省WINDOW在光標(biāo)當(dāng)前位置顯示。 選NOWAIT短
9、語,顯示提示語后,光標(biāo)仍處于當(dāng)前控制窗口中。 選TIMEOUT短語,以秒為單位給出最大等待時間,若不按鍵則自動終止該命令。4.2.2 4.2.2 輸入命令輸入命令 例4-1:在學(xué)生學(xué)籍管理數(shù)據(jù)庫的xsda表中顯示任意一個系學(xué)生的情況。 編寫程序代碼如下: OPEN DATABASE 學(xué)生學(xué)籍管理 USE xsda WAIT 請輸入待查學(xué)生的學(xué)號(1-3): TO N IF VAL(N)3 WAIT 輸入無效,結(jié)束程序運(yùn)行! WINDOW TIMEOUT 5 RETURN ELSE STORE 0+N TO AAA LIST FOR 學(xué)號=AAA ENDIF CLOSE DATABASE RET
10、URN4.2.2 4.2.2 輸入命令輸入命令 2輸入字符串命令 格式:ACCEPT TO 功能:從鍵盤輸入一個字符串常量賦給內(nèi)存變量。 說明:輸入的字符串不用定界符括起來,若使用定界符,則定界符將成為字符串的內(nèi)容,輸入完按回車結(jié)束。 例4-2:從鍵盤輸入某數(shù)據(jù)庫的文件名,要求打開該數(shù)據(jù)庫并顯示其內(nèi)容。 編寫程序代碼如下: CLEAR SET TALK OFF ACCEPT 請輸入數(shù)據(jù)庫名: TO A4.2.2 4.2.2 輸入命令輸入命令 ACCEPT 請輸入數(shù)據(jù)庫名: TO A OPEN DATABASE &A ACCEPT 請輸入表名: TO B USE &B LIST
11、USE SET TALK ON RETURN 3輸入任意類型數(shù)據(jù)命令 格式:INPUT TO 功能:從鍵盤輸入數(shù)值型、字符型、日期型、邏輯型、貨幣型數(shù)據(jù)給內(nèi)存變量。4.2.2 4.2.2 輸入命令輸入命令 說明:輸入的常量必須用符號表示出數(shù)據(jù)類型,輸入完按回車結(jié)束。注意:若輸入的不是數(shù)值型數(shù)據(jù),一定要加定界符。例輸入邏輯真值,要輸入“.T.”。 例4-3:已知存在一個學(xué)生表,打開學(xué)生表,顯示前幾個學(xué)生的情況。 編寫程序代碼如下: CLEAR SET TALK OFF USE 學(xué)生 INPUT “請輸入一個數(shù):”TO X & 從鍵盤輸入一個數(shù) LIST NEXT X USE RETURN
12、4.2.3 4.2.3 格式輸入格式輸入/ /出命令出命令 格式: SAY|GET 功能:在屏幕指定位置輸入或輸出表達(dá)式的值。 說明:(1)SAY在指定位置輸出表達(dá)式的值。 (2)GET 在指定位置輸入表達(dá)式的值。 如:4,4 SAY “HELLO!” &在4行,4列輸出HELLO! 6,6 GET X PICTURE “99” &在6行,6列輸入數(shù)據(jù)給變量X READ注意:GET必須和READ結(jié)合用,PICTURE “99”定義某變量的輸出格式4.2.44.2.4順序結(jié)構(gòu)程序設(shè)計順序結(jié)構(gòu)程序設(shè)計 所謂順序結(jié)構(gòu)就是各條命令按它們在程序中排列的先后次序、自上而下地執(zhí)行。對于大多數(shù)
13、的順序結(jié)構(gòu)程序設(shè)計的一般步驟如下: 1建立數(shù)學(xué)模型 對于需要計算機(jī)解決的實(shí)際問題,首先要找出解決該問題的數(shù)學(xué)模型或數(shù)學(xué)公式。通常需要設(shè)定問題中的變量并合理命名,然后確定解決問題的方法或數(shù)學(xué)公式。為計算機(jī)解決該問題打好基礎(chǔ)。 2確定算法及描述 確定了模型以后,就需要確定用計算機(jī)解決問題的步驟。在順序結(jié)構(gòu)程序設(shè)計中,其算法可以描述為: 為已知變量賦值; 根據(jù)公式求未知量; 輸出計算結(jié)果。 3編寫程序代碼 確定了算法以后,根據(jù)VFP的語法規(guī)則和命令格式在程序窗口中輸入程序代碼。輸入完畢后,保存程序文件。4.2.44.2.4順序結(jié)構(gòu)程序設(shè)計順序結(jié)構(gòu)程序設(shè)計 例4-4:假設(shè)已經(jīng)有一個教師表,輸入教師的名
14、字,把教師的職稱改成“教授”。 編寫程序代碼如下: CLEAR SET TALK OFF USE 教師 ACCEPT “請輸入要修改的教師的名字:” TO X LOCATE FOR 姓名=X REPL 職稱 WITH 教授 DISP USE SET TALK ON RETURN4.3 4.3 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計 4.3.1 IF分支語句 4.3.2 IIF4.3.2 IIF函數(shù)函數(shù) 4.3.3 IF4.3.3 IF分支語句的嵌套分支語句的嵌套 4.3.44.3.4多重分支語句多重分支語句4.3 4.3 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計 一般情況下,程序運(yùn)行都是順序執(zhí)行。但有時處理
15、的問題可能有兩種或多種情況,要根據(jù)具體的條件選擇其中的一種。在VFP中,程序的分支結(jié)構(gòu)是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語句出現(xiàn)的物理順序執(zhí)行。 分支結(jié)構(gòu)又稱為選擇結(jié)構(gòu),是VFP的基本結(jié)構(gòu)之一。VFP提供了IF語句和DO CASE語句兩種形式。用IF語句描述兩分支比較方便,如果是多分支可用IF語句的嵌套,但這樣編寫的程序可讀性差,這時可用DO CASE多分支語句實(shí)現(xiàn)比較方便。4.3.1 IF4.3.1 IF分支語句分支語句 格式:IF ELSE ENDIF 功能:如果條件表達(dá)式的值為.T.,則執(zhí)行語句組1,然后執(zhí)行ENDIF的后續(xù)語句,而當(dāng)條件不滿足且具有ELSE語句,則執(zhí)行語句組2
16、,若無ELSE語句,則執(zhí)行ENDIF的后續(xù)語句。 說明:IF、ELSE、ENDIF各占一行,每一個IF都必須有一個ENDIF與之對應(yīng),即必須成對出現(xiàn)。條件可以為關(guān)系表達(dá)式或者邏輯表達(dá)式。語句組1或者語句組2可以包含IF語句,即可以嵌套。4.3.1 IF4.3.1 IF分支語句分支語句 例4-5:求一元二次方程AX2BXC0的實(shí)根。 編寫程序代碼如下: CLEAR SET TALK OFF INPUT A= TO A INPUT B= TO B INPUT C= TO C Z=B2-4*A*C IF Z=0 X1=(-B+SQRT(Z)/(2*A) X2=(-B-SQRT(Z)/(2*A) ?
17、X1,X2 ENDIF SET TALK ON RETURN4.3.2 IIF4.3.2 IIF函數(shù)函數(shù) VFP提供了IIF函數(shù),利用該函數(shù)可以實(shí)現(xiàn)簡單的分支結(jié)構(gòu)。其語法格式如下: 格式:IIF(,) 功能:若有值為.T.時,函數(shù)返回的值,否則,函數(shù)返回的值。 說明:兩個表達(dá)式的可以是任意類型,且允許兩個表達(dá)式的類型不同。4.3.2 IIF4.3.2 IIF函數(shù)函數(shù) 例4-6:從鍵盤輸入兩個數(shù),比較兩個數(shù)的大小,輸出最大值。 編寫程序代碼如下: CLEAR SET TALK OFF INPUT “請輸入第一個數(shù):” TO X INPUT “請輸入第二個數(shù):” TO Y MAX=IIF( XY,
18、X,Y) ? ”最大的數(shù)為:”,MAX SET TALK ON RETURN4.3.3 IF4.3.3 IF分支語句的嵌套分支語句的嵌套 有時在實(shí)際情況中,程序結(jié)構(gòu)超過2個分支選擇,這時就需要用IF分支語句的嵌套。 格式:IF ELSE IF ELSE ENDIF ENDIF注意:每個ELSE和最近的IF嵌套,每個ENDIF和最近的IF嵌套。 例4-7從鍵盤上輸入三個數(shù),比較三個數(shù)的大小,輸出最大的那個數(shù)。 編寫程序代碼如下: CLEAR SET TALK OFF INPUT “請輸入第一個數(shù):” TO X INPUT “請輸入第二個數(shù):” TO Y INPUT “請輸入第三個數(shù):” TO Z
19、 IF XY AND XZ ? ”最大的數(shù)為:” ,X ELSE IF YZ ? ”最大的數(shù)為:” ,Y ELSE ? ”最大的數(shù)為:” ,Z ENDIF ENDIF RETURN4.3.44.3.4多重分支語句多重分支語句 多重分支語句,即根據(jù)多個條件表達(dá)式的值,選擇執(zhí)行多個操作中的一個對應(yīng)執(zhí)行。此時如果用IF分支語句的嵌套實(shí)現(xiàn),則會使程序的長度增加,復(fù)雜度增加,這時就可以用多重分支語句DO CASE實(shí)現(xiàn)。 格式:DO CASE CASE CASE CASE OTHERWISE ENDCASE4.3.44.3.4多重分支語句多重分支語句 功能:在執(zhí)行該語句時,系統(tǒng)依次查看每一個CASE后面的
20、條件表達(dá)式的值,若有條件表達(dá)式的值滿足要求,則執(zhí)行該條件下的語句組,然后執(zhí)行ENDCASE后面的語句,而不再查看其他的CASE條件語句。而當(dāng)所有CASE條件都不滿足,且沒有OTHERWISE選項(xiàng)時,則不執(zhí)行任何語句,直接執(zhí)行ENDCASE后面的語句;若有OTHERWISE選項(xiàng)時,則執(zhí)行OTHERWISE后面的語句組,再執(zhí)行ENDCASE后面的語句。 例4-8:函數(shù)F(X)是一個分段函數(shù),當(dāng)X5,F(xiàn)(X)=0當(dāng)-1=X1,F(xiàn)(X)=2X2-X,當(dāng)1=X5,F(xiàn)(X)=X。4.3.44.3.4多重分支語句多重分支語句 編寫程序代碼如下: INPUT “請輸入X值:” TO X DO CASE CAS
21、E X-L F=0 CASE X1 F=2*X*X-X CASE X5 F=X OTHERWISE F0 ENDCASE ? ”F(X)”,F RETURN4.4 4.4 循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計 4.4.1 FOR4.4.1 FOR循環(huán)循環(huán) 4.4.2 DO WHILEENDDO4.4.2 DO WHILEENDDO循環(huán)循環(huán) 4.4.3 4.4.3 循環(huán)結(jié)構(gòu)的嵌套循環(huán)結(jié)構(gòu)的嵌套 4.4.4 SCAN4.4.4 SCAN循環(huán)循環(huán)4.4 4.4 循環(huán)結(jié)構(gòu)程序設(shè)計循環(huán)結(jié)構(gòu)程序設(shè)計 循環(huán)結(jié)構(gòu)是在給定的條件下反復(fù)執(zhí)行某些相同的操作,而且在循環(huán)中用到的數(shù)據(jù)的變化是有一定的規(guī)律。這種被反復(fù)執(zhí)行的操
22、作稱為循環(huán),被重復(fù)執(zhí)行的語句序列稱為循環(huán)體。循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來描述重復(fù)執(zhí)行某段算法的問題,這是程序設(shè)計中最能發(fā)揮計算機(jī)特長的程序結(jié)構(gòu) 。 VFP提供了3種循環(huán)語句:FORENDFOR、DO WHILEENDDO、SCANENDSCAN來實(shí)現(xiàn)循環(huán)結(jié)構(gòu),F(xiàn)OR語句一般用于實(shí)現(xiàn)循環(huán)次數(shù)已知的循環(huán),DO WHILE語句用于實(shí)現(xiàn)循環(huán)次數(shù)未知的循環(huán)。4.4.1 FOR4.4.1 FOR循環(huán)循環(huán) 格式:FOR=TOSTEP EXIT LOOP ENDFOR|NEXT 功能:根據(jù)設(shè)定的循環(huán)次數(shù),重復(fù)執(zhí)行,即循環(huán)體。系統(tǒng)執(zhí)行FOR語句時,先把的值(即初值)賦給循環(huán)變量,然后判斷是否大于
23、或小于的值(即終值),若是,則結(jié)束循環(huán),否則執(zhí)行循環(huán)體內(nèi)的語句;然后循環(huán)變量增加一個的值(即步長),再與終值比較,若它仍不超過終值,則再次執(zhí)行循環(huán)體;直到循環(huán)變量超過終值,結(jié)束循環(huán)。步長為1可省略。4.4.1 FOR4.4.1 FOR循環(huán)循環(huán) 說明:循環(huán)變量只能是內(nèi)存變量。 ENDFOR|NEXT可以任選一個,兩者等價。 在循環(huán)體內(nèi),EXIT語句和LOOP語句是可選項(xiàng)。在循環(huán)體內(nèi)存在兩個語句時若執(zhí)行EXIT語句,將無條件地跳出循環(huán),執(zhí)行ENDFOR后面的語句,EXIT語句又稱無條件結(jié)束循環(huán)語句;若執(zhí)行LOOP語句,立即返回到FOR語句,重新進(jìn)行FOR語句。LOOP語句只能在循環(huán)語句中使用。 步
24、長為數(shù)值,可正可負(fù)。步長為正時,循環(huán)變量大于終值;步長為負(fù)時,循環(huán)變量小于終值。若步長為0時,只要進(jìn)入循環(huán),則將永遠(yuǎn)執(zhí)行循環(huán)體,不會終止,形成死循環(huán)。4.4.1 FOR4.4.1 FOR循環(huán)循環(huán) 例4-9:輸出10以內(nèi)的數(shù)字。 編寫程序代碼如下: CLEAR SET TALK OFF FOR I=1 TO 10 ? I ENDFOR SET TALK ON RETURN4.4.2 DO WHILEENDDO4.4.2 DO WHILEENDDO循環(huán)循環(huán) 格式:DO WHILE LOOP EXIT ENDDO 功能:當(dāng)DO WHILE語句中的值為真時,反復(fù)執(zhí)行DO WHILE與ENDDO之間的語
25、句。直到的值為假,結(jié)束循環(huán),執(zhí)行ENDDO之后的語句。 說明:LOOP語句和EXIT語句與FOR循環(huán)中的含義相同。 例4-10:逐條顯示在“學(xué)生學(xué)籍管理”數(shù)據(jù)庫的“xsda”表中性別為“男”的所有記錄。 編寫程序代碼如下: CLEAR SET TALK OFF OPEN DATABASE 學(xué)生學(xué)籍管理 USE xsda DO WHILE .NOT. EOF() IF 性別=”男” DISPLAY ENDIF SKIP ENDDO CLOSE DATABASE SET TALK ON RETURN4.4.3 4.4.3 循環(huán)結(jié)構(gòu)的嵌套循環(huán)結(jié)構(gòu)的嵌套 在一個循環(huán)語句的循環(huán)體內(nèi)又完整地包含了另一個循
26、環(huán)語句,稱為循環(huán)的嵌套。FOR循環(huán)和DO WHILE循環(huán)可以相互嵌套,即FOR循環(huán)可以嵌套FOR循環(huán),也可以嵌套DO WHILE循環(huán);DO WHILE循環(huán)可以嵌套FOR循環(huán),也可以嵌套DO WHILE循環(huán)。 例4-11:輸出九九乘法表。 編寫程序代碼如下: CLEAR FOR I=1 TO 9 FOR J= 1 TO I T=I*J ? STR(I,1)+*+STR(J,1)+=+STR(T,2)+SPACE(2) ENDFOR ? ENDFOR RETURN4.4.4 SCAN4.4.4 SCAN循環(huán)循環(huán) 該語句是為處理數(shù)據(jù)表而設(shè)計的循環(huán)語句。SCAN循環(huán)能自動對數(shù)據(jù)表中滿足條件的記錄進(jìn)行掃
27、描處理。 格式:SCAN FOR/WHILE EXIT LOOP ENDSCAN 功能:自動對數(shù)據(jù)表中滿足條件的記錄進(jìn)行掃描處理。范圍、條件缺省時,對所有記錄進(jìn)行處理。 說明:通過循環(huán)依次處理給定范圍符合條件的每一條記錄,語句本身自動移動記錄指針。LOOP語句和EXIT語句的含義和用法與前面相同。4.4.4 SCAN4.4.4 SCAN循環(huán)循環(huán) 例4-12:輸出“學(xué)生學(xué)籍管理”數(shù)據(jù)庫的“xsda”表中所有團(tuán)員的姓名。 編寫程序代碼如下: CLEAR SET TALK OFF OPEN DATABASE 學(xué)生學(xué)籍管理 USE xsda SCAN IF 是否團(tuán)員= .T. ? 姓名 ENDIF E
28、NDSCAN CLOSE DATABASE SET TALK ON RETURN4.5 4.5 模塊結(jié)構(gòu)程序設(shè)計模塊結(jié)構(gòu)程序設(shè)計 4.5.1 4.5.1 子程序及調(diào)用子程序及調(diào)用 4.5.2 4.5.2 過程及其調(diào)用過程及其調(diào)用 4.5.3 4.5.3 自定義函數(shù)自定義函數(shù)4.5 4.5 模塊結(jié)構(gòu)程序設(shè)計模塊結(jié)構(gòu)程序設(shè)計 應(yīng)用程序一般都是多模塊程序,可包含多個程序模塊。采用模塊化的程序結(jié)構(gòu)使得程序的編寫與調(diào)試、系統(tǒng)的維護(hù)都很方便,也便于以后的擴(kuò)充。程序的模塊化的具體形式有子程序、過程和函數(shù)。 模塊可以是主程序、子程序和自定義函數(shù)。在一個程序中調(diào)用另一個程序,這個被其他程序調(diào)用的程序就叫子程序,
29、而調(diào)用它的程序稱為主程序。4.5.1 4.5.1 子程序及調(diào)用子程序及調(diào)用1子程序的調(diào)用及形參定義 VFP中子程序與主程序一樣,都可以用“MODIFY COMMAND”命令來建立和修改和存盤,擴(kuò)展名也為.PRG,不同的是在每個子程序中至少要有一個返回語句RETURN。用“DO”命令調(diào)用子程序,如果主程序在調(diào)用子程序時需要傳遞參數(shù),可以采用帶參數(shù)的子程序調(diào)用方式。 形式參數(shù)的定義 格式:PARAMETERS 功能:接受調(diào)用命令中的相應(yīng)實(shí)參值,并在調(diào)用結(jié)束后返回對應(yīng)參數(shù)的結(jié)果值。 說明:是用逗號分開的內(nèi)存變量,個數(shù)和類型與調(diào)用它的實(shí)參表是對應(yīng)的。 PARAMETERS必須是程序的第一個可執(zhí)行語句,
30、否則會出錯。4.5.1 4.5.1 子程序及調(diào)用子程序及調(diào)用 如果實(shí)參是一個數(shù)組變量(不必帶維數(shù)),則形參自動定義為一個同樣的數(shù)組。 調(diào)用子程序的命令 格式:DO WITH 功能:調(diào)用指定的子程序。 說明:WITH是帶參數(shù)的子程序調(diào)用,此時,子程序中必須有PARAMETERS語句,用于定義接受實(shí)參的形參。 實(shí)參表是用逗號分開的表達(dá)式或變量。如果實(shí)參是表達(dá)式,則先計算表達(dá)式的值,在傳給形參;如果實(shí)參是變量,則傳遞的是變量的地址。這時形參和實(shí)參實(shí)際上是一個變量,在子程序中形參值的改變將會帶回到主程序的實(shí)參中,這種情況稱為引用傳遞。 例4-13:設(shè)計一個計算圓的面積的子程序。要求在主程序中帶參數(shù)調(diào)用
31、它。 編寫程序代碼如下: 主程序代碼: CLEAR SET TALK OFF STORE 0 TO BJ,YMJ INPUT “請輸入圓的半徑” TO BJ DO SUB WITH BJ,YMJ &調(diào)用子程序SUB求圓的面積 ? “圓的面積=”,YMJ SET TALK ON RETURN 求圓的面積的子程序代碼: PARMETERS R,S &接收實(shí)參語句 S=PI()*R*R RETURN4.5.1 4.5.1 子程序及調(diào)用子程序及調(diào)用 2返回主程序語句 格式:RETURN|TO MASTER|TO 功能:終止當(dāng)前運(yùn)行的程序,返回主程序或指定的程序。 說明:若在命令窗口中調(diào)
32、用子程序,則返回到命令窗口;如果在子程序中調(diào)用另外的子程序,則返回到調(diào)用處的下一條語句。 TO MASTER是可選項(xiàng),若選擇此項(xiàng),則不管哪一級調(diào)用,都返回到最上級主程序。 TO 是可選項(xiàng),若選擇此項(xiàng),則返回到指定過程。 3內(nèi)存變量的作用域 在VFP中,根據(jù)內(nèi)存變量的定義或創(chuàng)建時間的不同,內(nèi)存變量的作用域可分為全局變量、局部變量、私有變量。 全局變量 全局變量是指在上下各級程序中都有效的內(nèi)存變量,可以任意改變和引用,當(dāng)程序執(zhí)行完后,其值仍然保存。全局變量可用PUBLIC來定義,其語法格式如下: 格式一:PUBLIC 或 PUBLICARRAY(,),(,) 功能:定義內(nèi)存變量名表中的變量或數(shù)組為
33、全局變量 說明:在命令窗口中定義的所有變量均為全局變量,在程序中的全局變量必須先定義后使用。全局變量的作用域是從定義它的位置開始到程序運(yùn)行結(jié)束有效,除非使用RELEASE命令或CLEAR ALL命令清除它。4.5.1 4.5.1 子程序及調(diào)用子程序及調(diào)用 例4-14:全局變量示例 主程序代碼: PUBLIC A A=1 DO PP ?A SET TALK ON RETURN 子程序代碼: PUBLIC B B=A A=2 RETURN 輸出結(jié)果為:24.5.1 4.5.1 子程序及調(diào)用子程序及調(diào)用 局部變量 程序中未加任何說明定義的變量是局部變量,局部變量只能在創(chuàng)建它們的位置開始,到定義它的程
34、序結(jié)束為止,在它們所屬的程序停止運(yùn)行時,局部變量將被釋放。 例4-15:局部變量示例 主程序代碼: A=10 DO SUB ?A RETURN 子程序代碼: A=2 RETURN 結(jié)果是:2 &首先輸出A的值為24.5.1 4.5.1 子程序及調(diào)用子程序及調(diào)用 私有變量 用PRIVATR定義的變量為私有變量。私有變量僅存當(dāng)前程序中有效。通過PRIVATE可將在被調(diào)用程序中定義的變量在當(dāng)前程序中隱藏起來,這樣可以在當(dāng)前程序停止運(yùn)行后,所有被聲明為私有的變量和數(shù)組均可重新被訪問。 格式一:PRIVATR 格式二:PRIVATR ALLLIKE|EXCEPT 功能:定義內(nèi)存變量名表中的變量或
35、指定的變量定義為私有變量 說明:若選擇ALL,則將所有內(nèi)存變量定義為私有變量。 若選擇ALL LIKE僅把符合的內(nèi)存變量定義為私有變量;若選擇ALL EXCEPT 僅把不符合的內(nèi)存變量定義為私有變量。例4-16:私有變量示例主程序代碼:CLEARSET TALK OFFPRIVATE ZX=1Y=2Z=3?“主程序中輸出X,Y,Z的值:”,X,Y,ZDO PP &調(diào)用子程序PP? ”調(diào)用子程序后X,Y,Z的值:”,X,Y,ZSET TALK ONRETURN*子程序代碼:PRIVATE XX=4Y=5Z=6RETURN輸出結(jié)果如下:主程序中輸出X,Y,Z的值:1 2 3調(diào)用子程序后X,
36、Y,Z的值:4 5 64.5.2 4.5.2 過程及其調(diào)用過程及其調(diào)用 程序設(shè)計時,常常有些運(yùn)算或處理程序是相同的,為了避免繁瑣,可以將這些相同的部分寫成獨(dú)立的程序段,稱為子程序,在VFP中也叫過程。每個過程都有一個名字,叫做過程名,VFP中的過程名最多可有254個字符,可以使用漢字、英文字母、數(shù)字等,但不能使用擴(kuò)展名。 隨著子程序的增多,每調(diào)用一次訪問磁盤一次,影響磁盤的壽命,還存在子程序的嵌套,管理文件比較困難,這時可以把很多的源代碼放在一個文件中,這個文件叫過程文件。 1建立過程文件 建立過程文件的方法同建立一般命令文件一樣,默認(rèn)擴(kuò)展名為.PRG,過程文件中可以包含若干個過程,最多可包含
37、128個子過程。一個過程的命令格式如下:4.5.2 4.5.2 過程及其調(diào)用過程及其調(diào)用 格式:PROCEDURE()|PARAMETERS() RETURNTO MASTER| ENDPROC 說明:過程名是標(biāo)示符,不同于文件名,它沒有擴(kuò)展名,最多254個字符,定義規(guī)則同變量名。 過程如果用參數(shù)傳遞數(shù)據(jù),形參表有兩種形式表示:一是放在過程名后面的圓括號中;二是使用參數(shù)傳遞語句PARAMETERS(),但要緊放在過程標(biāo)識語句PROCEDURE之后。形參的表示只能取其中的一種。 RETURN語句可以缺省,在過程最后系統(tǒng)隱含有該語句。若RETURN后面有選項(xiàng),則返回時將表達(dá)式的值返回給調(diào)用程序。4
38、.5.2 4.5.2 過程及其調(diào)用過程及其調(diào)用 2打開過程文件 在調(diào)用過程文件中的過程之前,一定要先打開過程文件。打開過程文件的命令格式如下: 格式:SET PROCEDURE TO,ADDITIVE 功能:打開一個或多個過程文件,以供其它的程序調(diào)用其中的過程。 說明:打開過程文件語句一般放在主程序的開頭。若選擇ADDITIVE選項(xiàng),則在打開新的過程文件時,不關(guān)閉已打開的過程文件,否則關(guān)閉已打開的過程文件。 3調(diào)用過程 格式一:DOWITH 格式二:=() 功能:調(diào)用指定的過程。4.5.2 4.5.2 過程及其調(diào)用過程及其調(diào)用 說明:若選選項(xiàng),則把實(shí)參的值傳遞給形參。 打開過程文件后,就可以隨
39、時用該語句調(diào)用其中的過程。該語句也可以調(diào)用本程序中的過程,以及程序嵌套中任一個程序所包含的過程,也可以調(diào)用子程序。 過程被調(diào)用時,一般查找被調(diào)用過程的順序是:(1)本程序中的過程,(2)已打開過程文件中的過程,(3)程序嵌套中某程序中的過程,(4)與過程名相同的獨(dú)立命令文件(子程序)。 例4-17:過程調(diào)用顯示任意行和列的“*”。 主程序代碼編寫如下: CLEAR INPUT 行數(shù) N= TO N INPUT 列數(shù) M= TO M SET PROCEDURE TO XING.PRG DO XING WITH N,M &帶參數(shù)調(diào)用過程 RETURN 過程代碼XING.PRG如下 PROC
40、EDURE XING(I,J) FOR L=1 TO I FOR K=1 TO J ?* ENDFOR ? ENDFOR RETURN ENDPROCEDURE4.5.2 4.5.2 過程及其調(diào)用過程及其調(diào)用4關(guān)閉過程文件 格式:SET PROCEDURE TO 或 CLOSE PROCEDURE 此外,CLOSE ALL、CLEAR ALL在關(guān)閉所有文件時也關(guān)閉過程文件。4.5.3 4.5.3 自定義函數(shù)自定義函數(shù) VFP系統(tǒng)為用戶提供了很多函數(shù),但也允許用戶自己根據(jù)需要定義某種運(yùn)算或操作的函數(shù)。同函數(shù)與過程(或子程序)一樣具有某一功能,但是函數(shù)可以在表達(dá)式中調(diào)用,返回一個函數(shù)值。 每一個自定義函數(shù)都對應(yīng)于一個程序,它與過程及子程序非常相似,而且存儲形式也相仿。在程序中使用自定義函數(shù),能使程序清晰簡捷。 自定義函數(shù)可以置于調(diào)用程序之后,與調(diào)用程序存放在同一個文件中,稱為依附自定義函數(shù),也可以獨(dú)立于調(diào)用程序存放在過程文件中,稱為獨(dú)立自定義函數(shù)。 4.5.3 4.5.3 自定義函數(shù)自定義函數(shù)1獨(dú)立自定義函數(shù) 獨(dú)立自定義函數(shù)與子程序很相似,它所對應(yīng)的程序單
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 垃圾清運(yùn)服務(wù)合同報價
- 預(yù)制構(gòu)件購買協(xié)議書
- 抽樣誤差與假設(shè)檢驗(yàn)
- 九年級化學(xué)上冊 3.2 制取氧氣 氧氣的制取教案2 (新版)粵教版
- 二年級品德與生活下冊 快樂的六一 2教案 人教新課標(biāo)版
- 高中信息技術(shù)《走近人工智能》教學(xué)設(shè)計
- 2024-2025學(xué)年高中歷史 第8單元 第27課 世紀(jì)之交的世界格局教案 新人教版必修1
- 廣東省廉江市實(shí)驗(yàn)學(xué)校高中政治 11.1 面對經(jīng)濟(jì)全球化教案(必修1)
- 2024秋八年級英語上冊 Module 2 My home town and my country Unit 3 Language in use教學(xué)設(shè)計(新版)外研版
- 租賃空窗期合同(2篇)
- 《悅納至正讓兒童生命幸福生長》莞城中心小學(xué)品牌培育工作匯報修改版
- 視聽語言(山東聯(lián)盟)知到章節(jié)答案智慧樹2023年濰坊學(xué)院
- 2023年住宅室內(nèi)裝飾裝修管理辦法
- 眼科病歷書寫幻燈片
- 《簡單教數(shù)學(xué)》讀書-分享-
- 2023年01月四川涼山州木里重點(diǎn)國有林保護(hù)局招考聘用18人參考題庫+答案詳解
- 畜牧業(yè)經(jīng)濟(jì)管理全套
- 三墾變頻器使用說明書SAMCO
- 農(nóng)旅一體化生態(tài)農(nóng)業(yè)示范園區(qū)建設(shè)項(xiàng)目可行性研究報告
- 2022年版《義務(wù)教育生物新課程標(biāo)準(zhǔn)》試題(含答案)
- 地理實(shí)踐力ppt課件版 地理實(shí)踐力 梁羽夢組
評論
0/150
提交評論