官术网_书友最值得收藏!

1.1 C語言概述

1.1.1 什么是C語言

在回答什么是C語言之前,我們先要了解一下什么是計算機編程語言。人們日常交流中,語言有很多種,包括漢語、英語、法語、韓語等,雖然他們的詞匯和格式都不一樣,但是可以達到相同的目的。我們通過有固定格式和固定詞匯的“語言”來與他人交流,讓他人為我們做事情。同樣,我們也可以通過“語言”來與計算機交流,讓計算機為我們做事情,這樣的語言叫做編程語言(Programming Language)。

編程語言是用來控制計算機的一系列指令(Instruction),它有固定的格式和詞匯(不同編程語言的格式和詞匯不一樣),必須遵守,否則就會出錯,達不到工作的目的。

計算機編程語言的種類非常多,總的來說可以分成機器語言、匯編語言和高級語言三大類。

機器語言:機器語言是指一臺計算機全部的指令集合。電子計算機所使用的是由“0”和“1”組成的二進制數,二進制是計算機語言的基礎。計算機發(fā)明之初,人們寫出一串串由“0”和“1”組成的指令序列,交由計算機執(zhí)行,這種計算機能夠識別的語言,就是機器語言,即第一代計算機語言。

匯編語言:為了減輕使用機器語言編程的痛苦,人們做出了一種有益的改進,即用一些簡潔的英文字母、符號串來替代一個特定指令的二進制串。比如,用“ADD”代表加法,“MOV”代表數據傳遞等,這樣一來,人們很容易讀懂并理解程序在干什么,糾錯及維護都變得簡便、快捷,這種程序設計語言就稱為匯編語言,即第二代計算機語言。

高級語言:計算機語言具有高級語言和低級語言之分。而高級語言又主要是相對于機器語言和匯編語言而言的,它是較接近自然語言和數學公式的編程,基本脫離了機器的硬件系統,用人們更易理解的方式編寫程序。編寫的程序稱之為源程序。

高級語言并不是特指的某一種具體的語言,而是包括很多編程語言,如流行的Java、C、C++、C#、Python等,這些語言的語法、命令格式都不相同。

1969~1973年,美國電話電報公司(AT &T)貝爾實驗室開始C語言的最初研發(fā),并于1978年正式發(fā)表。1983年,美國國家標準協會(American National Standards Institute,ANSI)在此基礎上制定了一個C語言標準,稱之為ANSI C。

根據C語言的發(fā)明者丹尼斯·里奇(Dennis Ritchie,見圖1.1)說,C語言最重要的研發(fā)時期是在1972年。C語言之所以命名為C,是因為C語言源自Ken Thompson發(fā)明的B語言,而B語言則源自BCPL語言。

圖1.1 C語言之父——丹尼斯·里奇(Dennis Ritchie)

C語言的誕生是和UNIX操作系統的開發(fā)密不可分的,原先的UNIX操作系統都是用匯編語言寫的。1973年,UNIX操作系統的核心用C語言改寫,從此以后,C語言成為編寫操作系統的主要語言。在ANSI C標準確立之后,C語言的規(guī)范在很長一段時間內都沒有大的變動。1995年,WG14小組對C語言進行了一些修改,這個版本成為后來1999年發(fā)布的ISO/IEC 9899:1999標準,通常被稱為C99。

C語言是一種結構化語言,它層次清晰,便于按模塊化方式組織程序,易于調試和維護。C語言的表現能力和處理能力極強。它不僅具有豐富的運算符和數據類型,便于實現各類復雜的數據結構,還可以直接訪問內存的物理地址,進行位(bit)一級的操作。由于C語言實現了對硬件的編程操作,因此C語言集高級語言和低級語言的功能于一體。既可用于系統軟件的開發(fā),也適合于應用軟件的開發(fā)。此外,C語言還具有效率高、可移植性強等特點,因此廣泛地移植到了各類型計算機上,從而形成了多種版本的C語言。

1.1.2 為什么學習C語言

C語言除了能讓你了解編程的相關概念,帶你走進編程的大門,還能讓你明白程序的運行原理,比如,計算機的各個部件是如何交互的,程序在內存中是一種怎樣的狀態(tài),操作系統和用戶程序之間有著怎樣的關系,這些底層知識決定了你的發(fā)展高度,也決定了你的職業(yè)生涯。如果你希望成為出類拔萃的人才,而不僅僅是“碼農”,這些知識就是不可逾越的。也只有學習C語言,才能更好地了解它們。有了足夠的基礎,以后學習其他語言,就會觸類旁通。

C語言對現代編程語言有著巨大的影響,毫不夸張地說:C語言是現代編程語言的開山鼻祖,它改變了編程世界,許多現代編程語言都借鑒了大量C語言的特性。在眾多基于C的語言中,以下幾種非常具有代表性。

C++:包括了所有C的特性,但增加了類和其他特性以支持面向對象編程。

Java:是基于C++基礎上開發(fā)的,所以也繼承了許多C的特性。

C#:是由C++和Java發(fā)展起來的一種高級語言。

Perl:最初是一種簡單的腳本語言,在發(fā)展過程中采用了C的許多特性。

這么多新的計算機語言,我們?yōu)槭裁催€要學習C語言呢?第一,學習C語言有助于更好地理解C++、Java、C#及其他基于C的語言特性,一開始就學習其他語言的程序員往往不能很好地掌握繼承自C語言的基本特性;第二,目前仍有許多C程序,我們需要讀懂并維護這些代碼,況且有大量的現成代碼可以利用,這就可以在過去程序的基礎上,快速和高效地編寫新的算法和函數;第三,C語言仍然廣泛應用于新軟件開發(fā),特別是在內存和處理能力受限的情況下以及需要使用C語言簡單特性的地方;第四,C語言在各種考試和算法描述上仍被廣泛使用,如C語言版的《數據結構》。

我們之所以選擇C語言作為計算機編程語言的入門語言,除了上述原因外,C語言本身的特點也非常適合初學者。

1.語言簡潔、緊湊,使用方便

C語言一共只有32個關鍵字、9種控制語句,程序書寫形式自由,區(qū)分大小寫。它把高級語言的基本結構和語句與低級語言的實用性結合起來。C語言可以像匯編語言一樣對位、字節(jié)和地址進行操作,而這三者是計算機最基本的工作單元。

2.運算符豐富

C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括號、賦值、強制類型轉換等都作為運算符處理,從而使C語言的運算類型更豐富,表達式類型更多樣化。靈活使用各種運算符可以實現在其他高級語言中難以實現的運算。

3.數據類型豐富

C語言的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜數據結構的運算,并引入了指針概念,使程序效率更高。

4.表達方式靈活

C語言提供多種運算符和表達式值的方法,對問題的表達可通過多種途徑獲得,其程序設計更主動、靈活。它的語法限制不太嚴格,程序設計自由度大,如對整型量與字符型數據及邏輯型數據可以通用等。

5.允許直接訪問物理地址,對硬件進行操作

由于C語言允許直接訪問物理地址,可以直接對硬件進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位(bit)、字節(jié)和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟件。

6.生成目標代碼質量高,程序執(zhí)行效率高

C語言描述問題比匯編語言迅速,工作量小、可讀性好,易于調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編程序生成的目標代碼效率低10%~20%。

7.可移植性好

C語言在不同機器上的C編譯程序,86%的代碼是公共的,所以C語言的編譯程序便于移植。在一個環(huán)境上用C語言編寫的程序,不改動或稍加改動,就可移植到另一個完全不同的環(huán)境中運行。

8.表達力強

C語言有豐富的數據結構和運算符,包含了各種數據結構,如整型、數組類型、指針類型和聯合類型等,用來實現各種數據結構的運算。C語言具有強大的圖形功能,支持多種顯示器和驅動器,且計算功能、邏輯判斷功能強大。

主站蜘蛛池模板: 巨鹿县| 徐水县| 沙洋县| 澎湖县| 台北市| 陕西省| 云浮市| 广宁县| 抚州市| 都江堰市| 安阳市| 黑河市| 宁强县| 砀山县| 新源县| 汝阳县| 内丘县| 开封市| 陕西省| 富阳市| 资中县| 平定县| 巴塘县| 河北区| 星子县| 扶风县| 泾阳县| 宁安市| 沁源县| 汉沽区| 平谷区| 垦利县| 理塘县| 贺州市| 镇远县| 广安市| 改则县| 卓尼县| 陇川县| 资阳市| 泰安市|