C語(yǔ)言函數(shù)公開(kāi)課一等獎(jiǎng)省優(yōu)質(zhì)課大賽獲獎(jiǎng)?wù)n件_第1頁(yè)
C語(yǔ)言函數(shù)公開(kāi)課一等獎(jiǎng)省優(yōu)質(zhì)課大賽獲獎(jiǎng)?wù)n件_第2頁(yè)
C語(yǔ)言函數(shù)公開(kāi)課一等獎(jiǎng)省優(yōu)質(zhì)課大賽獲獎(jiǎng)?wù)n件_第3頁(yè)
C語(yǔ)言函數(shù)公開(kāi)課一等獎(jiǎng)省優(yōu)質(zhì)課大賽獲獎(jiǎng)?wù)n件_第4頁(yè)
C語(yǔ)言函數(shù)公開(kāi)課一等獎(jiǎng)省優(yōu)質(zhì)課大賽獲獎(jiǎng)?wù)n件_第5頁(yè)
已閱讀5頁(yè),還剩44頁(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)介

模塊化程序設(shè)計(jì)——函數(shù)孫小松10/10/11§6.1函數(shù)概念C程序結(jié)構(gòu)●C程序結(jié)構(gòu)如圖所表示1.一個(gè)C程序能夠分為若干個(gè)函數(shù)2.每個(gè)程序有且只有一個(gè)主函數(shù)(main),其它都是子函數(shù)3.子函數(shù)能夠相互調(diào)用,但主函數(shù)不能被調(diào)用4.一個(gè)C源程序由一個(gè)或多個(gè)文件組成,每個(gè)文件就是一個(gè)編譯單位2●說(shuō)明:1.一個(gè)C程序執(zhí)行從主函數(shù)(main)開(kāi)始,調(diào)用其它函數(shù)后仍回到main主函數(shù)結(jié)束.2.每個(gè)子函數(shù)都是平行,任何子函數(shù)都不隸屬于其它函數(shù)3.從用戶角度,函數(shù)能夠分為:

☆標(biāo)準(zhǔn)函數(shù),即庫(kù)函數(shù)

☆用戶自定義函數(shù)4.從函數(shù)形式能夠分為:☆無(wú)參函數(shù):printstar()☆有參函數(shù):printf(“hello”)#include<stdio.h>voidprintStar(){printf(“*******************\n”);}voidprintMessage(){printf(“Hello,world.\n”);printStar();}voidmain(){printStar();printMessage();}3函數(shù)定義普通形式●函數(shù)定義普通形式:類型說(shuō)明函數(shù)名([形式參數(shù)說(shuō)明]){函數(shù)體}形式參數(shù)說(shuō)明方法:

數(shù)據(jù)類型變量名[,類型變量名]●無(wú)參數(shù)函數(shù)定義形式:

類型說(shuō)明函數(shù)名(){函數(shù)體}voidprintHello(){printf(“hello!\n”);}●有參數(shù)函數(shù)定義形式:

類型說(shuō)明函數(shù)名(形式參數(shù)說(shuō)明){函數(shù)體}intsum(intx,inty){intz;z=x+y;return(z);}4●函數(shù)體普通情況下,函數(shù)體有兩部分組成:

{[局部變量說(shuō)明]語(yǔ)句;}局部變量說(shuō)明:函數(shù)體內(nèi)變量.其有效范圍僅在本函數(shù)體內(nèi)起作用,離開(kāi)本函數(shù)無(wú)意義.intsum(intx,inty){intz;//局部變量定義z=x+y;return(z);}5函數(shù)參數(shù)和函數(shù)值●一個(gè)程序由若干個(gè)函數(shù)組成,各函數(shù)調(diào)用時(shí)經(jīng)常要傳遞一些數(shù)據(jù),即調(diào)用函數(shù)把數(shù)據(jù)傳遞給被調(diào)用函數(shù),經(jīng)過(guò)被調(diào)用函數(shù)處理后,得到一個(gè)確定結(jié)果,在返回調(diào)用函數(shù)時(shí),將結(jié)果帶回調(diào)用函數(shù).#include<stdio.h>intmax(intx,inty){intz;z=(x>y)?x:y;return(z);}voidmain(){inta,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“maxis%d\n”,c);}主函數(shù)子函數(shù)..

c=max(a,b);..intmax(intx,inty)...return(z);a,bz各函數(shù)之間數(shù)據(jù)往來(lái)經(jīng)過(guò)參數(shù)傳遞和返回語(yǔ)句實(shí)現(xiàn)6函數(shù)參數(shù):用于函數(shù)間數(shù)據(jù)傳遞形式參數(shù):定義函數(shù)時(shí)給出參數(shù)實(shí)際參數(shù):調(diào)用函數(shù)時(shí)給出參數(shù)#include<stdio.h>intmax(int

x,int

y){intz;z=(x>y)?x:y;return(z);}voidmain(){inta,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“maxis%d\n”,c);}對(duì)于函數(shù)max有兩個(gè)形式參數(shù)x,y形式參數(shù)x和y只在max函數(shù)中使用a,b是主函數(shù)中定義變量,當(dāng)main函數(shù)調(diào)用max函數(shù)時(shí).a,b成為max實(shí)際參數(shù)調(diào)用時(shí),實(shí)際參數(shù)值賦給形參進(jìn)行處理例:max接收到兩個(gè)值:89max返回89一、形式參數(shù)和實(shí)際參數(shù)7#include<stdio.h>intmax(int

x,int

y){intz;z=(x>y)?x:y;return(z);}voidmain(){inta,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“maxis%d\n”,c);}說(shuō)明:1.定義函數(shù)時(shí),必須說(shuō)明形參類型,形參只能是變量(包含數(shù)組).不能是常量或表示式2.函數(shù)被調(diào)用之前,形參和子函數(shù)中變量不占內(nèi)存,調(diào)用結(jié)束返回,形參所占內(nèi)存被收回.3.實(shí)參能夠是常量、變量或表示式.因?yàn)閭鬟f過(guò)來(lái)是詳細(xì)數(shù)值.4.實(shí)參和形參類型必須一致(或能夠安全轉(zhuǎn)換).5.C語(yǔ)言中,實(shí)參和形參傳遞是”按值傳遞”,即單向傳遞,只與參數(shù)相對(duì)位置相關(guān),而與變量名無(wú)關(guān)intb,intaintc;c=(a>b)?a:b;return(c);1320main-amain-bmax-amax-b13208#include<stdio.h>intsum(inta,intb){a=a+b;b=a+b;return(a);}voidmain(){inta=1,b=3,c;c=sum(a,b);printf(“sumof%d,%dis%d\n”,a,b,c);}閱讀下面程序,寫(xiě)出運(yùn)行結(jié)果函數(shù)被調(diào)用之前,形參和子函數(shù)中變量不占內(nèi)存,調(diào)用結(jié)束返回,形參所占內(nèi)存被收回.實(shí)參和形參傳遞是”值傳遞”,即單向傳遞,只與參數(shù)相對(duì)位置相關(guān),而與變量名無(wú)關(guān)sumof1,3is49二、函數(shù)返回值#include<stdio.h>intmax(int

x,int

y){intz;z=(x>y)?x:y;return(z);}voidmain(){inta,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“maxis%d\n”,c);}函數(shù)值也就是函數(shù)返回值,是一個(gè)詳細(xì)確定值.①函數(shù)使用return語(yǔ)句返回值。②一個(gè)函數(shù)內(nèi)能夠有多個(gè)return語(yǔ)句,執(zhí)行到任何return語(yǔ)句,函數(shù)都將馬上返回到調(diào)用函數(shù)if(x>y)return(x);elsereturn(y);③return后面()能夠省略,能夠返回一個(gè)表示式,先求解表示式值,再返回.intmax(intx,inty){returnx>y?x:y;}1.返回函數(shù)值方法10#include<stdio.h>intmax(int

x,int

y){intz;z=(x>y)?x:y;return(z);}voidmain(){inta,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“maxis%d\n”,c);}2.函數(shù)值類型

①函數(shù)類型即函數(shù)值類型.比如,函數(shù)max是int型,函數(shù)返回值也是int型.②省略了類型說(shuō)明函數(shù)就是int型.③return中表示式值普通和函數(shù)類型相同.④假如不一致,則需要進(jìn)行類型轉(zhuǎn)換.以函數(shù)類型為準(zhǔn).113.不需要返回函數(shù)①假如函數(shù)中沒(méi)有return,認(rèn)為是一個(gè)過(guò)程,能夠使用類型void.②假如一個(gè)函數(shù)被申明void類型,就不允許再引用它返回值。只能單純調(diào)用它。#include<stdio.h>voidprintStar(){printf(“*******************\n”);}voidprintMessage(){printf(“Hello,world.\n”);printStar();}voidmain(){printStar();printMessage();}12函數(shù)調(diào)用一、函數(shù)調(diào)用普通形式普通形式:

函數(shù)名(實(shí)參列表)說(shuō)明:①假如調(diào)用無(wú)參函數(shù),實(shí)參表列能夠忽略,但括號(hào)不能省.②實(shí)參個(gè)數(shù)和形參個(gè)數(shù)相同.③實(shí)參和形參類型一一對(duì)應(yīng),必要時(shí)會(huì)進(jìn)行類型轉(zhuǎn)換.注意:不一樣系統(tǒng)中,實(shí)參計(jì)算次序不一樣.普通認(rèn)為從右到左計(jì)算和賦值.普通在調(diào)用函數(shù)前計(jì)算出實(shí)參值例1讀程序,寫(xiě)出結(jié)果#include<stdio.h>intf(inta,intb){intc;if(a>b)c=1;elseif(a==b)c=0;elsec=-1;returnc;}voidmain(){inti=2,p;p=f(i,++i);printf(“%d”,p);}13二、函數(shù)調(diào)用方式1、函數(shù)語(yǔ)句

形式為:函數(shù)(實(shí)參表列);比如:printMessage();printf(“%d”,p);說(shuō)明:這種方式不要求函數(shù)帶返回值,函數(shù)只執(zhí)行一定操作.2、函數(shù)表示式

函數(shù)返回值參加運(yùn)算比如:m=max(a,b);m=3*max(a,b);printf(“%d”,max(a,b));說(shuō)明:這種方式函數(shù)不能用于void類型14三、函數(shù)調(diào)用執(zhí)行過(guò)程①?gòu)挠业阶蟠涡?計(jì)算實(shí)參中各表示式值.②按照位置,將實(shí)參值一一傳遞給形參.③執(zhí)行被調(diào)用函數(shù).④當(dāng)碰到return(表示式)語(yǔ)句時(shí),計(jì)算表示式值并返回主調(diào)函數(shù).例2讀程序,寫(xiě)出結(jié)果#include<stdio.h>intiabs(floatx){return(x>0?x:-x);}voidmain(){floatx=-0.6,y;y=iabs(2*x);printf(“x=%f,iabs(x)=%f\n”,x,y);}1234X=-0.600000,iabs(x)=1.00000015四、函數(shù)原形在程序中調(diào)用函數(shù)需滿足以下條件:①被調(diào)用函數(shù)必須存在,且必須遵照“先定義后使用”標(biāo)準(zhǔn)②假如被調(diào)用函數(shù)定義在主調(diào)函數(shù)之后,能夠在調(diào)用之前給出原形說(shuō)明.原形說(shuō)明:類型說(shuō)明函數(shù)名(參數(shù)類型,參數(shù)類型…)16函數(shù)嵌套調(diào)用嵌套調(diào)用是指在一個(gè)函數(shù)函數(shù)體中又調(diào)用了其它函數(shù).程序執(zhí)行過(guò)程:第一層第二層第三層

main()printStar(){{printStar();……}printfMessage()printMessage();{……printStar();printStar();{……}}}結(jié)束#include<stdio.h>voidprintStar(){printf(“*******************\n”);}voidprintMessage(){printf(“Hello,world.\n”);printStar();}voidmain(){printStar();printMessage();}17例3編程求分析:重復(fù)三次不一樣階乘運(yùn)算,只是每次值不一樣.將求階乘過(guò)程編程一個(gè)函數(shù)fac,以不一樣參數(shù)值來(lái)調(diào)用facfackk!#include<stdio.h>#include<math.h>floatfac(intk);{floatt=1.0;inti;for(i=2;i<=k;i++)t*=i;returnt;}voidmain(){floatc;intm,n;printf(“inputm,n:”);scanf(“%d%d”,&m,&n);c=fac(n)/(fac(m)*fac(n-m));printf(“%.0f\n”,c);}18許多數(shù)學(xué)函數(shù)都是使用遞歸調(diào)用形式定義:函數(shù)遞歸調(diào)用當(dāng)n=1時(shí)當(dāng)n>1時(shí)當(dāng)n=0時(shí)當(dāng)n!=1時(shí)19函數(shù)遞歸調(diào)用是指在調(diào)用一個(gè)函數(shù)時(shí)又直接或間接調(diào)用函數(shù)本身.直接調(diào)用間接調(diào)用遞歸調(diào)用必須引入一個(gè)循環(huán)條件控制遞歸結(jié)束,不然進(jìn)入死循環(huán).20例4有5個(gè)人坐在一起,問(wèn)第5個(gè)人多少歲?答:比第4個(gè)人大2歲;第4個(gè)人說(shuō)他比第三個(gè)人大2歲;第3個(gè)人比第2個(gè)人大2歲,第2個(gè)人比第1個(gè)人大2歲.而第1個(gè)人有10歲.問(wèn)第5個(gè)人多少歲?計(jì)算公式:(n=1)(n>1)回推階段遞推階段21函數(shù)調(diào)用過(guò)程#include<stdio.h>intage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;returnc;}voidmain(){printf(“%d“,age(5));}22例5用遞歸調(diào)用求n!階乘(n>=0)使用循環(huán)做:floatfac(intn){floatf=1;if(n>=0)for(i=2;i<=n;i++)f*=i;elsef=-1;returnf;}#include<stdio.h>floatfac(intn){floatf;if(n>1)f=fac(n-1)*n;elseif(n==0||n==1)f=1;elsef=-1;returnf;}voidmain(){intn;floaty;printf(“inputaintegernumber:”);scanf(“%d”,&n);y=fac(n);if(y<0)printf(“error:%d\n”,n);elseprintf(“%d!=%.0f\n”,n,y);}遞歸公式:(n=0,1)(n>1)23依據(jù)變量作用域不一樣,可分為局部變量和全局變量?jī)煞N。1.變量作用域變量作用域:變量起作用范圍。①局部變量:在函數(shù)內(nèi)部或某個(gè)控制塊內(nèi)部定義變量。局部變量作用域:函數(shù)內(nèi)部。作用:增強(qiáng)了函數(shù)模塊獨(dú)立性。②全局變量:在函數(shù)外面定義變量稱為全局變量。全局變量作用域:從該變量定義位置開(kāi)始,直到源文件結(jié)束。作用:在同一文件中,全部函數(shù)都能夠引用全局變量。增強(qiáng)了各函數(shù)間數(shù)據(jù)聯(lián)絡(luò)。§6.2變量作用域24局部變量和全局變量作用域如圖所表示:25閱讀程序【例6-4】程序,了解變量作用域。請(qǐng)注意區(qū)分局部變量和全局變量作用域。程序:example6_4.c26變量存放類別一、變量動(dòng)態(tài)存放和靜態(tài)存放全局變量和局部變量

變量作用域靜態(tài)存放和動(dòng)態(tài)存放

變量存放類別:生存期內(nèi)存中供用戶使用空間有:①代碼區(qū)②靜態(tài)存放區(qū):編譯時(shí)分配空間③動(dòng)態(tài)存放區(qū):執(zhí)行時(shí)分配空間變量或函數(shù)屬性:數(shù)據(jù)類型存放類型自動(dòng)型auto靜態(tài)型static存放器register外部型extern27二、局部變量存放類別1、自動(dòng)類別存放在動(dòng)態(tài)存放區(qū),用auto說(shuō)明如:intfunc1(inta){

autointb,c=3;……}形參a,變量b,c都是自動(dòng)變量,調(diào)用函數(shù)時(shí),系統(tǒng)給它們分配存儲(chǔ)空間,函數(shù)調(diào)用結(jié)束時(shí),自動(dòng)釋放空間.通常auto能夠省略282、局部靜態(tài)變量占用靜態(tài)存放,用static說(shuō)明說(shuō)明:①局部靜態(tài)變量,屬于靜態(tài)存放類別,在程序執(zhí)行整個(gè)過(guò)程中,都不釋放存放空間.②局部靜態(tài)變量在編譯時(shí)賦值,僅賦值一次.③假如定義局部靜態(tài)變量沒(méi)有賦初值,系統(tǒng)會(huì)自動(dòng)賦初值.④局部靜態(tài)變量,只有在定義它函數(shù)內(nèi)被引用(它存在,但不被其它函數(shù)引用)假如f不定義成static是什么結(jié)果?f=1;j=1;fac(1):f=f*n=1*1=1;輸出1!=1;j=2;fac(2):f=f*n=1*2=2;輸出2!=2;j=3;fac(3):f=f*n=2*3=6;輸出3!=6;j=4;fac(4):f=f*n=6*4=24;輸出4!=24;293、存放器變量存放在存放器中,用register說(shuō)明說(shuō)明:①計(jì)算機(jī)存放器個(gè)數(shù)有限.②存放器變量對(duì)存放器占有是動(dòng)態(tài)③有系統(tǒng)對(duì)存放器變量轉(zhuǎn)化為自動(dòng)變量處理,而有系統(tǒng)會(huì)自動(dòng)設(shè)置存放器變量.30三、全局變量存放類別全局變量都存放在靜態(tài)存放區(qū)。用static關(guān)鍵字申明全局變量,只能在本文件內(nèi)使用。沒(méi)有用static關(guān)鍵字全局變量能夠在別文件中使用extern關(guān)鍵字申明為外部變量,并在該文件中作為全局變量使用。盡可能少使用全局變量/*a.c*/intmax;voidcalcMax(inta[],intn){......}/*main.c*/externintmax;voidmain(){...printf(“%d”,max);...}/*a.c*/staticintmax;voidcalcMax(inta[],intn){......}/*main.c*/externintmax;voidmain(){...printf(“%d”,max);...}錯(cuò)!max未定義錯(cuò)!不能引用max31四、存放類別小結(jié)1、變量定義方法[存放類別]數(shù)據(jù)類型變量名……2、變量劃分按作用域劃分:按生存期局部變量全局變量自動(dòng)變量靜態(tài)變量存放器變量形式參數(shù)變量動(dòng)態(tài)存放靜態(tài)存放自動(dòng)變量形式參數(shù)存放器變量靜態(tài)局部變量全局變量按變量存放位置動(dòng)態(tài)存放區(qū)靜態(tài)存放區(qū)自動(dòng)變量形式參數(shù)靜態(tài)局部變量全局變量存放器存放器變量32自定義函數(shù)有兩種:內(nèi)部函數(shù)和外部函數(shù)。1.內(nèi)部函數(shù)若函數(shù)存放類型為static型,則稱其為內(nèi)部函數(shù)(內(nèi)部函數(shù)又稱為靜態(tài)函數(shù)),它表示在由多個(gè)源文件組成同一個(gè)程序中,該函數(shù)只能在其所在文件中使用,在其它文件中不可使用。內(nèi)部函數(shù)申明形式:

static<返回值類型><函數(shù)名>(<參數(shù)>);比如:

staticintStatistic();2.外部函數(shù)若函數(shù)存放類型定義為extern型,則稱其為外部函數(shù),它表示該函數(shù)能被其它源文件調(diào)用。函數(shù)默認(rèn)存放類型為extern型。§6.3內(nèi)部函數(shù)與外部函數(shù)33

外部函數(shù)應(yīng)用示例。下面程序由3個(gè)文件組成:file1.c、file2.c、example6_6.c。在file1.c、file2.c中分別定義了兩個(gè)外部函數(shù);在example6_6.c中能夠分別調(diào)用這兩個(gè)函數(shù)。1.file1.c/*file1.c外部函數(shù)定義*/externintadd(intm,intn){return(m+n);}2.file2.c/*file2.c外部函數(shù)定義*/externintmod(inta,intb){return(a%b);}343.example6_6.c#include<stdio.h>externintmod(inta,intb); /*外部函數(shù)申明*/externintadd(intm,intn); /*外部函數(shù)申明*/main(){intx,y,result1,result2,result;printf("Pleaseenterxandy:\n");scanf("%d%d",&x,&y);result1=add(x,y); /*調(diào)用file1中外部函數(shù)*/printf("x+y=%d\n",result1);if(result1>0)

result2=mod(x,y); /*調(diào)用file2中外部函數(shù)*/result=result1-result2;printf("mod(x,y)=%d\n",result2);printf("(x+y)-mod(x,y)=%d\n",result);}35關(guān)于程序幾點(diǎn)說(shuō)明(1)在程序file1.c、file2.c中函數(shù)定義能夠不需要extern加以說(shuō)明,默認(rèn)為外部函數(shù)。(2)在example6_6.c中對(duì)外部函數(shù)申明也能夠不用extern加以說(shuō)明,默認(rèn)為外部函數(shù)。(3)由多個(gè)源文件組成一個(gè)程序時(shí),main()函數(shù)只能出現(xiàn)在一個(gè)源文件中。(4)由多個(gè)源文件組成一個(gè)程序時(shí),有3種連接方式:①將各源文件分別編譯成目標(biāo)文件,得到多個(gè)目標(biāo)文件(.obj后綴),然后用連接命令把多個(gè).obj文件連接起來(lái)。

36②建立項(xiàng)目文件(.prj后綴或.dsw后綴),詳細(xì)操作可參閱各種C語(yǔ)言集成開(kāi)發(fā)環(huán)境說(shuō)明。③使用文件包含命令。請(qǐng)參閱本章6.6節(jié)。(5)假如將file1.c或file2.c中extern改成static,則主程序在編譯時(shí)無(wú)法經(jīng)過(guò)。(6)在程序file1.c或file2.c中,也能夠相互調(diào)用其外部函數(shù)。Turboc連接接命令為tlink

比如:tlinkexample6_6.obj+file1.obj+file2.obj

結(jié)果:生成一個(gè)example6_6.exe文件。37

§6.4編譯預(yù)處理作用:在對(duì)源程序編譯之前做一些處理,生成擴(kuò)展C源程序種類宏定義

#define文件包含

#include條件編譯

#if--#else--#endif等格式:“#”開(kāi)頭占單獨(dú)書(shū)寫(xiě)行語(yǔ)句尾不加分號(hào)38如#defineYES1#defineNO0if(x==YES)printf(“correct!\n”);elseif(x==NO)printf(“error!\n”);展開(kāi)后:if(x==1)printf(“correct!\n”);elseif(x==0)printf(“error!\n”);1

宏定義不帶參數(shù)宏定義普通形式#define宏名(標(biāo)識(shí)符)[宏體](字符串)功效:用指定標(biāo)識(shí)符(宏名)代替字符序列(宏體)宏展開(kāi):預(yù)編譯時(shí),用宏體來(lái)替換宏名---不作語(yǔ)法檢驗(yàn)如#defineYES1#defineNO0#definePI3.1415926#defineOUTprintf(“Hello,World”);說(shuō)明:1.定義位置:任意(普通在函數(shù)外面)2.作用域:從定義命令到文件結(jié)束3.#undef可終止宏名作用域格式:#undef宏名例#defineYES1main(){……..}#undefYES#defineYES0max(){……..}YES原作用域YES新作用域5.宏定義可嵌套,不能遞歸例#defineMAXMAX+10()4.引號(hào)中內(nèi)容與宏名相同也不置換例#definePI3.14159printf(“2*PI=%f\n”,PI*2);宏展開(kāi):printf(“2*PI=%f\n”,3.14159*2);6.宏定義中使用必要括號(hào)()例#defineWIDTH80#defineLENGTH

WIDTH+40var=LENGTH*2;宏展開(kāi):var=80+40*2;()()例#defineWIDTH80#defineLENGTH

WIDTH+40var=LENGTH*2;宏展開(kāi):var=WIDTH+40*2var=80+40*27.只是簡(jiǎn)單替換,標(biāo)識(shí)符不占內(nèi)存空間8.普通宏名使用大寫(xiě)字母形式.39帶參數(shù)宏定義普通形式:#define宏名(參數(shù)表)宏體例#defineS(r)PI*r*r相當(dāng)于定義了不帶參宏S,代表字符串“(r)PI*r*r”說(shuō)明:1.宏展開(kāi):不但宏體替換,還要進(jìn)行形參替換2.宏體及各形參外普通應(yīng)加括號(hào)()3.宏名與參數(shù)之間不能有空格例#defineS(a,b)a*b………..area=S(3,2);宏展開(kāi):area=3*2;不能加空格例#definePOWER(x)x*xx=4;y=6;z=POWER(x+y);宏展開(kāi):z=x+y*x+y;普通寫(xiě)成:#definePOWER(x)((x)*(x))宏展開(kāi):z=((x+y)*(x+y));①②③40#defineMAX(x,y)(x)>(y)?(x):(y)…….main(){inta,b,c,d,t;…….t=MAX(a+b,c+d);……}宏展開(kāi):t=(a+b)>(c+d)?(a+b):(c+d);intmax(intx,inty){return(x>y?x:y);}main(){inta,b,c,d,t;…….t=max(a+b,c+d);………}4.用宏定義能夠?qū)崿F(xiàn)和函數(shù)一樣功效<>415.帶參宏與函數(shù)區(qū)分帶參宏函數(shù)處理過(guò)程不分配內(nèi)存簡(jiǎn)單字符置換分配內(nèi)存先求實(shí)參值,再代入形參處理時(shí)間編譯前程序運(yùn)行時(shí)參數(shù)類型無(wú)類型問(wèn)題定義實(shí)參,形參類型程序長(zhǎng)度變長(zhǎng)不變運(yùn)行速度不占運(yùn)行時(shí)間調(diào)用和返回占時(shí)間422文件包含功效:一個(gè)源文件可將另一個(gè)源文件內(nèi)容全部包含進(jìn)來(lái)普通形式:#include“文件名”或#include<文件名>#include“file2.c”file1.cfile2.cfile1.cBABA處理過(guò)程:預(yù)編譯時(shí),用被包含文件內(nèi)容取代該預(yù)處理命令,再對(duì)“包含”后文件作一個(gè)源文件編譯<>直接按標(biāo)準(zhǔn)目錄搜索(存放C庫(kù)函數(shù)頭文件)“”先在當(dāng)前目錄搜索,再搜索標(biāo)準(zhǔn)目錄

可指定路徑43被包含文件內(nèi)容源文件(*.c)頭文件(*.h)宏定義數(shù)據(jù)結(jié)構(gòu)定義函數(shù)說(shuō)明等文件包含可嵌套#include“file2.c”file1.cAfile3.cC#include“file3.c”file2.cBfile1.cAfile3.cfile2.c44例文件包含舉例/*powers.h*/#definesqr(x)((x)*(x))#definecube(x)((x)*(x)*(x))#definequad(x)((x)*(x)*(x)*(x))#include<stdio.h>#include“c:\powers.h"#defineMAX_POWER10voidmain(){intn;printf("numberexp1\texp2\texp3\texp4\n");printf("----\t----\t-----\t------\n");for(n=1;n<=MAX_POWER;n++)printf("%2d\t%3d\t%4d\t%5d\n",n,sqr(n),cube(n),quad(n));}453條件編譯概念:在某個(gè)條件成立情況下才對(duì)某一部分進(jìn)行編譯。三種格式:格式二形式:作用:假如標(biāo)識(shí)符沒(méi)有被#define命令定義過(guò),則對(duì)程序段1進(jìn)行編譯,不然對(duì)程序段2進(jìn)行編譯格式三形式:作用:假如指定常量表示式1值為真(非零),則對(duì)程序段1進(jìn)行編譯,不然假如指定常量表示式2值為真(非零),則對(duì)

溫馨提示

  • 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)論