




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、VFP程序設(shè)計§1 數(shù)據(jù)與數(shù)據(jù)運算 &§2 結(jié)構(gòu)化程序設(shè)計 &§3 程序結(jié)構(gòu) &§4 子程序、過程與自定義函數(shù) &§ 1 數(shù)據(jù)與數(shù)據(jù)運算一、數(shù)據(jù)類型數(shù)據(jù)是反映現(xiàn)實世界中客觀事物屬性的記錄,它包括兩個方面:數(shù)據(jù)內(nèi)容與數(shù)據(jù)形式。數(shù)據(jù)內(nèi)容就是數(shù)據(jù)的值,數(shù)據(jù)形式就是數(shù)據(jù)的存儲形式和操作使用方式,也稱為數(shù)據(jù)類型。VFP6系統(tǒng)為使用戶建立和操作數(shù)據(jù)庫更加方便,將系統(tǒng)中所有操作、處理的數(shù)據(jù),分為幾種不同數(shù)據(jù)類型:字符型、數(shù)值型、日期型、日期時間型、邏輯型、備注型、通用型、貨幣型、二進制字符型和二進制備注型。二、常量與變量在VF
2、P系統(tǒng)中,數(shù)據(jù)可用常量、變量、數(shù)組表示,數(shù)據(jù)還可以用字段、記錄和對象中,由它們存儲、容納各種類型的數(shù)據(jù)。(一)常量常量是在命令或程序中可直接引用、具有具體值的命名數(shù)據(jù)項,其特征是在整個操作過程中它的值和表現(xiàn)形式保持不變。VFP按常量取值的數(shù)據(jù)類型,將常量分為6種類型:數(shù)值型常量、浮點型常量、字符型常量、邏輯型常量、日期型常量、日期時間型常量。1、數(shù)值型常量由數(shù)字、小數(shù)點和正負(fù)號組成,表示整數(shù)或?qū)崝?shù)值。如:100,-21,15.31,-21092.5041等分別是數(shù)值型常量中的整數(shù)和實數(shù)。2、字符型常量由任意ASCII字符、漢字、空格或數(shù)字等組成的字符型數(shù)據(jù),字符型常量又稱為字符串。為與其他類型
3、常量、變量和標(biāo)識符相區(qū)別,VFP要求將字符串中所有字符,用一對雙引號“"”或單引號“'”或方括號“ ”作為定界符對括起來。如“I am a student.”,中華人民共和國,Visual FoxPro數(shù)據(jù)庫系統(tǒng)都是字符串。3、日期型常量日期型常量是表示日期值的數(shù)據(jù),其默認(rèn)格式是mm/dd/yyyy。如10/01/04和10/01/2004均表示2004年10月1日這一日期常量值。4、邏輯型常量邏輯型常量就是表示邏輯判斷結(jié)果“真”或“假”的邏輯值。邏輯常量只有真和假兩種值,分別用(.T.或.y.)和(.F.或.n.)表示真和假。VFP中在表示邏輯常量的字母左右加注圓點符“.”
4、以示區(qū)別。(二)變量變量是在操作過程中可以改變其取值或數(shù)據(jù)類型的數(shù)據(jù)項。確定一個變量,需要確定其三個要素:變量名、數(shù)據(jù)類型和變量值。1、內(nèi)存變量內(nèi)存變量是一種存在于計算機內(nèi)存中變量,是一種單個數(shù)據(jù)元素的臨時性變量,需要時臨時定義,不用時可隨時釋放。內(nèi)存變量分為用戶自定義內(nèi)存變量和系統(tǒng)內(nèi)存變量。(1)內(nèi)存變量的建立建立內(nèi)存變量就是給內(nèi)存變量賦值。內(nèi)存變量賦值既可定義一個新的內(nèi)存變量,也可改變已朋內(nèi)存變量的值或數(shù)據(jù)類型。【格式】內(nèi)存變量=表達式【功能】計算<表達式>的值并賦值給指定內(nèi)存變量?!纠緼=3+2y=2*x+5(2)內(nèi)存變量的顯示輸出可以用兩個命令在屏幕上顯示輸出內(nèi)存變量的值
5、?!靖袷?】?表達式表 AT 列號【格式2】?表達式表 AT 列號【功能】計算表達式表中各表達式的值,并在屏幕上指定位置顯示輸出各式的值。格式1:不管有無指定表達式表,都會輸出一個回車換行符。如果指定了表達式表,各表達式值將在下一行的起始處輸出;格式2:不會輸出一個回車換行符,各表達式值在屏幕上當(dāng)前行光標(biāo)所在位置直接輸出;表達式表:多個逗號兩兩分隔的表達式,各表達式的值輸出時,以空格分隔;AT 列號:該子句指定表達式值從指定列開始顯示輸出。AT的定位只對它前面的一個表達式有效,多個表達式必須用多個AT子句分別定位輸出,而且可反序定位。【例】?A,B,C AT 20?A2、數(shù)組數(shù)組是一種結(jié)構(gòu)化的
6、變量,是一組具有相同名稱、以下標(biāo)相互區(qū)分的有序內(nèi)存變量。一個數(shù)組通常都包含多個數(shù)據(jù)元素。Visual FoxPro系統(tǒng)中只允許使用一維數(shù)組(相當(dāng)于數(shù)列)和二維數(shù)組(相當(dāng)于行列式或矩陣)。(1)數(shù)組元素數(shù)組中各有序變量(數(shù)據(jù)元素)組成數(shù)組的成員,稱為數(shù)組元素。數(shù)組元素實質(zhì)上是一個內(nèi)存變量,也稱數(shù)組變量,它們具有相同變量名即數(shù)組名,彼此以下標(biāo)區(qū)分;數(shù)組元素的名稱(變量名)用數(shù)組加下標(biāo)構(gòu)成。如A(1)、B(2,3)分別表示一維數(shù)組A的第1個數(shù)組元素,二維數(shù)組B中第2行第3列的數(shù)組元素;下標(biāo)必須用圓括號對括;一維數(shù)組的元素只有一個下標(biāo),二維數(shù)組的元素有兩個以逗號分隔的下標(biāo)(也可用一個下標(biāo)表示);數(shù)組元
7、素的下標(biāo)均從1開始,各元素的初始值為 .F. ;數(shù)組元素的數(shù)據(jù)類型決定于最后賦值的數(shù)據(jù)類型;不同元素的數(shù)據(jù)類型可以不同;數(shù)組元素與普通內(nèi)存變量一樣操作,可以賦值和引用。(2)數(shù)組的定義數(shù)組必須先定義后使用,定義數(shù)組是向系統(tǒng)申請數(shù)組元素在內(nèi)存中存儲空間?!靖袷健緿IMENSION 數(shù)組名1(N1, N2)DECLARE 數(shù)組名1(N1 , N2) ,數(shù)組名2(N3 ,N4)【功能】定義一維或二維數(shù)組。(3)數(shù)組的元素的排列一維數(shù)組是按下標(biāo)從小到大的順序排列的,二維數(shù)組的排列是先按下標(biāo)1,再按下標(biāo)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)相當(dāng)于B(2,3)(4)數(shù)組的賦值與引用數(shù)組元素的賦值與引用,與普通內(nèi)存變量的規(guī)則相同?!纠緿IME A(5) , B(3,4)STORE “OK” TO AB(1,1)=10B(1,2)=20?A(3),B(1,2),B(2,3)三、常用函數(shù)Visual FoxPro系統(tǒng)中,函數(shù)是一段程序代碼,用來進行一些特定的運算或操作,支持和完善命令的功能,幫助用戶完成各種操作與管理。函數(shù)的一般形式為: 函數(shù)名(參數(shù)1 , 參數(shù)
9、2)Visual FoxPro的函數(shù)由函數(shù)名與參數(shù)(即自變量)兩部分組成。參數(shù)必須用圓括號對括起來,如有多個參數(shù),各參數(shù)以逗號分隔;有些函數(shù)可省略參數(shù),或不需參數(shù),但也必須保留括號; (一)字符函數(shù)字符函數(shù)是處理字符型數(shù)據(jù)的函數(shù),其自變量或函數(shù)值中至少有一個是字符型數(shù)據(jù)。函數(shù)中涉及的字符型數(shù)據(jù)項,均以C表示。1、字符串長度函數(shù)【格式】LEN(C)【功能】返回字符串C的字符數(shù)(長度)。函數(shù)值為N型。2、取子字符串函數(shù)【格式】SUBSTR(C, N1, N2)【功能】返回從字符串C中第N1個字符開始,截取N2個字符的子串。LEFT(C, N) 從字符串C左邊取N個字符RIGHT(C, N) 從字符
10、串C右邊取N個字符3、子串位置函數(shù)【格式】AT(C1, C2)【功能】返回字符串C1在字符串C2中的起始位置。函數(shù)值為整數(shù)。如果串C2不包含串C1,函數(shù)返回值為零。4、刪除字符串空格函數(shù)【格式】RTRIM | TRIM(C)【功能】刪除字符串C尾部空格字符。LTRIM(C) 刪除字符串C的前導(dǎo)空格字符。ALLTRIM(C) 刪除字符串C的前導(dǎo)和尾部空格字符。5、空格函數(shù)【格式】SPACE(N)【功能】返回一個包含N個空格的字符串。6、大小寫字母轉(zhuǎn)換函數(shù)【格式】LOWER(C) | UPPER(c)【功能】LOWER( )將字符串C中字母全部變成小寫字母,UPPER( )將字符串C中字母全部變成
11、大寫字母,其它字符不變。(二)數(shù)值函數(shù)數(shù)值函數(shù)用于數(shù)值運算,其自變量與函數(shù)都是數(shù)值型數(shù)據(jù)。1、取絕對值函數(shù)【格式】ABS(N)【功能】計算N(數(shù)值表達式)的值,并返回該值的絕對值。2、取整函數(shù)【格式】INT(N)【功能】計算數(shù)值表達式N的值,返回該值的整數(shù)部分。3、四舍五入函數(shù)【格式】ROUND(N1, N2)【功能】返回N1四舍五入的值,N2表示保留的小數(shù)位數(shù)。4、最大值和最小值函數(shù)【格式】MAX | MIN(N1, N2 , N3.)【功能】返回數(shù)值表達式中的最大值MAX( )和最小值MIN( )。5、求余數(shù)函數(shù)(求模函數(shù))【格式】MOD(N1, N2)【功能】返回N1除以N2的余數(shù)。余數(shù)
12、的小數(shù)位數(shù)與N1相同,符號與N2相同。6、平方根函數(shù)【格式】SQRT(N)【功能】求非負(fù)N的平方根。7、符號函數(shù)【格式】SIGN(N)【功能】返回N的符號。正數(shù)、零、負(fù)數(shù)分別返回1、0、-1。(三)轉(zhuǎn)換函數(shù)在數(shù)據(jù)庫應(yīng)用的過程中,經(jīng)常要將不同數(shù)據(jù)類型的數(shù)據(jù)進行相應(yīng)轉(zhuǎn)換,滿足實際應(yīng)用的需要。Visual FoxPro系統(tǒng)提供了若干個轉(zhuǎn)換函數(shù),較好地解決了數(shù)據(jù)類型轉(zhuǎn)換的問題。1、數(shù)值轉(zhuǎn)換為字符串【格式】STR(N ,長度,小數(shù)位數(shù))【功能】將N的數(shù)值轉(zhuǎn)換成字符串形式。函數(shù)值為C型。2、字符串轉(zhuǎn)換為數(shù)值【格式】VAL (C)【功能】將C串中數(shù)字轉(zhuǎn)換成對應(yīng)數(shù)值,轉(zhuǎn)換結(jié)果取兩位小數(shù)。函數(shù)值為N型。3、字符
13、轉(zhuǎn)換為ASCII碼值【格式】ASC(C)【功能】返回C串首字符的ASCII碼值。函數(shù)值為N型。4、ASCII碼轉(zhuǎn)換為相應(yīng)字符【格式】CHR(N)【功能】返回以N值為ASCII碼的ASCII字符。函數(shù)值為C型。四、運算符與表達式在Visual FoxPro系統(tǒng)中,表達式是由常量、變量、函數(shù)及其他數(shù)據(jù)容器單獨或與運算符組成的有意義的運算式子。運算符是對數(shù)據(jù)對象進行加工處理的符號,根據(jù)其處理數(shù)據(jù)對象的數(shù)據(jù)類型,運算符分為算術(shù)(數(shù)值)運算符、字符運算符、日期時間運算符、邏輯運算符和關(guān)系運算符五類,相應(yīng)的,表達式也分為算術(shù)表達式、字符表達式、日期時間表達式、邏輯表達式和關(guān)系表達式五類。¨ 在V
14、isual FoxPro系統(tǒng)中,各類運算的優(yōu)先順序如下:圓括號>算術(shù)和日期運算>字符串運算>關(guān)系運算>邏輯運算用戶也可以通過給表達式加圓括號的方式,改變其默認(rèn)運算順序。如果多個同一級別的運算,則按在表達式中出現(xiàn)的先后順序進行運算。(一)算術(shù)表達式算術(shù)表達式又稱數(shù)值表達式,其運算對象和運算結(jié)果均為數(shù)值型數(shù)據(jù)。數(shù)值運算符的功能及運算優(yōu)先順序,如表所示。表中運算符按運算優(yōu)先級別從高到低順序排列。算術(shù)運算符運算符功能表達式舉例運算結(jié)果優(yōu)先級別( )圓括號(2-5)*(3+2)-15最高最低-取相反數(shù)-(3-8)5*、乘冪2*5、3232、9*、/乘、除2*10、25/520、5
15、%取余數(shù)20%32+、-加、減36+19、29-4755、-18(二)字符表達式字符表達式是由字符運算符將字符型數(shù)據(jù)對象連接起來進行運算的式子。字符運算的對象是字符型數(shù)據(jù)對象,運算結(jié)果是字符常量或邏輯常量。下表為字符運算符的功能。字符運算符運算符功能表達式舉例運算結(jié)果+串1+串2:兩串順序相連接12 +5612 56-串1-串2:串1尾空格移到串2尾后再順序相連接12 -561256 "+"與"-"都是字符連接運算符,都將兩字符串順序連接,但“+”是直接連接,“-”則將串1尾部所有空格移到串2尾部后再連接。(三)關(guān)系表達式由關(guān)系運算符連接兩個同類數(shù)據(jù)對象
16、進行關(guān)系比較的運算式稱為關(guān)系表達式。關(guān)系表達式的值為邏輯值,關(guān)系表達式成立則其值為“真”,否則為“假”。關(guān)系運算符運算符功能表達式舉例運算結(jié)果<小于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.關(guān)系
17、運算符的優(yōu)先級別相同。關(guān)系表達式運算時,就是比較同類兩數(shù)據(jù)對象的“大小”,對于不同類型的數(shù)據(jù),其“大小”或者是值的大小,或者是先后順序。日期或日期時間數(shù)據(jù)以日期或時間的先后順序為序。 (四)邏輯表達式由邏輯運算將邏輯型數(shù)據(jù)對象連接而成的式子稱為邏輯表達式。邏輯表達式的運算對象與運算結(jié)果均為邏輯型數(shù)據(jù)。邏輯運算符前后一般要加圓點“.”標(biāo)記,以示區(qū)別。邏輯運算符運算符功能優(yōu)先級別.NOT. (!)邏輯非,取其右邊邏輯值的相反值最高最低.AND.邏輯與,兩邊的邏輯值均為真才得真.OR.邏輯或,兩邊的邏輯值均為假才得假對于各種邏輯運算,其運算規(guī)則可由邏輯運算真值表確定,如下表所示就是邏輯運算真值表。&
18、#167; 2 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計的方法:自頂向下,逐步求精。結(jié)構(gòu)化程序由順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu)組成。VFP提供面向過程的程序設(shè)計和面向?qū)ο蟮某绦蛟O(shè)計方法。面向過程的程序設(shè)計是用結(jié)構(gòu)化編程語言來實現(xiàn)編寫程序。具體就是告訴計算機如何一步一步解決問題,即要求計算機“怎么做”。它不依賴具體的機器。面向?qū)ο蟮某绦蛟O(shè)計適于解決大型的任務(wù),設(shè)計程序時只需告訴計算機“做什么”,而不用說明“怎么做”。它不依賴具體的機器。VFP程序是由一系列命令組成,又稱命令文件或程序文件。運行程序文件就是執(zhí)行文件中的各條命令。一、引例先看一個完整的VFP過程化程序?qū)嵗?,從中可以引出程序的幾個基本概
19、念。*程序示例:求圓形的面積。CLEAR&&清除主窗口中的信息SET TALK OFF&&關(guān)閉命令窗口對話INPUT "請輸入圓的半徑,R=" TO R&&輸入圓的半徑S=PI( )*R2&&計算圓的面積? "圓的面積=",S&&輸出圓的面積SET TALK ON&&打開命令窗口對話RETURN&&返回命令窗口NOTE 程序結(jié)束有關(guān)此Visual FoxPro程序的幾點說明:注釋語句【格式1】* 注釋內(nèi)容每一行開頭均可加此注釋【格式2】NOTE
20、 注釋內(nèi)容同上【格式3】&& 注釋內(nèi)容行尾注釋【功能】增強程序文件易讀性,編譯時注釋內(nèi)容不會被執(zhí)行。NOTE 注釋一行寫不下可加續(xù)行符”;”, &&注釋不能用在命令語句行續(xù)行符”;”的后面。對話開關(guān)語句【格式】SET TALK OFF | ON【功能】關(guān)閉或打開命令執(zhí)行時的對話開關(guān)。命令的分行Visual FoxPro程序是命令行的序列,每個命令都以回車鍵結(jié)束,一行只能寫一條命令;若一條命令太長,一行寫不下,也可分行書寫,并在分行處加上續(xù)行符“;”,再按回車鍵。程序的結(jié)束執(zhí)行程序文件時,將依次執(zhí)行文件中的命令,直到所有命令執(zhí)行完畢,或者執(zhí)行到以下命令:CANCA
21、L:終止程序運行,清除所有的私有變量,返回命令窗口;RETURN:結(jié)束程序執(zhí)行,返回調(diào)用它的上級程序,若無上級程序則返回命令窗口;二、程序中常用的簡單語句一個程序如果沒有輸出操作(即將程序結(jié)果顯示出來)就沒有什么實用價值,而如果沒有輸入操作(即給變量提供數(shù)據(jù)),則必然缺乏靈活性。VFP提供多種方法來實現(xiàn)信息的輸入和輸出。(一)輸入語句1、賦值輸入語句在編寫程序時,給變量提供數(shù)據(jù)可以用賦值語句,多用于給變量賦初值?!靖袷?】STORE 數(shù)據(jù) TO變量名表【格式2】變量名=表達式【功能】給變量賦值,其中格式1可以同時給多個變量賦同一個值,而格式2只能給一個變量賦一個值。而在程序運行過程中,往往需要
22、根據(jù)實際情況輸入數(shù)據(jù)賦值給變量,這就需要采用交互式數(shù)據(jù)輸入語句。2、交互式輸入語句INPUT命令【格式】INPUT 提示信息 TO 內(nèi)存變量【功能】在程序執(zhí)行過程中,將用戶交互式輸入的內(nèi)容賦值給指定內(nèi)存變量【例】從鍵盤輸入兩個任意正數(shù),編程求以兩數(shù)為邊長的矩形面積。程序文件名為PROG4.PRGSET TALK OFFCLEARINPUT“矩形的邊長a為:” TO AINPUT“矩形的邊長b為:” TO BS=A*B?“矩形的面積為:”, SSET TALK ONRETURN【練習(xí)】編寫一個能同時求矩形面積與周長的程序。(二)輸出語句1、簡單輸出語句【格式】?|?表達式【功能】將表達式的值輸出
23、(?)到下一行起始處,或直接輸出(?)到當(dāng)前光標(biāo)所在位置。2、格式輸出語句【格式】行號,列號 SAY 表達式【功能】將表達式的值在指定位置輸出到屏幕上?!菊f明】與格式輸入命令相同, SAY。§ 3 程序結(jié)構(gòu)Visual FoxPro系統(tǒng)提供的命令豐富,且功能強大,把這些命令和程序設(shè)計語句有效地組織在一起,就形成了實現(xiàn)某一特定功能的程序。所謂程序設(shè)計就是通過對實際問題的分析,確定解題算法,并應(yīng)用程序設(shè)計語言提供的命令或語句將解題算法描述為計算機處理的語句序列(即程序)。所謂結(jié)構(gòu)化程序設(shè)計,就是采用自頂向下逐步求精的設(shè)計方法和單入口單出口的控制結(jié)構(gòu),即順序、分支、循環(huán)三種基本結(jié)構(gòu)構(gòu)成。一
24、、順序結(jié)構(gòu)順序結(jié)構(gòu)是一種最簡單的結(jié)構(gòu)。在這種結(jié)構(gòu)中,程序根據(jù)語句中的命令的書寫順序依次執(zhí)行的命令序列。VFP系統(tǒng)中的大多數(shù)命令都可以作為順序結(jié)構(gòu)中的語句?!纠烤幊虒崿F(xiàn)輸入某個三角形的底和高,計算其面積。 SET TALK OFFCLEARINPUT “請輸入三角形的底:” TO DINPUT “請輸入三角形的高:” TO GAREA=D*G/2&&計算面積?AREA&&輸出面積SET TALK ON CANCEL【例】某商場營業(yè)員工資的計算方法是:每月600元的基本工資加該月總銷售額的8.5提成。要求編一程序,輸入某營業(yè)員的月總銷售額,計算并顯示該營業(yè)員的月收
25、入。二、分支結(jié)構(gòu)(選擇結(jié)構(gòu))分支結(jié)構(gòu)是在程序執(zhí)行時,根據(jù)不同的條件,選擇執(zhí)行不同的程序語句,用來解決有選擇、有轉(zhuǎn)移的諸多問題。分支結(jié)構(gòu)又稱選擇結(jié)構(gòu),其形式有如下三種:單向分支、雙向分支和多路分支。TF條件語句序列(一)單向選擇語句單向選擇語句,即根據(jù)用戶設(shè)置的條件表達式的值,決定某一操作是否執(zhí)行?!靖袷健縄F 條件表達式 語句序列 ENDIF【功能】該語句首先計算條件表達式的值,當(dāng)條件表達式的值為真時,執(zhí)行語句序列;否則,執(zhí)行ENDIF后面的第一條命令?!纠壳笠辉畏匠藺X2BXC0的實根。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雙向選擇語句,即根據(jù)用戶設(shè)置的條件表達式的值,選擇兩個操作中的一個來執(zhí)行。【格式】IF 條件表達式 語句序列1 ELSE 語句序列2ENDIF【功能】該語句首先計算條件表達式的值,當(dāng)條件表達式的值為真時,執(zhí)行語句序列1中的命令;否則,執(zhí)行語句序列2中的命令;執(zhí)行完語句序列1或語句序列2后都將執(zhí)行ENDIF后面的第一條命令
27、?!纠烤帉懸幻艽a校驗程序(假設(shè)密碼為ABC)。SET TALK OFFCLEARACCEPT “請輸入您的密碼:” TO AIF A= “ABC” CLEAR ?“歡迎使用本系統(tǒng)!”ELSE ? “密碼錯誤!”ENDIFSET TALK ONCANCEL【例】根據(jù)輸入的百分制成績,轉(zhuǎn)換成等級分(85以上優(yōu)秀、60以上合格、60以下不合格)。CLEARSET TALK OFFINPUT “請輸入成績:” TO CJIF CJ>=85&&判斷成績等級 ? “優(yōu)秀”ELSE&&成績小于85之后再作判斷 IF CJ>=60 ? “合格” ELSE ? “不
28、合格” ENDIF&&內(nèi)層判斷結(jié)束ENDIF&&外層判斷結(jié)束SET TALK ONCANCEL(三)多路分支選擇多路分支語句,即根據(jù)多個條件表達式的值,選擇執(zhí)行多個操作中的一個對應(yīng)執(zhí)行。 【格式】 DO CASE CASE 條件表達式1 語句序列1 CASE 條件表達式2 語句序列2 CASE 條件表達式N 語句序列N OTHERWISE 語句序列N+1 ENDCASE【功能】該語句根據(jù)給出的N個條件表達式的值,選擇N+1個語句序列中的一個執(zhí)行。當(dāng)所有CASE中條件表達式的值都是假時,如果有OTHERWISE項,則執(zhí)行語句序列N+1,再執(zhí)行ENDCASE后面的第
29、一條命令;否則,直接執(zhí)行ENDCASE后面的第一條命令?!纠考僭O(shè)收入(S)與所得稅稅率(R)的關(guān)系如下表,編程計算個人所得稅的繳費方法。0S800R=0.05800S20000.082000S50000.1S5000程序結(jié)構(gòu)如下: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? “應(yīng)繳個人所得稅:”,TAXSE
30、T TALK ONRETURN【說明】使用分支語句應(yīng)注意的幾點(1)IF ENDIF和DO CASE ENDCASE必須配對使用,DO CASE與第一個CASE 條件表達式之間不應(yīng)有任何命令。(2)條件表達式可以是各種表達式或函數(shù)的組合,其值必須是邏輯值。(3)語句序列可以一個或多個命令組成,或是其他控制語句構(gòu)成的嵌套結(jié)構(gòu)。(4)DO CASEENDCASE命令,每次最多只能執(zhí)行一個語句序列。在多個CASE項的條件表達式值為真時,只執(zhí)行第一個條件表達式值為真的語句序列,然后執(zhí)行ENDCASE的后面的第一條命令?!纠烤帉懮砀唧w重測試儀測量程序。體質(zhì)指數(shù)(BMI)=體重(kg)÷身高平
31、方(m2)。BMI<20瘦弱,2024正常,>24超重,>26肥胖。程序結(jié)構(gòu)如下:CLEARINPUT “您的身高(m):” TO HINPUT “您的體重(kg):” TO GBMI=G/H2DO CASE CASE BMI<=20 MessageBox(“您的體形偏瘦,注意加強營養(yǎng)!”,16 ,“提示”) CASE BMI>20 .AND. BMI<=24 MessageBox(“您的體形完全正常,繼續(xù)保持!”,64 ,“提示”) CASE BETWEEN(BMI,24,26) MessageBox(“您的身材有些超重,注意飲食和鍛煉!”,48,“提示”
32、) OTHERWISE MessageBox(“您太胖了,趕緊減肥、加強鍛煉!”,16 ,“提示”)ENDCASERETURN三、循環(huán)結(jié)構(gòu)在用計算機解決實際問題時,經(jīng)常會遇到重復(fù)處理的內(nèi)容,因此就需要在程序中將某些語句重復(fù)執(zhí)行。循環(huán)結(jié)構(gòu)是按照一定的條件使某些語句或程序段重復(fù)執(zhí)行若干次。這里給大家介紹的是WHILE條件循環(huán)和FOR步長循環(huán)(一)當(dāng)循環(huán)語句 DO WHILE 【格式】 DO WHILE 條件表達式 語句序列1 ENDDO【功能】根據(jù)指定條件控制循環(huán)體的執(zhí)行?!菊f明】(1)DO WHILEENDDO之間的語句序列稱為循環(huán)體,是被控制重復(fù)執(zhí)行的部分。(2)DO WHILE<條件&
33、gt;是循環(huán)語句的起始,通過<條件>控制循環(huán)。其控制過程是:進入DO WHILE時,首先判斷條件是否成立,若為真,則執(zhí)行一遍循環(huán)體,當(dāng)遇到ENDDO時,返回到循環(huán)起始DO WHILE,再次判斷條件是否成立,執(zhí)行循環(huán)體,直到條件為假時跳出循環(huán),轉(zhuǎn)而執(zhí)行ENDDO后續(xù)語句。特例,當(dāng)一開始條件就不成立,將立即退出循環(huán),一次也不執(zhí)行循環(huán)體。(3)如果循環(huán)體中含有LOOP語句,則當(dāng)遇到LOOP時強行返回到循環(huán)開始語句DO WHILE,再判斷條件;如果循環(huán)體中含有EXIT語句,則當(dāng)遇到EXIT時強行跳出循環(huán),接著執(zhí)行ENDDO后的語句。通常LOOP或EXIT出現(xiàn)在循環(huán)體內(nèi)的選擇語句中,根據(jù)條件
34、決定是LOOP還是EXIT。(4)在執(zhí)行循環(huán)體過程中,每執(zhí)行一遍循環(huán)體,一定要修改一次條件,否則無法實現(xiàn)對循環(huán)次數(shù)的控制,當(dāng)條件永遠為真時,將會造成死循環(huán)。循環(huán)條件設(shè)置是構(gòu)成循環(huán)結(jié)構(gòu)的重要因素,常見的幾種條件設(shè)置方法:計數(shù)形式鍵盤輸入數(shù)據(jù)直接用.T.作為條件,用EXIT跳出循環(huán)等。【例】編程求1210之和。(計數(shù)形式)SET TALK OFFCLEARS=0I=1DO WHILE I<=10S=S+II=I+1ENDDO?"1210",SSET TALK ONRETURN【例】編程求能使任一英文字符串顛倒輸出。(計數(shù)形式)CLEARINPUT "輸入一個字符
35、串:" TO S1S2=""I=LEN(S1)DO WHILE I>=1S2=S2+SUBSTR(S1,I,1)I=I-1ENDDO?S2RETURN【例】編程求1100之間的奇數(shù)之和。(直接用.T.作為條件)SET TALK OFFCLEARS=0I=1DO WHILE .T.S=S+II=I+2IF I>100EXITENDIFENDDO?"100以內(nèi)的奇數(shù)和為:",SSET TALK ONCANCEL(二)步長循環(huán)語句 FOR NEXT【格式】FOR 循環(huán)變量=初值 TO 終值 STEP 步長循環(huán)體語句序列ENDFOR | N
36、EXT使用FOR循環(huán)語句的有關(guān)說明:省略STEP 步長,則步長為默認(rèn)值1;初值、終值和步長都可以是數(shù)值表達式,但這些表達式僅在循環(huán)語句開始執(zhí)行時計算一次。循環(huán)語句執(zhí)行過程中,初值、終值和步長是不會改變的,并由此確定循環(huán)的次數(shù);可以在循環(huán)體內(nèi)改變循環(huán)變量的值,但會改變循環(huán)執(zhí)行次數(shù);EXIT和LOOP命令可以出現(xiàn)在循環(huán)體內(nèi)。執(zhí)行LOOP命令時,結(jié)束本次循環(huán),循環(huán)變量增加一個步長值,返回FOR循環(huán)頭判斷循環(huán)條件是否成立。執(zhí)行EXIT命令時,程序跳出循環(huán),執(zhí)行循環(huán)尾后面的語句【例】從鍵盤輸入10個數(shù),編程找出其中的最大值。SET TALK OFFCLEARINPUT “請從鍵盤輸入一個數(shù):” TO A
37、MAX = AFOR I=2 TO 10INPUT “請從鍵盤再輸入一個數(shù):” TO AIF MAX < AMAX = AENDIFENDFOR?“最大值為:”, MAXSET TALK ONRETURN 【注】使用循環(huán)語句時應(yīng)注意的幾點(1)DO WHILE和ENDDO、FOR和ENDFOR必須配對使用。(2)語句序列可以是任何VFP語句,也可以是循環(huán)語句,即可以為多重循環(huán)。(3)循環(huán)變量應(yīng)是數(shù)值型的內(nèi)存變量或數(shù)組元素。(三)循環(huán)嵌套循環(huán)嵌套是指在一個循環(huán)結(jié)構(gòu)的循環(huán)體中又包含另一個循環(huán)。我們稱外層循環(huán)為外循環(huán),被包含的循環(huán)為內(nèi)循環(huán)。內(nèi)循環(huán)的循環(huán)體必須完全包含在外循環(huán)的循環(huán)體中,不能相互
38、交叉。書寫時采用分層縮進的寫法,使程序結(jié)構(gòu)更加清晰以及便于閱讀程序。 【例】編程輸出下三角形“九九乘法表”。SET TALK OFFCLEARFOR X=1 TO 9&&乘法表行標(biāo) FOR Y=1 TO X&&乘法表列標(biāo) S=X*Y ?STR(Y,1)+"*"+STR(X,1)+"="+STR(S,2)+" " NEXT ? &&換行ENDFORSET TALK ONRETURN【例】編程輸出右圖。*SET TALK OFFCLEARFOR I=1 TO 4&&控制顯示*
39、的行數(shù) FOR J=1 TO 4-I&&控制*前面的空格數(shù) ? " " NEXT FOR K=1 TO 2*I-1&&控制顯示*的個數(shù) ? " *" NEXT ? &&換行ENDFORSET TALK ONRETURN§ 4 過程與自定義函數(shù)一、過程在程序設(shè)計中,有一些程序段需要反復(fù)執(zhí)行多次,這些程序段是分散在同一程序的不同位置或在不同程序中重復(fù)執(zhí)行,可將其與嵌入它的程序分開,形成獨立的程序序列,待使用時再調(diào)入程序中,以實現(xiàn)不同位置上的重復(fù)操作。這樣做增強了程序的可讀性和模塊化。我們稱這種具有獨立
40、功能而且可以被其它程序調(diào)用的程序序列為過程。【例】求出圓面積和周長。*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&&遞歸調(diào)用Y=X*YENDIFRETURN二、自定義函數(shù)自定義函數(shù)和過程一樣,可以以獨立的程序文件形式單獨存儲在磁盤上,也可以放在過程文件或直接放在程序文件中。與過程所不同的是,自定義函數(shù)不管其是否帶參數(shù),其在完
42、成某種操作后必須返回一個函數(shù)值;且函數(shù)調(diào)用不是通過DO命令來實現(xiàn)的,與系統(tǒng)函數(shù)一樣是通過函數(shù)名引用的,并且在程序中只能用來組成表達式。1、自定義函數(shù)格式:【格式】FUNCTION <函數(shù)名>PARAMETER <形式參數(shù)表><函數(shù)體語句序列>RETURN <表達式>【說明】FUNCTION <函數(shù)名>是函數(shù)說明語句,調(diào)用函數(shù)時就是通過函數(shù)名引用的。PARAMETER是參數(shù)說明語句,形式參數(shù)表列出了調(diào)用時應(yīng)該輸入的參數(shù)(只能是輸入?yún)?shù));若無參數(shù)可省略。RETURN后的表達式為函數(shù)的返回值。2、自定義函數(shù)的調(diào)用【格式】函數(shù)名( 實際參數(shù)
43、表)【功能】用實參替換函數(shù)中的形參,運行函數(shù)體并返回函數(shù)值.【例】計算圓面積SET TALK OFFCLEARINPUT ”請輸入圓的半徑:” TO R?”圓的面積為:”,AREA(R) &&AREA()為計算面積的函數(shù)SET TALK ONFUNCTION AREA&&計算面積的函數(shù)PARAMETER X&&形參說明RETURN(3.1416*X2)【例】將十進制整數(shù)轉(zhuǎn)換成二進制數(shù)SET TALK OFFCLEARINPUT ”請輸入一個十進制整數(shù):” TO D?”轉(zhuǎn)換成二進制數(shù)為:”,D2B(D)&&D2B()為十進制轉(zhuǎn)二進制
44、函數(shù)SET TALK ONRETURNFUNCTION D2B&&轉(zhuǎn)換函數(shù)PARAMETER N&&形參說明B=”DO WHILE N>0 B=STR(MOD(N,2),1)+B N=INT(N/2)ENDDORETURN B§ 5 經(jīng)典程序范例一、歷年程序題【2002】求兩個整數(shù)m和n的最大公約數(shù),最小公倍數(shù)【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?"最大公約數(shù)為:",A?"最小公倍數(shù)為:",M*N/ACANCEL【2003】輸人三個數(shù),編程求出三個數(shù)中最大數(shù)和最小數(shù),并顯示輸出?!?007】CLEARINPUT "輸入第一個數(shù)" TO AINPUT "輸入第二個數(shù)" TO BINPUT "輸入第三個數(shù)" 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】從鍵盤輸入一個正整數(shù)n,編程求出12+22+n2,并將結(jié)果顯示輸出。CLEARINPUT "輸入一個正整數(shù)" TO NS=0FOR I=1 TO N S=S+I2ENDFOR?”S=”,SRETURN【2004】整型變量a,b,c中分別存放各不相同的數(shù)值。編寫程序,實現(xiàn)a,b,c從大到小排序,并以此順序輸出排序后的三個數(shù)。CLEARINPUT "輸入第一個數(shù)" TO AINPUT "輸入第二個數(shù)" TO BINPUT "輸入第三個數(shù)" TO CIF A<B T=A A=B B=TENDIFRETURN
47、【2003】已知三個矩陣A(3×2)、B(2×4)、C(3×4),分別由數(shù)組A3,2、B2,4、C3,4表示,請編程實現(xiàn)矩陣乘法,即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】輸入任意自然數(shù)n和變量x,利用函數(shù)方式計算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?"函數(shù)值為:",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】編寫程序輸出以下圖案(必須利用循環(huán)語句控制)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】通過鍵盤輸入一串字符,統(tǒng)計并輸出其中英文字母的個數(shù)。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?"英文字符數(shù)共計:",N,"個"RETURN【2005】已有按從小到大的順序排列的10個數(shù),
51、現(xiàn)輸入一個數(shù),要求插入到數(shù)列中。插入后數(shù)列仍然按從小到大順序排列。CLEARDECLARE N(11)FOR I=1 TO 10 INPUT "輸入一個數(shù):" TO N(I)ENDFORINPUT "再輸入一個數(shù):" 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個數(shù)存人數(shù)組a中,統(tǒng)計數(shù)組下標(biāo)是奇數(shù)且數(shù)組元素值為偶數(shù)的元素個數(shù)。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名學(xué)生參加“專升本”考試?,F(xiàn)要求從鍵盤輸入全班一門課的成
53、績,輸出該課程的平均分、及格人數(shù)及其百分比。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?"及格人數(shù)",K,"占百分比",K/45RETURN【2007】數(shù)組a中已存放了10個由小到大排列的數(shù)?,F(xiàn)從鍵盤輸入一個數(shù)x,要求刪除數(shù)組中與其相同的數(shù),并將后續(xù)的數(shù)依次前移,最后輸出剩余的數(shù)。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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)運營成本的分析與控制試題及答案
- 高級審計師考前總結(jié)試題及答案
- 目標(biāo)管理體系構(gòu)建與實施
- 《農(nóng)產(chǎn)品加工技術(shù)》課件
- 《骨折的基本知識》課件
- 醫(yī)院感染暴發(fā)時的處理流程
- 客源國概論:新加坡專題課件
- 幼兒園第一學(xué)期幼兒園大班家長會發(fā)言稿模版
- 《肝膽疾病超聲診斷》課件
- 心室靜止的臨床護理
- 藥品知識產(chǎn)權(quán)保護
- 2024年內(nèi)蒙古師范大學(xué)招聘事業(yè)編制人員考試真題
- 2025年四川雅安市石棉縣森林資源保護林場招聘筆試參考題庫附帶答案詳解
- 2025至2030中國電力巡檢無人機行業(yè)深度評估與投資風(fēng)險預(yù)警報告
- (四調(diào))武漢市2025屆高中畢業(yè)生四月調(diào)研考試 物理試卷(含答案)
- 養(yǎng)老護理員初級試題庫含參考答案
- 基于云計算的數(shù)據(jù)中心設(shè)計與運維
- 2025年社區(qū)居委會試題及答案
- 中西醫(yī)結(jié)合內(nèi)科學(xué)之循環(huán)系統(tǒng)疾病知到課后答案智慧樹章節(jié)測試答案2025年春湖南中醫(yī)藥大學(xué)
- TCHSA 088-2024 口腔頜面修復(fù)中三維面部掃描臨床應(yīng)用指南
- SMT設(shè)備安全培訓(xùn)材料
評論
0/150
提交評論