第二章 電腦資料表示法與數字系統
Download
Report
Transcript 第二章 電腦資料表示法與數字系統
第1章C語言與程式設計簡介
1-1 認識程式語言
1-2 程式設計簡介
1-3 C語言簡介
1-4 C的開發環境
1-5 第一個C程式
1
1-1 認識程式語言
「程式語言」,其實就是一種人類用來和
電腦溝通的語言,也是用來指揮電腦運算
或工作的指令集合。
程式語言發展的歷史已有半世紀之久,由
最早期的機器語言發展至今,已經邁入到
第五代自然語言。
2
程式語言發展史
3
機械語言
機械語言(Machine Language) 是最早期的
程式語言,由1和0兩種符號構成,是電腦
能夠直接閱讀與執行的基礎語言。
任何程式在執行前都必須被轉換為機械語
言。
機械語言可讀性低也不容易維護 。
4
組合語言
組合語言(Assembly Language)是一種介於
高階語言及機械語言間的符號語言,不同
CPU要使用不同的組合語言。
組合語言必須經過所謂組譯器。
(Assembler),將組合語言轉換成機械語言
每一種系統的組合語言都不一樣 。
5
高階語言
高階語言(High-level Language) 是相當接
近人類使用語言的程式語言,雖然執行較
慢,但語言本身易學易用,因此被廣泛應
用在商業、科學、教學、軍事等相關的軟
體開發上。
它的特點是必須經過編譯或解譯的過程,
才能轉換成機器語言碼。
高階語言又依照轉換過程可區分為以下兩
種:編譯式語言及解譯式語言。
6
編譯式語言
編譯式語言,是一種使用編譯器(Compiler)
將程式碼翻譯為目的程式的語言。
當原始程式每修改一次,就必須重新編譯。
不過經過編譯後所產生的執行檔可直接對
應成機器碼,故可在電腦上直接執行,不
需要每次執行都重新翻譯,執行速度自然
較快。
例如C、C++、VISUAL C++、FORTRAN
語言都是屬於編譯式語言。
7
編譯式語言示意圖
8
解譯式語言
解譯式語言則是利用解譯器(Interpreter)來
對高階語言的原始程式碼做逐行解譯,每
解譯完一行程式碼後,才會再解譯下一行。
解譯的過程中如果發生錯誤,則解譯動會
立刻停止。
9
解譯式語言示意圖
10
非程序性語言
「非程序性語言」 (Non-procedural
Language)也稱為第四代語言,特點是它的
指令和程式真正的執行步驟沒有關連。程
式設計者只須將自己打算做什麼表示出來
即可,而不須去理解電腦的執行過程。
例如資料庫的結構化查詢語言(Structural
Query Language,簡稱SQL)就是一種第四
代語言。
11
人工智慧語言
稱為第五代語言,或是自然語言(Natural
Language),語法類似一般人的對話。
自然語言在使用者口音、使用環境、本身
特性(如一詞多義)都會造成電腦在解讀時不
同結果與辨識的困難度。
自然語言的發展必須搭配人工智慧(Artificial
Intelligence, AI)理論的演進來進行。
12
演算法定義
在韋氏辭典中定義為:「在有限步驟內解
決數學問題的程序。」
應用在計算機領域中,可以把演算法定義
成:「為了解決某一個工作或問題,所需
要有限數目的機械性或重覆性指令與計算
步驟。」
13
演算法的五項條件
14
常用演算法
一般文字敘述
虛擬語言(Pseudo-Language)
表格或圖形
流程圖
程序語言
15
評斷程式語言的四項標準
可讀性(Readability):閱讀與理解都相當容
易。
平均成本:成本考量不侷限於編碼成本,
還包括了執行、編譯、維護、學習、除錯
與日後更新等成本。
穩定度:所撰寫出來的程式碼穩定性高,
不容易產生邊際錯誤(Side Effect)。
可撰寫性:可針對需求撰寫出相對容易的
程式碼。
16
程式設計的五大步驟
17
程式碼撰寫原則
適當的縮排
明確的註解
有意義的命名
18
適當的縮排
縮排的主要用途是用來區分程式的層級,
使得程式碼易於閱讀。
一般編寫程式時,經常會以Tab鍵(或者空白
鍵)來做為縮排的間距。
幾乎所有的程式開發工具都提供了Tab鍵間
距設定的功能,預設值為4個空白鍵。
19
明確的註解
對於程式設計師而言,在適當的位置加入
足夠明確的註解,往往是評斷程式設計優
劣的重要依據。尤其當程式架構日益龐大
時,適時在程式中加入註解,不僅可提高
程式可讀性,更可讓其它程式設計師清楚
這段程式碼的功用。
20
有意義的命名
使用有意義的識別字(包括變數、常數、函
數、結構等)命名原則,更對於程式的可讀
性和可偵錯性有相當程度幫助。
避免和該程式語言的保留字(keyword)有所
衝突。
以識別字所被賦予的功能意義來命名。
21
結構化程式設計
「結構化程式設計」 (Structured
Programming)的核心精神,就是「由上而
下設計」 與「模組化設計」 。
每一個模組會都具備特定功能,而主程式
則用來組合每個模組來完成最終所要求的
功能。
「模組化設計」的缺點一旦主程式所要求
的功能變動時,則可能牽動許多模組內的
資料與演算法必須同步變動。
22
C語言的特點
執行效率高且具低階處理能力
具有高可攜性
.擴充性強
結構化程式設計
23
C的開發環境
Visual C++ 2005 Express
C++ Builder
Visual C++
Dev C++
GCC
24
C程式的基本架構
前置處理區
程式區塊
程式敘述
程式註解
25
前置處理區
C的前置處理區大多以#開頭,是在開始編
譯檔案之前先做的動作。例如「#include」
就是屬於ㄧ種前置處理指令(preprocessor
directive) 。
C內建許多標準函數供我們使用,這些函數
被分門別類放置於副檔名為「.h」的標頭檔
中。
通常除了使用C所提供的內建標頭檔外,也
可以使用各位自訂的標頭檔 。
26
程式註解
C的程式註解是以「/*」作開頭,「*/」作
結束,並且可以出現在程式的任何位置。
當編譯器遇到註解中內容時,會採取略過
方式而不會加以編譯。
註解的用法並無一定方式,總之「/*」與
「*/」之間的文字都屬於註解內容,另外註
解也能夠跨行使用。
註解符號的使用不可形成巢狀結構。
27
程式敘述
程式敘述式或稱為指令(statement),指令
所包含的內容相當廣泛,如宣告、變數、
運算式、函數呼叫、流程控制、迴圈等。
C中的每一行陳述句都必須一個分號「;」
作為結束,這是因為編譯器會忽略程式碼
中所有空白與註解內容,只有當編譯器遇
到(;)時,才會判定是該行指令的結束。
28
程式區塊
程式區塊(block)是由{}左右兩個大括弧所組成。
C程式是一種「自由化格式」(free format),只要
不違背基本語法,可以自由安排程式碼位置。
也就是可以將一個指令拆成好幾行,或將好幾行
指令放在一行。
在同一行指令中,對於完整不可分割的單元稱為
字符(token),兩個字符間必須以空白鍵、tab鍵或
輸入鍵區隔,而且不可分開。
29
C程式開發步驟
從開發一個C程式,直到讓電腦可以執行這
些指令,需要經過「編輯」、「前置處
理」、「編譯」、「連結」、「載入」與
「執行」六個步驟。
30
C程式編寫完整流程圖
31
第一個C程式:CH01_1
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
/*前置處理區*/
#include<stdio.h>
#include<stdlib.h>
/*主程式區塊*/
int main()
{
printf("第一個C語言程式!!\n");
system("pause");
return 0;
}
32
檔案編譯視窗
33
CH01_1執行結果
34
Main()函數
main()又稱為「主函數」。由於C語言是區
分英文大小寫(case sensitive)的程式語言,
各位也不能寫成MAIN()、Main()等名稱。
main()函數中以「{}」大括號含蓋的範圍稱
為函數主體。
函數宣告時,會在函數名稱前面加上函數
傳回值資料型態,如果函數不傳回值,則
設定其資料型態為「void」。
35