vf二章VFP程序的設(shè)計(jì)基礎(chǔ)_第1頁
vf二章VFP程序的設(shè)計(jì)基礎(chǔ)_第2頁
vf二章VFP程序的設(shè)計(jì)基礎(chǔ)_第3頁
vf二章VFP程序的設(shè)計(jì)基礎(chǔ)_第4頁
vf二章VFP程序的設(shè)計(jì)基礎(chǔ)_第5頁
已閱讀5頁,還剩122頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第二章 vfp程序設(shè)計(jì)基礎(chǔ) 根據(jù)計(jì)算機(jī)系統(tǒng)處理數(shù)據(jù)的形式來劃分,vfp有常量、變量、表達(dá)式和函數(shù)四種形式的數(shù)據(jù)。21常量與變量 每一個數(shù)據(jù)都有一定的類型,數(shù)據(jù)類型決定了數(shù)據(jù)的存儲方式和運(yùn)算方式。向表中輸入數(shù)據(jù)時(shí),每個字段的數(shù)據(jù)類型是在表結(jié)構(gòu)中定義的。常量、內(nèi)存變量、函數(shù)以及表達(dá)式的類型包括字符型、數(shù)值型、貨幣型、邏輯型、日期型和日期時(shí)間型等6種。211常量 常量用以表示一個具體的、不變的值。不同類型的常量有不同的書寫格式。 1數(shù)值型常量 數(shù)值型常量也就是常數(shù),用來表示一個數(shù)量的大小,由數(shù)字09、小數(shù)點(diǎn)和正負(fù)號構(gòu)成。 例如:12、3.45、-6.78 為了表示很大或很小的數(shù)值型常量,也可以使用科

2、學(xué)記數(shù)法形式書寫. 例如:用5.878e12表示5.8781012,用1.6e-12表示1.610-12。 數(shù)值型數(shù)據(jù)在內(nèi)存中用8個字節(jié)表示,其取值范圍是-0.9999999999e+190.9999999999e+20。2貨幣型常量 貨幣型常量用來表示貨幣值,其書寫格式與數(shù)值型常量類似,但要加上一個前置的符號()。貨幣數(shù)據(jù)在存儲和計(jì)算時(shí),采用4位小數(shù)。如果一個貨幣型常量多于4位小數(shù),那么系統(tǒng)會自動將多余的小數(shù)位四舍五入。例如: 常量123.456789將存儲為123.4568。 貨幣型常量沒有科學(xué)記數(shù)法形式,在內(nèi)存中占用8個字節(jié).取值范圍是:-922337203685477.58079223

3、37203685477.5807。3字符型常量 字符型常量也稱為字符串,其表示方法是用半角半角單引號、雙引號或方括號把字符串?dāng)U起來。這里的單引號、雙引號或方括號稱為定界符。許多常量都有定界符。定界符雖然不作為常量本身的內(nèi)容,但它規(guī)定了常量的類型以及常量的起始和終止界限。 字符型常量的定界符必須成對匹配,不能一邊用單引號而另一邊用雙引號。如果某種定界符本身也是字符串的內(nèi)容,則需要用另一種定界符為該字符串定界。 注意,不包含任何字符的字符串(“”)叫空串??沾c包含空格的字符串(” ”)不同。 例: 顯示幾個字符型常量。 在命令窗口鍵入以下兩條命令:? 計(jì)算機(jī),123,abcabc? 計(jì)算機(jī),12

4、3,abcabc ? 命令的功能是另起一行,在新的一行的開始處顯示若干個表達(dá)式的值; ? 命令是在同一行顯示表達(dá)式的值。顯示結(jié)果:計(jì)算機(jī) 123 abcabc計(jì)算機(jī) 123 abcabc4日期型常量 日期型常量的定界符是一對花括號。花括號內(nèi)包括年、月、日三部分內(nèi)容,各部分內(nèi)容之間用分隔符分隔。系統(tǒng)默認(rèn)斜杠()分隔符。常用的其他日期分隔符有連字號()、句點(diǎn)()和空格。 日期型常量的格式有兩種: 傳統(tǒng)的日期格式 系統(tǒng)默認(rèn)為美國日期格式mm/dd/yy(月/日年),傳統(tǒng)日期格式中的月、日各為月、日各為2位數(shù)字,而年位數(shù)字,而年份可以是份可以是2位數(shù)字,也可以是位數(shù)字,也可以是4位數(shù)字位數(shù)字。嚴(yán)格的日

5、期格式 yyyy-mm-dd用這種格式書寫的日期常量能表達(dá)一個確切的日期,它不受set date等語句設(shè)置的影響。這種格式的日期常量在書寫時(shí)要注意:花括號內(nèi)第一個字符必須是脫字符();年份必須用4位(如2001、1999等);年月日的次序不能顛倒、不能缺省。日期型數(shù)據(jù)用日期型數(shù)據(jù)用8個字節(jié)表示個字節(jié)表示.影響日期格式的設(shè)置命令 命令格式:set mark to 日期分割符命令功能:用于指定日期分隔符,“-”,“.” 命令格式:set date to american|ansi|british| use:mm/dd/yy british: dd/mm/yy 命令格式:set century on

6、/off 命令功能:用于設(shè)置年份的位數(shù); on設(shè)置年份用4位數(shù)字表示 off設(shè)置年份用2位數(shù)字表示 命令格式:set strictdate to 0|1|2 命令功能:用于設(shè)置是否對日期格式進(jìn)行檢查。 0 表示不進(jìn)行嚴(yán)格的日期格式檢查,目的是與早期vfp兼容。 1 表示進(jìn)行嚴(yán)格的日期格式檢查,它是系統(tǒng)默認(rèn)的設(shè)置。 2 表示進(jìn)行嚴(yán)格的日期格式檢查,并且對ctod()和ctot()函數(shù)的格式也有效。例22 設(shè)置不同的日期格式。 在命令窗口鍵入輸入以下幾條命令,并分別回車執(zhí)行:set century on 設(shè)置4位數(shù)字年份set date to ymd 設(shè)置年月日格式?2000.08.08set c

7、entury offset mark to “.”set date to mdy?2000-08-105日期時(shí)間型常量 日期時(shí)間型常量包括日期和時(shí)間兩部分內(nèi)容:(日期,時(shí)間)。日期部分與日期型常量相似,也有傳統(tǒng)的和嚴(yán)格的兩種格式。時(shí)間部分的格式為: hh:mm:ss ap。其中hh、mm和ss分別代表時(shí)、分和秒,默認(rèn)值分別為12、0和0。a和p分別代表上午和下午,默認(rèn)值為a。如果指定的時(shí)間大于等于12,則自然為下午的時(shí)間。日期時(shí)間型數(shù)據(jù)用日期時(shí)間型數(shù)據(jù)用8個字節(jié)存儲個字節(jié)存儲6邏輯型常量 邏輯型數(shù)據(jù)只有邏輯真和邏輯假兩個值。邏輯真的常量表示形式有:.t.(.t.) 、 .y.(.y.)。邏輯假

8、的常量表示形式有: .f. 、.f.、.n. 、.n.。前后兩個句點(diǎn)作為邏輯型常量的定界符是必不可少的,否則會被誤認(rèn)為變量名。邏輯型數(shù)據(jù)只占用一個字節(jié)邏輯型數(shù)據(jù)只占用一個字節(jié)212變量 變量值是能夠隨時(shí)更改的。vfp的變量分為字段變量和內(nèi)存變量兩大類。由于表中的各條記錄對應(yīng)一個個字段名,因此,表中的字段名就稱字段變量。 內(nèi)存變量是內(nèi)存中的一個存儲區(qū)域,變量值就是存放在這個存儲區(qū)域里的數(shù)據(jù),變量的類型取決于變量值的類型。例如,當(dāng)把一個常量賦給一個變量時(shí),這個常量就被存放到該變量對應(yīng)的存儲位置中而成為該變量新的取值。在vfp中,變量的類型可以改變,也就是說,可以把不同類型的數(shù)據(jù)賦給同一個變量。 內(nèi)

9、存變量的數(shù)據(jù)類型包括字符型(c)、數(shù)值型(n)、貨幣型(y)、邏輯型(l)、日期 型(d)和日期時(shí)間型(t)。1簡單內(nèi)存變量 每一個變量都有一個名字,可以通過變量名訪問變量。如果當(dāng)前表中存在一個同名的字段變量,則在訪問內(nèi)存變量時(shí),必須在變量名前加上前綴m(或m-),否則系統(tǒng)將訪問同名的字段變量。 向簡單內(nèi)存變量賦值不必事先定義,變量的賦值命令有以下兩種格式:內(nèi)存變量名表達(dá)式 store表達(dá)式to內(nèi)存變量名表功能注釋: 等號一次只能給一個內(nèi)存變量賦值。 store可同時(shí)給若干個變量賦相同的值,各內(nèi)存變量名之間必須用逗號分開。 在vfp中,一個變量在使用之前并不需要特別的聲明或定義。當(dāng)用store

10、 命令給變量賦值時(shí),如果該變量并不存在,那么系統(tǒng)會自動建立它。 可以通過對內(nèi)存變量重新賦值來改變其內(nèi)容和類型。例2.4 內(nèi)存變量和字段變量的訪問。 在一個表文件“student.dbf”,其結(jié)構(gòu)如下: student(學(xué)號c(8),姓名c(6),性別c(2),出生日期d(8) 在命令窗口鍵入以下命令:use studentlist? 姓名,性別,學(xué)號 顯示字段變量store “王三” to 姓名 用字符串向內(nèi)存變量姓名賦值y=500 xm=姓名 &用字段變量賦值內(nèi)存變量xmstore 8.88 to x1,x2store .t. to q? xm,m.姓名,x1,x2,q? 姓名,m.

11、姓名,x1,x2,q2數(shù)組 數(shù)組是內(nèi)存中連續(xù)的一片存儲區(qū)域,它由一系列元素組成,每個數(shù)組元素可通過數(shù)組名及相應(yīng)的下標(biāo)來訪問。每個數(shù)組元素相當(dāng)于一個簡單變量,可以給各元素分別賦值。在vfp中,一個數(shù)組中各元素的數(shù)據(jù)類型可以不同。 與簡單內(nèi)存變量不同,數(shù)組在使用之前一般要用dimension或declare命令顯式創(chuàng)建,規(guī)定數(shù)組是一維數(shù)組還是二維數(shù)組,數(shù)組名和數(shù)組大小。數(shù)組大小由下標(biāo)值的上、下限決定,下限規(guī)定為1。 創(chuàng)建數(shù)組的命令格式為: dimension數(shù)組名(下標(biāo)上限1),下標(biāo)上限2) declare數(shù)組名(下標(biāo)上限1,下標(biāo)上限2)” 以上兩種格式的功能完全相同。數(shù)組創(chuàng)建后,系統(tǒng)自動給每個數(shù)

12、組元素賦以邏輯假.f.。例如,dime x(5),y(2,3)命令定義了兩個數(shù)組: 一維數(shù)組x含5個元素:x(1)、x(2)、x(3)、x(4)、x(5)。 二維數(shù)組y含6個元素:y(1,1)、y(1,2)、y(1,3)、y(2,1)、y(2,2)、y(2,3)。 整個數(shù)組的數(shù)據(jù)類型為a(array),而各個數(shù)組元素可以分別存放不同類型的數(shù)據(jù)。 在使用數(shù)組和數(shù)組元素時(shí),應(yīng)注意注意如下問題: 在一切使用簡單內(nèi)存變量的地方,均可以使用數(shù)組元素。 在賦值和輸入語句中使用數(shù)組名時(shí),表示將同一個值同時(shí)賦給該數(shù)組的全部數(shù)組元素。 在同一個運(yùn)行環(huán)境下,數(shù)組名不能與簡單變量名重復(fù)。 在賦值語句中的表達(dá)式位置不

13、能出現(xiàn)數(shù)組名。 可以用一維數(shù)組的形式訪問二維數(shù)組。213內(nèi)存變量常用命令1內(nèi)存變量的賦值 格式1:stor表達(dá)式to變量名表 格式2:內(nèi)存變量名表達(dá)式 功能:計(jì)算表達(dá)式并將表達(dá)式值賦給一個或多個內(nèi)存變量,格式2只能給一個變量賦值。2表達(dá)式值的顯示 格式1:?表達(dá)式表 格式2:?表達(dá)式表 功能:計(jì)算表達(dá)式表中的各表達(dá)式并輸出各表達(dá)式值。 不管有沒有指定表達(dá)式表,格式1都會輸出一個回車換行符。 括起來的內(nèi)容表示是可選的;用括起來的內(nèi)容表示是可選的;用括起來表示在實(shí)際編括起來表示在實(shí)際編寫語句時(shí),用相應(yīng)的內(nèi)容替代;用寫語句時(shí),用相應(yīng)的內(nèi)容替代;用 括起來表示是必選的;括起來表示是必選的;類似類似a|

14、b的格式,表示的格式,表示a和和b只能選擇一個,不能同時(shí)都選。只能選擇一個,不能同時(shí)都選。3,內(nèi)存變量的顯示格式1:list memory like通配符 to printer| to file文件名格式2:display memory like通配符 to printer |to file文件名 功能:顯示內(nèi)存變量的當(dāng)前信息,包括變量名、作用域、類型、取值。 選用like短語只顯示與通配符相匹配的內(nèi)存變量。通配符包括*和?,*表示任意多個字符,?表示任意一個字符。 可選子句to printer或to file文件名用于在顯示的同時(shí)送往打印機(jī),或者存入給定文件名的文本文件中,文件的擴(kuò)展名為.t

15、xt。 4,內(nèi)存變量的清除 格式1:clear memory 格式2:release內(nèi)存變量名表 格式3:release allextended 格式4:release alllike通配符 except通配符功能: 格式1清除所有內(nèi)存變量。 格式2清除指定的內(nèi)存變量。 格式3清除所有的內(nèi)存變量。在人機(jī)會話狀態(tài)其作用與格式l相同。 格式4選用like短語清除與通配符相匹配的內(nèi)存變量,except短語清除與通配符不相匹配的內(nèi)存變量。例25在命令窗口中依次輸入下列命令,命令格式及屏幕顯示如下:clear memodime y(2,2)stor xxx to x1,y(1,1)y(3)=2000-0

16、3-23x2=$123.23list memo like y*rele all like y*5表中數(shù)據(jù)與數(shù)組數(shù)據(jù)之間的交換 表文件的數(shù)據(jù)內(nèi)容是以記錄的方式存儲和使用的,而數(shù)組是把一批數(shù)據(jù)組織在一起的數(shù)據(jù)處理方法,為了使它們之間方便地進(jìn)行數(shù)據(jù)交換,以利于程序的使用,vfp提供了相互之間數(shù)據(jù)傳遞的功能,可以方便地完成表記錄與內(nèi)存變量之間的數(shù)據(jù)交換。 將表的當(dāng)前記錄復(fù)制到數(shù)組 格式1:scatterfieids memoto數(shù)組名blank 格式2:scatterfields like通配符fields except通配符memo to數(shù)組名blankl 格式1的功能是將表的當(dāng)前記錄從指定字段表中

17、的第一個字段內(nèi)容開始,依次復(fù)制到數(shù)組名中的從第一個數(shù)組元素開始的內(nèi)存變量中。如果不使用fields短語指定字段,則復(fù)制除備注型m和通用型g之外的全部字段。 如果事先沒有創(chuàng)建數(shù)組,系統(tǒng)將自動創(chuàng)建;如果己創(chuàng)建的數(shù)組元素個數(shù)少于字段數(shù),系統(tǒng)自動建立其余數(shù)組元素;如果已創(chuàng)建的數(shù)組元素個數(shù)多于字段數(shù),其余數(shù)組元素的值保持不變。 若選用memo短語,則同時(shí)復(fù)制備注型字段。 若選用blank短語,則產(chǎn)生一個空數(shù)組,各數(shù)組元素的類型和大小與表中當(dāng)前記錄的對應(yīng)字段相同。 格式2的功能是用通配符指定包括或排除的字段。fields like通配符和fields except通配符可以同時(shí)使用。例:打開表文件“stu

18、dent.dbf”,包括9個字段: 學(xué)號(c,4)、姓名(c,6)、性別(l)、出生日期(d,8)等。當(dāng)前記錄為第一記錄,把它復(fù)制到數(shù)組zg中。use studentscat to zg? zg(1),zg(2),zg(3)scat to zg memo &要求包括備注型字段scatter to bb fields like 姓*,總* &只選兩字段list memo like bb 將數(shù)組數(shù)據(jù)復(fù)制到表的當(dāng)前記錄 格式1:gather fromfields字段名表memo 格式2:gather from數(shù)組名fields like通配符 fieids except memo 格

19、式1的功能是將數(shù)組中的數(shù)據(jù)作為一個記錄復(fù)制到表的當(dāng)前記錄中。從第一個數(shù)組元素開始,依次向字段名表指定的字段填寫數(shù)據(jù)。如果缺省fields選項(xiàng),則依次向各個字段復(fù)制,如果數(shù)組元素個數(shù)多于記錄中字段的個數(shù),則多余部分被忽略。若選用memo短語,則在復(fù)制時(shí)包括備注型字段;否則備注型字段不予考慮。格式2功能是用通配符指定包括或排除的字段。fields like和 fields except可以同時(shí)使用。 例:打開表文件“student.dbf”,追加一條空記錄,將數(shù)組rr中的內(nèi)容復(fù)制到空記錄中。注意數(shù)組中各個數(shù)組元素的數(shù)據(jù)類型必須與字段的數(shù)據(jù)類型對應(yīng)一致。dime rr(1,3)rr(1,1)=952

20、201rr(1,2)=1995220217rr(1,3)=張三use studentappe blankgather from rrbrow22 表達(dá)式 表達(dá)式是由常量、變量和函數(shù)通過特定的運(yùn)算符連接起來的式子。在用vfp編寫的程序里,表達(dá)式幾乎無所不在。表達(dá)式的形式包括:單一的運(yùn)算對象(如常量、變量或函數(shù))。由運(yùn)算符將運(yùn)算對象連接起來形成的式子。 無論是簡單的還是復(fù)雜的合法表達(dá)式,按照規(guī)定的運(yùn)算規(guī)則最終均能計(jì)算出一個結(jié)果,即表達(dá)式的值。 根據(jù)表達(dá)式值的類型,表達(dá)式可分為數(shù)值表達(dá)式、字符表達(dá)式、日期時(shí)間表達(dá)式和邏輯表達(dá)式。大多數(shù)邏輯表達(dá)式是帶比較運(yùn)算符的關(guān)系表達(dá)式。221數(shù)值、字符與日期時(shí)間表

21、達(dá)式1數(shù)值表達(dá)式 數(shù)值表達(dá)式由算術(shù)運(yùn)算符將數(shù)值型數(shù)據(jù)連接起來形成,其運(yùn)算結(jié)果仍然是數(shù)值型數(shù)據(jù)。 數(shù)值型數(shù)據(jù)可以是數(shù)值型常量或者變量。 算術(shù)運(yùn)算優(yōu)先級(p56) 數(shù)值表達(dá)式中的算術(shù)運(yùn)算符有些與日常使用的運(yùn)算符稍有區(qū)別. *是乘, / 是除, %是求余, *或是乘方.求余運(yùn)算 求余運(yùn)算和取余函數(shù)mod()的作用相同。余數(shù)的正負(fù)號與除數(shù)一致。當(dāng)表達(dá)式中出現(xiàn)乘*、除和求余運(yùn)算時(shí),它們具有相同的優(yōu)先級。例:求余運(yùn)算 ? 10%3, 10%-3 1 -210339110-391被除數(shù)與除數(shù)同號被除數(shù)與除數(shù)異號,求得余數(shù)后再加上除數(shù)值.1(-3)-2+=-32字符表達(dá)式 字符表達(dá)式由字符串運(yùn)算符將字符型數(shù)據(jù)

22、連接起來形成,其運(yùn)算結(jié)果仍然是字符型數(shù)據(jù)。字符串運(yùn)算符有以下兩個,它們的優(yōu)先級相同: +: 前后兩個字符串首尾連接形成一個新的字符串。 -: 連接前后兩個字符串,并將前字符串的尾部空格移到合并后的新字符串尾部。 例:字符串運(yùn)算示例。a=hello b=everyone? a+b,a-ba+b-hell everyonea-b-helleveryone對于表中字符型字段也可用“+”,“-”運(yùn)算use student? 姓名-“是個男同學(xué)”? 姓名-學(xué)號-班級3日期時(shí)間表達(dá)式 日期時(shí)間表達(dá)式中可以使用的運(yùn)算符也有+和-兩個。 日期時(shí)間表達(dá)式的格式有一定限制,不能任意組合,例如,不能用運(yùn)算符+將兩個

23、連接起來。合法的日期時(shí)間表達(dá)式格式(p57),其中的天數(shù)和秒數(shù)都是數(shù)值表達(dá)式。 222 關(guān)系表達(dá)式1關(guān)系表達(dá)式 關(guān)系表達(dá)式通常也稱為簡單邏輯表達(dá)式,它由關(guān)系運(yùn)算符將兩個運(yùn)算對象連接起來形成,即: 關(guān)系運(yùn)算符表達(dá)式2 關(guān)系運(yùn)算符的作用是比較兩個表達(dá)式的大小或前后。其運(yùn)算結(jié)果是邏輯型數(shù)據(jù)。關(guān)系運(yùn)算符及其含義如(p58)表24所示,它們的優(yōu)先級相同。 運(yùn)算符和僅適用于字符型數(shù)據(jù)。 其他運(yùn)算符適用于任何類型的數(shù)據(jù),但前后兩個運(yùn)算對象的數(shù)據(jù)類型要一致。 數(shù)值型和貨幣型數(shù)據(jù)比較 按數(shù)值的大小比較,包括負(fù)號。 日期或日期時(shí)間型數(shù)據(jù)比較 越早的日期或時(shí)間越小,越晚的日期或時(shí)間越大。 邏輯型數(shù)據(jù)比較 t大于f子

24、串包含測試前字符型表達(dá)式$后字符型表達(dá)式為子串包含測試,如果前者是后者的一個子字符串,結(jié)果為邏輯真(t),否則為邏輯假(f)。例如:store 計(jì)算機(jī) to s1store 微型計(jì)算機(jī) to s2? s1$s2, s2$s1, (s1$s2)(s2$s1) t f t2設(shè)置字符的排序次序 當(dāng)比較兩個字符串時(shí),系統(tǒng)對兩個字符串的字符自左向右逐個進(jìn)行比較,一旦發(fā)現(xiàn)兩個對應(yīng)字符不同,就根據(jù)這兩個字符的排序序列決定兩個字符串的大小。對字符序列的排序設(shè)置有人機(jī)會話和命令兩種方式。 在人機(jī)會話方式下設(shè)置 在“工具”菜單下選擇“選項(xiàng)”,打開“選項(xiàng)”對話框。 單擊“數(shù)據(jù)”選項(xiàng)卡。 從右上方的“排序序列”下拉框

25、中選擇 “machine(機(jī)器)”、“pinyin(拼音)”或“stroke(筆畫)”。單擊“選項(xiàng)”對話框上的“確定”按鈕。命令方式設(shè)置: 設(shè)置字符比較次序的命令是:set collate to “排序次序名” 排序次序名必須放在引號當(dāng)中。次序名可以是“machine”、“pinyin”或“stroke”。 machine(機(jī)器)次序:指定的字符排序次序與xbase兼容,按照機(jī)內(nèi)碼順序排序,在微機(jī)中,西文字符是按照ascii碼值排列的:空格在最前面,大寫abcd字母序列在小寫abcd字母前,所以,大寫字母小于小寫字母。3字符串精確比較與exact設(shè)置 在用雙等號運(yùn)算符比較兩個字符串時(shí),只有當(dāng)兩

26、個字符串完全相同(包括空格以及各字符的位置)時(shí),運(yùn)算結(jié)果才會是邏輯真.t.,否則為邏輯假f。 在用單等號運(yùn)算符比較兩個字符串時(shí),運(yùn)算結(jié)果與set exact on|off設(shè)置有關(guān),該命令是設(shè)置精確匹配與否的開關(guān)。該命令可以在命令窗口或在程序中執(zhí)行,也可以通過“數(shù)據(jù)”選項(xiàng)卡設(shè)置。 系統(tǒng)默認(rèn)off狀態(tài)。當(dāng)處于off狀態(tài)時(shí),只要右邊的字符串與左邊字符串的前面部分內(nèi)容相匹配,即可得到邏輯真t的結(jié)果。也就是說,字符串的比較以右面的字符串為目標(biāo),右字符串結(jié)束即終止比較。當(dāng)處于on狀態(tài)時(shí),比較到兩個字符串全部結(jié)束,先在較短字符串的尾部加上若干個空格,使兩個字符串的長度相等,然后再進(jìn)行比較。 223邏輯表達(dá)式

27、1邏輯表達(dá)式 邏輯表達(dá)式由邏輯運(yùn)算符將邏輯型數(shù)據(jù)連接起來而形成,其運(yùn)算結(jié)果仍然是邏輯型數(shù)據(jù)。邏輯運(yùn)算符有三個: not或!(邏輯非)、and(邏輯與)、or(邏輯或)。 其優(yōu)先級順序依次為not、and、or。 邏輯運(yùn)算符的運(yùn)算規(guī)則如(p60)表25所示,其中和分別代表兩個邏輯型數(shù)據(jù)。 在許多命令和語句的格式中都有條件語法成分,這里的條件就是邏輯表達(dá)式或關(guān)系表達(dá)式。例如,查詢基本工資高于1800元 的講師和副教授,條件表達(dá)式應(yīng)當(dāng)寫成:基本工資1800 and 職稱“講師” or 基本工資=1800 and 職稱“副教授” 或者寫成:基本工資1800 and (職稱”講師”or職稱=“副教授”)

28、 23常用函數(shù) 函數(shù)是用程序來實(shí)現(xiàn)的一種數(shù)據(jù)運(yùn)算或轉(zhuǎn)換。每一個函數(shù)都有特定的數(shù)據(jù)運(yùn)算或轉(zhuǎn)換功能,它往往需要若干個自變量,即運(yùn)算對象,但只能有一個運(yùn)算結(jié)果,稱為函數(shù)值或返回值。 函數(shù)可以用函數(shù)名加一對圓括號加以調(diào)用,自變量放在圓括號里,如len(x)。 函數(shù)調(diào)用可以出現(xiàn)在表達(dá)式里,表達(dá)式將函數(shù)的返回值作為自己運(yùn)算的對象。函數(shù)調(diào)用也可作為一條命令使用,但此時(shí)系統(tǒng)忽略函數(shù)的返回值。 231數(shù)值函數(shù) 數(shù)值函數(shù)是指函數(shù)值為數(shù)值的一類函數(shù),它們的自變量和返回值往往都是數(shù)值型數(shù)據(jù)。 1絕對值和符號函數(shù) 格式:abs(數(shù)值表達(dá)式) sign(數(shù)值表達(dá)式) 功能:abs()返回指定的數(shù)值表達(dá)式的絕對值。 sig

29、n()返回指定數(shù)值表達(dá)式的符號。當(dāng)表達(dá)式的運(yùn)算結(jié)果為正、負(fù)和零時(shí),函數(shù)值分別為1、-1和0。2求平方根函數(shù) 格式:sqrt(數(shù)值表達(dá)式) 功能:返回指定表達(dá)式的平方根。自變量表達(dá)式的值不能為負(fù)。3圓周率函數(shù) 格式:pi() 功能:返回圓周率n(數(shù)值型)。該函數(shù)沒有自變量。4.求整數(shù)函數(shù) 格式:int() celling() floor() 功能:int()返回指定數(shù)值表達(dá)式的整數(shù)部分 celling()返回大于或等于指定數(shù)值表達(dá)式的最小整數(shù) floor()返回小于或等于指定數(shù)值表達(dá)式的最大整數(shù)5. 四舍五入函數(shù)格式: round(,x=345.345? round(x,2),round(x,1

30、),round(x,0),round(x,-1)顯示結(jié)果:345.35 345.3 345 3506. 求余數(shù)格式: mod(數(shù)值表達(dá)式1,數(shù)值表達(dá)式2)數(shù)值表達(dá)式1為被除數(shù),數(shù)值表達(dá)式2為除數(shù).mod(10,3) 1mod(10,-3) -210339110-391被除數(shù)與除數(shù)同號被除數(shù)與除數(shù)異號,求得余數(shù)后再加上除數(shù)值.1(-3)-2+=-3 2.3.2 字符函數(shù) 1.求字符串長度 格式: len(字符表達(dá)式) 求“字符表達(dá)式”中的所有字符個數(shù)包括空格. 一個漢字占2個字符. 2.大小寫轉(zhuǎn)換函數(shù) 格式:lower(字符表達(dá)式) upper(字符表達(dá)式) 3.空格字符串生成函數(shù) space(

31、數(shù)值表達(dá)式)4.刪除前后空格函數(shù)格式:trim(字符表達(dá)式)ltrim(字符表達(dá)式)alltrim(字符表達(dá)式)5.取子串函數(shù)格式: left(字符表達(dá)式,長度) right(字符表達(dá)式,長度) substr(字符表達(dá)式,起始位置 ,長度)6.計(jì)算子串出現(xiàn)次數(shù)函數(shù)格式:occurs(字符表達(dá)式1,字符表達(dá)式2)7.求子串位置函數(shù)格式: at(字符表達(dá)式1,字符表達(dá)式2,數(shù)值表達(dá)式)功能:求 在 的起始位置數(shù)值。說明: 中不包含 ,函數(shù)值為零;若 的值含有兩個以上的 的值,則函數(shù)給出第一個值的位置。大小寫字母在檢索中視為不同。atc(字符表達(dá)式,字符表達(dá)式,數(shù)值表達(dá)式)8.子串替換函數(shù)格式:st

32、uff(字符表達(dá)式1,起始位置,長度,字符表達(dá)式2)功能:從指定位置開始,用指定的字符串替換 中指定的字符串。說明:中的字符個數(shù)與中的字符個數(shù)可以不等;如果為0,則插入;如果為空字符串,則刪除中指定字符。舉例:例 store good bye! to s1 store morning to s2 ?stuff(s1,6,3,s2),stuff(s1,1,4,s2)9.字符替換函數(shù)格式: chrtran(字符表達(dá)式1,字符表達(dá)式2,字符表達(dá)式3)功能:當(dāng)?shù)谝粋€字符串中的一個或多個相同字符與第二個字符串中的某個字符相匹配時(shí),就用第三個字符串中的對應(yīng)字符(與第二個字符串中的那個字符具有相同位置)替換

33、這些字符。例 x1=chrtran(“abcdad”,”acd”,”x12”) y1=chrtran(“計(jì)算機(jī)abc”,”計(jì)算機(jī)”,”電腦”) z1=chrtran(“大家好”,”大家”,”您”)?x1,y1,z110.字符串匹配函數(shù)格式:like(字符表達(dá)式1,字符表達(dá)式2)功能:比較兩個字符串對應(yīng)位置上的字符,若所有對應(yīng)字符都相匹配,函數(shù)返回邏輯真,否則返回邏輯假。字符表達(dá)式1中可以包含通配符*和?例 store “abc” to xstore “abcd” to y ?like(“ab*”,x),like(“ab*”,y),like(x,y),like(“?b?”,x),like(“ab

34、c”,x)2.3.3 日期和日期時(shí)間函數(shù)1. 系統(tǒng)日期和時(shí)間格式: date() time() datetime() 07/29/02 19:10:10 07/29/02 19:10:102. 求年份、月份和天數(shù)函數(shù)格式:year(日期表達(dá)式|日期時(shí)間表達(dá)式) month (日期表達(dá)式|日期時(shí)間表達(dá)式) day (日期表達(dá)式|日期時(shí)間表達(dá)式) 這三個函數(shù)的返回值為數(shù)值型。?year(date()-year(出生日期)2.3.4 數(shù)據(jù)類型轉(zhuǎn)換函數(shù)1.數(shù)值轉(zhuǎn)換成字符串 格式:str(數(shù)值表達(dá)式,長度,小數(shù)位數(shù))如:stor -123.456 to n? str(n,9,2), str(n,6,2)

35、, str(n,3), str(n,6), str(n)顯結(jié)果: -123.46 -123.5 * -123 -1232. 字符串轉(zhuǎn)換成數(shù)值格式: val()如字符串第一個字符不是數(shù)字字符,則返回0.00val(“123year567”)-123.00val(“year567”)-0.003. 字符串轉(zhuǎn)換成日期或日期時(shí)間格式: ctod() 轉(zhuǎn)換為日期 ctot() 轉(zhuǎn)換為日期時(shí)間如:“2001/03/35”4. 日期或日期時(shí)間轉(zhuǎn)換成字符串格式: dtoc(| ,1 ) ttoc(,1 )如日期時(shí)間t為08/18/01 11:54:38 pm ?dtoc(t) “08/18/01”?dtoc(

36、t,1) “20010818”?ttoc(t) “08/18/01 11:54:38 pm”?ttoc(t,1) “200108182354385. 宏替換函數(shù)格式: &字符型變量.作用:替換出字符型變量的內(nèi)容,既&的值是變量中的字符串.例如: a=257 m=“a+1” ?m ?&m2.3.5 測試函數(shù)1. 值域測試函數(shù)格式:between(表達(dá)式t,表達(dá)式l,表達(dá)式h)功能: 表達(dá)式l=表達(dá)式表達(dá)式t4,200,300)-20010. 記錄刪除測試格式:dele()功能:記錄指針?biāo)傅漠?dāng)前記錄是否有刪除標(biāo)記“*”,若有為真,否則為假.歷年考題1 有如下賦值語句a=“

37、計(jì)算機(jī)”,b=“微型”,結(jié)果為微型機(jī)的表達(dá)式是()a b+left(a,3) b b+right(a,1) c b+left(a,5,2) d b+right(a,2)2命令?len(space(3)-space(2)的結(jié)果是a)1 b)2 c)3 d)5 3想要將日期型或日期時(shí)間型數(shù)據(jù)中的年份用4位數(shù)字顯示,應(yīng)當(dāng)使用設(shè)置命令a)set century on b)set century offc)set century to 4 d)set century of 44在visual foxpro中,宏替換可以從變量中替換出a)字符串 b)數(shù)值c)命令 d)以上三種都可能5在下面的visual

38、foxpro表達(dá)式中,運(yùn)算結(jié)果不為邏輯真的是a)empty(space(0) b)like(xy*,xyz)c)at(xy,abcxyz) d)isnull(.nuill.) 24程序與程序文件2.4.1程序的概念 學(xué)習(xí)vfp的目的就是要使用它的命令來組織和處理數(shù)據(jù)、完成一些具體任務(wù)。 許多任務(wù)單靠一條命令是無法完成的,而是要執(zhí)行一組命令來完成。如果采用在命令窗口逐條輸入命令的方式進(jìn)行,不僅非常麻煩,而且容易出錯,這時(shí)應(yīng)該采用程序的方式。 程序是能夠完成一定任務(wù)的命令的有序集合。這組命令被存放在稱為程序文件或命令文件的文本文件中。當(dāng)運(yùn)行程序時(shí),系統(tǒng)會按照一定的次序自動執(zhí)行包含在程序文件中的命令

39、。 與在命令窗口逐條輸入命令相比,采用程序方式有如下好處: 可以利用編輯器,方便地輸入、修改和保存程序。 可以用多種方式、多次運(yùn)行程序。 可以在一個程序中調(diào)用另一個程序。 例 假定學(xué)號的前兩位為入學(xué)年份(如01代表2001年),第3、4位為專業(yè)代碼。編寫命令文件testl.prg,分別統(tǒng)計(jì)所有學(xué)生和2001年入學(xué),專業(yè)代碼為03的學(xué)生選修課程號為101課程的平均成績。 *分別統(tǒng)計(jì)所有學(xué)生和指定學(xué)生的平均成績 *分別統(tǒng)計(jì)所有學(xué)生和指定學(xué)生的平均成績 set talk off &決定 vfp 是否顯示命令執(zhí)行狀態(tài)信息。 open data xsxk 打開數(shù)據(jù)庫xsxk use 選課 in

40、0 在最小號空閑工作區(qū)打開選課表 select avg(成績) from 選課 where 課程號=“101” ; into array ml select avg(成績) from 選課 where 課程號=“101” ; and left(學(xué)號,2)=“01”; and subs(學(xué)號,3,2)=“03” into array m2 clear 清除vfp主窗口中顯示的全部內(nèi)容 ?”所有學(xué)生的平均分:”,m1(1,1) ?”指定學(xué)生的平均分:”,m2(1,1) close database 關(guān)閉當(dāng)前數(shù)據(jù)庫 set talk on return在命令窗口輸入:do test1下面是對此程序的

41、幾點(diǎn)說明: 命令注釋:(不會影響程序的功能) 以note或*開頭的代碼行為注釋行。命令行后也可添加注釋,這種注釋以符號開頭。 set talk on|off命令 許多數(shù)據(jù)處理命令(如averagesum、sql等)在執(zhí)行時(shí)都會返回一些有關(guān)執(zhí)行狀態(tài)的信息,這些信息通常會顯示在vfp主窗口、狀態(tài)欄或用戶自定義窗口里。set talk命令用以設(shè)置是(on)、否(off)顯示這些信息。默認(rèn)值為on。 命令分行 程序中每條命令都以回車鍵結(jié)尾,一行只能寫一條命令。若命令需要分行書寫,應(yīng)在一行終了時(shí)鍵入續(xù)行符“;”,再按回車鍵。 在vfp中,程序代碼除了可以保存在程序文件中,還可以出現(xiàn)在報(bào)表設(shè)計(jì)器和菜單設(shè)計(jì)

42、器的過程代碼窗口中、表單設(shè)計(jì)器和類設(shè)計(jì)器的事件或方法代碼窗口中。 另外,還可以在命令窗口中像執(zhí)行程序一樣一次執(zhí)行多條命令。方法是: 在命令窗口中選擇需要執(zhí)行的多條命令。 按enter鍵,或單擊鼠標(biāo)右鍵并在彈出的快捷菜單中選擇“運(yùn)行所選區(qū)域”。242程序文件的建立與執(zhí)行1程序文件的建立與修改 程序文件的建立與修改一般是通過調(diào)用系統(tǒng)內(nèi)置的文本編輯器來進(jìn)行的。 要建立程序文件,可按以下步驟操作: 從“文件”菜單中選擇“新建”命令,然后在“新建”對話框中選擇“程序”單選按鈕,并單擊“新建文件”命令按鈕。 在文本編輯窗口中輸入程序內(nèi)容。這里的編輯操作與普通文本文件的編輯操作沒有什么不同。當(dāng)然,這里輸入的

43、是程序內(nèi)容,是一條條命令。與在命令窗口輸入命令不同,這里輸入的命令是不會被馬上執(zhí)行的。 保存程序文件。從“文件”菜單中選擇“保存”命令或按ctr+w鍵,然后在“另存為”對話框中指定程序文件的存放位置和文件名,并單擊“保存”命令按鈕。 程序文件的默認(rèn)擴(kuò)展名是程序文件的默認(rèn)擴(kuò)展名是prg要打開、修改程序文件,可按下列方法操作: 從“文件”菜單中選擇“打開”命令。 在“文件類型”列表框中選擇“程序”。 選定要修改的文件,并單擊“確定”按鈕。 編輯修改后,保存或按ctrl十w鍵保存。 也可用命令方式建立和修改程序文件。命令格式為: modify command 文件名 這里,文件名前可以指定保存文件的

44、路徑。如果沒有給定擴(kuò)展名,系統(tǒng)自動加上默認(rèn)擴(kuò)展名prg。 執(zhí)行該命令時(shí),系統(tǒng)首先檢索磁盤文件。如果指定文件存在,則打開修改;否則,系統(tǒng)認(rèn)為是要建立一個指定了名字的文件。2執(zhí)行程序文件 建立好程序文件,就可以用多種方式、多次執(zhí)行它。下面是兩種常用的方式。 菜單方式: 從“程序”菜單中選擇“運(yùn)行”命令,打開“運(yùn)行”對話框。 從文件列表框中選擇要運(yùn)行的程序文件,并單擊“運(yùn)行”命令按鈕。 命令方式: do 文件名 (文件名可不帶擴(kuò)展名) 該命令既可以在命令窗口發(fā)出,也可以出現(xiàn)在某個程序文件中,這樣就使得一個程序在執(zhí)行的過程中還可以調(diào)用執(zhí)行另一個程序。 當(dāng)程序文件被執(zhí)行時(shí),文件中包含的命令將被依次執(zhí)行,

45、直到所有的命令被執(zhí)行完畢,或者執(zhí)行到以下命令: cancal:終止程序運(yùn)行,清除所有的私有變量,返回命令窗口。 do:轉(zhuǎn)去執(zhí)行另一個程序。 return:結(jié)束當(dāng)前程序的執(zhí)行,返回到調(diào)用它的上級程序,若無上級程序則返回到命令窗口。 quit:退出vfp系統(tǒng),返回到操作系統(tǒng)。 vfp程序文件通過編譯、連編,可以產(chǎn)生不同的目標(biāo)代碼文件,這些文件具有不同的擴(kuò)展名。 當(dāng)用do執(zhí)行程序文件時(shí),如果沒有指定擴(kuò)展名則按.exe-.fxp-.prg順序找相應(yīng)的文件名。 如果用do命令執(zhí)行查詢文件、菜單文件,那么文件名中必須要包括擴(kuò)展名。243簡單的輸入輸出命令 一個程序一般都包含數(shù)據(jù)輸入、數(shù)據(jù)處理和數(shù)據(jù)輸出三個

46、部分。數(shù)據(jù)的輸入和輸出代碼設(shè)計(jì)是編寫許多程序都要面臨的工作。1input命令 命令格式: input 字符表達(dá)式 to 內(nèi)存變量 該命令等待用戶從鍵盤輸入數(shù)據(jù),用戶可以輸入任意合法的表達(dá)式。當(dāng)用戶以回車鍵結(jié)束輸入時(shí),系統(tǒng)將表達(dá)式的值存入指定的內(nèi)存變量,程序繼續(xù)運(yùn)行。功能注釋: 如果選用字符表達(dá)式,那么系統(tǒng)會首先顯示該表達(dá)式的值,作為提示信息。 輸入的數(shù)據(jù)可以是常量、變量,也可以是更為一般的表達(dá)式。但不能不輸入任何內(nèi)容直接按回車鍵。 輸入字符串時(shí)必須加定界符,輸入邏輯型常量時(shí)要用圓點(diǎn)定界(如.t.,.f.),輸入日期時(shí)間型常量時(shí)要用大括號 2001-03-01。 例 編寫命令文件test2.pr

47、g,查找指定日期以后出生的學(xué)生。 open data xsxk use student clear input 請輸入日期 to mrq select 學(xué)號,姓名,出生日期 from student; where 出生日期mrq; nowait &結(jié)果顯示在查詢窗口里,并繼續(xù)往下執(zhí)行 return在命令窗口輸入命令:do test2 按回車會顯示“請輸入日期:”等待用戶輸入日期 2accept命令命令格式: accept to 該命令等待用戶從鍵盤輸入字符串。當(dāng)用戶以回車鍵結(jié)束輸入時(shí),系統(tǒng)將該字符串存入指定的內(nèi)存變量,程序繼續(xù)運(yùn)行。 功能注釋: 如果選用,那么系統(tǒng)會首先顯示該表達(dá)式的值

48、,作為提示信息。 該命令只能接收字符串。用戶在輸入字符串時(shí)不需要加定界符;否則,系統(tǒng)會把定界符作為字符串本身的一部分。 如果不輸入任何內(nèi)容而直接按回車鍵,系統(tǒng)會把空串賦給指定的內(nèi)存變量。 3wait命令命令格式: wait字符表達(dá)式to內(nèi)存變量 windowat行,列 nowaitclear|nocleartimeout數(shù)值表達(dá)式 該命令顯示字符表達(dá)式的值作為提示信息,暫停程序的執(zhí)行,直到用戶按任意鍵或單擊鼠標(biāo)時(shí)繼續(xù)程序的執(zhí)行。 wait ”輸入無效,請重新輸;入” window timeout 5功能注釋: 如果字符表達(dá)式值為空串,那么不顯示提示信息。如果無字符表達(dá)式,則顯示默認(rèn)的提示信息“

49、按任意鍵繼續(xù)”。 內(nèi)存變量用來保存用戶鍵入的字符,其類型為字符型。若用戶按的是enter鍵或單擊了鼠標(biāo),那么內(nèi)存變量中保存的將是空串。 一般情況下,提示信息被顯示在vfp主窗口或當(dāng)前用戶自定義窗口里。如果指定了window子句,則會出現(xiàn)一個wait提示窗口,用以顯示提示信息。提示窗口一般定位于主窗口的右上角,也可用at短語指定其在主窗口中的位置。 若選用nowait短語,系統(tǒng)將不等待用戶按鍵,直接往下執(zhí)行。 timeout子句用來設(shè)定等待時(shí)間(秒數(shù))。一旦超時(shí)就不再等待用戶按鍵,自動往下執(zhí)行。25程序的基本結(jié)構(gòu) 程序結(jié)構(gòu)是指程序中命令或語句執(zhí)行的流程結(jié)構(gòu)。程序的三種基本結(jié)構(gòu): 順序結(jié)構(gòu)、選擇結(jié)

50、構(gòu)和循環(huán)結(jié)構(gòu)。 順序結(jié)構(gòu)是最簡單的程序結(jié)構(gòu),它按命令在程序中出現(xiàn)的先后次序依次執(zhí)行。但是,絕大多數(shù)問題僅用順序結(jié)構(gòu)是無法解決的,還要用到選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。251選擇結(jié)構(gòu)支持選擇結(jié)構(gòu)的語句包括條件語句和分支語句。 1條件語句 語句格式: if條件語句序列1 else語句序列2 endif 該語句根據(jù)條件是否成立從兩組代碼中選擇一組執(zhí)行。 有else子句時(shí),兩組可供選擇的語句是語句序列1和語句序列2。如果條件成立,則執(zhí)行語句序列1;否則,執(zhí)行語句序列2。然后轉(zhuǎn)向endif的下一條語句。 無else子句時(shí),可看作第二組代碼不包含任何命令。如果條件成立,則執(zhí)行語句序列l(wèi),然后轉(zhuǎn)向endif的下一條語

51、句;否則直接轉(zhuǎn)向endif的下一條語句去執(zhí)行。 if和endif必須成對出現(xiàn),if是本結(jié)構(gòu)的入口,endif是本結(jié)構(gòu)的出口。 條件語句可以嵌套,但不能出現(xiàn)交叉。例 某地至北京的郵路里程為1043km,通過郵政局向北京城區(qū)寄交“特快專遞”郵件,應(yīng)在24小時(shí)內(nèi)到達(dá),計(jì)費(fèi)標(biāo)準(zhǔn)每克為0.05元,但超過100克后,超出每克為0.02元。試編寫程序計(jì)算郵費(fèi)。 w*0.05 (w100)方法1:根據(jù)郵件重量是小于等于100克還是大于100克,用不同的公式計(jì)算郵費(fèi)。 input ”請輸入郵件重量:” to w if w100 fw*005 else f100*0.05十(w-100)* 0.02 endif

52、?”郵費(fèi)為:”,f方法2:先按第一個公式計(jì)算郵費(fèi),若發(fā)現(xiàn)郵件重量大于100克,再按第二個公式計(jì)算郵費(fèi)。 input ”請輸入郵件重量:” to w fw*005 if w100 f100* 0.05十(w100)* 0.02 endif ?”郵費(fèi)為:”,f例 編寫命令文件test3.prg,請用戶輸入待查詢學(xué)生的姓名,顯示該學(xué)生基本情況。 open data 學(xué)生管理 use student in 1 select student clear accept ”請輸入待查學(xué)生姓名:“ to name locate for 姓名name if .not. eof() ?”姓名:“十姓名 ?”性別:

53、“十iif(性別,”男”,”女”) ?”出生日期:”十dtoc(出生日期,1) else ?”查無此人!” endif close data return例:編寫程序,實(shí)現(xiàn)如下功能: 程序運(yùn)行時(shí)首先等待用戶輸入一個分?jǐn)?shù),然后判斷該分?jǐn)?shù)的所對應(yīng)級別,若大于等于90,則輸出”優(yōu)”;若大于等于80小于90,則輸出”良”;若大于等于60小于80,則輸入出”中等”;若小于60,則輸出”差”。2分支語句 分支語句實(shí)現(xiàn)一種擴(kuò)展的選擇結(jié)構(gòu),它可以根據(jù)條件從多組代碼中選擇一組執(zhí)行。 語句格式: docase case條件1 語句序列1 case條件2 case條件n 語句序列n otherwise 語句序列 e

54、ndcase 語句執(zhí)行時(shí),依次判斷case后面的條件是否成立。當(dāng)發(fā)現(xiàn)某個case后面的條件成立時(shí),就執(zhí)行該case和下一個case之間的命令序列,然后執(zhí)行endcase后面的命令。如果所有的條件都不成立,則執(zhí)行otherwise與endcase之間的命令序列,然后轉(zhuǎn)向endcase后面的語句。 功能注釋: 不管有幾個case條件成立,只有最先成立的那個case條件的對應(yīng)命令序列被執(zhí)行。 如果所有case條件都不成立,且沒有otherwis子句,則直接跳出本結(jié)構(gòu)。 do case和endcase必須成對出現(xiàn),do case是本結(jié)構(gòu)的入口,endcase是本結(jié)構(gòu)的出口。252循環(huán)結(jié)構(gòu) 循環(huán)結(jié)構(gòu)也稱

55、為重復(fù)結(jié)構(gòu),是指程序在執(zhí)行的過程中,其中的某段代碼被重復(fù)執(zhí)行若干次。被重復(fù)執(zhí)行的代碼段,通常稱之為循環(huán)體。vfp支持循環(huán)結(jié)構(gòu)的語句包括: do whileenddo、 forendfor scan endscan語句。 1do while-enddo語句語句格式: do while條件 loop 語句序列2 exit 語句序列3 enddo 執(zhí)行該語句時(shí),先判斷dowhile處的循環(huán)條件是否成立,如果條件為真,則執(zhí)行do while與enddo之間的命令序列(循環(huán)體)。當(dāng)執(zhí)行到enddo時(shí),返回到do while,再次判斷循環(huán)條件是否為真,以確定是否再次執(zhí)行循環(huán)體。若條件為假,則結(jié)束該循環(huán)語句

56、,執(zhí)行enddo后面的語句。條件循環(huán)體enddo后面語句真假條件循環(huán)體loopexitenddo后面語句假真功能注釋: 如果第一次判斷條件時(shí),條件即為假,則循環(huán)體一次都不執(zhí)行。 如果循環(huán)體包含loop命令,那么當(dāng)遇到loop時(shí),就結(jié)束循環(huán)體的本次執(zhí)行,不再執(zhí)行其后面的語句,而是轉(zhuǎn)回dowhile處重新判斷條件。 如果循環(huán)體包含exit命令,那么當(dāng)遇到exit時(shí),就結(jié)束該語句的執(zhí)行,轉(zhuǎn)去執(zhí)行enddo后面的語句。 通常loop或exit出現(xiàn)在循環(huán)體內(nèi)嵌套的選擇語句中,根據(jù)條件來決定是loop回去,還是exit出去。例 計(jì)算s1+2+3+100。 解題的思路歸納為兩點(diǎn): 引進(jìn)變量s和i。s用來保存

57、累加的結(jié)果,初值為0;i既作為被累加的數(shù)據(jù),也作為控制循環(huán)條件是否成立的變量,初值為1。 重復(fù)執(zhí)行命令ss+i和i=i+1,直至i的值超過100。每一次執(zhí)行,s的值增加i,i的增加l。 s=0 i=1 do while i=100 s=s+i i=i+1 enddo ?s,s例 逐條輸出1982年出生的學(xué)生記錄。 方法1:先用locate命令將記錄指針定位于滿足條件的第一條記錄上,然后進(jìn)入循環(huán)語句。每次執(zhí)行循環(huán)體,先顯示當(dāng)前記錄的內(nèi)容,然后用continue命令將記錄指針定位于滿足條件的下一條記錄上。 clear open data xsxk use student in 0 select s

58、tudent locate for year(出生日期)=1977 do while .not. eof() display &顯示當(dāng)前表當(dāng)前記錄的內(nèi)容 wait continue enddo close database use方法2:先使用索引,再用seek命令將記錄指針定位于滿足條件的第一條記錄上,然后進(jìn)入循環(huán)語句。每次執(zhí)行循環(huán)體,先顯示當(dāng)前記錄的內(nèi)容,然后用skip命令將記錄指針移動到下一條記錄上.注意,在索引表達(dá)式上相同的記錄(1982年出生的記錄)一定是排在一起的。 clear use student index on year(出生日期) tag csnf seek l9

59、82 do while year(出生日期)1977 display wait skip enddo use2forendfor語句 該語句通常用于實(shí)現(xiàn)循環(huán)次數(shù)已知情況下的循環(huán)結(jié)構(gòu)。 語句格式: for=tostep步長 循環(huán)體 endfor|next 執(zhí)行該語句時(shí),首先將初值賦給循環(huán)變量,然后判斷循環(huán)條件是否成立(與 的比較) 。若循環(huán)條件成立,則執(zhí)行循環(huán)體,然后循環(huán)變量增加一個步長值,并再次判斷循環(huán)條件是否成立,以確定是否再次執(zhí)行循環(huán)體。若循環(huán)條件不成立,則結(jié)束該循環(huán)語句,執(zhí)行endfor后面的語句。例 計(jì)算s1+2+3+100。 重復(fù)執(zhí)行命令ss+i,并且i的值從1100。s=0。程序:

60、s=0for i=1 to 100s=s+iendfor?s=,s功能注釋: 步長的默認(rèn)值為1。 初值、終值和步長都可以是數(shù)值表達(dá)式。但這些表達(dá)式僅在循環(huán)語句執(zhí)行開始時(shí)被計(jì)算一次。在循環(huán)語句的執(zhí)行過程中,初值、終值和步長是不會改變的。 可以在循環(huán)體內(nèi)改變循環(huán)變量的值,但這會影響循環(huán)體的執(zhí)行次數(shù)。 exit和loop命令同樣可以出現(xiàn)在該循環(huán)語句的循環(huán)體內(nèi)。當(dāng)執(zhí)行到loop命令時(shí),結(jié)束循環(huán)體的本次執(zhí)行,然后循環(huán)變量增加一個步長值,并再次判斷循環(huán)條件是否成立。例 找出100999之間的所有“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身(如153=13+53+33)。 解此題的關(guān)鍵是要知道如何分離出一個三位數(shù)中的各位數(shù)字。這里給出兩種方法,其中i代表三位數(shù),a、b

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論