版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、共 81頁 第 1 1 頁共 81頁 第 2 2 頁 本章要點本章要點 函數(shù)的定義函數(shù)的定義 函數(shù)的調(diào)用函數(shù)的調(diào)用 函數(shù)參數(shù)的傳遞方式函數(shù)參數(shù)的傳遞方式 變量的作用域和存儲方法變量的作用域和存儲方法 內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù)和外部函數(shù) 有參宏定義與調(diào)用有參宏定義與調(diào)用共 81頁 第 3 3 頁函數(shù)函數(shù)F1 ( )main ( )F11 ( )F2 ( )F21 ( )F22 ( ) C C程序是函數(shù)的集合體,每程序是函數(shù)的集合體,每個函數(shù)是一個獨立的程序模個函數(shù)是一個獨立的程序模塊;塊; 由由一個主函數(shù)一個主函數(shù)和和若干個子函若干個子函數(shù)數(shù)組成組成,程序總是從主函數(shù),程序總是從主函數(shù)開始執(zhí)行
2、;開始執(zhí)行; 所有子函數(shù)地位平等,可互所有子函數(shù)地位平等,可互相調(diào)用、自我調(diào)用。相調(diào)用、自我調(diào)用。 函數(shù)可集中或分散存放在一函數(shù)可集中或分散存放在一個或多個源程序文件中。個或多個源程序文件中。 引入函數(shù)的優(yōu)點:引入函數(shù)的優(yōu)點: 減少減少重復(fù)編寫程序的工作量;使重復(fù)編寫程序的工作量;使程序便于調(diào)試和閱讀。程序便于調(diào)試和閱讀。 共 81頁 第 4 4 頁main: 主函數(shù)主函數(shù) e, d, h ,g 被多次調(diào)用被多次調(diào)用a, b, c,d, e, f,g, h, 相互調(diào)相互調(diào)用用mainabdeghhgedcgf函數(shù)函數(shù)是是C程序的程序的最小最小單元。單元。主主函數(shù)可以調(diào)用其它函數(shù),其函數(shù)可以調(diào)用
3、其它函數(shù),其它函數(shù)可以相互調(diào)用它函數(shù)可以相互調(diào)用.函數(shù)調(diào)用舉例函數(shù)調(diào)用舉例main() /* 主函數(shù)主函數(shù) */ printstar(); /*調(diào)用調(diào)用printstar函數(shù)畫函數(shù)畫*/ print_message(); /*調(diào)用調(diào)用print _message函數(shù)寫字函數(shù)寫字*/ printstar(); /*調(diào)用調(diào)用printstar函數(shù)畫函數(shù)畫*/ printstar() /*printstar函數(shù)函數(shù)*/ printf(“n*”);print_message() /* print_message函數(shù)函數(shù)*/ printf(“n Hello! ”);運行結(jié)果:* Hello! * 一個一
4、個c c程序由一個或多個源文件組成程序由一個或多個源文件組成# include “l(fā)x2.c”# include “l(fā)x3.c”main() printstar(); print_message(); printstar(); printstar() printf(“n*”);print_message() printf(“n Hello! ”);Lx1.cLx2.cLx3.c共 81頁 第 7 7 頁數(shù)學(xué)函數(shù)數(shù)學(xué)函數(shù) # #include include math.hmath.h 字符和字符串函數(shù)字符和字符串函數(shù) ctype.h, string.hctype.h, string.hI/OI/
5、O函數(shù)函數(shù) # #include include stdio.hstdio.h 動態(tài)存儲分配函數(shù)動態(tài)存儲分配函數(shù) 形式形式有有參參函數(shù)函數(shù)無無參參函數(shù)函數(shù)空函數(shù)空函數(shù)庫函數(shù)庫函數(shù)用戶定義函數(shù)用戶定義函數(shù): :共 81頁 第 8 8 頁一、定義形式一、定義形式:類型標(biāo)識符類型標(biāo)識符 函數(shù)名函數(shù)名(形式參數(shù)表形式參數(shù)表)形式參數(shù)說明形式參數(shù)說明 說明與定義部分說明與定義部分 語句語句各形參之間用各形參之間用”,”隔開隔開形參可以缺省形參可以缺省,但括號但括號不可省不可省函數(shù)類型函數(shù)類型函數(shù)體(是一段程序,實函數(shù)體(是一段程序,實現(xiàn)函數(shù)的功能)現(xiàn)函數(shù)的功能)函數(shù)名字有值,它代表函函數(shù)名字有值,它代表
6、函數(shù)的入口地址。數(shù)的入口地址。有參函數(shù)定義形式有參函數(shù)定義形式這是有參函數(shù)定義形式這是有參函數(shù)定義形式共 81頁 第 9 9 頁無參函數(shù)的定義形式無參函數(shù)的定義形式: 類型標(biāo)識符類型標(biāo)識符 函數(shù)名(函數(shù)名( ) 說明部分說明部分 語句語句 例例:print_message( ) printf(“How are you !n”); 例例:dummy ( )( ) l 沒有沒有數(shù)據(jù)類型數(shù)據(jù)類型說明、說明、和和形參說明形參說明l函數(shù)體函數(shù)體為空。為空。無參函數(shù)定義無參函數(shù)定義空函數(shù)定義空函數(shù)定義 longlong factofacto ( ( n n ) ) intint n;n; long s=1
7、;int i; long s=1;int i; for (i=1; i=n; i+) for (i=1; i y ? x : y ; return ( z );形式參數(shù)列表形式參數(shù)列表:是是用用“,”分開的一分開的一組變量,用來接收組變量,用來接收調(diào)用時傳入的數(shù)據(jù)調(diào)用時傳入的數(shù)據(jù)形式參數(shù)說明:形式參數(shù)說明:在在 外面對形式參數(shù)外面對形式參數(shù)的類型進行說明的類型進行說明函數(shù)調(diào)用函數(shù)調(diào)用求兩個變量的最大值求兩個變量的最大值 函數(shù)聲明函數(shù)聲明也可寫成:也可寫成:int max(int x,int y)共 81頁 第 1212 頁二、二、 形式參數(shù)和實際參數(shù)形式參數(shù)和實際參數(shù) 形式參數(shù)形式參數(shù):形參調(diào)
8、用前不占內(nèi)存單元,調(diào)用時占用,調(diào)用后釋放形參調(diào)用前不占內(nèi)存單元,調(diào)用時占用,調(diào)用后釋放形參是函數(shù)的內(nèi)部變量,只在函數(shù)內(nèi)部才有意義。形參是函數(shù)的內(nèi)部變量,只在函數(shù)內(nèi)部才有意義。對每個形參必須指明其名字和數(shù)據(jù)類型。對每個形參必須指明其名字和數(shù)據(jù)類型。 實際參數(shù)實際參數(shù):實參必須有確定的值,可以是常量,變量或表達式。實參必須有確定的值,可以是常量,變量或表達式。實參與形參的類型、個數(shù)必須一致。實參與形參的類型、個數(shù)必須一致。共 81頁 第 1313 頁 1. 函數(shù)調(diào)用的一般形式為:函數(shù)調(diào)用的一般形式為: 函數(shù)名(實際參數(shù)列表);函數(shù)名(實際參數(shù)列表);(函數(shù)以語句的形式出現(xiàn)函數(shù)以語句的形式出現(xiàn))或或
9、 函數(shù)名(實際參數(shù)列表)函數(shù)名(實際參數(shù)列表)(函數(shù)出現(xiàn)在表達式中函數(shù)出現(xiàn)在表達式中)實參的數(shù)量、類型和排列順序必須與函數(shù)定義時形參實參的數(shù)量、類型和排列順序必須與函數(shù)定義時形參表中形參的數(shù)量、類型和排列順序一致。表中形參的數(shù)量、類型和排列順序一致。 2. 執(zhí)行過程:執(zhí)行過程: 在一個函數(shù)中調(diào)用另一個函數(shù)時,程序?qū)⒃谝粋€函數(shù)中調(diào)用另一個函數(shù)時,程序?qū)⒖刂瓶刂茝恼{(diào)從調(diào)用函數(shù)處用函數(shù)處轉(zhuǎn)移轉(zhuǎn)移到被調(diào)用函數(shù),并且執(zhí)行被調(diào)用函數(shù)。到被調(diào)用函數(shù),并且執(zhí)行被調(diào)用函數(shù)。在執(zhí)行完在執(zhí)行完被調(diào)用函數(shù)被調(diào)用函數(shù)的所有語句或者遇到的所有語句或者遇到returnreturn語語句時,程序的控制要句時,程序的控制要返回
10、返回到調(diào)用函數(shù)中到調(diào)用函數(shù)中原來調(diào)用函原來調(diào)用函數(shù)的地方繼續(xù)執(zhí)行。數(shù)的地方繼續(xù)執(zhí)行。共 81頁 第 1414 頁例:調(diào)用例:調(diào)用maxmax函數(shù)的程序函數(shù)的程序int main()int main()int a,b,c;int a,b,c; int int max();max(); scanf(%d,%d,&a,&b); scanf(%d,%d,&a,&b); c c= =maxmax(a,b);(a,b); printf(max=%dn, printf(max=%dn,c c);); return 0; return 0; 函數(shù)調(diào)用函數(shù)調(diào)用int int ma
11、xmax(x,y)(x,y)int x,y;int x,y;int z;int z; if(xy)z=x; if(xy)z=x; else z=y; else z=y; return(z); return(z); 實際參數(shù)實際參數(shù)形式參數(shù)形式參數(shù)返回函數(shù)值返回函數(shù)值接收接收返回值返回值程序執(zhí)行順序程序執(zhí)行順序? ?共 81頁 第 1515 頁/ /* *1 1* */ / /* *2 2* */ / /* *3 3* */ / /* *4 4* */ / /* *5 5* */ / /* *1111* */ / /* *1212* */ / /* *1313* */ / /* *1414* *
12、/ / /* *1515* */ / /* *1616* */ /int main()int main() int a,b,c; int int a,b,c; int maxmax();(); scanf(%d,%d,&a,&b); scanf(%d,%d,&a,&b); c= c=max(a,b);max(a,b); printf(max=%dn,c); printf(max=%dn,c); return 0; return 0; int int max(x,y)max(x,y) int x,y; int x,y; int z; int z; if (xy)
13、z=x; if (xy) z=x; else z=y; else z=y; return(z); return(z); 斷點斷點保護斷點和保護斷點和現(xiàn)場,轉(zhuǎn)向現(xiàn)場,轉(zhuǎn)向1111入口入口返回斷點返回斷點恢復(fù)現(xiàn)場恢復(fù)現(xiàn)場帶回函數(shù)值帶回函數(shù)值虛實結(jié)合虛實結(jié)合a x,b ya x,b y共 81頁 第 1616 頁(1) 函數(shù)語句函數(shù)語句 (把(把函數(shù)調(diào)用作為一個語句)函數(shù)調(diào)用作為一個語句) 一般形式:一般形式:函數(shù)名(實際參數(shù)表);函數(shù)名(實際參數(shù)表); 此時不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作。此時不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作。 例如:例如: printstar( );3. 函
14、數(shù)調(diào)用的幾種方式函數(shù)調(diào)用的幾種方式(2) 函數(shù)表達式函數(shù)表達式(函數(shù)調(diào)用出現(xiàn)在表達式中)(函數(shù)調(diào)用出現(xiàn)在表達式中) 一般形式:一般形式:變量名變量名= =函數(shù)表達式函數(shù)表達式 這時要求函數(shù)帶回一個確定的值以參加表達式的運算。這時要求函數(shù)帶回一個確定的值以參加表達式的運算。 例如:例如:c=3+max(a, b);注意:注意:無返回值函數(shù)的調(diào)用,不能出現(xiàn)在表達式中。無返回值函數(shù)的調(diào)用,不能出現(xiàn)在表達式中。 函數(shù)調(diào)用作為一個函數(shù)的實參。函數(shù)調(diào)用作為一個函數(shù)的實參。例如:例如:m = max( a, max(b, c) );(3) 函數(shù)參數(shù)函數(shù)參數(shù) (函數(shù)調(diào)用出現(xiàn)在函數(shù)參數(shù)中)(函數(shù)調(diào)用出現(xiàn)在函數(shù)參
15、數(shù)中)值傳遞值傳遞: 在調(diào)用函數(shù)時,實參將值傳遞給形參。在調(diào)用函數(shù)時,實參將值傳遞給形參。C語言規(guī)定,實參對形參的數(shù)據(jù)傳遞是語言規(guī)定,實參對形參的數(shù)據(jù)傳遞是“值傳遞值傳遞”,即單向傳遞,即單向傳遞。 在調(diào)用函數(shù)時,給形參分配存儲單元,并將實在調(diào)用函數(shù)時,給形參分配存儲單元,并將實參對應(yīng)的值傳遞給形參,調(diào)用結(jié)束后,形參單元參對應(yīng)的值傳遞給形參,調(diào)用結(jié)束后,形參單元被釋放,實參單元仍保留并維持原值。被釋放,實參單元仍保留并維持原值。 因此,在執(zhí)行一個被調(diào)用函數(shù)時,形參的值如因此,在執(zhí)行一個被調(diào)用函數(shù)時,形參的值如果發(fā)生變化,并不會改變主調(diào)函數(shù)中實參的值。果發(fā)生變化,并不會改變主調(diào)函數(shù)中實參的值。8
16、.1.4 函數(shù)參數(shù)的傳遞方式函數(shù)參數(shù)的傳遞方式共 81頁 第 1818 頁例例 編寫函數(shù)交換兩個變量的值。編寫函數(shù)交換兩個變量的值。 #include void swap ( int x, int y) int temp; temp=x; x=y; y=temp; printf ( x=%d,y=%dn, x, y); int main ( ) int a, b; a=5; b=10; printf ( a=%d,b=%dn, a, b); swap(a, b); printf ( a=%d,b=%dn, a, b);運行結(jié)果:運行結(jié)果:a=5 ,b=10 x=10,y=5a=5 ,b=10共
17、 81頁 第 1919 頁 值傳遞的優(yōu)點值傳遞的優(yōu)點:被調(diào)用的函數(shù)不可能改變調(diào)用函數(shù)被調(diào)用的函數(shù)不可能改變調(diào)用函數(shù) 中變量的值,而只能改變它的局部的臨時副本。中變量的值,而只能改變它的局部的臨時副本。 值傳遞的缺點值傳遞的缺點:每個形式參數(shù)僅能傳遞一個數(shù)據(jù),每個形式參數(shù)僅能傳遞一個數(shù)據(jù), 不適用需要在函數(shù)之間傳遞大量數(shù)據(jù)。不適用需要在函數(shù)之間傳遞大量數(shù)據(jù)。 地址傳遞:地址傳遞:將實參的地址傳遞給形參,實參和將實參的地址傳遞給形參,實參和形參指向同一內(nèi)存空間,對形參的修改,可以直形參指向同一內(nèi)存空間,對形參的修改,可以直接影響實參。接影響實參。8.1.4 函數(shù)參數(shù)的傳遞方式(續(xù))函數(shù)參數(shù)的傳遞方
18、式(續(xù))共 81頁 第 2020 頁2. 函數(shù)的返回值語句函數(shù)的返回值語句: return語句語句 一般形式:一般形式: return (表達式表達式); 或或 return 表達式表達式; 1. 定義定義:通過函數(shù)調(diào)用使主調(diào)函數(shù)得到一個確定:通過函數(shù)調(diào)用使主調(diào)函數(shù)得到一個確定 的值,稱為的值,稱為函數(shù)的返回值函數(shù)的返回值。注意不要丟掉注意不要丟掉;括號可以省略括號可以省略功能:功能:退出函數(shù),將退出函數(shù),將表達式的值表達式的值帶回主調(diào)函數(shù),回到程帶回主調(diào)函數(shù),回到程序原來的位置繼續(xù)執(zhí)行。序原來的位置繼續(xù)執(zhí)行。 共 81頁 第 2121 頁說明說明:一個函數(shù)中可以有多個一個函數(shù)中可以有多個re
19、turn語句,但是一次語句,但是一次 函數(shù)執(zhí)行只能執(zhí)行其中的一個。當(dāng)執(zhí)行到某個函數(shù)執(zhí)行只能執(zhí)行其中的一個。當(dāng)執(zhí)行到某個 return語句時,則終止函數(shù)執(zhí)行,并帶回函數(shù)值。語句時,則終止函數(shù)執(zhí)行,并帶回函數(shù)值。fun(int x) if(x1) return 2*x+1; else if(xy? x:y; return(z); return (xy? x:y); 等效等效共 81頁 第 2222 頁說明說明(續(xù)續(xù)): 當(dāng)函數(shù)類型被定義為當(dāng)函數(shù)類型被定義為void類型時,表示函數(shù)沒有類型時,表示函數(shù)沒有返回值。這是函數(shù)可沒有返回值。這是函數(shù)可沒有 return語句,或者在語句,或者在 return
20、后面只寫分號,即后面只寫分號,即 return ; 如果函數(shù)體內(nèi)沒有如果函數(shù)體內(nèi)沒有return語句,就一直運行到函語句,就一直運行到函數(shù)的最后一條語句后,再返回調(diào)用函數(shù),數(shù)的最后一條語句后,再返回調(diào)用函數(shù),共 81頁 第 2323 頁3. 函數(shù)值的類型函數(shù)值的類型 函數(shù)定義時應(yīng)該指定函數(shù)的類型函數(shù)定義時應(yīng)該指定函數(shù)的類型(即函數(shù)值即函數(shù)值的類型),應(yīng)該與的類型),應(yīng)該與return語句的類型一致。語句的類型一致。說明說明:(1)如果函數(shù)類型和如果函數(shù)類型和return語句的類型不一致,語句的類型不一致,以函以函數(shù)類型為準(zhǔn)數(shù)類型為準(zhǔn)。對數(shù)值型數(shù)據(jù),可以自動進行類型。對數(shù)值型數(shù)據(jù),可以自動進行類
21、型 轉(zhuǎn)換。既函數(shù)類型決定返回值的類型。轉(zhuǎn)換。既函數(shù)類型決定返回值的類型。(2)如果函數(shù)無返回值,可以將函數(shù)定義為如果函數(shù)無返回值,可以將函數(shù)定義為“無類無類 型型”void (或稱(或稱“空類型空類型”)。)。例如例如: void print_star()用用void定義函數(shù)類型定義函數(shù)類型,明確表示沒返回值,明確表示沒返回值共 81頁 第 2424 頁例:編寫計算例:編寫計算 的程序。的程序。 201ii1程序程序2:float sum(n) int n;int i; float s =0; for( i=1;i=n;i+) s+=1.0/i; return(s);int main( )in
22、t n ; float x ; n=20; x=sum(n); printf(x=%f,x);return 0; void sum(n) int n; int i;float s=0; for( i=1;i=n;i+) s+=1/(float)i; printf(s=%f,s); int main( ) int n; n=20; sum(n); return 0;程序程序1:程序運行結(jié)果:程序運行結(jié)果:s=3.597740調(diào)用函數(shù)時,變量做函數(shù)實參,它和對應(yīng)的形參各自占用調(diào)用函數(shù)時,變量做函數(shù)實參,它和對應(yīng)的形參各自占用獨立的存儲單元。獨立的存儲單元。共 81頁 第 2525 頁例:閱讀程序例
23、:閱讀程序 float add (x, y) float x, y; float z; z=x+y; return (z); int main( ) float a, b; scanf(%f, %f, &a, &b); printf( sum is %f n, add(a, b) ); return 0; add函數(shù)函數(shù)程序運行:程序運行: 3.6, 5.5 sum is 9.100000以上程序另一寫法以上程序另一寫法: int main( ) float add( ); float a, b; scanf(%f, %f, &a, &b); printf( s
24、um is %f , add(a, b) ); return 0; float add (x, y) float x, y; float z; z=x+y; return (z); /*定義定義add函數(shù)函數(shù)*/程序運行結(jié)果:程序運行結(jié)果: 3.6, 5.5 sum is 9.100000 主函數(shù)在前面主函數(shù)在前面子函數(shù)在后面子函數(shù)在后面對被調(diào)用函數(shù)的說明對被調(diào)用函數(shù)的說明共 81頁 第 2727 頁8.1.6 函數(shù)的說明函數(shù)的說明 對被調(diào)用函數(shù)說明的對被調(diào)用函數(shù)說明的前提條件前提條件 被調(diào)用函數(shù)必須是已存在的函數(shù),例如用戶被調(diào)用函數(shù)必須是已存在的函數(shù),例如用戶自定義函數(shù)或庫函數(shù)。自定義函數(shù)或
25、庫函數(shù)。2. 被調(diào)用函數(shù)是被調(diào)用函數(shù)是用戶自定義函數(shù)的函數(shù)說明用戶自定義函數(shù)的函數(shù)說明 同變量一樣,函數(shù)的調(diào)用也應(yīng)該遵循同變量一樣,函數(shù)的調(diào)用也應(yīng)該遵循“先聲先聲明,后使用明,后使用”的原則。的原則。 如使用用戶自定義函數(shù),而且主調(diào)函數(shù)和被如使用用戶自定義函數(shù),而且主調(diào)函數(shù)和被調(diào)用函數(shù)在同一個文件中,應(yīng)該在主調(diào)函數(shù)中說調(diào)用函數(shù)在同一個文件中,應(yīng)該在主調(diào)函數(shù)中說明被調(diào)函數(shù)的類型。其說明形式如下:明被調(diào)函數(shù)的類型。其說明形式如下:共 81頁 第 2828 頁函數(shù)說明的一般形式:函數(shù)說明的一般形式: 類型標(biāo)識符類型標(biāo)識符 函數(shù)名函數(shù)名( (類型類型1 1,類型,類型2 2,); 或類型標(biāo)識符或類型標(biāo)
26、識符 函數(shù)名函數(shù)名( (類型類型1 1 形參形參1 1,類型,類型2 2 形參形參2,);2,);功能:功能:通知編譯程序函數(shù)值是什么類型,有多少參數(shù)及它們各自通知編譯程序函數(shù)值是什么類型,有多少參數(shù)及它們各自的類型,為編譯程序進行類型檢查提供依據(jù)。的類型,為編譯程序進行類型檢查提供依據(jù)。main() float add(float x,float y); float a, b, c; scanf(“ %f, %f”, &a, &b); c=add(a,b) ; printf(“ sum is %f ”, c );/*定義定義add函數(shù)函數(shù)*/float add (float
27、x,float y) float z; z=x+y; return (z); 對被調(diào)用函數(shù)的說明對被調(diào)用函數(shù)的說明作為表達式被調(diào)用作為表達式被調(diào)用運行結(jié)果:運行結(jié)果: 3.6, 5.5sum is 9.100000 或:類型標(biāo)識符或:類型標(biāo)識符 函數(shù)名();函數(shù)名();共 81頁 第 2929 頁3. 函數(shù)說明和函數(shù)定義的區(qū)別函數(shù)說明和函數(shù)定義的區(qū)別 函數(shù)說明函數(shù)說明的作用是把函數(shù)的名字、函數(shù)類型的作用是把函數(shù)的名字、函數(shù)類型以及形參的類型、個數(shù)和順序通知編譯系統(tǒng),以以及形參的類型、個數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時系統(tǒng)按此進行對照檢查。便在調(diào)用該函數(shù)時系統(tǒng)按此進行對照檢查。 函數(shù)定義
28、函數(shù)定義是指對函數(shù)功能的確立,包括指定是指對函數(shù)功能的確立,包括指定函數(shù)名、函數(shù)值類型、形參及其類型、函數(shù)體等,函數(shù)名、函數(shù)值類型、形參及其類型、函數(shù)體等,它是一個完整的、獨立的函數(shù)單位。它是一個完整的、獨立的函數(shù)單位。 函數(shù)說明與函數(shù)定義的首部唯一區(qū)別:函數(shù)說明語函數(shù)說明與函數(shù)定義的首部唯一區(qū)別:函數(shù)說明語句的(句的( )之后必須)之后必須有分號有分號,而函數(shù)定義首部的(,而函數(shù)定義首部的( )之后之后沒有分號沒有分號。函數(shù)定義只能一次函數(shù)定義只能一次函數(shù)說明可以多次函數(shù)說明可以多次共 81頁 第 3030 頁 (1)被調(diào)用函數(shù)的定義在主調(diào)函數(shù)之前,可以省略被調(diào)用函數(shù)的定義在主調(diào)函數(shù)之前,可
29、以省略聲明。聲明。 float add (float x, float y) float z; z=x+y; return (z); main() float a, b; scanf(“ %f, %f, “&a, &b); printf(“ sum is %f ”, add(a, b) ); 被調(diào)函數(shù)在主被調(diào)函數(shù)在主調(diào)函數(shù)之前調(diào)函數(shù)之前主調(diào)函主調(diào)函數(shù)在被數(shù)在被調(diào)函數(shù)調(diào)函數(shù)之后之后4. 以下兩種情況可以省略被調(diào)用函數(shù)的說明以下兩種情況可以省略被調(diào)用函數(shù)的說明共 81頁 第 3131 頁(2)如果已在所有函數(shù)定義之前,在文件的開頭,如果已在所有函數(shù)定義之前,在文件的開頭, 在函數(shù)的
30、外部已說明了函數(shù)類型,則在各個主在函數(shù)的外部已說明了函數(shù)類型,則在各個主 調(diào)函數(shù)中不必對所調(diào)用的函數(shù)再作聲明。調(diào)函數(shù)中不必對所調(diào)用的函數(shù)再作聲明。char letter( char,char);float f(float,float );int i(float,float);main( ) .char letter (char c1,char c2)float f(float x,float y)int i(float,float)此處不必說明此處不必說明在所有函數(shù)之前在所有函數(shù)之前說明函數(shù)類型說明函數(shù)類型定義函數(shù)定義函數(shù)letter、f和和i共 81頁 第 3232 頁# include “
31、stdio.h” /*調(diào)用輸入輸出函數(shù)調(diào)用輸入輸出函數(shù)*/# include “math.h” /*調(diào)用數(shù)學(xué)函數(shù)調(diào)用數(shù)學(xué)函數(shù)*/# include “string.h” /*調(diào)用字符,字符串函數(shù)調(diào)用字符,字符串函數(shù)*/# include “graphics.h” /*調(diào)用圖形函數(shù)調(diào)用圖形函數(shù)*/用戶也可建立自己的庫函數(shù),這是高級應(yīng)用的內(nèi)容。用戶也可建立自己的庫函數(shù),這是高級應(yīng)用的內(nèi)容。5. 庫函數(shù)及調(diào)用庫函數(shù)及調(diào)用 庫函數(shù)庫函數(shù):由人們根據(jù)需要編制并提供給用戶使用的一些基:由人們根據(jù)需要編制并提供給用戶使用的一些基 本函數(shù),在用戶定義的函數(shù)中常常調(diào)用這些函數(shù)。本函數(shù),在用戶定義的函數(shù)中常常調(diào)用
32、這些函數(shù)。 方法方法:在文件的開頭用:在文件的開頭用#include 命令將需要的庫函數(shù)命令將需要的庫函數(shù)包含到包含到 文件中。文件中。共 81頁 第 3333 頁8.2 8.2 數(shù)組作函數(shù)參數(shù)數(shù)組作函數(shù)參數(shù) 數(shù)組元素可以作函數(shù)的實參數(shù)組元素可以作函數(shù)的實參 數(shù)組名可以作函數(shù)的實參和形參數(shù)組名可以作函數(shù)的實參和形參 多維數(shù)組可以作函數(shù)參數(shù)多維數(shù)組可以作函數(shù)參數(shù) 8.2.1. 數(shù)組元素作函數(shù)實參數(shù)組元素作函數(shù)實參 由于表達式可以做實參,數(shù)組元素可以作為表達式由于表達式可以做實參,數(shù)組元素可以作為表達式的組成部分,因此,數(shù)組元素可以做函數(shù)的實參,的組成部分,因此,數(shù)組元素可以做函數(shù)的實參,與變量一
33、樣與變量一樣,是,是單向傳遞,即單向傳遞,即“值傳送值傳送”方式方式。 例如:例如: int a10; x=power(a9,5);數(shù)組元素數(shù)組元素作實參作實參共 81頁 第 3434 頁8.2.2數(shù)組名作函數(shù)的參數(shù)數(shù)組名作函數(shù)的參數(shù) 可以用數(shù)組名作函數(shù)參數(shù),此時實參和形可以用數(shù)組名作函數(shù)參數(shù),此時實參和形參都用數(shù)組名。參都用數(shù)組名。 由于由于數(shù)組名代表數(shù)組名代表的就是數(shù)組在內(nèi)存中存放的就是數(shù)組在內(nèi)存中存放區(qū)域的區(qū)域的首地址首地址。把數(shù)組名作為函數(shù)參數(shù)來實現(xiàn)。把數(shù)組名作為函數(shù)參數(shù)來實現(xiàn)大量數(shù)據(jù)的傳遞是一個非常好的數(shù)據(jù)傳遞方法。大量數(shù)據(jù)的傳遞是一個非常好的數(shù)據(jù)傳遞方法。這種傳遞方式是這種傳遞方式
34、是“地址傳遞地址傳遞”共 81頁 第 3535 頁一維數(shù)組作函數(shù)參數(shù),一維數(shù)組作函數(shù)參數(shù),形參的寫法形參的寫法為:為: 類型說明符類型說明符 形參數(shù)組名形參數(shù)組名數(shù)組長度數(shù)組長度例如:例如: float average(float array10) main() float b10;int i; for(i=0;i10;i+) scanf(“%f”,&bi); average(b); 1. 一維數(shù)組作函數(shù)參數(shù)一維數(shù)組作函數(shù)參數(shù)2. 數(shù)組作函數(shù)形參的數(shù)組作函數(shù)形參的函數(shù)調(diào)用函數(shù)調(diào)用方式方式 函數(shù)名函數(shù)名(數(shù)組名,數(shù)組名,)這是一維數(shù)組這是一維數(shù)組形參的定義形參的定義這是一維數(shù)組這是一維數(shù)
35、組的調(diào)用的調(diào)用共 81頁 第 3636 頁說明:說明: 在主調(diào)函數(shù)和被調(diào)用函數(shù)中在主調(diào)函數(shù)和被調(diào)用函數(shù)中分別分別定義數(shù)組定義數(shù)組,實參數(shù)組實參數(shù)組和形參數(shù)組類型要一致。和形參數(shù)組類型要一致。 實參數(shù)組和形參數(shù)組大小可以不一致,實參數(shù)組和形參數(shù)組大小可以不一致,形參數(shù)組可形參數(shù)組可以不指定大小以不指定大小。 (這里指一維數(shù)組)。(這里指一維數(shù)組)。 數(shù)組名除作為變量的標(biāo)識外數(shù)組名除作為變量的標(biāo)識外,還代表該還代表該數(shù)組在內(nèi)存中數(shù)組在內(nèi)存中存放區(qū)域的首地址存放區(qū)域的首地址。 數(shù)組名做函數(shù)實參與形參之間是數(shù)組名做函數(shù)實參與形參之間是“地址傳遞地址傳遞”,實參實參數(shù)組將數(shù)組的起始地址傳遞給形參數(shù)組。編
36、譯系統(tǒng)數(shù)組將數(shù)組的起始地址傳遞給形參數(shù)組。編譯系統(tǒng)不再為形參數(shù)組分配存儲單元。不再為形參數(shù)組分配存儲單元。 在函數(shù)體中對形參數(shù)組的元素操作時就是對實參數(shù)在函數(shù)體中對形參數(shù)組的元素操作時就是對實參數(shù)組的元素進行操作。組的元素進行操作。形參數(shù)組各元素的值發(fā)生變化形參數(shù)組各元素的值發(fā)生變化會使實參數(shù)組各元素的值發(fā)生同樣的變化會使實參數(shù)組各元素的值發(fā)生同樣的變化。 數(shù)組名作函數(shù)參數(shù)可實現(xiàn)大量數(shù)據(jù)的傳遞數(shù)組名作函數(shù)參數(shù)可實現(xiàn)大量數(shù)據(jù)的傳遞,無須返回?zé)o須返回數(shù)組值。數(shù)組值。共 81頁 第 3737 頁例:例: 編寫函數(shù),求編寫函數(shù),求n個數(shù)組元素的算術(shù)平均值。個數(shù)組元素的算術(shù)平均值。double aver
37、age(int a , int n) int i; double s=0; for(i=0; in; i+) s=s+ai; return s/n; 主函數(shù)調(diào)用如何編寫?主函數(shù)調(diào)用如何編寫? main()int b3=1,2,3;double s;s=average(b,3);printf(“%fn”,s);形參數(shù)組不指定形參數(shù)組不指定大小,數(shù)組名后大小,數(shù)組名后跟一個空方括號跟一個空方括號這是數(shù)組作形參時常這是數(shù)組作形參時常使用的技巧使用的技巧實參實參a獲得獲得b的起始地址的起始地址數(shù)組名做函數(shù)是數(shù)組名做函數(shù)是“地址傳遞地址傳遞”。也就是把實參數(shù)組的。也就是把實參數(shù)組的起起始地址始地址傳遞給
38、形參數(shù)組,這樣二者傳遞給形參數(shù)組,這樣二者共占一段內(nèi)存單元共占一段內(nèi)存單元。因此,因此,形參數(shù)組各元素的值如果發(fā)生變化會使實參數(shù)組形參數(shù)組各元素的值如果發(fā)生變化會使實參數(shù)組各元素的值發(fā)生同樣的變化各元素的值發(fā)生同樣的變化。例:閱讀下列程序,指出輸出結(jié)果。例:閱讀下列程序,指出輸出結(jié)果。main( ) void swap( ); /*函數(shù)聲明函數(shù)聲明*/ int b2=10,2; swap(b); printf(“b0=%d, b1=%dn”, b0, b1); void swap( int a ) int t; t=a0; a0=a1; a1=t;共 81頁 第 3939 頁數(shù)組數(shù)組bbb1b
39、0102數(shù)組數(shù)組a數(shù)組數(shù)組bb, ab1b0102a1a0函數(shù)開始調(diào)用之前函數(shù)開始調(diào)用之前函數(shù)開始調(diào)用,實參數(shù)組函數(shù)開始調(diào)用,實參數(shù)組b將起始地址傳將起始地址傳遞給形參數(shù)組遞給形參數(shù)組a,二者共占一段內(nèi)存單元,二者共占一段內(nèi)存單元數(shù)組數(shù)組a數(shù)組數(shù)組bb, ab1b0210a1a0swap函數(shù)執(zhí)行過程中,函數(shù)執(zhí)行過程中,a0與與a1的值交換的值交換數(shù)組數(shù)組bbb1b0210函數(shù)調(diào)用結(jié)束后函數(shù)調(diào)用結(jié)束后共 81頁 第 4040 頁例:編寫一個函數(shù)例:編寫一個函數(shù). 功能功能:在在n個整數(shù)中,找出數(shù)值最大的數(shù)。個整數(shù)中,找出數(shù)值最大的數(shù)。 給定給定10個整型數(shù)個整型數(shù),找出其中數(shù)值最大的數(shù)。找出其中
40、數(shù)值最大的數(shù)。int max(int a,int n)int m,i; m=a0; for(i=1;im) m=ai; return(m);子函數(shù):子函數(shù):main( )int x10,amax; int i; for(i=0;i10;i+) scanf(%d,&xi); amax=max(x,10); printf(“amax= %d,amax);主函數(shù):主函數(shù):前面所學(xué)內(nèi)容前面所學(xué)內(nèi)容int max(a,n) int a ,n;共 81頁 第 4141 頁例:用選擇法對數(shù)組中例:用選擇法對數(shù)組中10個整數(shù)按由小到大排序個整數(shù)按由小到大排序.方法:方法:寫一個函數(shù)寫一個函數(shù)sort(
41、int array, int n) :對數(shù)組元素按由小到大排序。:對數(shù)組元素按由小到大排序。寫主函數(shù)寫主函數(shù) :輸入輸入array數(shù)組,調(diào)用數(shù)組,調(diào)用 sort 函數(shù),輸出排序后的函數(shù),輸出排序后的array數(shù)組。數(shù)組。void sort (int array , int n) int i, j, t; for (i=0; in-1; i+) for (j=i+1; jn; j+) if (arrayjarrayi) t=arrayj; arrayj=arrayi; arrayi=t; 前面所學(xué)內(nèi)容前面所學(xué)內(nèi)容共 81頁 第 4242 頁main ( ) int a10, i; printf(
42、“enter array: n”); for (i=0; i10; i+) scanf (“%d”,&ai); sort(a, 10); printf(“the sorted array: n”); for (i=0; i10; i+) printf (“ %d ”, ai); printf(“n”);由于地址傳遞,由于地址傳遞,實參數(shù)組實參數(shù)組 a 改變改變數(shù)組名做參數(shù)的好處:數(shù)組名做參數(shù)的好處:由于只需復(fù)制一個地址值,而無須復(fù)制全部需要處由于只需復(fù)制一個地址值,而無須復(fù)制全部需要處 理的數(shù)據(jù),因此節(jié)約存儲空間并提高效率。理的數(shù)據(jù),因此節(jié)約存儲空間并提高效率。 由于主調(diào)函數(shù)和被調(diào)函數(shù)
43、是在相同的內(nèi)存區(qū)域上對由于主調(diào)函數(shù)和被調(diào)函數(shù)是在相同的內(nèi)存區(qū)域上對 數(shù)據(jù)進行操作,因此可以實現(xiàn)數(shù)據(jù)的同步更新。數(shù)據(jù)進行操作,因此可以實現(xiàn)數(shù)據(jù)的同步更新。 函數(shù)的調(diào)用函數(shù)的調(diào)用共 81頁 第 4343 頁#include stdio.hmain()int i=0; char s180,s280; scanf(%s,s2); for(i=0;s2i!=0;i+) s1i=s2i; s1i=0; printf(%sn,s1); 我們以前留的數(shù)組作業(yè)我們以前留的數(shù)組作業(yè)3:#include stdio.hmain()int i=0; char s180,s280; gets(s2); for(i=0;
44、i=strlen(s2);i+) s1i=s2i; printf(%sn,s1); 或或 :i=0開始,后沒開始,后沒有追加有追加0如輸入:如輸入:abc123 efty 結(jié)果:結(jié)果:abc123編寫一個程序,將字符數(shù)組編寫一個程序,將字符數(shù)組s2中的全部字符復(fù)制到字符數(shù)組中的全部字符復(fù)制到字符數(shù)組s1中,中,不許用不許用strcpy函數(shù)。復(fù)制時,函數(shù)。復(fù)制時,0后面的字符不復(fù)制。后面的字符不復(fù)制。(自己假設(shè)給定自己假設(shè)給定s2數(shù)組數(shù)組)改用改用gets(s2)可以可以輸入任意字符輸入任意字符注意表達式注意表達式2共 81頁 第 4444 頁 寫成函數(shù):將給定字符串寫成函數(shù):將給定字符串s2復(fù)
45、制到另一字符串復(fù)制到另一字符串s1。#include “stdio.h”void strcopy(char str1 ,char str2 ) int i=0; for(i=0;str2i!=0;i+) str1i=str2i; str1i=0;main() char s150,s250; gets(s2); strcopy(s1,s2); printf(“%s”,s1);共 81頁 第 4545 頁有兩種形式有兩種形式 (形式基本同一維形式基本同一維) 函數(shù)值類型說明符函數(shù)值類型說明符 函數(shù)名函數(shù)名(類型說明符類型說明符 數(shù)組名數(shù)組名 正整型常量表達式正整型常量表達式 , ) 函數(shù)體函數(shù)體
46、函數(shù)值類型說明符函數(shù)值類型說明符 函數(shù)名函數(shù)名(數(shù)組名數(shù)組名,) 類型說明符類型說明符 數(shù)組名數(shù)組名 正整型常量表達式正整型常量表達式; 函數(shù)體函數(shù)體 “行行”可以可以不確定不確定“列列”必須必須確定確定!共 81頁 第 4646 頁說明:說明: 形參數(shù)組定義時可以指定每一維的大小,也可以省略第形參數(shù)組定義時可以指定每一維的大小,也可以省略第一維的大小,不允許省略第二維以及其他高維的大小一維的大小,不允許省略第二維以及其他高維的大小. 例如例如 : int array 310; 或或 int array 10; 是一樣的!是一樣的! 但但 int array 3 ; 和和int array ;
47、是錯誤的是錯誤的! 實參數(shù)組可以大于形參數(shù)組。實參數(shù)組可以大于形參數(shù)組。(行行可以不同,可以不同,列列必須相同)必須相同)例如:實參數(shù)組定義為:例如:實參數(shù)組定義為:int array 510; 形參數(shù)組定義為:形參數(shù)組定義為:int array 310; 這時形參數(shù)組只取實參數(shù)組的一部分,其余部分不起作這時形參數(shù)組只取實參數(shù)組的一部分,其余部分不起作用。用。共 81頁 第 4747 頁例:閱讀程序,指出運行結(jié)果。例:閱讀程序,指出運行結(jié)果。 void add1(int a 3 ,int n) int i; for(i=0;in;i+) +aii; main() int x33=0,1,2,3
48、,4,5,6,7,8,i; add1(x,3); for(i=0;i3;i+) printf(%d ,xii); printf(n); 程序運行結(jié)果為:程序運行結(jié)果為:1 5 9 注意:二維注意:二維數(shù)組的調(diào)用數(shù)組的調(diào)用注意:二維注意:二維數(shù)組的定義數(shù)組的定義共 81頁 第 4848 頁例:寫函數(shù)打印例:寫函數(shù)打印n行行10列二維數(shù)組,其中列二維數(shù)組,其中n是任意整數(shù)。是任意整數(shù)。 void print_array(int a 10, int n) int i, j; for(i=0;in; i+) for(j=0;j10;j+) printf(“%3d”, aij); printf(“n”)
49、; 例:寫函數(shù)交換任意一個例:寫函數(shù)交換任意一個n*10的二維數(shù)組的的二維數(shù)組的i,j兩行兩行 void exchange(int a 10, int i,int j) int k, t; for(k=0;k10;k+) t=aik; aik=ajk; ajk=t; 例:編寫函數(shù),例:編寫函數(shù),計算兩個計算兩個3行行4列的矩陣之和。并求:列的矩陣之和。并求:C3X4=A3X4+B3X4void qiuh(float x4,float y4,float z4,int n)int i,j; for(i=0;in;i+) for(j=0;j4;j+) zij=xij+yij;main()float
50、a34,b34,c34;int i,j; for(i=0;i3;i+) for(j=0;j4;j+) scanf(“%f%f”,&aij, &bij); qiuh(a,b,c,3); for(i=0;i3;i+) for(j=0;j4;j+) printf(“%10.2f”,cij);printf(“n”);注意函數(shù)的定義注意函數(shù)的定義和函數(shù)的調(diào)用和函數(shù)的調(diào)用共 81頁 第 5050 頁8.3 函數(shù)的嵌套調(diào)用和遞歸調(diào)用函數(shù)的嵌套調(diào)用和遞歸調(diào)用8.3.1 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用 嵌套定義:嵌套定義:在定義一個函數(shù)時,該函數(shù)體內(nèi)包含在定義一個函數(shù)時,該函數(shù)體內(nèi)包含另一個函數(shù)的
51、定義。另一個函數(shù)的定義。 嵌套調(diào)用:嵌套調(diào)用:在調(diào)用一個函數(shù)的過程中,又調(diào)用另在調(diào)用一個函數(shù)的過程中,又調(diào)用另一個函數(shù)。一個函數(shù)。 C語言不允許嵌套定義,但可以嵌套調(diào)用。語言不允許嵌套定義,但可以嵌套調(diào)用。在調(diào)在調(diào)用一個函數(shù)的過程中,又調(diào)用另一個函數(shù)。用一個函數(shù)的過程中,又調(diào)用另一個函數(shù)。共 81頁 第 5151 頁mainmain函數(shù)函數(shù) 調(diào)用函調(diào)用函數(shù)數(shù) A;A; 函數(shù)函數(shù) A A 調(diào)用函數(shù)調(diào)用函數(shù) B; 函數(shù)函數(shù) B B 調(diào)用調(diào)用調(diào)用調(diào)用返回返回返回返回共 81頁 第 5252 頁例:閱讀程序,指出運行結(jié)果。例:閱讀程序,指出運行結(jié)果。(嵌套調(diào)用嵌套調(diào)用)main( ) int a=0,
52、b=0,b1(int,int),f1(); printf(b1=%d f1=%dn,b1(a,b),f1( ); int b1(int d,int e) int f1( ),f; d=5; e=10; f=f1( )+d+e; return f; int f1( ) int c,i=1; c=15; while(i1long int fact(int n) long int f; if(n=0|n=1) f=1; else f=n*fact(n-1); return f; main( ) long int red;int n; scanf(%d,&n); red=fact(n); pr
53、intf(red=%ld,red); 假如求假如求 5! , 則程序執(zhí)則程序執(zhí)行結(jié)果為:行結(jié)果為:red =1201 當(dāng)當(dāng) n=0,n=1 n!=共 81頁 第 5858 頁f=3*fact(2)f=1*2*3=6fact函數(shù)函數(shù) n=3f=2*fact(1)f=1*2=2fact函數(shù)函數(shù) n=2 調(diào)用調(diào)用fact 函數(shù)時函數(shù)時 , 總是從總是從 fact 的第一條語句開始執(zhí)行的第一條語句開始執(zhí)行 ;執(zhí)執(zhí)行到行到 return 語句語句,總是返回到該次調(diào)用的調(diào)用位置繼續(xù)執(zhí)行調(diào)總是返回到該次調(diào)用的調(diào)用位置繼續(xù)執(zhí)行調(diào)用函數(shù)用函數(shù)。fact 函數(shù)的調(diào)用過程:函數(shù)的調(diào)用過程:main( )fact(5
54、)輸出輸出fact(5)f=5*fact(4)f=1*2*3*4*5=120fact函數(shù)函數(shù) n=5f=4*fact(3)f=1*2*3*4=24fact函數(shù)函數(shù) n=4第一次調(diào)用第一次調(diào)用第二次調(diào)用第二次調(diào)用第三次調(diào)用第三次調(diào)用第四次調(diào)用第四次調(diào)用第五次調(diào)用第五次調(diào)用返回返回返回返回返回返回返回返回返回返回共 81頁 第 5959 頁變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型 char 型型 int 型型 float 型型 double 型型總結(jié)總結(jié):數(shù)據(jù)類型數(shù)據(jù)類型決定為變量分配的內(nèi)存單元的決定為變量分配的內(nèi)存單元的長度長度,數(shù)據(jù)的,數(shù)據(jù)的存放存放 形式。形式。(從程序設(shè)計角度,決定了(從程序設(shè)計角度,
55、決定了可以表示的數(shù)的范圍可以表示的數(shù)的范圍)問題問題:1. 何時何時為變量分配內(nèi)存單元?為變量分配內(nèi)存單元? 2. 變量位于內(nèi)存的什么變量位于內(nèi)存的什么位置位置? 3. 變量的有效變量的有效作用范圍作用范圍?(VC+6.0環(huán)境)共 81頁 第 6060 頁 變量的作用域和生存期變量的作用域和生存期u 變量的作用域變量的作用域 指一個變量在程序中的有效范圍。指一個變量在程序中的有效范圍。 C C語言規(guī)定語言規(guī)定:凡是在函數(shù)內(nèi)定義的變量,它的作用域僅僅是凡是在函數(shù)內(nèi)定義的變量,它的作用域僅僅是包含這個變量定義的復(fù)合語句;包含這個變量定義的復(fù)合語句;而在函數(shù)體外定義的變量,而在函數(shù)體外定義的變量,它
56、的作用域是從它的作用域是從定義點到文件尾。定義點到文件尾。u 變量的生存期變量的生存期 指程序在執(zhí)行期間,變量存在的時間間隔,即從給變量分指程序在執(zhí)行期間,變量存在的時間間隔,即從給變量分配內(nèi)存,至所分配內(nèi)存被系統(tǒng)收回的那段時間。配內(nèi)存,至所分配內(nèi)存被系統(tǒng)收回的那段時間。 C C語言規(guī)定語言規(guī)定:凡是出現(xiàn)在靜態(tài)數(shù)據(jù)區(qū)的變量,生存期都是從凡是出現(xiàn)在靜態(tài)數(shù)據(jù)區(qū)的變量,生存期都是從程序開始執(zhí)行到程序結(jié)束;程序開始執(zhí)行到程序結(jié)束;而出現(xiàn)在靜態(tài)區(qū)之外的變量,生而出現(xiàn)在靜態(tài)區(qū)之外的變量,生存期僅僅是從存期僅僅是從函數(shù)開始執(zhí)行到函數(shù)執(zhí)行結(jié)束這段時間。函數(shù)開始執(zhí)行到函數(shù)執(zhí)行結(jié)束這段時間。共 81頁 第 616
57、1 頁1. 1. 局部變量(內(nèi)部變量)局部變量(內(nèi)部變量)定義:定義:在函數(shù)內(nèi)部定義的變量,只能在本函數(shù)內(nèi)部使用,稱為局在函數(shù)內(nèi)部定義的變量,只能在本函數(shù)內(nèi)部使用,稱為局部量。部量。8.4.18.4.1局部變量和全局變量(從變量的作用域分)局部變量和全局變量(從變量的作用域分)如:如:float f1(int a) int b,c; . char f2(int x,int y) int a,b; main ( ) int m,n; . a,b,c在函數(shù)在函數(shù)f1中有效中有效x,y,a,b在函數(shù)在函數(shù)f2中有效中有效m,n在主函數(shù)中有效在主函數(shù)中有效共 81頁 第 6262 頁 主函數(shù)主函數(shù) m
58、ain 定義的變量只在主函數(shù)中有效,主函數(shù)不定義的變量只在主函數(shù)中有效,主函數(shù)不能使用其它函數(shù)定義的變量。能使用其它函數(shù)定義的變量。 不同函數(shù)可以使用相同名字的變量,它們在內(nèi)存中占不同函數(shù)可以使用相同名字的變量,它們在內(nèi)存中占不同的單元,互不影響。不同的單元,互不影響。(如,前例如,前例f1和和f2中的中的a,b變量變量) 形式參數(shù)也是局部變量。形式參數(shù)也是局部變量。 在一個函數(shù)內(nèi)部,可以在復(fù)合語句中定義變量,這些在一個函數(shù)內(nèi)部,可以在復(fù)合語句中定義變量,這些變量只在本復(fù)合語句中有效。變量只在本復(fù)合語句中有效。 關(guān)于局部變量幾點說明:關(guān)于局部變量幾點說明:如:如:main() int a,b;
59、 /*a,b在整個在整個main函數(shù)內(nèi)有效函數(shù)內(nèi)有效*/ int c; /*c僅在本復(fù)合語句內(nèi)有效僅在本復(fù)合語句內(nèi)有效*/ c=a+b; . 閱讀以下程序,寫出程序的運行結(jié)果。閱讀以下程序,寫出程序的運行結(jié)果。main() int i=3, j=2, k; k=i+j; int k=8; if(i=3) printf(%d, , k); else printf(%d, , j); printf(%d, %dn,i,k); 運行結(jié)果:運行結(jié)果:8,3,5共 81頁 第 6464 頁2. 全局變量全局變量 程序中,在函數(shù)之外定義的變量稱為外部變量,即全局變程序中,在函數(shù)之外定義的變量稱為外部變量,
60、即全局變量。全局變量可以為本文件中的其他函數(shù)所共用,但是,量。全局變量可以為本文件中的其他函數(shù)所共用,但是,它的它的有效范圍是從定義變量的位置開始到源文件的結(jié)束。有效范圍是從定義變量的位置開始到源文件的結(jié)束。如:如:int p=1,q=5; float f1(int a) int b,c; . char c1,c2; char f2(int x,int y) int a,b; main ( ) int m,n; . 全局變量全局變量c1,c2的作用范圍的作用范圍全局變量全局變量p,q的作用范圍的作用范圍共 81頁 第 6565 頁 從定義變量的位置開始到本文件結(jié)束,這段程序中的函數(shù)可直接從定義變量的位置開始到本文件結(jié)束,這段程序中的函數(shù)可直接使用全局變量。(注意全局變量的有效范圍)使用全局變量。(注意全局變量的有效范圍) 如果在同一源文件中,全局變量
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇州2025年江蘇蘇州張家港市招聘備案制教師47人筆試歷年參考題庫附帶答案詳解
- 秦皇島2025年河北秦皇島市第二醫(yī)院招聘人事代理人員115人筆試歷年參考題庫附帶答案詳解
- 梧州2025年廣西梧州市事業(yè)單位招聘中小學(xué)幼兒園教師507人筆試歷年參考題庫附帶答案詳解
- 2025年中國多流水表市場調(diào)查研究報告
- 德州2024年山東德州天衢新區(qū)第三批招聘教師60人筆試歷年參考題庫附帶答案詳解
- 2025至2031年中國高亮度充電式手筒行業(yè)投資前景及策略咨詢研究報告
- 2025年自動補償式交流穩(wěn)壓器項目可行性研究報告
- 2025年粉碎自動送料機項目可行性研究報告
- 2025年生物活能全效眼霜項目可行性研究報告
- 2025至2031年中國文丘里噴嘴行業(yè)投資前景及策略咨詢研究報告
- 香港及內(nèi)地傳真號碼
- 湖北中煙工業(yè)限責(zé)任公司2025年招聘(技術(shù)類和業(yè)務(wù)類崗位)【43人】高頻重點提升(共500題)附帶答案詳解
- 2024-2025學(xué)年成都市成華區(qū)七年級上英語期末考試題(含答案)
- 石家莊市長安區(qū)學(xué)年三年級數(shù)學(xué)第一學(xué)期期末檢測試題含解析
- 2025年中國一汽招聘筆試參考題庫含答案解析
- 特殊家長課后溝通技巧培訓(xùn)
- 超聲輸卵管造影護理配合
- 心內(nèi)科心衰一病一品護理成果匯報
- 2025檢驗檢測中心年度工作總結(jié)及工作計劃
- 2024年總經(jīng)理助理年終工作總結(jié)(3篇)
- 2024年考研英語(二)真題及參考答案
評論
0/150
提交評論