《函數(shù)與程序結(jié)構(gòu)》PPT課件.ppt

上傳人:sh****n 文檔編號:13562550 上傳時間:2020-06-22 格式:PPT 頁數(shù):45 大小:433.81KB
收藏 版權(quán)申訴 舉報 下載
《函數(shù)與程序結(jié)構(gòu)》PPT課件.ppt_第1頁
第1頁 / 共45頁
《函數(shù)與程序結(jié)構(gòu)》PPT課件.ppt_第2頁
第2頁 / 共45頁
《函數(shù)與程序結(jié)構(gòu)》PPT課件.ppt_第3頁
第3頁 / 共45頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《函數(shù)與程序結(jié)構(gòu)》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《函數(shù)與程序結(jié)構(gòu)》PPT課件.ppt(45頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第5章 函數(shù)與程序結(jié)構(gòu),本章要點(diǎn) 1. C程序的一般結(jié)構(gòu),函數(shù)的定義方法及函數(shù)的類型和返回值。 2. 函數(shù)實參與形參的對應(yīng)關(guān)系,以及參數(shù)傳遞的方式。 3. 函數(shù)的正確調(diào)用,嵌套與遞歸調(diào)用。 4. 局部變量和全局變量的概念和使用方法。 5. 變量的存儲類別(自動、靜態(tài)、寄存器、外部)、變量的作用域和生存期。 6. 宏定義及文件包含處理的方法。 本章難點(diǎn) 1. 函數(shù)參數(shù)的傳遞。 2. 函數(shù)遞歸調(diào)用的執(zhí)行過程。 3. 變量的作用域和生存期。,5.1 C程序的一般結(jié)構(gòu),5.1.1 模塊化程序設(shè)計 自頂向下,逐步細(xì)化,5.1.2 C程序的一般結(jié)構(gòu),函數(shù)是構(gòu)成C語言程序的基本功能模塊,是一段程序,它完成一

2、項相對獨(dú)立的任務(wù)。 一個較大的程序一般應(yīng)分為若干個程序模塊,每一個模塊用來實現(xiàn)一個特定的功能。在c語言中,用函數(shù)來實現(xiàn)模塊的功能。一個c程序由一個主函數(shù)和若干個函數(shù)組成,由主函數(shù)調(diào)用其他函數(shù),其他函數(shù)之間也可以相互調(diào)用。同一個函數(shù)可以被一個或多個函數(shù)調(diào)用任意多次。,特點(diǎn):, 一個源文件程序由一個或多個函數(shù)以及其他有關(guān)內(nèi)容(如命令行、數(shù)據(jù)定義等)組成。 一個c程序由一個或多個程序模塊組成,每一個程序模塊作為一個源程序文件。 C程序的執(zhí)行總是從主函數(shù)開始,又從主函數(shù)結(jié)束,其他函數(shù)只有通過調(diào)用關(guān)系發(fā)生作用。 一個c程序有且僅有一個主函數(shù)main()。 所有的函數(shù)在定義時是相互獨(dú)立的,一個函數(shù)并不從屬

3、于另一函數(shù),即函數(shù)不能嵌套定義,不過函數(shù)之間可以相互調(diào)用,但不能調(diào)用main函數(shù)。 不同源文件的組裝可以通過工程文件實現(xiàn)。,函數(shù)的分類,1. 從用戶使用的角度看,函數(shù)有兩種: (1) 標(biāo)準(zhǔn)函數(shù),即庫函數(shù) 這是由系統(tǒng)提供的,用戶不必自己定義這些函數(shù),可以直接使用它們。應(yīng)該說明,每個系統(tǒng)提供的庫函數(shù)的數(shù)量和功能不同,當(dāng)然有一些基本的函數(shù)是共同的。 (2) 用戶自己定義的函數(shù) 用以解決用戶的專門需要。 2. 從函數(shù)的形式看,函數(shù)分兩類: (1) 無參函數(shù) 在調(diào)用無參函數(shù)時,主調(diào)函數(shù)并不將數(shù)據(jù)傳送給被調(diào)用函數(shù),一般用來執(zhí)行指定的一組操作。無參函數(shù)可以帶回或不帶回函數(shù)值,但一般以不帶回函數(shù)值的居多。 (

4、2) 有參函數(shù) 在調(diào)用函數(shù)時,在主調(diào)函數(shù)和被調(diào)用函數(shù)之間有參數(shù)傳遞,也就是說,主調(diào)函數(shù)可以將數(shù)據(jù)傳給被調(diào)用函數(shù)使用,被調(diào)用函數(shù)中的數(shù)據(jù)也可以帶回來供主調(diào)函數(shù)使用。,【例5.1】一個函數(shù)簡單應(yīng)用的例子。 void main() void p_star(); /*說明p_star函數(shù)*/ void p_message(); /*說明p_message函數(shù)*/ p_star(); /*調(diào)用p_staar函數(shù)*/ p_message(); /*調(diào)用p_message函數(shù)*/ p_star(); /*調(diào)用p_star函數(shù)*/ void p_star() /*定義p_star函數(shù)*/ printf(*n)

5、; void p_message() /*定義p_message函數(shù)*/ printf(Good morning!n); ,5.2 函數(shù)的定義與調(diào)用,5.2.1 函數(shù)的定義 正如變量使用前應(yīng)先定義一樣,函數(shù)也應(yīng)該先定義后使用。函數(shù)定義后,這個函數(shù)才存在,然后才能調(diào)用它。 1. 函數(shù)定義的一般形式 (1)無參函數(shù)的定義 其定義形式如下: 類型標(biāo)識符 函數(shù)名( ) 說明部分 語句部分 說明:其中的類型標(biāo)識符用于指定函數(shù)值的類型;若函數(shù)無返回值,應(yīng)用void說明。 函數(shù)名的命名方法與標(biāo)識符相同,不能和關(guān)鍵字、庫函數(shù)名等同名 函數(shù)名后的圓括號是函數(shù)的象征,不能省略。(在函數(shù)定義時,圓括號后無分號),例

6、:void p_star( ) printf(*n); 說明:其中的void在TC中可以省掉。 p_message( ) printf(Good morning!n); ,(2)有參函數(shù)的定義 其定義形式為: 類型標(biāo)識符 函數(shù)名(形式參數(shù)說明表) 說明部分 語句部分 說明: 對于有參函數(shù),函數(shù)的參數(shù)是主調(diào)函數(shù)和被調(diào)用函數(shù)的數(shù)據(jù)通道。參數(shù)可分為形式參數(shù)(形參)和實際參數(shù)(實參)兩種。,例如: int max(int x,int y) /*形式參數(shù)說明*/ int z; /*函數(shù)體中的說明部分*/ z=xy?x:y; return(z); main( ) int a=3,b=4; printf(“

7、%d”,max(a,b); return語句的作用是將z的值作為函數(shù)值帶回到主調(diào)函數(shù)中。return后面的括弧中的值作為函數(shù)帶回的值(或稱函數(shù)返回值)。 在一個函數(shù)的函數(shù)體內(nèi),不能再定義另一個函數(shù),即函數(shù)不能嵌套定義。,形參:定義函數(shù)時的參數(shù),實參:調(diào) 用函數(shù)時的參數(shù),例編寫一個通用過程(函數(shù)或子程序),該過程可以實現(xiàn)判斷一個整數(shù)是否為素數(shù)。編寫主程序調(diào)用該過程,統(tǒng)計所有三位數(shù)中素數(shù)的個數(shù)。,int ss(int n) int flag,i; flag=1; for(i=2;i=n-1;i+) if (n%i=0) flag=0; break; return flag; main() int

8、gs,i; gs=0; for (i=100;i=999;i+) if(ss(i) gs+; printf(gs=%d,gs); ,2. 函數(shù)的返回值,函數(shù)的數(shù)據(jù)類型就是函數(shù)返回值的類型,稱為函數(shù)類型。 (1)函數(shù)的返回值通過函數(shù)中的返回語句return將被調(diào)用函數(shù)中的一個確定的值帶回到主調(diào)函數(shù)中去。 return語句的用法如下: return(表達(dá)式); return 表達(dá)式; return; return語句的作用: 使程序控制從被調(diào)用函數(shù)返回到主調(diào)函數(shù)中,同時把返回值帶給主調(diào)函數(shù);釋放在函數(shù)的執(zhí)行過程中分配的所有內(nèi)存空間。,【例5.2】在屏幕上顯示計算結(jié)果時,有時會因為顯示的速度太快,還

9、沒有看清楚結(jié)果,屏幕上的內(nèi)容就已經(jīng)滾出屏幕。為了解決這個問題,可以讓屏幕每顯示一定的行數(shù)后就自動暫停一個,待用戶看清屏幕后按鍵盤上的任意鍵后。屏幕會繼續(xù)顯示以后的計算結(jié)果。,#include #include /*顯示數(shù)字1到100,每顯示20行時暫停一次*/ void pause(void) /*函數(shù)定義,函數(shù)形式參數(shù)為空*/ getchar(); void main() int i,j=0; for(i=1;i=100;i+) printf(%dn,i); if(+j=20) j=0; pause(); ,5.2.2 函數(shù)的調(diào)用,一般形式為: 函數(shù)名(實參表列); 說明: (1)調(diào)用函數(shù)時

10、,函數(shù)名稱必須與具有該功能的自定義函數(shù)名稱完全一致。 (2)實際參數(shù)表中的參數(shù)(簡稱實參),可以是常數(shù)、變量或表達(dá)式。如果實參不止1個,則相鄰實參之間用逗號分隔。 (3)實參的個數(shù)、類型和順序,應(yīng)該與被調(diào)用函數(shù)所要求的參數(shù)個數(shù)、類型和順序一致,才能正確地進(jìn)行數(shù)據(jù)傳遞。,(4)對實參表求值的順序并不是確定的,有的系統(tǒng)按自左至右順序求實參的值,有的系統(tǒng)則按自右至左順序。 Turbo C規(guī)定是自右至左順序求值。 main() int i=2; printf(“%d %d %d”,+i,+i,+i); 輸出為: 5 4 3 為了避免這種影響,可以用: main() int i=2,j,k,a; j=+

11、i; k=+i; a=+i; printf(“%d %d %d”,j,k,a); ,按照函數(shù)在程序中出現(xiàn)的位置劃分,調(diào)用函數(shù)方式有以下3種:,(1)函數(shù)語句 C語言中的函數(shù)可以只進(jìn)行某些操作而不返回函數(shù)值,這時的函數(shù)調(diào)用作為一條獨(dú)立的語句。如例8.1中的 p_star( ); (2)函數(shù)表達(dá)式 函數(shù)作為表達(dá)式的一項,出現(xiàn)在表達(dá)式中,以函數(shù)返回值參與表達(dá)式的運(yùn)算。這種方式要求函數(shù)是有返回值的。例如 m=5*max(a,b); (3)函數(shù)實參 函數(shù)作為另一個函數(shù)調(diào)用的實際參數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作為實參進(jìn)行傳送,因此要求該函數(shù)必須是有返回值的。 printf(%d,max(a,b);,

12、函數(shù)調(diào)用的執(zhí)行過程,main() int n; scanf(“%d“, ,int ss(int n) int flag,i; flag=1; for(i=2;i=n-1;i+) if (n%i=0) flag=0; break; return flag; ,1,2,3,4,5,其中的2稱為函數(shù)調(diào)用;4稱為函數(shù)返回。,2. 對被調(diào)用函數(shù)的說明和函數(shù)原型,在調(diào)用自定義函數(shù)之前,應(yīng)對該函數(shù)(稱為被調(diào)用函數(shù))進(jìn)行說明,其般格式如下: 函數(shù)類型 函數(shù)名(數(shù)據(jù)類型1 參數(shù)名1, 數(shù)據(jù)類型2 參數(shù)名2); 語言同時又規(guī)定,在以下兩種情況下,可以省去對被調(diào)用函數(shù)的說明。 (1)函數(shù)的返回值是整型或字符型,可以

13、不必進(jìn)行說明,系統(tǒng)對它們自動按整型說明。但為清晰起見,建議都加以說明為好。 (2)被調(diào)用函數(shù)的函數(shù)定義出現(xiàn)在調(diào)用函數(shù)之前時。因為在調(diào)用之前,編譯系統(tǒng)已經(jīng)知道了被調(diào)用函數(shù)的函數(shù)類型、參數(shù)個數(shù)、類型和順序。 所以,養(yǎng)成這樣的習(xí)慣:先定義子函數(shù),最后寫主函數(shù)。這樣的話,可以省掉所有的函數(shù)說明。,注意: 函數(shù)的“定義”和“說明”是兩個不同的內(nèi)容。 “定義”是指對函數(shù)功能的確立,包括指定函數(shù)名,函數(shù)返回值類型、形參及其類型、函數(shù)體等,它是一個完整的、獨(dú)立的函數(shù)單位。在一個程序中,一個函數(shù)只能被定義一次,而且是在其他任何函數(shù)之外進(jìn)行。 而 “說明”(有的書上也稱為“聲明”)則是把函數(shù)的名稱、函數(shù)返回值的類

14、型、參數(shù)的個數(shù)、類型和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時系統(tǒng)對函數(shù)名稱正確與否、參數(shù)的類型、數(shù)量及順序是否一致等進(jìn)行對照檢查。在一個程序中,除上述可以缺省函數(shù)說明的情況外,所有調(diào)用函數(shù)都必須對被調(diào)用函數(shù)進(jìn)行說明,而且是在調(diào)用函數(shù)的函數(shù)體內(nèi)進(jìn)行。 對庫函數(shù)的調(diào)用不需要再作說明,但必須把該函數(shù)的頭文件用#include命令包含在源文件前部。,5.2.3 函數(shù)的參數(shù)傳遞,在調(diào)用函數(shù)時,大多數(shù)情況下,主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞關(guān)系。 形參出現(xiàn)在函數(shù)定義中,在整個函數(shù)體內(nèi)都可以使用,離開該函數(shù)則不能使用。 實參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實參變量也不能使用。 發(fā)生函數(shù)調(diào)用時,主調(diào)函數(shù)把實

15、參的值傳送給被調(diào)函數(shù)的形參從而實現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。 在c語言中,實參向形參傳送數(shù)據(jù)的方式是“值傳遞”。 值傳遞的優(yōu)點(diǎn)就在于:被調(diào)用的函數(shù)不可能改變調(diào)用函數(shù)中變量的值,而只能改變它的局部的臨時副本。這樣就可以避免被調(diào)用函數(shù)的操作對調(diào)用函數(shù)中的變量可能產(chǎn)生的副作用。,調(diào)用過程如下: (1)給形參分配內(nèi)存空間; (2)將實參a的值傳遞給形參; (3)執(zhí)行函數(shù)體。給函數(shù)體內(nèi)的變量分配存儲空間,執(zhí)行算法實現(xiàn)部分 函數(shù)返回的過程如下: 將返回值返回主函數(shù), 釋放函數(shù)調(diào)用過程中分配的所有內(nèi)存空間, 結(jié)束函數(shù)調(diào)用,將流程控制權(quán)交給主調(diào)函數(shù)。 舉例說明:本講義17頁的例子。,5.3 局部變量與全局

16、變,變量的作用域 :變量有效性的范圍稱變量的作用域 。 語言中的變量,按作用域范圍可分為兩種,即局部變量和全局變量。,5.3.1 局部變量,在一個函數(shù)或復(fù)合語句內(nèi)定義的變量,稱為局部變量,局部變量也稱為內(nèi)部變量。 局部變量僅在定義它的函數(shù)或復(fù)合語句內(nèi)有效。 編譯時,編譯系統(tǒng)不為局部變量分配內(nèi)存單元,而是在程序的運(yùn)行中,當(dāng)局部變量所在的函數(shù)被調(diào)用時,編譯系統(tǒng)根據(jù)需要臨時分配內(nèi)存,函數(shù)調(diào)用結(jié)束,局部變量的空間被釋放。,對局部變量的說明: (1)主函數(shù)中定義的變量只能在主函數(shù)中使用,不能在其它函數(shù)中使用。 (2)形參變量是屬于被調(diào)函數(shù)的局部變量,實參變量是屬于主調(diào)函數(shù)的局部變量。 (3)允許在不同的

17、函數(shù)中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾,也不會發(fā)生混淆。例如,形參和實參的變量名都為n,是完全允許的。 (4)在復(fù)合語句中也可定義變量,其作用域只在復(fù)合語句范圍內(nèi)。,5.3.2 全局變量,全局變量也稱為外部變量,它是在函數(shù)外部定義的變量。它不屬于哪一個函數(shù),它屬于一個源程序文件。其作用域是整個源程序文件,可以被本文件中的所有函數(shù)共用。 在函數(shù)中使用全局變量,一般應(yīng)作全局變量說明。 但在一個函數(shù)之前定義的全局變量,在該函數(shù)內(nèi)使用可不再加以說明。,對外部變量的說明:,(1)外部變量定義必須在所有的函數(shù)之外,且只能定義一次。 (2)設(shè)全局變量的作用是增加了函數(shù)間數(shù)據(jù)聯(lián)系

18、的渠道。由于同一文件中的所有函數(shù)都能引用全局變量的值,因此如果在一個函數(shù)中改變了全局變量的值,就能影響到其它函數(shù),相當(dāng)于各個函數(shù)間有直接的傳遞通道。 int x,y; /*定義全局變量*/ void swap( ) /*定義函數(shù)swap()*/ int t; t=x;x=y;y=t; return; void main( ) printf(“input x,y:”); scanf(“%d,%d”, ,(3)雖然外部變量可加強(qiáng)函數(shù)模塊之間的數(shù)據(jù)聯(lián)系,但是又使函數(shù)要依賴這些變量,因而使得函數(shù)的獨(dú)立性降低。從模塊化程序設(shè)計的觀點(diǎn)來看這是不利的,因此在不必要時盡量不要使用全局變量。 (4)在同一源文件

19、中,允許全局變量和局部變量同名。但在局部變量的作用域內(nèi),全局變量被“屏蔽”不起作用,即局部變量優(yōu)先。,5.4 變量的存儲類型,1. 自動變量 2. 靜態(tài)變量 (1) 靜態(tài)局部變量 (2) 靜態(tài)全局變量 3. 外部變量 4. 寄存器變量,5.5 函數(shù)的嵌套與遞歸調(diào)用,5.5.1 函數(shù)的嵌套調(diào)用 C語句不能嵌套定義函數(shù),但可以嵌套調(diào)用函數(shù),所謂函數(shù)的嵌套調(diào)用,是指在執(zhí)行被調(diào)用函數(shù)時,被調(diào)用函數(shù)又調(diào)用另一個函數(shù)。,【例5.7】計算s=1k+2k+3k+Nk。,#include #define K 4 #define N 5 long f1(int n,int k) long p=n; int i;

20、for(i=1;ik;i+) p *= n; return (p); ,long f2 (int n,int k) long sum=0; int i; for(i=1;i=n;i+) sum += f1(i, k); return sum; void main() printf(%dn,f2(N,K); ,5.5.2 函數(shù)的遞歸調(diào)用,1遞歸函數(shù)的概念 遞歸是在連續(xù)執(zhí)行某一個處理過程時,該過程中的某一步要用到它自身的上一步(或上幾步)的結(jié)果。在一個程序中,若存在程序自己調(diào)用自己的現(xiàn)象就是構(gòu)成了遞歸。 遞歸又分為直接遞歸和間接遞歸。 一個函數(shù)在它的函數(shù)體內(nèi)直接或間接地調(diào)用它自身,稱為遞歸調(diào)用。,

21、【例5.8】用遞歸法計算n!。,float ff(int n) float f; if(n0) printf(n0,input error); else if(n=0|n=1) f=1; else f=ff(n-1)*n; return(f); void main() int n; float y; scanf(%d, ,5.7 編譯預(yù)處理,編譯預(yù)處理是指在系統(tǒng)對源程序進(jìn)行編譯之前,對程序中某些特殊的命令行的處理,預(yù)處理程序?qū)⒏鶕?jù)源代碼中的預(yù)處理命令修改程序,使用預(yù)處理功能,可以改善程序的設(shè)計環(huán)境,提高程序的通用性、可讀性、可修改性、可調(diào)試性、可移植性和方便性,易于模塊化。 預(yù)處理程序的位置在

22、主函數(shù)之前,定義一次,可在程序中多處展開和調(diào)用,它的取舍決定于實際程序的需要。預(yù)處理程序一般包括:宏定義和宏替換、文件包含(又稱頭文件)、條件編譯。 預(yù)處理命令是一種特殊的命令,為了區(qū)別一般的語句,必須以#開頭,結(jié)尾不加分號。預(yù)處理命令可以放在程序中的任何位置,其有效范圍是從定義開始到文件結(jié)束。,5.7.1 宏定義,宏定義可以分為符號常量(不帶參數(shù))和帶參數(shù)的兩種。也可以使用#undef命令終止宏定義的作用域。 1符號常量(不帶參數(shù))的宏定義 用一個指定的標(biāo)識符(即名字)來代表一個字符串,其一般形式為: #define 標(biāo)識符 字符串 宏定義的功能:在進(jìn)行編譯前,用字符串原樣替換程序中的標(biāo)識符

23、。 宏定義的作用: (1)便于對程序進(jìn)行修改。 (2)提高源程序的可移植性。 (3)減少源程序中重復(fù)書寫字符串的工作量。,【例5.10】 輸入圓的半徑,求圓的周長、面積和球的體積。要求使用無參宏定義圓周率。,#include #define PI 3.1415926 /*PI是宏名,3.1415926用來替換宏名的常數(shù)*/ void main() double radius,length,area,volume; printf (Input a radius: ); scanf (%lf, ,對宏的說明:,(1)為了和變量名加以區(qū)別,宏名一般用大寫字母表示 (2)宏定義是用宏名替換一個字符串,

24、不管該字符串的詞法和語法是否正確,也不管它的數(shù)據(jù)類型,即不作任何檢查。如果有錯誤,只能由編譯程序在編譯宏展開后的源程序時發(fā)現(xiàn)。 (3)在宏定義時,可以使用已經(jīng)定義的宏名。即宏定義可以嵌套,可以層層替換。例如 #define R 3.0 #define PI 3.14159 #define L 2*PI*R #define S PI*R*R void main() printf(“L=%fnS=%fn”,L,S); 替換為 printf(“L=%fnS=%fn”, 2*PI*R, PI*R*R); printf(“L=%fnS=%fn”,2*3.14159*3.0,3.14159*3.0*3.0

25、); (4)在程序中,用雙引號括起來的宏名被認(rèn)為是一般字符,并不進(jìn)行替換。 #define PAI 3.1415 printf(“ PAI * r * r = %f ”,s); /*并不用3.1415替換PAI*/,2帶參數(shù)的宏定義,對帶參數(shù)的宏,在調(diào)用中,不是進(jìn)行簡單的字符串替換,還要進(jìn)行參數(shù)替換。 帶參宏定義的一般形式為 #define 宏名(形參表) 字符串 帶參宏調(diào)用的一般形式為 宏名(實參表); 例如, #define M(y) (y)*(y)+3*(y) /*宏定義*/ k=M(5); /*宏調(diào)用*/ 在宏調(diào)用時,用實參5去替換形參y,經(jīng)預(yù)處理宏展開后的語句為:k=(5)*(5)+

26、3*(5); 其中的括號是必要的。,(1)在宏定義中的形參是標(biāo)識符,而宏調(diào)用中的實參可以是表達(dá)式。 #define SQ(y) (y)*(y) void main() int a,sq; printf(input a number: n); scanf(%d,(4)定義帶參宏時,宏名與左圓括號之間不能留有空格。否則,編譯系統(tǒng)將空格以后的所有字符均作為替換字符串,而將該宏視為無參宏。 (5)帶參的宏和帶參函數(shù)很相似,但有本質(zhì)上的不同。 (6)宏定義也可用來定義多個語句,在宏調(diào)用時,把這些語句又替換到源程序內(nèi)。例如, #define SSSV(s1,s2,s3,v) s1=l*w;s2=l*h;s

27、3=w*h;v=w*l*h; void main() int l=3,w=4,h=5,sa,sb,sc,vv; SSSV(sa,sb,sc,vv); printf(sa=%dnsb=%dnsc=%dnvv=%dn,sa,sb,sc,vv); (7)較長的定義在一行中寫不下時,可在本行末尾使用反斜杠表示續(xù)行。宏替換不占運(yùn)行時間,只占編譯時間。而函數(shù)調(diào)用則占運(yùn)行時間。,3取消宏定義(#undef),宏定義的作用范圍是從宏定義命令開始到程序結(jié)束。如果需要在源程序的某處終止宏定義,則需要使用#undef命令取消宏定義。取消宏定義命令#undef的用法格式為: #undef 標(biāo)識符 其中的標(biāo)識符是指定義

28、的宏名。 #define PI 3.14159 void main( ) float r=10.0; float b,c,d; b=PI*r; #undef PI /*取消了宏定義*/ c=PI*r*r; d=PI*r*r*r; printf(“r=%6.2fn”,r); ,5.7.2 文件包含,文件包含是指,一個源文件可以將另一個源文件的全部內(nèi)容包含進(jìn)來,即將另外的文件包含到本文件之中。C語言提供了#include命令用來實現(xiàn)文件包含的操作。文件包含命令行的一般形式為 include “包含文件名” 或 include 其中:(1)使用雙引號:包含文件名中可以包含文件路徑,系統(tǒng)首先到當(dāng)前目錄

29、下查找被包含文件,如果沒找到,再到系統(tǒng)指定的“包含文件目錄”(由用戶在配置環(huán)境時設(shè)置)去查找。 (2)使用尖括號:直接到系統(tǒng)指定的“包含文件目錄”去查找。一般地說,使用雙引號比較保險。 文件包含命令的功能是把指定的文件插入該命令行位置取代該命令行,從而把指定的文件和當(dāng)前的源程序文件連成一個源文件。,5.7.3 條件編譯,但如果用戶希望某一部分程序在滿足某條件時才進(jìn)行編譯,否則不編譯或按條件編譯另一組程序,這時就要用到條件編譯。 可以按不同的條件去編譯不同的程序部分,因而產(chǎn)生不同的目標(biāo)代碼文件。這對于程序的移植和調(diào)試是很有用的。,5.8 程序舉例,【例5.13】寫兩個函數(shù),分別求兩個整數(shù)的最大公約數(shù)和最小公倍數(shù),用主函數(shù)調(diào)用這兩個函數(shù),并輸出結(jié)果,兩個整數(shù)由鍵盤輸入。 【例5.14】編寫一個判別素數(shù)的函數(shù),在主函數(shù)中輸入一個整數(shù),然后輸出其是否是素數(shù)的信息。,

展開閱讀全文
溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!