




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、過(guò)程與函數(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ù)雜的問(wèn)題總可將其分解成若干個(gè)子問(wèn)題來(lái)解決,如果子問(wèn)題依然很復(fù)雜,還可以將它繼續(xù)分解,直到每個(gè)子問(wèn)題都是一個(gè)具有獨(dú)立任務(wù)的模塊。這樣編制的程序結(jié)構(gòu)清晰,邏輯關(guān)系明確,無(wú)論是編寫、閱讀、調(diào)試還是修改,都會(huì)帶來(lái)極大的好處 在一個(gè)程序中可以只有主程序而沒有子程序(本章以前都是如此),但不能沒有主程序,也就是說(shuō)不能單獨(dú)執(zhí)行子程序。pascal中子程序有兩種形式:函數(shù)和過(guò)程。一、函數(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ù)也遵循先說(shuō)明后使用的規(guī)則,在程序中,函數(shù)的說(shuō)明放在主程序的說(shuō)明部分。函數(shù)的結(jié)構(gòu)與主程序的結(jié)構(gòu)很相似。function 函數(shù)名(形參表):函數(shù)類型; 函數(shù)首部 var 局部變量說(shuō)明部分 begin 函數(shù)體 . 函數(shù)語(yǔ)句 . 函數(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;說(shuō)明: 函數(shù)由首部與函數(shù)體兩部分組成。函數(shù)首部以關(guān)鍵字function開頭。函數(shù)名是用戶自定義的標(biāo)識(shí)符。函數(shù)的類型也就是函數(shù)值的類型,所求得的函數(shù)值通過(guò)函數(shù)名 傳回調(diào)用它的程序??梢姡瘮?shù)的作用一般是為了求得一個(gè)值。function 函數(shù)名(形參表):函數(shù)類型; 函數(shù)首部 var 局部變量說(shuō)明部分 begin 函數(shù)體 . 函數(shù)語(yǔ)句 . 函數(shù)名:=表達(dá)式 end;當(dāng)缺省形參表時(shí),稱為無(wú)參函數(shù)。函數(shù)體與程序體基本相似,由說(shuō)明部
5、分和執(zhí)行部分組成。函數(shù)體中的說(shuō)明部分用來(lái)對(duì)本函數(shù)使用的標(biāo)號(hào)、常量、類型、 變量、子程序加以說(shuō)明,這些量只在本函數(shù)內(nèi)有效。函數(shù)體的執(zhí)行部分由begin開頭,end結(jié)束,中間有若干用分號(hào) 隔開的 語(yǔ)句,只是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ù)在語(yǔ)法上相當(dāng)于一個(gè)表達(dá)式,所以,調(diào)用時(shí),函數(shù)不能獨(dú)立成為一個(gè)語(yǔ)句;它可以出現(xiàn)在任何表達(dá)式可以出現(xiàn)的地方。 例如賦值語(yǔ)句的右邊: X:=函數(shù)名(實(shí)在參數(shù)表); X的類型與函數(shù)類型必須一致 又,如果函數(shù)類型是boolean,則還可以出
6、現(xiàn)在條件語(yǔ)句中,充當(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ù),目的是用來(lái)接收調(diào)用該函數(shù)時(shí)傳遞的參數(shù). 實(shí)參:全稱為“實(shí)際參數(shù)”是在調(diào)用時(shí)傳遞給該函數(shù)的參數(shù) 3、形參與實(shí)參 所以形參即函數(shù)的自變量
7、。自變量的初值來(lái)源于函數(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è)語(yǔ)句必須 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ù)則打印出來(lái)for i:=a to b doif perfect(i) then writeln(i);end.自定義函數(shù)只是主程序的說(shuō)明部分,若主程序中沒有調(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)用處。 二、過(guò)程二、過(guò)程在pascal中,自定義過(guò)程與自定義函數(shù)一樣,都需要先定義后調(diào)用。函數(shù)一般用于求值,而過(guò)程一般實(shí)現(xiàn)某些操作。1.過(guò)程的定義 procedure 過(guò)程名(形式參數(shù):參數(shù)說(shuō)明);也可以不帶參數(shù) var begin . end; 說(shuō)明: 過(guò)程首部以關(guān)鍵字procedure開頭。 過(guò)程名是用戶自定義的標(biāo)識(shí)符。 形參表缺省時(shí),稱為無(wú)參過(guò)程。 形參表的一般格式形式如下: 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)用過(guò)程時(shí),通過(guò)值形參給過(guò)程提供原始數(shù)據(jù), 通過(guò)變量形參將值帶回調(diào)用程序。 因此,可以說(shuō),值形參是過(guò)程的輸入?yún)?shù), 變量形參是過(guò)程的輸出參數(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)用該過(guò)程時(shí)與它們對(duì)應(yīng)的變量a,b的修改,故最后,a,b的值為2,1
15、。而expa中調(diào)用swap過(guò)程時(shí),只是將a,b的值傳遞給x,y,之后在過(guò)程中的操作與a,b無(wú)關(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ù)或過(guò)程定義中,加有VAR 說(shuō)明的參數(shù),在調(diào)用函數(shù)或過(guò)程時(shí),調(diào)用程序?qū)?shí)在參數(shù)的變量地址傳遞給形變參,因此當(dāng)過(guò)程或函數(shù)處理中,改變形參變量的值,則實(shí)在參數(shù)的變量值也隨之改變。(共享同一個(gè)存儲(chǔ)單元) 值參:在函數(shù)或過(guò)程定義中,沒有加VAR 說(shuō)明的參數(shù),在調(diào)用函數(shù)或過(guò)程時(shí),調(diào)用程序?qū)?shí)在參數(shù)的值直接傳遞給形參,起著賦值
17、作用 過(guò)程體與程序、函數(shù)體類似。 與函數(shù)體不同的是:函數(shù)體的執(zhí)行部分至少有一個(gè)語(yǔ)句給函數(shù)名賦值, 而過(guò)程體的執(zhí)行部分不能給過(guò)程名賦值,因?yàn)檫^(guò)程名不能代表任何數(shù)據(jù)。過(guò)程體的說(shuō)明部分可以定義只在本過(guò)程有效的標(biāo)號(hào)、常量、類型、變量、 子程序等。2、過(guò)程的調(diào)用、過(guò)程的調(diào)用 過(guò)程調(diào)用是通過(guò)一條獨(dú)立的過(guò)程調(diào)用語(yǔ)句來(lái)實(shí)現(xiàn)的,它與函數(shù)調(diào)用完全不同。 調(diào)用的一般格式為:過(guò)程名 或過(guò)程名(實(shí)在參數(shù)表)subsub(a,b)說(shuō)明: 實(shí)參的個(gè)數(shù)、類型必須與形參一一對(duì)應(yīng)。對(duì)應(yīng)于值形參的實(shí)參可以是表達(dá)式,對(duì)應(yīng)于變量形參的實(shí)參只能 是變量。過(guò)程調(diào)用的步驟為:計(jì)算實(shí)參的值;將值或變量的“地址”傳送給對(duì) 應(yīng)的形參;執(zhí)行過(guò)程體;
18、返回調(diào)用處。 例:已知三角形的兩邊a,b及夾角,求對(duì)邊c及面積s然后求a+5,b+10,+15o時(shí)的c及s 我們可以定義一個(gè)已知兩邊及一夾角,求對(duì)邊及面積的過(guò)程。調(diào)用它兩次,得到問(wèn)題的解。根據(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. 有些問(wèn)題既可以用函數(shù)實(shí)現(xiàn),也可以用過(guò)程實(shí)現(xiàn)。為了說(shuō)明函數(shù)與過(guò)程在說(shuō)明與調(diào)用上的不同,我們將雙曲正弦函數(shù)用過(guò)程和函數(shù)寫出來(lái)進(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ù)和過(guò)程分別實(shí)現(xiàn)如下功能:當(dāng)輸入一正整數(shù)和一數(shù)字后, 若該數(shù)字在正整數(shù)的某位上出現(xiàn)則顯示HAVE!,否則顯示NO!3、輸入一個(gè)長(zhǎng)字符串和一個(gè)短字符串以及一個(gè)合適的整數(shù),通過(guò)程 序從指定位置用指定短字符串替換長(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ù),編程找出所有不超過(guò)6位數(shù)字的回文數(shù),同時(shí)又是完全平方數(shù)的數(shù),并輸出總共回文數(shù)個(gè)數(shù)。 如121是回文數(shù),又是11的平方,所以是完全平方數(shù)。解: 不超過(guò)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ù)不超過(guò)總長(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)度不超過(guò)100位數(shù)字的正整數(shù),打印出計(jì)算數(shù)字乘積根的每一步結(jié)果。輸出格式如下:(N=3486784401) 3486784401 516096 1620 12 2【問(wèn)題描述】形如2P-1的素?cái)?shù)稱為麥森數(shù),這時(shí)P一定也是個(gè)素?cái)?shù)。但反過(guò)來(lái)不一定,即如果P是個(gè)素?cái)?shù),2P-1不一定也是素?cái)?shù)。到1998年底,人們已
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC 14496-10:2025 EN Information technology - Coding of audio-visual objects - Part 10: Advanced video coding
- 基于詞匯語(yǔ)義邏輯分析的國(guó)際中文時(shí)間副詞教學(xué)研究
- 心內(nèi)科患者防跌倒管理規(guī)范
- 輔助生殖健康宣教
- 推行新工具SOP宣貫培訓(xùn)
- 預(yù)防肺結(jié)核班會(huì)課件
- 《電子產(chǎn)品裝配與測(cè)試》課件-任務(wù)4 常見電子產(chǎn)品裝配與測(cè)試
- 項(xiàng)鏈兒童創(chuàng)意畫課件
- 項(xiàng)目管理工程師課件
- 項(xiàng)目會(huì)計(jì)工程核算課件
- 遼寧省沈陽(yáng)市皇姑區(qū)岐山小學(xué)-2024-2025年第一學(xué)期班主任工作總結(jié)(勤于細(xì)微)【課件】
- DB33 1121-2016 民用建筑電動(dòng)汽車充電設(shè)施配置與設(shè)計(jì)規(guī)范
- 電信研發(fā)工程師L1認(rèn)證培訓(xùn)考試復(fù)習(xí)題庫(kù)(含答案)
- DB12T 1102-2021 郵政投遞服務(wù)規(guī)范
- 護(hù)理精益改善項(xiàng)目匯報(bào)
- 辦公樓消防系統(tǒng)維修保養(yǎng)方案及實(shí)施
- 2024年辦公室水電管理制度樣本(4篇)
- SAP S4HANA 用戶操作手冊(cè)-FICO-006-財(cái)務(wù)月結(jié)
- 攀巖運(yùn)動(dòng)項(xiàng)目介紹
- 經(jīng)濟(jì)糾紛和解協(xié)議書
- 2023年蕪湖市灣沚區(qū)國(guó)有資本建設(shè)投資有限公司招聘考試真題
評(píng)論
0/150
提交評(píng)論