初學C語言,有什麼好書推薦?

下學期外教來教C語言,怕聽不懂,想麻煩大家推薦幾本適合初學者看的關於C語言的書,謝謝啦


2014年下半年到東北某地校招,面試了12人,其中有當過C語言助教,有自學C語言編程的,問了4人,全都還在用譚浩強的C教材。老實說,聽到這樣的回答,我很是詫異,現在市面上有這麼多好書可選,有不少學校和學生(非計算機專業)卻還在用譚浩強的書。

昨天給公司人力同事提了一份面向嵌入式軟體開發工程師的書單/在線資源,正好有幾本C語言或相關書籍,單列在此。其中大部分書我至少讀過一遍。

基礎(C語言入門,初學,編程基礎)

  1. 《C語言程序設計:現代方法》(第2版)(C
    Programming: A Modern Approach, 2nd Edition, K.N.King)
  2. 《深入理解計算機系統》(修訂版或第2版)(Computer Systems: A Programmer"s Perspective,
    Randal E. Bryant et al),閱讀建議
  3. 《C語言程序設計》(第2版)(The
    C Programming Language, Brian W. Kernighan Dennis M.
    Ritchie)

  4. 《程序員修鍊之道》(The
    Pragmatic Programmer: From Journeyman to master, Andy
    Hunt Dave Thomas)

內核/驅動

  1. 《Linux內核設計與實現》(第3版)(Linux
    Kernel Development, 3rd Edition, Robert Love)
  2. 《Linux設備驅動程序》(第3版)(Linux
    Device Driver, 3rd Edition, Jonathan Corbet et al)
  3. 《深入Linux內核架構》(Professional
    Linux Kernel Architecture, Wolfgang Mauerer)

應用

  1. 《UNIX環境高級編程》(Advanced
    Programming in the UNIX Environment, W. Richard Stevens)
  2. 《UNIX網路編程》(Unix
    Network Programming, W. Richard Stevens)

進階

  1. 《C陷阱與缺陷》(C Traps and Pitfalls, Andrew Koenig)
  2. 《C專家編程》(Expert C Programming, Peter
    van der Linden)
  3. 《ARM嵌入式系統開發:軟體設計與優化》(ARM
    System Developer"s Guide: Designing and Optimizing System Software,
    Andrew Sloss et al)

在線資源

基礎

  1. MOOC課程《C語言程序設計》,翁愷 請擇期學習課程,並參加考試,申請認證證書。
  2. Python簡明教程:A Byte of Python 學習Python,編寫並運行所有示例代碼。
  3. Linux Shell簡明教程 熟悉Linux Shell,掌握基本的shell腳本編程。
  4. LeetCode OJ在線試題 獨立、自主完成至少2/3或更多題目,目前支持C++、Java和Python三種語言答題。
  5. 劉未鵬:怎樣花兩年時間去面試一個人? 建議提前兩年參考這篇文章,做好面試準備。

附註

StackOverflow有一份C語言圖書指南(The Definitive C Book Guide and List),分為Reference Style(參考、大全)、Beginner(初學)、Intermediate(中階)、Above Intermediate(高階)四類。

以下為引文

-------------

Reference Style - All Levels

  • The C Programming Language (Second edition) - Brian W. Kernighan and Dennis M. Ritchie
  • C: A Reference Manual - Samuel P. Harbison and Guy R. Steele
  • C Pocket Reference (O"Reilly) - Peter Prinz, Ulla Kirch-Prinz

Beginner

  • Programming in C (3rd Edition) - Stephen Kochan
  • C Primer Plus - Stephen Prata
  • C Programming: A Modern Approach - K. N. King
  • A Book on C - Al Kelley/Ira Pohl
  • Learn C The Hard Way - Zed Shaw
  • The C book - Mike Banahan, Declan Brady and Mark Doran
  • Practical C Programming, 3rd Edition - Steve Oualline
  • C: How to Program (6th Edition) - Paul Deitel Harvey M. Deitel
  • Head First C - David Dawn Griffiths

Intermediate

  • Object-oriented Programming with ANSI-C - Axel-Tobias Schreiner
  • C Interfaces and Implementations - David R. Hanson
  • The C Puzzle Book - Alan R. Feuer
  • The Standard C Library - P.J. Plauger
  • 21st Century C - Ben Klemens
  • Algorithms in C - Robert Sedgewick

Above Intermediate

  • Expert C Programming: Deep C Secrets - Peter van der Linden


好書回答里都已羅列的差不多了。

如果非要插一句:c primer plus,不可錯過的經典!

如果非要再插一句,吐血推薦一個視頻,一般人我不告訴他:

From:香蕉地--C語言入門了離學會編程還遠嗎?

學以致用才是讀書的真諦!


首先閱讀C Primer Plus,然後將KR那本經典上的代碼親自敲過一遍,基本上已經算是入門。

另外摻雜上兩本之間閱讀的,推薦宋勁杉的《一站式學習C編程》(可以在 http://learn.akae.cn/media/index.html 或 中文版:Linux C/C++編程一站式學習 閱讀這本書),這本書涵蓋內容極廣。

我之前歸納過一次書單,不過數量過多,僅供參考。

想學c語言,有沒有經典的書?


吐血推薦《c primer plus》難得的好書。老譚的書可看可不看,但是這本藍皮的c primer plus是我案頭必備的參考書,後面還有完整的c99標準庫,所以適合當個參考書。

然後經典的 K R有了經驗後要去看看,例子很經典。

後來進階可以看看三劍客《c和指針》《c陷阱與缺陷》《c專家編程》

有本書對於初學者避免錯誤也很不錯《與c有關的495個問題》

c語言好書推薦


記住:Less is More!

書不要貪多,就那幾本經典,多看幾遍效果更好。

第一遍:

看完宋勁杉的《一站式學習C編程》的前兩部分,1-27章。

對編程有個初步的感覺,知道什麼是編譯,什麼是彙編,什麼是連接。

會用命令行編譯,調試,運行程序。

第二遍:

依次看完《C和指針》,《C陷阱與缺陷》,《C專家編程》。

這兩遍都要結合《C程序設計語言(第2版 新版)》學習。

這本書是學習C語言公認的聖經。

上面每本書都會多次引用(或擴展)到這本書的具體章節,每當這時候就跳到這本書中,認真把該章節看一遍,然後做到能脫書把該章節的代碼敲一遍。然後回到原來書中繼續。

上面兩遍完成,應該會有種感覺——C語言這門,我入了。

第三遍:

完整看一遍《C程序設計語言(第2版 新版)》,並做到能脫書敲出書中代碼。

接著就可以做具體項目(或到網上刷題),有問題重新學習《C程序設計語言(第2版 新版)》的相關部分。

PS:

你在學習編程的時候,僅僅學習語言是不夠的。

操作系統,編譯原理,網路,計算機組成,甚至微機原理等等都是很重要的。

這裡僅僅談C語言學習,就不展開了。

但還是建議,當你開始寫代碼之前,先在網上找一篇編程規範,學習變數和函數命名,代碼縮進,注釋寫法等(有條件可以看《代碼大全》相關部分內容)。一開始就養成一個好習慣,無疑對以後成長和工作是很有幫助的。

記住這句真理名言:你寫的程序首先是給人看的。

寫得好看,不僅僅你自己看著舒服,更重要的是以後方便你和他人維護。


譚老頭的是堅決不要碰,C Primer Plus不錯,後期可以看C缺陷和陷阱,我就這麼來的,不喜勿噴!


C和指針配套視頻 C語言開發


當然是KR的《THE C PROGRAMMING LANGUAGE》。

一本搞定!


血和淚的教訓 入門推薦大部頭的都是坑爹的 上http://amazon.com 找本500頁以內的高分入門書吧。看完了看懂了可以找點東西做做,或者再看經典大部頭。

特別像c cpp 這種相對低級的語言,大部頭啃了好久,小應用一個寫不出來,真是很挫敗的。


做了3年C語言,說一說我的一些談不上經驗的想法。

1:你可以藉助任何一本市面上的C語言標準教材入門,甚至譚浩強的也可以 (《C primer plus》自然更好)。

2:但是請記住一句話:C語言的問題,你不可能在C語言中找到全部答案。 這句話也適用於所有語言,低級語言是對機器語言的抽象,高級語言是對低級語言的抽象,具體來說,C語言是對彙編語言的進一步抽象,很多C語言的問題,只有在深一步了解彙編後,你才能得到答案。

這樣一個深入的過程,我推薦 網易公開課的《編程範式》這門課,再輔以一本彙編書籍,你會更加得心應手。

經歷這樣一個過程,對於「指針」、「二級指針」、「內存操作」 這些C語言大難題就算是拿下來了。

3:在積累了一些項目經驗後,你會對「介面」、「模式」、「設計」這些感念更加深入的了解。

這時候,我非常推薦《C語言介面與實現這本書》。這本書能迅速將各種概念提升到應用這樣層次上來,也能啟發對「工程」、「模塊」、「項目」等關鍵詞的思考, 這也是我目前所處的階段,希望共勉~


C Primer Plus


自認為我們這個課程還是不錯的:課程信息 - C 語言程序設計

  • 第 1 章 語言入門基礎
  • 第 2 章 數學運算
  • 第 3 章 輸入、輸出與地址
  • 第 4 章 關係、邏輯與分支
  • 第 5 章 循環
  • 第 6 章 函數
  • 第 7 章 數組
  • 第 8 章 多維數組與字元串
  • 第 9 章 字元串與字元串操作
  • 第 10 章 指針、內存與位運算
  • 第 11 章 複雜結構與指針
  • 第 12 章 C 語言工程開發


《The C Programming Language》

多年以後,出於給別人推薦書籍的目的,重新審視幾本經典的c相關書籍,驚奇的發現,最好最經典的還是這本沒有之一!內容絕對精要,幾乎毫無廢話,摒棄了所有無關的瑣碎細節,留下的確實c最核心的部分(同時知識點都是覆蓋到了的),同時卻深入淺出(比如竟然有malloc的簡單實現)。

說實話,幾年前第一次閱讀的時候是比較粗略的,當時是已經學過了c的,看下來的感覺是內容太少太簡練了,對於初學者太難,對於有經驗的乾貨又太少。時光流轉,轉眼間從c、c++、python、java一路寫來,雖然沒有成為高手,但是見識也有了些。之前是喜歡細節多的大部頭,甚至於有時候沉溺於茴香豆有幾種寫法,現在的想法卻完全相反了:一本好的語言書(除了那種專著或者參考手冊),1、清晰簡練的將清楚最核心的內容;2、取材得當,剔除一切不必要的細節;3、能夠深入淺出,讓讀者對於最核心的部分有較好的訓練。毫無疑問,此書是完美符合這三點的。

那麼,這本書就沒有缺陷了么?如果非要吹毛求疵,一是沒有涵蓋最新的C規範,二是後面的附錄可以不要(因為目前有非常好的在線參考資料),這樣書籍就能縮減到150頁!

對於這本書是不是適合入門,大家卻又很大的異議,就像我自己看法也是經歷了如此的轉變。分析我自己的經歷,發現是說不適合的是沒有利用好這本書,那麼這本書怎麼用才能達到好的效果呢?一句話:踏踏實實的做完所有的習題,全部弄明白!當然這需要一定的耐心定力。

===============================================

再順便說下另外幾本經典的c相關書籍的看法:

《C語言程序設計:現代方法》、《headfirst c》:如果實在沒有耐心的話可以看看這兩本,其中第二本是一貫的headfirst風格,通俗易懂

《c和指針》:不錯的進階書籍,有細節也有深度

《c專家編程》、《C陷阱與缺陷》:當做飯後甜點大概看看就行了

《c語言的科學與藝術》:不僅是c語言,也是比較好的入門書,缺點是也有點老了。另外涉及了太多c無關的東西,當然你也可以看做是特色或者優點。

《c primer plus》:只能說是還不錯,主要是作者太啰嗦了,取材不當,細節太多,竟然要700多頁。雖然啰嗦對於一些人更容易懂,但是這麼啰嗦的話還不如去看《headfirst c》呢

總之,《c和指針》是進階時推薦一看的,其他的就看心情了,可看可不看。當然,如果要應付國內某些公司蛋痛的筆試的話去看林銳那本吧,就不評價了。


百度:郝斌


學技術看書還是太慢,技術重在動手實戰~

推薦的方法是直接照貓畫虎,了解整個框架,而後再根據用到的慢慢填充需要的知識細節~

關於 C 語言,大家就不要吐槽譚浩強老師的那本書了(畢竟那麼書寫於好久好久之前,能寫到那個水平已經很了不起了~)

極客學院剛上線了一門《C語言入門 - 極客學院【C語言 視頻 教程 Adnroid NDK 基礎 會員 免費】》,是一個很有實戰經驗又能深入淺出的老師講解的,大綱如下


如果要進階學習或者說要透徹地學習C語言,這幾個不容錯過:

  • C FAQ: comp.lang.c Frequently Asked Questions

這些常見的問題最好是都溫習一遍,包括裡頭所有的例子。

  • C Traps and Pitflats

這本書非常重要,一定要仔細閱讀。

http://cm.bell-labs.com/cs/cstr/123.ps.gz

  • C 語言開發過程視圖

早期寫過的一個C語言開發序列博客,詳細探討了開發背後的一些細節。

目前已經整理成一個開源書籍:http://tinylab.org/open-c-book

  • Hacking Hello World

http://jserv.sayya.org/helloworld/

耐心看看,跟我上面進行的探索過程類似,但是可能更深入淺出。

  • APUE

據此掌握蠻多C語言API / 基礎的用法

利益相關:【泰曉科技|TinyLab.org】專註於產品級嵌入式Linux研發與交流,歡迎一線工程師參與分享與交流。


學C語言(可以延伸至整個編程),初學的時候要首選日本人的書籍深入學習的時候選擇歐美書籍

編程這種東西永遠不要碰中國人寫的教材,這裡的重點是教材,千萬不要碰(重點是譚浩強,不要碰,不要好奇,不要搜索)。

日本書籍首選「圖靈程序設計圖書系列」,歐美書籍首選「機械工業出版社」。

日本書籍注重學習的高效性和樂趣性,學習過程簡單易懂,直觀,廢話幾乎沒有,可以把初次出現的概念後者演算法類比成身邊的事物(或者事件),漫畫圖佔了很大的一部分,做到了一圖勝千言。

歐美書籍注重邏輯性和嚴謹性,在你的深入提高的過程總提供了大量的嚴謹高效的編程思想,受用一生。

對於初學者比較推薦一下幾本書: 《程序員的數學》(有三本)

《明解C語言》 ps:這個分三篇,前兩篇已經引進並翻譯了,最後一篇還沒有引進 (中間的那本是入門篇,還有實戰篇沒有引進)

日文版封面的漢字已經表明了這本書的地位。(同樣是各個國家的入門書的最高峰,日本的柴田望洋比中國的XX強不知高到哪裡去了。)

下面是中文版:

《征服C指針》 ps:包含了很多基礎知識(堆棧,數據結構等等),不僅僅是講指針的。


推薦一本《C語言程序設計 現代方法》,比較詳細,清晰。以後想深入了解的話,再看kr,結合宋勁杉那本一站式,效果拔群


其實覺得最適合應付考試的還是譚浩強的書,大家別噴我


推薦C primer plus


推薦閱讀:

如何理解「言論自由」這個單詞?言論自由的底線在什麼地方?
有哪些國學類歷史類和國際政治類的入門書單,最好是比較有趣易讀的?
還有哪些文章如汪曾祺先生的《受戒》這樣清新?
哪幾本書你最想推薦給朋友?
如何評價滄月的《鏡》系列?

TAG:書籍推薦 | C編程語言 |