版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第九章第九章 程序設(shè)計(jì)程序設(shè)計(jì) 結(jié)構(gòu)化程序設(shè)計(jì)功能模塊(即過程、自定義函數(shù))編制各個(gè)功能模塊,再用主程序?qū)⑺鼈兇饋韺?yīng)用程序分解成若干功能模塊,通過各模塊的相互調(diào)用來完成整個(gè)執(zhí)行過程,是過程驅(qū)動(dòng)的。面向?qū)ο蟪绦蛟O(shè)計(jì)類、對(duì)象、屬性、事件、方法設(shè)計(jì)類、子類、對(duì)象(設(shè)計(jì)外觀、設(shè)置屬性、為事件編寫方法程序)將應(yīng)用程序分解成具有特定屬性的對(duì)象,通過調(diào)用各對(duì)象的不同方法來完成相關(guān)事件,是事件驅(qū)動(dòng)的 。 第九章第九章 程序設(shè)計(jì)程序設(shè)計(jì)9.1 程序的建立和執(zhí)行程序的建立和執(zhí)行9.2 程序中的常用語(yǔ)句程序中的常用語(yǔ)句9.3 順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)9.4 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)9.5 循環(huán)結(jié)
2、構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 9.6 自定義函數(shù)、過程及其調(diào)用自定義函數(shù)、過程及其調(diào)用9.7 程序的調(diào)試程序的調(diào)試9.8 習(xí)題習(xí)題99.1 程序的建立和執(zhí)行程序的建立和執(zhí)行9.1.1. 基本概念程 序:為解決某一問題而設(shè)計(jì)的一系列指令。主程序:通常被用戶直接執(zhí)行的程序。子程序:在程序中被調(diào)用的程序。源程序:由人用源語(yǔ)言編寫的計(jì)算機(jī)程序,必須翻譯成機(jī)器語(yǔ)言后才能被執(zhí)行。目標(biāo)程序:是源程序經(jīng)過編譯后所產(chǎn)生的機(jī)器語(yǔ)言程序??蓤?zhí)行程序:源程序被編譯后產(chǎn)生的可被機(jī)器直接執(zhí)行的程序,具有 .EXE 擴(kuò)展名。在VFP中是指由項(xiàng)目管理器連編生成的、可脫離VFP環(huán)境運(yùn)行的程序。應(yīng)用程序: 指為完成專門工作而設(shè)計(jì)的
3、一組相互聯(lián)系的例行程序和子程序。在VFP中是指一組 Visual FoxPro 程序、表單、菜單和其他文件經(jīng)項(xiàng)目管理器連編后形成的單個(gè)程序,不能脫離VFP環(huán)境運(yùn)行,擴(kuò)展名為.APP。例行程序: 按某種順序排列的、使計(jì)算機(jī)能執(zhí)行某種任務(wù)的指令集合,可以是一種專用的程序或作為程序的一部分。它可由若干個(gè)子程序組成。 9.1 程序的建立和執(zhí)行程序的建立和執(zhí)行9.1.2 程序的建立和執(zhí)行此前我們學(xué)習(xí)的命令,都是在交互狀態(tài)下,輸入一條命令即回車,馬上即可見到結(jié)果。但這種工作方式不能完全滿足我們的工作需要,有時(shí),我們需要系統(tǒng)能自動(dòng)、批量地完成一系列命令。在vfp中,這一功能可通過程序文件來完成。一、程序文件
4、的建立:方式一:(1) 在項(xiàng)目管理器中依次展開“全部”“代碼”,選中“程序”,單擊右側(cè)的“新建”按鈕。如圖9-1所示。圖9-1程序文件的建立圖9-1程序文件的建立(2) 在彈出的編輯窗口中輸入代碼,按ctrl+w保存,在“另存為”對(duì)話框中選保存位置,并輸入文件名9.1 程序的建立和執(zhí)行程序的建立和執(zhí)行9.1.2 程序的建立和執(zhí)行方式二: (1).使用命令,格式:modify command 路徑文件名 (2).程序文件的執(zhí)行:在命令窗口輸入do 文件名,回車。三.說明:程序文件的擴(kuò)展名為.prg,使用命令創(chuàng)建和運(yùn)行程序文件時(shí),使用文件主名即可,擴(kuò)展名系統(tǒng)自動(dòng)會(huì)加上。四.使用命令編制一個(gè)程序文件
5、并運(yùn)行它 1.輸入命令modify command F:myvfpabc,彈出編輯窗口,如圖9-2所示。圖9-2使用命令編制程序文件 2.在編輯窗口中輸入兩條命令,按ctrl+w保存 圖9-2使用命令編制程序件 3.在命令窗口輸入do abc命令運(yùn)行程序文件abc.prg,會(huì)出現(xiàn)一個(gè)對(duì)話框,我們點(diǎn)了對(duì)話框中的“確定”后,系統(tǒng)就自動(dòng)退出了,為什么會(huì)這樣呢?程序文件執(zhí)行時(shí),會(huì)批量、依次執(zhí)行文件中的命令.執(zhí)行第1個(gè)消息框函數(shù),程序進(jìn)入暫停,等待用戶選擇。我們單擊了“確定”按鈕后,程序繼續(xù)執(zhí)行下一條命令“quit”,退出系統(tǒng)vfp支持3種基本程序控制構(gòu)造:順序結(jié)構(gòu),選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。后面的章節(jié)將對(duì)其
6、分別介紹。9.2 程序中的常用語(yǔ)句程序中的常用語(yǔ)句一.屏幕輸出語(yǔ)句:格式:?|?表達(dá)式 功能:在屏幕上輸出表達(dá)式的內(nèi)容。1個(gè)問號(hào)為換行輸出,2個(gè)問號(hào)為不換行輸出【例9.1】編制1個(gè)命令文件text.prg,保存到f:myvfp中,統(tǒng)計(jì)“教師工資表”中的獎(jiǎng)金和工資總額。程序文件內(nèi)容:use 教師工資表count all to msum all 工資 to n?“獎(jiǎng)金為:”,m?“工資總額為:”,n運(yùn)行結(jié)果如圖9-3所示。圖9-3教師獎(jiǎng)金工資統(tǒng)計(jì)結(jié)果9.2 程序中的常用語(yǔ)句程序中的常用語(yǔ)句二.注釋語(yǔ)句: 格式:&注釋內(nèi)容 功能:為程序中的語(yǔ)句作注釋,注釋內(nèi)容不會(huì)執(zhí)行。 三.輸入字符串語(yǔ)句:
7、 格式:accept 字符串 to 內(nèi)存變量 功能:執(zhí)行該語(yǔ)句時(shí),暫停程序的運(yùn)行,在屏幕上顯示“字符串”的內(nèi)容作為提示信息,等待用戶通過鍵盤輸入數(shù)據(jù);輸入數(shù)據(jù)后回車,輸入的內(nèi)容保存到指定的內(nèi)存變量中,同時(shí),程序繼續(xù)向下執(zhí)行。【例9.2】:編寫命令文件test.prg,輸入1個(gè)人名,在“學(xué)生情況表”中查詢?cè)搶W(xué)生的基本信息。程序文件內(nèi)容:use 學(xué)生情況表accept “請(qǐng)輸入待查學(xué)生姓名:” to namedisplay 學(xué)號(hào),姓名,性別 for 姓名=nameusereturn &該語(yǔ)句的功能是返回調(diào)用處運(yùn)行結(jié)果如圖9-4所示。 圖9-4查詢學(xué)生的基本信息顯示9.2 程序中的常用語(yǔ)句程
8、序中的常用語(yǔ)句四、輸入表達(dá)式語(yǔ)句: 格式:input 表達(dá)式 to 內(nèi)存變量 說明: (1).該命令功能比accept強(qiáng),accept只能輸入字符型數(shù)據(jù);而input可輸入字符型、數(shù)值型、邏輯型和日期型。 (2).使用input時(shí),輸入字符型數(shù)據(jù)時(shí),必須加雙引號(hào)等定界符;輸入邏輯型數(shù)據(jù)時(shí),要用圓點(diǎn)定界符(如.T.);輸入日期型數(shù)據(jù)要用轉(zhuǎn)換函數(shù),如ctod(“11/15/2005”)?!纠?.3】:編寫程序文件test1.prg,輸入1個(gè)工資,查詢工資為此數(shù)值的有多少人。程序文件內(nèi)容:use 教師工資表input “請(qǐng)輸入待查工資:”to gzlist 教師編號(hào),工資 for 工資=gzuser
9、eturn運(yùn)行結(jié)果如圖9-5所示 圖9-5工資查詢顯示9.2 程序中的常用語(yǔ)句程序中的常用語(yǔ)句五.清屏語(yǔ)句: 格式:clear 功能:清除主屏幕上的顯示信息。六.交互狀態(tài)控制: 格式:set talk off/on 說明:該命令規(guī)定是否將命令執(zhí)行結(jié)果顯示在屏幕上。默認(rèn)為on,此時(shí),每執(zhí)行完1條命令,結(jié)果即顯示在屏幕上;設(shè)置為off時(shí),不顯示執(zhí)行結(jié)果。一般,我們?cè)诔绦蛭募拈_頭都加上該語(yǔ)句,抑制顯示中間結(jié)果。七.顯示提示信息: 格式:wait window 提示信息字符串 at 行,列 timeout 秒數(shù) 功能:在屏幕的指定位置出現(xiàn)提示窗口。例:在命令窗口輸入如下命令回車:wait windo
10、w “請(qǐng)等待”AT SROW()/2, (SCOLS()-LEN(M)/2在屏幕中央出現(xiàn)提示窗口,利用wait clear命令可將該窗口消除。說明:“timeout 秒數(shù)”用于規(guī)定延時(shí)秒數(shù),比如,我們輸入wait window “請(qǐng)等待”AT SROW()/2, (SCOLS()-LEN(n)/2 timeout 3則提示窗口顯示3秒后,自動(dòng)關(guān)閉。八.返回語(yǔ)句: 格式:return 功能:返回調(diào)用處或命令窗口。該語(yǔ)句可省略,因?yàn)樵诿總€(gè)程序執(zhí)行的最后,系統(tǒng)都會(huì)自動(dòng)執(zhí)行1個(gè)return語(yǔ)句。9.3 順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)在順序結(jié)構(gòu)中,各種操作塊按照出現(xiàn)的先后次序依次執(zhí)行。9.3.1 基本
11、語(yǔ)句 1、賦值語(yǔ)句在程序中若要使用(引用)變量,必須在使用(引用)前為變量設(shè)定一個(gè)初值,或者有時(shí)要改變它的現(xiàn)行值,這都需要給變量賦值。一般格式是:STORE TO 或=說明: (1)表達(dá)式可以是算術(shù)表達(dá)式、字符串表達(dá)式、日期表達(dá)式、關(guān)系表達(dá)式或邏輯表達(dá)式。 (2)STORE可以給多個(gè)變量賦同一個(gè)值,=一次只給一個(gè)變量賦值。例如:STORE 5 TO X,Y,ZA=10 (3)內(nèi)存變量的類型由表達(dá)式的類型決定。 (4)賦值號(hào)(=)不同于數(shù)學(xué)上的等號(hào),A=5應(yīng)讀作“將數(shù)值5賦值給變量A”或“使變量A的值等于5”,下面的語(yǔ)句作用不同:x=yy=x(5)z=x+y 不能寫成 x+y=z,賦值號(hào)左邊只能
12、是變量,不能是表達(dá)式。 2、程序的注釋 (1)行首注釋NOTE 注釋內(nèi)容 或* 注釋內(nèi)容注釋內(nèi)容可以是任何文字,程序不執(zhí)行以NOTE或*開頭的語(yǔ)句,只起給程序說明的作用。 (2)行尾注釋&注釋內(nèi)容。9.3 順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)3、程序暫停語(yǔ)句WAIT 提示信息 TO WINDOWS AT TIMEOUT n。說明: (1)“提示信息”是指要顯示的自定義信息。若省略,則顯示系統(tǒng)默認(rèn)信息“請(qǐng)按任意鍵繼續(xù).”。 (2)TO 將按下的鍵以字符形式保存到變量中。 (3)WINDOWS AT 行,列指定顯示信息的窗口在屏幕上的位置。若省略AT則在屏幕右上角。 (4)TIMEOUT n
13、指定在自動(dòng)等待鍵盤或鼠標(biāo)輸入的秒數(shù),必須放在語(yǔ)句最后。在n秒內(nèi)沒有按鍵或按鼠標(biāo),程序繼續(xù)向下執(zhí)行。4、程序結(jié)束語(yǔ)句RELEASE 語(yǔ)句的格式:RELEASE THISFORMRELEASE方法的格式為:THISFORM.RELEASETHISFORMSET.RELEASE作用終止表單運(yùn)行。9.3 順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)9.3.2 程序舉例下面是最簡(jiǎn)單的1種程序結(jié)構(gòu)【例9.4】:順序結(jié)構(gòu)例程程序名為test2.prg。程序文件內(nèi)容:set talk offclearinput “請(qǐng)輸入圓的半徑:”to rs=3.1415926*r*r?“圓的面積是:”,sreturn說明:執(zhí)行程序時(shí),
14、屏幕上顯示提示信息:請(qǐng)輸入圓的半徑。當(dāng)用戶鍵入半徑并按回車時(shí),vfp計(jì)算出圓的面積并顯示在屏幕上。運(yùn)行情況如圖9-6所示。圖9-6計(jì)算圓的面積9.4 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì) 在科學(xué)計(jì)算中,只有順序結(jié)構(gòu)是不夠的,只有能根據(jù)某個(gè)給定條件選擇不同的執(zhí)行流程才能真正體現(xiàn)計(jì)算機(jī)的另一大功能邏輯判斷。實(shí)際應(yīng)用中選擇結(jié)構(gòu)就是對(duì)指定的條件進(jìn)行判斷,如果條件成立,則執(zhí)行指定的語(yǔ)句序列。在VFP中條件語(yǔ)句有二種:1、IFELSEENDIF2、DO CASEENDCASE 這些語(yǔ)句又叫做條件語(yǔ)句。9.4 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)9.4.1、單條件選擇語(yǔ)句IF雙分支結(jié)構(gòu)格式一: IF ENDIF執(zhí)行
15、過程是:如果所給定的條件為真,則執(zhí)行“語(yǔ)句序列”,否則執(zhí)行ENDIF之后的語(yǔ)句。流程圖見圖9-7。 格式二: IF ELSE ENDIF執(zhí)行過程是:如果所給定的條件為真,則執(zhí)行“語(yǔ)句序列1”,否則執(zhí)行“語(yǔ)句序列2”。流程圖見圖9-8。說明:(1)語(yǔ)句序列又可以是IF結(jié)構(gòu),稱為IF語(yǔ)句的嵌套。(2)IF和ENDIF必須成對(duì)出現(xiàn)。 圖9-7 單條件選擇結(jié)構(gòu) 圖9-8 單條件選擇結(jié)構(gòu)條件語(yǔ)句序列TF條件A序列B序列TF9.4 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)【例9.5】:設(shè)計(jì)1個(gè)名為test3.prg的查詢程序,希望當(dāng)待人不存在時(shí)有信息提示。程序文件內(nèi)容:clearaccept “請(qǐng)輸入待查人姓名”
16、to xmlocate for 姓名=xmif .not.eof()displayelsemessagebox(“查無(wú)此人”)endifuseReturn運(yùn)行結(jié)果如圖9-9所示。 圖9-9無(wú)查詢結(jié)果顯示說明:程序執(zhí)行時(shí),執(zhí)行l(wèi)ocate命令時(shí),記錄指針從表的首記錄一直找到最后1條記錄都未發(fā)現(xiàn)該姓名記錄時(shí),記錄指針才最后停在文件尾,此時(shí)eof()為真值;相反,若eof()取假值,則表示記錄指針停在待查人的記錄上。即當(dāng).not.eof()為真時(shí),記錄指針停在待查人的記錄上,查到的指定的記錄。也可用found()來代替程序中的.not.eof()。9.4 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)2、IIF函
17、數(shù)IIF函數(shù)可以實(shí)現(xiàn)一些簡(jiǎn)單的選擇。其語(yǔ)法結(jié)構(gòu)為:IIF(條件,表達(dá)式1,表達(dá)式2)說明:(1)當(dāng)條件為真時(shí),函數(shù)返回表達(dá)式1的值。 (2)當(dāng)條件為假時(shí),函數(shù)返回表達(dá)式2的值。 (3)Y=IIF(條件,表達(dá)式1,表達(dá)式2)相當(dāng)于:IF 條件 Y=表達(dá)式1ELSE Y=表達(dá)式2ENDIF。9.4 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)9.4.2多分支條件選擇語(yǔ)句DO CASE格式:DO CASE CASE 條件1 語(yǔ)句序列1 CASE 條件2 語(yǔ)句序列2 OTHERWISE 語(yǔ)句序列n ENDCASE說明:(1)DO CASE、CASE、OTHERWISE和ENDCASE必須各占一行。DO CASE和
18、ENDCASE必須成對(duì)出現(xiàn)。 (2)在執(zhí)行DO CASE語(yǔ)句時(shí),依次判斷各條件是否成立。若條件N成立,就執(zhí)行相應(yīng)的語(yǔ)句序列N,直到遇到下一個(gè)CASE或OTHERWISE或ENDCASE。 (3)某一語(yǔ)句序列執(zhí)行后,不再判斷別的條件,直接轉(zhuǎn)向ENDCASE后面的語(yǔ)句。因此,在一個(gè)CASE結(jié)構(gòu)中,一次只執(zhí)行一個(gè)語(yǔ)句序列。 (4)如果沒有一個(gè)條件成立,就執(zhí)行OTHERWISE后面的語(yǔ)句序列,如果沒有OTHERWISE就不作任何操作,就轉(zhuǎn)向ENDCASE后面的語(yǔ)句。9.4 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)【例9.6】:設(shè)計(jì)1個(gè)程序名為test4.prg,使用do case語(yǔ)句在“學(xué)生情況表”中按學(xué)號(hào)或
19、姓名查詢程序文件內(nèi)容:clearuse 學(xué)生情況表wait “請(qǐng)選擇按姓名或按學(xué)號(hào)查詢(M/X)” to xzdo casecase xz$“Mm” &此條件為真,說明選擇了M,即按姓名查詢accept “請(qǐng)輸入待查人姓名:” to xmlocate for 姓名=xmcaxe xz$“Xx”accept “請(qǐng)輸入待查學(xué)號(hào):” to xhlocate for 學(xué)號(hào)=xhotherwisewait “查詢選擇錯(cuò)誤!按任意鍵退出!” windendcasedisplayusereturn 運(yùn)行結(jié)果如圖9-10,圖9-11,圖9-12所示9.4 選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)圖9-10按姓
20、名查詢結(jié)果顯示圖9-11按學(xué)號(hào)查詢結(jié)果顯示圖9-12查詢選擇出錯(cuò)顯示9.5 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 前面我們學(xué)習(xí)的順序結(jié)構(gòu)和選擇結(jié)構(gòu)有一個(gè)共同點(diǎn),即程序語(yǔ)句不能重復(fù)執(zhí)行。在編程中常常遇到這樣的情況:某一類問題的計(jì)算和處理方法完全一樣,只是要要求重復(fù)計(jì)算多次,而每次使用的數(shù)據(jù)都按照一定的規(guī)律改變。程序設(shè)計(jì)中的循環(huán)結(jié)構(gòu)(簡(jiǎn)稱循環(huán))是指在該程序中,從某處開始有規(guī)律地反復(fù)執(zhí)行某一操作(或程序塊)的現(xiàn)象。被重復(fù)執(zhí)行的的部分稱為循環(huán)體,循環(huán)體的執(zhí)行與否及次數(shù)多少視循環(huán)類型與條件而定。當(dāng)然,無(wú)論何種類型的循環(huán),其共同特點(diǎn)是必須確保循環(huán)的重復(fù)執(zhí)行能被終止(無(wú)死循環(huán))。按照循環(huán)體執(zhí)行的方式和條件,循環(huán)
21、結(jié)構(gòu)分為當(dāng)型、直到型與步長(zhǎng)型三種。由于“直到型”循環(huán)是“當(dāng)型”循環(huán)派生出來的循環(huán)形式,二者可以互換,所以在VFP中只提供了“當(dāng)型”和“步長(zhǎng)型”和“表掃描型”三種循環(huán)語(yǔ)句:DO WHILEENDDO(當(dāng)型)、 FOR RNDFOR(步長(zhǎng)型)、SCANENDSCAN(表掃描型)。9.5 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)9.5.1當(dāng)型循環(huán)命令DO WHILE格式:DO WHILE 語(yǔ)句序列 EXIT 語(yǔ)句序列 LOOP 語(yǔ)句序列ENDDO說明:(1)可以是條件表達(dá)式或邏輯常量。根據(jù)的邏輯值進(jìn)行判斷,若為真,則執(zhí)行DO WHILE與ENDDO之間的循環(huán)體。若為假,則結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行ENDDO之后的語(yǔ)
22、句。每執(zhí)行一次循環(huán)體,程序自動(dòng)返回到DO WHILE語(yǔ)句,判斷一次。 (2)EXIT是無(wú)條件結(jié)束循環(huán)命令。它使程序跳出循環(huán),轉(zhuǎn)去執(zhí)行ENDDO之后的語(yǔ)句。 (3)LOOP是無(wú)條件循環(huán)命令。它將控制直接轉(zhuǎn)回到DO WHILE語(yǔ)句,而不執(zhí)行LOOP和ENDDO之間的語(yǔ)句。 (4)DO WHILE和ENDDO必須各占一行,且必須成對(duì)出現(xiàn)。9.5 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)9.5.2步長(zhǎng)型循環(huán)命令FOR若事先知道循環(huán)次數(shù),則可以用步長(zhǎng)型循環(huán)結(jié)構(gòu)。步長(zhǎng)型循環(huán)可以根據(jù)給定的次數(shù)重復(fù)執(zhí)行循環(huán)體。其語(yǔ)法:FOR = TO STEP 語(yǔ)句序列 EXIT 語(yǔ)句序列 LOOP 語(yǔ)句序列 ENDFOR說明:(1
23、)是一個(gè)作為計(jì)數(shù)器的內(nèi)存變量,在該結(jié)構(gòu)之前可以不存在。是計(jì)數(shù)器的初值,是計(jì)數(shù)器值的增長(zhǎng)或減小量。如果步長(zhǎng)值是負(fù)數(shù),則計(jì)數(shù)器是減小。如果少略STEP子句,則默認(rèn)步長(zhǎng)為1。 (2)其余情況與DO WHILE結(jié)構(gòu)相似。9.5 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例9.7】:在屏幕上輸出乘法口訣表程序名為test5.prg程序文件內(nèi)容如下:?“九九乘法表”?for i=1 to 9for j=1 to i?alltrim(str(i)+“*”+alltrim(str(j)+“=”+alltrim(str(i*j)+“ ”next?next運(yùn)行結(jié)果如圖9-13所示 圖9-13輸出乘法口訣表9.5 循環(huán)結(jié)構(gòu)
24、程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例9.8】:求1!+2!+3!+20!的值??稍谟?jì)算按鈕的Click事件中編寫如下代碼:S=0FOR N=1 TO 20 T=1 FOR M=1 TO N T=T*M ENDFOR S=S+TENDFORTHISFORM.TEXT1.VALUE9.5 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)9.5.3. 表掃描型SCANENDSCAN格式:scan 范圍for 條件語(yǔ)句序列endscan功能: 對(duì)表中指定范圍,滿足條件的記錄執(zhí)行循環(huán)體語(yǔ)句,每執(zhí)行一次循環(huán),記錄指針自動(dòng)移動(dòng)到下一條記錄。操作表時(shí),使用該語(yǔ)句功能強(qiáng),效率高?!纠?.9】:使用scan語(yǔ)句編程,顯示“教師基本信息表
25、”中的黨員的姓名和職稱。程序名為test6.prg。use 教師基本信息表scan for .not.黨員否display 姓名,職稱endscanusereturn運(yùn)行結(jié)果如圖9-14所示。 圖9-14顯示黨員的姓名和職稱9.6 自定義函數(shù)、過程及其調(diào)用自定義函數(shù)、過程及其調(diào)用9.6.1 自定義函數(shù) 自定義函數(shù)是用戶根據(jù)需要把特定的需重復(fù)調(diào)用的子程序編寫成函數(shù),這有別于VFP的標(biāo)準(zhǔn)函數(shù)。標(biāo)準(zhǔn)函數(shù)是VFP系統(tǒng)自帶的,是開發(fā)VFP系統(tǒng)的設(shè)計(jì)人員設(shè)計(jì)的常用的某些固定的功能,用戶可以直接調(diào)用。但它們的調(diào)用方法是一樣的,即:函數(shù)名()。 自定義函數(shù)的格式為:FUNCTION PARAMETERS RE
26、TURN 說明: (1)函數(shù)名 指用戶自定義的函數(shù)名,不能與系統(tǒng)函數(shù)名或內(nèi)存變量名相同。 (2)參數(shù)表 是函數(shù)中使用的形式參數(shù)。 (3)語(yǔ)句序列 函數(shù)體語(yǔ)句。自定義函數(shù)可以放到過程文件中存儲(chǔ),也可以放到調(diào)用程序作為程序的一部分。若使用FUNCTION命令來指出函數(shù)名,表示該函數(shù)包含在調(diào)用程序中;若缺省FUNCTION行,表示該函數(shù)是一個(gè)獨(dú)立的文件,函數(shù)名將在建立文件時(shí)確定,其擴(kuò)展名仍然為.PRG??墒褂妹頜ODIFY COMMAND 函數(shù)名建立或編輯自定義函數(shù)。自定義函數(shù)與系統(tǒng)函數(shù)的調(diào)用方法相同,其形式為:函數(shù)名參數(shù)表9.6 自定義函數(shù)、過程及其調(diào)用自定義函數(shù)、過程及其調(diào)用9.6.2 過程
27、1. 過程的概念: 在程序設(shè)計(jì)時(shí),常遇到這種情況,在同一個(gè)程序的不同處,或在不同程序中重復(fù)出現(xiàn)具有相同功能的程序段。如果每次都重復(fù)編寫,將使程序變得十分冗長(zhǎng),而且浪費(fèi)存儲(chǔ)空間。解決這個(gè)問題的方法是單獨(dú)設(shè)計(jì)這些共用程序段,需要時(shí)再調(diào)用。這些共用程序在有些高級(jí)語(yǔ)言中稱為子程序,在vfp中稱為過程。調(diào)用過程的程序就稱為主程序或調(diào)用程序。調(diào)用程序與過程之間的關(guān)系是調(diào)用關(guān)系,調(diào)用的特點(diǎn)是:從調(diào)用程序中哪個(gè)地方調(diào)用過程,在執(zhí)行完過程后將返回調(diào)用程序調(diào)用處的下一條語(yǔ)句繼續(xù)執(zhí)行。從結(jié)構(gòu)和調(diào)用方法上看,過程分外部過程和內(nèi)部過程。建立外部過程的方法與建立源程序(即程序文件)的方法完全相同,其擴(kuò)展名也是.prg。內(nèi)
28、部過程是指調(diào)用程序尾部所附過程和過程文件中的過程。注意:過程文件現(xiàn)在已很少使用。9.6 自定義函數(shù)、過程及其調(diào)用自定義函數(shù)、過程及其調(diào)用2 內(nèi)部過程的結(jié)構(gòu): 程序尾部所附的過程和過程文件中的過程都屬內(nèi)部過程,其結(jié)構(gòu)如下:PROCEDURE ProcedureNamePARAMETERS ParameterList CommandsRETURNeExpression 說明:ProcedureName 指定要?jiǎng)?chuàng)建的過程名PARAMETERS ParameterList 參數(shù)表,是過程中使用的形式參數(shù),用于接收調(diào)用程序中傳過來的實(shí)參表所對(duì)應(yīng)的數(shù)據(jù)。Commands 過程體語(yǔ)句。該命令的功能是在程序文
29、件中標(biāo)識(shí)一個(gè)過程的開始。過程作為程序的一部分時(shí),通常列在程序的末尾。9.6 自定義函數(shù)、過程及其調(diào)用自定義函數(shù)、過程及其調(diào)用3外部過程的結(jié)構(gòu): 一個(gè)外部過程就是一個(gè)程序,在程序中用DO命令運(yùn)行一個(gè)程序,就是過程調(diào)用,又稱外部過程調(diào)用。被調(diào)用的程序必須有一條RETURN語(yǔ)句,以返回調(diào)用它的主程序。DO命令的格式如下:DO ProgramName1|ProcedureNameIN ProgramName2WITH ParameterList說明:ProgramName1 指定要執(zhí)行的程序名ProcedureName 指定要執(zhí)行的過程名IN ProgramName2 執(zhí)行有ProgramName2指
30、定的程序文件中的過程。WITH ParameterList 指定要傳給程序或過程的參數(shù)。ParameterList中的參數(shù)可以是表達(dá)式、變量、字母或數(shù)字、字段或用戶自定義函數(shù)。RETURN命令的格式如下:RETURN eExpression|TO MASTER|TO ProcedureName說明:eExpression 指定返回給調(diào)用程序的表達(dá)式。TO MASTER 將控制返回給最高層的調(diào)用程序。TO ProcedureName 將控制權(quán)返回給指定過程。該命令終止程序、過程或函數(shù)的運(yùn)行,將程序控制權(quán)返回給調(diào)用程序、最高層調(diào)用程序、另一個(gè)程序或命令窗口。9.6 自定義函數(shù)、過程及其調(diào)用自定義函
31、數(shù)、過程及其調(diào)用9.6.3 過程的調(diào)用 在vfp中,無(wú)論內(nèi)部過程還是外部過程,都可用do命令調(diào)用格式:do 過程名 with 表達(dá)式表列【例9.10】:設(shè)計(jì)一個(gè)通過調(diào)用內(nèi)部過程計(jì)算圓面積的程序。主程序的功能是輸入圓的半徑,并顯示所求得的面積;內(nèi)部過程的功能是計(jì)算圓的面積程序名為test7.prg。程序文件內(nèi)容如下:clearinput“請(qǐng)輸入圓的半徑:”to r1s1=0do area with r1,s1?“所求圓的面積=:”?s1returnprocedure area &定義內(nèi)部過程,過程名為areaparameters r,ss=3.1415926*r*rreturn運(yùn)行結(jié)果如
32、圖9-15所示。 圖9-15計(jì)算圓的面積9.7 程序的調(diào)試程序的調(diào)試9.7.1 查錯(cuò)的常用方法。 一、如果在我們程序中有語(yǔ)法性的錯(cuò)誤,當(dāng)程序運(yùn)行到錯(cuò)誤的語(yǔ)句時(shí)系統(tǒng)就會(huì)停下來,并提示我們程序有錯(cuò),往往還會(huì)說出是什么錯(cuò)誤,如“命令中含有不能識(shí)別的短語(yǔ)或關(guān)鍵字”,并給出選擇“取消”、“掛起”、“忽略”、“幫助”四個(gè)選擇如圖9-16所示。圖9-16程序中有語(yǔ)法性錯(cuò)誤顯示它們的意思分別是:取消中止程序運(yùn)行,回到命令窗口,相當(dāng)于執(zhí)行了cancel命令,在程序中創(chuàng)建的所有變量被釋放(除公共變量),但數(shù)據(jù)庫(kù)及數(shù)據(jù)表一般保持當(dāng)時(shí)的狀態(tài),您可以用browse命令查看數(shù)據(jù)表的內(nèi)容即記錄指針?biāo)诘奈恢玫鹊龋粧炱饡和3?/p>
33、序,相當(dāng)于執(zhí)行了suspend命令,這時(shí)程序中的所有變量都保持原值,您可以用?命令查看變量的值,當(dāng)然也可以查看數(shù)據(jù)表的情況;忽略忽略所出現(xiàn)的錯(cuò)誤,即跳過出錯(cuò)的語(yǔ)句繼續(xù)執(zhí)行后面的語(yǔ)句;幫助顯示有關(guān)出錯(cuò)的幫助信息,對(duì)于錯(cuò)誤做更詳細(xì)的說明。不過很多時(shí)候都沒什么幫助。9.7 程序的調(diào)試程序的調(diào)試 如果這時(shí)您一眼就能看出問題出在哪,那么您可以用取消,然后進(jìn)到程序中找出錯(cuò)誤所在,將其改正。在選擇了取消后,可能這時(shí)有表單是打開的,那么用鼠標(biāo)點(diǎn)一下該窗口,然后調(diào)菜單上的文件關(guān)閉。如果菜單是您自己的自定義菜單,用set sysmenu to default回到系統(tǒng)菜單。改完后,再次運(yùn)行程序前,最好將所有的數(shù)據(jù)庫(kù)
34、及表關(guān)閉,以免在程序打開一個(gè)數(shù)據(jù)表時(shí)出現(xiàn)表已打開的錯(cuò)誤,比較好的辦法是在程序開頭先關(guān)閉所有的數(shù)據(jù)庫(kù)及表。關(guān)閉所有數(shù)據(jù)庫(kù)的命令是:close databases all,關(guān)閉所有表的命令是:close tables all。 如果您不知道問題出在程序的哪個(gè)地方,那么就選擇掛起,系統(tǒng)會(huì)彈出一個(gè)調(diào)試器窗口顯示出錯(cuò)的語(yǔ)句,如圖9-16,在跟蹤窗口的黃色箭頭所指的語(yǔ)句就是出錯(cuò)的語(yǔ)句。這時(shí)不要馬上改程序,因?yàn)槌绦蜻€沒有結(jié)束運(yùn)行,如要改程序應(yīng)先終止程序運(yùn)行,按調(diào)試中的終止按鈕 ,然后退出調(diào)試器(菜單上的文件退出),接下來與上面選擇取消后的處理方法相同。 一般不要選擇忽略,因?yàn)槌绦蛑猩舷抡Z(yǔ)句都有很緊密的關(guān)系,
35、當(dāng)一條語(yǔ)句出錯(cuò)后,如果繼續(xù)運(yùn)行,可能會(huì)出現(xiàn)很多錯(cuò)誤,而后面出錯(cuò)的語(yǔ)句可能并沒有錯(cuò),是因?yàn)榍懊驽e(cuò)了才導(dǎo)致后面的語(yǔ)句出錯(cuò),如果前面正確,后面也會(huì)正確,因此對(duì)于初學(xué)者來說,選擇忽略不利于找出錯(cuò)誤所在。9.7 程序的調(diào)試程序的調(diào)試二、 有些時(shí)候,程序中的語(yǔ)句并沒有出錯(cuò),但是運(yùn)行的結(jié)果卻不是我們所要的結(jié)果,這往往是因?yàn)槲覀冇缅e(cuò)了語(yǔ)句,雖然語(yǔ)句本身是正確的,但用在了不該用的地方、或者該用的地方?jīng)]有用、又或者語(yǔ)句的先后順序錯(cuò)了等等,都可能導(dǎo)致這種情況。一旦出現(xiàn)這種情況往往比上一種情況麻煩些,不容易一下看出問題出在哪里,那么需要我們仔細(xì)分析程序中的語(yǔ)句,看是否用的對(duì),是否達(dá)到了我們的要求。比如在我們前面九九乘
36、法管理程序中,在程序的開始多了一條“i=1”語(yǔ)句,導(dǎo)致運(yùn)行的結(jié)果出錯(cuò)。圖9-18程序中用錯(cuò)了語(yǔ)句 有時(shí)光看語(yǔ)句,怎么也看不出問題在哪,這就用采用一些輔助手段,最常用的輔助手段是在可能發(fā)生問題的地方將程序掛起,即在程序中加一句suspend,當(dāng)程序運(yùn)行到這里時(shí)將程序掛起,然后在命令窗口中查看各有關(guān)變量的值或數(shù)據(jù)表的情況。另外在程序掛起時(shí)我們可以調(diào)出調(diào)試器,看程序執(zhí)行到什么地方。調(diào)的方法是在菜單上的工具調(diào)試器,可以在其中的監(jiān)視窗口查看各表達(dá)式的值,在局部窗口查看各變量的值,而且您可以在窗口中長(zhǎng)條文本框(如圖9-19)中輸入一個(gè)表達(dá)式或變量,調(diào)試器會(huì)顯示出它們的值。9.7 程序的調(diào)試程序的調(diào)試圖9-
37、18程序中語(yǔ)句用錯(cuò)了圖9-19調(diào)試器中的監(jiān)視窗口如還不能找到問題,按可單步執(zhí)行程序,即按一下運(yùn)行一條語(yǔ)句,這樣可以更有助于找到問題。9.7 程序的調(diào)試程序的調(diào)試9.7.2 常見錯(cuò)誤 啟動(dòng)一個(gè)表單后,再用代表這個(gè)表單的變量去調(diào)用它時(shí)卻不行。調(diào)用表單的變量與其它變量一樣,如是在一個(gè)子程序中創(chuàng)建的,當(dāng)這個(gè)程序運(yùn)行結(jié)束后,這個(gè)變量也就釋放了,即這個(gè)變量不再存在了,雖然表單還在,故不能用這個(gè)變量去調(diào)用該表單了。解決的方法是將其設(shè)為公共變量,或在更高層的程序中創(chuàng)建,還可以在調(diào)用表單命令中加上“l(fā)inked”子句(do .linked)。 常常在表格中或其它地方看不到數(shù)據(jù)表中的記錄。這往往
38、是因?yàn)橛涗浿羔樀轿膊?,即EOF()真。 修改記錄時(shí)卻修改了另一個(gè)記錄。這往往是因?yàn)檫M(jìn)入修改后又做了查詢,查詢后沒有將記錄指針返回到原記錄。 進(jìn)入一個(gè)循環(huán)后就死機(jī)了。這是因?yàn)闆]有設(shè)置跳出循環(huán)的條件,或者條件永遠(yuǎn)不能滿足,比如一個(gè)循環(huán)的跳出條件是當(dāng)一個(gè)變量的值達(dá)到某一數(shù)值,每循環(huán)一次應(yīng)將該變量加1,但忘了加1的語(yǔ)句,就會(huì)造成死循環(huán),因?yàn)樽兞康闹涤肋h(yuǎn)達(dá)不到預(yù)定的數(shù)值。 查詢英文時(shí),明明有的記錄查不到。這可能是大小寫不一樣造成的,比如:locate for name=“crops”,如果數(shù)據(jù)表中的是“CROPS”那么就查不到。解決的辦法:locate for upper(name)=“CROPS”。
39、不管是英文還是中文,還是查不到所要的記錄。這種情況很可能是輸入的查詢值后面有空格,比如上面那個(gè)查詢語(yǔ)句,如果操作者不小心在文本框中輸入了“crops_”(下劃線代表有一個(gè)空格),而這個(gè)空格往往是不容易被發(fā)現(xiàn)的,那么查詢時(shí)就可能找不到,除非數(shù)據(jù)表中的數(shù)據(jù)也剛好是這樣,這里要注意一點(diǎn)一個(gè)字符字段的內(nèi)容如小于字段的長(zhǎng)度,系統(tǒng)會(huì)自動(dòng)為該字符后面加上空格,比如上面那個(gè)例子,如果name的長(zhǎng)度是8,則“crops”這個(gè)記錄name的值就是“crops_”(后面有三個(gè)空格),那么有三個(gè)空格和有一個(gè)空格就不相等。解決的辦法是用trim()函數(shù)將輸入的查詢值后面的空格去掉,更進(jìn)一步,為了防止不小心前面也加了空格
40、,可用alltrim()將前后的空格都去掉。 當(dāng)在數(shù)據(jù)表中移動(dòng)記錄指針等操作時(shí)出現(xiàn)意想不到的錯(cuò)誤。往往是因?yàn)闆]有記錄。 習(xí)題習(xí)題9一、選擇題一、選擇題1在Visual FoxPro環(huán)境下,執(zhí)行命令文件exp.prg可以在命令窗口中輸入命令_ 。 . DOexp . exp.prg . exp.exe . DO exp.exe2在FOR.ENDFOR循環(huán)結(jié)構(gòu)中,如省略步長(zhǎng)則系統(tǒng)默認(rèn)步長(zhǎng)為( )A.0 B.-1C.1 D.23在DO WHILE 循環(huán)中,若循環(huán)條件設(shè)置為.T.,則下列說法正確的是 ( )A. 程序一定出現(xiàn)死循環(huán) B. 程序不會(huì)出現(xiàn)死循環(huán)C. 在語(yǔ)句組中設(shè)置EXIT防止出現(xiàn)死循環(huán)D.
41、 在語(yǔ)句組中設(shè)置LOOP防止出現(xiàn)死循環(huán)4. 以下程序的運(yùn)行結(jié)果為 ( ) X=1.5 do case casex2 y=2 casex1 y=1 endcase return A. 1 B. 2 C. O D. 語(yǔ)法錯(cuò)誤習(xí)題習(xí)題95循環(huán)結(jié)構(gòu)中EXIT語(yǔ)句的功能是( ) A,放棄本次循環(huán),重新執(zhí)行該循環(huán)結(jié)構(gòu) B,放棄本次循環(huán),進(jìn)入下次循環(huán) C,退出循環(huán),執(zhí)行循環(huán)結(jié)構(gòu)的下一條語(yǔ)句 D,退出循環(huán),結(jié)束程序的運(yùn)行6下列程序段有語(yǔ)法錯(cuò)誤的行為第( )行1 if b*b-4*a*c02 s=sqrt(d)3 else s=sqrt(-d)4 endifA.1 B.2 C.3 D.47下列程序段有語(yǔ)法錯(cuò)誤的
42、行為第( )行1 for I=1.50 to 12.34 step 0.832 I=I+13 nextA.1 B.2 C.3 D.無(wú)8以下關(guān)于循環(huán)的敘述正確的有( )A.循環(huán)語(yǔ)句的入口語(yǔ)句與出口語(yǔ)句必須配對(duì)出現(xiàn)B.循環(huán)體可以為空C.三種循環(huán)語(yǔ)句各有分工,不能相互轉(zhuǎn)換D.循環(huán)體的執(zhí)行次數(shù)不能也不可能為0次習(xí)題習(xí)題99下列程序段有語(yǔ)法錯(cuò)誤的行為第( )行 1 do case 2 case a0 3 s=1 4 else 5 s=0 6 endcase A.2 B.4 C.5 D.610設(shè)有下列程序段: 1 do while 2 do while 3 enddo 2 4 exit 5 enddo 1
43、 則執(zhí)行到exit 語(yǔ)句時(shí),將執(zhí)行( ) A.第1行 B.第3行的下一個(gè)語(yǔ)句 C.第2行 D.第5行的下一個(gè)語(yǔ)句11執(zhí)行下列命令后: D=* ?5&D8=+STR(5&D8,2) 命令?輸出的值為 ( ) A.5&D8=0 B.5&D8=40 C.5*.8=4.0 D.5*8=40習(xí)題習(xí)題912執(zhí)行下列命令后: XYZ=123.456 CH=XYZ ?INT(CH) 命令?輸出的值為( ) A.0 B.123.456 C.123 D.出錯(cuò)13. 以下循環(huán)體共執(zhí)行了( )次 ForI=1 to 10 ? I I=I+1 Endfor A 10 B 5 C 0 D
44、語(yǔ)法錯(cuò)14有關(guān)LOOP語(yǔ)句和EXIT語(yǔ)句敘述正確的是 ( ) A. LOOP和EXIT語(yǔ)句可以寫在循環(huán)體的外面 B. LOOP語(yǔ)句的作用是把控制轉(zhuǎn)到ENDDO語(yǔ)句 C. EXIT語(yǔ)句的作用是把控制轉(zhuǎn)到ENDDO語(yǔ)句 D. LOOP和EXIT語(yǔ)句一般寫在循環(huán)結(jié)構(gòu)里面嵌套的分支結(jié)構(gòu)中習(xí)題習(xí)題915閱讀程序,正確的運(yùn)行結(jié)果是 ( ) DO WHILE NOT EOF( ) LOCATE FOR XB =“男” DISPLAY CONTINUE ENDDO A.程序出錯(cuò) B.屏幕上顯示STUDENT.DBF數(shù)據(jù)庫(kù)中所有性別為男的記錄 C.屏幕上顯示STUDENT.DBF數(shù)據(jù)庫(kù)的所有記錄 D.程序死循環(huán)
45、,屏幕上一直顯示STUDENT.DBF數(shù)據(jù)庫(kù)的第一條性別為男的記錄16閱讀程序,正確的運(yùn)行結(jié)果是 ( ) CLEA USE student INDEX ON xb TO xbindex SEEK男 DO WHILE NOT EOF() DISPLAY SKIP ENDDO A.程序出錯(cuò) B.屏幕上顯示STUDENT.DBF數(shù)據(jù)庫(kù)中所有性別為男的記錄 C.屏幕上顯示STUDENT.DBF數(shù)據(jù)庫(kù)的所有記錄 D.程序死循環(huán),屏幕上一直顯示STUDENT.DBF數(shù)據(jù)庫(kù)第一條性別為男的記錄習(xí)題習(xí)題917. 有關(guān)SCAN 循環(huán)結(jié)構(gòu),敘述正確的是( ) A.SCAN循環(huán)結(jié)構(gòu)中的LOOP語(yǔ)句,可將程序流程直接
46、指向循環(huán)開始語(yǔ)句SCAN.首先判斷EOF() 函數(shù)的真假 B.在使用SCAN循環(huán)結(jié)構(gòu)時(shí),必須打開苛一個(gè)數(shù)據(jù)庫(kù) C.SCAN循環(huán)結(jié)構(gòu)的循環(huán)體中必須寫有SKIP語(yǔ)句 D.SCAN循環(huán)結(jié)構(gòu),如果省略了SCOPE子句、FOREXPLL和WHILEEXP12條件子句,則直接退出循環(huán)18有關(guān)FOR 循環(huán)結(jié)構(gòu),敘述正確的是 ( ) A.對(duì)于FOR循環(huán)結(jié)構(gòu),循環(huán)的次數(shù)是未知的 B.FOR循環(huán)結(jié)構(gòu)中,可以EXIT語(yǔ)句,但不能使用LOOP語(yǔ)句 C.FOR循環(huán)結(jié)構(gòu)中,不能人為地修改循環(huán)控制變量,否則會(huì)導(dǎo)致循環(huán)次數(shù)出錯(cuò) D.FOR循環(huán)結(jié)構(gòu)中,可以使用LOOP語(yǔ)句,但不能使用EXIT語(yǔ)句19FoxPro的應(yīng)用程序由三種
47、基本結(jié)構(gòu)組合而成,它們是( ) A.順序結(jié)構(gòu).選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu) B.順序結(jié)構(gòu).循環(huán)結(jié)構(gòu)和模塊結(jié)構(gòu) C.邏輯結(jié)構(gòu).物理結(jié)構(gòu)和程序結(jié)構(gòu) D.分支結(jié)構(gòu).重復(fù)結(jié)構(gòu)和子程式結(jié)構(gòu)20在vfp的“程序”單中選擇“運(yùn)行”命令,被執(zhí)行文件的擴(kuò)展名不能為 ( ) A. .prg B. .spr C. .pjx D. .fxp習(xí)題習(xí)題921.下列關(guān)于過程的說法中不正確的是( )A.過程文件可以放在任何程序文件代碼的后面,也可以保存在稱為過程文件的單獨(dú)文件里B.過程文件只包含過程,這些過程只能被過程文件調(diào)用C.如果需要打開多個(gè)過程文件,可以在調(diào)用過程語(yǔ)句中加ADDITVE,那么在打開過程文件時(shí),并不關(guān)閉原先已打開的
48、過程文件D.關(guān)閉個(gè)別過程文件的命令格式是:RELESE PROCEDURE22有Visual FoxPro程序如下:SET TALK OFFUSE CJM - ZF=0DO WHILE.NOT.EOF()M - ZF=M - ZF+ZFSKIPENDDO?M - ZFRETURN其中數(shù)據(jù)庫(kù)文件CJ.DBF中有2條記錄,內(nèi)容如下: XM ZF 1 李四 500.00 2 張三 600.00運(yùn)行該程序的結(jié)果應(yīng)當(dāng)是 A.1100 B.1000 C.1600 D.1200習(xí)題習(xí)題923在D盤的根目錄下新建一個(gè)名為AA的程序文件,應(yīng)在命令窗口鍵入哪條命令,打開程序編輯窗口( ) Amodify comm
49、and d:aa B. modify command aa Ccreate d:aa D. create aa24本程序運(yùn)行后,輸出結(jié)果是( ) a=10 c=d b=11 a=c c=12 endif d=13 ?a if ba A.10 B.11 C.12 D.1325本程序是否有錯(cuò),如果有錯(cuò),是什么類型的錯(cuò)誤( ) 。 r=6 s=3.14*r*h ?“圓面積=”,s A. 本程序正確 B. 語(yǔ)法錯(cuò)誤 C. 邏輯(語(yǔ)序)錯(cuò)誤 D. 該程序太大,超出2GB,無(wú)法運(yùn)行 習(xí)題習(xí)題926正確地編輯并運(yùn)行了一個(gè)VFP程序文件后,在程序所在文件夾會(huì)發(fā)現(xiàn)有幾個(gè)主名相同的文件?它們的擴(kuò)展名都是什么( )
50、。 A3個(gè)文件,它們的擴(kuò)展名分別是 .dbf .fpt .bak B1個(gè)源程序文件,即 .prg C3個(gè)文件,它們的擴(kuò)展名分別是 .prg .fxp .bak D. 1個(gè)目標(biāo)程序文件,即 .fxp 27編寫程序時(shí),為了以后閱讀修改程序方便,可以在寫源程序時(shí)加入注釋。必須要在注釋信息前加上規(guī)定的符號(hào)( ),使注釋信息變?yōu)榫G色,方不被程序執(zhí)行。 A B ! C & D & 或 * 28 .程序的控制結(jié)構(gòu)有幾種( )。 A. 3種:順序結(jié)構(gòu),分支結(jié)構(gòu),循環(huán)結(jié)構(gòu) B. 3種:?jiǎn)畏种ЫY(jié)構(gòu),雙分支結(jié)構(gòu),多分支結(jié)構(gòu) C. 程序多種多樣,結(jié)構(gòu)有無(wú)限多種 D. 1種:多分支結(jié)構(gòu) 29下面這個(gè)語(yǔ)句
51、系列是什么類型的循環(huán)語(yǔ)句結(jié)構(gòu)( ) DO while. . Enddo A. 步長(zhǎng)循環(huán) B. 條件循環(huán) C. 掃描循環(huán) D. 非循環(huán) 習(xí)題習(xí)題930. 下面這個(gè)語(yǔ)句系列是什么類型的循環(huán)語(yǔ)句結(jié)構(gòu)( ) For. . Endfor/next A. 步長(zhǎng)循環(huán) B. 條件循環(huán) C. 掃描循環(huán) D. 非循環(huán) 31.下面這個(gè)語(yǔ)句系列是什么類型的分支結(jié)構(gòu)( ) If. . else . Endif A. 雙分支 B. 單分支 C. 不是分支語(yǔ)句 D. 多分支 32. 下面這個(gè)程序,如果程序執(zhí)行了Loop語(yǔ)句,下一步執(zhí)行哪一句( ) store 0 to i,s,t do while i100 i=i+1 s
52、=s+i if int(i/2)=i/2 loop endif t=t+i enddo A. endif B. if int(i/2)=i/2 C. store 0 to i,s,t D. do while i100 習(xí)題習(xí)題933Visual FoxPro中程序文件的擴(kuò)展名是_。 A. IDX B. PRG C. EXE D. DBF 34. 函數(shù)實(shí)質(zhì)上就是具有特定功能的程序。VFP自帶了200多個(gè)函數(shù),此外,我們還可以通過編程的方式創(chuàng)造新的函數(shù),這個(gè)新的函數(shù)叫做( ) A. 子程序 B. 過程 C. 自定義函數(shù) D. 系統(tǒng)函數(shù) 35. 在主程序中,調(diào)用子程序的命令是( ) A. go B.
53、 to C. seek D. do 36在VFP環(huán)境下,調(diào)出程序調(diào)試器的方法有2種,即( ) A. 菜單“文件/打開”;菜單“顯示/瀏覽” B. 菜單命令“工具/調(diào)試器”;或在命令窗口鍵入 debug C. 菜單命令“工具/調(diào)試器”;或在命令窗口鍵入 edit D. 菜單命令“工具/調(diào)試器”;或在命令窗口鍵入 modify37結(jié)構(gòu)化程序設(shè)計(jì)常用有3種方法,即( ) A. 順序結(jié)構(gòu),分支結(jié)構(gòu),循環(huán)結(jié)構(gòu) B. 程序,模塊,命令 C. 錄入,調(diào)試,運(yùn)行 D. 自頂向下,模塊化,層次化 習(xí)題習(xí)題938本程序是求N!(N的階乘)的值,留有一句未寫,請(qǐng)選擇一個(gè)答案。 SET TALK OFF _ FOR
54、Y=1 TO N P=P*Y ENDFOR RETUA. P=P*X B. P=1 C. Y=1 D. Y=0 39試寫出程序執(zhí)行后的結(jié)果: SET TALK OFF STORE 0 TO M FOR N=1 TO 8 M=M+N ENDFOR ?“M=”,M 結(jié)果為_.A. 36 B. 35 C. 30 D. 26 習(xí)題習(xí)題940已有職工登記庫(kù)ZGDJ.DBF,記錄如下: 分析以下程序的執(zhí)行結(jié)果: SET TALK OFF USE ZGDJ SCAN FOR NOT HF IF XB=“女” REPLACE JBGZ WITH JBGZ+50 ENDIF ?XM+“基本工資為”+STR(JB
55、GZ) ENDSCAN 執(zhí)行結(jié)果為:_. A. 李麗基本工資為2220 B. 李麗基本工資為2250 C. 李麗基本工資為2240 D. 李麗基本工資為2200RECORD#XMXBZCJBGZHF1王非女助教1500.T.2劉華男工程師2500.F.3周發(fā)男教授3000.T.4李麗女講師2200.F.習(xí)題習(xí)題941. 已有職工登記庫(kù)ZGDJ.DBF,記錄如下: 現(xiàn)有一程序,計(jì)算最大基本工資的值,在_處填上內(nèi)容使程序完整。 USE ZGDJ MAX=JBGZ N=RECCOUNT FOR I=2 TO N GO i IF MAX2000 SKIP -1 ?RECNO( )A. 1 B. 2 C
56、. 3 D. 4RECORD#XMXBZCJBGZHF1王非女助教1500.T.2劉華男工程師2500.F.3周發(fā)男教授3000.T.4李麗女講師2200.F.習(xí)題習(xí)題9 42. 已有職工登記庫(kù)ZGDJ.DBF,記錄如下:現(xiàn)有一程序,目的是顯示劉華的姓名和職稱。請(qǐng)將程序補(bǔ)充完整(命令不要縮寫) USE ZGDJ LOCATE FOR XM=“劉華” _ USE A. DISPLAY FIELDS XM B. DISPLAY FIELDS XM,ZC C. DISPLAY FIELDS D. DISPLAY RECORD#XMXBZCJBGZHF1王非女助教1500.T.2劉華男工程師2500.
57、F.3周發(fā)男教授3000.T.4李麗女講師2200.F.習(xí)題習(xí)題944在命令窗口,輸入下列命令后,可以打開_個(gè)命令文件編輯窗口。 MODIFY COMMAND JJ MODIFY COMMAND KK A. 0 B. 1 C. 2 D. 錯(cuò)誤 二、填空題1VFP中程序控制分為 、_ _、_ _ _三種。2常用的循環(huán)語(yǔ)句有_ _ 、_ _ _和_ _。3在DO WHILEENDDO 結(jié)構(gòu)中可以用_語(yǔ)句直接跳到DOWHILE開始處繼續(xù)循環(huán) ,可以用_語(yǔ)句直接跳到 ENDDO后即退出循環(huán)。4設(shè)某表中有一數(shù)值型字段gz,共有5條記錄,gz的值依次為500、560、480、510、600,當(dāng)執(zhí)行SCAN
58、 WHILE gz480ENDSCAN循環(huán)后,共有_記錄經(jīng)過處理。5VFP系統(tǒng)中,程序控制結(jié)構(gòu)分為:順序、分支、_ _和_ _四類。6常用的分支語(yǔ)句有_語(yǔ)句和_語(yǔ)句。常有的循環(huán)語(yǔ)句有_語(yǔ)句、_語(yǔ)句和_語(yǔ)句。習(xí)題習(xí)題97過程是一個(gè)子程序 ,以_語(yǔ)句開始,調(diào)用過程使用命令_ 8有如下程序: *主程序:MAIN。PRGSET TALK OFFCLEAR S=0DO SUB WITH 10,S?SRETU*子程序SUB。PRGPARAMETERS D1,D2D1=D1+D1D2=D1*2RETURN執(zhí)行主程序后S的值是_。習(xí)題習(xí)題99設(shè)成績(jī)庫(kù)CJK.DBF中“數(shù)學(xué)”(數(shù)值型字段)這門課程的學(xué)分為4,其
59、學(xué)分計(jì)算的方法如下:數(shù)學(xué)=90,學(xué)分值為480=數(shù)學(xué)90,學(xué)分值為370=數(shù)學(xué)80,學(xué)分值為260=數(shù)學(xué)70,學(xué)分值為1數(shù)學(xué)60,學(xué)分值為0計(jì)算任一學(xué)生數(shù)學(xué)這門課程的學(xué)分值的程序如下:SET TALK OFFUSE CJKACCEPT “輸入學(xué)號(hào):” TO XHXF=0LOCATE FOR學(xué)號(hào)=XHDO CASECASE_XH=40CASE_XH=3CASE_ XF=2CASE_ XF=1OTHERWISE XF=0ENDCASE?“學(xué)號(hào):”,XH?“數(shù)學(xué)的學(xué)分值:”,XFUSERETURN習(xí)題習(xí)題910填空完成下列程序,要求該程序能夠三次從右向左顯示變量S內(nèi)容的字幕程序。CLEAR S=SPACE(80)+“關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言VFP計(jì)算機(jī)級(jí)教程。關(guān)系數(shù)據(jù)庫(kù).” +SPACE(60) N=0 _ I=1 DO WHILE I160 20,0SAY SUBSTR(S,I,80) H=INKEY(0.1,“h”) I=I+2 _ _ ENDDO11為
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物科技行業(yè)月度個(gè)人工作計(jì)劃
- 2024秋北師大版數(shù)學(xué)七年級(jí)上冊(cè)1.2 從立體圖形到平面圖形課時(shí)2課件
- 2021-2022學(xué)年陜西省西安市雁塔區(qū)高新一中八年級(jí)(上)第一次月考數(shù)學(xué)試卷(附答案詳解)
- 商品控銷協(xié)議書范文模板
- 離婚斷絕子女關(guān)系協(xié)議書范文文本
- 挖機(jī)合伙人合同協(xié)議書范文范本
- 科藝新視界-探索創(chuàng)新碰撞無(wú)限可能
- 文物保護(hù)與歷史傳承-文化愛好者參與文物保護(hù)
- 工商注冊(cè)地址無(wú)償使用租賃合同(3篇)
- 檔案室個(gè)人工作總結(jié)
- 油氣集輸工藝?yán)碚?-單點(diǎn)系泊和浮式生產(chǎn)系統(tǒng)
- 軟件無(wú)線電接收機(jī)課件
- 醫(yī)院大樓二次裝修工程施工組織設(shè)計(jì)(99頁(yè)含施工工藝)
- 醫(yī)院往來賬款管理制度
- T∕CGMA 031003-2020 一般用離心空氣壓縮機(jī)
- 企業(yè)消防安全教育培訓(xùn)教案PPT課件
- 古詩(shī)選擇題帶答案解析
- 三元催化器機(jī)械性能及老化試驗(yàn)規(guī)范[1]
- 新北師大版五年級(jí)數(shù)學(xué)上冊(cè)全冊(cè)課件(完整版)
- 橋梁BIM入門教程Civil3D基礎(chǔ)課路橋梁工程
- 牛頭刨床說明書(一)
評(píng)論
0/150
提交評(píng)論