初學C語言,有什麼好書推薦?
下學期外教來教C語言,怕聽不懂,想麻煩大家推薦幾本適合初學者看的關於C語言的書,謝謝啦
2014年下半年到東北某地校招,面試了12人,其中有當過C語言助教,有自學C語言編程的,問了4人,全都還在用譚浩強的C教材。老實說,聽到這樣的回答,我很是詫異,現在市面上有這麼多好書可選,有不少學校和學生(非計算機專業)卻還在用譚浩強的書。昨天給公司人力同事提了一份面向嵌入式軟體開發工程師的書單/在線資源,正好有幾本C語言或相關書籍,單列在此。其中大部分書我至少讀過一遍。
基礎(C語言入門,初學,編程基礎)
- 《C語言程序設計:現代方法》(第2版)(C
Programming: A Modern Approach, 2nd Edition, K.N.King) - 《深入理解計算機系統》(修訂版或第2版)(Computer Systems: A Programmer"s Perspective,
Randal E. Bryant et al),閱讀建議 - 《C語言程序設計》(第2版)(The
C Programming Language, Brian W. Kernighan Dennis M.
Ritchie) - 《程序員修鍊之道》(The
Pragmatic Programmer: From Journeyman to master, Andy
Hunt Dave Thomas)
內核/驅動
- 《Linux內核設計與實現》(第3版)(Linux
Kernel Development, 3rd Edition, Robert Love) - 《Linux設備驅動程序》(第3版)(Linux
Device Driver, 3rd Edition, Jonathan Corbet et al) - 《深入Linux內核架構》(Professional
Linux Kernel Architecture, Wolfgang Mauerer)
應用
- 《UNIX環境高級編程》(Advanced
Programming in the UNIX Environment, W. Richard Stevens) - 《UNIX網路編程》(Unix
Network Programming, W. Richard Stevens)
進階
- 《C陷阱與缺陷》(C Traps and Pitfalls, Andrew Koenig)
- 《C專家編程》(Expert C Programming, Peter
van der Linden) - 《ARM嵌入式系統開發:軟體設計與優化》(ARM
System Developer"s Guide: Designing and Optimizing System Software,
Andrew Sloss et al)
在線資源
基礎
- MOOC課程《C語言程序設計》,翁愷 請擇期學習課程,並參加考試,申請認證證書。
- Python簡明教程:A Byte of Python 學習Python,編寫並運行所有示例代碼。
- Linux Shell簡明教程 熟悉Linux Shell,掌握基本的shell腳本編程。
- LeetCode OJ在線試題 獨立、自主完成至少2/3或更多題目,目前支持C++、Java和Python三種語言答題。
- 劉未鵬:怎樣花兩年時間去面試一個人? 建議提前兩年參考這篇文章,做好面試準備。
附註
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
推薦閱讀:
※如何理解「言論自由」這個單詞?言論自由的底線在什麼地方?
※有哪些國學類歷史類和國際政治類的入門書單,最好是比較有趣易讀的?
※還有哪些文章如汪曾祺先生的《受戒》這樣清新?
※哪幾本書你最想推薦給朋友?
※如何評價滄月的《鏡》系列?