計算機程序基礎講義_第1頁
計算機程序基礎講義_第2頁
計算機程序基礎講義_第3頁
計算機程序基礎講義_第4頁
計算機程序基礎講義_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、VFP程序設計§1 數據與數據運算 &§2 結構化程序設計 &§3 程序結構 &§4 子程序、過程與自定義函數 &§ 1 數據與數據運算一、數據類型數據是反映現實世界中客觀事物屬性的記錄,它包括兩個方面:數據內容與數據形式。數據內容就是數據的值,數據形式就是數據的存儲形式和操作使用方式,也稱為數據類型。VFP6系統為使用戶建立和操作數據庫更加方便,將系統中所有操作、處理的數據,分為幾種不同數據類型:字符型、數值型、日期型、日期時間型、邏輯型、備注型、通用型、貨幣型、二進制字符型和二進制備注型。二、常量與變量在VF

2、P系統中,數據可用常量、變量、數組表示,數據還可以用字段、記錄和對象中,由它們存儲、容納各種類型的數據。(一)常量常量是在命令或程序中可直接引用、具有具體值的命名數據項,其特征是在整個操作過程中它的值和表現形式保持不變。VFP按常量取值的數據類型,將常量分為6種類型:數值型常量、浮點型常量、字符型常量、邏輯型常量、日期型常量、日期時間型常量。1、數值型常量由數字、小數點和正負號組成,表示整數或實數值。如:100,-21,15.31,-21092.5041等分別是數值型常量中的整數和實數。2、字符型常量由任意ASCII字符、漢字、空格或數字等組成的字符型數據,字符型常量又稱為字符串。為與其他類型

3、常量、變量和標識符相區別,VFP要求將字符串中所有字符,用一對雙引號“"”或單引號“'”或方括號“ ”作為定界符對括起來。如“I am a student.”,中華人民共和國,Visual FoxPro數據庫系統都是字符串。3、日期型常量日期型常量是表示日期值的數據,其默認格式是mm/dd/yyyy。如10/01/04和10/01/2004均表示2004年10月1日這一日期常量值。4、邏輯型常量邏輯型常量就是表示邏輯判斷結果“真”或“假”的邏輯值。邏輯常量只有真和假兩種值,分別用(.T.或.y.)和(.F.或.n.)表示真和假。VFP中在表示邏輯常量的字母左右加注圓點符“.”

4、以示區別。(二)變量變量是在操作過程中可以改變其取值或數據類型的數據項。確定一個變量,需要確定其三個要素:變量名、數據類型和變量值。1、內存變量內存變量是一種存在于計算機內存中變量,是一種單個數據元素的臨時性變量,需要時臨時定義,不用時可隨時釋放。內存變量分為用戶自定義內存變量和系統內存變量。(1)內存變量的建立建立內存變量就是給內存變量賦值。內存變量賦值既可定義一個新的內存變量,也可改變已朋內存變量的值或數據類型。【格式】內存變量=表達式【功能】計算<表達式>的值并賦值給指定內存變量。【例】A=3+2y=2*x+5(2)內存變量的顯示輸出可以用兩個命令在屏幕上顯示輸出內存變量的值

5、。【格式1】?表達式表 AT 列號【格式2】?表達式表 AT 列號【功能】計算表達式表中各表達式的值,并在屏幕上指定位置顯示輸出各式的值。格式1:不管有無指定表達式表,都會輸出一個回車換行符。如果指定了表達式表,各表達式值將在下一行的起始處輸出;格式2:不會輸出一個回車換行符,各表達式值在屏幕上當前行光標所在位置直接輸出;表達式表:多個逗號兩兩分隔的表達式,各表達式的值輸出時,以空格分隔;AT 列號:該子句指定表達式值從指定列開始顯示輸出。AT的定位只對它前面的一個表達式有效,多個表達式必須用多個AT子句分別定位輸出,而且可反序定位。【例】?A,B,C AT 20?A2、數組數組是一種結構化的

6、變量,是一組具有相同名稱、以下標相互區分的有序內存變量。一個數組通常都包含多個數據元素。Visual FoxPro系統中只允許使用一維數組(相當于數列)和二維數組(相當于行列式或矩陣)。(1)數組元素數組中各有序變量(數據元素)組成數組的成員,稱為數組元素。數組元素實質上是一個內存變量,也稱數組變量,它們具有相同變量名即數組名,彼此以下標區分;數組元素的名稱(變量名)用數組加下標構成。如A(1)、B(2,3)分別表示一維數組A的第1個數組元素,二維數組B中第2行第3列的數組元素;下標必須用圓括號對括;一維數組的元素只有一個下標,二維數組的元素有兩個以逗號分隔的下標(也可用一個下標表示);數組元

7、素的下標均從1開始,各元素的初始值為 .F. ;數組元素的數據類型決定于最后賦值的數據類型;不同元素的數據類型可以不同;數組元素與普通內存變量一樣操作,可以賦值和引用。(2)數組的定義數組必須先定義后使用,定義數組是向系統申請數組元素在內存中存儲空間。【格式】DIMENSION 數組名1(N1, N2)DECLARE 數組名1(N1 , N2) ,數組名2(N3 ,N4)【功能】定義一維或二維數組。(3)數組的元素的排列一維數組是按下標從小到大的順序排列的,二維數組的排列是先按下標1,再按下標2的從小到大的順序排列。如:A(5)排列如下表所示:A(1)A(2)A(3)A(4)A(5)B(3,4

8、)排列如下表所示:B(1,1)B(1,2)B(1,3)B(1,4)B(2,1)B(2,2)B(2,3)B(2,4)B(3,1)B(3,2)B(3,3)B(3,4)其中:B(7)相當于B(2,3)(4)數組的賦值與引用數組元素的賦值與引用,與普通內存變量的規則相同。【例】DIME A(5) , B(3,4)STORE “OK” TO AB(1,1)=10B(1,2)=20?A(3),B(1,2),B(2,3)三、常用函數Visual FoxPro系統中,函數是一段程序代碼,用來進行一些特定的運算或操作,支持和完善命令的功能,幫助用戶完成各種操作與管理。函數的一般形式為: 函數名(參數1 , 參數

9、2)Visual FoxPro的函數由函數名與參數(即自變量)兩部分組成。參數必須用圓括號對括起來,如有多個參數,各參數以逗號分隔;有些函數可省略參數,或不需參數,但也必須保留括號; (一)字符函數字符函數是處理字符型數據的函數,其自變量或函數值中至少有一個是字符型數據。函數中涉及的字符型數據項,均以C表示。1、字符串長度函數【格式】LEN(C)【功能】返回字符串C的字符數(長度)。函數值為N型。2、取子字符串函數【格式】SUBSTR(C, N1, N2)【功能】返回從字符串C中第N1個字符開始,截取N2個字符的子串。LEFT(C, N) 從字符串C左邊取N個字符RIGHT(C, N) 從字符

10、串C右邊取N個字符3、子串位置函數【格式】AT(C1, C2)【功能】返回字符串C1在字符串C2中的起始位置。函數值為整數。如果串C2不包含串C1,函數返回值為零。4、刪除字符串空格函數【格式】RTRIM | TRIM(C)【功能】刪除字符串C尾部空格字符。LTRIM(C) 刪除字符串C的前導空格字符。ALLTRIM(C) 刪除字符串C的前導和尾部空格字符。5、空格函數【格式】SPACE(N)【功能】返回一個包含N個空格的字符串。6、大小寫字母轉換函數【格式】LOWER(C) | UPPER(c)【功能】LOWER( )將字符串C中字母全部變成小寫字母,UPPER( )將字符串C中字母全部變成

11、大寫字母,其它字符不變。(二)數值函數數值函數用于數值運算,其自變量與函數都是數值型數據。1、取絕對值函數【格式】ABS(N)【功能】計算N(數值表達式)的值,并返回該值的絕對值。2、取整函數【格式】INT(N)【功能】計算數值表達式N的值,返回該值的整數部分。3、四舍五入函數【格式】ROUND(N1, N2)【功能】返回N1四舍五入的值,N2表示保留的小數位數。4、最大值和最小值函數【格式】MAX | MIN(N1, N2 , N3.)【功能】返回數值表達式中的最大值MAX( )和最小值MIN( )。5、求余數函數(求模函數)【格式】MOD(N1, N2)【功能】返回N1除以N2的余數。余數

12、的小數位數與N1相同,符號與N2相同。6、平方根函數【格式】SQRT(N)【功能】求非負N的平方根。7、符號函數【格式】SIGN(N)【功能】返回N的符號。正數、零、負數分別返回1、0、-1。(三)轉換函數在數據庫應用的過程中,經常要將不同數據類型的數據進行相應轉換,滿足實際應用的需要。Visual FoxPro系統提供了若干個轉換函數,較好地解決了數據類型轉換的問題。1、數值轉換為字符串【格式】STR(N ,長度,小數位數)【功能】將N的數值轉換成字符串形式。函數值為C型。2、字符串轉換為數值【格式】VAL (C)【功能】將C串中數字轉換成對應數值,轉換結果取兩位小數。函數值為N型。3、字符

13、轉換為ASCII碼值【格式】ASC(C)【功能】返回C串首字符的ASCII碼值。函數值為N型。4、ASCII碼轉換為相應字符【格式】CHR(N)【功能】返回以N值為ASCII碼的ASCII字符。函數值為C型。四、運算符與表達式在Visual FoxPro系統中,表達式是由常量、變量、函數及其他數據容器單獨或與運算符組成的有意義的運算式子。運算符是對數據對象進行加工處理的符號,根據其處理數據對象的數據類型,運算符分為算術(數值)運算符、字符運算符、日期時間運算符、邏輯運算符和關系運算符五類,相應的,表達式也分為算術表達式、字符表達式、日期時間表達式、邏輯表達式和關系表達式五類。¨ 在V

14、isual FoxPro系統中,各類運算的優先順序如下:圓括號>算術和日期運算>字符串運算>關系運算>邏輯運算用戶也可以通過給表達式加圓括號的方式,改變其默認運算順序。如果多個同一級別的運算,則按在表達式中出現的先后順序進行運算。(一)算術表達式算術表達式又稱數值表達式,其運算對象和運算結果均為數值型數據。數值運算符的功能及運算優先順序,如表所示。表中運算符按運算優先級別從高到低順序排列。算術運算符運算符功能表達式舉例運算結果優先級別( )圓括號(2-5)*(3+2)-15最高最低-取相反數-(3-8)5*、乘冪2*5、3232、9*、/乘、除2*10、25/520、5

15、%取余數20%32+、-加、減36+19、29-4755、-18(二)字符表達式字符表達式是由字符運算符將字符型數據對象連接起來進行運算的式子。字符運算的對象是字符型數據對象,運算結果是字符常量或邏輯常量。下表為字符運算符的功能。字符運算符運算符功能表達式舉例運算結果+串1+串2:兩串順序相連接12 +5612 56-串1-串2:串1尾空格移到串2尾后再順序相連接12 -561256 "+"與"-"都是字符連接運算符,都將兩字符串順序連接,但“+”是直接連接,“-”則將串1尾部所有空格移到串2尾部后再連接。(三)關系表達式由關系運算符連接兩個同類數據對象

16、進行關系比較的運算式稱為關系表達式。關系表達式的值為邏輯值,關系表達式成立則其值為“真”,否則為“假”。關系運算符運算符功能表達式舉例運算結果<小于15<4*6.T.>大于A > 1.T.=等于2+4 = 3*5.F.=串全等比較abc=abcabc.F.<=小于或等于'abc' <= 'AB'.F.>=大于或等于10-10-02>=10/01/02.T.<>、#、!=不等于5 <> -10.T.$包含于。串1$串2:串1是否為串2子串1234$a123451234$34512.T.F.關系

17、運算符的優先級別相同。關系表達式運算時,就是比較同類兩數據對象的“大小”,對于不同類型的數據,其“大小”或者是值的大小,或者是先后順序。日期或日期時間數據以日期或時間的先后順序為序。 (四)邏輯表達式由邏輯運算將邏輯型數據對象連接而成的式子稱為邏輯表達式。邏輯表達式的運算對象與運算結果均為邏輯型數據。邏輯運算符前后一般要加圓點“.”標記,以示區別。邏輯運算符運算符功能優先級別.NOT. (!)邏輯非,取其右邊邏輯值的相反值最高最低.AND.邏輯與,兩邊的邏輯值均為真才得真.OR.邏輯或,兩邊的邏輯值均為假才得假對于各種邏輯運算,其運算規則可由邏輯運算真值表確定,如下表所示就是邏輯運算真值表。&

18、#167; 2 結構化程序設計結構化程序設計的方法:自頂向下,逐步求精。結構化程序由順序結構、選擇結構、循環結構三種基本結構組成。VFP提供面向過程的程序設計和面向對象的程序設計方法。面向過程的程序設計是用結構化編程語言來實現編寫程序。具體就是告訴計算機如何一步一步解決問題,即要求計算機“怎么做”。它不依賴具體的機器。面向對象的程序設計適于解決大型的任務,設計程序時只需告訴計算機“做什么”,而不用說明“怎么做”。它不依賴具體的機器。VFP程序是由一系列命令組成,又稱命令文件或程序文件。運行程序文件就是執行文件中的各條命令。一、引例先看一個完整的VFP過程化程序實例,從中可以引出程序的幾個基本概

19、念。*程序示例:求圓形的面積。CLEAR&&清除主窗口中的信息SET TALK OFF&&關閉命令窗口對話INPUT "請輸入圓的半徑,R=" TO R&&輸入圓的半徑S=PI( )*R2&&計算圓的面積? "圓的面積=",S&&輸出圓的面積SET TALK ON&&打開命令窗口對話RETURN&&返回命令窗口NOTE 程序結束有關此Visual FoxPro程序的幾點說明:注釋語句【格式1】* 注釋內容每一行開頭均可加此注釋【格式2】NOTE

20、 注釋內容同上【格式3】&& 注釋內容行尾注釋【功能】增強程序文件易讀性,編譯時注釋內容不會被執行。NOTE 注釋一行寫不下可加續行符”;”, &&注釋不能用在命令語句行續行符”;”的后面。對話開關語句【格式】SET TALK OFF | ON【功能】關閉或打開命令執行時的對話開關。命令的分行Visual FoxPro程序是命令行的序列,每個命令都以回車鍵結束,一行只能寫一條命令;若一條命令太長,一行寫不下,也可分行書寫,并在分行處加上續行符“;”,再按回車鍵。程序的結束執行程序文件時,將依次執行文件中的命令,直到所有命令執行完畢,或者執行到以下命令:CANCA

21、L:終止程序運行,清除所有的私有變量,返回命令窗口;RETURN:結束程序執行,返回調用它的上級程序,若無上級程序則返回命令窗口;二、程序中常用的簡單語句一個程序如果沒有輸出操作(即將程序結果顯示出來)就沒有什么實用價值,而如果沒有輸入操作(即給變量提供數據),則必然缺乏靈活性。VFP提供多種方法來實現信息的輸入和輸出。(一)輸入語句1、賦值輸入語句在編寫程序時,給變量提供數據可以用賦值語句,多用于給變量賦初值。【格式1】STORE 數據 TO變量名表【格式2】變量名=表達式【功能】給變量賦值,其中格式1可以同時給多個變量賦同一個值,而格式2只能給一個變量賦一個值。而在程序運行過程中,往往需要

22、根據實際情況輸入數據賦值給變量,這就需要采用交互式數據輸入語句。2、交互式輸入語句INPUT命令【格式】INPUT 提示信息 TO 內存變量【功能】在程序執行過程中,將用戶交互式輸入的內容賦值給指定內存變量【例】從鍵盤輸入兩個任意正數,編程求以兩數為邊長的矩形面積。程序文件名為PROG4.PRGSET TALK OFFCLEARINPUT“矩形的邊長a為:” TO AINPUT“矩形的邊長b為:” TO BS=A*B?“矩形的面積為:”, SSET TALK ONRETURN【練習】編寫一個能同時求矩形面積與周長的程序。(二)輸出語句1、簡單輸出語句【格式】?|?表達式【功能】將表達式的值輸出

23、(?)到下一行起始處,或直接輸出(?)到當前光標所在位置。2、格式輸出語句【格式】行號,列號 SAY 表達式【功能】將表達式的值在指定位置輸出到屏幕上。【說明】與格式輸入命令相同, SAY。§ 3 程序結構Visual FoxPro系統提供的命令豐富,且功能強大,把這些命令和程序設計語句有效地組織在一起,就形成了實現某一特定功能的程序。所謂程序設計就是通過對實際問題的分析,確定解題算法,并應用程序設計語言提供的命令或語句將解題算法描述為計算機處理的語句序列(即程序)。所謂結構化程序設計,就是采用自頂向下逐步求精的設計方法和單入口單出口的控制結構,即順序、分支、循環三種基本結構構成。一

24、、順序結構順序結構是一種最簡單的結構。在這種結構中,程序根據語句中的命令的書寫順序依次執行的命令序列。VFP系統中的大多數命令都可以作為順序結構中的語句。【例】編程實現輸入某個三角形的底和高,計算其面積。 SET TALK OFFCLEARINPUT “請輸入三角形的底:” TO DINPUT “請輸入三角形的高:” TO GAREA=D*G/2&&計算面積?AREA&&輸出面積SET TALK ON CANCEL【例】某商場營業員工資的計算方法是:每月600元的基本工資加該月總銷售額的8.5提成。要求編一程序,輸入某營業員的月總銷售額,計算并顯示該營業員的月收

25、入。二、分支結構(選擇結構)分支結構是在程序執行時,根據不同的條件,選擇執行不同的程序語句,用來解決有選擇、有轉移的諸多問題。分支結構又稱選擇結構,其形式有如下三種:單向分支、雙向分支和多路分支。TF條件語句序列(一)單向選擇語句單向選擇語句,即根據用戶設置的條件表達式的值,決定某一操作是否執行。【格式】IF 條件表達式 語句序列 ENDIF【功能】該語句首先計算條件表達式的值,當條件表達式的值為真時,執行語句序列;否則,執行ENDIF后面的第一條命令。【例】求一元二次方程AX2BXC0的實根。SET TALK OFFCLEARINPUT “A=” TO AINPUT “B=” TO BINP

26、UT “C=” TO CZ=B2-4*A*CIF Z>=0 X1=(-B+SQRT(Z)/(2*A) X2=(-B-SQRT(Z)/(2*A) ?”X1=”, X1, ”X2=”, X2ENDIFSET TALK ONRETURN(二)雙向選擇TF條件語句序列1語句序列2雙向選擇語句,即根據用戶設置的條件表達式的值,選擇兩個操作中的一個來執行。【格式】IF 條件表達式 語句序列1 ELSE 語句序列2ENDIF【功能】該語句首先計算條件表達式的值,當條件表達式的值為真時,執行語句序列1中的命令;否則,執行語句序列2中的命令;執行完語句序列1或語句序列2后都將執行ENDIF后面的第一條命令

27、。【例】編寫一密碼校驗程序(假設密碼為ABC)。SET TALK OFFCLEARACCEPT “請輸入您的密碼:” TO AIF A= “ABC” CLEAR ?“歡迎使用本系統!”ELSE ? “密碼錯誤!”ENDIFSET TALK ONCANCEL【例】根據輸入的百分制成績,轉換成等級分(85以上優秀、60以上合格、60以下不合格)。CLEARSET TALK OFFINPUT “請輸入成績:” TO CJIF CJ>=85&&判斷成績等級 ? “優秀”ELSE&&成績小于85之后再作判斷 IF CJ>=60 ? “合格” ELSE ? “不

28、合格” ENDIF&&內層判斷結束ENDIF&&外層判斷結束SET TALK ONCANCEL(三)多路分支選擇多路分支語句,即根據多個條件表達式的值,選擇執行多個操作中的一個對應執行。 【格式】 DO CASE CASE 條件表達式1 語句序列1 CASE 條件表達式2 語句序列2 CASE 條件表達式N 語句序列N OTHERWISE 語句序列N+1 ENDCASE【功能】該語句根據給出的N個條件表達式的值,選擇N+1個語句序列中的一個執行。當所有CASE中條件表達式的值都是假時,如果有OTHERWISE項,則執行語句序列N+1,再執行ENDCASE后面的第

29、一條命令;否則,直接執行ENDCASE后面的第一條命令。【例】假設收入(S)與所得稅稅率(R)的關系如下表,編程計算個人所得稅的繳費方法。0S800R=0.05800S20000.082000S50000.1S5000程序結構如下:SET TALK OFFCLEARINPUT “您的月工資收入:” TO SDO CASE CASE S<800 TAX =0 CASE S<2000 TAX =0.05*(S-800) CASE S<5000 TAX =0.08*(S-800) OTHERWISE TAX =0.1*(S-800)ENDCASE? “應繳個人所得稅:”,TAXSE

30、T TALK ONRETURN【說明】使用分支語句應注意的幾點(1)IF ENDIF和DO CASE ENDCASE必須配對使用,DO CASE與第一個CASE 條件表達式之間不應有任何命令。(2)條件表達式可以是各種表達式或函數的組合,其值必須是邏輯值。(3)語句序列可以一個或多個命令組成,或是其他控制語句構成的嵌套結構。(4)DO CASEENDCASE命令,每次最多只能執行一個語句序列。在多個CASE項的條件表達式值為真時,只執行第一個條件表達式值為真的語句序列,然后執行ENDCASE的后面的第一條命令。【例】編寫身高體重測試儀測量程序。體質指數(BMI)=體重(kg)÷身高平

31、方(m2)。BMI<20瘦弱,2024正常,>24超重,>26肥胖。程序結構如下:CLEARINPUT “您的身高(m):” TO HINPUT “您的體重(kg):” TO GBMI=G/H2DO CASE CASE BMI<=20 MessageBox(“您的體形偏瘦,注意加強營養!”,16 ,“提示”) CASE BMI>20 .AND. BMI<=24 MessageBox(“您的體形完全正常,繼續保持!”,64 ,“提示”) CASE BETWEEN(BMI,24,26) MessageBox(“您的身材有些超重,注意飲食和鍛煉!”,48,“提示”

32、) OTHERWISE MessageBox(“您太胖了,趕緊減肥、加強鍛煉!”,16 ,“提示”)ENDCASERETURN三、循環結構在用計算機解決實際問題時,經常會遇到重復處理的內容,因此就需要在程序中將某些語句重復執行。循環結構是按照一定的條件使某些語句或程序段重復執行若干次。這里給大家介紹的是WHILE條件循環和FOR步長循環(一)當循環語句 DO WHILE 【格式】 DO WHILE 條件表達式 語句序列1 ENDDO【功能】根據指定條件控制循環體的執行。【說明】(1)DO WHILEENDDO之間的語句序列稱為循環體,是被控制重復執行的部分。(2)DO WHILE<條件&

33、gt;是循環語句的起始,通過<條件>控制循環。其控制過程是:進入DO WHILE時,首先判斷條件是否成立,若為真,則執行一遍循環體,當遇到ENDDO時,返回到循環起始DO WHILE,再次判斷條件是否成立,執行循環體,直到條件為假時跳出循環,轉而執行ENDDO后續語句。特例,當一開始條件就不成立,將立即退出循環,一次也不執行循環體。(3)如果循環體中含有LOOP語句,則當遇到LOOP時強行返回到循環開始語句DO WHILE,再判斷條件;如果循環體中含有EXIT語句,則當遇到EXIT時強行跳出循環,接著執行ENDDO后的語句。通常LOOP或EXIT出現在循環體內的選擇語句中,根據條件

34、決定是LOOP還是EXIT。(4)在執行循環體過程中,每執行一遍循環體,一定要修改一次條件,否則無法實現對循環次數的控制,當條件永遠為真時,將會造成死循環。循環條件設置是構成循環結構的重要因素,常見的幾種條件設置方法:計數形式鍵盤輸入數據直接用.T.作為條件,用EXIT跳出循環等。【例】編程求1210之和。(計數形式)SET TALK OFFCLEARS=0I=1DO WHILE I<=10S=S+II=I+1ENDDO?"1210",SSET TALK ONRETURN【例】編程求能使任一英文字符串顛倒輸出。(計數形式)CLEARINPUT "輸入一個字符

35、串:" TO S1S2=""I=LEN(S1)DO WHILE I>=1S2=S2+SUBSTR(S1,I,1)I=I-1ENDDO?S2RETURN【例】編程求1100之間的奇數之和。(直接用.T.作為條件)SET TALK OFFCLEARS=0I=1DO WHILE .T.S=S+II=I+2IF I>100EXITENDIFENDDO?"100以內的奇數和為:",SSET TALK ONCANCEL(二)步長循環語句 FOR NEXT【格式】FOR 循環變量=初值 TO 終值 STEP 步長循環體語句序列ENDFOR | N

36、EXT使用FOR循環語句的有關說明:省略STEP 步長,則步長為默認值1;初值、終值和步長都可以是數值表達式,但這些表達式僅在循環語句開始執行時計算一次。循環語句執行過程中,初值、終值和步長是不會改變的,并由此確定循環的次數;可以在循環體內改變循環變量的值,但會改變循環執行次數;EXIT和LOOP命令可以出現在循環體內。執行LOOP命令時,結束本次循環,循環變量增加一個步長值,返回FOR循環頭判斷循環條件是否成立。執行EXIT命令時,程序跳出循環,執行循環尾后面的語句【例】從鍵盤輸入10個數,編程找出其中的最大值。SET TALK OFFCLEARINPUT “請從鍵盤輸入一個數:” TO A

37、MAX = AFOR I=2 TO 10INPUT “請從鍵盤再輸入一個數:” TO AIF MAX < AMAX = AENDIFENDFOR?“最大值為:”, MAXSET TALK ONRETURN 【注】使用循環語句時應注意的幾點(1)DO WHILE和ENDDO、FOR和ENDFOR必須配對使用。(2)語句序列可以是任何VFP語句,也可以是循環語句,即可以為多重循環。(3)循環變量應是數值型的內存變量或數組元素。(三)循環嵌套循環嵌套是指在一個循環結構的循環體中又包含另一個循環。我們稱外層循環為外循環,被包含的循環為內循環。內循環的循環體必須完全包含在外循環的循環體中,不能相互

38、交叉。書寫時采用分層縮進的寫法,使程序結構更加清晰以及便于閱讀程序。 【例】編程輸出下三角形“九九乘法表”。SET TALK OFFCLEARFOR X=1 TO 9&&乘法表行標 FOR Y=1 TO X&&乘法表列標 S=X*Y ?STR(Y,1)+"*"+STR(X,1)+"="+STR(S,2)+" " NEXT ? &&換行ENDFORSET TALK ONRETURN【例】編程輸出右圖。*SET TALK OFFCLEARFOR I=1 TO 4&&控制顯示*

39、的行數 FOR J=1 TO 4-I&&控制*前面的空格數 ? " " NEXT FOR K=1 TO 2*I-1&&控制顯示*的個數 ? " *" NEXT ? &&換行ENDFORSET TALK ONRETURN§ 4 過程與自定義函數一、過程在程序設計中,有一些程序段需要反復執行多次,這些程序段是分散在同一程序的不同位置或在不同程序中重復執行,可將其與嵌入它的程序分開,形成獨立的程序序列,待使用時再調入程序中,以實現不同位置上的重復操作。這樣做增強了程序的可讀性和模塊化。我們稱這種具有獨立

40、功能而且可以被其它程序調用的程序序列為過程。【例】求出圓面積和周長。*MAIN.PRGSET TALK OFFSET PROCEDURE TO SUBL=0A=0INPUT “半徑為:” TO RDO AREA WITH R,ADO CIRCLE WITH R,L?“圓面積為:”,A?“圓周長為:”,LSET PROCEDURE TOSET TALK ONCANCEL* SUB.PRGPROCEDURE AREAPARAMETERS X,YY=3.14159*X*XRETURNPROCEDURE CIRCLEPARAMETERS X,YY=2*3.14159*XRETURN【例】編程用遞歸方法

41、求N的階乘。N!= 1(N=0)N*(N-1)!(N>=1)SET TALK OFFCLEARINPUT “請輸入N:” TO NS=1DO SUB1 WITH N,S?STR(N,2)+“!=”,SSET TALK ONPROCEDURE SUB1&&求階乘的過程PARAMETER X,YIF X>=1DO SUB1 WITH X-1,Y&&遞歸調用Y=X*YENDIFRETURN二、自定義函數自定義函數和過程一樣,可以以獨立的程序文件形式單獨存儲在磁盤上,也可以放在過程文件或直接放在程序文件中。與過程所不同的是,自定義函數不管其是否帶參數,其在完

42、成某種操作后必須返回一個函數值;且函數調用不是通過DO命令來實現的,與系統函數一樣是通過函數名引用的,并且在程序中只能用來組成表達式。1、自定義函數格式:【格式】FUNCTION <函數名>PARAMETER <形式參數表><函數體語句序列>RETURN <表達式>【說明】FUNCTION <函數名>是函數說明語句,調用函數時就是通過函數名引用的。PARAMETER是參數說明語句,形式參數表列出了調用時應該輸入的參數(只能是輸入參數);若無參數可省略。RETURN后的表達式為函數的返回值。2、自定義函數的調用【格式】函數名( 實際參數

43、表)【功能】用實參替換函數中的形參,運行函數體并返回函數值.【例】計算圓面積SET TALK OFFCLEARINPUT ”請輸入圓的半徑:” TO R?”圓的面積為:”,AREA(R) &&AREA()為計算面積的函數SET TALK ONFUNCTION AREA&&計算面積的函數PARAMETER X&&形參說明RETURN(3.1416*X2)【例】將十進制整數轉換成二進制數SET TALK OFFCLEARINPUT ”請輸入一個十進制整數:” TO D?”轉換成二進制數為:”,D2B(D)&&D2B()為十進制轉二進制

44、函數SET TALK ONRETURNFUNCTION D2B&&轉換函數PARAMETER N&&形參說明B=”DO WHILE N>0 B=STR(MOD(N,2),1)+B N=INT(N/2)ENDDORETURN B§ 5 經典程序范例一、歷年程序題【2002】求兩個整數m和n的最大公約數,最小公倍數【2006】。CLEARINPUT "M=" TO MINPUT "N=" TO NIF M<N T=M M=N N=TENDIFA=MB=NDO WHILE B#0 T=A%B A=B B=T

45、ENDDO?"最大公約數為:",A?"最小公倍數為:",M*N/ACANCEL【2003】輸人三個數,編程求出三個數中最大數和最小數,并顯示輸出。【2007】CLEARINPUT "輸入第一個數" TO AINPUT "輸入第二個數" TO BINPUT "輸入第三個數" TO CIF A<B T=A A=B B=TENDIFIF B<C T=B B=C C=TENDIFIF A<C T=A A=C C=TENDIF?”max=”,max, ”min=”,minRETURN【2

46、003】從鍵盤輸入一個正整數n,編程求出12+22+n2,并將結果顯示輸出。CLEARINPUT "輸入一個正整數" TO NS=0FOR I=1 TO N S=S+I2ENDFOR?”S=”,SRETURN【2004】整型變量a,b,c中分別存放各不相同的數值。編寫程序,實現a,b,c從大到小排序,并以此順序輸出排序后的三個數。CLEARINPUT "輸入第一個數" TO AINPUT "輸入第二個數" TO BINPUT "輸入第三個數" TO CIF A<B T=A A=B B=TENDIFRETURN

47、【2003】已知三個矩陣A(3×2)、B(2×4)、C(3×4),分別由數組A3,2、B2,4、C3,4表示,請編程實現矩陣乘法,即C=A×B(C(i,j)=A(i,1)×B(1, j)+A(i,2)×B(2,j)。CLEADECLARE A(3,2),B(2,4),C(3,4)FOR I=1 TO 3 FOR J=1 TO 2 INPUT "A(3,2)矩陣元素" TO A(I,J) ENDFORENDFORFOR I=1 TO 2 FOR J=1 TO 4 INPUT "B(2,4)矩陣元素"

48、; TO B(I,J) ENDFORENDFORFOR I=1 TO 3 FOR J=1 TO 4 C(I,J)=0 FOR K=1 TO 2 C(I,J)=C(I,J)+A(I,K)*B(K,J) ENDFOR ENDFORENDFORFOR I=1 TO 3 ? FOR J=1 TO 4 ?C(I,J) ENDFORENDFORRETURN【2004】輸入任意自然數n和變量x,利用函數方式計算Y的值。(公式:Y=l+x+2x2+3x3+nxn)CLEARINPUT "請輸入n:" TO NINPUT "請輸入x:" TO XY=1FOR I=1 TO

49、 N Y=Y+FT(X,I)ENDFOR?"函數值為:",SFUNCTION FTPARA A,BRETURN B*ABCANCELab b bc c c c cd d d d d d dc c c c cb b ba【2004】編寫程序輸出以下圖案(必須利用循環語句控制)SET TALK OFFCLEARFOR I=1 TO 4 FOR J=3+I TO 5-I STEP -1 I,J SAY CHR(I+96) ENDFORENDFORFOR I=5 TO 7 FOR J=I-3 TO 11-I I,J SAY CHR(104-I) ENDFORENDFORSET TA

50、LK ONRETURN 【2005】通過鍵盤輸入一串字符,統計并輸出其中英文字母的個數。CLEARACCEPT "請輸入字符串:" TO SN=0FOR I=1 TO LEN(S) C=SUBSTR(S,I,1) IF ASC(C)>=ASC(A); .AND.ASC(C)<=ASC(Z); .OR. ASC(C)>=ASC(a); .AND.ASC(C)<=ASC(z) N=N+1 ?C ?N ENDIFENDFOR?"英文字符數共計:",N,"個"RETURN【2005】已有按從小到大的順序排列的10個數,

51、現輸入一個數,要求插入到數列中。插入后數列仍然按從小到大順序排列。CLEARDECLARE N(11)FOR I=1 TO 10 INPUT "輸入一個數:" TO N(I)ENDFORINPUT "再輸入一個數:" TO N(11)J=10DO WHILE N(J+1)<N(J) T=N(J+1) N(J+1)=N(J) N(J)=T J=J-1ENDDO FOR I=1 TO 11 ?"N("+STR(I,2)+")=", N(I)ENDFORRETURN【2006】求lA+2A+3A+10A。CLEAR

52、INPUT "A=" TO AS=0FOR I=1 TO 10 S=S+I*AENDFOR?"S=",SRETURN【2006】從鍵盤輸入10個數存人數組a中,統計數組下標是奇數且數組元素值為偶數的元素個數。CLEARK=0DIME A(10)FOR I=1 TO 10INPUT "A(I)=" TO A(I)NEXTFOR I=1 TO 10 STEP 2IF A(I)%2=0 K=K+1ENDIFENDFOR?"K=",KRETURN【2007】某班有45名學生參加“專升本”考試。現要求從鍵盤輸入全班一門課的成

53、績,輸出該課程的平均分、及格人數及其百分比。CLEARSTORE 0 TO K,SDIME A(45)FOR I=1 TO 45INPUT "輸入成績:" TO A(I)NEXTFOR I=1 TO 45S=S+A(I)IF A(I)>=60 K=K+1ENDIFENDFOR?"平均分",S/45?"及格人數",K,"占百分比",K/45RETURN【2007】數組a中已存放了10個由小到大排列的數。現從鍵盤輸入一個數x,要求刪除數組中與其相同的數,并將后續的數依次前移,最后輸出剩余的數。CLEARK=0DIME A(10)FOR I=1 TO 10INPUT "A(I)=" TO A(I)NEXTINPUT "X=" TO XFOR I=1 TO 10IF X=A(I) For j=I to 9A(j)=A(j+1)nextENDIFENDFORFOR I=1 TO 10?"A(I)=",A(I)NEXTRETURNl 按照如下公式求出累加和Sn=a+aa+aaa+.+aa.a(n個)CLEARINPUT "a=&quo

溫馨提示

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

評論

0/150

提交評論