




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第4章 函數(shù)與預(yù)處理4.1 概述概述4.2 定義函數(shù)的一般形式定義函數(shù)的一般形式4.3 函數(shù)參數(shù)和函數(shù)的值函數(shù)參數(shù)和函數(shù)的值4.4 函數(shù)的調(diào)用函數(shù)的調(diào)用*4.5 內(nèi)置函數(shù)內(nèi)置函數(shù)*4.6 函數(shù)的重載函數(shù)的重載*4.7 函數(shù)模板函數(shù)模板*4.8 有默認(rèn)參數(shù)的函數(shù)有默認(rèn)參數(shù)的函數(shù)4.9 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用4.10 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用4.11 局部變量和全局變量局部變量和全局變量4.12 變量的存儲(chǔ)類(lèi)別變量的存儲(chǔ)類(lèi)別4.13 變量屬性小結(jié)變量屬性小結(jié)4.14 關(guān)于變量的聲明和定義關(guān)于變量的聲明和定義4.15 內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù)和外部函數(shù)4.16 預(yù)處理命令預(yù)處理命令4.1
2、 概述概述一個(gè)較大的程序不可能完全由一個(gè)人從頭至尾地一個(gè)較大的程序不可能完全由一個(gè)人從頭至尾地完成,更不可能把所有的內(nèi)容都放在一個(gè)主函數(shù)完成,更不可能把所有的內(nèi)容都放在一個(gè)主函數(shù)中。為了中。為了便于規(guī)劃、組織、編程和調(diào)試便于規(guī)劃、組織、編程和調(diào)試,一般的,一般的做法是把一個(gè)大的程序劃分為若干個(gè)程序模塊做法是把一個(gè)大的程序劃分為若干個(gè)程序模塊(即即程序文件程序文件),每一個(gè)模塊實(shí)現(xiàn)一部分功能。不同的,每一個(gè)模塊實(shí)現(xiàn)一部分功能。不同的程序模塊可以由不同的人來(lái)完成。程序模塊可以由不同的人來(lái)完成。代碼的重用性代碼的重用性,多處使用同一段代碼時(shí),可抽取,多處使用同一段代碼時(shí),可抽取出來(lái)作為單獨(dú)的一個(gè)函數(shù)
3、處理。出來(lái)作為單獨(dú)的一個(gè)函數(shù)處理。無(wú)論把一個(gè)程序劃分為多少個(gè)程序模塊,無(wú)論把一個(gè)程序劃分為多少個(gè)程序模塊,只能有只能有一個(gè)一個(gè)main函數(shù)。程序總是從函數(shù)。程序總是從main函數(shù)開(kāi)始執(zhí)行。函數(shù)開(kāi)始執(zhí)行。在程序運(yùn)行過(guò)程中,由主函數(shù)調(diào)用其他函數(shù),其在程序運(yùn)行過(guò)程中,由主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用。他函數(shù)也可以互相調(diào)用。main( )func1( )func2( )func3( )func4( )func5( )在實(shí)際應(yīng)用的程序中,主函數(shù)寫(xiě)得很簡(jiǎn)單,在實(shí)際應(yīng)用的程序中,主函數(shù)寫(xiě)得很簡(jiǎn)單,它的作用就是調(diào)用各個(gè)函數(shù),程序各部分的它的作用就是調(diào)用各個(gè)函數(shù),程序各部分的功能全部都是由各函數(shù)實(shí)現(xiàn)
4、的。主函數(shù)相當(dāng)功能全部都是由各函數(shù)實(shí)現(xiàn)的。主函數(shù)相當(dāng)于總調(diào)度,調(diào)動(dòng)各函數(shù)依次實(shí)現(xiàn)各項(xiàng)功能。于總調(diào)度,調(diào)動(dòng)各函數(shù)依次實(shí)現(xiàn)各項(xiàng)功能。開(kāi)發(fā)商和軟件開(kāi)發(fā)人員將一些常用的功能模開(kāi)發(fā)商和軟件開(kāi)發(fā)人員將一些常用的功能模塊編寫(xiě)成函數(shù),放在函數(shù)庫(kù)中供公共選用。塊編寫(xiě)成函數(shù),放在函數(shù)庫(kù)中供公共選用。程序開(kāi)發(fā)人員要善于利用庫(kù)函數(shù),以減少重程序開(kāi)發(fā)人員要善于利用庫(kù)函數(shù),以減少重復(fù)編寫(xiě)程序段的工作量。復(fù)編寫(xiě)程序段的工作量。從用戶(hù)使用的角度看,函數(shù)有兩種:從用戶(hù)使用的角度看,函數(shù)有兩種:(1) 系統(tǒng)函數(shù),即庫(kù)函數(shù)。這是由編譯系統(tǒng)提供的,系統(tǒng)函數(shù),即庫(kù)函數(shù)。這是由編譯系統(tǒng)提供的,用戶(hù)不必自己定義這些函數(shù),可以直接使用它們。
5、用戶(hù)不必自己定義這些函數(shù),可以直接使用它們。(2) 用戶(hù)自己定義的函數(shù)。用以解決用戶(hù)的專(zhuān)門(mén)需要。用戶(hù)自己定義的函數(shù)。用以解決用戶(hù)的專(zhuān)門(mén)需要。常用庫(kù)函數(shù):常用庫(kù)函數(shù):中中double pow(double a, int b) /abdouble exp(double x) /ex double sqrt(double x) /x開(kāi)根號(hào)開(kāi)根號(hào)double fabs(double x) / |x|從函數(shù)的形式看,函數(shù)分兩類(lèi):從函數(shù)的形式看,函數(shù)分兩類(lèi):(1) 無(wú)參函數(shù)無(wú)參函數(shù)。調(diào)用函數(shù)時(shí)不必給出參數(shù)。調(diào)用函數(shù)時(shí)不必給出參數(shù)。(2) 有參函數(shù)有參函數(shù)。在調(diào)用函數(shù)時(shí),要給出參數(shù)。在。在調(diào)用函數(shù)時(shí),要給出
6、參數(shù)。在主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞。主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞。#include using namespace std;void printstar(void) cout*endl; void print_message(void) cout Welcome to C+!endl; int main(void) printstar( ); print_message( ); printstar( ); return 0;無(wú)參數(shù)、無(wú)返無(wú)參數(shù)、無(wú)返回值的函數(shù)?;刂档暮瘮?shù)。#include using namespace std;int max(int x, int y)int z
7、;z=xy?x:y; return(z);int main(void) int a,b,m; cinab; m=max(a,b); coutmy?x:y); 如:如: void printstar(void) cout*endl; 在定義函數(shù)時(shí)函數(shù)名后面括號(hào)中的變量名稱(chēng)為在定義函數(shù)時(shí)函數(shù)名后面括號(hào)中的變量名稱(chēng)為形式參數(shù)(簡(jiǎn)稱(chēng)形參)形式參數(shù)(簡(jiǎn)稱(chēng)形參)在主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面括在主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)稱(chēng)為實(shí)際參數(shù)(簡(jiǎn)稱(chēng)實(shí)參)。號(hào)中的參數(shù)稱(chēng)為實(shí)際參數(shù)(簡(jiǎn)稱(chēng)實(shí)參)。4.3 函數(shù)參數(shù)和函數(shù)的值函數(shù)參數(shù)和函數(shù)的值 4.3.1 形式參數(shù)和實(shí)際參數(shù)形式參數(shù)和實(shí)際參數(shù)有
8、關(guān)形參與實(shí)參的說(shuō)明:有關(guān)形參與實(shí)參的說(shuō)明:(1) 在定義函數(shù)時(shí)指定的形參,在未出現(xiàn)函數(shù)調(diào)在定義函數(shù)時(shí)指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不占內(nèi)存中的存儲(chǔ)單元,因此稱(chēng)它用時(shí),它們并不占內(nèi)存中的存儲(chǔ)單元,因此稱(chēng)它們是形式參數(shù)或虛擬參數(shù),表示它們并不是實(shí)際們是形式參數(shù)或虛擬參數(shù),表示它們并不是實(shí)際存在的數(shù)據(jù),只有在發(fā)生函數(shù)調(diào)用時(shí),形參才被存在的數(shù)據(jù),只有在發(fā)生函數(shù)調(diào)用時(shí),形參才被分配內(nèi)存單元,以便接收從實(shí)參傳來(lái)的數(shù)據(jù)。在分配內(nèi)存單元,以便接收從實(shí)參傳來(lái)的數(shù)據(jù)。在調(diào)用結(jié)束后,形參所占的內(nèi)存單元也被釋放。調(diào)用結(jié)束后,形參所占的內(nèi)存單元也被釋放。(2) 實(shí)參可以是常量、變量或表達(dá)式,如實(shí)參可以是常量、變
9、量或表達(dá)式,如max(3, a+b);但要求但要求a和和b有確定的值。以便在調(diào)用函數(shù)有確定的值。以便在調(diào)用函數(shù)時(shí)將實(shí)參的值賦給形參。時(shí)將實(shí)參的值賦給形參。(3) 在定義函數(shù)時(shí),必須在函數(shù)首部指定形參的在定義函數(shù)時(shí),必須在函數(shù)首部指定形參的類(lèi)型。類(lèi)型。(4) 實(shí)參與形參的類(lèi)型應(yīng)相同,若不同時(shí),以實(shí)參與形參的類(lèi)型應(yīng)相同,若不同時(shí),以形參為準(zhǔn)。形參為準(zhǔn)。例如實(shí)參例如實(shí)參a的值為的值為3.5,而形參,而形參x為整為整型,則將型,則將3.5轉(zhuǎn)換成整數(shù)轉(zhuǎn)換成整數(shù)3,然后送到形參,然后送到形參x。 (5) 實(shí)參變量對(duì)形參變量的數(shù)據(jù)傳遞是實(shí)參變量對(duì)形參變量的數(shù)據(jù)傳遞是“值傳值傳遞遞”,即單向傳遞,只由實(shí)參傳給
10、形參,而不,即單向傳遞,只由實(shí)參傳給形參,而不能由形參傳回來(lái)給實(shí)參。請(qǐng)注意:能由形參傳回來(lái)給實(shí)參。請(qǐng)注意: 實(shí)參單元與實(shí)參單元與形參單元是不同的單元。形參單元是不同的單元。圖圖4.3表示將實(shí)參和表示將實(shí)參和的值的值2和和3傳遞給對(duì)應(yīng)的形參和。傳遞給對(duì)應(yīng)的形參和。 圖圖4.3 圖圖4.4調(diào)用結(jié)束后,形參單元被釋放,實(shí)參單元仍保留調(diào)用結(jié)束后,形參單元被釋放,實(shí)參單元仍保留并維持原值。因此,在執(zhí)行一個(gè)被調(diào)用函數(shù)時(shí),并維持原值。因此,在執(zhí)行一個(gè)被調(diào)用函數(shù)時(shí),形參的值如果發(fā)生改變,并不會(huì)改變主調(diào)函數(shù)中形參的值如果發(fā)生改變,并不會(huì)改變主調(diào)函數(shù)中實(shí)參的值。例如,若在執(zhí)行實(shí)參的值。例如,若在執(zhí)行max函數(shù)過(guò)程
11、中形參函數(shù)過(guò)程中形參和的值變?yōu)楹偷闹底優(yōu)?0和和15,調(diào)用結(jié)束后,實(shí)參和,調(diào)用結(jié)束后,實(shí)參和仍為仍為2和和3,見(jiàn)圖,見(jiàn)圖4.4。由由return 語(yǔ)句給出:語(yǔ)句給出:return(返回值返回值) 或或 return 返回值返回值無(wú)返回值函數(shù)無(wú)返回值函數(shù)(void型型),不必寫(xiě),不必寫(xiě)return 語(yǔ)句語(yǔ)句函數(shù)類(lèi)型決定返回值的類(lèi)型。函數(shù)類(lèi)型決定返回值的類(lèi)型。4.3.2 函數(shù)的返回值函數(shù)的返回值函數(shù)名(實(shí)參表列)函數(shù)名(實(shí)參表列)如果是調(diào)用無(wú)參函數(shù),則如果是調(diào)用無(wú)參函數(shù),則“實(shí)參表列實(shí)參表列”可以沒(méi)可以沒(méi)有,但有,但括號(hào)不能省略括號(hào)不能省略。如果實(shí)參表列包含多個(gè)實(shí)參,則各參數(shù)間用逗如果實(shí)參表列包含
12、多個(gè)實(shí)參,則各參數(shù)間用逗號(hào)隔開(kāi)。號(hào)隔開(kāi)。實(shí)參與形參的個(gè)數(shù)應(yīng)相等。按順序?qū)?yīng),一對(duì)實(shí)參與形參的個(gè)數(shù)應(yīng)相等。按順序?qū)?yīng),一對(duì)一地傳遞數(shù)據(jù)。一地傳遞數(shù)據(jù)。4.4 函數(shù)的調(diào)用函數(shù)的調(diào)用 4.4.1 函數(shù)調(diào)用的一般形式函數(shù)調(diào)用的一般形式. 函數(shù)語(yǔ)句函數(shù)語(yǔ)句無(wú)返回值的函數(shù)調(diào)用。無(wú)返回值的函數(shù)調(diào)用。 printstar( );2. 函數(shù)表達(dá)式函數(shù)表達(dá)式函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算。函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算。c=2*max(a , b);4.4.2 函數(shù)調(diào)用的方式函數(shù)調(diào)用的方式3. 函數(shù)參數(shù)函數(shù)參數(shù)函數(shù)調(diào)用作為一個(gè)函數(shù)的實(shí)參。函數(shù)調(diào)用作為一個(gè)函數(shù)的實(shí)參。m=max(a , max(b
13、, c); 4.直接輸出函數(shù)值。直接輸出函數(shù)值。coutmax(a , b);(1) 如果使用庫(kù)函數(shù),一般還應(yīng)該在本文件開(kāi)頭用如果使用庫(kù)函數(shù),一般還應(yīng)該在本文件開(kāi)頭用include命令將有關(guān)頭文件命令將有關(guān)頭文件“包含包含”到本文件中來(lái)。到本文件中來(lái)。(2) 如果使用用戶(hù)自己定義的函數(shù),而該函數(shù)定義如果使用用戶(hù)自己定義的函數(shù),而該函數(shù)定義的位置在主調(diào)函數(shù)之后,則必須在調(diào)用此函數(shù)之前的位置在主調(diào)函數(shù)之后,則必須在調(diào)用此函數(shù)之前對(duì)被調(diào)用的函數(shù)作聲明。對(duì)被調(diào)用的函數(shù)作聲明。4.4.3 對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型#include using namespace std;i
14、nt main(void) int a,b,m; cinab; int max(int x,int y); /或用或用int max(int , int);聲明聲明 m=max(a,b); coutmy?x:y; return(z);函數(shù)原型的聲明有兩種形式:函數(shù)原型的聲明有兩種形式:(1) int max(int x, int y); (2) int max(int , int);注意:區(qū)分函數(shù)的定義和聲明不是同一件事情。注意:區(qū)分函數(shù)的定義和聲明不是同一件事情。定義包括指定函數(shù)名、函數(shù)類(lèi)型、形參及其類(lèi)型、定義包括指定函數(shù)名、函數(shù)類(lèi)型、形參及其類(lèi)型、函數(shù)體等,它是一個(gè)完整的、獨(dú)立的函數(shù)單位。
15、函數(shù)體等,它是一個(gè)完整的、獨(dú)立的函數(shù)單位。聲明的作用則是把函數(shù)的名字、函數(shù)類(lèi)型以及形聲明的作用則是把函數(shù)的名字、函數(shù)類(lèi)型以及形參的個(gè)數(shù)、類(lèi)型和順序參的個(gè)數(shù)、類(lèi)型和順序(注意,不包括函數(shù)體注意,不包括函數(shù)體)通通知編譯系統(tǒng),以便在對(duì)包含函數(shù)調(diào)用的語(yǔ)句進(jìn)行知編譯系統(tǒng),以便在對(duì)包含函數(shù)調(diào)用的語(yǔ)句進(jìn)行編譯時(shí),據(jù)此對(duì)其進(jìn)行對(duì)照檢查(編譯時(shí),據(jù)此對(duì)其進(jìn)行對(duì)照檢查(例如函數(shù)名是例如函數(shù)名是否正確,實(shí)參與形參的類(lèi)型和個(gè)數(shù)是否一致否正確,實(shí)參與形參的類(lèi)型和個(gè)數(shù)是否一致)。)。int main(void) int a,b,m; cinab; int max(int x, int y)int z;z=xy?x:y;
16、 return(z); m=max(a,b); coutmendl; return 0;注意:主調(diào)函數(shù)可以包注意:主調(diào)函數(shù)可以包含函數(shù)聲明語(yǔ)句,但不含函數(shù)聲明語(yǔ)句,但不能包含函數(shù)的定義。能包含函數(shù)的定義。例、編程求例、編程求Pi的值:的值:Pi=16arctan(1/5)-4arctan(1/239)其中其中arctan(x)=x-x3/3+ x5/5- x7/7+,一直到一直到某項(xiàng)的絕對(duì)值不大于某項(xiàng)的絕對(duì)值不大于10-15為止。為止。double arctan(double x)double up,down,single,sum=0;up=x;down=1;single=x;while(fa
17、bs(single)!=0)sum += single;up = - up*x*x;down = down+2;single = up/down;return sum;例、編寫(xiě)一個(gè)函數(shù),判斷一個(gè)數(shù)是否是素?cái)?shù),若例、編寫(xiě)一個(gè)函數(shù),判斷一個(gè)數(shù)是否是素?cái)?shù),若是素?cái)?shù)則返回是素?cái)?shù)則返回true,若不是素?cái)?shù),則返回若不是素?cái)?shù),則返回false。例、驗(yàn)證歌德巴赫猜想:一個(gè)不小于例、驗(yàn)證歌德巴赫猜想:一個(gè)不小于6的偶數(shù),可的偶數(shù),可以表示成兩個(gè)素?cái)?shù)之和。以表示成兩個(gè)素?cái)?shù)之和。尋找并輸出尋找并輸出11999之間的數(shù)之間的數(shù)m,它滿(mǎn)足它滿(mǎn)足m、m2、m3均均為回文數(shù)。為回文數(shù)?;匚模焊魑粩?shù)字左右對(duì)稱(chēng)的整數(shù)。回文:
18、各位數(shù)字左右對(duì)稱(chēng)的整數(shù)。例如:例如:11滿(mǎn)足上述條件:滿(mǎn)足上述條件: 112=121,113=1331分析:分析:10取余的方法,從最低位開(kāi)始,依此取出取余的方法,從最低位開(kāi)始,依此取出該數(shù)的各位數(shù)字,按反序重新構(gòu)成新的數(shù),比較該數(shù)的各位數(shù)字,按反序重新構(gòu)成新的數(shù),比較與原數(shù)是否相等。與原數(shù)是否相等。需要需要?聲明時(shí)使用關(guān)鍵字聲明時(shí)使用關(guān)鍵字 inline,如:如:inline int max(int a , int b , int c);編譯時(shí)調(diào)用處用函數(shù)體進(jìn)行替換,節(jié)省了參數(shù)編譯時(shí)調(diào)用處用函數(shù)體進(jìn)行替換,節(jié)省了參數(shù)傳遞和流程轉(zhuǎn)移的開(kāi)銷(xiāo)。傳遞和流程轉(zhuǎn)移的開(kāi)銷(xiāo)。注意:注意:內(nèi)置函數(shù)中不能包括循
19、環(huán)語(yǔ)句和內(nèi)置函數(shù)中不能包括循環(huán)語(yǔ)句和switch語(yǔ)句。語(yǔ)句。內(nèi)置函數(shù)聲明必須出現(xiàn)在內(nèi)置函數(shù)第一次調(diào)用內(nèi)置函數(shù)聲明必須出現(xiàn)在內(nèi)置函數(shù)第一次調(diào)用前。前。*4.5 內(nèi)置函數(shù)內(nèi)置函數(shù)例例4.4 函數(shù)指定為內(nèi)置函數(shù)。函數(shù)指定為內(nèi)置函數(shù)。#include using namespace std;int main(void) int a , b , m; cinab; inline int max(int x , int y); m=max(a , b); coutmy ? x : y; return(z);由于在定義函數(shù)時(shí)指定它為內(nèi)置函數(shù),因此編由于在定義函數(shù)時(shí)指定它為內(nèi)置函數(shù),因此編譯系統(tǒng)在遇到函數(shù)調(diào)用
20、譯系統(tǒng)在遇到函數(shù)調(diào)用“max(a,b)”時(shí),就用時(shí),就用max函數(shù)體的代碼代替函數(shù)體的代碼代替“max(a,b)”,同時(shí)將實(shí)同時(shí)將實(shí)參代替形參。這樣,程序第參代替形參。這樣,程序第8行行 “m=max(a,b);”就被置換成就被置換成m=ab ? a : b;使用內(nèi)置函數(shù)可以節(jié)省運(yùn)行時(shí)間,但卻增加了使用內(nèi)置函數(shù)可以節(jié)省運(yùn)行時(shí)間,但卻增加了目標(biāo)程序的長(zhǎng)度。因此一般只將規(guī)模很小目標(biāo)程序的長(zhǎng)度。因此一般只將規(guī)模很小(一一般為般為5個(gè)語(yǔ)句以下個(gè)語(yǔ)句以下)而使用頻繁的函數(shù)而使用頻繁的函數(shù)(如定時(shí)采如定時(shí)采集數(shù)據(jù)的函數(shù)集數(shù)據(jù)的函數(shù))聲明為內(nèi)置函數(shù)。聲明為內(nèi)置函數(shù)。函數(shù)在聲明時(shí)可以預(yù)先給出默認(rèn)的形參值,調(diào)用
21、函數(shù)在聲明時(shí)可以預(yù)先給出默認(rèn)的形參值,調(diào)用時(shí),如給出實(shí)參,則采用實(shí)參。否則采用預(yù)先給時(shí),如給出實(shí)參,則采用實(shí)參。否則采用預(yù)先給出的默認(rèn)形參值。出的默認(rèn)形參值。*4.8 有默認(rèn)參數(shù)的函數(shù)有默認(rèn)參數(shù)的函數(shù)int add(int x=5, int y=8) return x+y;int main( )cout add(4 , 5); cout add(4); cout add( ); return 0;缺省參數(shù)值必須從右至左順序定義。例如:缺省參數(shù)值必須從右至左順序定義。例如:int add(int x, int y=8 , int z=7) /正確正確int add(int x, int y=8
22、, int z) /錯(cuò)錯(cuò)int add(int x=4, int y , int z=7) /錯(cuò)錯(cuò)注意:缺省形參值必須在函數(shù)調(diào)用之前給出。int add(int x=4 , int y=7) return x+y;int main( ) coutadd( ); return 0;int add(int x=4 , int y=7); int main( ) coutadd( ); return 0;int add(int x , int y) return x+y;int add(int x=4,int y=7); int main( ) int add(int x=6,int y=7); c
23、outadd(); /輸出輸出13 return 0;void fac(void) coutadd(); /輸出輸出11相同作用域內(nèi),缺省形相同作用域內(nèi),缺省形參值的說(shuō)明應(yīng)保持唯一;參值的說(shuō)明應(yīng)保持唯一;但不同的作用域允許說(shuō)但不同的作用域允許說(shuō)明不同的缺省形參值。明不同的缺省形參值。例例4.8 求求2個(gè)或個(gè)或3個(gè)正整數(shù)中的最大數(shù),用帶有默認(rèn)參個(gè)正整數(shù)中的最大數(shù),用帶有默認(rèn)參數(shù)的函數(shù)實(shí)現(xiàn)。數(shù)的函數(shù)實(shí)現(xiàn)。#include using namespace std;int main( )int max(int a, int b, int c=0); int a,b,c; cinabc; coutmax
24、(a,b,c)=max(a,b,c)endl; /輸出輸出3個(gè)數(shù)中的最大者個(gè)數(shù)中的最大者 coutmax(a,b)=max(a,b)a) a=b; if(ca) a=c; return a;思考:若求思考:若求2個(gè)或個(gè)或3個(gè)個(gè)任意整數(shù)的最大值,任意整數(shù)的最大值,是否還能用默認(rèn)參數(shù)是否還能用默認(rèn)參數(shù)的函數(shù)實(shí)現(xiàn)?的函數(shù)實(shí)現(xiàn)?需要?需要?int max1(int a ,int b , int c); /求求3個(gè)整數(shù)中的最大者個(gè)整數(shù)中的最大者double max2(double a ,double b ,double c); /求求3個(gè)雙精度數(shù)中最大者個(gè)雙精度數(shù)中最大者long max3(long a
25、 ,long b ,long c); /求求3個(gè)長(zhǎng)整數(shù)中的最大者個(gè)長(zhǎng)整數(shù)中的最大者int max4(int a , int b); /求求2個(gè)整數(shù)中的最個(gè)整數(shù)中的最大者大者*4.6 函數(shù)的重載函數(shù)的重載C+允許功能相近的函數(shù)在相同的作用域內(nèi)以相允許功能相近的函數(shù)在相同的作用域內(nèi)以相同函數(shù)名聲明,從而形成重載。方便使用,方便同函數(shù)名聲明,從而形成重載。方便使用,方便記憶。記憶。例:例: int max(int x,int y)float max(float x,float y)形參類(lèi)型不同形參類(lèi)型不同int max(int x,int y)int max(int x,int y,int z)形參
26、個(gè)數(shù)不同形參個(gè)數(shù)不同重載函數(shù)的形參必須不同:重載函數(shù)的形參必須不同:個(gè)數(shù)不同個(gè)數(shù)不同或或類(lèi)型不同類(lèi)型不同。編譯系統(tǒng)將根據(jù)實(shí)參和形參的類(lèi)型及個(gè)數(shù)的最佳編譯系統(tǒng)將根據(jù)實(shí)參和形參的類(lèi)型及個(gè)數(shù)的最佳匹配來(lái)選擇調(diào)用哪一個(gè)函數(shù)。匹配來(lái)選擇調(diào)用哪一個(gè)函數(shù)。int add(int x, int y);int add(int a, int b);int add(int x, int y); float add(int x, int y);編譯系統(tǒng)不以編譯系統(tǒng)不以形參名形參名來(lái)區(qū)分,如:來(lái)區(qū)分,如:add(3,4)有歧異。有歧異。編譯系統(tǒng)不以編譯系統(tǒng)不以返回值返回值的類(lèi)型來(lái)區(qū)分,如:的類(lèi)型來(lái)區(qū)分,如:add(3,
27、4)有歧異。有歧異。注意:不要將不同功能的函數(shù)聲明為重載函數(shù),注意:不要將不同功能的函數(shù)聲明為重載函數(shù),以免出現(xiàn)調(diào)用結(jié)果的誤解、混淆。例:以免出現(xiàn)調(diào)用結(jié)果的誤解、混淆。例:int add(int a,int b)return a+b;float add(float a,float b)return a-b;例例4.5 求求3個(gè)數(shù)中最大的數(shù)(分別考慮整數(shù)、雙個(gè)數(shù)中最大的數(shù)(分別考慮整數(shù)、雙精度數(shù)、長(zhǎng)整數(shù)的情況)。精度數(shù)、長(zhǎng)整數(shù)的情況)。 #include using namespace std;int main( )int max(int a,int b,int c); /函數(shù)聲明函數(shù)聲明dou
28、ble max(double a,double b,double c); /函數(shù)聲明函數(shù)聲明long max(long a,long b,long c); /函數(shù)聲明函數(shù)聲明 int i1,i2,i3,i; cini1i2i3; /輸入輸入3個(gè)整數(shù)個(gè)整數(shù) i=max(i1,i2,i3); /求求3個(gè)整數(shù)中的最大者個(gè)整數(shù)中的最大者 couti_max=id1d2d3; /輸入輸入3個(gè)雙精度數(shù)個(gè)雙精度數(shù) d=max(d1,d2,d3); /求求3個(gè)雙精度數(shù)中的最大者個(gè)雙精度數(shù)中的最大者 coutd_max=dg1g2g3; g=max(g1,g2,g3); /求求3個(gè)長(zhǎng)整數(shù)中的最大者個(gè)長(zhǎng)整數(shù)中的最
29、大者 coutg_max=ga) a=b; if(ca) a=c; return a;double max(double a,double b,double c) /定義求定義求3個(gè)雙精度數(shù)中的最大者的函數(shù)個(gè)雙精度數(shù)中的最大者的函數(shù)if(ba) a=b; if(ca) a=c; return a;long max(long a,long b,long c) /定義求定義求3個(gè)長(zhǎng)整數(shù)中的最大者的函數(shù)個(gè)長(zhǎng)整數(shù)中的最大者的函數(shù)if(ba) a=b; if(ca) a=c; return a; 注意:注意:若有函數(shù)重載,則要避免函數(shù)調(diào)用的若有函數(shù)重載,則要避免函數(shù)調(diào)用的二義二義性性,否則編譯出錯(cuò)。,否
30、則編譯出錯(cuò)。如:如:int max(int a,int b,int c); double max(double a,double b,double c); long max(long a,long b,long c); 若函數(shù)調(diào)用如下:若函數(shù)調(diào)用如下:coutmax(1, 1.4, 2);/編譯出錯(cuò),有二意性編譯出錯(cuò),有二意性例例4.6 編寫(xiě)一個(gè)程序,用來(lái)求編寫(xiě)一個(gè)程序,用來(lái)求2個(gè)或個(gè)或3個(gè)整數(shù)中個(gè)整數(shù)中的最大數(shù)。如果輸入兩個(gè)整數(shù),程序就輸出的最大數(shù)。如果輸入兩個(gè)整數(shù),程序就輸出這兩個(gè)整數(shù)中的最大數(shù),如果輸入這兩個(gè)整數(shù)中的最大數(shù),如果輸入3個(gè)整數(shù),個(gè)整數(shù),程序就輸出這程序就輸出這3個(gè)整數(shù)中的最
31、大數(shù)。個(gè)整數(shù)中的最大數(shù)。 #include using namespace std;int main( )int max(int a,int b,int c); /函數(shù)聲明函數(shù)聲明 int max(int a,int b); /函數(shù)聲明函數(shù)聲明 int a=8,b=-12,c=27; coutmax(a,b,c)=max(a,b,c)endl; coutmax(a,b)=max(a,b)a) a=b;if(ca) a=c; return a;int max(int a,int b) /求兩個(gè)整數(shù)中的最大者求兩個(gè)整數(shù)中的最大者if(ab) return a;else return b;注意:注意
32、:一個(gè)函數(shù)不能既作為重載函數(shù),又作為一個(gè)函數(shù)不能既作為重載函數(shù),又作為有默認(rèn)參數(shù)的函數(shù)。因?yàn)楫?dāng)調(diào)用函數(shù)時(shí)如果少有默認(rèn)參數(shù)的函數(shù)。因?yàn)楫?dāng)調(diào)用函數(shù)時(shí)如果少寫(xiě)一個(gè)參數(shù),系統(tǒng)無(wú)法判定是利用重載函數(shù)還寫(xiě)一個(gè)參數(shù),系統(tǒng)無(wú)法判定是利用重載函數(shù)還是利用默認(rèn)參數(shù)的函數(shù),出現(xiàn)二義性,系統(tǒng)無(wú)是利用默認(rèn)參數(shù)的函數(shù),出現(xiàn)二義性,系統(tǒng)無(wú)法執(zhí)行。法執(zhí)行。int max(int a,int b);int max(int a,int b,int c=0);若函數(shù)調(diào)用如下:若函數(shù)調(diào)用如下:cout1)#include using namespace std;int age(int); /函數(shù)聲明函數(shù)聲明int main( ) /
33、主函數(shù)主函數(shù) coutage(5)1)許多問(wèn)題既可以用遞歸方法來(lái)處理,也可以許多問(wèn)題既可以用遞歸方法來(lái)處理,也可以用非遞歸方法來(lái)處理。在實(shí)現(xiàn)遞歸時(shí),在時(shí)用非遞歸方法來(lái)處理。在實(shí)現(xiàn)遞歸時(shí),在時(shí)間和空間上的開(kāi)銷(xiāo)比較大。間和空間上的開(kāi)銷(xiāo)比較大。例:猴子偷桃問(wèn)題,例:猴子偷桃問(wèn)題,P88,第第22題。題。目的:將目的:將n個(gè)盤(pán)子從個(gè)盤(pán)子從A針移到針移到C針(借助于針(借助于B針)針)當(dāng)盤(pán)子數(shù)當(dāng)盤(pán)子數(shù)n為為1時(shí),直接將盤(pán)子從時(shí),直接將盤(pán)子從A針移到針移到C針針;當(dāng)盤(pán)子數(shù)當(dāng)盤(pán)子數(shù)n1時(shí),必須分以下三步:時(shí),必須分以下三步:1、現(xiàn)將上面、現(xiàn)將上面n-1個(gè)盤(pán)子從個(gè)盤(pán)子從A針移到針移到B針針;(借助于借助于C針
34、針)2、再將再將A針上剩下的盤(pán)子移到針上剩下的盤(pán)子移到C針針;3、將將n-1個(gè)盤(pán)子從個(gè)盤(pán)子從B針移到針移到C針針; (借助于借助于A針針)例:漢諾塔問(wèn)題,例:漢諾塔問(wèn)題,P132,第第9題。題。變量類(lèi)型變量類(lèi)型:按變量有效范圍按變量有效范圍(作用域作用域)分分:全局變量全局變量局部變量局部變量按變量存儲(chǔ)期分按變量存儲(chǔ)期分:靜態(tài)變量靜態(tài)變量動(dòng)態(tài)變量動(dòng)態(tài)變量全局變量全局變量局部變量局部變量介紹以下幾種變量介紹以下幾種變量:靜態(tài)局部變量靜態(tài)局部變量動(dòng)態(tài)局部變量動(dòng)態(tài)局部變量(自動(dòng)變量自動(dòng)變量)在一個(gè)函數(shù)內(nèi)部定義的變量是內(nèi)部變量,它只在一個(gè)函數(shù)內(nèi)部定義的變量是內(nèi)部變量,它只在本函數(shù)范圍內(nèi)有效,也就是說(shuō)只
35、有在本函數(shù)在本函數(shù)范圍內(nèi)有效,也就是說(shuō)只有在本函數(shù)內(nèi)才能使用它們,在此函數(shù)以外是不能使用這內(nèi)才能使用它們,在此函數(shù)以外是不能使用這些變量的。同樣,在復(fù)合語(yǔ)句中定義的變量只些變量的。同樣,在復(fù)合語(yǔ)句中定義的變量只在本復(fù)合語(yǔ)句范圍內(nèi)有效。這稱(chēng)為局部變量在本復(fù)合語(yǔ)句范圍內(nèi)有效。這稱(chēng)為局部變量(local variable)。4.11 局部變量和全局變量局部變量和全局變量 4.11.1 局部變量局部變量float func1(int a) /函數(shù)函數(shù)f1int b,c; b、c有效有效a有效有效int main( ) /主函數(shù)主函數(shù)int m,n;int p,q; m、n有效有效p、q在復(fù)在復(fù)合語(yǔ)句中
36、合語(yǔ)句中有效有效在復(fù)合語(yǔ)句中定義的變量只在本復(fù)合語(yǔ)句范圍內(nèi)有效在復(fù)合語(yǔ)句中定義的變量只在本復(fù)合語(yǔ)句范圍內(nèi)有效說(shuō)明:說(shuō)明:(1) 不同函數(shù)中可以使用同名的變量不同函數(shù)中可以使用同名的變量,它它們代表不同的對(duì)象們代表不同的對(duì)象,互不干擾?;ゲ桓蓴_。(main()函數(shù)也不例外函數(shù)也不例外) (2) 在函數(shù)聲明中出現(xiàn)的參數(shù)名,其作用范圍只在本行在函數(shù)聲明中出現(xiàn)的參數(shù)名,其作用范圍只在本行的括號(hào)內(nèi)。沒(méi)有為它們分配存儲(chǔ)單元。例如的括號(hào)內(nèi)。沒(méi)有為它們分配存儲(chǔ)單元。例如int max(int a,int b); /函數(shù)聲明中出現(xiàn)函數(shù)聲明中出現(xiàn)a、b int max(int x,int y) /函數(shù)定義,形參是
37、函數(shù)定義,形參是x、y coutxyendl; /合法,合法,x、y在函數(shù)體中有效在函數(shù)體中有效coutabendl; /非法非法,a、b在函數(shù)體中無(wú)效在函數(shù)體中無(wú)效編譯時(shí)認(rèn)為編譯時(shí)認(rèn)為max函數(shù)體中的函數(shù)體中的a和和b未經(jīng)定義。未經(jīng)定義。在函數(shù)之外定義的變量是外部變量,稱(chēng)為全在函數(shù)之外定義的變量是外部變量,稱(chēng)為全局變量。全局變量的有效范圍為局變量。全局變量的有效范圍為從定義變量從定義變量的位置開(kāi)始到本源文件結(jié)束的位置開(kāi)始到本源文件結(jié)束。4.11.2 全局變量全局變量int p=1,q=5; /全局變量全局變量float f1(int a) int b,c; char c1,c2; /全局變量
38、全局變量char f2 (int x, int y) int i,j; main ( ) /主函數(shù)主函數(shù) int m,n; 全局變量全局變量c1、c2的的作用范圍作用范圍全局變量全局變量p、q的作用范的作用范圍圍(1) 全局變量的作用是增加函數(shù)間數(shù)據(jù)聯(lián)系的渠道。全局變量的作用是增加函數(shù)間數(shù)據(jù)聯(lián)系的渠道。(2) 建議不必要時(shí)不要使用全局變量,因?yàn)椋航ㄗh不必要時(shí)不要使用全局變量,因?yàn)椋?全局變量在程序的全部執(zhí)行過(guò)程中都占用存儲(chǔ)全局變量在程序的全部執(zhí)行過(guò)程中都占用存儲(chǔ)單元,而不是僅在需要時(shí)才開(kāi)辟單元。單元,而不是僅在需要時(shí)才開(kāi)辟單元。 它使函數(shù)的通用性降低。它使函數(shù)的通用性降低。一般要求把程序中的函
39、數(shù)做成一個(gè)封閉體,除一般要求把程序中的函數(shù)做成一個(gè)封閉體,除了可以通過(guò)了可以通過(guò)“實(shí)參實(shí)參形參形參”的渠道與外界發(fā)的渠道與外界發(fā)生聯(lián)系外,沒(méi)有其他渠道。這樣的程序移植性生聯(lián)系外,沒(méi)有其他渠道。這樣的程序移植性好,可讀性強(qiáng)。好,可讀性強(qiáng)。 使用全局變量過(guò)多,會(huì)降低程序的清晰性。使用全局變量過(guò)多,會(huì)降低程序的清晰性。在各個(gè)函數(shù)執(zhí)行時(shí)都可能改變?nèi)肿兞康闹?,在各個(gè)函數(shù)執(zhí)行時(shí)都可能改變?nèi)肿兞康闹?,程序容易出錯(cuò)。程序容易出錯(cuò)。存儲(chǔ)期是指變量在內(nèi)存中的存在期間。存儲(chǔ)期可以存儲(chǔ)期是指變量在內(nèi)存中的存在期間。存儲(chǔ)期可以分為分為靜態(tài)存儲(chǔ)期靜態(tài)存儲(chǔ)期和和動(dòng)態(tài)存儲(chǔ)期動(dòng)態(tài)存儲(chǔ)期。具體包含具體包含4種:種:自動(dòng)的自動(dòng)
40、的(auto)、靜態(tài)的靜態(tài)的(static)、寄存寄存器的器的(register)和和外部的外部的(extern)。4.12 變量的存儲(chǔ)類(lèi)別變量的存儲(chǔ)類(lèi)別 4.12.1 動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式用用auto或省略或省略auto聲明的聲明的局部變量局部變量。int f(int a) /定義定義f函數(shù),為形參函數(shù),為形參auto int b,c=3; /定義和為整型的自動(dòng)變量定義和為整型的自動(dòng)變量 char f; /定義定義f為字符型的自動(dòng)變量為字符型的自動(dòng)變量4.12.2 自動(dòng)變量:自動(dòng)變量:在函數(shù)調(diào)用結(jié)束后在函數(shù)調(diào)用結(jié)束后,變量值消失。變量值消失。存儲(chǔ)類(lèi)別存儲(chǔ)類(lèi)別a
41、uto和數(shù)據(jù)類(lèi)型和數(shù)據(jù)類(lèi)型int的順序任意:的順序任意:auto int b,c=3;int auto b,c=3;用用static聲明靜態(tài)局部變量的值在函數(shù)調(diào)用結(jié)束聲明靜態(tài)局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,即其占用的存儲(chǔ)單元不釋后不消失而保留原值,即其占用的存儲(chǔ)單元不釋放,在下一次該函數(shù)調(diào)用時(shí),該變量保留上一次放,在下一次該函數(shù)調(diào)用時(shí),該變量保留上一次函數(shù)調(diào)用結(jié)束時(shí)的值。例:函數(shù)調(diào)用結(jié)束時(shí)的值。例: static int a; 4.12.3 用用static聲明靜態(tài)局部變量聲明靜態(tài)局部變量例例4.12 靜態(tài)局部變量的值。靜態(tài)局部變量的值。 #include using names
42、pace std;int f(int a) auto int b=0; static int c=3; b=b+1; c=c+1; return a+b+c; int main( ) int a=2,i; for(i=0;i3;i+) coutf(a) ; coutendl; return 0; (1) 為靜態(tài)局部變量賦初值是在編譯時(shí)進(jìn)行的,為靜態(tài)局部變量賦初值是在編譯時(shí)進(jìn)行的,即只賦初值一次,在程序運(yùn)行時(shí)它已有初值。即只賦初值一次,在程序運(yùn)行時(shí)它已有初值。以后每次調(diào)用函數(shù)時(shí)不再重新賦初值而只是保以后每次調(diào)用函數(shù)時(shí)不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時(shí)的值。留上次函數(shù)調(diào)用結(jié)束時(shí)的值。(2)
43、為自動(dòng)變量賦初值,不是在編譯時(shí)進(jìn)行的,為自動(dòng)變量賦初值,不是在編譯時(shí)進(jìn)行的,而是在函數(shù)調(diào)用時(shí)進(jìn)行,每調(diào)用一次函數(shù)重新而是在函數(shù)調(diào)用時(shí)進(jìn)行,每調(diào)用一次函數(shù)重新給一次初值,相當(dāng)于執(zhí)行一次賦值語(yǔ)句。給一次初值,相當(dāng)于執(zhí)行一次賦值語(yǔ)句。(3) 雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但其他函數(shù)是不能引用它的,也就是說(shuō),在在,但其他函數(shù)是不能引用它的,也就是說(shuō),在其他函數(shù)中它是其他函數(shù)中它是“不可見(jiàn)不可見(jiàn)”的。的。在什么情況下需要用局部靜態(tài)變量呢?在什么情況下需要用局部靜態(tài)變量呢?需要保留函數(shù)上一次調(diào)用結(jié)束時(shí)的值。例如可以需要保留函數(shù)上一次調(diào)用結(jié)束時(shí)的值。例如可以
44、用下例中的方法求用下例中的方法求1!+2!+3!+4!+5!+n! 。例例4.13 輸出輸出 1!+2!+3!+4!+5!+n!。(利用靜態(tài)利用靜態(tài)變量的特性變量的特性)#include using namespace std;int fac(int); int main( ) int i,n,sum(0); cinn; for(i=1;i=n;i+) sum+=fac(i); coutsumendl; return 0; int fac(int n) static int f=1; /f為靜態(tài)局部變量為靜態(tài)局部變量 f=f*n; /在在f原值基礎(chǔ)上乘以原值基礎(chǔ)上乘以n return f; 用
45、靜態(tài)存儲(chǔ)要多占內(nèi)存,而且降低了程序的用靜態(tài)存儲(chǔ)要多占內(nèi)存,而且降低了程序的可讀性,當(dāng)調(diào)用次數(shù)多時(shí)往往弄不清靜態(tài)局可讀性,當(dāng)調(diào)用次數(shù)多時(shí)往往弄不清靜態(tài)局部變量的當(dāng)前值是什么。因此,如不必要,部變量的當(dāng)前值是什么。因此,如不必要,不要多用靜態(tài)局部變量。不要多用靜態(tài)局部變量。注意:注意:靜態(tài)局部變量、全局變量,定義時(shí)若未靜態(tài)局部變量、全局變量,定義時(shí)若未賦初值,則自動(dòng)賦予初值。賦初值,則自動(dòng)賦予初值。static int a (初值為初值為0)static char b (初值為初值為0)static bool c (初值為初值為false)自動(dòng)變量的定義時(shí)若未賦初值,則初值未知。自動(dòng)變量的定義時(shí)若
46、未賦初值,則初值未知。auto int a(初值未知初值未知)char c (初值未知初值未知)C+編譯系統(tǒng)包括編譯系統(tǒng)包括預(yù)處理預(yù)處理、編譯編譯和和連接連接三部分。三部分。預(yù)處理命令不是預(yù)處理命令不是C+語(yǔ)句。語(yǔ)句。注意:注意:正確區(qū)別正確區(qū)別預(yù)處理命令預(yù)處理命令和和C+語(yǔ)句語(yǔ)句,區(qū)別,區(qū)別預(yù)處理和編譯,才能正確使用預(yù)處理命令。預(yù)處理和編譯,才能正確使用預(yù)處理命令。4.16 預(yù)處理命令預(yù)處理命令C+提供的預(yù)處理功能主要有以下提供的預(yù)處理功能主要有以下3種:種:() 宏定義宏定義() 文件包含文件包含() 條件編譯條件編譯分別用分別用宏定義命令宏定義命令、文件包含命令文件包含命令、條件編譯條件
47、編譯命令命令來(lái)實(shí)現(xiàn)。為了與一般來(lái)實(shí)現(xiàn)。為了與一般C+語(yǔ)句相區(qū)別,這語(yǔ)句相區(qū)別,這些命令以符號(hào)些命令以符號(hào)“”開(kāi)頭,而且開(kāi)頭,而且末尾不包含分末尾不包含分號(hào)號(hào)。#define命令將一個(gè)指定的標(biāo)識(shí)符(即宏名)來(lái)代表命令將一個(gè)指定的標(biāo)識(shí)符(即宏名)來(lái)代表一個(gè)字符串。它的一般形式為:一個(gè)字符串。它的一般形式為:#define 標(biāo)識(shí)符標(biāo)識(shí)符 字符串字符串如定義符號(hào)常量:如定義符號(hào)常量:#define PI 3.1415926#define命令定義帶參數(shù)的宏定義。一般形式為:命令定義帶參數(shù)的宏定義。一般形式為:#define 宏名宏名(參數(shù)表參數(shù)表) 字符串字符串如:如:#define S(a,b) a*
48、b /a、b為宏的參數(shù)為宏的參數(shù)4.16.1 宏定義宏定義字符串須寫(xiě)在一行字符串須寫(xiě)在一行。使用的形式如下:使用的形式如下:area=S(3,2)用、分別代替宏定義中的形式參數(shù)用、分別代替宏定義中的形式參數(shù)a和和b,即即用用3*2代替代替S(3,2)。因此賦值語(yǔ)句展開(kāi)為因此賦值語(yǔ)句展開(kāi)為area=3*2;由于由于C+增加了增加了內(nèi)置函數(shù)內(nèi)置函數(shù)(inline),比用帶參數(shù)的比用帶參數(shù)的宏定義更方便,因此在宏定義更方便,因此在C+中基本上已不再用中基本上已不再用#define命令定義宏了,主要用于條件編譯中。命令定義宏了,主要用于條件編譯中。1.“文件包含文件包含”:#include 文件名文件
49、名所謂所謂“文件包含文件包含”處理是指一個(gè)源文件可以將處理是指一個(gè)源文件可以將另外一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來(lái)。另外一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來(lái)。例如:在例如:在file1.cpp中有如下語(yǔ)句:中有如下語(yǔ)句:#include file2.cpp4.16.2 “文件包含”處理圖4.18“文件包含文件包含”命令是很有用的,它可以節(jié)省程序命令是很有用的,它可以節(jié)省程序設(shè)計(jì)人員的重復(fù)勞動(dòng)。設(shè)計(jì)人員的重復(fù)勞動(dòng)。頭文件一般包含以下幾類(lèi)內(nèi)容:頭文件一般包含以下幾類(lèi)內(nèi)容: (1) 對(duì)類(lèi)型的聲明。對(duì)類(lèi)型的聲明。(2) 函數(shù)聲明。函數(shù)聲明。(3) 內(nèi)置內(nèi)置(inline)函數(shù)的定義。函數(shù)的定義。(4) 宏定義。用宏定義。用#define定義的符號(hào)常量和用定義的符號(hào)常量和用const聲明的常變量。聲明的常變量。(5) 全局變量定義。全局變量定義。2. include命令的兩種形式命令的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 批發(fā)業(yè)務(wù)中的版權(quán)合作與版權(quán)輸出考核試卷
- 其他調(diào)味品發(fā)酵制品制造考核試卷
- 智能照明在博物館展品照明中的應(yīng)用考核試卷
- 企業(yè)知識(shí)管理與知識(shí)分享考核試卷
- 年金保險(xiǎn)投資渠道選擇考核試卷
- 有機(jī)肥料在育苗中的應(yīng)用考核試卷
- 冰球場(chǎng)冰面修整與保養(yǎng)考核試卷
- 智能無(wú)人機(jī)飛行控制系統(tǒng)考核試卷
- 小學(xué)生簡(jiǎn)單律動(dòng)課件圖片
- 廣州鋪位租賃合同范本
- ABB工業(yè)機(jī)器人編程-第五章
- 風(fēng)力發(fā)電機(jī)組安裝與調(diào)試第二版 課件全套 情境1-5 裝配基礎(chǔ)知識(shí) -風(fēng)力發(fā)電機(jī)組的吊裝
- Office辦公軟件應(yīng)用(Office2010)中職全套教學(xué)課件
- 幼兒園餐前播報(bào)
- “雙減”政策下的小學(xué)數(shù)學(xué)創(chuàng)新型作業(yè)設(shè)計(jì)
- 正確對(duì)待青春期交友-課件
- 部編版語(yǔ)文四年級(jí)下冊(cè) 教材解讀
- 全北京市29處建筑垃圾消納場(chǎng)所一覽表
- 佳龍食品人力資源招聘方案0720
- GB/T 19879-2023建筑結(jié)構(gòu)用鋼板
- 企業(yè)內(nèi)部控制調(diào)查表
評(píng)論
0/150
提交評(píng)論