第6章程序設(shè)計(jì)_第1頁(yè)
第6章程序設(shè)計(jì)_第2頁(yè)
第6章程序設(shè)計(jì)_第3頁(yè)
第6章程序設(shè)計(jì)_第4頁(yè)
第6章程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩89頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第6章程序設(shè)計(jì)程序文件的建立與運(yùn)行

程序的控制結(jié)構(gòu)過(guò)程程序設(shè)計(jì)7.1程序文件的建立與運(yùn)行7.1.1程序文件的建立1.命令方式建立程序文件

MODIFYCOMMAND[<程序文件名>]

功能:打開(kāi)程序編輯窗口,修改或創(chuàng)建程序文件。

<程序文件名>指定修改或創(chuàng)建的程序文件名。命令程序文件的擴(kuò)展名是.PRG。2.在程序編輯窗口中輸入命令

[例]編寫兩個(gè)變量的加法運(yùn)算程序。步驟1:在命令窗口里輸入:

MODIFYCOMMANDCX1

步驟2:在程序編輯窗口輸入如下6條命令。

CLEAR&&將屏幕輸出窗口內(nèi)容清空

a=12&&將數(shù)值12賦值給變量ab=18&&將數(shù)值18賦值給變量bc=a+b&&將變量a與b的和計(jì)算出來(lái),賦值給變量c?a,b,c&&輸出變量a、b、c的值

RETURN&&表示程序結(jié)束。

在輸入程序時(shí),請(qǐng)注意以下幾點(diǎn):

a.一個(gè)命令語(yǔ)句中只能有一個(gè)命令動(dòng)詞;

b.每輸入完一個(gè)語(yǔ)句按“回車”鍵表示該語(yǔ)句結(jié)束;

c.每一個(gè)程序最后一般應(yīng)有一個(gè)結(jié)束語(yǔ)句,以表示該程序的結(jié)束。

3.程序文件的保存、打開(kāi)與關(guān)閉(1)程序文件的保存

按快捷鍵Ctrl+W將文件進(jìn)行保存退出。或(2)程序文件的打開(kāi)

在命令窗口里,利用“MODIFYCOMMAND<程序文件名>”命令打開(kāi)指定程序文件,進(jìn)行編輯修改。(3)程序文件的關(guān)閉

a.單擊菜單【文件(F)】→【關(guān)閉(C)】命令;

b.單擊程序編輯窗口右上角的【×】關(guān)閉按鈕;

c.在“命令”窗口里輸入命令:CLOSEALL;

d.按快捷鍵Ctrl+W,保存并關(guān)閉程序文件。7.1.2

程序的運(yùn)行

命令方式運(yùn)行程序

DO<程序文件名>

功能:將指定的程序文件調(diào)入內(nèi)存并運(yùn)行。

說(shuō)明:

a.默認(rèn)程序擴(kuò)展名為.PRG,可不必輸入;

b.該命令可在命令窗口里輸入執(zhí)行,也可以出現(xiàn)在另一個(gè)程序文件中,后者可實(shí)現(xiàn)在一個(gè)程序中調(diào)用另一個(gè)程序。如在命令窗口里輸入:DOcx1

執(zhí)行程序cx1后,將在屏幕輸出程序計(jì)算結(jié)果:

121830

在程序打開(kāi)并且為當(dāng)前程序的情況下,單擊常用工具欄上【!】命令按鈕也可以執(zhí)行程序。7.1.3程序中的輔助命令1、程序書寫規(guī)則:

一行只能寫一條語(yǔ)句。每輸入完一個(gè)語(yǔ)句按“回車”鍵表示該語(yǔ)句結(jié)束。如果希望把一行語(yǔ)句分兩行寫,應(yīng)在第一行的尾部鍵入繼行符“;”2.程序注釋命令

VFP提供了3種程序設(shè)計(jì)注釋命令:格式1:NOTE<注釋內(nèi)容>

格式2:*<注釋內(nèi)容>

功能:使NOTE或*后面的內(nèi)容成為注釋內(nèi)容。格式3:[<命令>]&&<注釋內(nèi)容>

功能:<注釋內(nèi)容>對(duì)&&左面的命令做出解釋或給出運(yùn)行結(jié)果,又稱為行尾注釋命令。

3.程序結(jié)束命令

格式1:RETURN

功能:返回到上一級(jí)模塊。如果本程序是以菜單方式或在命令窗口中調(diào)用執(zhí)行的,則返回到命令交互狀態(tài)即命令窗口。格式2:CANCEL

功能:結(jié)束程序運(yùn)行,關(guān)閉程序中所有的文件和變量,返回到交互狀態(tài)即命令窗口。格式3:QUIT

功能:關(guān)閉VisualFoxPro,返回到操作系統(tǒng)

對(duì)一個(gè)獨(dú)立程序來(lái)說(shuō),一般在最后一條語(yǔ)句要用RETURN命令,以表示程序的結(jié)束。

7.1.4交互式的輸入命令

根據(jù)解決實(shí)際問(wèn)題的需要,往往在程序運(yùn)行的過(guò)程中,由用戶向程序輸入一些數(shù)據(jù)或信息,完成這種功能的一些命令稱為交互式輸入命令。

a.[<提示信息>]是在屏幕上出現(xiàn)的提示信息。它可以是字符串,也可以是字符型內(nèi)存變量,此時(shí)該內(nèi)存變量必須預(yù)先賦值。

b.用戶在鍵盤輸入的任何字符信息都被賦值給“內(nèi)存變量”。輸入的數(shù)據(jù)將作為字符型數(shù)據(jù)處理,不需要定界符括起來(lái)。

c.輸入完需要的信息后,按Enter鍵結(jié)束本命令的輸入。如果沒(méi)有輸入其他信息,只輸入一個(gè)回車鍵,將把一個(gè)空字符賦值給內(nèi)存變量。1.字符型數(shù)據(jù)輸入命令A(yù)CCEPT

ACCEPT[<提示信息>]TO<內(nèi)存變量>功能:暫停程序的執(zhí)行,等待用戶輸入一個(gè)字符串給變量

[例]編一程序,將學(xué)生表打開(kāi),在程序運(yùn)行中輸入學(xué)生姓名,顯示指定姓名的人員記錄。該程序編寫步驟為:

步驟1:在命令窗口里輸入命令:

MODIFYCOMMANDCX2

步驟2:在打開(kāi)的程序窗口里輸入如下語(yǔ)句:

NOTE該程序查找指定姓名的人員信息。

CLEAR

USErsb

ACCEPT“請(qǐng)輸入要查找的姓名:”TOname1

LOCATEFORALLTRIM(姓名)=name1

DISPLAY

RETURN

步驟3:按Ctrl+W保存該程序

步驟4:運(yùn)行程序,在命令窗口里輸入:

DOCX2

請(qǐng)輸入要查找的姓名:李明a.[<提示信息>],同“ACCEPT”命令中的[<提示信息>]含義。b.用戶可輸入任何一個(gè)合法的數(shù)值型(N)、字符型(C)、日期型(D)、邏輯型(L)表達(dá)式,表達(dá)式的值并將該值賦值給內(nèi)存變量。c.如果輸入字符串信息,則必須加上雙引號(hào)或單引號(hào)定界符,如"ABC"。d.按Enter鍵結(jié)束輸入,系統(tǒng)將表達(dá)式的值賦值給內(nèi)存變量。e.如果輸入的是非法表達(dá)式,系統(tǒng)將提示重新輸入。2.表達(dá)式輸入命令I(lǐng)NPUT

INPUT[<提示信息>]TO<內(nèi)存變量>

功能:暫停程序的執(zhí)行,接受用戶輸入合法表達(dá)式并將表達(dá)式的值賦值給內(nèi)存變量。

[例]已知圓半徑為r,求圓面積s

假設(shè)圓的半徑為r,則計(jì)算圓面積s的公式為:s=πr2,計(jì)算圓面積公式的表達(dá)式為:3.14*r^2。程序編寫步驟如下:

步驟1:在命令窗口里輸入:

MODIFYCOMMANDCX3

步驟2:在打開(kāi)的程序窗口里輸入如下語(yǔ)句:

*該程序用于計(jì)算指定半徑的圓的面積。

CLEARINPUT"請(qǐng)輸入圓半徑r="TOrs=3.14*r^2?"該圓半徑為:",r?"該圓面積為:",sRETURN

步驟3:按Ctrl+W保存該程序文件。步驟4:在命令窗口里輸入運(yùn)行命令:

DOCX3

請(qǐng)輸入圓半徑r=18a.[<提示信息>]指定要顯示的自定義信息。若省略該參數(shù),則顯示信息“按任意鍵繼續(xù)……”。例如下列命令顯示一行有提示信息。WAIT"請(qǐng)稍后,程序?qū)⒗^續(xù)執(zhí)......“此時(shí)單擊鼠標(biāo)按鍵、按下鍵盤上任意一個(gè)按鍵,程序繼續(xù)執(zhí)行.3.程序暫停、等待接收單字符命令WAIT

WAIT[<提示信息>][TO<內(nèi)存變量

功能:暫停程序,用戶按任意鍵或者時(shí)間超過(guò)等待的秒數(shù)后,程序繼續(xù)執(zhí)行。如果包含[TO<內(nèi)存變量>]短語(yǔ),將用戶所按鍵盤字符賦值給指定的內(nèi)存變量。@<行,列>用于指定在屏幕上輸出的行、列位置坐標(biāo)。SAY<表達(dá)式>用來(lái)在屏幕上輸出表達(dá)式的值。c.GET<變量>子句用來(lái)在屏幕上輸入指定變量的值,且必須與READ命令配套使用。d.DEFAULT<表達(dá)式>子句用來(lái)給GET<變量>子句中的變量賦初值。4.定位輸出與輸入命令

@<行,列>[SAY<表達(dá)式>][GET<變量>][DEFAULT<表達(dá)式>]

在屏幕上指定行、列位置輸出指定表達(dá)式的值,并且(或者)獲得所指定變量的值。

[例]將學(xué)生表打開(kāi),新增加一條記錄部分字段內(nèi)容,增加完成后在瀏覽窗口顯示數(shù)據(jù)表記錄內(nèi)容,關(guān)閉瀏覽窗口,屏幕出現(xiàn)等待信息,等待信息關(guān)閉,清屏并關(guān)閉數(shù)據(jù)表,程序結(jié)束。該程序如下:

CLEARUSE學(xué)生表

APPENDBLANK@3,8SAY"請(qǐng)輸入新職工信息:"@4,8SAY“學(xué)號(hào):”GET學(xué)號(hào)

@5,8SAY"姓名:"GET姓名

@6,8SAY“性別:”GET性別

READBROWSEWAIT“程序?qū)⒃诎慈我怄I后關(guān)閉......。"USECLEARRETURN

[例]編寫一個(gè)程序,根據(jù)記錄號(hào)來(lái)修改學(xué)生表中的記錄。該程序如下:

CLEARUSE學(xué)生表

a=1@10,20say“請(qǐng)輸入記錄號(hào)”getareadgoa@12,20SAY“修改該同學(xué)的信息:"@14,20SAY“學(xué)號(hào):”GET學(xué)號(hào)

@16,20SAY"姓名:"GET姓名

@18,20SAY“性別:”GET性別

READBROWSEUSERETURN7.2程序的控制結(jié)構(gòu)程序設(shè)計(jì)包括三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。7.2.1順序結(jié)構(gòu)

順序結(jié)構(gòu)是程序設(shè)計(jì)中最基本的結(jié)構(gòu),該結(jié)構(gòu)按照程序命令出現(xiàn)的先后順序依次執(zhí)行。其它結(jié)構(gòu)作為它的組成部分而存在于程序之中。事實(shí)上,程序中的命令如果不進(jìn)行特殊說(shuō)明,就自動(dòng)按其前后排列順序執(zhí)行。我們以前介紹的幾個(gè)例題都是順序結(jié)構(gòu)程序設(shè)計(jì)題目。7.2.2選擇結(jié)構(gòu)

可分為簡(jiǎn)單分支結(jié)構(gòu)、雙分支選擇結(jié)構(gòu)和多分支選擇結(jié)構(gòu)。簡(jiǎn)單分支結(jié)構(gòu)

簡(jiǎn)單分支結(jié)構(gòu)是由IF語(yǔ)句開(kāi)頭,以ENDIF語(yǔ)句結(jié)束,中間由若干條命令組成的。

IF<條件>[命令序列]ENDIFa.如果<條件>的邏輯值為.T.,就依次執(zhí)行[命令序列],執(zhí)行完后就轉(zhuǎn)去執(zhí)行ENDIF之后的命令。如果<條件>的邏輯值為.F.,則直接轉(zhuǎn)到ENDIF之后的命令。b.IF語(yǔ)句和ENDIF語(yǔ)句必須成對(duì)出現(xiàn),且各占一行。c.為了程序閱讀方便,便于以后維護(hù)修改,[命令序列]部分最好采取向右縮進(jìn)書寫的方式。

問(wèn)題分析:設(shè)行李重量為W公斤,應(yīng)付運(yùn)費(fèi)為P元,則運(yùn)費(fèi)公式為:

p=0.25×w當(dāng)W≤50p=50×0.25+(w-50)×0.45當(dāng)W>50程序如下:

CLEARINPUT"請(qǐng)輸入行李重量:"TOwP=0.25*wIFw>50P=50*0.25+(w-50)*0.45ENDIF?"行李重量為:",w?"應(yīng)付運(yùn)費(fèi)為:",pRETURN

[例]鐵路托運(yùn)行李,按規(guī)定每張客票托運(yùn)行李不超過(guò)50公斤時(shí),每公斤0.25元,如超過(guò)50公斤,超過(guò)部分按每公斤0.45元計(jì)算。編寫一個(gè)程序,把行李重量輸入計(jì)算機(jī),計(jì)算出運(yùn)費(fèi)。根據(jù)以上分析,該問(wèn)題計(jì)算機(jī)程序框圖2.雙分支簡(jiǎn)單結(jié)構(gòu)

雙分支選擇結(jié)構(gòu)也是由IF語(yǔ)句開(kāi)頭,以ENDIF語(yǔ)句結(jié)束,中間由若干條命令組成的,但其中包含一條ELSE語(yǔ)句。

IF<條件>[命令序列1]ELSE[命令序列2]ENDIFa.如果<條件>的邏輯值為.T.,就執(zhí)行[命令序列1],執(zhí)行完后就轉(zhuǎn)到執(zhí)行ENDIF之后的命令。如果<條件>的邏輯值為.F.,就執(zhí)行[命令序列2],完成后轉(zhuǎn)去執(zhí)行ENDIF之后的命令。

b.ELSE語(yǔ)句單獨(dú)占一行,IF語(yǔ)句和ENDIF語(yǔ)句必須成對(duì)出現(xiàn),且各占一行。

[例]鐵路托運(yùn)行李,按規(guī)定每張客票托運(yùn)行李不超過(guò)50公斤時(shí),每公斤0.25元,如超過(guò)50公斤,超過(guò)部分按每公斤0.45元計(jì)算。編寫一個(gè)程序,把行李重量輸入計(jì)算機(jī),計(jì)算出運(yùn)費(fèi)。

CLEARINPUT"請(qǐng)輸入行李重量:"TOwIFw>50P=50*0.25+(w-50)*0.45elseP=0.25*wENDIF?"行李重量為:",w?"應(yīng)付運(yùn)費(fèi)為:",pRETURN

1、設(shè)計(jì)簡(jiǎn)單分支程序。在“員工信息表”表文件中查詢“劉明”的基本情況,如果找到,顯示信息,否則顯示“查無(wú)此人”。

1、設(shè)計(jì)簡(jiǎn)單分支程序。由鍵盤輸入一個(gè)員工的姓名,在“員工信息表”表文件中該員工的基本情況,如果找到,顯示信息,否則顯示“查無(wú)此人”。

[例]設(shè)計(jì)選擇分支程序,在“ZGSJ.DBF”表文件中查看編號(hào)為“1002”的職工的月收入,若月收入大于600元,顯示“該職工的月收入大于600”;否則顯示“該職工的月收入小于600”。

UsezgsjLocatefor編號(hào)=“1002”Iffound()Else“無(wú)此編號(hào)”endifIf月收入>600?”該職工的月收入大于600”Else?”該職工的月收入大于600”3.分支嵌套結(jié)構(gòu)

對(duì)于在分支結(jié)構(gòu)中的<命令序列>,可以包含任何VFP命令語(yǔ)句,也可以包括另外一個(gè)或幾個(gè)合法的分支結(jié)構(gòu)語(yǔ)句,也就是說(shuō)分支結(jié)構(gòu)可以嵌套。對(duì)于嵌套的分支結(jié)構(gòu)語(yǔ)句,一定注意內(nèi)外層分支結(jié)構(gòu)層次分明,即注意各個(gè)層次的IF......ELSE......ENDIF語(yǔ)句配對(duì)情況。4.多分支選擇結(jié)構(gòu)

VisualFoxPro提供了多分支結(jié)構(gòu)來(lái)解決多種不同情況下的程序選擇問(wèn)題。

DOCASECASE<條件1><命令序列1>CASE<條件2><命令序列2>......CASE<條件n><命令序列n>[OTHERWISE<命令序列n+1>]ENDCASE

a.多分支選擇結(jié)構(gòu)執(zhí)行的過(guò)程:系統(tǒng)依次判斷各<條件>是否滿足,若某一<條件>為.T.,就執(zhí)行該<條件>下的<命令序列>,執(zhí)行后不再判斷其它<條件>,而轉(zhuǎn)去執(zhí)行ENDCASE后面的第一條命令。

如果沒(méi)有一個(gè)<條件>為.T.,就執(zhí)行OTHERWISE后面的[命令序列],直到ENDCASE;如果沒(méi)有OTHERWISE,則不作任何操作就轉(zhuǎn)向ENDCASE之后的第一條命令。

b.DOCASE語(yǔ)句和ENDCASE語(yǔ)句必須成對(duì)出現(xiàn),各占一行。

c.多分支選擇結(jié)構(gòu)中各CASE語(yǔ)句后的<條件>是按其先后順序判斷執(zhí)行的,因此對(duì)實(shí)際問(wèn)題進(jìn)行編程時(shí),應(yīng)認(rèn)真考慮各個(gè)條件排列的先后順序。

DOCASEENDCASE條件1命令組1條件2命令組2條件n命令組notherwise編寫一個(gè)程序,要求從鍵盤輸入一個(gè)學(xué)生的分?jǐn)?shù),判斷該分?jǐn)?shù)屬于哪個(gè)等級(jí).

分?jǐn)?shù):60分以下為不及格,60-70為及格,70-80為中,80-90為良,90-100為優(yōu)Y=

根據(jù)鍵入的X值,計(jì)算下面的分段函數(shù)值,并顯示結(jié)果。5X2+6X-1(X≤0)X2-4X+1(0<X≤20)3X2+1(X>20)【例6-7】輸入考試成績(jī),顯示成績(jī)等級(jí)的程序。(90分以上為“優(yōu)秀”;80-89為“良好”;60-79為“合格”;60分以下為“不合格”)。SETTALKOFFINPUT“輸入考試成績(jī):”TOXDOCASECASEX>=90?“成績(jī)等級(jí):優(yōu)秀”CASEX>=80?“成績(jī)等級(jí):良好”CASEX>=60?“成績(jī)等級(jí):合格”O(jiān)THER?“成績(jī)等級(jí):不合格”ENDCASERETU6.9循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)有3種命令格式:DOWHILE……ENDDOFOR……ENDFORSCAN……ENDSCAN6.2.3循環(huán)結(jié)構(gòu)

在程序設(shè)計(jì)中,有時(shí)需要從某處開(kāi)始有規(guī)律地反復(fù)執(zhí)行某些類似的操作,這些類似的操作一般用循環(huán)結(jié)構(gòu)程序設(shè)計(jì)來(lái)解決。在VFP中,提供了“條件循環(huán)”、“步長(zhǎng)型”和“表掃描型”循環(huán)結(jié)構(gòu)。

1.條件循環(huán)結(jié)構(gòu)

DOWHILE<條件>[命令序列]ENDDO

a.當(dāng)型循環(huán)執(zhí)行的過(guò)程是:根據(jù)<條件>邏輯值進(jìn)行判斷。如果<條件>為.T.,則執(zhí)行

[命令序列],[命令序列]執(zhí)行完返回到DOWHILE語(yǔ)句,每執(zhí)行一遍就判斷一次DOWHILE語(yǔ)句中的<條件>。如果<條件>仍然為.T.,則繼續(xù)執(zhí)行

[命令序列],直到<條件>的邏輯值為.F.,則結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行ENDDO之后的第一條命令。

1.條件循環(huán)結(jié)構(gòu)

DOWHILE<條件>[命令序列]ENDDOb.DOWHILE和ENDDO語(yǔ)句應(yīng)配對(duì)使用,各占一行。c.在[命令序列]的適當(dāng)位置可以放置EXIT和LOOP語(yǔ)句,用以對(duì)循環(huán)過(guò)程作特殊處理。EXIT的功能是:終止本層循環(huán)命令。LOOP語(yǔ)句的功能是:終止本次循環(huán)命令。循環(huán)結(jié)構(gòu)流程圖6.9循環(huán)結(jié)構(gòu)DoWhile條件

…loop…enddoDOWHILE條件

…EXIT…ENDDO例5計(jì)算1+2+…+10的值settalkoffcleara=1s=0doWhilea<=10s=s+aa=a+1enddo?“s=“,sSettalkonsa00+10+1+21+2+31+2+3+41+2+…+61+2+…+71+2+…+81+2+…+91+2+…1012345678910116.9循環(huán)結(jié)構(gòu)【例】編程計(jì)算S=1+2+3+…+100【例】編程計(jì)算S=1+3+5+…+99【例】編程計(jì)算S=2+4+6+…+100【例】輸出100--300之間所有能被7整除的數(shù)

基本結(jié)構(gòu)(循環(huán)次數(shù)已知情況下)a=1(定義一個(gè)變量,確定循環(huán)開(kāi)始的數(shù))doWhilea<(循環(huán)終止的數(shù))

……(執(zhí)行某項(xiàng)任務(wù))

a=a+1(循環(huán)變量累加)enddo?“s=“,s(輸出結(jié)果)return編寫程序,統(tǒng)計(jì)員工信息表中金融系職工的人數(shù)。

Use學(xué)生表A=0Locatefor部門=“金融系”Dowhilenoteof()A=a+1ContinueEnddo?”金融系人數(shù)為:”+str(a,2)+”人”Usereturn【例6-10】按90分(含90分)以上、70~90分(含70分)、70分以下三級(jí)成績(jī)分檔統(tǒng)計(jì)“成績(jī)表.DBF”中人數(shù)的個(gè)數(shù)。STORE0TOK1,K2,K3

USE成績(jī)表

DOWHILE.NOT.EOF()

DOCASE

CASE

成績(jī)>=90

k1=k1+1

CASE

成績(jī)<70

k3=k3+1

OTHERWISE

k2=k2+1

ENDCASE

SKIP

ENDDO

?"90分的人數(shù)的個(gè)數(shù):"+STR(k1)

?"70~90人數(shù)的個(gè)數(shù):"+STR(k2)

?"70以下人數(shù)的個(gè)數(shù):"+STR(k3)

USE6.9循環(huán)結(jié)構(gòu)對(duì)表的操作。用NOTEOF()或FOUND()作為循環(huán)條件進(jìn)行判斷,循環(huán)體內(nèi)必須含有指針移動(dòng)的語(yǔ)句?;窘Y(jié)構(gòu):USE<表文件名>LOCATEFOR<條件>

DOWHILE.NOT.EOF()(或FOUND())<執(zhí)行某一個(gè)任務(wù)>CONTINUE

ENDDO例:試編一個(gè)程序,顯示“學(xué)生表.DBF”中所有入學(xué)成績(jī)超過(guò)490分的學(xué)生名單。例:統(tǒng)計(jì)“職工數(shù)據(jù)表”中女職工的人數(shù)計(jì)算1+2+3……,當(dāng)和大于1000時(shí)退出循環(huán)(2)在永真循環(huán)中。一般用于循環(huán)次數(shù)不定的情況下,在循環(huán)體內(nèi)根據(jù)條件執(zhí)行EXIT命令退出循環(huán)。其基本形式如下:

DOWHILE.T.……

IFX=結(jié)束標(biāo)志

EXITENDIF<執(zhí)行某一個(gè)任務(wù)>

ENDDO2.步長(zhǎng)型循環(huán)結(jié)構(gòu)FOR<循環(huán)變量>=<初值>TO<終值>[STEP<步長(zhǎng)值>][命令序列]ENDFOR|NEXT

a.<初值>、<終值>、<步長(zhǎng)值>都是數(shù)值表達(dá)式;當(dāng)<步長(zhǎng)值>是1時(shí),可以省略STEP子句。

b.ENDFOR或NEXT語(yǔ)句為循環(huán)終端語(yǔ)句,用以標(biāo)明本循環(huán)結(jié)構(gòu)的終點(diǎn)。該語(yǔ)句必須和FOR語(yǔ)句配對(duì)使用。2.步長(zhǎng)型循環(huán)結(jié)構(gòu)FOR<循環(huán)變量>=<初值>TO<終值>[STEP<步長(zhǎng)值>][命令序列]ENDFOR|NEXT

c.該循環(huán)結(jié)構(gòu)的執(zhí)行過(guò)程是:首先將初值賦值給循環(huán)變量,然后判斷循環(huán)變量的值是否超過(guò)終值,不超過(guò)就執(zhí)行循環(huán)體,遇到ENDFOR或NEXT語(yǔ)句,自動(dòng)使循環(huán)變量增加一個(gè)步長(zhǎng)值,再將循環(huán)變量的值與終值比較,如果循環(huán)變量的值不超過(guò)終值,就再執(zhí)行循環(huán)體,不斷循環(huán)執(zhí)行。如果循環(huán)變量的值超過(guò)終值則轉(zhuǎn)去執(zhí)行ENDFOR或NEXT語(yǔ)句后面的第一條語(yǔ)句。d.在循環(huán)體內(nèi)的適當(dāng)位置也可以放置EXIT和LOOP語(yǔ)句,作用和用法與條件循環(huán)結(jié)構(gòu)類似。

2.步長(zhǎng)型循環(huán)結(jié)構(gòu)FOR<循環(huán)變量>=<初值>TO<終值>[STEP<步長(zhǎng)值>][命令序列]ENDFOR|NEXT

Forn=初值to終值step步長(zhǎng)

…exit…

enddo循環(huán)結(jié)構(gòu)流程圖2.步長(zhǎng)型循環(huán)結(jié)構(gòu)Forn=初值to終值step步長(zhǎng)

…loop…enddo

[例]求1+2+3+…+99+100的值。

問(wèn)題分析:采用累加的辦法,用循環(huán)變量產(chǎn)生1、2、3、…、99、100這些數(shù)。用s保存累加和,s的初始值為0,每次循環(huán)將s加上循環(huán)變量的值,再賦值給變量s,循環(huán)結(jié)束即求得S。程序?yàn)椋篊LEARs=0FORx=1TO100step1s=s+xENDFOR?"1--100自然數(shù)累加和是:",sRETURN【例】編程計(jì)算S=1+2+3+…+100【例】編程計(jì)算S=1+3+5+…+99【例】編程計(jì)算S=2+4+6+…+100【例】輸出100--300之間所有能被7整除的數(shù)

基本結(jié)構(gòu)(循環(huán)次數(shù)已知情況下)Fora=1(循環(huán)開(kāi)始的數(shù))

toa=(終止的數(shù))

(step步長(zhǎng))

……(執(zhí)行某項(xiàng)任務(wù))endfor?“s=“,s(輸出結(jié)果)return循環(huán)結(jié)構(gòu)的類型:

1、條件循環(huán):(常用)命令格式:dowhile<邏輯表達(dá)式><語(yǔ)句序列>

enddo2、步長(zhǎng)循環(huán)命令格式:

For變量=數(shù)表1to數(shù)表2[STEP數(shù)表3]〈語(yǔ)句序列〉

endfor|next一個(gè)循環(huán)結(jié)構(gòu)一般應(yīng)具備如下的條件:(1)循環(huán)的初始條件:一般為給循環(huán)控制變量賦初值;(2)循環(huán)頭:循環(huán)語(yǔ)句的起始,設(shè)置、判斷循環(huán)條件;(3)循環(huán)尾:循環(huán)語(yǔ)句的結(jié)尾;(4)循環(huán)體:位于循環(huán)頭和循環(huán)尾之間、循環(huán)控制重復(fù)執(zhí)行的語(yǔ)句序列

6.9循環(huán)結(jié)構(gòu)Dowhile……enddo

和for……endfor的區(qū)別求s=1+2+3+…+99+100S=0N=1Dowhilen<=100S=s+nN=n+1Enddo?”s=“,sreturn求s=1+2+3+…+99+100s=0FORx=1

TO

100step1

s=s+xENDFOR?“s=",sRETURN

復(fù)習(xí)一期末考題題型一:四、閱讀下列程序,寫出運(yùn)行結(jié)果(每題3分,共15分)等級(jí)考試題型一:(四)閱讀下列程序,寫出運(yùn)行結(jié)果(每題2分,共10分)閱讀下列程序,寫出運(yùn)行結(jié)果(每題3分)1、SETTALKOFFSTORE0TOSN=20DOWHILEN>SS=S+NN=N-2ENDDO?SRETURN閱讀下列程序,寫出運(yùn)行結(jié)果(每題3分)2、SETTALKOFFSTORE2TOM,NDOWHILEM<14M=M+NN=N+2ENDDO?M,NSETTALKONRETURN閱讀下列程序,寫出運(yùn)行結(jié)果(每題3分)3、SETTALKOFFA=2S=0DOWHILE.T.IFA>=10EXITENDIFA=A+2S=S+AENDDO?A,S閱讀下列程序,寫出運(yùn)行結(jié)果(每題3分)4、 USERSDAGZH=0DOWHILE.NOT.EOF()

GZH=GZH+基本工資

SKIPENDDO?GZHRETURNUSESTUGO8IF團(tuán)否

DISPLAY姓名ELSEDISPLAY入學(xué)成績(jī)ENDIFUSE6、STORE0TOM,NDOWHILE.T.N=N+2DOCASECASEINT(N/3)*3=NLOOPCASEN>10EXITOTHERWISEM=M+NENDCASEENDDO?"M=",M,"N=",NRETURN7、USEZGSJRS1=0RS2=0DOWHILE.NOT.EOF()

IF性別=‘男’

RS1=RS1+1ELSERS2=RS2+1ENDIFSKIPENDDO?RS1,RS2RETURN

閱讀下列程序,寫出運(yùn)行結(jié)果(每題3分)8、SETTALKOFFS=0

FORI=1TO6STEP2Q=I**2??QS=S+QENDFOR?SSETTALKON閱讀下列程序,寫出運(yùn)行結(jié)果(每題3分)9、SETTALKOFFS=0FORN=1TO7STEP2N=N+1S=S+NENDFOR?S,NSETTALKON

SETTALKOFFFILE=“RSDA”USE&FILELISTFOR性別=“男”USESETTALKONRETURNCLEARY="等級(jí)考試"X=""L=LEN(Y)FORI=L-1TO1STEP-2X=X+SUBSTR(Y,I,2)ENDFOR ?X閱讀下列程序,寫出運(yùn)行結(jié)果

A="B"B="C"C="A"?&A+&B+&C閱讀下列程序,寫出運(yùn)行結(jié)果

SETTALKOFFA="B"B=1C="+"?&A?&A.&C.&ASETTALKON3、表掃描循環(huán)結(jié)構(gòu)

SCAN[<范圍>][FOR<條件1>]

命令序列]&&[命令序列]也稱為循環(huán)體

ENDSCANa.該結(jié)構(gòu)是針對(duì)當(dāng)前打開(kāi)的數(shù)據(jù)表進(jìn)行操作的。它的功能是:對(duì)當(dāng)前打開(kāi)的數(shù)據(jù)表中指定范圍內(nèi)符合條件的記錄,逐個(gè)進(jìn)行<命令序列>所規(guī)定的操作,如果缺省范圍和條件子句時(shí),則對(duì)所有記錄逐個(gè)進(jìn)行<命令序列>規(guī)定的操作。b.表掃描型循環(huán)結(jié)構(gòu)每循環(huán)一遍,記錄指針自動(dòng)移動(dòng)到下一條記錄,不需要設(shè)置SKIP語(yǔ)句。c.SCAN和ENDSCAN語(yǔ)句要配對(duì)使用。d.在<命令序列>的適當(dāng)位置也可以放置EXIT和LOOP語(yǔ)句,功能和用法同其他循環(huán)結(jié)構(gòu)類似。

[例]將職工數(shù)據(jù)表中月收入大于600元的姓名,月收入字段輸出,并統(tǒng)計(jì)這些職工的人數(shù)。

基本操作步驟為:打開(kāi)職工數(shù)據(jù)表,設(shè)計(jì)一個(gè)累加變量n,代表滿足條件的記錄數(shù),給n賦初值0,用表掃描循環(huán)結(jié)構(gòu)定位滿足條件的記錄,輸出姓名和編號(hào)字段,并對(duì)n進(jìn)行累加1,循環(huán)結(jié)束即求得n,輸出n。程序如下:

CLEARUSE職工數(shù)據(jù)表n=0SCANFOR月收入>600?姓名,月收入

n=n+1ENDSCAN?“月收入在600元以上的人數(shù)有:"+STR(N,2)+"人。"useRETURNDowhile---enddo和scan----endscan的主要區(qū)別顯示學(xué)生表中所有入學(xué)成績(jī)超過(guò)490分的學(xué)生名單Use學(xué)生表

Locatefor入學(xué)成績(jī)>490Dowhilenoteof()

Disp

姓名

ContEnddouseUse學(xué)生表scanfor入學(xué)成績(jī)>490Disp

姓名endscanUse4、循環(huán)結(jié)構(gòu)嵌套

循環(huán)結(jié)構(gòu)的嵌套是指在一個(gè)循環(huán)體內(nèi)包含其他的循環(huán)結(jié)構(gòu),也稱為多重循環(huán)結(jié)構(gòu)。同一種類型的循環(huán)結(jié)構(gòu)可以嵌套,不同類型的循環(huán)結(jié)構(gòu)也可以嵌套。要編好循環(huán)嵌套結(jié)構(gòu)程序,必須做到:循環(huán)開(kāi)始語(yǔ)句和循環(huán)結(jié)束語(yǔ)句配對(duì)出現(xiàn);內(nèi)外層循環(huán)層次分明,不得交叉。VisualFoxPro最多允許128層嵌套。

FORa=1TO9

FORb=1TO9

……ENDFOR?ENDFORRETURN外循環(huán)內(nèi)循環(huán)【例6-19】輸出下面圖形(要求使用雙重循環(huán)語(yǔ)句)****************

FORI=1TO4FORJ=1TOI??“*”ENDFOR?ENDFOR【例6-19】輸出下面圖形(要求使用雙重循環(huán)語(yǔ)句)**********

FORI=1TO4FORJ=1TOI??“*”ENDFOR?ENDFOR閱讀下列程序,寫出運(yùn)行結(jié)果

DIMENSIONA(3,3)I=1DOWHILEI<4J=IDOWHILEJ<4A(I,J)=I*J

??A(I,J)

J=J十1ENDDO?I=I+1ENDDORETURN閱讀下列程序,寫出運(yùn)行結(jié)果

SETTALKOFFCLEARZ=0X=1?DOWHILEX<=5Y=1DOWHILEY<=X??STR(X,1)+'×'+STR(Y,1)+'='+STR(X*Y,2)+''Z=Z+X*YY=Y+1ENDDO?X=X+1ENDDOSETTALKON第二次作業(yè):五、簡(jiǎn)答題(每題3分,共15分)1、命令中的[范圍]有哪幾種,以及它們的作用?2、簡(jiǎn)要說(shuō)明INPUT、ACCEPT、WAIT三條命令的功能?3、什么是視圖、查詢以及它們之間的區(qū)別?4、EXIT和LOOP的功能是什么?5、查詢和視圖有什么異同?6、常用的數(shù)據(jù)模型有幾種?VisualFoxpro屬于什么型數(shù)據(jù)庫(kù)?7、簡(jiǎn)述查詢命令LOCATE、FIND及SEEK的區(qū)別。8、在顯示表記錄上,命令LIST和DISPLAY的區(qū)別是什么?9、什么是項(xiàng)目管理器及其作用?10、表達(dá)式類型有哪些?11、查詢定位命令LOCATE、FIND、SEEK它們各自的作用及特點(diǎn)?12、文件首、文件尾、首記錄、尾記錄是什么?如何判斷記錄指針是否指向文件首或文件尾?List:

disp:分屏顯示當(dāng)前表中指定范圍內(nèi)符合條件的記錄的指定字段,若缺省范圍和條件,則只顯示當(dāng)前記錄六、編程題1、輸出下面圖形:**********2、輸出100到300之間能同時(shí)被6和9整除的所有數(shù)。六、編程題3、編程求1+2+3+…+?的和,當(dāng)其和大于100停止。4、編寫程序,求出1~100之間能被3或5整除的整數(shù)的平方和。5、設(shè)計(jì)簡(jiǎn)單的分支程序。在“員工信息表”表文件中查詢李明的基本情況,如果找到顯示信息,否則顯示“查無(wú)此人”。六、編程題6、查找zgsj.dbf

中女職工的最高工資,并顯示其姓名和工資。(利用dowhile……enddo循環(huán)語(yǔ)句實(shí)現(xiàn))。7、在RSDA.DBF中,對(duì)建國(guó)后出生、職稱是教授的職工,輸出其姓名、性別、出生日期、基本工資的信息。六、編程題8、已有表文件“成績(jī)表.DBF”,其字段為:姓名計(jì)算機(jī)數(shù)學(xué)英語(yǔ),編寫程序?qū)崿F(xiàn):顯示每個(gè)記錄的姓名、計(jì)算機(jī)成績(jī)的同時(shí)還要顯示如下內(nèi)容:計(jì)算機(jī)成績(jī)90分以上(含90)顯示“優(yōu)秀”字樣;60(含60)—89之間顯示“及格”字樣;計(jì)算機(jī)成績(jī)低于60分顯示“補(bǔ)考”字樣。如:“張三95優(yōu)秀”。作業(yè)三(代碼、程序填空)

1、實(shí)現(xiàn):求0-100之間的奇數(shù)之和,超出范圍則退出。請(qǐng)?jiān)凇尽刻幪钊胝_的內(nèi)容。STORE0TOX,YDOWHILE.T.X=X+1DOCASECASE【1】LOOPCASEX>=100【2】OTHERWISEY=Y+XENDCASE【3】?"0-100之間的奇數(shù)之和為:",Y2、統(tǒng)計(jì)zgsj.dbf

中職工的月收入總和,并在表文件末尾增加一條空記錄,在該記錄的姓名字段中寫入"總計(jì)",在月收入字段中寫入工資總和,最后顯示該條記錄。CLEAR【4】SUM月收入TOS【5】REPLACE姓名WITH"總計(jì)",月收入WITHS【6】USERETURN3、求S=1+2+3+……+1000。S=0I=1DOWHILE【1】【2】I=I+1ENDDO?S4、某職工數(shù)據(jù)工資表文件為GZ.DBF。下面程序?qū)⒏鶕?jù)職工的職稱情況對(duì)工資作相應(yīng)調(diào)整:職稱為教授的基本工資加40%;職稱為副教授的基本工資加20%,否則,若基本工資低于300的按500計(jì)算。請(qǐng)?zhí)钌舷鄳?yīng)的語(yǔ)句,使之成為完整的程序?!?】DOWHILE.NOT.EOF()【4】CASE職稱="教授"【5】CASE職稱="副教授"REPLACE基本工資WITH基本工資*1.1CASE基本工資<300REPLACE基本工資WITH300ENDCASE【6】ENDDOLISTUSE5、按性別查詢顯示并統(tǒng)計(jì)RSDA.DBF中的指定性別的職工人數(shù)。USERSDASTORE0TORSACCEPT“請(qǐng)輸入性別:”TOXB【4】DOWHILE.NOT.EOF() DISPOFF RS=RS+1 【5】ENDDO?

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論