next up previous contents
Next: 除錯器 gdb Up: C 預處理器 Previous: 標頭 .h 檔   Contents   DYWANG_HOME

實機練習題

  1. 共同要求:
    1. 在家目錄下建立 zzz 目錄。
    2. 切換工作目錄到 zzz,所有練習皆存在此目錄。
    3. 題目沒要求的,不要多做,除題目輸出範例要求的空白外,不要多加任何空白或空白行。
  2. 撰寫 C 語言程式
    1. 程式 prepro1.c 定義 happy_for(name) 以 stringize # 預處理運算子轉換參數 name 為字串。命令執行外加參數若等於 5 則 name 取代成 Mother,8 則取代成 Father,輸出範例如下,其中日期是使用預定義巨集 __DATA__ 輸出今天的日期 Aug 9 2019,當參數不等於 5 或 8 時,印出「Only 5 8」,印出結束要換行,編譯成可執行檔 prepro1。
      ./prepro1 5 8 3
      Happy Mother's Day! Aug  9 2019
      Happy Father's Day! Aug  9 2019
      Only 5 8
      
    2. 程式 prepro2.c 定義 tokenpast(N) 以 token pasting ## 預處理運算子組合 token 跟 n,宣告 int token1=10, token2=11, token3=21 三個變數,執行 tokenpast(N) 印出 tokenN * 2 = xx,N 由命令執行外加第一個參數取得,且只能 1, 2, 3,其他輸出「only 1 2 3」,輸出如下範例,其中小括號內的日期是使用預定義巨集 __DATA__ 輸出今天的日期。印出結束要換行,編譯成可執行檔 prepro2。
      ./prepro2 1 2 3 5
      token1 * 2 = 20 (Aug  9 2019)
      token2 * 2 = 22 (Aug  9 2019)
      token3 * 2 = 42 (Aug  9 2019)
      Only 1 2 3
      
    3. 程式 prepro3.c 定義 MIN(x,y) 回應較小的數字,x, y 兩個數字由命令執行外加第一及二個參數取得,輸出如下範例,其中小括號內的日期是使用預定義巨集 __DATA__ 輸出今天的日期,當輸入參數有任何一個不是數字,則輸出「x or y NOT a number!」且回傳非 0 的錯誤碼,印出結束要換行,編譯成可執行檔 prepro3。
      ./prepro3 11 22
      MIN between 11 and 22 is 11 (Aug  9 2019)
      ./prepro3 11 a
      11 or a NOT a number!
      
    4. 多檔程式
      1. 在目前錄下建一標頭檔 swap.h。
        void swap(int *x, int *y);
        
      2. 在目前錄下撰寫程式 swap.c 包含函式 swap(*x, *y) 將 x, y 的值對調。
      3. 主程式 prepro4.c 將 swap.h include 進入程式,call for reference 方式呼叫 swap 後印出 x + y*2 的結果,數字 x, y 由命令執行外加第一及二個參數取得,輸出如下範例,其中小括號內的日期是使用預定義巨集 __DATA__ 輸出今天的日期,當輸入參數有任何一個不是數字,則輸出「x or y NOT a number!」且回傳非 0 的錯誤碼,印出結束要換行,編譯成可執行檔 prepro4。
        ./prepro4 2 5
        After swap, 5 + 2*2 = 9 (Aug  9 2019)
        ./prepro4 2 b
        2 or b NOT a number!
        


2020-01-02