freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

安徽工程科技學院(已改無錯字)

2023-03-15 10:22:04 本頁面
  

【正文】 數(shù)表)字符串 字符串中包含在括弧中所指定的參數(shù)。如: define S(a,b) a*b area=S(3,2)。 定義矩形面積 S, a是 b是邊長。在程序中用了 S( 3, 2),把 2分別代替宏定義中的形式參數(shù) a、 b,即用 3*2代替 S( 3, 2),因此賦值語句展開為 area=S(3,2); 對帶參的宏定義是這樣展開置換的:在程序中如果有帶實參的宏(如 S( 3, 2)),則按 define命令行中指定的字符串從左到右進行置換。如果串中包含宏中的形參(如 a、 b),則將程序語句中相應的實參(可以是常量、變量或表達式)代替形參。如果宏定義中的字符串中的字符不是參數(shù)字符(如 a*b中的 *號),則保留。這樣就形成了置換的字符串,見圖 。 【例 】 define PI define S(r) PI*r*r main( ) {float a, area。 a=。 area=S(a)。 printf(” r=%f\narea=%f\n” ,a,area)。 } 運行結果如下: r= area= 賦值語句“ area=S(a)”;經宏展開后為 area=*a*a。 說明: ( 1)對帶參數(shù)的宏的展開只是將語句中的宏名后面括號內的實參字符串代替 define命令行中的形參。例 S( a),在展開時,找到 define命令行中的 S( r),將 S( a)中的實參 a代替宏定義中的字符串“ PI*r*r”中的形參 r,得到 PI*a*a。這是容易理解而且不會發(fā)生什么問題。但是,如果有以下語句: area=S(a+b)。 這時把實參 a+b代替 PI*r*r中的形參 r,成為 area=PI*a+b*a+b。 請注意在 a+b外面沒有括弧,顯然這與程序設計得的原意不符。原意希望得到 area=PI*(a+b)*(a+b)。 為了得到這個結果,應當在定義時,在字符串中的形式參數(shù)外面加一個括弧。即 define S(r)PI*(r)*(r) 在對 S( a+b)進行宏展開時,將 a+b代替 r,就成了 PI*(a+b)*(a+b) 這就達到了目的。 ( 2)在宏定義時,在宏名與帶參數(shù)的括弧之間不應加空格,否則將空格以后的字符都作為替代字符串的一部分。例如,如果有 define S?(r) ?PI*r*r 被認為 S是符號常量(不帶參的宏名),它代表字符串“( r) ?PI*r*r”。如果在語句中有 area=S?(a); 則被展開為 area=(r) ?PI*r*r?(a)。 顯然不對了。 有些讀者容易把帶參數(shù)的宏和函數(shù)混淆。的確,它們之間有一定類似之處,在調用函數(shù)時也是在函數(shù)名后的括弧內寫實參,也要求實參與形參的數(shù)目相等。但是帶參的宏定義與函數(shù)是不同的。 主要有: ? ( 1)函數(shù)調用時,先求出實參表達式的值,然后代入形參。而使用帶參的宏只是進行簡單的字符替換。例如上面的 S( a+b),在宏開展時并不求 a+b的值,而只將實參字符“ a+b”代替形參 r。 ? ( 2)函數(shù)調用是在程序運行時處理的,為形參分配臨時的內存單元。而宏展開則是在編譯前進行的,在展開時并不分配內存單元,不進行值的傳遞處理,也沒有“返回值”的概念。 ? ( 3)對函數(shù)中的實參和形參都要定義類型,二者的類型要求一致,如不一致,應進行類型轉換。而宏不存在的類型問題,宏名無類型,它的參數(shù)也無類型,只是一個符號代表,展開時代入指定的字符串即可。宏定義時,字符串可以是任何類型的數(shù)據(jù)。 例如: define CHARI CHINA (字符 ) define a (數(shù)值 ) CHARI和 a不需要定義類型,它們不是變量,在程序中凡遇 CHARI均以 CHINA代之;凡遇 a均以 ,顯然不需定義類型。同樣,對帶參的宏。 define s(r) PI*r*r r也不是變量,如果在語句中有 S( ),則展開后為 PI**,語句中并不出現(xiàn) r。當然也不必定義 r的類型。 ( 4)調用函數(shù)只可得到一個返回值,而用宏可以設法得到幾個結果。 【例 】 define PI define CIRCLE(R,L,S,V) L=2*PI*R。S=PI*R*R。V=*PI*R*R*R main( ) { float r,l,s,v。 scanf(%f,r)。 CIRCLE(r,l,s,v)。 printf(r=%,s=%,v=%\n,r,l,s,v)。 } 經預編譯宏展開后的程序如下: main( ) { float r,l,s,v。 scanf(%f,r)。 l=2**r。s=*r*r。v=*5926*r*r*r。 printf(r=%,l=%,s=%,v=%\n,r,l,s,v)。 } 運行情況如下: ↙ r=,1=,s=,v= ? 請注意,實參 r的值已知,可以從宏帶回3個值( l,s,v)。其實,只不過是字符代表而已,將字符 r代表 R, l代表 L, s代表S, v代表 V,而并未在宏展開時求出 l、 s、v的值。 ? ( 5)使用宏次數(shù)多時,宏展開后源程序長,因為每展開一次都使程序增長,而函數(shù)調用不使原程序變長。 ? ( 6)宏替換不占運行時間,只占編譯時間,而函數(shù)調用則占運行時間(分配單元、保留現(xiàn)場、值傳遞、返回)。 一般用宏來代表簡短的表達式比較合適。有些問題,用宏和函數(shù)都可以。如: define MAX(x,y) (x)(y)?(x) :(y) main( ) { int a,b,c,d,t。 ┆ t=MAX(a+b,c+d)。 ┆ } 賦值語句展開后為 t=(a+b)(c+d)?(a+b):(c+d)。 注意: MAX不是函數(shù),這里只有一個 main函數(shù),在 main函數(shù)中就能求出 t的值。 這個問題也可用函數(shù)來求: int max(int x,int y) {return(xy?x:y)。} main( ) {int a,b,c,d,t。 ┆ t=max(a+b,x+d)。 ┆ } max是函數(shù),在 main函數(shù)中調用 max函數(shù)才能求出 t的值。 請仔細分析以上兩種方法。 如果善于利用宏定義,可以實現(xiàn)程序的簡化,如事先將程序中的“輸出格式”定義好,以減少在輸出語句中每次都要寫出具體的輸出格式的麻煩。 【例 】 define PR printf define NL \n define D %d define D1 D NL define D2 D D NL define D3 D D D NL define D4 D D D D NL define S %s main( ) { int a,b,c,d。 char string []=CHINA。 a=1。b=2。c=3。d=4。 PR(D1,a)。 PR(D2,a,b)。 PR(D3,a,b,c)。 PR(D4,a,b,c,d)。 PR(S,string)。 } 運行時輸出以下結果: 1 12 123 1234 CHINA ? 程序中用 PR代表 printf。以 NL代表執(zhí)行一次“換行”操作。以 D代表輸出一個整型數(shù)據(jù)的格式符。以 D1代表輸出完 1個整數(shù)后換行, D2代表輸出 2個整數(shù)后換行, D3代表輸出 3個整數(shù)后換行, D4代表輸出 4個整數(shù)后換行。以 S代表輸出一個字符串的格式符。可以看到,程序中寫輸出語句就比較簡單了,只要根據(jù)需要選擇已定義的輸出格式即可。連 printf都可以簡寫為PR。 ? 寫出各種輸入輸出的格式(例如實型、長整型、十六進制整數(shù)、八進制整數(shù)、字符型等),把它們單獨編成一個文件,它相當一個“格式庫”,用 include合令把它“包括”到自己所編的程序中,用戶就可以根據(jù)情況各取所需了。顯然在寫大程序時,這樣做是很方便的。 “文件包含”處理 所謂“文件包含”處理是指一個源文件可以將另外一個源文件的全部內容包含進來。即將另外的文件包含到本文件之中。 C語言提供了 include命令用來實現(xiàn)“文件包含”的操作。其一般形式為 include”文件名” 或 include文件名 圖 “文件包含”的含意。圖 (a)為文件,它有一個 include命令,然后還有其他內容(以 A表示)。圖 (b)為另一文件 ,文件內容以 B表示。經編譯預處理時,要對 include命令進行“文件包含”處理:將 include命令處,即 ,得到圖 (c)所示的結果。在編譯中,將“包含”以后的 (即圖 (c)所示)作為一個源文件單位進行編譯。 “文件包含”命令是很有用的,它可以節(jié)省程序設計人員的重復勞動。例如,某一單位的人員往往使用一組固定的符號常量(如g=,pi=,e=,c=…… ),可以把這些宏定義命令組成一個文件,然后各人都可以用 include命令將這些符號常量包含到自己所寫的源文件中。這樣每個人就可以不必重復定義這些符號常量。相當于工業(yè)上的標準零件,拿來就用。 【例 】 可以將例 : ( 1)文件 define PR printf define NL \n define D %d define D1 D NL define D2 D D NL define D3 D D D NL define D4 D D D D NL define S %s ( 2)文件 include main( ) { int a,b,c,d。 char string []=CHINA。 a=1。b=2。c=3。d=4。 PR(D1,a)。 PR(D2,a,b)。 PR(D3,a,b,c)。 PR(D4,a,b,c,d)。 PR(S,string)。 } 注意:在編譯時并不是作為兩個文件進行連接的,而是作為一個源程序編譯,得到一個目標( .obj)文件。因此被包含的文件也應該是源文件而不應該是目標文件。 這種常用在文件頭部的被包含的文件為“標題文件”或“頭部文件”,常以“ .h”為后綴( h為 head(頭)的縮寫),如“ ”文件。當然不用“ .h”為后綴,而用“ .c”為后綴或者沒有后綴也是可以的,但用“ .h”作后綴更能表示此文件的性質。 如果需要修改一些常數(shù),不必修改每個程序,只需修改一個文件(頭部文件)即可。但是應當注意,被包含文件修改后,凡包含此文件的所有文件都要全部重新編譯。 頭文件除了可以包括函數(shù)原型和宏定義外,也可以包括結構體類型定義(見第 11章)和全局變量定義等。 說明: ( 1)一個 include命令只能指定一個被包含文件,如果要包含 n個文件,要用 n個 include命令。 ( 2)如果文件 1包含文件 2,而文件 2中要用到文件 3的內容,則可在文件 1中用兩個 include命令分別包含文件 2和文件 3,而且文件 3應出現(xiàn)在文件 2之前,即在 : include “ ” include “ ” 這樣, file1和 file2都可以用 file3的內容。在file2中不必再用 include了(以上是假設 ,而不出現(xiàn)在其他場合)。 ( 3)在一個被包含文件中又可以包含另一個被包含文件,即文件包含是可以嵌套的。例如,上面的問題也可以這樣處理,見圖 。 它的作用與圖 。 (4)include 命令中,文件名可以用雙撇號或尖括號括起來,如可以在 include 或 include “ ” 都是合法的。二者的區(qū)別是用尖括?。?形式)時,系統(tǒng)到存放 C庫函數(shù)頭文件所在的目錄中尋找要包含的文件,這稱為標準方式。用雙撇號(即“ ”形式)時,系統(tǒng)先在用戶當前目錄中尋找要包含的文件,若找不到,再按標準方式查找(即再按尖括號的方式查找)。一般說,如果為調用庫函數(shù)而用 include命令來包含相關的頭文件,則用尖括號,以節(jié)省查找時間。如果要包含的是用戶自己編寫的文件(這種文件一般都在當前目錄中),一般用雙撇號,若文件不在當前目錄中,雙撇號內可給出文件路徑。 ( 5)被包含
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1