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

下載本文檔

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

文檔簡(jiǎn)介

第8章結(jié)構(gòu)化程序設(shè)計(jì)VisualFoxPro程序設(shè)計(jì)主講教師:高駿Emil:704098395@

本章要求:1.掌握VFP程序的建立、修改、運(yùn)行。

2.掌握程序的三種基本結(jié)構(gòu)。3.了解過程和過程文件。

本章要點(diǎn):

程序的三種控制結(jié)構(gòu)。學(xué)時(shí)安排:6學(xué)時(shí)(理論)+6學(xué)時(shí)(實(shí)踐)課程要求結(jié)束作業(yè)

第8章程序設(shè)計(jì)基礎(chǔ)

8.1

程序文件及其編輯環(huán)境

8.2

程序中幾種常用命令

8.3

程序的基本控制結(jié)構(gòu)

8.4

過程和用戶自定義函數(shù)8.1程序文件及其編輯環(huán)境

在ViusalFoxPro中,程序是由一系列ViusalFoxPro可以理解的命令、函數(shù)和操作組成的,這些命令和函數(shù)可以在ViusalFoxPro中的命令窗口和以人工方式逐一執(zhí)行,也可以把它們放在一個(gè)程序文件中,以文件的形式來執(zhí)行?!?.1】

假定學(xué)號(hào)的前四位為入學(xué)年份,第5,6位為專業(yè)代碼.編寫命令文件test.prg,分別統(tǒng)計(jì)所有學(xué)生和2010年入學(xué),專業(yè)代碼為03的學(xué)生選修課程號(hào)為101課程的平均成績(jī).SETTALKOFFSETDEFAULTTOd:\學(xué)生管理OPENDATA學(xué)生管理SELECTAVG(成績(jī))FROM

成績(jī)

WHERE; 課程號(hào)=“101”INTOARRAYm1SELECTAVG(成績(jī))FROM成績(jī)

WHERE; 課程號(hào)=“101”ANDLEFT(學(xué)號(hào),4)=“2010”;ANDSUBS(學(xué)號(hào),5,2)=“03”INTOARRAYm2CLEAR?”所有學(xué)生的平均成績(jī):”font“宋體”,20,m1(1)font“宋體”?”指定學(xué)生的平均成績(jī):”font“宋體”,20,m2(1),font“宋體”CLOSEDATASESETTALKONRETURN(1)以命令方式建立、修改程序文件ModifyCommand<程序文件名>格式:功能:創(chuàng)建、編輯以“程序文件名”為名的程序文件說明:1.在編輯窗口輸入一條條命令。2.^w或關(guān)閉窗口存盤、^q或者<Esc>放棄存盤3.程序文件的擴(kuò)展名為.prg,可以省略。(2)以菜單方式建立、修改程序文件文件新建文件打開已有的程序文件.prg8.1.1程序文件的建立和運(yùn)行1.程序文件的建立(2)命令方式(1)菜單方式程序運(yùn)行Do<文件名>格式:功能:運(yùn)行程序文件程序文件建立后,可以用多種方式、多次執(zhí)行它。下面是兩種常用的方式。選中運(yùn)行2.程序文件的運(yùn)行、調(diào)用8.1.2VisualFoxPro編程特點(diǎn)1.變量不區(qū)分大小寫類型說明示例類型說明示例a數(shù)組型aStudentsf浮點(diǎn)型fInterestc字符型cNamel邏輯型lFlagy貨幣型yCurrentValuen數(shù)值型nCounterd日期型dBirthDayo對(duì)象oEmployeet日期時(shí)間型tLastModifiedu未知uReturnValueb雙精度型bValue建議的變量命名約定2.變量不需預(yù)先聲明當(dāng)把一個(gè)值保存到某一變量而該變量原先不存在時(shí),VisualFoxPro系統(tǒng)會(huì)隱含地聲明它,并有初始值存在。用戶在變量里放什么數(shù)據(jù),變量就是什么類型。

3.命令分行程序中每條命令都以回車鍵結(jié)尾,一行只能寫一條命令。若需分行書寫,可以使用分號(hào)“;”表示續(xù)行。4.添加注釋VisualFoxPro系統(tǒng)對(duì)整行注釋和行中部分注釋有不同的格式。整行注釋使用“*”引導(dǎo),行中部分注釋使用“&&”引導(dǎo)。8.2程序中幾種常用命令8.2.1基本輸入命令1.Wait命令

暫停程序的運(yùn)行,直到用戶輸入一個(gè)字符,也可用于輸出一條提示信息WAIT[<信息文本>]

[TO

<內(nèi)存變量>][WINDOW[AT

<行>,<列>]]

[NOWAIT][CLEAR][NOCLEAR][TIMEOUT

<數(shù)值表達(dá)式>]保存鍵入的字符,省略TO子句不保存省略則顯示“按任意鍵繼續(xù)….不等待用戶輸入關(guān)閉提示窗口不關(guān)閉提示窗口,直到下一個(gè)WAIT命令自動(dòng)關(guān)閉WINDOW子句使屏幕出現(xiàn)一個(gè)WAIT提示窗口,內(nèi)容由<信息文本>確定,位置有AT子句指定.省略AT子句則出現(xiàn)在屏幕右上角TIMEOUT子句設(shè)定等待時(shí)間(以秒為單位)說明明:③若指指定定WINDOWS子句句,則會(huì)會(huì)出出現(xiàn)現(xiàn)一一個(gè)個(gè)WAIT提示示窗窗口口,用以以顯顯示示提提示示信信息息.提示示窗窗口口在在主主窗窗口口的的右右上上角角,也可可以以用用AT短語語指指定定其其在在主主窗窗口口中中的的位位置置.④若同同時(shí)時(shí)選選用用NOWAIT短語語和和WINDOWS子句句,系統(tǒng)統(tǒng)將將不不等等待待用用戶戶按按鍵鍵,直接接往往下下執(zhí)執(zhí)行行.⑤若選選用用NOCLEAR短語語,則不不關(guān)關(guān)閉閉提提示示窗窗口口,直到到用用戶戶執(zhí)執(zhí)行行下下一一條條WAITWINDOWS命令令或或WAITCLEAR命令令為為止止.⑥TIMEOUT子名名用用來來設(shè)設(shè)定定等等待待時(shí)時(shí)間間(秒數(shù)數(shù))。例如如執(zhí)執(zhí)行行::Wait““歡迎迎使使用用??!””Windows在屏屏幕幕右右上上角角彈彈出出一一個(gè)個(gè)窗窗口口,,顯顯示示““歡歡迎迎使使用用??!””,,按按任任意意鍵鍵后后窗窗口口消消失失。。2.Accept命令令A(yù)ccept[<提示示信信息息>]To<內(nèi)存存變變量量>格式式::功能能:在程程序序執(zhí)執(zhí)行行過過程程中中,,暫暫停停執(zhí)執(zhí)行行,,等等待待用用戶戶從從鍵鍵盤盤輸輸入入字字符符串串。。當(dāng)當(dāng)用用戶戶以以回回車車鍵鍵結(jié)結(jié)束束輸輸入入完完數(shù)數(shù)據(jù)據(jù)后后,,系系統(tǒng)統(tǒng)將將用用戶戶輸輸入入的的內(nèi)內(nèi)容容作作為為字字符符串串賦賦值值給給指指定定內(nèi)內(nèi)存存變變量量。。然然后后繼繼續(xù)續(xù)往往下下執(zhí)執(zhí)行行程程序序。。說明:(1)如果選用用提示信息息,系統(tǒng)會(huì)會(huì)在屏幕上上顯示提示示信息;(2)輸入的數(shù)數(shù)據(jù)只能是是字符型數(shù)數(shù)據(jù),并且且不用定界界符;(3)如果用戶戶什么數(shù)據(jù)據(jù)都不輸,,就按下回回車鍵,系系統(tǒng)認(rèn)為是是輸入了一一個(gè)空串,,自動(dòng)會(huì)把把空串賦給給指定的內(nèi)內(nèi)存變量中中?!纠?.2】編程從鍵盤盤輸入某數(shù)數(shù)據(jù)庫(kù)的文文件名,要求打開該該數(shù)據(jù)庫(kù)并并顯示其內(nèi)內(nèi)容.程序文件名名為PROG1.PRG。SETTALKOFFStedefaulttod:\學(xué)生管理CLEARACCEPT"請(qǐng)輸入數(shù)據(jù)據(jù)庫(kù)名:"TOAAAOPENDATABASE&AAAACCEPT"請(qǐng)輸入表名名:"TOBBBUSE&BBBbrowseUSESETTALKONRETURNDoprog1請(qǐng)輸入數(shù)據(jù)據(jù)庫(kù)名:學(xué)生管理請(qǐng)輸入表名名:學(xué)生Use人才檔案ExclusiveAccept"請(qǐng)輸入編號(hào)號(hào):"TobhLocateFor編號(hào)=bh?編號(hào),姓名Usesetdefaulttod:\人才管理opendata人才管理Accept"請(qǐng)輸入職稱稱:"tozcselect*from專業(yè)特長(zhǎng);where職稱=zc【例8.3】輸入姓名,,在人才檔檔案表中查查詢某編號(hào)號(hào)對(duì)應(yīng)的姓姓名【例8.4】編寫程序,,瀏覽專業(yè)業(yè)特長(zhǎng)表中中不同職稱稱的記錄集集。Do8.4請(qǐng)輸入職稱稱:教授Do8.3請(qǐng)輸入編號(hào)號(hào):sh01001Sh01001金銀橋輸入字符串串時(shí)不加定定界符3.Input命令I(lǐng)nput[<提示信息>]To<內(nèi)存變量>格式:功能:(1)如果選用用<提示信息>,那么系統(tǒng)統(tǒng)會(huì)首先顯顯示該提示示信息的值值,作為提提示信息。。(2)輸入的數(shù)數(shù)據(jù)可以是是常量、變變量,也可可以是一般般的表達(dá)式式。但不能能不輸入任任何內(nèi)容直直接按回車車鍵。(3)輸入字符符串是必須須加定界符符“”,輸入邏輯輯型常量要要用圓點(diǎn)定定界符(如如.T.,.F.),輸入日日期時(shí)間型型常量是要要用大括號(hào)號(hào)(如{^2012-03-01})。說明:等待用戶從從鍵盤輸入入數(shù)據(jù),用用戶可以輸輸入任意合合法的表達(dá)達(dá)式。當(dāng)以以回車鍵結(jié)結(jié)束輸入時(shí)時(shí),系統(tǒng)將將表達(dá)式的的值存入指指定的內(nèi)存存變量,程程序繼續(xù)運(yùn)運(yùn)行?!纠?.5】編寫命令文文件test1.prg,查找指定日日期以后后出生的學(xué)學(xué)生SETDEFAULTTOd:\學(xué)生管理OPENDATABASE學(xué)生管理INPUT"輸入日期:"TOmrqSELECT學(xué)號(hào),姓名,出生日期FROM學(xué)生;WHERE出生日期>mrq;NOWAITCLOSEDATABASERETURNDotest1輸入日期::{^1993-01-01}ClearInput“長(zhǎng)方形一邊邊的長(zhǎng)為::”TOAInput“長(zhǎng)方形另一一邊的長(zhǎng)為為:”TOBS=A*B?"長(zhǎng)方形的面面積為:",S【例8.6】從鍵盤輸入入兩個(gè)任意意正數(shù),編編程求以兩兩數(shù)為邊長(zhǎng)長(zhǎng)的長(zhǎng)方形形面積。程程序文件名名為8.6.prg在命令窗口口中輸入::ModifyCommand8.6Do8.6長(zhǎng)方形一邊邊的長(zhǎng)為::5長(zhǎng)方形另一一邊的長(zhǎng)為為:6運(yùn)行結(jié)果::長(zhǎng)方形的面面積為:30屏幕顯示鍵盤輸入Setdefaulttod:\人才管理Input"請(qǐng)輸入要?jiǎng)h刪除的人的的出生日期期:"toCsrqDeletefrom人才檔案where出生日期=CsrqSelect人才檔案BrowClosedata【例8.7】編寫程序,,將人才檔檔案表中指指定的出生生日期的記記錄邏輯刪刪除。請(qǐng)輸入要?jiǎng)h刪除的人的的出生日期期:{^1969-02-03}4.格式輸入語語句格式:@<行,列>Say<提示信息>get<變量>@<行,列>Say<提示信息>get<變量>…….Read功能:在指定的行行、列位置置輸入一個(gè)個(gè)常量,當(dāng)當(dāng)執(zhí)行到Read語句時(shí),將將常量賦值值給指定的的變量。說明:1、多個(gè)@語句可以配配置一個(gè)Read語句。但是是中間不能能有別的語語句。2、Get后面的變量量要先賦值值。ClearSetdefaulttod:\人才管理Use專業(yè)特長(zhǎng)ExclusiveAccept"請(qǐng)輸入職稱稱:"tozcLocateAllFor職稱=zc@2,10Say"編號(hào)"Get編號(hào)@3,10Say"專業(yè)"Get專業(yè)@4,10Say"畢業(yè)學(xué)校"Get畢業(yè)學(xué)校@5,10Say"專業(yè)年限"Get專業(yè)年限@6,10Say“職稱”Get職稱ReadClosedata【例8.8】編寫程序,,在指定的的位置顯示示修改“專業(yè)特長(zhǎng)””表中指定定職稱的記記錄。@<行,列>Say<提示信息>[Picture<格式描述符符>]格式:功能:(1)在指定的的行、列輸輸出表達(dá)式式的值。(2)格式描述述符用來限限定數(shù)據(jù)輸輸出的類型型、長(zhǎng)度及及格式。8.2.2基本輸出語語句1.格式輸出語語句格式字符含義例子9只允許顯示數(shù)字字符與正負(fù)號(hào)Picture"999.99"#一個(gè)數(shù)值型數(shù)字與正負(fù)號(hào)Picture"####.##",千位分隔符Picture“99,999"$顯示貨幣符Picture"$999.99"X允許任意字符Picture"xxxxx"!將字符轉(zhuǎn)成大寫Picture"xxxxx"常用格式描描述符的功功能Use人才檔案ExclusiveAccept"請(qǐng)輸入編號(hào)號(hào):"tobhLocatFor編號(hào)=bh@13,20Say編號(hào)Picture"!!!!!!!!"@14,20Say姓名Picture"xxxxxxxxx"Use【例8.9】輸入編號(hào),,在人才檔檔案表中查查詢某編號(hào)號(hào)對(duì)應(yīng)的姓姓名。字符轉(zhuǎn)換成成大寫任意字符x1=Messagebox("您真的要退退出系統(tǒng)嗎嗎?",4+16+0,"退出系統(tǒng)")Ifx1=6ReturnEndifMessagebox(<““提示信息”>,<對(duì)話框類型型>,<“對(duì)話框標(biāo)題題“>)格式:功能:在屏幕上彈彈出一個(gè)指指定格式的的對(duì)話框。。說明:對(duì)話框類型型是由“按鈕個(gè)個(gè)數(shù)+顯示圖標(biāo)+默認(rèn)按鈕””組成。提示信息對(duì)話框標(biāo)題題提示信息對(duì)話框標(biāo)題題對(duì)話框類型型按鈕個(gè)數(shù)顯示圖標(biāo)默認(rèn)按鈕2.對(duì)話框MessageBox函數(shù)P67代碼代碼的含義0確定按鈕1確定、取消按鈕2終止、重試、和忽略按鈕3是、否和取消按鈕4是、否按鈕5重試、取消按鈕按鈕個(gè)數(shù)代代碼顯示圖標(biāo)代代碼代碼代碼的含義16停止圖標(biāo)32問號(hào)圖標(biāo)48感嘆號(hào)圖標(biāo)64信息圖標(biāo)默認(rèn)焦點(diǎn)按按鈕的代碼碼代碼代碼的含義0默認(rèn)焦點(diǎn)在第一個(gè)按鈕256默認(rèn)焦點(diǎn)在第二個(gè)按鈕512默認(rèn)焦點(diǎn)在第三個(gè)按鈕按鈕返回值按鈕返回值確定1忽略5取消2是6終止3否7單擊對(duì)話框框按鈕的返返回值4+16+0單擊“否”,返回7返回值送到到x1如果x1=“是”返回系統(tǒng)單擊“是””,返回68.2.3程序結(jié)尾尾命令1、程序的的末尾可可以使用用Return命令,能能使程序序執(zhí)行結(jié)結(jié)束,并并返回到到調(diào)用它它的上級(jí)級(jí)程序繼繼續(xù)執(zhí)行行,若無無上級(jí)程程序則返返回到命命令窗口口。2、使用另另一條命命令為Cancel,它可以以中止程程序運(yùn)行行,并返返回到命命令窗口口。3、使用Quit命令可以以結(jié)束程程序運(yùn)行行退出VisualFoxPro系統(tǒng)8.3程序的基基本控制制結(jié)構(gòu)常見的控控制結(jié)構(gòu)構(gòu)如下::1.順序結(jié)結(jié)構(gòu)順序結(jié)構(gòu)構(gòu)是在程程序執(zhí)行行時(shí),根根據(jù)程序序中語句句的書寫寫順序依依次執(zhí)行行的命令令序列。。VisualFoxPro系統(tǒng)中的的大多數(shù)數(shù)命令都都可以作作為順序序結(jié)構(gòu)中中的語句句。2.分支結(jié)結(jié)構(gòu)分支結(jié)構(gòu)構(gòu)是在程程序執(zhí)行行時(shí),根根據(jù)不同同的條件件,選擇擇執(zhí)行不不同的程程序語句句,用來來解決有有選擇、、有轉(zhuǎn)移移的諸多多問題。。3.循環(huán)結(jié)結(jié)構(gòu)循環(huán)結(jié)構(gòu)構(gòu)則能夠夠使某些些語句或或程序段段重復(fù)執(zhí)執(zhí)行若干干次。如如果某些些語句或或程序段段需要在在一個(gè)固固定的位位置上重重復(fù)操作作,使用用循環(huán)是是最好的的選擇。。8.3.1順序結(jié)構(gòu)構(gòu)順序結(jié)構(gòu)構(gòu)是一種種線性結(jié)結(jié)構(gòu)。是是程序設(shè)設(shè)計(jì)中最最簡(jiǎn)單同同時(shí)也是是最基本本的結(jié)構(gòu)構(gòu)。它要要求順序序地執(zhí)行行每一個(gè)個(gè)基本的的加工處處理單位位。命令序列1命令序列2【例8.10】計(jì)算圓的的周長(zhǎng)和和面積。。ClearInput"請(qǐng)輸入圓圓的半徑徑:"Tor&&輸入半徑徑c=2*3.14*r&&計(jì)算圓的的周長(zhǎng)s=3.14*r*r&&計(jì)算圓的的面積?"圓的周長(zhǎng)長(zhǎng):",c&&輸出周長(zhǎng)長(zhǎng)?“圓的面積積:”,s&&輸出面積積Return8.3程序的基基本控制制結(jié)構(gòu)分支結(jié)構(gòu)構(gòu)是在程程序執(zhí)行行時(shí),根根據(jù)不同同的條件件,選擇擇執(zhí)行不不同的程程序語句句。If<條件表達(dá)達(dá)式><語句序列列>EndIf格式:功能:首先計(jì)算算〈條件表達(dá)達(dá)式〉的值,當(dāng)當(dāng)〈條件表達(dá)達(dá)式〉的值為真真時(shí),執(zhí)執(zhí)行〈語句序列列〉;否則,,執(zhí)行EndIf后面的第第一條語語句。EndIf后面的語句TF語句序列條件1.簡(jiǎn)單的條條件語句句8.3.2條件分支支結(jié)構(gòu)ClearInput"X="TOxInput"Y="TOyIfx/3=Int(x/3)y=y+xEndIf?"Y=",y【例8.11】編寫程序序:先從從鍵盤接接收兩個(gè)個(gè)數(shù)x和y,然后判判斷x能否被3整除。如如果x能被3整除,那那么y的值增加加x;否則y的值不變變。EndIf后面的語句TF

y=y+xx/3=int(x/3)輸入x,yIfmod(X,3)=0【例8.12】編寫程序序:修改改“專業(yè)業(yè)特長(zhǎng)””表中的的數(shù)據(jù),,把編號(hào)號(hào)為“zj01002”的職稱從從“副教教授”改改為“教教授”。。ClearUse專業(yè)特長(zhǎng)長(zhǎng)ExclusiveLocateFor編號(hào)="zj01002"If職稱="副教授"Replace職稱With"教授"EndIfBrowseLast2.帶Else的條件語語句If〈條件表達(dá)達(dá)式〉〈語句序列列1〉Else〈語句序列列2〉EndIf格式:功能:FT語句序列1語句序列2條件EndIf后面的語句該語句首首先計(jì)算算〈條件表達(dá)達(dá)式〉的值,當(dāng)當(dāng)〈條件表達(dá)達(dá)式〉的值為真時(shí),執(zhí)行行〈語句序列列1〉中的命令令;否則則,執(zhí)行行〈語句序列列2〉中的命令令;執(zhí)行行完〈命令行序序列1〉或〈命令行序序列2〉后都將執(zhí)執(zhí)行EndIf后面的第第一條語語句?!纠?.13】輸入一個(gè)個(gè)姓名,,在“學(xué)學(xué)生”表中查找找該姓名名的學(xué)生生,如果果找到,顯示該記記錄的姓姓名、性性別和出出生日期期,否則則顯示““查無此此人!””,程序名為為test2.prgSETDEFAULTTOd:\學(xué)生管理理OPENDATABASE學(xué)生管理理USE學(xué)生IN0SELECT學(xué)生ACCEPT“請(qǐng)輸入待待查學(xué)生生姓名:”TONAMELOCATEFOR姓名=NAMEIFEOF()=.F.?”姓名:”+姓名FONT“宋體”,20?”性別:”+IIF(性別=.t.,“男”,”女”)FONT“宋體”,20?”出生日期期:”+DTOC(出生日期期,1)FONT“宋體”,20ELSE?”查無此人人!”FONT“宋體”,20ENDIFCLOSEDATABASERETURNmessagebox(“查無此人人!”,0+48+0,””例8.13”)語句執(zhí)行行時(shí),依依次判斷斷Case后面的條條件是否否成立。。當(dāng)發(fā)現(xiàn)現(xiàn)某個(gè)Case后面的條條件成立立時(shí),就就執(zhí)行該該Case和下一個(gè)個(gè)Case之間的語語句序列列,然后后執(zhí)行EndCase后面的語語句令。。如果所所有的條條件都不不成立,,則執(zhí)行行Otherwise與EndCase之間的語語句序列列,然后后轉(zhuǎn)向EndCase后面的語語句。3.多分支語語句DoCaseCase〈條件表達(dá)達(dá)式1〉<語句序列列1〉Case〈條件表達(dá)達(dá)式2〉<語句序列列2〉……Case〈條件表達(dá)達(dá)式N〉〈語句序列列N〉][Otherwise〈語句序列列N+1〉〉]EndCase格式:功能:條件2條件nOTHERWISE語句序列1語句序列2語句序列n語句序列n+1ENDCASE后面的語句條件1…①不管有幾幾個(gè)Case條件成立立,只有有最先成成立的那那個(gè)Case條件的對(duì)對(duì)應(yīng)命令令序列被被執(zhí)行。。②如果所所有的Case條件都不不成立,,且沒有有Otherwise子句,則則直接跳跳出本結(jié)結(jié)構(gòu)。③DoCase和EndCase必須配對(duì)對(duì)使用,,DoCase是本結(jié)構(gòu)構(gòu)的入口口,EndCase是本結(jié)構(gòu)構(gòu)的出口口。④DoCase和第一個(gè)個(gè)Case子句之間間不能插插入任何何命令。。說明:DoCaseCase〈條件表達(dá)式1〉<命令行序列1〉Case〈條件表達(dá)式2〉<命令行序列2〉……Case〈條件表達(dá)式N〉〈命令行序列N〉][Otherwise〈命令行序列N+1〉]EndCaseInput"請(qǐng)輸入考試成成績(jī):"ToxDoCaseCasex<60?"不及格"Casex<70?"及格"Casex<80?"中等"Casex<90?"良好"Otherwise?"優(yōu)秀"EndCase【例8.13】顯示當(dāng)前季節(jié)節(jié)。程序文件件如下。ClearYue=Month(Date())DoCaseCaseyue<4jj="春"Caseyue<7jj="夏"Caseyue<10jj="秋"Otherwisejj="冬"EndcaseWaitjjWindow從今天的日期期里取出月份份送到y(tǒng)ue測(cè)試表達(dá)式的的值是否在表表達(dá)式中,是是就返回.T.【例8.14】假設(shè)收入(P)與稅率(R)的關(guān)系如下下表,編程求求稅金。0P≤3500R=0.053500<P≤45000.084500<P≤65000.1P>6500ClearInput"請(qǐng)輸入收入::"ToPDoCaseCaseP<=3500R=0CaseP<=4500R=0.05CaseP<=6500R=0.08OtherwiseR=0.1EndCaseTax=(p-3500)*r?"稅金為:"+Str(tax)【例8.15】輸入一個(gè)字符符“男”或者者“女”到變變量“性別””中,再輸入入一個(gè)數(shù)值到到變量“身高高”中。計(jì)算算:如果性別別=“男”并且身高高又在180以上,輸出““參加籃球比比賽”,否則則輸出“參加加足球比賽””。如果性別別為“女”并并且身高在170以上輸出“參參加模特大賽賽”,否則輸輸出“參加健健美操比賽””。Acce"請(qǐng)輸入你的性性別:"To性別Input"請(qǐng)輸入你的身身高:"To身高If性別="男"DoCaseCase身高>=180?"參加籃球比賽賽!"Case身高<180?"參加足球比賽賽!"EndCaseElseDoCaseCase身高>=170?"參加模特比賽賽!"Case身高<170?"參加健美操比比賽!"EndCaseEndIfReturn用Case包含If語句怎么寫??bca解題步驟:交換a、b的值交換a、c的值交換b、c的值【例8.16】編寫程序,對(duì)對(duì)任給的三個(gè)個(gè)數(shù),按從小小到大的順序序輸出。輸入a,b,c的值開始TFA,b交換a>b?TFa>cA,c交換TFB,c交換b>c?Input"請(qǐng)輸入第1個(gè)數(shù):"toaInput"請(qǐng)輸入第2個(gè)數(shù):"tobInput"請(qǐng)輸入第3個(gè)數(shù):"toc?"排序前",a,b,cIfa>bt=aa=bb=tEndifIfa>ct=aa=cc=tEndifIfb>ct=bb=cc=tEndif?“排序后",a,b,ca,b排序a,c排序B,c排序8.4循環(huán)結(jié)構(gòu)程序序循環(huán)結(jié)構(gòu)也稱稱為重復(fù)結(jié)構(gòu)構(gòu),是指程序序在執(zhí)行的過過程中,程序序中的某段代代碼被重復(fù)執(zhí)執(zhí)行若干次。。被重復(fù)執(zhí)行行的代碼段,,通常稱之為為循環(huán)體。1.條件循環(huán)根據(jù)條件表達(dá)達(dá)式的值決定定循環(huán)體內(nèi)語語句的執(zhí)行次次數(shù)。格式1:功能:DoWhile<條件表達(dá)式><語句序列>EndDo條件FT循環(huán)體EndDo后面的語句首先計(jì)算〈條件表達(dá)式〉的值,當(dāng)〈條件表達(dá)式〉的值為真時(shí),,執(zhí)行循環(huán);;否則,執(zhí)行行EndDo后面的第一條條命令。如果果第一次判斷斷條件為假,,一次也不循循環(huán)?!纠?.17】統(tǒng)計(jì)“人才檔檔案”表中工工資超過7000元的人數(shù)。ClearSetdefaulttod:\人才管理Use人才檔案ExclusiveGoTopRc=0DoWhileEof()=.f.If工資現(xiàn)狀>7000rc=rc+1EndIfSkipEndDo@2,30Say"工資在7000元以上的人"@2,60SayrcUseClearSetdefaulttod:\人才管理Use人才檔案ExclusiveLocatefor工資>7000Rc=0DoWhileEof()=.f.rc=rc+1continueEndDo?"工資在7000元以上的人“,rcUseClearS=0I=1DoWhileI<=100S=S+II=I+1EndDo?"1+2+3+……+100=",S【例8.18】編程求1+2+3+……+100之和。一個(gè)循環(huán)結(jié)構(gòu)構(gòu)一般應(yīng)具備備如下的條件件:(1)循環(huán)的初始始條件:一般般為給循環(huán)控控制變量賦初初值;(2)循環(huán)頭:循循環(huán)語句的起起始,設(shè)置、、判斷循環(huán)條條件;(3)循環(huán)尾:循循環(huán)語句的結(jié)結(jié)尾;(4)循環(huán)體:位位于循環(huán)頭和和循環(huán)尾之間間、循環(huán)控制制重復(fù)執(zhí)行的的語句序列。。求s=1+3+5+7-------+51求s=1*2*3*--------*100(s=100!)求s=1!+2!+3!+…+n!求s=1!+2!+3!+…+n!DoWhile<條件表達(dá)式><語句序列1>[Loop]<語句序列2>[Exit]<語句序列3>EndDo格式2:功能:Loop語句:強(qiáng)行返返回到循環(huán)開開始語句。Exit語句:強(qiáng)行跳跳出循環(huán),接接著執(zhí)行EndDo后的語句EndDo的后繼語句循環(huán)體LoopExit循環(huán)條件ClearJi=0Ou=0Dowhile.t.Input””輸入一個(gè)整數(shù)數(shù):”ToaIfa=0ExitElseIfmod(a,2)=0ou=ou+1endif【例8.19】輸入任意整數(shù)數(shù),分別統(tǒng)計(jì)計(jì)偶數(shù)和奇數(shù)數(shù)的個(gè)數(shù),輸輸入0為結(jié)束程序。。Ifmod(a,2)<>0ji=ji+1EndifEndifEnddo?”奇數(shù)的個(gè)數(shù)為為:”,ji?”偶數(shù)的個(gè)數(shù)為為:”,ouReturnFlag=0I=2Input"請(qǐng)輸入一個(gè)大大于2的整數(shù)"ToNDoWhilei<nIfMod(n,i)<>0I=I+1LoopElseFlag=1ExitEndIfEndDo【例8.20】驗(yàn)證一個(gè)大于于2的整數(shù)n是否為素?cái)?shù)。。一個(gè)數(shù)除了1和它本身之外外,沒有其他他整數(shù)能整除除的整數(shù)為素素?cái)?shù)。判別一一個(gè)大于2的整數(shù)n是否為素?cái)?shù)可可以:用2,3,……,n-1作除數(shù)除n,只要有一個(gè)個(gè)能整除n,n就不是素?cái)?shù)。。否則,n為素?cái)?shù)。IfFlag=0?Str(n,3)+"是素?cái)?shù)"Else?Str(n,3)+"不是素?cái)?shù)"EndifIfn/i=int(n/i)【例9.21】全班50個(gè)同學(xué)報(bào)名參參加運(yùn)動(dòng)會(huì)。。如果是男同同學(xué)并且身高高又在180以上,輸出““參加籃球比比賽”,否則則輸出“參加加足球比賽””。如果是女女同學(xué)并且身身高在170以上輸出“參參加模特大賽賽”,否則輸輸出“參加健健美操比賽””。最后統(tǒng)統(tǒng)計(jì)參加各項(xiàng)項(xiàng)比賽的人數(shù)數(shù)。else?"參加足球比賽賽!"B=B+1EndifElseif身高>=170?"參加模特比賽賽!"C=C+1else?"參加健美操比比賽!"D=D+1EndifEndIfSUM=SUM-1EndDo?"參加籃球比賽賽的人數(shù)",A?"參加足球比賽賽的人數(shù)",B?"參加模特比賽賽的人數(shù)",C?"參加健美操比比賽的人數(shù)",DA=0B=0C=0D=0Sum=50DoWhileSUM>0Acce"請(qǐng)輸入你的性性別"TO性別Input"請(qǐng)輸入你的身身高"TO身高If性別="男“if身高>=180?"參加籃球比賽賽!"A=A+12.步長(zhǎng)循環(huán)步長(zhǎng)循環(huán)控制制語句,即根根據(jù)循環(huán)變量量的初值、終終值和步長(zhǎng),,決定循環(huán)體體內(nèi)語句的執(zhí)執(zhí)行次數(shù)。For<循環(huán)變量>=<初值>To<終值>[Step<步長(zhǎng)>]<循環(huán)體>EndFor|Next格式:功能:循環(huán)體ExitLoop循環(huán)變量增加步長(zhǎng)循環(huán)變量獲得初值FT循環(huán)變量在終值內(nèi)首先將初值賦賦給循環(huán)變量量,然后判斷斷循環(huán)條件是是否成立(若若步長(zhǎng)為正值值,循環(huán)條件件為“循環(huán)變變量<=終值”;若步步長(zhǎng)為負(fù)值,,循環(huán)條件為為“循環(huán)變量量>=終值”)。若若循環(huán)條件成成立,則執(zhí)行行循環(huán)體,然然后循環(huán)變量量增加一個(gè)步步長(zhǎng)值,并再再次判斷循環(huán)環(huán)條件是否成成立,以確定定是否再次執(zhí)執(zhí)行循環(huán)體。。若循環(huán)條件件不成立,則則結(jié)束該循環(huán)環(huán)語句,執(zhí)行行EndFor后面的語句。。1、省略Step步長(zhǎng),則步長(zhǎng)長(zhǎng)為默認(rèn)值1;2、初值、終值值和步長(zhǎng)都可可以是數(shù)值表表達(dá)式,當(dāng)初初值小于終值值,步長(zhǎng)必須須為正,當(dāng)初初值大于終值值,步長(zhǎng)必須須為負(fù)才可以以循環(huán);3、可以在循環(huán)環(huán)體內(nèi)改變循循環(huán)變量的值值,但會(huì)改變變循環(huán)執(zhí)行次次數(shù);4、Exit和Loop命令可以出現(xiàn)現(xiàn)在循環(huán)體內(nèi)內(nèi)。執(zhí)行Loop命令時(shí),結(jié)束束本次循環(huán),,循環(huán)變量增增加一個(gè)步長(zhǎng)長(zhǎng)值,返回For循環(huán)頭判斷循循環(huán)條件是否否成立。執(zhí)行行Exit命令時(shí),程序跳出循環(huán)環(huán),執(zhí)行循環(huán)環(huán)尾后面的語語句說明:注意:1、循環(huán)終止的的條件是:““循環(huán)變變量的值超出出終值”,而而不是循環(huán)變變量的值等于于終值。2、超出的含義義:當(dāng)<步長(zhǎng)長(zhǎng)>為正正時(shí)時(shí),,檢檢查查<循環(huán)環(huán)變變量量>是否否大大于于<終值值>當(dāng)<步長(zhǎng)長(zhǎng)>為負(fù)負(fù)時(shí)時(shí),,檢檢查查<循環(huán)環(huán)變變量量>是否否小小于于<終值值>當(dāng)步步長(zhǎng)長(zhǎng)為為0時(shí),,循循環(huán)環(huán)永永不不終終止止。。For<循環(huán)環(huán)變變量量>=<初值值>To<終值值>[Step<步長(zhǎng)長(zhǎng)>]<循環(huán)環(huán)體體>EndFor|NextFor<循環(huán)環(huán)變變量量>=<初值值>To<終值值>[Step<步長(zhǎng)長(zhǎng)>]<循環(huán)環(huán)體體>EndFor|NextClearS=1I=1DoWhileI<=100S=S*II=I+1EndDo?"1*2*3*…………*100=",S【例8.22】】編程程求求1*2*3*…………*100之和和。。ClearS=1Fori=1to100s=s*IEndFor?"1*2*3*…………*100=",S【例8.23】】全班班50個(gè)同同學(xué)學(xué)報(bào)報(bào)名名參參加加運(yùn)運(yùn)動(dòng)動(dòng)會(huì)會(huì)。。如如果果是是男男同同學(xué)學(xué)并并且且身身高高又又在在180以上上,,輸輸出出““參參加加籃籃球球比比賽賽””,,否否則則輸輸出出““參參加加足足球球比比賽賽””。。如如果果是是女女同同學(xué)學(xué)并并且且身身高高在在170以上上輸輸出出““參參加加模模特特大大賽賽””,,否否則則輸輸出出““參參加加健健美美操操比比賽賽””。。最最后后統(tǒng)統(tǒng)計(jì)計(jì)參參加加各各項(xiàng)項(xiàng)比比賽賽的的人人數(shù)數(shù)。。else?"參加加健健美美操操比比賽賽??!"D=D+1EndifEndIfEndFor?"參加加籃籃球球比比賽賽的的人人數(shù)數(shù)",A?"參加加足足球球比比賽賽的的人人數(shù)數(shù)",B?"參加加模模特特比比賽賽的的人人數(shù)數(shù)",C?"參加健美美操比賽賽的人數(shù)數(shù)",DReturnA=0B=0C=0D=0ForI=1TO50Acce"請(qǐng)輸入你你的性別別"TO性別Input"請(qǐng)輸入你你的身高高"TO身高If性別="男"DoCaseif身高>=180?"參加籃球球比賽??!"A=A+1else?"參加足球球比賽??!"B=B+1EndifElseif身高>=170?"參加模特特比賽!!"C=C+1【例8.24】輸入任意意10個(gè)整數(shù),,將所有有正整數(shù)數(shù)顯示出出來。ClearFori=1to10Input““輸入一個(gè)個(gè)整數(shù)””ToaIfa>0?aElseLoopEndifEndFor在For循環(huán)語句句中執(zhí)行行Loop語句,將將會(huì)先修修改循環(huán)環(huán)變量的的值,然然后轉(zhuǎn)向向循環(huán)語語句頭部部。3.掃描描循環(huán)掃描循環(huán)環(huán)控制語語句,即即根據(jù)表表中的當(dāng)當(dāng)前記錄錄指針決決定循環(huán)環(huán)體內(nèi)語語句的執(zhí)執(zhí)行次數(shù)數(shù),掃描描當(dāng)前表表中滿足足表中的的記錄。。Scan[<范圍>][For<條件表達(dá)達(dá)式1>][While<條件表達(dá)達(dá)式2>]<命令行序序列>EndScan格式:功能:執(zhí)行該語語句時(shí),,記錄指指針在當(dāng)當(dāng)前表的的指定范范圍內(nèi)自自動(dòng)從上上往下依依次移到到滿足條條件的記記錄上,,并對(duì)每每一條記記錄執(zhí)行行循環(huán)體體內(nèi)的命命令。(1)<范圍>的默認(rèn)值值是All。(2)當(dāng)指針針移到文文件尾時(shí)時(shí),自動(dòng)動(dòng)退出循循環(huán)。說明:循環(huán)體TFEof()【例8.25】用掃描循循環(huán)控制制語句,,統(tǒng)計(jì)人人才檔案案數(shù)據(jù)表表中男同同學(xué)的人人數(shù)。clearRc=0Use人才檔案案ExclusiveScanallfor性別=“男”rc=rc+1EndScan?“男同學(xué)的的人數(shù)為為",rcUse【例8.26】用掃描循循環(huán)控制制語句,,顯示人人才檔案案數(shù)據(jù)表表中年齡齡大于等等于25的記錄。。clearUse人才檔案案ExclusiveScanallforyear(date())-year(出生日期期)>=25display編號(hào),姓名EndScanUse練習(xí):下下列程序序段執(zhí)行行后,輸輸出結(jié)果果是:記錄號(hào)名名稱1男子排球球2女子排球球3男子足球球4女子足球球5男乒乓球球Use運(yùn)動(dòng)員表表ExclusiveGo2ScanNext4ForLeft(名稱,2)=“男"IfRight(名稱,2)=“球"ExitEndifEndscan?名稱男子足球球4.多重循環(huán)環(huán)如果在一一個(gè)循環(huán)環(huán)內(nèi)包含含另一個(gè)個(gè)循環(huán)結(jié)結(jié)構(gòu),則則稱為多多重循環(huán)環(huán),或循循環(huán)嵌套套,嵌套套的層數(shù)數(shù)可以根根據(jù)需要要而定,,嵌套一一層稱為為二重循循環(huán),嵌嵌套二層層稱為三三重循環(huán)環(huán)。下面面是幾種種常見的的二重嵌嵌套形式式:1.ForI=….…..ForJ=…….….NextJ…..NextI2.FORI=….…..DOWHILE…….….ENDDO…..NEXTI[[[[3.DOWHILEL….…..DOWHILE……….ENDDO…..enddo[[對(duì)于循循環(huán)的的嵌套套,要要注意意以下下事項(xiàng)項(xiàng):(1)內(nèi)循環(huán)環(huán)變量量與外外循環(huán)環(huán)變量量不能能同名名;(2)外循環(huán)環(huán)必須須完全全包含含內(nèi)循循環(huán),,不能能交叉叉;(3)不能從從循環(huán)環(huán)體外外轉(zhuǎn)向向循環(huán)環(huán)體內(nèi)內(nèi),也也不能能從外外循環(huán)環(huán)轉(zhuǎn)向向內(nèi)循循環(huán)。。ForAForBForC……NextCNextBNextA[[[ForAForBForC……NextBNextANextC[[[不能交交叉正確的的嵌套套錯(cuò)誤的的嵌套套【例8.27】】分析下下面程程序的的運(yùn)行行結(jié)果果:clearFori=1To3Forj=5To7?I,jNextjNextiReturn[[151617252627353637對(duì)于兩兩個(gè)具具有調(diào)調(diào)用關(guān)關(guān)系的的程序序文件件,常常稱調(diào)調(diào)用程程序?yàn)闉橹鞒坛绦?,,被調(diào)調(diào)用程程序?yàn)闉樽映坛绦?。。子程程序的的建立立和一一般命命令文文件的的建立立方法法相同同,都都是ModifyCommand,文件件默認(rèn)認(rèn)的擴(kuò)擴(kuò)展名名還是是Prg。調(diào)用用方法法是在在主程程序中中用Do命令。。8.4.1主程序序和子子程序序Do子程序序文件件名ModifyCommand〈〈過程文文件名名〉文件格格式::與程序序一樣樣主程序序調(diào)用用:返回主主程序序:Return[ToMaster]建立子子程序序:沒有可可選項(xiàng)項(xiàng),返返回到到調(diào)用用處,,有可可選項(xiàng)項(xiàng),返返回到到調(diào)用用的最最高一一級(jí)。。1.子程序序的調(diào)調(diào)用和和返回回8.4過程和和用戶戶自定定義函函數(shù)【例8.28】】分析下下面程程序的的運(yùn)行行結(jié)果果:&&MAIN.PRGClearDoJADoJBDoJCReturn&&JA.RPG?"***"DoJBDoJCReturn&&JB.RPG?"#####"Return&&JC.RPG?"*******"ReturnToMaster【例8.29】】利用子子程序序計(jì)算算圓的的面積積:*主程程序::DoWhile.T.ClearWait““是否要要計(jì)算算圓的的面積積(Y/N)?””TojaIfUpper(ja)=““Y””&&為“N”時(shí)結(jié)束束程序序Dozcx1.prgElseExitEndifEnddoReturn*子程程序zcx1:ClearInput"輸入圓圓的半半徑:"tobjS=3.14*bj**2?"圓的面面積為為:",sReturn2.帶參數(shù)數(shù)的子子程序序調(diào)用用調(diào)用子子程序序時(shí)參參數(shù)表表中的的參數(shù)數(shù)要傳傳送給給子程程序,,子程程序也也必須須設(shè)置置相應(yīng)應(yīng)的參參數(shù)接接受語語句。。Parameters可以完完成此此項(xiàng)功功能,,但是是必須須是子子程序序的第第一條條語句句。主程序序調(diào)用用:子程序序接收收:Do<過程文文件名名〉With<實(shí)際參參數(shù)表表>Parameters<形式參參數(shù)表表>各種各各類型型的常常數(shù)、、有具具體值值的變變量沒有具具體指指的變變量,,個(gè)數(shù)數(shù)、位位置和和類型型要和和主程程序的的實(shí)際際參數(shù)數(shù)一樣樣,但但是名名字可可以不不一樣樣。例如:主程序序:DozcxWith““張三””,89,性別別子程序序:Parametersa,b,c變量姓姓名必必須是是賦過過值的的變量沒沒有具具體值值【例8.30】】利用子子程序序計(jì)算算圓的的面積積:*主程程序::Clearymj=0&&初始化化用于于接收收?qǐng)A面面積的的變量量Input““請(qǐng)輸入入圓的的半徑徑:“TobjDozcx2Withbj,ymj&&帶參數(shù)數(shù)調(diào)用用子程程序@7,10Say"圓的面面積為為:"+Str(ymj,10,2)Return*子程程序zcx2:Parameterscj,sS=3.14*cj**2Return變量bj初始值值為0計(jì)算后后的面面積函數(shù)名名((實(shí)實(shí)際參參數(shù)表表)3.自定義義函數(shù)數(shù)自定義義函數(shù)數(shù)與子子程序序的區(qū)區(qū)別在在于自自定義義函數(shù)數(shù)必須須返回回一個(gè)個(gè)函數(shù)數(shù)值,,而子子程序序則無無此限限制。。主程序序調(diào)用用格式式:[Function<函數(shù)名名>][Parameters<形式參參數(shù)表表>]命令序序列Return<表達(dá)式式>如果是是單獨(dú)獨(dú)的程程序,,就可可以省省略這這一句句,如如果自自定義義函數(shù)數(shù)和主主程序序是一一個(gè)程程序,,不能能省

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論