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

下載本文檔

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

文檔簡介

第6章程序設(shè)計程序文件的建立與運行

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

MODIFYCOMMAND[<程序文件名>]

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

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

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

MODIFYCOMMANDCX1

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

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

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

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

在輸入程序時,請注意以下幾點:

a.一個命令語句中只能有一個命令動詞;

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

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

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

按快捷鍵Ctrl+W將文件進行保存退出?;颍?)程序文件的打開

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

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

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

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

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

程序的運行

命令方式運行程序

DO<程序文件名>

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

說明:

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

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

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

121830

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

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

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

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

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

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

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

格式1:RETURN

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

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

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

對一個獨立程序來說,一般在最后一條語句要用RETURN命令,以表示程序的結(jié)束。

7.1.4交互式的輸入命令

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

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

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

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

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

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

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

MODIFYCOMMANDCX2

步驟2:在打開的程序窗口里輸入如下語句:

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

CLEAR

USErsb

ACCEPT“請輸入要查找的姓名:”TOname1

LOCATEFORALLTRIM(姓名)=name1

DISPLAY

RETURN

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

步驟4:運行程序,在命令窗口里輸入:

DOCX2

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

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

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

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

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

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

MODIFYCOMMANDCX3

步驟2:在打開的程序窗口里輸入如下語句:

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

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

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

DOCX3

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

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

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

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

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

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

CLEARUSE學(xué)生表

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

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

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

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

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

CLEARUSE學(xué)生表

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

根據(jù)鍵入的X值,計算下面的分段函數(shù)值,并顯示結(jié)果。5X2+6X-1(X≤0)X2-4X+1(0<X≤20)3X2+1(X>20)【例6-7】輸入考試成績,顯示成績等級的程序。(90分以上為“優(yōu)秀”;80-89為“良好”;60-79為“合格”;60分以下為“不合格”)。SETTALKOFFINPUT“輸入考試成績:”TOXDOCASECASEX>=90?“成績等級:優(yōu)秀”CASEX>=80?“成績等級:良好”CASEX>=60?“成績等級:合格”O(jiān)THER?“成績等級:不合格”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è)計中,有時需要從某處開始有規(guī)律地反復(fù)執(zhí)行某些類似的操作,這些類似的操作一般用循環(huán)結(jié)構(gòu)程序設(shè)計來解決。在VFP中,提供了“條件循環(huán)”、“步長型”和“表掃描型”循環(huán)結(jié)構(gòu)。

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

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

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

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

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

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

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

…loop…enddoDOWHILE條件

…EXIT…ENDDO例5計算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)【例】編程計算S=1+2+3+…+100【例】編程計算S=1+3+5+…+99【例】編程計算S=2+4+6+…+100【例】輸出100--300之間所有能被7整除的數(shù)

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

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

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

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

USE成績表

DOWHILE.NOT.EOF()

DOCASE

CASE

成績>=90

k1=k1+1

CASE

成績<70

k3=k3+1

OTHERWISE

k2=k2+1

ENDCASE

SKIP

ENDDO

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

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

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

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

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

ENDDO例:試編一個程序,顯示“學(xué)生表.DBF”中所有入學(xué)成績超過490分的學(xué)生名單。例:統(tǒng)計“職工數(shù)據(jù)表”中女職工的人數(shù)計算1+2+3……,當(dāng)和大于1000時退出循環(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í)行某一個任務(wù)>

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

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

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

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

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

Forn=初值to終值step步長

…exit…

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

…loop…enddo

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

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

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

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

(step步長)

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

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

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

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

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

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

GZH=GZH+基本工資

SKIPENDDO?GZHRETURNUSESTUGO8IF團否

DISPLAY姓名ELSEDISPLAY入學(xué)成績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

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

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

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

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

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

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

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

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

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

基本操作步驟為:打開職工數(shù)據(jù)表,設(shè)計一個累加變量n,代表滿足條件的記錄數(shù),給n賦初值0,用表掃描循環(huán)結(jié)構(gòu)定位滿足條件的記錄,輸出姓名和編號字段,并對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é)成績超過490分的學(xué)生名單Use學(xué)生表

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

Disp

姓名

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

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

循環(huán)結(jié)構(gòu)的嵌套是指在一個循環(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)開始語句和循環(huán)結(jié)束語句配對出現(xiàn);內(nèi)外層循環(huán)層次分明,不得交叉。VisualFoxPro最多允許128層嵌套。

FORa=1TO9

FORb=1TO9

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

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

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

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

??A(I,J)

J=J十1ENDDO?I=I+1ENDDORETURN閱讀下列程序,寫出運行結(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è):五、簡答題(每題3分,共15分)1、命令中的[范圍]有哪幾種,以及它們的作用?2、簡要說明INPUT、ACCEPT、WAIT三條命令的功能?3、什么是視圖、查詢以及它們之間的區(qū)別?4、EXIT和LOOP的功能是什么?5、查詢和視圖有什么異同?6、常用的數(shù)據(jù)模型有幾種?VisualFoxpro屬于什么型數(shù)據(jù)庫?7、簡述查詢命令LOCATE、FIND及SEEK的區(qū)別。8、在顯示表記錄上,命令LIST和DISPLAY的區(qū)別是什么?9、什么是項目管理器及其作用?10、表達式類型有哪些?11、查詢定位命令LOCATE、FIND、SEEK它們各自的作用及特點?12、文件首、文件尾、首記錄、尾記錄是什么?如何判斷記錄指針是否指向文件首或文件尾?List:

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

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

1、實現(xiàn):求0-100之間的奇數(shù)之和,超出范圍則退出。請在【】處填入正確的內(nèi)容。STORE0TOX,YDOWHILE.T.X=X+1DOCASECASE【1】LOOPCASEX>=100【2】OTHERWISEY=Y+XENDCASE【3】?"0-100之間的奇數(shù)之和為:",Y2、統(tǒng)計zgsj.dbf

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

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論