版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第6章程序設計及過程的基礎6.1程序與程序文件
6.2程序的三種基本結(jié)構(gòu)
6.3多模塊程序設計
6.1程序與程序文件
6.1.1基本概念
在程序設計中,首先要搞清以下幾個問題。
1.程序文件的構(gòu)成
程序文件是一個文本文件,它的擴展名是?.PRG,該文件要用計算機執(zhí)行,首先應經(jīng)過編譯,生成擴展名為?.FXP的文件。因為程序文件是文本文件,所以凡是能夠編輯文本文件的軟件都可以編輯它,如Windows中的記事本和寫字板,及Word文字處理軟件(存儲格式要選文本方式)等。下面主要介紹在數(shù)據(jù)庫環(huán)境下建立、編輯程序。
2.幾個命令或語句
以下介紹的命令可以在程序或命令窗口中使用。
1)注釋語句
在一個程序中使用注釋語句是為了增加程序的可讀性。注釋語句的格式有三種:
格式一:*字符串
格式二:NOTE字符串
格式三:語句&&字符串
這三種語句中的字符串,均是為了解釋程序或語句的,是讓讀程序的人看的,計算機不對其加工,更不會執(zhí)行。
2)是否顯示結(jié)果
對于有些命令或語句,在其被執(zhí)行以后,不需要在屏上顯示(中間)結(jié)果,特別是在程序設計中,為了界面的整潔,就要關閉顯示,當然正常顯示的一些命令或語句不受它的限制。
格式:SETTALKON|OFF
功能:若是ON,則打開顯示,若是OFF,則關閉顯示。系統(tǒng)默認狀態(tài)是ON。
3)命令或語句的分行符“;”
在程序中,一個語句可以分多行書寫,只需在上一行的末尾加一個“;”表示下一行接續(xù)即可。若是在命令窗口中,“;”之后不能用回車換行,而應用下箭頭換行。6.1.2程序文件的建立和執(zhí)行
1.程序文件的建立與編輯
程序文件的建立與修改,都是在一個程序編輯器或程序窗口中進行的。方法有以下幾種。
(1)在項目管理器中,在項目管理器的“代碼”選項卡中選程序,然后單擊“新建”按鈕。
(2)在“新建”對話框中,在新建對話框中選“程序”,然后單擊“新建文件”。
(3)用命令創(chuàng)建程序文件:
格式:MODIFYCOMMAND[[路徑]文件名]
MODIFYFILE[[路徑]文件名[.PRG]]以上三種方法(命令中沒有文件名)執(zhí)行后,都會出現(xiàn)一個如圖6.1所示的程序窗口。程序文件的名字系統(tǒng)會自動命名為“程序?”。對于命令,若有文件名選項,就以用戶的命名建立程序,如果指定的文件名在指定的位置已經(jīng)存在,那就是打開該程序文件。第二個命令,必須加擴展名?.PRG;若不加,系統(tǒng)會自動生成擴展名為?.TXT的文件。圖6.1程序窗口在窗口中用戶可輸入要解決問題所需的語句,當輸入或編輯完后,就存盤(保存文件),方法有:
(1)工具欄中的“保存”按鈕。
(2)文件菜單中的“保存”命令。
(3)快捷鍵“Ctrl+S”,保存但不關閉窗口,或“Ctrl+W”存盤并關閉窗口。
2.程序文件的執(zhí)行
一個程序一旦建立好或編輯修改完后就要去執(zhí)行它,執(zhí)行的方法有以下幾種:
(1)在菜單欄中單擊“程序”,然后在下拉菜單中選擇“運行”,再在出現(xiàn)的對話框中選程序或輸入程序的名字。
(2)在項目管理器的“代碼”選項卡中,選擇要執(zhí)行的程序,然后單擊命令按鈕“運行”。
(3)用命令執(zhí)行程序文件。
格式:DO程序名
以上方法都將使程序中的語句被執(zhí)行,直到語句執(zhí)行完或遇到結(jié)束語句為止。在程序的執(zhí)行過程中,如果有輸入語句,程序暫停執(zhí)行,等待用戶輸入數(shù)據(jù),然后再繼續(xù)執(zhí)行;若程序中有輸出語句,將會在屏上看到相應的結(jié)果。
3.程序中幾個特殊的語句
(1)?CANCAL:終止程序的執(zhí)行,清除所有私有變量,返回命令窗口。
(2)?RETURN:結(jié)束當前程序段的執(zhí)行,返回調(diào)用的上一級(指過程調(diào)用),若在主程序中就結(jié)束整個程序的執(zhí)行,返回命令窗口。
(3)?QUIT:在程序中執(zhí)行它,不但結(jié)束程序的執(zhí)行,而且還退出系統(tǒng),返回Windows。
6.1.3程序設計的三個過程
一個程序的設計,一般由三個過程組成:數(shù)據(jù)的輸入、運算處理和數(shù)據(jù)的輸出。在這三個過程中,數(shù)據(jù)的輸入根據(jù)情況可有可無,但其余兩個過程必須要有。
1.數(shù)據(jù)的輸入
一般輸入的都是原始數(shù)據(jù),供計算所用,可以從鍵盤直接輸入,也可以從某個表中得到。若在程序中通過賦值,或其他方法得到數(shù)據(jù),這一過程就可以省去。
2.計算處理
根據(jù)要解決的問題,用一種算法書寫出所需的語句。
3.數(shù)據(jù)的輸出
把計算的結(jié)果輸出,一般在屏上顯示,有時計算的結(jié)果也可以存放在表文件中。6.1.4輸入/輸出語句
輸入和輸出是一個程序的基本組成部分。輸入和輸出有簡單方式和格式方式兩種。
1.數(shù)據(jù)的輸入
數(shù)據(jù)的輸入有三個命令:
1)?WAIT命令
格式:WAIT[“提示信息”][TO變量名]
參數(shù):變量名是一個內(nèi)存變量。
功能:執(zhí)行后暫停,等到用戶從鍵盤輸入一個字符,然后賦給內(nèi)存變量?;騿螕羰髽死^續(xù)執(zhí)行程序。若沒有“提示信息”,系統(tǒng)默認為“按任意鍵繼續(xù)……”。
2)?ACCEPT命令
格式:ACCEPT[“提示信息”]TO內(nèi)存變量名
參數(shù):解釋同上。
功能:執(zhí)行后暫停,等待用戶從鍵盤輸入一串字符,回車,將字符串賦給變量,程序繼續(xù)向下執(zhí)行。
例6.2
編制一個程序,求任意一個表的記錄個數(shù)(不能用函數(shù)或直接的命令)。
3)?INPUT命令
格式:INPUT["提示信息"]TO內(nèi)存變量名
參數(shù):解釋同上。
功能:執(zhí)行后暫停,等待用戶從鍵盤上輸入任意型的數(shù)據(jù),而且還可以接收表達式。
例6.3
輸入兩個數(shù),求它們的運算。
CLEAR
INPUT"輸入第一個數(shù)"TOX
INPUT"輸入第二個數(shù)"TOY
WAIT"輸入一個運算符"TOP
Z=X&P.Y 到底進行什么運算,取決于P中的運算符
?X,P,Y,"=",Z
RETURN以上三個輸入命令既有相同點,又有區(qū)別。
共同點:①執(zhí)行以后都暫停,等待用戶從鍵盤上輸入數(shù)據(jù)。
②一次都只能給一個變量賦值。
③可以在程序中使用,也可以在命令窗口中使用。
區(qū)別:通過表6.1從四點說明。表6.1幾個命令的區(qū)別
2.數(shù)據(jù)的輸出
簡單的數(shù)據(jù)輸出有兩個命令。
格式1:?表達式表
格式2:??表達式表
參數(shù):可以是變量名,也可以是表達式,它們之間用逗號分開。
功能:若是變量名則輸出內(nèi)容,若是表達式則先求值后輸出值。格式1是換行輸出,格式2是在同一行輸出。根據(jù)情況兩種有時都需要使用。
3.格式輸入輸出
格式:@Y,XSAY表達式[FONT"[字體]",字號][GET內(nèi)存變量名][[FONT"[字體]",字號]
READ
參數(shù):Y代表行坐標,X代表列坐標,屏幕的左上角是(0,0)點。FONT選項設置表達式和內(nèi)存變量的字體和字號,若字體省去,系統(tǒng)默認是“宋體”,若字號省去則是五號字。
功能:若同時有GET內(nèi)存變量選項和READ,是輸入,執(zhí)行它以后在指定的行(Y)列(X)處顯示表達式的值(一般是提示信息),然后等待用戶從鍵盤輸入數(shù)據(jù);若有GET內(nèi)存變量選項,沒有READ,或沒有GET內(nèi)存變量,也沒有READ,都是輸出,執(zhí)行它以后將表達式的值在指定的行、列處顯示。 6.2程序的三種基本結(jié)構(gòu)
6.2.1三種結(jié)構(gòu)的基本含義
1.順序結(jié)構(gòu)
順序結(jié)構(gòu)是一種最簡單的程序結(jié)構(gòu),程序的執(zhí)行就是自頂向下逐條語句去執(zhí)行,沒有哪條語句多執(zhí)行,也沒有哪條語句不執(zhí)行,譬如,一個會議的開幕式就是按順序進行的。順序結(jié)構(gòu)沒有專門的控制語句,就是把所要解決問題所需的語句或命令按順序書寫出來,如前例,求兩個數(shù)的計算。一般用順序結(jié)構(gòu)要解決的問題都比較簡單,要完成一個較復雜的計算,就要用到選擇和循環(huán)結(jié)構(gòu)。
2.選擇結(jié)構(gòu)
選擇結(jié)構(gòu)程序的執(zhí)行,是根據(jù)條件決定只執(zhí)行其中一部分語句,另一部分語句不執(zhí)行(下次可能要執(zhí)行),生活中的選擇結(jié)構(gòu)比較多,譬如,“如果……,我就……;否則,我又……”。選擇結(jié)構(gòu)有專門的控制語句,IF和DOCASE語句。
3.循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)程序的執(zhí)行,是根據(jù)條件反復執(zhí)行其中一段語句,就是一種重復,重復過程、算法,但其中的數(shù)據(jù)、內(nèi)容要變化。人生就是天天重復、一部電視劇也是重復,但內(nèi)涵不同。循環(huán)結(jié)構(gòu)有專門的控制語句,如FOR語句、DOWHILE和SCAN語句。循環(huán)結(jié)構(gòu)的例子如例6.4所示。6.2.2選擇結(jié)構(gòu)程序
控制選擇結(jié)構(gòu)的語句有兩個。
1.?IF語句
1)基本格式
IF<條件表達式>
S1
ELSE
S2
ENDIF
參數(shù):條件表達式,是一個關系或邏輯表達式,用于判斷決定執(zhí)行哪段語句。功能:先求條件表達式的值,若值為?.T.,去執(zhí)行S1中所有語句,然后執(zhí)行ENDIF之后的語句;若值為?.F.,去執(zhí)行S2中所有語句,然后執(zhí)行ENDIF之后的語句。換種說法,就是二者選一。它的執(zhí)行路線如圖6.2所示。
圖6.2IF語句基本格式圖6.3不含ELSE的IF結(jié)構(gòu)
2.?DOCASE語句
DOCASE語句是一個典型的多路分支結(jié)構(gòu)。在程序設計中若分支比較多,用IF結(jié)構(gòu)就要嵌套多層,那么很容易出錯,所以系統(tǒng)提供了該語句來解決此類問題。
格式:參數(shù):Si是語句序列,條件i是邏輯表達式。
功能:執(zhí)行時,從上到下逐個條件判斷是否為.T.,當某個CASE后邊為.T.,就執(zhí)行對應的語句序列,執(zhí)行完后離開該結(jié)構(gòu),執(zhí)行ENDCASE之后的語句;若一個條件都不成立,執(zhí)行Sn+1中語句序列,然后離開該結(jié)構(gòu),執(zhí)行ENDCASE之后的語句。執(zhí)行路線如圖6.4所示。圖6.4DOCASE的執(zhí)行路線6.2.3循環(huán)程序
1.?FOR語句
格式:FORV=e1toe2[STEPe3]
S
ENDFOR
參數(shù):V是一個變量名,e1,e2,e3分別是數(shù)值型表達式,S是語句序列(循環(huán)體)。e1是初值,e2是終值,e3是增量。
功能:執(zhí)行時,先將e1的值賦給V,然后判斷V是否小于等于e2,若成立,執(zhí)行循環(huán)體中語句,然后在V上加e3,又與e2判斷;若大于e2,就離開循環(huán),執(zhí)行ENDFOR之后的語句。FOR語句的執(zhí)行路線如圖6.5所示。圖6.5循環(huán)執(zhí)行過程
2.?DOWHILE語句
格式:DOWHILE<條件>
S
ENDDO
參數(shù):S是語句序列(循環(huán)體),條件是邏輯表達式。
功能:執(zhí)行該語句時,先判斷條件是否為.T.,若是,執(zhí)行S中所有語句,執(zhí)行完后,再去判斷條件;若條件為.F.,循環(huán)結(jié)束,就去執(zhí)行ENDDO之后的語句。DOWHILE語句的執(zhí)行路線如圖6.6所示。圖6.6DOWHILE的執(zhí)行路線
3.?SCAN語句
該語句一般適于處理表記錄,或者是對表記錄進行某種操作。
格式:SCAN[<范圍>][FOR<條件>]
S
ENDSCAN
參數(shù):S還是語句序列(循環(huán)體);范圍是針對表記錄的,有四種表示,若省去,默認為ALL;FOR條件是對記錄的篩選,若省去,對范圍內(nèi)所有記錄進行有關操作。
功能:執(zhí)行該語句時,在當前表中對指定范圍內(nèi)滿足條件的記錄,指針自動從上到下逐條移動,用循環(huán)體中的語句進行操作。所以把該語句又叫掃描語句。
4.循環(huán)中的兩個語句
1)?LOOP語句
格式:LOOP
功能:執(zhí)行它以后,就不執(zhí)行LOOP之后到循環(huán)結(jié)束語句之間的語句,繼續(xù)下次循環(huán)。LOOP語句的執(zhí)行路線如圖6.7所示。圖6.7LOOP的執(zhí)行路線
2)?EXIT語句
格式:EXIT
功能:執(zhí)行它以后,循環(huán)提前結(jié)束。EXIT語句的執(zhí)行路線如圖6.8所示。圖6.8EXIT的執(zhí)行路線
5.循環(huán)的嵌套
循環(huán)還可以嵌套。在解決有些問題時,一重循環(huán)無法解決,需要多層循環(huán)。把兩層以上的循環(huán)叫嵌套。由于循環(huán)的語句有三種,所以循環(huán)的嵌套就分為“自套”和“互套”,共九種形式。
嵌套循環(huán)的執(zhí)行,是先從外循環(huán)入口,進入內(nèi)循環(huán),當內(nèi)循環(huán)次數(shù)執(zhí)行完后,又返回外循環(huán),這樣重復外循環(huán)數(shù)次,才結(jié)束整個循環(huán)。在最內(nèi)層循環(huán)體中,語句執(zhí)行的次數(shù)是各層次數(shù)的乘積,各層循環(huán)的次數(shù)在前敘述中有一個公式。
6.3多模塊程序設計
6.3.1模塊的分類
模塊又可以稱為過程,而過程的分類有三種:一種稱為外部過程或命令文件;另一種稱為內(nèi)部過程;還有一種稱為函數(shù)。
1.外部過程
外部過程是一個獨立的文件,就是將一段程序存盤,擴展名也是?.PRG,編寫的方法與編寫一般程序基本相同(前面編寫的程序都可以叫外部過程),區(qū)別就是在程序中至少有一個RETURN語句,當執(zhí)行它以后返回調(diào)用處。外部過程在調(diào)用時現(xiàn)從磁盤上打開并讀入內(nèi)存執(zhí)行。
2.內(nèi)部過程
內(nèi)部過程是若干個程序段(小過程)組成一個文件,擴展名是?.PRG。內(nèi)部過程文件有一定的格式。要執(zhí)行內(nèi)部過程,必須用專門的命令先打開該過程所在的文件,然后再調(diào)用(從內(nèi)存中調(diào)用執(zhí)行),所以叫內(nèi)部過程。
內(nèi)部過程的格式如下:
3.自定義函數(shù)
在第二章,我們討論了函數(shù)的分類,從用戶使用的角度,函數(shù)可分為系統(tǒng)函數(shù)和自定義函數(shù)。自定義函數(shù)實質(zhì)上也是一段程序或一個模塊。它與外部過程和內(nèi)部過程的區(qū)別就在于,函數(shù)調(diào)用后要返回值,而過程調(diào)用不返回值。
函數(shù)的格式如下:6.3.2模塊的建立與調(diào)用
1.建立模塊
雖然模塊有三種類型,但建立的方法基本相同,都與前述的建立程序的方法一樣。
格式:MODIFYCOMMAND文件名
2.模塊調(diào)用
調(diào)用過程或函數(shù)就是執(zhí)行該段程序。在調(diào)用上有區(qū)別:
1)外部過程調(diào)用
格式:DO文件名[WITH實參表]
參數(shù):實參表中是用逗號分開的表達式。
功能:執(zhí)行該語句時,先計算實參的值,然后傳遞給形參,再去執(zhí)行被調(diào)用的程序段。
2)內(nèi)部過程調(diào)用
先要打開過程文件,然后才能調(diào)用。
格式:SETPROCEDURETO文件名
DO過程名[WITH實參表]
參數(shù):文件名是由若干個小過程組合在一起的文件名,實參表中是用逗號分開的表達式。
功能:先打開指定的文件(讀入內(nèi)存)。執(zhí)行DO語句時,先計算實參的值,然后傳遞給形參,再去執(zhí)行被調(diào)用的程序段。
3)自定義函數(shù)調(diào)用
因為調(diào)用自定義函數(shù)總是要返回值的,與調(diào)用系統(tǒng)函數(shù)的方法相同,把函數(shù)的調(diào)用當作一個數(shù)來用。
格式:函數(shù)名(實參表)
例6.20
用三種方法求n!/(n-k!k!)的值。
首先不管用過程還是函數(shù),編制一段程序求一個數(shù)的階乘。
方法一:用外部過程。
編制一個程序,文件名字為ACT.PRG,內(nèi)容如下:再編制一個主程序,文件名字為BLZH.PRG,內(nèi)容如下:
CLEAR
INPUT"請輸入N的值:"TON
INPUT"請輸入K的值:"TOK
STORE1TONJC,KJC,NKJC
DOACTWITHN,NJC
DOACTWITHN-K,NKJC
DOACTWITHK,KJC
S=NJC/(NKJC*KJC)
?"S=",S
RETURN以上兩段程序都存盤以后,在命令窗口發(fā)布命令:DOBLZH。然后按提示輸入N和K的值后,結(jié)果就會出現(xiàn)。以上三次調(diào)用都通過文件名調(diào)用,并帶實參,最后在返回時,用第二個參數(shù)把結(jié)果帶回。
方法二:用內(nèi)部過程。
編制一個程序,文件名字為ACT.PRG,其中有一個過程名為JC,內(nèi)容如下:再編制一個主程序,文件名字為BLZH.PRG,內(nèi)容如下:
CLEAR
INPUT"請輸入N的值:"TON
INPUT"請輸入K的值:"TOK
STORE1TONJC,KJC,NKJC
SETPROCEDURETOACT &&調(diào)用前先打開內(nèi)部過程文件
DOJCWITHN,NJC
DOJCWITHN-K,NKJC
DOJCWITHK,KJC
S=NJC/(NKJC*KJC)
?"S=",S
RETURN執(zhí)行主程序的方法與上述相同,參數(shù)傳遞方法也相同。但調(diào)用三次是通過過程名調(diào)用的。
方法三:用函數(shù)。
用一個文件,名字為BLZH.PRG,內(nèi)容如下:
CLEAR
INPUT"請輸入N的值:"TON
INPUT"請輸入K的值:"TOK
S=JC(N)/JC(N-K)/JC(K) &&調(diào)用函數(shù)名,方法與系統(tǒng)函數(shù)調(diào)用相同
?"S=",S
RETURN
********************************6.3.3變量的作用域
1.公共變量
公共變量又叫全局變量。
1)公共變量的定義
格式:PUBLIC<內(nèi)存變量名表>
功能:建立指定的內(nèi)存變量,變量的初始值為邏輯?.F.。其中的變量名之間用逗號分開。
另外,在命令窗口中定義的變量,也叫公共變量。
2)公共變量的作用范圍
在命令窗口中定義的變量,在整個程序的執(zhí)行過程中都起作用,即從定義的位置開始到程序結(jié)束都起作用。
例6.21
公共變量作用域的示例,過程如下:
①設計一個外部過程ZCX.PRG。
PUBLZ
z=186
?"外部過程…",x,y,z,a
RETURN
②再設計一個主程序CX.PRG。
PUBLX
x=90
?"主程序1…",x,a
PUBLy
y=80
?"主程序2…",x,y,a
DOZCX
?"主程序3…",x,y,a,z
RETURN
③在命令窗口先執(zhí)行命令:CLEARALL,把當前內(nèi)存中的內(nèi)存變量全部清除,再執(zhí)行A=200,在命令窗口
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 革命舊址安防系統(tǒng)防雷擊電磁脈沖
- 2026年區(qū)塊鏈金融交易協(xié)議
- 2025年鶴崗市市屬高校招聘考試真題
- 河道護岸施工方案
- 消費者行為深度分析
- 2026年度煙臺黃渤海新區(qū)鎮(zhèn)街所屬事業(yè)單位公開招聘工作人員備考題庫(7人)及完整答案詳解
- 建筑施工企業(yè)安全文化建設總結(jié)
- 生態(tài)草皮護坡施工規(guī)范與案例分析
- 2026江西農(nóng)業(yè)大學宣傳部(融媒體中心)臨時用工招聘1人備考題庫及一套參考答案詳解
- 五六年級體育健康測試標準匯編
- 天津市河東區(qū)2026屆高一上數(shù)學期末考試試題含解析
- 消化內(nèi)鏡ERCP技術改良
- DB37-T6005-2026人為水土流失風險分級評價技術規(guī)范
- 云南師大附中2026屆高三1月高考適應性月考卷英語(六)含答案
- 2026湖北隨州農(nóng)商銀行科技研發(fā)中心第二批人員招聘9人筆試備考試題及答案解析
- 紀念館新館項目可行性研究報告
- 仁愛科普版(2024)八年級上冊英語Unit1~Unit6補全對話練習題(含答案)
- 騎行美食活動方案策劃(3篇)
- 石化企業(yè)環(huán)保培訓課件
- 2026年呂梁職業(yè)技術學院單招職業(yè)技能考試備考試題帶答案解析
- 2025年新疆師范大學輔導員招聘考試真題及答案
評論
0/150
提交評論