第七章程序設(shè)計(jì)課件_第1頁(yè)
第七章程序設(shè)計(jì)課件_第2頁(yè)
第七章程序設(shè)計(jì)課件_第3頁(yè)
第七章程序設(shè)計(jì)課件_第4頁(yè)
第七章程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩76頁(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)介

第七章

程序設(shè)計(jì)基礎(chǔ)1

本章要點(diǎn)VisualFoxPro的工作方式程序文件的建立與編輯程序的基本結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)過(guò)程2VisualFoxPro的工作方式

VisualFoxPro系統(tǒng)提供有三種工作方式:即單命令方式、菜單方式及程序文件方式。

1.單命令方式

VisualFoxPro單命令方式是利用Command窗口來(lái)實(shí)現(xiàn)的。用戶(hù)通過(guò)Command窗口輸入命令,并執(zhí)行操作。在Command窗口中,可以輸入單個(gè)的操作命令和系統(tǒng)命令,完成對(duì)數(shù)據(jù)庫(kù)的操作管理和系統(tǒng)環(huán)境的設(shè)置;也可以建立命令文件及運(yùn)行命令文件。

Command窗口不僅是VisualFoxPro命令的執(zhí)行窗口,也是VisualFoxPro命令文件的編輯窗口。所謂單命令方式,即輸入一條命令,完成一個(gè)操作的工作方式。3

2.菜單方式在VisualFoxPro環(huán)境下,也可以通過(guò)系統(tǒng)提供的菜單選項(xiàng),對(duì)數(shù)據(jù)庫(kù)資源進(jìn)行操作管理和對(duì)系統(tǒng)環(huán)境進(jìn)行設(shè)置;并通過(guò)菜單建立命令文件及運(yùn)行命令文件。所謂菜單方式,即通過(guò)打開(kāi)不同的菜單選擇并完成不同的操作。我們?cè)谝郧案髡滤v的內(nèi)容其實(shí)都可說(shuō)是菜單方式。

3.程序文件方式程序文件(簡(jiǎn)稱(chēng)程序)也叫做命令文件。運(yùn)用程序文件方式進(jìn)行數(shù)據(jù)庫(kù)管理,是通過(guò)程序文件編輯工具,將對(duì)數(shù)據(jù)庫(kù)資源進(jìn)行操作管理的命令和對(duì)系統(tǒng)環(huán)境進(jìn)行設(shè)置的命令,集中在一個(gè)以(.PRG)為擴(kuò)展名的命令文件中,然后再通過(guò)菜單方式或命令方式運(yùn)行該命令文件。所謂命令方式,即通過(guò)程序文件中的命令完成不同的操作。4*功能說(shuō)明:求圓形的面積。*文件名:L501.PRGCLEARCTALK=SET("TALK")SETTALKOFFINPUT"請(qǐng)輸入圓的半徑,半徑="TORS=PI()*R*R?"半徑為"+ALLTRIM(STR(R))+"的圓,面積=",SSETTALK&CTALKRETURN

56.1.1程序的概念

有關(guān)此VisualFoxPro程序的幾點(diǎn)說(shuō)明

:1.注釋語(yǔ)句【格式1】NOTE<注釋內(nèi)容>【格式2】*<注釋內(nèi)容>【格式3】&&<注釋內(nèi)容>【功能】增強(qiáng)程序文件的易讀性或放棄<注釋內(nèi)容>中語(yǔ)句的執(zhí)行

2.對(duì)話(huà)開(kāi)關(guān)語(yǔ)句【格式】SETTALKOFF|ON【功能】關(guān)閉或打開(kāi)命令執(zhí)行時(shí)的對(duì)話(huà)開(kāi)關(guān),許多命令在執(zhí)行時(shí)會(huì)返回一些有關(guān)執(zhí)行狀態(tài)的信息,這些信息通常會(huì)顯示在VF主窗口、狀態(tài)欄或用戶(hù)自定義窗口里。SET

TALK命令用以設(shè)置是(ON)否(OFF)顯示這些信息。默認(rèn)值為ON。3.命令的分行(續(xù)行符)

;66.1.2程序文件的建立、修改與執(zhí)行

1.建立或修改程序文件可用兩種方式調(diào)用系統(tǒng)內(nèi)置的文本編輯器建立或修改程序文件

:命令方式

MODIFYCOMMAND[<盤(pán)符>][<路徑>]〈程序文件名〉菜單方式打開(kāi)“文件”菜單,選擇“新建”;在“新建”窗口,選擇“程序”,再選擇“新建文件”7程序文件的建立與執(zhí)行一.建立建立:文件新建程序保存:文件保存命令:MODIFYCOMMAND<文件名>注:若指定文件存在,則打開(kāi)修改;否則系統(tǒng)認(rèn)為是要建立一個(gè)指定了名字的文件。8(2)運(yùn)行程序下面的任一方法均可運(yùn)行程序:■選擇【程序】菜單下的“運(yùn)行”菜單,利用“運(yùn)行”對(duì)話(huà)框選擇要運(yùn)行的程序;■在命令窗口中輸入如下命令:DO<程序文件名>

系統(tǒng)就會(huì)運(yùn)行這個(gè)程序。如果文件不加擴(kuò)展名,系統(tǒng)會(huì)假定它具有.PRG的擴(kuò)展名,如果想運(yùn)行一個(gè)具有其它擴(kuò)展名的命令文件時(shí),在輸入命令時(shí)必須給出這個(gè)命令文件的全名。如:要運(yùn)行上例中編輯的程序,可以在命令窗口中輸入:

DOL501然后按回車(chē)鍵執(zhí)行。92.保存程序程序輸入、編輯完畢,單擊【文件】|【保存】菜單項(xiàng),在“另存為”對(duì)話(huà)框中指定程序文件的存放位置和文件名,并單擊“保存”按鈕保存程序文件并退出文本編輯器。程序文件的默認(rèn)擴(kuò)展名是.PRG。

103.執(zhí)行程序程序文件建立后,可以用多種方式、多次執(zhí)行它。下面是兩種常用的方式。(1)菜單方式①

單擊【程序】|【運(yùn)行】菜單項(xiàng),打開(kāi)“運(yùn)行”對(duì)話(huà)框;②

從文件列表框中選擇要運(yùn)行的程序文件,并單擊“運(yùn)行”命令按鈕,啟動(dòng)運(yùn)行該程序文件

(2)命令方式【格式】DO[<盤(pán)符>][<路徑>\]<文件名>【功能】執(zhí)行指定<盤(pán)符>、<路徑>下的程序文件

11執(zhí)行程序文件時(shí),將依次執(zhí)行文件中的命令,直到所有命令執(zhí)行完畢,或者執(zhí)行到以下命令:①

CANCAL:終止程序運(yùn)行,清除所有的私有變量,返回命令窗口;③

RETURN:結(jié)束程序執(zhí)行,返回調(diào)用它的上級(jí)程序,若無(wú)上級(jí)程序則返回命令窗口;④

QUIT:結(jié)束程序執(zhí)行并退出VisualFoxPro系統(tǒng),返回操作系統(tǒng)

126.1.3簡(jiǎn)單的輸入輸出命令6.1.3簡(jiǎn)單的輸入輸出命令1.字符接收語(yǔ)句ACCEPT命令【功能】在程序執(zhí)行過(guò)程中,將用戶(hù)交互式輸入的內(nèi)容作為字符串賦值給指定內(nèi)存變量。該命令只接受字符型數(shù)據(jù),輸入的字符串不需要加定界符,否則,系統(tǒng)會(huì)把定界符作為字符串本身的一部分。

格式:ACCEPT[<字符表達(dá)式>]TO<內(nèi)存變量名>

13

【例6-2】編程從鍵盤(pán)輸入某數(shù)據(jù)庫(kù)的文件名,要求打開(kāi)該數(shù)據(jù)庫(kù)并顯示其內(nèi)容。程序文件名為PROG2.PRGSETTALKOFFCLEARACCEPT“請(qǐng)輸入數(shù)據(jù)庫(kù)名:”

TOAAAOPENDATABASE&AAAACCEPT“請(qǐng)輸入表名”TOBBBUSE&BBBLISTUSESETTALKONRETURN14注:ACCEPT語(yǔ)句只能給字符型內(nèi)存變量提供數(shù)據(jù)。如果用戶(hù)想給其它類(lèi)型的內(nèi)存變量提供數(shù)據(jù),可以使用下列命令:2.通用數(shù)據(jù)接收命令----INPUT命令

該命令等待用戶(hù)從鍵盤(pán)輸入數(shù)據(jù),用戶(hù)可以輸入任意合法的表達(dá)式。當(dāng)用戶(hù)以回車(chē)鍵結(jié)束輸入時(shí),系統(tǒng)將表達(dá)式的值存入指定的內(nèi)存變量,程序繼續(xù)運(yùn)行。功能:(1)若選用<字符表達(dá)式>,系統(tǒng)會(huì)首先顯示該表達(dá)式的值,作為提示信息。(2)輸入的數(shù)據(jù)可以是常量、變量等,但不能不輸入任何內(nèi)容直接按回車(chē)鍵。INPUT語(yǔ)句與ACCEPT語(yǔ)句的區(qū)別是:ACCEPT命令只能接收字符串,而INPUT語(yǔ)句可以接收任意類(lèi)型的VFP表達(dá)式;如果輸入的是字符串,ACCEPT語(yǔ)句不要使用字符型定界符,而INPUT語(yǔ)句必須用定界符括起來(lái)。格式:INPUT[<字符表達(dá)式>]TO<內(nèi)存變量名>15【例6-4】從鍵盤(pán)輸入兩個(gè)任意正數(shù),編程求以?xún)蓴?shù)為邊長(zhǎng)的長(zhǎng)方形面積。程序文件名為PROG4.PRGSETTALKOFFCLEARinput“長(zhǎng)方形一邊的長(zhǎng)為:”

TOAINPUT“長(zhǎng)方形另一邊的長(zhǎng)為:”

TOBS=A*B?“長(zhǎng)方形的面積為:”,SSETTALKONRETURN163.輸入一個(gè)字符語(yǔ)句----WAIT命令【功能】顯示提示信息,暫停程序執(zhí)行,直到用戶(hù)按任意鍵或單擊鼠標(biāo)時(shí)繼續(xù)執(zhí)行程序。若選擇可選項(xiàng)[TO<內(nèi)存變量>],將輸入的單個(gè)字符作為字符型數(shù)據(jù)賦給指定的<內(nèi)存變量>;若用戶(hù)是按Enter鍵或單擊鼠標(biāo),<內(nèi)存變量>的值為空串。若省略所有可選項(xiàng),屏幕顯示“鍵入任意鍵繼續(xù)……”默認(rèn)提示信息

格式:WAIT[<字符表達(dá)式>][TO<內(nèi)存變量名>]17例:wait"輸入無(wú)效,請(qǐng)重新輸入!"window timeout5

命令執(zhí)行時(shí),在主窗口右上角出現(xiàn)一個(gè)提示窗口,其中顯示提示信息“輸入無(wú)效,請(qǐng)重新輸入!"。之后,程序暫停執(zhí)行。當(dāng)用戶(hù)按任意鍵或超過(guò)5秒鐘時(shí),提示窗口關(guān)閉,程序繼續(xù)執(zhí)行。18【例6-6】在STUDENT數(shù)據(jù)庫(kù)的STUD表中顯示任意一個(gè)系學(xué)生的情況。程序文件名為PROG6.PRGSETTALKOFFCLEAROPENDATABASESTUDENTUSESTUDWAIT“請(qǐng)輸入待查學(xué)生的系號(hào)(1—3):”TONIFVAL(N)<1.OR.VAL(N)>3WAIT“輸入無(wú)效,結(jié)束程序運(yùn)行!”WINDOWTIMEOUT5RETURNELSESTORE“0”+NTOAAALISTFOR系別號(hào)=AAAENDIFCLOSEDATABASESETTALKONRETURN194.三條輸入命令的異同ACCEPT命令只能接受字符型數(shù)據(jù),不需定界符,輸入完畢按回車(chē)鍵結(jié)束;

WAIT命令只能輸入單個(gè)字符,且不需定界符,輸入完畢不需按回車(chē)鍵;

INPUT命令可接受數(shù)值型、字符型、邏輯型、日期型和日期時(shí)間型數(shù)據(jù),數(shù)據(jù)形式可以是常量、變量、函數(shù)和表達(dá)式,如果是字符串,需用定界符,輸入完畢按回車(chē)鍵結(jié)束。

20練習(xí):在INPUT、ACCEPT和WAIT三個(gè)命令中,必須要以回車(chē)鍵表示輸入結(jié)束的命令是A)INPUT、ACCEPTB)INPUT、WAITC)ACCEPT、WAITD)INPUT、ACCEPT和WAIT21二、結(jié)構(gòu)化的程序設(shè)計(jì)三大結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。1、順序結(jié)構(gòu) 按命令在程序中出現(xiàn)的先后次序依次執(zhí)行。22

分支結(jié)構(gòu)形式有如下三種:1.單向分支單向分支語(yǔ)句,即根據(jù)用戶(hù)設(shè)置的條件表達(dá)式的值,決定某一操作是否執(zhí)行。(1)語(yǔ)句格式:

IF〈條件表達(dá)式〉〈命令行序列〉

ENDIF(2)語(yǔ)句功能:該語(yǔ)句首先計(jì)算〈條件表達(dá)式〉的值,當(dāng)〈條件表達(dá)式〉的值為真時(shí),執(zhí)行〈命令行序列〉;否則,執(zhí)行ENDIF后面的第一條命令。分支結(jié)構(gòu)

23【例6-7】求一元二次方程AX2+BX+C=0的實(shí)根。程序文件名為PROG7.PRG。SETTALKOFFCLEARINPUTTOA2INPUTTOB3INPUTTOC4Z=B^2-4*A*CIFZ>=0X1=(-B+SQRT(Z))/(2*A)X2=(-B-SQRT(Z))/(2*A)?X1,X2ENDIFSETTALKONRETURN24

2.雙向分支雙向分支語(yǔ)句,即根據(jù)用戶(hù)設(shè)置的條件表達(dá)式的值,選擇兩個(gè)操作中的一個(gè)來(lái)執(zhí)行。(1)語(yǔ)句格式:

IF〈條件表達(dá)式〉〈命令行序列1〉ELSE〈命令行序列2〉ENDIF(2)語(yǔ)句功能:該語(yǔ)句首先計(jì)算〈條件表達(dá)式〉的值,當(dāng)〈條件表達(dá)式〉的值為真時(shí),執(zhí)行〈命令行序列1〉中的命令;否則,執(zhí)行〈命令行序列2〉中的命令;執(zhí)行完〈命令行序列1〉或〈命令行序列2〉后都將執(zhí)行ENDIF后面的第一條命令。25【例6-10】編寫(xiě)一密碼校驗(yàn)程序(假設(shè)密碼為ABC)。程序文件名為PROG10.PRG。SETTALKOFFCLEARACCEPT“請(qǐng)輸入您的密碼:”TOAAAIFAAA=”ABC”CLEAR?“歡迎使用本系統(tǒng)!”ELSE?”密碼錯(cuò)誤!”WAITreturnENDIFSETTALKON26例1:從屏幕輸入你的身份,如果是學(xué)生,則顯示“好好學(xué)習(xí),天天向上”

ClearAccept“請(qǐng)輸入你的身份”toSFIFSF=“學(xué)生”??“好好學(xué)習(xí),天天向上!”

Endif例2:從屏幕輸入一個(gè)數(shù)字型數(shù)據(jù)到變量X中,如果x≤200,則給其加500;如果200<x≤300,則加300;否則加100在屏幕上輸出x的值。

Clearinput“請(qǐng)輸入一個(gè)數(shù)字型數(shù)據(jù):”toxIfx<=200X=x+500ElseIfx>200andx<=300X=x+300ElseX=x+100

EndifEndif

Clear?x27P186頁(yè)一、選擇題4、有如下程序:Inputtoa100Ifa=10s=0EndifS=1?s假定在鍵盤(pán)輸入的A的值一定是數(shù)值型,那么上面條件選擇程序的執(zhí)行結(jié)果是:A、0B、1C、由A的值決定D、程序出錯(cuò)28P187頁(yè)第二填空題1、有一分支程序?yàn)椋篒fs>100dop1.prgElseifs>10dop2.prgelseifs>1dop3.prgelsedop4.prg

endifendifendif分別寫(xiě)出執(zhí)行P·,P3,P4子程序的條件表達(dá)式Dop1.prg條件為S>10Dop2.prg條件為()Dop3.prg條件為()Dop4.prg條件為()29

3.多向分支

多向分支語(yǔ)句,即根據(jù)多個(gè)條件表達(dá)式的值,選擇執(zhí)行多個(gè)操作中的一個(gè)對(duì)應(yīng)執(zhí)行。(1)語(yǔ)句格式:

格式:DOCASECASE<條件表達(dá)式1> <語(yǔ)句序列1>[CASE<條件表達(dá)式2> <語(yǔ)句序列2> …

CASE<條件表達(dá)式N> <語(yǔ)句序列N>][OTHERWISE <語(yǔ)句序列N+1>]ENDCASE

30B)分支語(yǔ)句語(yǔ)句序列1條件1格式: DOCASE CASE<條件1><語(yǔ)句序列2>

CASE<條件2> <語(yǔ)句序列2> ……

CASE<條件n> <語(yǔ)句序列n>[OTHERWISE<語(yǔ)句序列>]

ENDCASE31注:(1)不管有幾個(gè)CASE條件成立,只有最先成立的那個(gè)CASE條件的對(duì)應(yīng)命令序列被執(zhí)行。(2)若所有CASE條件都不成立,且沒(méi)有OTHERWISE子句,則直接跳出本結(jié)構(gòu)。(3)DOCASE和ENDCASE必須成對(duì)出現(xiàn),DOCASE是本結(jié)構(gòu)的入口,ENDCASE是本結(jié)構(gòu)的出口32

【例6-12】假設(shè)收入(P)與稅率(R)的關(guān)系如下表,編程

求稅金。程序文件名為PROG12.PRG。

0 P<800 R=0.05 800≤P<2000 0.08 2000≤P<5000 0.1P≥5000

SETTALKOFFCLEARINPUT“請(qǐng)輸入收入:”TOPDOCASECASEP<800R=0CASEP<2000R=0.05CASEP<5000R=0.08OTHERWISER=0.1ENDCASETAX=P*R?”稅金為:”,TAXSETTALKONRETURN33例:計(jì)算分段函數(shù)值: 2x-1 (x<0) 3x+5 (0<=x<3) y= x+1 (3<=x<5) 5x-3 (5<=x<10) 7x+2 (x>=10)

若輸入5,分析程序如何執(zhí)行?34SETTALKOFFINPUT"輸入X值:"TOXDOCASECASEX<0 F=2*X-1CASEX<3 F=3*X+5CASEX<5 F=X+1CASEX<10 F=5*X-3OTHERWISE F=7*X+2ENDCASE?ySETTALKONRETURN35例:從鍵盤(pán)輸入學(xué)生成績(jī),判斷輸出:優(yōu)秀,良好,一般,差。

ClearInput“請(qǐng)輸入你的成績(jī):”tocj

DocaseCasecj>90??“你是優(yōu)秀學(xué)生”

Casecj>=80??”你的成績(jī)良好”

Casecj>=60??“你的成績(jī)一般,需要繼續(xù)努力!”

Otherwise??“你的成績(jī)太差,趕緊努力!”

Endcasereturn363、循環(huán)結(jié)構(gòu) 循環(huán)結(jié)構(gòu)也稱(chēng)為重復(fù)結(jié)構(gòu),是指程序在執(zhí)行的過(guò)程中,其中的某段代碼被重復(fù)執(zhí)行若干次。被重復(fù)執(zhí)行的代碼段,通常稱(chēng)之為循環(huán)體。VF中的循環(huán)結(jié)構(gòu)語(yǔ)句包括:DOWHILE-ENDDO、FOR-ENDFOR和SCAN-ENDSCAN語(yǔ)句。37循環(huán)結(jié)構(gòu)

1.DOWHILE循環(huán)語(yǔ)句【格式1】DOWHILE<條件表達(dá)式><語(yǔ)句序列>

ENDDO

一個(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ǔ)句序列38【格式2】DOWHILE<條件表達(dá)式> <語(yǔ)句序列1>[LOOP]<語(yǔ)句序列2>[EXIT]<語(yǔ)句序列3>

ENDDOLOOP語(yǔ)句:強(qiáng)行返回到循環(huán)開(kāi)始語(yǔ)句。EXIT語(yǔ)句:強(qiáng)行跳出循環(huán),接著執(zhí)行ENDDO后的語(yǔ)句39功能:

(1)若第一次判斷條件時(shí),條件即為假,則循環(huán)體一次都不執(zhí)行。(2)若循環(huán)體包含LOOP命令,那么當(dāng)遇到LOOP時(shí),就結(jié)束循環(huán)體的本次執(zhí)行,不再執(zhí)行其后面的語(yǔ)句,而是轉(zhuǎn)回DOWHILE處重新判斷條件。(3)若循環(huán)體包含EXIT命令,那么當(dāng)遇到EXIT時(shí),就結(jié)束該語(yǔ)句的執(zhí)行,轉(zhuǎn)去執(zhí)行ENDDO后面的語(yǔ)句(4)通常LOOP或EXIT出現(xiàn)在循環(huán)體內(nèi)嵌套的選擇語(yǔ)句中,根據(jù)條件決定是LOOP回去,還是EXIT出去?!靖袷?】DOWHILE<條件表達(dá)式> <語(yǔ)句序列1>[LOOP]<語(yǔ)句序列2>[EXIT]<語(yǔ)句序列3>

ENDDO40執(zhí)行該語(yǔ)句時(shí),先判斷DOWHILE處的循環(huán)條件是否成立,如果條件為真,則執(zhí)行DOWHILE 與ENDDO之間的命令序列(循環(huán)體)。當(dāng)執(zhí)行到ENDDO時(shí),返回到DOWHILE,再次判斷循環(huán)條件是否為真,以確定是否再次執(zhí)行循環(huán)體。若條件為假,則結(jié)束該循環(huán)語(yǔ)句,執(zhí)行ENDDO后面的語(yǔ)句?!靖袷?】DOWHILE<條件表達(dá)式> <語(yǔ)句序列1>[LOOP]<語(yǔ)句序列2>[EXIT]<語(yǔ)句序列3>

ENDDO41例:計(jì)算S=1+2+…+100。(test5.prg)分析:(1)引進(jìn)變量s和i。s用來(lái)保存累加的結(jié)果,初值為0;

i既作為被累加的數(shù)據(jù),也作為控制循環(huán)條件是否成立的變量,初值為1。(2)重復(fù)執(zhí)行命令s=s+i和i=i+1,直至i的值超過(guò)100。每一次執(zhí)行,s的值增加i,i的值增加1

4243【例6-20】逐條顯示在STUDENT數(shù)據(jù)庫(kù)的STUD表中性別為“男”的所有記錄。程序文件名為PROG20.PRG。SETTALKOFFCLEAROPENDATABASESTUDENTUSESTUDDOWHILE.NOT.EOF()IF性別=”男”DISPLAYENDIFSKIPENDDOCLOSEDATABASESETTALKONRETURN

44B)步長(zhǎng)型循環(huán)語(yǔ)句:

FOR-ENDFOR語(yǔ)句 該語(yǔ)句通常用于實(shí)現(xiàn)循環(huán)次數(shù)已知情況下的循環(huán)結(jié)構(gòu)。格式:

FOR<循環(huán)變量>=<初值>TO<終值>[STEP<步長(zhǎng)>] <循環(huán)體>

ENDFOR|NEXT45

2.FOR循環(huán)語(yǔ)句格式:FOR<內(nèi)存變量>=<1>

TO<10>step2 <語(yǔ)句序列> [EXIT] [LOOP] ENDFOR/NEXT

46功能: (1)<步長(zhǎng)>的默認(rèn)值為1。(2)<初值>、<終值>和<步長(zhǎng)>都是數(shù)值表達(dá)式。但這些表達(dá)式僅在循環(huán)語(yǔ)句執(zhí)行開(kāi)始時(shí)被計(jì)算一次。在循環(huán)語(yǔ)句的執(zhí)行過(guò)程中,初值、終值和步長(zhǎng)是不會(huì)改變的。(3)可以在循環(huán)體內(nèi)改變循環(huán)變量的值,但這會(huì)影響循環(huán)體的執(zhí)行次數(shù)。(4)EXIT和LOOP命令同樣可以出現(xiàn)在該循環(huán)語(yǔ)句的循環(huán)體內(nèi)。當(dāng)執(zhí)行到LOOP命令時(shí),結(jié)束循環(huán)體的本次執(zhí)行,然后循環(huán)變量增加一個(gè)步長(zhǎng)值,并再次判斷條件是否成立。47求1到100中偶數(shù)的和48例:從鍵盤(pán)輸入10個(gè)數(shù),然后找出其中的最大值和最小值。CLEAR &&(test9.prg)INPUT“請(qǐng)輸入一個(gè)數(shù):”TOaA=5 STOREaTOma,miMa=5mi=5 FORi=2TO10A=4mi=4 INPUT“請(qǐng)輸入另一個(gè)數(shù):”TOaA=6ma=6 IFma<a ma=a ENDIF IFmi>a mi=a ENDIF ENDFOR ?“最大值:”,ma ?“最小值:”,mi RETURN

49

P1883、寫(xiě)出下列程序的運(yùn)行結(jié)果SettalkoffDIMENSIONA(6)FORK=1TO6A(K)20-2*KENDFORK=5DOWHILEK>=1A(K)=A(K)-A(K+1)K=K-1ENDDO?A(1),A(3),A(5)SETTALKON運(yùn)行結(jié)果:?50C)數(shù)據(jù)表掃描循環(huán)語(yǔ)句:

SCAN-ENDSCAN語(yǔ)句格式:

SCAN[<范圍>][FOR<條件1>][WHILE<條件2>] <循環(huán)體>

ENDSCAN

執(zhí)行該語(yǔ)句時(shí),記錄指針自動(dòng)、依次地在當(dāng)前表的指定范圍內(nèi)滿(mǎn)足條件的記錄上移動(dòng),對(duì)每一條記錄執(zhí)行循環(huán)體內(nèi)的命令。2)語(yǔ)句功能:該語(yǔ)句在指定的范圍內(nèi),默認(rèn)范圍為ALL,用數(shù)據(jù)記錄指針來(lái)控制循環(huán)次數(shù)。執(zhí)行語(yǔ)句時(shí),首先判斷函數(shù)EOF()的值,若其值為“真”,則結(jié)束循環(huán),否則,結(jié)合〈條件表達(dá)式1〉或〈條件表達(dá)式2〉,執(zhí)行〈命令行序列〉,記錄指針移到指定的范圍和條件內(nèi)的下一條記錄,重新判斷函數(shù)EOF()的值,直到函數(shù)EOF()的值為真時(shí)結(jié)束循環(huán)。51【例6-30】輸出STUDENT數(shù)據(jù)庫(kù)的STUD表中所有團(tuán)員的姓名和地址。程序文件名為PROG30.PRG。SETTALKOFFCLEAROPENDATABASESTUDENTUSESTUDSCANFOR是否團(tuán)員

?姓名,地址ENDSCANCLOSEDATABASESETTALKONRETURN52多重循環(huán)結(jié)構(gòu)程序設(shè)計(jì)在一個(gè)循環(huán)體中再包含有循環(huán)結(jié)構(gòu),稱(chēng)之為二重循環(huán)結(jié)構(gòu)(或二重循環(huán)嵌套);在二重循環(huán)結(jié)構(gòu)的循環(huán)體中,若還包含循環(huán)結(jié)構(gòu),稱(chēng)為三重循環(huán)結(jié)構(gòu)。二重及其以上的循環(huán)結(jié)構(gòu)統(tǒng)稱(chēng)為多重循環(huán)結(jié)構(gòu)。這里我們主要介紹二重循環(huán)結(jié)構(gòu)。53多重循環(huán)的基本結(jié)構(gòu)DOWHILE<條件1><循環(huán)體1>

DOWHILE<條件2> <循環(huán)體2> ENDDO<循環(huán)體3> ENDDO A=0ForI=1to3 Forj=1to3 A=A+1

Endforendfor答案為:954FOR<變量1>=<初值1>TO<終值1>STEP<步長(zhǎng)1><循環(huán)體1>

FOR<變量2>=<初值2>TO<終值2>STEP<步長(zhǎng)2> <循環(huán)體2>

ENDFOR <循環(huán)體3> ENDFOR55多重循環(huán)的執(zhí)行過(guò)程執(zhí)行過(guò)程的總體原則是:外層循環(huán)變量每取一次值,內(nèi)層循環(huán)要完整地循環(huán)一遍。若<循環(huán)體1>、<循環(huán)體2>或<循環(huán)體3>中包含有LOOP或EXIT命令,它們會(huì)改變循環(huán)程序的執(zhí)行順序。56i=0dowhilei<10ifint(i/2)=i/2?"偶數(shù)"

else?"奇數(shù)"

endifi=i+1enddo576.3過(guò)程及過(guò)程調(diào)用

VisualFoxPro與其他高級(jí)語(yǔ)言一樣,支持結(jié)構(gòu)化程序設(shè)計(jì)方法,允許將若干命令或語(yǔ)句組合在一起作為整體調(diào)用,這些可獨(dú)立存在并可整體調(diào)用的命令語(yǔ)句組合稱(chēng)為過(guò)程。

1.調(diào)用過(guò)程語(yǔ)句,即執(zhí)行已有的過(guò)程。語(yǔ)句格式:

DO〈過(guò)程名〉

WITH<參數(shù)表>WITH用于主程序和子程序間參數(shù)的傳遞。語(yǔ)句功能:執(zhí)行以〈過(guò)程名〉為名的過(guò)程。

2.過(guò)程返回語(yǔ)句,即返回過(guò)程的調(diào)用處。語(yǔ)句格式:

RETURN

語(yǔ)句功能:將控制返回到調(diào)用程序中調(diào)用命令的下一語(yǔ)句。586.3.1外部過(guò)程

外部過(guò)程也叫子程序,和主程序一樣是以程序文件(.PRG)的形式單獨(dú)存儲(chǔ)在磁盤(pán)上【例】分別建立如下程序文件,*MAIN.PRGSETTALKOFF?”正在執(zhí)行主程序”DOSUB1SETTALKON

*SUB1.PRG?”正在執(zhí)行SUB1”RETURN

59將若干個(gè)過(guò)程按一定的規(guī)定放在一個(gè)大文件中,這個(gè)文件稱(chēng)為過(guò)程文件。(1)過(guò)程文件的建立命令格式與建立程序文件一樣:格式:MODIFYCOMMAND<過(guò)程文件名>

過(guò)程文件的格式要求每個(gè)過(guò)程文件的開(kāi)頭必須用下列語(yǔ)句:格式:PROCEDURE<過(guò)程名>

功能:標(biāo)明是一個(gè)過(guò)程。參數(shù)描述:<過(guò)程名>:指定過(guò)程名稱(chēng)。命名方法與文件名的命名方法相同。2、過(guò)程與過(guò)程文件

606.3.2內(nèi)部過(guò)程

內(nèi)部過(guò)程:把多個(gè)過(guò)程組織在一個(gè)文件中(這個(gè)文件稱(chēng)之為過(guò)程文件),或者把過(guò)程放在調(diào)用它的程序文件的末尾。

VisualFoxPro為了識(shí)別過(guò)程文件或者程序文件中的不同過(guò)程,規(guī)定過(guò)程文件或者程序文件中的過(guò)程必需用PROCEDURE語(yǔ)句說(shuō)明。其格式為:PROCEDURE<過(guò)程名><命令序列>[RETURN[<表達(dá)式>]]

61過(guò)程放在程序文件中【例】建立如下程序文件,*MAIN.PRGSETTALKOFF?”正在執(zhí)行主程序”DOSUB1SETTALKON

ProcedureSUB1?”正在執(zhí)行SUB1”RETURN62例: 下面是一個(gè)模塊定義和調(diào)用的程序。涉及三個(gè)文件:程序文件f1.prg,其中的代碼為主程序,另外包含一個(gè)過(guò)程p1;程序文件f2.prg作為子程序被主程序調(diào)用;過(guò)程文件f3.prg包含兩個(gè)過(guò)程p2和p3。63setprocetof3?"主程序開(kāi)始“f2()dop1?"主程序結(jié)束“*過(guò)程procep1?"過(guò)程p1開(kāi)始“?"調(diào)用p3()“?"返回值:",p3()?"過(guò)程p1結(jié)束“endproc?"子程序f2開(kāi)始“?"調(diào)用p2()“x=p2()?"返回值:",x?"子程序f2結(jié)束“returnprocep2returnprocep3return100

f1.prg

f2.prgf3.prg

64過(guò)程文件的建立過(guò)程文件的建立方法與程序文件相同??捎肕ODIFYCOMMAND<過(guò)程文件名>命令或調(diào)用其他文字編輯軟件來(lái)建立。過(guò)程文件的結(jié)構(gòu)一般為:PROCEDURE<過(guò)程名1><命令序列1>RETURN

PROCEDURE<過(guò)程名2><命令序列2>RETURN…PROCEDURE<過(guò)程名N><命令序列N>RETURN656.3.3過(guò)程調(diào)用中的參數(shù)傳遞

1.有參過(guò)程中的形式參數(shù)定義有參過(guò)程中的形式參數(shù)定義語(yǔ)句為:

【格式】PARAMETERS<參數(shù)表>

該語(yǔ)句必需是過(guò)程中第一條語(yǔ)句。<參數(shù)表>中的參數(shù)可以是任意合法的內(nèi)存變量名

66【例5-11】計(jì)算圓面積的主程序?yàn)镸YMAIN.PRG,子程序?yàn)镸YSUB.PRG*MYMAIN.PRGCTALK=SET("TALK")SETTALKOFFCLEARSTORE0TORR,AREADOWHILE.T. INPUT"請(qǐng)輸入圓的半徑:"TORR DOMYSUBWITHRR,AREA ?"半徑為"+ALLTRIM(STR(RR))+"的圓的面積是:",AREA WAIT"還要繼續(xù)計(jì)算嗎(Y/N)?"TOANSWER IFUPPER(ANSWER)="Y" LOOP ELSE EXIT ENDIFENDDOSETTALK&CTALK調(diào)用過(guò)程并向過(guò)程傳遞參數(shù)該過(guò)程接收參數(shù)并計(jì)算*MYSUB.PRGPROCEDUREMYSUBPARAMETERSRS=PI()*R^2RETURN接收參數(shù)語(yǔ)句67【例6-34】用參數(shù)傳遞編程,計(jì)算圓的面積。*主程序名PROG34SETTALKOFFCLEARS=0INPUT”請(qǐng)輸入圓的半徑:”TORdoAREAwithr,s?”圓的面積為:”,SSETTALKON

PROCEDUREAREA &&計(jì)算面積的過(guò)程PARAMETERX,Y &&形參說(shuō)明Y=3.1416*X**2RETURN68變量的作用域程序設(shè)計(jì)離不開(kāi)變量。一個(gè)變量除了類(lèi)型和取值之外,還有一個(gè)重要的屬性就是它的作用域,變量的作用域指的是變量在什么范圍內(nèi)是有效或能夠被訪(fǎng)問(wèn)的。在VF中,若以變量的作用域來(lái)分,內(nèi)存變量可分為公共變量、私有變量和局部變量三類(lèi)。691、公共變量在任何模塊中都可使用的變量稱(chēng)為公共變量。公共變量要先建立后使用,公共變量可用PUBLIC命令建立。PUBLIC<內(nèi)存變量表>該命令的功能是建立公共的內(nèi)存變量,并為它們賦初值邏輯假.F.。

例如:PUBLICx,y,s(10)建立了三個(gè)公共內(nèi)存變量;簡(jiǎn)單變量x和y以及一個(gè)含10個(gè)元素的數(shù)組s,它們的初值都是.F.。70注:公共變量一旦建立就一直有效,即使程序運(yùn)行結(jié)束返回到命令窗口也不會(huì)消失。只有執(zhí)行CLEARMEMORY、RELEASE、QUIT等命令后,公共變量才被釋放。在命令窗口中直接使用而由系統(tǒng)自動(dòng)隱含建立的變量也是公共變量。712、局部變量局部變量只能在建立它的模塊中使用,不能在上層或下層模塊中使用。當(dāng)建立它的模塊程序運(yùn)行結(jié)束時(shí),局部變量自動(dòng)釋放。局部變量用LOCAL命令建立:

LOCAL<內(nèi)存變量表>

該命令建立指定的局部?jī)?nèi)存變量,并為它們賦初值邏輯假.F.。由于LOCAL與LOCATE前四個(gè)字母相同,所以這條命令的命令動(dòng)詞不能縮寫(xiě)。局部變量也要先建立后使用。723、私有變量 在程序中直接使用(沒(méi)有通過(guò)PUBLIC和LOCAL命令事先聲明)而由系統(tǒng)自動(dòng)隱含建立的變量都是私有變量。私有變量的作用域是建立它的模塊及其下屬的各層模塊。一旦建立它的模塊程序運(yùn)行結(jié)束,這些私有變量將自動(dòng)清除。73*14.prg clearPUBLICX1 &&公共變量:在所有模塊均有效x1=”aaa”LOCALX2&&局部變量:僅在本模塊有效(不能在上層或下層模塊中使用)

x2="bbb"STORE"ccc"TOX3 &&私有變量:僅在本模塊及其下屬模塊DOP6?"X1=",X1?"X2=",X2?"X3=",X3RETURN*過(guò)程P6PROCEDUREP6?"主程序中…"?"X1=",X1?"X3=",X3RETURN在命令窗口輸入下列命令:RELEASEALL&&清除所有用戶(hù)定義的內(nèi)存變量DO14?”返回命令窗口時(shí):”?”x1=”,x1746.3.6內(nèi)存變量的作用域

1.全局變量全局變量是指在所有程序模塊中都有效的內(nèi)存變量

在程序或過(guò)程中定義全局變量的語(yǔ)句為:

溫馨提示

  • 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)論