函數(shù)與過程分享資料_第1頁
函數(shù)與過程分享資料_第2頁
函數(shù)與過程分享資料_第3頁
函數(shù)與過程分享資料_第4頁
函數(shù)與過程分享資料_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、過程與函數(shù) 前面我們?cè)?jīng)學(xué)習(xí)了程序設(shè)計(jì)中的三種基本控制結(jié)構(gòu)(順序、分支、循環(huán))。用它們可以組成任何程序。但在應(yīng) 用中,還經(jīng)常用到子程序結(jié)構(gòu)。 通常,在程序設(shè)計(jì)中,我們會(huì)發(fā)現(xiàn)一些程序段在程序的不同地方反復(fù)出現(xiàn),此時(shí)可以將這些程序段作為相對(duì)獨(dú)立的整體,用一個(gè)標(biāo)識(shí)符給它起一個(gè)名字,凡是程序中出現(xiàn)該程序段的地方,只要簡(jiǎn)單地寫上其標(biāo)識(shí)符即可。這樣的程序段,我們稱之為子程序。program abegin writeln(-); writeln(-); writeln(-); writeln(-);gram b; procedure xian; begin writeln(-); end; b

2、egin xian; xian;xian;xian; end.子程序主程序 子程序的使用不僅縮短了程序,節(jié)省了內(nèi)存空間及減少了程序的編譯時(shí)間,而且有利于結(jié)構(gòu)化程序設(shè)計(jì)。因?yàn)橐粋€(gè)復(fù)雜的問題總可將其分解成若干個(gè)子問題來解決,如果子問題依然很復(fù)雜,還可以將它繼續(xù)分解,直到每個(gè)子問題都是一個(gè)具有獨(dú)立任務(wù)的模塊。這樣編制的程序結(jié)構(gòu)清晰,邏輯關(guān)系明確,無論是編寫、閱讀、調(diào)試還是修改,都會(huì)帶來極大的好處 在一個(gè)程序中可以只有主程序而沒有子程序(本章以前都是如此),但不能沒有主程序,也就是說不能單獨(dú)執(zhí)行子程序。pascal中子程序有兩種形式:函數(shù)和過程。一、函數(shù)一、函數(shù)在此之前,我們?cè)?jīng)介紹并使用了pasca

3、l提供的各種標(biāo)準(zhǔn)函數(shù),如ABS,SUCC等等,這些函數(shù)為我們編寫程序提供了很大的方便。但這些函數(shù)只是常用的基本函數(shù),編程時(shí)經(jīng)常需要自己定義一些函數(shù)。 1、函數(shù)的定義在pascal中,函數(shù)也遵循先說明后使用的規(guī)則,在程序中,函數(shù)的說明放在主程序的說明部分。函數(shù)的結(jié)構(gòu)與主程序的結(jié)構(gòu)很相似。function 函數(shù)名(形參表):函數(shù)類型; 函數(shù)首部 var 局部變量說明部分 begin 函數(shù)體 . 函數(shù)語句 . 函數(shù)名:=表達(dá)式 end;例、輸入 x的值,計(jì)算y。已知 sh(1+shx)y= sh2x+sh3x 其中sh是雙曲正弦函數(shù),題中要四次調(diào)用這個(gè)函數(shù),可以將它定義成一個(gè)函數(shù)。 已知計(jì)算雙曲正弦

4、的公式為 et-e-tsh(t) = 2雙曲正弦函數(shù)為:function sh(t:real):real; begin sh:=(exp(t)-exp(-t)/2; end;說明: 函數(shù)由首部與函數(shù)體兩部分組成。函數(shù)首部以關(guān)鍵字function開頭。函數(shù)名是用戶自定義的標(biāo)識(shí)符。函數(shù)的類型也就是函數(shù)值的類型,所求得的函數(shù)值通過函數(shù)名 傳回調(diào)用它的程序。可見,函數(shù)的作用一般是為了求得一個(gè)值。function 函數(shù)名(形參表):函數(shù)類型; 函數(shù)首部 var 局部變量說明部分 begin 函數(shù)體 . 函數(shù)語句 . 函數(shù)名:=表達(dá)式 end;當(dāng)缺省形參表時(shí),稱為無參函數(shù)。函數(shù)體與程序體基本相似,由說明部

5、分和執(zhí)行部分組成。函數(shù)體中的說明部分用來對(duì)本函數(shù)使用的標(biāo)號(hào)、常量、類型、 變量、子程序加以說明,這些量只在本函數(shù)內(nèi)有效。函數(shù)體的執(zhí)行部分由begin開頭,end結(jié)束,中間有若干用分號(hào) 隔開的 語句,只是end后應(yīng)跟分號(hào),不能像程序那樣用句號(hào)“.”。在函數(shù)體的執(zhí)行部分,至少應(yīng)該給函數(shù)名賦一次值,以使在函 數(shù)執(zhí)行 結(jié)束后把函數(shù)值帶回調(diào)用程序。2、函數(shù)的調(diào)用、函數(shù)的調(diào)用函數(shù)在語法上相當(dāng)于一個(gè)表達(dá)式,所以,調(diào)用時(shí),函數(shù)不能獨(dú)立成為一個(gè)語句;它可以出現(xiàn)在任何表達(dá)式可以出現(xiàn)的地方。 例如賦值語句的右邊: X:=函數(shù)名(實(shí)在參數(shù)表); X的類型與函數(shù)類型必須一致 又,如果函數(shù)類型是boolean,則還可以出

6、現(xiàn)在條件語句中,充當(dāng)條件表達(dá)式: if 函數(shù)名(實(shí)在參數(shù)表) then y:=49;x:=sqrt(y);program ysh; var x,y:real; function sh(t:real):real; begin sh:=(exp(t)-exp(-t)/2; end;begin read(x); y:=sh(1+sh(x)/(sh(2*x)+sh(3*x); writeln(y);end. 形參:全稱為“形式參數(shù)”是在定義函數(shù)名和函數(shù)體的時(shí)候使用的參數(shù),目的是用來接收調(diào)用該函數(shù)時(shí)傳遞的參數(shù). 實(shí)參:全稱為“實(shí)際參數(shù)”是在調(diào)用時(shí)傳遞給該函數(shù)的參數(shù) 3、形參與實(shí)參 所以形參即函數(shù)的自變量

7、。自變量的初值來源于函數(shù)調(diào)用,即實(shí)參。 在函數(shù)中,形參一般格式如下:變量名表1:類型標(biāo)識(shí)符1;變量名表2:類型標(biāo)識(shí)符2;;變量名表n:類型標(biāo)識(shí)符n (x,y : integer ; z : real ; a : char)例、求五邊形的面積。邊長(zhǎng)L1L7由鍵盤讀入。s1s2s3L1L2L3L4L5 五邊形的面積可以變成3個(gè)三角形面積的和。L7L6根據(jù)L1、L2、L6計(jì)算三角形面積s1根據(jù)L3、L6、L7計(jì)算三角形面積s2根據(jù)L4、L5、L7計(jì)算三角形面積s3將s1、s2、s3相加得到五邊形面積計(jì)算三角形面積的海倫公式: 1p = - (a+b+c) 2ts = p(p-a)(p-b)(p-c)

8、program area; var l1,l2,l3,l4,l5,l6,l7,s:real; function ts(a,b,c:real):real; var p:real; begin p:=(a+b+c)/2; ts:=sqrt(p*(p-a)*(p-b)*(p-c); end; begin read(l1,l2,l3,l4,l5,l6,l7); s:=ts(l1,l2,l6)+ts(l3,l6,l7)+ts(l4,l5,l7); writeln(area=,s);end.編一程序,求從10名同學(xué)中選出3名代表,有幾種不同的選法。 (公式:C(m,n)=m!/n!*(m-n)!從m中選n

9、) program zohe1;var m,n:integer; c:longint;function factor(x:integer):longint;定義 var i:integer; p:longint; begin p:=1; for i:=1 to x do p:=p*i; factor:=p;這個(gè)語句必須 end;begin write(m,n=);readln(m,n); c:=factor(m) div (factor(n)*factor(m-n);調(diào)用 writeln(c(,m,n,)=,c);end. 例:求正整數(shù)A和B之間的完全數(shù)(AB).分析:所謂完全數(shù)是指它的小于該

10、數(shù)本身的因子之和等于它本身,如6123,6即是一個(gè)完全數(shù)。因此我們可定義一個(gè)布爾型函數(shù)perfect(x),若x是完全數(shù),其值為TURE,否則為FALSE。 算法如下:1 、for i:=A to B do2 、if perfect(i) then writeln(i);program ex;var i,a,b : integer;function perfect(x:integer):boolean;var k,sum : integer;begin 累加x所有小于本身的因數(shù)sum:=1;for k:=2 to x div 2 doif x mod k=0 then sum:=sum+k;

11、判斷x是否是完全數(shù)perfect:=x=sum; 將結(jié)果賦值給函數(shù)名end; end of perfectbegin 主程序開始write(Input a,b:);repeat 輸入0a0)and(b0)and(ab);writeln(List of all perfect numbers:); 從a到b逐個(gè)判斷,是完全數(shù)則打印出來for i:=a to b doif perfect(i) then writeln(i);end.自定義函數(shù)只是主程序的說明部分,若主程序中沒有調(diào)用函數(shù),則系統(tǒng)不會(huì)執(zhí)行函數(shù)子程序。當(dāng)主程序調(diào)用一次函數(shù)時(shí),則將實(shí)在參數(shù)的值傳給函數(shù)的形式參數(shù),控制轉(zhuǎn)向函數(shù)子程序去執(zhí)行

12、,子程序執(zhí)行完畢后自動(dòng)返回調(diào)用處。 二、過程二、過程在pascal中,自定義過程與自定義函數(shù)一樣,都需要先定義后調(diào)用。函數(shù)一般用于求值,而過程一般實(shí)現(xiàn)某些操作。1.過程的定義 procedure 過程名(形式參數(shù):參數(shù)說明);也可以不帶參數(shù) var begin . end; 說明: 過程首部以關(guān)鍵字procedure開頭。 過程名是用戶自定義的標(biāo)識(shí)符。 形參表缺省時(shí),稱為無參過程。 形參表的一般格式形式如下: var 變量名表:類型;var 變量名表:類型。其中帶var的稱為變量形參,不帶var的稱為值形參。 在函數(shù)中,形參一般都是值形參,很少用變量形參(但可以使用)。 例如,下列形參表中:(

13、 x,y : real ; n : integer ; var w : real ; var k : integer ; b : real ) x、y、n、b為值形參,而w、k為變量形參。調(diào)用過程時(shí),通過值形參給過程提供原始數(shù)據(jù), 通過變量形參將值帶回調(diào)用程序。 因此,可以說,值形參是過程的輸入?yún)?shù), 變量形參是過程的輸出參數(shù)。寫出下列兩個(gè)程序的運(yùn)行結(jié)果。program expa; program expb;var a,b:integer; var a,b:integer;procedure swap(x,y:integer); procedure swap(Var x,y:integer)

14、;var t:integer; var t:integer;begin begint:=x;x:=y;y:=t; t:=x;x:=y;y:=t;end; end;begin begina:=1;b:=2; a:=1;b:=2;writeln(a:3,b:3); writeln(a:3,b:3);swap(a,b);swap(a,b);writeln(a:3,b:3); writeln(a:3,b:3);end. end. expa中將x,y作為值形參,而 expb中將x,y作為變量形參,因此在expb中對(duì)x,y的修改實(shí)際上是對(duì)調(diào)用該過程時(shí)與它們對(duì)應(yīng)的變量a,b的修改,故最后,a,b的值為2,1

15、。而expa中調(diào)用swap過程時(shí),只是將a,b的值傳遞給x,y,之后在過程中的操作與a,b無關(guān)。1 2 1 21 2 2 1program li; var a,b,c:integer;procedure sub(x,y:integer;var z:integer); begin x:=x+1;y:=y+1;z:=x+y; writeln(sub:x=,x:2,y=,y:2,z=,z:2); end;begin a:=1;b:=4;c:=9; writeln(main:a=,a:2,b=,b:2,c=,c); sub(a,b,c); writeln(main:a=,a:2,b=,b:2,c=,c

16、); sub(c+5,b*b,a); writeln(main:a=,a:2,b=,b:2,c=,c); readln;end. main:a1 b4 c9 sub:x2 y5 z7 main:a1 b4 c7 sub:x13 y17 z30 main:a30 b4 c7 變參:在函數(shù)或過程定義中,加有VAR 說明的參數(shù),在調(diào)用函數(shù)或過程時(shí),調(diào)用程序?qū)?shí)在參數(shù)的變量地址傳遞給形變參,因此當(dāng)過程或函數(shù)處理中,改變形參變量的值,則實(shí)在參數(shù)的變量值也隨之改變。(共享同一個(gè)存儲(chǔ)單元) 值參:在函數(shù)或過程定義中,沒有加VAR 說明的參數(shù),在調(diào)用函數(shù)或過程時(shí),調(diào)用程序?qū)?shí)在參數(shù)的值直接傳遞給形參,起著賦值

17、作用 過程體與程序、函數(shù)體類似。 與函數(shù)體不同的是:函數(shù)體的執(zhí)行部分至少有一個(gè)語句給函數(shù)名賦值, 而過程體的執(zhí)行部分不能給過程名賦值,因?yàn)檫^程名不能代表任何數(shù)據(jù)。過程體的說明部分可以定義只在本過程有效的標(biāo)號(hào)、常量、類型、變量、 子程序等。2、過程的調(diào)用、過程的調(diào)用 過程調(diào)用是通過一條獨(dú)立的過程調(diào)用語句來實(shí)現(xiàn)的,它與函數(shù)調(diào)用完全不同。 調(diào)用的一般格式為:過程名 或過程名(實(shí)在參數(shù)表)subsub(a,b)說明: 實(shí)參的個(gè)數(shù)、類型必須與形參一一對(duì)應(yīng)。對(duì)應(yīng)于值形參的實(shí)參可以是表達(dá)式,對(duì)應(yīng)于變量形參的實(shí)參只能 是變量。過程調(diào)用的步驟為:計(jì)算實(shí)參的值;將值或變量的“地址”傳送給對(duì) 應(yīng)的形參;執(zhí)行過程體;

18、返回調(diào)用處。 例:已知三角形的兩邊a,b及夾角,求對(duì)邊c及面積s然后求a+5,b+10,+15o時(shí)的c及s 我們可以定義一個(gè)已知兩邊及一夾角,求對(duì)邊及面積的過程。調(diào)用它兩次,得到問題的解。根據(jù)數(shù)學(xué)公式有: c= a2+b2+2abcos 1 p = - absin 2Procedure cs(a,b,alfa:real;var c,s:real); begin alfa:=alfa*3.14159/180; c:=sqrt(a*a+b*b-2*a*b*cos(alfa); s:=0.5*a*b*sin(alfa); end;program tcs; var a,b,alfa,c,s:real;

19、procedure cs(a,b,alfa:real;var c,s:real); begin alfa:=alfa*3.14159/180; c:=sqrt(a*a+b*b-2*a*b*cos(alfa); s:=0.5*a*b*sin(alfa); end;begin read(a,b,alfa); writeln(a=,a, b=,b, alfa=, alfa); cs(a,b,alfa,c,s); writeln(c=,c, s=,s); cs(a+5,b+10,alfa+15,c,s); writeln(a=,a+5, b=,b+10, alfa=, alfa+15); writel

20、n(c=,c, s=,s);end. 有些問題既可以用函數(shù)實(shí)現(xiàn),也可以用過程實(shí)現(xiàn)。為了說明函數(shù)與過程在說明與調(diào)用上的不同,我們將雙曲正弦函數(shù)用過程和函數(shù)寫出來進(jìn)行比較。program ysh2; var x,y,s1,s2,s3:real; procedure sh(t:real;var s:real); begin s:=(exp(t)-exp(-t)/2; end;begin read(x); sh(x,s1); sh(1+s1,s1); sh(2*x,s2); sh(3*x,s3); y:=s1/(s2+s3); writeln(x=,x, y=,y);gram ysh1;

21、 var x,y:real; function sh(t:real):real; begin sh:=(exp(t)-exp(-t)/2; end;begin read(x); y:=sh(1+sh(x)/(sh(2*x)+sh(3*x); writeln(y);end. sh(1+shx)y= sh2x+sh3x 1、輸入5個(gè)小于10的正整數(shù),計(jì)算并顯示它們的階乘之和。 2、用函數(shù)和過程分別實(shí)現(xiàn)如下功能:當(dāng)輸入一正整數(shù)和一數(shù)字后, 若該數(shù)字在正整數(shù)的某位上出現(xiàn)則顯示HAVE!,否則顯示NO!3、輸入一個(gè)長(zhǎng)字符串和一個(gè)短字符串以及一個(gè)合適的整數(shù),通過程 序從指定位置用指定短字符串替換長(zhǎng)字符串中

22、的內(nèi)容,最后輸出 新字符串。 編程輸入十進(jìn)制(:-3276732767),請(qǐng)輸出它對(duì)應(yīng)的二進(jìn)制、 八進(jìn)制、十六進(jìn)制數(shù)。例如:INPUT N(-3276732767):222 222 TURN INTO 2:11011110 222 TURN INTO 8:336 222 TURN INTO 16:DE 一個(gè)兩位以上的自然數(shù),如果左右數(shù)字對(duì)稱,就稱為回文數(shù),編程找出所有不超過6位數(shù)字的回文數(shù),同時(shí)又是完全平方數(shù)的數(shù),并輸出總共回文數(shù)個(gè)數(shù)。 如121是回文數(shù),又是11的平方,所以是完全平方數(shù)。解: 不超過6位數(shù)的完全平方數(shù)用循環(huán)在10999范圍產(chǎn)生(for i:=10 to 999) ; 將完全平

23、方數(shù) (i*i)轉(zhuǎn)成字串類型存入s中; 逐個(gè)取s的左右字符,檢查是否相同(對(duì)稱),檢查對(duì)數(shù)不超過總長(zhǎng) 度的一半; 如果是回文數(shù),就輸出該數(shù),計(jì)數(shù)器加1。 輸出回文數(shù)個(gè)數(shù)。 1267*1267=1605289,表明等式右邊是一個(gè)七位的完全平方數(shù),而這七個(gè)數(shù)字互不相同。編程求出所有這樣的七位數(shù)。 求數(shù)字的乘積根。正整數(shù)的數(shù)字乘積這樣規(guī)定:這個(gè)正整數(shù)中非零數(shù)字的乘積。例如整數(shù)999的數(shù)字乘積為9*9*9,得到729;729的數(shù)字乘積為7*2*9,得到126;126的數(shù)字乘積為1*2*6,得到12;12從數(shù)字乘積為1*2,得到2。如此反復(fù)取數(shù)字的乘積,直至得到一位數(shù)字為止。999的數(shù)字乘積根是2。編程輸入一個(gè)長(zhǎng)度不超過100位數(shù)字的正整數(shù),打印出計(jì)算數(shù)字乘積根的每一步結(jié)果。輸出格式如下:(N=3486784401) 3486784401 516096 1620 12 2【問題描述】形如2P-1的素?cái)?shù)稱為麥森數(shù),這時(shí)P一定也是個(gè)素?cái)?shù)。但反過來不一定,即如果P是個(gè)素?cái)?shù),2P-1不一定也是素?cái)?shù)。到1998年底,人們已

溫馨提示

  • 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. 人人文庫網(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)論