三。循環結構:前面我們學習的順序結構和選擇結構有一個共同點,即程序語句不能重復執行。而在實際應用中,常常需要多次重復執行某些語句。這樣的需求適合于用循環語句來處理。在vfp中,提供了3種循環語句:do while循環、for循環及scan循環。
1.while循環:
格式:
do while 條件
語句序列
[loop]
[exit]
enddo
說明:
(1)."do while 條件"是循環說明語句,它標志循環的開始,并判斷循環條件是否為真值;當條件為真值時,則執行語句序列;否則跳到enddo后面的語句繼續執行。
(2).do while和enddo之間的語句序列也被稱作循環體,是需要多次重復執行的語句,由它完成規定的數據處理工作。
(3).循環語句中的可選項exit,用于退出循環語句,可放在循環體語句的任意位置上。若在循環體中加上該可選項,當執行exit時,跳出循環體去執行 enddo后面的語句。通常,exit是在條件語句控制下,當條件得到滿足時便跳出循環;否則永遠不能執行exit后面的循環體語句。
(4).可選項loop,是循環短路語句,也可以放在循環體語句的任意位置上。當執行loop時,其后的循環體語句部分不予執行,直接返回到循環起始語句。loop也通常放在條件語句的控制下。
(5).enddo和do while必須成對出現。
例:將"職工檔案"表中所有職稱是"講師"的工資加200元,副教授加150元,無職稱的加100元。
首先,我們修改一下"職工檔案"表的結構,為其增加一個"工資"字段:
在命令窗口依次執行如下命令:
use 職工檔案
modify structure
彈出"表設計器"窗口,添加一個新字段:工資 N6.1,單擊"確定",保存更改。
再執行browse命令,在彈出的browse窗口中為每條記錄的"工資"填上值,
新建一個程序文件xiugai.prg,程序文件的內容如下:
clear
use 職工檔案
do while .not.eof()
do case
case 職稱="講師"
replace 工資 with 工資+200
case 職稱="副教授"
replace 工資 with 工資+150
case 職稱="無"
replace 工資 with 工資+100
endcase
skip
enddo
use
return
程序分析:循環程序由以下4個主要部分構成:
A.循環的工作部分。它完成循環的主要工作,是循環體的主要部分。這里由do case---endcase組成。
B.循環的修改部分。它保證循環體在循環過程中,有關的量能按一定的規律變化。這里的循環修改部分是skip語句,用來實現依次操作文件的各條記錄。
C.循環的控制部分。它保證循環體語句按規定的循環次數正常執行。此例中的循環控制部分是。not.eof()邏輯表達式,它表示做完所有記錄的操作。
D.循環的初始部分。它是循環控制初值。本程序中循環控制初值是隱含的,因為打開文件后,記錄指針指向首記錄,所以操作是從首記錄開始的。
Visual FoxPro基礎教程完整版
2.for循環:在已知循環次數的情況下,使用for循環比較方便
格式:
for 變量=初值 to 變量終值 [step]步長
語句序列
[exit]
[loop]
endfor|next
功能:
在循環控制變量的初值和終值的范圍內執行循環語句,每執行一次循環,循環控制變量都要加上增量。當其值在規定范圍內時就再次執行循環體語句序列,否則結束循環,執行循環終止語句下面的語句。跳出循環和循環短路語句exit和loop意義同前。
具體執行步驟:
(1).給變量賦初值;
(2).判斷變量的值是否小于等于終值;
(3).若不是,則循環結束;
(4).若是,則執行語句序列;
(5).變量=變量+步長(若省略step,則步長=1);
(6).轉(2).
例:在屏幕上輸出乘法口訣表
程序文件內容如下:
?"九九乘法表"
?
for i=1 to 9
for j=1 to i
??alltrim(str(i))+"*"+alltrim(str(j))+"="+alltrim(str(i*j))+" "
next
?
next
3.scan循環:
格式:
scan [范圍][for 條件]
語句序列
endscan
功能:
對表中指定范圍,滿足條件的記錄執行循環體語句,每執行一次循環,記錄指針自動移動到下一條記錄。操作表時,使用該語句功能強,效率高。
例:使用scan語句編程,顯示"職工檔案"表中的女教師的姓名和職稱。
use 職工檔案
scan for .not.性別
display 姓名,性別
endscan
use
return