104-1 計算機程式設計 實習

 

 

就像我們上課時提到的, 計算機程式設計課程內容難易度在講到迴圈之前有一個很明顯的不連續點, 你應該很容易可以發現在講迴圈之前寫的程式都不太大, 基本上好像只是在練習 C 語法, 程式沒有辦法幫你做些什麼自動化的工作 , 甚至會覺得很直覺, 有點簡單, 不需要真的花什麼時間練習;

這個狀況在學到迴圈, 學到陣列的時候突然有了變化, 開始可以運用到計算機快速的運算能力以及大量的記憶體了, 寫的程式變大了, 程式可以精確地完成很多你不想要手動去作的事, 開始有意思了, 實習和作業也開始變得不是那麼直覺了, 可是這時候學習的慣性會讓你捨不得多花一些時間去調整, 心裡頭期待著也許過一兩節課程式又會變簡單了 , 事實上這個期待很快就會落空的, 程式開始作一些有用的事以後不會再變回到開學的時候那麼簡單了, 過去很多同學就是在這個時候發現進度遠遠地落後, 甚至就放棄了, 在這個時候抱怨說怎麼一下子作業難度變那麼高, 抱怨課程設計不好, 為什麼不繼續給簡單的例子就好? 這有點像學騎腳踏車, 不會騎之前你用兩隻腳走路的速度差不多 3-4 公里/小時, 會了騎車以後移動的速度變成 20-30 公里/小時, 那為什麼不騎 5 公里/小時就好呢?

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

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

 

日期/時間 內容
104/09/14 (Mon. 16:20-18:20)

天數 301

課堂解說: 認識 C 語言、程式設計概觀、第一個 C 程式、程式編寫及測試環境介紹

1. Starting Dev C++ (4.9.9.2)

2. Typing practice: online, download

3. 作業繳交時的文件檔:

example report

4. 製作文件檔的工具程式

Word
Powerpoint (繪製流程圖、資料結構)
mspaint (小畫家, 貼執行結果圖檔)
notepad++ (替程式增加列號: 請以npp編輯你的程式檔案, 在 編輯/列模式編輯 裡 嵌入字串 - 指定一個空格, 按下 "編輯", 再 嵌入數字 - 指定起始數為 1, 遞增數為 1, 以零補齊, 再按下 "編輯")

5. 課程練習

6. 常見的語法錯誤

7. 電腦的基本運作原理 (無法看到全部畫面的話請使用 IE, Android 請下載 flash player com.adobe.flashplayer.apk), slides (b&w): 這一份資料比較由低階硬體角度去解釋電腦運作的基本原理

這星期不需要繳交什麼作業, 但是請準備好自己的程式執行環境

104/09/21 (Mon. 16:20-18:20)

天數 301

課堂解說: C 語言的基本語法、關鍵字 vs. 識別字、程式碼錯誤

1. 課程練習

2. 實習一 : 計算直線和橢圓的交點, 線上繳交時間 104/09/28(一) 21:00

104/09/28 (Mon. 16:20-18:20)

中秋節放假

請自行練習

天數 301

課堂解說: 變數概念、變數型態、資料表示法、與資料的轉換

1. Dev C++ Source Code Debugger

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

3. 課程練習

4. 實習二 : 實習一 + 檔案輸入與檔案輸出, 線上繳交時間 104/10/05(一) 21:00

104/10/05 (Mon. 16:20-18:20)

天數 301

課堂解說: 標準函數庫,格式化輸出 printf 與格式化輸入 scanf運算式與運算子、運算子的優先順序、強制的資料型態轉換

1. 課程練習

2. 實習三: 函數分割練習, 線上繳交時間 104/10/12 (一) 21:00

3. 作業一: ???, 線上繳交時間 104/10/19 (一) 21:00

104/10/12 (Mon. 16:20-18:20)

天數 301

課堂解說: 條件控制及條件運算式

1. 選擇控制敘述練習

2. 實習四: 中文數字列印, 線上繳交時間 104/10/19 (一) 21:00

3. 作業一: ???, 線上繳交時間 104/10/19 (一) 21:00

104/10/19 (Mon. 16:20-18:20)

天數 301

課堂解說: 迴圈控制與結構化程式設計練習

1. 迴圈練習

2. 尋找完全數程式設計範例

3. 實習五: 尋找完全數, 線上繳交時間 104/10/26 (一) 21:00

104/10/26 (Mon. 16:20-18:20)

天數 301

課堂解說: 迴圈, 輸出參數的函數, 綜合程式設計練習

1. 迴圈練習 - 最大公因數

2. 輸出參數的函數 - 透過指標的記憶體間接存取

3. 綜合程式設計練習 - 分數加減乘除

因為接近期中考了, 你應該有很多的課程要讀, 下個星期沒有要繳交的實習或是作業, 但是你應該可以預期作業二、三還有後面的實習五、六應該都不是很簡短的練習題目,希望透過這三個星期的實習和課程裡所說明的一個一個範例程式, 你慢慢瞭解到如何一步一步地設計一個有用的程式,不但讓這個程式可以完成指定的功能, 同時讓這個程式可以有很清楚的架構, 能夠很容易去維護和修改這個程式

104/11/02 (Mon. 16:20-18:20)

天數 301

課堂解說: 區塊, 函數指標, 迴圈應用

1. 迴圈應用 - 二分法勘根程式

2. 函數指標

4. 作業二: ???, 線上繳交時間 103/12/07 (一) 21:00

 

不斷有同學反應實習課的內容和課程內容有相當的落差, 這個狀況在課程開始前其實就有預料到, 但是讓這樣的落差阻礙同學的學習, 我深感抱歉。

不過從另一個角度看, 實習課不練習課或是演習課, 如果今天你是去業界實習, 你應該不會抱怨 "怎麼做的東西沒有人幫你先做過、整理過、然後教你怎麼做?", 那是高中或是技職層級作業員的心態, 話說都有人教的話, 這個工作也有可能不需要你做了! 如果你抱怨說 "學校裡都沒有教到", 表面上讓人覺得學校教育真糟糕, 不過深入去看還是會注意到: "是不是你沒有學到呢?" 怎麼同一個學校畢業的同學裡面, 有的人解決問題的能力很優, 有的人卻是抱怨的能力很出色?

學習有兩個層面:

一種是所謂填鴨式的學習, 老師先幫你整理好了, 然後在很短的時間裡希望你用教條式的方式把規則記下來, 並且加以發揮, 這種方式很有效率, 應付考試很有用, 但是卻用一個框框侷限你的想像力與學習能力; 這種學習也常常像是逛街買東西, 很輕鬆, 高興就買, 買了也不一定要用, 有時只是純粹欣賞一下, 滿足一下擁有的慾望, 一段時間過後甚至也不記得曾經擁有; 常常自己問一下自己什麼課學過沒有, 答案大概是...學過啊! 考試成績也還不錯, 只是不知道為什麼要學, 不知道怎麼用而已, 會了嗎? 好像沒有...

另一種是由範例中學習, 把實際遇見的狀況用稍微簡化過的範例呈現出來, 希望你能夠從中歸納出可以應用的法則, 這種學習是你在選擇大學教育以後一生中需要不斷應用的學習方式, 也許也是最有可能建立自我價值的一種方式! 每個人都看到一樣的現象, 但是卻不一定要有相同的解讀! 自己付出代價整理出來的規則, 跟別人整理出來的比起來就是不一樣, 印象非常深刻而且隨時可以拿出來用, 就算沒有整理出百分之百和別人一致的結果, 那種尋找、思考、沈澱、整理的過程只會越來越純熟, 失敗的機率一次比一次更低, 猶豫裹足不前的狀況越來越少見, 越來越能夠擺脫那種 "老師沒教過" 的陰影。

從表面看, 很多人以為美國人是靠消費撐起經濟的, 應該是一切靠別人才對, 但是有機會的話, 去看看一般美國平民動手解決問題的能力, 從傢俱、房舍、水電、除草機、摩托車、引擎、消費性電子產品..., 許多東西都是樣樣自己動手, 由學習, 維修, 修改功能, 到甚至能夠打造為可以販售的成品...很多事情都是在台灣生活的人覺得壞了就換掉, 買新的來取代, 是大家不見得可以想像的, 但是可以確定的是這些方法幾乎都不是在學校裡學到的喔!

言歸正傳, 希望這是我們嘗試把課程分成課堂與實習兩部分的主要目標!! 雖然呈現的內容還有很多缺失, 還需再投入很多時間調整, 也希望你能夠參與這個過程, 你所有的心得與意見也一定會影響未來課程和實習的安排。

目前的狀況下要能夠好好運用實習課, 要麻煩你稍微跳脫實習就是演習的心態障礙!! 沒有看過抽象規則的東西還是可以學習的!! 可以操作的機器就在你面前, 網路和參考資料也在你手邊, 有同學、助教、老師可以討論, 課堂裡有聽過一些基礎知識, ... 這時候也許你心裡頭想, 那不就下課就好了... 也是啦, 如果你覺得實習課的內容沒有涵蓋比較有代表性的問題, 沒有比上課多一點東西...

這個問題還可以一直延伸到 學歷重不重要 (local copy) 的討論, 如果學每一樣東西都需要別人幫你整理好, 學歷肯定代表一個痛苦的壓抑過程! 新奇的東西對你來說比較難有新鮮感和挑戰性!

104/11/23 (Mon. 16:20-18:20)

自主學習週

天數 301

課堂解說: 陣列與字串處理

1. 繪製 sine 圖形

2. 實習六: 運用 BGIm 繪製 Sine 與 Cosine 圖形, 線上繳交時間 104/11/30 (一) 21:00

3. 作業二: ???,線上繳交時間 104/12/07 (一) 21:00

請注意, 作業的目的是希望你能夠有更進一步的了解, 是一種 "從做中學" 的基本方法, 作業不是實習, 不是練習, 需要有一定的難度, 你才有機會藉由共同設定的目標突破自己學習的盲點, 如果遇見問題請不要客氣隨時 email 給我, 如果你發現一些你希望同學都可以分享的問題, 也請在討論區中發表, 不過麻煩給我一個 email, 我才不會漏掉你的發言

104/11/30 (Mon. 16:20-18:20)

天數 301

課堂解說: 陣列與字串處理

1. 計算檔案中資料的平均值、標準差、中數、與眾數

2. 矩陣加法與乘法

3. 旋轉法產生 N 個整數的所有排列

4. 窮舉法產生 N 個整數的所有排列

5. 實習七: 旋轉法產生有條件限制的排列, 線上繳交時間 104/12/07 (一) 21:00

104/12/07 (Mon. 16:20-18:20)

天數 301

課堂解說: 遞迴演算法

1. 遞迴練習

2. 遞迴式選擇排序法

3. 遞迴式快速排序法

4. 實習八: 遞迴函數計算整數次方, 線上繳交時間 104/12/14 (一) 21:00

5. 作業三: ??? (???), ???, 線上繳交時間 104/12/21 (一) 21:00

104/12/14 (Mon. 16:20-18:20)

天數 301

課堂解說: 使用者自定資料型態

1. 結構語法練習

2. 動態配置記憶體練習

104/12/21 (Mon. 16:20-18:20)

天數 301

課堂解說: 文字資料與二進位資料之檔案輸出入

1. Manipulating data files

計算機程式設計 首頁

製作日期: 08/01/2015 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@ntu.edu.tw