- C語言程序設(shè)計(jì)教程
- 何穎剛 林麗娜 唐基宏 葉曉紅
- 1981字
- 2019-10-12 16:40:27
1.1.3 程序設(shè)計(jì)語言
人和人之間的交流需要通過語言。中國人之間用漢語,美國人之間用英語,法國人之間用法語。那么人和計(jì)算機(jī)之間進(jìn)行交流,也需要采用特定的語言,這就是計(jì)算機(jī)語言,即程序設(shè)計(jì)語言。程序設(shè)計(jì)語言大概經(jīng)歷了以下幾個(gè)發(fā)展階段:
第一代:機(jī)器語言
計(jì)算機(jī)內(nèi)部所有數(shù)據(jù)均采用二進(jìn)制數(shù)表示,也就是說計(jì)算機(jī)只能識(shí)別和接受由0和1組成的指令。因此,最早、最底層的程序設(shè)計(jì)語言,是以二進(jìn)制編碼形式存在的機(jī)器基本指令集為基礎(chǔ)的語言,稱為機(jī)器語言,也就是第一代程序設(shè)計(jì)語言。在語言的規(guī)則中規(guī)定各種指令的二進(jìn)制表示形式以及作用。由于用機(jī)器語言編寫的程序直接針對計(jì)算機(jī)硬件,因此,它的執(zhí)行效率比較高,能充分體現(xiàn)出計(jì)算機(jī)快速運(yùn)行的特點(diǎn),這是機(jī)器語言最大的優(yōu)點(diǎn)。當(dāng)然,機(jī)器語言也存在著明顯的缺點(diǎn),因?yàn)闄C(jī)器語言是由二進(jìn)制代碼組成的,與人們習(xí)慣使用的語言有較大的差別,導(dǎo)致機(jī)器語言難學(xué)、難寫、難記、難檢查、難理解、難修改、難以推廣使用,所以初期只有極少數(shù)計(jì)算機(jī)專業(yè)人員會(huì)編寫計(jì)算機(jī)程序。此外,機(jī)器語言強(qiáng)烈依賴于計(jì)算機(jī)硬件的指令系統(tǒng),而每臺(tái)計(jì)算機(jī)的指令系統(tǒng)往往各不相同,在一臺(tái)計(jì)算機(jī)上可以執(zhí)行的程序,要想到另一臺(tái)計(jì)算機(jī)上執(zhí)行,往往要重新編寫程序,所以機(jī)器語言的可移植性差。
第二代:匯編語言
為了克服機(jī)器語言難學(xué)、難寫、難記的缺點(diǎn),人們使用一些英文字母和數(shù)字表示一個(gè)指令,例如用“ADD”表示“加”,“SUB”表示“減”,“MOV”表示“數(shù)據(jù)傳送”等。于是指令MOV A,B就表示將B寄存器中的數(shù)據(jù)傳送到A寄存器中。
雖然匯編語言比機(jī)器語言簡單好記一些,但仍然難以普及。
機(jī)器語言和匯編語言完全依賴于具體的機(jī)器特性,是面向機(jī)器的語言。由于它“貼近”計(jì)算機(jī),或者說離計(jì)算機(jī)“很近”,因此又稱為計(jì)算機(jī)低級語言。
第三代:高級語言
為了克服低級語言的缺點(diǎn),20世紀(jì)50年代產(chǎn)生了第一個(gè)計(jì)算機(jī)高級語言——FORTRAN語言。它很接近自然語言和數(shù)學(xué)語言。程序中用到的語句和指令是用英文單詞表示的,程序中所用的運(yùn)算符和運(yùn)算表達(dá)式與人們?nèi)粘K玫臄?shù)學(xué)式子差不多,很容易理解。
這種語言功能性很強(qiáng),且不依賴于具體機(jī)器,用它寫出的程序?qū)θ魏涡吞柕挠?jì)算機(jī)都適用(或只需要作些小修改),它與具體機(jī)器距離較遠(yuǎn),因此稱為計(jì)算機(jī)高級語言。
用高級語言編寫的程序一般稱為源程序。計(jì)算機(jī)不能直接運(yùn)行一個(gè)源程序,必須通過一種“翻譯程序”將源程序翻譯成計(jì)算機(jī)能識(shí)別和執(zhí)行的機(jī)器語言形式的目標(biāo)代碼。這種“翻譯”通常有兩種方式:編譯方式和解釋方式。
(1)編譯方式是將高級語言源程序整個(gè)編譯成目標(biāo)程序,然后通過鏈接程序?qū)⒛繕?biāo)程序鏈接成可執(zhí)行程序的方式。編譯過程經(jīng)過詞法分析、語法分析、中間代碼生成、代碼優(yōu)化、目標(biāo)代碼生成等6個(gè)環(huán)節(jié),才能生成對應(yīng)的目標(biāo)代碼程序,目標(biāo)程序還不能直接執(zhí)行,還需要經(jīng)過鏈接和定位生成可執(zhí)行程序后才能執(zhí)行。目標(biāo)代碼可以脫離其語言環(huán)境,使用比較方便,效率較高。但應(yīng)用程序一旦需要修改,必須先修改源程序代碼,再重新編譯生成新的目標(biāo)代碼。
(2)解釋方式是將源程序逐句翻譯、逐句執(zhí)行的方式,解釋過程不產(chǎn)生目標(biāo)代碼,基本上是翻譯一行執(zhí)行一行,邊翻譯邊執(zhí)行。如果在解釋過程中發(fā)現(xiàn)錯(cuò)誤就給出錯(cuò)誤信息,并停止解釋和執(zhí)行,如果沒有錯(cuò)誤就解釋執(zhí)行到最后的語句。解釋方式效率較低,不能生成可獨(dú)立執(zhí)行的文件,應(yīng)用程序不能脫離其解釋器,但這種方式比較靈活,可以動(dòng)態(tài)地調(diào)整、修改源程序。
高級語言經(jīng)歷了不同的發(fā)展階段:
(1)非結(jié)構(gòu)化語言。早期的高級語言多屬于非結(jié)構(gòu)化語言,編程風(fēng)格比較隨意,只要符合語法規(guī)則即可,沒有嚴(yán)格的規(guī)范要求,程序的流程可以隨意跳轉(zhuǎn)。早期的BASIC、FORTRAN和ALGOL等都屬于非結(jié)構(gòu)化語言。
(2)結(jié)構(gòu)化語言。為了解決非結(jié)構(gòu)化語言難以閱讀和維護(hù)的問題,產(chǎn)生了“結(jié)構(gòu)化程序設(shè)計(jì)方法”,規(guī)定程序必須由順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)的基本結(jié)構(gòu)構(gòu)成,程序中的流程不允許隨意跳轉(zhuǎn),程序總是由上而下順序執(zhí)行各個(gè)基本結(jié)構(gòu)。QBASIC、FORTRAN77和C語言等都屬于結(jié)構(gòu)化語言,這些語言的特點(diǎn)是支持結(jié)構(gòu)化程序設(shè)計(jì)方法。
以上兩種語言都是面向過程的,在編寫程序時(shí)需要具體指定每個(gè)過程的細(xì)節(jié),程序設(shè)計(jì)時(shí)以函數(shù)或子程序?yàn)橹行模煤瘮?shù)或子程序來作為劃分程序的基本單位,程序的執(zhí)行是對一系列函數(shù)或子程序的調(diào)用。
(3)面向?qū)ο蟮恼Z言。由于面向過程的語言在處理規(guī)模較大的程序時(shí),捉襟見肘,力不從心,20世紀(jì)80年代初,產(chǎn)生了面向?qū)ο蟪绦蛟O(shè)計(jì)。面向?qū)ο蟪绦蛟O(shè)計(jì)以數(shù)據(jù)為中心,類作為表現(xiàn)數(shù)據(jù)的工具成為劃分程序的基本單位,而函數(shù)成為了類的接口。面向?qū)ο蟪绦蛟O(shè)計(jì)可以更直接地描述客觀世界存在的事物及事物之間的相互關(guān)系。C++就是一款典型的面向?qū)ο蟪绦蛟O(shè)計(jì)語言。
第四代:面向問題語言
第四代程序設(shè)計(jì)語言的提出主要是為了成數(shù)量級地提高軟件生產(chǎn)率,縮短軟件開發(fā)周期,它通常具有“面向問題”“非過程化”等特點(diǎn)。以數(shù)據(jù)庫管理系統(tǒng)為基礎(chǔ)的查詢語言SQL就是一種典型的第四代計(jì)算機(jī)語言。
- Java Web及其框架技術(shù)
- Access 2010數(shù)據(jù)庫基礎(chǔ)與應(yīng)用項(xiàng)目式教程(第3版)
- Microsoft Dynamics GP 2013 Reporting, Second Edition
- MATLAB定量決策五大類問題
- Windows Forensics Cookbook
- SharePoint Development with the SharePoint Framework
- 單片機(jī)應(yīng)用與調(diào)試項(xiàng)目教程(C語言版)
- HTML5與CSS3基礎(chǔ)教程(第8版)
- Web性能實(shí)戰(zhàn)
- Scala編程(第5版)
- 代碼閱讀
- QGIS 2 Cookbook
- Android應(yīng)用開發(fā)實(shí)戰(zhàn)(第2版)
- Learning Android Application Testing
- Mastering SciPy