狠狠撸

狠狠撸Share a Scribd company logo
1
第一章
計算機概論與 C 語言簡介
2
目標
在本章中,我們將回顧一些計算機概論的基
本知識,藉由這些基本知識,進而學習電腦
的程式設計。除此之外,我們也將針對 C
語言的編譯器及執行環境做一些說明,加強
讀者在往後章節中練習範例時所需要的基本
知識。
3
大綱
? 1.1電腦硬體
? 1.2電腦軟體
? 1.3程式語言
? 1.4C 語言簡介
4
大綱 ( 續 )
? 1.5程式開發流程與編譯器
? 1.6本章回顧及下章預覽
5
1.1 電腦硬體
? 電腦硬體就是您可以看到的電腦設備(拆開外
殼),不過若光是這樣形容電腦硬體未免過於簡
單。實際上,若從功能面加以區分,可將電腦硬
體分為 5 大單元(如下圖), 5 個單元分別負責
不同的工作。
6
? 算數邏輯單元(簡稱 ALU )是執行程式中
各類運算的實體單位。這些運算則可以分
為兩大類:算數運算與邏輯運算。算數運
算包含加、減、乘、除等等的數值運算,
而邏輯運算則包含 AND 、 OR 、 NOT 、
移位等位元/位元組的邏輯運算。
1.1.1 算數邏輯單元
7
1.1.2 控制單元
? 控制單元(簡稱 CU )的功能為控制流程及
協調輸入、輸出、記憶、算數邏輯等 4 大
單元的運作。控制單元中包含 (1) 記錄指令
運作順序的微程式( microprogram )、
(2) 取得下一指令的邏輯電路 (3) 驅動元件
的解碼器( decoder )及 (4) 眾多選擇器
( multiplexer )。
8
1.1.3 記憶體單元
? 記憶體單元分為主記憶體 (main memory)
與輔助記憶體 (secondary memory) ,主要
功能是用來儲存資料
?主記憶體(又稱為內部記憶體),目前以半導
體元件制成,特性為存取速度快、成本高。主
記憶體依照存取特性又可以分為隨機存取記憶
體 (Random Access Memory ;簡稱 RAM) 及
唯讀記憶體 (Read Only Memory ;簡稱
ROM) 。
9
1.1.3 記憶體單元
? RAM 的成本較低,但是無法於電力消失時保存資料,
故為揮發性記憶體的一種。 ROM 成本較高,但卻可以
在無電力的狀況下保存資料,傳統的 ROM 只能寫入資
料一次,因此通常只會把啟動電腦所需要的小程式儲
存在 ROM 裡面,例如 BIOS 就是使用 ROM 做為記憶
體。
? 輔助記憶體(又稱為外部記憶體),目前以磁性物體
或光學材料組成,例如:硬碟機、軟碟片、光碟片。
輔助記憶體的存取速度相對於主記憶體慢了數十倍以
上,但製作成本則比主記憶體低了數十倍以上,因此
適合儲存大量的資料。
10
1.1.4 輸入單元
? 輸入單元是「具有輸入功能的週邊設備」
,例如鍵盤、滑鼠、搖桿等等。使用者可
以藉由這些輸入裝置與電腦取得溝通的管
道。
11
? 輸出單元恰與輸入單元相反,所有「具有輸出功
能的設備」皆屬輸出單元的元件,主要功能是將
程式執行的結果(文字、聲音、影像)輸出或顯
示。常見的輸出裝置有螢幕、印表機等等。某些
週邊設備同時具有輸入與輸出的功能,例如:觸
控式螢幕、會震動的搖桿等等。
1.1.5 輸出單元
12
? 電腦軟體分為資料與程式兩大類,事實上不論是
哪一類,都是以 0 、 1 的二位元表示法儲存在電
腦設備中(例如:儲存於硬碟機中)。
? 而程式又可以分為系統程式( System
Program )與應用程式( Application Program )
。
? 系統程式一般為較接近硬體底層的低階程式,例如:
作業系統 (Operating System) 、編譯程式
(Compiler) 、組譯程式 (Assembler) ,連結程式
(Linker) 等都屬於系統程式。
? 應用程式則是架構在系統程式之上,依據某種特殊需
求而開發出來的軟體,例如: Office 、帳務系統、電
腦遊戲等等。
1.2 電腦軟體
13
1.3 程式語言
? 語言的用途是做為人與人溝通的橋樑,例
如:和美國人交談就要用英文溝通。同樣
地,人若要和電腦溝通的話,就必須使用
電腦『懂』的語言,這種語言稱為程式語
言( Programming Language )。而一般
我們用來與人溝通的語言則稱為自然語言
( Natural Language )。
14
1.3 程式語言
圖 1-6 程式语言分类
15
? 機器語言( Machine Language )是電腦
硬體唯一看得懂的語言,換句話說,機器
語言就是一連串的 0 、 1 二進位數字組合
,因此又稱為機器碼。一般人通常看不懂
這些 0 、 1 所代表的特殊涵義,其實對於
電腦而言,這些 0 、 1 的組合數字,可能
代表某種資料,也可能代表某個指令。由
於大多數的人無法了解或記憶這一連串
0 、 1 數字所代表的涵義,因而發展了低階
語言與高階語言。
1.3.1 機器語言
16
1.3.2 低階語言
? 低階語言( Low-level Language )是一種
接近於機器語言的表示方法,不過卻使用
人類比較容易記憶的單字形式來對應一連
串的 0 、 1 組合。最典型的低階語言就是
組合語言( Assembly Language )。在組
合語言中,使用運算子與運算元來表示一
連串的 0 、 1 組合,而這些運算子則使用
類似英文的縮寫以利人類的記憶與理解,
例如:使用 INC 來代表 Increment (累加
指令)。
17
1.3.2 低階語言 ( 續 )
?在上表中,很明顯的可以看出,組合語言的指
令與機器語言的指令是一對一的對應關係,但
是卻比機器語言容易記憶,除此之外,其他組
合語言的設計都與機器語言的設計相同,我們
可以從下表中更明確地看出兩者的相同與相異
處:
8051 機器語言指令 8051 組合語言指令 意義
00000100 INC 執行累加 1
10000100 DIV 執行除法
8051 組合語言指令與機器語言指令的對應
18
? 組合語言與機器語言一對一的特性,使得
組合語言可以完全掌控電腦的硬體結構,
如此一來,在執行效率上自然也就完全交
由程式設計師決定。不過,由於不同的
CPU 必須使用不同的組合語言並且必須對
於該 CPU 的組織結構有充分認知,因此,
這種低階語言仍舊無法被絕大多數的人所
接受,因而發展了更接近於人類自然語言
的高階語言。
1.3.2 低階語言 ( 續 )
19
? 組合語言雖然比機器語言更接近於自然語言,但
組合語言的程式設計師必須對於執行程式的處理
器有更多的了解,並且每個處理器的組合語言並
不相同,因此,一種比組合語言更接近自然語言
且不因更換機器而改變語法的程式語言也被發展
出來,此種語言就是高階語言。
? 高階語言( High-level Language )使用更接近人
類思維的方式來設計程式,當程式設計完成之後
,必須通過另外一些翻譯程式的翻譯後才能夠被
電腦執行。高階語言的運算子通常具有比較強大
的功能,因此,單一行的高階語言程式可能被翻
譯成許多的機器碼以便完成複雜的工作。
1.3.3 高階語言
20
? 編譯式語言
?編譯器採用整批作業( Batch )方式來處理程
式翻譯的工作,換句話說,當我們將程式設計
完畢並交由編譯器翻譯之後,編譯器會將翻譯
結果存成一個目的檔( object file ),而這個
目的檔可經由連結其他目的檔及程式庫之後形
成可執行檔( execute file ),並由電腦直接執
行。常見的編譯式語言有 C 、 C++ (編譯器為
gcc 、 g++ 、 VC+
+ 、 BCB )、 Pascal 、 Object Pascal (編譯
器為 Delphi 、 Kylix )等等。
1.3.3 高階語言 ( 續 )
21
1.3.3 高階語言 ( 續 )
? 編譯式語言
? 編譯式語言使用模組化技巧,也就是把某些具有特殊
功能的片段程式獨立成一個個的函式,並將之集合成
一個函式庫檔案,如此一來,就可以讓需要使用該功
能的程式透過連結的方式加以結合,縮短撰寫程式的
時間。例如: ANSI-C 的 math 函式庫中就包含許多求
三角函數的函式,所以我們並不需要自行撰寫求三角
函數的詳細步驟,只要在需要求三角函數值時,引用
Math 函式庫即可。一個基本編譯式語言的程式處理流
程如下圖。
22
1.3.3 高階語言 ( 續 )
編譯式語言的程式處理流程
23
1.3.3 高階語言 ( 續 )
? 直譯式語言
? 直譯器與編譯器處理程式的步驟不同,當我們使用直
譯式語言撰寫程式完畢並使用直譯器來翻譯程式時,
並不會產生目的檔或可執行檔。直譯器會將程式一行
一行的讀入,逐行翻譯並送交由電腦執行,因此,每
一次要執行編譯式語言程式時,都必須啟動直譯器來
重新翻譯程式。
直譯式語言的程式處理流程
24
1.4 C 語言簡介
? C 語言與 C++ 語言有著奧妙的關係,因此有人說
, C++ 是 C 語言的延伸,也有人說, C++ 是一
種全新的語言。這兩種說法都算正確,因為 C+
+ 是使用基本的 C 語言語法,但 C++ 更重要的是
一種全新的物件導向觀念。在本節中,我們將分
別介紹這兩種語言的特色與歷史背景。
? C 語言是在 70 年代,由貝爾實驗室的 Ken
Thompson 與 Dennis Ritchie 共同發展的一套電
腦語言,該版本稱為 K & R C 。之後美國國家標
準協會( ANSI )於 1983 年將 C 語言標準化,
制訂出一套標準的 C 語言,稱為 ANSI-C (於
1988 年完成制定)。
25
?C 語言的發展歷史有其特殊背景, C 語言原本
不叫做 C 語言,而是另一種程式語言 B 語言,
Ken Thompson 與 Dennis Ritchie 兩人為了設
計 UNIX 作業系統,因此將 B 語言加以延伸為
C 語言,由於具有容易開發、效率高及可操控
硬體等特性,因此同樣是由貝爾實驗室所發展
的 UNIX 系統,系統核心的大部分程式碼都是
使用 C 來撰寫,並且在 UNIX 作業系統中的公
用程式及 C 語言的編譯器也是由 C 所撰寫的。
1.4 C 語言簡介 ( 續 )
26
? 命令式型態程式語言( Imperative
Paradigm Programming Language )
?命令式型態的程式語言是透過一連串指定敘述
(assign statement) 組合而成,指定敘述是表示
式 (expression) ,將一些子運算式加以組合,
只要依序執行這些敘述就可以得到結果, C 語
言是一種命令式型態的程式語言,其他諸如
BASIC 、 Pascal 、 FORTRAN 、 COBOL 等
也都屬於此類程式語言。
1.4 C 語言簡介 ( 續 )
x=x+1;
27
? 結構化程式語言 (Structural Programming
Language)
?C 語言是一種結構化程式語言,也就是採用結
構化分析設計的方法,將問題由上向下,由大
到小切割成許多子問題,分別尋得子問題的解
答,最後再結合起來解決所要解決的問題。這
種方法,也可以稱為模組化設計。解決子問題
的方法被分成一個個的模組,在 C 語言中則稱
為函式。在 C 的程式設計中,程式設計師必須
設計並組合這些函式來解決問題。
1.4 C 語言簡介 ( 續 )
28
1.5 程式開發流程與編譯器
? 開發 C 語言程式完成後,必須經過編譯才
能夠被執行,在附錄中,我們列出了許多
可以編譯 C 語言的編譯器,除此之外,在
本節中,我們也將針對 C 語言編譯器的基
本觀念加以說明,建立一些關於 C 語言編
譯器的基本觀念。
29
1.5.1 C 語言程式的開發流程
? 開發任何編譯式語
言程式都有一定的
流程(如右圖),
開發 C 語言的應用
程式也同樣可以透
過下圖流程加以完
成。
C 語言程式開發流程
30
1.5.1 C 語言程式的開發流程
( 續 )
? Step1 :
? 編輯與設計程式,您可以使用任何的純文字編輯器來編輯
C/C++ 程式(例如: Windows 的筆記本、 Linux 的 Vim 或
pico 等等),然後存成副檔名為『 .c 』與『 .cpp 』的原始程
式檔,其中純 C 語言程式可存檔為『 .c 』,而包含 C++ 語法
或函式庫的程式則存檔為『 .cpp 』。
? Step2 :
? 使用編譯器來編譯原始程式(例如: GCC 的 gcc/g++ ),編
譯結果將是一個目的檔案( object file )。
? Step3 :
? 使用連結器將目的程式及其他目的程式與程式庫共同連結成一
個可執行檔,目前大多數的編譯器都具有連結器的功能。
? Step4 :
? 不論您是在編譯過程或連結過程中發生錯誤或甚至是程式本身
的邏輯出現錯誤而無法達到程式需求時,都必須進入偵錯階段
,重新檢查並修正原始程式中的錯誤。如此週而復始,直到程
式完成您的需求為止。
31
1.5.2 編譯器 (Compiler) 【補
充】
? 傳統編譯器的功能是將原始程式轉換為目的碼
(如下圖為 C 語言編譯器的工作),目的碼中則
包含了機器指令、資料值及相關位址。就程式設
計師而言,設計高階語言程式比較不需要考慮程
式執行的機器平台,只要在不同的硬體結構,使
用不同的編譯器產生適合於該平台的目的碼即可
。
圖 1-11 C 語言編譯器的工作
32
1.5.2 編譯器 (Compiler) 【補
充】
? 編譯器的工作主要分為下列 5 個階段,並
透過符號表記錄程式中相關的名稱。
編譯器的處理流程
33
1.5.3 整合開發環境 (IDE)
? 傳統的編譯程式開發流程有些繁複,程式設計師
必須先用文書編輯器撰寫原始程式檔,然後再交
由編譯器、連結器將原始程式檔編譯為具有除錯
功能的可執行檔,最後經過除錯無誤後,才重新
編譯連結為最終的可執行檔。不過這個流程通常
不會一次就完成,因為程式可能發生語法、語意
等錯誤,而必須在編輯器、編譯器、除錯器間切
換許多次,才能夠得到最後正確的原始程式與執
行檔。
34
1.5.3 整合開發環境 (IDE) ( 續 )
? 整合開發環境( Integrated Development
Environment ;簡稱 IDE )是一套整合性軟體,
它將編輯器、編譯器、連結器、除錯器、執行程
式等功能整合在同一套軟體之內,以方便程式設
計師開發程式之用。
? 目前大多數的視窗程式整合開發環境除了提供上述功
能之外,還提供了許多的視窗套件供程式設計師使用
(這些套件也都被整合在 IDE 之中)。例如: Borland
公司所推出的 Builder C++ Builder 就是一套包含許多
元件的視窗程式整合開發環境。
35
1.5.3 整合開發環境 (IDE) ( 續 )
Microsoft Visual C++ 6.0 圖
36
1.5.3 整合開發環境 (IDE) ( 續 )
? 【編譯器與整合開發環境】
?由於整合開發環境已經包含了編譯器的功能,因
此我們常常會用整合開發環境的名稱作為編譯器
的名稱,例如 Microsoft Visual C++ 6.0 是一個整
合開發環境,但我們也可以稱它為一種編譯器,
因為它同樣具有編譯器的功能。但反之則較為不
當,例如 GCC 只具有編譯器的功能,而未將編
輯器等其他功能納入,因此,我們只會稱 GCC
為一種編譯器,而不會稱 GCC 為整合開發環境
。
37
1.5.3 整合開發環境 (IDE) ( 續 )
? 【 C 語言與 C++ 語言的編譯器】
?除了少數的古老編譯器(例如 Turbo C )之
外,大部分的程式設計師都使用 C++ 編譯器
來編譯 C 語言程式,因為, C++ 本身已經
包含了所有的 C 語言程式語法。在本書的附
錄中,我們介紹了非常多種類的 C++ 編譯器
,在本章中,我們只簡單示範、 Dev C++ 及
Microsoft Visual C++ 6.0 整合開發環境。
38
1.6 本章回顧及下章預覽
? 在本章中,我們介紹了組織電腦系統的兩大元件
,分別是硬體與軟體。其中軟體可以分為程式與
資料,而程式又可以分為系統程式與應用程式。
使用 C 語言不但可以開發應用程式,甚至連系統
程式也可以使用 C 語言來開發,例如 Unix 作業系
統就是其中一例。
39
1.6 本章回顧及下章預覽 ( 續 )
? 使用 C 語言開發程式最大的優點就是程式效率高
,而且 C 語言又比組合語言更容易撰寫,因此獲
得眾多程式設計師的喜愛。 C 語言從早期的 K &
R C 演變為 ANSI C 標準,使得眾多編譯器有了
依循的標準,這同時使得 C 語言的可攜性得以提
高。
? C 語言的原始程式是副檔名為『 .c 』的純文字檔
,它必須經過編譯器、連結器的處理才能夠變成
可執行檔。目前大多數的編譯器都具備了連結器
的功能,以及某些在正式編譯前的前置處理功能
,而這些額外功能其實都可以在編譯器的設定中
加以指定。
40
1.6 本章回顧及下章預覽 ( 續 )
? C 語言後來被衍生發展為 C++ 程式語言(加入了
物件導向技術),因此目前大多數的編譯器都是
C++ 的編譯器,但由於 C++ 包含了所有的 C 語法
,因此,我們也可以使用 C++ 編譯器來編譯 C 語
言程式,或甚至將原始程式儲存為 C++ 程式檔
(副檔名為『 .cpp 』)。
? 在本章中,我們實際練習了如何使用整合開發環
境來開發 C 語言程式,但我們並不了解所輸入 C
語言程式有何用途,這些 C 語言敘述的實際功能
,我們將從下一章開始陸續學習。
41
本章習題

More Related Content

What's hot (12)

系統程式 -- 第 8 章
系統程式 -- 第 8 章系統程式 -- 第 8 章
系統程式 -- 第 8 章
鍾誠 陳鍾誠
?
系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入
鍾誠 陳鍾誠
?
系統程式 - 附錄
系統程式 - 附錄系統程式 - 附錄
系統程式 - 附錄
鍾誠 陳鍾誠
?
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
建興 王
?
系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言
鍾誠 陳鍾誠
?
Introduction to C++ over CLI
Introduction to C++ over CLIIntroduction to C++ over CLI
Introduction to C++ over CLI
建興 王
?
系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言
鍾誠 陳鍾誠
?
系統程式 -- 第 7 章
系統程式 -- 第 7 章系統程式 -- 第 7 章
系統程式 -- 第 7 章
鍾誠 陳鍾誠
?
C語言 第一章 C語言簡介
C語言 第一章 C語言簡介C語言 第一章 C語言簡介
C語言 第一章 C語言簡介
shademoon
?
系統程式 -- 附錄
系統程式 -- 附錄系統程式 -- 附錄
系統程式 -- 附錄
鍾誠 陳鍾誠
?
系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入
鍾誠 陳鍾誠
?
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
建興 王
?
系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言
鍾誠 陳鍾誠
?
Introduction to C++ over CLI
Introduction to C++ over CLIIntroduction to C++ over CLI
Introduction to C++ over CLI
建興 王
?
系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言
鍾誠 陳鍾誠
?
C語言 第一章 C語言簡介
C語言 第一章 C語言簡介C語言 第一章 C語言簡介
C語言 第一章 C語言簡介
shademoon
?

Viewers also liked (18)

Ch09
Ch09Ch09
Ch09
jashliao
?
Ch05
Ch05Ch05
Ch05
jashliao
?
Ch04
Ch04Ch04
Ch04
jashliao
?
Ch08
Ch08Ch08
Ch08
jashliao
?
Ch06
Ch06Ch06
Ch06
jashliao
?
???? ????_??? ???
 ???? ????_??? ???  ???? ????_??? ???
???? ????_??? ???
Classting
?
烏托邦教學 簡易硬體維修
烏托邦教學 簡易硬體維修烏托邦教學 簡易硬體維修
烏托邦教學 簡易硬體維修
TanYuDe
?
0521 Google AdWords基礎認證考試
0521 Google AdWords基礎認證考試0521 Google AdWords基礎認證考試
0521 Google AdWords基礎認證考試
Kuan-hsin Lin
?
Google Analytics 網站分析: 學習心得分享
Google Analytics 網站分析: 學習心得分享Google Analytics 網站分析: 學習心得分享
Google Analytics 網站分析: 學習心得分享
Bob Chao
?
电脑不只会帮你选土豆,还会帮你选新闻
电脑不只会帮你选土豆,还会帮你选新闻电脑不只会帮你选土豆,还会帮你选新闻
电脑不只会帮你选土豆,还会帮你选新闻
Andy Dai
?
大數據時代的必備工具-Google Analytics
大數據時代的必備工具-Google Analytics大數據時代的必備工具-Google Analytics
大數據時代的必備工具-Google Analytics
新頁 陳
?
那些你知道的,但還沒看過的 Big Data 風景
那些你知道的,但還沒看過的 Big Data 風景那些你知道的,但還沒看過的 Big Data 風景
那些你知道的,但還沒看過的 Big Data 風景
Etu Solution
?
Google analytics 還原使用者操作現場
Google analytics 還原使用者操作現場Google analytics 還原使用者操作現場
Google analytics 還原使用者操作現場
Shih-En Chou
?
Google analytics教學手冊
Google analytics教學手冊Google analytics教學手冊
Google analytics教學手冊
煜庭 邱
?
那些你知道的,但還沒看過的 Big Data 風景 ─ 致 Hadooper
那些你知道的,但還沒看過的 Big Data 風景 ─ 致 Hadooper那些你知道的,但還沒看過的 Big Data 風景 ─ 致 Hadooper
那些你知道的,但還沒看過的 Big Data 風景 ─ 致 Hadooper
Fred Chiang
?
狠狠撸Share moves to HTML5
狠狠撸Share moves to HTML5 狠狠撸Share moves to HTML5
狠狠撸Share moves to HTML5
Amit Ranjan
?
大數據運算媒體業案例分享 (Big Data Compute Case Sharing for Media Industry)
大數據運算媒體業案例分享 (Big Data Compute Case Sharing for Media Industry)大數據運算媒體業案例分享 (Big Data Compute Case Sharing for Media Industry)
大數據運算媒體業案例分享 (Big Data Compute Case Sharing for Media Industry)
Amazon Web Services
?
The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017
LinkedIn
?
???? ????_??? ???
 ???? ????_??? ???  ???? ????_??? ???
???? ????_??? ???
Classting
?
烏托邦教學 簡易硬體維修
烏托邦教學 簡易硬體維修烏托邦教學 簡易硬體維修
烏托邦教學 簡易硬體維修
TanYuDe
?
0521 Google AdWords基礎認證考試
0521 Google AdWords基礎認證考試0521 Google AdWords基礎認證考試
0521 Google AdWords基礎認證考試
Kuan-hsin Lin
?
Google Analytics 網站分析: 學習心得分享
Google Analytics 網站分析: 學習心得分享Google Analytics 網站分析: 學習心得分享
Google Analytics 網站分析: 學習心得分享
Bob Chao
?
电脑不只会帮你选土豆,还会帮你选新闻
电脑不只会帮你选土豆,还会帮你选新闻电脑不只会帮你选土豆,还会帮你选新闻
电脑不只会帮你选土豆,还会帮你选新闻
Andy Dai
?
大數據時代的必備工具-Google Analytics
大數據時代的必備工具-Google Analytics大數據時代的必備工具-Google Analytics
大數據時代的必備工具-Google Analytics
新頁 陳
?
那些你知道的,但還沒看過的 Big Data 風景
那些你知道的,但還沒看過的 Big Data 風景那些你知道的,但還沒看過的 Big Data 風景
那些你知道的,但還沒看過的 Big Data 風景
Etu Solution
?
Google analytics 還原使用者操作現場
Google analytics 還原使用者操作現場Google analytics 還原使用者操作現場
Google analytics 還原使用者操作現場
Shih-En Chou
?
Google analytics教學手冊
Google analytics教學手冊Google analytics教學手冊
Google analytics教學手冊
煜庭 邱
?
那些你知道的,但還沒看過的 Big Data 風景 ─ 致 Hadooper
那些你知道的,但還沒看過的 Big Data 風景 ─ 致 Hadooper那些你知道的,但還沒看過的 Big Data 風景 ─ 致 Hadooper
那些你知道的,但還沒看過的 Big Data 風景 ─ 致 Hadooper
Fred Chiang
?
狠狠撸Share moves to HTML5
狠狠撸Share moves to HTML5 狠狠撸Share moves to HTML5
狠狠撸Share moves to HTML5
Amit Ranjan
?
大數據運算媒體業案例分享 (Big Data Compute Case Sharing for Media Industry)
大數據運算媒體業案例分享 (Big Data Compute Case Sharing for Media Industry)大數據運算媒體業案例分享 (Big Data Compute Case Sharing for Media Industry)
大數據運算媒體業案例分享 (Big Data Compute Case Sharing for Media Industry)
Amazon Web Services
?
The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017
LinkedIn
?

Similar to Ch01 (20)

C++
C++C++
C++
LohasBicycle
?
How A Compiler Works: GNU Toolchain
How A Compiler Works: GNU ToolchainHow A Compiler Works: GNU Toolchain
How A Compiler Works: GNU Toolchain
National Cheng Kung University
?
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
National Cheng Kung University
?
Hcsm lect-20120913
Hcsm lect-20120913Hcsm lect-20120913
Hcsm lect-20120913
lusecheng
?
110922 knoss-vol26-c++运行库
110922 knoss-vol26-c++运行库110922 knoss-vol26-c++运行库
110922 knoss-vol26-c++运行库
Zoom Quiet
?
Uc gui中文手册
Uc gui中文手册Uc gui中文手册
Uc gui中文手册
?? ?
?
OpenCV 2.4.2在codeblocks 10.05的環境設定
OpenCV 2.4.2在codeblocks 10.05的環境設定OpenCV 2.4.2在codeblocks 10.05的環境設定
OpenCV 2.4.2在codeblocks 10.05的環境設定
菌 細
?
第1讲 开始编写程序
第1讲 开始编写程序第1讲 开始编写程序
第1讲 开始编写程序
ruandao
?
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojects
George Ang
?
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source Projects
George Ang
?
Subversion
SubversionSubversion
Subversion
i7Xh
?
from Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Worksfrom Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Works
National Cheng Kung University
?

Ch01

  • 3. 3 大綱 ? 1.1電腦硬體 ? 1.2電腦軟體 ? 1.3程式語言 ? 1.4C 語言簡介
  • 4. 4 大綱 ( 續 ) ? 1.5程式開發流程與編譯器 ? 1.6本章回顧及下章預覽
  • 6. 6 ? 算數邏輯單元(簡稱 ALU )是執行程式中 各類運算的實體單位。這些運算則可以分 為兩大類:算數運算與邏輯運算。算數運 算包含加、減、乘、除等等的數值運算, 而邏輯運算則包含 AND 、 OR 、 NOT 、 移位等位元/位元組的邏輯運算。 1.1.1 算數邏輯單元
  • 7. 7 1.1.2 控制單元 ? 控制單元(簡稱 CU )的功能為控制流程及 協調輸入、輸出、記憶、算數邏輯等 4 大 單元的運作。控制單元中包含 (1) 記錄指令 運作順序的微程式( microprogram )、 (2) 取得下一指令的邏輯電路 (3) 驅動元件 的解碼器( decoder )及 (4) 眾多選擇器 ( multiplexer )。
  • 8. 8 1.1.3 記憶體單元 ? 記憶體單元分為主記憶體 (main memory) 與輔助記憶體 (secondary memory) ,主要 功能是用來儲存資料 ?主記憶體(又稱為內部記憶體),目前以半導 體元件制成,特性為存取速度快、成本高。主 記憶體依照存取特性又可以分為隨機存取記憶 體 (Random Access Memory ;簡稱 RAM) 及 唯讀記憶體 (Read Only Memory ;簡稱 ROM) 。
  • 9. 9 1.1.3 記憶體單元 ? RAM 的成本較低,但是無法於電力消失時保存資料, 故為揮發性記憶體的一種。 ROM 成本較高,但卻可以 在無電力的狀況下保存資料,傳統的 ROM 只能寫入資 料一次,因此通常只會把啟動電腦所需要的小程式儲 存在 ROM 裡面,例如 BIOS 就是使用 ROM 做為記憶 體。 ? 輔助記憶體(又稱為外部記憶體),目前以磁性物體 或光學材料組成,例如:硬碟機、軟碟片、光碟片。 輔助記憶體的存取速度相對於主記憶體慢了數十倍以 上,但製作成本則比主記憶體低了數十倍以上,因此 適合儲存大量的資料。
  • 12. 12 ? 電腦軟體分為資料與程式兩大類,事實上不論是 哪一類,都是以 0 、 1 的二位元表示法儲存在電 腦設備中(例如:儲存於硬碟機中)。 ? 而程式又可以分為系統程式( System Program )與應用程式( Application Program ) 。 ? 系統程式一般為較接近硬體底層的低階程式,例如: 作業系統 (Operating System) 、編譯程式 (Compiler) 、組譯程式 (Assembler) ,連結程式 (Linker) 等都屬於系統程式。 ? 應用程式則是架構在系統程式之上,依據某種特殊需 求而開發出來的軟體,例如: Office 、帳務系統、電 腦遊戲等等。 1.2 電腦軟體
  • 14. 14 1.3 程式語言 圖 1-6 程式语言分类
  • 15. 15 ? 機器語言( Machine Language )是電腦 硬體唯一看得懂的語言,換句話說,機器 語言就是一連串的 0 、 1 二進位數字組合 ,因此又稱為機器碼。一般人通常看不懂 這些 0 、 1 所代表的特殊涵義,其實對於 電腦而言,這些 0 、 1 的組合數字,可能 代表某種資料,也可能代表某個指令。由 於大多數的人無法了解或記憶這一連串 0 、 1 數字所代表的涵義,因而發展了低階 語言與高階語言。 1.3.1 機器語言
  • 16. 16 1.3.2 低階語言 ? 低階語言( Low-level Language )是一種 接近於機器語言的表示方法,不過卻使用 人類比較容易記憶的單字形式來對應一連 串的 0 、 1 組合。最典型的低階語言就是 組合語言( Assembly Language )。在組 合語言中,使用運算子與運算元來表示一 連串的 0 、 1 組合,而這些運算子則使用 類似英文的縮寫以利人類的記憶與理解, 例如:使用 INC 來代表 Increment (累加 指令)。
  • 17. 17 1.3.2 低階語言 ( 續 ) ?在上表中,很明顯的可以看出,組合語言的指 令與機器語言的指令是一對一的對應關係,但 是卻比機器語言容易記憶,除此之外,其他組 合語言的設計都與機器語言的設計相同,我們 可以從下表中更明確地看出兩者的相同與相異 處: 8051 機器語言指令 8051 組合語言指令 意義 00000100 INC 執行累加 1 10000100 DIV 執行除法 8051 組合語言指令與機器語言指令的對應
  • 18. 18 ? 組合語言與機器語言一對一的特性,使得 組合語言可以完全掌控電腦的硬體結構, 如此一來,在執行效率上自然也就完全交 由程式設計師決定。不過,由於不同的 CPU 必須使用不同的組合語言並且必須對 於該 CPU 的組織結構有充分認知,因此, 這種低階語言仍舊無法被絕大多數的人所 接受,因而發展了更接近於人類自然語言 的高階語言。 1.3.2 低階語言 ( 續 )
  • 19. 19 ? 組合語言雖然比機器語言更接近於自然語言,但 組合語言的程式設計師必須對於執行程式的處理 器有更多的了解,並且每個處理器的組合語言並 不相同,因此,一種比組合語言更接近自然語言 且不因更換機器而改變語法的程式語言也被發展 出來,此種語言就是高階語言。 ? 高階語言( High-level Language )使用更接近人 類思維的方式來設計程式,當程式設計完成之後 ,必須通過另外一些翻譯程式的翻譯後才能夠被 電腦執行。高階語言的運算子通常具有比較強大 的功能,因此,單一行的高階語言程式可能被翻 譯成許多的機器碼以便完成複雜的工作。 1.3.3 高階語言
  • 20. 20 ? 編譯式語言 ?編譯器採用整批作業( Batch )方式來處理程 式翻譯的工作,換句話說,當我們將程式設計 完畢並交由編譯器翻譯之後,編譯器會將翻譯 結果存成一個目的檔( object file ),而這個 目的檔可經由連結其他目的檔及程式庫之後形 成可執行檔( execute file ),並由電腦直接執 行。常見的編譯式語言有 C 、 C++ (編譯器為 gcc 、 g++ 、 VC+ + 、 BCB )、 Pascal 、 Object Pascal (編譯 器為 Delphi 、 Kylix )等等。 1.3.3 高階語言 ( 續 )
  • 21. 21 1.3.3 高階語言 ( 續 ) ? 編譯式語言 ? 編譯式語言使用模組化技巧,也就是把某些具有特殊 功能的片段程式獨立成一個個的函式,並將之集合成 一個函式庫檔案,如此一來,就可以讓需要使用該功 能的程式透過連結的方式加以結合,縮短撰寫程式的 時間。例如: ANSI-C 的 math 函式庫中就包含許多求 三角函數的函式,所以我們並不需要自行撰寫求三角 函數的詳細步驟,只要在需要求三角函數值時,引用 Math 函式庫即可。一個基本編譯式語言的程式處理流 程如下圖。
  • 22. 22 1.3.3 高階語言 ( 續 ) 編譯式語言的程式處理流程
  • 23. 23 1.3.3 高階語言 ( 續 ) ? 直譯式語言 ? 直譯器與編譯器處理程式的步驟不同,當我們使用直 譯式語言撰寫程式完畢並使用直譯器來翻譯程式時, 並不會產生目的檔或可執行檔。直譯器會將程式一行 一行的讀入,逐行翻譯並送交由電腦執行,因此,每 一次要執行編譯式語言程式時,都必須啟動直譯器來 重新翻譯程式。 直譯式語言的程式處理流程
  • 24. 24 1.4 C 語言簡介 ? C 語言與 C++ 語言有著奧妙的關係,因此有人說 , C++ 是 C 語言的延伸,也有人說, C++ 是一 種全新的語言。這兩種說法都算正確,因為 C+ + 是使用基本的 C 語言語法,但 C++ 更重要的是 一種全新的物件導向觀念。在本節中,我們將分 別介紹這兩種語言的特色與歷史背景。 ? C 語言是在 70 年代,由貝爾實驗室的 Ken Thompson 與 Dennis Ritchie 共同發展的一套電 腦語言,該版本稱為 K & R C 。之後美國國家標 準協會( ANSI )於 1983 年將 C 語言標準化, 制訂出一套標準的 C 語言,稱為 ANSI-C (於 1988 年完成制定)。
  • 25. 25 ?C 語言的發展歷史有其特殊背景, C 語言原本 不叫做 C 語言,而是另一種程式語言 B 語言, Ken Thompson 與 Dennis Ritchie 兩人為了設 計 UNIX 作業系統,因此將 B 語言加以延伸為 C 語言,由於具有容易開發、效率高及可操控 硬體等特性,因此同樣是由貝爾實驗室所發展 的 UNIX 系統,系統核心的大部分程式碼都是 使用 C 來撰寫,並且在 UNIX 作業系統中的公 用程式及 C 語言的編譯器也是由 C 所撰寫的。 1.4 C 語言簡介 ( 續 )
  • 26. 26 ? 命令式型態程式語言( Imperative Paradigm Programming Language ) ?命令式型態的程式語言是透過一連串指定敘述 (assign statement) 組合而成,指定敘述是表示 式 (expression) ,將一些子運算式加以組合, 只要依序執行這些敘述就可以得到結果, C 語 言是一種命令式型態的程式語言,其他諸如 BASIC 、 Pascal 、 FORTRAN 、 COBOL 等 也都屬於此類程式語言。 1.4 C 語言簡介 ( 續 ) x=x+1;
  • 27. 27 ? 結構化程式語言 (Structural Programming Language) ?C 語言是一種結構化程式語言,也就是採用結 構化分析設計的方法,將問題由上向下,由大 到小切割成許多子問題,分別尋得子問題的解 答,最後再結合起來解決所要解決的問題。這 種方法,也可以稱為模組化設計。解決子問題 的方法被分成一個個的模組,在 C 語言中則稱 為函式。在 C 的程式設計中,程式設計師必須 設計並組合這些函式來解決問題。 1.4 C 語言簡介 ( 續 )
  • 28. 28 1.5 程式開發流程與編譯器 ? 開發 C 語言程式完成後,必須經過編譯才 能夠被執行,在附錄中,我們列出了許多 可以編譯 C 語言的編譯器,除此之外,在 本節中,我們也將針對 C 語言編譯器的基 本觀念加以說明,建立一些關於 C 語言編 譯器的基本觀念。
  • 29. 29 1.5.1 C 語言程式的開發流程 ? 開發任何編譯式語 言程式都有一定的 流程(如右圖), 開發 C 語言的應用 程式也同樣可以透 過下圖流程加以完 成。 C 語言程式開發流程
  • 30. 30 1.5.1 C 語言程式的開發流程 ( 續 ) ? Step1 : ? 編輯與設計程式,您可以使用任何的純文字編輯器來編輯 C/C++ 程式(例如: Windows 的筆記本、 Linux 的 Vim 或 pico 等等),然後存成副檔名為『 .c 』與『 .cpp 』的原始程 式檔,其中純 C 語言程式可存檔為『 .c 』,而包含 C++ 語法 或函式庫的程式則存檔為『 .cpp 』。 ? Step2 : ? 使用編譯器來編譯原始程式(例如: GCC 的 gcc/g++ ),編 譯結果將是一個目的檔案( object file )。 ? Step3 : ? 使用連結器將目的程式及其他目的程式與程式庫共同連結成一 個可執行檔,目前大多數的編譯器都具有連結器的功能。 ? Step4 : ? 不論您是在編譯過程或連結過程中發生錯誤或甚至是程式本身 的邏輯出現錯誤而無法達到程式需求時,都必須進入偵錯階段 ,重新檢查並修正原始程式中的錯誤。如此週而復始,直到程 式完成您的需求為止。
  • 31. 31 1.5.2 編譯器 (Compiler) 【補 充】 ? 傳統編譯器的功能是將原始程式轉換為目的碼 (如下圖為 C 語言編譯器的工作),目的碼中則 包含了機器指令、資料值及相關位址。就程式設 計師而言,設計高階語言程式比較不需要考慮程 式執行的機器平台,只要在不同的硬體結構,使 用不同的編譯器產生適合於該平台的目的碼即可 。 圖 1-11 C 語言編譯器的工作
  • 32. 32 1.5.2 編譯器 (Compiler) 【補 充】 ? 編譯器的工作主要分為下列 5 個階段,並 透過符號表記錄程式中相關的名稱。 編譯器的處理流程
  • 33. 33 1.5.3 整合開發環境 (IDE) ? 傳統的編譯程式開發流程有些繁複,程式設計師 必須先用文書編輯器撰寫原始程式檔,然後再交 由編譯器、連結器將原始程式檔編譯為具有除錯 功能的可執行檔,最後經過除錯無誤後,才重新 編譯連結為最終的可執行檔。不過這個流程通常 不會一次就完成,因為程式可能發生語法、語意 等錯誤,而必須在編輯器、編譯器、除錯器間切 換許多次,才能夠得到最後正確的原始程式與執 行檔。
  • 34. 34 1.5.3 整合開發環境 (IDE) ( 續 ) ? 整合開發環境( Integrated Development Environment ;簡稱 IDE )是一套整合性軟體, 它將編輯器、編譯器、連結器、除錯器、執行程 式等功能整合在同一套軟體之內,以方便程式設 計師開發程式之用。 ? 目前大多數的視窗程式整合開發環境除了提供上述功 能之外,還提供了許多的視窗套件供程式設計師使用 (這些套件也都被整合在 IDE 之中)。例如: Borland 公司所推出的 Builder C++ Builder 就是一套包含許多 元件的視窗程式整合開發環境。
  • 35. 35 1.5.3 整合開發環境 (IDE) ( 續 ) Microsoft Visual C++ 6.0 圖
  • 36. 36 1.5.3 整合開發環境 (IDE) ( 續 ) ? 【編譯器與整合開發環境】 ?由於整合開發環境已經包含了編譯器的功能,因 此我們常常會用整合開發環境的名稱作為編譯器 的名稱,例如 Microsoft Visual C++ 6.0 是一個整 合開發環境,但我們也可以稱它為一種編譯器, 因為它同樣具有編譯器的功能。但反之則較為不 當,例如 GCC 只具有編譯器的功能,而未將編 輯器等其他功能納入,因此,我們只會稱 GCC 為一種編譯器,而不會稱 GCC 為整合開發環境 。
  • 37. 37 1.5.3 整合開發環境 (IDE) ( 續 ) ? 【 C 語言與 C++ 語言的編譯器】 ?除了少數的古老編譯器(例如 Turbo C )之 外,大部分的程式設計師都使用 C++ 編譯器 來編譯 C 語言程式,因為, C++ 本身已經 包含了所有的 C 語言程式語法。在本書的附 錄中,我們介紹了非常多種類的 C++ 編譯器 ,在本章中,我們只簡單示範、 Dev C++ 及 Microsoft Visual C++ 6.0 整合開發環境。
  • 39. 39 1.6 本章回顧及下章預覽 ( 續 ) ? 使用 C 語言開發程式最大的優點就是程式效率高 ,而且 C 語言又比組合語言更容易撰寫,因此獲 得眾多程式設計師的喜愛。 C 語言從早期的 K & R C 演變為 ANSI C 標準,使得眾多編譯器有了 依循的標準,這同時使得 C 語言的可攜性得以提 高。 ? C 語言的原始程式是副檔名為『 .c 』的純文字檔 ,它必須經過編譯器、連結器的處理才能夠變成 可執行檔。目前大多數的編譯器都具備了連結器 的功能,以及某些在正式編譯前的前置處理功能 ,而這些額外功能其實都可以在編譯器的設定中 加以指定。
  • 40. 40 1.6 本章回顧及下章預覽 ( 續 ) ? C 語言後來被衍生發展為 C++ 程式語言(加入了 物件導向技術),因此目前大多數的編譯器都是 C++ 的編譯器,但由於 C++ 包含了所有的 C 語法 ,因此,我們也可以使用 C++ 編譯器來編譯 C 語 言程式,或甚至將原始程式儲存為 C++ 程式檔 (副檔名為『 .cpp 』)。 ? 在本章中,我們實際練習了如何使用整合開發環 境來開發 C 語言程式,但我們並不了解所輸入 C 語言程式有何用途,這些 C 語言敘述的實際功能 ,我們將從下一章開始陸續學習。