




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章
程序設計基礎教學目的與要求掌握創建、修改和運行程序的方法掌握分支語句IF…ENDIF和DOCASE…ENDCASE的用法掌握循環語句FOR…ENDFOR、DOWHILE…ENDDO
和SCAN…ENDSCAN的用法掌握EXIT和LOOP在循環結構中的作用了解參數傳遞的兩種方式掌握過程和用戶自定義函數的創建和使用了解變量的作用域5.1
創建程序文件1.打開程序的編輯窗口2.程序文件的編輯與保存一行寫一條語句,每條語句都以回車鍵結尾若語句較長,可分成多行,續行符為分號
VFP程序文件是由一系列命令或語句按照一定的順序和規則組織起來的文本文件,其文件的擴展名為.PRG。3.程序文件的運行
DOProgramName
程序文件一旦運行,系統會自動地對程序文件進行編譯,包括對程序的詞法和語法檢查,生成擴展名為.FXP的偽編譯程序。運行程序時,系統實質是運行.FXP文件。創建程序文件的三個步驟:5.2順序結構程序設計
1.鍵入字符串命令ACCEPT5.2.1簡單的輸入和輸出命令格式:ACCEPT[cMessageText]TO[VarName]功能:暫停程序的運行,等待用戶鍵入一個或多個字符,并將鍵入的內容作為字符串賦給內存變量VarName。說明:(1)cMessageText是指定顯示在屏幕上的,用于提示用戶的信息。(2)如果只按回車鍵,則賦給內存變量的值將是一個空字符串。例如:編寫可以打開任一數據表文件的通用命令
ACCEPT“請輸入要打開的表文件名:”TObmUSE&bm2.輸入單字符命令WAIT格式:
WAIT[cMessageText][TOVarName][WINDOW[ATnRow,nCol]]功能:暫停程序的運行,等待用戶鍵入單個字符后再恢復程序運行。系統將輸入的字符存入指定的內存變量VarName中,如果省略TOVarName,輸入的字符不保存。例如:在屏幕第10行第12列的位置開設一個小窗口,顯示提示信息“請輸入一個鍵:”,等待用戶從鍵盤輸入一個字符。WAIT“請輸入一個鍵:”TOxWINDOWAT10,12說明:WAIT命令經常作為輸出語句使用,如:
x=”你好嗎?”
WAITWINDOWx5.2順序結構程序設計
3.輸入表達式命令INPUT格式:INPUT[cMessageText]TO[VarName]功能:暫停程序運行,等待用戶鍵入表達式,并將表達式的值存入內存變量VarName中。說明:表達式的類型可以是字符型、數值型、日期型、日期時間型和邏輯型。示例:在命令窗口逐條執行下述命令。
INPUT“請輸入姓名:”TOxmINPUT“請輸入你的出生日期:”TOcsrq?xm+”的年齡:”,YEAR(DATE())-YEAR(csrq),”歲”5.2順序結構程序設計
三條輸入命令的區別:ACCEPT命令只能接受字符型的數據,不需要定界符,輸入完畢按回車鍵結束。WAIT命令只能輸入單個字符,且不需要定界符,輸入完畢無需按回車鍵。INPUT命令可接受數值型、字符型、邏輯型、日期型和日期時間型數據;數據形式可以是常量、變量、函數和表達式,如果是字符型、邏輯型、日期型和日期時間型常量,需要定界符;輸入完畢按回車鍵結束。5.2順序結構程序設計
4.定位輸出命令格式:@nRow,nColumnSAYeExp功能:在指定的行、列坐標位置輸出表達式的值。
說明:表達式可以是各種類型的表達式。
示例:在屏幕第5行第6列輸出當前日期。
@5,6SAYDATE()5.2順序結構程序設計
5.2.2其他命令功能:是否顯示VisualFoxPro命令執行的狀態。系統默認顯示。1.系統狀態設置命令SETTALKON|OFF說明:當人機會話方式開啟時,很多命令執行后,系統會在狀態欄自動顯示執行后的結果狀態,因此影響了程序的運行速度,所以往往程序的最開頭有一條SETTALKOFF命令,關閉人機對話,非輸出命令不再顯示相應輸出,在程序結束前,應再放置一條SETTALKON命令,恢復人機會話。示例:在SETTALKON狀態下,執行LOCATEFOR命令時,如果找到符合條件的記錄系統會在狀態欄自動顯示被找到的記錄號,否則會顯示“已到文件尾”。
5.2順序結構程序設計
3.返回命令RETURN格式:RETURN[eExp][TOMASTER|TOFILEName]功能:終止命令的執行,返回到上一層程序。說明:表達式eExp用在當過程或用戶自定義函數需要有返回值時。
TOMASTER選項,直接返回到最外層主程序;
TOFILEName強制返回到指定的程序文件。2.終止程序執行命令CANCEL格式:CANCEL功能:終止程序的執行,釋放程序在內存中的變量,返回命令窗口狀態。4.注釋命令NOTE功能:起到解釋說明程序的作用,在程序的運行過程中并不被執行。示例:NOTE本程序用于計算圓的面積
INPUT“r=”TOr&&r:半徑
?3.14*r*r5.2順序結構程序設計
5.2.3順序結構
順序結構是在程序執行時,按照程序中語句排列的先后順序依次執行,它是程序中最簡單的一種基本結構。一個程序總體上是一個順序結構,其中的某些部分可能是各種結構的組合和嵌套。例1:在圖書(ts)表中根據書名(sm)查找該圖書的相關信息。
CLEARACCEPT“請輸入書名:”TOxUSEtsLOCATEFORsm=xDISPLAYUSE
例2:根據一個人的生日,計算其年齡。
INPUT“請輸入你的生日:”TOrqnl=YEAR(DATE())-YEAR(rq)?”你今年”+ALLT(STR(nl))+”歲”5.2順序結構程序設計
5.3選擇結構程序設計在VFP中實現選擇結構的語句有:IF…ENDIF和DOCASE…ENDCASE功能:判斷所給定的條件,選擇執行給出的兩種操作之一。格式:
IFlExpCommands1[ELSE
Commands2]ENDIF1.IF…ENDIF語句注意:(1)若只有一個分支,ELSE子句可省。(2)Commands1或Commands2中還可以包含IF語句(3)IF和ENDIF子句必須成對出現。(4)為了方便閱讀,最好采用縮格(鋸齒形)的書寫方式。例4:將2個數按由小到大的順序輸出
例3:判斷一個數的奇偶性CLEARINPUT“x=”TOxINPUT“y=”TOyIFx>yt=xx=yy=tENDIF?x,yINPUT“輸入一個數:”TOxIFx%2=0?STR(x)+”是偶數”
ELSE?STR(x)+”是奇數”
ENDIF5.3選擇結構程序設計
例5:計算下面分段函數的值X2+4X-1(X≤0)3X2-2X+1(0<X≤10)X2+1(X>10)Y=CLEARINPUT“x=”TOxIFx>0IFx>10y=x*x+1ELSEy=3*x*x-2*x+1ENDIFELSEy=x*x+4*x-1ENDIF?”分段函數值為:”,y5.3選擇結構程序設計
DOCASECASElExp1Commands1[CASElExp2Commands2…CASElExpNCommandsN][OTHERWISE
Commands]ENDCASE2.DOCASE…ENDCASE語句格式:功能:多分支選擇5.3選擇結構程序設計
說明:(1)DOCASE與第一個CASE
之間不能有任何語句。(2)當語句中任意一個命令序列執行完后,都將跳過下一個
CASE與ENDCASE之間的所有語句。(3)若有多個條件同時滿足,則僅執行第一個滿足條件的命令序列。(4)DOCASE與ENDCASE語句必須成對出現。例6:計算分段函數X2+4X-1(X≤0)3X2-2X+1(0<X≤10)X2+1(X>10)Y=INPUT“x=”TOxDOCASECASEx<=0y=x*x+4*x-1CASEx>0ANDx<=10y=3*x*x-2*x+1CASEx>10y=x*x+1ENDCASE?”分段函數值為:”+STR(y,10,2)5.3選擇結構程序設計
5.4循環結構程序設計實現循環結構的語句有:
DOWHILE…ENDDO、FOR…ENDFOR和SCAN…ENDSCAN1.DOWHILE…ENDDO語句格式:
DOWHILElExpCommandsENDDO
功能:當滿足某些條件時,重復執行某一操作注意:(1)在循環體內要設置修改循環條件的語句,避免死循環。若出現死循環現象,可按<ESC>鍵中止程序的執行。(2)DOWHILE和ENDDO子句必須成對出現。i=2s=0DOWHILEi<=100s=s+ii=i+2ENDDO?”100以內偶數的和為:”,s例7:求1到100之間偶數的和SETTALKOFFn=0USEtsDOWHILENOTEOF()IFdj>100n=n+1ENDIFSKIPENDDOUSE?”百元以上圖書的數量為:”,nSETTALKON例8:統計圖書(ts)表中單
價100元以上圖書的數量。5.4循環結構程序設計
思考:1、編程實現求10!2、求1!+2!+3!+4!+5!例9:將一個字符串中的各個單詞的首字母組成其縮寫形式(大寫字母)。如:unidentifiedflyingobject,其縮寫形式為“UFO”。str1="unidentifiedflyingobject"&&賦初值str2=SPACE(0)&&縮寫形式的字符串s=str1str1=ALLT(str1)DOWHILELEN(str1)>0str2=str2+UPPER(LEFT(str1,1))n=AT(SPACE(1),str1)str1=ALLT(SUBSTR(str1,n))ENDDO?s+"的縮寫形式為:"+str25.4循環結構程序設計
2.FOR…ENDFOR語句格式:
FORnVar=nInitialValueTO
nFinalValue[STEPnIncrement]
CommandsENDFOR|NEXT功能:實現已知循環次數下的重復。執行過程:(1)給循環變量nVar賦初值nInitialValue。(2)判斷循環變量的值是否超過終值nFinalValue,若沒超過終值,執行循
環體(命令序列Commands),否則結
束循環。(3)計算循環變量的值,nVar=nVar+nIncrement(步長)。(4)轉到第2步驟繼續執行。5.4循環結構程序設計
注意:(1)該語句在循環變量的控制下,反復執行循環體。僅當循環變量值超過終值(步長為正)或循環變量值小于終值(步長為負)時,才跳出循環,執行ENDFOR后面的語句。(2)可以在循環體內改變循環變量的值,但會改變循環執行的次數。(3)步長缺省時,默認值是1。(4)FOR和ENDFOR,或者FOR和NEXT子句必須成對。5.4循環結構程序設計
ACCEPT“輸入一個字符串:”TOstr1str2=str1n=LEN(str1)j=0&&漢字的個數FORi=1TOnm=ASC(LEFT(str2,1))IFm>127j=j+1str2=SUBSTR(str2,3)ELSEstr2=SUBSTR(str2,2)ENDIFNEXT?“漢字的個數為:"+ALLT(STR(j))例10:統計一個字符串中漢字的個數例11:編程打印圖案,圖案共有5層。CLEARc="*"n=5FORi=1TOn??SPACE(n-i)FORj=1TO2*i-1??cENDFOR?ENDFOR5.4循環結構程序設計
3.SCAN…ENDSCAN功能:用于表記錄的循環處理。格式:SCAN[Scope][FORlExp|WHILElExp]
CommandsENDSCAN說明:(1)Scope表示記錄的范圍,缺省值為ALL。(2)語句執行時在范圍中依次尋找滿足FOR條件或WHILE條件的記錄,并對滿足條件的記錄執行命令系列Commands,每次遇到ENDSCAN
記錄指針自動加1。(3)FOR子句是對指定范圍內所有滿足條件的記錄進行操作,WHILE
子句是從當前記錄開始在指定范圍內循環,一旦遇到不滿足條件的記錄就結束循環,即使后面還有滿足條件的記錄。5.4循環結構程序設計
USEtsmax_dj=djmax_no=1SCANIFdj>max_djmax_dj=djmax_no=RECNO()ENDIFENDSCANGOmax_no?”書號為”+ALLT(sh)+”,書名為”+ALLT(sm)+”,其單價:”,djUSE例12:在圖書(ts)表中查找單價最高的圖書的書號、書名和
單價。5.4循環結構程序設計
4.EXIT和LOOP語句在循環體Commands中,可有兩個特殊的語句:EXIT和LOOP。
EXIT:循環出口語句,遇到EXIT循環結束。
LOOP
:短路語句,遇到LOOP回到循環的開始。例13:查詢出版圖書“漫話手繪”的出版社出版的其他圖書。SETTALKOFFUSEtsLOCATEFORsm=”漫話手繪”IFFOUND()x=cbsbhELSE??”沒有查到相關記錄”
RETURNENDIFSCANFORcbsbh=xIFsm=”漫話手繪”
LOOPENDIF?sh,ALLT(sm),cbsbhENDSCANUSESETTALKON5.4循環結構程序設計
例14:查詢500元最多能買幾本cbsbh
為“B004”出版社出版的圖書。輸出這些圖書的書號、書名和單價,以及還會剩下多少錢。SETTALKOFFUSEtsINDEXONdjTAGxxFORCBSBH="B004"SETORDERTOxxs=0SCANs=s+djIFs>500EXITENDIF?sh,ALLT(sm),djENDSCAN?"還剩"+STR(500-s+dj,5,1)+"元“USESETTALKON5.4循環結構程序設計
5.5過程和用戶自定義函數
用戶可以將經常執行的具有某種功能的一段代碼獨立出來,將其定義為過程(Procedure)或用戶自定義函數(UserDefineFunction)。在需要使用該功能的時候,調用這個過程或用戶自定義函數。過程和用戶自定義函數在VFP中區別不大。它們都用于實現某一處理功能,二者調用方法也相同,但在定義方式上略有差別。
1.過程或用戶自定義函數的定義過程定義的語法格式:[PROCEDUREProcedureName][PARAMETERSParameterList]
Commands[RETURN[eExp]][ENDPROC]用戶自定義函數定義的語法格式:[FUNCTIONFunctionName][PARAMETERSParameterList]
Commands[RETURN[eExp]][ENDFUNC](1)PARAMETERS語句作用是為過程或自定義函數進行參數定義
(2)RETURN語句的作用是返回調用程序,并且指定過程或用戶自定義函數的返回值,eExp缺省時返回值為.T.。說明:PARAMETERS語句可省,如果過程(或用戶自定義函數)中有PARAMETERS語句,該語句必須是在PROCEDURE或FUNCTION語句后面的第一條語句。PARAMETERS命令中的參數,最多不能超過27個,各參數之間用逗號分隔,并且被VFP默認為私有變量FUNCTIONtareaPARAMETERSx,y,hs=(x+y)*h/2RETURNsENDFUNC例15:定義用戶自定義函數tarea,函數的功能是求梯形的面積。5.5過程和用戶自定義函數
(1)存儲在數據庫的存儲過程中。(2)以一個程序文件保存。這時FUNCTION和PROCEDURE語句可省,程序文件名可以作為過程名或函數名。(3)放在調用程序之后。這時調用程序和過程(或用戶自定義函數)的定義保存在同一個程序文件中。(4)存放在過程文件中。過程或用戶自定義函數的存儲方式:過程文件是一個保存多個過程或用戶自定義函數的程序文件。過程文件不能用DO命令直接運行。使用過程文件時必須先在程序中打開過程文件,然后才可以調用其中的過程或用戶自定義函數。打開過程文件的命令:SETPROCEDURETO[FileName]5.5過程和用戶自定義函數
2.過程與用戶自定義函數的調用格式1:DOProcedure[INFileName][WITHParameterList]IN子句用于指定過程或用戶自定義函數所在的過程文件WITH子句用于指定傳遞給過程或用戶自定義函數的參數如:DOtareaWITH2,3,4
格式2:與系統函數的調用方式相同,這種調用方式有返回值。如:tarea(2,3,4)5.5過程和用戶自定義函數
說明:(1)形參和實參的數目一般應一致,發生調用時對應位置的實參與形參一一傳遞。(2)也可以形參的數目多于實參,在這種情況下,剩余的形式參數就被初始化為.F.。(3)如果實參數目多于形參,運行程序時系統會提示出錯。3.實參與形參將在PARAMETERS語句ParameterList中的參數稱為“形式參數”在調用語句中的參數稱為“實際參數”5.5過程和用戶自定義函數
n=1t=1/ns=0DOWHILEt>0.0001s=s+tn=n+2t=1/jc(n)&&n為實參ENDDO?”數列的和是:”,s例16:計算數列1/1!、1/3!、1/5!、…、1/n!的和,當某項的值小于0.0001時停止計算。FUNCTIONjcPARAm&&m為形參
p=1FORi=1TOmp=p*iENDFORRETURNpENDFUNC5.5過程和用戶自定義函數
(1)默認情況下,采用格式1方式調用時,數據傳遞是傳址方式(引用),而采用格式2方式調用時,是傳值方式。(2)如果實參是一個常數或一個表達式時,不管采用什么方式調用,傳遞方式只能是傳值。參數傳遞:傳值,即實參變量對形參變量的數據傳遞是“值傳遞”,即單向傳遞,只由實參將其內容傳給形參,而不能由形參將其內容傳回給實參。傳址,即實參變量對形參變量的數據傳遞是“地址傳遞”,即雙向傳遞,將實參在內存中的地址傳遞給形參,形參的內容一經改變,實參的內容也跟著改變。說明:5.5過程和用戶自定義函數
例17:計算數列1/1!、1/3!、1/5!、…、1/n!的和,當某項的值小于0.0001時停止計算。采用DO命令調用用戶自定義函數jc
n=1t=1/ns=0DOWHILEt>0.0001s=s+tn=n+2p=1DOjcWITHn,pt=1/pENDDO?”數列的和是:”,sprocedurejcPARAm,ssFORi=1TOmss=ss*iENDFOREndproc5.5過程和用戶自定義函數
若要按值方式傳遞參數,在調用UDF之前,執行命令:
SETUDFPARMSTOVALUE
若要按引用方式傳遞參數,在調用UDF之前,執行命令:
SETUDFPARMSTOREFERENCESETUDFPARMSTO命令功能:用來改變參數傳遞的方式。注意:(1)使用DO命令調用,用WITH子句傳遞參數時,不受
SETUDFPARMS命令的影響。(2)也可以不管SETUDFPARMS的設置,強制設定以值傳遞方式或引用傳遞方式傳遞參數:如果用括號括起一個變量,設定按值傳遞;在一個變量前加@符號,則設定引用傳遞方式。5.5過程和用戶自定義函數
例18:分析以下2段程序的運行結果。程序段1:SETUDFPARMSTOVALUESTORE1TOx?”函數返回值:”+STR(j1(x))?”變量x的值:”+STR(x)FUNCTIONj1PARAMETERSaa=a+1RETURNaENDFUNC程序段2:SETUDFPARMSTOVALUESTORE1TOx?”函數返回值:”+STR(j1(@x))?”變量x的值:”+STR(x)FUNCTIONj1PARAMETERSaa=a+1RETURNaENDFUNC5.5過程和用戶自定義函數
4.變量的作用域內存變量可分為:全局變量,私有變量和本地變量三類。
全局變量在任何模塊中都可使用的變量。建立全局變量的語法格式:
PUBLICVarList
功能:將內存變量設置為全局變量,并為這些變量賦初值.F.。說明:(1)若下層模塊中建立的內存變量要供上層模塊使用,或某模塊中建立的內存變量要供并列模塊使用,必須將這種變量說明成全局變量。(2)VisualFoxPro中,默認命令窗口中定義的變量都是全局變量。(3)程序終止執行時全局變量不會自動清除,而只能用RELEASE或
CLEARALL命令來清除。5.5過程和用戶自定義函數
私有變量僅在定義它的模塊及其下層模塊中有效,而在定義它的模塊運行結束時自動清除。聲明私有變量的語法格式:
PRIVATEVarList功能:聲明私有變量并隱藏上級模塊的同名變量,直到聲明它的程序、過程或自定義函數執行結束后,才恢復使用先前隱藏的變量。說明:(1)VFP默認程序中定義的變量是私有變量。(2)PRIVATE并不自動對變量賦值,僅是聲明而已。(3)在程序模塊調用時,參數接受命令PARAMETERS聲明的參變量也是私有變量。5.5過程和用戶自定義函數
本地變量本地變量只能在建立它的模塊中使用,而且不能在高層或低層模塊使用,該模塊運行結束時本地變量就自動釋放。建立本地變量的語法格式:
LOCALVarList
功能:將內存變量表VarList中指定的變量設置為本地變量,并為這些變量賦初值.F.。5.5過程和用戶自定義函數
PROCEDUREP1PRIVATEM1localm3
M1=20M2=M1*M2m3=50DOp2?“M1(inp1)=",M1RETURNENDPROC運行結果:m4=21M1(inp1)=20M1=10M2=200STORE10TOM1,M2DOP1?"M1=",M1,?"M2=",M2*?"m3=",m3procedurep2m4=M1+1?"m4=",m4*?"m3=",m3endproc調用例5.5過程和用戶自定義函數
x=”12”y=”34”DOsub?”x,y,z=”,x,y,z***sub.prg***PRIVATExPUBLICzx=1y=2z=3?”x,y,z=”,x,y,zRETURN例19:分析以下程序的運行結果。5.5過程和用戶自定義函數
本章要點總結掌握創建、修改和運行程序的方法掌握分支語句IF…ENDIF和DOCASE…ENDCASE的用法掌握循環語句FOR…ENDFOR、DOWHILE…ENDDO
和SCAN…ENDSCAN的用法掌握EXIT和LOOP在循環結構中的使用參數傳遞:傳值和傳址掌握過程和用戶自定義函數的創建和使用變量的作用域:全局變量、私有變量
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國智能戶外電視行業發展趨勢分析與未來投資戰略咨詢研究報告
- 2025至2030中國時尚太陽眼鏡行業商業模式及發展前景與投資報告
- 2025至2030中國方翅片管行業發展趨勢分析與未來投資戰略咨詢研究報告
- 2025至2030中國數碼攝像機行業產業運行態勢及投資規劃深度研究報告
- 2025至2030中國擠塑聚苯板行業發展趨勢分析與未來投資戰略咨詢研究報告
- 2025至2030中國批量控制系統行業發展趨勢分析與未來投資戰略咨詢研究報告
- 2025至2030中國微波爐袋行業發展趨勢分析與未來投資戰略咨詢研究報告
- 2025至2030中國徒步旅行干糧行業發展趨勢分析與未來投資戰略咨詢研究報告
- 2025至2030中國彈簧床墊行業發展趨勢分析與未來投資戰略咨詢研究報告
- 動物保護演講詞演講稿6篇
- 放射治療擺位技術
- 2025年上半年云南普洱市事業單位招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年“安全生產月”總結(4篇)
- 貴州美食課件
- 人教版三年級下冊口算題大全1000道帶答案
- 醫療類結構化面試試題
- 2021-2022學年浙江省杭州市臨平區小學二年級下冊語文期末試題及答案
- 江蘇省蘇州市2022-2023學年高一下學期期末迎考數學試卷(原卷)
- DB21T 2539-2015 體育館用木地板鋪裝技術規程
- 幼兒園繪本故事《三只小豬蓋房子》教學課件全文
- 房子個人抵押合同范本
評論
0/150
提交評論