Instructor:Po-Yu Kuo 教師:郭柏佑 EL 1009 計算機概論 (電子一A) Introduction to Computer Science Ch. 1 認識C語言 Instructor:Po-Yu Kuo 教師:郭柏佑
學習程式 語言的動機
學習程式語言的動機 為何想要學習程式語言? 研究或工作上需要; 興趣; 或者是喜歡打電動。 對電腦有興趣 平時喜歡使用電腦; 打電動; 線上遊戲。 * https://www.youtube.com/watch?v=7cNTUNSUvYw
學習程式語言的動機 電腦遊戲隨著時間的改變, 電腦設備(顯示卡)功能的增進, 遊戲畫面越來越細致。 然而, 遊戲的基本指令, 還是要由程式語言來控制: 使用者輸入指令: 招式或大絕招。 製作者利用程式語言, 設置不同指令對應到不同招式。 *https://www.youtube.com/watch?v=hEW0DNbPGCo *http://ruliweb.daum.net/ *https://www.youtube.com/watch?v=5il9JYkLYQg
學習程式語言的動機 電腦遊戲已經可以執行3D的畫面 利用遊戲體驗各類活動 操作介面更多元 *https://www.youtube.com/watch?v=BTCFKaq30QM
C 語言的由來
C 語言簡介 C 語言是最被廣泛使用的一種高階語言。 C 語言是 1972 年在 AT&T 貝爾實驗室 (Bell Laboratory) 中發展出來的。 Dennis M. Ritchie 和 Ken Thompson要發展 UNIX 作業系統, 而發展出來的一套程式語言。 1980年代中期, 為避免各開發廠商所用的 C 語言語法產生差異, 由美國國家標準局 (American National Standard Institution) 為 C 語言訂定一套完整的國際標準語法, 稱為 ANSI C, 做為 C 語言的標準。
C 語言簡介 由於 C 語言所具備的效率、彈性、可攜性等各項優點, 逐漸成為一種廣受歡迎的程式語言。 C 語言的優點包括: 1. 程式碼精簡, 產生的程式執行效率佳。 2. 具有很高的可攜性。 3. 完全支援模組化的程式設計。 4. 彈性大而擴充性強。
如何讓 C 語言程式 變成可以執行 C 程式稱為原始程式,原始程式必須翻譯成電腦認識的機器語言, 才能由電腦執行。 將高階程式語言所寫的原始程式, 翻譯成機器語言的方式有編譯與直譯兩種。 C 語言採用的是編譯的方式 (因此可稱之為編譯式語言)。將 C 原始程式編譯為可執行檔, 需經過編譯和連結兩個動作。
編譯與連結的動作
編譯 使用編譯器 (Compiler) 將人類看得懂的原始程式, 翻譯成電腦看得懂的目的檔。 編譯器在編譯過程中, 會檢查原始程式中的語法是否有錯誤。 如果有錯誤, 原始程式將無法進行連結的動作。 程式設計者必須修正原始程式中的語法錯誤, 再重新編譯。
連結 編譯完成後, 便可以進行連結的動作。 連結器 (linker) 的用處是將目的檔, 與程式中所使用到的函式庫做連結, 而產生完整的執行檔。 如果開發的程式比較大, 或參與開發的人比較多: 此時會將程式分成多個原始程式。 每個原始程式都可個別編譯成目的檔, 然後於連結時。 再將所有的目的檔與函式庫連結成一個完整的執行檔。
編譯式程式語言列表
直譯式語言 直譯如同是現場口譯, 當程式需要執行時才開始翻譯。 直譯式的語言是利用直譯器 (Interpreter) 對原始程式碼一邊讀解,一邊執行。 翻譯程式的過程中,不需要產生目的檔。 直譯器會將程式一行一行的讀入,並且逐行翻譯,並送交由電腦執行。 像JavaScript、VBScript、Perl 等都算是直譯式語言。
接觸 C 語言
第一個 C 程式 main () 函式 main () 函式 的內容 寫在 { }中 第一行 int main (void) 稱之為main () 函式。 main () 前面的 int 是整數的意思, 表示這個 C 程式在執行結束時, 會傳回一個整數值到作業系統。
第一個 C 程式 第三行 /*……*/ 裡面的字, 稱之為註解。 當編譯器遇到註解時會跳過註解文字不做任何編譯。 編寫程式時, 程式設計者以口語的方式加註解釋, 以方便日後查看。 單行註解: 多行註解: // 註解內容 /* 註解內容 */
第一個 C 程式 第三行中 “ return 0; ” 的敘述(statement),就是將數值 0 傳回給作業系統。 通常在撰寫應用程式時, 會將程式執行的狀況以 “傳回值” 反應給作業系統。 習慣上會用數值 0 表示程式執行順利, 無任何錯誤的意思。
輸出一行文字的程式 前置處理指令
輸出一行文字的程式 第一行 #include <stdio.h> 稱之為前置處理指令 (preprocessing directive)。 前置處理指令的功用, 就是把 stdio.h 這個檔案的內容放在原始程式的最開頭。 檔案 stdio.h 會附於安裝編譯器的子資料夾下。 第 4~7 行用 { } 括住的部分, 就是 main (void) 函式的內容。
輸出一行文字的程式 第 5 行的 printf () 是 C 語言裡最基本的輸出函式: 將括號()中, 用引號 “…” 包住的程式輸出到標準輸出裝置。 預設的標準輸出裝置就是螢幕。 所以這行程式的功用, 就是將 “C 語言的世界, 你好啊!!” 這段訊息, 輸出到螢幕上 同樣的, 在第六行, 每個程式都需要加上 “return 0;”, 傳回程式執行無誤的訊息。
C 語言的基本語法
main (void) 是什麼意思 main (void) 是每個 C 程式都一定要有的函式。 函式 (function) 簡單的說, 就是一段程式的集合, 並能產生某項特定的功能。 main (void) 函式中的 void 的意思是空白, 也就是說 main () 函式不接受任何參數的傳入。 main () 函式比較特別, 它不像函式庫中的函式, 都有事先設計好的功用。
main (void) 是什麼意思 main () 函式的內容, 完全由寫程式的人自行決定。 如果我們希望程式能完成某項工作, 就要將完成該工作的 C 語言敘述放在 main () 函式中。
解 x=123 代入 2x+99 的結果 註解
解 x=123 代入 2x+99 的結果 第 5 行為宣告變數 x 與 y 都是整數 (int) 。 第 6 行是將 x 值設定為 123。 第 7 行是用 y 來接受 2x+99 的運算結果, 在 C 語言中所有的算式都要寫成像本行的模式: 等號的左邊只能有一個變數。 右邊則是算式。
解 x=123 代入 2x+99 的結果 第 8 行是印出 y 的值, 也就是印出 2x+99 的結果。 觀察本行內容, printf () 輸出的是 "答案 = %d。 執行結果則是輸出 "答案 = 345“。 printf () 函式自動將 %d 的部分代換成 y 的值 345。 其中 %d 稱為 printf () 的輸出格式控制符號; 將逗號後的變數 y 的值, 以十進位的格式輸出在 %d 的位置。
解 x=123 代入 2x+99 的結果 關於printf () 函式其它的輸出格式控制符號, 在Ch. 2 和 Ch. 3 會做詳細介紹。
含括檔 #include <...> 淺說 #include, 稱為前置處理指令 (preprocessing directive)。 編譯器在編譯 C 程式前, 會先由前置處理器 (preprocessor) 來處理程式中的前置處理指令。 在原始程式第 1 行加上 #include<stdio.h>, 會把 stdio.h 這個檔案的內容放在原始程式的最開頭。 此動作稱為含括 (include), 而被含括到程式中的 stdio.h 則稱為含括檔, 其特色為副檔名為 .h 。
含括檔 #include <...> 淺說 使用函式前, 必須先宣告 (declare) 函式。 C 語言已經預先將標準函式庫中的函式宣告, 分門別類放在各個含括檔中。 例如程式中用到了 printf () 函式, 而其宣告就存放 stdio.h 中。 因此必需在程式開頭加上 #include<stdio.h> 這一行。 程式的連結階段才不會出現錯誤訊息。
含括檔 #include <...> 淺說 單一程式中所能含括的檔案數並無限制。
程式的分段:使用 {} 與 ; C 語言對其程式寫作格式中有許多嚴謹的規定, 這是為了避免編譯器在編譯時無法解讀程式的含意而發生編譯錯誤。 大括號 { } 分號 ;
大括號{}的使用 { } 中間的程式表示是一小段函式的結束, 或是一小段的敘述結束, 我們稱之為程式區塊 (block) 。 Block
分號表示敘述的結尾 每一句完整的程式後要加上分號, 表示該敘述結束:
分號表示敘述的結尾 每個由分號結尾的一個程式片段, 可稱為一段敘述 (Statement)。 在C語言中, 並未規定每個敘述都必須獨立成一行, 也沒規定同一敘述都要放在同一行。 只有少數幾個敘述不必在結尾加上分號 (if、else、while 等流程控制敘述), 其它的敘述都一定要用分號做結尾
養成良好的寫程式習慣
適時的分行 要寫好程式, 一定要養成良好的觀念。 不要將程式碼排的亂七八糟。 要工整, 有一定的格式。 就如同寫一篇文章, 如果沒有分段, 沒有標點符號, 閱讀者不知道哪裡該停頓, 哪裡段落結束。 適時的分行, 將使程式便於整篇的閱讀。
適時的分行 以下哪種程式較容易閱讀? 程式B 程式A int main (void) {int x; int y; int z; x=10; y=5; z=20;…} int main (void) { int x; int y; int z; x = 10; y = 5; z = 20; … }
適時的分行 當一行敘述太長時, 只要是變數和運算符號 (簡稱算符) 、逗號、括號之間, 都可依需要斷行。 在換行處不需要加任何符號, 只需在運算式結束處加分號即可。 a = b + c + d + e + f + g + h + i + j + k + l + m; 可在任一位置換行 a = b + c + d + e + f + g + h + i + j + k + l + m;
適時的分行 斷行時不可將原本完整的 變數名稱分斷。 函式名稱分斷。 關鍵字分斷。 這都將造成編譯器解讀錯誤。
程式碼的內縮:表現出層次感 需善用內縮的技巧, 將使的程式有層次感, 段落明顯, 章節分明 。 內縮
善用註解 寫程式要注意多加註解。 幫助閱讀程式的人能清楚了解 每一行的功能; 每一段的功能; 進而了解到整個程式的功能以及流程。
電腦程式與嵌入式程式的差異
認識嵌入式系統
認識嵌入式系統 整合了 CPU、ROM (唯讀記憶體)、RAM 及一些輸出入、計時器等相關功能於一身的微控制器 (Microcontroller, 簡稱 MCU)。
認識嵌入式系統 嵌入式系統上的 C 程式和一般電腦的 C 程式有些不同: 開發嵌入式應用, 必須瞭解包括 MCU 性能、規格, 及其它構成系統的電子零件 (例如 LED 燈、溫溼度感測器) 的性能、規格。 嵌入式系統、MCU 的種類眾多, 有各自的開發工具 撰寫嵌入式系統上的 C 程式, 除了具備 C 語言的基本知識外, 也要熟悉廠商所提供的專屬語法、函式庫用法。
嵌入式程式開發流程
Dev-C++ 操作簡介
執行第一個練習: 開啟Dev-C++ 1. 開啟 Dev C++ 。
執行第一個練習 2. 選取 檔案 → 開新檔案 → 專案。
執行第一個練習 3. 選取 Console Application → C 專案 → 確定。
執行第一個練習 4. 選取 你的資料夾 → Q1 → 開啟。
執行第一個練習 5. 選取完資料夾 後按存檔。
執行第一個練習 6. 此時會跳出以下的畫面, 即可開始撰寫程式。
編譯並執行程式 7.選取 執行→ 編譯並執行 或按F9。
編譯並執行程式 8. 執行結果, 可查看語法是否有錯誤。
Microsoft Visual C++ 6.0 操作簡介
執行第一個練習: 開啟Visual C++6.0
執行第一個練習 開啟新的Project, 選取File → New。
執行第一個練習 選取Win32 Console Application 。
執行第一個練習 輸入Project 名稱後, 點選 “OK” 。
執行第一個練習 勾選 “An empty project”後, 點選 “Finish” 。
執行第一個練習 出現New Project Information視窗後, 點選 “OK” 。
執行第一個練習 完成建立新的Project。 必須在新的Project中加入新的程式檔。
執行第一個練習 選取File → New 。
執行第一個練習 選取 C++ Source File。
執行第一個練習 輸入File名稱後, 點選 “OK” 。
執行第一個練習 在右邊空白處撰寫程式碼。 此處撰寫程式
執行第一個練習 撰寫完成後, 記得儲存檔案。然後選取 Build → Compile hello.cpp完成編譯的動作; 也可按 Ctrl+F7 。 儲存檔案
執行第一個練習 如果程式語法沒有錯誤, 在視窗下方會出現以下的訊息。 0 error(s), 0 warning(s)
執行第一個練習 然後選取 Build → Build hello.exe 完成連結的動作; 也可按 F7 。
執行第一個練習 如果連結過程沒有錯誤, 在視窗下方會出現以下的訊息。 0 error(s), 0 warning(s)
執行第一個練習 最後選取 Build → Eexcute hello.exe 執行程式; 也可按 Ctrl + F5 。
執行第一個練習 執行結果會出現在 DOS 視窗。
課後練習 請同學練習寫一個程式印出以下的文字, 並為程式加上註解。 This is my first program!!