1 / 18

程式語言簡介

程式語言簡介. 程式語言的演進. 一、機器語言 (machine language) 由一堆的 「 0 」或「 1 」 所組成。 對於 不同 型態的電腦,因為其結構不同就有不同的機器語言。 不容易撰寫外,對於程式的維護也相對的困難。 二、組合語言 (assembly language) 使用 輔助記憶碼 以方便記憶。 不同型態的電腦,其組合語言也是不相同的。 須經由 assembler( 組譯程式 ) 組譯成機器碼後,才可執行。. 程式語言的演進. 三、高階語言 (high-level language) 使用人們所熟悉的語法來描述。

deion
Télécharger la présentation

程式語言簡介

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 程式語言簡介

  2. 程式語言的演進 一、機器語言(machine language) • 由一堆的「0」或「1」所組成。 • 對於不同型態的電腦,因為其結構不同就有不同的機器語言。 • 不容易撰寫外,對於程式的維護也相對的困難。 二、組合語言(assembly language) • 使用輔助記憶碼以方便記憶。 • 不同型態的電腦,其組合語言也是不相同的。 • 須經由assembler(組譯程式)組譯成機器碼後,才可執行。

  3. 程式語言的演進 三、高階語言(high-level language) • 使用人們所熟悉的語法來描述。 • 大大減低了程式設計的難度,這使得它廣為程式設計師所採用。 • 須經由compiler(編譯程式)或interpreter(直譯程式)翻譯成機器碼後,才可執行。 四、非常高階語言(very high-level language) • 第四代程式語言(fourth –Generation Language;4GL) • 程式設計師只要設定它所要的格式及其結果,這種語言會自動推展出所期望的程式碼。

  4. 語言轉譯程式 BASIC 非常高階語言 高階語言 Interpreter 直譯程式 Fortran COBOL PASCAL C C++ BCB Compiler 編譯程式 Machine Code 機器程式碼 ASSEMBLY Assembler 組譯程式 組合語言 機器語言

  5. 語言轉譯程式 對於高階(High Level)語言,您仍得將其翻譯成機械碼才得以執行。 翻譯的方式有兩種: • 直譯法(為直譯程式的翻譯方式) 亦即當演講者講了一句後,翻譯員立即將此句翻譯給聽眾,聽眾馬上了解演講者所講的這句話;如此一直到演講者講完為止。 • 全譯法(為編譯程式的翻譯方式) 亦即讓演講者將整篇講稿講完後,翻譯員才將整篇講稿翻譯出來,而後聽眾才了解整個演講的內容。

  6. 語言轉譯程式 • 直譯器(Interpreter) 直譯法的優點是: 1.在直譯法下,使用者欲執行程式時,一般是執行一條命令即可。 2.直譯程式該翻譯程式在被使用者使用過程中,一般都儲存在主記憶體,所以當使用者每次執行程式時,不必浪費取出直譯程式的 I/O 時間。 3.由於在直譯法下,使用者不需要執行連結的工作,所以可以省去不少有關連結工作的 I/O 時間。 4.直譯程式在執行時,是採用交談式(Interactive)的方式。亦即使用者可以很容易的與電腦作溝通之工作。

  7. 語言轉譯程式 • 編譯器 (Compiler) 欲利用編譯器來完成高階語言之翻譯然後執行時,一般需要逐次完成下列三個步驟後,才能完成使用者程式之執行工作。 1.產生目的程式 利用編譯程式將原始程式全部翻譯成機器語言程式,亦即翻譯成目的程式。 2.產生可執行之機器語言程式 利用廠商所提供的連結程式(Linker)執行連結的工作。此時才產生一個可執行的機器語言程式。該可執行的機器語言程式,在IBM PC下稱之為可執行程式(Executable Program),其延伸檔名(Filename Extension)一般為 EXE 或 COM。 3.執行程式 執行使用者程式,亦即執行機器語言程式。

  8. 程式語言的應用 • 科學計算 • FORTRAN (Mathematical FORmula TRANslating System) • 商業應用 • COBOL (Common Business Language) • 人工智慧 • LISP, Prolog • 系統程式語言 • C, C++

  9. 資料型態 • 整數型態 • int:2 bytes, -32768(-216)~+32767(+216-1) • long:4 bytes, -2147483648(-232)~+2147483647(+232-1) • 浮點數型態 • IEEE-754 • 單精準度:Sign(1 bit) + Exponent(8 bits) + Mantissa(23 bits) • 字符型態 • char:1 byte, ASCII • 陣列型態 • 一群具有相同資料型態的變數所組成,如 int A[100] • 資料型態可為:整數,浮點數,字符…等。 A[0] A[1] A[2] ……… ……… A[99]

  10. 資料型態 • 紀錄型態 • 又稱為結構型態,存放的是不同類型的資料型態,由一群欄位(Field)所結合而成。 • 指標型態 • 指標型態所存放的值是位址。 • 完成資料結構的好幫手。 struct scoretable { int id; char name; int score[5]; } student[100] int a; int *p; a=10; P=&a;

  11. 變數的範疇(scope) • 靜態範疇 • 依程式本身,變數的實際位置來決定。 • 動態範疇 • 依程式執行時,副程式的呼叫順序來決定。 副程式sub1並未定義 x 的值為10。 • 如果採用“靜態範疇”規則,印出的 x = ? 為什麼? • 如果採用“動態範疇”規則,印出的 x = ? 為什麼? PROGRAM main INTEGER x; PROCEDURE sub1 BEGIN PRINT x; END PROCEDURE sub2 INTEGER x; BEGIN x=20; CALL sub1; END BEGIN x=10; CALL sub2; END

  12. 副程式參數傳遞法 • 形式參數 • 副程式本身所定義的參數名稱及型態 • 實際參數 • 呼叫者(主程式)呼叫副程式時,所附上一些該有的參數。 void swap(int a, int b) { int t; t=a; a=b; b=t; } main ( ) { int x=5, y=10; swap (x,y); Printf(“%d,%d”.x,y); } 形式參數 實際參數

  13. 副程式參數傳遞法 • Call by Value (傳值) • 僅將主程式實際參數的值,copy給副程式的形式參數,主程式實際參數的值不會改變,沒有side effect (副作用) 。 • C語言只有call by value void swap(int a, int b) { int t; t=a; a=b; b=t; } main ( ) { int x=5, y=10; swap (x,y); Printf(“%d,%d”.x,y); } a x 5 5 / 10 t 5 b y 10 / 5 10

  14. 副程式參數傳遞法 • Call by Address (傳址) • 又稱“Call by Reference” • 將只程式實際參數的位址,傳給副程式的形式參數,主程式實際參數的值可能改變,有side effect (副作用) 。 • C++採用Call by Address void swap(int a, int b) { int t; t=a; a=b; b=t; } main ( ) { int x=5, y=10; swap (x,y); Printf(“%d,%d”.x,y); } a t x 1500 / 1000 1000 1000 5 / 10 位址 b y 1500 1500 10 / 1000 / 5

  15. 副程式參數傳遞法 • Call by Name (傳名) • 以實際參數的名稱取代形式參數(早期的做法),有side effect(副作用)。 void swap(int a, int b) { int t; t=a; a=b; b=t; } main ( ) { int x=5, y=10; swap (x,y); Printf(“%d,%d”.x,y); } / x a x 5 5 / 10 / 10 t 5 / y b y 10 / 5 10 / 5

  16. 副程式參數傳遞法 • Call by Value/Result • 取代Call by Address,因為在分散式環境裡,主副程式的address 配置不同,所以不能用Call by Address,有side effect (副作用)。 void swap(int a, int b) { int t; t=a; a=b; b=t; } main ( ) { int x=5, y=10; swap (x,y); Printf(“%d,%d”.x,y); } a x 5 5 / 10 10 / t 5 b y 10 / 5 10 5 /

  17. 副程式參數傳遞法 • Homework_8 請分別以下列參數傳遞法 • call by value • call by address • call by name • call by value/result 寫出右列程式之最後輸出結果。 program main(input,output); procedure p(x,y,z); begin y:=y+1; z:=z+x; end; begin a:=2; b:=3; p(a+b,a,a); print "a=",a; end

  18. 副程式參數傳遞法 main( ) { int a[5]={2,4,6,8,10}; int x=1; f(x,a[x]); print “x=“, x; print a[0],a[1],a[2],a[3],a[4]; } void f(int i, int j ) { i=3; j=100; } 請分別以下列參數傳遞法 • call by value • call by address • call by name • call by value/result 寫出右列程式之最後輸出結果。

More Related