版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第六章第六章 函函 數(shù)數(shù)6.1 引例引例6.2 C語(yǔ)言函數(shù)的基本概念語(yǔ)言函數(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è)計(jì)模塊化程序設(shè)計(jì)6.1 引引 例例引例:編程實(shí)現(xiàn)如圖結(jié)果。引例:編程實(shí)現(xiàn)如圖結(jié)果。6.1 引引 例例【分析】【分析】n從圖中看到,三角形星號(hào)圖形出現(xiàn)了三次從圖中看到,三角形星號(hào)圖形出現(xiàn)了三次n能否僅編寫一段程序代碼,要輸出星號(hào)圖形能否僅編寫一段程序代碼,要輸出星號(hào)圖形時(shí)就使用該段代碼?時(shí)就使用該段代碼?nC語(yǔ)言提供了這樣的功能,以語(yǔ)言提供了這樣的功能,以函數(shù)函數(shù)的組織形的組織形式編寫代碼
2、,當(dāng)使用時(shí)就式編寫代碼,當(dāng)使用時(shí)就調(diào)用調(diào)用此函數(shù)。此函數(shù)。 6.1 引引 例例【知識(shí)點(diǎn)】【知識(shí)點(diǎn)】1. 模塊化程序設(shè)計(jì)。模塊化程序設(shè)計(jì)。2. 函數(shù)。函數(shù)。6.2 C語(yǔ)言函數(shù)的基本概念語(yǔ)言函數(shù)的基本概念nC語(yǔ)言中,一段有獨(dú)立功能,又能夠多次使語(yǔ)言中,一段有獨(dú)立功能,又能夠多次使用且具有獨(dú)立名稱與一定的輸入、輸出的用且具有獨(dú)立名稱與一定的輸入、輸出的代碼,稱為代碼,稱為C語(yǔ)言的函數(shù)。語(yǔ)言的函數(shù)。 n函數(shù)是函數(shù)是C語(yǔ)言程序的基本組成單元語(yǔ)言程序的基本組成單元n一個(gè)一個(gè)C程序由一個(gè)程序由一個(gè)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ù)名和形參列表組成參列表組成 大括號(hào)括起來的若干語(yǔ)句是函數(shù)體,由完成某一功能的大括號(hào)括起來的若干語(yǔ)句是函數(shù)體,由完成某一功能的C語(yǔ)句組成語(yǔ)句組成6.2.1 函數(shù)的定義函數(shù)的定義n在使用一個(gè)函數(shù)前,必須先對(duì)其進(jìn)行定義在使用一個(gè)函數(shù)前,必須先對(duì)其進(jìn)行定義 n程序中如果調(diào)用了某個(gè)函數(shù),該函數(shù)就會(huì)在完成程序中如果調(diào)用了某個(gè)函數(shù),該函數(shù)就會(huì)在完成特定工作后,返回到調(diào)用它的地方特定工作后,返回到調(diào)用
4、它的地方 n按照返回結(jié)果不同有如下兩種情況按照返回結(jié)果不同有如下兩種情況 函數(shù)經(jīng)過一系列運(yùn)算,得出一個(gè)運(yùn)算結(jié)果,并需要返回函數(shù)經(jīng)過一系列運(yùn)算,得出一個(gè)運(yùn)算結(jié)果,并需要返回運(yùn)算結(jié)果運(yùn)算結(jié)果 函數(shù)只是完成一系列操作步驟,不需要返回任何結(jié)果。函數(shù)只是完成一系列操作步驟,不需要返回任何結(jié)果。 6.2.1 函數(shù)的定義函數(shù)的定義【例【例6-1】利用函數(shù)實(shí)現(xiàn)從鍵盤輸入兩個(gè)】利用函數(shù)實(shí)現(xiàn)從鍵盤輸入兩個(gè)數(shù),輸出最大值。數(shù),輸出最大值。1、返回結(jié)果的函數(shù)定義、返回結(jié)果的函數(shù)定義#includeint max(int x,int y) /* 返回結(jié)果的函數(shù)定義返回結(jié)果的函數(shù)定義 * int z; z=xy ? x:
5、y; /* z為為x與與y中最大的值中最大的值 */ printf(max()函數(shù)中找出了兩數(shù)的最大值。函數(shù)中找出了兩數(shù)的最大值。n); return(z); int main(void) int a,b,c; printf(請(qǐng)輸入數(shù)值請(qǐng)輸入數(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ù)的定義函
6、數(shù)的定義n返回結(jié)果的函數(shù)定義形式為:返回結(jié)果的函數(shù)定義形式為: 返回值類型標(biāo)識(shí)符返回值類型標(biāo)識(shí)符 函數(shù)名(形參列表)函數(shù)名(形參列表) 變量聲明變量聲明 語(yǔ)句部分語(yǔ)句部分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語(yǔ)句,也可以省略。語(yǔ)句,也可以省略。nvoid類型的函數(shù)雖然不直接返回一個(gè)值,但它的類型的函數(shù)雖然不直
7、接返回一個(gè)值,但它的作用通??梢詫?shí)現(xiàn)屏幕輸出等功能。作用通??梢詫?shí)現(xiàn)屏幕輸出等功能。2、不返回結(jié)果的函數(shù)定義、不返回結(jié)果的函數(shù)定義6.2.1 函數(shù)的定義函數(shù)的定義【例【例6-2】編寫函數(shù)實(shí)現(xiàn)打印五行十個(gè)星號(hào)。】編寫函數(shù)實(shí)現(xiàn)打印五行十個(gè)星號(hào)。 【分析】【分析】n主調(diào)函數(shù)輸入星號(hào)的行數(shù)及每行星號(hào)數(shù),主調(diào)函數(shù)輸入星號(hào)的行數(shù)及每行星號(hào)數(shù),并調(diào)用打印星號(hào)函數(shù);并調(diào)用打印星號(hào)函數(shù);n建立建立printstar(int m,int n)函數(shù)實(shí)現(xiàn)打印星函數(shù)實(shí)現(xiàn)打印星號(hào)的功能,將星號(hào)直接屏幕輸出。號(hào)的功能,將星號(hào)直接屏幕輸出。 2、不返回結(jié)果的函數(shù)定義、不返回結(jié)果的函數(shù)定義#includeint main(vo
8、id) void printstar(int m,int n); int a,b; printf(請(qǐng)輸入要打印星號(hào)的行數(shù)和每行的星號(hào)數(shù):請(qǐng)輸入要打印星號(hào)的行數(shù)和每行的星號(hào)數(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é)果的定
9、義函數(shù)的定義,不返回結(jié)果的定義 */ int i,j; printf(被調(diào)函數(shù)被調(diào)函數(shù)printstar(),要打印五行十個(gè)星號(hào)。,要打印五行十個(gè)星號(hào)。n); for(i=1;i=m;i+) for(j=1;j=n;j+) printf(*); printf(n);【說明】【說明】 函數(shù)定義的第一行是函數(shù)首部,后面不能加分號(hào)。函數(shù)定義的第一行是函數(shù)首部,后面不能加分號(hào)。 函數(shù)首部的類型標(biāo)識(shí)符是指函數(shù)類型。如果省略函函數(shù)首部的類型標(biāo)識(shí)符是指函數(shù)類型。如果省略函數(shù)的類型標(biāo)識(shí)符,則默認(rèn)的數(shù)據(jù)類型為數(shù)的類型標(biāo)識(shí)符,則默認(rèn)的數(shù)據(jù)類型為int型。型。 函數(shù)名必須是有效的標(biāo)識(shí)符。函數(shù)名必須是有效的標(biāo)識(shí)符。
10、形參列表中給出函數(shù)所有形參的名稱和類型。各個(gè)形參列表中給出函數(shù)所有形參的名稱和類型。各個(gè)形參之間用逗號(hào)分隔,每個(gè)形參前面的類型必須分形參之間用逗號(hào)分隔,每個(gè)形參前面的類型必須分別寫明。別寫明。 函數(shù)體寫在一對(duì)大括號(hào)中,包括變量聲明和語(yǔ)句部函數(shù)體寫在一對(duì)大括號(hào)中,包括變量聲明和語(yǔ)句部分。分。6.2.2 函數(shù)返回值和函數(shù)類型函數(shù)返回值和函數(shù)類型n從函數(shù)返回值的類型來看,有兩種類型:從函數(shù)返回值的類型來看,有兩種類型:有確定的運(yùn)算結(jié)果返回給主調(diào)函數(shù)有確定的運(yùn)算結(jié)果返回給主調(diào)函數(shù)沒有確定的運(yùn)算結(jié)果返回給主調(diào)函數(shù)沒有確定的運(yùn)算結(jié)果返回給主調(diào)函數(shù)1、函數(shù)返回值、函數(shù)返回值6.2.2 函數(shù)返回值和函數(shù)類函數(shù)
11、返回值和函數(shù)類型型n函數(shù)結(jié)果返回形式:函數(shù)結(jié)果返回形式:return 返回值表達(dá)式;返回值表達(dá)式;n上述語(yǔ)句也可表示成:上述語(yǔ)句也可表示成:return (返回值表達(dá)式返回值表達(dá)式);nreturn語(yǔ)句的功能有兩個(gè):一是結(jié)束子函語(yǔ)句的功能有兩個(gè):一是結(jié)束子函數(shù)的運(yùn)行;二是先求解表達(dá)式的值,然后數(shù)的運(yùn)行;二是先求解表達(dá)式的值,然后返回調(diào)用函數(shù),并將返回調(diào)用函數(shù),并將“返回值表達(dá)式返回值表達(dá)式”的的值帶給調(diào)用函數(shù)。值帶給調(diào)用函數(shù)。 1、函數(shù)返回值、函數(shù)返回值6.2.2 函數(shù)返回值和函數(shù)類型函數(shù)返回值和函數(shù)類型【例【例6-4】利用函數(shù)調(diào)用實(shí)現(xiàn)兩個(gè)數(shù)相加?!坷煤瘮?shù)調(diào)用實(shí)現(xiàn)兩個(gè)數(shù)相加?!痉治觥俊痉治觥?/p>
12、編寫編寫sum()實(shí)現(xiàn)加法操作,并返回兩數(shù)相加實(shí)現(xiàn)加法操作,并返回兩數(shù)相加值;值;在在main()函數(shù)中,實(shí)現(xiàn)兩數(shù)的輸入,調(diào)用加函數(shù)中,實(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ù)實(shí)現(xiàn)兩個(gè)數(shù)相加調(diào)用子函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)相加 printf(sum=%dn,s);int sum(int x, int y)int z;z=x+y;return(z); /返回兩數(shù)相加的結(jié)果返回兩數(shù)相加的結(jié)果【說明】【說
13、明】 函數(shù)的返回值是通過函數(shù)的返回值是通過return語(yǔ)句獲得的。語(yǔ)句獲得的。 當(dāng)不需返回函數(shù)值時(shí),可省去當(dāng)不需返回函數(shù)值時(shí),可省去return語(yǔ)句;語(yǔ)句; return語(yǔ)句的后面可以是變量,也可以是表語(yǔ)句的后面可以是變量,也可以是表達(dá)式。達(dá)式。 在函數(shù)中如果有多個(gè)在函數(shù)中如果有多個(gè)return語(yǔ)句,每次調(diào)用語(yǔ)句,每次調(diào)用函數(shù)時(shí),必定只執(zhí)行其中一個(gè)函數(shù)時(shí),必定只執(zhí)行其中一個(gè)return語(yǔ)句。語(yǔ)句。n【例【例-5】將】將100之間所有的倍數(shù)之間所有的倍數(shù)的數(shù)相加。的數(shù)相加。 #includeint main(void) int trip(int n); int i,s; int flag; s=
14、0; for(i=3;i100;i+) flag=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)多個(gè)如果在順序結(jié)構(gòu)的程序中出現(xiàn)多個(gè)return語(yǔ)句,則遇到語(yǔ)句,則遇到第一個(gè)第一個(gè)return語(yǔ)句語(yǔ)句就會(huì)結(jié)束當(dāng)前函數(shù)就會(huì)結(jié)束當(dāng)前函數(shù)的運(yùn)行而返回主調(diào)函的運(yùn)行而返回主調(diào)函數(shù),其它數(shù),其它return語(yǔ)句
15、不再運(yùn)行。語(yǔ)句不再運(yùn)行。 1、函數(shù)返回值、函數(shù)返回值6.3 函數(shù)調(diào)用函數(shù)調(diào)用n在程序中,通過對(duì)函數(shù)的調(diào)用來執(zhí)行函數(shù)在程序中,通過對(duì)函數(shù)的調(diào)用來執(zhí)行函數(shù)體。體。n一個(gè)函數(shù)可以被其它函數(shù)多次調(diào)用,每次一個(gè)函數(shù)可以被其它函數(shù)多次調(diào)用,每次調(diào)用時(shí)可以處理不同的數(shù)據(jù),因此函數(shù)是調(diào)用時(shí)可以處理不同的數(shù)據(jù),因此函數(shù)是對(duì)不同數(shù)據(jù)進(jìn)行相同處理的一般程序形式。對(duì)不同數(shù)據(jù)進(jìn)行相同處理的一般程序形式。 6.3.1 函數(shù)調(diào)用的一般形式和過程函數(shù)調(diào)用的一般形式和過程n函數(shù)調(diào)用的一般形式為:函數(shù)調(diào)用的一般形式為:函數(shù)名(實(shí)參表)函數(shù)名(實(shí)參表)n或表示為:或表示為:函數(shù)名(實(shí)參,實(shí)參,實(shí)參)函數(shù)名(實(shí)參,實(shí)參,實(shí)參)n實(shí)參
16、可以是常量、變量和表達(dá)式。實(shí)參可以是常量、變量和表達(dá)式?!纠纠?-6】通過函數(shù)調(diào)用實(shí)現(xiàn)輸出之內(nèi)的數(shù)】通過函數(shù)調(diào)用實(shí)現(xiàn)輸出之內(nèi)的數(shù)字金字塔,閱讀程序代碼理解函數(shù)調(diào)用的字金字塔,閱讀程序代碼理解函數(shù)調(diào)用的一般形式。一般形式?!痉治觥俊痉治觥縩建立函數(shù)建立函數(shù)pyramid(int n )實(shí)現(xiàn)打印數(shù)字金字實(shí)現(xiàn)打印數(shù)字金字塔的功能,因此該函數(shù)定義成塔的功能,因此該函數(shù)定義成void類型。類型。n在主函數(shù)中,通過調(diào)用在主函數(shù)中,通過調(diào)用pyramid()函數(shù)實(shí)函數(shù)實(shí)現(xiàn)金字塔的打印。其中括號(hào)中的是實(shí)參,現(xiàn)金字塔的打印。其中括號(hào)中的是實(shí)參,將實(shí)參傳遞到函數(shù)定義的形參中,即將的將實(shí)參傳遞到函數(shù)定義的形參中,
17、即將的值傳遞給。值傳遞給。 #includevoid 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(請(qǐng)輸入金字塔行數(shù)的數(shù)值:請(qǐng)輸入金字塔行數(shù)的數(shù)值:); scanf(%d,&m); pyramid(m); /調(diào)用函數(shù)調(diào)用函數(shù)pyramid( ) printf(n);return 0;6.3.1 函數(shù)調(diào)用的
18、一般形式和過程函數(shù)調(diào)用的一般形式和過程n所有的程序都是從所有的程序都是從main( )函數(shù)開始執(zhí)函數(shù)開始執(zhí)行,無論行,無論main( )函數(shù)的位置在哪里。函數(shù)的位置在哪里。n如果如果main( )函數(shù)執(zhí)行過程中遇到某個(gè)函函數(shù)執(zhí)行過程中遇到某個(gè)函數(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語(yǔ)言程序?qū)崿F(xiàn)打語(yǔ)
19、言程序?qū)崿F(xiàn)打印三個(gè)正三角,第一個(gè)是三行,第二個(gè)是四印三個(gè)正三角,第一個(gè)是三行,第二個(gè)是四行,第三個(gè)五行,要求其運(yùn)行結(jié)果如圖所示。行,第三個(gè)五行,要求其運(yùn)行結(jié)果如圖所示?!痉治觥繄D中要求輸出的三個(gè)正三角星號(hào)的【分析】圖中要求輸出的三個(gè)正三角星號(hào)的程序代碼是重復(fù)的,不同之處僅僅是輸出程序代碼是重復(fù)的,不同之處僅僅是輸出的行數(shù)不同,因此可將輸出正三角作為被的行數(shù)不同,因此可將輸出正三角作為被調(diào)函數(shù)的功能。而被調(diào)函數(shù)的參數(shù)可設(shè)成調(diào)函數(shù)的功能。而被調(diào)函數(shù)的參數(shù)可設(shè)成正三角形的行數(shù)。正三角形的行數(shù)?!纠纠?-7】引例求解。編寫】引例求解。編寫C語(yǔ)言程序?qū)崿F(xiàn)語(yǔ)言程序?qū)崿F(xiàn)打印三個(gè)正三角,第一個(gè)是三行,第二打
20、印三個(gè)正三角,第一個(gè)是三行,第二個(gè)是四行,第三個(gè)五行,要求其運(yùn)行結(jié)個(gè)是四行,第三個(gè)五行,要求其運(yùn)行結(jié)果如圖所示。果如圖所示。#includeint main(void) void printstar(int m); /被調(diào)函數(shù)聲明被調(diào)函數(shù)聲明 printstar(3); printf(函數(shù)是語(yǔ)言程序的基本單位函數(shù)是語(yǔ)言程序的基本單位n); printstar(4); printf(程序設(shè)計(jì)時(shí)程序員總是將復(fù)雜程序設(shè)計(jì)時(shí)程序員總是將復(fù)雜問題分解問題分解n); printstar(5); printf(將小程序拼接起來能解決大而復(fù)雜的問題將小程序拼接起來能解決大而復(fù)雜的問題n); return 0;
21、void printstar(int m) /被調(diào)函數(shù)定義被調(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)用過程中會(huì)用到函數(shù)的在函數(shù)的定義和調(diào)用過程中會(huì)用到函數(shù)的參數(shù),函數(shù)的參數(shù)有兩種:形式參數(shù)和實(shí)參數(shù),函數(shù)的參數(shù)有兩種:形式參數(shù)和實(shí)際參數(shù),分別簡(jiǎn)稱為形參和實(shí)參。際參數(shù),分別簡(jiǎn)稱為形參和實(shí)參。6.3.2 函數(shù)調(diào)用的參數(shù)傳遞函數(shù)調(diào)用的參數(shù)傳遞1、形參與實(shí)參的區(qū)別、形參與實(shí)參
22、的區(qū)別n形式參數(shù)又稱為形參,它用來說明某函數(shù)在被形式參數(shù)又稱為形參,它用來說明某函數(shù)在被調(diào)用時(shí),需要傳給該函數(shù)調(diào)用時(shí),需要傳給該函數(shù)多少個(gè)變量多少個(gè)變量,以及,以及變變量的類型量的類型。因此。因此“形參表形參表”是一種是一種形式上形式上的定的定義,通過這些義,通過這些“符號(hào)符號(hào)”,調(diào)用函數(shù)就知道應(yīng)該,調(diào)用函數(shù)就知道應(yīng)該給函數(shù)傳遞什么樣的數(shù)據(jù)。給函數(shù)傳遞什么樣的數(shù)據(jù)。n實(shí)際參數(shù)又稱為實(shí)參,它是調(diào)用函數(shù)向被調(diào)用實(shí)際參數(shù)又稱為實(shí)參,它是調(diào)用函數(shù)向被調(diào)用函數(shù)提供的一些函數(shù)提供的一些具體信息具體信息(數(shù)據(jù)),可以是常(數(shù)據(jù)),可以是常量、變量或表達(dá)式,它必須有具體的值。量、變量或表達(dá)式,它必須有具體的值
23、。n主調(diào)函數(shù)對(duì)某函數(shù)調(diào)用時(shí),必須按順序主調(diào)函數(shù)對(duì)某函數(shù)調(diào)用時(shí),必須按順序?qū)?shí)參準(zhǔn)確地傳遞給形參,被調(diào)函數(shù)通將實(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ù)名(實(shí)參,實(shí)參,實(shí)參實(shí)參,實(shí)參,實(shí)參) 被調(diào)用函數(shù)被調(diào)用函數(shù) 函數(shù)名函數(shù)名(形參,形參,形參形參,形參,形參)1、形參與實(shí)參的區(qū)別、形參與實(shí)參的區(qū)別【例【例6-8】從程序中分析實(shí)參和形參的作用。】從程序中分析實(shí)參和形參的作用。#includeint max(int x, int y) ;int main(void) /主調(diào)函數(shù)主調(diào)函數(shù) int a,b,c; s
24、canf(%d,%d,&a,&b); c=max(a,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);【說明】【說明】 形參是單個(gè)的變量名,實(shí)參可以是常量、變形參
25、是單個(gè)的變量名,實(shí)參可以是常量、變量或表達(dá)式,如:量或表達(dá)式,如:c=max(a,b+2);無論實(shí)參是常量、變量或表達(dá)式,它們都有確定無論實(shí)參是常量、變量或表達(dá)式,它們都有確定的值,在進(jìn)行函數(shù)調(diào)用時(shí),把這些值傳送給形的值,在進(jìn)行函數(shù)調(diào)用時(shí),把這些值傳送給形參。因此,應(yīng)預(yù)先用賦值、輸入等辦法使實(shí)參參。因此,應(yīng)預(yù)先用賦值、輸入等辦法使實(shí)參獲得確定的值。獲得確定的值。 實(shí)參與形參之間的個(gè)數(shù)及類型必須一一對(duì)應(yīng)。實(shí)參與形參之間的個(gè)數(shù)及類型必須一一對(duì)應(yīng)。 形參只有被調(diào)用時(shí),才分配內(nèi)存單元,有確形參只有被調(diào)用時(shí),才分配內(nèi)存單元,有確定的值;調(diào)用結(jié)束時(shí)就釋放所分配的內(nèi)存單元,定的值;調(diào)用結(jié)束時(shí)就釋放所分配的內(nèi)
26、存單元,形參只有在被調(diào)用函數(shù)內(nèi)有效。形參只有在被調(diào)用函數(shù)內(nèi)有效。 在用戶自定義函數(shù)中,形參必須指定數(shù)據(jù)類在用戶自定義函數(shù)中,形參必須指定數(shù)據(jù)類型。形參的類型聲明可以放在函數(shù)名后的括號(hào)型。形參的類型聲明可以放在函數(shù)名后的括號(hào)中,如本例中中,如本例中 int max(int x, int y);也可以放在函數(shù)的頭部與函數(shù)體之間。例如:也可以放在函數(shù)的頭部與函數(shù)體之間。例如: int max(x, y) int x, y; 【例【例6-9】?jī)勺兞繑?shù)值的交換。通過該例題源程】?jī)勺兞繑?shù)值的交換。通過該例題源程序代碼分析實(shí)參和形參之間的相互影響。序代碼分析實(shí)參和形參之間的相互影響。#includeint
27、main(void) void swap(int x,int y); int 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從運(yùn)
28、行結(jié)果看主函數(shù)中,的值在調(diào)用從運(yùn)行結(jié)果看主函數(shù)中,的值在調(diào)用swap()函數(shù)后并沒有交換,而在函數(shù)后并沒有交換,而在swap()函數(shù)函數(shù)中,的值交換了。中,的值交換了。n原因是實(shí)參,和形參,分別占用不同原因是實(shí)參,和形參,分別占用不同的內(nèi)存單元,在的內(nèi)存單元,在swap()函數(shù)中,形參和函數(shù)中,形參和的值互換了,只是在和的內(nèi)存單元的值互的值互換了,只是在和的內(nèi)存單元的值互換了,但對(duì)和內(nèi)存單元中的值不產(chǎn)生影響,換了,但對(duì)和內(nèi)存單元中的值不產(chǎn)生影響,如圖如圖6-11所示。當(dāng)所示。當(dāng)swap()函數(shù)執(zhí)行結(jié)束后就函數(shù)執(zhí)行結(jié)束后就釋放和的內(nèi)存單元,而其中和交換后釋放和的內(nèi)存單元,而其中和交換后的數(shù)值也隨
29、之釋放了。因此返回主函數(shù)的數(shù)值也隨之釋放了。因此返回主函數(shù)main()后輸出的和的值沒有交換。后輸出的和的值沒有交換。 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語(yǔ)言中,函數(shù)原型說明也稱為語(yǔ)言中,函數(shù)原型說明也稱為“函數(shù)聲函數(shù)聲明明”,利用它說明函數(shù)的類型和參數(shù)情況,在,利用它說明函數(shù)的類型和參數(shù)情況,在程序編譯階段對(duì)調(diào)用函數(shù)的合法性進(jìn)行全面檢程序編譯階段對(duì)調(diào)用函數(shù)的合法性進(jìn)行全面檢查。查。n函數(shù)原型說明的一
30、般格式:函數(shù)原型說明的一般格式:(形參列表形參列表);n函數(shù)原型說明語(yǔ)句最后的分號(hào)不能省略,其作函數(shù)原型說明語(yǔ)句最后的分號(hào)不能省略,其作用是表示該語(yǔ)句是進(jìn)行函數(shù)聲明而不是函數(shù)定用是表示該語(yǔ)句是進(jìn)行函數(shù)聲明而不是函數(shù)定義。義。 6.5 變量與函數(shù)變量與函數(shù)n變量的作用域變量的作用域: 有效作用范圍。在這個(gè)范圍有效作用范圍。在這個(gè)范圍內(nèi)變量是有效的內(nèi)變量是有效的, 超出這個(gè)范圍,為變量分超出這個(gè)范圍,為變量分配的存儲(chǔ)空間被釋放,在范圍外引用變量配的存儲(chǔ)空間被釋放,在范圍外引用變量是非法的,會(huì)產(chǎn)生錯(cuò)誤。是非法的,會(huì)產(chǎn)生錯(cuò)誤。n語(yǔ)言中所有的變量都有自己的作用域。語(yǔ)言中所有的變量都有自己的作用域。變量定
31、義的位置不同,其作用域也不同。變量定義的位置不同,其作用域也不同。 6.5.1 內(nèi)部變量和外部變量?jī)?nèi)部變量和外部變量1、內(nèi)部變量、內(nèi)部變量n在一個(gè)函數(shù)內(nèi)部定義的變量是在一個(gè)函數(shù)內(nèi)部定義的變量是內(nèi)部變量?jī)?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
32、y) int i,j; int main(void) int m,n; .變量變量x、y、i、j的作用域的作用域變量變量m、n的作的作用域用域變量變量a、b、c的作用域的作用域6.5.1 內(nèi)部變量和外部變量?jī)?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(); print
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度外墻保溫項(xiàng)目質(zhì)量監(jiān)督與施工承包協(xié)議4篇
- 2025年度文化產(chǎn)業(yè)實(shí)習(xí)生勞動(dòng)合同書(二零二五版)4篇
- 2025版離婚協(xié)議中關(guān)于房產(chǎn)抵押及貸款合同處理范本8篇
- 2024版遠(yuǎn)洋貨運(yùn)合同協(xié)議
- 2025版綠色環(huán)保社區(qū)共享租賃合同可下載4篇
- 2025版體育項(xiàng)目提成協(xié)議書(賽事贊助收入分成協(xié)議)3篇
- 2025年智慧倉(cāng)儲(chǔ)與運(yùn)輸管理系統(tǒng)合同3篇
- 長(zhǎng)春師范高等??茖W(xué)?!稊?shù)據(jù)結(jié)構(gòu)與算法》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度海洋工程精密焊管采購(gòu)合同范本3篇
- 電子設(shè)備的防雷防潮措施
- 2024生態(tài)環(huán)境相關(guān)法律法規(guī)考試試題
- 有砟軌道施工工藝課件
- 兩辦意見八硬措施煤礦安全生產(chǎn)條例宣貫學(xué)習(xí)課件
- 40篇短文搞定高中英語(yǔ)3500單詞
- 人教版高中數(shù)學(xué)必修二《第九章 統(tǒng)計(jì)》同步練習(xí)及答案解析
- 兒科護(hù)理安全警示教育課件
- 三年級(jí)下冊(cè)口算天天100題
- 國(guó)家中英文名稱及代碼縮寫(三位)
- 人員密集場(chǎng)所消防安全培訓(xùn)
- 液晶高壓芯片去保護(hù)方法
- 拜太歲科儀文檔
評(píng)論
0/150
提交評(píng)論