Transcript CH1

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