第十一講(上午) 子程序之函數(shù)_第1頁
第十一講(上午) 子程序之函數(shù)_第2頁
第十一講(上午) 子程序之函數(shù)_第3頁
第十一講(上午) 子程序之函數(shù)_第4頁
第十一講(上午) 子程序之函數(shù)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2022-3-292007年馬鞍山信息學競賽夏令營1授課老師:成功學校 谷曉華老師更多的資源請關(guān)注2022-3-292007年馬鞍山信息學競賽夏令營2本次課程的主要內(nèi)容本次課程的主要內(nèi)容v子程序的概念v函數(shù)的定義和運用;v重點:熟練掌握函數(shù)在程序設計中的使用,進一步了解子程序的概念和結(jié)構(gòu)化程序設計的思想。2022-3-292007年馬鞍山信息學競賽夏令營3v在前面的學習中,我們曾經(jīng)學習了程序設計中的三種基本控制結(jié)構(gòu)(順序、分支、循環(huán)順序、分支、循環(huán))。用它們可以組成任何程序。但在應用中,還經(jīng)常用到子程序結(jié)構(gòu)。v通常,在程序設計中,我們會發(fā)現(xiàn)一些程序段在程序的不同地方反復出現(xiàn),此時可以將這些程序

2、段作為相對獨立的整體,用一個標識符給它起一個名字,凡是程序中出現(xiàn)該程序段的地方,只要簡單地寫上其標識符即可。這樣的程序段,我們稱之為子程序。v子程序的運用充分體現(xiàn)了結(jié)構(gòu)化的程序設計的兩個基本要點v&自頂向下,逐步求精的設計方法v&程序的模塊化v子程序的使用不僅縮短了程序,節(jié)省了內(nèi)存空間及減少了程序的編譯時間,而且有利于結(jié)構(gòu)化程序設計。因為一個復雜的問題總可將其分解成若干個子問題來解決,如果子問題依然很復雜,還可以將它繼續(xù)分解,直到每個子問題都是一個具有獨立任務的模塊。這樣編制的程序結(jié)構(gòu)清晰,邏輯關(guān)系明確,無論是編寫、閱讀、調(diào)試還是修改,都會帶來極大的好處。v在一個程序中可以只有

3、主程序而沒有子程序(本章以前都是如此),但不能沒有主程序,也就是說不能單獨執(zhí)行子程序。 2022-3-292007年馬鞍山信息學競賽夏令營4子程序的示意圖子程序的示意圖ProgramBegin.調(diào)用子程序一.調(diào)用子程序二.End.子程序一Begin.End;子程序二Begin.End;每個子程序都每個子程序都有獨立的功能我們有獨立的功能我們通過參數(shù)的傳遞來通過參數(shù)的傳遞來實現(xiàn)實現(xiàn), ,子程序也是子程序也是先定義在使用先定義在使用2022-3-292007年馬鞍山信息學競賽夏令營5函數(shù)相關(guān)概念vpascal中子程序有兩種形式:函數(shù)和過程。 v在此之前,我們曾經(jīng)介紹并使用了pascal提供的各種標

4、準函數(shù),如ABS,SUCC等等,我們通過參數(shù)和函數(shù)名來調(diào)用它們v比如 X:=SQRT(1000);一般來說函數(shù)都會返回一個處理過后一般來說函數(shù)都會返回一個處理過后的值的值)v這些函數(shù)為我們編寫程序提供了很大的方便。但這些函數(shù)只是常用的基本函數(shù),編程時經(jīng)常需要自定義一些函數(shù)。v在pascal中,函數(shù)也遵循先規(guī)則,在程序中,。函數(shù)的結(jié)構(gòu)主程序的結(jié)構(gòu)很相似。2022-3-292007年馬鞍山信息學競賽夏令營6函數(shù)定義函數(shù)定義1:自定義函數(shù)的一般格式為: function 函數(shù)名(形式參數(shù)表): 類型; 函數(shù)首部 局部變量說明部分; begin 語句系列; 函數(shù)體 end;在此函數(shù)體中最終要將結(jié)果賦予

5、函數(shù)名在此函數(shù)體中最終要將結(jié)果賦予函數(shù)名說明: 函數(shù)由兩部分組成。函數(shù)首部以關(guān)鍵字function開頭。函數(shù)名是用戶自定義的標識符。函數(shù)的類型也就是函數(shù)值的類型,所求得的函數(shù)值通過函數(shù)名傳回調(diào)用它的程序??梢姡?。形式參數(shù)簡稱形參,形參即函數(shù)的自變量。自變量的初值來源于函數(shù)調(diào)用。在函數(shù)中,形參一般格式如下:變量名表1:類型標識符1;變量名表2:類型標識符2;;變量名表n:類型標識符n可見形參表相當于變量說明,對函數(shù)自變量進行說明,但應特別注意:此處只能使用類型標識符,而不能直接使用類型。此處只能使用類型標識符,而不能直接使用類型。2022-3-292007年馬鞍山信息學競賽夏令營7functio

6、n 函數(shù)名(形式參數(shù)表): 類型; 函數(shù)首部 局部變量說明部分; begin 語句系列; 函數(shù)體 end;在此函數(shù)體中最終要將結(jié)果賦予函數(shù)名在此函數(shù)體中最終要將結(jié)果賦予函數(shù)名說明說明: 當缺省形參表(當然要同時省去一對括號)時,稱為無參函數(shù)。函數(shù)體與程序體基本相似,由說明部分和執(zhí)行部分組成。函數(shù)體中的說明部分用來對本函數(shù)使用的標號、常量、類型、變量、子程序加以說明,這些量只在本函數(shù)內(nèi)有效。函數(shù)體的執(zhí)行部分由begin開頭,end結(jié)束,中間有若干用分號隔開的語句,只是end后應跟分號,不能像程序那樣用句號“.”。在函數(shù)體的執(zhí)行部分,至少應該給函數(shù)名賦一次值,以使在函數(shù)執(zhí)行結(jié)束后把函數(shù)值帶回調(diào)用程

7、序。2022-3-292007年馬鞍山信息學競賽夏令營8(二)函數(shù)的調(diào)用(二)函數(shù)的調(diào)用v我們可以在任何與函數(shù)值類型兼容的表達式中調(diào)用函數(shù),或者說,函數(shù)調(diào)用只能出現(xiàn)在允許表達式出現(xiàn)的地方,或作為表達式的一個因子。v函數(shù)調(diào)用方式與標準函數(shù)的調(diào)用方式相同。函數(shù)調(diào)用方式與標準函數(shù)的調(diào)用方式相同。 函數(shù)調(diào)用的一般格式:函數(shù)調(diào)用的一般格式:函數(shù)名函數(shù)名或或函數(shù)名(實在參數(shù)表)函數(shù)名(實在參數(shù)表)說明:v 實在參數(shù)簡稱實參。實參的個數(shù)必須與函數(shù)說明中形參的個數(shù)一致,實參的類型與形參的類型應當一一對應。調(diào)用函數(shù)時,一般的,實參必須有確定的值。函數(shù)調(diào)用的步驟為:計算實參的值,“賦給”對應的形參,然后通過函數(shù)運

8、算最終返回一個值到主程序中;2022-3-292007年馬鞍山信息學競賽夏令營9舉例說明比如:我們定義了一個取兩個數(shù)最大值的函數(shù)Function MAX_NUM(I,j:integer):integer;I,J稱為形參BeginIf ij then max_num:=I else max_max:=j;End;調(diào)用時只需要在主程序中寫 MAX_NUM(A,B);A,B我們稱為實參將A,B運算后的值,交給形式參數(shù)I,J,然后將運算的結(jié)果代回到主函數(shù)過程中;v自定義函數(shù)只是主程序的說明部分,若主程序中沒有調(diào)用函數(shù),則系統(tǒng)不會執(zhí)行函數(shù)子程序。當主程序調(diào)用一次函數(shù)時,則將實在參數(shù)的值傳給函數(shù)的形式參數(shù)

9、,控制轉(zhuǎn)向函數(shù)子程序去執(zhí)行,子程序執(zhí)行完畢后自動返回調(diào)用處。 2022-3-292007年馬鞍山信息學競賽夏令營10例題解析求任意輸入的五個自然數(shù)的最大公約數(shù)。解:算法分析:算法分析:自定義一個專門求兩自然數(shù)的最大公約數(shù)的函數(shù)GCD; 調(diào)用自定義函數(shù),第一次求前兩個數(shù)的最大公約數(shù);從第二次開始,用每次求得的最大公約數(shù)與下一個數(shù)再求兩個數(shù)最大公約數(shù),直到最后。本題共四次“求兩個數(shù)的最大公約數(shù)”, 設輸入的五個自然數(shù)分別是a1,a2,a3,a4,a5,采用如下步驟:求a1, a2兩個數(shù)的最大公約數(shù) 存入a1;求a1, a3兩個數(shù)的最大公約數(shù) 存入a1;求a1, a4兩個數(shù)的最大公約數(shù) 存入a1;求

10、a1, a5兩個數(shù)的最大公約數(shù) 存入a1; 輸出 a1,此時的a1已是五個數(shù)的最大公約數(shù) 2022-3-292007年馬鞍山信息學競賽夏令營11參考程序Program Exam42;Var a1,a2,a3,a4,a5: integder;function GCD(x,y: integer): integer; 自定義函數(shù)自定義函數(shù) Var n:integer;局部變量局部變量begin While x mod y 0 do begin n:=x; x:=y; y:=n mod yend; GCD:=y 將運算的結(jié)果賦予函數(shù)名將運算的結(jié)果賦予函數(shù)名end; Begin 主程序主程序 Write

11、(input 5 Numper:); readln(a1,a2,a3,a4,a5); 輸入五個數(shù)輸入五個數(shù) Write(,a1,a2,a3,a4,a5,)=);a1:GCD(a1,a2); 調(diào)用函數(shù)調(diào)用函數(shù)GCD,a1,a2是實參是實參 a1:GCD(a1,a3); a1:GCD(a1,a4); a1:GCD(a1,a5); Writeln(a1); readlnEnd.2022-3-292007年馬鞍山信息學競賽夏令營12實例分析二例例2 求正整數(shù)A和B之間的完全數(shù)(AB).分析:所謂完全數(shù)是指它的小于該數(shù)本身的因子之和等于它本身,如6123,6即是一個完全數(shù)。因此我們可定義一個布爾型函數(shù)p

12、erfect(x),若x是完全數(shù),其值為TURE,否則為FALSE。整個程序算法如下:1 for i:=A to B do2 if perfect(i) then writeln(i);2022-3-292007年馬鞍山信息學競賽夏令營13vprogram ex7_1;var i,a,b : integer;function perfect(x:integer):boolean;var k,sum : integer;beginsum:=1; 累加x所有小于本身的因數(shù) for k:=2 to x div 2 doif x mod k=0 then sum:=sum+k;判斷x是否是完全數(shù)per

13、fect:=x=sum; 將結(jié)果賦值給函數(shù)名end;end of perfectbegin主程序開始write(Input a,b:);readln(a,b);writeln(List of all perfect numbers:);for i:=a to b do 從a到b逐個判斷,是完全數(shù)則打印出來 if perfect(i) then writeln(i);end.2022-3-292007年馬鞍山信息學競賽夏令營14自定義函數(shù)的缺陷v自定義函數(shù)通常被設計成求一個函數(shù)值,一個函數(shù)只能得到一個運算結(jié)果。若要設計成能得到若干個運算結(jié)果(比如交換兩個數(shù)的值),或完成一系列處理,就需要自定義“

14、過程”來實現(xiàn)。 2022-3-292007年馬鞍山信息學競賽夏令營15思考一求輸入的三個數(shù)字(0=N=10)的階乘之和比如輸入3 5 8,則輸出3!+5!+8!的值提示:1:階乘的運算的結(jié)果比較大,很容易超過INTEGER范圍2:我們可以定義一個函數(shù)FUNCTION JIECHENG(I:INTEGER):INT64來實現(xiàn)階乘的運算2022-3-292007年馬鞍山信息學競賽夏令營16思考二思考二v如果一個自然數(shù)除了1和本身,還有別的數(shù)能夠整除它, 這樣的自然數(shù)就是合數(shù)。例如15,除了1和15,還有3和5能夠整除,所以15是合數(shù)。14,15,16是三個連續(xù)的合數(shù),試求連續(xù)五個最小的合數(shù)。v要求定義一個函數(shù)求數(shù)字是不是合數(shù)2022-3-292007年馬鞍山信息學競賽夏

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論