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

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

第4章 Visual FoxPro程序設計基礎

  • 資源ID:247852473       資源大?。?span id="24d9guoke414" class="font-tahoma">654KB        全文頁數(shù):72頁
  • 資源格式: PPT        下載積分:10積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要10積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

第4章 Visual FoxPro程序設計基礎

*,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,*,第四章 程序設計基礎,第四章,程序設計基礎,第四章 程序設計基礎,4.1,程序設計方法概述,4.2,算法及算法的表示,4.3,程序的建立、編輯與運行,4.4,結構化程序設計基礎,4.5,程序的控制結構,4.6,多模塊程序,4.7,應用程序舉例,2,程序設計方法的發(fā)展可以劃分以下三個階段:,早期的程序設計,結構化程序設計,面向?qū)ο蟮某绦蛟O計方法,4.1,程序設計方法概述,第四章 程序設計基礎,3,算法概述,:,廣義地講,:,算法是為完成一項任務所應當遵循的一步一步的規(guī)則的、精確的、無歧義的描述,它的總步數(shù)是有限的。,狹義地講:,算法是解決一個問題采取的方法和步驟的描述,。,4.2,算法及算法的表示,第四章 程序設計基礎,4,第四章 程序設計基礎,例,4.1,輸入三個數(shù),然后輸出其中最大的數(shù)。,算法可以寫成:,1),輸入,A,,,B,,,C,。,2),若,A>B,,則,MAX A,;,否則,MAXB,。,3),若,C>MAX,,則,MAX C,。,4),輸出,MAX,,,MAX,即為最大數(shù)。,例,4.,2,輸入,10,個數(shù),輸出其中最大的數(shù)。,算法可以寫成:,(,1,)輸入,1,個數(shù),存入變量,A,中,將記錄數(shù)據(jù)個數(shù)的變量,N,賦值為,1,,即,N=1,(,2,)將,A,存入表示最大值的變量,Max,中,即,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ù),這些輸入信息是算法所需的初始數(shù)據(jù);,輸 出,:一個算法應有一個或多個輸出,一個算法得到的結果就是算法的輸出。沒有輸出的算法是沒有意義的。,第四章 程序設計基礎,算法的特性,:,6,第四章 程序設計基礎,算法的表示,:,一、自然語言與偽代碼表示算法,二,用流程圖表示算法,傳統(tǒng),流程圖,N,S,流程圖,順序結構流程圖,選擇結構流程圖,順序結構的,N-S,圖,選擇結構的,N-S,圖,算法的含義:我們把解決問題的方法和步驟稱為算法。,7,第四章 程序設計基礎,循環(huán)結構流程圖,循環(huán)結構的,N-S,圖,8,程序(命令)文件是指將各類命令按照處理問題的算法和一定的語法結構存放的文件。其擴展名為,.PRG,。,一、創(chuàng)建程序,通過項目管理器創(chuàng)建,通過文件菜單創(chuàng)建,通過命令創(chuàng)建,二、保存程序,通過菜單保存,直接關閉沒有保存的程序,則會彈出相應對話框,提示保存或放棄,按,CTRL+S,組合鍵保存,第四章 程序設計基礎,4.3,程序的建立、編輯與運行,9,三、,修改程序,通過項目管理器的,“,修改,”,選項打開程序并修改,通過文件菜單中,“,打開,”,選項打開程序并修改,通過命令,MODIFY COMMAND,打開程序并修改,注:修改窗口和創(chuàng)建窗口相同,修改完畢后應注意保存。,四、運行程序,通過項目管理器的,“,運行,”,按鈕運行程序,通過程序菜單中,“,運行,”,選項運行程序,通過命令,DO,運行程序,第四章 程序設計基礎,10,程序的書寫規(guī)則:,命令分行 :命令都以回車鍵結尾,一行只能寫一條命令,若寫不下,可在未寫完的本行末尾添加一個分號“;”作為下一行的繼行標志。,程序注釋語句,NOTE/*,:,對程序的結構或功能進行注釋。,程序執(zhí)行時將跨過注釋語句,不作任何操作,語句注釋,&&,:在語句行末尾注釋,對當前語句進行說明。,程序執(zhí)行時,對,&&,后面的注釋不作任何操作,第四章 程序設計基礎,4.4,結構化程序設計基礎,11,中斷語句,CANCEL,中斷當前程序運行,并返回到系統(tǒng)命令窗口。,掛起語句,SUSPEND,暫停當前程序運行。它只是使程序掛起,通過,RESUME,語句可以使程序繼續(xù)執(zhí)行。,恢復執(zhí)行語句,RESUME,恢復被,SUSPEND,掛起的程序,從暫停的位置繼續(xù)執(zhí)行。,程序調(diào)試語句,第四章 程序設計基礎,12,RETURN,(,返回到調(diào)用行的下一行,無上級程序則返回到命令窗口)。,RETRY,(,返回到調(diào)用行本身,可以實現(xiàn)程序的重復調(diào)用)。,CANCEL,(,中斷,異常結束,并返回到系統(tǒng)命令窗口)。,QUIT,(,退出,VFP,,,返回到操作系統(tǒng),并自動刪去磁盤中的臨時文件)。,程序中的專用語句,一程序的結尾命令,第四章 程序設計基礎,13,1,、,數(shù)據(jù)接收語句,INPUT,格式:,INPUT <,字符表達式,> TO <,內(nèi)存變量,>,功能:將鍵盤輸入的數(shù)據(jù)賦給由,<,內(nèi)存變量,>,指定的內(nèi)存變量,注,:,從鍵盤輸入的數(shù)據(jù)可以是常量、變量或表達式,數(shù)據(jù)類型可以是除備注型和通用型外的所有類型,。,2,、,字符串接收語句,ACCEPT,格式:,ACCEPT <,字符表達式,>,TO <,內(nèi)存變量,>,功能:將鍵盤輸入的數(shù)據(jù)賦給由,<,內(nèi)存變量,>,指定的內(nèi)存變量。,注,:,從鍵盤輸入的數(shù)據(jù)只能是字符型常量。,二程序交互式命令,第四章 程序設計基礎,14,格式:,WAIT <,字符表達式,>,TO <,內(nèi)存變量,>,WINDOW AT <,行坐標,列坐標,>NOWAIT,NOCLEARTIMEOUT <,秒數(shù),>,功能:將鍵盤輸入的數(shù)據(jù)賦給由,<,內(nèi)存變量,>,指定的內(nèi)存變量。,注:,從鍵盤輸入的數(shù)據(jù)只能是一個單字符常量。,三、單字符接收語句,WAIT,第四章 程序設計基礎,15,?,換行,輸出語句:,格式:,?,<,表達式列表,>,功能:分別計算表達式列表的值,并將表達式列表的值輸出在,V FP,主窗口的當前光標的下一行。,<,表達式列表,>,中,各表達式以逗號分隔,?,同行,輸出語句:,格式:,?,<,表達式列表,>,功能:分別計算表達式列表的值,并將表達式列表的值輸出在,V FP,主窗口的當前光標所在行、列的后面。,第四章 程序設計基礎,16,程序控制的基本結構有三種:順序結構、選擇分支結構和循環(huán)結構。,1,、,順序結構,:,程序的執(zhí)行是按其語句的排列先后順序執(zhí)行,這也是最簡單、最基本的程序控制結構。,例,4.3,:,將人事信息表,RS.DBF,中新評為教授的教師,其職稱一欄由副教授改為教授,CLEAR,SET TALK OFF,USE RS,ACCEPT ",請輸入要修改記錄的教師名:," to,xm,LOCATE 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 ,<,語句系列,1>, ELSE,<,語句系列,2>,ENDIF,功能:,當,<,條件表達式,>,的值為真時,執(zhí)行,<,語句系列,1>,;否則執(zhí)行,<,語句系列,2>,。如果沒有,ELSE,的子句,則當,<,條件表達式,>,的值為假時,不進行任何操作,。,注:,IF,和,ENDIF,必須配對使用。,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 X>0,IF X>10,Y=X*X+1,ELSE,Y=3*X*X-2*X+1,ENDIF,ELSE,Y=X*X+4*X-1,ENDIF,?,”,分段函數(shù)值為:”,+STR(Y,10,2),SET TALK ON,RETURN,20,2,、,IIF (),判斷選擇函數(shù),VFP,中有一個函數(shù),它能夠先進行條件判斷,然后決定返回其值。它的使用效果比分支語句更快捷。,格式:,IIF,(,<,條件表達式,表達式,1,,表達式,2,功能:,若條件表達式,的值為,.T.,,,函數(shù)返回表達式,1,的值;若條件表達式,的值為,.F.,,,函數(shù)返回表達式的值。,例如:,IIF,(,成績,>=60,“,及格”,“不及格”),當成績,60,時,函數(shù)返回“及格”,否則返回“不及格”字符串。,21,3,、多路選擇分支結構,格式,:,DO CASE,CASE <,條件表達式,1 >,<,語句系列,1 >, CASE <,條件表達式,2 >,<,語句系列,2 >,CASE <,條件表達式,n >,<,語句系列,n > , OTHERWISE,<,語句系列,n+1 > ,ENDCASE,功能:依次判斷,<,條件表達式,I >,,,當值為真時執(zhí)行對應的,<,語句系列,I>,;,當所有,<,條件表達式,>,的值為假時,則執(zhí)行,OTHERWISE,下面的,<,語句系列,N+1>,。,注:,DO CASE,和,ENDCASE,必須配對使用。,22,例,4.6,:用,DO CASE,語句修改例,4.5,計算分段函數(shù)的例子。,程序代碼如下,:,*,P4.PRG*,SET TALK OFF,CLEAR,INPUT,“,X=,”,TO X,DO CASE,CASE X<=0,Y=X*X+4*X-1,CASE X>0.AND.X<=10,Y=3*X*X-2*X+1,CASE X>10,Y=X*X+1,ENDCASE,?,”,分段函數(shù)值為:”,+STR(Y,10,2),SET TALK ON,RETURN,23,定義: 循環(huán)結構是指根據(jù)問題的需要任意次地重復執(zhí)行一行或多行語句。具體地說就是某些語句在某一條件成立時,需要重復執(zhí)行,直到條件不成立時,才結束重復執(zhí)行。循環(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,語句或,CASE,語句或,WHILE,語句,-WHILE,語句的嵌套。,26,循環(huán)體可以包含,VFP,合法的任何語句,特別是還可以包含另一個循環(huán)語句,稱為循環(huán)的嵌套。每一個,DO WHILE,必須與一個,ENDDO,對應。內(nèi)、外循環(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),否則將形成無限循環(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+,+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 M>100,EXIT,ELSE,M=M+I2,ENDIF,?,”,完全平方數(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*,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)變量,=,初值,TO,終值, STEP,步長,<,語句系列,>, EXIT , LOOP,ENDFOR / NEXT,二、,FOR,循環(huán)程序設計,功能:當循環(huán)變量的值不大于終值時,執(zhí)行循環(huán)操作。每循環(huán)一次,循環(huán)變量的值自動遞增一個步長值。,說明:循環(huán)變量為任意一個內(nèi)存變量,不需要事先定義。,初值、終值、步長均為一個數(shù)值表達式,其值可為正或負或小數(shù)。,若不選,STEP,步長,選項,遞增步長為,1,。,LOOP,選項實現(xiàn)循環(huán)短路操作,,EXIT,選項實現(xiàn)結束當前循環(huán)操作。,ENDFOR,和,NEXT,二者等價,只能選擇其中之一。,35,例,4.12,:求,1000,之內(nèi)所有偶數(shù)之和。,*,P10.PRG*,SET TALK OFF,CLEAR,S=0,FOR I=0 TO 1000 STEP 2,S=S+I,NEXT,?“,1000,之內(nèi)所有偶數(shù)之和為”,,S,SET TALK ON,RETURN,36,格式:,SCAN NOOPTIMIZE ,范圍, FOR<,條件表達式,1> WHILE<,條件表達式,2>,<,語句序列,>, EXIT , LOOP,ENDSCAN,三、,SCAN,ENDSCAN,功能:,對當前打開的表文件在指定范圍,滿足條件的記錄中進行自上而下逐個掃描操作,隨著記錄指針的移動,,SCAN,循環(huán)允許對指定的每條記錄執(zhí)行相同的,<,語句系列,>,操作。,說明:,SCAN,循環(huán)能自動移動指針,按條件指定記錄,避免在循環(huán)體內(nèi)重復執(zhí)行表文件查詢命令。用,DO WHILE,循環(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,),命令行序列,可以是任何,FoxPro,命令或語句,也可以是循環(huán)語句,即可以為多重循環(huán)。,(,3,),循環(huán)變量,應是數(shù)值型的內(nèi)存變量或數(shù)組元素。,(,4,),EXIT,和,LOOP,命令嵌入在循環(huán)體內(nèi),可以改變循環(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)語句時應注意的幾點,:,39,4.6,多模塊程序,一個應用程序通常都是由一個主程序和若干個子程序組成。所謂子程序是相對于主程序而言的一個獨立的程序文件,可以單獨執(zhí)行,也可以被其他程序調(diào)用。,4.6.1,子程序,定義:子程序是相對于主程序而言的一個獨立的程序文件,其建立方法與建立程序文件的方法相同,擴展名為,PRG,。,子程序的使用可以簡化程序中多處重復出現(xiàn)完成相同功能的程序段的設計問題。,子程序的建立方法與程序文件的方法相同,擴展名為:,.PRG,。,子程序的,調(diào)用:,DO <,文件名,> WITH <,參數(shù)列表,>,子程序的,返回:,RETURN TO MASTER<,表達式,>,40,說明,RETURN,返回到調(diào)用者的調(diào)用語句的下一行。,TO MASTER,選項表示返回到最高級調(diào)用者。,<,表達式,>,選項表示將值返回到調(diào)用者,子程序執(zhí)行時直到遇到以下情況時,自動結束返回:,RETURN,、,RETRY,、,CANCEL,、,QUIT,。,程序之間的調(diào)用和返回,41,例,4.16,:輸入一個半徑,r,值,求出圓的面積。,*,P14.PRG*,*,主程序,YMJ=0,INPUT,“,請輸入圓的半徑”,TO BJ,DO ZGC WITH BJ, YMJ&&,調(diào)用子程序,?,",圓的面積,=", YMJ&&,顯示圓面積,RETURN,*,子程序,*,ZGC.PRG*,PARAMETERS R, S &&,接收參數(shù),S=PI()*R*R &&,計算圓面積,,PI(),返回,值,RETURN &&,返回主程序,42,1,、過程與過程文件的定義,過程:過程是一個,由,PROCEDURE<,過程名,>,開頭,,,ENDPROC,結尾的子程序段。過程可以將實現(xiàn)相對獨立功能的常用代碼集中在一起,供應用程序在需要時調(diào)用。過程的存在格式如下所示:,PROCEDURE<,過程名,>,<,語句序列,>,ENDPROC,過程文件,:,是由若干個過程構成的文件。,注:,過程必須存放在一個過程文件中。,不能把可執(zhí)行的主程序代碼放在過程之后。,4.6.2,過程與過程文件,43,2,、過程文件的建立,過程文件建立方法有兩種:,與程序文件的創(chuàng)建方法相同,將過程文件的內(nèi)容一行一行地輸入。,通過將分散的子程序加入項目管理器,再利用工具自動連編生成擴展名,為,APP,或,EXE,的文件。,3,、過程文件的調(diào)用,調(diào)用過程文件之前必須要打開過程文件。調(diào)用結束后要關閉過程文件。,過程文件的打開,:,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,調(diào)用上述過程文件可以在,V FP,的命令窗口或一個程序文件中使用下列語句:,SET PROCEDURE TO P15,DO P15,45,主程序與子程序之間或過程與過程之間通過互相傳遞參數(shù)來完成整體上的操作。程序之間的參數(shù)傳遞可以通過兩種途徑進行:一是通過帶參數(shù)的程序調(diào)用來實現(xiàn),二是通過內(nèi)存變量來實現(xiàn)。,一,、通過帶參數(shù)的程序調(diào)用實現(xiàn)參數(shù)傳遞,傳遞參數(shù)命令格式:,DO <,文件名,> WITH <,參數(shù)表達式列表,>,接收參數(shù)命令格式:,PARAMETERS <,變量列表,>,4.6.3,參數(shù)傳遞,46,參數(shù)傳遞與接受規(guī)則:,傳遞參數(shù)命令可以出現(xiàn)在調(diào)用程序(主程序)中的任何位置,而接收參數(shù)命令必須出現(xiàn)在被調(diào)用程序(子程序)中的第一行。,傳址方式,:,當,WITH,后的,<,參數(shù)表達式列表,>,中是內(nèi)存變量列表時,每個內(nèi)存變量的值傳,給,PARAMETERS,中對應變量,而該調(diào)用程序中的內(nèi)存變量被隱含起來,但其值隨著被調(diào)用程序中相對應變量的值的變化而變化。,傳值方式:,當,WITH,后的,<,參數(shù)表達式列表,>,中是內(nèi)存變量表達式列表或單個內(nèi)存變量用圓括號括起來時,每個內(nèi)存變量表達式的值傳給,PARAMETERS,中對應變量,而該調(diào)用程序中出現(xiàn)在表達式中的內(nèi)存變量不被隱含,其值也不隨著被調(diào)用程序中相對應變量的值的變化而變化。,47,如圖,4.19,所示,有二個程序段,現(xiàn)在我們將其編成一個過程文件,以此來說明參數(shù)傳遞的傳址方式。運行結果如圖,4.20,所示。請觀察并分析運行結果。,圖,4.19,利用,DO.WITH.,傳遞參數(shù),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,的子程序調(diào)用改變?yōu)檫^程調(diào)用),*,P18.PRG*,SET TALK OFF,YMJ=0,INPUT,“,請輸入半徑”,TO BJ,DO,SUB1,WITH BJ, YMJ &&,調(diào)用過程,SUB1,并以傳址方式傳遞參數(shù),?,",圓的面積,=", YMJ&&,顯示圓面積,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 SUB2,PARAMETERS P,Q,T &&,接收參數(shù),T=P*Q/2&&,計算梯形面積,ENDPROC,例,4.21,:,利用帶參調(diào)用方法計算梯形面積。,53,一個變量除了類型和取值之外,還有一個重要的屬性就是它的作用域。若以,變量的作用域來分,,,內(nèi)存變量可分為公共變量、私有變量和局部變量三類。,4.6.5,屬性,的,作用域,1.,公共變量,在任何模塊中都可使用的變量稱為公共變量。公共變量要先建立后使用,,,公共變量,必須先,聲明,和定義后才能使用。,定義格式:,PUBLIC <,內(nèi)存變量表,>,功能,:,將,<,內(nèi)存變量表,>,指定的變量,定義,為,公共的內(nèi)存變量,,,并為它們賦初值,.F.,公共變量一旦建立就一直有效,,,即使程序運行結束返回到命令窗口也不會消失。只有當執(zhí)行,CLEAR、MEMORY、RELEASE、QUIT,等命令后,公共變量才被釋放。,54,2,、私有,變量,在程序中直接使用(沒有通過,PUBLIC,和,LOCAL,命令事先聲明)而由系統(tǒng)自動隱含建立的變量都是私有變量。私有變量在建立它的程序模塊及其下屬模塊中有效,,,當建立它的程序模塊運行結束時自動清除。,聲明,格式,:,PRIVATE <,內(nèi)存變量表,>ALLLIKE,EXCEPT<,通配符,>,功能:,聲明私有變量,并,隱藏上層程序模塊中的同名變量,,,直至聲明它的程序,、,過程或自定義函數(shù)執(zhí)行結束后,,,才恢復使用上層程序模塊中被隱藏的變量。,說明,:“,聲明,”,與,“,建立,”,不一樣,,,前者僅指出私有變量的屏蔽作用,,,后者不但指出變量的作用域,,,而且定義了變量,,,為變量賦了值。,55,4.4,過程與過程文件,3,、本地,變量,本地變量只能在建立它的程序模塊中使用,,,而不能在其上層或下層程序模塊中使用,,,當建立它的模塊程序運行結束時,,,本地變量自動釋放。,本地,變量,也必須先定義后才能使用。,定義格式:,LOCAL <,內(nèi)存變量表,>,功能:將,<,內(nèi)存變量表,>,指定的變量設置為,本地變量,,,并為它們賦初值,.F.,。,由于,LOCAL,與,LOCATE,前四個字母相同,,,所以這條命令的命令動詞不能縮寫。,56,一、自定義函數(shù)的設計,定義:自定義函數(shù)是一個子程序(,.PRG,),,它可以返回一個值到調(diào)用程序。,建立,:,與一般的命令文件的建立方法相同。,自定義函數(shù)在過程文件中的存在形式為:,FUNCTION,自定義函數(shù)名,語句序列,ENDFUNC,注:,自定義函數(shù)與過程很相似,可以是一個獨立的命令文件,也可以在一個過程文件中。與過程不同的是自定義函數(shù)必須返回一個值。,特點,:,在自定義函數(shù)程序中首條命令一般為,:,PARAMETERS<,變量表達式,>,在自定義函數(shù)程序中尾條命令必須為:,RETURN<,表達式,>,4.6.4,自定義函數(shù),57,三、自定義函數(shù)的參數(shù)傳遞,自定義函數(shù)中的參數(shù)傳遞既可以用傳值方式,也可以用傳址方式,具體規(guī)則如下:,(,1,)如果變量在,參數(shù)表達式列表,中是以表達式的形式出現(xiàn),那么是傳值方式;,(,1,)如果變量在,參數(shù)表達式列表,中是以單個變量的形式出現(xiàn),那么取決于,SET UDFPARAMS TO VALUE/CONFERENCE,的設置(缺省為傳值方式);,(,3,)無論,SET UDFPARAMS TO,設置如何,通過在參數(shù)變量前冠以,,以強制傳址。如:,S,(,A,),二、自定義函數(shù)的調(diào)用,自定義函數(shù)的調(diào)用形式為:,自定義函數(shù)名(,<,參數(shù)表達式列表,>,),58,*,P20.PRG*,SET TALK OFF,CLEAR,INPUT,“,請輸入半徑”,TO BJ,INPUT ",請輸入圓的半徑,:" TO r,?",圓的面積,S=",ymj,(r) &&,調(diào)用自定義函數(shù),SET TALK ON,RETURN,FUNCTION,ymj,(k),m=PI()*k2 && PI(),是內(nèi)部函數(shù),它返回,值,RETURN m,ENDFUNC,例,4.23,:計算圓面積(將例,4.20,的子程序調(diào)用改自定義函數(shù)的調(diào)用)。,59,1,、,字段變量給數(shù)組賦值,語句,SCATOTER,格式,:,SCATTER FIELDS <,字段名列表,>/FIELDS LIKE <,通配符,> /FIELDS EXCEPT <,通配符,> MEMO TO <,數(shù)組,名,>/TO <,數(shù)組名,> BLANK/MEMVAR /MEMVAR BLANK /NAME <,對象名,>,選項說明:,功能:將當前表中的當前記錄的全部或選中字段傳送到指定數(shù)組或系統(tǒng)指定的數(shù)組(,MEMVER,),或指定對象中。傳送時備注字段和通用字段被忽略不傳送,數(shù)組中數(shù)據(jù)的存放順序以可傳送字段的值依次排列。,BLANK,:,表示只傳送相應類型和大小的空值。,MEMO,:,表示傳送時備注字段同時被傳送。,4.6.5,數(shù)組與數(shù)據(jù)表之間的數(shù)據(jù)交換,60,2,、數(shù)組對字段變量的對應替換,GATHER,格式:,GATHER FROM<,數(shù)組名,>/MEMVAR/NAME<,對象名,>FIELDS <,字段名列表,>/FIELDS LIKE <,通配符,>/FIELDS,EXCEPT <,通配符,>MEMO,功能:將一維數(shù)組中的各元素數(shù)據(jù)傳遞給當前記錄。,數(shù)組中的第一個元素的內(nèi)容傳遞給第一個字段,第二個元素傳遞給第二個字段,,如果數(shù)組中元素中的個數(shù)比字段個數(shù)多,則多余的部分忽略。注意字段類型要與對應的數(shù)組元素的數(shù)據(jù)類型匹配。,61,例,4.26,:在學生表,XS.DBF,中添加一條新記錄,其各字段的數(shù)據(jù)依次為:,980120/,張海洋男,80.05.12/,獎學金,然后,再將此記錄與,“,林曉為,”,調(diào)換一下位置。,*,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,姓名,=,“,林曉為,”,&&,指針指向姓名為,",林曉為,",的記錄,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/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ù)之間;而最小公倍數(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,ENDIF,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ù)為水仙花數(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ù)超過三次則顯示“你無權使用本系統(tǒng),!,”,的提示。,解題思路:這是一道口令驗證題,即字符串比較問題。解題的關鍵有兩點:一是通過任意一種形式接收用戶輸入的口令;二是比較用戶口令與系統(tǒng)口令是否一致,進而決定下一步的操作。,SET TALK OFF,CLEAR,I=1,DO WHILE I<=3,?",請輸入口令,:",SET CONSOLE OFF,ACCEPT TO MPW,SET CONSOLE ON,IF MPW="123456",?",歡迎進入本系統(tǒng),!",EXIT,ELSE,IF I>=3,?",你無權使用本系統(tǒng),!",ELSE,?",口令不正確,請重輸,!",ENDIF,ENDIF,I=I+1,ENDDO,SET TALK ON,66,4.31,:,編程從鍵盤上輸入一個“字符串”,將它們逆序輸出。例如輸入字符串“,ABCD,”,,,則輸出“,DCBA,”,)。,解題思路:本題可以用字符串拆取和合并的方法來解決。首先利用,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,;每一行的第一個數(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 WHILE 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),ENDFOR,ENDIF,ENDFOR,SET TALK ON,4.34,:,編程輸出下列圖形:,A,BBB,CCCCC,DDDDDDD,CCCCC,BBB,A,算法思路:這是一道圖案輸出顯示的問題,可以通過二重循環(huán)嵌套控制來完成的。輸出顯示的行數(shù)與圖案的半高,N,有關,因此對于給出的圖案,我們可以將它分解為兩個三角形,上面一個三角形每行中的列是逐行遞增的,而下面一個三角形每行中的列是逐行遞減的,所以內(nèi)循環(huán)分為兩個分別處理的兩個三角形。,4.7,應用程序舉例,70,4.35,:,編程實現(xiàn)向表學生表,XS.DBF,中添加記錄,其中學號,姓名,性別和出生年月四個字段內(nèi)容從鍵盤輸入,可以添加多個記錄,當確實不需要添加時退出循環(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,第四章結束,

注意事項

本文(第4章 Visual FoxPro程序設計基礎)為本站會員(無***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

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

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


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