西安交大語言課件第四章函數_第1頁
西安交大語言課件第四章函數_第2頁
西安交大語言課件第四章函數_第3頁
西安交大語言課件第四章函數_第4頁
西安交大語言課件第四章函數_第5頁
已閱讀5頁,還剩74頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第四章 函數西安交通大學程序設計基礎課程組2008本章要點函數概述函數定義函數參數與函數的返回值函數的調用函數嵌套調用和遞歸調用變量作用域變量存儲類別與生存周期內部函數和外部函數問題的提出:在實際應用中,需要解決的問題很復雜或很龐大時,編程怎么實現?從哪里入手?代碼量太大功能太復雜一個人不能勝任用一個main()實現需要多長代碼?分而治之(模塊化)模塊化的優(yōu)點:模塊各司其職每個模塊只負責一件事情,它可以更專心便于進行單個模塊的設計、開發(fā)、調試、測試和維護等工作一個模塊一個模塊地完成,最后再將它們集成開發(fā)人員各司其職按模塊分配任務,職責明確并行開發(fā),縮短開發(fā)時間假如不采用模塊化?main()當中

2、能放多少行程序?讀多少行的程序能讓你不頭疼?假如printf()函數由10行代碼替換,那么你見過的程序會成什么樣子?如果所有代碼都在main()當中,如果代碼都在一個文件中,怎么團隊合作?函數和模塊化有什么關系?函數是C語言中模塊化編程的最小單位函數(function)和 模塊(module)可以把每個函數看作一個模塊若干相關的函數可以合并作一個“模塊”main()printf()scanf()power()putchar()getchar()main()stdio:printf()scanf()putchar()getchar()mymdl:power()4.1 函數概述在實際應用中,對于一

3、個問題很復雜或很龐大時,一般是將其分解為若干相對小且簡單的子問題進行解決。每一個子問題的在C語言中是用函數描述的。因此,人們稱C語言程序是由一系列函數組成的,由此也可以看出C語言是支持結構化程序設計的。 自頂向下逐步求精4.1 函數概述總任務子任務1子任務2子任務n子任務21子任務22子任務n1子任務n2子任務n3子任務221圖1 結構化任務劃分示意4.1 函數概述C語言中的函數分為兩類:由系統(tǒng)提供的標準庫函數由程序員自定義的函數函數的主要作用是用來完成重復任務,或者完成具有獨立功能的模塊。在C語言中,程序是由一個主函數main( )和其他若干函數構成的。在主函數main( )中可以調用其他函

4、數(調用函數即執(zhí)行函數),其他函數之間也可以互相調用。函數之間的調用關系如圖2所示:4.1 函數概述主函數子函數1子函數2子函數n子函數21子函數22子函數n1子函數n2子函數n3子函數221圖2 函數之間的調用關系示意圖4.1 函數概述一個C程序可以由一個或多個函數組成;一個C程序必須從main()函數開始執(zhí)行。 函數間可以相互調用,但不能調用main函數,它是由系統(tǒng)調用的;函數又分為如下兩類:無參函數和帶參函數。參數用來向函數傳遞不同的數據。函數都可以返回或不返回一個函數值。返回一個函數值可供調用它的函數使用,或者用來判斷函數的執(zhí)行狀態(tài)。4.2.1 函數的定義形式 () 用括起,表示該部分

5、內容可以省略; 用括起,表示這部分是必要的。4.2 函數定義4.2 函數定義說明:1、用于確定這個函數的返回值的類型,如整型、實型、字符型等。默認類型是int型。2、定義了函數的名稱,通過這個名稱才能對某個函數進行調用。 3、規(guī)定了函數有什么樣的參數。形式參數的作用是控制函數進行什么樣的操作,它們的值由調用這個函數的程序給出。根據函數有無參數,又可以把函數分為無參函數和有參函數,若形式參數有多個,則形式參數之間用逗號隔開,由主調函數通過參數向被調函數傳遞數據。4.2.1 函數的定義形式4. 部分規(guī)定了形式參數的類型。形參與形參的類型說明可以分開描述,如:fun (x, y, z) int x,

6、 y, z;也可以放在一起,寫成:fun (int x, int y, int z)5. 規(guī)定了在函數內部要用到的變量以及它們的類型。6. 規(guī)定了函數中要執(zhí)行的語句。函數體語句和變量定義部分用一對大括號括起來。函數名命名Windows風格函數名命名用大寫字母開頭的單詞組合而成 變量名形式“名詞”或者“形容詞+名詞”如變量名oldValue與newValue等函數名形式“動詞”或者“動詞+名詞”(動賓詞組)如函數名GetMax()等 4.2.1 函數的定義形式例4.2 關于函數的定義。 int max(x, y) int x, y; int t; t = (xy) ? x:y ; return(

7、t); main( ) int a, b, c; scanf (“%d, %d”, &a, &b); c = max(a, b); printf (“This max is: %dn”, c); 類型說明符X,y是形式參數無返回值無形式參數形式參數類型說明函數名a,b是實參4.2.1 函數的定義形式(2)a,b是實在參數;c為main函數中的局部變量x,y是形式參數; t為max函數中的局部變量 程序執(zhí)行順序: 運行主程序main() 當執(zhí)行c=max(a,b)語句時,調用函數max max函數的運行結果由return語句返回 main函數中輸出結果4.2.2 空函數按如下方式定義的函數稱為空

8、函數: ( ) 在結構化程序設計中,可將那些功能較復雜、作用較為次要的函數先定義成空函數,集中精力編寫那些基本的、常用的函數,邊編寫邊調試。最后再一步一步的完善各個函數。這樣的程序可讀性好,易調試,易維護,易擴充。4.3 函數參數與函數的返回值4.3.1 形式參數與實在參數1. 形式參數在定義函數時函數名后括號內的變量表列就稱為形式參數表。只有當函數被調用時,形參才在內存中開辟空間。調用結束后,形參自動從內存中被釋放掉。 2、實在參數在調用函數時函數名后括號內的變量表列被稱為實在參數表。K4-14.3.1 形式參數與實在參數2. 實在參數實參的作用是給相應的形參賦值,所以在調用函數前,實參必須

9、要有一個確切的值,它可以是常量、變量或表達式。實參與形參的關系是單向賦值的關系。3. 形參類型在函數定義中,必須規(guī)定形參的類型。有兩種定義方式,如:int max(x, y, z) 或int max(int x, int y, float z)int x, y; float z; 4.3.1 形式參數與實在參數4. 實參與形參的結合:單向賦值傳遞!例4.3 關于實參與形參的結合的例子。 int echonum( int i, int j ) int t; t = i; i = j; j = t; printf(“In function i = %d, j = %dn”, i, j); main

10、( ) int i = 6, j = 8; echonum(i, j); printf(“Out function i = %d, j = %dn”, i, j); 程序運行結果: In function i = 8, j = 6 Out function i = 6, j = 8EX4-34.3.2 函數的返回值return語句的一般格式如下: return (); 或 return ;它的功能是將表達式的值作為函數的返回值返回,結束本次函數調用并回到調用函數語句。return;如果只想從函數返回而不想帶回返回值,可以使用不帶表達式的方式,也可以省略不寫return語句。void echol

11、ine(); 明確函數無返回值不加類型說明的函數,自動按整形處理。但TC+3.0要求必須指定函數類型,否則編譯不通過。函數返回值的說明:1、函數中可以有多個return語句,執(zhí)行到哪個return語句,就從那一個return語句返回。2、return只能返回一個值,而不能返回多個值。3、return(表達式) 語句中的表達式值的類型應與定義函數時函數的類型一致。K4-24.4 函數的調用4.4.1 函數調用格式函數調用的一般格式: ()有多個實參,要用逗號將實參變量隔開;實參和形參必須個數相等,順序依次對應。當實參和對應形參類型不一致時,先將實參的類型轉換成形參的類型后再傳遞。如果這個函數是無

12、參函數,那么實參表列可以省略,但括號不能省略。4.4.1 函數調用格式在C語言中,我們可以將函數調用當成一個表達式,如果在這個表達式后加一個分號,就成為函數調用語句;函數實參的求值順序在各C語言系統(tǒng)中是不一樣的,有的是從左到右,有的是從右到左。參見書P1114.4.2 函數調用規(guī)則被調用函數必須是已經存在的函數、庫函數或用戶已定義過的函數。如果使用庫函數,還要在使用庫函數的源文件開頭用#include聲明庫函數所在的頭文件。如果使用用戶自定義的函數,還要在主調函數中說明用戶函數的返回值類型,函數說明的一般形式為: ( );4.4.2 函數調用規(guī)則C語言規(guī)定在以下幾種情況中,可以不在主調函數中說

13、明函數的返回值類型:如果被調用函數的返回值為整型或字符型時,可不進行說明。如果被調用函數在主調函數之前定義,也可不進行說明。推薦在程序的開頭對程序中的所有函數進行定義;P112例4.44.5 函數的嵌套調用和遞歸調用調用關系上來看,函數之間就存在兩種關系:嵌套關系和遞歸關系。 4.5.1 函數的嵌套調用函數的嵌套調用表現在某個函數在執(zhí)行過程中,又可以調用另外一個函數。也就是說,函數在執(zhí)行過程中,不是執(zhí)行完一個函數再去執(zhí)行另一個函數而是可以在任何需要的時候對其他函數進行調用。4.5.1 函數的嵌套調用例4.7 關于函數的嵌套調用 #include main( ) int i , j , k; i

14、 = 0; j = 1; k = 2; k = q(0, k); printf(“%4d %4d %4dn”, i,j,k); k = q(1, k); printf(“%4d %4d %4dn”, i,j,k); j = q(2, j); printf(“%4d %4d %4dn”, i,j,k); EX4-74.5.1 函數的嵌套調用 int q(int h, int j) int i; i = j; if (h = 0) j = p(j); else i = p(i); printf(“%4d %4d %4dn”, i, j, h); return(j); int p(int i) re

15、turn(+i); 運行結果:230013431013212013EX4-74.5.1 函數的嵌套調用 下圖給出例4.7程序執(zhí)行的流程。序號表示執(zhí)行的先后關系。main( )函數調用q( )函數main( )函數結束q( )函數p( )函數調用p( )函數q( )函數結束p( )函數結束123456789從圖中可以看出,函數在執(zhí)行過程中可以對另一函數進行調用,即實現了函數的嵌套調用。4.5.2 函數的遞歸調用如果在調用函數時,被調用函數又是函數本身,那么這種調用就被稱為函數的遞歸調用。函數的遞歸調用分直接遞歸調用和間接遞歸調用。如果在調用函數的本身又出現直接調用該函數本身,則稱為函數的直接遞歸

16、調用;如果在調用函數的本身又出現間接調用該函數本身,則稱為函數的間接遞歸調用。P116例4.84.5.2 函數的遞歸調用采用遞歸方法解決的問題一般應符合以下條件:可以把該問題化為一個新問題,新問題的解決方法與原問題的解決方法相同,只是所處理的對象有規(guī)律的遞增或遞減,相對簡單一些。通過轉換最終使問題得到解決。必須有一個結束遞歸的條件。因此,遞歸程序由兩大部分構成:當某一條件成立時不再進行遞歸調用,即結束遞歸。當條件不成立時仍然進行遞歸調用。4.5.2 函數的遞歸調用例4.9 n的階乘可以采用兩種形式定義: (1) n! = 1 * 2 * 3 * 4 * * n (2) 1 當n = 1時 f(

17、n)= n! = n * f(n-1) 當n 1時 第二種就是遞歸定義。程序如下:long facl( int n ) long f; if (n = 1) f = 1; else f = n * facl(n-1); return ( f ) ; 4.5.2 函數的遞歸調用例4.10 在進行人口普查時,人口普查員問一戶農家的主人:“你家有幾個孩子?”主人答:“五個”,“您大孩子多大了?”“比老二大兩歲”,“那老二多大了?”“比老三大兩歲”,“那老三多大了?”“比老四大兩歲”,“那老四多大了?”“比老五大兩歲”,“那老五多大了?”“老五一歲了”這時才知道老大九歲了。我們可以列一組式子:AGE(

18、1) = AGE(2) +2; AGE(2) = AGE(3 )+2; AGE(3) = AGE(4) +2; AGE(4) = AGE(5) +2; AGE(5) = 1;P117例4.104.5.2 函數的遞歸調用簡化一下,可得到如下的數學式子: 1 N = 5 AGE(N) = AGE(N+1)+2 1N0 這個過程就是遞歸的過程,程序如下:float power( float x, int n ) float y; printf(“begin n=%dn”,n); if (n = 0) y = 1; else y = x * power(x,n-1); printf(“end n=%d

19、n”,n); return ( y ) ; 4.5.2 函數的遞歸調用 main( ) float z , t ; t = 2. 0; z = power(t ,3); printf(“z=%5.1f n”, z ); 運行結果: begin n=3begin n=2 begin n=1begin n=0 end n=0 end n=1 end n=2 end n=3 z=8.0 下面講變量的分類:從變量的作用域分:全局變量局部變量從變量存儲類別和生存周期分:靜態(tài)存儲類型動態(tài)存儲類型4.6 變量作用域任何一個變量都是有它的管轄范圍,也稱為變量的作用域。只有在變量的作用域范圍內才能使用這個變量。

20、在C語言中如果按作用域分,變量分為局部變量和全局變量。4.6.1 局部變量在一個函數內部定義的變量被稱為局部變量局部變量只能在定義它的函數內部使用,而不能在其它函數內使用這個變量。4.6.1 局部變量說明:main函數內部定義的變量只能在main函數內部使用,而在其它函數內部不能使用main函數內部定義的變量。不同的函數中可以使用相同的變量名,但它們是屬于不同函數的變量,它們的作用域是不同的,在不同的區(qū)域內分配空間。形參也屬于局部變量,作用范圍在定義它的函數內,在定義形參和函數體內的變量不能重名;P119 4.6.14.6.2 全局變量例4.11 關于全局變量int x, y;/*外部變量*/

21、 float f1(int a) float a, b; int f2(int c) 全局變量x,y int z ;的作用范圍 全局變量a,b main( )的作用范圍 int m, n ; 在函數外部定義的變量稱為外部變量,外部變量屬于全局變量。全局變量的作用域是從定義變量的位置開始到本源文件結束。4.6.2 全局變量說明:1、在一個函數內部,既可以使用本函數定義的局部變量,也可以使用在此函數前定義的全局變量。2、全局變量的作用是使得函數間多了一種傳遞信息的方式。如果在一個程序中各個函數都要對同一個信息進行處理,就可以將這個信息定義成全局變量。例4.12 對一個數組進行排序,排序結果顯示在屏

22、幕上。要求用函數來實現。EX4-12void sort( );void echoa( );int a5 = 5, 6, 7, 3, 2;main( ) echoa( ); sort( ); echoa( );void echoa( ) int i; for(i = 0; i5; i +) printf(“%3d”, ai); printf(“n”); int n=5;void sort( ) int i, j, min, t; for(i=0;in-1;i+) min=i; for(j=i+1;jn;j+)if(ajamin) min = j; t = ai; ai = amin; amin

23、= t; 程序運行結果:5 6 7 3 2 2 3 5 6 7第 i 輪置換后,ai是余下的(n-i)個數中最小的,即依次求出第一個、第二個、第n個最小的數4.6.2 全局變量優(yōu)點:全局變量使函數之間的數據交換更容易,也更高效可以使用全局變量減少函數實參和形參個數缺點:誰都可以改寫全局變量,所以很難確定是誰改寫了它全局變量在全部執(zhí)行過程中都占用存儲單元不推薦使用全局變量!4.6.2 全局變量用extern定義外部變量的一般格式: extern 其作用是告訴系統(tǒng)這個函數中使用的變量是外面定義的全局變量,它在內存中不產生新的變量。如果在一個函數內部,一個局部變量和全局變量重名,那么是局部變量起作用

24、,而外部變量不起作用。P122 4.144.6.2 全局變量程序如下:int a =3, b =5;int max(a, b)int a, b; return (ab ? a : b);main( ) int a = 8; printf(“%d”, max(a, b); 程序運行結果:8例4.14 關于全局變量和局部變量重名的例子。思考:為什么全局變量的作用域是從定義變量的位置開始到本源文件結束,甚至可以是在多個文件中使用?為什么局部變量只能在在定義它的函數內部使用?實際上取決于變量在內存中的存儲類型4.7 變量存儲類別與生存周期系統(tǒng)開機后,內存被分為兩大塊。一塊是系統(tǒng)區(qū),存放操作系統(tǒng)等內容;

25、另一塊是用戶區(qū),用來存放被執(zhí)行的用戶程序。一個C程序在運行時,用戶區(qū)被分為三大塊:程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū) 用來存放C程序運行代碼 用來存放全局變量 用來存放如形參、函數體內部定義的局部變量動態(tài)存儲是根據需要臨時分配存儲空間,離開即釋放靜態(tài)存儲是在程序運行期間分配固定的存儲空間不釋放4.7 變量存儲類別與生存周期變量的存儲類型指數據在內存中存儲的方式,即編譯器為變量分配內存的方式,它決定變量的生存期。程序運行期間變量在內存中存在的時間稱為變量的生存周期。靜態(tài)存儲類別的生存周期是固定的,動態(tài)存儲類別的生存周期是根據變量調用而定除了前面講的外部變量extern(全局變量)和形參的聲明,還有哪些方

26、式可以確定它的存儲類別?4.7 變量存儲類別與生存周期在C語言中,每一個變量都有兩個屬性:數據類型數據的存儲類別在C語言中,共有四種存儲類別:自動存儲類別(auto)局部變量寄存器存儲類別(register)外部存儲類別(extern)全局變量靜態(tài)存儲類別(static)4.7 變量存儲類別與生存周期程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)局部變量(形參)、自動變量、函數調用的現場、寄存器存儲類別外部存儲類別、全局變量和靜態(tài)存儲類別的變量4.7.1 靜態(tài)存儲變量static凡是用關鍵字static定義的變量全部被稱為靜態(tài)變量;靜態(tài)存儲變量又分為:局部靜態(tài)存儲變量全局靜態(tài)存儲變量它們都存儲在靜態(tài)存儲區(qū)內,在程

27、序的整個運行期間這些靜態(tài)變量都存在。都用static聲明,聲明的位置不同一個是函數前面,一個是函數內部4.7.1 靜態(tài)存儲變量static局部靜態(tài)變量指的是在函數中用關鍵字static定義的變量,其作用范圍是從定義它的函數時起作用;局部靜態(tài)變量存儲在靜態(tài)存儲區(qū),在函數返回時這個靜態(tài)變量不會被釋放,仍然保存它的值。如果再次調用這個函數時,我們就可以直接使用這個保存下來的值。這是和前面講的局部變量的最大區(qū)別和全局變量有點像4.154.7.1 靜態(tài)存儲變量static例4.15 關于靜態(tài)變量 int sub( ) static int y = 0;y+;return(y); main( ) int

28、i;for(i = 0; i 5; i +) printf(“%3d”, sub(); 程序運行結果:1 2 3 4 54.7.1 靜態(tài)存儲變量static說明:局部的靜態(tài)變量如果不對其進行初始化,系統(tǒng)會自動對其賦值0。雖然局部的靜態(tài)變量在函數返回后依然存在,但由于它是局部變量,所以其它函數仍然不能對它進行引用。C語言規(guī)定,只有存儲在靜態(tài)存儲區(qū)中的變量才能對其進行初始化,即,只有對全局變量和用static定義的變量才能進行自動初始化。其他類型的變量,比如局部變量必須在程序中初始化后才能使用4.7.2 動態(tài)存儲變量auto®ister動態(tài)存儲變量有兩種:自動變量和寄存器變量1. 自動變量動

29、態(tài)存儲變量是存儲在動態(tài)存儲區(qū)的,這種變量只在定義它們的時候才創(chuàng)建,在定義它們的函數返回時系統(tǒng)回收這些變量所占內存。對這些變量的創(chuàng)建和回收是由系統(tǒng)自動完成的,所以叫自動變量(用關鍵字auto定義)。關鍵字auto可以省略。最典型的例子就是函數中定義的局部變量和形參4.7.2 動態(tài)存儲變量auto®ister2. 寄存器變量一般情況下所有的變量是存放在內存中的。如果有一個變量在某一段時間內重復使用的次數很多,如循環(huán)變量,允許將它存放在寄存器中,以提高程序的運行時間,這種變量被稱為“寄存器變量”,用關鍵字register定義。在C程序中寄存器變量的數目也有一定的限制,只有動態(tài)變量才能作為寄存器

30、變量。4.7.3 外部存儲變量extern外部變量就是在函數的外部定義的全局變量,用關鍵字extern來說明,它的作用域是從變量的定義開始到整個程序的結束;用extern來聲明外部變量在一個文件內部聲明外部變量在多個文件的程序中聲明外部變量用static來聲明外部變量P126 4.174.7.5 變量的生存周期變量的生存周期和變量的作用域可分為如下幾類:局部變量(auto)的生存周期,從定義它的函數運行開始到函數運行結束。其作用域在定義它的函數內。靜態(tài)局部變量static的生存周期,從程序的運行開始到整個程序運行結束。其作用域為定義它的函數內。4.7.5 變量的生存周期(續(xù))全局變量exter

31、n的生存周期,從整個源程序運行開始到整個程序運行結束。其作用域為整個源程序內。靜態(tài)全局變量static的生存周期,從定義它的源程序運行開始到定義它的源程序運行結束。其作用域在定義它的源程序內。只有深刻理解變量的作用域、存儲類別和變量的生存周期的含義,才能寫出高質量的C程序!全局和局部變量都有動態(tài)和靜態(tài)兩種存儲方式常用的是全局變量靜態(tài)存儲,局部變量采用動態(tài)存儲靜態(tài)局部變量和靜態(tài)全局變量是兩個特例!static要慎用4.7.5 變量的生存周期變量的作用范圍在什么范圍是可以調用的,超過此范圍就無法調用變量的生存周期從分配內存到內存釋放生存周期和作用范圍是不同的概念在生存周期內不能保障其他文件(靜態(tài)全

32、局變量)或函數(靜態(tài)局部變量)是可以調用的(即在作用范圍內)參見譚浩強P198 表8-2 各種類型變量的作用域和存在性的情況4.8 內部函數和外部函數一個.prj工程文件可以由多個.C源文件組成但是只能有一個main()函數不同源文件文件可以訪問全局變量實現變量共享一個.C源文件可以由多個函數組成不同源文件可以相互調用函數實現函數共享不同源文件之間通過互相調用函數和共享全局變量聯系起來4.8 內部函數和外部函數根據函數是否能被其它源程序文件調用,又將函數分為內部函數和外部函數。4.8.1 內部函數為了防止其它源程序文件中的函數調用本源程序文件中的某些函數,在函數定義前面加上關鍵字“static

33、”,則稱此函數為內部函數。例如:static int max(a, b); 這個max函數只能在本源文件中使用。4.8.1 內部函數舉例例4.18 關于簡化了的通信的例子。設置一個管理信箱的函數mail_box( ),在程序中通過send( )函數向其發(fā)信,再通過receive( )函數從信箱中接收信件。為了保證信箱的安全性,將管理信箱的函數mail_box( )、send( )函數、receive( )函數建立在一個源程序文件中,取名mail.c。4.8.1 內部函數舉例 #define MAX 50 #include static void mail_box(char mail , cha

34、r p) static char mailboxMAX; if (p = s) strcpy(mailbox, mail);else if (p = r) strcpy(mail, mailbox); extern void send (char mail )mail_box(mail, s);extern void receive (char mail )mail_box(mail, r);外部函數send定義extern可省略靜態(tài)局部變量內部函數4.8.1 內部函數舉例 在另一個源文件mymail.c中可以這樣來調用extern void send ( ) ;extern void rec

35、eive ( );main( ) char s50, r50; gets(s); send(s); receive(r); puts(r);程序運行結果:Hello!Hello!外部函數說明 不帶參數4.8.2 外部函數如果函數不僅能被本源文件的函數調用,還可以被其它源文件中的函數調用,則稱此函數為外部函數。外部函數定義:extern int max(a, b);extern關鍵字可以省略如果在源文件A中調用另一個源文件B中的函數,那么在源文件A中要調用的函數進行說明。格式:extern int max( );要區(qū)別函數定義和函數說明4.8.2 外部函數舉例例4.19 外部函數的定義,說明和調

36、用文件f1.c的內容: extern void sorta(), echoa(); extern void echoa(int a ); extern int min(); main() static int a =3,8,5,1,7; echoa(a); sorta(a,5); echoa(a); printf(“The min is:%3dn”,min(a);調用外部函數的說明4.294.8.2 外部函數舉例 源文件f2.c的內容如下:extern void echoa(int a ) int i; for(i=0;i5;i+) printf(“%3d”,ai); printf(“n”);函數echoa定義4.294.8.2 外部函數舉例源文件f3.c的內容如下: extern void sorta(int a ,int n ) int i, j, min, t; for(i=0;in-1;i+)

溫馨提示

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

評論

0/150

提交評論