計導課件3.jidao-chap2程序設計語言概述_第1頁
計導課件3.jidao-chap2程序設計語言概述_第2頁
計導課件3.jidao-chap2程序設計語言概述_第3頁
計導課件3.jidao-chap2程序設計語言概述_第4頁
計導課件3.jidao-chap2程序設計語言概述_第5頁
已閱讀5頁,還剩38頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1第二章程序設計語言概述2提綱2.1程序設計語言的演化

2.2構建和運行程序

2.3程序設計語言的分類

32.1程序設計語言的演化程序設計:設計求解問題的方法和步驟—關鍵是算法的設計。語言:是用于表達和描述的工具。語言的基礎是一組字符和一組規則。根據規則由字符構成的字符串的總體就是語言。程序設計語言:用于書寫計算機程序的語言,用于表達和描述要加工的數據以及求解問題的步驟和過程。是根據預先定義的規則(語法)、由一個有限字母表上的字符構成的字符串的總體。

4第四代語言高級語言符號語言機器語言2.1程序設計語言的演化5計算機發展早期使用的語言;由“0”和“1”的二進制碼組成,是計算機唯一可以直接識別的語言;與具體機器有關,不同的機器能識別的機器語言也不同;1、機器語言2.1程序設計語言的演化6123456789101112131415160000000001011110

11111000

1110111111110100000000111110111101111110111110000000011011101111

0000010000001100111011111110111110101110101100010000000101010110110100010000000101111010010101111010100010000000100000010000000100

1100001000010110100111101101111111011111111110111101111111011111111110111010110111000101111110111111101100000100000001000000000000000000000000000000001000000000000001010000000000001011000000000001001000000000000101010000000000010111000000000001111000000000001000010000000000100100

000000000010101100000000001100010000000000110100000000000011110100000000001111012.1程序設計語言的演化-機器語言7機器語言的缺陷非?;逎y讀;書寫工作量大,且容易出錯,不易修改;由于和具體的機器相關,要求開發人員對計算機的硬件和指令系統要有很正確深入的理解,并且有熟練的編程技巧,因此只有少數專家能達到此要求;移植性不好(在一臺機器上編寫的機器語言程序在不同型號的另一臺機器上可能不能運行);2.1程序設計語言的演化-機器語言820世紀50年代早期,數學家GraceHopper發明了符號語言,即用符號或助記符來表示不同的機器語言指令(包括操作碼和和操作數地址)。程序員可用ADD、SUB、MUL、DIV等符號來分別表示加法、減法、乘法、除法的操作碼。符號語言又稱匯編語言。2、符號語言2.1程序設計語言的演化-符號語言9

程序注釋(運算結果)

MULBB;送入BMULAE;4a送入AMULAC;4ac送入ASUBBA;-4ac送入BMOVDB;-4ac從B傳送到DHLT;停機AaBbCcDdE41~6為指令,MUL為乘法指令,SUB為減法指令,MOV為傳送指令、HLT為停機指令;A、B、C、D、E分別表示存儲數a、b、c、d以及常數4的寄存器。求d=-4ac的匯編語言程序操作碼操作數地址用符號或助記符來表示指令中的操作碼和和操作數地址10匯編語言編寫的程序需要翻譯成機器語言(二進制代碼)才能運行,這個翻譯過程由匯編程序來實現。2.1程序設計語言的演化-符號語言11匯編語言的局限匯編語言的語法、語義結構仍然和機器語言基本一樣,而與人的傳統解題方法相差甚遠。匯編語言的大部分指令是和機器指令一一對應的,因此代碼量大。和具體的機器相關,人們終究還是要對計算機的硬件和指令系統有很正確深入的理解,而且還是要記住機器語言的符號(助記符)。移植性不好。2.1程序設計語言的演化-符號語言12由于匯編語言的局限性,后來出現了高級語言。高級語言與自然語言(尤其是英語)很相似,因此高級語言程序易學、易懂、也易查錯。3、高級語言2.1程序設計語言的演化-高級語言13#include<stdio.h>main()

{intnumber1;

intnumber2;intresult;

printf("pleaseinputthetwonumbers:\n");scanf(“%d%d”,&number1,&number2);//讀取乘數和被乘數result=number1*number2;//兩數相乘printf(“theresultis:%d\n”,result);//輸出結果return0;}

兩數相乘的C語言程序書上31頁錯誤,將16行和18行的d%改成%d14高級語言的優勢高級語言程序易學、易懂、也易查錯。使程序員可以完全不用與計算機的硬件打交道、不必了解機器的指令系統。

高級語言與具體機器無關,在一種機器上運行的高級語言程序有可能可以不經改動地移植到另一種機器上運行,大大提高了程序的通用性。2.1程序設計語言的演化-高級語言15第四代語言(Fourth-GenerationLanguage,以下簡稱4GL)是一種面向問題的程序設計語言,實現了在更高一級層次上的抽象,可以極大地提高軟件生產率,縮短軟件開發周期。4GL提供了功能強大的非過程化問題定義手段,用戶只需告知系統做什么,而無需說明怎么做,程序就能夠自動生成算法,自動進行處理。典型的4GL語言有ADA,MODULA-2,SMALLTALK-80等。4、第四代語言2.1程序設計語言的演化162.1程序設計語言的演化按照4GL的功能可以將其劃分為查詢語言和報表生成器、圖形語言、應用生成器、形式規格說明語言等幾類。查詢語言:是數據庫管理系統的主要工具,它提供用戶對數據庫進行查詢的功能。如SQL(StructuredQuevyLanguage,結構化查詢語言)報表生成器:是為用戶提供的自動產生報表的重要工具,它提供非過程化的描述手段讓用戶很方便地根據數據庫中的信息來生成報表,如ADF。圖形語言:用圖形的方式來進行軟件開發。應用生成器:是重要的一類綜合的4GL工具,它用來生成完整的應用系統。應用生成器讓用戶不必使用多個軟件,而只用這樣一個綜合工具來實現多種功能。

形式規格說明語言:形式化地對軟件應滿足的功能、性能及其它重要方面的陳述,可避免自然語言的二義性,也是軟件自動化的基礎。17理想情況下,計算機能夠理解自然語言(如英語、漢語等)并立即執行請求。大量關于自然語言的工作正在實驗室中進行。但迄今為止,自然語言的使用仍然是相當有限的

5、自然語言2.1程序設計語言的演化182.2構建和運行程序

高級語言程序翻譯成機器語言程序需要借助于翻譯程序。翻譯程序有編譯程序和解釋程序兩種。

編譯程序:將編寫的源程序中全部語句一次性翻譯成機器語言程序后,再運行機器語言程序。編譯和運行是兩個獨立分開的階段。若想多次運行同一個程序,只要源程序不變,則不需要重新編譯;源程序若有修改,則需要重新編譯。編譯程序和解釋程序19解釋程序:將源程序中的一條語句翻譯成機器語言后立即執行它(并且不再保存剛執行完的機器語言程序),然后再翻譯執行下一條語句。如此重復,直到程序結束。如果一條語句要重復執行,則每一次的重復執行都要重新翻譯該語句,故效率很低。著名的解釋程序有:BASIC語言解釋程序、LISP語言解釋程序、UNIX命令語言(shell)解釋程序、數據庫查詢語言SQL解釋程序等。當前大部分語言如C、C++、FORTRAN、ALGOL等是用編譯程序進行翻譯的。而BASIC、PASCAL、LISP等既有編譯程序、又有解釋程序。2.2構建和運行程序

202.2構建和運行程序

#include<stdio.h>#include“genlib.h”#defineN10main(){inti;for(i=1;i<=N;i++)printf(“%d\n”,i);}源文件1.c編譯器010010010101100100010000101000111010110110100111目標文件1.obj100101101011000101101001001010010110110101101011庫鏈接器010010010101100100010000101000111010110110100111100101101011000101101001001010010110110101101011可執行文件.exe1.編輯程序2.編譯程序3.鏈接程序4.運行程序00011101110100101101100010100110...000111001110011101011010加載程序CPUC標準庫:有豐富的函數集,可供程序員直接使用。21源文件2.c編譯器目標文件2.obj源文件1.c編譯器目標文件1.obj100101101011000101101001001010010110110101101011庫鏈接器010010010101100100010000101000111010110110100111100101101011000101101001001010010110110101101011可執行文件.exe當程序由多個源文件組成時222.2構建和運行程序

#include<stdio.h>#include“genlib.h”#defineN10main(){inti;for(i=1;i<=N;i++)printf(“%d\n”,i);}源文件.c編譯器010010010101100100010000101000111010110110100111目標文件.obj預處理程序+翻譯程序預處理程序:通常是把其他文件包含到要編譯的文件中、以及用程序文本替換專門的符號。C語言中預處理指令都以#開頭。翻譯程序:將預處理后的程序翻譯成二進制代碼。stdlib.h……..……..genlib.h……..232.2構建和運行程序

#include<stdio.h>#include“genlib.h”#defineN10main(){inti;for(i=1;i<=N;i++)printf(“%d\n”,i);}源文件.c預處理文件stdio.h和genlib.h的內容main(){inti;for(i=1;i<=10;i++)printf(“%d\n”,i);}242.2構建和運行程序

100101101011000101101001001010010110110101101011庫鏈接器010010010101100100010000101000111010110110100111100101101011000101101001001010010110110101101011可執行文件.exe#include<stdio.h>#include“genlib.h”#defineN10main(){inti;for(i=1;i<=N;i++)printf(“%d\n”,i);}源文件.c預處理文件stdio.h和genlib.h的內容main(){inti;for(i=1;i<=10;i++)printf(“%d\n”,i);}010010010101100100010000101000111010110110100111目標文件.obj翻譯25思考題:假設某程序中有這么一條語句:a=b+c;其在硬盤上的存儲內容為:01100001001111010110001001100011既然程序代碼已經是二進制的,為什么不能直接執行,還需要再編譯一下呢?編譯后二進制代碼類似于:move寄存器R1b內存地址move寄存器R2c內存地址addR1R2movea內存地址R1

262.3

語言的分類過程化語言面向對象語言函數型語言說明性語言專用語言根據人們對于求解問題的方法進行分類可以將程序設計語言進行分類。27基于馮·諾依曼結構描述計算過程的語言。面向過程的程序設計特點:面向動作(活動)。求解問題(程序)是一個復雜的計算過程,該計算過程可被分解成若干個動作(活動)。即:一個計算過程可看做是一系列動作。一個動作可以是一條語句(基本操作)或是一個可以繼續分解的子過程(子程序)。1、過程化語言

2.3語言的分類28子過程(子程序):每一個子程序實現一個明確、獨立的功能。應用上述方法可繼續分解為一系列動作。循環往復直至將“動作”分解為“基本操作—語句”??傊嫦蜻^程的設計即是實現某一計算的操作過程和操作步驟,然后用過程化語言來描述這些操作過程和步驟。

2.3語言的分類29借書續借圖書管理系統還書…圖書管理系統被劃分成借書、還書、續借等功能,每一個功能的實現對應于一個執行過程,有一系列的執行步驟。一個簡單的借書過程可能如下:1.讀取借閱者的借書證信息,驗證借閱者身份合法性;2.若身份合法,則驗證借閱者是否有欠款未交;3.若有欠款,則記錄借閱者的付款信息;4.驗證借閱者當前是否已經借滿書;5.若可以借書,則將借閱者的借書信息記錄到系統中;……用過程化語言描述的操作過程30

FORTRAN第一個高級語言,由JackBackus領導下的一批IBM工程師設計,1957年商用。適用于科學計算。COBOL面向商業數據處理的語言。PASCAL1971,NiklausWirth在瑞士的蘇黎士發明。通過強調結構化編程方法來教初學者編程。適用于科研和教學,但從未在工業界獲得廣泛的流行。

CDennisRitchie在20世紀70年代初發明,最初是想用于編寫操作系統和系統軟件。具有高級數據結構和控制結構,亦可調用底層功能,指令短、高效。

ADA為美國國防部開發,分布式系統控制語言。2.3語言的分類31面向對象基本思想:從現實世界中客觀存在的事物出發來構建軟件系統,強調直接以問題域(現實世界)中的事物為中心來思考問題、認識問題,并根據這些事物的本質特征,把它們抽象地表示為系統中的對象,作為系統的基本構成單位。(對象)對象包含屬性和操作,每一個對象有明確的職責,完成一定的功能。(屬性和操作)對象之間不是孤立的,而是具有各種關系。對象與對象之間通過消息進行通信,相互協作。(消息)同類型的對象可以進一步抽象出共性,形成類。(類)2、面向對象語言

2.3

語言的分類322.3

語言的分類-面向對象語言面向對象語言可以用來描述參與問題解決的對象以及對象之間的關系。PublicclassBook{PrivateStringtitle;PublicBooleanlend(){……}PublicBooleanreturn(){…

}}書借閱者圖書管理系統中的2個主要類:書、借閱者抽象用Java語言描述332.3

語言的分類C++擴展的C語言,具有了面向對象的特性。JAVA純面向對象語言。Sun公司開發,在C和C++的基礎上發展而來,但去除了C++中的一些語言特性,從而更加強壯。主要的兩種面向對象語言343、函數型說明語言

2.3

語言的分類-函數型說明語言基于數學建模求解問題的思想。程序的基本單元是函數。函數可以理解成一個黑盒,完成從一系列輸入(X)到輸出(Y)的映射。函數型語言主要實現以下功能:

定義一系列可供任何程序員調用的基本函數;允許程序員通過組合若干基本函數創建新的函數。

35例如:定義一個稱為First的基本函數。由它來完成從一個列表中抽取第一個元素的功能。再定義另一個函數rest,由它完成從一個列表中抽取出除第一個元素以外的所有元素。通過組合使用兩個函數,可以在程序中定義一個函數來完成對第三個元素的抽取。

2.3語言的分類-函數型說明語言36LISP20世紀60年代早期由麻省理工大學(MIT)科研小組設計開發。把所有的一切都看成是列表,把列表作為處理對象。

Scheme定義了一系列基本函數。函數名和函數的輸入列表寫在括號內,結果是一個可用于其他函數輸入的列表。(car2378111720)===>2(cdr2378111720)===>378111720現在可以組合這兩個函數實現從列表中取出第三個元素7:(car(cdr(cdrlist)))2.3語言的分類-函數型說明語言374、說明性(邏輯)語言根據已知正確的一些論斷(事實),運用邏輯推理的可靠準則推導出新的論斷(事實)。If(AisB)and(BisC),then(AisC)將此準則應用于下面的事實:事實1:Socratesisahuman→AisB事實2:Ahumanismortal→BisC則可以推導出下面的事實:事實3:Socratesismortal→AisC2.3語言的分類-說明性(邏輯)語言3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論