您的位置:首頁>正文

學習C語言程式設計基本思路與參考書籍

電腦行業發展非常快, 大學裡的教育基本都跟不上實際的社會需求。 如果你所在的學校還在指定大家使用譚浩強的教材, 或使用VC6.0來教大家上機實驗, 那你不妨看看本文, 這裡有一些建議可以幫助你不會脫離社會太遠。

考慮到這是一個過來人感覺很基礎, 但是對於初學者又覺得困難重重的問題, 我想如果這篇文章要想寫得不讓你覺得專業名詞紮堆, 內容高深莫測, 讀完還是不知所云, 那最好的辦法也許是, 我們通過溝通的方式把整個「C語言應該怎麼學」的問題由小及大的展開, 慢慢來談。

在開始之前, 我們先來做一個小測試。

一、小測試, 你準備好學習C語言了嗎?

你是否聽說過二進位數字, 他們是如何進行運算的?(基本的數的進制知識)

你能說出一個最小的電腦系統由哪些部分構成嗎?(基本的電腦結構知識)

電腦是如何存儲圖像的? (數位化原理)

上面這三個問題, 能回答的同學舉手。 如果你舉手了, 那麼我們進入下階段的討論, 否則, 我將告訴你, 你現在最重要的事情, 是趕緊找一本《電腦科學導論》把預備知識補充好。

因為——

C語言說到底是一門以記憶體為中心的程式設計語言, 你能不能學懂它, 其實很大程度上不是取決於你智商高低, 而是你是否擁有扎實的電腦結構、存儲、運算原理方面的知識!!

在這裡, 我想強調, 任何新知識的學習都是有一定的前提條件的。 C語言學習的前提條件就是, 對電腦系統要有一個整體的, 科學的基礎認識。 脫離了這個基礎認識, 一切都很困難。

所以, 有些同學學不會C語言, 不是因為他們智商不行, 而是因為他們沒有準備好。

我花時間寫這篇文章來給大家講C語言的學習,

當然是希望大家真正的學會、學懂C語言, 並能夠真正感覺到它的用處, 所以很抱歉我不會像培訓機構那樣, 告訴你“零基礎”就能夠開始學。 但如果你真的按照我說的去做, 那麼至少從現在起, 你確實是開始有點“學院派”的認真了。

在這篇文章的最後, 我推薦了一本我曾經讀過的《電腦科學導論》。 這本書可以說是我的啟蒙書, 我讀過, 真心覺得好, 所以推薦給需要的同學。

好了, 接下來我們進入C語言的學習過程。

二、學C語言到底學些什麼—— 「語法」和「函式程式庫」

C語言學習的關鍵, 是要先搞明白, 學C語言到底是在學些什麼?

我這麼一問, 有的同學就要翻開課本, 指著目錄說, 我知道我知道, 有變數,

資料類型, 迴圈語句, 函數, 哦哦哦, 還有指針等等!

很遺憾, 如果你以為學習C語言就是學習這些東西, 那你得趕緊糾正一下看法, 否則接下來的學習會困難重重。 因為我曾經就是這麼掉到坑裡的, 這種狹隘的觀點讓我浪費了大量的時間去學習瑣碎的細節, 又讓我遲遲不能接觸到更重要的知識, 結果是眼高手低——知道許多別人不知道的無用知識, 但是又寫不出什麼真正像樣的程式來。

所謂「語法」, 就是入門教材裡最著重講解的內容。 也就是那些所謂的變數、資料類型、分支判斷、迴圈、函數、指標等等。

這些內容比較枯燥, 但是好消息是這些內容並不難, 都是一些格式化的東西。 只要你多練習, 就會自動的刻在你的腦子裡,

成為一種下意識的習慣。

但是 「語法」本身其實沒什麼用。 因為它只是一種格式規範, 你學得再好, 也不能引導你寫出厲害的程式。 因為在軟體設計中, 實際上最核心的部分還是在於其 「函式程式庫」部分。

什麼是 「函式程式庫」?

簡單來說, 函式程式庫就是別人編寫好的C函數, 直接提供給你用, 你只要調用裡面的函數, 就能實現一定的功能。 例如 printf() 函數, 你肯定知道, 只要調用這個函數, 你就能夠在那個黑糊糊的視窗裡顯示一段文字。 你並不明白 printf() 的內部工作原理, 但是你知道你只要按照說明去調用, 就能夠實現對應的功能。

這就是函式程式庫——別人寫好的, 打包送到你面前, 你可以自由調用來做各種各樣的事情的函數集合。

我來說幾個來自函式程式庫的函數, 例如 CreateWindowEx() 函數可以用來創建一個表單(這個函數由微軟提供),例如 GaussianBlur() 函數可以用來對一個圖像進行高斯模糊處理(這個函數由 OpenCV 提供),再比如 evhttp_new() 函數可以創建一個 HTTP 服務程式(這個函數由 libevent 提供)……

其他還有什麼庫函數?太多了。從控制網路通信,到截取視頻畫面並分析其中的人臉位置,到加解密本地檔,甚至包括微信收發消息,抓取淘寶商品資訊……庫函數的數量和有用程度遠遠超乎大家的想像。

誒?你從來沒聽說過還有這些東西?課本裡也沒提到?

那是因為你看的是入門教材,著重講解語法,順帶提到了少量的 C 語言自帶的庫函數而已。事實上 C 語言包含的庫函數本身就有不少,但是更多更強大的還是許多協力廠商庫函數,例如我上面提到的這些。

重點是在於,我想告訴你,庫函數才是你學習C語言並將其應用於實際的關鍵!!

學會調用別人的庫函數,甚至寫出自己的庫函數,都是極其重要的。因為一個函數,本質上就是一個功能單位。你擁有的基礎設施越多,你的發揮空間越大。道理就是這麼簡單。這就是我需要向大家強調的第二個觀點,要想寫出實用的C程式,一大關鍵就是研究並學會使用各種庫函數。

你看見隔壁王二寫了個三維程式能讓一個彩色的立方體在空中旋轉?快找 OpenGL 庫函數來用。什麼?劉大寶寫了個網路軟體能在局域網裡聊天?快找 Socket 庫來用。

看見了嗎?庫函數有多重要?

但是,函式程式庫的學習並不是孤立的。許多庫函數背後需要一定的領域知識支撐。同樣如我第一個觀點所述,需要預備知識。學懂一個函式程式庫,代表的不僅僅是明白如何調用那麼簡單, 而更反映了我們對一個特定領域——網路、數位圖像、密碼學、作業系統等的認識。

三、基本的學習過程與一般規律

如我前面所述,C語言學習主要是以語法入門,然後到函式程式庫。再具體一些來說,包括以下階段:

學習基礎語法

學習簡單的少數幾個C語言自帶的函數

學習一些程式設計的基礎知識(資料結構,演算法)

學習更多更強大的C語言自帶的函數

學習一些特定應用領域的基本理論知識(作業系統,資料庫,網路,圖像……)

應用上一階段學習的到知識進一步學習其他人提供的函式程式庫(網路處理、作業系統管理、圖像、密碼學等等)

對於本科階段的同學來說,著重學好1-4,有選擇的學習一下5-6,做一些小作品出來,就已經非常非常不錯了。這就是一般的學習規律。說得很簡短,但是要做到真的很不容易。

四、參考書籍

首先第一本,也是我認為最重要的書,是這本《電腦科學導論》。亞馬遜地址:《電腦科學導論(原書第2版)》 佛羅贊 (Behrouz A.Forouzan), 莫沙拉夫 (Firouz Mosharraf), 劉藝【摘要 書評 試讀】圖書

可以說,這本書是對我人生影響最大的兩本書之一。這本書通俗易懂,知識面廣,但又具有一定的深度。真是因為讀了這本書,才讓我建立了對電腦科學合理的基本認識。在不涉及太多的數學原理的情況下,這本書清晰的揭示了包括電腦的基本構成,CPU運算的原理,記憶體、硬碟、光碟是如何存儲資料的,程式設計的基本原理(機器語言、組合語言,結構化程式設計語言,物件導向程式設計語言),以及網路、資料壓縮等。

說白了,就是一本科普書。但是是一本偉大的科普書。入門者的福音書。

然後,第二本,就是關於C語言語法的書籍了,說實話這部份我已經沒有印象看的什麼書了。因為我這個人有個毛病,就是喜歡東翻翻,西翻翻,哪裡不懂就到處找書。可見這個部分其實沒有大家想像的那麼固定,你只要找到一本自己看得懂的書,就是好書!不必太過於拘泥於書與書之間的優劣比較。

最經典的C語言入門書籍許多人肯定要說是 K&R 的那本。但是其實這本書對大多數初學者來說還是略難,如果有興趣也可以讀一讀。但我更建議你瞭解一些C語言之後再轉過來看看會更好。

柴田望洋的《明解C語言》最近是一本廣受歡迎的親切的C語言入門書。《明解C語言》 柴田望洋, 管傑, 羅勇【摘要 書評 試讀】圖書

昨天我專門到書店翻了一下,這本書確實很不錯,親切,謙虛,易懂。但我想也未必適合所有人。如果你是希望學習曲線平緩一些的,可以考慮看看。

啊,差點忘了,還有一本咱們國內的趙岩先生寫的《C語言點滴》也有不錯的反響,也許大家也可以找來看看。《C語言點滴》 趙岩【摘要 書評 試讀】圖書

基本上,上面這些書就能幫助你比較輕鬆的入門了。其他書籍推薦,我會陸續也寫出來。今天實在寫不了這麼多了。

但是,再補充一本,如果對於那些已經學得差不多的同學,必須得看看下面這本,這是我的至愛之一啊!^_^ 那就是吊炸天的《C Standard Library》,china-pub連結:C標準庫(C標準庫“聖經”)[按需印刷]

好好看看這本書,它是真正的頂級教材,因為——裡面包含了標準庫實現的完整源碼,以及作者在實現時的思路講解。是一本值得收藏的超級力作。讓我們一睹頂級程式師的思維傑作。(吐嘈:這本書的翻譯還是有一些值得修正的地方,所以能收英文版的同學就直接收英文版了)

C語言是面向過程的,而C++是物件導向的

C和C++的區別:

C是一個結構化語言,它的重點在於演算法和資料結構。C程式的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制)。

C++,首要考慮的是如何構造一個物件模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取物件的狀態資訊得到輸出或實現過程(事務)控制。 所以C與C++的最大區別在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”。

C與C++的最大區別:在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”,而就語言本身而言,在C中更多的是演算法的概念。那麼是不是C就不重要了,錯!演算法是程式設計的基礎,好的設計如果沒有好的演算法,一樣不行。而且,“C加上好的設計”也能寫出非常好的東西。

這幾本書其實並未涵蓋C語言學習的所有重要方面。稍後我會再放上一些來。今天打字打到手疼,就不繼續了。

五、晉級——通向更高境界之路

學無止境。更專業的學習至此其實才剛剛開始。

例如 CreateWindowEx() 函數可以用來創建一個表單(這個函數由微軟提供),例如 GaussianBlur() 函數可以用來對一個圖像進行高斯模糊處理(這個函數由 OpenCV 提供),再比如 evhttp_new() 函數可以創建一個 HTTP 服務程式(這個函數由 libevent 提供)……

其他還有什麼庫函數?太多了。從控制網路通信,到截取視頻畫面並分析其中的人臉位置,到加解密本地檔,甚至包括微信收發消息,抓取淘寶商品資訊……庫函數的數量和有用程度遠遠超乎大家的想像。

誒?你從來沒聽說過還有這些東西?課本裡也沒提到?

那是因為你看的是入門教材,著重講解語法,順帶提到了少量的 C 語言自帶的庫函數而已。事實上 C 語言包含的庫函數本身就有不少,但是更多更強大的還是許多協力廠商庫函數,例如我上面提到的這些。

重點是在於,我想告訴你,庫函數才是你學習C語言並將其應用於實際的關鍵!!

學會調用別人的庫函數,甚至寫出自己的庫函數,都是極其重要的。因為一個函數,本質上就是一個功能單位。你擁有的基礎設施越多,你的發揮空間越大。道理就是這麼簡單。這就是我需要向大家強調的第二個觀點,要想寫出實用的C程式,一大關鍵就是研究並學會使用各種庫函數。

你看見隔壁王二寫了個三維程式能讓一個彩色的立方體在空中旋轉?快找 OpenGL 庫函數來用。什麼?劉大寶寫了個網路軟體能在局域網裡聊天?快找 Socket 庫來用。

看見了嗎?庫函數有多重要?

但是,函式程式庫的學習並不是孤立的。許多庫函數背後需要一定的領域知識支撐。同樣如我第一個觀點所述,需要預備知識。學懂一個函式程式庫,代表的不僅僅是明白如何調用那麼簡單, 而更反映了我們對一個特定領域——網路、數位圖像、密碼學、作業系統等的認識。

三、基本的學習過程與一般規律

如我前面所述,C語言學習主要是以語法入門,然後到函式程式庫。再具體一些來說,包括以下階段:

學習基礎語法

學習簡單的少數幾個C語言自帶的函數

學習一些程式設計的基礎知識(資料結構,演算法)

學習更多更強大的C語言自帶的函數

學習一些特定應用領域的基本理論知識(作業系統,資料庫,網路,圖像……)

應用上一階段學習的到知識進一步學習其他人提供的函式程式庫(網路處理、作業系統管理、圖像、密碼學等等)

對於本科階段的同學來說,著重學好1-4,有選擇的學習一下5-6,做一些小作品出來,就已經非常非常不錯了。這就是一般的學習規律。說得很簡短,但是要做到真的很不容易。

四、參考書籍

首先第一本,也是我認為最重要的書,是這本《電腦科學導論》。亞馬遜地址:《電腦科學導論(原書第2版)》 佛羅贊 (Behrouz A.Forouzan), 莫沙拉夫 (Firouz Mosharraf), 劉藝【摘要 書評 試讀】圖書

可以說,這本書是對我人生影響最大的兩本書之一。這本書通俗易懂,知識面廣,但又具有一定的深度。真是因為讀了這本書,才讓我建立了對電腦科學合理的基本認識。在不涉及太多的數學原理的情況下,這本書清晰的揭示了包括電腦的基本構成,CPU運算的原理,記憶體、硬碟、光碟是如何存儲資料的,程式設計的基本原理(機器語言、組合語言,結構化程式設計語言,物件導向程式設計語言),以及網路、資料壓縮等。

說白了,就是一本科普書。但是是一本偉大的科普書。入門者的福音書。

然後,第二本,就是關於C語言語法的書籍了,說實話這部份我已經沒有印象看的什麼書了。因為我這個人有個毛病,就是喜歡東翻翻,西翻翻,哪裡不懂就到處找書。可見這個部分其實沒有大家想像的那麼固定,你只要找到一本自己看得懂的書,就是好書!不必太過於拘泥於書與書之間的優劣比較。

最經典的C語言入門書籍許多人肯定要說是 K&R 的那本。但是其實這本書對大多數初學者來說還是略難,如果有興趣也可以讀一讀。但我更建議你瞭解一些C語言之後再轉過來看看會更好。

柴田望洋的《明解C語言》最近是一本廣受歡迎的親切的C語言入門書。《明解C語言》 柴田望洋, 管傑, 羅勇【摘要 書評 試讀】圖書

昨天我專門到書店翻了一下,這本書確實很不錯,親切,謙虛,易懂。但我想也未必適合所有人。如果你是希望學習曲線平緩一些的,可以考慮看看。

啊,差點忘了,還有一本咱們國內的趙岩先生寫的《C語言點滴》也有不錯的反響,也許大家也可以找來看看。《C語言點滴》 趙岩【摘要 書評 試讀】圖書

基本上,上面這些書就能幫助你比較輕鬆的入門了。其他書籍推薦,我會陸續也寫出來。今天實在寫不了這麼多了。

但是,再補充一本,如果對於那些已經學得差不多的同學,必須得看看下面這本,這是我的至愛之一啊!^_^ 那就是吊炸天的《C Standard Library》,china-pub連結:C標準庫(C標準庫“聖經”)[按需印刷]

好好看看這本書,它是真正的頂級教材,因為——裡面包含了標準庫實現的完整源碼,以及作者在實現時的思路講解。是一本值得收藏的超級力作。讓我們一睹頂級程式師的思維傑作。(吐嘈:這本書的翻譯還是有一些值得修正的地方,所以能收英文版的同學就直接收英文版了)

C語言是面向過程的,而C++是物件導向的

C和C++的區別:

C是一個結構化語言,它的重點在於演算法和資料結構。C程式的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制)。

C++,首要考慮的是如何構造一個物件模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取物件的狀態資訊得到輸出或實現過程(事務)控制。 所以C與C++的最大區別在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”。

C與C++的最大區別:在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”,而就語言本身而言,在C中更多的是演算法的概念。那麼是不是C就不重要了,錯!演算法是程式設計的基礎,好的設計如果沒有好的演算法,一樣不行。而且,“C加上好的設計”也能寫出非常好的東西。

這幾本書其實並未涵蓋C語言學習的所有重要方面。稍後我會再放上一些來。今天打字打到手疼,就不繼續了。

五、晉級——通向更高境界之路

學無止境。更專業的學習至此其實才剛剛開始。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示