第二章 電腦資料表示法與數字系統

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