




已閱讀5頁(yè),還剩103頁(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ì)初步,本章教學(xué)計(jì)劃,教學(xué)目的:了解程序設(shè)計(jì)的概念和程序設(shè)計(jì)的方法,掌握程序文件的創(chuàng)建與運(yùn)行方法和與程序設(shè)計(jì)相關(guān)的輔助命令,掌握三大結(jié)構(gòu)的程序設(shè)計(jì)方法,掌握過(guò)程與自定義函數(shù)的定義和調(diào)用方法。 重點(diǎn):輸入輸出命令、三種基本結(jié)構(gòu)程序設(shè)計(jì) 難點(diǎn):雙層循環(huán)程序設(shè)計(jì)、程序的模塊化 課時(shí):課堂講授8課時(shí)、上機(jī)實(shí)驗(yàn)8 課時(shí) 方式:課堂講授、上機(jī)實(shí)驗(yàn),本章綱要,順序結(jié)構(gòu)設(shè)計(jì),分支結(jié)構(gòu)設(shè)計(jì),循環(huán)結(jié)構(gòu)設(shè)計(jì),程序設(shè)計(jì)基礎(chǔ),模塊化設(shè)計(jì),程序設(shè)計(jì)基礎(chǔ),2. 程序設(shè)計(jì)的控制結(jié)構(gòu)(3種結(jié)構(gòu)),3. 結(jié)構(gòu)化程序設(shè)計(jì)(4個(gè)步驟),4. 程序文件中的專(zhuān)用命令(5類(lèi)),5. 程序文件的建立與運(yùn)行,1. 程序設(shè)計(jì)及算法的概念 (2個(gè)概念),1.程序設(shè)計(jì)及算法的概念,程序 ,算法:解決問(wèn)題的方法和步驟,程序設(shè)計(jì)基礎(chǔ),數(shù)據(jù)結(jié)構(gòu),算法,對(duì)數(shù)據(jù)的描述:在程序中指定數(shù)據(jù)的類(lèi)型和數(shù)據(jù)的組織形式,對(duì)操作的描述,類(lèi)比理解:菜譜原料操作步驟,一系列計(jì)算機(jī)指令的集合,算法的概念,在員工表中,按員工編號(hào)查詢(xún)員工的姓名和職稱(chēng) 。 算法 1.打開(kāi)員工表。 2.輸入待查員工的員工號(hào) 3.查找員工在表中對(duì)應(yīng)的位置。 4.顯示該記錄的員工號(hào)、姓名和職稱(chēng)。 5.關(guān)閉表。,將酒瓶和油瓶中的液體互換。 解決方法 1.拿來(lái)一個(gè)空瓶 2.酒瓶的酒倒入空瓶 3.油瓶的油倒入酒瓶 4.空瓶的酒倒入油瓶 思考 如何將變量A、B中存放的值互換?寫(xiě)出算法,程序設(shè)計(jì)基礎(chǔ),2.程序設(shè)計(jì)的控制結(jié)構(gòu),三種基本的控制結(jié)構(gòu),順序結(jié)構(gòu),分支結(jié)構(gòu),循環(huán)結(jié)構(gòu),流程圖的基本知識(shí),流程圖的基本知識(shí),順序結(jié)構(gòu),特點(diǎn):依照程序書(shū)寫(xiě)順序執(zhí)行程序,use sb &打開(kāi)表 list fields 名稱(chēng),價(jià)格 for 主要設(shè)備 &顯示相關(guān)記錄 replace all 價(jià)格 with 價(jià)格*0.9 for 主要設(shè)備 &數(shù)據(jù)替換,分支結(jié)構(gòu)(選擇結(jié)構(gòu)),特點(diǎn):根據(jù)條件的 滿(mǎn)足與否而 分別執(zhí)行與 其相對(duì)應(yīng)的 操作,思考:分支結(jié)構(gòu)與順序結(jié)構(gòu)的不同之處,循環(huán)結(jié)構(gòu)(重復(fù)結(jié)構(gòu)),特點(diǎn):反復(fù)執(zhí)行某些操作,反復(fù)執(zhí)行的部分稱(chēng)為循環(huán)體。,思考: 兩種循環(huán)結(jié)構(gòu)的區(qū)別在于?(提示:循環(huán)條件),答案: 1. 當(dāng)型是當(dāng)循環(huán)條件成立時(shí)執(zhí)行循環(huán)體,條件不成立時(shí)退出循環(huán) ;直到型是執(zhí)行循環(huán)體,直到條件成立才退出循環(huán)。 2. 當(dāng)型是先判斷后執(zhí)行,可能一次都不能執(zhí)行;直到型是先執(zhí)行后判斷,至少執(zhí)行一次。,小結(jié),所有程序從整體上看其執(zhí)行流程肯定是從上而下順序執(zhí)行的,是一種順序結(jié)構(gòu)。而在其內(nèi)部的結(jié)構(gòu)中,三種結(jié)構(gòu)是互相嵌套存在。 例如,對(duì)于循環(huán)結(jié)構(gòu),其內(nèi)部肯定包含有判斷條件成立與否的結(jié)構(gòu),單獨(dú)來(lái)看是一種選擇結(jié)構(gòu),但從整體上是屬于循環(huán)結(jié)構(gòu)的一部分,而循環(huán)體內(nèi)部的語(yǔ)句自然是一種依次執(zhí)行的順序結(jié)構(gòu)。,如何設(shè)計(jì)結(jié)構(gòu)化程序?,3.結(jié)構(gòu)化程序設(shè)計(jì),程序設(shè)計(jì)基礎(chǔ),什么是結(jié)構(gòu)化程序? 答1:用高級(jí)語(yǔ)言(如vfp)表示的結(jié)構(gòu)化算法。 答2:用三種基本控制結(jié)構(gòu)組成的程序。,算法設(shè)計(jì),4.程序文件中的專(zhuān)用命令,程序設(shè)計(jì)基礎(chǔ),2、置會(huì)話狀態(tài)命令,3、交互式命令,4、等待命令,5、程序結(jié)束專(zhuān)用命令,1、程序注釋命令,1、程序注釋命令,格 式 :NOTE* 或 & 功 能 : NOTE*多用于對(duì)一個(gè)程序模塊的 功能進(jìn)行說(shuō)明。&是用于在命令語(yǔ) 句末尾加上注釋信息。都不被執(zhí)行. 例 子 : a=mod(sqrt (9) , 3) & 對(duì)9求平方根,然后對(duì)3求模。,格 式 :SET TALK ONOFF 功 能 :控制Visual FoxPro編輯環(huán)境中會(huì)話狀態(tài)的 打開(kāi)與關(guān)閉。 說(shuō) 明 :在會(huì)話狀態(tài)開(kāi)通( on )時(shí) ,VFP在執(zhí)行命令的時(shí)候會(huì)向用戶(hù)提供大量的中間結(jié)果及反饋信息 ,一般用于程序調(diào)試時(shí)。開(kāi)通不僅會(huì)減慢程序的運(yùn)行速度,而且還會(huì)與程序本身的輸出相互夾雜,引起混淆。所以在執(zhí)行程序時(shí),則通常置“會(huì)話”于關(guān)閉狀態(tài)(off),2、置會(huì)話狀態(tài)命令,3、交互式命令,(1)字符串接收命令,(2)任意數(shù)據(jù)輸入命令,(3)定位輸入輸出命令,(1)字符串接收命令,格 式:ACCEPT TO 功 能:此命令是專(zhuān)門(mén)用于字符串的輸入。 說(shuō) 明:(1)提示信息是用來(lái)在輸入時(shí),顯示提示性文字。 (2)輸入的字符串保存在TO所指向的內(nèi)存變量中。 (3)在使用此命令來(lái)輸入字符串時(shí),不需要加上定界符,否則,定界符會(huì)被當(dāng)做字符串本身被存入內(nèi)存變量中。 例 子: ACCEPT “請(qǐng)輸入一個(gè)數(shù)字” TO a 輸入:21 (則a”21”),(2)任意數(shù)據(jù)輸入命令,格 式 :INPUT TO 功 能 :從鍵盤(pán)輸入數(shù)據(jù)保存在指定的內(nèi)存變量中。 說(shuō) 明 :(1)此命令能夠接收各種類(lèi)型數(shù)據(jù)的輸入。 (2)在輸入數(shù)據(jù)時(shí)對(duì)于有定界符的數(shù)據(jù)類(lèi)型一定要帶上定界符輸入。 例 如 :INPUT “請(qǐng)輸入出生日期” TO d 輸入:1985-09-01 INPUT “請(qǐng)輸入入學(xué)成績(jī)” TO d 輸入:560.5 (數(shù)值型數(shù)據(jù)沒(méi)有定界符),(3)定位輸入輸出命令,屏幕格式 系統(tǒng)將整個(gè)屏幕劃分為: 25行 80列 XY平面坐標(biāo)系。 命令格式 SAY GET DEFAULT READ,說(shuō)明: (1)子句用來(lái)表示數(shù)據(jù)在窗口中顯示的位置 ,行與列都是數(shù)值表達(dá)式或是數(shù)值型常量。 (2)SAY子句用來(lái)輸出提示信息,GET子句用來(lái)輸入及編輯數(shù)據(jù)。若缺省SAY子句,GET變量值從指定位置開(kāi)始顯示。 (3)GET子句中的變量必須具有初值,可用DEFAULT子句的指定初值。 (4)通過(guò)GET子句從外界輸入的變量的值,必須通過(guò)READ命令來(lái)激活。在一個(gè)程序中如果有多個(gè)GET子句,只需在最后GET子句后面加上一個(gè)READ子句。一個(gè)READ子句可以激活它前面所有的未被激活的GET子句中的變量。,根據(jù)員工的編號(hào)來(lái)修改員工的基本工資和水電費(fèi)。,CLEAR USE 工資表 yg=“0001“ 2,10 SAY “請(qǐng)輸入員工的編號(hào)“ GET yg READ LOCATE FOR 員工編號(hào) = yg 4,10 SAY “請(qǐng)修改基本工資” GET 基本工資 6,10 SAY “請(qǐng)修改水電費(fèi)” GET 水電費(fèi) READ USE,【例6.1】,格 式: WAIT TO WINDOW AT , NOWAIT CLEAR | NOCLEAR TIMEOUT 功 能:暫停程序運(yùn)行,直到用戶(hù)輸入任意的一個(gè)字符才重新開(kāi)始執(zhí)行程序,也可以用于輸出一條提示信息。 說(shuō) 明: 1)to :將用戶(hù)鍵入的字符保存到內(nèi)存變量。 2)Window at,:在VFP主屏幕 的指定位置出現(xiàn)一個(gè)Wait提示窗口。 3)Timeout:用來(lái)設(shè)定等待時(shí)間。,4、等待命令,例 子: WAIT “請(qǐng)檢查輸入內(nèi)容“ WINDOW AT 9,9,RETURN & 終止程序執(zhí)行,并返回到調(diào)用它 的上級(jí)程序繼續(xù)執(zhí)行,如無(wú)上級(jí) 程序則返回命令窗口。 CANCEL & 終止程序執(zhí)行,清除程序的私有 變量,并返回命令窗口。 QUIT & 退出VFP系統(tǒng),返回WINDOWS, 與文件菜單的退出功能相同。,5、程序結(jié)束專(zhuān)用命令,5.程序文件的建立與運(yùn)行,程序文件又稱(chēng)為命令文件 ,其擴(kuò)展名為.PRG。,建立或修改程序文件 (1) 命令方式 格 式:MODIFY COMMAND ? 功 能:建立或修改一個(gè)程序文件。 說(shuō) 明:命令中的文件名是指定要生成的程序文件的名稱(chēng),缺省的擴(kuò)展名為.PRG;文件名前也可以指明路徑。,(2) 菜單方式(2個(gè)步驟) 選擇”文件”菜單中的”新建”命令,并在彈出的”新建”對(duì)話框中,選擇”程序”按鈕,再單擊”新建文件”命令按鈕,彈出文本編輯窗口。 在文本編輯窗口中,輸入程序內(nèi)容即可。,2. 程序的運(yùn)行 (1) 命令方式 格 式:DO 功 能:依次執(zhí)行程序中的各條命令。 說(shuō) 明:DO命令默認(rèn)運(yùn)行.PRG程序,只需取文件主名。當(dāng)需要使用DO命令執(zhí)行其他文件時(shí),則必須包括擴(kuò)展名。例如,通過(guò)DO命令來(lái)執(zhí)行某個(gè)查詢(xún)文件,文件名為ele.qpr,則命令必須寫(xiě)為:DO ele.qpr。,(2) 菜單方式(2種方式) 選擇”程序”菜單中”運(yùn)行”命令,在彈出的”運(yùn)行”對(duì)話框中,輸入文件名即可。 當(dāng)程序處在編輯狀態(tài)下時(shí),右擊文本編輯區(qū),在其彈出快捷菜單中選擇“執(zhí)行程序”菜單項(xiàng)即可。,順序結(jié)構(gòu)設(shè)計(jì),順序結(jié)構(gòu)程序設(shè)計(jì)是三種基本結(jié)構(gòu)中最簡(jiǎn)單也是最常用的一種結(jié)構(gòu)。順序結(jié)構(gòu)的程序在運(yùn)行時(shí)按照語(yǔ)句排列的先后順序,自頂向下依次執(zhí)行。,【例6.2】,從鍵盤(pán)輸入一個(gè)小寫(xiě)字母,要求改用大寫(xiě)字母輸出。,SET TALK OFF CLEAR ACCEPT “請(qǐng)輸入一個(gè)小寫(xiě)字母“ TO a a= UPPER(a) ? “轉(zhuǎn)換結(jié)果為: “, a SET TALK ON RETURN,如果輸入的字母為非小寫(xiě)字母,例如,誤操作輸入了大寫(xiě)字母或是數(shù)字字符,那么在此程序運(yùn)行中仍然將繼續(xù)執(zhí)行并顯示結(jié)果,這顯然與題意不符,要解決這個(gè)問(wèn)題,需要用到選擇結(jié)構(gòu)程序。,順序結(jié)構(gòu)程序特點(diǎn): 依照程序書(shū)寫(xiě)順序執(zhí)行程序,例2:求長(zhǎng)方形的面積。 clear set talk off input “請(qǐng)輸入長(zhǎng)方形的長(zhǎng):” to L input “請(qǐng)輸入長(zhǎng)方形的寬:” to W s=L*W ? “長(zhǎng)方形的面積為:”, s set talk on return,分支結(jié)構(gòu),程序應(yīng)具有判斷功能,而判斷是通過(guò)程序中的分支結(jié)構(gòu)(選擇結(jié)構(gòu))來(lái)實(shí)現(xiàn)的。,分支結(jié)構(gòu)是程序中一種常用結(jié)構(gòu),按照分支結(jié)構(gòu)執(zhí)行路徑的多少,可分為單分支、雙分支和多分支結(jié)構(gòu)。實(shí)現(xiàn)分支結(jié)構(gòu)的語(yǔ)句有 IF語(yǔ)句和DO CASE語(yǔ)句。,無(wú)論哪種類(lèi)型的分支結(jié)構(gòu),都是依據(jù)所給條件為真或?yàn)榧?,?lái)選擇執(zhí)行某一分支的相應(yīng)操作。,1、單分支結(jié)構(gòu) 格式: IF ENDIF,執(zhí)行流程: 首先計(jì)算條件表達(dá)式的值, 若其值為真,則執(zhí)行IF與ENDIF之間的命令 序列,然后執(zhí)行ENDIF后面的命令; 若其值為假,則直接執(zhí)行ENDIF后面的命令。,分支結(jié)構(gòu)特點(diǎn): 根據(jù)條件成立與否,分別執(zhí)行與其相對(duì)應(yīng)的操作。,單分支結(jié)構(gòu)流程圖:,思考:分支結(jié)構(gòu)與順序結(jié)構(gòu)的不同之處,例1:求長(zhǎng)方形面積。(判斷:當(dāng)輸入的邊長(zhǎng)值為正數(shù)時(shí),求面積。),clear set talk off input “請(qǐng)輸入長(zhǎng)方形的長(zhǎng):” to l input “請(qǐng)輸入長(zhǎng)方形的寬:” to w if l0 and w0 s = l * w ? ”長(zhǎng)方形的面積為:” , s endif return,在設(shè)計(jì)程序時(shí),對(duì)于有數(shù)據(jù)輸入的程序,一定要對(duì)輸入數(shù)據(jù)的有效性做相應(yīng)的檢查,避免由于數(shù)據(jù)的錯(cuò)誤輸入而導(dǎo)致程序的出錯(cuò)。這是一個(gè)程序員必須養(yǎng)成的良好習(xí)慣。,例2,從鍵盤(pán)輸入一個(gè)小寫(xiě)字母,要求改用大寫(xiě)字母 輸出。,2、雙分支結(jié)構(gòu) 格式:IF ELSE ENDIF,執(zhí)行流程: 首先計(jì)算條件表達(dá)式的值, 若其值為真,則執(zhí)行命令序列1,然后 再執(zhí)行ENDIF后面的命令; 若其為假,執(zhí)行命令序列2,然后再執(zhí) 行ENDIF后面的命令。,雙分支結(jié)構(gòu)流程圖,例3:,從鍵盤(pán)輸入一個(gè)數(shù),判斷其為奇數(shù)還是偶數(shù)。,分析:(1)首先是輸入一個(gè)數(shù),然后判斷輸入的數(shù)奇偶性。 (2)應(yīng)輸入數(shù)值型數(shù)據(jù),可以用INPUT或是GET語(yǔ)句來(lái)輸入。 (3)如何判斷奇偶性呢?可使用MOD函數(shù)或求余運(yùn)算符“%”。對(duì)于一個(gè)偶數(shù)x,MOD(x,2)應(yīng)該為0,否則為1。,例4:在工資表中,需要按照員工編號(hào)查詢(xún)員工的基本信息。,分析: 1.打開(kāi)工資表; 2.輸入員工號(hào); 3.用LOCATE命令查找該員工; 4.用FOUND()函數(shù)來(lái)判斷是否存在該記錄。 5.若FOUND()函數(shù)為真,表示存在此員工記錄,否則,不存在此員工記錄,給出“查無(wú)此人”的提示信息。 5.關(guān)閉表。,SET TALK OFF USE 工資表 ACCEPT “請(qǐng)輸入員工編號(hào)” TO a LOCATE FOR 員工編號(hào)=a IF FOUND() & 條件FOUND()為真表示存在此員工 DISP 員工號(hào),基本工資,水電費(fèi) ELSE & 條件FOUND()為假表示不存在此員工 ?“查無(wú)此人!” ENDIF USE SET TALK ON RETURN,程序采用“縮進(jìn)制”格式書(shū)寫(xiě),最外層頂格寫(xiě),屬于其內(nèi)層語(yǔ)句則往后退一定距離,這樣便于閱讀和調(diào)試。,注意: 1、IF與ENDIF必須成對(duì)出現(xiàn),且各占一行。 2、可以為關(guān)系表達(dá)式、邏輯表達(dá)式或其他邏輯量。,課堂練習(xí): 1、在員工表中,按姓名查詢(xún)員工信息。 2、從鍵盤(pán)輸入一個(gè)數(shù),輸出其絕對(duì)值。 3、輸入a、b兩個(gè)數(shù),按由小到大的順序輸出。,思考題: 輸入a、b、c三個(gè)數(shù),按由小到大的順序輸出。,clear set talk off input “請(qǐng)輸入a的值:” to a input “請(qǐng)輸入b的值:” to b input “請(qǐng)輸入c的值:” to c if ab &a和b比較大小,若a大,則a、b 交換 s=a a=b b=s endif if ac &a和c比較大小,若a大,則a、c 交換 s=a a=c c=s endif If bc &b和c比較大小,若b大,則b、c 交換 s=b b=c c=s endif ? a ,b , c return,思考題答案,3.IF語(yǔ)句的嵌套,實(shí)際生活中,很多問(wèn)題不僅僅只有兩種可能,而是要求對(duì)多種情況進(jìn)行不同的處理,則需要用到IF語(yǔ)句嵌套。 嵌套是指在某種結(jié)構(gòu)中含有其它結(jié)構(gòu)。,一般格式: IF IF ENDIF ELSE IF ENDIF ENDIF,注意: 1、IF一定要與ENDIF配對(duì)。 2、在IF結(jié)構(gòu)之間可以嵌套,但不能交叉。,例5: 輸入一個(gè)學(xué)生成績(jī),判斷學(xué)生成績(jī)的等級(jí)。假設(shè)成績(jī)等級(jí)劃分為5等: 0,60 為不及格,60,70為及格, 70,80為良, 80,90為好, 90,100為優(yōu)。,4、多分支DO CASE語(yǔ)句,格式: DO CASE CASE CASE CASE OTHERWISE ENDCASE,例6:,使用DO CASE語(yǔ)句轉(zhuǎn)換例5。,SET TALK OFF INPUT “請(qǐng)輸入成績(jī)” TO p IF ( P100) OR ( P0) ? “輸入的成績(jī)有誤,請(qǐng)重新輸入“ ELSE DO CASE CASE P60 ? “不及格“ CASE P70 ? “及格“ CASE P80 ? “良“ CASE P90 ? “好“ OTHERWISE ? “優(yōu)“ ENDCASE ENDIF RETURN,課堂練習(xí):,編一繳稅程序,以800元為基數(shù),超出部分的繳稅比例如下: 800-1500(含800) 5% 1500-2500(含1500) 10% 2500-5000(含2500) 20% 5000以上 (含5000) 25%,注意事項(xiàng):,1、在DO CASE語(yǔ)句中,當(dāng)有幾個(gè)CASE的條件同時(shí)成立時(shí),自上而下只執(zhí)行最先滿(mǎn)足條件的CASE后面的語(yǔ)句組,然后退出DO CASE語(yǔ)句。 2、DO CASE和ENDCASE必須配對(duì)出現(xiàn)。 3、IF語(yǔ)句和DO CASE語(yǔ)句都可用于多分支結(jié)構(gòu),但當(dāng)分支較多,IF嵌套的層次就越多,程序結(jié)構(gòu)也會(huì)變得復(fù)雜,不利于程序的調(diào)試和修改,所以,當(dāng)嵌套層次超過(guò)34層時(shí),一般不使用IF結(jié)構(gòu),而使用DO CASE語(yǔ)句。,小結(jié),分支結(jié)構(gòu)使得程序功能得到完善,分支結(jié)構(gòu)的目的在于對(duì)不同情況做出不同處理,這種結(jié)構(gòu)的出現(xiàn)使得計(jì)算機(jī)在一定程度上具有了判斷的功能,是計(jì)算機(jī)走向智能化的重要結(jié)構(gòu)。,循環(huán)結(jié)構(gòu)設(shè)計(jì),1.條 件 循 環(huán),2.步 長(zhǎng) 循 環(huán),3.掃 描 循 環(huán),1、條件循環(huán),格式: DO WHILE LOOP EXIT ENDDO,注意事項(xiàng):,(1)此循環(huán)為當(dāng)型循環(huán)。對(duì)于當(dāng)型循環(huán),如果條件第一次就不成立,那么循環(huán)一次也不做。 (2)循環(huán)體內(nèi)應(yīng)有修改循環(huán)條件的語(yǔ)句或EXIT。 (3)LOOP,EXIT可在適當(dāng)時(shí)候控制循環(huán),一般用在IF或DO CASE語(yǔ)句中。,求1+2+3+100之和。 分析:,0 + 1 = 1 1 + 2 = 3 3 + 3 = 6 6 + 4 = 10 4950+100=5050,S I S,S=0 I =1,S=S+I I =I+1,【例6.12】,S=S+I I =I+1,S=S+I I =I+1,SET TALK OFF CLEAR I=1 S=0,I=100,S=S+I,I=I+1,ENDDO,?”S=”,S RETURN,DO WHILE,說(shuō)明:,(1)對(duì)于條件循環(huán),最重要的在于循環(huán)條件的建立,特別是對(duì)于循環(huán)變量臨界值的確定。 (2)循環(huán)變量要賦初值。 (3)循環(huán)體內(nèi)要有能使得循環(huán)條件逐漸趨近于假的語(yǔ)句,否則會(huì)造成死循環(huán)。 (4)要考慮循環(huán)體內(nèi)的語(yǔ)句順序。如果順序不同,可能程序的結(jié)果就不同了。,思考題:,我們應(yīng)修改例6.12中哪些語(yǔ)句來(lái)實(shí)現(xiàn)以下功能需求呢? 1、編程求1+3+5+99。,2、編程求2+4+6+ +1000。,3、編程求1到100所有自然數(shù)的平方和。,4、編程求1*2+2*3+3*4+ +100*101。,【例6.14】,已知表達(dá)式s=1+1/2+1/3+1/n,直到s5 為止,求此時(shí)n的值。,分析:(1)此題為一個(gè)多項(xiàng)式累加求結(jié)果。但是顯然具體多項(xiàng)式有多少項(xiàng)并不清楚所以不知循環(huán)次數(shù)。 (2)采用循環(huán)結(jié)構(gòu),循環(huán)體中每次是對(duì)s累加前一項(xiàng)式的值,而且多項(xiàng)式之間存在著每次分母都比上一次增加1規(guī)律。 (3)由題目給出條件得知,只有當(dāng)s小于5時(shí)循環(huán)才能繼續(xù)。因此得出循環(huán)的條件應(yīng)該為s=5。,CLEAR SET TALK OFF s=0 n=1,DO WHILE s=5 s=s+1/n n=n+1 ENDDO,? “n的值應(yīng)該為”,n-1 SET TALK ON RETURN,【例6.14】的另一種參考答案,用永真循環(huán)實(shí)現(xiàn),程序代碼如下:,CLEAR SET TALK OFF STORE 0 TO S,I,DO WHILE .T. N=N+1 S=S+1/N IF S5 EXIT ENDIF ENDDO,? “n的值應(yīng)該為”,n SET TALK ON RETURN,分析:(1)此題要求判斷100到200之間的所有數(shù),那么是一個(gè)循環(huán)判斷的過(guò)程。 (2)設(shè)一個(gè)變量i初值為100,循環(huán)條件為i=200。 (3)循環(huán)體中,對(duì)每次的i先利用MOD函數(shù)判斷奇偶性。若i為奇數(shù)則累加到變量s中,否則,通過(guò)LOOP語(yǔ)句退出本次循環(huán),進(jìn)入下一次循環(huán)判斷。,【例6.15】,求100到200之間所有奇數(shù)之和。,SET TALK OFF CLEAR s=0 i=100 DO WHILE i=200 i=i+1 &必須放在IF語(yǔ)句前 IF MOD(i,2)=0 LOOP & 若i被2除后余數(shù)為0,則i為偶數(shù),否則退出本次循環(huán)。 ELSE s=s+i ENDIF ENDDO ?“100到200之間奇數(shù)累加之和為:“+s SET TALK ON RETURN,2、步長(zhǎng)循環(huán),條件循環(huán)可以實(shí)現(xiàn)已知和未知循環(huán)次數(shù)的循環(huán)。 對(duì)于循環(huán)次數(shù)已知的循環(huán)還可采用步長(zhǎng)循環(huán)。,格式: FOR = TO STEP ENDFORNEXT,數(shù)值表達(dá)式,默認(rèn)值為1。,說(shuō)明: (1)循環(huán)變量按步長(zhǎng)值增加或減小。 (2)當(dāng)循環(huán)變量的值不在初值與終值范圍內(nèi)時(shí),結(jié)束循環(huán)。,幾種步長(zhǎng)循環(huán)形式:,1.省略步長(zhǎng) FOR i=1 TO 100 n=n+1 ENDFOR 沒(méi)有給出步長(zhǎng),默認(rèn)為1, 退出循環(huán)后n的值為100。,假設(shè)n的初值為0,4.初值與終值相等 FOR i=1 TO 1 STEP 10 n=n+1 ENDFOR 循環(huán)只做一次 , 退出循環(huán)后n的值為1。,求1+2+3+100之和。,【例6.12】,SET TALK OFF CLEAR S=0 FOR i=1 TO 100 STEP 1 S=S+i ENDFOR ? “1-100之和為“,S SET TALK ON RETURN,舉一反三:求123100之積。,S1,S=S*i,積,求所有的3位數(shù)中能同時(shí)被5和12整除的數(shù)有多 少個(gè)?其和是多少?并按照每行輸出5個(gè),輸出這些數(shù)。,分析: 1.所有的三位數(shù),也就確定了范圍是從100999,使用步長(zhǎng)循環(huán),初值為100,終值為999,步長(zhǎng)為1。 2.用循環(huán)到的數(shù)對(duì)5和12求余,若其余數(shù)為0,則是一個(gè)需要的數(shù),那么存放統(tǒng)計(jì)個(gè)數(shù)的變量加1,用于求和的變量累加上該數(shù)值。 3.對(duì)于每個(gè)滿(mǎn)足條件的數(shù)都使用“?”來(lái)保證同行輸出,一旦輸出了5個(gè),則使用“?”換行。即,如果統(tǒng)計(jì)的個(gè)數(shù)能被5整除,就輸出一個(gè)“?”,用來(lái)?yè)Q行。,【例6.13】,STORE 0 TO s,t &s保存累加和,t保存滿(mǎn)足條件的數(shù)的個(gè)數(shù) FOR i=100 TO 999 IF (i%5=0) AND (i%12=0) s=s+i t=t+1 ? i, “ “ IF t%5=0 ? &已經(jīng)輸出5個(gè)數(shù),則換行輸出。 ENDIF ENDIF ENDFOR ?“滿(mǎn)足條件的數(shù)的個(gè)數(shù)為:“, t ?“滿(mǎn)足條件的數(shù)之和為:“, s,思考:輸出所有的四位數(shù)中能同時(shí)被9和11整除的數(shù),每行輸出6個(gè)。,分析: 1.在表中添加新的空記錄可以使用APPEND BLANK命令。 2.用步長(zhǎng)循環(huán)來(lái)控制添加記錄的數(shù)量。 3.內(nèi)部數(shù)據(jù)的輸入可以用定位輸入命令來(lái)完成。 代碼: SET TALK OFF CLEAR USE 員工表 FOR i=1 TO 10 APPEND BLANK ? “請(qǐng)輸入添加的第“, i, “個(gè)員工的資料“,【例6.14】,在員工表中添加10條新記錄。,2,5 SAY “請(qǐng)輸入員工編號(hào)” GET 員工編號(hào) 4,5 SAY “請(qǐng)輸入員工姓名” GET 姓名 6,5 SAY “請(qǐng)輸入員工性別” GET 性別 8,5 SAY “請(qǐng)輸入員工婚否” GET 婚否 10,5 SAY “請(qǐng)輸入員工職稱(chēng)” GET 職稱(chēng) 12,5 SAY “請(qǐng)輸入員工工作日期” GET 工作日期 14,5 SAY “請(qǐng)輸入員工部門(mén)編號(hào)” GET 部門(mén)編號(hào) 16,5 SAY “請(qǐng)輸入員工工資級(jí)別” GET 工資級(jí)別 18,5 SAY “請(qǐng)輸入員工聯(lián)系電話” GET 聯(lián)系電話 READ CLEAR ENDFOR USE SET TALK ON RETURN,小 結(jié),a) 循環(huán)變量、和(或積或個(gè)數(shù))變量要賦初值。 b) DO WHILE循環(huán)體內(nèi)要有修改循環(huán)變量的語(yǔ)句(即為了避免程序成為死循環(huán))。 c)盡可能不要在FOR循環(huán)內(nèi)部使用改變循環(huán)變量的語(yǔ)句。,3、掃描循環(huán),格 式: SCAN FORWHILE ENDSCAN,說(shuō) 明: (1)針對(duì)當(dāng)前工作區(qū)中被打開(kāi)的表的記錄進(jìn)行掃描。 (2)子句確定掃描記錄的范圍,缺省則為ALL。 (3)對(duì)子句內(nèi)滿(mǎn)足FOR或WHILE的記錄執(zhí)行循環(huán)體中的規(guī)定操作。 (4)記錄指針可自動(dòng)往下移。,USE 員工表 STORE 0 TO n1,n2,j1,j2 SCAN IF 性別=“男” n1=n1+1 ELSE n2=n2+1 ENDIF DO CASE CASE 職稱(chēng)=“教授” j1=j1+1 CASE 職稱(chēng)=“副教授” j2=j2+1 ENDDO ENDSCAN,【例6.15】,統(tǒng)計(jì)員工表中男女人數(shù),以及教授和副教授 的人數(shù)。,?“總共有”,n1,“個(gè)男員工” ?“總共有”,n2,“個(gè)女員工” ?“總共有”,j1,“個(gè)教授” ?“總共有”,j2,“個(gè)副教授” USE,總結(jié),a) 條件循環(huán)命令適用于各種類(lèi)型的循環(huán)程序。 b) 計(jì)數(shù)循環(huán)適用于已知循環(huán)次數(shù)的循環(huán)程序。 c) 掃描循環(huán)命令適用于對(duì)數(shù)據(jù)庫(kù)操作的循環(huán)程序。 d) 事實(shí)上,F(xiàn)orEndfor和ScanEndscan是 Do WhileEnddo的特殊形式。,作 業(yè),1.用掃描循環(huán)依次修改學(xué)生表中第10-40條記錄中女生的總分。 2.編寫(xiě)一個(gè)密碼輸入程序,密碼為“ABC”,若用戶(hù)輸入正確,顯示“歡迎使用”,若不正確,允許輸入三次,三次輸入不正確,顯示“無(wú)權(quán)使用本系統(tǒng)”,并退出程序執(zhí)行。 3.在屏幕上打印如下圖形: * * * 4.實(shí)現(xiàn)輸入任意一個(gè)15以?xún)?nèi)的數(shù)求其階乘。,5、設(shè)S=1+1/2+1/3+1/N,求使S不超過(guò)10的最大的N值。 6、求1-1000之間能被3整除的偶數(shù)的個(gè)數(shù)及其和。 7、打印如下圖形: * * * * 附加題: 1、任意輸入10個(gè)數(shù),能求出它們中的最大值和最小值。 2、打印九九乘法表。,模塊化設(shè)計(jì),1.子 程 序,2.過(guò)程與過(guò)程文件,3.自定義函數(shù),4.內(nèi)存變量的作用域,5.數(shù)據(jù)傳遞,1、子程序,一、定義: 子程序?qū)嶋H上是一個(gè)程序,其是一個(gè)相對(duì)的概念,通常稱(chēng)調(diào)用的程序?yàn)橹鞒绦?,被調(diào)用的程序?yàn)樽映绦颉?二、調(diào)用與返回 DO WITH 1、主程序執(zhí)行時(shí)遇到DO命令,執(zhí)行就轉(zhuǎn)向子程序。子程序執(zhí)行完后就會(huì)返回到主程序。 2、參數(shù)表可以是表達(dá)式,若為內(nèi)存變量,必須具有初值。 3、調(diào)用子程序時(shí),參數(shù)表中的參數(shù)要傳送給子程序。,三、子程序參數(shù)的定義: PARAMETERS 功能:接受主程序發(fā)送的參數(shù)值,調(diào)用返回主程序時(shí)把變 量的值回送給主程序相應(yīng)的變量。 說(shuō)明: a) PARAMETERS必須是被調(diào)用程序的第一個(gè)語(yǔ)句。 b) 程序返回主程序后,該命令定義的參數(shù)即被清除。 c) DO 命令傳送參數(shù)的個(gè)數(shù)不能多于PARAMETERS參數(shù) 表中所列參數(shù)的個(gè)數(shù)。 d) DO命令所帶的參數(shù)叫實(shí)際參數(shù),PARAMETERS所對(duì) 應(yīng)的叫形式參數(shù)。,求一個(gè)半徑等于邊長(zhǎng)的圓與正方形面積之差。,主程序: STORE 0 TO S1,S2 INPUT “輸入半徑或邊長(zhǎng)的值:“ TO A DO YUAN.PRG WITH A,S1 DO ZHEN.PRG WITH A,S2 ?S1-S2,YUAN.PRG PARAMETERS R,S S=3.14*R2 RETURN,ZHEN.PRG PARAMETERS L,S S=L2 RETURN,【例6.15】,注 意 1、只有當(dāng)DO命令中參數(shù)為內(nèi)存變量時(shí),子程序的參數(shù)才能返回給主程序,若參數(shù)為常量或表達(dá)式時(shí),子程序的參數(shù)值不能夠返回給主程序。 2、若子程序不需要參數(shù)時(shí),DO命令也可以不帶參數(shù)。,四、子程序的返回 RETURN TO MASTER|TO 說(shuō)明: TO MASTER 直接返回到最外層主程序;TO 強(qiáng)制返回到指定的程序文件。,2、過(guò)程與過(guò)程文件,如果將多模塊程序中的每個(gè)模塊(主程序,子程序或自定義函數(shù))分別保存為一個(gè)獨(dú)立的.PRG文件,則每執(zhí)行一個(gè)模塊就要打開(kāi)一個(gè)文件,勢(shì)必會(huì)增加運(yùn)行時(shí)間。為此VFP允許在一個(gè).PRG文件中設(shè)置多個(gè)程序模塊,并將主程序以外的每個(gè)模塊定義為一個(gè)過(guò)程,即“過(guò)程文件”,仍以.PRG為擴(kuò)展名。,一、過(guò)程的定義 PROCEDURE PARAMETERS RETURN,說(shuō) 明: a) 每個(gè)過(guò)程均以PROCEDURE開(kāi)始,以RETURN結(jié)束。每個(gè)過(guò)程實(shí)際上是一個(gè)獨(dú)立的子程序或一個(gè)用戶(hù)定義函數(shù)。 b) PROCEDURE 用于過(guò)程的第一條語(yǔ)句,它標(biāo)識(shí)了每個(gè)過(guò)程的開(kāi)始,同時(shí)定義了過(guò)程名。 c) 過(guò)程如果以RETURN 作為結(jié)束語(yǔ)句,則該過(guò)程既可用DO 的形式執(zhí)行,又可當(dāng)做一個(gè)合法的自定義函數(shù),可供隨時(shí)調(diào)用。,1,2,【例6.16】,【例6.17】,寫(xiě)出下列程序的運(yùn)行結(jié)果。,結(jié)果為: 8 20 28,二、過(guò)程文件 一個(gè)過(guò)程可以以文件形式單獨(dú)存在,也可以將多個(gè)過(guò)程合并到一個(gè)過(guò)程文件。 過(guò)程文件是把多個(gè)過(guò)程集中起來(lái)用一個(gè)文件的形式存儲(chǔ)在磁盤(pán)上,要調(diào)用其中的過(guò)程,必須先打開(kāi)該過(guò)程文件。,格 式:SET PROCEDURE TO 功 能:打開(kāi)過(guò)程文件。,【例6.18】,用過(guò)程文件實(shí)現(xiàn)求一個(gè)半徑等于邊長(zhǎng)的圓與正方形面積之差的問(wèn)題。,*Main.prg CLEAR SET TALK OFF SET PROCEDURE TO sub &打開(kāi)過(guò)程文件sub.prg STORE 0 TO s1,s2 INPUT “輸入半徑或邊長(zhǎng)的值:“ TO a DO yuan WITH a,s1 &調(diào)用過(guò)程文件中的過(guò)程yuan DO zhen WITH a,s2 &調(diào)用過(guò)程文件中的過(guò)程zhen ?s1-s2 SET TALK ON RETURN,*過(guò)程文件sub.prg PROCEDURE yuan &過(guò)程yuan PARAMETERS r,s s=3.14*r2 RETURN PROCEDURE zhen &過(guò)程zhen PARAMETERS i,s s=i2 RETURN,3、自定義函數(shù),一、自定義函數(shù)的定義 FUNCTION PARAMETERS RETURN ,自定義函數(shù)與系統(tǒng)函數(shù)調(diào)用方法相同: 函數(shù)名(),【例6.19】,將子程序中的例題改為自定義函數(shù)。,CLEAR S=0 INPUT “輸入半徑或邊長(zhǎng)的值:” TO A ?YUAN(A)-ZHEN(A) FUNCTION YUAN PARAMETERS R S=3.14*R2 RETURN S FUNCTION ZHEN PARAMETERS L S=L2 RETURN S,【例6.20】,定義一個(gè)判斷n是否是素?cái)?shù)的函數(shù),然后調(diào)用該函數(shù)求21000內(nèi)的全部素?cái)?shù)。,分析: a) 素?cái)?shù)也叫質(zhì)數(shù),它是大于1且除了1和它本身之外,不能被其他任何整數(shù)所整除的整數(shù)。 b) 為了判斷某數(shù)n是否是素?cái)?shù),一個(gè)最簡(jiǎn)單的方法是用2345n-1這些數(shù)逐個(gè)去除n,看能否除盡,如果全都除不盡,則n是素?cái)?shù),否則,只要其中一個(gè)數(shù)除盡了,則n不是素?cái)?shù)。為了減少除的次數(shù),提高運(yùn)行效率,除到n開(kāi)方即可。,程序:,*此子程序判斷n是否是素?cái)?shù) FUNCTION PRIME PARAMETERS N FLAG=.T. K=INT(SQRT(N) J=2 DO WHILE J=K AND FLAG IF MOD(N,J)=0 FLAG=.F. ENI
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南省濮陽(yáng)市2022-2023學(xué)年高二下學(xué)期化學(xué)學(xué)業(yè)質(zhì)量檢測(cè)試題(含答案)
- 倉(cāng)山定向捐助活動(dòng)方案
- 仙桃騎行活動(dòng)策劃方案
- 代購(gòu)加人活動(dòng)方案
- 仲秋營(yíng)銷(xiāo)活動(dòng)方案
- 企業(yè)五四宣傳活動(dòng)方案
- 企業(yè)世界閱讀日活動(dòng)方案
- 企業(yè)促生產(chǎn)活動(dòng)方案
- 企業(yè)公司宣傳舞蹈活動(dòng)方案
- 企業(yè)創(chuàng)意元旦活動(dòng)方案
- 舞蹈介紹課件教學(xué)課件
- 2024年通信電源專(zhuān)業(yè)知識(shí)考試題庫(kù)(含答案)
- JJF 1375-2024機(jī)動(dòng)車(chē)發(fā)動(dòng)機(jī)轉(zhuǎn)速測(cè)量?jī)x校準(zhǔn)規(guī)范
- 探尋中國(guó)茶:一片樹(shù)葉的傳奇之旅學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 冷藏車(chē)安全生產(chǎn)管理制度
- 2024年浙江省中考英語(yǔ)試題卷(含答案)
- 翻身拍背護(hù)理
- 高層建筑火災(zāi)撲救危險(xiǎn)識(shí)別與應(yīng)對(duì)
- 廣播電視節(jié)目評(píng)析期末考試資料
- 重慶市沙坪壩區(qū)第八中學(xué)校2023-2024學(xué)年八年級(jí)下學(xué)期期末英語(yǔ)試題(解析版)
- 江西省南昌市西湖區(qū)2023-2024學(xué)年五年級(jí)下學(xué)期期末數(shù)學(xué)試題
評(píng)論
0/150
提交評(píng)論