函數(shù)2市公開(kāi)課一等獎(jiǎng)省名師優(yōu)質(zhì)課賽課一等獎(jiǎng)?wù)n件_第1頁(yè)
函數(shù)2市公開(kāi)課一等獎(jiǎng)省名師優(yōu)質(zhì)課賽課一等獎(jiǎng)?wù)n件_第2頁(yè)
函數(shù)2市公開(kāi)課一等獎(jiǎng)省名師優(yōu)質(zhì)課賽課一等獎(jiǎng)?wù)n件_第3頁(yè)
函數(shù)2市公開(kāi)課一等獎(jiǎng)省名師優(yōu)質(zhì)課賽課一等獎(jiǎng)?wù)n件_第4頁(yè)
函數(shù)2市公開(kāi)課一等獎(jiǎng)省名師優(yōu)質(zhì)課賽課一等獎(jiǎng)?wù)n件_第5頁(yè)
已閱讀5頁(yè),還剩54頁(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、變量存放屬性(也稱存放類別):用來(lái)指定變量生存期,即從為它分配單元,到收回它所占存放單元時(shí)間段。2、變量共有四種存放屬性,分別是:auto (自動(dòng)) static(靜態(tài))register(存放器) extern(外部)對(duì)應(yīng),含有各存放屬性變量分別叫:自動(dòng)變量 靜態(tài)變量存放器變量 外部變量3、變量定義普通格式應(yīng)為:[存放屬性]<類型名><變量名>定義變量時(shí),存放屬性放在類型名前。省略對(duì)變量存放屬性指定時(shí),默認(rèn)為auto。

不一樣變量(主要指全局量和局部量)能夠指定存放屬性也不一樣,下面分別介紹各變量存放屬性使用方法。

4.局部量存放分配局部變量分為兩類:一類是局部自動(dòng)變量,一類是局部靜態(tài)變量,它們分配方式不一樣。(1)局部自動(dòng)變量[1]定義方式:[auto]<類型名><變量名>比如:intf1(intx){autointy=2,s;//y和s是自動(dòng)變量…………}[2]自動(dòng)變量生存期在定義自動(dòng)變量時(shí),系統(tǒng)即在動(dòng)態(tài)區(qū)內(nèi)為其分配存放單元,函數(shù)運(yùn)行結(jié)束后,便釋放它所占存放單元。分配和釋放都由系統(tǒng)自動(dòng)完成。(2)局部靜態(tài)變量[1]定義方式局部靜態(tài)變量(簡(jiǎn)稱靜態(tài)變量)定義方式為:static<類型名><變量名>例如:intf2(inta){staticintr=2,t;//r和t是靜態(tài)變量…………}在定義靜態(tài)變量時(shí),也可認(rèn)為它賦初值。[2]靜態(tài)變量生存期和作用在定義靜態(tài)變量時(shí),系統(tǒng)即在靜態(tài)區(qū)內(nèi)為其分配存放單元,即使函數(shù)運(yùn)行結(jié)束,它占存放單元也不釋放,一直占到程序運(yùn)行結(jié)束。特點(diǎn):在函數(shù)體內(nèi)修改后靜態(tài)變量值便被保留下來(lái),下次再調(diào)用該函數(shù)時(shí)候,上次調(diào)用后結(jié)果值,便作為此次調(diào)用初值。意義:靜態(tài)變量起到全局變量作用。假如設(shè)計(jì)人員欲使用一個(gè)“全局變量”,而又怕受到其它函數(shù)干擾(被誤改了值),不如將其設(shè)計(jì)成靜態(tài)變量。運(yùn)行結(jié)果:

x1=4

r=6

x2=4

r=10#include"stdio.h"voidf2(inta){staticintr=2;r+=a;printf("r=%d\n",r);return;}voidmain(){intx=4;printf("x1=%d\n",x);f2(x);printf("x2=%d\n",x);f2(x);}(3)靜態(tài)變量和自動(dòng)變量初值及作用域?qū)Ρ萚1]初值:定義靜態(tài)變量時(shí)給它賦初值(稱為編譯初值),這個(gè)初值只在第一次函數(shù)調(diào)用(它所在函數(shù))時(shí)起作用,再次調(diào)用時(shí),編譯初值便不起作用了,因?yàn)?,第二次調(diào)用時(shí)初值,由前次調(diào)用后(本變量)結(jié)果值所取代。自動(dòng)變量沒(méi)有編譯初值,只有調(diào)用初值,即每次調(diào)用(它所在函數(shù))時(shí),都為它賦一次定義時(shí)指定初值。[2]作用域:即使靜態(tài)變量生存期與全局變量一樣長(zhǎng),不過(guò)它作用域卻和自動(dòng)變量一樣,其它函數(shù)不能使用本函數(shù)定義靜態(tài)變量。

(4)存放器變量[1]定義方式存放器變量定義方式為:register<類型名><變量名>比如:intf2(inta){registerinti,g=1;//i和g是存放器變量…………}[2]存放器變量作用為了提升程序運(yùn)行速度,C語(yǔ)言允許用戶將(幾個(gè))局部變量,定義為存放器變量,系統(tǒng)不為它們分配內(nèi)存單元,而是直接將其存放在存放器中。[3]存放器變量生存期和作用域

等同于自動(dòng)變量所以,同一個(gè)存放器能夠輪番地分配給不一樣函數(shù)中定義存放器變量。[4]注意:存放器變量只能是局部變量或形參,而不能是全局變量,也不能是靜態(tài)變量。因?yàn)镃PU中存放器個(gè)數(shù)有限,所以同一個(gè)函數(shù)中定義存放器變量個(gè)數(shù)受到限制。若不夠系統(tǒng)將會(huì)按自動(dòng)變量處理。另外,帶有優(yōu)化功效編譯器,能夠自動(dòng)識(shí)別使用頻繁變量,并會(huì)自動(dòng)將其改為存放器變量,所以程序員可依據(jù)情況選擇使用存放器變量。5.全局量存放分配和使用方法

全部全局變量都分配在用戶靜態(tài)存放區(qū)內(nèi),因而都屬于靜態(tài)變量(與靜態(tài)局部變量含義略有不一樣)。

[1]定義:在函數(shù)外面定義變量稱為全局變量。[2]全局變量生存期(變量空間存在時(shí)間):即分配存放單元起,到程序運(yùn)行結(jié)束。[3]全局變量作用域(可被使用范圍):從第一次說(shuō)明處(定義,或申明)到根源程序文件尾。(與局部量重名時(shí),不起作用)#include"stdio.h"intr=2;//全局量voidf2(inta){r+=a;printf("r=%d\n",r);return;}voidmain(){intx=4;printf("r=%d\n",r);printf("x1=%d\n",x);f2(x);printf("x2=%d\n",x);f2(x);}[4]在一個(gè)源程序文件中,使用其它源程序文件中定義(允許使用)全局量在根源程序文件(指使用方)要加上對(duì)該全局變量申明,申明方式為:extern<類型名><全局變量名>比如://源程序文件3:externintc;//不妨稱c為外部全局變量voidf1(){……}intf2(){……}這里“externintc;”是對(duì)源程序文件3中引用其它源程序文件中定義全局量c進(jìn)行申明(不是定義)。extern申明作用:其一,告訴編譯系統(tǒng),根源程序文件中一些函數(shù)要用到這個(gè)全局變量c,或者說(shuō),將全局變量c作用域擴(kuò)展到根源程序文件。其二是告訴編譯系統(tǒng),該全局變量已經(jīng)在其它源程序文件中定義過(guò)了,且已經(jīng)分配了存放單元,編譯時(shí),不要再為它分配存放單元了。注意,對(duì)外部全局變量申明不能放在某個(gè)函數(shù)中,即使根源程序文件中只有一個(gè)函數(shù)用到這個(gè)外部全局變量。對(duì)外部全局變量申明通常放在源程序文件前面。使用外部變量比較通用方法是,把全部外部變量做成一個(gè)頭文件,只要在使用外部變量源文件中包含一下即可。變量和函數(shù)存放屬性小結(jié)

五、函數(shù)嵌套調(diào)用和遞歸調(diào)用

(一)嵌套調(diào)用和遞歸調(diào)用概念1、嵌套調(diào)用:假如函數(shù)A調(diào)用函數(shù)B,函數(shù)B又調(diào)用函數(shù)C,且A,B,C都是不一樣函數(shù),那么這種調(diào)用關(guān)系,被稱為嵌套調(diào)用。2、遞歸調(diào)用:若子函數(shù)A調(diào)用本身,那么稱為這種調(diào)用關(guān)系為遞歸調(diào)用,而子函數(shù)A稱作遞歸函數(shù)。若子函數(shù)A調(diào)用子函數(shù)B,子函數(shù)B又(直接或間接地)調(diào)用子函數(shù)A,那么這種調(diào)用關(guān)系稱為間接遞歸(或聯(lián)立遞歸)。對(duì)應(yīng),前者(非間接遞歸)稱作直接遞歸調(diào)用(或自遞歸)。3、注意:主函數(shù)不能是遞歸函數(shù),因?yàn)橹髡{(diào)函數(shù)不被任何函數(shù)(當(dāng)然也包含主函數(shù)本身)所調(diào)用。主函數(shù)只能獨(dú)立運(yùn)行,或者由系統(tǒng)程序所調(diào)用。調(diào)用關(guān)系能夠是線性、樹(shù)狀、網(wǎng)狀。(二)函數(shù)嵌套調(diào)用對(duì)于函數(shù)嵌套調(diào)用,前面已經(jīng)說(shuō)得很清楚了,本小節(jié)給出兩個(gè)例子,深入說(shuō)明函數(shù)嵌套調(diào)用。例:若一個(gè)m位正整數(shù)n等于它各位數(shù)字m次方之和,則稱n是一個(gè)Armstrong數(shù)。比如,三位數(shù)153=13+53+33四位數(shù)1634=14+64+34+44五位數(shù)92727=95+25+75+25+75編程判斷一個(gè)正整數(shù)n是否是Armstrong數(shù)。函數(shù)調(diào)用關(guān)系圖示解題算法設(shè)計(jì):拆數(shù)n,并求出n位數(shù)m,然后再計(jì)算各位數(shù)字m次方,累加,再與n比較。函數(shù)split(longn,inta[])用來(lái)將n各位數(shù)字由低位到高位拆出來(lái)存放在數(shù)組a[]中,同時(shí)統(tǒng)計(jì)n位數(shù)m作為該函數(shù)返回值。函數(shù)expnm(intn,intm)用來(lái)計(jì)算nm次方,并將計(jì)算結(jié)果作為函數(shù)返回值。函數(shù)體中使用循環(huán)累乘方法計(jì)算nm次方值,而沒(méi)使用數(shù)學(xué)庫(kù)中標(biāo)準(zhǔn)函數(shù)pow(x,y),主要考慮其參數(shù)是實(shí)型(double類型),計(jì)算結(jié)果值可能不夠準(zhǔn)確。函數(shù)sum(intm,intd[])用來(lái)計(jì)算序列累加和。sum()中調(diào)用expnm()求一個(gè)數(shù)m次方值。這里調(diào)用便是嵌套調(diào)用。主函數(shù)讀入數(shù)據(jù)n,調(diào)用split()、sum(),依據(jù)調(diào)用結(jié)果,輸出n是,或不是Armstrong數(shù)信息。程序以下://判斷n是不是Armstrong數(shù)源程序文件Armstrong.c#include<stdio.h>intsplit(longn,inta[])//拆數(shù){intm=0;while(n){a[m++]=n%10;//拆出一位,放入數(shù)組中n/=10;}returnm;}

longexpnm(intn,intm)//計(jì)算求nm次方{inti;longk;k=n;for(i=1;i<m;i++)k*=n;returnk;}longsum(intm,intd[]){longs=0;inti;for(i=0;i<m;i++)s+=expnm(d[i],m);//求各位數(shù)字m次方之和returns;}

voidmain(){longn;intm,d[10];printf("請(qǐng)輸入正整數(shù)數(shù)n:");scanf("%ld",&n);m=split(n,d);//將n拆成m位數(shù)字,放入數(shù)組d[]中//返回n位數(shù)mif(n==sum(m,d))printf("%ld是Armstrong數(shù)\n",n);else printf("%ld不是Armstrong數(shù)\n",n);}(三)函數(shù)遞歸調(diào)用自遞歸函數(shù)又可依據(jù)函數(shù)體內(nèi)遞歸調(diào)用點(diǎn)多少,分成線性遞歸(或曰單調(diào)遞歸,簡(jiǎn)單遞歸)和非線性遞歸。線性遞歸函數(shù)函數(shù)體內(nèi)只有一個(gè)遞歸調(diào)用點(diǎn),或者,即使有幾個(gè)遞歸調(diào)用點(diǎn),但任何情況下,至多執(zhí)行其中一個(gè)。非線性遞歸函數(shù)函數(shù)體內(nèi)最少有兩個(gè)遞歸調(diào)用點(diǎn),而且遞歸每執(zhí)行一次,這些遞歸調(diào)用點(diǎn)可能同時(shí)都要執(zhí)行。線性遞歸執(zhí)行路線是簡(jiǎn)單直線,而非線性遞歸執(zhí)行路線卻是一個(gè)樹(shù)形路線。1.線性遞歸函數(shù)例:計(jì)算n!值遞歸函數(shù)doublefac(intn){if(n!=0)returnn*fac(n-1);//遞歸調(diào)用elsereturn1;//若n=0,則返回值為1}若主調(diào)函數(shù)用語(yǔ)句:s=fac(3);fac(3)遞歸調(diào)用路線和返回路線

注意:遞歸函數(shù)體內(nèi)必須有遞歸終止條件,即邊界條件,而且每遞歸一次向終止條件前深入,不然遞歸將無(wú)休止進(jìn)行下去,造成系統(tǒng)瓦解。使用遞歸技術(shù)最大優(yōu)點(diǎn)是,程序結(jié)構(gòu)簡(jiǎn)單。使用遞歸技術(shù)最大缺點(diǎn)是,增加了系統(tǒng)對(duì)棧區(qū)管理,因而單純遞歸并不能提升程序運(yùn)行速度,相反會(huì)降低速度。

例求兩個(gè)正整數(shù)最大條約數(shù)遞歸函數(shù)。intgcd(inta,intb){if(b)returngcd(b,a%b);elsereturna;}以上兩個(gè)遞歸函數(shù)函數(shù)體內(nèi)都只有一處遞歸調(diào)用,所以都屬于線性遞歸函數(shù)。遞歸是一個(gè)“隱式”循環(huán)。反過(guò)來(lái)說(shuō),全部線性遞歸函數(shù),都能夠簡(jiǎn)單地改為非遞歸函數(shù)(用循環(huán)語(yǔ)句實(shí)現(xiàn))。假如要計(jì)算f(3,17)函數(shù)值,用數(shù)學(xué)推導(dǎo)法,得到:f(3,17)//第一次調(diào)用,a=3,用第二公式遞歸=f(17÷2,3)+2//第二次調(diào)用=f(8,3)+2//化簡(jiǎn),a=8,用第三公式遞歸=f(3÷4,8÷2)+1+2//第三次調(diào)用=f(0,4)+3//化簡(jiǎn),a=0,用第三公式遞歸=f(4÷4,0÷2)+1+3//第三次調(diào)用=f(1,0)+4//化簡(jiǎn)=1+4//第四次調(diào)用,b=0,返回a(=1),并終止遞歸。=5//最終結(jié)果值等于5

例:一個(gè)多調(diào)用點(diǎn)線性遞歸函數(shù)示例。例:一個(gè)多調(diào)用點(diǎn)線性遞歸函數(shù)(實(shí)現(xiàn))。intf(inta,intb){if(!b)returna;//遞歸終止條件為:b等于0elseif(a%2)returnf(b/2,a)+2;//第一個(gè)遞歸調(diào)用點(diǎn)elsereturnf(b/4,a/2)+1;//第二個(gè)遞歸調(diào)用點(diǎn)}

即使該函數(shù)體內(nèi)有兩處遞歸調(diào)用,不過(guò)二者至多執(zhí)行一個(gè),所以它仍屬于線性遞歸函數(shù)。2.非線性遞歸函數(shù)例:一個(gè)非線性遞歸函數(shù)示例(智力測(cè)試題)。voidp(inta,intb){intm;if(a<=b){m=(a+b)/2;printf("%4d",m);p(a,m-1);//遞歸調(diào)用(1)p(m+1,b);//遞歸調(diào)用點(diǎn)(2)}}思索:假如把函數(shù)p(a,b)函數(shù)定義為:voidp1(inta,intb){intm;if(a<=b){m=(a+b)/2;p1(a,m-1);printf("%4d",m);p1(m+1,b);}}或者改為:voidp2(inta,intb){intm;if(a<=b){m=(a+b)/2;p2(a,m-1);p2(m+1,b);printf("%4d",m);}}例:相傳古印度所羅門教徒玩一個(gè)游戲——焚塔(Hanoitower)。游戲意思是將64片大小不等中心有孔圓形金片穿在一根金鋼石柱子上,小片在上,大片在下形成寶塔形狀。假如按下述三條規(guī)則要求,把這些金片從源桿A,一片片地全部搬到目標(biāo)桿B上。當(dāng)完成整個(gè)游戲,放下最終一片金片時(shí),就會(huì)天崩地裂,宇宙毀滅。三條規(guī)則是:(1)只給一根中間過(guò)渡用桿(稱桿C)。(2)每次只能從一桿頂部取下一片,并馬上把它放在另一桿上(不能放在別處,或拿在手里不放)。(3)任何時(shí)候,任一桿上金片只能小壓大不能大壓?。ㄐ≡谏隙笤谙拢T嚽蟪鲆苿?dòng)方法(即每次將哪片從哪個(gè)柱子搬到哪個(gè)柱子上)。將圓片按直徑大小依次編號(hào)1,2,3,……,n。整體移動(dòng)過(guò)程能夠描述為:先(遞歸地)將桿A上n-1片,移到桿C(利用桿B);把A上唯一一片(片n)移到桿B;再把桿C上n-1片(遞歸地)移到桿B(利用桿A)。比如,n=3時(shí),將A桿上編號(hào)為1、2、3三片移到桿B步驟是:move1fromAtoBmove2fromAtoCmove1fromBtoCmove3fromAtoBmove1fromCtoAmove2fromCtoBmove1fromAtoB

主函數(shù)調(diào)用語(yǔ)句為:

n=3;

Hanoi(n,’A’,’B’,’C’);下面給出求解Hanoi塔問(wèn)題遞歸函數(shù)。voidHanoi(intn,chara,charb,charc)//把n個(gè)圓片從桿a,利用桿c,移到桿b。{if(n>0){Hanoi(n-1,a,c,b);//把n-1個(gè)圓片從a,利用b,移到cprintf("move%dfrom%cto%c”,n,a,b);//把a(bǔ)圓片n移到bHanoi(n-1,c,b,a);//把n-1個(gè)圓片從c,利用a,移到b}}當(dāng)然也能夠用“n=4;”或“n=5;”等進(jìn)行試驗(yàn),不過(guò)千萬(wàn)不能用“n=64;”上機(jī)試驗(yàn)。因?yàn)榻?jīng)過(guò)簡(jiǎn)單推導(dǎo),按規(guī)則移動(dòng)64片圓片,要搬動(dòng)264-1次。假如每秒搬一次,約需5800億年。可見(jiàn)到宙宇毀滅也不能做完這個(gè)游戲。即使讓計(jì)算機(jī)“搬”,每秒搬一億次,也要用上58,要做完這個(gè)游戲依然是不可能。為了降低“空”遞歸調(diào)用次數(shù),可將函數(shù)Hanoi改寫(xiě)成下面形式,輸出結(jié)果是一樣。voidHanoi(intn,chara,charb,charc)//把n個(gè)圓片從桿a,利用桿c,移到桿b。{if(n==1)//只有一片,可直接搬過(guò)去printf("move%dfrom%cto%c”,n,a,b);else//多于一片才遞歸{Hanoi(n-1,a,c,b);printf("move%dfrom%cto%c”,n,a,b);Hanoi(n-1,c,b,a);}}例:將計(jì)算斐波那契數(shù)程序段

改為遞歸函數(shù)。遞歸函數(shù),以下。intfib(inti){if((i==1)||(i==2))return1;elsereturnfib(i-1)+fib(i-2);}六、編譯預(yù)處理(一)定義:顧名思義,編譯預(yù)處理就是在對(duì)源程序進(jìn)行編譯時(shí),在正式編譯之前,對(duì)源程序文件中內(nèi)容預(yù)先作處理。依據(jù)需要,用戶能夠在源程序文件中加入一些編譯預(yù)處理命令(簡(jiǎn)稱預(yù)編譯命令)。在編譯階段,編譯程序中預(yù)處理程序先對(duì)用戶預(yù)編譯命令進(jìn)行分析和處理,然后再進(jìn)行編譯。編譯預(yù)處理功效為程序調(diào)試、移植及模塊化程序設(shè)計(jì)提供了便利和幫助。(二)分類:三種預(yù)編譯命令。宏定義文件包含條件編譯全部預(yù)編譯命令都以#開(kāi)頭,后面跟命令名和相關(guān)信息。(三)宏定義宏定義分為帶參數(shù)和不帶參數(shù)兩種,其使用方法各有不一樣。1.不帶參數(shù)宏定義命令格式:#define<宏名><宏代換串>宏名是一個(gè)標(biāo)識(shí)符。宏代換串是一個(gè)字符串。注意,這里所說(shuō)字符串,并非指C語(yǔ)言語(yǔ)法成份(串常量和串變量),而是指源程序中一段內(nèi)容。(三)宏定義宏定義分為帶參數(shù)和不帶參數(shù)兩種,其使用方法各有不一樣。1.不帶參數(shù)宏定義命令格式:#define<宏名><宏代換串>命令含義:用戶在程序中本該寫(xiě)宏代換串地方,用宏名代替(即用宏名代替宏代換串)。預(yù)處理方式:預(yù)處理時(shí),編譯系統(tǒng)將程序中全部客觀存在名(標(biāo)識(shí)符)都置換成命令中指定宏代換串(稱為宏置換,或宏展開(kāi)),從而還原用戶原來(lái)用意。

不帶參數(shù)宏定義命令,主要有三種使用方法。(1)用于定義符號(hào)常量。比如:#definePI3.14159用戶用宏名PI代表3.14159,于是預(yù)處理時(shí),將全部PI都置換成3.14159。(2)用宏名代替一個(gè)較長(zhǎng)字符串。比如:

#definenewptr(ptr)malloc(sizeof(snode))目標(biāo)是為了簡(jiǎn)化書(shū)寫(xiě)。(3)用宏名代替某項(xiàng)操作(不講)。

關(guān)于不帶參數(shù)宏定義使用方法,有下面幾點(diǎn)說(shuō)明:(1)習(xí)慣上宏名用大寫(xiě)字母表示,以區(qū)分于變量名,同時(shí)預(yù)防置換錯(cuò)誤。(2)宏定義末尾不加分號(hào),若加了分號(hào),則分號(hào)被看作“字符串”一部分,置換時(shí)將連同分號(hào)一起置換。比如:#definePI3.14159;那么:s=PI*r*r;宏展開(kāi)后,該語(yǔ)句被置換成:s=3.14159;*r*r;//注意,表示式中間出現(xiàn)一個(gè)分號(hào)顯然與原意不符。(3)宏定義標(biāo)識(shí)符也有作用域,其作用域從定義點(diǎn)到根源文件結(jié)束。因?yàn)橛煤甓x符號(hào)常量通常作為全局量,所以宏定義命令通常出現(xiàn)在源程序文件開(kāi)頭處(只是一個(gè)習(xí)慣使用方法)。(4)const不能完全代替宏定義,因?yàn)楹甓x除了用于定義符號(hào)常量外(即不帶參數(shù)宏),也能夠用來(lái)定義一個(gè)含有操作功效字符串(實(shí)際上是語(yǔ)句,或表示式)。(5)后面宏定義能夠引用前面已定義宏名,預(yù)處理時(shí)將層層置換。比如:#defineR12.03#definePI3.14159#defineSPI*R*R定義宏S時(shí),引用了宏R和宏P(guān)I,宏展開(kāi)時(shí),程序中標(biāo)識(shí)符S將被置換成:3.14159*12.03*12.03即使簡(jiǎn)化了書(shū)寫(xiě),不過(guò)這么置換會(huì)降低程序清楚度(易讀性)。(6)宏展開(kāi)時(shí),只置換宏名(標(biāo)識(shí)符),不置換含有宏名其它字符串。不過(guò),因?yàn)楹暾归_(kāi)是在編譯前進(jìn)行,所以置換時(shí),往往因(一些系統(tǒng))不作正當(dāng)性檢驗(yàn)而出現(xiàn)置換錯(cuò)誤。以TC2.0為例,若定義宏:#definef101101不置換關(guān)鍵字for中f,不置換字符常量'f',也不置換標(biāo)識(shí)符vfp中f,但卻置換標(biāo)識(shí)符flag中f。當(dāng)然,這種置換是錯(cuò)誤。從這個(gè)意義上說(shuō),提倡使用const定義常量方式。

(四)文件包含處理1、含義:文件包含預(yù)處理,是按照用戶命令,將一個(gè)源程序文件全部?jī)?nèi)容,插在另一個(gè)源程序文件內(nèi)容中,合在一起進(jìn)行編譯。2、文件包含命令普通格式為:#include"文件名"或#include<文件名>注意,命令后面不加分號(hào)。(兩種寫(xiě)法有區(qū)分)文件名指明要包含文件對(duì)象(即被包含文件名稱)。當(dāng)然被包含文件必須是已經(jīng)存在C源程序文件,或系統(tǒng)庫(kù)文件。兩種寫(xiě)法區(qū)分比如:#include"stdio.h"或#include<stdio.h>前者(用雙引號(hào)將被包含文件括起來(lái))指示編譯系統(tǒng)先在用戶當(dāng)前目錄中尋找要包含文件,若找不到,再按系統(tǒng)設(shè)定標(biāo)準(zhǔn)目錄路徑尋找該文件。后者(用尖括號(hào)將被包含文件括起來(lái))指示編譯系統(tǒng)按系統(tǒng)設(shè)定標(biāo)準(zhǔn)目錄路徑尋找要包含文件。

3、文件包含命令能夠出現(xiàn)在源程序文件任意地方。比如,在兩個(gè)函數(shù)之間,編譯時(shí),會(huì)將被包含文件內(nèi)容“夾在”本文件內(nèi)容“中間”進(jìn)行編譯。不過(guò),習(xí)慣上,文件包含命令都放在源程序文件開(kāi)頭處,也就是希望編譯系統(tǒng)將被包含文件內(nèi)容,加在根源程序文件內(nèi)容之前,再進(jìn)行編譯,所以被包含文件又稱為“頭部文件”(簡(jiǎn)稱頭文件),而且文件后綴通常為“.h”。文件包含命令作用示意圖4、文件包含命令使用方法及注意事項(xiàng):(1)一條#include命令只能指定一個(gè)被包含文件,若要包含多個(gè)文件,則應(yīng)分別使用#include命令。比如:一個(gè)源程序文件中要使用各種標(biāo)準(zhǔn)庫(kù)函數(shù),這些庫(kù)函數(shù)文件都要“包含進(jìn)來(lái)”,即程序前部要加上:#include<stdio.h>//標(biāo)準(zhǔn)I/O函數(shù),必須加此命令#include<math.h>//標(biāo)準(zhǔn)數(shù)學(xué)函數(shù),必須加此命令#in

溫馨提示

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