

下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第八章函數(shù)&1函數(shù)概述1、C語言的函數(shù):C語言的函數(shù)是子程序的總稱,包括函數(shù)和過程。(有返回值、無返回值,教材中稱為:有返回值函數(shù),無返回值函數(shù))。C語言函數(shù)可以分為庫函數(shù)、用戶自定義函數(shù)。庫函數(shù)由系統(tǒng)提供,程序員只需要使用(調(diào)用),用戶自定義函數(shù)需要程序員自己編制。2、C語言的程序由函數(shù)組成,函數(shù)是C語言程序的基本單位。前面章節(jié)介紹的所有程序都是由一個主函數(shù)main組成的。程序的所有操作都在主函數(shù)中完成。事實上,C語言程序可以包含一個main函數(shù),也可以包含一個main函數(shù)和若干個其它函數(shù)。C語言程序的結(jié)構(gòu)如圖所示。在每個程序中,主函數(shù)main是必須的,它是所有程序的執(zhí)行起點,mai
2、n函數(shù)只調(diào)用其它函數(shù),不能為其它函數(shù)調(diào)用。如果不考慮函數(shù)的功能和邏輯,其它函數(shù)沒有主從關(guān)系,可以相互調(diào)用。所有函數(shù)都可以調(diào)用庫函數(shù)。程序的總體功能通過函數(shù)的調(diào)用來實現(xiàn)。3、使用函數(shù)的意義(補充)有些同學(xué)提出,我只用一個main函數(shù)就可以編程,為什么這么復(fù)雜,還要將程序分解到函數(shù),還要掌握這么多概念,太麻煩了?我們說對于小程序可以這樣做,但是對于一個有一定規(guī)模的程序這樣做就不合適了。使用函數(shù)的幾個原因:(1)使用函數(shù)可以控制任務(wù)的規(guī)模一般應(yīng)用程序都具有較大的規(guī)模。例如:一個齒輪誤差分析軟件系統(tǒng)的源程序行數(shù)要數(shù)千行。一個傳動鏈計算機輔助設(shè)計系統(tǒng)的源程序行數(shù)5萬多行。使用函數(shù)可以將程序劃分為若干功能
3、相對獨立的模塊,這些模塊還可以再劃分為更小的模塊,直到各個模塊達到程序員所能夠控制的規(guī)模。然后程序員再進行各個模塊的編制。因為各個模塊功能相對獨立,步驟有限,所以流程容易控制,程序容易編制,修改。一般一個模塊的規(guī)??刂圃谠闯绦?0行以內(nèi)(但是也不必教條化)。(2)使用函數(shù)可以控制變量的作用范圍變量在整個模塊范圍內(nèi)全局有效,如果將一個程序全部寫在main()函數(shù)內(nèi),大家可以想象,變量可以在main函數(shù)內(nèi)任何位置不加控制地被修改。如果發(fā)現(xiàn)變量的值(狀態(tài))有問題,你可能要在整個程序中查找哪里對此變量進行了修改,什么操作會對此變量有影響,改動了一個邏輯,一不留神又造成了新的問題,最后程序越改越亂,有時
4、連程序員自己都不愿意再看自己編寫的程序。都是“大”惹的禍。使用函數(shù)后,變量局限于自己的函數(shù)內(nèi),60行代碼內(nèi),太好了,能控制嗎?函數(shù)-函數(shù)通過接口(參數(shù)表,返回值)通訊,交換數(shù)據(jù)。(3)使用函數(shù),程序的開發(fā)可以由多人分工協(xié)作。一個main()模塊,怎么合作?將程序劃分為若干模塊(函數(shù)),各個相對獨立的模塊(函數(shù))可以由多人完成,每個人按照模塊(函數(shù))的功能要求,接口要求編制代碼,調(diào)試,確保每個模塊(函數(shù))的正確性。最后將所有模塊(函數(shù))合并,統(tǒng)一調(diào)試、運行。4)使用函數(shù),可以重新利用已有的、調(diào)式好的、成熟的程序模塊想象一下,如果要用到求平方根,如果系統(tǒng)不提供sqrt這樣的函數(shù),怎么辦?(找數(shù)學(xué)書
5、,考慮算法,編制求平方根代碼)。C語言的庫函數(shù)(標(biāo)準(zhǔn)函數(shù))就是系統(tǒng)提供的,調(diào)式好的、常用的模塊,我們可以直接利用。事實上我們的代碼也可以重新利用,可以將已經(jīng)調(diào)試好的,功能相對獨立的代碼改成函數(shù),供以后調(diào)用。4、函數(shù)的一些概念(1)主函數(shù)、其它函數(shù)(2)主調(diào)函數(shù)(調(diào)用其它函數(shù)的函數(shù))、被調(diào)函數(shù)(被其它函數(shù)調(diào)用的函數(shù))(3)標(biāo)準(zhǔn)函數(shù)(庫函數(shù))和用戶自定義函數(shù)(4)無參函數(shù)、有參函數(shù)I(5)無返回值函數(shù)、有返回值函數(shù)5、C語言使用函數(shù)的一些說明(1)C程序是由函數(shù)構(gòu)成一個C源程序至少包含一個main函數(shù),也可以包含一個main函數(shù)和若干個其它函數(shù)。函數(shù)是C程序的基本單位。被調(diào)用的函數(shù)可以是系統(tǒng)提供的
6、庫函數(shù),也可以是用戶根據(jù)需要自己編寫設(shè)計的函數(shù)。C函數(shù)庫非常豐富,ANSIC提供100多個庫函數(shù),TurboC提供300多個庫函數(shù)。(2)main函數(shù)(主函數(shù))是每個程序執(zhí)行的起始點一個C程序總是從main函數(shù)開始執(zhí)行,而不論main函數(shù)在程序中的位置??梢詫ain函數(shù)放在整個程序的最前面,也可以放在整個程序的最后,或者放在其它函數(shù)之間。&2函數(shù)的一般形式函數(shù)應(yīng)當(dāng)先定義,后調(diào)用。函數(shù)體說明:一個函數(shù)(定義)由函數(shù)頭(函數(shù)首部)和函數(shù)體兩部分組成1函數(shù)頭(首部):說明了函數(shù)類型、函數(shù)名稱及參數(shù)。(1)函數(shù)類型:函數(shù)返回值的數(shù)據(jù)類型,可以是基本數(shù)據(jù)類型也可以是構(gòu)造類型。如果省略默認(rèn)為in
7、t,如果不返回值,定義為void類型。(2)函數(shù)名:給函數(shù)取的名字,以后用這個名字調(diào)用。函數(shù)名由用戶命名,命名規(guī)則同標(biāo)識符。(3)函數(shù)名后面是參數(shù)表,無參函數(shù)沒有參數(shù)傳遞,但“()”號不能省略,這是格式的規(guī)定。參數(shù)表說明參數(shù)的類型和形式參數(shù)的名稱,各個形式參數(shù)用“,”分隔。2、函數(shù)體:函數(shù)首部下用一對括起來的部分。如果函數(shù)體內(nèi)有多個,最外層是函數(shù)體的范圍。函數(shù)體一般包括聲明部分、執(zhí)行部分兩部分。(1)聲明部分:在這部分定義本函數(shù)所使用的變量和進行有關(guān)聲明(如函數(shù)聲明)。(2)執(zhí)行部分:程序段,由若干條語句組成命令序列(可以在其中調(diào)用其它函數(shù))。注意:函數(shù)不能單獨運行,函數(shù)可以被主函數(shù)或其它函數(shù)
8、調(diào)用,也可以調(diào)用其它函數(shù),但是不能調(diào)用主函數(shù)。例8-1:輸入三個整數(shù),求三個整數(shù)中的最大值,打印。不使用函數(shù)(除main外)main()intn1,n2,n3,nmax;seanf(“d%d%'d,&n1,&n2,&n3);if(n1>n2)nmax=n1;elsenmax=n2;if(n3>nmax)nmax=n3;printf(“max=%)dnmax);使用函數(shù)externintmax(int,int,int);main()intn1,n2,n3,nmax;%d%d%'d,&n1,&n2?&Wscanf(nmax
9、=max(n1,n2,n3);printf(max=%d,nmax);intmax(intx,inty,intz)intm;if(x>y)m=x;像調(diào)用庫函數(shù)一樣調(diào)用函數(shù)定義說明:(1)比較兩個程序,使用函數(shù)好象程序更長了,但是請思考,如果程序中要調(diào)用100次求三個數(shù)最大值又會是什么情況呢?(2)解釋max函數(shù)的定義的幾個部分。簡要解釋max函數(shù)的調(diào)用。8、3函數(shù)的參數(shù)和返回值8、3、1形式參數(shù)與實際參數(shù)1、形式參數(shù)(形參):函數(shù)定義時設(shè)定的參數(shù)。例8-1中,函數(shù)頭intmax(intx,inty,intz)中x,y,z就是形參,它們的類型都是整型。2、實際參數(shù)(實參):調(diào)用函數(shù)時所使用
10、的實際的參數(shù)。例8-1中,主函數(shù)中調(diào)用max函數(shù)的語句是:nmax=max(n1,n2,n3);其中n1,n2,n3就是實參,它們的類型都是整型。3、參數(shù)的傳遞在調(diào)用函數(shù)時,主調(diào)函數(shù)和被調(diào)函數(shù)之間有數(shù)據(jù)的傳遞-實參傳遞給形參。具體的傳遞方式有兩種:(1)值傳遞方式(傳值):將實參單向傳遞給形參的一種方式。(2)地址傳遞方式(傳值):將實參地址單向傳遞給形參的一種方式。注意:1)單向傳遞:不管“傳值”、還是“傳址”,C語言都是單向傳遞數(shù)據(jù)的,一定是實參傳遞給形參,反過來不行。也就是說C語言中函數(shù)參數(shù)傳遞的兩種方式本質(zhì)相同-“單向傳遞”。(2) “傳值”、“傳址”只是傳遞的數(shù)據(jù)類型不同(傳值-一般
11、的數(shù)值,傳址-地址)。傳址實際是傳值方式的一個特例,本質(zhì)還是傳值,只是此時傳遞的是一個地址數(shù)據(jù)值。(3) 系統(tǒng)分配給實參、形參的內(nèi)存單元是不同的,也就是說即使在函數(shù)中修改了形參的值,也不會影響實參的值。對于傳值,即使函數(shù)中修改了形參的值,也不會影響實參的值。對于傳址,即使函數(shù)中修改了形參的值,也不會影響實參的值。但是,注意:不會影響實參的值,不等于不影響實參指向的數(shù)據(jù)。傳址與傳值一樣不能通過參數(shù)返回數(shù)據(jù),但因為傳遞的是地址,那么就可能通過實參參數(shù)所指向的空間間接返回數(shù)值。調(diào)函數(shù)傳值(傳遞一般的數(shù)值)a,x是不同的空間被傳址(傳遞地址數(shù)值)a,x也是不同的空間(4) 兩種參數(shù)傳遞方式中,實參可以
12、是變量、常量、表達式;形參一般是變量,要求兩者類型相同或賦值兼容。例8-2參數(shù)單向傳遞。P107.8、3、2函數(shù)的返回值C語言可以從函數(shù)(被調(diào)用函數(shù))返回值給調(diào)用函數(shù)(這與數(shù)學(xué)函數(shù)相當(dāng)類似)。在函數(shù)內(nèi)是通過return語句返回值的。使用return語句能夠返回一個值或不返回值(此時函數(shù)類型是void)。'Return語句的格式:Return表達式;或return(表達式);說明:(1)函數(shù)的類型就是返回值的類型,return語句中表達式的類型應(yīng)該與函數(shù)類型一致。如果不一致,以函數(shù)類型為準(zhǔn)(賦值轉(zhuǎn)化)。(2)函數(shù)類型省略,默認(rèn)為int。(3)如果函數(shù)沒有返回值,函數(shù)類型應(yīng)當(dāng)說明為void
13、(無類型)。8、4函數(shù)的調(diào)用8、4、1函數(shù)調(diào)用的一般方法函數(shù)名(實參表列);說明:(1)無參函數(shù)調(diào)用沒有參數(shù),但是“()”不能省略,有參函數(shù)若包含多個參數(shù),各參數(shù)用“,”分隔,實參參數(shù)個數(shù)與形參參數(shù)個數(shù)相同,類型一致或賦值兼容。(2)函數(shù)調(diào)用可以出現(xiàn)的位置以單獨語句形式調(diào)用(注意后面要加一個分號,構(gòu)成語句)。以語句形式調(diào)用的函數(shù)可以有返回值,也可以沒有返回值。例如:printf(“max=%d”,nmax);swap(x,y);puts(s);在表達式中調(diào)用(后面沒有分號)。在表達式中的函數(shù)調(diào)用必須有返回值。例如:if(strcmp(s1,s2)>0)/函數(shù)調(diào)用strcmp()在關(guān)系表達
14、式中。nmax=max(n1,n2,n3);/函數(shù)調(diào)用max()在賦值表達式中,“;”是賦值表達式作為語句時加的,不是max函數(shù)調(diào)用的。fun1(fun2();/函數(shù)調(diào)用fun2()在函數(shù)調(diào)用表達式fun1()中。函數(shù)調(diào)用fun2()的返回值作為fun1的參數(shù)。例8-3:以表達式的形式進行函數(shù)的調(diào)用。(自學(xué))8、4、2函數(shù)調(diào)用時數(shù)據(jù)的傳遞(函數(shù)之間的通訊)函數(shù)是相對獨立的,但是不是孤立的,它們通過調(diào)用時1)參數(shù)傳遞和2)函數(shù)的返回值3)全局變量(后面介紹)來相互聯(lián)系。83節(jié)已經(jīng)介紹了函數(shù)參數(shù)的傳遞和返回值?,F(xiàn)在以數(shù)組應(yīng)用為例介紹參數(shù)傳遞中的傳址方式的使用。例8-4:求學(xué)生平均成績。P110.(
15、注意參數(shù)傳遞的是數(shù)組的地址)思考:如果在函數(shù)ave中加入程序段:for(i=0;i<n1;i+)bi=sqrt(bi)*10;那么實參數(shù)組a中的數(shù)據(jù)是否改變?8、4、3函數(shù)的聲明函數(shù)定義的位置可以1)在調(diào)用它的函數(shù)之前,也可以2)在調(diào)用它的函數(shù)之后,甚至位于3)其它的源程序模塊中。函數(shù)定義位置在前,函數(shù)調(diào)用在后,不必聲明,編譯程序產(chǎn)生正確的調(diào)用格式。函數(shù)定義在調(diào)用它的函數(shù)之后或者函數(shù)在其它源程序模塊中,且函數(shù)類型不是整型,這時,為了使編譯程序產(chǎn)生正確的調(diào)用格式,可以在函數(shù)使用前對函數(shù)進行聲明。這樣不管函數(shù)在什么位置,編譯程序都能產(chǎn)生正確的調(diào)用格式。函數(shù)聲明的格式:C語言的庫函數(shù)就是位于其
16、它模塊的函數(shù),為了正確調(diào)用,C編譯系統(tǒng)提供了相應(yīng)的.h文件。.h文件內(nèi)許多都是函數(shù)聲明,當(dāng)源程序要使用庫函數(shù)時,就應(yīng)當(dāng)包含相應(yīng)的頭文件。例8-5:函數(shù)聲明例子。P112.8、5函數(shù)的嵌套調(diào)用和遞歸調(diào)用函數(shù)允許嵌套調(diào)用和遞歸調(diào)用。遞歸調(diào)用是嵌套調(diào)用的特例。8、5、1函數(shù)的嵌套調(diào)用函數(shù)嵌套調(diào)用:函數(shù)調(diào)用中又存在調(diào)用。如函數(shù)1調(diào)用函數(shù)2,函數(shù)又調(diào)用函數(shù)3。函數(shù)之間沒有從屬關(guān)系,一個函數(shù)可以被其它函數(shù)調(diào)用,同時該函數(shù)也可以調(diào)用其它函數(shù)。例8-6:計算兩整數(shù)的最小公倍數(shù)。P113.思路:(1)數(shù)學(xué)上:兩數(shù)的最小公倍數(shù)=兩數(shù)乘積/兩數(shù)的最大公約數(shù);兩數(shù)的最大公約數(shù)-使用連除,取余法。(2)N-S流程(3)
17、程序8、5、2函數(shù)的遞歸調(diào)用1、函數(shù)的遞歸調(diào)用:是指函數(shù)直接調(diào)用或間接調(diào)用自己,或調(diào)用一個函數(shù)的過程中出現(xiàn)直接或間接調(diào)用該函數(shù)自身。前者稱為直接遞歸調(diào)用,后者稱為間接遞歸調(diào)用。例如:->f1()->f1()直接遞歸調(diào)用;->f1()->f2()->f1()間接遞歸調(diào)用。2、使用遞歸調(diào)用解決問題的方法:(有限遞歸)(1)原有的問題能夠分解為一個新問題,而新問題又用到了原有的解法,這就出現(xiàn)了遞歸。(2)按照這個原則分解下去,每次出現(xiàn)的新問題是原有問題的簡化的子問題(3)最終分解出來的新問題是一個已知解的問題。3、遞歸調(diào)用過程(兩個階段)(1)遞推階段:將原問題不斷地分
18、解為新的子問題,逐漸從未知的向已知的方向推測,最終達到已知的條件,即遞歸結(jié)束條件,這時遞推階段結(jié)束。(2)回歸階段:從已知條件出發(fā),按照“遞推”的逆過程,逐一求值回歸,最終到達“遞推”的開始處,結(jié)束回歸階段,完成遞歸調(diào)用。例8-7:用遞歸法求n!(P.114)解:n!=n*(n-1)*(n-2)*1=n(n-1)!。遞歸公式:10,1n!=彳n*(n-1)!其它教材圖8-4。程序&6變量的作用域(有效范圍、可見性)變量從數(shù)據(jù)類型的角度,可以分為整型、實型、字符型等。變量的作用域:變量的有效范圍或者變量的可見性。變量定義的位置決定了變量的作用8、6、1局部變量局部變量:是指在一定范圍內(nèi)有
19、效的變量。C語言中,在以下各位置定義的變量均屬于局部變量。(1)在函數(shù)體內(nèi)定義的變量,在本函數(shù)范圍內(nèi)有效,作用域局限于函數(shù)體內(nèi)。(2)在復(fù)合語句內(nèi)定義的變量,在本復(fù)合語句范圍內(nèi)有效,作用域局限于復(fù)合語句內(nèi)。(3)有參函數(shù)的形式參數(shù)也是局部變量,只在其所在的函數(shù)范圍內(nèi)有效。例如:*/inta,b;說明:(1)不同函數(shù)中和不同的復(fù)合語句中可以定義(使用)同名變量。因為它們作用域不同,程序運行時在內(nèi)存中占據(jù)不同的存儲單元,各自代表不同的對象,所以它們互不干預(yù)。即:同名,不同作用域的變量是不同的變量。(2)局部變量所在的函數(shù)被調(diào)用或執(zhí)行時,系統(tǒng)臨時給相應(yīng)的局部變量分配存儲單元,一旦函數(shù)執(zhí)行結(jié)束,則系統(tǒng)
20、立即釋放這些存儲單元。所以在各個函數(shù)中的局部變量起作用的時刻是不同的。例8-8:各函數(shù)局部變量同名的應(yīng)用示例。P116-117.8、6、2全局變量全局變量:在函數(shù)之外定義的變量。(所有函數(shù)前,各個函數(shù)之間,所有函數(shù)后)全局變量作用域:從定義全局變量的位置起到本源程序結(jié)束為止。在引用全局變量時如果使用“extern”聲明全局變量,可以擴大全局變量的作用域。例如,擴大到整個源文件(模塊),對于多源文件(模塊)可以擴大到其它源文件(模塊)。在定義全局變量時如果使用修飾關(guān)鍵詞static,表示此全局變量作用域僅限于本源文件(模塊)。例如:x,y,z的作用域x,y,zch1,ch2t,p全部是全局變量i
21、ntx,y,z;floatf1(floatafloatb)charch1,ch2;intf2(intm)doublet,p;ch1,ch2的作用域t,p的作用域file2.cfile3.c7/一externintx;intx;func1(inta)func2()x=x+a:-J說明:(1)全局變量可以和局部變量同名,當(dāng)局部變量有效時,同名全局變量不起作用。(2)使用全局變量可以增加各個函數(shù)之間的數(shù)據(jù)傳輸渠道,在一個函數(shù)中改變一個全局變量的值,在另外的函數(shù)中就可以利用。但是,使用全局變量使函數(shù)的通用性降低,使程序的模塊化、結(jié)構(gòu)化變差,所以要慎用、少用全局變量。例8-9:全局變量、局部變量同名的應(yīng)
22、用示例。P118。例8-10:全局變量、局部變量的應(yīng)用示例。P118。&7變量的存儲類別(生存期、生命期)變量從空間上分為局部變量、全局變量。從變量存在的時間的長短(即變量生存期)來劃分,變量還可以分為:動態(tài)存儲變量、靜態(tài)存儲變量。變量的存儲方式?jīng)Q定了變量的生存期。c語言變量的存儲方式可以分為:動態(tài)存儲方式、靜態(tài)存儲方式。自動(局部變量)(auto)如果全局變量用static寄存:飾,(并不是量是靜(Register)的,而是說,只對本模靜塊有局部變量靜態(tài)全局變量(全局變量全部J動態(tài)存儲方式存儲方式靜態(tài)存儲方式是靜態(tài)的,不必用static修飾)8、7、1動態(tài)存儲方式動態(tài)存儲方式:在程序
23、運行期間根據(jù)需要為相關(guān)的變量動態(tài)分配存儲空間的方式。C語言中,變量的動態(tài)存儲方式主要有自動型存儲方式和寄存器型存儲方式。1、自動型存儲方式(auto)auto型存儲方式是C語言默認(rèn)的局部變量的存儲方式,也是局部變量最常使用的存儲方式。(1)自動變量屬于局部變量的范疇,作用域限于定義它的函數(shù)或復(fù)合語句內(nèi)。(2)自動變量所在的函數(shù)或復(fù)合語句執(zhí)行時,系統(tǒng)動態(tài)為相應(yīng)的自動變量分配存儲單元,當(dāng)自動變量所在的函數(shù)或復(fù)合語句執(zhí)行結(jié)束后,自動變量失效,它所在的存儲單元被系統(tǒng)釋放,所以原來的自動變量的值不能保留下來。若對同一函數(shù)再次調(diào)用時,系統(tǒng)會對相應(yīng)的自動變量重新分配存儲單元。auto類型說明變量名;自動(局
24、部)變量的定義格式:其中:auto為自動存儲類別關(guān)鍵詞,可以省略,缺省時系統(tǒng)默認(rèn)auto。例如:前面各章中的函數(shù)中的局部變量,盡管沒有明確定義為auto型,但它們都屬于auto型變量。在函數(shù)中定義變量,下面兩種寫法是等效的。intx,y,z;或autointx,y,z;它們都定義了3個整型auto型變量x,y,z。2、寄存器型存儲方式(register)register類型說明變量名;register型存儲方式是C語言使用較少的一種局部變量的存儲方式。該方式將局部變量存儲在CPU的寄存器中,寄存器比內(nèi)存操作要快很多,所以可以將一些需要反復(fù)操作的局部變量存放在寄存器中。寄存器(局部變量)的定義格
25、式:其中:register為寄存器存儲類別關(guān)鍵詞,不能省略。值得注意的是:CPU的寄存器數(shù)量有限,如果定義了過多的register變量,系統(tǒng)會自動將其中的部分改為auto型變量。例8-11:寄存器局部變量的應(yīng)用.P120.(完成n+(n-1)+(n-2)+.+1)8、7、2靜態(tài)存儲方式靜態(tài)存儲方式:在程序編譯時就給相關(guān)的變量分配固定的存儲空間(在程序運行的整個期間內(nèi)都不變)的存儲方式。C語言中,使用靜態(tài)存儲方式的主要有靜態(tài)存儲的局部變量和全局變量。1、靜態(tài)存儲的局部變量static類型說明變量名=初始化值;靜態(tài)局部變量的定義格式:其中:static是靜態(tài)存儲方式關(guān)鍵詞,不能省略。例如:在函數(shù)內(nèi)
26、定義:staticinta=10,b;說明:(1)靜態(tài)局部變量的存儲空間是在程序編譯時由系統(tǒng)分配的,且在程序運行的整個期間都固定不變。該類變量在其函數(shù)調(diào)用結(jié)束后仍然可以保留變量值。下次調(diào)用該函數(shù),靜態(tài)局部變量中仍保留上次調(diào)用結(jié)束時的值。(2)靜態(tài)局部變量的初值是在程序編譯時一次性賦予的,在程序運行期間不再賦初值,以后若改變了值,保留最后一次改變后的值,直到程序運行結(jié)束。2、全局變量全部是靜態(tài)存儲的。C語言中,全局變量的存儲都是采用靜態(tài)存儲方式,即在編譯時就為相應(yīng)全局變量分配了固定的存儲單元,且在程序執(zhí)行的全過程始終保持不變。全局變量賦初值也是在便宜時完成的。因為全局變量全部是靜態(tài)存儲,所以沒有
27、必要為說明全局變量是靜態(tài)存儲而使用關(guān)鍵詞static。如果使用了static說明全局變量,不是說“此全局變量要用靜態(tài)方式存儲”(我們知道全局變量天生是靜態(tài)存儲的),那是有另外的含義-令人困惑的全局變量的static說明。3、全局變量的extern聲明及令人困惑的全局變量的static定義。參見:8.6.2全局變量的static定義,不是說明“此全局變量要用靜態(tài)方式存儲”(全局變量天生全部是靜態(tài)存儲),而是說,這個全局變量只在本源程序模塊有效(文件作用域)。如果沒有static說明的全局變量就是整個源程序范圍有效(真正意義上的全局)。也就是說,變量的作用域有:分程序(復(fù)合語句)作用域,函數(shù)作用域
28、,文件(模塊)作用域,整個程序作用域。在引用全局變量時如果使用“extern”聲明全局變量,可以擴大全局變量的作用域。例如,擴大到整個源文件(模塊),對于多源文件(模塊)可以擴大到其它源文件(模塊)。8、8內(nèi)部函數(shù)和外部函數(shù)類似于全局變量的作用域,函數(shù)定義時也可以用static修飾。使用static修飾的函數(shù)是外部函數(shù);不使用static(或用extern)修飾的函數(shù)是內(nèi)部函數(shù)。8、8、1內(nèi)部函數(shù)內(nèi)部函數(shù):只能被本源文件(模塊)中的各個函數(shù)所調(diào)用,不能為其它模塊中函數(shù)所調(diào)用的函數(shù)。內(nèi)部函數(shù)的定義:static函數(shù)類型函數(shù)名(形參表)說明:(1)內(nèi)部函數(shù)又稱為靜態(tài)函數(shù),其使用范圍僅限于定義它的模
29、塊(源文件)內(nèi)。對于其它模塊它是不可見的。有一些涉及機器硬件、操作系統(tǒng)的底層函數(shù),如果使用不當(dāng)或錯誤使用可能造成問題。為避免其它程序員直接調(diào)用,可以將此類函數(shù)定義為靜態(tài)函數(shù),而開放本模塊的其它高層函數(shù),供其它程序員使用。還有一種情況就是,程序員自己認(rèn)為某些函數(shù)僅僅是程序員自己模塊中其它函數(shù)的底層函數(shù),這些函數(shù)不必要由其它程序員直接調(diào)用。此時也常常將這些函數(shù)定義為靜態(tài)函數(shù)。(2)不同模塊中的內(nèi)部函數(shù)可以同名,它們的作用域不同-事實上根本就是不同的函數(shù)。(3)內(nèi)部函數(shù)定義,static關(guān)鍵詞不能省略。8、8、2外部函數(shù)外部函數(shù):能被任何源文件(模塊)中的任何函數(shù)所調(diào)用的函數(shù)。外部函數(shù)的定義:ext
30、ern函數(shù)類型函數(shù)名(形參表)說明:(1)外部函數(shù)定義,extern關(guān)鍵詞可以省略。如果省略,默認(rèn)是外部函數(shù)。外部函數(shù)可以在其它模塊中被調(diào)用。如果需要在某個模塊中調(diào)用它,可以模塊中某個位置聲明extern函數(shù)類型函數(shù)名(形參表);就可以了。&9函數(shù)應(yīng)用舉例例8-14:字符串逆序。P124.字符串逆序由函數(shù)func完成,注意形參、實參都是字符數(shù)組,參數(shù)傳遞是傳址。例8-15:求矩陣最大元素。P124-125.求矩陣最大元素由函數(shù)max完成,注意形參、實參都是二維整型數(shù)組,參數(shù)傳遞是傳址。例8-16:利用插入法將10個字符從小到大進行排序。P125-126.解:排序方法:冒泡法(大數(shù)沉底),選擇法,插入排序。號中的字符是要插入前面已排序序列的字符。(1)第1個字符本身可以認(rèn)為已經(jīng)排好序。(2)取第2個字符,在已經(jīng)排序的第1個字符適當(dāng)位置將第2個字符插入,保證這2個字符由小到大按序排列。(3)取第3個字符,在已經(jīng)排序的第1,第2個字符適當(dāng)位置將第3個字符插入,保證這3個字符由小到大按序排列。(4)取第
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 康復(fù)護理新進展
- 股權(quán)轉(zhuǎn)讓稅費繳納與稅務(wù)合規(guī)協(xié)議
- 現(xiàn)代小說改編舞臺劇版權(quán)購買協(xié)議
- 兒童成長過程記錄與資源共享服務(wù)協(xié)議
- 購物中心珠寶區(qū)品牌合作與區(qū)域經(jīng)營管理合同
- 線路旅游票務(wù)代理全面合作協(xié)議
- 影視劇海外發(fā)行與文化交流合作協(xié)議
- 坐位洗頭護理操作規(guī)范
- 脫敏治療簡介
- 液氨泄漏應(yīng)急處置培訓(xùn)
- 安全施工方案監(jiān)理審查意見
- 2025山東能源集團中級人才庫選拔易考易錯模擬試題(共500題)試卷后附參考答案
- 鍋爐試運行方案
- 《腎癌的診斷與治療》課件
- 《莫奈《睡蓮》主題課件》
- 年產(chǎn)10萬噸聚丙烯聚合工段工藝設(shè)計-本科畢業(yè)設(shè)計論文管理資料
- 中國特色社會主義+期末復(fù)習(xí)綜合練習(xí)-2024-2025學(xué)年中職高教版(2023版)
- 體液暴露處理流程
- 《VEP波形解釋》課件
- 風(fēng)電安全管理課件
- 2025北京首都機場大興國際機場招聘60人管理單位筆試遴選500模擬題附帶答案詳解
評論
0/150
提交評論