5.1 基本介紹


Programming Language 程式語言

年代 特徵1 特徵2 特徵3 特徵4 特徵5
1GL (Machine Language)低階語言 由 0, 1 組成 為機器能直接執行的語言 user 不易理解
2GL (Assembly Language)低階語言 提供簡易的符號供 user 使用 用 “assembler” 將之轉成 object code Ex: ADD R1 3 => 將 3 加到 Register R1 中
3GL (High-Level Language)高階語言 提供更多貼近 user 的指令 多為程序導向的程式語言 (procedural language -> tell “how” to do) Ex: int i = 3 + 5; 代表:C (具 self-compile), PASCAL, FURTRAN, COBOL, BASIC, C++, JAVA, .NET C 語言: 1. compile 完的 object code, 不能跨平台 2. 此邊是語法, 故可跨平台
4GL (Non-procedural Language) 非程序導向高階語言 又稱為宣告式語言 (Declaractive Language) -> tell “what” to do 代表:SQL, report generator Ex: Select height From student where height ≥ 180
5GL (Natural Language) 自然語言高階語言 使用到人工智慧的技術 為機器能直接執行的語言 代表:LISP, PROLOG

種類

種類 代表性程式語言 備註
Interpreter language 直譯 Basic, Java, Javascript, ASP, PHP, JSP, ruby, groovy, python
Compile language 編譯 C, C++, FURTRAN, PASCAL, COBAL -> 先編譯成 object code java, javascript 沒有關係
先 compile, 後 interpreter -> p-code, java 跨平台 (cross-platform)
Object Oriented Programming (OOP) java, C++, C#, .NET, javascript, ruby, python, groovy, VB, smalltalk, Ada
Functional Programming Language (函式編程語言) FPL LISP, ML, F# 適用於平行運算, 以 function 為 first class, 各 function 間 No side effect

funtion (函式) => C, C++, Java

  • 格式:
1
2
3
4
return type   function name  parameter list
{
function code (body)
}
  1. return type : 回傳型態 output
  2. function name: in c, c++ 中 main 代表主程式
  3. parameter List: 參數串列, 接收外界呼叫時須引入的參數 input
  4. function code process

funtion calling (呼叫)

  • 格式:
1
2
3
4
5
6
7
8
9
10
11
funA()
{
int a, b;
...
funcB(a, b) // (a, b 為 actual parameter 實際參數 AP)
}

funB(x, y) // (x, y 為 foraml parameter 型式參數 FP)
{
...
}
  1. 參數傳遞 (funcB in funcA)
  2. funcB execute
  3. funcB return

參數傳遞種類

Call by value Call by address Call by name Call by value-result
AP 跟 FP 佔用不同的 memory space 操作相同 Memory space AP 會直接取代 FP 之所在 在 function 最後結束時, 將 FP 寫回對應 AP 之內容
No side effect
binding 速度慢 (最慢) 最快 居中
不適合用於結構型資料的參數傳遞 適合
  • Ex1:
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
int a = 10, b = 20;
fun(a, b);
print(a, b);
return 0;
}

void fun(int x, int y)
{
x = 3;
y = 6;
}

問分別採 1. call by value 2. call by address 3. call by value result, output = ? a = ? b = ?
Sol:

  1. a=10, b=20
  2. x, y 為記錄 a, b 的位址, 並指回原變數。Ans: a=3, b=6
  3. 最後結束時會將 FP 寫回對應 AP 之內容, 具 side effect(砍掉前,將最後的值抓回)。Ans: a=3, b=6
  • Ex2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
int a = 4, b = 6;
fun(a, b, a+b);
return 0;
}

void fun(int x, int y, int z)
{
x = 7;
y = 10;
int t = z * z;
printf(t)
}

問採 1. call by name? 2. call by address?
Sol:

  1. 87, 需注意 a+b*a+b先乘除後加減
  2. 100
  • Note:
    call by-address 時, 若有運算式, 則此採 call by-value 來接收
    call by-reference 一般而言相同, 但在 c++ 中, 2 者完全不同
    call by-name 多做一件事, 所以居中

結構化程式三要求 Structure Programming Language SPL

三要素:

  1. 循序 sequential
    指令會依序一一往下執行
  2. 選擇 selective/conditional
    利用 “判別式” 來決定接下來的執行步驟為何
    if...else...
    switch...case...
  3. 重複 repeat/iteractive
    利用 “loop” 來反覆執行部分的 step
    for loop
    while
    do...while
  • SPL 中避免使用 “跳躍” 指令或動作
    jump, goto