循環(huán)結(jié)構(gòu)也稱(chēng)為重復(fù)結(jié)構(gòu)_第1頁(yè)
循環(huán)結(jié)構(gòu)也稱(chēng)為重復(fù)結(jié)構(gòu)_第2頁(yè)
循環(huán)結(jié)構(gòu)也稱(chēng)為重復(fù)結(jié)構(gòu)_第3頁(yè)
循環(huán)結(jié)構(gòu)也稱(chēng)為重復(fù)結(jié)構(gòu)_第4頁(yè)
循環(huán)結(jié)構(gòu)也稱(chēng)為重復(fù)結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 循環(huán)結(jié)構(gòu)也稱(chēng)為重復(fù)結(jié)構(gòu),是指按照一定的條件重復(fù)執(zhí)行具有特定功能的一段程序。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序的第三種基本結(jié)構(gòu),主要用來(lái)處理有規(guī)律的重復(fù)運(yùn)算。7.1 概述 【例7.1】 計(jì)算并輸出1+2+3+100的和。 【例7.2】假設(shè)某個(gè)單位要進(jìn)行工資調(diào)整?,F(xiàn)將工資數(shù)據(jù)庫(kù)GZ.DBF 中職稱(chēng)為“工人”的基本工資增加10元,將職稱(chēng)為“助工”的基本工資增加15元,將職稱(chēng)為“工程師”的基本工資增加25元,將職稱(chēng)為“高工”的基本工資增加30元,并對(duì)各類(lèi)調(diào)資人數(shù)進(jìn)行統(tǒng)計(jì)。 循環(huán)結(jié)構(gòu)是由以下三部分組成的: 設(shè)置初值:指對(duì)循環(huán)操作中使用的一些內(nèi)存變量賦初值,也稱(chēng)為循環(huán)的初始化。 循環(huán)體:指每次循環(huán)要重復(fù)執(zhí)行的操作。

2、循環(huán)控制條件:指決定循環(huán)是否執(zhí)行的條件,可以用一個(gè)關(guān)系表達(dá)式或邏輯表達(dá)式來(lái)表示。當(dāng)循環(huán)控制條件為“真”時(shí),執(zhí)行循環(huán)體,否則將退出循環(huán)。 7.2 循環(huán)結(jié)構(gòu)的實(shí)現(xiàn)命令 Foxpro提供了三類(lèi)循環(huán)命令,即DO WHILE循環(huán)、 FOR循環(huán)和SCAN循環(huán)。 7.2.1 DO WHILE循環(huán) 【格式】 DO WHILE ENDDO 其中,“DO WHILE”和“ENDDO”為關(guān)鍵字,表示循環(huán)控制條件, 可以是關(guān)系表達(dá)式或邏輯表達(dá)式,為DO WHILE循環(huán)的重復(fù)執(zhí)行部分,由一條或多條Foxpro命令組成,也可以為三種基本結(jié)構(gòu)。 【功能】當(dāng)成立時(shí)執(zhí)行循環(huán)體,否則將退出循環(huán)。【說(shuō)明】 “DO WHILE”和“

3、ENDDO”分別表示循環(huán)結(jié)構(gòu)的入口和出口, 二者必須一起使用才能構(gòu)成循環(huán)結(jié)構(gòu),缺一不可。 若循環(huán)條件一開(kāi)始就不成立,則循環(huán)體一次也不執(zhí)行。 在循環(huán)體內(nèi)必須至少有一條命令與循環(huán)控制條件發(fā)生聯(lián)系,其執(zhí)行結(jié)果應(yīng)當(dāng)改變循環(huán)控制條件,使循環(huán)執(zhí)行若干次后能夠正常結(jié)束,否則將產(chǎn)生“死循環(huán)”(永無(wú)休止的循環(huán))。 編程時(shí),DO WHILE 和 ENDDO應(yīng)分別各占一行?!纠?.3】用DO WHILE循環(huán)編寫(xiě)例7.1的程序?!纠?.4】用DO WHILE循環(huán)編寫(xiě)例7.2的程序。7.2.2 FOR循環(huán) 【格式】 FOR = TO STEP ENDFORNEXT 其中,F(xiàn)OR和ENDFOR(或NEXT)為關(guān)鍵字,分別

4、表示循環(huán)的開(kāi)始(入口)和結(jié)束(出口)。循環(huán)變量為一內(nèi)存變量,在FOR循環(huán)中要指定循環(huán)變量的初值、終值和增量(或步長(zhǎng)), 、和可以是數(shù)值型常量、變量或表達(dá)式。為FOR循環(huán)的重復(fù)執(zhí)行部分,由一條或多條Foxpro命令組成,也可以為三種基本結(jié)構(gòu)。 【功能】實(shí)現(xiàn)指定次數(shù)的計(jì)數(shù)循環(huán)。 FOR循環(huán)的執(zhí)行過(guò)程如下: 將循環(huán)變量賦初值,即循環(huán)變量=循環(huán)變量初值,并記下終值和增量。 將循環(huán)變量的值與終值比較,若“超過(guò)”終值,則退出FOR循環(huán),否則執(zhí)行循環(huán)體。 執(zhí)行ENDFOR(或NEXT)命令,將循環(huán)變量增加一個(gè)增量,即循環(huán)變量=循環(huán)變量+循環(huán)變量增量。 將增值后的循環(huán)變量再與終值比較,即重復(fù)、,直到循環(huán)變量的

5、值“超過(guò)”終值為止。 【說(shuō)明】 FOR和ENDFOR(或NEXT)必須成對(duì)出現(xiàn),二者缺一不可。 FOR循環(huán)中循環(huán)變量的增量可以為正,也可以為負(fù)。為正時(shí)表示遞增循環(huán), 即循環(huán)變 量的初值循環(huán)變量的終值。為負(fù)時(shí)表示遞減循環(huán),即循環(huán)變量的初值循環(huán)變量的終值。當(dāng)增量為1時(shí),可以省略STEP。FOR循環(huán)的執(zhí)行次數(shù)為INT(終值-初值)/增量+1)ENDFOR(或NEXT)命令有二個(gè)作用:將循環(huán)變量增加一個(gè)增量;將增值后的循環(huán)變量再次與終值進(jìn)行比較。 FOR循環(huán)的結(jié)束條件是循環(huán)變量的值“超過(guò)”終值,而不是等于終值。對(duì)于遞增循環(huán), 循環(huán)結(jié)束條件是循環(huán)變量的值大于終值;對(duì)于遞減循環(huán),循環(huán)結(jié)束條件是循環(huán)變量的值

6、小于 終值。例:求n! (prog7_5.prg) 7.2.3 SCAN循環(huán) 【格式】 SCAN NOOPTIMIZE FOR WHILE ENDSCAN 其中,SCAN和ENDSCAN分別表示循環(huán)的開(kāi)始和結(jié)束,選項(xiàng)指定SCAN 命令所要掃描的數(shù)據(jù)庫(kù)的范圍,可以是ALL、NEXT n、REST或RECORD n,缺省范圍為ALL,即整個(gè)數(shù)據(jù)庫(kù)。帶FOR可掃描指定范圍內(nèi)滿(mǎn)足條件的數(shù)據(jù),使用WHILE可決定何時(shí)結(jié)束SCAN循環(huán)?!竟δ堋繉?duì)當(dāng)前數(shù)據(jù)庫(kù)中指定范圍內(nèi)滿(mǎn)足條件的記錄進(jìn)行掃描,并按設(shè)置的條件來(lái)執(zhí)行循環(huán)體?!菊f(shuō)明】 SCAN和ENDSCAN必須成對(duì)出現(xiàn),二者缺一不可。 SCAN循環(huán)主要用于數(shù)據(jù)

7、庫(kù)的處理,因此在執(zhí)行SCAN命令之前,必須首先打開(kāi)要處理的數(shù)據(jù)庫(kù)。 SCAN循環(huán)能夠自動(dòng)將數(shù)據(jù)庫(kù)記錄指針移到下一條記錄并測(cè)試是否滿(mǎn)足當(dāng)前的條件,所以在SCAN.ENDSCAN的循環(huán)體內(nèi),不需要使用記錄指針移動(dòng)命令SKIP。7.2.4 循環(huán)體中的兩條專(zhuān)用命令(EXITLOOP) 在Foxpro的DO WHILE循環(huán)、FOR循環(huán)和SCAN循環(huán)中,可以使用EXIT命令強(qiáng)行退出循環(huán)體,也可以使用LOOP命令返回循環(huán)起始處重新判斷循環(huán)條件。 跳出循環(huán)命令EXIT 【格式】EXIT 【功能】執(zhí)行EXIT命令,跳出DO WHILE、FOR和SCAN循環(huán),轉(zhuǎn)向ENDDO、ENDFOR(或NEXT)、ENDSC

8、AN后面的第一條命令處繼續(xù)執(zhí)行。 【說(shuō)明】 EXIT命令只能出現(xiàn)在某個(gè)循環(huán)的循環(huán)體中,不能單獨(dú)使用。通常將EXIT與單分支命令I(lǐng)FENDIF聯(lián)用,作為退出循環(huán)的第二個(gè)條件,即當(dāng)單分支命令中的條件成立時(shí), 忽略位于EXIT和ENDDO、ENDFOR(或NEXT)、ENDSCAN之間的所有命令,直接轉(zhuǎn)向ENDDO、ENDFOR (或NEXT)、ENDSCAN后面的第一條命令處繼續(xù)執(zhí)行。不管EXIT命令后面是否還有其它命令,也不管當(dāng)前的循環(huán)條件是否成立,都將無(wú)條件退出循環(huán)體(例prog7_8.prg) 重新判斷循環(huán)條件命令LOOP 【格式】LOOP 【功能】執(zhí)行LOOP命令,轉(zhuǎn)向DO WHILE、F

9、OR和SCAN命令的命令行重新判斷循環(huán)條件。 【說(shuō)明】 如果循環(huán)體中LOOP命令后面還有其它命令,則這些命令將被忽略。 LOOP命令只能出現(xiàn)在某個(gè)循環(huán)的循環(huán)體中,不能單獨(dú)使用。通常與單分支命令 IF ENDIF聯(lián)用,構(gòu)成循環(huán)短路,忽略位于LOOP和ENDDO、ENDFOR(或NEXT)、ENDSCAN 之間的所有命令,直接轉(zhuǎn)向DO WHILE、FOR和SCAN命令的命令行重新判斷循環(huán)條件, 以決定下一次循環(huán)是否執(zhí)行。(prog7_9) 7.2.5 幾種常用的循環(huán)模式例prog5_4.prg 7.3 循環(huán)的嵌套7.3.1 循環(huán)嵌套的概念和執(zhí)行過(guò)程 【例7.10】輸出如下的紅星圖案。 7.3.2

10、循環(huán)嵌套的有關(guān)規(guī)定 Foxpro的DO WHILE循環(huán)、FOR循環(huán)和SCAN循環(huán)可以相互嵌套,但必須注意DO WHILE與ENDDO、FOR與ENDFOR(或NEXT)、SCAN與ENDSCAN之間的匹配關(guān)系。 內(nèi)循環(huán)必須完全嵌套在外循環(huán)的循環(huán)體內(nèi),不能夠互相交叉。 例:求 1!+2!+10! 并列FOR循環(huán)的循環(huán)變量可以同名,嵌套循環(huán)的循環(huán)變量不能同名。 FOR I=1 TO 10 FOR J=1 TO 5 . ENDFOR FOR J=1 TO 5 . ENDFOR ENDFOR 兩個(gè)內(nèi)循環(huán)屬于并列的循環(huán),可以使用相同的循環(huán)變量J,而下面的用法是錯(cuò)誤的。 FOR I=1 TO 10 FOR

11、 I=1 TO 10 ?* ENDFOR ? ENDFOR 當(dāng)循環(huán)結(jié)構(gòu)中出現(xiàn)分支結(jié)構(gòu)時(shí),分支結(jié)構(gòu)必須完全嵌套在該循環(huán)的循環(huán)體內(nèi); 反過(guò)來(lái),當(dāng)分支結(jié)構(gòu)中出現(xiàn)循環(huán)結(jié)構(gòu)時(shí),該循環(huán)結(jié)構(gòu)也必須完全嵌套在所屬分支結(jié)構(gòu)中。例:USE STUDENT DO WHILE NOT EOF() IF MOD(編號(hào),8)=1 DISPLAY ENDIF SKIP ENDDO USE 【例7.11】給定庫(kù)文件GZK.DBF的結(jié)構(gòu)如下:Field Field Name Type Width Dec 1 工號(hào) Character 6 2 姓名 Character 6 3 性別 Character 2 4 出生年月 Date

12、 8 5 基本工資 Float 7 2 6 附加工資 Float 7 2 7 洗理費(fèi) Float 4 2 8 交通費(fèi) Float 4 2 9 書(shū)報(bào)費(fèi) Float 4 2 10 工齡 Numeric 2 11 職稱(chēng) Character 6 要求在程序中首先拷貝數(shù)據(jù)庫(kù)文件TEMP.DBF, 然后據(jù)此庫(kù)文件對(duì)基本工資字段值進(jìn)行修改。凡工齡15年及15年以上者增加65元, 否則基本工資低于200元者增加45元; 基本工資在200299之間(含200元和299元)者增加30元;其余增加25元。 【例7.12】先在Foxpro下建立數(shù)據(jù)庫(kù)文件EXAMPLE.DBF的結(jié)構(gòu), 該數(shù)據(jù)庫(kù)有三個(gè)字段: FIELD

13、1(C/2)、FIELD2(C/2)、FIELD3(C/2),然后編寫(xiě)程序向該數(shù)據(jù)庫(kù)中添加50 條記錄。其中FIELD1字段各記錄的數(shù)據(jù)從字母AZ依次順序循環(huán)取值,即A、B、C、Z、A、B、C、,F(xiàn)IELD2字段各記錄的數(shù)據(jù)從字母AZ依次隔2順序循環(huán)取值,即A、D、G、Y、B、E、Z、C、F、X,F(xiàn)IELD3字段各記錄的數(shù)據(jù)依次為:1、2、3、50。 【例7.13】給定數(shù)據(jù)庫(kù)文件GZK.DBF(數(shù)據(jù)庫(kù)結(jié)構(gòu)見(jiàn)例7.11),首先建立庫(kù)文件 ZGGZK.DBF,該庫(kù)文件只有一個(gè)字段:最高工資(F/7.2)。要求編寫(xiě)程序,找出GZK.DBF中“基本工資”與“附加工資”和最大者,并存入數(shù)據(jù)庫(kù)ZGGZK.

14、DBF的“最高工資”字段中。 【例7.14】現(xiàn)有結(jié)構(gòu)相同的三個(gè)班級(jí)學(xué)生數(shù)據(jù)庫(kù)CLASS1.DBF、CLASS2.DBF和CLASS3.DBF,其數(shù)據(jù)庫(kù)結(jié)構(gòu)如下:Field Field Name Type Width Dec 1 學(xué)號(hào) Character 4 2 姓名 Character 6 3 性別 Character 2 4 出生日期 Date 8 5 民族 Character 6 6 政治面目 Character 4 7 是否委培 Logical 1 8 來(lái)源地區(qū) Character 8 9 數(shù)學(xué) Numeric 3 10 英語(yǔ) Numeric 3 11 政治 Numeric 3 12 總分 Numeric 3 其中學(xué)號(hào)的前兩位是學(xué)生所在班級(jí)號(hào)。首先在Foxpro下建立一個(gè)統(tǒng)計(jì)數(shù)據(jù)庫(kù)TJ.DBF,該庫(kù)包括七個(gè)字段: 班級(jí)(C, 2)、男、女、黨員、團(tuán)員、群眾、少數(shù)民族, 后六個(gè)均為數(shù)值型字段(F, 3.0)。要求編寫(xiě)程序按班對(duì)學(xué)生數(shù)據(jù)進(jìn)行性別、政治面目和民族統(tǒng)計(jì),并將統(tǒng)計(jì)結(jié)果存放到TJ.DBF中。 【例7.15】在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中,兩個(gè)關(guān)系的差運(yùn)算是從一個(gè)關(guān)系中去除與另一個(gè)關(guān)系中相同的元組?,F(xiàn)有結(jié)構(gòu)相同的兩個(gè)數(shù)據(jù)庫(kù)RDBF1.DBF和RDBF2.DB

溫馨提示

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

評(píng)論

0/150

提交評(píng)論