Lab 1-1: Basic C programming and
Multi-file compilation environment

 
實習目標 基本 C 語法與演算法
在 Visual C++ 環境中熟悉使用多個檔案來設計 C/C++ 程式
 
步驟一 請下載 statisticsAndSort.exe 程式, 這個程式基本上讀取一個資料檔案raw1.dat, 預備計算檔案內所有資料的平均值, 各種資料出現的中間值, 以及出現頻率最高的數值。 請下載 statisticsAndSort000.cpp 程式檔案, 這個程式很接近一個完整的程式, 可以編譯, 可是沒有完成前面範例程式的功能, 請依照下列的步驟完成它。
步驟二 程式第 105 列
    // calculate the occuring frequency of data
未完成, 所以 freq[] 陣列內資料為 0; 請寫幾列程式, 計算 dataArray[] 陣列中數值 1~9 出現的頻率, 並且記錄在 freq[] 陣列中。
步驟三 程式第 90-92 列
    void sort(int a[], int size)
    {
    }
未完成, 請隨便挑選一個排序的演算法實作一下, 將陣列 a[] 的內容依照其大小排序 (例如: selection sort, bubble sort, quick sort 或是 heap sort)。

完成這個步驟以後你的程式應該基本上和範例執行程式有一樣的功能了

下面的內容故意不直接顯示, 你需要看再看, 可以不看的話就盡量不要看

例如一個基本的 selectionSort 的演算法大致如下:

    int data[NDATA]; // 假設未排序的資料存放於此陣列中
    int ndata; // 假設此變數記錄資料的筆數
    int i;
    for (i=0; i<ndata-1; i++)
    {
        1. 在 data[i+1], data[i+2] 到 data[ndata-1] 這些元素中找出最小的
        2. 把 這個最小的元素和 data[i] 的資料對調 
    }
    
步驟四 請嘗試將這個程式分割成為四個檔案, 內容如下:

  1. main.cpp: 包含 main() 函式

  2. io.cpp: 包含 readFile() 和 printArray() 函式

  3. statistics.cpp: 包含 mean(), median(), 和 mode() 函式

  4. sort.cpp: 包含 sort() 函式
請注意 io.cpp, statistics.cpp, 和 sort.cpp 都要有相對應的 io.h, statistics.h 和 sort.h 檔案

分割檔案的大致步驟如下:

  1. 拷貝 main() 函式至 visual studio IDE 中一個新的編輯視窗, 存檔為 main.cpp
  2. build 建立專案
  3. 加入所使用到的函式的宣告, 包括
    void readFile(int *dataSize, int data[]);
    void mean(const int [], int);
    void median(int [], int);
    void mode(int [], int [], int);
  4. Build / Compile main.cpp, 確定語法已經正確 (不要做 build 的動作, 因為 readFile(), mean(), median(), mode() 這些函式都還沒有在這個專案中定義, 執行 build 的話最後在連結的時候會給你找不到上述函式的連結錯誤)
  5. 拷貝 readFile(), printArray() 函式的定義到新的編輯視窗中, 存檔為 io.cpp, 再拷貝這兩個函式的 宣告敘述到一個新的編輯視窗, 並在前後加上 #ifndef, #define, #endif 的敘述如下:
    #ifndef IO_H
    #define IO_H
    void readFile(int *dataSize, int data[]);
    void printArray(const int[], int);
    #endif
    #ifndef, #define, #endif 的敘述是為了防止重複引入定義的。 存檔為 io.h
  6. 修改 main.cpp 內容, 拿掉 void readFile(int *dataSize, int data[]); 敘述, 換成 #include "io.h"
  7. 將 io.h 及 io.cpp 兩個檔案加入專案中 (在 File View 中以滑鼠右健點選 XXX files ... 名稱, 選擇 Add files to project 選項, 或是選取選單 Project / Add to project / files... 也可以做到)
  8. 分別 compile main.cpp 以及 io.cpp 確定語法及個別的引入檔案是正確的, 此時擬應該會發現 io.cpp 需要引入 stdio.h
  9. 依照類似程序製作 statistics.cpp, statistics.h, sort.cpp 以及 sort.h 檔案, 記得一定要把個別檔案加入專案中
  10. 都完成後可以 build 並且執行測試

minimal declaration 原則: 請確實瞭解應該在什麼地方 #include 需要的 .h 檔案, 很多時候多加幾列 #include 敘述並不會有錯誤, 但是那代表你並不清楚什麼地方該加, 代表你並不清楚為什麼要加上那些 #include 敘述, 如果你不清楚的話請趕快問我、助教或是同學。

步驟五 請助教檢查後, 將所完成的 project (去掉 debug/ 資料匣下的所有內容) 壓縮起來, 選擇 Lab1-1 上傳, 後面的實習課程可能需要使用這裡所完成的程式

C++ 程式設計課程 首頁

製作日期: 16/02/2004 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw TEL: 02 24622192x6615
海洋大學 電機資訊學院 資訊工程系 Lagoon