j二級C語言PPT課件_第1頁
j二級C語言PPT課件_第2頁
j二級C語言PPT課件_第3頁
j二級C語言PPT課件_第4頁
j二級C語言PPT課件_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C C程序由一個主函數(shù)程序由一個主函數(shù)main()main()和若干個其和若干個其它函數(shù)構(gòu)成,執(zhí)行時由主函數(shù)調(diào)用其它它函數(shù)構(gòu)成,執(zhí)行時由主函數(shù)調(diào)用其它函數(shù),其它函數(shù)可以互相調(diào)用,同一個函數(shù),其它函數(shù)可以互相調(diào)用,同一個函數(shù)也可以被一個或多個函數(shù)調(diào)用任意函數(shù)也可以被一個或多個函數(shù)調(diào)用任意多次。多次。第五章 函數(shù)第第2頁頁/共共48頁頁第1頁/共48頁有有序序第第3頁頁/共共48頁頁第2頁/共48頁52 函數(shù)的參數(shù)傳遞函數(shù)的參數(shù)傳遞形參可以是:形參可以是:簡單變量簡單變量 特點:一旦結(jié)合,即數(shù)據(jù)數(shù)據(jù)傳遞完畢,實參與形特點:一旦結(jié)合,即數(shù)據(jù)數(shù)據(jù)傳遞完畢,實參與形參不再有實際聯(lián)系,即形參在函數(shù)中的值的

2、變化不會參不再有實際聯(lián)系,即形參在函數(shù)中的值的變化不會改變主調(diào)函數(shù)的實參的原有值。改變主調(diào)函數(shù)的實參的原有值。1.1.傳值方式(單向傳遞)傳值方式(單向傳遞)實參可以是:實參可以是:常量、變量、表達(dá)式、數(shù)組元素常量、變量、表達(dá)式、數(shù)組元素第第4頁頁/共共48頁頁第3頁/共48頁形參可以是:形參可以是:數(shù)組名、指針變量數(shù)組名、指針變量 特點:通過傳遞數(shù)組或某一存儲單元的起始地址,特點:通過傳遞數(shù)組或某一存儲單元的起始地址,使被調(diào)函數(shù)可利用此地址來訪問(存?。┫鄳?yīng)存儲單使被調(diào)函數(shù)可利用此地址來訪問(存?。┫鄳?yīng)存儲單元的數(shù)據(jù),實質(zhì)上為通過存儲單元共享,達(dá)到數(shù)據(jù)雙元的數(shù)據(jù),實質(zhì)上為通過存儲單元共享,達(dá)

3、到數(shù)據(jù)雙向傳遞的目的。向傳遞的目的。2.2.傳地址方式(雙向傳遞)傳地址方式(雙向傳遞)實參可以是:實參可以是:數(shù)組名、指針變量、字符串常量、數(shù)組名、指針變量、字符串常量、指定單元的起始地址等指定單元的起始地址等第第5頁頁/共共48頁頁第4頁/共48頁注意:函數(shù)調(diào)用時要求實參與形參在個數(shù)、順序、類型上必須匹配一致.52 函數(shù)的參數(shù)傳遞函數(shù)的參數(shù)傳遞第第6頁頁/共共48頁頁第5頁/共48頁53 函數(shù)的返回值與函數(shù)類型說明函數(shù)的返回值與函數(shù)類型說明函數(shù)的類型應(yīng)與函數(shù)的類型應(yīng)與returnreturn中的表達(dá)式類中的表達(dá)式類型一致,函數(shù)類型決定返回值的類型型一致,函數(shù)類型決定返回值的類型 若若ret

4、urnreturn后面括號中的表達(dá)式為非整型,則必須在后面括號中的表達(dá)式為非整型,則必須在函數(shù)名前冠以函數(shù)的類型說明。函數(shù)類型決定返回值函數(shù)名前冠以函數(shù)的類型說明。函數(shù)類型決定返回值的類型。的類型。三點說明:三點說明:第第7頁頁/共共48頁頁第6頁/共48頁 若不返回值,則用若不返回值,則用voidvoid類型定義函數(shù)。類型定義函數(shù)。void printmessage( )void printmessage( ) 53 函數(shù)的返回值與函數(shù)類型說明函數(shù)的返回值與函數(shù)類型說明函數(shù)的類型應(yīng)與函數(shù)的類型應(yīng)與returnreturn中的表達(dá)式類中的表達(dá)式類型一致,函數(shù)類型決定返回值的類型型一致,函數(shù)類型

5、決定返回值的類型三點說明:三點說明:第第8頁頁/共共48頁頁第7頁/共48頁 一個函數(shù)可以有多個一個函數(shù)可以有多個returnreturn語句??刹捎眯问秸Z句。可采用形式: :return(return(表達(dá)式表達(dá)式) );/帶值返回帶值返回returnreturn;/不帶值返回不帶值返回53 函數(shù)的返回值與函數(shù)類型說明函數(shù)的返回值與函數(shù)類型說明函數(shù)的類型應(yīng)與函數(shù)的類型應(yīng)與returnreturn中的表達(dá)式類中的表達(dá)式類型一致,函數(shù)類型決定返回值的類型型一致,函數(shù)類型決定返回值的類型三點說明:三點說明:第第9頁頁/共共48頁頁第8頁/共48頁54 應(yīng)遵守先定義后使用的調(diào)用規(guī)則應(yīng)遵守先定義后使用

6、的調(diào)用規(guī)則類型標(biāo)識符類型標(biāo)識符 函數(shù)名(形參表);函數(shù)名(形參表);若函數(shù)定義在后,調(diào)用在先,則應(yīng)在主調(diào)函若函數(shù)定義在后,調(diào)用在先,則應(yīng)在主調(diào)函數(shù)的定義說明部分給出被調(diào)函數(shù)的原型說明:數(shù)的定義說明部分給出被調(diào)函數(shù)的原型說明:正確區(qū)分函數(shù)定義和函數(shù)正確區(qū)分函數(shù)定義和函數(shù)原型原型說明:說明:定義定義:是對函數(shù)功能的確立。是對函數(shù)功能的確立。說明說明:是對已定義函數(shù)的函數(shù)名、函數(shù)類型,:是對已定義函數(shù)的函數(shù)名、函數(shù)類型,形參的個數(shù)、順序和類型等信息的說明。形參的個數(shù)、順序和類型等信息的說明。第第10頁頁/共共48頁頁第9頁/共48頁55 函數(shù)間的數(shù)據(jù)聯(lián)系函數(shù)間的數(shù)據(jù)聯(lián)系 通過通過returnretu

7、rn語句返回一個值語句返回一個值 一一個個地地址址或或一一個個數(shù)數(shù)值值 通過通過returnreturn語句返回一個值語句返回一個值 一一個個地地址址或或一一個個數(shù)數(shù)值值 通過外部(全局)變量進(jìn)行數(shù)據(jù)傳遞。通過外部(全局)變量進(jìn)行數(shù)據(jù)傳遞。 形實參數(shù)傳遞結(jié)合形實參數(shù)傳遞結(jié)合 )傳傳地地址址方方式式(雙雙向向傳傳遞遞或或傳傳值值方方式式(單單向向傳傳遞遞) 形實參數(shù)傳遞結(jié)合形實參數(shù)傳遞結(jié)合 )傳傳地地址址方方式式(雙雙向向傳傳遞遞或或傳傳值值方方式式(單單向向傳傳遞遞)第第11頁頁/共共48頁頁第10頁/共48頁56 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用 遞歸的概念遞歸的概念:通俗地講,用自身的結(jié)構(gòu)來描

8、述自身:通俗地講,用自身的結(jié)構(gòu)來描述自身就稱為就稱為“遞歸遞歸”。這里指函數(shù)直接或間接的自己調(diào)用。這里指函數(shù)直接或間接的自己調(diào)用自己。自己。C C語言的函數(shù)除了語言的函數(shù)除了main()main()函數(shù),都可以遞歸調(diào)用,但函數(shù),都可以遞歸調(diào)用,但不能遞歸定義,即不能在函數(shù)內(nèi)部定義另一個函數(shù),不能遞歸定義,即不能在函數(shù)內(nèi)部定義另一個函數(shù),但可以直接或間接地調(diào)用自己。但可以直接或間接地調(diào)用自己。 具有遞歸特性的問題,用遞歸調(diào)用描述它們就非常具有遞歸特性的問題,用遞歸調(diào)用描述它們就非常方便。方便。第第12頁頁/共共48頁頁第11頁/共48頁C C語言的函數(shù)除了語言的函數(shù)除了main()main()函

9、數(shù),都可以遞歸調(diào)函數(shù),都可以遞歸調(diào)用,但不能遞歸定義,即不能在函數(shù)內(nèi)部定義用,但不能遞歸定義,即不能在函數(shù)內(nèi)部定義另一個函數(shù),但可以直接或間接地調(diào)用自己。另一個函數(shù),但可以直接或間接地調(diào)用自己。 構(gòu)成遞歸的條件:構(gòu)成遞歸的條件:(1) (1) 遞歸結(jié)束條件及結(jié)束時的值;遞歸結(jié)束條件及結(jié)束時的值;(2) (2) 能用遞歸表達(dá)式形式表示,并且遞歸向結(jié)束條能用遞歸表達(dá)式形式表示,并且遞歸向結(jié)束條件發(fā)展件發(fā)展第第13頁頁/共共48頁頁第12頁/共48頁例例55- -1:1: ,遞遞推推公公式式不不等等于于當(dāng)當(dāng),遞遞歸歸結(jié)結(jié)束束條條件件當(dāng)當(dāng)求求0)!1(*01!nnnnnC C語言的函數(shù)除了語言的函數(shù)除

10、了main()main()函數(shù),都可以遞歸調(diào)函數(shù),都可以遞歸調(diào)用,但不能遞歸定義,即不能在函數(shù)內(nèi)部定義用,但不能遞歸定義,即不能在函數(shù)內(nèi)部定義另一個函數(shù),但可以直接或間接地調(diào)用自己。另一個函數(shù),但可以直接或間接地調(diào)用自己。第第14頁頁/共共48頁頁第13頁/共48頁 遞歸調(diào)用點,此時整個表達(dá)式的運算還沒有完成,必須返回一個值參與運算后,求出整個表達(dá)式的值,然后再返回上一層遞歸調(diào)用點。遞歸調(diào)用點也是返回點。 保護(hù)現(xiàn)場:保存數(shù)據(jù),以便返回時再使用;保存返回地址等第第15頁頁/共共48頁頁第14頁/共48頁else return( n*fac( n-1 );fac(n)fac(3)fac(2)fac

11、(1)fac(0) return( n*fac( n-1 );return( n*fac( n-1 );return( n*fac( n-1 );return( 1 );44312棧:先進(jìn)后出。保存數(shù)據(jù)棧:先進(jìn)后出。保存數(shù)據(jù)int fac(int n)if(n=0) return(1);else return(n*fac(n-1); 遞推方向第第16頁頁/共共48頁頁第15頁/共48頁4312棧:先進(jìn)后出。保存數(shù)據(jù)棧:先進(jìn)后出。保存數(shù)據(jù)12*1=21*1=14*6=2412624else return( n*fac( n-1 );fac(n)fac(3)fac(2)fac(1)fac(0) r

12、eturn( n*fac( n-1 );return( n*fac( n-1 );return( n*fac( n-1 );return( 1 );4else return( n*fac( n-1 );fac(n)fac(3)fac(2)fac(1)fac(0) return( n*fac( n-1 );return( n*fac( n-1 );return( n*fac( n-1 );return( 1 );43*2=2遞推方向遞推方向int fac(int n)if(n=0) return(1);else return(n*fac(n-1);運行結(jié)果運行結(jié)果: :輸入:輸入:4 4 輸出:

13、輸出:2424反推方向第第17頁頁/共共48頁頁第16頁/共48頁print( n )int i;printf(n=%-5dn, n);if(ny? x : y );第第22頁頁/共共48頁頁第21頁/共48頁提示:提示:在定義和說明變量時,應(yīng)按照變在定義和說明變量時,應(yīng)按照變量的作用范圍以及它們在存儲單元量的作用范圍以及它們在存儲單元中保持值的時間長短的需要,對它中保持值的時間長短的需要,對它們的存儲類別進(jìn)行說明限定。們的存儲類別進(jìn)行說明限定。第第23頁頁/共共48頁頁第22頁/共48頁(1) (1) 局部變量及其作用域局部變量及其作用域函數(shù)內(nèi)部定義的變量統(tǒng)稱為局部變量函數(shù)內(nèi)部定義的變量統(tǒng)稱

14、為局部變量,包括形參變量,由于存放在動態(tài)區(qū),包括形參變量,由于存放在動態(tài)區(qū),故也稱為動態(tài)變量。故也稱為動態(tài)變量。作用域作用域:本函數(shù)內(nèi)有效本函數(shù)內(nèi)有效第第24頁頁/共共48頁頁第23頁/共48頁float fa(int a) int b, c;void main()int a, b, c; int c; c=a+b; a,b,ca,b,c作用域作用域局部變量局部變量C C有效有效在復(fù)合語在復(fù)合語句內(nèi)定義句內(nèi)定義的的C C有效有效局部變量局部變量C C有效有效b,cb,c的的作作用用域域a,b,ca,b,c作用域作用域局部變量局部變量C C有效有效在復(fù)合語在復(fù)合語句內(nèi)定義句內(nèi)定義的的C C有效有

15、效局部變量局部變量C C有效有效b,cb,c的的作作用用域域說明:說明: 函數(shù)內(nèi)定義函數(shù)內(nèi)定義的變量只限本函的變量只限本函數(shù) 內(nèi) 有 效 ,數(shù) 內(nèi) 有 效 ,main()main()函數(shù)中定函數(shù)中定義的變量也只有義的變量也只有主函數(shù)內(nèi)有效。主函數(shù)內(nèi)有效。 不同函數(shù)中不同函數(shù)中定義的變量可以定義的變量可以同名,各自代表同名,各自代表不同的對象,互不同的對象,互不干擾。不干擾。 形參也是局形參也是局部變量。部變量。第第25頁頁/共共48頁頁第24頁/共48頁 沒有指定類沒有指定類別作別作autoauto處理。處理。 內(nèi)層定義的內(nèi)層定義的局部變量優(yōu)先。局部變量優(yōu)先。 局部動態(tài)變局部動態(tài)變量的初值不定

16、。量的初值不定。float fa(int a) int b, c;void main()int a, b, c; int c; c=a+b; a,b,ca,b,c作用域作用域局部變量局部變量C C有效有效在復(fù)合語在復(fù)合語句內(nèi)定義句內(nèi)定義的的C C有效有效局部變量局部變量C C有效有效b,cb,c的的作作用用域域a,b,ca,b,c作用域作用域局部變量局部變量C C有效有效在復(fù)合語在復(fù)合語句內(nèi)定義句內(nèi)定義的的C C有效有效局部變量局部變量C C有效有效b,cb,c的的作作用用域域第第26頁頁/共共48頁頁第25頁/共48頁(2) (2) 寄存器變量及其作用域寄存器變量及其作用域為了提高執(zhí)行效率,

17、允許將局部變量為了提高執(zhí)行效率,允許將局部變量的值放在運算器的寄存器中,需要時直的值放在運算器的寄存器中,需要時直接從寄存器取出參加運算。接從寄存器取出參加運算。說明說明:只有局部自動變量和函數(shù)的形只有局部自動變量和函數(shù)的形參可以作為寄存器變量,并且類型只限參可以作為寄存器變量,并且類型只限于于intint、charchar和指針類型。和指針類型。第第27頁頁/共共48頁頁第26頁/共48頁int fac(int n)register int i, f=1;for( i=1; i=n; i+ )f=f*i;return( f );void main()int i;for( i=1; i=5;

18、i+ )printf( %d!=%3dn, i, fac(i) );例例88- -3:3:求求1!1!5!5!的階乘的階乘. .運行結(jié)果:運行結(jié)果:1!= 11!= 12!= 22!= 23!= 63!= 64!= 244!= 245!=1205!=120 第第28頁頁/共共48頁頁第27頁/共48頁(3) (3) 外部變量及其作用域外部變量及其作用域在函數(shù)外定義的變量稱為外部變量,即全局在函數(shù)外定義的變量稱為外部變量,即全局變量,可以為本文件中其它函數(shù)所共用。其變量,可以為本文件中其它函數(shù)所共用。其有有效作用域效作用域 :從定義變量的位置開始到本源文件結(jié)束從定義變量的位置開始到本源文件結(jié)束.

19、 .外部變量提供了不同函數(shù)間進(jìn)行外部變量提供了不同函數(shù)間進(jìn)行數(shù)據(jù)共享(傳遞)的另一途徑。數(shù)據(jù)共享(傳遞)的另一途徑。第第29頁頁/共共48頁頁第28頁/共48頁float max=0, min=0; /定義外部變量定義外部變量max, minfloat average( float array, int n )int i; float aver, sum=array0;max=min=array0;for( i=1; imax ) max=arrayi;if( arrayimin ) min=arrayi;sum=sum+arrayi;aver=sum/n;return(aver);例例55-

20、 -4:4:用一維數(shù)組內(nèi)存放用一維數(shù)組內(nèi)存放1010個學(xué)生成績,寫一個函個學(xué)生成績,寫一個函數(shù),求出平均分、最高分和最低分。數(shù),求出平均分、最高分和最低分。第第30頁頁/共共48頁頁第29頁/共48頁void main()float ave, score10; int i;for( i=0; i10; i+ ) scanf(%f,&scorei);ave=average( score, 10);printf(max=%fnmin=%fnaverge=%6.2fn,max,min,ave);輸入:輸入:99 45 78 97 100 67.5 89 92 66 4399 45 78 97 100

21、 67.5 89 92 66 43輸出:輸出:max=100.00max=100.00min= 43.00min= 43.00averge= 77.65averge= 77.65第第31頁頁/共共48頁頁第30頁/共48頁float max=0, min=0; /定義外部變量定義外部變量max, minfloat average(float array, int n)int i; float aver,sum=array0;max=min=array0;for(i=1; imax) max=arrayi;if(arrayimin) min=arrayi;sum=sum+arrayi;aver=

22、sum/n; return(aver);void main()float ave, score10; int i;for(i=0; i10; i+) scanf(%f,&scorei);ave=average( score, 10);printf(max=%fnmin=%fnaverge=%6.2fn,max,min,ave);max,minmax,min的有效的有效作用域作用域max,minmax,min的有效的有效作用域作用域利利用用全全局局變變量量傳傳遞遞數(shù)數(shù)據(jù)據(jù)第第32頁頁/共共48頁頁第31頁/共48頁(4) (4) 動態(tài)局部變量與靜態(tài)局部變量的比較說明動態(tài)局部變量與靜態(tài)局部變量的比

23、較說明動態(tài)局部變量動態(tài)局部變量 其作用域在空間上是其作用域在空間上是函數(shù)或復(fù)合語句的內(nèi)部,函數(shù)或復(fù)合語句的內(nèi)部,在時間意義上是函數(shù)的一在時間意義上是函數(shù)的一次調(diào)用周期或復(fù)合語句的次調(diào)用周期或復(fù)合語句的的執(zhí)行周期;即進(jìn)入函數(shù)的執(zhí)行周期;即進(jìn)入函數(shù)時系統(tǒng)自動為其分配存儲時系統(tǒng)自動為其分配存儲單元,函數(shù)調(diào)用結(jié)束時系單元,函數(shù)調(diào)用結(jié)束時系統(tǒng)自動收回該存儲單元。統(tǒng)自動收回該存儲單元。 其初值不定。其初值不定。靜態(tài)局部變量靜態(tài)局部變量 其值不隨函數(shù)調(diào)用或其值不隨函數(shù)調(diào)用或復(fù)合語句的執(zhí)行結(jié)束而消復(fù)合語句的執(zhí)行結(jié)束而消失,當(dāng)再次進(jìn)入函數(shù)或復(fù)失,當(dāng)再次進(jìn)入函數(shù)或復(fù)合語句時,它仍保持上次合語句時,它仍保持上次函數(shù)

24、調(diào)用時的值;即靜態(tài)函數(shù)調(diào)用時的值;即靜態(tài)局部變量在編譯時只分配局部變量在編譯時只分配一次存儲單元,并一直保一次存儲單元,并一直保持到程序結(jié)束。持到程序結(jié)束。 有確定的初值,數(shù)值有確定的初值,數(shù)值為為0 0,字符為,字符為 0 0。動態(tài)局部變量動態(tài)局部變量 其作用域在空間上是其作用域在空間上是函數(shù)或復(fù)合語句的內(nèi)部,函數(shù)或復(fù)合語句的內(nèi)部,在時間意義上是函數(shù)的一在時間意義上是函數(shù)的一次調(diào)用周期或復(fù)合語句的次調(diào)用周期或復(fù)合語句的的執(zhí)行周期;即進(jìn)入函數(shù)的執(zhí)行周期;即進(jìn)入函數(shù)時系統(tǒng)自動為其分配存儲時系統(tǒng)自動為其分配存儲單元,函數(shù)調(diào)用結(jié)束時系單元,函數(shù)調(diào)用結(jié)束時系統(tǒng)自動收回該存儲單元。統(tǒng)自動收回該存儲單元。

25、 其初值不定。其初值不定。靜態(tài)局部變量靜態(tài)局部變量 其值不隨函數(shù)調(diào)用或其值不隨函數(shù)調(diào)用或復(fù)合語句的執(zhí)行結(jié)束而消復(fù)合語句的執(zhí)行結(jié)束而消失,當(dāng)再次進(jìn)入函數(shù)或復(fù)失,當(dāng)再次進(jìn)入函數(shù)或復(fù)合語句時,它仍保持上次合語句時,它仍保持上次函數(shù)調(diào)用時的值;即靜態(tài)函數(shù)調(diào)用時的值;即靜態(tài)局部變量在編譯時只分配局部變量在編譯時只分配一次存儲單元,并一直保一次存儲單元,并一直保持到程序結(jié)束。持到程序結(jié)束。 有確定的初值,數(shù)值有確定的初值,數(shù)值為為0 0,字符為,字符為 0 0。第第33頁頁/共共48頁頁第32頁/共48頁int fac(int n)int fac(int n)static int f=1;static i

26、nt f=1;f=f*n;f=f*n;return(f);return(f); void main()void main()int i;int i;for(i=1; i=5; i+)for(i=1; i=5; i+)printf(%d!=%3dprintf(%d!=%3d n,i,fac(i);n,i,fac(i); 例例55- -5:5:利用保留函數(shù)上一次調(diào)用結(jié)束時的值,求利用保留函數(shù)上一次調(diào)用結(jié)束時的值,求1 1到到5 5的階乘值。的階乘值。程序區(qū)程序區(qū)靜態(tài)區(qū)靜態(tài)區(qū)動態(tài)區(qū)動態(tài)區(qū)程序區(qū)程序區(qū)靜態(tài)區(qū)靜態(tài)區(qū)動態(tài)區(qū)動態(tài)區(qū)1i i1i i1f f1f f1n n1n n第第34頁頁/共共48頁頁第3

27、3頁/共48頁說明:說明: f f為靜態(tài)局部變量,其值為靜態(tài)局部變量,其值不隨函不隨函數(shù)調(diào)用結(jié)束而消失數(shù)調(diào)用結(jié)束而消失,保存至下一次被調(diào)用時可,保存至下一次被調(diào)用時可繼續(xù)使用。繼續(xù)使用。 靜態(tài)局部變量靜態(tài)局部變量f f的作用域的作用域不變。仍為本函數(shù)內(nèi)有效。不變。仍為本函數(shù)內(nèi)有效。 利用靜態(tài)局部變量的存利用靜態(tài)局部變量的存儲特性,也屬提高程序運行儲特性,也屬提高程序運行效率的一種有效手段。效率的一種有效手段。int fac(int n)int fac(int n)static int f=1;static int f=1;f=f*n;f=f*n;return(f);return(f); voi

28、d main()void main()int i;int i;for(i=1; i=5; i+)for(i=1; i=5; i+)printf(%d!=%3dprintf(%d!=%3d n,i,fac(i);n,i,fac(i); 例例55- -5:5:利用保留函數(shù)上一次調(diào)用結(jié)束時的值,求利用保留函數(shù)上一次調(diào)用結(jié)束時的值,求1 1到到5 5的階乘值。的階乘值。int fac(int n)int fac(int n)static int f=1;static int f=1;f=f*n;f=f*n;return(f);return(f); void main()void main()int i

29、;int i;for(i=1; i=5; i+)for(i=1; i=5; i+)printf(%d!=%3dprintf(%d!=%3d n,i,fac(i);n,i,fac(i); 例例55- -5:5:利用保留函數(shù)上一次調(diào)用結(jié)束時的值,求利用保留函數(shù)上一次調(diào)用結(jié)束時的值,求1 1到到5 5的階乘值。的階乘值。第第35頁頁/共共48頁頁第34頁/共48頁int fac(int n)int fac(int n)static int f=1;static int f=1;f=f*n;f=f*n;return(f);return(f); void main()void main()int i;i

30、nt i;for(i=1; i=5; i+)for(i=1; i=5; i+)printf(%d!=%3dprintf(%d!=%3d n,i,fac(i);n,i,fac(i); 例例55- -5:5:利用保留函數(shù)上一次調(diào)用結(jié)束時的值,求利用保留函數(shù)上一次調(diào)用結(jié)束時的值,求1 1到到5 5的階乘值。的階乘值。int fac(int n)int fac(int n)static int f=1;static int f=1;f=f*n;f=f*n;return(f);return(f); void main()void main()int i;int i;for(i=1; i=5; i+)fo

31、r(i=1; i=5; i+)printf(%d!=%3dprintf(%d!=%3d n,i,fac(i);n,i,fac(i); 例例55- -5:5:利用保留函數(shù)上一次調(diào)用結(jié)束時的值,求利用保留函數(shù)上一次調(diào)用結(jié)束時的值,求1 1到到5 5的階乘值。的階乘值。運行結(jié)果運行結(jié)果: :1!= 11!= 12!= 22!= 23!= 63!= 64!= 244!= 245!=1205!=120 第第36頁頁/共共48頁頁第35頁/共48頁關(guān)于關(guān)于staticstatic的相關(guān)說明的相關(guān)說明 靜態(tài)函數(shù):使函數(shù)局部化,限制其它靜態(tài)函數(shù):使函數(shù)局部化,限制其它C C程序文件的程序文件的調(diào)用。調(diào)用。st

32、atic static 類型標(biāo)識符類型標(biāo)識符 函數(shù)名函數(shù)名( (形參表形參表) ) 靜態(tài)外部變量:函數(shù)外部定義的變量加靜態(tài)外部變量:函數(shù)外部定義的變量加staticstatic時,時,將使外部變量局部化,限制其它源程序引用;將使外部變量局部化,限制其它源程序引用;static static 類型標(biāo)識符類型標(biāo)識符變量表列;變量表列;main() main() 第第37頁頁/共共48頁頁第36頁/共48頁關(guān)于外部關(guān)于外部( (全局全局) )變量的相關(guān)說明變量的相關(guān)說明 如果在定義點之前的函數(shù)或其它源程序文件中想引如果在定義點之前的函數(shù)或其它源程序文件中想引用某外部變量,則應(yīng)該在函數(shù)中用關(guān)鍵字用某外

33、部變量,則應(yīng)該在函數(shù)中用關(guān)鍵字externextern作作“外部變量外部變量”說明。說明。 使用全局變量會使函數(shù)的通用性及程序的清晰度降使用全局變量會使函數(shù)的通用性及程序的清晰度降低,要限制使用;低,要限制使用;第第38頁頁/共共48頁頁第37頁/共48頁例例55- -6:6:綜合情況。綜合情況。int p=1, q=5; float fa(int a)int b, c; char c1, c2; char f2(int x,int y)int i, p; void main()int m, n; 局部變量局部變量a, b, c局部變量局部變量a, b, c局部變量局部變量x, y, i, p

34、局部變量局部變量x, y, i, p局部變量局部變量m, n局部變量局部變量m, n全局變量全局變量c1,c2全局變量全局變量c1,c2全局變量全局變量p被屏蔽被屏蔽全局變量全局變量p 全局變量全局變量p 全局變量全局變量p被屏蔽被屏蔽全局變量全局變量p 全局變量全局變量p q q 第第39頁頁/共共48頁頁第38頁/共48頁例例55- -7:7:在定義點之前引用某外部變量的情況。在定義點之前引用某外部變量的情況。void f1(int a)int b=0, c=0; extern int p, q;/聲明全局變量聲明全局變量q,pb+; c+; printf(%4d %4dn, p, q);

35、char c1=A, c2=B;void f2(int x, int y)int i=0, p=0; extern int q;/聲明全局變量聲明全局變量qi+; -p;printf(%4d %4dn, p, q);void main()int m=0, n=0; extern int p, q;f1(m); f2(m, n);printf(%4d%4d%4d%4d%4c%4cn,p,q,m,n,c1,c2);int p=1, q=5;/定義全局變量定義全局變量p,q運行結(jié)果運行結(jié)果: : 1 1 5 5-1 -1 5 5 1 1 5 0 0 A B5 0 0 A B第第40頁頁/共共48頁頁

36、第39頁/共48頁關(guān)于外部關(guān)于外部( (全局全局) )變量的相關(guān)說明變量的相關(guān)說明 正確區(qū)分外部變量定義和說明:正確區(qū)分外部變量定義和說明: 定義定義:只能一次,位置在函數(shù)之外,系統(tǒng)根據(jù)定只能一次,位置在函數(shù)之外,系統(tǒng)根據(jù)定義分配存儲單元,可以初始化;義分配存儲單元,可以初始化; 說明說明:可以多次,位置在函數(shù)之內(nèi),說明只是聲可以多次,位置在函數(shù)之內(nèi),說明只是聲明該變量是一個已在外部定義過的變量,僅僅為引用明該變量是一個已在外部定義過的變量,僅僅為引用作聲明。作聲明。第第41頁頁/共共48頁頁第40頁/共48頁第第42頁頁/共共48頁頁第41頁/共48頁第第43頁頁/共共48頁頁第42頁/共4

37、8頁int sum_prime(int r)int sum_prime(int r)int i, j=499, sum=0; int prime(int n); int i, j=499, sum=0; int prime(int n); for(i=0; i10; )for(i=0; i10; )if(prime(j) sum=sum+j; ri+=j;if(prime(j) sum=sum+j; ri+=j;j j-; ; return(sum);return(sum); int prime(int n)int prime(int n)int i, k;int i, k;k=(int)sq

38、rt(double)n);k=(int)sqrt(double)n);for(i=2;i=k;i+) if(n%i=0)return(0);for(i=2;i=k+1) return(1);if(i=k+1) return(1); 運行結(jié)果運行結(jié)果: : 499 491 487 479 499 491 487 479 467 463 461 457 467 463 461 457 449 443 449 443sum=4696sum=4696 第第44頁頁/共共48頁頁第43頁/共48頁第第45頁頁/共共48頁頁第44頁/共48頁第第46頁頁/共共48頁頁第45頁/共48頁int stlen(char s)int stlen(char s)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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論