第8章函數(shù)ppt課件_第1頁(yè)
第8章函數(shù)ppt課件_第2頁(yè)
第8章函數(shù)ppt課件_第3頁(yè)
第8章函數(shù)ppt課件_第4頁(yè)
第8章函數(shù)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第8章函數(shù)章函數(shù)主要內(nèi)容:主要內(nèi)容:1,函數(shù)的定義的普通方式,函數(shù)的定義的普通方式2,函數(shù)參數(shù)和函數(shù)值,函數(shù)參數(shù)和函數(shù)值3,函數(shù)的普通調(diào)用、嵌套調(diào)用和遞歸調(diào)用,函數(shù)的普通調(diào)用、嵌套調(diào)用和遞歸調(diào)用4,數(shù)組作為函數(shù)參數(shù),數(shù)組作為函數(shù)參數(shù)5,部分變量和全局變量,部分變量和全局變量6,變量的存儲(chǔ)類別,變量的存儲(chǔ)類別7,內(nèi)部函數(shù)和外部函數(shù),內(nèi)部函數(shù)和外部函數(shù)1 1,掌握函數(shù)的定義方式,調(diào)用格式,前往值,掌握函數(shù)的定義方式,調(diào)用格式,前往值,值傳送與地址傳送的區(qū)別;值傳送與地址傳送的區(qū)別; 2 2,掌握變量的作用域,存在范圍,存儲(chǔ)類,掌握變量的作用域,存在范圍,存儲(chǔ)類別別 要求一個(gè)較大型的程序普通均分成

2、多個(gè)模塊,每個(gè)模塊完成一個(gè)特定的功能。在C言語(yǔ)中用函數(shù)來(lái)實(shí)現(xiàn)模塊。一個(gè)C程序可由一個(gè)main函數(shù)和假設(shè)干個(gè)其他函數(shù)構(gòu)成。由主函數(shù)調(diào)用其他函數(shù),其他函數(shù)之間也可相互調(diào)用,甚至可以調(diào)用函數(shù)本人遞歸調(diào)用,但不能調(diào)用主函數(shù)。程序開(kāi)發(fā)人員常用的方法是將一些經(jīng)常運(yùn)用的功能編寫(xiě)成函數(shù),放在公共函數(shù)庫(kù)中。 C C言語(yǔ)程序的構(gòu)造如下圖。在每個(gè)程序中,主函數(shù)言語(yǔ)程序的構(gòu)造如下圖。在每個(gè)程序中,主函數(shù)mainmain是是必需的,它是一切程序的執(zhí)行起點(diǎn),必需的,它是一切程序的執(zhí)行起點(diǎn),mainmain函數(shù)只調(diào)用其它函數(shù)只調(diào)用其它函數(shù),不能為其它函數(shù)調(diào)用。其它函數(shù)沒(méi)有主從關(guān)系,可函數(shù),不能為其它函數(shù)調(diào)用。其它函數(shù)沒(méi)有主

3、從關(guān)系,可以相互調(diào)用。一切函數(shù)都可以調(diào)用庫(kù)函數(shù)。程序的總體功以相互調(diào)用。一切函數(shù)都可以調(diào)用庫(kù)函數(shù)。程序的總體功能經(jīng)過(guò)函數(shù)的調(diào)用來(lái)實(shí)現(xiàn)。能經(jīng)過(guò)函數(shù)的調(diào)用來(lái)實(shí)現(xiàn)。f11( )f11( )f31( )f1( )f11( );f2( )f11( );f22( );main( )f1( );f2( );參見(jiàn)書(shū)中參見(jiàn)書(shū)中P155頁(yè)例頁(yè)例8.1 了解了解C程序經(jīng)過(guò)函數(shù)調(diào)用實(shí)現(xiàn)所需功能程序經(jīng)過(guò)函數(shù)調(diào)用實(shí)現(xiàn)所需功能例例8.1函數(shù)調(diào)用的簡(jiǎn)單例子函數(shù)調(diào)用的簡(jiǎn)單例子#includevoid main() void printstar(); void print_message(); printstar(); prin

4、t_message(); printstar();void printstar()printf(*n);void print_message()printf( How do you do!n); 闡明:闡明:1,一個(gè),一個(gè)C程序由一個(gè)或多個(gè)程序模塊組成。程序由一個(gè)或多個(gè)程序模塊組成。每一個(gè)程序模塊作為一個(gè)源程序文件。每一個(gè)程序模塊作為一個(gè)源程序文件。2,一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)組成,一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)組成,編譯是以源程序?yàn)閱挝?;編譯是以源程序?yàn)閱挝唬?,程序的執(zhí)行是由主函數(shù)開(kāi)場(chǎng)到主函數(shù)終了,程序的執(zhí)行是由主函數(shù)開(kāi)場(chǎng)到主函數(shù)終了,其它函數(shù)是經(jīng)過(guò)函數(shù)調(diào)用來(lái)實(shí)現(xiàn)的。其它函數(shù)是經(jīng)過(guò)函

5、數(shù)調(diào)用來(lái)實(shí)現(xiàn)的。4,一切函數(shù)都是平行的。即函數(shù)定義不能嵌,一切函數(shù)都是平行的。即函數(shù)定義不能嵌套,即函數(shù)內(nèi)不能定義函數(shù),但函數(shù)之間可套,即函數(shù)內(nèi)不能定義函數(shù),但函數(shù)之間可以相互調(diào)用,甚至可以調(diào)用該函數(shù)本身遞以相互調(diào)用,甚至可以調(diào)用該函數(shù)本身遞歸調(diào)用但不能調(diào)用主函數(shù)歸調(diào)用但不能調(diào)用主函數(shù)5,從用戶的角度函數(shù)分為:規(guī)范函數(shù)即庫(kù),從用戶的角度函數(shù)分為:規(guī)范函數(shù)即庫(kù)函數(shù)和用戶定義函數(shù)。函數(shù)和用戶定義函數(shù)。6,從函數(shù)的方式看,函數(shù)分為無(wú)參函數(shù)和有,從函數(shù)的方式看,函數(shù)分為無(wú)參函數(shù)和有參函數(shù)參函數(shù)8.2.1無(wú)參函數(shù)定義的普通方式無(wú)參函數(shù)定義的普通方式 函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名( void ) 變量聲

6、明部分;變量聲明部分; 可執(zhí)行語(yǔ)句部分;可執(zhí)行語(yǔ)句部分; 當(dāng)函數(shù)類型為當(dāng)函數(shù)類型為int型時(shí)可以省略。型時(shí)可以省略。8.2.2. 有參函數(shù)定義的普通方式有參函數(shù)定義的普通方式函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名( 數(shù)據(jù)類型數(shù)據(jù)類型 參數(shù)參數(shù),數(shù)據(jù)類型,數(shù)據(jù)類型 參數(shù)參數(shù)2 ) 闡明語(yǔ)句部分;闡明語(yǔ)句部分; 可執(zhí)行語(yǔ)句部分;可執(zhí)行語(yǔ)句部分; 有參函數(shù)比無(wú)參函數(shù)多了一個(gè)參數(shù)表。調(diào)用有有參函數(shù)比無(wú)參函數(shù)多了一個(gè)參數(shù)表。調(diào)用有參函數(shù)時(shí),調(diào)用函數(shù)將賦予這些參數(shù)實(shí)踐的值。參函數(shù)時(shí),調(diào)用函數(shù)將賦予這些參數(shù)實(shí)踐的值。為了與調(diào)用函數(shù)提供的實(shí)踐參數(shù)區(qū)別,將函數(shù)為了與調(diào)用函數(shù)提供的實(shí)踐參數(shù)區(qū)別,將函數(shù)定義中的參數(shù)表稱為方

7、式參數(shù)表,簡(jiǎn)稱形參表。定義中的參數(shù)表稱為方式參數(shù)表,簡(jiǎn)稱形參表。例定義一個(gè)函數(shù)用以前往兩個(gè)數(shù)中的大者例定義一個(gè)函數(shù)用以前往兩個(gè)數(shù)中的大者int max(int x, int y)int z;/*聲明部分*/z=xy?x:y;return(z);函數(shù)類型函數(shù)名參數(shù)類型方式參數(shù)執(zhí)行部分函數(shù)的前往值8.2.3空函數(shù)空函數(shù)它的方式為:它的方式為:類型闡明符函數(shù)名類型闡明符函數(shù)名() 對(duì)形參聲明的傳統(tǒng)方式對(duì)形參聲明的傳統(tǒng)方式int max(x, y)int max(x, y)int x, y;int x, y;return xy?x:y;return xy?x:y;函數(shù)定義舉例:函數(shù)定義舉例:輸入三個(gè)整

8、數(shù),求三個(gè)整數(shù)中的最大值輸入三個(gè)整數(shù),求三個(gè)整數(shù)中的最大值不運(yùn)用函數(shù)不運(yùn)用函數(shù)(除除main外外)#includevoid main() int n1,n2,n3, max; scanf(%d%d%d,&n1,&n2,&n3); if(n1n2) max=n1; else max=n2; if(n3max) max=n3; printf(max=%dn,max); 運(yùn)用函數(shù)運(yùn)用函數(shù)#includevoid main() int n1,n2,n3,nmax; int max(int,int,int); scanf(%d%d%d,&n1,&n2,&n

9、3); nmax=max(n1,n2,n3); printf(max=%dn,nmax); int max(int x,int y,int z) int m; if(xy) m=x; else m=y; if(zm)m=z; return m; 和調(diào)用庫(kù)函數(shù)和調(diào)用庫(kù)函數(shù)一樣調(diào)用一樣調(diào)用函數(shù)定義函數(shù)定義8.3函數(shù)的參數(shù)和函數(shù)值函數(shù)的參數(shù)和函數(shù)值8.3.1表達(dá)式參數(shù)和實(shí)踐參數(shù)表達(dá)式參數(shù)和實(shí)踐參數(shù)函數(shù)的參數(shù)分為形參和實(shí)參兩種,作用是實(shí)現(xiàn)函數(shù)的參數(shù)分為形參和實(shí)參兩種,作用是實(shí)現(xiàn)數(shù)據(jù)傳送。數(shù)據(jù)傳送。形參出如今函數(shù)定義中,只能在該函數(shù)體內(nèi)運(yùn)形參出如今函數(shù)定義中,只能在該函數(shù)體內(nèi)運(yùn)用。發(fā)生函數(shù)調(diào)用時(shí),調(diào)用函

10、數(shù)把實(shí)參的值復(fù)用。發(fā)生函數(shù)調(diào)用時(shí),調(diào)用函數(shù)把實(shí)參的值復(fù)制制1份,傳送給被調(diào)用函數(shù)的形參,從而實(shí)現(xiàn)份,傳送給被調(diào)用函數(shù)的形參,從而實(shí)現(xiàn)調(diào)用函數(shù)向被調(diào)用函數(shù)的數(shù)據(jù)傳送。調(diào)用函數(shù)向被調(diào)用函數(shù)的數(shù)據(jù)傳送。 例例8.2調(diào)用函數(shù)時(shí)的數(shù)據(jù)傳送調(diào)用函數(shù)時(shí)的數(shù)據(jù)傳送#includevoid main()int a,b,c,max(int,int);scanf(%d%d,&a,&b);c=max(a,b);printf(Max is %d,c);int max(int x, int y)int z;z=xy?x:y;return(z);闡明:闡明:1形參變量只需在被調(diào)用時(shí),才分配內(nèi)存單元;調(diào)用終了

11、時(shí),即刻釋形參變量只需在被調(diào)用時(shí),才分配內(nèi)存單元;調(diào)用終了時(shí),即刻釋放放所分配的內(nèi)存單元。因此,形參只需在該函數(shù)內(nèi)有效。調(diào)用終了,前往調(diào)所分配的內(nèi)存單元。因此,形參只需在該函數(shù)內(nèi)有效。調(diào)用終了,前往調(diào)用函數(shù)后,那么不能再運(yùn)用該形參變量。用函數(shù)后,那么不能再運(yùn)用該形參變量。2實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等。無(wú)論實(shí)參是何種類型的實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等。無(wú)論實(shí)參是何種類型的量,量,在進(jìn)展函數(shù)調(diào)用時(shí),它們都必需具有確定的值,以便把這些值傳送給形參在進(jìn)展函數(shù)調(diào)用時(shí),它們都必需具有確定的值,以便把這些值傳送給形參因此,應(yīng)預(yù)先用賦值、輸入等方法,使實(shí)參獲得確定的值。因此,應(yīng)預(yù)先用賦值、輸

12、入等方法,使實(shí)參獲得確定的值。3在被定義的函數(shù)中,每個(gè)形參都必需指定其類型。在被定義的函數(shù)中,每個(gè)形參都必需指定其類型。4實(shí)參和形參必需賦值兼容。實(shí)參和形參必需賦值兼容。5實(shí)參對(duì)形參的數(shù)據(jù)傳送是單向的,即只能把實(shí)參的值傳送給形參,實(shí)參對(duì)形參的數(shù)據(jù)傳送是單向的,即只能把實(shí)參的值傳送給形參,而而不能把形參的值反向地傳送給實(shí)參。不能把形參的值反向地傳送給實(shí)參。8.3.2函數(shù)的前往值函數(shù)的前往值1,函數(shù)的前往是經(jīng)過(guò),函數(shù)的前往是經(jīng)過(guò)return語(yǔ)句,格式為:語(yǔ)句,格式為:return(表達(dá)式;或表達(dá)式;或 return 表達(dá)式;表達(dá)式;表達(dá)式的值即為函數(shù)前往的值。當(dāng)程序執(zhí)行表達(dá)式的值即為函數(shù)前往的值。

13、當(dāng)程序執(zhí)行return時(shí)會(huì)將流程轉(zhuǎn)移到被調(diào)函數(shù)。時(shí)會(huì)將流程轉(zhuǎn)移到被調(diào)函數(shù)。2,前往值的類型:為函數(shù)的類型函數(shù)名前,前往值的類型:為函數(shù)的類型函數(shù)名前的類型,當(dāng)表達(dá)式的類型與函數(shù)類型不一的類型,當(dāng)表達(dá)式的類型與函數(shù)類型不一樣時(shí)系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換成函數(shù)類型。樣時(shí)系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換成函數(shù)類型。3,沒(méi)有,沒(méi)有return語(yǔ)句時(shí)系統(tǒng)將前往一個(gè)不確定語(yǔ)句時(shí)系統(tǒng)將前往一個(gè)不確定的值。的值。4,假設(shè)不需求前往數(shù)據(jù),那么可將函數(shù)類型,假設(shè)不需求前往數(shù)據(jù),那么可將函數(shù)類型聲明為空類型聲明為空類型(void)例例8.3前往值類型與函數(shù)類型不同前往值類型與函數(shù)類型不同#includevoid main()int a,b,c,

14、max(float,float);scanf(%d%d,&a,&b);c=max(a,b);printf(Max is %d,c);int max(float x, float y)return xy?x:y;例例8.4:實(shí)參求值順序:實(shí)參求值順序#includevoid main()void f(int,int);int i=2;f(i,+i);f(+i,i);void f(int a,int b)printf(ta=%dtb=%dn,a,b);8.4函數(shù)調(diào)用函數(shù)調(diào)用8.4.1函數(shù)調(diào)用的普通方式:函數(shù)調(diào)用的普通方式:函數(shù)名實(shí)參表列函數(shù)名實(shí)參表列闡明:闡明:1,其中實(shí)參表列中的

15、實(shí)參個(gè)數(shù)應(yīng)和形,其中實(shí)參表列中的實(shí)參個(gè)數(shù)應(yīng)和形參個(gè)數(shù)一樣,且對(duì)應(yīng)位置上的實(shí)參與形參的參個(gè)數(shù)一樣,且對(duì)應(yīng)位置上的實(shí)參與形參的數(shù)據(jù)類型必需一樣。數(shù)據(jù)類型必需一樣。2,實(shí)參之間用逗號(hào)分隔。,實(shí)參之間用逗號(hào)分隔。3,對(duì)實(shí)參的求值是從右到左的順序執(zhí)行的。,對(duì)實(shí)參的求值是從右到左的順序執(zhí)行的。8.4.2函數(shù)調(diào)用的方式函數(shù)調(diào)用的方式函數(shù)調(diào)用可以是單獨(dú)調(diào)用,或在表達(dá)式中,函數(shù)調(diào)用可以是單獨(dú)調(diào)用,或在表達(dá)式中,或作為函數(shù)參數(shù)?;蜃鳛楹瘮?shù)參數(shù)。如如printstar();c=2*max(a,b);m=max(a,max(b,c);8.4.3對(duì)被調(diào)用的聲明和函數(shù)原型對(duì)被調(diào)用的聲明和函數(shù)原型1對(duì)自定義函數(shù)。當(dāng)函數(shù)定義

16、在函數(shù)調(diào)用對(duì)自定義函數(shù)。當(dāng)函數(shù)定義在函數(shù)調(diào)用后面且函數(shù)類型不是后面且函數(shù)類型不是int型時(shí)必需在調(diào)用前對(duì)調(diào)型時(shí)必需在調(diào)用前對(duì)調(diào)用函數(shù)進(jìn)展闡明,闡明格式為:用函數(shù)進(jìn)展闡明,闡明格式為:函數(shù)類型函數(shù)名形參類型函數(shù)類型函數(shù)名形參類型1,形參類型,形參類型2,.);2對(duì)庫(kù)函數(shù),那么必需將包含該庫(kù)的原型對(duì)庫(kù)函數(shù),那么必需將包含該庫(kù)的原型聲明的頭文件包含到程序中:聲明的頭文件包含到程序中:#include例例8.5對(duì)被調(diào)函數(shù)的聲明。對(duì)被調(diào)函數(shù)的聲明。#includevoid main()float add(float,float); /*對(duì)被調(diào)函數(shù)的聲明對(duì)被調(diào)函數(shù)的聲明*/float a,b;scanf(

17、%f%f,&a,&b);printf(sun is %f,add(a,b);float add(float a, float b)return a+b;課堂練習(xí)習(xí)題習(xí)題8.3:寫(xiě)一個(gè)判素?cái)?shù)的函數(shù),在主函數(shù)中輸入一個(gè):寫(xiě)一個(gè)判素?cái)?shù)的函數(shù),在主函數(shù)中輸入一個(gè)整數(shù),輸出能否素?cái)?shù)的信息整數(shù),輸出能否素?cái)?shù)的信息主函數(shù):主函數(shù):函數(shù)聲明與變量聲明函數(shù)聲明與變量聲明輸入一個(gè)整數(shù)輸入一個(gè)整數(shù)函數(shù)調(diào)用并根據(jù)前往值輸出能否素?cái)?shù)的信息函數(shù)調(diào)用并根據(jù)前往值輸出能否素?cái)?shù)的信息判別素?cái)?shù)函數(shù):判別素?cái)?shù)函數(shù):for i=2 to n/2 假設(shè)假設(shè)n能被某一整數(shù)整除那么前往能被某一整數(shù)整除那么前往0前往前往1#

18、includevoid main() int n,prime(int); printf(輸入一個(gè)正整數(shù)輸入一個(gè)正整數(shù):n); scanf(%d,&n); if(prime(n) printf(%d是一個(gè)素?cái)?shù)是一個(gè)素?cái)?shù)n,n); else printf(%d不是一個(gè)素?cái)?shù)不是一個(gè)素?cái)?shù)n,n);int prime(int n) int i;for(i=2;i=n/2;i+) if(n%i=0) return 0;return 1;8.5函數(shù)的嵌套調(diào)用被調(diào)函數(shù)也可調(diào)用其它函數(shù),構(gòu)成調(diào)用的嵌被調(diào)函數(shù)也可調(diào)用其它函數(shù),構(gòu)成調(diào)用的嵌套,前往時(shí)必需一層層前往。套,前往時(shí)必需一層層前往。例:一個(gè)函數(shù)的嵌

19、套調(diào)用的例例:一個(gè)函數(shù)的嵌套調(diào)用的例#includevoid main() void f1(); printf(n調(diào)用函數(shù)調(diào)用函數(shù)f1之前之前:);f1();printf(n調(diào)用函數(shù)調(diào)用函數(shù)f1之后之后:);void f1()void f2();printf(n這是函數(shù)這是函數(shù)f1:);f2();void f2()printf( n這是函數(shù)這是函數(shù)f2:n);8.6函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用是指,一個(gè)函數(shù)在它的函數(shù)體內(nèi),直函數(shù)的遞歸調(diào)用是指,一個(gè)函數(shù)在它的函數(shù)體內(nèi),直接或間接地調(diào)用它本身。接或間接地調(diào)用它本身。言語(yǔ)允許函數(shù)的遞歸調(diào)用。在遞歸調(diào)用中,調(diào)用函言語(yǔ)允許函數(shù)的遞歸調(diào)用。

20、在遞歸調(diào)用中,調(diào)用函數(shù)又是被調(diào)用函數(shù),執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其本身。數(shù)又是被調(diào)用函數(shù),執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其本身。每調(diào)用一次就進(jìn)入新的一層。每調(diào)用一次就進(jìn)入新的一層。為了防止遞歸調(diào)用無(wú)終止地進(jìn)展,必需在函數(shù)內(nèi)有終為了防止遞歸調(diào)用無(wú)終止地進(jìn)展,必需在函數(shù)內(nèi)有終止遞歸調(diào)用的手段。常用的方法是加條件判別,滿足止遞歸調(diào)用的手段。常用的方法是加條件判別,滿足某種條件后就不再作遞歸調(diào)用,然后逐層前往。某種條件后就不再作遞歸調(diào)用,然后逐層前往。例例8.8用遞歸方法求用遞歸方法求n!。#includestdio.hfloat fac(int n) float f; if(n1) f=n*fac(n-1);

21、else f=1; return(f); void main()int n;float y;printf(input a integer number:);scanf(%d,&n);y=fac(n);printf(%d!=%15.0f,n,y);課堂練習(xí)課堂練習(xí)習(xí)題習(xí)題8.13:用遞歸方法求:用遞歸方法求n階勒讓德多項(xiàng)式的階勒讓德多項(xiàng)式的值值1/)() 1()() 12(101)(21nnxPnxxPnnxnxPnnn#includevoid main() float p(int,int); int x,n; printf(輸入輸入n和和x的值:的值:n); scanf(%d%d,&a

22、mp;n,&x); printf(np%d(%d)=%6.2f,n,x,p(n,x);float p(int n,int x)if(n=0) return 1;if(n=1) return x;if(n1) return (2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x)/n;8.7 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)的主要功能是將整個(gè)數(shù)組的數(shù)據(jù)傳送給被數(shù)組作為函數(shù)參數(shù)的主要功能是將整個(gè)數(shù)組的數(shù)據(jù)傳送給被調(diào)函數(shù)。調(diào)函數(shù)。8.7.1. 數(shù)組元素作為函數(shù)實(shí)參數(shù)組元素作為函數(shù)實(shí)參運(yùn)用方法和變量作為函數(shù)參數(shù)一樣,只須把數(shù)組元素看作變運(yùn)用方法和變量作為函數(shù)參數(shù)一樣,

23、只須把數(shù)組元素看作變量。量。此時(shí)實(shí)參為數(shù)組元素,形參為與數(shù)組一樣類型的變量。此時(shí)實(shí)參為數(shù)組元素,形參為與數(shù)組一樣類型的變量。例例8.108.10有兩個(gè)數(shù)組有兩個(gè)數(shù)組a,ba,b,比較其大小。,比較其大小。算法設(shè)計(jì):算法設(shè)計(jì):1 1,用,用2 2個(gè)個(gè)forfor循環(huán)語(yǔ)句輸入數(shù)組元素循環(huán)語(yǔ)句輸入數(shù)組元素2 2,for(i=0;i10;i+)for(i=0;ibiaibi的個(gè)數(shù)的個(gè)數(shù)/調(diào)用函數(shù)進(jìn)展比較調(diào)用函數(shù)進(jìn)展比較用用m m表示表示ai=biai=bi的個(gè)數(shù)的個(gè)數(shù)用用k k表示表示aibiaibi的個(gè)數(shù)的個(gè)數(shù) 3 3,輸出結(jié)果,輸出結(jié)果4 4,定義比較函數(shù),定義比較函數(shù)#includevoid m

24、ain()int large(int,int);int a10,b10,i,n=0,m=0,k=0;printf(請(qǐng)輸入數(shù)組請(qǐng)輸入數(shù)組a的的10個(gè)數(shù),用空格分隔個(gè)數(shù),用空格分隔n);for(i=0;i10;i+) scanf(%d,&ai);printf(n請(qǐng)輸入數(shù)組請(qǐng)輸入數(shù)組b的的10個(gè)數(shù),用空格分隔個(gè)數(shù),用空格分隔n);for(i=0;i10;i+) scanf(%d,&bi);for(i=0;ik) printf(na比比b大大n);if(ny) return 1;if(xy) return -1;return 0;2. 2. 數(shù)組名作為函數(shù)參數(shù)數(shù)組名作為函數(shù)參數(shù)調(diào)用格式

25、:函數(shù)名調(diào)用格式:函數(shù)名( (數(shù)組名數(shù)組名函數(shù)定義格式:類型函數(shù)名函數(shù)定義格式:類型函數(shù)名( (數(shù)組類型數(shù)組名數(shù)組類型數(shù)組名 ) )闡明:闡明:1 1用數(shù)組名作函數(shù)參數(shù),應(yīng)該在調(diào)用函數(shù)用數(shù)組名作函數(shù)參數(shù),應(yīng)該在調(diào)用函數(shù)和被調(diào)用函數(shù)中分別定義數(shù)組,且數(shù)據(jù)類型必需一致,和被調(diào)用函數(shù)中分別定義數(shù)組,且數(shù)據(jù)類型必需一致,否那么結(jié)果將出錯(cuò)。否那么結(jié)果將出錯(cuò)。2 2C C編譯系統(tǒng)對(duì)形參數(shù)組大小不作檢查,所以形參編譯系統(tǒng)對(duì)形參數(shù)組大小不作檢查,所以形參數(shù)組可以不指定大小。數(shù)組可以不指定大小。3 3數(shù)組名作為函數(shù)參數(shù)采用的是地址傳送方法,數(shù)組名作為函數(shù)參數(shù)采用的是地址傳送方法,假設(shè)在函數(shù)中對(duì)形參數(shù)組作了改動(dòng),

26、前往后實(shí)參數(shù)組假設(shè)在函數(shù)中對(duì)形參數(shù)組作了改動(dòng),前往后實(shí)參數(shù)組也會(huì)作相應(yīng)的改動(dòng)。也會(huì)作相應(yīng)的改動(dòng)。例例8.11有一個(gè)一維數(shù)組有一個(gè)一維數(shù)組score,內(nèi)放,內(nèi)放10個(gè)學(xué)生個(gè)學(xué)生的成果,求平均成果的成果,求平均成果算法設(shè)計(jì)算法設(shè)計(jì)1 1,用,用forfor循環(huán)語(yǔ)句輸入數(shù)組元素循環(huán)語(yǔ)句輸入數(shù)組元素2 2,調(diào)用函數(shù)求平均值,調(diào)用函數(shù)求平均值3 3,輸出平均值,輸出平均值4 4,定義求平均值函數(shù),定義求平均值函數(shù)4.14.1用用forfor循環(huán)語(yǔ)句求總成果循環(huán)語(yǔ)句求總成果4.24.2前往平均值前往平均值float average(float array)int i;float aver,sum=arra

27、y0;for(i=1;i10;i+) sum+=arrayi;aver=sum/10;return aver;main()float score10,aver; int i;printf(input 10 score:n);for(i=0;i10;i+) scanf(%f,&scorei);aver=average(score);printf(naverage score is %5.2f,aver);形參數(shù)組實(shí)參例例8.13 用選擇法對(duì)數(shù)組的用選擇法對(duì)數(shù)組的10個(gè)元素排序個(gè)元素排序算法設(shè)計(jì)算法設(shè)計(jì)S1用用for循環(huán)語(yǔ)句輸入數(shù)組元素循環(huán)語(yǔ)句輸入數(shù)組元素S2調(diào)用函數(shù)排序調(diào)用函數(shù)排序S3用

28、用for循環(huán)語(yǔ)句輸出數(shù)組元素循環(huán)語(yǔ)句輸出數(shù)組元素S4定義排序函數(shù)定義排序函數(shù)選擇法排序的根本思想:選擇法排序的根本思想:第第1輪:從輪:從a2到到an中選擇最小的數(shù)與中選擇最小的數(shù)與a1交換交換第第2輪:從輪:從a3到到an中選擇最小的數(shù)與中選擇最小的數(shù)與a2交換交換第第3輪:從輪:從a4到到an中選擇最小的數(shù)與中選擇最小的數(shù)與a3交換交換第第i輪:從輪:從ai+1到到an中選擇最小的數(shù)與中選擇最小的數(shù)與ai交換交換第第n-1輪:從輪:從an到到an中選擇最小的數(shù)與中選擇最小的數(shù)與an-1交換交換for(i=1;in;i+) for(j=i+1;j=n;j+)/從剩余的數(shù)中找最小的數(shù)的下標(biāo)從剩

29、余的數(shù)中找最小的數(shù)的下標(biāo) 找出找出aj中最小數(shù)的下標(biāo)中最小數(shù)的下標(biāo)k if(aiak)交換交換ai與與ak#includevoid main() int a11,i; printf(input 10 number:n); for(i=1;i=10;i+) scanf(%d,&ai); sort(a,10); printf(nthe sorted array:n); for(i=1;i11;i+) printf(%5d,ai);void sort(int array,int n) int i, j, k,t; for(i=1;in;i+) k=i; for(j=i+1; j=n; j+)

30、 if(arrayjarrayk t=arrayi; arrayi=arrayk; arrayk=t; /endfori/end sort8.7.3多維數(shù)組名作為函數(shù)參數(shù)多維數(shù)組名作為函數(shù)參數(shù)例:有一個(gè)例:有一個(gè)33的矩陣,求一切元素中的最大值。的矩陣,求一切元素中的最大值。#includevoid main( ) int max_value(int array34); int a34=1,3,5,7,2,4,6,8,15,17,34,12; printf(max value is %dn, max_value(a);int max_value(int array34) int i,j,max

31、; max=array00; for(i=0;i3;i+) for(j=0;jmax) max=arrayij; return max;8.8 部分變量和全局變量部分變量和全局變量 言語(yǔ)中一切的變量都有本人的作用域。變量闡明的位置不言語(yǔ)中一切的變量都有本人的作用域。變量闡明的位置不同,其作用域也不同,據(jù)此將言語(yǔ)中的變量分為內(nèi)部變量和外同,其作用域也不同,據(jù)此將言語(yǔ)中的變量分為內(nèi)部變量和外部變量。部變量。 在一個(gè)函數(shù)內(nèi)部闡明的變量是內(nèi)部變量,它只在該函數(shù)范圍在一個(gè)函數(shù)內(nèi)部闡明的變量是內(nèi)部變量,它只在該函數(shù)范圍內(nèi)有效。內(nèi)有效。也就是說(shuō),只需在包含變量闡明的函數(shù)內(nèi)部,才干運(yùn)用被闡也就是說(shuō),只需在包含

32、變量闡明的函數(shù)內(nèi)部,才干運(yùn)用被闡明的變量,在此函數(shù)之外就不能運(yùn)用這些變量了。所以內(nèi)部變量明的變量,在此函數(shù)之外就不能運(yùn)用這些變量了。所以內(nèi)部變量也稱也稱部分變量部分變量。例如:例如:int f1(int a) /*函數(shù)函數(shù)f1*/ int b,c; /*a,b,c作用域:僅限于函數(shù)作用域:僅限于函數(shù)f1()中中*/ int f2(int x) /*函數(shù)函數(shù)f2*/ int y,z; /*x,y,z作用域:僅限于函數(shù)作用域:僅限于函數(shù)f2()中中*/ main() int m,n; /*m,n作用域:僅限于函數(shù)作用域:僅限于函數(shù)main()中中*/關(guān)于部分變量的作用域還要闡明以下幾點(diǎn):關(guān)于部分變

33、量的作用域還要闡明以下幾點(diǎn):1主函數(shù)主函數(shù)main()中定義的內(nèi)部變量,也只能在主函數(shù)中運(yùn)用,中定義的內(nèi)部變量,也只能在主函數(shù)中運(yùn)用,其它函數(shù)不能運(yùn)用。同時(shí),主函數(shù)中也不能運(yùn)用其它函數(shù)中定其它函數(shù)不能運(yùn)用。同時(shí),主函數(shù)中也不能運(yùn)用其它函數(shù)中定義的內(nèi)部變量。由于主函數(shù)也是一個(gè)函數(shù),與其它函數(shù)是平行義的內(nèi)部變量。由于主函數(shù)也是一個(gè)函數(shù),與其它函數(shù)是平行關(guān)系。這一點(diǎn)是與其它言語(yǔ)不同的,應(yīng)予以留意。關(guān)系。這一點(diǎn)是與其它言語(yǔ)不同的,應(yīng)予以留意。2形參變量也是內(nèi)部變量,屬于被調(diào)用函數(shù);實(shí)參變量,那形參變量也是內(nèi)部變量,屬于被調(diào)用函數(shù);實(shí)參變量,那么是調(diào)用函數(shù)的內(nèi)部變量。么是調(diào)用函數(shù)的內(nèi)部變量。3允許在不同

34、的函數(shù)中運(yùn)用一樣的變量名,它們代表不同的允許在不同的函數(shù)中運(yùn)用一樣的變量名,它們代表不同的對(duì)象,分配不同的單元,互不干擾,也不會(huì)發(fā)生混淆。對(duì)象,分配不同的單元,互不干擾,也不會(huì)發(fā)生混淆。4在復(fù)合語(yǔ)句中也可定義變量,其作用域只在復(fù)合語(yǔ)句范圍在復(fù)合語(yǔ)句中也可定義變量,其作用域只在復(fù)合語(yǔ)句范圍內(nèi)。內(nèi)。8.8.2 全局變量全局變量 在函數(shù)外部定義的變量稱為外部變量。以此類推,在函數(shù)外部定義的變量稱為外部變量。以此類推,在函數(shù)外部定義的數(shù)組就稱為外部數(shù)組。在函數(shù)外部定義的數(shù)組就稱為外部數(shù)組。外部變量不屬于任何一個(gè)函數(shù),其作用域是:從外部外部變量不屬于任何一個(gè)函數(shù),其作用域是:從外部變量的定義位置開(kāi)場(chǎng),到

35、本文件終了為止。變量的定義位置開(kāi)場(chǎng),到本文件終了為止。 外部變量可被作用域內(nèi)的一切函數(shù)直接援用,所外部變量可被作用域內(nèi)的一切函數(shù)直接援用,所以外部變量又稱全局變量。以外部變量又稱全局變量。int p=1, q=5; /*外部變量外部變量p,q*/float f1(int a)/*a, b, c為部分變量為部分變量*/int b, c;.char c1, c2;/*外部變量外部變量ch1, ch2*/char f2(int x,int y)int i, j;.main()int m, n;.p與q的作用范圍c1與c2的作用范圍對(duì)于全局變量還有以下幾點(diǎn)闡明:對(duì)于全局變量還有以下幾點(diǎn)闡明:1 1外部

36、變量可加強(qiáng)函數(shù)模塊之間的數(shù)據(jù)聯(lián)絡(luò),但又使這些函外部變量可加強(qiáng)函數(shù)模塊之間的數(shù)據(jù)聯(lián)絡(luò),但又使這些函數(shù)依賴這些外部變量,因此使得這些函數(shù)的獨(dú)立性降低。數(shù)依賴這些外部變量,因此使得這些函數(shù)的獨(dú)立性降低。從模塊化程序設(shè)計(jì)的觀念來(lái)看這是不利的,因此不是非用不可從模塊化程序設(shè)計(jì)的觀念來(lái)看這是不利的,因此不是非用不可時(shí),不要運(yùn)用外部變量。時(shí),不要運(yùn)用外部變量。2 2在同一源文件中,允許外部變量和內(nèi)部變量同名。在內(nèi)部在同一源文件中,允許外部變量和內(nèi)部變量同名。在內(nèi)部變量的作用域內(nèi),外部變量將被屏蔽而不起作用。變量的作用域內(nèi),外部變量將被屏蔽而不起作用。3 3外部變量的作用域是從定義點(diǎn)到本文件終了。假設(shè)定義點(diǎn)外

37、部變量的作用域是從定義點(diǎn)到本文件終了。假設(shè)定義點(diǎn)之前的函數(shù)需求援用這些外部變量時(shí),需求在函數(shù)內(nèi)對(duì)被援用之前的函數(shù)需求援用這些外部變量時(shí),需求在函數(shù)內(nèi)對(duì)被援用的外部變量進(jìn)展闡明。外部變量闡明的普通方式為:的外部變量進(jìn)展闡明。外部變量闡明的普通方式為:extern extern 數(shù)據(jù)類型數(shù)據(jù)類型 外部變量外部變量 ,外部變量,外部變量22; 留意:外部變量的定義和外部變量的闡明是兩回事。外部變量留意:外部變量的定義和外部變量的闡明是兩回事。外部變量的定義,必需在一切的函數(shù)之外,且只能定義一次。而外部變的定義,必需在一切的函數(shù)之外,且只能定義一次。而外部變量的闡明,出如今要運(yùn)用該外部變量的函數(shù)內(nèi),而

38、且可以出現(xiàn)量的闡明,出如今要運(yùn)用該外部變量的函數(shù)內(nèi),而且可以出現(xiàn)多次。多次。例例8.15有一個(gè)一維數(shù)組,內(nèi)放有一個(gè)一維數(shù)組,內(nèi)放10個(gè)學(xué)生的成果,寫(xiě)一個(gè)函數(shù)個(gè)學(xué)生的成果,寫(xiě)一個(gè)函數(shù)求出平均分,最高分和最低分。求出平均分,最高分和最低分。分析:函數(shù)只能前往一個(gè)值,現(xiàn)要前往三個(gè)值,可將其中兩個(gè)分析:函數(shù)只能前往一個(gè)值,現(xiàn)要前往三個(gè)值,可將其中兩個(gè)設(shè)為外部變量,如最高分和最低分。設(shè)為外部變量,如最高分和最低分。算法設(shè)計(jì):算法設(shè)計(jì):average函數(shù):函數(shù):1,定義變量,定義變量2,求出總分,最高分和最低分,求出總分,最高分和最低分3,前往平均分,前往平均分主函數(shù):主函數(shù):1,定義變量,數(shù)組,定義變量

39、,數(shù)組2,輸入成果,輸入成果3,函數(shù)調(diào)用,函數(shù)調(diào)用4,輸出平均分最高分和最低分,輸出平均分最高分和最低分float max=0,min=0;float average(float score ,int n)int i; float aver, sum=score0;max=min=score0;for(i=1;imax) max=scorei; if(scoreimin) min=scorei; aver=sum/n;return (aver);main()int i;float ave,score10;printf(input 10 numbern);for(i=0;i10;i+) scan

40、f(%f,&scorei);ave=average(score,10);printf( max=%6.2fn min=%6.2fnaverage=%6.2f,max,min,ave);getch();8.9變量的存儲(chǔ)類別變量的存儲(chǔ)類別8.9.18.9.1動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式在言語(yǔ)中,對(duì)變量的存儲(chǔ)類型闡明有以下四種:在言語(yǔ)中,對(duì)變量的存儲(chǔ)類型闡明有以下四種:自動(dòng)變量自動(dòng)變量(auto)(auto)、存放器變量、存放器變量(register)(register)、外部變量、外部變量(extern)(extern)、靜態(tài)變量、靜態(tài)變量(static)(stat

41、ic)。 自動(dòng)變量和存放器變量屬于動(dòng)態(tài)存儲(chǔ)方式,外部變自動(dòng)變量和存放器變量屬于動(dòng)態(tài)存儲(chǔ)方式,外部變量和靜態(tài)內(nèi)部變量屬于靜態(tài)存儲(chǔ)方式。量和靜態(tài)內(nèi)部變量屬于靜態(tài)存儲(chǔ)方式。動(dòng)態(tài)存儲(chǔ)方式:運(yùn)用時(shí)分配存儲(chǔ)空間,運(yùn)用完釋放。動(dòng)態(tài)存儲(chǔ)方式:運(yùn)用時(shí)分配存儲(chǔ)空間,運(yùn)用完釋放。靜態(tài)存儲(chǔ)方式:程序開(kāi)場(chǎng)執(zhí)行時(shí)分配存儲(chǔ)空間,程靜態(tài)存儲(chǔ)方式:程序開(kāi)場(chǎng)執(zhí)行時(shí)分配存儲(chǔ)空間,程序終了時(shí)釋放。序終了時(shí)釋放。8.9.2auto變量自動(dòng)變量變量自動(dòng)變量1定義格式:定義格式:auto 數(shù)據(jù)類型數(shù)據(jù)類型 變量表;變量表;其中存儲(chǔ)類型符其中存儲(chǔ)類型符auto可以省略??梢允÷浴?存儲(chǔ)特點(diǎn)存儲(chǔ)特點(diǎn)1自動(dòng)變量屬于動(dòng)態(tài)存儲(chǔ)方式。在函數(shù)中定義的自

42、動(dòng)變量,只自動(dòng)變量屬于動(dòng)態(tài)存儲(chǔ)方式。在函數(shù)中定義的自動(dòng)變量,只在該函數(shù)內(nèi)有效;函數(shù)被調(diào)用時(shí)分配存儲(chǔ)空間,調(diào)用終了就釋放。在該函數(shù)內(nèi)有效;函數(shù)被調(diào)用時(shí)分配存儲(chǔ)空間,調(diào)用終了就釋放。在復(fù)合語(yǔ)句中定義的自動(dòng)變量,只在該復(fù)合語(yǔ)句中有效;退出復(fù)在復(fù)合語(yǔ)句中定義的自動(dòng)變量,只在該復(fù)合語(yǔ)句中有效;退出復(fù)合語(yǔ)句后,也不能再運(yùn)用,否那么將引起錯(cuò)誤。合語(yǔ)句后,也不能再運(yùn)用,否那么將引起錯(cuò)誤。2定義而不初始化,那么其值是不確定的。假設(shè)初始化,那么定義而不初始化,那么其值是不確定的。假設(shè)初始化,那么賦初值操作是在調(diào)用時(shí)進(jìn)展的,且每次調(diào)用都要重新賦一次初值。賦初值操作是在調(diào)用時(shí)進(jìn)展的,且每次調(diào)用都要重新賦一次初值。3由

43、于自動(dòng)變量的作用域和生存期,都局限于定義它的個(gè)體內(nèi)由于自動(dòng)變量的作用域和生存期,都局限于定義它的個(gè)體內(nèi)函數(shù)或復(fù)合語(yǔ)句,因此不同的個(gè)體中允許運(yùn)用同名的變量而函數(shù)或復(fù)合語(yǔ)句,因此不同的個(gè)體中允許運(yùn)用同名的變量而不會(huì)混淆。即使在函數(shù)內(nèi)定義的自動(dòng)變量,也可與該函數(shù)內(nèi)部的不會(huì)混淆。即使在函數(shù)內(nèi)定義的自動(dòng)變量,也可與該函數(shù)內(nèi)部的復(fù)合語(yǔ)句中定義的自動(dòng)變量同名。復(fù)合語(yǔ)句中定義的自動(dòng)變量同名。8.9.3用用static聲明部分變量靜態(tài)變量聲明部分變量靜態(tài)變量1定義格式:定義格式: static 數(shù)據(jù)類型數(shù)據(jù)類型 內(nèi)部變量表;內(nèi)部變量表;2存儲(chǔ)特點(diǎn)存儲(chǔ)特點(diǎn)1靜態(tài)內(nèi)部變量屬于靜態(tài)存儲(chǔ)。在程序執(zhí)行過(guò)程中,即使所在靜態(tài)內(nèi)部變量屬于靜態(tài)存儲(chǔ)。在程序執(zhí)行過(guò)程中,即使所在函數(shù)調(diào)用終了也不釋放。換句話說(shuō),在程序執(zhí)行期間,靜態(tài)函數(shù)調(diào)用終了也不釋放。換句話說(shuō),在程序執(zhí)行期間,靜態(tài)內(nèi)部變量一直存在,但其它函數(shù)是不能援用它們的。內(nèi)部變量一直存在,但其它函數(shù)是不能援用它們的。2定義但不

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論