C語言程序設(shè)計教程電子教案-第07章_第1頁
C語言程序設(shè)計教程電子教案-第07章_第2頁
C語言程序設(shè)計教程電子教案-第07章_第3頁
C語言程序設(shè)計教程電子教案-第07章_第4頁
C語言程序設(shè)計教程電子教案-第07章_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言程序設(shè)計教程電子教案-第07 章 第7章 函 數(shù) C語言是通過函數(shù)來實現(xiàn)模塊化程序設(shè)計的。所以較大的C語言 應(yīng)用程序,往往是由多個函數(shù)組成的,每個函數(shù)分別對應(yīng)各自的功能 模塊。 7.1 函數(shù)的定義與調(diào)用函數(shù)的定義與調(diào)用 7.2 函數(shù)的嵌套調(diào)用與遞歸調(diào)用函數(shù)的嵌套調(diào)用與遞歸調(diào)用 7.3 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù) 7.4 內(nèi)部變量與外部變量內(nèi)部變量與外部變量 7.5 內(nèi)部函數(shù)與外部函數(shù)內(nèi)部函數(shù)與外部函數(shù) 7.6 變量的動態(tài)存儲與靜態(tài)存儲變量的動態(tài)存儲與靜態(tài)存儲 Return C語言程序設(shè)計教程電子教案-第07 章 7.1 函數(shù)的定義與調(diào)用函數(shù)的定義與調(diào)用 7.1.1 7.1.1 函數(shù)

2、的定義函數(shù)的定義 7.1.2 7.1.2 函數(shù)的返回值與函數(shù)類型函數(shù)的返回值與函數(shù)類型 7.1.3 7.1.3 對被調(diào)用函數(shù)的說明和函數(shù)原型對被調(diào)用函數(shù)的說明和函數(shù)原型 7.1.4 7.1.4 函數(shù)的調(diào)用函數(shù)的調(diào)用 7.1.5 7.1.5 函數(shù)的形參與實參函數(shù)的形參與實參 Return C語言程序設(shè)計教程電子教案-第07 章 7.1 .1 函數(shù)的定義函數(shù)的定義 1任何函數(shù)(包括主函數(shù)main())都是由函數(shù)說明 和函數(shù)體兩部分組成。根據(jù)函數(shù)是否需要參數(shù),可將函 數(shù)分為無參函數(shù)和有參函數(shù)兩種。 (1)無參函數(shù)的一般形式)無參函數(shù)的一般形式 函數(shù)類型 函數(shù)名( void ) 說明語句部分; 可執(zhí)行

3、語句部分; 注意注意:在舊標(biāo)準中,函數(shù)可以缺省參數(shù)表。但在新 標(biāo)準中,函數(shù)不可缺省參數(shù)表;如果不需要參數(shù),則用 “void”表示,主函數(shù)main()例外。 C語言程序設(shè)計教程電子教案-第07 章 (2)有參函數(shù)的一般形式)有參函數(shù)的一般形式 函數(shù)類型 函數(shù)名( 數(shù)據(jù)類型 參數(shù),數(shù)據(jù)類型 參數(shù)2 ) 說明語句部分; 可執(zhí)行語句部分; 有參函數(shù)比無參函數(shù)多了一個參數(shù)表。調(diào)用有參 函數(shù)時,調(diào)用函數(shù)將賦予這些參數(shù)實際的值。 為了與調(diào)用函數(shù)提供的實際參數(shù)區(qū)別開,將函數(shù) 定義中的參數(shù)表稱為形式參數(shù)表,簡稱形參表。 C語言程序設(shè)計教程電子教案-第07 章 案例7.1 定義一個函數(shù),用于求兩個數(shù)中的大數(shù)。 /

4、*案例代碼文件名:AL7_1.C*/ /*功能:定義一個求較大數(shù)的函數(shù)并在主函數(shù)中調(diào)用*/ int max(int n1, int n2) /*定義一個函數(shù)max()*/ return (n1n2?n1:n2); main() int max(int n1, int n2);/*函數(shù)說明*/ int num1,num2; printf(input two numbers:n); scanf(%d%d, /*使程序暫停,按任一鍵繼續(xù)*/ 程序演示 C語言程序設(shè)計教程電子教案-第07 章 2說明說明 (1)函數(shù)定義不允許嵌套函數(shù)定義不允許嵌套。 在語言中,所有函數(shù)(包括主函數(shù)main())都是平行

5、的。一個 函數(shù)的定義,可以放在程序中的任意位置,主函數(shù)main()之前或之 后。但在一個函數(shù)的函數(shù)體內(nèi),不能再定義另一個函數(shù),即不能嵌 套定義。 (2)空函數(shù)既無參數(shù)、函數(shù)體又為空的函數(shù)。其一般形式 為: 函數(shù)類型 函數(shù)名(void) (3)在老版本C語言中,參數(shù)類型說明允許放在函數(shù)說明部分 的第2行單獨指定。 Return C語言程序設(shè)計教程電子教案-第07 章 7.1.2 函數(shù)的返回值與函數(shù)類型函數(shù)的返回值與函數(shù)類型 語言的函數(shù)兼有其它語言中的函數(shù)和過程兩種功能,從這個 角度看,又可把函數(shù)分為有返回值函數(shù)和無返回值函數(shù)兩種。 1函數(shù)返回值與return語句 有參函數(shù)的返回值,是通過函數(shù)中的

6、return語句來獲 得的。 (1)return語句的一般格式: return ( 返回值表達 式 ); (2)return語句的功能:返回調(diào)用函數(shù),并將“返回 值表達式”的值帶給調(diào)用函數(shù)。 注意注意:調(diào)用函數(shù)中無return語句,并不是不返回一個值,而是一 個不確定的值。為了明確表示不返回值,可以用“void”定義成“無 (空)類型”。 C語言程序設(shè)計教程電子教案-第07 章 2函數(shù)類型函數(shù)類型 在定義函數(shù)時,對函數(shù)類型的說明,應(yīng)與return 語句中、返回值表達式的類型一致。 如果不一致,則以函數(shù)類型為準。如果缺省函數(shù) 類型,則系統(tǒng)一律按整型處理。 良好的程序設(shè)計習(xí)慣良好的程序設(shè)計習(xí)慣:為

7、了使程序具有良好的可 讀性并減少出錯,凡不要求返回值的函數(shù)都應(yīng)定義為 空類型;即使函數(shù)類型為整型,也不使用系統(tǒng)的缺省 處理。 Return C語言程序設(shè)計教程電子教案-第07 章 7.1.3 對被調(diào)用函數(shù)的說明和函數(shù)原型對被調(diào)用函數(shù)的說明和函數(shù)原型 在ANSI C新標(biāo)準中,采用函數(shù)原型方式,對被調(diào)用函數(shù)進行說明, 其一般格式如下: 函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名(數(shù)據(jù)類型數(shù)據(jù)類型 參數(shù)名參數(shù)名, 數(shù)據(jù)類型數(shù)據(jù)類型 參數(shù)名參數(shù)名2); 語言同時又規(guī)定,在以下2種情況下,可以省去對被調(diào)用函數(shù) 的說明: (1)當(dāng)被調(diào)用函數(shù)的函數(shù)定義出現(xiàn)在調(diào)用函數(shù)之前時。因為在 調(diào)用之前,編譯系統(tǒng)已經(jīng)知道了被調(diào)用函數(shù)

8、的函數(shù)類型、參數(shù)個數(shù)、 類型和順序。 (2)如果在所有函數(shù)定義之前,在函數(shù)外部(例如文件開始處) 預(yù)先對各個函數(shù)進行了說明,則在調(diào)用函數(shù)中可缺省對被調(diào)用函數(shù)的 說明。 Return C語言程序設(shè)計教程電子教案-第07 章 7.1.4 函數(shù)的調(diào)用函數(shù)的調(diào)用 在程序中,是通過對函數(shù)的調(diào)用來執(zhí)行函數(shù)體的,其過程與其它 語言的子程序調(diào)用相似。 語言中,函數(shù)調(diào)用的一般形式為: 函數(shù)名函數(shù)名(實際參數(shù)表實際參數(shù)表) 切記切記:實參的個數(shù)、類型和順序,應(yīng)該與被調(diào)用函數(shù)所要求的 參數(shù)個數(shù)、類型和順序一致,才能正確地進行數(shù)據(jù)傳遞。 在語言中,可以用以下幾種方式調(diào)用函數(shù): (1)函數(shù)表達式函數(shù)表達式。函數(shù)作為表達

9、式的一項,出現(xiàn)在表達式中, 以函數(shù)返回值參與表達式的運算。這種方式要求函數(shù)是有返回值的。 (2)函數(shù)語句)函數(shù)語句。C語言中的函數(shù)可以只進行某些操作而不返回 函數(shù)值,這時的函數(shù)調(diào)用可作為一條獨立的語句。 (3)函數(shù)實參函數(shù)實參。函數(shù)作為另一個函數(shù)調(diào)用的實際參數(shù)出現(xiàn)。這 種情況是把該函數(shù)的返回值作為實參進行傳送,因此要求該函數(shù)必 須是有返回值的。 C語言程序設(shè)計教程電子教案-第07 章 說明說明: (1)調(diào)用函數(shù)時,函數(shù)名稱必須與具有該功能的自 定義函數(shù)名稱完全一致。 (2)實參在類型上按順序與形參,必須一一對應(yīng)和 匹配。如果類型不匹配,C編譯程序?qū)促x值兼容的規(guī)則 進行轉(zhuǎn)換。如果實參和形參的類

10、型不賦值兼容,通常并 不給出出錯信息,且程序仍然繼續(xù)執(zhí)行,只是得不到正 確的結(jié)果。 (3)如果實參表中包括多個參數(shù),對實參的求值順 序隨系統(tǒng)而異。有的系統(tǒng)按自左向右順序求實參的值, 有的系統(tǒng)則相反。Turbo C和MS C是按自右向左的順序進 行的 。 Return C語言程序設(shè)計教程電子教案-第07 章 7.1.5 函數(shù)的形參與實參函數(shù)的形參與實參 函數(shù)的參數(shù)分為形參形參和實參實參兩種,作用是實現(xiàn)數(shù)據(jù) 傳送。 形參出現(xiàn)在函數(shù)定義中,只能在該函數(shù)體內(nèi)使用。 發(fā)生函數(shù)調(diào)用時,調(diào)用函數(shù)把實參的值復(fù)制1份,傳送給 被調(diào)用函數(shù)的形參,從而實現(xiàn)調(diào)用函數(shù)向被調(diào)用函數(shù)的 數(shù)據(jù)傳送。 案例案例7.3 實參對形

11、參的數(shù)據(jù)傳遞。 /*實參對形參的數(shù)據(jù)傳遞。*/ /*案例代碼文件名:AL7_3.C*/ C語言程序設(shè)計教程電子教案-第07 章 void main() void s(int n); /*說明函數(shù)*/ int n=100; /*定義實參n,并初始化*/ s(n); /*調(diào)用函數(shù)*/ printf(n_s=%dn,n); /*輸出調(diào)用后實參的值,便于進行比較*/ getch(); /* */ void s(int n) int i; printf(n_x=%dn,n); /*輸出改變前形參的值*/ for(i=n-1; i=1; i-) n=n+i; /*改變形參的值*/ printf(n_x=%

12、dn,n); /*輸出改變后形參的值*/ 程序演示 C語言程序設(shè)計教程電子教案-第07 章 說明: (1)實參可以是常量、變量、表達式、函數(shù)等。無論實參是何 種類型的量,在進行函數(shù)調(diào)用時,它們都必須具有確定的值,以便 把這些值傳送給形參。 因此,應(yīng)預(yù)先用賦值、輸入等辦法,使實參獲得確定的值。 (2)形參變量只有在被調(diào)用時,才分配內(nèi)存單元;調(diào)用結(jié)束時, 即刻釋放所分配的內(nèi)存單元。 因此,形參只有在該函數(shù)內(nèi)有效。調(diào)用結(jié)束,返回調(diào)用函數(shù)后, 則不能再使用該形參變量。 (3)實參對形參的數(shù)據(jù)傳送是單向的,即只能把實參的值傳送 給形參,而不能把形參的值反向地傳送給實參。 (4)實參和形參占用不同的內(nèi)存單

13、元,即使同名也互不影響。 Return C語言程序設(shè)計教程電子教案-第07 章 35a:b:調(diào)用前: 調(diào)用結(jié)束:35a:b: 例 5.6 交換兩個數(shù) #include main() int a=3,b=5; printf(“a=%d,tb=%dn,a,b); printf(s:n); s); printf(“a=%d,tb=%dn,a,b); swap(int x,int y) int temp; temp=x; x=y; y=temp; 調(diào)用 35x:y: 35a:b: swap: temp 35a:b: x:35y: C語言程序設(shè)計教程電子教案-第07 章 7.2 函數(shù)的嵌套調(diào)用和遞歸調(diào)用

14、 7.2.1 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用 函數(shù)的嵌套調(diào)用是指,在執(zhí)行被調(diào)用函數(shù)時,被調(diào)用函數(shù)又調(diào) 用了其它函數(shù)。這與其它語言的子程序嵌套調(diào)用的情形是類似的, 其關(guān)系可表示如圖7-1。 C語言程序設(shè)計教程電子教案-第07 章 案例7.4 計算s=1k+2k+3k+N k /*案例代碼文件名:AL7_4.C*/ /*功能:函數(shù)的嵌套調(diào)用*/ #define K 4 #define N 5 long f1(int n,int k)/*計算n的k次方*/ long power=n; int i; for(i=1;ik;i+) power *= n; return power; C語言程序設(shè)計教程電子

15、教案-第07 章 long f2(int n,int k)/*計算1到n的k次方之累加和*/ long sum=0; int i; for(i=1;i1) f=power(n-1)*n; else f=1; return(f); C語言程序設(shè)計教程電子教案-第07 章 main() int n; long y; printf(input a inteager number:n); scanf(%d, y=power(n); printf(%d!=%ldn,n,y); getch(); 程序演示 Return C語言程序設(shè)計教程電子教案-第07 章 7.3 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù) 數(shù)組

16、用作函數(shù)參數(shù)有兩種形式:一種是把數(shù)組元素 (又稱下標(biāo)變量)作為實參使用;另一種是把數(shù)組名作 為函數(shù)的形參和實參使用。 7.3.1 數(shù)組元素作為函數(shù)參數(shù)數(shù)組元素作為函數(shù)參數(shù) 7.3.2 數(shù)組名作為函數(shù)的形參和實參數(shù)組名作為函數(shù)的形參和實參 Return C語言程序設(shè)計教程電子教案-第07 章 7.3.1 數(shù)組元素作為函數(shù)參數(shù)數(shù)組元素作為函數(shù)參數(shù) 數(shù)組元素就是下標(biāo)變量,它與普通變量并無區(qū)別。數(shù) 組元素只能用作函數(shù)實參,其用法與普通變量完全相同: 在發(fā)生函數(shù)調(diào)用時,把數(shù)組元素的值傳送給形參,實現(xiàn)單 向值傳送。 案例7.6 寫一函數(shù),統(tǒng)計字符串中字母的個數(shù)。 /*案例代碼文件名:AL7_6.C*/ /

17、*功能:數(shù)組元素作為函數(shù)實參*/ int isalp(char c) if (c=a else return(0); C語言程序設(shè)計教程電子教案-第07 章 main() int i,num=0; char str255; printf(Input a string: ); gets(str); for(i=0;stri!=0;i+) if (isalp(stri) num+; puts(str); printf(num=%dn,num); getch(); 程序演示 C語言程序設(shè)計教程電子教案-第07 章 說明: (1)用數(shù)組元素作實參時,只要數(shù)組類型和函數(shù)的 形參類型一致即可,并不要求函數(shù)

18、的形參也是下標(biāo)變量。 換句話說,對數(shù)組元素的處理是按普通變量對待的。 (2)在普通變量或下標(biāo)變量作函數(shù)參數(shù)時,形參變 量和實參變量是由編譯系統(tǒng)分配的兩個不同的內(nèi)存單元。 在函數(shù)調(diào)用時發(fā)生的值傳送,是把實參變量的值賦予形 參變量。 Return C語言程序設(shè)計教程電子教案-第07 章 7.3.2 數(shù)組名作為函數(shù)的形參和實參數(shù)組名作為函數(shù)的形參和實參 數(shù)組名作函數(shù)參數(shù)時,既可以作形參,也可以作實參。 數(shù)組名作函數(shù)參數(shù)時,要求形參和相對應(yīng)的實參都必 須是類型相同的數(shù)組(或指向數(shù)組的指針變量),都必 須有明確的數(shù)組說明 案例案例7.7 已知某個學(xué)生5門課程的成績,求平均成績。 /*案例代碼文件名:AL

19、7_7.C*/ float aver(float a ) /*求平均值函數(shù)*/ int i; float av,s=a0; for(i=1;i5;i+) s += ai; av=s/5; return av; C語言程序設(shè)計教程電子教案-第07 章 void main() float sco5,av; int i; printf(ninput 5 scores:n); for(i=0;i5;i+) scanf(%f, 程序演示 C語言程序設(shè)計教程電子教案-第07 章 說明說明: (1)用數(shù)組名作函數(shù)參數(shù),應(yīng)該在調(diào)用函數(shù)和被調(diào) 用函數(shù)中分別定義數(shù)組,且數(shù)據(jù)類型必須一致,否則結(jié) 果將出錯。例如,在

20、本案例中,形參數(shù)組為a,實參數(shù) 組為sco,它們的數(shù)據(jù)類型相同。 (2)C編譯系統(tǒng)對形參數(shù)組大小不作檢查,所以形 參數(shù)組可以不指定大小。例如,本案例中的形參數(shù)組a。 如果指定形參數(shù)組的大小,則實參數(shù)組的大小必須 大于等于形參數(shù)組,否則因形參數(shù)組的部分元素沒有確 定值而導(dǎo)致計算結(jié)果錯誤。 Return C語言程序設(shè)計教程電子教案-第07 章 7.4 內(nèi)部變量與外部變量內(nèi)部變量與外部變量 語言中所有的變量都有自己的作用域。變量 說明的位置不同,其作用域也不同,據(jù)此將語言中 的變量分為內(nèi)部變量和外部變量。 7.4.1 內(nèi)部變量 7.4.2 外部變量 Return C語言程序設(shè)計教程電子教案-第07

21、章 7.4.1 內(nèi)部變量內(nèi)部變量 在一個函數(shù)內(nèi)部說明的變量是內(nèi)部變量,它只在 該函數(shù)范圍內(nèi)有效。 也就是說,只有在包含變量說明的函數(shù)內(nèi)部,才 能使用被說明的變量,在此函數(shù)之外就不能使用這些 變量了。所以內(nèi)部變量也稱“局部變量”。 C語言程序設(shè)計教程電子教案-第07 章 例如: int f1(int a) /*函數(shù)f1*/ int b,c; /*a,b,c作用域:僅限于函數(shù)f1()中*/ int f2(int x) /*函數(shù)f2*/ int y,z; /*x,y,z作用域:僅限于函數(shù)f2()中*/ main() int m,n; /*m,n作用域:僅限于函數(shù)main()中*/ C語言程序設(shè)計教程

22、電子教案-第07 章 關(guān)于局部變量的作用域還要說明以下幾點: 1主函數(shù)main()中定義的內(nèi)部變量,也只能在主函數(shù)中 使用,其它函數(shù)不能使用。同時,主函數(shù)中也不能使用其它 函數(shù)中定義的內(nèi)部變量。因為主函數(shù)也是一個函數(shù),與其它 函數(shù)是平行關(guān)系。這一點是與其它語言不同的,應(yīng)予以注意。 2形參變量也是內(nèi)部變量,屬于被調(diào)用函數(shù);實參變 量,則是調(diào)用函數(shù)的內(nèi)部變量。 3允許在不同的函數(shù)中使用相同的變量名,它們代表 不同的對象,分配不同的單元,互不干擾,也不會發(fā)生混淆。 4在復(fù)合語句中也可定義變量,其作用域只在復(fù)合語 句范圍內(nèi)。 Return C語言程序設(shè)計教程電子教案-第07 章 7.4.2 外部變量外

23、部變量 在函數(shù)外部定義的變量稱為外部變量。以此類推, 在函數(shù)外部定義的數(shù)組就稱為外部數(shù)組。 外部變量不屬于任何一個函數(shù),其作用域作用域是:從外 部變量的定義位置開始,到本文件結(jié)束為止。 外部變量可被作用域內(nèi)的所有函數(shù)直接引用,所以 外部變量又稱全局變量。 C語言程序設(shè)計教程電子教案-第07 章 案例案例7.9 輸入長方體的長(l)、寬(w)、高(h),求長方體體積 及正、側(cè)、頂三個面的面積。 /*案例代碼文件名:AL7_9.C*/ /*功能:利用全局變量計算長方體的體積及三個面的面積*/ int s1,s2,s3; int vs(int a,int b,int c) int v; v=a*b*

24、c; s1=a*b; s2=b*c; s3=a*c; return v; main() int v,l,w,h; clrscr(); printf(ninput length,width and height: ); scanf(%d%d%d, v=vs(l,w,h); printf(v=%d s1=%d s2=%d s3=%dn,v,s1,s2,s3); getch(); 程序演示 C語言程序設(shè)計教程電子教案-第07 章 對于全局變量還有以下幾點說明: (1)外部變量可加強函數(shù)模塊之間的數(shù)據(jù)聯(lián)系,但又使這些函數(shù) 依賴這些外部變量,因而使得這些函數(shù)的獨立性降低。 從模塊化程序設(shè)計的觀點來看這是

25、不利的,因此不是非用不可時, 不要使用外部變量。 (2)在同一源文件中,允許外部變量和內(nèi)部變量同名。在內(nèi)部變 量的作用域內(nèi),外部變量將被屏蔽而不起作用。 (3)外部變量的作用域是從定義點到本文件結(jié)束。如果定義點之 前的函數(shù)需要引用這些外部變量時,需要在函數(shù)內(nèi)對被引用的外部變 量進行說明。外部變量說明的一般形式為: extern 數(shù)據(jù)類型 外部變量,外部變量2; 注意注意:外部變量的定義和外部變量的說明是兩回事。外部變量的 定義,必須在所有的函數(shù)之外,且只能定義一次。而外部變量的說明, 出現(xiàn)在要使用該外部變量的函數(shù)內(nèi),而且可以出現(xiàn)多次。 C語言程序設(shè)計教程電子教案-第07 章 案例案例7.10

26、外部變量的定義與說明。 /*案例代碼文件名:AL7_10.C*/ int vs(int xl,int xw) extern int xh; /*外部變量xh的說明*/ int v; v=xl*xw*xh; /*直接使用外部變量xh的值*/ return v; main() extern int xw,xh; /*外部變量的說明*/ int xl=5; /*內(nèi)部變量的定義*/ printf(xl=%d,xw=%d,xh=%dnv=%d,xl,xw,xh,vs(xl,xw); int xl=3,xw=4,xh=5; /*外部變量xl、xw、xh的定義*/ 程序演示 Return C語言程序設(shè)計教程

27、電子教案-第07 章 7.5 內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù)和外部函數(shù) 7.5.1 內(nèi)部函數(shù)(又稱靜態(tài)函數(shù))內(nèi)部函數(shù)(又稱靜態(tài)函數(shù)) 7.5.2 外部函數(shù)外部函數(shù) 7.5.3 多個源程序文件的編譯和連接多個源程序文件的編譯和連接 當(dāng)一個源程序由多個源文件組成時,語言根據(jù)函數(shù) 能否被其它源文件中的函數(shù)調(diào)用,將函數(shù)分為內(nèi)部函數(shù)內(nèi)部函數(shù)和 外部函數(shù)外部函數(shù)。 Return C語言程序設(shè)計教程電子教案-第07 章 7.5.1 內(nèi)部函數(shù)(又稱靜態(tài)函數(shù))內(nèi)部函數(shù)(又稱靜態(tài)函數(shù)) 如果在一個源文件中定義的函數(shù),只能被本文件中的函數(shù)調(diào)用, 而不能被同一程序其它文件中的函數(shù)調(diào)用,這種函數(shù)稱為內(nèi)部函數(shù)。 定義一個內(nèi)部

28、函數(shù),只需在函數(shù)類型前再加一個“static”關(guān)鍵字即 可,如下所示: static 函數(shù)類型 函數(shù)名(函數(shù)參數(shù)表) 關(guān)鍵字“static”,譯成中文就是“靜態(tài)的”,所以內(nèi)部函數(shù)又稱 靜態(tài)函數(shù)。但此處“static”的含義不是指存儲方式,而是指對函數(shù)的 作用域僅局限于本文件。 使用內(nèi)部函數(shù)的好處是:不同的人編寫不同的函數(shù)時,不用擔(dān)心 自己定義的函數(shù),是否會與其它文件中的函數(shù)同名,因為同名也沒有 關(guān)系。 Return C語言程序設(shè)計教程電子教案-第07 章 7.5.2 外部函數(shù)外部函數(shù) 外部函數(shù)的定義:在定義函數(shù)時,如果沒有加關(guān)鍵字“static”,或 冠以關(guān)鍵字“extern”,表示此函數(shù)是外

29、部函數(shù): extern 函數(shù)類型 函數(shù)名(函數(shù)參數(shù)表) 調(diào)用外部函數(shù)時,需要對其進行說明: extern 函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名(參數(shù)類型表參數(shù)類型表),函數(shù)名,函數(shù)名2(參數(shù)類型表參數(shù)類型表 2); 案例案例7.11 外部函數(shù)應(yīng)用。 (1)文件mainf.c main() extern void input(),process(),output(); input(); process(); output(); C語言程序設(shè)計教程電子教案-第07 章 (2)文件subf1.c extern void input()/*定義外部函數(shù)*/ (3)文件subf2.c extern void

30、process()/*定義外部函數(shù)*/ (4)文件subf3.c extern void output()/*定義外部函數(shù)*/ Return C語言程序設(shè)計教程電子教案-第07 章 7.5.3 多個源程序文件的編譯和連接多個源程序文件的編譯和連接 (1)一般過程 編輯各源文件 創(chuàng)建Project(項目)文件 設(shè)置項 目名稱 編譯、連接,運行,查看結(jié)果。 (2)創(chuàng)建Project(項目)文件 用編輯源文件相同的方法,創(chuàng)建一個擴展名為.PRJ的 項目文件:該文件中僅包括將被編譯、連接的各源文件 名,一行一個,其擴展名.C可以缺?。晃募捻樞?, 僅影響編譯的順序,與運行無關(guān)。 注意:如果有某個(些

31、)源文件不在當(dāng)前目錄下,則 應(yīng)在文件名前冠以路徑。 C語言程序設(shè)計教程電子教案-第07 章 (3)設(shè)置項目名稱設(shè)置項目名稱 打開菜單,選取ProjectProject name,輸入項目文 件名即可。 (4)編譯、連接,運行,查看結(jié)果)編譯、連接,運行,查看結(jié)果 與單個源文件相同。編譯產(chǎn)生的目標(biāo)文件,以及連接 產(chǎn)生的可執(zhí)行文件,它們的主文件名,均與項目文件的 主文件名相同。 注意注意:當(dāng)前項目文件調(diào)試完畢后,應(yīng)選取Project Clear project,將其項目名稱從“Project name”中清除(清 除后為空)。否則,編譯、連接和運行的,始終是該項 目文件! C語言程序設(shè)計教程電子教

32、案-第07 章 (5)關(guān)于錯誤跟蹤)關(guān)于錯誤跟蹤 缺省時,僅跟蹤當(dāng)前一個源程序文件。如果希望自動 跟蹤項目中的所有源文件,則應(yīng)將OptionsEnvironment Message Tracking開關(guān)置為“All files ”:連續(xù)按回車鍵,直 至“All files”出現(xiàn)為止。此時,滾動消息窗口中的錯誤信 息時,系統(tǒng)會自動加載相應(yīng)的源文件到編輯窗口中。 也可關(guān)閉跟蹤(將“Message Tracking”置為“Off”)。此 時,只要定位于感興趣的錯誤信息上,然后回車,系統(tǒng)也 會自動將相應(yīng)源文件加載到編輯窗口中。 Return C語言程序設(shè)計教程電子教案-第07 章 7.6 變量的動態(tài)存

33、儲與靜態(tài)存儲簡介變量的動態(tài)存儲與靜態(tài)存儲簡介 在語言中,對變量的存儲類型說明有以下四種: 自動變量(auto)、寄存器變量(register)、外部變量 (extern)、靜態(tài)變量(static)。自動變量和寄存器變量屬 于動態(tài)存儲方式,外部變量和靜態(tài)內(nèi)部變量屬于靜態(tài) 存儲方式。 7.6.1 內(nèi)部變量的存儲方式內(nèi)部變量的存儲方式 7.6.2 外部變量的存儲方式外部變量的存儲方式 Return C語言程序設(shè)計教程電子教案-第07 章 7.6.1 內(nèi)部變量的存儲方式內(nèi)部變量的存儲方式 1靜態(tài)存儲靜態(tài)內(nèi)部變量 (1)定義格式: static 數(shù)據(jù)類型 內(nèi)部變量表; (2)存儲特點 1)靜態(tài)內(nèi)部變量屬

34、于靜態(tài)存儲。在程序執(zhí)行過程中, 即使所在函數(shù)調(diào)用結(jié)束也不釋放。換句話說,在程序執(zhí)行 期間,靜態(tài)內(nèi)部變量始終存在,但其它函數(shù)是不能引用它 們的。 2)定義但不初始化,則自動賦以(整型和實型) 或0(字符型);且每次調(diào)用它們所在的函數(shù)時,不再重 新賦初值,只是保留上次調(diào)用結(jié)束時的值! (3)何時使用靜態(tài)內(nèi)部變量 1)需要保留函數(shù)上一次調(diào)用結(jié)束時的值。 2)變量只被引用而不改變其值。 C語言程序設(shè)計教程電子教案-第07 章 2動態(tài)存儲動態(tài)存儲自動局部變量(又稱自動變量) (1)定義格式定義格式:auto 數(shù)據(jù)類型 變量表; (2)存儲特點存儲特點 1)自動變量屬于動態(tài)存儲方式。在函數(shù)中定義的自動變量

35、,只 在該函數(shù)內(nèi)有效;函數(shù)被調(diào)用時分配存儲空間,調(diào)用結(jié)束就釋放。 在復(fù)合語句中定義的自動變量,只在該復(fù)合語句中有效;退出復(fù) 合語句后,也不能再使用,否則將引起錯誤。 2)定義而不初始化,則其值是不確定的。如果初始化,則賦初 值操作是在調(diào)用時進行的,且每次調(diào)用都要重新賦一次初值。 3)由于自動變量的作用域和生存期,都局限于定義它的個體內(nèi) (函數(shù)或復(fù)合語句),因此不同的個體中允許使用同名的變量而不 會混淆。即使在函數(shù)內(nèi)定義的自動變量,也可與該函數(shù)內(nèi)部的復(fù)合 語句中定義的自動變量同名。 建議:建議:系統(tǒng)不會混淆,并不意味著人也不會混淆,所以盡量少用 同名自動變量! C語言程序設(shè)計教程電子教案-第07 章 案例案例7.13自動變量與靜態(tài)局部變

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論