100 likes | 185 Views
HOME WORK III. 2013/8/16 Shang-Xuan Zou. HW3. 共七 題 要交幾題都可以,寫的加起來就是總分 只要繳交程式碼就好 檔名分別 為:座號 -hw 3 - 題號 . cpp 以 email 繳交至 ntu.train@gmail.com 相關資 料: http://w.csie.org/~r01922006/train/cb230/data/hw3.zip 標題請以” [ cb230] hw3- 學號 ”寄送 作業成績會公佈於課程網站
E N D
HOME WORK III 2013/8/16 Shang-Xuan Zou
HW3 • 共七題 • 要交幾題都可以,寫的加起來就是總分 • 只要繳交程式碼就好 • 檔名分別為:座號-hw3-題號.cpp • 以 email 繳交至 ntu.train@gmail.com • 相關資料: • http://w.csie.org/~r01922006/train/cb230/data/hw3.zip • 標題請以”[cb230] hw3-學號”寄送 • 作業成績會公佈於課程網站 • 繳交期限:8/21(三)23:59,每24小時扣10%,逾期三天後不收(8/24) • 有問題上下課時請盡量問!
Problem 1–10points • 這題繳交整份 cpp(只須寫一份cpp) • 設計一個學生結構,內容有: • 學生姓名(C/C++字串皆可) • 身高 (double,以公分為單位輸入) • 體重 (double,以公斤為單位輸入) • BMI (double,公式:體重/身高^2,注意身高單位是公尺) • 依序讀入五個學生的姓名、身高、體重 • BMI 可以趁讀入輸入的時候算,或是之後算 • 依序印出學生的姓名、身高、體重、BMI
Problem 2–20points • 這題繳交整份 cpp(只須寫一份cpp) • 承上題,依序讀入五名學生資料後,輸出 BMI 高於平均的學生姓名 • 輸入跟上題一樣是學生的姓名、身高、體重 • 這題只要輸出 BMI 高於平均的學生姓名就好,不用有上一題的輸出
Problem 3–30points • 這題繳交整份 cpp(只須寫一份cpp) • 再繼續學生的結構,依序讀入五個學生的資料後,分別找出以下同學,並輸出他的姓名: • 身高最高 • 體重最重 • BMI 最高 • 假設不會有一樣高的情況發生,也就是不會有兩個人同樣身高 170
Problem 4–40points • 這題繳交整份 cpp(只須寫一份cpp) • 承上面題目,將下列函式實做出來: • double getAverageBMI(structSTUDENT* s, int n); • 傳入學生結構陣列和長度,回傳平均的 BMI • double getMaxBMI(struct STUDENT* s, int n); • 傳入學生結構陣列和長度,回傳最高的 BMI • string getFattestStudent(structSTUDENT* s, int n); • 傳入學生結構陣列和長度,回傳最胖的學生名字(BMI 最高)
Problem 5–50points • 這題繳交實作的 cpp檔,切記要把實作和宣告分開 • 把 P1~P4 改寫成一個類別,其類別可以儲存五個學生的資料,類別內有結構陣列沒有問題 • 此類別需要有以下函式: • double getAverageBMI(); • double getMaxBMI(); • void setStudent(inti, 字串 name, doubleh, double w); • structSTUDENTgetStudent(inti); • STUDENT可以是你們自己訂的名字,但就是要包含一開始所定義的學生資料:姓名、身高、體重、BMI • 字串 可以是 C 或 C++ 字串,看你喜歡用哪個
Problem 6–60points • 這題繳交整份 cpp(只須寫一份cpp),有附 p5.cpp,可以比較方便測試,可以交改好的 p5.cpp,但記得改名 • 實作出鏈結表單(Linked List) • 需要完成以下函式: • void insertAfter(struct Node*, int); • 插入點在起點後面 • void insertBeginning(structNode**, int); • 插入點在起點前面 • void removeAfter(structNode*); • 移除起點後面的點 • void removeBeginning(structNode**); • 移除起點 • void printList(struct Node*); • 從起點開始印出表單 必須要先初始化一個點,之後才能串 struct Node *start
Problem S–100points • 這題繳交實作的 cpp檔,切記要把實作和宣告分開 • 完成一個 List 類別 • 其功能要有: • intpop_back(), intpop_front(); • 各別是把 List 尾端和前端的值從 List 中拿出來回傳 • pop後該值便不存在於 List 中了 • void push_back(int), void push_front(int); • 分別是從尾端或是前端加入新的值 • bool remove(int); • 把某個值從 List 中移除,若存在且成功移除回傳 true,否則回傳 false • bool search(int); • 搜尋某個值是否存在於 List 中,若存在回傳 true,否則回傳 false • int size(); • 回傳 List 現在有的元素數量 • void printList(); • 依序印出整個 List,例如:[1, 34, 99, 72] • void clear(); • 清除 List • 嚴禁使用 STL 內的功能,請自己實做出來 • remove 和 clear 沒寫好會各扣 10 分
備註 • 每題的範例程式都附在壓縮檔裡,請測試看看自己程式結果是否正確,輸出不一樣沒關係,但是答案應該要對 • 每題的資料夾裡有: • 範例程式 • 程式碼(P5、P6、PS) • 實作類別的題目請交上: • 類別的實作檔(.cpp) • 實作類別的方法可自由發揮,但請遵守及使用附上的標頭檔中的宣告,和宣告不一樣就當作沒有實作要求的功能 • 評分標準:通過編譯 40%,程式正確性 60%