- 手把手教你學(xué)C語言
- 吳明杰 曹宇 吳丹
- 2275字
- 2018-11-08 18:15:29
1.1 C的起源和發(fā)展
1.1.1 計(jì)算機(jī)語言發(fā)展的三個(gè)階段
如圖1-1所示,計(jì)算機(jī)語言的發(fā)展主要分為三個(gè)階段。

圖1-1 計(jì)算機(jī)語言發(fā)展的三個(gè)階段
1.機(jī)器語言
第一代計(jì)算機(jī)語言稱為機(jī)器語言。機(jī)器語言就是0/1代碼。計(jì)算機(jī)只能識別0和1。在計(jì)算機(jī)內(nèi)部,無論是一部電影還是一首歌曲或是一張圖片,最終保存的都是0/1代碼,因?yàn)镃PU只能執(zhí)行0/1代碼。那么這是不是就意味著我們編程一定要用0/1代碼呢?首先這么編寫肯定是可以的,但是這樣太麻煩,而且很不好理解,所以后來就出現(xiàn)了匯編語言。
2.匯編語言
匯編語言就是將一串很枯燥無味的機(jī)器語言轉(zhuǎn)化成一個(gè)英文單詞。比如說:
add 1, 2;
add就是一個(gè)英文單詞,這樣看起來就稍微有一些含義了,即1和2相加。這個(gè)就是匯編語言。
如果直接用機(jī)器語言編寫的話,這幾乎是無法實(shí)現(xiàn)的。因?yàn)橛脵C(jī)器語言太難記憶了,也沒人能看得懂。所以后來就設(shè)計(jì)出了第二種語言,即將0/1代碼翻譯為英文單詞,這些英文單詞直接對應(yīng)著一串0/1指令。這個(gè)就是匯編語言。通過專門的軟件就可以將這些英文單詞轉(zhuǎn)化成0/1代碼并由計(jì)算機(jī)執(zhí)行,這種專門起翻譯的作用的軟件叫作編譯器。這些英文單詞和與它們對應(yīng)的0/1代碼之間的對應(yīng)關(guān)系,以及語言的語法,在編寫這個(gè)軟件的時(shí)候就已經(jīng)寫在里面了。我們只要通過編譯器就可以將這些都轉(zhuǎn)化成0/1代碼。這樣大大方便了我們對程序的編寫。
3.高級語言
匯編語言之后又出現(xiàn)了第三代語言。第三代語言又叫“高級語言”。高級語言的發(fā)展分為兩個(gè)階段,以1980年為分界線,前一階段屬于結(jié)構(gòu)化語言或者稱為面向過程的語言,后一階段屬于面向?qū)ο蟮恼Z言。
什么叫面向過程,什么叫面向?qū)ο螅窟@是很難解釋的一個(gè)問題,所以這個(gè)問題大家現(xiàn)在先不要考慮。等到將來你們學(xué)完C語言、C++、Java或者C#之后才有可能理解。因?yàn)檫@個(gè)需要比較。
總之,面向過程語言中最經(jīng)典、最重要的就是C語言。Fortran、Basic和Pascal語言基本上已經(jīng)很少有人使用了。但是C語言一直在用,因?yàn)镃語言是計(jì)算機(jī)領(lǐng)域最重要的一門語言。但是C語言也有缺陷,它的缺陷只有在學(xué)完面向?qū)ο笳Z言之后才能體會到。
所以從20世紀(jì)80年代開始又產(chǎn)生了另外一種“以面向?qū)ο蟆睘樗枷氲恼Z言,其中最重要、最復(fù)雜的就是C++。C++從易用性和安全性兩個(gè)方面對C語言進(jìn)行了升級。C++是一種較復(fù)雜、難學(xué)的語言,但是一旦學(xué)會了則非常有用。因?yàn)镃++太復(fù)雜,所以后來就對C++進(jìn)行了改裝,產(chǎn)生了兩種語言,一個(gè)是Java,另一個(gè)是C#。
Java語言是現(xiàn)在最流行的語言之一。C#則是微軟公司看Java很流行而寫的一個(gè)與Java語法相似的語言。因?yàn)镴ava和C#幾乎是一模一樣的,所以你只需要學(xué)習(xí)其中的一種語言就可以了。
1.1.2 語言運(yùn)行速度的比較
計(jì)算機(jī)語言越是低級速度就越快,因?yàn)樵降图壘驮椒嫌?jì)算機(jī)的思維。所以計(jì)算機(jī)語言中執(zhí)行速度最快的是機(jī)器語言,匯編語言其次,高級語言的速度最慢。高級語言中C的速度最快,C++其次,最慢的是Java和C#。Java和C#雖然速度慢,但它們在任何機(jī)器上都可以運(yùn)行,而且運(yùn)行結(jié)果一模一樣,這是它們的一個(gè)優(yōu)點(diǎn),也是它們流行的原因之一。
1.1.3 C語言的演變過程
與C語言相關(guān)的語言很多。其中最早的一門語言叫Algol 60,是1960年產(chǎn)生的,它是真正的第一門面向問題的語言。但是這門語言離硬件比較遠(yuǎn),所以1963年劍橋大學(xué)在Algol 60的基礎(chǔ)上研發(fā)出了CPL。CPL同Algol 60相比更接近硬件一些,但規(guī)模比較大,難以實(shí)現(xiàn)。1967年劍橋大學(xué)的馬丁·理查茲(Martin Richards)對CPL進(jìn)行了簡化,產(chǎn)生了BCPL。BCPL中的B就是Basic的縮寫,即“簡化的”。
1970年,美國AT&T公司貝爾實(shí)驗(yàn)室(AT&T Bell Laboratory)的研究員肯·湯普森(Ken Thompson)以BCPL為基礎(chǔ),設(shè)計(jì)出了很簡單而且很接近硬件的B語言(取BCPL的首字母)。B語言是貝爾實(shí)驗(yàn)室開發(fā)的一種通用程序設(shè)計(jì)語言。雖然它沒有流行起來,但是它很重要。肯·湯普森用B語言做了一件很重要的事情,一直影響至今,即他用B語言寫出了世界上第一個(gè)操作系統(tǒng)——UNIX操作系統(tǒng)。
1971年,貝爾實(shí)驗(yàn)室的丹尼斯·里奇(Dennis Ritchie)加入了肯·湯普森的開發(fā)項(xiàng)目,合作開發(fā)UNIX。他的主要工作是改造B語言,使其更加成熟。
1972年,丹尼斯·里奇在B語言的基礎(chǔ)上最終設(shè)計(jì)出了一種新的語言,他以BCPL的第二個(gè)字母作為這種語言的名字,即C語言。
1973年年初,C語言的主體完成。肯·湯普森和丹尼斯·里奇開始用C語言完全重寫UNIX,這就是UNIX第5版。隨著UNIX的發(fā)展,C語言自身也在不斷地完善。直到今天,各種版本的UNIX內(nèi)核和周邊工具仍然使用C語言作為其最主要的開發(fā)語言,其中還有不少繼承肯·湯普森和丹尼斯·里奇之手的代碼。
UNIX系統(tǒng)是世界上第一個(gè)真正的操作系統(tǒng)。由于UNIX操作系統(tǒng)是用C語言編寫的,而這個(gè)系統(tǒng)很流行,于是C語言也跟著流行起來。而UNIX操作系統(tǒng)是開源的,所以別人要想學(xué)習(xí),就要先學(xué)C語言。
B語言被C語言改寫后,C語言流行了而B語言就被淘汰了。而且后來發(fā)現(xiàn),C語言的確非常好,它是面向過程語言的代表,是有史以來最重要的一門計(jì)算機(jī)語言。
隨后又出現(xiàn)了C++。C++是本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)編寫的,他也來自貝爾實(shí)驗(yàn)室,是C語言創(chuàng)始人丹尼斯·里奇的下屬。C++就是在C語言的基礎(chǔ)上發(fā)明的。C++進(jìn)一步擴(kuò)充和完善了C語言,是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。
后來Sun公司又對C++進(jìn)行改寫,產(chǎn)生了Java。而微軟公司發(fā)現(xiàn)Java很流行,就造出了一個(gè)類似的語言——C#。所以Java和C#都源自于C++。
以上就是C語言演變的過程。從這個(gè)過程我們可以看出,如果以后要學(xué)習(xí)C++、Java或者C#的話,那么C語言就必須要學(xué)!因?yàn)樗鼈兌荚醋杂贑語言。而且C語言中絕大部分的知識,在C++、Java、C#中幾乎都會用到。C語言里面有兩個(gè)知識點(diǎn)是必須要學(xué)的,一個(gè)是函數(shù),另一個(gè)是指針。這兩個(gè)知識點(diǎn)是整個(gè)C語言的主體和核心。而且這兩個(gè)知識點(diǎn)在其他語言中是學(xué)不到的,或者是同C語言中有差別。總之,C語言是它們的“老祖宗”,學(xué)習(xí)其他語言之前最好要將C語言學(xué)好。
- HornetQ Messaging Developer’s Guide
- Practical Data Analysis Cookbook
- HTML5移動(dòng)Web開發(fā)技術(shù)
- AIRAndroid應(yīng)用開發(fā)實(shí)戰(zhàn)
- 新手學(xué)Visual C# 2008程序設(shè)計(jì)
- C語言程序設(shè)計(jì)
- MATLAB應(yīng)用與實(shí)驗(yàn)教程
- MySQL數(shù)據(jù)庫管理與開發(fā)(慕課版)
- R大數(shù)據(jù)分析實(shí)用指南
- Learning FuelPHP for Effective PHP Development
- Programming with CodeIgniterMVC
- Everyday Data Structures
- DB2SQL性能調(diào)優(yōu)秘笈
- AngularJS UI Development
- JavaScript高級程序設(shè)計(jì)(第4版)