Microsoft Word - ch09.doc
|
|
|
- 趣凡 蓝
- 7 years ago
- Views:
Transcription
1 C 的前置處理器 本章重點 9.1 C 語言的編譯過程 9.2 前置處理器 9.3 巨集代換指引 9.4 自訂標頭檔 9.5 條件式編譯指引 9.6 實例 - 書籍介紹 9.7 習題
2 9.1 C 語言的編譯過程 我們將整合開發環境下所編寫的程式碼稱為 原始程式, 其附檔名為 *.c 當您在 Dev C++ 整合開發環境下執行功能表的 [ 執行 (Z)/ 編譯並執行 (O)] 時, 原始程式分別經過下列前置 (Preprocess) 編譯(Compiling) 組譯 (Assemblying) 處理, 無錯誤之後才能執行程式 1. 前置處理前置處理即是在程式做翻譯之前要做的工作, 主要是因為 C 語言在程式前面大都使用一些不屬於 C 語言的敘述, 我們稱為 前置處理指引 (Preprocessor Directive), 編譯前必須將這些敘述交給前置處理器, 將它擴充成 C 語言, 再進行下一步的編譯處理 2. 編譯處理在編譯過程中, 主要的工作是對原始程式做字彙分析 (Lexical Analysis) 語法分析 (Parsing) 語意分析(Semantic analysis) 產生中間碼 (Intermedia code generation) 程式碼最佳化(Optimization) 產生組合語言程式碼 (Code generation) 六大步驟 前三步驟若有發生錯誤, 編譯器會停止編譯, 此時必須將發生錯誤的地方更正, 再重新編譯一直到無錯誤為止, 此時編譯器會進行第 4-6 步驟, 將程式中所有敘述透過 Code generation 轉成更低階的組合語言 至於字彙分析是將程式中所有敘述拆成有意義的字串, 我們將這些獨立字串稱為 Token 譬如 :total=price*qty; 分成 total = price + qty ; 六個 Tokens 語法分析就是檢查這些 Token 是否符合 C 語言的文法規則, 譬如 : 是否漏打符號 括號 或括號不成對等錯誤發生 語意分析是檢查是否有拼錯字 變數是否有宣告等錯誤發生 9-2
3 C 的前置處理器 3. 組譯處理組譯處理主要的工作是將上述編譯完成的組合語言程式, 透過編譯器內部所提供的組譯器 (Assembler) 組譯成機器語言, 我們將所得的機器碼稱為 目的檔 其附檔名為 *.obj 當程式編譯完成沒有發生錯誤, 便可交給連結器 (Linker), 連結相關檔案, 而產生一個可執行檔, 其附檔名為 *.exe 此時程式便可以直接執行 原始程式 *.c Include 標頭檔 *.h 1. 前置處理 (Preprocessing) 2. 編譯處理 (Compiling) 3. 組譯處理 (Assembling) 目的檔 *.obj 4. 連結處理 (Linking) 程式庫 (*lib) 或其它目的檔 (*.obj) 執行檔 *.exe 9.2 前置處理器 C 語言的前置處理器 (Preprocessor) 是一個巨集處理器, 在編譯器編譯原始程式之前會自動啟動, 主要用來處理 C 程式中含有 # 符號開頭的敘 9-3
4 述, 我們稱為 前置處理指引 (Preprocessor directive) 敘述 透過檔案含入指引 (#include) 將程式中指定的標頭檔 (Header File) 含入到程式中, 或是巨集代換指引 (#define) 將程式中經常使用的常數 字串 函式以巨集名稱取代, 以及使用條件式編譯指引依據不同環境需求, 在編譯時選擇編譯不同的敘述 由此可知, 前置處理指引和一般 C 語言所提供的敘述最大的差異是, 該指引最前面必須以 # 符號 (pound sign) 開頭, 它可以出現在程式任何地方 習慣上, 將前置處理指引放在 main() 主函式或自定函式的前面, 所以, 前置處理指引的有效範圍是從指引所在處開始, 一直到程式結束為止, 除非使用 #undef 指引才可使其有效範圍中途失效 前置處理指引不必像函式必須呼叫, 當編譯器在編譯程式之前會自動啟動 至於 C 語言所提供的前置處理指引敘述有下列三種 : 1. 檔案含入功能 : #include 2. 字串置換和巨集定義 :#define #undef 3. 條件編譯 :#if #elif #else #endif, #ifdef #else #endif, #ifndef #else #endif 9.3 巨集代換指引 如何定義巨集 C 語言的 #define 巨集代換指引允許您使用有意義的名稱來代替特定的常數 字串 函式或數學公式 其語法如下 : 語法 1: #define 巨集名稱 [ 替代內容 ] 語法 2: #define 巨集名稱 ( 引數列 ) 運算式 功能 : 巨集名稱可用來定義常用的常數 字串 簡單的數學公式或函式 9-4
5 C 的前置處理器 1. 巨集名稱 : 和一般變數的命名規則相同, 習慣上名稱最好有意義且以大寫英文字母來命名, 巨集名稱中間不允許有空白 如下敘述設定 PI 巨集名稱的值為 3.14 #define PI 替代內容 : 設定巨集名稱被替代的內容 可以指定數值或字串的資料 當程式中出現此指引時, 在編譯前的前置處理器會將程式中每個巨集名稱都使用接在其後的替換內容取代, 再進行程式的編譯 如下敘述設定 MSG 巨集名稱的替代內容為 Hello #define MSG Hello 3. 巨集名稱前後至少空一格, 此指引最後不可加 ; 分號當結束符號 巨集定義符號常數 所謂常數是指程式在執行過程中, 其值保持不變, 不像變數會改變, 為避免程式執行時更改其值, 且避免和變數產生混淆, 將常數使用符號名稱是最佳的選擇 假設程式中有十多處使用到圓周率 3.14, 碰到欲將 3.14 改成 , 便要牽一髮動全身, 稍一疏忽有圓周率的地方未改到, 便會發生錯誤 若能善用巨集, 將圓周率使用巨集名稱代替所有的 3.14, 如此修改圓周率時, 只要更改 #define 那一行的圓周率值, 在 main() 主函式或函式內由於使用巨集名稱代替圓周率而不用變更, 使得程式易維護且可讀性高 下表列出常用巨集替換指引寫法 常用巨集替換指引寫法 #define PI 3.14 #define BUFFER_SIZE 4096 #define TAX_RATE 0.05 #define ARRAY_SIZE 20 程式中寫法 printf( %.2f, PI); char buff[buffer_size] total = price*qty*tax_rate char myarray[array_size] #define EQ == if (ch EQ 10) #define EOF (-1) while (ch=getchar()!= EOF) 9-5
6 #define NULL \0 #define msg Please Enter your Name: #define TRUE 1 #define YES 1 #define FALSE 0 #define NO 0 #define TWO 2 #define FOUR TWO*2 #define SECONDS_PER_DAY (60*60*24) if (ch==null) printf(msg); return(true) if(ans ==YES) return(false) if(ans == NO) if(keyin == TWO) sum=four+two tot_scnds=two*seconds_per_day 新的 ANSI C 標準中定義一個 const 修飾字, 其效果和使用 #define 巨集定義符號常數相同, 兩者寫法比較如下 : const float PI=3.1416; /* 尾部必須加分號 */ #define PI /* 尾部不允許加分號 */ 下面是使用巨集定義常數 數學公式 指令代換 函式代換的完整範例, 在程式中能夠活用巨集, 可使得程式易維護且增加程式的可讀性 在 main() 主函式中有使用到巨集的最後面備註, 都寫出該巨集經過前置處理器處理過所轉換敘述的結果, 請看下面例子的示範 程式碼 FileName:macro1.c 01 #include <stdio.h> 02 #include <stdlib.h> 03 #define PI /* 定義常數 */ 04 #define AREA(r) PI*r*r /* 定義數學公式 */ 05 #define INPUT scanf /* 指令代換 */ 06 #define OUTPUT printf /* 指令代換 */ 07 #define MSG "Please input radius :" /* 字串代換 */ 08 #define FMT "The circle area is : %6.2f\n" /* 格式代換 */ 09 #define BEEP "\007" /* 控制字元發出嗶聲代換 */
7 C 的前置處理器 11 int main(int argc, char *argv[]) 12 { 13 int r; 14 OUTPUT(MSG); /* printf("please input radius :"); */ 15 INPUT("%d",&r); /* scanf("%d",&r); */ 16 /* printf("the circle area is : %6.2f\n",3.1416*r*r); */ 17 OUTPUT(FMT,AREA(r)); 18 OUTPUT(BEEP); /* printf("\007"); */ 19 system("pause"); 20 return 0; 21 } 執行結果 巨集使用引數 巨集使用引數 (Argument) 看起來和函式很相似, 由於引數都用小括號括起來 也可在巨集中再插入巨集變成巢狀巨集 譬如下列敘述都是典型的引數範例 : #define SQR ((x)*(x)) /* 某數的平方 */ #define CUBE (SQR(x)*(x)) /* 某數的立方 */ #define ABS(x) ((x)<0? (x):(x)) /* 取絕對值 */ #define MAX2(x,y) ((x)>(y)?(x):(y)) /* 兩數取最大 */ #define MIN2(x,y) ((x)<(y)?(x):(y)) /* 兩數取最小 */ #define MIN3(x,y,z) MIN(x,MIN(y,z)) /* 三數取最小 */ #define MIN4(w,x,y,z) MIN(MIN(w,x),MIN(y,z)) /* 四數取最小 */ #define EQ(x,y) (x=y) 9-7
8 #define swap(x,y) (EQ(t,x),EQ(x,y),EQ(y,t)) /* 記得 main() 中要宣告 x,y,t */ 撰寫上面含有引數的巨集時, 加上小括號要格外小心, 由於小括號會改變運算先後次序, 稍不注意可能會發生意想不到的結果, 撰寫時應留意 譬如 : 下表是含有引數的巨集, 用來計算某數的平方, 引數加小括號的位置不同而產生不同的運算結果 : 引數 x #define SQR(x) x*x #define SQR(x) (x)*(x) 4 SQR(4) 4*4=16 SQR(4) (4)*(4)=16 x=4 SQR(x+2) x+2*x+2=16 SQR(x+2) (x+2)*(x+2)=6*6=36 x=4 SQR(++x) ++x*++x=5*6=30 SQR(++x) (++x)*(++x)=5*6= /SQR(4) 160/4*4=10 160/SQR(4) 160/(4)*(4)=160 引數 x #define SQR(x) (x*x) #define SQR(x) ((x)*(x)) 4 SQR(4) (4*4)=16 SQR(4) ((4)*(4))=16 x=4 SQR(x+2) ( x+2*x+2)=16 SQR(x+2) ((x+2)*(x+2))=6*6=36 x=4 SQR(++x) (++x*++x)=5*6=30 SQR(++x) ((++x)*(++x))=5*6= /SQR(4) 160/(4*4)=10 160/SQR(4) 160/((4)*(4))= 巨集的副作用 由上表可看到在定義含有引數的巨集時, 引數內加入小括號使用時要小心, 以免巨集經過替換成敘述後, 運算後的結果與預期不一樣即產生副作用 (Side Effect) 譬如上表中求某數的平方: #define SQR(x) x*x printf( %d, SQR(2+6)); 執行結果為 40, 並不是您想要的 8 2 = 64 主要由於上面 printf() 函式內的巨集經過前置處理後變成 : 9-8
9 C 的前置處理器 printf( %d, 2+6 * 6+2); printf( %d, ) 結果顯示 40 x * x 若將上面定義巨集時, 替換字元使用括號括住 寫成 : #define SQR(x) (x)*(x) printf( %d, SQR(2+6)); 上面 printf() 函式內的巨集經過前置處理後, 小括號內的運算事先處理, 替換後變成 : printf( %d, (2+6) * (6+2) ); printf( %d, 8*8) 結果顯示 64 (x) * (x) 所以, 在引數前後加上小括號, 才能得到正確的結果 巨集與函式的差異 設計程式時, 有很多地方可使用含有引數的巨集或是使用函式, 到底應選擇哪種方式撰寫, 我們可由時間 (Time) 和空間 (Space) 兩方面來考慮 : 1. 由於巨集在編譯前先進行前處理時, 會將巨集進行代換變成程式中的敘述 由上節附表中可知巨集引數稍微使用不當易引起副作用 至於函式則不會發生此種現象 2. 若在程式中使用到 10 次巨集, 在進行編譯前, 前處理器會進行取代的動作, 因此較費時一點 但執行時不必像呼叫函式時, 必須跳到函式所在處, 待執行完再返回原呼叫處的下一個敘述, 因此巨集執行時間較快, 但程式空間加長 3. 若在程式中呼叫函式 10 次, 只要在程式中留下一份函式的拷貝, 呼叫函式時跳到函式所在處, 待執行完再返回原呼叫處的下一個敘述, 因此函式比巨集較花費時間, 也就是說函式執行時間較慢, 但程式長度不會加長 9-9
10 4. 函式在編譯時會做參數檢查 ; 巨集指引編譯前己變成敘述, 所以不會做參數檢查 本範例主要目的在熟悉含有引數巨集的巢狀用法 macro2.c 範例製作一個功能表選項, 選 1 時, 顯示兩數的最大值 選 2 時, 顯示三數的最大值 選 3 時, 顯示四數的最大值 選 0 時結束程式執行 程式碼 FileName:macro2.c 01 #include <stdio.h> 02 #include <stdlib.h> 03 #define ZERO 0 04 #define ONE 1 05 #define TWO 2 06 #define THREE 3 07 #define EQU == 08 #define GREATER > 09 #define LESS < 10 #define MAX2(x,y) ((x)>(y)? (x):(y)) 11 #define MAX3(x,y,z) MAX2(x,MAX2(y,z)) 12 #define MAX4(w,x,y,z) MAX2(MAX2(w,x),MAX2(y,z)) int main(int argc, char *argv[]) 15 { 16 int a=10,b=8,c=30,d=15; 17 int ch; 18 printf("\n ===== Choose Maxinum ====="); 19 printf("\n 1. Compare two numbers "); 20 printf("\n 2. Compare three numbers "); 21 printf("\n 3. Compare four numbers"); 22 printf("\n 0. Quit :"); 23 printf("\n ================================"); 24 printf("\n Please Choose Number [0-3] : "); 25 scanf("%d",&ch); 26 if (ch EQU ZERO) 27 { 28 exit(0); 29 } 30 else 9-10
11 C 的前置處理器 31 { 32 if (ch > 3 ch < 1) 33 { 34 printf(" Error!! Please Keyin 1-3 "); 35 } 36 else 37 { 38 switch (ch) 39 { 40 case ONE: 41 printf(" The MAX(%d,%d) is : %d \n", 42 a, b, MAX2(a,b)); 43 break; 44 case TWO: 45 printf(" The MAX(%d,%d,%d) is : %d \n", 46 a,b,c, MAX3(a,b,c)); 47 break; 48 case THREE: 49 printf(" The MAX(%d,%d,%d,%d) is : %d \n", 50 a,b,c,d, MAX4(a,b,c,d)); 51 break; 52 } 53 } 54 } 55 printf("\n"); 56 system("pause"); 57 return 0; 58 } 執行結果 9-11
12 由上可知, 在編譯前經過前置處理器會將程式中的巨集直接轉換成所指定的敘述 和函式比較起來, 使用巨集可以省掉程式執行時再去呼叫函式的時間, 以縮短程式的執行時間, 增加程式的可讀性及效率 因此定義巨集可以替代一些簡單的運算式或單行的簡單函式, 而函式則適用於較複雜的功能 9.4 自訂標頭檔 含入標頭檔 假若您寫了一些好用的巨集或函式, 當您在撰寫新的程式時, 需要用到一些裡面的巨集, 難道需要再打一次嗎? 答案是不! 您可以將這些巨集單獨存成一個附檔名 *.h 的標頭檔 (Header File), 透過 C 語言本身所提供的 #include 檔案含入指引, 在編譯前進行前處理, 將指定的標頭檔含入到該程式中, 便可直接套用 至於標頭檔的寫法有下列兩種方式 : #include <filename.h> /* 使用角括號括住 */ #include filename.h /* 使用冒號括住 */ 若 #include 後面是使用角括號括住標頭檔, 是用來告訴前置處理器, 到系統預設的資料夾去尋找指定的標頭檔 若使用雙冒號括住標頭檔, 告知前置處理器先到您目前正在使用的資料夾去尋找指定的標頭檔, 若找不到才會到系統預設的資料夾去尋找指定的標頭檔 兩者都會將找到的標頭檔內的所有敘述取代 #include 這行指引 標頭檔一般都是用來存放 C 的符號常數或巨集代換, 以提供給多個程式使用 所以,#include 指引能在一個原始檔案中載入另一個檔案 譬如 : 若您大部份時間都撰寫以數學為主的程式, 那麼就可以將常用的數學公式做成巨集放在一個標頭檔內, 以供日後設計新程式時, 只要使用 #include 9-12
13 C 的前置處理器 含入該標頭檔到此程式中, 不必再重寫這些巨集 C 語言自己本身提供許多標準的標頭檔, 下表列舉系統所提供常用的標準標頭檔所對應的內建函式, 使用下列函式時要記得含入對應的標頭檔 關於這些函式的語法功能, 請自行參閱附錄 C 標準標頭檔 使用下列敘述必須含入左側的標頭檔 stdio.h getchar() getc gets() putc() puts() putchar() fopen() fclose() feof() fgetc() fgets() fprintf() sprintf() fread() fputc() fputs() fwrite() fscanf() fseek() stdlib.h abs() rand() srand() atof() atoi() free() malloc() exit() time.h clock() ctime() time() ctype.h isdigit() islower isupper tolower() toupper() ispunct() isctrl() isalnum() isalpha() string.h strcat() strcmp() strcpy() strlen() strncpy() strtok() strncpy() strncmp() strncat() math.h sqrt() pow() exp() log() log10() floor() ceil() fabs() sin() cos() tan() asin acos() atan [ 簡例 1] 若 macro1.h 標頭檔與 C 語言的 main() 主函式放在相同資料夾下, 則主函式 main() 含入標頭檔時, 只須指定標頭檔檔案名稱即可, 其寫法如下 : #include macro1.h [ 簡例 2] 若自訂標頭檔 macro2.h 放在 C:\macro 資料夾下, 且不與 C 語言的主程式放在相同資料夾下, 則 main() 主函式含入自訂標頭檔時必須指定該標頭檔完整的實際路徑, 其寫法如下 : #include c:\macro\macro2.h 9-13
14 9.4.2 標頭檔的建立 將上一節 macro2.c 程式中第 3-12 行所定義的巨集存成一個標頭檔, 檔名為 my.h 請按照下列步驟, 學習如何在 Dev C++ 環境下建立標頭檔其檔名為 my.h 這個範例我們會使用兩個程式檔, 分別是 my.h 為自訂標頭檔 ; headerfile.c 為主程式, 並在 headerfile.c 含入 my.h 本例的執行結果與範例 macro2.c 相同 分析 Step1 以 Windows XP 作業系統的環境為主, 執行 [ 開始 / 所有程式 (P)/ Bloodshed Dev-C++/Dev-C++], 此時即進入 Dev-C++ 整合開發環境內 接著請按鈕, 將 每日提示 視窗關閉 Step2 請依下圖步驟指示, 新增 Console Application 類型的 C 專案 請執行功能表的 [ 檔案 (F)/ 開新檔案 (N)/ 專案 (P) ] 指令開啟 建立新專案 的對話方塊 在 建立新專案 對話方塊中切換到 Basic 標籤頁, 然後選擇要新增的專案的類型為 Console Application, 再選取 C 專案, 專案名稱設為 headerfile, 再按鈕 專案名稱為 headerfile 9-14
15 C 的前置處理器 接著出現 Create new project 對話方塊, 請將 headerfile.dev 專案儲存在 C:\devC\ch09\headerfile 資料夾下, 最後再按鈕 新增專案後, 預設會有一個未存檔的 main.c 程式 請先執行功能表的 [ 檔案 (F)/ 關閉 (C)] 指令將 main.c 程式檔關閉 Step3 依下圖步驟在 headerfile.dev 專案中新增 my.h 標頭檔, 最後將 my.h 儲存在 C:\devC\ch09\headerfile 資料夾下 請執行功能表的 [ 檔案 (F)/ 開新檔案 (N)/ 原始碼 (S)] 指令新增檔案 接著出現下面對話方塊詢問是否要將新增檔案加入到目前的專案中, 請按鈕 在新增的檔案中撰寫如下程式碼 (my.h 標頭檔 ) 程式碼 FileName:my.h 01 #define ZERO 0 02 #define ONE 1 03 #define TWO 2 04 #define THREE 3 05 #define EQU == 06 #define GREATER > 07 #define LESS < 08 #define MAX2(x,y) ((x)>(y)? (x):(y)) 09 #define MAX3(x,y,z) MAX2(x,MAX2(y,z)) 10 #define MAX4(w,x,y,z) MAX2(MAX2(w,x),MAX2(y,z)) 9-15
16 執行功能表的 [ 檔案 (F)/ 儲存 (S)] 指令開啟 儲存檔案 對話方塊, 請將上述新增的檔案命名為 my.h, 並將該檔儲存在 C:\devC\ch09\headerfile 資料夾下 Step4 重複上述 Step3, 在 headerfile.dev 專案中再新增 headerfile.c 然後在 headerfile.c 撰寫如下程式碼, 完成之後可執行功能表的 [ 執行 (Z)/ 編譯並執行 (O)] 指令觀看程式的執行結果 程式碼 FileName:headerfile.c 01 #include <stdio.h> 02 #include <stdlib.h> 03 #include "my.h" 04 int main(int argc, char *argv[]) 05 { 06 int a=10,b=8,c=30,d=15; 07 int ch; 08 printf("\n ===== Choose Maxinum ====="); 09 printf("\n 1. Compare two numbers "); 10 printf("\n 2. Compare three numbers "); 11 printf("\n 3. Compare four numbers"); 12 printf("\n 0. Quit :"); 13 printf("\n ================================"); 14 printf("\n Please Choose Number [0-3] : "); 15 scanf("%d",&ch); 16 if (ch EQU ZERO) 17 { 18 exit(0); 19 } 20 else 21 { 22 if (ch > 3 ch < 1) 23 { 24 printf(" Error!! Please Keyin 1-3 "); } 27 else 28 { 9-16
17 C 的前置處理器 29 switch (ch) 30 { 31 case ONE: 32 printf(" The MAX(%d,%d) is : %d \n", 33 a, b, MAX2(a,b)); 34 break; 35 case TWO: 36 printf(" The MAX(%d,%d,%d) is : %d \n", 37 a,b,c, MAX3(a,b,c)); 38 break; 39 case THREE: 40 printf(" The MAX(%d,%d,%d,%d) is : %d \n", 41 a,b,c,d, MAX4(a,b,c,d)); 42 break; 43 } 44 } 45 } 46 system("pause"); 47 return 0; 48 } 說明 1. 第 3 行 : 含入 my.h 標頭檔, 因為我們將 my.h 放在與 headerfile.c 相同路徑下, 所以含入 my.h 不用指定完整的真實路徑 執行結果 9-17
18 為節省篇幅, 關於標頭檔與多個 C 程式檔的新增與建置, 在後面章節我們將省略說明 9.5 條件式編譯指引 如何控制程式的編譯流程 前面章節所介紹的原始程式, 在程式執行前會先經過前置處理, 接著編譯器便無條件照單全收將所有敘述編譯成機器碼 本節將介紹條件編譯指引, 它允許此種指引加在程式中任何地方, 編譯器碰到此類的指引會對程式中的敘述做選擇性的編譯 C 語言提供 #if #elif #else 及 #endif 來控制 程式碼敘述 及 前置處理器 的編譯流程, 也就是說可依條件來選擇要編譯的敘述區段, 此種控制稱為 條件式編譯 (conditional compilation), 其使用方式類似 if else if else 選擇結構 其語法如下 : #if 條件運算式 1 /* 相當於 if */ 敘述 1 /* 當條件運算式 1 成立時, 編譯敘述 1 */ #elif 條件運算式 2 /* 相當於 else if */ 敘述 2 /* 當條件運算式 2 成立時, 編譯敘述 2 */ #elif 條件運算式 3 /* 相當於 else if */ 敘述 3 /* 當條件運算式 3 成立時, 編譯敘述 3 */ #elif 條件運算式 N 敘述 N /* 當條件運算式 N 成立時, 編譯敘述 N */ #else /* 相當於 else */ 敘述 N+1 /* 當上述條件運算式皆不立時會編譯敘述 N+1 */ #endif /* 結束條件式編譯 */ 9-18
19 C 的前置處理器 上述條件式編譯的 #elif 和 else if 一樣可以省略或同時使用多個 ; 而 #endif 不可以省略, 它是用來結束 #if 敘述 條件式編譯和 if else if else 選擇結構的不同處是, 條件式編繹可以根據條件運算式是否成立來選擇所要編譯哪一個程式敘述或前置處理器 ; 而選擇結構是根據條件運算式是否成立來選擇要執行編譯完成的程式敘述 在程式中使用 #undef 條件編譯指引, 便可取消原先使用 #define 定義的巨集 範例 cond.c 本範例我們首先定義巨集 LEVEL 來表示會員的等級, 接著使用 #if #elif #else #endif 選擇所要編譯巨集 ROOM 的房間類型 程式碼 FileName:cond.c 01 #include <stdio.h> 02 #include <stdlib.h> 03 #define LEVEL 2 /* 只要更改數字, 編譯器會依條件選擇編譯 */ 04 #if LEVEL==1 05 #define ROOM " 總統套房 " 06 #elif LEVEL==2 07 #define ROOM " 蜜月套房 " 08 #elif LEVAL==3 09 #define ROOM " 尊爵雙人房 " 10 #else 11 #define ROOM " 山水 / 風情標準房 " 12 #endif 9-19
20 13 14 int main(int argc, char *argv[]) 15 { 16 printf(" === 歡迎光臨 - 華福酒店 ===\n\n"); 17 printf(" 您的會員等級是 %d\n", LEVEL); 18 printf(" 可以住的房間是 %s\n", ROOM); 19 printf("\n"); 20 system("pause"); 21 return 0; 22 } 說明 1. 第 3 行 : 設定巨集 LEVEL 等於 2 2. 第 4-5 行 : 假若 LEVEL 等於 1, 則編繹第 5 行, 並設定巨集 ROOM 的替代內容為 總統套房 字串 3. 第 6-9 行 : 方式同第 4-5 行 4. 第 行 : 若 LEVEL 不等於 1, 2, 3, 則會編譯第 11 行, 設定巨集 ROOM 的替代內容為 山水 / 風情標準房 字串 5. 第 12 行 : 結束 #if 如何判斷巨集是否定義 C 語言還可以使用 #ifdef #ifndef #else #endif 來判斷巨集是否已經定義完成 其中 #ifdef 用來判斷巨集是否已經定義 ; 而 #ifndef 用來判斷巨集是否還末定義 其語法如下 語法 1: 若巨集 A 定義完成則編繹敘述 1, 否則編繹敘述 2 #ifdef 巨集 A 敘述 1 #else 敘述 2 #endif 語法 2: 若巨集 A 還末定義則編繹敘述 1, 否則編繹敘述 2 #ifndef 巨集 A 敘述 1 #else 敘述 2 #endif 9-20
21 C 的前置處理器 譬如下面 define1.c 範例中第 3 行有定義 IBM_NB 巨集, 由於第 11 行檢查 IBM_NB 巨集是否有定義, 結果滿足條件, 因此會編譯第 12 行, 跳過第 14 行 接著第 16 行使用 #undef 取消 IBM_NB 巨集 第 18 行檢查 IBM_NB 是否未定義, 由於條件成立編譯第 19 行, 跳過第 21 行 程式碼 FileName:define1.c 01 #include <stdio.h> 02 #include <stdlib.h> 03 #define IBM_NB #define ACER_NB #define MSG1 " \n IBM NoteBook's Price : %d " 06 #define MSG2 " \n IBM_NB 未定義 " 07 #define MSG3 " \n ACER NoteBook's Price : %d " int main(int argc, char *argv[]) 10 { 11 #ifdef IBM_NB /* 是否有定義 IBM_NB 巨集, 滿足條件 */ 12 printf(msg1,ibm_nb); /* 編譯此行 */ 13 #else 14 printf(msg2,acer_nb); /* 跳過此行 */ 15 #endif 16 #undef IBM_NB /* 取消第 3 行 IBM_NB 巨集定義 */ #ifndef IBM_NB /* 是否未定義 IBM_NB 巨集, 滿足條件 */ 19 printf(msg2); /* 編譯此行 */ 20 #else 21 printf(msg3,acer_nb); /* 跳過此行 */ 22 #endif 23 printf("\n\n"); 24 system("pause"); 25 return 0; 26 } 9-21
22 執行結果 #undef 可用來取消巨集的定義, 其語法如下 : 語法 :#undef 巨集名稱 9.6 實例 - 書籍介紹 範例 book.dws 試使用 #if #elif #else #endif 條件式編譯指引, 根據主函式中所定義的 ID 巨集 ID 值來選擇要含入 flash.h java.h office.h vb.h 中哪個書籍資訊的標頭檔 9-22
23 C 的前置處理器 提示 本範例分別將四本書的相關資訊存入 flash.h java.h office.h vb.h 標頭檔, 這些標頭裡面分別定義 BNAME LEVEL PRICE SERIES 巨集名稱來表示書籍的書名 等級 單價 種類 在 book.c 主程式中含入 selectbook.h 標頭檔, 然後在 selectbook.h 中使用 #if #elif #else #endif 指令根據 main() 主函式內巨集 ID 的設定值來選擇要到底要含入 flash.h java.h office.h vb.h 哪個標頭檔 標頭檔 FileName:flash.h 01 #define BNAME "Flash CS3 程式設計經典 " 02 #define LEVEL " 初 - 中階 " 03 #define PRICE #define SERIES " 多媒體網頁程式設計 " 標頭檔 FileName:java.h 01 #define BNAME "Java SE 6 程式設計經典 " 02 #define LEVEL " 初 - 進階 " 03 #define PRICE #define SERIES " 程式設計 " 標頭檔 FileName:office.h 01 #define BNAME "Office XP 實戰 " 02 #define LEVEL " 初階 " 03 #define PRICE #define SERIES " 辦公室應用 " 標頭檔 FileName:vb.h 01 #define BNAME "Visual Basic 2008 程式設計經典 " 02 #define LEVEL " 初階 - 中階 " 03 #define PRICE #define SERIES " 程式設計 " 9-23
24 標頭檔 FileName:selectbook.h 01 #if ID==1 /* 若 ID 等於 1 則含入 flash.h */ 02 #include "flash.h" 03 #elif ID==2 /* 若 ID 等於 2 則含入 java.h */ 04 #include "java.h" 05 #elif ID==3 /* 若 ID 等於 3 則含入 office.h */ 06 #include "office.h" 07 #else /* 若 ID 不等於 1~3, 則含入 vb.h */ 08 #include "vb.h" 09 #endif 程式碼 FileName:book.c 01 #include <stdio.h> 02 #include <stdlib.h> 03 #define ID 4 /* 設定巨集 ID 為 4 此行為彈性 */ 04 #include "selectbook.h" /* 含入 selectbook.h 標頭檔 */ int main(int argc, char *argv[]) 07 { 08 printf(" ==== 經典系列書籍 ==== \n\n"); 09 printf(" 書名 :%s \n", BNAME); 10 printf(" 等級 :%s \n", LEVEL); 11 printf(" 定價 :%d \n", PRICE); 12 printf(" 種類 :%s \n", SERIES); 13 system("pause"); 14 return 0; 15 } 9.7 習題 一. 選擇題 ( ) 1. 定義巨集必須使用下列哪一個指令? (1) #include (2) #define (3) #if (4) #elif 9-24
25 C 的前置處理器 ( ) 2. 定義巨集的替代內容, 請問可以使用幾行敘述? (1) 1 (2) 2 (3) 3 (4) 無限 ( ) 3. 要含入標頭檔必須使用下列哪一個指令? (1) #include (2) #define (3) #if (4) #elif ( ) 4. 巨集可以定義在那些位置? (1) 標頭檔函式定義中間 (2) 沒有限制 (3) C 程式檔最後面 (4) C 程式檔最前面 ( ) 5. #define CUBE(x) x*x*x printf( %d, CUBE(2)); 上述程式會印出多少? (1) 2 (2) 4 (3) 6 (4) 8 ( ) 6. #define CUBE(x) x*x*x int n=3; printf( %d, CUBE(++n)); 上述程式會印出多少? (1) 27 (2) 60 (3) 120 (4) 以上皆非 ( ) 7. 以下何者正確?( 複選 ) (1) 巨集定義最後必須有分號做結尾 (2) 巨集名稱與替代內容或運算式必須使用空白來區隔 (3) 巨集的執行速度快, 所以可以完全使用巨集來代替函式 (4) 巨集定義必須寫在一行 ( ) 8. 判斷巨集是否有定義可以使用? (1) #if (2) #ifdef (3) #ifndef (4) #else ( ) 9. 下列那些不是條件式編譯所使用的敘述? (1) #if (2) if (3) #elif (4) #endif ( ) 10. 若巨集要傳入引數, 最好使用什麼符號將引數括住? (1) () (2) [] (3) ** (4) /* */ 9-25
26 ( ) 11. 編譯器主要做那些工作?( 複選 ) (1) 前置處理 (2) 編譯 (3) 組譯 (4) 解碼 ( ) 12. 當編譯器做組譯處理時會產生? (1) *.c (2) *.exe (3) *.obj (4) *.html ( ) 13. 前置處理指引允許放在?( 複選 ) (1) 任可位置 (2) main 函式之前 (3) 自訂函式之前 ( ) 14. 巨集之後必須? (1) 加上 ; (2) 加上 () (3) 加上 [] (4) 不可加上任可字元 ( ) 15. 下面哪些函式不屬於 stdio.h 標頭檔內所宣告的函式? (1) getc (2) fputs (3) isdigit (4) fread 二. 簡答題 1. 試簡述巨集與函式的差異? 2. 試簡述 #if #elif #else #endif 與選擇結構的差異 3. C 語言在編譯過程中, 主要做了那些工作 三. 程式設計 1. 定義攝氏轉華氏以及華氏轉攝氏的計算溫度巨集 公式如下 : 攝氏轉華氏公式 : 華氏溫度 *9/5+32 華氏轉攝氏公式 :( 攝氏溫度 -32)*5/9 2. 撰寫巨集 SEARCH_MIN3 可找出三個數值中的最小值 ; 撰寫巨集 SEARCH_MAX3 可找出三個數值中的最小值 9-26
新・明解C言語入門編『索引』
!... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177
C/C++ - 文件IO
C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;
新版 明解C++入門編
511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,
CC213
: (Ken-Yi Lee), E-mail: [email protected] 177 [P179] (1) - [P181] [P182] (2) - for [P183] (3) - switch [P184] [P187] [P189] [P194] 178 [ ]; : : int var; : int var[3]; var 2293620 var[0] var[1] 2293620
_汪_文前新ok[3.1].doc
普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向
Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2
Chapter 02 變數與運算式 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.2 2.2.1 2.2.2 2.2.3 type 2.2.4 2.3 2.3.1 print 2.3.2 input 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 + 2.4.6 Python Python 2.1 2.1.1 a p p l e b e a r c 65438790
C/C++语言 - 分支结构
C/C++ Table of contents 1. if 2. if else 3. 4. 5. 6. continue break 7. switch 1 if if i // colddays.c: # include int main ( void ) { const int FREEZING = 0; float temperature ; int cold_ days
C/C++ 语言 - 循环
C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf
C
C 14 2017 5 31 1. 2. 3. 4. 5. 2/101 C 1. ( ) 4/101 C C ASCII ASCII ASCII 5/101 C 10000 00100111 00010000 ASCII 10000 31H 30H 30H 30H 30H 1 0 0 0 0 0 ASCII 6/101 C 7/101 C ( ) ( ) 8/101 C UNIX ANSI C 9/101
( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)
( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.
CC213
: (Ken-Yi Lee), E-mail: [email protected] 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++
C 1
C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=
CH09
(Preprocessor) (Macro) C++ (#) 9-1 9-2 9-3 9-4 備註 : 可依進度點選小節 9-1 前置處理器 (Preprocessor) 9-1 前置處理器 (Preprocessor) 在上圖中, 為了開發一個大型的應用程式所需的 include 檔案 原始檔案都不一定只有一個 而在連結過程當中所加入的其它目的檔案也可以是 0 到多個, 但它的副檔名不一定只有.obj,
Microsoft PowerPoint - 20-string-s.pptx
String 1 String/ 1.: char s1[10]; char *s2; char s3[] = "Chan Tai Man"; char s4[20] = "Chan Siu Ming"; char s5[]={'h','e','l','l','o','\0'; 0 1 2 3 4 5 6 7 8 9 10 11 12 s3 C h a n T a i \0 M a n \0 printf
nooog
C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1
untitled
Introduction to Programming ( 數 ) Lecture 3 Spring 2005 March 4, 2005 Lecture 2 Outline 數 料 If if 狀 if 2 (Standard Output, stdout): 料. ((Standard Input, stdin): 料. 類 數 數 數 說 printf 見 數 puts 串 數 putchar
1 2005 9 2005,,,,,,,,,, ( http: \ \ www. ncre. cn,, ) 30,,,,,,,, C : C : : 19 : 100081 : : 7871092 1 /16 : 8. 75 : 96 : 2005 11 1 : 2005 11 1 : ISBN 7
1 2005 9 2005,,,,,,,,,, ( http: \ \ www. ncre. cn,, ) 30,,,,,,,, C : C : : 19 : 100081 : : 7871092 1 /16 : 8. 75 : 96 : 2005 11 1 : 2005 11 1 : ISBN 7-80097 - 564-9 /TP 8 : 10. 00 ,,,, 1994 NCRE,,, ( ),,,,,
The golden pins of the PCI card can be oxidized after months or years
Q. 如何在 LabWindows/CVI 編譯 DAQ Card 程式? A: 請參考至下列步驟 : 步驟 1: 安裝驅動程式 1. 安裝 UniDAQ 驅動程式 UniDAQ 驅動程式下載位置 : CD:\NAPDOS\PCI\UniDAQ\DLL\Driver\ ftp://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/dll/driver/
C
C 2017 4 1 1. 2. while 3. 4. 5. for 6. 2/161 C 7. 8. (do while) 9. 10. (nested loop) 11. 12. 3/161 C 1. I 1 // summing.c: 2 #include 3 int main(void) 4 { 5 long num; 6 long sum = 0L; 7 int status;
C/C++程序设计 - 字符串与格式化输入/输出
C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int
C, Win-TC Turbo C,, C, C,,,, C C, : Win-TC C, 23,,, 15,, C Turbo C Win-TC Turbo C,,,, 2005 1 W in -TC 1 Win-TC 1 1. Win-TC 1 2. Win-TC 1 3. Win-TC 1 2 Win-TC 3 1. 3 2. 3 3. 4 4. 4 5. 4 6. 4 7. 5 8. 5 9.
840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00
Excel - - Excel - -4-5 840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00 ( 0 ) 智慧標籤 相關說明提示 -5 -- Excel 4 5 6 7 8 + - * / % ^ = < >= & 9 0 (:) (,) ( ) Chapter - :,
FY.DOC
高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主
Microsoft Word - ACL chapter02-5ed.docx
第 2 章神奇的質數 2.1.1 什麼是質數 1 1 1 打下好基礎 - 程式設計必修的數學思維與邏輯訓練 1 1 0 10 2 3 5 7 4 6 8 9 10 4 10000 1229 1000 168 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131
C C
C C 2017 3 8 1. 2. 3. 4. char 5. 2/101 C 1. 3/101 C C = 5 (F 32). 9 F C 4/101 C 1 // fal2cel.c: Convert Fah temperature to Cel temperature 2 #include 3 int main(void) 4 { 5 float fah, cel; 6 printf("please
Ps22Pdf
( 98 ) C ( ) ( )158 1998 C : C C C,,, C,, : C ( ) : : (, 100084) : : : 7871092 1/ 16 :18 25 :415 : 2000 3 1 2000 3 1 : ISBN 7 302 01166 4/ T P432 : 00016000 : 22 00 ( 98 ) 20 90,,, ;,,, 1994, 1998, 160,
Microsoft Word - chap13.doc
ï FILE dã Ä o rô qî ô Ö ƒù å o ô ÃÓ FILE Ã Ù Ö o v-> ª w ï FILE d wã +1 ~ c:\temp w Õx test.dat Ã Û vä à n ïw à test.dat 13-2a /* File name: ex13-2a.c */ #include char ch; fptr = fopen("c:\\temp\\test.dat",
C/C++语言 - C/C++数据
C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;
C/C++ Basics
第 十章 檔案輸入與輸出 講師 : 李根逸 (Ken-Yi Lee), E-mail: [email protected] 265 課程 大綱 與作業系統或其他軟體溝通 (API) [P267] 檔案相關函式表 [P268] 開啟與關閉檔案 (fopen, fclose) 讀寫純 文字檔 (fscanf, fprintf) 讀寫 二進位檔 (fread, fwrite) 前置處理器
上海市教育考试院关于印发新修订的
沪 教 考 院 社 考 2012 7 号 上 海 市 教 育 考 试 院 关 于 印 发 上 海 市 高 等 学 校 计 算 机 等 级 考 试 大 纲 (2012 年 修 订 ) 的 通 知 各 有 关 高 校 : 为 进 一 步 加 强 本 市 高 校 计 算 机 基 础 教 学 工 作, 推 进 学 校 更 加 科 学 合 理 地 设 置 计 算 机 基 础 课 程 及 安 排 教 学 内 容,
CC213
: (Ken-Yi Lee), E-mail: [email protected] 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,
C/C++ Programming
!281 第 十講 檔案輸入與輸出 講師 : 李根逸 (Ken-Yi Lee), E-mail: [email protected] !282 課程 大綱 與作業系統或其他軟體溝通 (API) [P.283] 檔案相關函式表 [P.284] 開啟與關閉檔案 (fopen, fclose) 讀寫純 文字檔 (fscanf, fprintf) 讀寫 二進位檔 (fread, fwrite)
2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d
2013 18 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp, Compilation Error cin scanf Time Limit Exceeded 1: A 5 B 5 C 5 D 5 E 5 F 5 1 2013 C 1 # include 2 int main ( void ) 3 { 4 int cases, a, b,
第3章.doc
3 3 3 3.1 3 IT Trend C++ Java SAP Advantech ERPCRM C++ C++ Synopsys C++ NEC C C++PHP C++Java C++Java VIA C++ 3COM C++ SPSS C++ Sybase C++LinuxUNIX Motorola C++ IBM C++Java Oracle Java HP C++ C++ Yahoo
1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un
Linux C July 27, 2016 Contents 1 Linux IDE 1 2 GCC 3 2.1 hello.c hello.exe........................... 5 2.2............................... 9 2.2.1 -Wall................................ 9 2.2.2 -E..................................
Microsoft Word - compilation.docx
Translators 翻譯程序 (Assembler 匯編, Compiler 編譯, Interpreter 解釋程序 ) Why translator is needed? Execution 可以執行 機器碼 不同機器平台 不能執行 Source code 源程序, intermediate code 目標程序, executable code 執行檔 / 機器碼 源程序目標程序執行檔 /
C++ 程式設計
C C 料, 數, - 列 串 理 列 main 數串列 什 pointer) 數, 數, 數 數 省 不 不, 數 (1) 數, 不 數 * 料 * 數 int *int_ptr; char *ch_ptr; float *float_ptr; double *double_ptr; 數 (2) int i=3; int *ptr; ptr=&i; 1000 1012 ptr 數, 數 1004
untitled
A, 3+A printf( ABCDEF ) 3+ printf( ABCDEF ) 2.1 C++ main main main) * ( ) ( ) [ ].* ->* ()[] [][] ** *& char (f)(int); ( ) (f) (f) f (int) f int char f char f(int) (f) char (*f)(int); (*f) (int) (
[改訂新版]C言語による標準アルゴリズム事典
iii C 1991 SEND + MORE = MONEY C 100 2003 Java 2003 27 PC-9800 C BMP SVG EPS BMPSVG WindowsMacLinux Web iv int main() int main(void) EXIT_SUCCESS 0 https://github.com/okumuralab/ algo-c TEX TEX PDF PDF
Ps22Pdf
C ( CIP) C /. :, 2001. 7 21 ISBN 7-5624 -2355-5. C........ C. TP312 CIP ( 2001 ) 034496 C * * : 7871092 1 /16 : 14. 25 : 356 20017 1 20017 1 : 1 6 000 ISBN 7-5624-2355-5 / TP311 : 21. 00 C, C,,,, C,, (
Microsoft PowerPoint - ch11.ppt
11 前處理指令 前處理指令可以要求前處理器 (preprocessor) 在程式編譯之前, 先進行加入其它檔案的內容 文字取代以及選擇性編譯等工作 1/39 前處理指令 11.1 11.2 11.3 11.4 11.5 前處理器使用 #define 進行文字取代使用 #define 設定巨集指令條件式編譯其他與編譯器有關的前處理指令 2/39 3/39 前處理指令 #include 前處理指令不是
C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9
201 201 21 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 1 B 1 C 5 D RPG 10 E 10 F 1 G II 1 1 201 201 C 1 # include 2 int main ( void
Microsoft PowerPoint - chap8.ppt
第八章巨集 資訊科技系 林偉川 本章簡介 所謂巨集, 就是用 #define 的語法定義一個簡短巨集名稱來取代一長串的算式 根據前處理指令 #define 會由前置處理器處理, 也就是說在前置處理過程中, 巨集名稱都會被代換成指定的算式 2 1 使用巨集的方法 巨集是一種方便的程式設計方式, 在程式中看到簡短的名稱, 就知道是代表那段長的敘述 定義巨集 定義巨集的位置 巨集取代算式 3 定義巨集 使用巨集名稱前,
Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp
01 1.6 Spyder Anaconda Spyder Python Spyder Python Spyder Spyder 1.6.1 Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Spyder Python File
epub 33-8
8 1) 2) 3) A S C I I 4 C I / O I / 8.1 8.1.1 1. ANSI C F I L E s t d i o. h typedef struct i n t _ f d ; i n t _ c l e f t ; i n t _ m o d e ; c h a r *_ n e x t ; char *_buff; /* /* /* /* /* 1 5 4 C FILE
資料結構之C語言重點複習
鏈結串列自編教材 ( 一 ) 本教材 ( 一 ) 目標問題 : 每次以亂數產生一 [0,1000] 之整數值, 若該值 >100, 則以同方式繼續產生下一亂數值, 若該值
四川省普通高等学校
四 川 省 普 通 高 等 学 校 计 算 机 应 用 知 识 和 能 力 等 级 考 试 考 试 大 纲 (2013 年 试 行 版 ) 四 川 省 教 育 厅 计 算 机 等 级 考 试 中 心 2013 年 1 月 目 录 一 级 考 试 大 纲 1 二 级 考 试 大 纲 6 程 序 设 计 公 共 基 础 知 识 6 BASIC 语 言 程 序 设 计 (Visual Basic) 9
How to Debug Tuxedo Server printf( Input data is: %s, inputstr); fprintf(stdout, Input data is %s, inputstr); fprintf(stderr, Input data is %s, inputstr); printf( Return data is: %s, outputstr); tpreturn(tpsuccess,
10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD
10 SCJD 簡介 Java 10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD 10 SCJD 10-3 Java Java SCJD 7 Swing RMI 10.1.1 The Assignment The Essay 9 10 10-4 SCJP SCJD 90 10.1.2 SCJP Java 90 120 Swing 10
Microsoft PowerPoint - OPVB1基本VB.ppt
大 綱 0.VB 能 做 什 麼? CH1 VB 基 本 認 識 1.VB 歷 史 與 版 本 2.VB 環 境 簡 介 3. 即 時 運 算 視 窗 1 0.VB 能 做 什 麼? Visual Basic =>VB=> 程 式 設 計 語 言 => 設 計 程 式 設 計 你 想 要 的 功 能 的 程 式 自 動 化 資 料 庫 計 算 模 擬 遊 戲 網 路 監 控 實 驗 輔 助 自 動
Microsoft Word - 11.doc
除 錯 技 巧 您 將 於 本 章 學 到 以 下 各 項 : 如 何 在 Visual C++ 2010 的 除 錯 工 具 控 制 下 執 行 程 式? 如 何 逐 步 地 執 行 程 式 的 敘 述? 如 何 監 看 或 改 變 程 式 中 的 變 數 值? 如 何 監 看 程 式 中 計 算 式 的 值? 何 謂 Call Stack? 何 謂 診 斷 器 (assertion)? 如 何
Excel VBA Excel Visual Basic for Application
Excel VBA Jun5,00 Sub 分頁 () Dim i As Integer Dim Cname As String Dim Code As Variant Set score=thisworkbook.sheets("sheet") Code=Array(" 專北一 "," 專北二 "," 專北三 "," 專桃園 "," 專桃竹 "," 專中苗 ", " 專台中 "," 專台南 ","
Java 程式設計初階 第 5 章:基本輸出入 & 流程控制
Java 程式設計 標準輸出入與流程控制 本章大綱 標準輸出入 (Standard I/O) 分支 (Branch) if ~ else switch ~ case 迴圈 (Loop) for while do ~ while 中斷指令 break continue 總整理 標準輸出 定義 : 將資料印到螢幕上 Java 標準輸出指令 System.out.println( 資料 ) 將資料印出後換行
0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1
0 0 = 1 0 = 0 1 = 0 1 1 = 1 1 = 0 0 = 1 : = {0, 1} : 3 (,, ) = + (,, ) = + + (, ) = + (,,, ) = ( + )( + ) + ( + )( + ) + = + = = + + = + = ( + ) + = + ( + ) () = () ( + ) = + + = ( + )( + ) + = = + 0
BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2
PowerBuilder 9 PowerBuilder Native Interface(PBNI) PowerBuilder 9 PowerBuilder C++ Java PowerBuilder 9 PBNI PowerBuilder Java C++ PowerBuilder NVO / PowerBuilder C/C++ PowerBuilder 9.0 PowerBuilder Native
投影片 1
資料庫管理程式 ( 補充教材 -Part2) 使用 ADO.NET 連結資料庫 ( 自行撰寫程式碼 以實現新增 刪除 修改等功能 ) Private Sub InsertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsertButton.Click ' 宣告相關的 Connection
1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File
51 C 51 51 C C C C C C * 2003-3-30 [email protected] C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 - 1 Project New Project 1 2 Windows 1 3 N C test
3.1 num = 3 ch = 'C' 2
Java 1 3.1 num = 3 ch = 'C' 2 final 3.1 final : final final double PI=3.1415926; 3 3.2 4 int 3.2 (long int) (int) (short int) (byte) short sum; // sum 5 3.2 Java int long num=32967359818l; C:\java\app3_2.java:6:
Microsoft PowerPoint - C-Ch12.ppt
檔案的輸入 輸出 12-1 輸入 輸出的基礎 理解資料流 (stream) 的概念 在 C 語言中支援各種輸出入功能的概念, 就稱為資料流 執行附加格式的輸入 輸出 printf() 和 scanf() 是用來輸出 輸入的函數 必須先引入 stdio.h 檔案才能使用這些函數 這兩個函數會以固定的格式進行輸出入, 也可以使用各種不同的轉換規格 使用固定格式的輸出 輸入函數之範例 : int main(void)
輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4
JAVA Extension 0..\Example\Ch0\ \ T.html..\Example\Ch0\ \ T.txt T.txt..\Example\Ch0\ \ T_Ok.html 提示 :. Marquee Marquee Font Color #FFFFFF BG Color #867bf Width 90 Height 50. T.txt Ctrl+C your scrolling
int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;
Memory & Pointer [email protected] 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,
Microsoft Word - C-pgm-ws2010.doc
Information and Communication Technology 資訊與通訊科技 Loops (while/for) C 廻路 姓名 : 班別 : ( ) CS C Programming #1 Functions 函數 : 1 若 n=14, 求以下表示式的值 Expressions 表示式 Value 值 Expressions 表示式 Value 值 A 20 2 * (n /
2
Dev-C++ 4.0 版的使用 Dev-C++ 4 的安裝 Dev-C++ 4 的使用 Dev-C++ 4 的專案管理 2 Dev-C++ 4 的安裝 Dev-C++ 是 Bloodshed Software 公司的產品, 這是一套功能強大的 C/C++ 語言整合開發環境, 可以開發 Windows 和主控台等應用程式 (Console Applications), 所謂主控台應用程式是在 MS-DOS
C/C++ - 数组与指针
C/C++ Table of contents 1. 2. 3. 4. 5. 6. 7. 8. 1 float candy [ 365]; char code [12]; int states [50]; 2 int array [6] = {1, 2, 4, 6, 8, 10}; 3 // day_mon1.c: # include # define MONTHS 12 int
2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%
2013 ( 28 ) ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 10 B 1 C 1 D 5 E 5 F 1 G II 5 H 30 1 2013 C 1 #include 2 int main(void) 3
Microsoft Word - AEL 序-.doc
三版序 隨著電腦硬體技術不斷地進步, 軟體亦隨著日新月異 而指揮電腦運作的程式語言, 由早期的機器語言 組合語言 FORTRAN COBOL BASIC C PHP Java C++ 和 C# 等, 直不斷演進 其中 C 語言是 個 效率且介於 階和低階之語言, 適合開發各種系統或應用程式, 可攜性及執行效率, 因此很受程式設計師的喜愛, 尤其由 C 延伸出來的 C++ 是屬於物件導向程式語言, 很適合用來開發大型應用程式,
單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e
Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)
Searching and Sorting
Introduction to Programming ( 數 ) Lecture 10 Spring 2005 May 13, 2004 NCCU C prog. 1 Topics More on Strings, Arrays, Pointers Static variables Structure: struct NCCU C prog. 2 Review of String Basics Strings
Microsoft Word - ACI chapter00-1ed.docx
前言 Excel Excel - v - 財務管理與投資分析 -Excel 建模活用範例集 5 相關 平衡 敏感 - vi - 前言 模擬 If-Then 規劃 ERP BI - vii - 財務管理與投資分析 -Excel 建模活用範例集 ERP + BI + ERP BI Excel 88 Excel 1. Excel Excel 2. Excel 3. Excel - viii - 前言 1.
Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc
References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2
主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new
ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,
全国计算机技术与软件专业技术资格(水平)考试
全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明
文件
CH10 文件 1 文件的概念 一 文件分类 二 文件的组织结构 : ASCII 码文件 ( 文本文件 ) 二进制文件 文件是二进制代码的, 则文件就是字节流 文件是 ASCII 码的, 则文件就是字符流, 也是字节流 1 如 : 对于整型变量 x, 其值为 32767 若以文本方式存放, 则共有 5 个字符, 内容为 : 00110011 00110010 00110111 00110110 00110111
C/C++基礎程式設計班
C/C++ 基礎程式設計 字元與字串 講師 : 張傑帆 CSIE, NTU 人的出身並不重要, 你拿時間來做什麼才重要 It s not who you were at birth that matters, but what you do with the time you are given.-steve Jobs 課程大綱 字元 字串 作業 字元 在電腦的世界裡, 所有的一切都是以 0 與 1
untitled
1 DBF (READDBF.C)... 1 2 (filetest.c)...2 3 (mousetes.c)...3 4 (painttes.c)...5 5 (dirtest.c)...9 6 (list.c)...9 1 dbf (readdbf.c) /* dbf */ #include int rf,k,reclen,addr,*p1; long brec,erec,i,j,recnum,*p2;
untitled
不 料 料 例 : ( 料 ) 串 度 8 年 數 串 度 4 串 度 數 數 9- ( ) 利 數 struct { ; ; 數 struct 數 ; 9-2 數 利 數 C struct 數 ; C++ 數 ; struct 省略 9-3 例 ( 料 例 ) struct people{ char name[]; int age; char address[4]; char phone[]; int
Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc
2 5 8 11 0 1. 13 2. 15 3. 18 1 1. 22 2. 25 3. 27 2 1. 35 2. 38 3. 41 4. 43 5. 48 6. 50 3 1. 56 2. 59 3. 63 4. 65 5. 69 13 22 35 56 6. 74 7. 82 8. 84 9. 87 10. 97 11. 102 12. 107 13. 111 4 114 1. 114 2.
######## First set of commands x <- 0.5; y <- 0 if (x>3) y <- 1 else y <- 2 ######## Second set of commands x <- 0.5; y <- 0 if (x>3) y <- 1 else ###
流程控制 : if, for, while, repeat Textbook reading: Chapter 7. 條件執行 :if 指令或 if-else 指令. 當條件 A 為 TRUE 時, 執行命令 C 的語法為 if ( A ) C 當條件 A 為 TRUE 時執行命令 C, 否則執行命令 D 的語法為 if ( A ) C else D A simple example. x
C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1
C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,
TPM BIOS Infineon TPM Smart TPM Infineon TPM Smart TPM TPM Smart TPM TPM Advanced Mode...8
Smart TPM Rev. 1001 Smart TPM Ultra TPM Smart TPM TPM...3 1. BIOS... 3 2. Infineon TPM Smart TPM... 4 2.1. Infineon TPM...4 2.2. Smart TPM...4 3. TPM... 5 3.1. Smart TPM TPM...5 3.2. Advanced Mode...8
Microsoft PowerPoint - STU_C_Lang_CH01.ppt
第 1 章 電腦程式語言介紹 程式設計與生活 - 使用 C 語言 Shi-Huang Chen Spring 2013 1 第 1 章電腦程式語言介紹 1-1 何謂程式設計 1-2 C 語言簡介 1-3 Dev-C++ 5 軟體簡介 1-4 利用 Dev-C++ 5 軟體來建立一支原始程式 2 1-1 何謂程式設計 當人類在日常生活中遇到問題時, 常會開發一些工具來解決它 例如, 發明筆來寫字 發明腳踏車來替代雙腳行走等等
Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089
Photoshop CC Camera Raw Photoshop Camera Raw Step 1 3 1 2 3 SCOTT KELBY Step 2 B Camera Raw 088 Chapter 3 Camera Raw Chapter 3 Camera Raw Step 3-4 -100 negative clarity +25 ] P / -75-50 Step 4 0 ( 下一頁
投影片 1
軟體說明書繁體中文 RGB A 目錄 - CONTENTS 01 09 15 17 22 軟體主介面 巨集設定說明 主介面概觀 個人設定檔 (Profiles) 一般模式 / 遊戲模式 按鍵功能分配 巨集管理器概觀 巨集管理器 巨集錄製設定 巨集錄製時間列表 插入指令 閃移系統 - I.S.S (Instant Shift System) 燈光設定更新韌體 閃移系統啟動鈕設定說明 燈光設定介面 介面區域一
第一篇文概說第七章公文的用語及標點符號公本篇內容 第一章 緒論 第二章 公文的意義 第三章 公文與高 普 特各類考試 第四章 公文程式之意義及演變 第五章 公文之分類及其行文系統 第六章 公文之結構與行款 第一篇 第一章緒論 003 第一章緒論 等 等 004 最新應用公文 第一篇 第二章公文的意義 005 第二章公文的意義 第一節 一 須為公務員製作之文書 二 須為公務員 職務上 製作之文書 006
46 2011 11 467 數位遊戲式學習系統 7 2011 11 467 47 3 DBGameSys 48 2011 11 467 正規化資料模組 如何配置並儲存電子化資料 以 便減少資料被重覆儲存的程序 DBGameSys的主要功能模組包 學習者 審核評分模組 含 正規化資料模組 審核評分 模組 高分列表模組3大區塊 系統資料庫 在正規化資料模組的執行 高分列表模組 過程中 先要求學習者瀏覽遊戲
5. 閱 讀 下 文, 推 斷 內 最 適 合 填 入 的 詞 語 依 序 為 何? 人 也 真 是 一 個 絕 字, 一 邊 向 左, 一 邊 向 右, 一 副 的 樣 子, 偏 又 相 連 著, 各 說 各 話 各 走 各 路, 卻 又 人, 這 麼 一 個 簡 單 的 字, 竟 包 含 如 此
103 學 年 度 四 技 二 專 統 一 入 學 測 驗 國 文 試 題 一 選 擇 題 ( 一 ) 綜 合 測 驗 20 題 1. 下 列 各 組 內 的 字, 何 者 讀 音 不 同? (A) 諮 諏 善 道 / 渡 大 海, 入 荒 陬 (B) 傴 僂 提 攜 / 嘔 啞 嘲 哳 難 為 聽 (C) 跫 音 不 響 / 秋 蟬 兒 噪 罷 寒 蛩 兒 叫 (D) 形 容 枯 槁 / 阿 縞
untitled
1 7 7.1 7.2 7.3 7.4 7.5 2 7.1 VFT virtual 7.1 3 1 1. 2. public protected public 3. VFT 4. this const volatile 4 2 5. ( ) ( ) 7.1 6. no-static virtual 7.2 7. inline 7.3 5 3 8. this this 9. ( ) ( ) delete
Microsoft Word - ACG chapter00c-3ed.docx
Python 好好玩, 趣學電玩遊戲程式設計 Python Python BASIC Java JavaScript PHP C++ BASIC Python Python Python Xbox PlayStation Nintendo - 2 - 簡介 : 互動式 Python Shell : 編寫程式 Python File editor : 猜數字 : 腦筋急轉彎 : 龍域 ( ) : 使用
