當前位置:首頁 » 編程語言 » c語言入門經典源碼講解

c語言入門經典源碼講解

發布時間: 2022-08-11 10:13:19

c語言入門經典(第4版)源代碼

找到這本書的介紹部分,找到網址,在該網址去看看,關於這本書的課件和源代碼.....試試看吧....一般的書都自帶的....

==============================================================Mr_Computer

Ⅱ C語言源代碼分析(越易懂越好,我只是一個初學者)

printf「」里的是原樣輸出的東西,但是你的y是未知的,是你程序運行到這一步才可以得到的,你沒有辦法寫到「」里,所以你用%d代替,%d不會原樣輸出,它代表整數,而你的y的數值就是%d的數值,就是當printf里有%d的時候程序知道它的數值是「」,後跟的那個數,也就是這個程序里的y,比如printf(「%d%d%d」,a,b,c);第一個%d輸出的是a的值,第二個%d輸出的是b的值,第三個就是c的值了,如果是%c就是字元的意思,%f就是浮點型的數

Ⅲ 如何學習C語言

如果剛開始接觸c語言,聽不懂也正常,不要有畏懼的心理,有些小夥伴可能看到部分同學什麼都會,自己就很氣餒,因為這部分同學很可能接觸編程比較早,即使小孩學走路也有一個過程,剛開始有走路慾望->學會站立,腿部有力量->嘗試走路,不斷練習->學會走路。所以不要慌。

學C語言與走路一樣,剛開始一定要有學習的慾望,然後,再制定計劃,不斷練習,量變會引起質變,堅持下去就發現原來這么簡單。

歡迎關注公眾號:c語言與cpp編程,關注後,回復「加群『』進微信學習交流群

1、學習資料

書本推薦:《cprimerplus》難得的好書。老譚的書可看可不看,但是這本藍皮的cprimerplus是我案頭必備的參考書,後面還有完整的c99標准庫,所以適合當個參考書。注意區分一下《c++primer》和《cprimerplus》

如果覺得這幾本書還是有點難,那就先看《C語言程序設計》

有了經驗後要去看看,例子很經典。後來進階可以看看三劍客《c和指針》《c陷阱與缺陷》《c專家編程》

剛學C語言的話可以結合看下C語言編程經典100例;

編譯器:VS,DevC++,VC++,CodeBlocks,C-Free,TurboC。關於它們的特點網上介紹很多了,就不贅述了。講真,入門和基礎階段你用哪個無所謂,還是選自己喜歡的,不過對於初學者我們推薦DevC++。可能現在大學課堂用的還是VC++,剛入門自己習慣就行。

視頻推薦:有同學曾經說過,視頻這么好,上課就不用聽講了,這個是完全錯誤的,視頻是課堂補充,上課還是一定要好好聽講的,視頻可以查缺補漏,系統的學習一下。

上面提到的一些資料整理好了,可以下載:

鏈接:

提取碼:1234

學習方法:

1、過:學習一門新的語言,第一步就是把它所涉及的基礎知識大體過一點,不求深解,只求了解——第一遍:無需了解太過深入的理論,大體知道這門語言是什麼樣的,主要面向哪些場合,一些基本的語法格式是什麼樣的就可以了。

2、抄代碼:剛開始寫代碼,沒有多少人一上來就能立刻自己寫一個很完善很強大的代碼,甚至連基本的語法都會寫錯,這時候抄代碼就很關鍵了,從書上抄,從例子里抄,邊抄邊想,邊想邊回憶語法。

3、模仿改:自己會抄寫一些簡單的代碼,熟悉了一遍此語言的簡單語法後,但還不太清楚怎樣下手寫一個完整的代碼模塊,所以這一步要仿寫了,仿照給出的代碼寫一個屬於自己的代碼

4、勤調試:沒有人能一下子寫出完全正確的代碼,自己試著寫一些代碼,通過不斷調試來驗證自己的一些想法,繼續思考,再次驗證,來回折騰。熟悉一些基本的調試工具以及調試方法。

5、看n遍:出錯或遇到問題時,將代碼從頭看到尾,看了一遍又一遍,直到快全部記住時,總能找出問題原因,相信方法總會比問題多

6、練重復2-5步三遍以上,不解釋。

7、創新拿出一個完全沒有寫過的代碼,根據要求,一步步的寫出來。如果寫不出來,或者中間一堆錯誤,請參考第六步。

8、悟:主動找到寫代碼的感覺和成就感,並保持下去,世界上最難的語言就掌握了,將成為你軟體生涯永遠的工具。

Ⅳ c語言入門學習 源代碼如何編寫

基本格式:
#include <stdio.h> /*包含輸入輸出函數頭文件*/
main() /*主函數,每個可執行程序都必須有*/
{
int a,b,sum; /*變數定義,定於程序中要用到的變數*/
scanf("%a,%d",&a,&b); /*接收鍵盤輸入,從鍵盤輸入兩個數字,中間用「,」隔開*/
sum=a+b; /*運算表達式,這里是計算a和b的和*/
printf("%d",sum); /*屏幕輸出,把a和b的和在屏幕上列印出來*/
getch(); /*暫停回到編輯界面,這樣可以及時看到輸出結果,敲任意鍵返回編輯界面*/
}

Ⅳ c語言入門級程序

1.程序分析:利用while語句,條件為輸入的字元不為'\n'.
2.程序源代碼:
#include "stdio.h"
main()
{char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some characters\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
space,digit,others);
}

Ⅵ C語言入門

怎樣學習C語言呢?

1:工欲善其事,必先利其器
這里介紹幾個學習C語言必備的東東:
一個開發環境,例如turbo C 2.0,這個曾經占據了DOS時代開發程序的大半個江山。但是現在windows時代,用turbo C有感覺不方面,編輯程序起來很吃力,並且拖放,更沒有函數變數自動感應功能,查詢參考資料也不方便。建議使用Visual C++,這個東西雖然比較大塊頭,但是一旦安裝好了,用起來很方便。

一本學習教程,現在C語言教材多如牛毛,但推薦大家使用《C語言程序設計》譚浩強主編 第二版 清華大學出版社,此書編寫的很適合初學者,並且內容也很精到。

除此以外,現在有很多輔助學習的軟體,畢竟現在是Window時代了,學習軟體多如牛毛,不象我們當初學習,只有讀書做題這么老套。我向大家推薦一個「集成學習環境(C語言)」,里邊的知識點總結和常式講解都非常好,還有題庫測試環境,據說有好幾千題,甚至還有一個windows下的trubo C,初學者甚至不用裝其它的編譯器,就可以練習編程了,非常適合初學者。還有一個「C語言學習系統」軟體,不過感覺只是一個題庫系統,如果你覺得題做的不夠,不妨也可以試試。

2:葵花寶典
學習計算機語言最好的方法是什麼?答曰:讀程序。

沒錯,讀程序是學習C語言入門最快,也是最好的方法。如同我,現在學習新的J#,C#等其他語言,不再是抱著書本逐行啃,而是學習它們的常式。當然,對於沒有學過任何計算機語言的初學者,最好還是先閱讀教程,學習完每一章,都要認真體會這一章的所有概念,然後不放過這一章中提到的所有常式,然後仔細研讀程序,直到每一行都理解了,然後找幾個編程題目,最好是和常式類似的或一樣的,自己試圖寫出這段已經讀懂的程序,不要以為常式你已經讀懂了,你就可以寫出和它一樣的程序,絕對不一定,不相信你就試一試吧,如果寫不出來,也不要著急,回過頭來再繼續研究常式,想想自己為什麼寫不出來,然後再去寫這段程序,反反復復,直到你手到擒來為止,祝賀你,你快入門了。

3:登峰造極
寫程序的最高境界其實就是掌握各種解決問題的手段(數據結構)和解決問題的方法(演算法)。

是不是寫出底層程序就是程序設計高手呢?非也,寫底層程序,無非是掌握了硬體的結構,況且硬體和硬體還不一樣,要給一個晶元寫驅動程序,無非就是掌握這塊晶元的各種寄存器及其組合,然後寫值讀值,僅此而已。這不過是熟悉一些io函數罷了。那麼怎樣才算精通程序設計呢?怎樣才能精通程序設計呢?舉個例子:你面前有10個人,找出一個叫「張三」的人,你該怎麼辦?第一種方法:直接對這10個人問:「誰叫張三」。第2種方法:你挨個去問「你是不是張三?」,直到問到的這個人就是張三。第三種方法:你去挨個問一個人「你認不認識張三,指給我看」。不要小看這個問題,你說當然會選第一種方法,沒錯恭喜你答對了,因為這個方法最快,效率最高,但是在程序設計中找到解決問題的最優方法和你用的手段卻是考驗一個程序員程序設計水平的重要標志,而且是不容易達到的。剛才這個問題類似於數據結構和演算法中的:Map數據結構,窮舉查找和折半查找。所以掌握好數據結構和一些常用演算法,是登峰造極的必然之路。最後給大家推薦嚴尉敏的《數據結構》清華大學出版社,希望每一個想成為程序設計高手的人研讀此書。

Ⅶ C語言的經典編程例子


程序員》推薦C++ 圖書三人談

主持人:熊節(透明),《程序員》雜志編輯,C-View成員
嘉 賓:孟岩(夢魘),聯想公司掌上設備事業部應用開發處任職,C-View成員。與侯捷先生合譯《C++ Standard Library》一書
金尹(惡魔),上海天宇公司CTO,在《程序員》連載有「自由與繁榮的國度」系列文章

透明:「學C++用哪本書入門」,這是被問得最多的一個問題。但是哪一本書是最好的入門書?似乎很難找到答案。《C++ Primer》太厚,《Effective C++》對讀者要求比較高,《Essential C++》又常常被批評為「太淺」。
其實說穿了:no silver bullet。想從一本書學會C++,那是不可能的。有朋友問我如何學C++,我會建議他先去找本數據結構書,把裡面的習題全部用C++做一遍,然後再去看《Effective C++》。myan經常說「要在學習初期養成好習慣」,我對此頗不以為然。
個人認為,《Essential C++》適合作教材,《C++ Primer》適合作參考書,《Effective C++》適合作課外讀物。

惡魔:很後悔當初買了《C++ Primer》。因為從我個人角度來看,它的功能效用基本是和《The C++ Programming Language》重合。當然對於入門來說,它還是很不錯的。但是《C++ Primer》太厚,一來導致看書極其不方便,二來系統學習需要花比較長的時間。對於目前這個越來越快餐化的時代來說,的確有很多不適合的地方,不過可以作為初學者的參考書。現在我以一塊K3 CPU的代價把它借給了別人,希望我那位同事能夠從中得到一些益處。
如果已經具備了C基礎,我建議看國內的書,例如錢能的《 C++大學教程(第二版) 》。(如果沒有C的基礎還是看譚浩強的C語言)。這本書對C講得還算比較清晰,有很多習題值得一做,特別是最後的struct和union兩個部分。其中的一些演算法比較拖沓和繁瑣(比如樹和鏈表的遍歷演算法),讀者可以嘗試修改這些例子,作為最後對C語言的一些總結測試。

夢魘:這個問題讓我想起四五年前的情形。今天對於C++有一點認識的人,多半是從那幾年就開始學C++了。那時根本沒有品牌觀念。從書店裡找一本C++書,如果看著還算明白,就買下來。我記得那時候宛延闓、張國鋒、麥中凡教授的書都受到很高的贊譽。我個人最早的一本C++書是Greg Perry的一本書,今天想起來,其實是一本打著C++旗號的C語言教程。對我作用最大的一本書是國防科技出版社出版的一本書,書名記不得了,作者叫斯蒂芬·布萊哈。
透明:還記得以前曾批評過一本C++書,是北航出的,整本書就沒有出現過class關鍵字。那本書,說穿了其實只是介紹了C語言和iostream庫的用法,根本不能算C++。而當時我常常推薦的一本書是電子科技大學張松梅老師的C++教程。那本書,直到今天來看也沒有太大的問題,唯一的缺憾就是由於年代久遠,許多東西已經過時了。而對於一本技術書籍來說,「過時」是最不可接受的。
總體來說,那時使用C++的人真是在「盲人摸象」。不過這也有好處,就是對C++的很多細節能搞清楚,以後看到經典好書時比較容易理解;當然壞處就是概念不清,甚至都不知道C++和Visual C++、Borland C++到底有什麼不一樣。

夢魘:整個90年代,其實大部分人對於C++的認識都似是而非。一開始是等同於Borland C++,後來是等同於Visual C++和MFC。所以一般來說,打著BC和VC旗號的書賣得很好,人們覺得這就是C++。而我比較幸運,布萊哈的那本書雖然從現在的眼光來看談不上高超,但基本路子是對的。可能是因為原書是給UNIX程序員的培訓教材,所以沒有讓我一開始就形成「C++ == VC++」的認識。
其實一直到1996年,我們那裡搞計算機的都是唯Borland C++馬首是瞻的,到了VC 4.0出來,一下子格局全變了。1997年VC5推出之後,書店裡MFC書鋪天蓋地,學MFC的人,頭抬得都比別人高一些。不過現在看來,那時候大部分的MFC書都是三流貨色。我曾經有一段時間認為,那一批程序員中間有不少被誤導了。根本原因就是相對的封閉。

透明:我覺得一本書的價值有兩方面:第一,教給你實用的技術;第二,促使你去思考。對於一本介紹VC(或者說MFC)使用方法的書,我根本不希望它能促使我有什麼思考,所以我就一定要求它在技術上精益求精完美無瑕。我剛開始用VC的時候,買的第一本書就是潘愛民老師翻譯的《VC技術內幕》(第四版),沒有受到那些「三流貨色」的誤導,應該說是很幸運的。

夢魘:1999年機械工業出版社開始出版「計算機科學叢書」,其中的《Thinking in C++》第一版受到了廣泛的歡迎。其實我一直不認為這本書很出色,雖然拿過一次大獎。然而我們都得承認,這本書在C++書籍領域里第一次建立了品牌觀念,很多初學者開始知道,不是隨便買哪一本都一樣的。再往後就是2000年的《 深入淺出MFC(第二版) 》第二版,以及侯先生在《程序員》上發表的那一篇《C++/OOP大系》,加上整個大環境的變化,品牌觀念深入人心,C++書籍市場終於開始逐漸與世界同步。
回想往事,我的感覺是,那個需要戰戰兢兢選擇入門書的時代已經過去,今天的C++初學者,大可以放心地買口碑好、自己讀起來思路順暢的書,入門不再是太大的問題。還有一些程序員已經學了幾年C++,但看到今天出版的一些新書,感覺比較陌生,這也不是什麼問題。侯先生經常說「凡走過必留下足跡」,所謂「走彎路」,未必不是一件好事。
至於具體的推薦表,就不好一概而論了。總之在我的印象里,《Essential C++》、《C++ Primer》、錢能教授的C++教程,都不錯。甚至有人一上來就看Bjarne Stroustrup的《The C++ Programming Language》,只要他喜歡,也沒什麼不可以。

透明:我同意你的觀點。不管怎麼說,編程是門實踐性非常強的學問。要想對C++對象模型有深入的了解,最好的辦法就是寫一串程序去看結果;要想學會OOP,也只能從項目中學。對於初學者,最好的學習方法就是不停地寫程序,寫真正有用的程序,寫到有問題的時候就去查書,於是自然就會知道哪本書好哪本書不好。不過我們的教育制度能不能讓大學里的學生們有這樣的學習機會,我表示懷疑。
以我的經驗,學C++有兩個門檻:入門和使用。完全看不懂C++,這是一個門檻,但是只要有一本合適的入門書,很快就能跨過。要想真正用上C++,卻不是件很容易的事情。尤其對於學生來說,接觸到的東西多是「玩具」,很難有實戰的機會。所以經常看見有人問「C++到底能做什麼」,這是C++學習中一個比較麻煩的問題。我們都是做了相當長時間的C++程序之後才看到一些真正經典的書,也正是因為走了相當長的彎路之後才知道這些書的經典之所在。所謂彎路,我想也是一種必須的積累。就算一開始就看《Essential C++》和《C++ Primer》,沒有兩三年的時間恐怕還是難有所得。

惡魔:有兩句十分有道理的話,一是我大學的C語言老師說的「寫程序不如說是抄程序」,另一句是一網友說的「好的設計來自借鑒,天才的設計來自剽竊」。對於我這個理性批判主義者來說,這兩句話的確不太適合。但是無論從哪個角度來講,對於初學者來說,剽竊大師的作品是通向成功的最快捷徑。
我個人認為,對於C++的初學者來說,首先要確定自己專業領域內主要使用的特性的方向。因為C++的特性如此眾多,初學者想貪多基本是不可能成功的。C++的編程範式基本可以分為ADT+PP、GP和OO三個方向。對於ADT+PP範式來說,初學者的主要問題不是學習C++,而是學習C的使用。對於這樣的初學者,國內的幾本書還是寫得比較清楚,符合中國人的習慣,比如譚浩強的《C語言教程》、錢能的《C++語言大學教程》。這兩本書我首推第一本,因為這一本我潛心研究了一年,這本書當中很多程序是可以剽竊的,而且可以對這些程序進行加工和提升。比如結構這一章中,它所給出的用struct來實現鏈表、二叉樹的演算法是相當蹩腳的。學習ADT+PP的初學者將這本書揣摩透以後可以嘗試修改這兩個程序。另外這本書的第二版稍微涉及了一些關於「類」的內容。學習ADT+PP的初學者,可以不被OO中的一些專有特性擾亂自己的思路,對於類層次扁平、無繼承、無多態的程序編寫是有很大好處的。

透明:你好象比較推崇國內教授寫的書。現在社會上有種不好的風氣:一捧就捧上天,一貶就貶下地。就好象對待譚教授的書,前幾年是奉為經典,這幾年又有很多人使勁批評。學C++更是有點「崇洋媚外」,總是覺得初學就應該看《Essential C++》。我看這種觀點也是片面的。

惡魔:當然《Essential C++》也值得看看。但是我個人覺得這本書沒有譚浩強的《C語言教程》來得好。主要原因是:第一,C++的所有特性都點到了,但是不深,看了以後會三心二意沒有方向;第二,可以抄襲借鑒的例子太少。《C語言教程》中有很多有趣的問題,比如猴子吃桃、漢諾塔等等,這些例子對於剛剛涉及C/C++語言編程的人來說是學習編程很好的例子。《Essential C++》只能是前兩本書看透以後,作為學習C++特性的一個過渡性的書籍。讓讀者真正領略到什麼是C++的編程、和C編程的不同點在哪裡。

透明:我發現一個很有趣的現象:初學者往往喜歡問「哪本書比較好」,這讓我很是不解。這有點像一個剛學打籃球的人問「王治郅和科比誰比較厲害」。當然科比更厲害一些。但如果你是想學打籃球,這兩個人都非常非常有資格教你,你跟誰學都能學得很強——關鍵不是在於你選哪個老師,而是在於你自己用多少功夫去學。

透明:回到原來話題。學會了C++的語法,能看懂C++代碼之後,必須有些書來指導進階(或者叫指點迷津)。我覺得《設計模式》很好,能夠讓讀者看到一些精妙的用法。不過正如我經常說的,模式帶來的麻煩和好處一樣多,甚至麻煩還要更多。而且,C++本身的問題使得在C++中使用GoF模式愈加麻煩。

夢魘:《Design Patterns》這本書絕對是不可以沒有的,而且中英文版都不可少。最初我看中文版,說實話看不懂,但是也不覺得人家翻譯得不好,所以就想,大概是原文就很難懂,加上自己水平有限。於是總是想著再找幾本patterns的書來看。後來找到幾本書,口碑還不錯,不過水平高下,一比就出來了,還是那本《Design Patterns》最經典,最耐看。英文版出來之後,兩個版本對照看,明白多了。現在覺得,其實就設計模式來講,把這本看明白了就很不錯了,不用再花費很多心思找其他的書。我現在的包里始終夾著這本書,隨身攜帶,有備無患。
至於說設計模式的副作用,和可能帶來的弊端,我的體會也挺多。不過是這樣,我們想一想,究竟什麼情況下設計模式可以用得很好呢?一種是有經驗豐富的人引導,比如要是Robert Martin帶隊,你在某個地方用錯了設計模式,他就會指出來,說這里不對,將來會產生什麼樣的弊端。對於他來說,豐富的實踐經驗足以支持他進行「預測型」設計。但是大部分人沒這個能力,因此我們只好走第二條路和第三條路,就是「試探型」設計和「重構型」設計。遇到一個問題,你覺得用某種模式挺合適的,就大膽地用了,成功是積累經驗,發現不好,出了問題了,只好改回來,那也是積累教訓。這叫做「試探型」。至於重構,應該算是最有組織、成功率最高的工程化方法。先把問題「quick and dirty」地解決了,所有的暗礁都暴露出來,然後再根據實際情況採用合適的模式優化設計。現在XP和UP都高度重視refactory,UP在Elaboration和Construction階段都鼓勵抽出專門的iterations進行重構。所以說如果組織快速的軟體開發,當然比較傾向於這條路——打成功率嘛。

透明:講到重構,我順便說說《Refactoring》這本書的影響。從工程本身的角度來說,你所謂的「重構型設計」是沒有什麼問題的。但中國的開發者(也包括我在內)往往比較沖動,比較容易相信銀彈的存在。曾經有那麼一段時間,我在Java中嘗試過了重構的方法之後,又拿到C++中去嘗試。結果發現,在Java中速度非常快的重構過程,到C++中就被減慢了。究其原因,就是因為C++和Java的約束條件不同。拿著Java中成功的案例直接套C++,不失敗才怪。
所以,我必須說:《Refactoring》這本書很有價值。但對於C++程序員來說,它的價值是讓你思考,思考這種方法的可行性。如果一個C++程序員沒有打算遷移到Java,那麼我必須告訴他:《Refactoring》這本書不是讓你照著它用的,甚至不是讓你去相信它的。對於C++程序員,《Refactoring》全書可以放心相信的只有第13章,其他的部分,都必須非常謹慎地對待。

夢魘:我還要就「試探型」的方法多說兩句,我覺得對於個人發展來講,「試探」也是必不可少的,撞牆不可怕,高水平的人不都是撞出來的嗎?你失敗了一次,就知道這個模式有什麼潛在的問題,下次再用,就會多看幾步,像下棋似的。撞的多了,路數就出來了。
我不知道你們是否有這個感覺:用錯了模式,吃了虧,再回過頭去翻翻《Design Patterns》,看到人家早就指出來這個問題,不過就是那麼幾句話,原來看上去乾巴巴的,現在覺得句句都講到心坎上,GoF的形象馬上就高大起來,還帶著光環,感覺是既興奮又懊悔。

透明:現在回頭來看,我更欣賞myan推薦給我的《Designing Object-Oriented C++ Applications Using Booch Method》。這本書能夠幫助C++程序員理清思路培養習慣,可惜國內沒有引進。相比後來商業味濃厚的UML系列書籍,我覺得這本書對於面向對象的闡釋精闢獨到,至今未有能出其右者。

夢魘:剛才我們兩人都說到Robert Martin,他可是我的榜樣。那本1995年的《Designing Object Oriented C++ Application》,我覺得是每一個C++軟體工程師都應該反復研讀的書。可惜不僅國內沒有引進,在國外的名氣也不大。如果你覺得面向對象的那些道理你好像都明白,可就是一遇到實際問題就使不上勁,那這本書就是你的最佳導師。
提到理清思路,還有一本書不得不提,就是Andrew Koenig的《Ruminations On C++》。每個人都應該問自己,我學了這么多年的C++,究竟什麼是C++最基本的設計理念?遇到問題我第一個直覺是什麼?第一個試探型的解決方案應該具有那些特點?如果你不能給出明確的答案,就應該認真地去讀這本書,讀完了你就有了「主心骨」。

透明:插一句話,談談「推薦書」的問題。入門書基本上是放之四海而皆準的,所以推薦的意義也不大。而入門後的發展方向,每個人不同,這個時候就需要「高人」的指點。舉個例子:我學C++的時候,myan還不認識我,所以也沒有給我推薦書,我還是學過來了,所以即使你當時向我推薦了《Essential C++》或者《C++ Primer》,我也不會太感謝你;但在我認真研究OO的時候,你推薦Robert Martin那本書給我,對我幫助就特別大,而且我從別的地方也很難找到類似的推薦,所以我就很感謝你。
一個程序員,必須有framework的意識,要學會用framework,還要主動去分析framework(在這方面,《Design Patterns》能有一定的幫助)。但是,真正高質量、成氣候的framework的書恐怕也就只有針對MFC的。從這個角度來說,MFC縱有千般不是,C++程序員都非常有必要先去用它、熟悉它、研究它,甚至藉助《深入淺出MFC》這樣的書來剖析它。不然,很難有framework的意識和感覺。
當然,另一個framework也很好,那就是STL。不管用不用MFC、STL,對這兩個東西的掌握和理解都是極有幫助的。最近我又在看《深入淺出MFC》,雖然已經不用MFC編程了,但幫助是一定有的。

夢魘:MFC和STL方面,我還是比較推崇侯先生的兩本書《深入淺出MFC》和《STL源碼解析》。
《深入淺出MFC》這本書,名氣自然是大得不得了,不過也有不少人批評。其實書也沒有十全十美的,批評當然是少不了的,不過有的時候我看到有人評論這本書,把它跟Inside VC相比,真的是牛頭不對馬嘴。
你剛才其實說得很對,程序員應該有一點framework意識。而這本《深入淺出MFC》與其說是在講MFC編程,不如說通篇是在拿MFC為例分析Application Framework的架構和脈絡。所以無論你對於MFC本身是什麼態度,這本書對每一個C++程序員都有很大的益處。

透明:是的。《VC技術內幕》會告訴你「DYNAMIC_CREATE這個宏怎麼用」,《深入淺出MFC》則告訴你「DYNAMIC_CREATE這個宏是怎麼實現的」。所以,如果你只需要在VC下寫一些小應用程序,《深入淺出MFC》的價值並不太大;但是,如果你需要設計一個稍微大一點的東西(不一定是framework),MFC的設計思想就會有所幫助。

夢魘:另外,我覺得對於MFC也應該有一個公允的評價。過去是吹捧得天上有地下無,書店裡鋪天蓋地都是MFC的書,搞得大家只知有MFC,不知有C++,甚至直到現在還有人問:「我是學MFC呢,還是學C++?VC++是不是比C++更高級的語言?」MFC成了一尊神像,阻礙了人們的視線。所以得把它從神壇上拉下來。這就是過去一兩年有很多人,包括我在內批評MFC的一個目的。可是現在大家視野開闊了,.NET也出來了,MFC不再是神像了,少數人就開始以貶損MFC為樂了。我覺得這種態度是不對的。
什麼叫好的框架?我覺得在十幾年的時間能夠象MFC這樣保持穩定並且不斷進步的框架就是好的框架。可能我們在一些具體的設計問題上有不同看法,覺得「這個地方這么設計不是更漂亮嗎?」很多時候是的,但是這不重要,重要的是MFC成熟穩定、有十幾年的成功經驗,這是最了不起的東西。
另外一點,MFC中間包括著學習Win32 API編程的最佳資料。這是除了其framework方面之外的另一個亮點。我現在使用Win32 API開發,但是經常參考MFC的源代碼,收獲很大。

透明:STL方面,我對於剖析它的源代碼興趣並不大,畢竟裡面源代碼多是演算法問題。所以,《STL源碼剖析》我也只是隨便翻翻就束之高閣了。我覺得這本書用來做計算機系的數據結構和演算法教材不錯,不知道有沒有老師樂意這樣做。
對於STL,我的態度一向都是「應用至上」。不過,我一直認為SGI STL本身就是一本精彩的書,一本數據結構和演算法的經典參考書,同時也是泛型技術的參考書。想知道一個演算法是如何實現的,看看STL源代碼就行;想知道如何使用type traits,STL源代碼裡面也有例子。看別人寫的書,總覺得隔著一層紗,有點撓不到癢處的感覺。SGI STL的代碼寫得非常漂亮,一個C++程序員如果不看看這本書,實在是可惜。

夢魘:至於STL,除了《STL源碼解析》之外,我舉賢不避親,強烈推薦侯先生與我合譯的那本《The C++ Standard Library》。這本書質量之高是無需懷疑的。我現在手邊常備此書,隨時查閱,對我幫助很大。

透明:C++和Java相比,最大的優勢就是它沒有一個專門的公司來管它,最大的弱點也是它沒有一個專門的公司來管它。Java程序員在學會簡單的語法之後,立刻進入SUN提供的framework,一邊用這個現成的framework做實際開發,一邊在開發過程中繼續學習Java一些幽深的特性。而這個時候,C++程序員恐怕還在問「VC和BCB哪個好」呢。這無疑是浪費時間。

夢魘:剛才你說Java和C++的優劣,這個話題已經成了我們這個年代永不消失的聲波了。我也不想再談這個。不過有一點我得說清楚:現在我們很多用C++的人吃了不少苦頭,探過脖子去看看Java,覺得它真是太可愛了,這種印象是不準確的。另外,Java也不簡單,而且會越來越龐大復雜。在很多場合,Java還不具有競爭力。至於將來如何,我看有些Java愛好者也過分樂觀了,似乎計算機科學界幾十年解決不了的問題都可以借著Java的東風解決掉,恐怕沒那麼容易。

透明:那當然。我再次強調:No Silver Bullet。讀書很重要,但古人說「行萬里路,讀萬卷書」,還是把「行路」放在「讀書」前面。尤其對於技術書籍,如果它不能幫我解決問題、不能給我帶來非常實際的利益,那麼我是不會去讀它的。惡魔說得對,我們這個社會很快餐,我們這個行業尤其很快餐,我們也只能努力適應它。

Ⅷ c語言學習

首先是純C的教材
第一本:H.M.Deitel和P.J.Deitel的《C HOW TO PROGRAM》(C程序設計教程)。
作者是父子,從事語言教材的編寫合計超過40年,本書被美國眾多高校選用為教材,既可入門也可翻閱,甚好。本FAQ作者認為如果你只打算看一本的話,那就選他好了。

第二本:Brian W.Kernighan和Dennis M.Ritchie 的《The C Programming Language 》(C程序設計語言)。
此書簡稱K&R,由C語言的創建者撰寫,是全球銷售最多的C語言教材,其品質不容置疑。不過不適合入門,適於在入門之後鞏固提高。實體書有原版和譯本購買,電子版英文較多。

第三本:譚浩強的《C程序設計》。
優點在於,面向中國學生,語言易於理解,而且全書篇幅小,看過的人多,容易找到人請教。但是各方面的概念不深入,淺嘗輒止,實際上還有些小錯誤,不是很嚴謹。因此適合第一次入門學習,例題做完基本就可以拋棄了。有實體書和電子版下載。同時配套有習題集和習題解答,適合自學。

第四本:王大剛先生的《C語言編程寶典》。
質量不錯,與老譚的書一樣非常適合中國學生,而且對於TC的圖形編程講解非常透徹。本人沒有發現實體書,可能只發布在網路上,在VCgood論壇有轉載:
http://www.vcgood.com/bbs/forum_posts.asp?TID=1560&PN=2
http://book.chinaz.com/C/C/index.html

第五本:無名作者的《C語言初學者入門講座》
VCgood論壇轉載,作者未知,質量同上一本。http://www.vcgood.com/bbs/forum_posts.asp?TID=1294&PN=4

第六本:Kenneth A.Reek 的《C和指針》
進階讀物,把指針一章演繹為一本書可見其技術精度。指針是C的靈魂,能領會本書中的理念,才能算是真正明白了C指針的奧妙,才算懂得了C。

第七本:Andrew Koenig 的 《C陷阱與缺陷》
進階讀物,在認真讀完上面的入門書之前,暫勿閱讀。本書暢銷14年歷久不衰,足證品質。

最後一本:ISO C89規范/C99規范
一切關於C語言的疑問,只有一件東西最權威,那就是ISO的規范。但這不是正式出版物,是類似法律文本的技術說明,而且只有英文版。新手閱讀,提防吐血而亡。

然後是C++的教材
C++比C復雜的多,所以教材也就紛繁蕪雜。既有綜合性入門性的,也有專項深入的,閱讀要循序漸進,以下分階段介紹(以下文字有部分引用自他人評介)。
首先是毫無基礎的時候,先要初步掌握語法並形成編程的概念

level 0:
H.M.Deitel和P.J.Deitel的《 C++ How to Program 》(C++大學教程)。
又是這對父子。有很多號稱C++入門的書,但經我的觀察,如果要選擇能推薦給毫無編程概念的新手用的書,這本算是佼佼者了。此父子的《C程序設計教程》我已推薦了。

仍然是K&R,Brian W.Kernighan和Dennis M.Ritchie 的《The C Programming Language》(C程序設計語言)。
盡管C++之父親口說,最好把C++看作一門新語言來學習,但我個人認為,一開始學習C至少有兩大好處。相比C++,C還是非常簡單的,易於掌握,避免你過早陷入C++的語法泥潭。同時,學C能讓你對計算機的底層運行有所認識,建立良好的概念。

錢能的《C++程序設計教程》
國內C++教材中較好的一本,作者是教師,總結多年教學實踐的經驗寫成的,比較適合國內學生。
PS:老譚也有一本C++教材,在此就不太推薦了,它完全是用C的思維來看C++。

當讀者有一定c/c++基礎
推薦的閱讀順序:
level 1
從Stanley B.lippman著 侯捷 譯的《essential c++》開始,短小精悍,可以對c++能進一步了解其特性。Stanley B.Lippman的職業是提供關於C++和面向對象的訓練、咨詢、設計和指導。他也是Bjarne Stroustrup領導的Bell實驗室Foundation項目的成員之一,負責C++程序設計環境中的對象模型部分。簡單說,他是C++的創建者之一。
以Stanley B.Lippman,Josee LaJoie,Barbara E.Moo的《c++ primer》作字典和課外讀物,因為太厚不可能一口氣看完,當然你也可以用它作為主力教材。Lippman說過了,Josee LaJoie是C++標准委員會原負責人,Barbara E.Moo 是獨立咨詢顧問,參與了第一個使用C++編寫的商業產品的開發,領導了公司中第一個C++編譯器項目。
C++之父Bjarne Stroustrup的《the c++ programming language》,簡稱BS的TCPL,全面而深入的書,缺點也是太厚。
這個階段 也可以延用前階段Detiel父子的教材。

level 2 這個階段就要養成好習慣
然後從Scott Meyers的《effective c++》開始轉職,這是聖經,請遵守10誡,要經常看,沒事就拿來翻翻
接著是 Herb Sutter的《exceptional c++》。此人是C++標准委員會的主席,主席說話,誰有異議。
順下來就是Scott Meyers的《more effective c++》和Herb Sutter的《more exceptional c++》,請熟讀並牢記各條款

level 3 這個階段 把C++的類搞透
Stanley B.lippman的《insied the c++ object model》(深度探索C++對象模型)看過後如一縷清風掃去一直以來你對語言的疑惑,你終於能明白compiler到底都背著你做了些什麼了,這本書要細細回味,比較難啃,最好反復看幾遍,加深印象。
看完上一本之後,這本Bjarne Stroustrup的《The design and evolution of c++》(C++的設計與演化)會重演一次當年C++他爹在設計整個語言過程中的歷程。
Stephen C. Dewhurst的《C++ Gotchas: Avoiding Common Problems in Coding and Design》(C++程序設計陷阱)會幫你在設計層面避免錯誤。

level 4 這個階段深入STL吧
Nicolai M.Josuttis的《the c++ standard library》(C++標准程序庫—自修教程與參考手冊) 是stl的字典,什麼都可以查得到。
Scott Meyers的《effective stl》,它和聖經一樣是你日常行為的規范。發現沒有,Scott Meyers先生一直在搞effective系列。
Matthew H. Austern的《generic programming and the stl》(泛型編程與STL)讓你從OO(面向對象)向GP(泛型編程)轉變。
光用不行,我們還有必要了解stl的工作原理,那麼侯捷的 《stl源碼剖析》會解決你所有的困惑。

level 5 徹底掌握模版泛型編程
對於c++無非是OO和GP,想進一步提升OO,Herb Sutter的《exeptional c++ style》是一本主席這么多年的經驗之談,是很長esp的。
一位stl高手是不能不去了解template的,《c++ template》是一本網路全書,足夠你看完後對於GP游刃有餘。
Andrei Alexandrescu的《modern c++ design》是太過聰明的人寫給明眼人看的。

level 6
這個時候,對於C++語法本身,你應該是已經到了隨心所欲的境界,你所要練習的大概就是大規模的C++程序的設計以及一些通用的高效庫的使用,以及為什麼要這樣做的理由。
所以,《C++ 輸入輸出流及本地化》《C++ Network Programming》《大規模C++程序設計》是你需要的。
同時,C++教材中的異類:Barbara E.Moo和Andrew Koenig的《Ruminations On C++》(C++ 沉思錄)是值得你一看的,他集中反映了C++的關鍵思想和編程技術,說明了C++是什麼樣的以及能夠做些什麼,不僅告訴你如何編程,還告訴你為什麼要這樣編程。本書曾出現在眾多的C++專家推薦書目中。

和C一樣,同樣有最後一本書
ISO+IEC+14882-1998 C++規范。這可不是寶典聖經,這就是C++的法律,一切疑問以此為准到此打住。不過,有個腳注,某些具體情況取決於編譯器實現。

接下來是Windows編程
至少在國內來說,Windows環境下的編程還是很有市場的。
第一本書:Charles Petzold 的 《Programming Windows》(Windows程序設計)。
如果說,在windows編程領域只能翻閱一本書的話,那就是他了。《Windows程序設計》由微軟出版社在1988年首次出版,後來被認為是這方面最好的導論性讀本。在1994年5月,Petzold作為僅有的七個人之一(並且是唯一的作家)被《Windows Magezine》和Microsoft公司授予Windows Pioneer獎,以表彰他對Microsoft Windows的成功做出的貢獻。這本書經典到這個程度,以至對於Windows程序員來說,「從Chares 的(Window程序設計)一書中尋找答案。」幾乎成了一句至理名言。
你可以在這個地方觀看到他的外觀,http://www.charlespetzold.com/pw5/,國內書店有售,電子版則需要仔細搜索。

第二本:Jeffrey Richter 的《》(Windows核心編程)和《Advanced Windows》(Windows 高級編程指南)
和上面這本書難分伯仲。這么說吧,你讀了之後就會後悔,後悔為什麼沒有早點讀他。建議先看高級,再看核心。

個人認為除非windows發生革命性的變化,否則看完這三本書,足以應付通常的Windows編程。

上面三本書介紹的是直接使用WindowsAPI實現應用,總的來說那是一種很基礎但很繁瑣的方式。Windows下有很多的編程庫可以使用,VC和BCB都自備了優良的庫。
在VC來說,存在版本的差異,如果是6.0版本,那麼你基本只有MFC這一種選擇,但對於2002以後的版本,包括新推出的2008,MFC、ATL、.net都不錯。
對於MFC。
要學會怎麼用,可以看一下這幾本:
微軟出版社授權的中文版系列書 由David J.Kruglinski,Scot Wingo,George Shepherd寫的《Programming Visual C++ 6.0 技術內幕(第5版)》,經典的「Visual C++技術內幕」的第5版。
清華大學出版社出版 楊永國 的《Visual C++ 6.0實用教程(第2版) 》,這本不是那麼經典,同類多得很,但好處是便宜,而且能夠買到,有些書已經買不到了。
如果想知道MFC的原理,侯俊傑先生的《深入淺出MFC 》(Dessecting MFC)就值得你仔細閱讀。

對於VC2002--2008中的.net,單獨講授的似乎目前還沒有像《Windows程序設計》那樣經典的書出現,畢竟.net出現的時間也不長。但把.net MFC ATL等綜合在一起講的,倒還是有一些。
由H.M.Deitel,P.J.Deitel,J.P.Liperi和C.H.Yaeger共同編寫的《Visual C++.NET:How To Program 》(Visual C++.NET大學教程)品質算是上乘。還記得Deitel這對父子作者么,在chinapub上可以看到父子倆合著的教材有47套之多,而且個個暢銷,我覺得他們儼然就是美國的譚浩強,只是水平高出不少。
George Shepherd,David Kruglinski 的 《Visual C++ .NET技術內幕(第6版)》,就是上面那本書的.net升級。
IVOR HORTON的《VISUAL C++ 2005入門經典》也可一看。

BCB在版本6以前用的是著名的VCL庫,BCBX另起爐灶,用的是wxWidgets庫。由於對BC,作者自己涉獵不多,所以這兩套庫的教材,請大家自行查找。

就像C++和C的規範文件一樣,Windows編程中,也有一件類似萬寶全書的神物,那就是Microsoft自己推出的MSDN。
MSDN是Microsoft Software Developer Network的簡稱。這是微軟的針對開發者的開發計劃。你可以在http://msdn.microsoft.com看到有關軟體開發的資料。在VisualStudio中包括MSDN Library的光碟,其中包括VisualStudio的幫助文件和許多與開發相關的技術文獻。MSDN Library每個季度更新一次,可以向微軟訂閱更新光碟,不過價格不便宜。
MSDN就是微軟的技術大全,所有微軟的軟體系統的開發的已公開資料,都在上面。如果在那裡也無法找到答案,那你只能想辦法咨詢微軟的內部工程師求得隱藏秘籍。不要妄想能夠完全閱讀它,3G容量的文檔(大部分是文本,不是圖片和視頻),實在太過巨大了。