Download presentation
Presentation is loading. Please wait.
1
第一章 C語言概論 本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載
2
何謂硬體和軟體? 硬體(Hardware) 就是由中央處理單元﹑記憶單元﹑輸出入單元等裝置所構成的實體 設備 。
P1-2 何謂硬體和軟體? 硬體(Hardware) 就是由中央處理單元﹑記憶單元﹑輸出入單元等裝置所構成的實體 設備 。 軟體(Software) 就是程式(Program),而「程式」是用來指揮電腦為我們解決問題的指令集,而這些程式就是使用「程式語言」所編寫而成的。
3
1-1 程式語言的演進 人與人間主要透過共通的語言(Language)來互通訊息。
P1-2 1-1 程式語言的演進 人與人間主要透過共通的語言(Language)來互通訊息。 人和電腦溝通亦如此,必須下達電腦了解 的語言,電腦才會按照命令來行事。 「程式」就是用「程式語言」所編寫出來的,來命令電腦為我們解決較複雜的計算 和處理龐大的資料。 「程式語言」是人類和電腦溝通的橋樑。
4
P1-2 1-1 程式語言的演進 (續) 機器語言 組合語言 高階語言 問題導向語言 物件導向語言
5
P1-2 1-1 程式語言的演進 (續) 程式語言除「機器語言」外,其他的程式語言都必須經過「語言翻譯器」(Language Translator)轉換成電腦所能認識的「機器語言」,才能在電腦上執行。
6
一、機器語言 (Machine Language)
P1-2 一、機器語言 (Machine Language) 由連續的0、1二進位數字所組成。 每個指令都可執行電腦一個最基本的操作。 相當於人類語言不必經過翻譯電腦就能直接 執行,所以執行速度最快。 不同電腦CPU,所使用機器語言是不相同。 與機器相關(machine-dependent),可攜性低。 使用0和1編寫程式,困難度高且程式難維護。
7
二、低階語言 (Low-Level Language)
P1-3 二、低階語言 (Low-Level Language) 亦稱組合語言(Assembly Language)。 使用一些助憶符號,由字母和數字組合而成 如程式中使用ADD代表加法、MOV代表資料搬移,使得一行組合語言的指令取代一行機器碼。人們以此種方式來撰寫程式比起機器語言來得有意義且易學。 由於電腦的處理器只能看得懂機器語言,因此必須將寫好的組合語言經過組譯器(Assembler)將它轉換為機器語言,才能在電腦上執行。 此種語言的語法較機器語言易懂且易編寫,但是它和電腦硬體的相依度高,也就是說機器不相同,語言的寫法亦不盡相同,因此可攜性低 (不同平台之間程式移殖)
8
二、低階語言 (Low-Level Language) 續
P1-3 二、低階語言 (Low-Level Language) 續 編寫程式時要先瞭解電腦內部暫存器和 記憶體的運作才能編寫,對一般電腦初 學者還是很困難。 適於電腦專業人員,用來設計有關電腦 輸出入介面的驅動程式或需要執行速度 快的電動遊戲程式。
9
三. 高階語言 (High-Level Language)
P1-3 三. 高階語言 (High-Level Language) 可攜性高且語法近人類語言和一般數學 表示式。 譬如:將y值加20的結果指定給x,其 數學表示式為:x=y+20,只要對程式稍加 修改,便可以在不同的電腦系統上執行。 傳統使用的高階語言有:BASIC、FORTRAN、PASCAL、COBOL、C等。 它們共同的特點是按照程式設計者指定的 邏輯順序執行,是屬於程序導向語言(Procedure-Oriented Language)。
10
三. 高階語言 (High-Level Language) 續
P1-3 三. 高階語言 (High-Level Language) 續 C語言與BASIC語言是主流。 BASIC是最容易也是最普及高階語言。 C語言是理工科或程式設計人員用來學習 程式設計的利器。 高階語言必須經編譯器或直譯將它轉譯為 機器語言,才能在電腦上執行。
11
P1-4
12
1-2 C語言的沿革 C 語言誕生的主要目的是為了開發 UNIX 作業系統。 以替代部份由組合語言所編寫的工作。
P1-5 1-2 C語言的沿革 C 語言誕生的主要目的是為了開發 UNIX 作業系統。 以替代部份由組合語言所編寫的工作。 讓C語言所編寫出的程式能在不同的環境 上開發系統與執行。 至於C語言的演進過程列表說明如下:
13
P1-5
14
P1-5
15
P1-6 1-3 C語言的特色 高階架構低階功能 可攜性高跨平台強 結構化程式語言 函式導向的語言 具有指標運算 動態配置記憶體能力
16
結構化程式語言 結構化程式設計於1960年發展出此種 革命性的概念。 主要觀念是一個程式流程可由循序、選 擇以及重複三種結構構成
P1-6 結構化程式語言 結構化程式設計於1960年發展出此種 革命性的概念。 主要觀念是一個程式流程可由循序、選 擇以及重複三種結構構成 去除早期非結構化程式設計使用 goto的 觀念,使得程式撰寫變得井然有序,比起 非結構化的程式設計更清晰,且易修改和 測試。
17
P1-6 結構化程式語言 續 一般結構化程式都會按照程式撰寫的 順序由上而下逐行執行,除非碰到額 外指示,透過選擇結 構或重複結構來 改變程式的流程,便可撰寫出具有結 構化的程式。 設計程式時可將具有小功能的程式片段 稱為模組(Module), 若能將這些模組組合,分工合作便可 組成一個具有模組化的大程式。
18
1-4 如何開發應用程式 Step1:問題分析(Problem analysis)
Step2:設計演算法(Design algorithm) Step3:撰寫程式(Coding) Step4:程式的驗證 (Program verification)
19
P1-10
20
1-5 C 語言的編譯、連結和執行 C語言提供的 IDE 整合開發環境撰寫出的 程式,稱為 原始程式 (Source Program)。
C語言所寫的程式是屬於高階語言,必須 透過 Compiler或Interpreter變成機器碼。 當編譯器在編譯時會檢查編寫的程式是否 發生語法錯誤(Syntax Error)和語意錯誤(Semantic Error) 。
21
1-5 C語言的編譯、連結和執行 語法錯誤 是檢查是否漏掉某個符號或括號不成 對等,就像一般句子漏掉名詞或動詞。
P1-11 1-5 C語言的編譯、連結和執行 語法錯誤 是檢查是否漏掉某個符號或括號不成 對等,就像一般句子漏掉名詞或動詞。 語意錯誤 是指使用到未經宣告過的變數等。
22
P1-11
23
程式庫函式(Program Library Function)
是指一些事先經編譯好且具有能執行某特定工作函式的集合。 一般程式語言都將這些函式直接建立在程式語言定義上,變成敘述來使用。 C語言將這些經過編譯過的函式採程式庫函式處理,這些程式庫函式依性質放在不同的程式函式庫檔。 只要經連結程式(Linker)連結,便可自動將用到的程式庫函式連結到可執行檔中,至於沒用到的程式庫函式是不會連結到程式中。
24
解譯器 (Intepreter) P1-12 有些高階語言用解譯器來解譯程式。
先將程式存檔,再啟動解譯器開啟檔案,解譯器 便逐行讀取指令,逐行執行,此種過程稱為「解譯」如:VBA、Java Script均屬之。 從執行效率來看,由於編譯器編譯好一個程式 產生執行檔,下次執行不必再編譯一次, 但解譯器每次執行都再解譯一次費時。 從程式偵錯,因解譯器執行程式時,可動態 修改程式,修改完畢再繼續往下執行。但編譯器 若程式執行時發現程式有錯誤時,必須中斷執行,修改完畢、重新編譯後再執行較費時。
25
P1-12
26
1-6 前置處理命令 P1-12 C程式在程式開頭都必須加入一些前置處理命令。
主要由於C語言不像BASIC語言有提供input和print輸出入敘述來輸入或顯示資料,是透過printf()輸出函式、scanf()輸入函式和getchar()輸入字元函式來完成。 這些輸出入相關的函式都被定義在stdio.h(standard input/output)標準輸出入標頭檔內。 撰寫程式時,程式中有輸出入資料發生時,都必須在程式最前面加上#include<stdio.h>,讓程式編譯時,由前端處理器(Preprocessor)先將stdio.h標頭檔含入(展開)到目前程式中。
27
標頭檔(Header File)是指C語言中有許多由廠商事先寫好以供使用者呼叫的函式。
P1-13 標頭檔(Header File)是指C語言中有許多由廠商事先寫好以供使用者呼叫的函式。 若程式中有使用到這些函式,必須先用標頭檔來含入這些函式,才能在程式中正常使用。 在C語言中,只要敘述是 # 開頭,表示此敘述為前端處理命令,此敘述主要是在程式編譯時,將該標頭檔內的程式碼轉換到程式內以供電腦執行相關函式做準備。 C語言使用 # include< filename.h>敘述將角括號內指定的標頭檔含入到目前的程式檔中。
28
P1-14
29
本章結束 Take a Break …..
Similar presentations