C語言程序設(shè)計_第六章_函數(shù)ppt_第1頁
C語言程序設(shè)計_第六章_函數(shù)ppt_第2頁
C語言程序設(shè)計_第六章_函數(shù)ppt_第3頁
C語言程序設(shè)計_第六章_函數(shù)ppt_第4頁
C語言程序設(shè)計_第六章_函數(shù)ppt_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第六章第六章 函函 數(shù)數(shù)6.1 引例引例6.2 C語言函數(shù)的基本概念語言函數(shù)的基本概念6.3 函數(shù)調(diào)用函數(shù)調(diào)用6.4 函數(shù)嵌套調(diào)用和遞歸調(diào)用函數(shù)嵌套調(diào)用和遞歸調(diào)用6.5 變量與函數(shù)變量與函數(shù)6.6 模塊化程序設(shè)計模塊化程序設(shè)計6.1 引引 例例引例:編程實現(xiàn)如圖結(jié)果。引例:編程實現(xiàn)如圖結(jié)果。6.1 引引 例例【分析【分析】n從圖中看到,三角形星號圖形出現(xiàn)了三次從圖中看到,三角形星號圖形出現(xiàn)了三次n能否僅編寫一段程序代碼,要輸出星號圖形能否僅編寫一段程序代碼,要輸出星號圖形時就使用該段代碼?時就使用該段代碼?nC語言提供了這樣的功能,以語言提供了這樣的功能,以函數(shù)函數(shù)的組織形的組織形式編寫代碼,

2、當(dāng)使用時就式編寫代碼,當(dāng)使用時就調(diào)用調(diào)用此函數(shù)。此函數(shù)。 6.1 引引 例例【知識點【知識點】1. 模塊化程序設(shè)計。模塊化程序設(shè)計。2. 函數(shù)。函數(shù)。6.2 C語言函數(shù)的基本概念語言函數(shù)的基本概念nC語言中,一段有獨立功能,又能夠多次使語言中,一段有獨立功能,又能夠多次使用且具有獨立名稱與一定的輸入、輸出的用且具有獨立名稱與一定的輸入、輸出的代碼,稱為代碼,稱為C語言的函數(shù)。語言的函數(shù)。 n函數(shù)是函數(shù)是C語言程序的基本組成單元語言程序的基本組成單元n一個一個C程序由一個程序由一個main()和若干其它函數(shù)構(gòu)和若干其它函數(shù)構(gòu)成。成。程序的執(zhí)行總是從主函數(shù)開始,到主程序的執(zhí)行總是從主函數(shù)開始,到主

3、函數(shù)結(jié)束。函數(shù)結(jié)束。6.2.1 函數(shù)的定義函數(shù)的定義n函數(shù)定義的一般形式:函數(shù)定義的一般形式: ()函數(shù)體函數(shù)體 第一行稱為函數(shù)首部,是由函數(shù)的數(shù)據(jù)類型、函數(shù)名和形第一行稱為函數(shù)首部,是由函數(shù)的數(shù)據(jù)類型、函數(shù)名和形參列表組成參列表組成 大括號括起來的若干語句是函數(shù)體,由完成某一功能的大括號括起來的若干語句是函數(shù)體,由完成某一功能的C語句組成語句組成6.2.1 函數(shù)的定義函數(shù)的定義n在使用一個函數(shù)前,必須先對其進行定義在使用一個函數(shù)前,必須先對其進行定義 n程序中如果調(diào)用了某個函數(shù),該函數(shù)就會在完成程序中如果調(diào)用了某個函數(shù),該函數(shù)就會在完成特定工作后,返回到調(diào)用它的地方特定工作后,返回到調(diào)用它的

4、地方 n按照返回結(jié)果不同有如下兩種情況按照返回結(jié)果不同有如下兩種情況 函數(shù)經(jīng)過一系列運算,得出一個運算結(jié)果,并需要返回函數(shù)經(jīng)過一系列運算,得出一個運算結(jié)果,并需要返回運算結(jié)果運算結(jié)果 函數(shù)只是完成一系列操作步驟,不需要返回任何結(jié)果。函數(shù)只是完成一系列操作步驟,不需要返回任何結(jié)果。 6.2.1 函數(shù)的定義函數(shù)的定義【例【例6-1】利用函數(shù)實現(xiàn)從鍵盤輸入兩個】利用函數(shù)實現(xiàn)從鍵盤輸入兩個數(shù),輸出最大值。數(shù),輸出最大值。1、返回結(jié)果的函數(shù)定義、返回結(jié)果的函數(shù)定義#includeint max(int x,int y) /* 返回結(jié)果的函數(shù)定義返回結(jié)果的函數(shù)定義 * int z; z=xy ? x:y;

5、 /* z為為x與與y中最大的值中最大的值 */ printf(max()函數(shù)中找出了兩數(shù)的最大值。函數(shù)中找出了兩數(shù)的最大值。n); return(z); int main(void) int a,b,c; printf(請輸入數(shù)值請輸入數(shù)值a和和b的值:的值:n); scanf(%d,%d,&a,&b); printf(main()函數(shù)中輸入函數(shù)中輸入a和和b的值,下面調(diào)用的值,下面調(diào)用max()函數(shù)函數(shù)n); c=max(a,b); printf(main()函數(shù)中輸出函數(shù)中輸出a、b中的最大值是中的最大值是%d。n,c); return 0; 6.2.1 函數(shù)的定義函數(shù)的定義n返回結(jié)果的

6、函數(shù)定義形式為:返回結(jié)果的函數(shù)定義形式為: 返回值類型標(biāo)識符返回值類型標(biāo)識符 函數(shù)名(形參列表)函數(shù)名(形參列表) 變量聲明變量聲明 語句部分語句部分6.2.1 函數(shù)的定義函數(shù)的定義void 函數(shù)名(形參表)函數(shù)名(形參表) 函數(shù)體函數(shù)體 ;2、不返回結(jié)果的函數(shù)定義、不返回結(jié)果的函數(shù)定義6.2.1 函數(shù)的定義函數(shù)的定義n為了明確表示不需要函數(shù)返回值,用為了明確表示不需要函數(shù)返回值,用void定義函定義函數(shù)為數(shù)為“無類型無類型”。n函數(shù)體中可以出現(xiàn)函數(shù)體中可以出現(xiàn)return語句,也可以省略。語句,也可以省略。nvoid類型的函數(shù)雖然不直接返回一個值,但它的類型的函數(shù)雖然不直接返回一個值,但它的

7、作用通常可以實現(xiàn)屏幕輸出等功能。作用通常可以實現(xiàn)屏幕輸出等功能。2、不返回結(jié)果的函數(shù)定義、不返回結(jié)果的函數(shù)定義6.2.1 函數(shù)的定義函數(shù)的定義【例【例6-2】編寫函數(shù)實現(xiàn)打印五行十個星號?!烤帉懞瘮?shù)實現(xiàn)打印五行十個星號。 【分析【分析】n主調(diào)函數(shù)輸入星號的行數(shù)及每行星號數(shù),主調(diào)函數(shù)輸入星號的行數(shù)及每行星號數(shù),并調(diào)用打印星號函數(shù);并調(diào)用打印星號函數(shù);n建立建立printstar(int m,int n)函數(shù)實現(xiàn)打印星函數(shù)實現(xiàn)打印星號的功能,將星號直接屏幕輸出。號的功能,將星號直接屏幕輸出。 2、不返回結(jié)果的函數(shù)定義、不返回結(jié)果的函數(shù)定義#includeint main(void) void pr

8、intstar(int m,int n); int a,b; printf(請輸入要打印星號的行數(shù)和每行的星號數(shù):請輸入要打印星號的行數(shù)和每行的星號數(shù):n); scanf(%d,%d,&a,&b); printf(主調(diào)函數(shù),下面要調(diào)用主調(diào)函數(shù),下面要調(diào)用printstar()函數(shù)。函數(shù)。n); printstar(a,b); /* 調(diào)用調(diào)用printstar()函數(shù)函數(shù) */ printf(返回到主調(diào)函數(shù)。返回到主調(diào)函數(shù)。n); return 0;void printstar(int m,int n) /* printstar()函數(shù)的定義,不返回結(jié)果的定義函數(shù)的定義,不返回結(jié)果的定義 */

9、int i,j; printf(被調(diào)函數(shù)被調(diào)函數(shù)printstar(),要打印五行十個星號。,要打印五行十個星號。n); for(i=1;i=m;i+) for(j=1;j=n;j+) printf(*); printf(n);【說明【說明】 函數(shù)定義的第一行是函數(shù)首部,后面不能加分號。函數(shù)定義的第一行是函數(shù)首部,后面不能加分號。 函數(shù)首部的類型標(biāo)識符是指函數(shù)類型。如果省略函函數(shù)首部的類型標(biāo)識符是指函數(shù)類型。如果省略函數(shù)的類型標(biāo)識符,則默認的數(shù)據(jù)類型為數(shù)的類型標(biāo)識符,則默認的數(shù)據(jù)類型為int型。型。 函數(shù)名必須是有效的標(biāo)識符。函數(shù)名必須是有效的標(biāo)識符。 形參列表中給出函數(shù)所有形參的名稱和類型。

10、各個形參列表中給出函數(shù)所有形參的名稱和類型。各個形參之間用逗號分隔,每個形參前面的類型必須分形參之間用逗號分隔,每個形參前面的類型必須分別寫明。別寫明。 函數(shù)體寫在一對大括號中,包括變量聲明和語句部函數(shù)體寫在一對大括號中,包括變量聲明和語句部分。分。6.2.2 函數(shù)返回值和函數(shù)類型函數(shù)返回值和函數(shù)類型n從函數(shù)返回值的類型來看,有兩種類型:從函數(shù)返回值的類型來看,有兩種類型:有確定的運算結(jié)果返回給主調(diào)函數(shù)有確定的運算結(jié)果返回給主調(diào)函數(shù)沒有確定的運算結(jié)果返回給主調(diào)函數(shù)沒有確定的運算結(jié)果返回給主調(diào)函數(shù)1、函數(shù)返回值、函數(shù)返回值6.2.2 函數(shù)返回值和函數(shù)類函數(shù)返回值和函數(shù)類型型n函數(shù)結(jié)果返回形式:函

11、數(shù)結(jié)果返回形式:return 返回值表達式;返回值表達式;n上述語句也可表示成:上述語句也可表示成:return (返回值表達式返回值表達式);nreturn語句的功能有兩個:一是結(jié)束子函語句的功能有兩個:一是結(jié)束子函數(shù)的運行;二是先求解表達式的值,然后數(shù)的運行;二是先求解表達式的值,然后返回調(diào)用函數(shù),并將返回調(diào)用函數(shù),并將“返回值表達式返回值表達式”的的值帶給調(diào)用函數(shù)。值帶給調(diào)用函數(shù)。 1、函數(shù)返回值、函數(shù)返回值6.2.2 函數(shù)返回值和函數(shù)類型函數(shù)返回值和函數(shù)類型【例【例6-4】利用函數(shù)調(diào)用實現(xiàn)兩個數(shù)相加。】利用函數(shù)調(diào)用實現(xiàn)兩個數(shù)相加。【分析【分析】編寫編寫sum()實現(xiàn)加法操作,并返回兩數(shù)

12、相加實現(xiàn)加法操作,并返回兩數(shù)相加值;值;在在main()函數(shù)中,實現(xiàn)兩數(shù)的輸入,調(diào)用加函數(shù)中,實現(xiàn)兩數(shù)的輸入,調(diào)用加法函法函數(shù),輸出結(jié)果等。數(shù),輸出結(jié)果等。1、函數(shù)返回值、函數(shù)返回值#include int sum(int x, int y); /函數(shù)原型聲明函數(shù)原型聲明int main( )int s;s=sum(8, 6); /調(diào)用子函數(shù)實現(xiàn)兩個數(shù)相加調(diào)用子函數(shù)實現(xiàn)兩個數(shù)相加 printf(sum=%dn,s);int sum(int x, int y)int z;z=x+y;return(z); /返回兩數(shù)相加的結(jié)果返回兩數(shù)相加的結(jié)果【說明【說明】 函數(shù)的返回值是通過函數(shù)的返回值是通過r

13、eturn語句獲得的。語句獲得的。 當(dāng)不需返回函數(shù)值時,可省去當(dāng)不需返回函數(shù)值時,可省去return語句;語句; return語句的后面可以是變量,也可以是表語句的后面可以是變量,也可以是表達式。達式。 在函數(shù)中如果有多個在函數(shù)中如果有多個return語句,每次調(diào)用語句,每次調(diào)用函數(shù)時,必定只執(zhí)行其中一個函數(shù)時,必定只執(zhí)行其中一個return語句。語句。n【例【例-5】將】將100之間所有的倍數(shù)之間所有的倍數(shù)的數(shù)相加。的數(shù)相加。 #includeint main(void) int trip(int n); int i,s; int flag; s=0; for(i=3;i100;i+) fl

14、ag=trip(i); if(flag=1) s=s+i; printf(1100之間所有之間所有3的倍數(shù)的數(shù)之和為:的倍數(shù)的數(shù)之和為:%d,s); return 0;int trip(int n) if(n % 3=0) return 1; else return 0; 6.2.2 函數(shù)返回值和函數(shù)類型函數(shù)返回值和函數(shù)類型n如果在順序結(jié)構(gòu)的程序中出現(xiàn)多個如果在順序結(jié)構(gòu)的程序中出現(xiàn)多個return語句,則遇到語句,則遇到第一個第一個return語句語句就會結(jié)束當(dāng)前函數(shù)就會結(jié)束當(dāng)前函數(shù)的運行而返回主調(diào)函的運行而返回主調(diào)函數(shù),其它數(shù),其它return語句不再運行。語句不再運行。 1、函數(shù)返回值、函

15、數(shù)返回值6.3 函數(shù)調(diào)用函數(shù)調(diào)用n在程序中,通過對函數(shù)的調(diào)用來執(zhí)行函數(shù)在程序中,通過對函數(shù)的調(diào)用來執(zhí)行函數(shù)體。體。n一個函數(shù)可以被其它函數(shù)多次調(diào)用,每次一個函數(shù)可以被其它函數(shù)多次調(diào)用,每次調(diào)用時可以處理不同的數(shù)據(jù),因此函數(shù)是調(diào)用時可以處理不同的數(shù)據(jù),因此函數(shù)是對不同數(shù)據(jù)進行相同處理的一般程序形式。對不同數(shù)據(jù)進行相同處理的一般程序形式。 6.3.1 函數(shù)調(diào)用的一般形式和過程函數(shù)調(diào)用的一般形式和過程n函數(shù)調(diào)用的一般形式為:函數(shù)調(diào)用的一般形式為:函數(shù)名(實參表)函數(shù)名(實參表)n或表示為:或表示為:函數(shù)名(實參,實參,實參)函數(shù)名(實參,實參,實參)n實參可以是常量、變量和表達式。實參可以是常量、變

16、量和表達式?!纠纠?-6】通過函數(shù)調(diào)用實現(xiàn)輸出之內(nèi)的數(shù)】通過函數(shù)調(diào)用實現(xiàn)輸出之內(nèi)的數(shù)字金字塔,閱讀程序代碼理解函數(shù)調(diào)用的字金字塔,閱讀程序代碼理解函數(shù)調(diào)用的一般形式。一般形式。【分析【分析】n建立函數(shù)建立函數(shù)pyramid(int n )實現(xiàn)打印數(shù)字金字實現(xiàn)打印數(shù)字金字塔的功能,因此該函數(shù)定義成塔的功能,因此該函數(shù)定義成void類型。類型。n在主函數(shù)中,通過調(diào)用在主函數(shù)中,通過調(diào)用pyramid()函數(shù)實函數(shù)實現(xiàn)金字塔的打印。其中括號中的是實參,現(xiàn)金字塔的打印。其中括號中的是實參,將實參傳遞到函數(shù)定義的形參中,即將的將實參傳遞到函數(shù)定義的形參中,即將的值傳遞給。值傳遞給。 #includev

17、oid pyramid(int n) /被調(diào)函數(shù)的定義被調(diào)函數(shù)的定義 int i,j; for(i=1;i=n;i+) for(j=1;j=n-i;j+) printf( ); for(j=1;j=i;j+) printf( %d,i); printf(n); int main(void) /主調(diào)函數(shù)主調(diào)函數(shù) int m; printf(請輸入金字塔行數(shù)的數(shù)值:請輸入金字塔行數(shù)的數(shù)值:); scanf(%d,&m); pyramid(m); /調(diào)用函數(shù)調(diào)用函數(shù)pyramid( ) printf(n);return 0;6.3.1 函數(shù)調(diào)用的一般形式和過程函數(shù)調(diào)用的一般形式和過程n所有的程序都是

18、從所有的程序都是從main( )函數(shù)開始執(zhí)函數(shù)開始執(zhí)行,無論行,無論main( )函數(shù)的位置在哪里。函數(shù)的位置在哪里。n如果如果main( )函數(shù)執(zhí)行過程中遇到某個函函數(shù)執(zhí)行過程中遇到某個函數(shù)數(shù)a() 的調(diào)用,則的調(diào)用,則main( )函數(shù)被暫停執(zhí)函數(shù)被暫停執(zhí)行,轉(zhuǎn)而執(zhí)行相應(yīng)的被調(diào)函數(shù)行,轉(zhuǎn)而執(zhí)行相應(yīng)的被調(diào)函數(shù)a()。n當(dāng)被調(diào)函數(shù)執(zhí)行完后,將返回當(dāng)被調(diào)函數(shù)執(zhí)行完后,將返回main( )函函數(shù),從原來暫停的位置繼續(xù)執(zhí)行數(shù),從原來暫停的位置繼續(xù)執(zhí)行 3、函數(shù)調(diào)用過程、函數(shù)調(diào)用過程n【例【例6-7】引例求解。編寫】引例求解。編寫C語言程序?qū)崿F(xiàn)打語言程序?qū)崿F(xiàn)打印三個正三角,第一個是三行,第二個是四印三

19、個正三角,第一個是三行,第二個是四行,第三個五行,要求其運行結(jié)果如圖所示。行,第三個五行,要求其運行結(jié)果如圖所示?!痉治觥繄D中要求輸出的三個正三角星號的【分析】圖中要求輸出的三個正三角星號的程序代碼是重復(fù)的,不同之處僅僅是輸出程序代碼是重復(fù)的,不同之處僅僅是輸出的行數(shù)不同,因此可將輸出正三角作為被的行數(shù)不同,因此可將輸出正三角作為被調(diào)函數(shù)的功能。而被調(diào)函數(shù)的參數(shù)可設(shè)成調(diào)函數(shù)的功能。而被調(diào)函數(shù)的參數(shù)可設(shè)成正三角形的行數(shù)。正三角形的行數(shù)?!纠纠?-7】引例求解。編寫】引例求解。編寫C語言程序?qū)崿F(xiàn)語言程序?qū)崿F(xiàn)打印三個正三角,第一個是三行,第二打印三個正三角,第一個是三行,第二個是四行,第三個五行,

20、要求其運行結(jié)個是四行,第三個五行,要求其運行結(jié)果如圖所示。果如圖所示。#includeint main(void) void printstar(int m); /被調(diào)函數(shù)聲明被調(diào)函數(shù)聲明 printstar(3); printf(函數(shù)是語言程序的基本單位函數(shù)是語言程序的基本單位n); printstar(4); printf(程序設(shè)計時程序員總是將復(fù)雜程序設(shè)計時程序員總是將復(fù)雜問題分解問題分解n); printstar(5); printf(將小程序拼接起來能解決大而復(fù)雜的問題將小程序拼接起來能解決大而復(fù)雜的問題n); return 0;void printstar(int m) /被調(diào)函數(shù)

21、定義被調(diào)函數(shù)定義 int i,j,k;for(i=1;i=m;i+) for(k=1;k=10-i;k+) printf( ); for(j=1;j=2*i-1;j+) printf(*); printf(n);6.3.2 函數(shù)調(diào)用的參數(shù)傳遞函數(shù)調(diào)用的參數(shù)傳遞n在函數(shù)的定義和調(diào)用過程中會用到函數(shù)的在函數(shù)的定義和調(diào)用過程中會用到函數(shù)的參數(shù),函數(shù)的參數(shù)有兩種:形式參數(shù)和實參數(shù),函數(shù)的參數(shù)有兩種:形式參數(shù)和實際參數(shù),分別簡稱為形參和實參。際參數(shù),分別簡稱為形參和實參。6.3.2 函數(shù)調(diào)用的參數(shù)傳遞函數(shù)調(diào)用的參數(shù)傳遞1、形參與實參的區(qū)別、形參與實參的區(qū)別n形式參數(shù)又稱為形參,它用來說明某函數(shù)在被形式參

22、數(shù)又稱為形參,它用來說明某函數(shù)在被調(diào)用時,需要傳給該函數(shù)調(diào)用時,需要傳給該函數(shù)多少個變量多少個變量,以及,以及變變量的類型量的類型。因此。因此“形參表形參表”是一種是一種形式上形式上的定的定義,通過這些義,通過這些“符號符號”,調(diào)用函數(shù)就知道應(yīng)該,調(diào)用函數(shù)就知道應(yīng)該給函數(shù)傳遞什么樣的數(shù)據(jù)。給函數(shù)傳遞什么樣的數(shù)據(jù)。n實際參數(shù)又稱為實參,它是調(diào)用函數(shù)向被調(diào)用實際參數(shù)又稱為實參,它是調(diào)用函數(shù)向被調(diào)用函數(shù)提供的一些函數(shù)提供的一些具體信息具體信息(數(shù)據(jù)),可以是常(數(shù)據(jù)),可以是常量、變量或表達式,它必須有具體的值。量、變量或表達式,它必須有具體的值。n主調(diào)函數(shù)對某函數(shù)調(diào)用時,必須按順序主調(diào)函數(shù)對某函數(shù)

23、調(diào)用時,必須按順序?qū)崊?zhǔn)確地傳遞給形參,被調(diào)函數(shù)通將實參準(zhǔn)確地傳遞給形參,被調(diào)函數(shù)通過形參接收相應(yīng)的數(shù)據(jù),執(zhí)行函數(shù)體。過形參接收相應(yīng)的數(shù)據(jù),執(zhí)行函數(shù)體。 主調(diào)函數(shù)主調(diào)函數(shù) 函數(shù)名函數(shù)名(實參,實參,實參實參,實參,實參) 被調(diào)用函數(shù)被調(diào)用函數(shù) 函數(shù)名函數(shù)名(形參,形參,形參形參,形參,形參)1、形參與實參的區(qū)別、形參與實參的區(qū)別【例【例6-8】從程序中分析實參和形參的作用。】從程序中分析實參和形參的作用。#includeint max(int x, int y) ;int main(void) /主調(diào)函數(shù)主調(diào)函數(shù) int a,b,c; scanf(%d,%d,&a,&b); c=max(a,

24、b); /調(diào)用調(diào)用max( )函數(shù)函數(shù) printf(Max is %d,c); return 0;int max(int x, int y) /被調(diào)函數(shù)定義被調(diào)函數(shù)定義int z;x=x+8;y=y+12;z=xy?x:y;return(z);調(diào)用函數(shù)調(diào)用函數(shù)main()函數(shù)函數(shù) c = max( a , b) 被調(diào)用函數(shù)被調(diào)用函數(shù) int max(int x, int y)函數(shù)體函數(shù)體 int z;x=x+8;y=y+12;z=xy?x:y;return(z);【說明【說明】 形參是單個的變量名,實參可以是常量、變形參是單個的變量名,實參可以是常量、變量或表達式,如:量或表達式,如:c=m

25、ax(a,b+2);無論實參是常量、變量或表達式,它們都有確定無論實參是常量、變量或表達式,它們都有確定的值,在進行函數(shù)調(diào)用時,把這些值傳送給形的值,在進行函數(shù)調(diào)用時,把這些值傳送給形參。因此,應(yīng)預(yù)先用賦值、輸入等辦法使實參參。因此,應(yīng)預(yù)先用賦值、輸入等辦法使實參獲得確定的值。獲得確定的值。 實參與形參之間的個數(shù)及類型必須一一對應(yīng)。實參與形參之間的個數(shù)及類型必須一一對應(yīng)。 形參只有被調(diào)用時,才分配內(nèi)存單元,有確形參只有被調(diào)用時,才分配內(nèi)存單元,有確定的值;調(diào)用結(jié)束時就釋放所分配的內(nèi)存單元,定的值;調(diào)用結(jié)束時就釋放所分配的內(nèi)存單元,形參只有在被調(diào)用函數(shù)內(nèi)有效。形參只有在被調(diào)用函數(shù)內(nèi)有效。 在用戶

26、自定義函數(shù)中,形參必須指定數(shù)據(jù)類在用戶自定義函數(shù)中,形參必須指定數(shù)據(jù)類型。形參的類型聲明可以放在函數(shù)名后的括號型。形參的類型聲明可以放在函數(shù)名后的括號中,如本例中中,如本例中 int max(int x, int y);也可以放在函數(shù)的頭部與函數(shù)體之間。例如:也可以放在函數(shù)的頭部與函數(shù)體之間。例如: int max(x, y) int x, y; 【例【例6-9】兩變量數(shù)值的交換。通過該例題源程】兩變量數(shù)值的交換。通過該例題源程序代碼分析實參和形參之間的相互影響。序代碼分析實參和形參之間的相互影響。#includeint main(void) void swap(int x,int y); i

27、nt a,b;printf(Please input a and b:);scanf(%d %d,&a,&b);printf(交換前和的值:交換前和的值:a=%d, b=%dn,a,b);swap(a,b); printf(交換后和的值:交換后和的值:a=%d, b=%dn,a,b); return 0;void swap(int x,int y) int temp; temp=x; x=y;y=temp;printf(在函數(shù)在函數(shù)swap()中:中:x=%d, y=%dn,x,y);【分析【分析】n從運行結(jié)果看主函數(shù)中,的值在調(diào)用從運行結(jié)果看主函數(shù)中,的值在調(diào)用swap()函數(shù)后并沒有交換,

28、而在函數(shù)后并沒有交換,而在swap()函數(shù)函數(shù)中,的值交換了。中,的值交換了。n原因是實參,和形參,分別占用不同原因是實參,和形參,分別占用不同的內(nèi)存單元,在的內(nèi)存單元,在swap()函數(shù)中,形參和函數(shù)中,形參和的值互換了,只是在和的內(nèi)存單元的值互的值互換了,只是在和的內(nèi)存單元的值互換了,但對和內(nèi)存單元中的值不產(chǎn)生影響,換了,但對和內(nèi)存單元中的值不產(chǎn)生影響,如圖如圖6-11所示。當(dāng)所示。當(dāng)swap()函數(shù)執(zhí)行結(jié)束后就函數(shù)執(zhí)行結(jié)束后就釋放和的內(nèi)存單元,而其中和交換后釋放和的內(nèi)存單元,而其中和交換后的數(shù)值也隨之釋放了。因此返回主函數(shù)的數(shù)值也隨之釋放了。因此返回主函數(shù)main()后輸出的和的值沒有交

29、換。后輸出的和的值沒有交換。 551919調(diào)用前519195調(diào)用后6.3.3 函數(shù)原型說明函數(shù)原型說明n如果自定義函數(shù)被放在主調(diào)函數(shù)的后面,則需如果自定義函數(shù)被放在主調(diào)函數(shù)的后面,則需要在函數(shù)調(diào)用前,加上函數(shù)原型說明。要在函數(shù)調(diào)用前,加上函數(shù)原型說明。n在在C語言中,函數(shù)原型說明也稱為語言中,函數(shù)原型說明也稱為“函數(shù)聲函數(shù)聲明明”,利用它說明函數(shù)的類型和參數(shù)情況,在,利用它說明函數(shù)的類型和參數(shù)情況,在程序編譯階段對調(diào)用函數(shù)的合法性進行全面檢程序編譯階段對調(diào)用函數(shù)的合法性進行全面檢查。查。n函數(shù)原型說明的一般格式:函數(shù)原型說明的一般格式:(形參列表形參列表);n函數(shù)原型說明語句最后的分號不能省略

30、,其作函數(shù)原型說明語句最后的分號不能省略,其作用是表示該語句是進行函數(shù)聲明而不是函數(shù)定用是表示該語句是進行函數(shù)聲明而不是函數(shù)定義。義。 6.5 變量與函數(shù)變量與函數(shù)n變量的作用域變量的作用域: 有效作用范圍。在這個范圍有效作用范圍。在這個范圍內(nèi)變量是有效的內(nèi)變量是有效的, 超出這個范圍,為變量分超出這個范圍,為變量分配的存儲空間被釋放,在范圍外引用變量配的存儲空間被釋放,在范圍外引用變量是非法的,會產(chǎn)生錯誤。是非法的,會產(chǎn)生錯誤。n語言中所有的變量都有自己的作用域。語言中所有的變量都有自己的作用域。變量定義的位置不同,其作用域也不同。變量定義的位置不同,其作用域也不同。 6.5.1 內(nèi)部變量和

31、外部變量內(nèi)部變量和外部變量1、內(nèi)部變量、內(nèi)部變量n在一個函數(shù)內(nèi)部定義的變量是在一個函數(shù)內(nèi)部定義的變量是內(nèi)部變量內(nèi)部變量,它只在該函數(shù)范圍內(nèi)有效。它只在該函數(shù)范圍內(nèi)有效。 n只有在包含變量定義的函數(shù)內(nèi)部才能使只有在包含變量定義的函數(shù)內(nèi)部才能使用被定義的變量,在此函數(shù)之外就不能用被定義的變量,在此函數(shù)之外就不能使用這些變量了。所以內(nèi)部變量也稱為使用這些變量了。所以內(nèi)部變量也稱為“局部變量局部變量”。 void float f1(int a) int b,c; .void char f2 (int x,int y) int i,j; int main(void) int m,n; .變量變量x、y、

32、i、j的作用域的作用域變量變量m、n的作的作用域用域變量變量a、b、c的作用域的作用域6.5.1 內(nèi)部變量和外部變量內(nèi)部變量和外部變量n從上面程序中看到在函數(shù)內(nèi)部定義的變從上面程序中看到在函數(shù)內(nèi)部定義的變量只在函數(shù)內(nèi)部有效。量只在函數(shù)內(nèi)部有效。n而函數(shù)的形式參數(shù)也是局部變量而函數(shù)的形式參數(shù)也是局部變量,其它其它函數(shù)不能訪問它們。如函數(shù)不能訪問它們。如f1( )中的形參中的形參只在只在f1中有效。中有效。 1、內(nèi)部變量、內(nèi)部變量【例【例6-13】分析如下程序,寫出在】分析如下程序,寫出在main( )函函數(shù)中調(diào)用數(shù)中調(diào)用sub( )函數(shù)前后、的值及在函數(shù)前后、的值及在sub( )函數(shù)中、的值。函數(shù)中、的值。 #includeint main(void) void sub(void);int a,b; a=3; b=4; printf(main:a=%d,b=%dn,a,b); sub(); printf(ma

溫馨提示

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

最新文檔

評論

0/150

提交評論