版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Pascal程序設(shè)計(jì)基礎(chǔ)第四章 過程與函數(shù)子程序是什么在程序設(shè)計(jì)中,我們會(huì)發(fā)現(xiàn)一些程序段在程序的不同地方反復(fù)出現(xiàn),此時(shí)可以將這些程序段作為相對(duì)獨(dú)立的整體,用一個(gè)標(biāo)識(shí)符給他起一個(gè)名字,凡是程序中出現(xiàn)該程序段的地方,只要簡(jiǎn)單地寫上其標(biāo)識(shí)符即可。這樣的程序段,我們稱之為子程序。Pascal中的子程序有兩種形式:函數(shù)和過程。函數(shù)之前我們接觸了pascal中提供的標(biāo)準(zhǔn)函數(shù),如abs(),sqrt(),inc()等等,這些函數(shù)為我們編寫程序提供了很大的方便。但是這些函數(shù)知識(shí)常用的函數(shù),編程的時(shí)候需要自定義一些函數(shù)。例4.1編程找出由鍵盤任意輸入五個(gè)整數(shù)中的最大整數(shù)。 解:設(shè)輸入的五個(gè)整數(shù)為n1、n2、n3
2、、n4、n5,為了便于處理,引入一個(gè)中間變量t1,按如下步驟處理:令t1=n1;將t1與n2比較,將兩者中較大的數(shù)放入t1;將t1與n3比較,將兩者中較大的數(shù)放入t1;將t1與n4比較,將兩者中較大的數(shù)放入t1;將t1與n5比較,將兩者中較大的數(shù)放入t1;經(jīng)過以上5步處理后,t1即為5個(gè)數(shù)中最大者。從上面規(guī)劃的步驟看來(lái),從步驟到步驟需處理的目標(biāo)是相同的,因此我們可以設(shè)計(jì)一段子程序Max(x1,x2),以找出x1和x2中最大的值并返回。Program Exp41;Var n1,n2,n3,n4,n5,t1 : integer;Function max(x1,x2 : integer) : int
3、eger;Begin If x1x2 then Max := x1 Else Max := x2;End; Begin Write(Input 5 numbers : );Readln(n1,n2,n3,n4,n5);T1 := n1;T1 := Max(t1,n2);T1 := Max(t1,n3);T1 := Max(t1,n4);T1 := Max(t1,n5);Writeln(Max number : ,t1);End. 從上例看出,引入函數(shù)實(shí)際上是將一個(gè)復(fù)雜的問題劃分成若干個(gè)易于處理的子問題,將編程化簡(jiǎn)的一種有效辦法,而化簡(jiǎn)的方法是多種多樣的,如前面已經(jīng)做過求三個(gè)數(shù)中的最大數(shù),所以可
4、定義一個(gè)專門求三個(gè)數(shù)中最大數(shù)的函數(shù)(Max)。第一次用這個(gè)函數(shù)求出n1,n2,n3三個(gè)數(shù)中的最大數(shù)t1;第二次調(diào)用這個(gè)函數(shù)求出t1與n4,n5三個(gè)數(shù)中的最大數(shù),也就是前三個(gè)數(shù)的最大數(shù)(已在t1中)和后面二個(gè)數(shù)再求一次,就得到五個(gè)數(shù)的最大數(shù)。因此,需要兩次使用“求三個(gè)數(shù)中的最大數(shù)”,步驟如下:調(diào)用函數(shù)Max ( n1, n2, n3), 求出n1,n2,n3中的最大者 t1;調(diào)用函數(shù)Max ( t1, n4, n5 ),求出t1, n4, n5中的最大者t2;輸出最大數(shù) t2。Program Exp41se;Var n1,n2,n3,n4,n5,t1: integer;function Max(
5、x1,x2,x3: integer): integer; 自定義函數(shù)MaxVar XX: integer; 函數(shù)內(nèi)部變量說(shuō)明begin 函數(shù)體if X1X2 then XX:X1 else XX:X2; if X3XX then XX:X3;Max:XXend; Begin 主程序 Write(Input 5 numb:); Readln(n1,n2,n3,n4,n5); 輸入五個(gè)數(shù) t1:Max(n1,n2,n3); 用函數(shù)求n1, n2, n3的最大數(shù) t1:Max(n4,n5,t1); 用函數(shù)求n4, n5, t1 的最大數(shù) Writeln(Max Number :, t1); Read
6、lnEnd.格式 自定義函數(shù)的一般格式為: function 函數(shù)名(形式參數(shù)表): 類型; 函數(shù)首部 局部變量說(shuō)明部分; begin 語(yǔ)句系列; 函數(shù)體 end; 函數(shù)中的形式參數(shù)接受調(diào)用函數(shù)時(shí)所傳入的值,用來(lái)參與函數(shù)中的運(yùn)算。例4.2練4.1求任意輸入的五個(gè)自然數(shù)的最大公約數(shù)。 解:自定義一個(gè)專門求兩自然數(shù)的最大公約數(shù)的函數(shù)GCD; 調(diào)用自定義函數(shù),第一次求前兩個(gè)數(shù)的最大公約數(shù);從第二次開始,用每次求得的最大公約數(shù)與下一個(gè)數(shù)再求兩個(gè)數(shù)最大公約數(shù),直到最后。本題共四次“求兩個(gè)數(shù)的最大公約數(shù)”, 設(shè)輸入的五個(gè)自然數(shù)分別是a1,a2,a3,a4,a5,采用如下步驟:求a1, a2兩個(gè)數(shù)的最大公約
7、數(shù) 存入a1;求a1, a3兩個(gè)數(shù)的最大公約數(shù) 存入a1;求a1, a4兩個(gè)數(shù)的最大公約數(shù) 存入a1;求a1, a5兩個(gè)數(shù)的最大公約數(shù) 存入a1; 輸出 a1,此時(shí)的a1已是五個(gè)數(shù)的最大公約數(shù)。Program Exp42;Var a1,a2,a3,a4,a5: integder;function GCD(x,y: integer): integer; 自定義函數(shù) Var n:integer;begin While x mod y 0 do begin n:=x; x:=y; y:=n mod yend; GCD:=yend;藍(lán)色部分使用輾轉(zhuǎn)相除法Begin 主程序 Write(input 5
8、Numper:); readln(a1,a2,a3,a4,a5); 輸入五個(gè)數(shù) Write(,a1,a2,a3,a4,a5,)=);a1:GCD(a1,a2); 調(diào)用函數(shù)GCD a1:GCD(a1,a3); a1:GCD(a1,a4); a1:GCD(a1,a5); Writeln(a1); readlnEnd.函數(shù)小結(jié) 函數(shù)的結(jié)果是一個(gè)具體的值, 在函數(shù)體中必須將所得到的運(yùn)算結(jié)果賦給函數(shù)名;主程序通過調(diào)用函數(shù)得到函數(shù)的運(yùn)算結(jié)果。調(diào)用函數(shù)的一般格式為: 函數(shù)名 (實(shí)在參數(shù)表) 調(diào)用函數(shù)時(shí), 函數(shù)名后面圓括號(hào)內(nèi)的參數(shù)必須有確定的值, 稱為實(shí)在參數(shù)。調(diào)用時(shí)即把這些實(shí)際值傳送給函數(shù)形參表中的相應(yīng)形參
9、變量。函數(shù)不是單獨(dú)的語(yǔ)句, 只能作為運(yùn)算賦值或出現(xiàn)在表達(dá)式中。 (自定義)過程 自定義函數(shù)通常被設(shè)計(jì)成求一個(gè)函數(shù)值,一個(gè)函數(shù)只能得到一個(gè)運(yùn)算結(jié)果。若要設(shè)計(jì)成能得到若干個(gè)運(yùn)算結(jié)果,或完成一系列處理,就需要自定義“過程”來(lái)實(shí)現(xiàn)。例4.3 把前面例2.2 (輸入三個(gè)不同的整數(shù),按由小到大排序)改為下面用自定義過程編寫的Pascal程序: Program exp43;Var a,b,c: integer;Procedure Swap (var x,y: integer); 自定義交換兩個(gè)變量值的過程 Var t : integer;Begin 過程體 t:=x; x:=y; y:=t 交換兩個(gè)變量的值
10、end; Begin 主程序 Write(input a,b,c=); Readln(a,b,c); if ab then swap (a,b); 調(diào)用自定義過程 if ac then swap (a,c); if bc fhen swap (b,c); Writeln (a:6, b:6, c:6); ReadlnEnd. 從作用來(lái)看,過程與函數(shù)是相似的,都能將復(fù)雜的問題劃分成一些目標(biāo)明確的小問題來(lái)求解,只不過函數(shù)有值返回而過程則沒有。自定義過程的一般格式如下:Procedure 過程名 (形式參數(shù)表); 過程首部 局部變量說(shuō)明部分; begin 語(yǔ)句部分; 過程體部分 end;例4.4如果
11、一個(gè)自然數(shù)除了1和本身,還有別的數(shù)能夠整除它, 這樣的自然數(shù)就是合數(shù)。例如15,除了1和15,還有3和5能夠整除,所以15是合數(shù)。14,15,16是三個(gè)連續(xù)的合數(shù),試求連續(xù)十個(gè)最小的合數(shù)。 解:從14,15,16三個(gè)連續(xù)合數(shù)中可看出,它們正好是兩個(gè)相鄰素?cái)?shù)13和17 之間的連續(xù)自然數(shù),所以求連續(xù)合數(shù)問題可以轉(zhuǎn)化為求有一定跨度的相鄰兩個(gè)素?cái)?shù)的問題。因此,求連續(xù)十個(gè)最小的合數(shù)可用如下方法: 從最小的素?cái)?shù)開始,先確定第一個(gè)素?cái)?shù)A;再確定與A相鄰的后面那個(gè)素?cái)?shù)B;(作為第二個(gè)素?cái)?shù));檢查A,B的跨度是度否在10 以上,如果跨度小于10,就把B 作為新的第一個(gè)素?cái)?shù)A,重復(fù)作步驟;如果A、B跨度大于或等于
12、10,就打印A、B之間的連續(xù)10個(gè)自然數(shù),即輸出 A+1, A+2, A+3 , A+10。Program exp44;var a,b,s,n: integer; yes: boolean;procedure sub(x: integer;var yy: boolean); 過程:求x是否為素?cái)?shù) var k,m: integer; 用yy邏輯值轉(zhuǎn)出 begin k:=trunc(sqrt(x); for m:=3 to k do if odd(m) then 判斷奇數(shù)的函數(shù)odd,布爾類型 if x mod m=0 then yy:=false;end;begin 主程序 b:=3; repe
13、at a:=b; a 為第一個(gè)素?cái)?shù) repeat yes:=true; inc(b,2); b是a后面待求的素?cái)?shù) sub(b,yes); 調(diào)用SUB過程來(lái)確認(rèn)b是否為素?cái)?shù) if yes then s:=b-a; 如果b是素?cái)?shù),則求出跨度s until yes; until s = 10; for n:=a+1 to a+10 do write(n:6); writeln; readln end.程序中的過程SUB,用來(lái)確定b是否為素?cái)?shù)。過程名后面圓括號(hào)內(nèi)的變量是形式參數(shù),簡(jiǎn)稱為形參。過程SUB(x: integer; Var yy: boolean) 中的x是值形參,而前面冠有Var的yy是變
14、量形參。值形參只能從外界向過程傳入信息,但不能傳出信息;變量形參既能傳入又能傳出信息。本程序過程SUB中的x是由調(diào)用過程的實(shí)在參數(shù)b傳入值,進(jìn)行處理后,不需傳出;而yy是把過程處理結(jié)果用邏輯值傳出,供調(diào)用程序使用。試把例4.3程序中的過程 SWAP(Var x,y: integer),將x,y前面的Var去掉,就變成了純粹的值形參,就不能將過程所處理的結(jié)果傳出去,也就無(wú)法得到處理后的結(jié)果,通過運(yùn)行程序比較,可以非常明顯地看到值形參和變量形參的區(qū)別。 調(diào)用過程的格式為: 過程名(實(shí)在參數(shù)表) ;調(diào)用過程名后面圓括號(hào)內(nèi)的實(shí)在參數(shù)與定義過程的形參表必須相對(duì)應(yīng),調(diào)用過程相當(dāng)于一個(gè)獨(dú)立語(yǔ)句,可單獨(dú)使用。
15、 例4.5練4.2將合數(shù)483的各位數(shù)字相加(4+8+3)=15,如果將483分解成質(zhì)因數(shù)相乘: 483=3*7*23,把這些質(zhì)因數(shù)各位數(shù)字相加(3+7+2+3),其和也為15。即某合數(shù)的各位數(shù)字之和等于它所有質(zhì)因數(shù)的各數(shù)字之和。求500以內(nèi)具有上述特點(diǎn)的所有合數(shù)。解: 設(shè)n為所要求的合數(shù),讓n在1500間循環(huán)做以下步驟; 用t1,t2分別累計(jì)合數(shù)n及n的質(zhì)因數(shù)的各位數(shù)字之和,初值均為0; 調(diào)用過程SUB3進(jìn)行非素?cái)?shù)判定,以布爾變量yes的真假值判定是否,yes的初值為true,如果為 (not true)非素?cái)?shù),就做步驟,;否則取新的n值,重復(fù)步驟; 調(diào)用SUB1,求n的各數(shù)字之和,傳送給t
16、1; 調(diào)用SUB2,求n的各質(zhì)因數(shù),對(duì)于每個(gè)質(zhì)因素都通過SUB1求它各位數(shù)字之和,將所有各質(zhì)因數(shù)字傳送給t2。 如果t1=t2(各位數(shù)字之和等于它所有質(zhì)因數(shù)的各數(shù)字之和),則輸出此n。program exp45;var n,t1,t2,tatol: integer; yes: boolean;procedure sub1(x:integer; var t:integer); 過程:分離x的各位數(shù)字 begin 并求各位數(shù)字之和 repeat t:=t+x mod 10; x:=x div 10; until x=0end;procedure sub2(x: integer; var t: in
17、teger); 過程:分解質(zhì)因數(shù) var xx,tt:integer;begin xx:=2; while x1 do if x mod xx=0 then begin tt:=0; sub1(xx,tt); t:=t+tt; x:=x div xx end else inc(xx)end;procedure sub3(x: integer;var yy: boolean); 過程:判斷x是否為素?cái)?shù) var k,m: integer;begin k:=trunc(sqrt(x); for m:=2 to k do if x mod m=0 then yy:=false;end;begin 主程
18、序 for n:=1 to 500 do begin t1:=0;t2:=0; yes:=true; sub3(n,yes); 調(diào)用過程是否素?cái)?shù) if not yes then 如果非素?cái)?shù)就 begin sub1(n,t1); 調(diào)用過程求n的各位數(shù)字之和 sub2(n,t2); 調(diào)用過程求n的各質(zhì)因數(shù)的數(shù)字之和 if t1=t2 then write(n:6); 打印合格的合數(shù) end end; readlnend.練4.3如果一個(gè)數(shù)從左邊讀和從右邊讀都是同一個(gè)數(shù),就稱為回文數(shù)。例如6886就是一個(gè)回文數(shù),求出所有的既是回文數(shù)又是素?cái)?shù)的三位數(shù),并求這個(gè)數(shù)各個(gè)位數(shù)之和,如6886即6+8+8+6=28.解:可以把這個(gè)題目看成3個(gè)小步驟組成: 判斷n是否是回
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年四年級(jí)語(yǔ)文教學(xué)計(jì)劃例文(二篇)
- 2024年家電采購(gòu)合同例文(二篇)
- 2024年地理教師工作計(jì)劃(六篇)
- 2024年差旅費(fèi)報(bào)銷管理制度樣本(二篇)
- 2024年單位房屋租賃合同標(biāo)準(zhǔn)范本(二篇)
- 2024年大學(xué)生個(gè)人實(shí)習(xí)總結(jié)范例(二篇)
- 【《家園合作培養(yǎng)幼兒良好行為習(xí)慣的策略探究》9500字(論文)】
- 【《伊利乳業(yè)營(yíng)運(yùn)資金管理問題及完善對(duì)策研究》13000字】
- 2024年處方權(quán)管理制度(二篇)
- 2024年工業(yè)園區(qū)管理制度范本(三篇)
- 三寶四口五臨邊安全檢查重點(diǎn)
- 市中醫(yī)院雷火灸法操作評(píng)分標(biāo)準(zhǔn)
- 大隊(duì)委競(jìng)選課件
- 胡援成《貨幣銀行學(xué)》(第4版)筆記和課后習(xí)題(含考研真題)詳解
- 2021-2022學(xué)年廣西普通高中高二6月學(xué)業(yè)水平考試 數(shù)學(xué)試題(解析版)
- SJG 61-2019 深圳市環(huán)衛(wèi)工程消耗量定額-高清現(xiàn)行
- 智慧審計(jì)綜合管理平臺(tái)解決方案
- 電廠 2× 390MW9FA 燃?xì)猓羝?lián)合循環(huán)機(jī)組經(jīng)濟(jì)運(yùn)行分析報(bào)告
- 數(shù)據(jù)分析概述課件
- IATF16949審核要點(diǎn)培訓(xùn)課件
- 兒童口腔保健1-ppt課件
評(píng)論
0/150
提交評(píng)論