1061 程式設計實習
課程內容

e-Tutor

實習座位安排

FB群組: NTOUCSE 1061 程式設計 1C


就像我們上課時提到的, 程式設計課程內容難易度在講到迴圈之前有一個很明顯的不連續點, 你應該很容易可以發現在講迴圈之前寫的程式都不太大, 基本上好像只是在練習 C 語法, 程式沒有辦法幫你做些什麼自動化的工作 , 甚至會覺得很直覺, 有點簡單, 不需要真的花什麼時間練習; 這個狀況在學到迴圈, 學到陣列的時候突然有了變化, 開始可以運用到計算機快速的運算能力以及大量的記憶體了, 寫的程式變大了, 程式可以精確地完成很多你不想要手動去作的事, 開始有意思了, 實習和作業也開始變得不是那麼直覺了,

可是這時候學習的慣性會讓你捨不得多花一些時間去調整, 心裡頭期待著也許過一兩節課程式又會變簡單了 , 事實上這個期待很快就會落空的, 程式開始作一些有用的事以後不會再變回到開學的時候那麼簡單了, 過去很多同學就是在這個時候發現進度遠遠地落後, 甚至就放棄了, 在這個時候抱怨說怎麼一下子作業難度變那麼高, 抱怨課程設計不好, 為什麼不繼續給簡單的例子就好? 這有點像學騎腳踏車, 不會騎之前你用兩隻腳走路的速度差不多 3-4 公里/小時, 會了騎車以後移動的速度變成 20-30 公里/小時, 那為什麼不騎 5 公里/小時就好呢?

在下面的實習裡, 你會發現在迴圈之前進度會比課程稍微快一些 (右圖中虛線), 有些在課程沒有講到的東西都直接叫你上機嘗試, 反正有電腦可以直接測試看看某些語法會有什麼效果, 錯了也可以直接看到, 直接尋找更正的方法, 直接和老師助教以及同學討論, 目的是希望你能夠稍微走快一點, 稍微把自己的觸角伸展出去, 不要太小看這個課程的內容, 才能在開始談到迴圈時不會有那麼大的震撼; 另外一個目的是希望你調整一下學習方法, 也許以前的學習經驗裡, 你發現最省力的方法是讓老師把所有 "需要學" 的東西整理清楚, 講清楚, 然後你只需要練習題目就好了, 這個學習方法是 "應付考試" 用的, 慢慢的你會發現你需要培養自己由資料裡吸收知識的能力, 新的知識, 有用的知識可能都還沒有人能幫你整理, 整理好的知識應該都過時了, 常常也沒有價值了...

另外你的程式寫得對或是不對? 要看機器執行出來的結果對或是不對而定, 不是書本或是我或是助教說對就對了, 你在這門課程裡學習的是如何深度地配合電腦, 運用電腦, 如果電腦不聽你使喚, 只是你和電腦間有一些誤會, 你也不需要把電腦當成敵人, 整個過程裡它也就是一切聽你的 "話" 而已, 機器很死板, 不會去判斷你的命令是不是好的, 也不會修改你的命令, 很多時候會發生錯誤只是因為你以為機器執行某一命令的效果和機器實際執行的結果不一致而已, 不是電腦在為難你, 多花一些時間練習, 校正, 自然你就能夠讓電腦一個指令一個動作的乖乖聽話。

  實習內容
第一週 106/09/13(三)

  1. Dev C++: 版本 4.9.9.2, 版本 5.11
  2. Visual C++ 2010 (WinXP, Win7/Win8/Win8.1 Compatibility mode, Win10 請執行 Setup/setup.exe)

  3. 其他的選擇包括 Code::Blocks, Codelite 或是 NetBeans

  4. 英文打字練習 (download)

  5. 基本語法練習

  6. 常見的語法錯誤 Dev-C++5.11, Dev-C++4.9.2, Code::Blocks

  7. 鍵盤輸入與螢幕輸出 (線上繳交: 1-1: 直線與橢圓的交點)
第二週 106/09/20(三)
  1. 資料串流模型 (bw)

  2. scanf 常見問題與語法剖析功能 (bw)

  3. C 語言的基本語法 (線上繳交: 2-1: 由檔案讀取資料的直線與橢圓交點程式)

  4. 線上程式題目的資料設計有一些常用的模式, 這個練習裡嘗試幾種常常看到的資料呈現方法 (線上繳交: 基本迴圈與資料讀取 1,2,3,4,5,6)
第三週 106/09/27(三)
  1. Dev C++ 原始碼除錯器 (Source Code Debugger) 版本 4.9.9.2, 版本 5.11

  2. 如果你希望使用商用的開發環境的話, 可以參考 Visual C++ 2005 Source Code Debugger (2008, 2010 基本上界面相似)

  3. 條件控制敘述與邏輯運算式 (線上繳交: 3-1: 中文數字列印, 投影片解說)

  4. 線上繳交: 3-2: 歌詞列印 - The 12 days of Xmas (bw) (exe) (這個程式的輸出文字比較多, 如果你擔心結果不太對, 或是你發現提交以後結果錯了, 有的時候會比對很久找不到在哪裡出錯, 這個時候不是比誰眼力好, 請你使用 notepad++ 來比對兩個文字檔案, 先把題目網頁裡的歌詞拷貝下來, 編輯一下存檔, 再把『使用者輸出結果』『以網頁方式顯示』的內容拷貝到另一個檔案, 然後讓 notepad++ 幫你比對, 比對方法)
第四週 106/10/04(三)  

第五週 106/10/11(三)

  1. 迴圈練習

  2. 尋找 Perfect number

  3. 線上繳交: 4-1: 螺旋狀排列數字 (Spiral Taps) (bw, all, all_bw, all_splitted), 範例執行程式

  4. 線上繳交: 4-2: 二分勘根法, 範例執行程式
第六週 106/10/18(三)
  1. 最大公因數 (Euclidean Algorithm), 反元素 (Extended Euclidean Algorithm) (bw)

  2. 線上繳交: 5-1: 函式練習

  3. 迴圈與函式練習程式: 金字塔列印

  4. 迴圈函式與簡易陣列練習程式: 檢查骰子[C_SL28-中]

  5. 線上繳交: 5-2: 模擬擲骰子與次數統計 (bw), 範例執行程式

  6. 線上繳交: 5-3: 宿舍樓長, 範例執行程式

  7. 迴圈函式與簡易陣列練習程式: Polynomials [AR02-易]
第七週 106/10/25(三)
  1. 線上繳交: 6-1: 學生成績資料處理 (bw)

  2. 線上繳交: 6-2: 帕斯卡三角形計算組合數 (迴圈) (bw, splitted)
第八週 106/11/01(三)
  1. Quiz. #0: (暖身) 判斷一個十進位整數是不是 11 的倍數

  2. 線上繳交: 7-1: 任兩數和不重複的數列

  3. 線上繳交: 7-2: 判定可能的最小進位制
第九週 106/11/08(三)
  1. 線上繳交: 8-1: 氣泡排序法

  2. Quiz. #1:

  3. 可以輸出資料的函式參數

  4. 線上繳交: 8-2: 計算踩地雷遊戲之提示
第十一週 106/11/22(三)
  1. 函式指標

  2. 線上繳交: 10-1: 分數加減乘除

  3. 線上繳交: 10-2: 仲夏夜之夢

  4. 繪製正弦波形
第十二週 106/11/29(三)
  1. 線上繳交: 11-1: 運用旋轉法產生 n 個整數且有額外條件限制的排列

  2. 不需繳交: [C_MM45-中] 分禮物

  3. 線上繳交: 11-1: 最爛的藉口
第十三週 106/12/6(三)
  1. 線上繳交: 12-1: 尋找整除數字

  2. 線上繳交: 12-2: 數獨遊戲
第十四週 1065/12/13(三)

遞迴範例

遞迴設計方法與範例

  1. 線上繳交: 13-1: 遞迴計算整數次方, 網頁說明

  2. 線上繳交: 13-2: 快速排序法, 網頁說明
第十五週 106/12/20(三)

 

  1. 線上繳交: 14-1: 河內塔

  2. 線上繳交: 14-2: 計算組合數
第十六週 106/12/27(三)

 

遞迴撰寫二分搜尋

  1. 線上繳交: 15-1: 酪農生乳收集

  2. 線上繳交: 15-2: 判斷完全平方數
第十七週 107/1/3(三)

遞迴 DFS 撰寫迷宮搜尋

遞迴設計方法與範例

  1. 線上繳交: 16-1: 最大乘積之整數劃分

  2. 線上繳交: 16-2: 馬的走法

 

踩地雷 (bw) (exe1, exe2, exe3, exe4(msvc100d_dlls.zip), exe5, winmine_xp)

1061 教學評鑑: http://ais.ntou.edu.tw/(教學務系統/教務系統/課程評鑑/填寫問卷)

1061 工程認證課程評鑑: http://www.cs.ntou.edu.tw/questionnaire/login.php 填入學號以及密碼(密碼若未修改則為身分證字號,英文字母大寫)

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

在接下來的資料結構, 組合語言, 演算法課程裡, 如果你覺得我可能對你會有幫助, 直接告訴我, 跟我約時間聊一聊, 試看看我們這個課程能不能變成一種保證班的概念, 也許你覺得這學期上課好像睡得挺好, 沒有學得很好, 擔心我會不太理你, 覺得實習或是課輔的時候很少幫你看程式, 不如說掰掰了吧! 其實你想多了, 我相信很多同學在這個學期裡, 因為學習環境的變化, 生活環境的變化, 還沒有投注太多的精力去學習, 或是覺得投入的力氣好像沒有相對的成果, 相信你慢慢熟悉以後, 決定到底自己要什麼以後, 自然能夠有自己能夠滿意的表現, 當老師其實最辛苦的就是要等候了....相信你想要會的時候, 你的學習一定會有突破的, 以往有很多學長在幾年的學習失敗以後, 仔細想想就會發現其實關鍵在於遇見問題都沒有人可以問, 每一個課程的時間都很短, 還來不及進入狀況就結束了, 真的發現問題時課程已經結束了, 表現又不怎麼樣, 就不好意思去找上過課的老師問了. 最後常常以失敗收場, 不要再像國高中的時候以為自己唸就夠了, 你的目標不是在應付考試 - 在那些數十年不變的知識上變出莫名其妙的考題, 你以為資訊領域的東西都像國高中學的東西一樣不會進步了嗎? (就在你讀這些文字的時後, 也許又推出 100 種新產品了), 你覺得自己唸就能夠跟上時代的進步了? 那就太小看在這個領域上全世界的工程師所投注的心力了, 你在學校裡真的需要學到的是如何和別人互動, 如何基於別人幫你整理出來的東西快速地學到所有基礎, 才能夠把心力投注在科技尖端的挑戰, 希望你們在接下來的時間裡能夠建立成功的學習經驗......過去幾年一直有學長會持續和我討論, 害我都對其他老師的課程和作業有點熟悉了, 不過相信他們所花的時間也都有相當的收穫 (換個人談談, 常常就是容易讓自己有突破的)。

第十七週 107/01/03(三)

動態記憶體配置與二維陣列 文字資料與二進位資料之檔案輸出入處理 位元處理

第十八週 107/01/10(三) 上機考 09:20-12:05

程式設計課程 首頁

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