1081 (108/09-109/01) 課程內容摘要

download all pdf slides 4up for print, color

前年度 (1061) 課程與實習視訊

去年度 (1071) 課程與實習視訊

本學期 (1081) 課程與實習視訊

  課程摘要
第一週 108/09/10(二')

    請注意下面有一些投影片裡面是有動作的 (例如 練習寫程式的要求), 請不要在瀏覽器 chrome, IE 或是 edge 裡面直接看, 那樣子看不到投影片上的動作, 請到 https://get.adobe.com/tw/reader/
    下載 Adobe Acrobat Reader DC, 並且安裝, 把投影片下載到 PC上用
    這個軟體看, 用 PgUpPgDn 按鍵瀏覽, 才能夠看到所有投影片裡的動作

  1. 課程簡介 (視訊), 練習寫程式的要求(視訊), 課程大綱

  2. 認識 C 語言、程式設計概觀、第一個 C 程式 (bw) (視訊)

  3. 程式範例
    1. miles2kms (bw) (exe)
    2. for loop and division test (bw) (exe)
    3. ASCII graph (bw) (exe1, exe2 graph.txt 資料和程式要下載在同一個資料匣裡才能正確執行)

  4. Homeworks:

系上把這個課程分成四班,不是要你體驗 Gryffindor, Slytherin, Hufflepubb, Ravenclaw 魔法競賽的真人版, 目的只是希望讓大家能夠確實掌握基本的程式設計方法,倒不是因為這個課程難度特別高,需要你每星期投資 n 個小時在上面,而是因為這個課程的學習的方法和你先前的學習方法會有差異,第一個差別就是遇到不太能解釋的問題要直接詢問,不要想賭賭看,以後也許不會再遇到,如果你把問題就放著不管,有可能 n 大於 20 都還是學不會,你遇見問題可以在課堂中提出,也可以線上問 (趕快加入 FB 的群組 『NTOUCSE 1081 程式設計 1C』),一定盡量在最短的時間裡回答你,你不需要因為遇見困難沒有人可以詢問,就讓那個 n 的數值一直增加,沒有需要讓那個 n 的數值大到影響你其他科目的學習、影響你課外活動的參與,最後因為不想浪費時間而讓自己覺得不適合唸資訊系。

你很聰明、電腦很笨,堅持用你那國的思考方式很多時候是不容易知道為什麼電腦不接受你的命令的,花那個時間和它周旋就有一點點浪費,要適時透過和真正瞭解的人互動來調整自己的想法;那麼為什麼要學著控制笨電腦呢? 它處理速度很快、記憶量很大、24 小時待命、一旦用對的方式控制它、它不會因為疲勞而出錯,不會因為不爽而罷工...

All programmers are playwrights and all computers are lousy actors. (Anonymous Hack Actor)

另外這個課程絕對是為了沒有接觸過程式的同學開的,不要覺得好像東西的份量很多,一直想等到自己看完以後再提出問題,有遇見問題但是沒有得到適當解釋的話, 你的接受度就會降低,一個問題會衍生其它的問題,進度就會慢上很多,你也不用管那些有基礎的同學,覺得提出問題會拖慢進度,不會的,真的厲害的同學在各種學習活動中都找到他需要的知識你越早體會到每個同學都有差異,同一個課程不可能適合所有同學,有需要和老師、助教互動來得到適合你的課程,你就掌握到成功學習的關鍵。

第二週 108/09/17(二)
  1. 語言的基本語法、關鍵字 vs. 識別字、程式碼錯誤 (bw)(視訊)

  2. 簡單回顧實習 1-1 (bw, splitted) (視訊 1)

  3. 變數概念、變數型態、資料表示法、與資料的轉換 (bw) (視訊 1, 2)

  4. 資料串流模型 (bw) (視訊)

  5. Homeworks:
第三週 108/09/24(二)
  1. 標準函數庫,格式化輸出 printf 與格式化輸入 scanf (bw) (視訊)

  2. 運算式與運算子、運算子的優先順序、強制的資料型態轉換 (bw) (視訊: 1, 2)

  3. 條件控制敘述 (bw) (視訊)

  4. 程式範例
    1. Arabic to Chinese (bw) (exe1, exe2)
    2. Zodiac Determination (bw) (exe)
    3. The 12 days of Xmas (bw) (exe)

  5. Homeworks:
    • 閱讀課本 5, 6
第四週 108/10/1(二)
  1. 結構化程式設計、迴圈控制 (bw) (視訊: 1, 2)

  2. 設計程序式程式的基本方法 (bw) (視訊)

  3. 迴圈綜合應用
    1. ZJ c356 Justin Love Encryption (視訊)
    2. 最大公因數 (bw) (視訊)
    3. Spiral Tap (bw, splitted, all, all_splitted, all_bw) (視訊)
    4. b351: 幻方(魔方陣)之一:奇N 階 (視訊)
    5. 二分法勘根 (bw) (視訊)
    6. 其他 (bw) (視訊: 1, 2, 3)

  4. 程式範例
    1. while loop and if test (bw) (exe)
    2. series approximation (bw) (exe)
    3. calendar printing (bw) (exe)

  5. Homeworks:
    • 閱讀課本第 7
第五週 108/10/08(二)
  1. 撰寫 C 程式用到 的核心語法 (bw)

  2. Spiral Tap (bw, 迴圈的使用時機, 12 Day on Xmas, Spiral Tap) (視訊)

  3. 使用迴圈尋找 n 個整數的最大值, 加總 n 個整數 (視訊)

  4. 模擬 (Simulation) (bw) (視訊: 1, 2)

  5. 程式範例
    1. 羅馬數字 (bw) (exe)

  6. Homeworks:
    • 閱讀課本第 7
第六週 108/10/15(二)
  1. 區塊、函數、參數傳遞 (bw) (視訊 1, 2)

  2. Quiz#0 Reverse a decimal number (Sol)

  3. 程式範例
    1. 時間長度加法器 (bw) (exe)
    2. dice rolling (bw) (exe)
    3. multi-dimensional array (bw) (exe) (視訊)
    4. number guessing (bw) (exe1, exe2)
    5. blind chess shuffling (bw) (exe)

  4. Homeworks:
    • 閱讀課本第 8, 9
第七週 108/10/22(二)
  1. 陣列使用 (bw) (視訊 1, 2)
    1. 為何需要陣列 (bw) (視訊)
    2. 陣列應用 (bw) (視訊)
    3. 組合數計算 (bw) (視訊)

  2. qsort (bw) (視訊 1, 2) (1071: 1, 2)

  3. Homeworks:
第八週 108/10/29(二)
  1. 陣列使用 (bw) (視訊 1, 2)

  2. 程式範例
    1. 隨機漫步 (bw) (exe)
    2. 撲克牌洗牌程式 (bw) (exe)
    3. 撲克牌型判斷 (bw) (exe, exe for utf-8)

  3. Homeworks:
第九週 108/11/05(二)

期中考 (13:20-16:00)

請提早 10 分鐘到 INS101 找你的座位, 考試請按照教室公佈的座位表坐

第十週 108/11/12(二)
  1. 期中考參考答案成績分佈


  2. 程式範例
    1. 三角函式列表 (bw) (exe)
    2. 刪除多餘空格 (bw) (exe)
  3. Homeworks:
第十一週 108/11/19(二)
  1. 字串處理 (bw)

  2. 什麼是好程式? (bw)

  3. 暴力法列舉之外

  4. 程式範例
    1. 大樂透投資報酬率模擬計算 (bw) (exe1, exe2, exe3)

  5. Homeworks:
第十二週 108/11/26(二)
  1. 排列的產生 (bw) (視訊 1, 2)

  2. 數獨應用 (bw) (視訊)

  3. 程式範例
    1. 數獨遊戲 (Sudoku) (bw) (exe, data4_12.txt, data4_10397.txt, data4_634211.txt) (demo, data4_6.txt) (GUI demo)

  4. Homeworks:
    • 請閱讀投影片
第十三週 108/12/03(二)  
  1. 質數表的建立 (bw) (視訊)

  2. 遞迴 (bw) (視訊, 1071:1 2)

  3. 程式範例
    1. xn (bw)
    2. Ackermann function (bw) (exe)
    3. 河內塔及其進階


  4. Homeworks:
    • 請閱讀投影片
第十四週 108/12/10(二)
  1. 遞迴: Counting (數獨遊戲, 動畫程式解釋, msvc100d_dlls.zip), Permutation, Combination, 數獨, 迷宮(動畫), 馬, 八后, 一筆畫 (Hamiltonian Path) --- Backtracking 回溯法 (視訊: 1, )

  2. 遞迴設計方法與範例 (bw) (視訊: 1081 1, 2; 1071 1, 2, 3; 1061 1, 2, 3, 4)

  3. 二分搜尋法與遞迴 (bw) (視訊: 1081, 1071)

  4. 指標 (bw) (視訊: 1081: 1, 2, 3; 1071: 1, 2, 3)

  5. 指標與陣列 (bw) (視訊: 1, 2)

  6. 程式範例
    1. Quiz: 遞迴版本的 Pemutation from Counting (視訊)
    2. Iterative Hanoi (bw) (exe) (視訊)

  7. Homeworks:
第十五週 108/12/17(二)
  1. 結構 (bw) (視訊 1081, 1071)


  2. 程式範例
    1. 踩地雷 (bw) (exe1, exe2, exe3, exe4(msvc100d_dlls.zip), exe5, winmine_xp , utilwin32.zip, vc2010使用簡介, dbwin32 工具, 971013win32mine_C_FacadeOnly.rar)

  3. Homeworks:
第十六週 108/12/24(二)
  1. 動態記憶體配置 (bw) (視訊: 1081: 1, 2; 1071)

  2. 二維陣列 (bw) (視訊: 1071, 1061)

  3. Dev-C++ 和 GCC/G++ 的問題 (bw) (視訊)

  4. Homeworks:
第十七週 108/12/31(二)
  1. 文字資料與二進位資料之檔案輸出入處理 (bw) (視訊: 1081)

  2. 位元處理 (bw) (視訊: 1081, 1071)

  3. Homeworks:
第十八週 109/01/07(二) 期末考 (13:15-15:45)

請提早 10 分鐘到 INS101 找你的座位, 考試請按照教室公佈的座位表坐

期末考參考答案

成績分佈

其它資源及練習
  1. 大學程式能力檢定 (Collegiate Programming Examination, CPE), 1star 選集, local advices

  2. 瘋狂程設

  3. 你所不知道的 C 語言

  4. UVa 線上測試, Lucky貓的 UVa(ACM)園地, Ruby兔的ACM園地

  5. UVa problem solver: UVA toolkit, uDebug

  6. Algorithmist - method to solve -- UVa解題方法提示

  7. 演算法筆記

  8. Codeforces Online Judge

  9. Topcoder

  10. Timus Online Judge

  11. POJ

  12. CodeVS

  13. TIOJ

  14. ZeroJudge 高中生程式解題系統

  15. Project Euler (這裡的問題都很有水準,沒有什麼參考答案,訓練自己的解決問題能力和思考能力)

  16. Kaggle: data science

一個學期很快結束了, 這個學期裡很多同學辛苦地調整過去所建立的學習方式, 過去的各種科目都有考試作為目標, 一方面也作為課程內容的界限, 超過考試範圍的都不需要傷腦筋, 不會也就算了, 考試前來不及會的, 考試後當然也就算了, 從這個課程開始你需要發現不是這樣的了, 未來的各種課程裡, 你需要在這個課程裡學到的基本方法, 你不能邊學邊在考試後就把它忘了, 不能夠很客氣地把這學期裡看到的東西還給我, 你需要把「提升自己的學習能力」作為目標, 學到了的東西就佔為己有吧! 這比起成績來說更有價值, 寒假裡我是沒有放假的, 如果你覺得你想要在假期裡加強一些什麼, 歡迎你和我討論, 遇見問題當然也歡迎你來討論, 有的時候自己一個人在做很多事都會遇見很大的阻力, 有人可以討論的話情況就完全不一樣了, 你可以拿這學期做過的練習, 也可以去看 CPE 或是 UVa 的線上題目作為練習, 有一些參考書籍是為這些設計的, 需要的話告訴我, 我也做過很多投影片解說相關題目的作法, 如果幾個同學一起有興趣的話, 也可以幫你們講一些需要的資料結構和演算法, 如果你對於物件導向程式或是視窗介面程式有興趣, 也可以來討論這些, 如果你對於物聯網以及一些網路裝置有興趣, 同樣歡迎你來討論, 最後, 如果你對於密碼學, 資訊安全有興趣, 更歡迎你加入我們的研究。

在接下來的資料結構, 組合語言, 演算法課程裡, 如果你覺得和我談可能對你會有幫助, 直接告訴我, 跟我約時間聊一聊, 試看看我們這個課程能不能變成一種保證班的概念, 也許你覺得這學期上課好像睡得挺好, 沒有學得很好, 擔心我會不太理你, 覺得實習或是課輔的時候很少幫你看程式, 不如說掰掰了吧! 其實你想多了, 我相信很多同學在這個學期裡, 因為學習環境的變化, 生活環境的變化, 還沒有調適好, 還沒有放下太多的精力去學習, 或是覺得投入的力氣好像沒有相對的成果, 相信你開始熟悉資訊系的課程和環境以後, 決定到底自己要什麼以後, 自然會得到自己能夠滿意的表現, 當老師其實最辛苦的就是要等候了....相信你想要會的時候, 你的學習一定會有突破的, 以往有很多學長在幾年的學習失敗以後, 仔細想想就會發現其實關鍵在於遇見問題沒有人可以討論, 每一個課程的時間都很短, 對於老師的上課方法與課程的內容還來不及進入狀況就過了一大半, 真的發現問題時課程已經結束了, 表現又不怎麼樣, 就不好意思去找老師問了. 最後以失敗收場, 希望你們在接下來的時間裡都不會遇到這樣的狀況......過去幾年一直有學長會持續和我討論, 讓我對其他老師的課程和作業都有點熟悉了, 不過相信他們所花的時間也都有相當的收穫 (換個人談談, 常常就是會讓自己有突破的), 台灣的教育過度強調學生要給出答案、最好還是標準答案, 逐步思考、有互動、會問問題的學生反而容易被歸類為愛找碴的人, 因此真的誤了好多人材, 其實在往後的學習裡, 重點不會在於考試的成績, 而會在於如何互動式地發掘問題, 問題都提不出來當然也就看不到解決的方法。

程式設計課程 首頁

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