第一章C語言簡介
C語言是目前國際上廣泛流行的一種結構化程序設計語言,它既適合作為係統描述語言,也可用來開發應用軟件。因此,它深受廣大程序設計者的歡迎。
本章,我們將帶領讀者學習C語言的發展史,並且掌握C語言程序的結構特點、C語言程序的編譯和執行等內容,為後麵的學習打下基礎。
1.1 C語言的曆史及特點
1.1.1 C語言的曆史
C語言誕生之前,操作係統等係統軟件主要是用彙編語言編寫的(包括UNIX在內)。由於彙編語言依賴於計算機硬件,程序的可讀性和可移植性都比較差。為了提高可讀性和可移植性,最好改用高級語言,但一般高級語言難以實現彙編語言的某些功能(彙編語言可以直接對硬件進行操作,例如,對內存地址的操作、位操作等)。人們設想能否找到一種既具有一般高級語言特性,又具有低級語言特性的語言。於是,C語言就在這種情況下應運而生了。
C語言是在20世紀70年代初由美國貝爾實驗室的D.M.Ritchie設計的,最初的C語言是為描述和實現UNIX操作係統而提供的一種工作語言。
到了1973年,K.Thompson和D.M.Ritchie兩個人合作把UNIX的90%以上內容用C語言進行了改寫,即UNIX第五版。C是為開發UNIX操作係統而研製的,它隨著UNIX的出名而聞名。C語言的廣泛應用又不斷推出新的C語言版本,其性能也越來越強。
到了1975年UNIX第六版的推出和隨著麵向對象程序設計技術的出現,C語言的突出優點引出了人們的普遍關注。
1978年以後,C語言逐漸風靡全世界,成為世界上應用最廣泛的計算機語言之一。到目前為止,又發展到演變出了目前可在微機上運行的Microsoft C/C++、Turbo C、Quick C、Borland C、Visual C/C++等版本。
1.1.2 C語言的特點
C語言之所以能被推廣並被廣泛使用,概括地說主要有如下特點:
?語言簡潔,使用方便。C語言一共隻有32個關鍵字,9種控製語句,程序書寫形式自由,主要用小寫字母表示,壓縮了一切不必要的成分。
?運算符豐富。C語言的運算符包含的範圍很廣泛,共有34種運算符。C語言把括號、賦值、強製類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化,靈活使用各種運算符可以實現在其他高級語言中難以實現的運算。
?數據結構豐富,具有現代化語言的各種數據結構。C語言的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種複雜的數據結構(如鏈表、樹、棧等)的運算。尤其是指針類型數據,使用起來比其他高級語言更為靈活、多樣。
?具有結構化的控製語句(如if…else語句、while語句、do…while語句、switch語句、for語句)。用函數作為程序模塊以實現程序的模塊化。是結構化的理想語言,符合目前通行的編程風格要求。
?語法限製不太嚴格,程序設計自由度大。例如,對數組下標越界不作檢查,由程序編寫者自己保證程序的正確。對變量的類型使用比較靈活,例如,整型變量與字符型數據以及邏輯型數據可以通用。一般的高級語言語法檢查比較嚴,能檢查出幾乎所有的語法錯誤,而C語言允許程序編寫者有較大的自由度,程序員應當仔細檢查程序,保證其正確,而不要過分依賴C語言編譯程序去查錯。“限製”與“靈活”是一對矛盾。限製嚴格,就失去靈活性;而強調靈活,就必然放鬆限製。一個不熟練的人員,編一個正確的C語言程序可能會比編一個其他高級語言程序難一些。也就是說,對用C語言的人,要求對程序設計更熟練一些。
?C語言允許直接訪問物理地址,能進行位(bit)操作,能實現彙編語言的大部分功能,可以直接對硬件進行操作。因此C語言既具有高級語言的功能,又具有低級語言的許多功能,可用來寫係統軟件。C語言的這種雙重性,使它既是成功的係統描述語言,又是通用的程序設計語言。有人把C語言稱為“高級語言中的低級語言”,也有人稱它為“中級語言”,意為兼有高級和低級語言的特點。
?生成目標代碼質量高,程序執行效率高。一般隻比彙編程序生成的目標代碼效率低10%~20%。
?用C語言寫的程序可移植性好(與彙編語言比)。基本上不作修改就能用於各種型號的計算機和各種操作係統。
C語言的以上特點,讀者現在也許還不能深刻理解,待學完C語言以後再回顧一下,就會有比較深的體會。
我們從應用的角度出發對C語言和其他高級語言作一簡單比較:
從掌握語言的難易程度來看,C語言比其他語言難一些,BASIC是初學者入門的較好的語言,FORTRAN也比較好掌握。
科學計算多用FORTRAN;對商業和管理等數據處理領域,用COBOL為宜,C語言雖然也可用於科學計算和管理領域,但並不理想,C語言的特長不在這裏。
對操作係統和係統實用程序以及需要對硬件進行操作的場合,用C語言明顯地優越於其他高級語言,有的大型應用軟件也用C語言編寫。
從教學角度,由於PASCAL是世界上第一個結構化語言而曾被認為是計算機專業的比較理想的教學語言,目前在“數據結構”等課程中一般用PASCAL語言舉例,但PASCAL語言難以推廣到各實際應用領域,到目前為止基本上隻是教學語言,C語言也是理想的結構化語言,用描述能力強,同樣適於教學,而且“操作係統”課程多結合UNIX講解,而UNIX與C語言不可分,因此,C語言有可能取代PASCAL而成為被廣泛使用的教學語言,而且C除了能用於教學外,還有廣泛的應用領域,因此更有生命力。
PASCAL和其他高級語言的設計目標是通過嚴格的語法定義和檢查來保證程序的正確性,而C則是強調靈活性,使程序設計人員能有較大的自由度,以適應寬廣的應用麵。
總之,C語言對程序員要求較高。程序員使用C語言編寫程序會感到限製少、靈活性大、功能強,可以編寫出任何類型的程序。現在,C語言已不僅用來編寫係統軟件,也用來編寫應用軟件。
1.2 C語言程序的結構特點
任何一種計算機語言,都有特定的語法規則和表現形式,C語言也不例外。程序的構成規則和書寫格式則是其表現形式的重要方麵,下麵就來介紹C語言最基本的結構特點。
1.2.1 構成C語言的基本字符和標識符
C語言規定了其所需的基本符號和標識符,這些是初學者首先應掌握的。
1.字符集
滿足C語言語法要求的字符集如下:
?英文字母a~z,A~Z;
?阿拉伯數字0~9;
?特殊符號(如表1-1所示)。
表1-1 C語言中可以使用的特殊符號
+ - * / % _下劃線 = <
> & ~ ( ) [ ] .
{ } : ? ; " ! #
空格 ' | ^
2.標識符
C語言的標識符主要用來表示常量、變量、函數和類型等的名字,是隻起標識作用的一類符號。它包括如下3類:
(1)保留字
所謂保留字,就是這樣一類標識符,其每一個都有特定的含義,不允許用戶把它們當作變量名使用,C語言的保留字都用英文小寫字母表示,共有33個保留字,如表1-2所示。
表1-2 C語言的保留字
auto break case char const continue default
do double else enum entry ectern float