1.1 C語言概述
1.1 C語言概述
1.1.1 什么是C語言
編程語言是用來控制計算機(jī)的一系列指令(Instruction),它有固定的格式和詞匯(不同編程語言的格式和詞匯不一樣),必須遵守,否則就會出錯,達(dá)不到工作的目的。
計算機(jī)編程語言的種類非常多,總的來說可以分成機(jī)器語言、匯編語言和高級語言三大類。
機(jī)器語言:機(jī)器語言是指一臺計算機(jī)全部的指令集合。電子計算機(jī)所使用的是由“0”和“1”組成的二進(jìn)制數(shù),二進(jìn)制是計算機(jī)語言的基礎(chǔ)。計算機(jī)發(fā)明之初,人們寫出一串串由“0”和“1”組成的指令序列,交由計算機(jī)執(zhí)行,這種計算機(jī)能夠識別的語言,就是機(jī)器語言,即第一代計算機(jī)語言。
匯編語言:為了減輕使用機(jī)器語言編程的痛苦,人們做出了一種有益的改進(jìn),即用一些簡潔的英文字母、符號串來替代一個特定指令的二進(jìn)制串。比如,用“ADD”代表加法,“MOV”代表數(shù)據(jù)傳遞等,這樣一來,人們很容易讀懂并理解程序在干什么,糾錯及維護(hù)都變得簡便、快捷,這種程序設(shè)計語言就稱為匯編語言,即第二代計算機(jī)語言。
高級語言:計算機(jī)語言具有高級語言和低級語言之分。而高級語言又主要是相對于機(jī)器語言和匯編語言而言的,它是較接近自然語言和數(shù)學(xué)公式的編程,基本脫離了機(jī)器的硬件系統(tǒng),用人們更易理解的方式編寫程序。編寫的程序稱之為源程序。
高級語言并不是特指的某一種具體的語言,而是包括很多編程語言,如流行的Java、C、C++、C#、Python等,這些語言的語法、命令格式都不相同。
根據(jù)C語言的發(fā)明者丹尼斯·里奇(Dennis Ritchie,見圖1.1)說,C語言最重要的研發(fā)時期是在1972年。C語言之所以命名為C,是因為C語言源自Ken Thompson發(fā)明的B語言,而B語言則源自BCPL語言。
C語言的誕生是和UNIX操作系統(tǒng)的開發(fā)密不可分的,原先的UNIX操作系統(tǒng)都是用匯編語言寫的。1973年,UNIX操作系統(tǒng)的核心用C語言改寫,從此以后,C語言成為編寫操作系統(tǒng)的主要語言。在ANSI C標(biāo)準(zhǔn)確立之后,C語言的規(guī)范在很長一段時間內(nèi)都沒有大的變動。1995年,WG14小組對C語言進(jìn)行了一些修改,這個版本成為后來1999年發(fā)布的ISO/IEC 9899:1999標(biāo)準(zhǔn),通常被稱為C99。
C語言是一種結(jié)構(gòu)化語言,它層次清晰,便于按模塊化方式組織程序,易于調(diào)試和維護(hù)。C語言的表現(xiàn)能力和處理能力極強(qiáng)。它不僅具有豐富的運(yùn)算符和數(shù)據(jù)類型,便于實現(xiàn)各類復(fù)雜的數(shù)據(jù)結(jié)構(gòu),還可以直接訪問內(nèi)存的物理地址,進(jìn)行位(bit)一級的操作。由于C語言實現(xiàn)了對硬件的編程操作,因此C語言集高級語言和低級語言的功能于一體。既可用于系統(tǒng)軟件的開發(fā),也適合于應(yīng)用軟件的開發(fā)。此外,C語言還具有效率高、可移植性強(qiáng)等特點(diǎn),因此廣泛地移植到了各類型計算機(jī)上,從而形成了多種版本的C語言。
1.1.2 為什么學(xué)習(xí)C語言
C語言除了能讓你了解編程的相關(guān)概念,帶你走進(jìn)編程的大門,還能讓你明白程序的運(yùn)行原理,比如,計算機(jī)的各個部件是如何交互的,程序在內(nèi)存中是一種怎樣的狀態(tài),操作系統(tǒng)和用戶程序之間有著怎樣的關(guān)系,這些底層知識決定了你的發(fā)展高度,也決定了你的職業(yè)生涯。如果你希望成為出類拔萃的人才,而不僅僅是“碼農(nóng)”,這些知識就是不可逾越的。也只有學(xué)習(xí)C語言,才能更好地了解它們。有了足夠的基礎(chǔ),以后學(xué)習(xí)其他語言,就會觸類旁通。
C++:包括了所有C的特性,但增加了類和其他特性以支持面向?qū)ο缶幊獭?/p>
Java:是基于C++基礎(chǔ)上開發(fā)的,所以也繼承了許多C的特性。
C#:是由C++和Java發(fā)展起來的一種高級語言。
Perl:最初是一種簡單的腳本語言,在發(fā)展過程中采用了C的許多特性。
這么多新的計算機(jī)語言,我們?yōu)槭裁催€要學(xué)習(xí)C語言呢?第一,學(xué)習(xí)C語言有助于更好地理解C++、Java、C#及其他基于C的語言特性,一開始就學(xué)習(xí)其他語言的程序員往往不能很好地掌握繼承自C語言的基本特性;第二,目前仍有許多C程序,我們需要讀懂并維護(hù)這些代碼,況且有大量的現(xiàn)成代碼可以利用,這就可以在過去程序的基礎(chǔ)上,快速和高效地編寫新的算法和函數(shù);第三,C語言仍然廣泛應(yīng)用于新軟件開發(fā),特別是在內(nèi)存和處理能力受限的情況下以及需要使用C語言簡單特性的地方;第四,C語言在各種考試和算法描述上仍被廣泛使用,如C語言版的《數(shù)據(jù)結(jié)構(gòu)》。
我們之所以選擇C語言作為計算機(jī)編程語言的入門語言,除了上述原因外,C語言本身的特點(diǎn)也非常適合初學(xué)者。
1.語言簡潔、緊湊,使用方便
C語言一共只有32個關(guān)鍵字、9種控制語句,程序書寫形式自由,區(qū)分大小寫。它把高級語言的基本結(jié)構(gòu)和語句與低級語言的實用性結(jié)合起來。C語言可以像匯編語言一樣對位、字節(jié)和地址進(jìn)行操作,而這三者是計算機(jī)最基本的工作單元。
2.運(yùn)算符豐富
C語言的運(yùn)算符包含的范圍很廣泛,共有34種運(yùn)算符。C語言把括號、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理,從而使C語言的運(yùn)算類型更豐富,表達(dá)式類型更多樣化。靈活使用各種運(yùn)算符可以實現(xiàn)在其他高級語言中難以實現(xiàn)的運(yùn)算。
3.數(shù)據(jù)類型豐富
C語言的數(shù)據(jù)類型有:整型、實型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來實現(xiàn)各種復(fù)雜數(shù)據(jù)結(jié)構(gòu)的運(yùn)算,并引入了指針概念,使程序效率更高。
4.表達(dá)方式靈活
C語言提供多種運(yùn)算符和表達(dá)式值的方法,對問題的表達(dá)可通過多種途徑獲得,其程序設(shè)計更主動、靈活。它的語法限制不太嚴(yán)格,程序設(shè)計自由度大,如對整型量與字符型數(shù)據(jù)及邏輯型數(shù)據(jù)可以通用等。
5.允許直接訪問物理地址,對硬件進(jìn)行操作
由于C語言允許直接訪問物理地址,可以直接對硬件進(jìn)行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位(bit)、字節(jié)和地址進(jìn)行操作,而這三者是計算機(jī)最基本的工作單元,可用來寫系統(tǒng)軟件。
6.生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高
C語言描述問題比匯編語言迅速,工作量小、可讀性好,易于調(diào)試、修改和移植,而代碼質(zhì)量與匯編語言相當(dāng)。C語言一般只比匯編程序生成的目標(biāo)代碼效率低10%~20%。
7.可移植性好
C語言在不同機(jī)器上的C編譯程序,86%的代碼是公共的,所以C語言的編譯程序便于移植。在一個環(huán)境上用C語言編寫的程序,不改動或稍加改動,就可移植到另一個完全不同的環(huán)境中運(yùn)行。
8.表達(dá)力強(qiáng)
C語言有豐富的數(shù)據(jù)結(jié)構(gòu)和運(yùn)算符,包含了各種數(shù)據(jù)結(jié)構(gòu),如整型、數(shù)組類型、指針類型和聯(lián)合類型等,用來實現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)的運(yùn)算。C語言具有強(qiáng)大的圖形功能,支持多種顯示器和驅(qū)動器,且計算功能、邏輯判斷功能強(qiáng)大。