




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
子程序——過程與函數(shù)第1頁提出函數(shù)與過程理由
計(jì)算機(jī)程序設(shè)計(jì)和問題求解最基本思想是:將一個(gè)大復(fù)雜問題分解成更小、更簡(jiǎn)單和更輕易處理子問題。在Pascal語言提供了函數(shù)和過程,使得問題分解和處理愈加方便。
函數(shù)或過程:將對(duì)應(yīng)于一個(gè)子問題求精語句寫在一起,作為一個(gè)單獨(dú)程序模塊。通常經(jīng)過子程序定義抽象操作,實(shí)現(xiàn)程序模塊化。第2頁一、函數(shù)
1。定義函數(shù)說明普通形式:FUNCTION<函數(shù)名>(<形式參數(shù)表>):<函數(shù)類型>;<說明部分>;
BEGIN<函數(shù)體>END;注意:(1)函數(shù)名由正當(dāng)標(biāo)識(shí)符指出;參數(shù)表由形式參數(shù)名表和說明參數(shù)類型標(biāo)識(shí)符組成;函數(shù)類型即結(jié)果類型,由類型標(biāo)識(shí)符指明。(2)形式參數(shù)類似于數(shù)學(xué)函數(shù)中自變量,為函數(shù)子程序提供初始量。在一個(gè)形式參數(shù)表中,能夠有多個(gè)參數(shù)。逗號(hào)用來分開同類型各個(gè)參數(shù)名,分號(hào)用來分開不一樣類型參數(shù)。比如:(x,y:real;m,n:integer)(3)說明部分對(duì)僅在函數(shù)中使用量加以說明,能夠包含函數(shù)所需要常量、說明類型、變量說明,也能夠包含其它函數(shù)或過程說明,普通稱之為局部變量。函數(shù)也能夠沒有說明。(4)函數(shù)體:(函數(shù)部分程序體)其中最少要有一個(gè)給函數(shù)名賦值語句,并以分號(hào)結(jié)束函數(shù)體。第3頁2.函數(shù)調(diào)用普通形式:<函數(shù)名>(<實(shí)在參數(shù)表>)解釋:函數(shù)調(diào)用必須出現(xiàn)在表示式中。函數(shù)每次調(diào)用,是將每個(gè)實(shí)在參數(shù)值賦給對(duì)應(yīng)形式參數(shù),然后由函數(shù)完成要求處理,并回送處理結(jié)果。注意:實(shí)在參數(shù)與形式參數(shù)個(gè)數(shù)要相同,一一對(duì)應(yīng),類型上賦值
相容。實(shí)在參數(shù)能夠是表示式。若沒有形式參數(shù),則略去實(shí)在參數(shù)和括號(hào)。第4頁例:編寫一個(gè)求K!函數(shù),調(diào)用此函數(shù)計(jì)算:(0<n<m<8)functionfac(k:integer):integer;vari,t:integer;begint:=1;fori:=2tokdot:=t*i;fac:=tend;beginwriteln(‘Pleaseinputm,n:’);read(m,n);if(n>=0)and(n<m)and(m<8)thenbegina:=fac(m);b:=fac(n);c:=fac(m-n);d:=adiv(b*c);writeln(‘d=’,d)endeleswriteln(‘Inputerror!’)end.在這個(gè)程序中,m,n,a,b,c,d在主程序說明部分被定義,稱為全程變量,即在主程序和子程序中都能夠被用到變量。i,t在子程序說明部分被定義,成為局部變量,即只能在被定義子程序中使用變量。K是函數(shù)形式參數(shù),其類型為整型。函數(shù)名稱為fac,函數(shù)值返回類型也為整型。Varm,n,a,b,c,d:integer;第5頁例:定義一個(gè)求三數(shù)中最大值函數(shù)functionlargest(f1,f2,f3:integer):integer;
{計(jì)算和返回f1,f2,f3最大值}varg:integer;functionlarger(n1,n2:integer):integer;
{計(jì)算和返回n1,n2最大值}beginifn1>n2thenlarger:=n1elselarger:=n2;end;
{larger}beginlargest:=larger(larger(f1,f2),f3);
{計(jì)算和返回f1,f2,f3最大值}end;
{largest}largest函數(shù)說明指明了largest函數(shù)和它子函數(shù)larger結(jié)果值類型都為整數(shù)。子函數(shù)larger結(jié)果值由賦值語句larger:=n1(或larger:=n2)確定;largest函數(shù)結(jié)果值由賦值語句largest:=larger(larger(f1,f2),f3)確定。第6頁例:
求正整數(shù)A和B之間完全數(shù)(A<B).分析:所謂完全數(shù)是指它小于該數(shù)本身因子之和等于它本身,如6=1+2+3,6即是一個(gè)完全數(shù)。所以我們可定義一個(gè)布爾型函數(shù)perfect(x),若x是完全數(shù),其值為TURE,不然為FALSE。整個(gè)程序算法以下:
1fori:=AtoBdo
2ifperfect(i)thenwriteln(i);
var
i,a,b:integer;
begin{主程序開始}
write('Inputa,b:');
repeat{輸入0<a<b}
readln(a,b);
until(a>0)and(b>0)and(a<b);
writeln('Listofallperfectnumbers:');
{從a到b逐一判斷,是完全數(shù)則打印出來
fori:=atobdo
ifperfect(i)thenwriteln(i);
end.functionperfect(x:integer):boolean;
var
k,sum:integer;
begin
{累加x全部小于本身因數(shù)}
sum:=1;
fork:=2toxdiv2do
ifxmodk=0thensum:=sum+k;
{判斷x是否是完全數(shù)}
perfect:=x=sum;{將結(jié)果賦值給函數(shù)名}
end;{endofperfect}
第7頁二、過程1。定義過程說明普通形式:PROCEDURE<過程名>(<形式參數(shù)表>);<說明部分>;
BEGIN<過程體>END;注意:(1)形式參數(shù)表有兩種格式:數(shù)值形參和以VAR開頭變量形參。(2)過程體中沒有也不能夠有給過程名賦值語句,返回值由變量形參提供。2.過程調(diào)用普通形式:<過程名>(<實(shí)在參數(shù)表>)解釋:與數(shù)值形參對(duì)應(yīng)實(shí)在參數(shù)能夠是表示式,與變量形參對(duì)應(yīng)實(shí)在參數(shù)必須是變量,而不能是普通表示式。第8頁例:定義一個(gè)求三數(shù)中最大值過程procedurelargest(f1,f2,f3:integer;varir:integer);{計(jì)算和返回f1,f2,f3最大值ir}varg:integer;procedurelarger(n1,n2:integer;varr:integer);{largest子過程,計(jì)算和返回n1,n2最大值r}beginifn1>n2thenr:=n1elser:=n2;
end;{larger}beginlarger(f1,f2,g);{求出f1,f2中最大值g}larger(g,f3,ir);{求出g,f3中最大值Ir,作為f1,f2,f3中最大值返回}end;{largest}Largest有四個(gè)類型為整型形式參數(shù):f1,f2,f3和Ir,前三個(gè)參數(shù)f1,f2,f3為調(diào)用者向被調(diào)用者傳入三個(gè)要求比較大小整數(shù),這三個(gè)參數(shù)僅用作傳入數(shù)據(jù),不傳出計(jì)算結(jié)果,所以稱為值參;第四個(gè)參數(shù)Ir用來向調(diào)用者傳送三數(shù)中最大值,這種用作傳出計(jì)算結(jié)果參數(shù)稱為變量參數(shù),由var標(biāo)志。Largest使用子過程larger有三個(gè)類型為整型形式參數(shù):n1,n2和r,前二個(gè)參數(shù)n1,n2為過程Largest向它傳入二個(gè)要求比較大小整數(shù),屬于值參;第三個(gè)參數(shù)r用來向過程Largest傳送n1和n2最大值,屬于變量參數(shù)。第9頁例:輸出以下一個(gè)圖形:
*
**
***
****
*****
******
分析:我們前面學(xué)習(xí)可用二重循環(huán)打印出上圖形,現(xiàn)我們?cè)O(shè)置一個(gè)過程打印出N個(gè)連續(xù)"*"號(hào)。
programex7_2;
vari:integer;
proceduredraw_a_line(n:integer);{該過程打印出連續(xù)n個(gè)星號(hào),并換行}
varj:integer;
begin
forj:=1tondo
write('*');
writeln;
end;
begin
fori:=1to6do
draw_a_line(i);{調(diào)用過程,第I行打印i個(gè)連續(xù)星號(hào)}
end.
第10頁例說明一個(gè)求兩個(gè)整數(shù)最大條約數(shù)和最小公倍數(shù)過程Proceduremab(a,b:integer;varmaxab,minab:integer);Varf:boolean;i:integer;Beginifa>bthenbegint:=a;a:=b;b:=t;end;f:=true;i:=a;whilefandi>0dobeginif(amodi=0)and(bmodi=0)thenbeginmaxab:=I;minab:=a*bdivI;f:=false;end;i:=i-1;end;End;第11頁過程與函數(shù)區(qū)分第12頁實(shí)參加形參子程序調(diào)用(過程調(diào)用或函數(shù)調(diào)用)執(zhí)行次序分以下幾步:實(shí)參加形參結(jié)合─→執(zhí)行子程序體─→返回調(diào)用處繼續(xù)執(zhí)行子程序說明形式參數(shù)表對(duì)過程或函數(shù)內(nèi)語句序列直接引用變量進(jìn)行說明,詳細(xì)指明這些參數(shù)類別、數(shù)據(jù)類型要求和參數(shù)個(gè)數(shù)。過程或函數(shù)被調(diào)用時(shí)必須為它每個(gè)形參提供一個(gè)實(shí)參,按參數(shù)位置次序一一對(duì)應(yīng),每個(gè)實(shí)參必須滿足對(duì)應(yīng)形參要求。Pascal子程序形參主要分類:
1.值參數(shù)
形式參數(shù)表中前面沒有var,后有類型參數(shù)。它類似過程和函數(shù)局部變量,僅為過程和函數(shù)執(zhí)行提供初值而不影響調(diào)用時(shí)實(shí)際參數(shù)值。在調(diào)用過程或應(yīng)用函數(shù)時(shí),值參數(shù)所對(duì)應(yīng)實(shí)際參數(shù)必須是表示式,而且它值不能使文件類型或包含文件類型值。實(shí)參必須和形參賦值相容。
2.變量參數(shù)
形式參數(shù)表中前面有var后由類型參數(shù)。假如需要子程序向調(diào)用程序返回值時(shí),應(yīng)采取變量參數(shù)。變量參數(shù)要求它實(shí)參是和它同一類型變量。因?yàn)樵谧映绦驁?zhí)行時(shí),碰到對(duì)對(duì)應(yīng)形參引用式定值,就是對(duì)對(duì)應(yīng)實(shí)參引用式定值,即對(duì)形參任何操作就是對(duì)實(shí)參本身操作。
第13頁例輸出兩個(gè)數(shù)中最大值過程Varx:y
:integerprocedure
largest(a,b:integer);
begin
if
a>b
then
writeln(a)
else
writeln(b);
end.beginReadln(x,y);Lagest(x,y);End.
實(shí)際引用時(shí)所用參數(shù)x,y,是主程序定義變量過程中定義形式參數(shù)a,b,在實(shí)際引用過程時(shí),將被實(shí)際參數(shù)代替第14頁過程、函數(shù)數(shù)據(jù)傳遞在程序調(diào)用子程序時(shí),調(diào)用程序?qū)?shù)據(jù)傳遞給被調(diào)用過程或函數(shù),而當(dāng)子程序運(yùn)行結(jié)束后,結(jié)果又能夠經(jīng)過函數(shù)名、變參。當(dāng)然也能夠用全局變量等形式實(shí)現(xiàn)數(shù)據(jù)傳遞。接下來我們,就來研究參數(shù)傳遞與局部變量、全局變量等問題。第15頁數(shù)值形參和變量形參Procedureshow(a:integer)值形參和對(duì)應(yīng)實(shí)參必須一一對(duì)應(yīng),包含個(gè)數(shù)和類型。對(duì)應(yīng)實(shí)在參數(shù)可為表示式與實(shí)在參數(shù)之間傳遞關(guān)系是傳值僅視作輸入?yún)?shù),它有入口值,而無出口值,故不能表示計(jì)算結(jié)果值形參作為子程序局部量,當(dāng)控制返回程序后,值形參存放單元釋放。實(shí)參和值形參之間數(shù)據(jù)傳遞是單向,只能由實(shí)參傳送給形參,相當(dāng)賦值運(yùn)算。Procedureshow(vara:integer)對(duì)應(yīng)實(shí)在參數(shù)必須為變量與實(shí)在參數(shù)之間傳遞關(guān)系是傳地址既可視作輸入?yún)?shù),又可視作輸出參數(shù),它可有入口值,也可無入口值,但普通應(yīng)有出口值,以表示調(diào)用過程返回結(jié)果變量形參加對(duì)應(yīng)實(shí)參類型必須完全相同。對(duì)變量形參,運(yùn)行時(shí)不另外開辟存放單元,而是與對(duì)應(yīng)實(shí)參使用相同存放單元。也就是說,調(diào)用子程序時(shí),是將實(shí)參地址傳送給對(duì)應(yīng)變量形參。當(dāng)控制返回到調(diào)用程序后,變量形參存放單元不釋放,但變量形參本身無定義,即不得再使用。
普通在函數(shù)中使用值形參,而在過程中才使用變量形參,但也有例外。
第16頁寫出以下兩個(gè)程序運(yùn)行結(jié)果。programex1;
programex2;
vara,b:integer;
vara,b:integer;
procedureswap(x,y:integer);
procedureswap(Varx,y:integer);
vart:integer;
vart:integer;
begin
begin
t:=x;x:=y;y:=t;
t:=x;x:=y;y:=t;
end;
end;
begin
begin
a:=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.
分析:這兩個(gè)程序唯一區(qū)分是ex1中將x,y作為值形參,而
ex2中將x,y作為變量形參,所以在ex2中對(duì)x,y修改實(shí)際上是對(duì)調(diào)用該過程時(shí)與它們對(duì)應(yīng)變量a,b修改,故最終,a,b值為2,1。而ex1中調(diào)用swap過程時(shí),只是將a,b值傳遞給x,y,之后在過程中操作與a,b無關(guān)。ex1運(yùn)行結(jié)果為:ex2運(yùn)行結(jié)果為:
12
12
12
21第17頁全局變量和局部變量局部變量:凡是在子程序內(nèi)部作用變量,應(yīng)該在本子程序內(nèi)加以說明。這種在子程序內(nèi)部說明變量稱為局部變量。形式參數(shù)也只是在該子程序中有效,所以也屬于局部變量。一個(gè)變量作用域是指在程序中能對(duì)此變量進(jìn)行存取程序范圍。所以,局部變量作用域就是其所在子程序。實(shí)際上,局部變量只是當(dāng)其所在子程序被調(diào)用時(shí)才含有確定存放單元,當(dāng)控制從子程序返回到調(diào)用程序后,局部變量存放單元就被釋放,從而變得無定義。全局變量:是指在主程序說明部分中說明量。全局變量作用域分兩種情況:
①當(dāng)全局變量和局部量不一樣名時(shí),其作用域是整個(gè)程序范圍(自定義起直到主程序結(jié)束)。
②當(dāng)全局變量和局部量同名時(shí),全局變量作用域不包含局部量作用域。在子程序執(zhí)行部分使用是與全局變量同名局部變量。
第18頁求程序輸出結(jié)果varx,y:integer;
procedurea;
varx:integer;
begin
x:=2;
writeln('#',x,'#');
writeln('#',y,'#');
end;{ofa}
begin{mainprogram}
x:=1;y:=2;
writeln('*',x,'*',y);
a;
writeln('***',x,'***',y);
end.
分析:程序中x,y是全局變量,但在過程a中也有變量x,故全程變量x作用域?yàn)槌^程a外任何地方。而y作用域包含了子程序a,即整個(gè)程序。
運(yùn)行結(jié)果以下:
*1*2
#2#
#2#
***1***2
第19頁求程序輸出結(jié)果programex(input,output);
var
x,y,z:integer;
procedures(x:integer;vary:integer);
var
z:integer
begin
x:=5;
y:=6;
z:=7;
end;
begin
x:=1;
y:=2;
z:=3;
s(x,y);
writeln(x,y,z);
end.
第20頁求程序輸出結(jié)果programrange(input,output);
var
x,y:integer;
procedurep1;
var
x,z:integer;
begin
x:=10;
y:=y+1;
z:=10;
writeln(x,y,z);
end;
begin
x:=1;
y:=1;
writeln(x,y);
p1;
writeln(x,y,z);
end.
輸出結(jié)果:1
1
10
2
10
1
2
(error)第21頁遞歸調(diào)用——直接遞歸子程序內(nèi)引用子程序本身。比如按遞歸定義形式寫出fac(n)函數(shù)說明以下:functionfac(n:integer):integer;
beginifn=0thenfac:=1elsefac:=n*fac(n-1);
end;{fac}第22頁例:骨牌鋪法有1*n一個(gè)長(zhǎng)方形,用一個(gè)1*1、1*2和1*3骨牌鋪滿方格。比如n=3時(shí)為1*3方格。此時(shí)用1*1、1*2和1*3骨牌鋪滿方格,共有四種鋪法。圖列出了四種鋪法。輸入n(0≤n≤30),輸出鋪法總數(shù)。題解varn:integer;
{格子數(shù)}functionf(i:integer):longint;
{輸入格子數(shù),計(jì)算和返回鋪法總數(shù)}beginifiin[1..2]{遞歸邊界}thenf:=ielseifi=3 thenf:=4 elsef:=f(i-1)+f(i-2)+f(i-3);
{遞歸}end;{f}begi
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 清遠(yuǎn)防爆負(fù)壓風(fēng)機(jī)施工方案
- 小區(qū)景觀水系改造施工方案
- 配電室漏水處理施工方案
- 2025年成膜材料項(xiàng)目合作計(jì)劃書
- 低山丘陵區(qū)隧道施工方案
- 勘察鉆探夜間施工方案
- 資源環(huán)境與新型城鎮(zhèn)化的協(xié)調(diào)發(fā)展策略
- 優(yōu)化勞動(dòng)力市場(chǎng)機(jī)制的策略及實(shí)施路徑
- 2025年中國(guó)金屬天花行業(yè)發(fā)展現(xiàn)狀、運(yùn)行格局及投資前景分析報(bào)告(智研咨詢)
- 2025年中國(guó)低速電動(dòng)車行業(yè)發(fā)展現(xiàn)狀調(diào)查、競(jìng)爭(zhēng)格局分析及未來前景預(yù)測(cè)報(bào)告
- 2025中高考百日誓師大會(huì)教師表態(tài)發(fā)言稿:百日競(jìng)渡立壯志 師生同心鑄輝煌
- 2025體育單招英語備考100個(gè)高頻名詞精講(精校打印版)
- 2025年皖北衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫審定版
- 臺(tái)球館裝修合同模板及明細(xì)
- DeepSeek:從入門到精通3天教程
- 2024-2025學(xué)年人教版數(shù)學(xué)七下 第七章 相交線與平行線(含答案)
- GB/T 44994-2024聲學(xué)助聽器驗(yàn)配管理
- 裝卸車程序及人員管理規(guī)章制度范文(2篇)
- 2025年上海鐵路局集團(tuán)公司招聘筆試參考題庫含答案解析
- 《護(hù)理文書書寫》課件
- (完整版)項(xiàng)目管理體系
評(píng)論
0/150
提交評(píng)論