開發紀錄 2015q3 Homework #3
GitHub
 

TODO

  • [Week #4] Homework #3 常見不足和改進項目:
(2) 僅列出程式碼,卻沒有指出後續效能改進計畫。要是 Google Inc. 和 Apple Inc. 的工程師跟你一樣,看到一兩組數據「像樣」了,就收工,你敢每天用這些工程師開發的手機嗎?
  • (3) 測試計畫不完整,而且往往只用一組資料測試,這是悲劇。我們不能接受這樣粗糙的系統
(4) 沒有解釋執行時間和 data set 的分佈
 
  • 檢測自己 C 語言認知的小程式,研究看看
 

作業要求

  • Question #2, #3, #4, #5, #6, #27
  • 在 GitHub 上 fork quiz,然後逐一修改每個目錄裡面的檔案
  • 對於 Question #2, #3, … #6 都需要實做遞迴和非遞迴的版本
  • 要一併準備測試資料
  • 除了修改程式,也要編輯 Hackpad 下方「+作業區」,增添開發紀錄和 GitHub 連結
  • 額外要求觀賞電影《進擊的鼓手》,思考這 4 週以來,課程給你的衝擊 (若你沒衝擊的話,可以退選了),在自己的 Hackpad 紀錄心得,特別是對於追求卓越這件事
  • 應該要有完整的測試程式,並測試各項邊界狀況
  • 執行時間分析
  • 記憶體需求分析
  • cache miss 分析
  • 時間複雜度分析
  • 善用 assert 
  • 提供遞迴與非遞迴的版本
 

閱讀資料

C99規格
  • 介紹
  • C99是ISO/IEC 9899:1999的非正式名稱
  • C99擴展C90加入一些新的feature和standard library,進而更好的利用計算機硬體資源
  • 在2011年發佈的C11,取代C99
  • 歷史
  • C程式語言官方標準最早出現由ANSI於1989年訂定,1990年成為國際標準,至此之後有好一段時間未曾動過這個標準,而C++則繼續發展,C主要在做標準化的部份。
  • 1995年修訂規範一個新的C標準,相對於1989年的標準來說,增加了更多國際字符集的擴展。而該標準進行進一步的修訂,進而導致ISO/IEC 9899:1999 in 1999也就是C99的誕生,並且在2000年5月通過成為新的ANSI標準
  • 設計
  • C99大部分相容於C89,但在某些方面很嚴格
  • 尤其是宣告(declaration)很嚴格
  • 一個缺少 type specifier(類型說明符)不再有 int的隱含性假設
  • 這跟編譯器有關,C標準委員會決定要在宣告時更加嚴謹,而不是讓編譯器去"假設"
  • 在實作中,編譯器可能會顯示警告訊息
  • C99引入了幾個新功能(feature),其中有幾個已經實現擴展到編譯器中。(詳見 wiki)
  • Compile with: gcc -std=c99 -mfpmath=387 -o test_c99_fp -lm test_c99_fp.c