- 第一行代碼 C語言(視頻講解版)
- 翁惠玉
- 3384字
- 2019-09-10 14:45:34
1.3 程序設計語言
程序設計語言是程序員和計算機進行交流時采用的語言。程序員用程序設計語言編寫解決各種問題的軟件。隨著計算機的發展,人類與計算機交互的語言也在進步,程序設計語言的發展經過了4個階段:
? 第一代 機器語言
? 第二代 匯編語言
? 第三代 高級語言
? 第四代 智能語言
1.3.1 機器語言
每臺計算機硬件都會完成一些基本的操作,如將內存信息輸送到運算器的寄存器中或將寄存器中的信息存入內存的某個單元。每個基本的操作都被表示成一個二進制比特串,這個比特串被稱為機器語言。所有合法操作的集合被稱為這臺機器的指令系統。每臺計算機都有自己的機器語言。
機器語言是由計算機硬件識別并直接執行的語言。機器語言能夠提供的功能由計算機硬件設計所決定,因而能提供的功能非常簡單,否則會導致計算機的硬件設計和制造過于復雜。不同的計算機由于硬件設計的不同,它們的機器語言也是不一樣的。機器語言之所以必須由0和1組成,是因為計算機內部的電路都是開關電路,0和1正好對應于開和關兩種狀態。
每條機器語言的指令一般都包括操作碼和操作數兩個部分。操作碼指出了運算的種類,如加、減、移位等。操作數指出參加運算的數據值或數據值的存儲地址,如內存地址或寄存器的編號。例如某臺機器的指令系統中有一條指令10001100,它的前2位10表示加法,后面每3位表示運算數所在的寄存器編號,該指令表示將寄存器001和寄存器100的內容相加,結果存入寄存器001。
機器指令根據其功能一般可以分成算術運算指令、邏輯運算指令、數據傳送指令和輸入/輸出指令、控制指令。算術運算指令執行算術運算,邏輯運算指令執行邏輯運算;數據傳送指令用于內存和運算器之間的數據傳輸;輸入/輸出指令用于內存和輸入/輸出設備之間的數據交換;控制指令用于改變指令的執行次序。
由于機器語言是由硬件實現的,提供的功能相當簡單。用機器語言編寫程序相當困難,就如教一個剛出生的嬰兒做微積分一樣困難。機器語言使用二進制比特串表示,因此用機器語言書寫的程序就是一個二進制比特串,很難閱讀和理解,又容易出錯。而且程序員在用機器語言編程序時還必須了解機器的很多硬件細節。例如有幾類寄存器,每類寄存器有多少個,每個寄存器長度是多少,內存大小是多少等。由于不同的計算機有不同的機器語言,一臺計算機上的程序無法在另外一臺不同類型的計算機上運行,這將會引起大量的重復勞動。
1.3.2 匯編語言
為了克服機器語言可讀性差的缺點,人們采用了與機器指令意義相近的英文縮寫作為助記符,于是在20世紀50年代出現了匯編語言。匯編語言是符號化的機器語言,即將機器語言的每條指令符號化,采用一些帶有啟發性的文字串,如 ADD(加)、SUB(減)、MOV(傳送)、LOAD (取)。常數和地址也可以用一些符號寫在程序中,如可以將指令10001100表示為
ADD (001) (100)
這種表示方法比機器指令更容易理解。
與機器語言相比,匯編語言的含義比較直觀,使程序的閱讀和理解更加容易。但計算機硬件只“認識”0、1組成的機器語言,并不“認識”由字符組成的匯編語言,不能直接理解和執行匯編語言寫的程序。必須將每一條匯編語言的指令翻譯成機器語言的指令后計算機才能執行。為此,人們創造了一種稱為匯編程序的程序,讓它充當匯編語言程序到機器語言程序的翻譯,將匯編語言寫的程序翻譯成機器語言寫的程序,如圖1-4所示。

圖1-4 匯編過程
匯編語言解決了機器語言可讀性的問題,但沒有解決機器語言可移植性的問題。而且匯編語言的指令與機器語言的指令基本上是一一對應的,提供的基本功能與機器語言是一致的,都是一些非常基本的功能,所以用匯編語言編寫程序還是很困難的。
1.3.3 高級語言
高級語言的出現是計算機程序設計語言的一大飛躍,FORTRAN、COBOL、BASIC、C、Java等都是高級語言。
高級語言是一種與機器的指令系統無關、表達形式更接近于科學計算的程序設計語言。計算機專業人員事先寫好了許多實用的程序,使程序員可以在程序中直接使用3*5-6或 a<7之類的表達式,從而更容易被科技工作者掌握。程序員只要熟悉簡單的幾個英文單詞,熟悉代數表達式以及規定的幾個語句格式就可以方便地編寫高級語言的程序,而且不需要知道機器的硬件環境。
有了高級語言,計算機就相當于有了一定的水平。在此基礎上教它其他知識就更加容易了。
由于高級語言是獨立于計算機硬件環境的一種語言,因而有較好的可移植性。在一臺計算機上編寫的程序可以在另外一臺不同類型的計算機上運行,從而減少了程序員的重復勞動。高級語言提供的功能也比機器語言強得多。比如,可以處理各種類型數據的運算以及處理復雜的表達式,使編寫程序更加容易。
盡管每種高級語言都有自己的語法規則,但提供的功能基本類似。每種程序設計語言都允許在程序中直接寫一些數字或字符串,這些被稱為常量。對于在寫程序時沒有確定的值,可以給它們一個代號,稱為變量。高級語言事先做好了很多處理不同類型數據的工具,稱為數據類型,如整型、實型和字符型等。每個工具實現了一種類型的數據處理,如整型解決了整數在計算機內如何保存、如何實現整數的各種運算問題。當程序需要處理整數時,可以直接用整型這個工具。程序設計語言提供的類型越多,功能也越強。如果程序設計語言沒有提供某種類型,則當程序要處理這種類型的信息時,程序員必須自己編程解決。例如,通常的程序設計語言都沒有復數這個類型,如果某個程序要處理復數,程序員必須在程序中解決復數的存儲和計算問題。高級語言提供了算術運算和邏輯運算的功能,使程序員可以用類似于數學中的表達式表示算術運算和邏輯運算。它還提供了將一個常量或表達式的計算結果與一個變量關聯起來的功能,這稱為變量賦值。也可以根據程序執行過程中的某些中間值執行不同的語句,這稱為程序設計語言的控制結構。對于一些復雜的大問題,直接設計出完整的算法有一定的困難,通常采用將大問題分解成一系列小問題的方法。在設計解決大問題的算法時可以假設這些小問題已經解決,直接調用解決小問題的程序即可。每個解決小問題的程序被稱為一個過程單元。在程序設計語言中過程單元被稱為函數、過程或子程序等。
高級語言又分為過程化語言和面向對象的程序設計語言。如果解決某個問題用到的工具都是程序設計語言所提供的工具,如處理整數或實數的運算,這些程序很容易實現。如果用到了一些程序設計語言不提供的工具,則非常困難,如要處理一首歌曲、一張圖片或一些復數的數據。程序員希望能有這樣一個工具,可以播放一首歌曲或編輯一首歌曲,這時可以自己創建一個工具,即創建一個新的數據類型,如歌曲類型、圖片類型和復數類型。這就是面向對象程序設計。面向對象程序設計語言提供了創建工具的功能。而過程化程序設計語言不提供創建新類型的功能。C、Pascal 等是過程化的程序設計語言。而C++、Java等是面向對象的程序設計語言。
1.3.4 智能語言
智能語言也稱為非過程化語言。顧名思義,用智能語言寫程序時,只需要告訴計算機想做什么事,而不需要告訴它如何去做,這將大大簡化程序員的工作。
非過程化語言通常是為某個應用量身定做的語言。最經典的非過程化語言是數據庫操作語言SQL。用 SQL 語言操作數據庫時無須寫出如何實現操作的詳細過程。例如,程序員只需要表達需要在哪一個表中查找滿足什么條件的數據或向數據庫的哪一個表中插入一條數據而不必詳細說明如何查找、如何插入等。
1.3.5 C語言
C語言是本書選用的程序設計語言。C語言是貝爾實驗室的 Dennis Ritchie在 B語言的基礎上開發的,1972年在DEC PDP-11計算機上得到了實現。C語言作為UNIX操作系統的開發語言而廣為人知。1989年,美國國家標準協會制定了C語言的標準(ANCI C)。
在所有的程序設計語言中,C 語言有它獨特的地位。如果讀者學過一些其他的程序設計語言,如 Java、Python 等,會發現它們與 C 語言非常類似。C 語言非常簡潔靈活,這些語言都采納了 C語言的優點。掌握了C語言后,再學這些語言就會非常容易。
作為高級語言,C語言支持結構化程序設計,支持3種結構化程序設計要求的基本程序結構,有豐富的數據類型,提供了30多個運算符,可以完成算術運算和邏輯運算,使用方便、簡潔、靈活。同時 C 語言又具有低級語言的功能,可以完成位運算,非常適合開發系統軟件。很多操作系統、編譯器都是用 C 語言開發的。UNIX 系統、手機的安卓等系統的底層代碼都是用 C 語言開發的。蘋果的 iOS 系統機上面的軟件是用 C 語言的一個變種語言 Objective-C 開發的。C 預言的優點是“靈活”,缺點也是“靈活”。因為太靈活、太自由,所以一不小心就會出錯。
但C語言不支持面向對象,所以本書僅限于介紹過程化程序設計。
- Mastering Entity Framework Core 2.0
- 64位匯編語言的編程藝術
- Python貝葉斯分析(第2版)
- Learning Data Mining with R
- 51單片機C語言開發教程
- Python Machine Learning Blueprints:Intuitive data projects you can relate to
- Scrapy網絡爬蟲實戰
- Learning C++ by Creating Games with UE4
- Python數據科學實踐指南
- 微信小程序開發邊做邊學(微課視頻版)
- ArcPy and ArcGIS(Second Edition)
- 算法精解:C語言描述
- 深入大型數據集:并行與分布化Python代碼
- HTML5 Game Development by Example:Beginner's Guide(Second Edition)
- 深度學習的數學:使用Python語言