next up previous contents
Next: 記憶體管理 Up: 指標 Previous: 從函式回傳陣列指標   Contents   DYWANG_HOME

實機練習題

  1. 共同要求:
    1. 在家目錄下建立 zzz 目錄。
    2. 切換工作目錄到 zzz,所有練習皆存在此目錄。
    3. 下載檔案 array.txt
    4. 題目沒要求的,不要多做,不要多加任何空白或空白行。
  2. 使用 array.txt 中的陣列初始值,撰寫 C 語言程式。
    1. 程式 point1.c 宣告 int arr3[] 及指標變數 ptr 指到 arr3 的位址,並以 do...while 迴圈由鍵盤輸入一個整數 x,直到輸入的整數是正整數且小於 arr3 的元素個素為止,以十進位印出 ptr 及 ptr+n 的值及位址,每項項目以<TAB>分隔如下範例,編譯成可執行檔 point1。
      ./point1
      Enter an integer: -2
      Enter an integer: 10000
      Enter an integer: 19
      ptr=-767412528	*ptr=186	ptr+19=-767412452	*(ptr+19)=503
      
    2. 程式 point2.c 宣告 int arr8[] 及指標變數 ptr 指到 arr8 的位址,並以 do...while 迴圈由鍵盤輸入一個整數 x,直到輸入的整數是正整數且小於 arr3 的元素個素為止,for 迴圈連續印出從第 x 元素到最後一個元素,每個元素前後加一個減號 '-',且迴圈的「起始值,條件判斷,增減量」都要使用 ptr 變數,編譯成可執行檔 point2,輸出範例如下:
      ./point2 
      Enter an integer: -2
      Enter an integer: 19
      Enter an integer: 3
      String:-2--N--I--i--E-
      
    3. 程式 point3.c 改宣告 arr11 為惷標陣列 *name,並以 do...while 迴圈由鍵盤輸入一個整數 x,直到輸入的整數是正整數且小於 *name 的元素個素為止,for 迴圈連續印出從第 1 個元素到第 x 元素,每個元素都改成全大寫,元素間以冒號 ":" 分隔,最後換行,編譯成可執行檔 point3,輸出範例如下:
      ./point3
      Enter an integer: -3
      Enter an integer: 10
      Enter an integer: 3
      Name:ALLEN:COLIN:DAVID
      
    4. 程式 point4.c 從鍵盤輸入一數字 x,宣告指標變數 ptr 指向數字 x 的位址,雙重指標變數 pptr 指向 ptr,以十進位印出輸入的數字、指標變數、雙重變數,三者間以<TAB>隔開,最後換行,編譯成可執行檔 point4,輸出範例如下:
      ./point4
      Enter an integer: 12
      x=12	*ptr=12	**pptr=12
      
    5. 程式 point5.c 宣告 int arr4[],以 do...while 迴圈由鍵盤輸入一個整數 x,直到輸入的整數是正整數且小於陣列 arr4 的元素個素為止,設計函式 ovdiff,計算「元素內容是偶數的總和-元素內容是奇數旳總和」,並回傳,但必須排除前 x 個元素。輸出 x 及 ovdiff 回傳值,中間以<TAB>隔開,編譯成可執行檔 point5,輸出範例如下:
      ./point5
      Enter an integer: -2
      Enter an integer: 123
      Enter an integer: 10
      x=10	ovdiff=4396
      
    6. 程式 point6.c 從鍵盤輸入一正整數 x,若 x>5 則設定為 5,設計函式 getSec 傳入整數 x,產生 x 個 Unix 時間存入陣列 secs (宣告為 static),並回傳 secs 陣列指標。主程式 main 印出陣列 secs 所有的值,編譯成可執行檔 point6。輸出範例如下: 例如:x=3,輸出
      ./point6
      Enter an integer: 9
      sec0=1564977690
      sec1=1564977690
      sec2=1564977690
      sec3=1564977690
      sec4=1564977690
      ./point6
      Enter an integer: 3
      sec0=1564977695
      sec1=1564977695
      sec2=1564977695
      


De-Yu Wang 2021-01-11