程序設(shè)計(jì)(C語(yǔ)言)6_第1頁(yè)
程序設(shè)計(jì)(C語(yǔ)言)6_第2頁(yè)
程序設(shè)計(jì)(C語(yǔ)言)6_第3頁(yè)
程序設(shè)計(jì)(C語(yǔ)言)6_第4頁(yè)
程序設(shè)計(jì)(C語(yǔ)言)6_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第6章章 函數(shù)函數(shù)結(jié)構(gòu)化程序的模塊結(jié)構(gòu)結(jié)構(gòu)化程序的模塊結(jié)構(gòu):主控模塊主控模塊模塊模塊1.1模塊模塊1.n 模塊模塊2.1模塊模塊2.n模塊模塊n.1模塊模塊n.n模塊模塊1模塊模塊2模塊模塊n第第6章章 函數(shù)函數(shù)程序結(jié)構(gòu)程序結(jié)構(gòu) :main()f1();f2();fn();f1()f11();f12();f11()f2()f21();f22();fn()fn1();fn2()f12()f21()f22()fn1()fn2()第第6章章 函數(shù)函數(shù)根據(jù)函數(shù)的定義者不同根據(jù)函數(shù)的定義者不同,分為如下兩大類:,分為如下兩大類:(1)標(biāo)準(zhǔn)函數(shù):)標(biāo)準(zhǔn)函數(shù):系統(tǒng)提供的已定義的函數(shù),一般用戶系統(tǒng)提供的已定

2、義的函數(shù),一般用戶都可以調(diào)用。如前面學(xué)習(xí)過的輸入輸出函數(shù)都可以調(diào)用。如前面學(xué)習(xí)過的輸入輸出函數(shù)scanf、printf、getchar、putchar等。等。Turbo C 2.0的部分常用的部分常用庫(kù)函數(shù)見附錄庫(kù)函數(shù)見附錄D。(2)用戶自定義函數(shù):)用戶自定義函數(shù):用戶自己編寫的用來(lái)解決具體用戶自己編寫的用來(lái)解決具體問題的函數(shù)。問題的函數(shù)。第第6章章 函數(shù)函數(shù)根據(jù)函數(shù)的參數(shù)形式根據(jù)函數(shù)的參數(shù)形式,C語(yǔ)言函數(shù)又分為如下兩種:語(yǔ)言函數(shù)又分為如下兩種:(1)無(wú)參函數(shù):)無(wú)參函數(shù): 主調(diào)函數(shù)并不將數(shù)據(jù)傳送給被調(diào)用函數(shù)。主調(diào)函數(shù)并不將數(shù)據(jù)傳送給被調(diào)用函數(shù)。(2)有參函數(shù):)有參函數(shù): 在調(diào)用函數(shù)時(shí),在

3、主調(diào)函數(shù)和被調(diào)函數(shù)之在調(diào)用函數(shù)時(shí),在主調(diào)函數(shù)和被調(diào)函數(shù)之間有參數(shù)傳遞,也就是說,主調(diào)函數(shù)可以將數(shù)據(jù)傳送給被調(diào)間有參數(shù)傳遞,也就是說,主調(diào)函數(shù)可以將數(shù)據(jù)傳送給被調(diào)用函數(shù)使用,被調(diào)用函數(shù)中的數(shù)據(jù)也可以帶回來(lái)供主調(diào)函數(shù)用函數(shù)使用,被調(diào)用函數(shù)中的數(shù)據(jù)也可以帶回來(lái)供主調(diào)函數(shù)使用。使用。第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.1 函數(shù)定義函數(shù)定義函數(shù)定義的函數(shù)定義的一般形式:一般形式: 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 函數(shù)名函數(shù)名(形式參數(shù)表列形式參數(shù)表列) 說明部分說明部分 執(zhí)行部分執(zhí)行部分 例:例:int max(int x,int y) /* 函數(shù)首部函數(shù)首部*/ /*函數(shù)體開始函

4、數(shù)體開始*/ int z; /*說明部分說明部分*/ if(xy) z=x; /*執(zhí)行部分執(zhí)行部分*/ else z=y; return(z); /*函數(shù)體結(jié)束函數(shù)體結(jié)束*/第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.1 函數(shù)定義函數(shù)定義說明:說明:函數(shù)定義包括函數(shù)首部和函數(shù)體兩部分。函數(shù)定義包括函數(shù)首部和函數(shù)體兩部分。(1)函數(shù)首部:)函數(shù)首部:函數(shù)定義的第一行。函數(shù)定義的第一行。1)函數(shù)名前面的類型標(biāo)識(shí)符函數(shù)名前面的類型標(biāo)識(shí)符是指函數(shù)返回值的類型,簡(jiǎn)稱是指函數(shù)返回值的類型,簡(jiǎn)稱函數(shù)值類型。函數(shù)值類型。函數(shù)的返回值函數(shù)的返回值由函數(shù)中的由函數(shù)中的return語(yǔ)句獲得,

5、即語(yǔ)句獲得,即return后的表達(dá)式的值,可以是簡(jiǎn)單類型、后的表達(dá)式的值,可以是簡(jiǎn)單類型、void類型或構(gòu)造類型或構(gòu)造類型等。當(dāng)類型等。當(dāng)return后的表達(dá)式的類型與函數(shù)名前面的類型標(biāo)后的表達(dá)式的類型與函數(shù)名前面的類型標(biāo)識(shí)符不一致時(shí),以函數(shù)名前面的類型標(biāo)識(shí)符為函數(shù)值類型識(shí)符不一致時(shí),以函數(shù)名前面的類型標(biāo)識(shí)符為函數(shù)值類型(即是將(即是將return后的表達(dá)式的值轉(zhuǎn)換為函數(shù)名前面的類型后后的表達(dá)式的值轉(zhuǎn)換為函數(shù)名前面的類型后作為函數(shù)值返回)。如果函數(shù)中無(wú)作為函數(shù)值返回)。如果函數(shù)中無(wú)return語(yǔ)句,將返回一個(gè)語(yǔ)句,將返回一個(gè)不確定值;如希望不返回值,可以定義函數(shù)類型為不確定值;如希望不返回值,

6、可以定義函數(shù)類型為void,當(dāng)函數(shù)值類型為當(dāng)函數(shù)值類型為int時(shí),可省略其類型的說明。時(shí),可省略其類型的說明。第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.1 函數(shù)定義函數(shù)定義說明:說明:函數(shù)定義包括函數(shù)首部和函數(shù)體兩部分。函數(shù)定義包括函數(shù)首部和函數(shù)體兩部分。(1)函數(shù)首部:)函數(shù)首部:函數(shù)定義的第一行。函數(shù)定義的第一行。2)函數(shù)名函數(shù)名是函數(shù)的標(biāo)識(shí)符,遵循是函數(shù)的標(biāo)識(shí)符,遵循C語(yǔ)言標(biāo)識(shí)符的命名規(guī)則,語(yǔ)言標(biāo)識(shí)符的命名規(guī)則,區(qū)分大小寫。區(qū)分大小寫。3)函數(shù)名后的形式參數(shù)表函數(shù)名后的形式參數(shù)表列給出函數(shù)的形式參數(shù)及其類型說列給出函數(shù)的形式參數(shù)及其類型說明。形式參數(shù)簡(jiǎn)稱形參,形

7、式參數(shù)及其類型說明放在函數(shù)名后明。形式參數(shù)簡(jiǎn)稱形參,形式參數(shù)及其類型說明放在函數(shù)名后的一對(duì)圓括號(hào)中,要特別注意的是,無(wú)論函數(shù)是否有形式參數(shù),的一對(duì)圓括號(hào)中,要特別注意的是,無(wú)論函數(shù)是否有形式參數(shù),函數(shù)名后的圓括號(hào)不可省,并且圓括號(hào)之后不能接函數(shù)名后的圓括號(hào)不可省,并且圓括號(hào)之后不能接“;”。形式參形式參數(shù)表列的一般形式如下:數(shù)表列的一般形式如下:形參形參1類型類型 形參形參1,形參,形參2類型類型 形參形參2,形參,形參n類型類型 形參形參n第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.1 函數(shù)定義函數(shù)定義說明:說明:函數(shù)定義包括函數(shù)首部和函數(shù)體兩部分。函數(shù)定義包括函數(shù)首

8、部和函數(shù)體兩部分。(1)函數(shù)首部:)函數(shù)首部:函數(shù)定義的第一行。函數(shù)定義的第一行。(2)函數(shù)體:)函數(shù)體:函數(shù)說明之后的花括號(hào)函數(shù)說明之后的花括號(hào)“ ”括起來(lái)的部分,括起來(lái)的部分,包括說明部分和執(zhí)行部分。包括說明部分和執(zhí)行部分。1)聲明部分:用來(lái)對(duì)函數(shù)中使用的變量和函數(shù)作說明。)聲明部分:用來(lái)對(duì)函數(shù)中使用的變量和函數(shù)作說明。2)執(zhí)行部分:)執(zhí)行部分:由基本語(yǔ)句組成,函數(shù)的功能由函數(shù)體內(nèi)的由基本語(yǔ)句組成,函數(shù)的功能由函數(shù)體內(nèi)的各個(gè)語(yǔ)句的執(zhí)行來(lái)實(shí)現(xiàn)。各個(gè)語(yǔ)句的執(zhí)行來(lái)實(shí)現(xiàn)。第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.2 函數(shù)調(diào)用函數(shù)調(diào)用一個(gè)函數(shù)一旦被定義,就可以在程序的其他函

9、數(shù)中使用它,一個(gè)函數(shù)一旦被定義,就可以在程序的其他函數(shù)中使用它,這個(gè)過程稱為函數(shù)調(diào)用。這個(gè)過程稱為函數(shù)調(diào)用。1函數(shù)調(diào)用的一般形式函數(shù)調(diào)用的一般形式 函數(shù)名函數(shù)名(實(shí)參表列實(shí)參表列); 2函數(shù)調(diào)用語(yǔ)句的執(zhí)行過程函數(shù)調(diào)用語(yǔ)句的執(zhí)行過程 首先計(jì)算每個(gè)實(shí)參表達(dá)式的值,并把此值存入所對(duì)應(yīng)的首先計(jì)算每個(gè)實(shí)參表達(dá)式的值,并把此值存入所對(duì)應(yīng)的形參單元中,然后把執(zhí)行流程轉(zhuǎn)入函數(shù)體中,執(zhí)行函數(shù)體中形參單元中,然后把執(zhí)行流程轉(zhuǎn)入函數(shù)體中,執(zhí)行函數(shù)體中的語(yǔ)句,當(dāng)執(zhí)行到函數(shù)體的右花括號(hào)或的語(yǔ)句,當(dāng)執(zhí)行到函數(shù)體的右花括號(hào)或return語(yǔ)句時(shí),表示語(yǔ)句時(shí),表示函數(shù)體執(zhí)行完成,這時(shí)將返回到調(diào)用此函數(shù)的語(yǔ)句的下一條函數(shù)體執(zhí)行完

10、成,這時(shí)將返回到調(diào)用此函數(shù)的語(yǔ)句的下一條語(yǔ)句,繼續(xù)往下執(zhí)行。語(yǔ)句,繼續(xù)往下執(zhí)行。第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.2 函數(shù)調(diào)用函數(shù)調(diào)用例:例:#includeint max(int x,int y) int z; z=xy?x:y; return(z);main() int a,b,c; scanf(%d%d,&a,&b); c=max(a,b); printf(max=%d,c); 程序結(jié)果如下:程序結(jié)果如下:輸入:輸入:10 20輸出:輸出:20一個(gè)函數(shù)一旦被定義,就可以在程序的其他函數(shù)中使用它,一個(gè)函數(shù)一旦被定義,就可以在程序的其他函數(shù)中

11、使用它,這個(gè)過程稱為函數(shù)調(diào)用。這個(gè)過程稱為函數(shù)調(diào)用。第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.2 函數(shù)調(diào)用函數(shù)調(diào)用一個(gè)函數(shù)一旦被定義,就可以在程序的其他函數(shù)中使用它,一個(gè)函數(shù)一旦被定義,就可以在程序的其他函數(shù)中使用它,這個(gè)過程稱為函數(shù)調(diào)用。這個(gè)過程稱為函數(shù)調(diào)用。3說明說明(1)在定義函數(shù)中指定的形參變量,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不)在定義函數(shù)中指定的形參變量,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不占內(nèi)存中的存儲(chǔ)單元;只有發(fā)生函數(shù)調(diào)用時(shí)被調(diào)用函數(shù)中的形參才被占內(nèi)存中的存儲(chǔ)單元;只有發(fā)生函數(shù)調(diào)用時(shí)被調(diào)用函數(shù)中的形參才被分配內(nèi)存單元。調(diào)用結(jié)束后,形參所占用的內(nèi)存單元也同時(shí)被釋放。分

12、配內(nèi)存單元。調(diào)用結(jié)束后,形參所占用的內(nèi)存單元也同時(shí)被釋放。(2)實(shí)參可以是常量、變量或表達(dá)式,但必須有確定的值。在調(diào)用時(shí))實(shí)參可以是常量、變量或表達(dá)式,但必須有確定的值。在調(diào)用時(shí)將實(shí)參的值賦給形參變量。將實(shí)參的值賦給形參變量。(3)實(shí)參與形參的類型應(yīng)一致。只有字符型和整型可以互相通用。)實(shí)參與形參的類型應(yīng)一致。只有字符型和整型可以互相通用。(4)實(shí)參變量對(duì)形參變量的數(shù)據(jù)傳遞是)實(shí)參變量對(duì)形參變量的數(shù)據(jù)傳遞是“值傳遞值傳遞”,即單向傳遞,只由,即單向傳遞,只由實(shí)參傳給形參,而不能由形參傳回來(lái)給實(shí)參。在內(nèi)存中,實(shí)參變量與實(shí)參傳給形參,而不能由形參傳回來(lái)給實(shí)參。在內(nèi)存中,實(shí)參變量與形參變量是不同的單

13、元,即使同名,也是不同的單元。形參的值如果形參變量是不同的單元,即使同名,也是不同的單元。形參的值如果發(fā)生改變,并不會(huì)改變主調(diào)函數(shù)的實(shí)參值。發(fā)生改變,并不會(huì)改變主調(diào)函數(shù)的實(shí)參值。第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.2 函數(shù)調(diào)用函數(shù)調(diào)用例:例:一個(gè)函數(shù)一旦被定義,就可以在程序的其他函數(shù)中使用它,一個(gè)函數(shù)一旦被定義,就可以在程序的其他函數(shù)中使用它,這個(gè)過程稱為函數(shù)調(diào)用。這個(gè)過程稱為函數(shù)調(diào)用。#includeswap(int x,int y) int t; printf (2)a=%d b=%dn,x,y); t=x;x=y;y=t; printf (3)a=%d b

14、=%dn,x,y);main() int x=10,y=20; printf(1)x=%d y=%dn,x,y); swap(x,y); printf (4)x=%d y=%dn,x,y);程序結(jié)果如下:程序結(jié)果如下:(1)x=10 y=20(2)x=10 y=20(3)x=20 y=10(4)x=10 y=20第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.2 函數(shù)調(diào)用函數(shù)調(diào)用一個(gè)函數(shù)一旦被定義,就可以在程序的其他函數(shù)中使用它,一個(gè)函數(shù)一旦被定義,就可以在程序的其他函數(shù)中使用它,這個(gè)過程稱為函數(shù)調(diào)用。這個(gè)過程稱為函數(shù)調(diào)用。4函數(shù)調(diào)用方式函數(shù)調(diào)用方式函數(shù)有以下三種調(diào)用方式:

15、函數(shù)有以下三種調(diào)用方式:(1)函數(shù)語(yǔ)句:)函數(shù)語(yǔ)句:把函數(shù)調(diào)用作為一個(gè)語(yǔ)句,把函數(shù)調(diào)用作為一個(gè)語(yǔ)句,例如:例如:sort();這時(shí)不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作。這時(shí)不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作。(2)函數(shù)表達(dá)式:)函數(shù)表達(dá)式:函數(shù)出現(xiàn)在一表達(dá)式中,這種表達(dá)式稱為函數(shù)表函數(shù)出現(xiàn)在一表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)式。這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的計(jì)算。達(dá)式。這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的計(jì)算。例如:例如:c=2*max(a,b);(3)函數(shù)參數(shù)。)函數(shù)參數(shù)。函數(shù)調(diào)用作為一個(gè)函數(shù)的實(shí)參。函數(shù)調(diào)用作為一個(gè)函數(shù)的實(shí)參。例如:例如:m=max(a,ma

16、x(b,c);其中其中max(b,c)是一次函數(shù)調(diào)用,它的值作為是一次函數(shù)調(diào)用,它的值作為max另一次調(diào)用的實(shí)參。另一次調(diào)用的實(shí)參。第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.3 函數(shù)聲明函數(shù)聲明 調(diào)用用戶自定義函數(shù)時(shí),一般調(diào)用函數(shù)和被調(diào)用函數(shù)應(yīng)在同一調(diào)用用戶自定義函數(shù)時(shí),一般調(diào)用函數(shù)和被調(diào)用函數(shù)應(yīng)在同一個(gè)文件中,在調(diào)用函數(shù)中對(duì)被調(diào)用函數(shù)返回值的類型、函數(shù)名稱、個(gè)文件中,在調(diào)用函數(shù)中對(duì)被調(diào)用函數(shù)返回值的類型、函數(shù)名稱、函數(shù)形式參數(shù)的類型進(jìn)行說明,這種說明稱為函數(shù)聲明。函數(shù)形式參數(shù)的類型進(jìn)行說明,這種說明稱為函數(shù)聲明。例:例: #includemain() int a,b

17、,c; int max(int,int); /*對(duì)對(duì)max函數(shù)進(jìn)行聲明函數(shù)進(jìn)行聲明*/ scanf(%d%d,&a,&b); c=max(a,b); printf(max=%d,c); int max(int x,int y) int z; z=xy?x:y; return(z); 第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.3 函數(shù)聲明函數(shù)聲明函數(shù)聲明有以下三種形式:函數(shù)聲明有以下三種形式:(1)類型名)類型名 函數(shù)名函數(shù)名(類型類型1 形參形參1,類型類型2 形參形參2,類型類型n 形參形參n);(2)類型名)類型名 函數(shù)名函數(shù)名(類型類型1,類型類

18、型2,類型類型n);(3)類型名)類型名 函數(shù)名函數(shù)名();其中,形式(其中,形式(2)是最常用的一種聲明形式。)是最常用的一種聲明形式。第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.3 函數(shù)聲明函數(shù)聲明對(duì)被調(diào)用函數(shù)的聲明,在以下幾種情況下可以省略:對(duì)被調(diào)用函數(shù)的聲明,在以下幾種情況下可以省略:(1)如果函數(shù)值是整型或字符型,可以不進(jìn)行聲明。)如果函數(shù)值是整型或字符型,可以不進(jìn)行聲明。例:例:#includemain() int a,b,c; scanf(%d%d,&a,&b); c=max(a,b); printf(max=%d,c);int max(i

19、nt x,int y) int z; z=xy?x:y; return(z); 第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.3 函數(shù)聲明函數(shù)聲明對(duì)被調(diào)用函數(shù)的聲明,在以下幾種情況下可以省略:對(duì)被調(diào)用函數(shù)的聲明,在以下幾種情況下可以省略:(2)如果被調(diào)用函數(shù)的定義出現(xiàn)在主調(diào)函數(shù)之前,可以不聲明。)如果被調(diào)用函數(shù)的定義出現(xiàn)在主調(diào)函數(shù)之前,可以不聲明。例:例:int max(int x,int y) int z; z=xy?x:y; return(z);#includemain() int a,b,c; scanf(%d%d,&a,&b); c=max(a,b

20、); printf(max=%d,c);第第6章章 函數(shù)函數(shù)6.1 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用6.1.3 函數(shù)聲明函數(shù)聲明對(duì)被調(diào)用函數(shù)的聲明,在以下幾種情況下可以省略:對(duì)被調(diào)用函數(shù)的聲明,在以下幾種情況下可以省略:(3)如果在所有函數(shù)定義之前對(duì)函數(shù)類型進(jìn)行了聲明,則在)如果在所有函數(shù)定義之前對(duì)函數(shù)類型進(jìn)行了聲明,則在各個(gè)主調(diào)函數(shù)中不再進(jìn)行聲明。各個(gè)主調(diào)函數(shù)中不再進(jìn)行聲明。例:例:int max(int,int);#includemain() int a,b,c; scanf(%d%d,&a,&b); c=max(a,b); printf(max=%d,c); int ma

21、x(int x,int y) int z; z=xy?x:y; return(z);第第6章章 函數(shù)函數(shù)6.2 函數(shù)的嵌套調(diào)用和遞歸調(diào)用函數(shù)的嵌套調(diào)用和遞歸調(diào)用6.2.1 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用 所謂函數(shù)的嵌套調(diào)用是指一個(gè)函數(shù)調(diào)用另一函數(shù)的過程中所謂函數(shù)的嵌套調(diào)用是指一個(gè)函數(shù)調(diào)用另一函數(shù)的過程中又出現(xiàn)對(duì)其他函數(shù)的調(diào)用。又出現(xiàn)對(duì)其他函數(shù)的調(diào)用。函數(shù)嵌套調(diào)用的調(diào)用結(jié)構(gòu)如圖所示:函數(shù)嵌套調(diào)用的調(diào)用結(jié)構(gòu)如圖所示:main()f1();f1()f11();f11()第第6章章 函數(shù)函數(shù)6.2 函數(shù)的嵌套調(diào)用和遞歸調(diào)用函數(shù)的嵌套調(diào)用和遞歸調(diào)用6.2.1 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用例:例:fun1(

22、int a,int b) int c; a+=a;b+=b; c=fun2(a,b); return c*c;fun2(int a,int b) int c; c=a*b%3; return c;main() int x=11,y=19; printf(%dn,fun1(x,y);注意:注意:函數(shù)的調(diào)用可以函數(shù)的調(diào)用可以嵌套,但函數(shù)的定義是嵌套,但函數(shù)的定義是平行的、相互獨(dú)立的,平行的、相互獨(dú)立的,不能嵌套定義。不能嵌套定義。第第6章章 函數(shù)函數(shù)6.2 函數(shù)的嵌套調(diào)用和遞歸調(diào)用函數(shù)的嵌套調(diào)用和遞歸調(diào)用6.2.2 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用 在調(diào)用一個(gè)函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本

23、在調(diào)用一個(gè)函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。身,稱為函數(shù)的遞歸調(diào)用。 其調(diào)用結(jié)構(gòu)如圖所示。其調(diào)用結(jié)構(gòu)如圖所示。main()f1();f1()f11();f11()f1();第第6章章 函數(shù)函數(shù)6.2 函數(shù)的嵌套調(diào)用和遞歸調(diào)用函數(shù)的嵌套調(diào)用和遞歸調(diào)用6.2.2 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用遞歸函數(shù)的執(zhí)行包括遞推和回歸兩個(gè)過程。遞歸函數(shù)的執(zhí)行包括遞推和回歸兩個(gè)過程。例:例:求求 t=n! 1 (n=1) t= n*(n-1)! (n1)int f (int n) int t; if(n=1|n=0) t=1; else t=n*f (n-1); return t;m

24、ain() int n,t; scanf(“%d”,&n); t=f (n); printf(%d!=%dn,n,t); 遞推: 回歸:main()=4*f(3)=3*f(2)=2*f(1)=1f(4)f(3)f(2)f(1)2(2!)6(3!)24(4!)第第6章章 函數(shù)函數(shù)6.3 變量的作用域及存儲(chǔ)類別變量的作用域及存儲(chǔ)類別6.3.1 局部變量與全局變量局部變量與全局變量1局部變量局部變量 局部變量是在一個(gè)函數(shù)內(nèi)部局部變量是在一個(gè)函數(shù)內(nèi)部定義的變量,它只在本函數(shù)范定義的變量,它只在本函數(shù)范圍內(nèi)有效。圍內(nèi)有效。例:例: fun1(int a,int b) int c; a+=a;b+

25、=b; c=fun2(a,b); printf(%d,%dn, a,b); return c; fun2(int a,int b) int x; a+=a; b+=b; int a=1; a=a+b; x=a+b; printf(%d, %d,%dn, a,b,x); return x; main() int x=11,y=19; printf(%dn, fun1(x,y); printf(%d,%dn, x,y);程序運(yùn)行結(jié)果如下:程序運(yùn)行結(jié)果如下:44,76,12022,3812011,19第第6章章 函數(shù)函數(shù)6.3 變量的作用域及存儲(chǔ)類別變量的作用域及存儲(chǔ)類別6.3.1 局部變量與全局變

26、量局部變量與全局變量1局部變量局部變量說明:說明:(1)主函數(shù))主函數(shù)main中定義的變量也是局部變量,也只在主函中定義的變量也是局部變量,也只在主函數(shù)中有效。數(shù)中有效。(2)形式參數(shù)也是局部變量,其他函數(shù)不能調(diào)用。)形式參數(shù)也是局部變量,其他函數(shù)不能調(diào)用。(3)可以在一個(gè)函數(shù)內(nèi)部的復(fù)合語(yǔ)句中定義變量,這些變量)可以在一個(gè)函數(shù)內(nèi)部的復(fù)合語(yǔ)句中定義變量,這些變量只在復(fù)合語(yǔ)句中有效。只在復(fù)合語(yǔ)句中有效。(4)不同函數(shù)中可以使用相同名字的變量,它們代表不同的)不同函數(shù)中可以使用相同名字的變量,它們代表不同的對(duì)象,互不干擾。對(duì)象,互不干擾。第第6章章 函數(shù)函數(shù)6.3 變量的作用域及存儲(chǔ)類別變量的作用域

27、及存儲(chǔ)類別6.3.1 局部變量與全局變量局部變量與全局變量2全局變量全局變量全局變量是在函數(shù)之外定義全局變量是在函數(shù)之外定義的變量,從定義變量的位置的變量,從定義變量的位置開始到本源文件結(jié)束范圍內(nèi)開始到本源文件結(jié)束范圍內(nèi)有效。有效。例:例: int a, b;fun1() int c; a=2;b=3; c=fun2(); printf(%d,%dn, a,b); return c; int x=11,y;fun2() a+=a; b+=b; x=a+b;y=a-b; printf(%d, %d, %d, %dn, a,b,x,y); return x; main() int y=19; pr

28、intf(%dn,fun1(); printf(%d,%dn, x,y);程序運(yùn)行結(jié)果如下:程序運(yùn)行結(jié)果如下:4,6,10,-24,61010,19第第6章章 函數(shù)函數(shù)6.3 變量的作用域及存儲(chǔ)類別變量的作用域及存儲(chǔ)類別6.3.1 局部變量與全局變量局部變量與全局變量2全局變量全局變量說明:說明:(1)全局變量可以在函數(shù)間傳遞數(shù)據(jù),增加函數(shù)間數(shù)據(jù))全局變量可以在函數(shù)間傳遞數(shù)據(jù),增加函數(shù)間數(shù)據(jù)聯(lián)系的渠道。聯(lián)系的渠道。(2)全局變量在程序的整個(gè)執(zhí)行過程中都有效。)全局變量在程序的整個(gè)執(zhí)行過程中都有效。(3)在同一個(gè)源文件中,全局變量與局部變量可以同名,)在同一個(gè)源文件中,全局變量與局部變量可以同名

29、,在局部變量的作用范圍內(nèi),全局變量不起作用。在局部變量的作用范圍內(nèi),全局變量不起作用。(4)對(duì)于全局變量,如果在定義時(shí)不進(jìn)行初始化,則系)對(duì)于全局變量,如果在定義時(shí)不進(jìn)行初始化,則系統(tǒng)將自動(dòng)賦予其初值,對(duì)數(shù)值型變量賦統(tǒng)將自動(dòng)賦予其初值,對(duì)數(shù)值型變量賦0,對(duì)字符型賦變,對(duì)字符型賦變量量0。第第6章章 函數(shù)函數(shù)6.3 變量的作用域及存儲(chǔ)類別變量的作用域及存儲(chǔ)類別6.3.2 動(dòng)態(tài)變量與靜態(tài)變量動(dòng)態(tài)變量與靜態(tài)變量1動(dòng)態(tài)存儲(chǔ)方式和靜態(tài)存儲(chǔ)方式動(dòng)態(tài)存儲(chǔ)方式和靜態(tài)存儲(chǔ)方式(1)動(dòng)態(tài)存儲(chǔ)方式。是指在程序運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)分)動(dòng)態(tài)存儲(chǔ)方式。是指在程序運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)分配存儲(chǔ)空間的方式。配存儲(chǔ)空間的方式。(

30、2)靜態(tài)存儲(chǔ)方式。是指在程序運(yùn)行期間分配固定的存儲(chǔ))靜態(tài)存儲(chǔ)方式。是指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的方式。空間的方式。第第6章章 函數(shù)函數(shù)6.3 變量的作用域及存儲(chǔ)類別變量的作用域及存儲(chǔ)類別6.3.2 動(dòng)態(tài)變量與靜態(tài)變量動(dòng)態(tài)變量與靜態(tài)變量2動(dòng)態(tài)變量動(dòng)態(tài)變量 以動(dòng)態(tài)存儲(chǔ)方式分配的變量稱為動(dòng)態(tài)變量,以動(dòng)態(tài)存儲(chǔ)方式分配的變量稱為動(dòng)態(tài)變量,包括所有函包括所有函數(shù)的形式參數(shù)、用數(shù)的形式參數(shù)、用auto和和register聲明的局部變量。聲明的局部變量。動(dòng)態(tài)變動(dòng)態(tài)變量一般定義在函數(shù)內(nèi)部(包括定義在函數(shù)首部的形式參量一般定義在函數(shù)內(nèi)部(包括定義在函數(shù)首部的形式參數(shù)),數(shù)),只有當(dāng)程序進(jìn)入該函數(shù)時(shí)才分配存

31、儲(chǔ)空間,只有當(dāng)程序進(jìn)入該函數(shù)時(shí)才分配存儲(chǔ)空間,函數(shù)執(zhí)函數(shù)執(zhí)行完后,變量的存儲(chǔ)空間被釋放,再次調(diào)用該函數(shù)時(shí),系行完后,變量的存儲(chǔ)空間被釋放,再次調(diào)用該函數(shù)時(shí),系統(tǒng)重新分配新的存儲(chǔ)空間。統(tǒng)重新分配新的存儲(chǔ)空間。 動(dòng)態(tài)變量在未被賦初值時(shí),其值為不能確定的隨機(jī)值。動(dòng)態(tài)變量在未被賦初值時(shí),其值為不能確定的隨機(jī)值。第第6章章 函數(shù)函數(shù)6.3 變量的作用域及存儲(chǔ)類別變量的作用域及存儲(chǔ)類別6.3.2 動(dòng)態(tài)變量與靜態(tài)變量動(dòng)態(tài)變量與靜態(tài)變量2動(dòng)態(tài)變量動(dòng)態(tài)變量(1)用)用auto聲明的局部變量。聲明的局部變量。用用auto聲明的局部變量聲明的局部變量又稱動(dòng)態(tài)的局部變量。又稱動(dòng)態(tài)的局部變量。其聲明形式如下:其聲明形式

32、如下: auto 變量類型變量類型 變量名變量名;其中,其中,auto是可省略項(xiàng)。是可省略項(xiàng)。例:例:int fun(int a) auto int b,c=3;int fun(int a) int b,c=3;以上定義的以上定義的b,c都是動(dòng)態(tài)的局部變量。都是動(dòng)態(tài)的局部變量。第第6章章 函數(shù)函數(shù)6.3 變量的作用域及存儲(chǔ)類別變量的作用域及存儲(chǔ)類別6.3.2 動(dòng)態(tài)變量與靜態(tài)變量動(dòng)態(tài)變量與靜態(tài)變量2動(dòng)態(tài)變量動(dòng)態(tài)變量(2)用)用register聲明的局部變量。聲明的局部變量。用用register聲明的局部變量聲明的局部變量又稱又稱寄存器變量寄存器變量。寄存器變量的值放在。寄存器變量的值放在CPU的

33、寄存器中,使的寄存器中,使用時(shí)直接從寄存器取出參加運(yùn)算,不必再到內(nèi)存中去存取。用時(shí)直接從寄存器取出參加運(yùn)算,不必再到內(nèi)存中去存取。為了提高執(zhí)行效率,把程序中使用頻率高的變量定義為寄存為了提高執(zhí)行效率,把程序中使用頻率高的變量定義為寄存器變量。其聲明形式如下:器變量。其聲明形式如下: register 變量類型變量類型 變量名變量名;例:例:fun1() register int i; for(i=1;i=1000;i+) 說明:說明:(1)只有局部動(dòng)態(tài)變量和形式)只有局部動(dòng)態(tài)變量和形式參數(shù)可以說明為寄存器變量。參數(shù)可以說明為寄存器變量。(2)一個(gè)計(jì)算機(jī)系統(tǒng)中的寄存)一個(gè)計(jì)算機(jī)系統(tǒng)中的寄存器的數(shù)

34、目是有限的。器的數(shù)目是有限的。第第6章章 函數(shù)函數(shù)6.3 變量的作用域及存儲(chǔ)類別變量的作用域及存儲(chǔ)類別6.3.2 動(dòng)態(tài)變量與靜態(tài)變量動(dòng)態(tài)變量與靜態(tài)變量3靜態(tài)變量靜態(tài)變量 以靜態(tài)存儲(chǔ)方式分配的變量稱為靜態(tài)變量,以靜態(tài)存儲(chǔ)方式分配的變量稱為靜態(tài)變量,包括所有的包括所有的全局變量和用全局變量和用static聲明的局部變量。聲明的局部變量。動(dòng)態(tài)變量可以定義在動(dòng)態(tài)變量可以定義在函數(shù)外部(如:全局變量),也可以定義在函數(shù)內(nèi)部(如用函數(shù)外部(如:全局變量),也可以定義在函數(shù)內(nèi)部(如用static聲明的局部變量),聲明的局部變量),靜態(tài)變量在程序執(zhí)行過程中占有靜態(tài)變量在程序執(zhí)行過程中占有固定的存儲(chǔ)空間固定的存

35、儲(chǔ)空間,只在程序執(zhí)行結(jié)束時(shí)釋放占用的存儲(chǔ)單元。,只在程序執(zhí)行結(jié)束時(shí)釋放占用的存儲(chǔ)單元。 靜態(tài)變量在未被賦初值時(shí),其值為靜態(tài)變量在未被賦初值時(shí),其值為0。第第6章章 函數(shù)函數(shù)6.3 變量的作用域及存儲(chǔ)類別變量的作用域及存儲(chǔ)類別6.3.2 動(dòng)態(tài)變量與靜態(tài)變量動(dòng)態(tài)變量與靜態(tài)變量3靜態(tài)變量靜態(tài)變量(1)用)用static聲明的局部變量。聲明的局部變量。用用static聲明的局部變量又稱聲明的局部變量又稱靜態(tài)的局部變量。靜態(tài)的局部變量。其聲明形式如下:其聲明形式如下: static 變量類型變量類型 變量名變量名; 靜態(tài)局部變量的作用域仍然是變量定義所在的函數(shù),即只靜態(tài)局部變量的作用域仍然是變量定義所在

36、的函數(shù),即只有當(dāng)程序進(jìn)入該函數(shù)時(shí),這些變量才可以使用,離開該函數(shù)有當(dāng)程序進(jìn)入該函數(shù)時(shí),這些變量才可以使用,離開該函數(shù)后就不能使用這些變量了,但不能使用并不代表這些變量不后就不能使用這些變量了,但不能使用并不代表這些變量不存在,靜態(tài)局部變量在程序第一次進(jìn)入定義所在函數(shù)時(shí)被分存在,靜態(tài)局部變量在程序第一次進(jìn)入定義所在函數(shù)時(shí)被分配存儲(chǔ)空間,函數(shù)執(zhí)行完(所在程序并沒有執(zhí)行完)后,變配存儲(chǔ)空間,函數(shù)執(zhí)行完(所在程序并沒有執(zhí)行完)后,變量的存儲(chǔ)空間不釋放,再次調(diào)用該函數(shù)時(shí),變量繼續(xù)使用所量的存儲(chǔ)空間不釋放,再次調(diào)用該函數(shù)時(shí),變量繼續(xù)使用所占的存儲(chǔ)空間,并保持上次調(diào)用所得到的結(jié)果。占的存儲(chǔ)空間,并保持上次調(diào)

37、用所得到的結(jié)果。第第6章章 函數(shù)函數(shù)6.3 變量的作用域及存儲(chǔ)類別變量的作用域及存儲(chǔ)類別6.3.2 動(dòng)態(tài)變量與靜態(tài)變量動(dòng)態(tài)變量與靜態(tài)變量3靜態(tài)變量靜態(tài)變量(1)用)用static聲明的局部變量。聲明的局部變量。例:例: int fun(int a) auto int b=0; static c=3; b+;c+; return(a+b+c);main() int a=2; int i; for(i=0;ib?a:b);正確答案:正確答案:double max(知識(shí)點(diǎn):函數(shù)的聲明)(知識(shí)點(diǎn):函數(shù)的聲明)試題分析:試題分析:當(dāng)被調(diào)用的函數(shù)定義處在函數(shù)調(diào)用后且不為當(dāng)被調(diào)用的函數(shù)定義處在函數(shù)調(diào)用后且不

38、為int類型時(shí),在函類型時(shí),在函數(shù)調(diào)用前必須對(duì)被調(diào)用函數(shù)進(jìn)行聲明。對(duì)函數(shù)進(jìn)行聲明有下列三種形式:數(shù)調(diào)用前必須對(duì)被調(diào)用函數(shù)進(jìn)行聲明。對(duì)函數(shù)進(jìn)行聲明有下列三種形式:(1)類型名)類型名 函數(shù)名函數(shù)名(類型類型1 形參形參1,類型類型2 形參形參2,類型類型n 形參形參n);(2)類型名)類型名 函數(shù)名函數(shù)名(類型類型1,類型類型2,類型類型n);(3)類型名)類型名 函數(shù)名函數(shù)名();第第6章章 函數(shù)函數(shù)6.6 典型試題詳解典型試題詳解4以下程序的輸出結(jié)果是以下程序的輸出結(jié)果是_。t(int x,int y,int cp,int dp) cp=x*x+y*y; dp=x*x-y*y; main()

39、 int a=4,b=3,c=5,d=6; t(a,b,c,d); printf(%d %d n,c,d); 正確答案:正確答案:5 6(知識(shí)點(diǎn):函數(shù)的調(diào)用、參數(shù)傳遞)(知識(shí)點(diǎn):函數(shù)的調(diào)用、參數(shù)傳遞)試題分析:試題分析:當(dāng)執(zhí)行當(dāng)執(zhí)行t(a,b,c,d);調(diào)用函數(shù)調(diào)用函數(shù)t時(shí),將實(shí)參時(shí),將實(shí)參a、b、c、d的值傳遞的值傳遞給形參給形參x、y、cp、dp,在函數(shù),在函數(shù)t中對(duì)中對(duì)cp、dp進(jìn)行計(jì)算,改變了形參進(jìn)行計(jì)算,改變了形參cp、dp的值,但并沒有改變對(duì)應(yīng)實(shí)參的值,但并沒有改變對(duì)應(yīng)實(shí)參c、d的值(即形參的值不帶回給實(shí)參),因的值(即形參的值不帶回給實(shí)參),因此返回后,實(shí)參此返回后,實(shí)參c、d的

40、值不變。的值不變。第第6章章 函數(shù)函數(shù)6.6 典型試題詳解典型試題詳解5有以下函數(shù)定義:有以下函數(shù)定義: void fun(int n,double x) 若以下選項(xiàng)中的變量都已經(jīng)正確定義且賦值,則對(duì)函數(shù)若以下選項(xiàng)中的變量都已經(jīng)正確定義且賦值,則對(duì)函數(shù)fun的的正確調(diào)用語(yǔ)句是正確調(diào)用語(yǔ)句是_。A)fun(int y,double m); B)k=fun(10,12.5); C)fun(x,n); D)void fun(n,x);正確答案:正確答案:C(知識(shí)點(diǎn):函數(shù)的調(diào)用)(知識(shí)點(diǎn):函數(shù)的調(diào)用)試題分析:試題分析:當(dāng)函數(shù)類型為當(dāng)函數(shù)類型為void時(shí),函數(shù)不返回值,函數(shù)調(diào)用只時(shí),函數(shù)不返回值,函數(shù)

41、調(diào)用只能以函數(shù)語(yǔ)句的形式出現(xiàn),因此,選項(xiàng)能以函數(shù)語(yǔ)句的形式出現(xiàn),因此,選項(xiàng)B顯然是不對(duì)的。在函顯然是不對(duì)的。在函數(shù)調(diào)用時(shí),只須給出函數(shù)名和實(shí)際參數(shù),不能再給出函數(shù)類數(shù)調(diào)用時(shí),只須給出函數(shù)名和實(shí)際參數(shù),不能再給出函數(shù)類型和參數(shù)類型,所以選項(xiàng)型和參數(shù)類型,所以選項(xiàng)A和選項(xiàng)和選項(xiàng)D都不對(duì)。正確的選項(xiàng)是都不對(duì)。正確的選項(xiàng)是C。第第6章章 函數(shù)函數(shù)6.6 典型試題詳解典型試題詳解6有以下程序:有以下程序:int f(int n) if(n= =1) return 1; else return f(n-1)+1;main() int i,j=0; for(i=1;i1)主函數(shù)中主函數(shù)中j的值是的值是f(1)與與f(2)之和,顯然,之和,顯然,f(1)=1,f(2)=2,因此,因此,j的值為的值為3。正確答案:正確答案:B(知識(shí)點(diǎn):函數(shù)的遞歸調(diào)用)(知識(shí)點(diǎn):函數(shù)的遞歸調(diào)用)試題分析:試題分析:在函數(shù)在函數(shù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論