九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

第4章 Visual FoxPro程序設計基礎

上傳人:無*** 文檔編號:247852473 上傳時間:2024-10-21 格式:PPT 頁數(shù):72 大?。?54KB
收藏 版權申訴 舉報 下載
第4章 Visual FoxPro程序設計基礎_第1頁
第1頁 / 共72頁
第4章 Visual FoxPro程序設計基礎_第2頁
第2頁 / 共72頁
第4章 Visual FoxPro程序設計基礎_第3頁
第3頁 / 共72頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《第4章 Visual FoxPro程序設計基礎》由會員分享,可在線閱讀,更多相關《第4章 Visual FoxPro程序設計基礎(72頁珍藏版)》請在裝配圖網上搜索。

1、*,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,*,第四章 程序設計基礎,第四章,程序設計基礎,第四章 程序設計基礎,4.1,程序設計方法概述,4.2,算法及算法的表示,4.3,程序的建立、編輯與運行,4.4,結構化程序設計基礎,4.5,程序的控制結構,4.6,多模塊程序,4.7,應用程序舉例,2,程序設計方法的發(fā)展可以劃分以下三個階段:,早期的程序設計,結構化程序設計,面向對象的程序設計方法,4.1,程序設計方法概述,第四章 程序設計基礎,3,算法概述,:,廣義地講,:,算法是為完成一項任務所應當遵循的一步一步的規(guī)則的、精確的、無歧義的描述,它的總

2、步數(shù)是有限的。,狹義地講:,算法是解決一個問題采取的方法和步驟的描述,。,4.2,算法及算法的表示,第四章 程序設計基礎,4,第四章 程序設計基礎,例,4.1,輸入三個數(shù),然后輸出其中最大的數(shù)。,算法可以寫成:,1),輸入,A,,,B,,,C,。,2),若,AB,,則,MAX A,;,否則,MAXB,。,3),若,CMAX,,則,MAX C,。,4),輸出,MAX,,,MAX,即為最大數(shù)。,例,4.,2,輸入,10,個數(shù),輸出其中最大的數(shù)。,算法可以寫成:,(,1,)輸入,1,個數(shù),存入變量,A,中,將記錄數(shù)據(jù)個數(shù)的變量,N,賦值為,1,,即,N=1,(,2,)將,A,存入表示最大值的變量,M

3、ax,中,即,Max=A,(,3,),再輸入一個值給,A,,,如果,A,Max,則,Max=A,否則,M,ax,不變,(,4,)讓記錄數(shù)據(jù)個數(shù)的變量增加,1,,即,N=N+1,(,5,),判斷,N,是否小于,10,,若成立則轉到第(,3,)步執(zhí)行,否則轉到第(,6,)步。,(,6,)輸出,max,5,有窮性:,一個算法必須在執(zhí)行有窮多個計算步驟后終止;,確定性:,一個算法給出的每個計算步驟,必須都是精確定義的、無二義性的;,有效性:,算法中的每一個步驟必須有效地執(zhí)行,并能得到確定結果;,輸 入:,一個算法中可以沒有輸入,也可以有一個或多個輸入信息,如果需 要運行時輸入不同數(shù)據(jù),這些輸入信息是算

4、法所需的初始數(shù)據(jù);,輸 出,:一個算法應有一個或多個輸出,一個算法得到的結果就是算法的輸出。沒有輸出的算法是沒有意義的。,第四章 程序設計基礎,算法的特性,:,6,第四章 程序設計基礎,算法的表示,:,一、自然語言與偽代碼表示算法,二,用流程圖表示算法,傳統(tǒng),流程圖,N,S,流程圖,順序結構流程圖,選擇結構流程圖,順序結構的,N-S,圖,選擇結構的,N-S,圖,算法的含義:我們把解決問題的方法和步驟稱為算法。,7,第四章 程序設計基礎,循環(huán)結構流程圖,循環(huán)結構的,N-S,圖,8,程序(命令)文件是指將各類命令按照處理問題的算法和一定的語法結構存放的文件。其擴展名為,.PRG,。,一、創(chuàng)建程序,

5、通過項目管理器創(chuàng)建,通過文件菜單創(chuàng)建,通過命令創(chuàng)建,二、保存程序,通過菜單保存,直接關閉沒有保存的程序,則會彈出相應對話框,提示保存或放棄,按,CTRL+S,組合鍵保存,第四章 程序設計基礎,4.3,程序的建立、編輯與運行,9,三、,修改程序,通過項目管理器的,“,修改,”,選項打開程序并修改,通過文件菜單中,“,打開,”,選項打開程序并修改,通過命令,MODIFY COMMAND,打開程序并修改,注:修改窗口和創(chuàng)建窗口相同,修改完畢后應注意保存。,四、運行程序,通過項目管理器的,“,運行,”,按鈕運行程序,通過程序菜單中,“,運行,”,選項運行程序,通過命令,DO,運行程序,第四章 程序設計

6、基礎,10,程序的書寫規(guī)則:,命令分行 :命令都以回車鍵結尾,一行只能寫一條命令,若寫不下,可在未寫完的本行末尾添加一個分號“;”作為下一行的繼行標志。,程序注釋語句,NOTE/*,:,對程序的結構或功能進行注釋。,程序執(zhí)行時將跨過注釋語句,不作任何操作,語句注釋,&,:在語句行末尾注釋,對當前語句進行說明。,程序執(zhí)行時,對,&,后面的注釋不作任何操作,第四章 程序設計基礎,4.4,結構化程序設計基礎,11,中斷語句,CANCEL,中斷當前程序運行,并返回到系統(tǒng)命令窗口。,掛起語句,SUSPEND,暫停當前程序運行。它只是使程序掛起,通過,RESUME,語句可以使程序繼續(xù)執(zhí)行。,恢復執(zhí)行語句,

7、RESUME,恢復被,SUSPEND,掛起的程序,從暫停的位置繼續(xù)執(zhí)行。,程序調試語句,第四章 程序設計基礎,12,RETURN,(,返回到調用行的下一行,無上級程序則返回到命令窗口)。,RETRY,(,返回到調用行本身,可以實現(xiàn)程序的重復調用)。,CANCEL,(,中斷,異常結束,并返回到系統(tǒng)命令窗口)。,QUIT,(,退出,VFP,,,返回到操作系統(tǒng),并自動刪去磁盤中的臨時文件)。,程序中的專用語句,一程序的結尾命令,第四章 程序設計基礎,13,1,、,數(shù)據(jù)接收語句,INPUT,格式:,INPUT TO ,功能:將鍵盤輸入的數(shù)據(jù)賦給由,指定的內存變量,注,:,從鍵盤輸入的數(shù)據(jù)可以是常量、變

8、量或表達式,數(shù)據(jù)類型可以是除備注型和通用型外的所有類型,。,2,、,字符串接收語句,ACCEPT,格式:,ACCEPT ,TO ,功能:將鍵盤輸入的數(shù)據(jù)賦給由,指定的內存變量。,注,:,從鍵盤輸入的數(shù)據(jù)只能是字符型常量。,二程序交互式命令,第四章 程序設計基礎,14,格式:,WAIT ,TO ,WINDOW AT NOWAIT,NOCLEARTIMEOUT ,功能:將鍵盤輸入的數(shù)據(jù)賦給由,指定的內存變量。,注:,從鍵盤輸入的數(shù)據(jù)只能是一個單字符常量。,三、單字符接收語句,WAIT,第四章 程序設計基礎,15,?,換行,輸出語句:,格式:,?,功能:分別計算表達式列表的值,并將表達式列表的值輸出

9、在,V FP,主窗口的當前光標的下一行。,中,各表達式以逗號分隔,?,同行,輸出語句:,格式:,?,功能:分別計算表達式列表的值,并將表達式列表的值輸出在,V FP,主窗口的當前光標所在行、列的后面。,第四章 程序設計基礎,16,程序控制的基本結構有三種:順序結構、選擇分支結構和循環(huán)結構。,1,、,順序結構,:,程序的執(zhí)行是按其語句的排列先后順序執(zhí)行,這也是最簡單、最基本的程序控制結構。,例,4.3,:,將人事信息表,RS.DBF,中新評為教授的教師,其職稱一欄由副教授改為教授,CLEAR,SET TALK OFF,USE RS,ACCEPT ,請輸入要修改記錄的教師名:, to,xm,LOC

10、ATE FOR,姓名,=,xm,REPL,職稱,WITH ,教授,USE,SET TALK ON,RETURN,第四章 程序設計基礎,4.5,程序的控制結構,17,2,、選擇分支結構,定義:選擇分支結構是根據(jù)條件的測試結果執(zhí)行不同的操作,。,VFP,中有兩條命令實現(xiàn)條件分支:二路選擇分支結構,(,IFENDIF,),和多路選擇分支結構,(,DO CASE ENDASE,)。,(,1,),二路選擇分支結構,格式:,IF THEN , ELSE,ENDIF,功能:,當,的值為真時,執(zhí)行,;否則執(zhí)行,。如果沒有,ELSE,的子句,則當,的值為假時,不進行任何操作,。,注:,IF,和,ENDIF,必須

11、配對使用。,18,*,P2.PRG*,SET TALK OFF,clear,INPUT ,請輸入一個正整數(shù),: TO X,IF INT(X/2)=X/2,?X,為偶數(shù),!,ELSE,?X,為奇數(shù),!,ENDIF,SET TALK ON,例,4.4,從鍵盤輸入一個正整數(shù),判斷其是否為偶數(shù)。,程序代碼如下:,19,例,4.5,根據(jù)鍵入,X,的值,計算下面分段函數(shù)的值,并顯示結果。,程序代碼如下:,*,P3.PRG*,SET TALK OFF,CLEAR,INPUT,“,X=,”,TO X,IF X0,IF X10,Y=X*X+1,ELSE,Y=3*X*X-2*X+1,ENDIF,ELSE,Y=X*

12、X+4*X-1,ENDIF,?,”,分段函數(shù)值為:”,+STR(Y,10,2),SET TALK ON,RETURN,20,2,、,IIF (),判斷選擇函數(shù),VFP,中有一個函數(shù),它能夠先進行條件判斷,然后決定返回其值。它的使用效果比分支語句更快捷。,格式:,IIF,(,=60,“,及格”,“不及格”),當成績,60,時,函數(shù)返回“及格”,否則返回“不及格”字符串。,21,3,、多路選擇分支結構,格式,:,DO CASE,CASE , CASE ,CASE , , OTHERWISE, ,ENDCASE,功能:依次判斷,,,當值為真時執(zhí)行對應的,;,當所有,的值為假時,則執(zhí)行,OTHERWI

13、SE,下面的,。,注:,DO CASE,和,ENDCASE,必須配對使用。,22,例,4.6,:用,DO CASE,語句修改例,4.5,計算分段函數(shù)的例子。,程序代碼如下,:,*,P4.PRG*,SET TALK OFF,CLEAR,INPUT,“,X=,”,TO X,DO CASE,CASE X0.AND.X10,Y=X*X+1,ENDCASE,?,”,分段函數(shù)值為:”,+STR(Y,10,2),SET TALK ON,RETURN,23,定義: 循環(huán)結構是指根據(jù)問題的需要任意次地重復執(zhí)行一行或多行語句。具體地說就是某些語句在某一條件成立時,需要重復執(zhí)行,直到條件不成立時,才結束重復執(zhí)行。循

14、環(huán)結構要特別注意的是在重復執(zhí)行語句過程中,要有控制條件的語句,以避免出現(xiàn)死循環(huán)現(xiàn)象。在,VFP,中有三種循環(huán)語句:,3,、,循環(huán)結構,DO WHILE ENDDO,SCAN ENDSCAN,FOR ENDFOR,24,格式:,DO WHILE ,ENDDO,一、,DO WHILE,ENDDO,功能: 當,的值為真時,重復執(zhí)行,DO WHILE ENDDO,之間的,,直到,的值為假時結束。,25,任選項說明,EXIT-,結束當前循環(huán)操作,跳到,ENDDO,后面的語句。,LOOP-,跳過,LOOP,后面的語句,直接回到循環(huán)起始語句,DO WHILE,。,注: 在語句序列中,還可以出現(xiàn),IF,語句或

15、,CASE,語句或,WHILE,語句,-WHILE,語句的嵌套。,26,循環(huán)體可以包含,VFP,合法的任何語句,特別是還可以包含另一個循環(huán)語句,稱為循環(huán)的嵌套。每一個,DO WHILE,必須與一個,ENDDO,對應。內、外循環(huán)不能交叉。,循環(huán)體中若有,EXIT,語句,當執(zhí)行到該語句時,將無條件地跳出所在的循環(huán),執(zhí)行,ENDDO,后面的各語句;當執(zhí)行到,LOOP,時(假如有的話),立即返回到本循環(huán)的,DO WHILE,處,再判斷條件表達式的值以便決定是跳出循環(huán)還是執(zhí)行循環(huán)體。,在循環(huán)體中,必須要有改變條件表達式條件的語句,使得總有一刻,其值為,.F.,,,或有,EXIT,語句退出循環(huán),否則將形成

16、無限循環(huán)(俗稱“死循環(huán)”)。利用,DO WHILE,循環(huán)可以實現(xiàn)對多種情況進行控制。常見的有三種情況:,說明:,27,格式:,DO WHILE N=M,N=N+X,ENDDO,其中,:,N=,初值 (通常為,1,);,M=,終值;,X,為步長,功能:通過對循環(huán)變量,N,進行順計數(shù)并與,M,相比較的方法完成循環(huán)操作。,1,、固定次數(shù)的循環(huán),28,程序代碼如下:,*,P6.PRG*,SET TALK OFF,CLEAR,s=0,i=1,DO WHILE i=99,s=s+i,i=i+2,ENDDO,?,1+3+5+7+,+99=,S,SET TALK ON,例,4.8,:計算,1+3+5+7+9+

17、,+99,的值并輸出。,29,格式:,DO WHILE .T.,IF ,EXIT,ENDIF,ENDDO,2,、對循環(huán)次數(shù)不確定的循環(huán),功能:循環(huán)條件永遠為真,只有滿足,IF,語句的,時,才跳出循環(huán)。,注:在這種使用方法中,,EXIT,選項是不可缺少的,且必須和,IF,語句連用。,30,例,4.9,:將前,N,個自然數(shù)中的完全平方數(shù)進行累加,當累加之和超過,100,時停止累加。要求程序顯示每次的累加和。,*,P7.PRG*,SET TALK OFF,CLEAR,STORE 0 TO I,,,M,DO WHILE .T.,IF M100,EXIT,ELSE,M=M+I2,ENDIF,?,”,完全

18、平方數(shù)累加和:,”,+STR,(,M,,,6,),I=I+1,ENDDO,SET TALK ON,31,格式:,DO WHILE .NOT. EOF( ) (BOF( ) ),SKIP ( SKIP-1 ),ENDDO,3,、用記錄指針控制循環(huán),功能:對當前打開的表文件中的記錄自上而下或自下而上地逐條進行操作。,注:記錄指針由,SKIP,語句控制,循環(huán)結束的條件由函數(shù),EOF,()和,BOF,(),控制。,32,例,4.10,:在學生表,XS.DBF,中有“學號”字段(,N,,,6,)。,現(xiàn)要抽取學號能被,3,整除的學生參加計算機竟賽,要求在屏幕上顯示這些學生的姓名和學號。,*,P8.PRG*

19、,SET TALK OFF,CLEAR,USE XS,DO WHILE .NOT. EOF(),IF MOD(,學號,,3)=0,?姓名,學號,ENDIF,SKIP,ENDDO,USE,SET TALK ON,USE,SET TALK ON,33,例,4.11,:顯示學生表,XS.DBF,中在,1980,年以后出生的學生記錄。,*,P9.PRG*,SET TALK OFF,CLEAR,USE XS,DO WHILE NOT EOF,(,),IF,出生年月,=CTOD,(“,1980-01-30,”,),DISP,ENDIF,SKIP,ENDDO,USE,RETUR,34,格式:,FOR,循環(huán)變

20、量,=,初值,TO,終值, STEP,步長, EXIT , LOOP,ENDFOR / NEXT,二、,FOR,循環(huán)程序設計,功能:當循環(huán)變量的值不大于終值時,執(zhí)行循環(huán)操作。每循環(huán)一次,循環(huán)變量的值自動遞增一個步長值。,說明:循環(huán)變量為任意一個內存變量,不需要事先定義。,初值、終值、步長均為一個數(shù)值表達式,其值可為正或負或小數(shù)。,若不選,STEP,步長,選項,遞增步長為,1,。,LOOP,選項實現(xiàn)循環(huán)短路操作,,EXIT,選項實現(xiàn)結束當前循環(huán)操作。,ENDFOR,和,NEXT,二者等價,只能選擇其中之一。,35,例,4.12,:求,1000,之內所有偶數(shù)之和。,*,P10.PRG*,SET T

21、ALK OFF,CLEAR,S=0,FOR I=0 TO 1000 STEP 2,S=S+I,NEXT,?“,1000,之內所有偶數(shù)之和為”,,S,SET TALK ON,RETURN,36,格式:,SCAN NOOPTIMIZE ,范圍, FOR WHILE, EXIT , LOOP,ENDSCAN,三、,SCAN,ENDSCAN,功能:,對當前打開的表文件在指定范圍,滿足條件的記錄中進行自上而下逐個掃描操作,隨著記錄指針的移動,,SCAN,循環(huán)允許對指定的每條記錄執(zhí)行相同的,操作。,說明:,SCAN,循環(huán)能自動移動指針,按條件指定記錄,避免在循環(huán)體內重復執(zhí)行表文件查詢命令。用,DO WHI

22、LE,循環(huán)也可以實現(xiàn)對表文件的逐個掃描操作,但它需要借助函數(shù),BOF(),或,EOF(),測試狀態(tài),用,SKIP,命令移動指針,不如,SCAN,循環(huán)方便。,37,例,4.14,:分別統(tǒng)計學生表中男生和女生的人數(shù),。,*,P1.PRG*,USE,學生,STORE 0 TO X,,,Y,SCAN,IF,性別,X=X+1,ELSE,Y=Y+1,ENDIF,ENDSCAN,?,”,男生人數(shù),”,X,”,女生人數(shù),”,Y,USE,38,(,1,),DO WHILE,和,ENDDO,、,FOR,和,ENDFOR,、,SCAN,和,ENDSCAN,必須配對使用。,(,2,),命令行序列,可以是任何,FoxP

23、ro,命令或語句,也可以是循環(huán)語句,即可以為多重循環(huán)。,(,3,),循環(huán)變量,應是數(shù)值型的內存變量或數(shù)組元素。,(,4,),EXIT,和,LOOP,命令嵌入在循環(huán)體內,可以改變循環(huán)次數(shù),但是不能單獨使用。,EXIT,的功能是跳出循環(huán),轉去執(zhí)行,ENDDO,、,ENDFOR,、,ENDSCAN,后面的第一條命令;,LOOP,的功能是轉回到循環(huán)的開始處,重新對,“,條件,”,進行判斷,相當于執(zhí)行了一次,ENDDO,、,ENDFOR,、,ENDSCAN,命令,它可以改變,命令行序列,中部分命令的執(zhí)行次數(shù)。,EXIT,、,LOOP,可以出現(xiàn)在,命令行序列,的任意位置,。,使用循環(huán)語句時應注意的幾點,:

24、,39,4.6,多模塊程序,一個應用程序通常都是由一個主程序和若干個子程序組成。所謂子程序是相對于主程序而言的一個獨立的程序文件,可以單獨執(zhí)行,也可以被其他程序調用。,4.6.1,子程序,定義:子程序是相對于主程序而言的一個獨立的程序文件,其建立方法與建立程序文件的方法相同,擴展名為,PRG,。,子程序的使用可以簡化程序中多處重復出現(xiàn)完成相同功能的程序段的設計問題。,子程序的建立方法與程序文件的方法相同,擴展名為:,.PRG,。,子程序的,調用:,DO WITH ,子程序的,返回:,RETURN TO MASTER,40,說明,RETURN,返回到調用者的調用語句的下一行。,TO MASTER

25、,選項表示返回到最高級調用者。,選項表示將值返回到調用者,子程序執(zhí)行時直到遇到以下情況時,自動結束返回:,RETURN,、,RETRY,、,CANCEL,、,QUIT,。,程序之間的調用和返回,41,例,4.16,:輸入一個半徑,r,值,求出圓的面積。,*,P14.PRG*,*,主程序,YMJ=0,INPUT,“,請輸入圓的半徑”,TO BJ,DO ZGC WITH BJ, YMJ&,調用子程序,?,圓的面積,=, YMJ&,顯示圓面積,RETURN,*,子程序,*,ZGC.PRG*,PARAMETERS R, S &,接收參數(shù),S=PI()*R*R &,計算圓面積,,PI(),返回,值,RE

26、TURN &,返回主程序,42,1,、過程與過程文件的定義,過程:過程是一個,由,PROCEDURE,開頭,,,ENDPROC,結尾的子程序段。過程可以將實現(xiàn)相對獨立功能的常用代碼集中在一起,供應用程序在需要時調用。過程的存在格式如下所示:,PROCEDURE,ENDPROC,過程文件,:,是由若干個過程構成的文件。,注:,過程必須存放在一個過程文件中。,不能把可執(zhí)行的主程序代碼放在過程之后。,4.6.2,過程與過程文件,43,2,、過程文件的建立,過程文件建立方法有兩種:,與程序文件的創(chuàng)建方法相同,將過程文件的內容一行一行地輸入。,通過將分散的子程序加入項目管理器,再利用工具自動連編生成擴展

27、名,為,APP,或,EXE,的文件。,3,、過程文件的調用,調用過程文件之前必須要打開過程文件。調用結束后要關閉過程文件。,過程文件的打開,:,SET PROCEDURE TO ,過程文件的關閉,:,SET PROCEDURE TO,或,CLOSE PROCEDURE,44,例,4.17,:,用過程編寫一個求和與乘積的程序。,*,P15.PRG*,SET TALK OFF,S=1,P=1,DO BB,?,”,S=,”,S,SET TALK ON,RETURN,PROC BB,M=3,N=5,S=M+N,P=S*N,?,”,P=,”,P,ENDPROC,調用上述過程文件可以在,V FP,的命令窗

28、口或一個程序文件中使用下列語句:,SET PROCEDURE TO P15,DO P15,45,主程序與子程序之間或過程與過程之間通過互相傳遞參數(shù)來完成整體上的操作。程序之間的參數(shù)傳遞可以通過兩種途徑進行:一是通過帶參數(shù)的程序調用來實現(xiàn),二是通過內存變量來實現(xiàn)。,一,、通過帶參數(shù)的程序調用實現(xiàn)參數(shù)傳遞,傳遞參數(shù)命令格式:,DO WITH ,接收參數(shù)命令格式:,PARAMETERS ,4.6.3,參數(shù)傳遞,46,參數(shù)傳遞與接受規(guī)則:,傳遞參數(shù)命令可以出現(xiàn)在調用程序(主程序)中的任何位置,而接收參數(shù)命令必須出現(xiàn)在被調用程序(子程序)中的第一行。,傳址方式,:,當,WITH,后的,中是內存變量列表時

29、,每個內存變量的值傳,給,PARAMETERS,中對應變量,而該調用程序中的內存變量被隱含起來,但其值隨著被調用程序中相對應變量的值的變化而變化。,傳值方式:,當,WITH,后的,中是內存變量表達式列表或單個內存變量用圓括號括起來時,每個內存變量表達式的值傳給,PARAMETERS,中對應變量,而該調用程序中出現(xiàn)在表達式中的內存變量不被隱含,其值也不隨著被調用程序中相對應變量的值的變化而變化。,47,如圖,4.19,所示,有二個程序段,現(xiàn)在我們將其編成一個過程文件,以此來說明參數(shù)傳遞的傳址方式。運行結果如圖,4.20,所示。請觀察并分析運行結果。,圖,4.19,利用,DO.WITH.,傳遞參數(shù)

30、,48,圖,4.20,例,4.18,運行結果,49,如圖,4.21,所示,有二個程序段,現(xiàn)在我們將其編成一個過程文件,以此來說明參數(shù)傳遞的傳值方式。運行結果如圖,4.22,所示。請觀察并分析運行結果。,圖,4.21,利用,DO.WITH.,傳遞參數(shù),50,圖,4.22,例,4.19,運行結果,51,例,4.20,:計算圓面積(將例,4.16,的子程序調用改變?yōu)檫^程調用),*,P18.PRG*,SET TALK OFF,YMJ=0,INPUT,“,請輸入半徑”,TO BJ,DO,SUB1,WITH BJ, YMJ &,調用過程,SUB1,并以傳址方式傳遞參數(shù),?,圓的面積,=, YMJ&,顯示圓

31、面積,RETURN &,程序結束語句,允許省略,PROCEDURE,SUB1,&,過程,SUB1,開始語句,PARAMETERS R, S &,接收參數(shù),S=PI()*R*R,ENDPROC,52,*,P19.PRG*,SET TALK OFF,INPUT ,輸入梯形上底邊長:, TO A,INPUT ,輸入梯形下底邊長:, TO B,INPUT ,輸入梯形的高:, TO H,STORE 0 TO S,DO SUB2 WITH A+B,H,S & A+B,按傳值方式傳遞,,H,、,S,按傳址方式傳遞,?,所求梯形面積為:,S &,顯示梯形面積,SET TALK ON,RETURN,PROC S

32、UB2,PARAMETERS P,Q,T &,接收參數(shù),T=P*Q/2&,計算梯形面積,ENDPROC,例,4.21,:,利用帶參調用方法計算梯形面積。,53,一個變量除了類型和取值之外,還有一個重要的屬性就是它的作用域。若以,變量的作用域來分,,,內存變量可分為公共變量、私有變量和局部變量三類。,4.6.5,屬性,的,作用域,1.,公共變量,在任何模塊中都可使用的變量稱為公共變量。公共變量要先建立后使用,,,公共變量,必須先,聲明,和定義后才能使用。,定義格式:,PUBLIC ,功能,:,將,指定的變量,定義,為,公共的內存變量,,,并為它們賦初值,.F.,公共變量一旦建立就一直有效,,,即

33、使程序運行結束返回到命令窗口也不會消失。只有當執(zhí)行,CLEAR、MEMORY、RELEASE、QUIT,等命令后,公共變量才被釋放。,54,2,、私有,變量,在程序中直接使用(沒有通過,PUBLIC,和,LOCAL,命令事先聲明)而由系統(tǒng)自動隱含建立的變量都是私有變量。私有變量在建立它的程序模塊及其下屬模塊中有效,,,當建立它的程序模塊運行結束時自動清除。,聲明,格式,:,PRIVATE ALLLIKE,EXCEPT,功能:,聲明私有變量,并,隱藏上層程序模塊中的同名變量,,,直至聲明它的程序,、,過程或自定義函數(shù)執(zhí)行結束后,,,才恢復使用上層程序模塊中被隱藏的變量。,說明,:“,聲明,”,與

34、,“,建立,”,不一樣,,,前者僅指出私有變量的屏蔽作用,,,后者不但指出變量的作用域,,,而且定義了變量,,,為變量賦了值。,55,4.4,過程與過程文件,3,、本地,變量,本地變量只能在建立它的程序模塊中使用,,,而不能在其上層或下層程序模塊中使用,,,當建立它的模塊程序運行結束時,,,本地變量自動釋放。,本地,變量,也必須先定義后才能使用。,定義格式:,LOCAL ,功能:將,指定的變量設置為,本地變量,,,并為它們賦初值,.F.,。,由于,LOCAL,與,LOCATE,前四個字母相同,,,所以這條命令的命令動詞不能縮寫。,56,一、自定義函數(shù)的設計,定義:自定義函數(shù)是一個子程序(,.P

35、RG,),,它可以返回一個值到調用程序。,建立,:,與一般的命令文件的建立方法相同。,自定義函數(shù)在過程文件中的存在形式為:,FUNCTION,自定義函數(shù)名,語句序列,ENDFUNC,注:,自定義函數(shù)與過程很相似,可以是一個獨立的命令文件,也可以在一個過程文件中。與過程不同的是自定義函數(shù)必須返回一個值。,特點,:,在自定義函數(shù)程序中首條命令一般為,:,PARAMETERS,在自定義函數(shù)程序中尾條命令必須為:,RETURN,4.6.4,自定義函數(shù),57,三、自定義函數(shù)的參數(shù)傳遞,自定義函數(shù)中的參數(shù)傳遞既可以用傳值方式,也可以用傳址方式,具體規(guī)則如下:,(,1,)如果變量在,參數(shù)表達式列表,中是以表

36、達式的形式出現(xiàn),那么是傳值方式;,(,1,)如果變量在,參數(shù)表達式列表,中是以單個變量的形式出現(xiàn),那么取決于,SET UDFPARAMS TO VALUE/CONFERENCE,的設置(缺省為傳值方式);,(,3,)無論,SET UDFPARAMS TO,設置如何,通過在參數(shù)變量前冠以,,以強制傳址。如:,S,(,A,),二、自定義函數(shù)的調用,自定義函數(shù)的調用形式為:,自定義函數(shù)名(,),58,*,P20.PRG*,SET TALK OFF,CLEAR,INPUT,“,請輸入半徑”,TO BJ,INPUT ,請輸入圓的半徑,: TO r,?,圓的面積,S=,ymj,(r) &,調用自定義函數(shù),

37、SET TALK ON,RETURN,FUNCTION,ymj,(k),m=PI()*k2 & PI(),是內部函數(shù),它返回,值,RETURN m,ENDFUNC,例,4.23,:計算圓面積(將例,4.20,的子程序調用改自定義函數(shù)的調用)。,59,1,、,字段變量給數(shù)組賦值,語句,SCATOTER,格式,:,SCATTER FIELDS /FIELDS LIKE /FIELDS EXCEPT MEMO TO /TO BLANK/MEMVAR /MEMVAR BLANK /NAME ,選項說明:,功能:將當前表中的當前記錄的全部或選中字段傳送到指定數(shù)組或系統(tǒng)指定的數(shù)組(,MEMVER,),或指

38、定對象中。傳送時備注字段和通用字段被忽略不傳送,數(shù)組中數(shù)據(jù)的存放順序以可傳送字段的值依次排列。,BLANK,:,表示只傳送相應類型和大小的空值。,MEMO,:,表示傳送時備注字段同時被傳送。,4.6.5,數(shù)組與數(shù)據(jù)表之間的數(shù)據(jù)交換,60,2,、數(shù)組對字段變量的對應替換,GATHER,格式:,GATHER FROM/MEMVAR/NAMEFIELDS /FIELDS LIKE /FIELDS,EXCEPT MEMO,功能:將一維數(shù)組中的各元素數(shù)據(jù)傳遞給當前記錄。,數(shù)組中的第一個元素的內容傳遞給第一個字段,第二個元素傳遞給第二個字段,,如果數(shù)組中元素中的個數(shù)比字段個數(shù)多,則多余的部分忽略。注意字段

39、類型要與對應的數(shù)組元素的數(shù)據(jù)類型匹配。,61,例,4.26,:在學生表,XS.DBF,中添加一條新記錄,其各字段的數(shù)據(jù)依次為:,980120/,張海洋男,80.05.12/,獎學金,然后,再將此記錄與,“,林曉為,”,調換一下位置。,*,P23.PRG*,SET TALK OFF,CLEAR,DIME x(,),x(1)=980120,x(2)=,張海洋,x(3)=,男,x(4)= CTOD(1980.05.12),x(5)= ,獎學金,USE XS,COPY TO ARRAY y FOR,姓名,=,“,林曉為,”,&,將滿足條件的記錄存入數(shù)組,y,中,LOCATE FOR,姓名,=,“,林曉

40、為,”,&,指針指向姓名為,林曉為,的記錄,GATHER FROM x,&,用數(shù)組,x,(,張海洋)的數(shù)據(jù)覆蓋該記錄,APPEND FROM ARRAY y,&,在尾部添加了一條,“,林曉為,”,的新記錄,USE,SET TALK ON,RETURN,62,4.7,應用程序舉例,4.27,:,從鍵盤輸入的數(shù),判斷該數(shù)是否為素數(shù)。,算法思路:素數(shù)指除了能被,1,和自身外,不能被其他整數(shù)整除的自然數(shù)。判斷整數(shù),X,是不是素數(shù)的基本方法是:將,X,分別除以,2,,,3,,,,,X-1,,,若都不能整除,則,X,為素數(shù)。判斷,X,被,I,整除還可用表達式,MOD(X,I)=0,或,INT(X/I)=X

41、/I,或,X%I=0,*,LI.PRG*,SET TALK OFF,CLEA,INPUT X= TO X,FOR I=2 TO X-1,IF INT(X/I)=X/I,EXIT,ENDIF,ENDFOR,IF I=X,? ,是素數(shù)!,ELSE,? ,不是素數(shù)!,ENDIF,SET TALK ON,63,4.28,:,求兩個正整數(shù)的最小公倍數(shù)和最大公約數(shù),算法思路,首先必須了解數(shù)學上關于最小公倍數(shù)和最大公約數(shù)的概念。最大公約數(shù)是指能同時被兩個正整數(shù),M,、,N,整除的數(shù)中最大的一個,而最小公倍數(shù)是指能同時整除,M,和,N,的數(shù)中最小的一個。最大公約數(shù)肯定在,1,到,M,、,N,兩數(shù)中較小的一個數(shù)

42、之間;而最小公倍數(shù)肯定在,M,、,N,兩數(shù)中較大的一個數(shù)到兩數(shù)之積,M*N,之間,而且兩者之間有一公式,即最小公倍數(shù),= M*N/,最大公約數(shù),因此只要求出一個就可以求出另一個。,SET TALK OFF,CLEAR,INPUT A= TO A,INPUT B= TO B,X=MAX(A,B),Y=MIN(A,B),FOR I=X TO A*B,IF INT(I/A)=I/A,IF INT(I/B)=I/B,M=I,EXIT,ENDIF,ENDIF,ENDFOR,FOR I=Y TO 1 STEP -1,IF INT(A/I)=A/I,IF INT(B/I)=B/I,N=I,EXIT,ENDI

43、F,ENDIF,ENDFOR,?,最小公倍數(shù)是,:,M,?,最大公約數(shù)是,:,N,SET TALK ON,4.7,應用程序舉例,64,4.29,:,求,100999,之間水仙花數(shù)。,(水仙花數(shù):指一個三位數(shù),其各位數(shù)字立方之和等于該數(shù)本身。如:,153=1,3,+5,3,+3,3,),算法思路:解此題的關鍵是要知道如何分離出一個三位數(shù)中的各位數(shù)字。本題采取將指定的數(shù)除,10,求余,所得余數(shù)就是數(shù)值最右邊得一個數(shù)碼。接著將除,10,后的數(shù)截尾取整,得到的就是去掉最右邊一個數(shù)碼后的數(shù)值,以此類推,每次都可以截得一個最右邊的數(shù)碼,將該三位數(shù)的各位數(shù)碼分別截取出來并進行立方求和,如等于原數(shù),則原數(shù)為水

44、仙花數(shù);否則原數(shù)不是水仙花數(shù)。,SET TALK OFF,CLEAR,FOR N=100 TO 999,DECLARE A(3),I=1,M=N,DO WHILE I=3,A(I)=MOD(M,10),M=INT(M/10),I=I+1,ENDDO,IF N=A(1)3+A(2)3+A(3)3,?N,ENDIF,ENDFOR,SET TALK ON,4.7,應用程序舉例,65,4.7,應用程序舉例,4.30,:,從鍵盤輸入一串字符(口令),自動判斷輸入的口令是否與系統(tǒng)的口令一致。若一致則顯示“歡迎進入本系統(tǒng),!,”,,;否則顯示“口令不正確,請重輸,!,”,;給予三次重輸機會,輸入次數(shù)超過三次

45、則顯示“你無權使用本系統(tǒng),!,”,的提示。,解題思路:這是一道口令驗證題,即字符串比較問題。解題的關鍵有兩點:一是通過任意一種形式接收用戶輸入的口令;二是比較用戶口令與系統(tǒng)口令是否一致,進而決定下一步的操作。,SET TALK OFF,CLEAR,I=1,DO WHILE I=3,?,你無權使用本系統(tǒng),!,ELSE,?,口令不正確,請重輸,!,ENDIF,ENDIF,I=I+1,ENDDO,SET TALK ON,66,4.31,:,編程從鍵盤上輸入一個“字符串”,將它們逆序輸出。例如輸入字符串“,ABCD,”,,,則輸出“,DCBA,”,)。,解題思路:本題可以用字符串拆取和合并的方法來解決

46、。首先利用,LEN,函數(shù)測得字符串的長度,并由它確定循環(huán)的次數(shù),循環(huán)中可以用函數(shù),SUBSTR,自左向右或自右向左地逐個截取字符,然后對截取的字符進行相應地處理,最后再逐個將處理后的單個字符通過運算符“,+,”,合并在一起。,*,L5.PRG*,SET TALK OFF,CLEAR,ACCEPT ,請輸入一個字符串:,TO X,C=SPACE(0),L=LEN(X),FOR I=1 TO L,R= SUBSTR(X,I,1),C=R+C,ENDFOR,?,字符串:,+X+,逆序輸出后為:,+C,SET TALK ON,4.7,應用程序舉例,67, ,算法思路:楊輝三角形的第一行為,1,;每一行

47、的第一個數(shù)和最后一個數(shù)都有是,1,,其它各項的數(shù)是它的上一行相應位置上左、右肩數(shù)這和,我們可以根據(jù)這一規(guī)律來設計程序。,程序代碼如下:,4.33,:,打印楊輝三角形的前,5,行,如下圖,4.7,應用程序舉例,68,I=1,DO WHILE I=N,J=1,?SPAC(N-I),DO WHILE J=I,?IIF(A(I,J)10,STR(A(I,J),1),STR(A(I,J),2)+SPAC(1),J=J+1,ENDDO,?,I=I+1,ENDDO,SET TALK OFF,*,L7.PRG*,SET TALK OFF,CLEAR,DIMENSION A(5,5),I=1,N=5,DO WH

48、ILE I=N,J=1,DO WHILE J=I,IF J=1 OR J=I,A(I,J)=1,ELSE,A(I,J)=A(I-1,J-1)+A(I-1,J),ENDIF,J=J+1,ENDDO,I=I+1,ENDDO,程序代碼如下:,69,*,*,L8.PRG*,SET TALK OFF,CLEAR,N=4,P=2*N,1,FOR I=1 TO P,IF I=N,?SPACE(N,I+1),FOR J=1 TO 2*I,1,?CHR(ASC(A)+I,1),ENDFOR,ELSE,?SPACE(I,N+1),FOR K=1 TO 2*(2*N,I)-1,?CHR(ASC(A)+2*N,I,1

49、),ENDFOR,ENDIF,ENDFOR,SET TALK ON,4.34,:,編程輸出下列圖形:,A,BBB,CCCCC,DDDDDDD,CCCCC,BBB,A,算法思路:這是一道圖案輸出顯示的問題,可以通過二重循環(huán)嵌套控制來完成的。輸出顯示的行數(shù)與圖案的半高,N,有關,因此對于給出的圖案,我們可以將它分解為兩個三角形,上面一個三角形每行中的列是逐行遞增的,而下面一個三角形每行中的列是逐行遞減的,所以內循環(huán)分為兩個分別處理的兩個三角形。,4.7,應用程序舉例,70,4.35,:,編程實現(xiàn)向表學生表,XS.DBF,中添加記錄,其中學號,姓名,性別和出生年月四個字段內容從鍵盤輸入,可以添加多個

50、記錄,當確實不需要添加時退出循環(huán)。,解題思路:這是一道典型的表輸入數(shù)據(jù)問題,可以采用先用接收語句把字段值送入數(shù)組中,再通過,GATHER,語句將數(shù)組值傳送到剛添加的空記錄的字段中。,SET TALK OFF,CLEAR,DIME A(4),USE,學生,DO WHILE .T.,ACCEPT ,學號,: TO A(1),ACCEPT ,姓名,: TO A(2),INPUT ,性別,: TO A(3),INPUT ,出生日期,: TO A(4),APPEND BLANK,GATHER FROM A,WAIT ,繼續(xù)添加嗎,?(Y/N) TO YN,IF UPPER(YN)=Y,LOOP,ELSE,EXIT,ENDIF,ENDDO,SET TALK ON,4.7,應用程序舉例,71,第四章結束,

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!