關(guān)于我們
書單推薦
新書推薦
|
C/C++實踐進(jìn)階之道:寫給程序員看的編程書
這是一本C/C 語言應(yīng)用能力進(jìn)階的圖書,總結(jié)了一個典型的學(xué)習(xí)者第101個小時開始的學(xué)習(xí)路線和心得,你值得擁有。本書內(nèi)容包括夯實C語言核心基礎(chǔ)、提升你的編程功力、積累專業(yè)程序員開發(fā)經(jīng)驗、理解C 精髓和以C 為母語五個部分,內(nèi)容豐富,集開發(fā)技巧、成長經(jīng)驗和學(xué)習(xí)資料于一體,具有很高的實用性和可讀性,對于初級程序員和學(xué)習(xí)編程語言的大學(xué)生大有裨益,可以幫助其掌握C/C 語言精髓,提高自己的程序設(shè)計水平。
珍貴心得與踩坑經(jīng)歷娓娓道來,助力讀者扎實進(jìn)階提升。源代碼、精彩開發(fā)視頻及電子教程組成資料包,傾囊奉送。
C/C 的數(shù)組是從0開始編號,我們也從第0章開始吧! 作為職業(yè)程序員,在生活和網(wǎng)絡(luò)中,學(xué)弟學(xué)妹們問得多的兩個問題是:收入如何?你是如何成為專業(yè)程序員的?對于第一個問題,我一般回答,收入還可以,關(guān)鍵是有時的成就感非常讓人滿足。而第二個問題還真不好回答。我只能說讀書的時候,就有點(diǎn)兒喜歡編程,就業(yè)的時候,發(fā)現(xiàn)程序員職位的薪水比較高,工作了幾年,就逐漸成了職業(yè)程序員了。要詳細(xì)地說,基本上需要一本書的內(nèi)容。這也是本書的緣起。 讀者:理工科大學(xué)生 有一個現(xiàn)象,在職業(yè)程序員中,大學(xué)是計算機(jī)專業(yè)的并不多。這說明,一方面,計算機(jī)應(yīng)用的迅猛發(fā)展,使得計算機(jī)應(yīng)用人才缺乏;另一方面,不少理工科專業(yè)和計算機(jī)專業(yè)天然接近,成為職業(yè)程序員也不是一件很難的事情。 事實上也是如此,大多數(shù)理工類專業(yè)開設(shè)了不少程序設(shè)計的相關(guān)課程,只需要有一定的興趣愛好,再加上一定的訓(xùn)練,可以比較輕松地成為專業(yè)程序員。因為計算機(jī)在各行各業(yè)的應(yīng)用,對于理工科專業(yè)的學(xué)生來說,編程能力也是一個非常重要的技能。 所以,本書將理工科大學(xué)在校生和剛剛進(jìn)入職場的新人,作為讀者對象,希望會對這些人有所幫助。 定位:你的第二本程序設(shè)計圖書 幾乎所有理工類大學(xué)都會開設(shè)程序設(shè)計語言課程。每年也會有數(shù)百萬人報名參加計算機(jī)等級的程序設(shè)計類考試。這是成功的第一步。但是,會基本語法,不一定會編寫程序,不一定能運(yùn)用到實際中去解決問題。 本書定位于理工科大學(xué)生的第二本程序設(shè)計圖書,在已有的程序設(shè)計語言的基礎(chǔ)上逐步提高,具備專業(yè)程序員的基礎(chǔ);ㄒ稽c(diǎn)時間閱讀本書,你就可以多擁有一項能力。從學(xué)生到職業(yè)程序員,在工作和生活等多方面都要有一定的轉(zhuǎn)型和適應(yīng)期。本書出版的重要目的是幫助讀者完成這個轉(zhuǎn)型,幫助讀者跨越幾個技術(shù)學(xué)習(xí)上的臺階。 熟練掌握C/C 的意義 掌握C/C 的好處如下: (1)C語言和C 基本上是使用量第一的開發(fā)語言,C/C 是現(xiàn)代程序設(shè)計之母,C#和Java等都是在C 的基礎(chǔ)上演化而來的,因此掌握了C/C ,對學(xué)習(xí)Java和C#會很有幫助。 (2)在C/C 的提高學(xué)習(xí)中,會涉及計算機(jī)的數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)等知識,會提高自己解決問題的綜合能力。程序設(shè)計的學(xué)習(xí)領(lǐng)域很多,范圍非常廣,新概念、新知識層出不窮。但只要你掌握的知識結(jié)構(gòu)合理,綜合能力高,學(xué)習(xí)這些新東西將非常容易。 (3)熟練掌握C/C ,是很多單位招聘的基本要求,大多數(shù)理工科專業(yè)的在校大學(xué)生已經(jīng)學(xué)習(xí)了C語言的基本語法,或者已經(jīng)有了一定的編程基礎(chǔ),只需要再花一定的時間鞏固掌握即可。 成為專業(yè)程序員的臺階 我們都知道,從學(xué)生到職場人士,有幾個臺階需要跨越;仡櫼幌乱粋C/C 程序員的成長過程: 第一個臺階,C語言入門。簡單來說就是能通過大學(xué)的C語言考試,或者通過計算機(jī)等級考試的二級C。 第二個臺階,熟悉庫函數(shù)。C語言的不少功能是通過庫來實現(xiàn)的,學(xué)習(xí)庫函數(shù)實際上是熟悉C語言的重要階段。 第三個臺階,能編寫比較大一點(diǎn)兒的程序。通過編寫千行內(nèi)的程序,可以積累函數(shù)劃分、調(diào)試經(jīng)驗,慢慢對C/C 語言會用得非常熟練。 第四個臺階,能自己編寫一些小的工具。這種訓(xùn)練能積累解決問題的方法。 第五個臺階,建立Project的概念,能把程序分解成幾個代碼文件。 第六個臺階,洞悉程序開發(fā)的真相。理解算法、數(shù)據(jù)結(jié)構(gòu)、解決問題的方法,領(lǐng)域類知識等,這些比語法更重要。 第七個臺階,掌握宏、指針、內(nèi)存管理、static和const等專業(yè)C/C 程序經(jīng)常需要的關(guān)鍵用法。 第八個臺階,掌握C 的精髓。C 雖然內(nèi)容豐富,Core和C語言也不大。這些內(nèi)容,也是程序設(shè)計語言的精髓。 在跨越了這八個臺階之后,只需要再經(jīng)歷一些項目開發(fā)的強(qiáng)化訓(xùn)練,即可成為一個合格的C/C 程序員。 掌握C/C 的學(xué)習(xí)地圖 結(jié)合十多年的C/C 學(xué)習(xí)和成長經(jīng)驗,結(jié)合當(dāng)前就業(yè)的需要,我們勾勒出一個在校大學(xué)生或職場新人的程序設(shè)計學(xué)習(xí)地圖。 如何學(xué)習(xí)才能快速掌握C/C 呢?程序員積累了豐富的經(jīng)驗并總結(jié)出了下面的學(xué)習(xí)經(jīng)驗。只要你跟隨學(xué)習(xí)方案,每周抽出3個獨(dú)立時間段進(jìn)行上機(jī)實踐,每次至少2個小時。一共大約需要240個小時的上機(jī)訓(xùn)練,即大約40周的自我訓(xùn)練。多2個學(xué)期,你就能獲得一個質(zhì)的飛躍。再輔以其他適當(dāng)?shù)挠?xùn)練,即可成為一名合格的程序員。 根據(jù)學(xué)習(xí)地圖和學(xué)習(xí)經(jīng)驗,我們設(shè)計了本書的內(nèi)容。全書共分為5篇,下面分別介紹這五篇的內(nèi)容安排。 第1篇 夯實C語言核心基礎(chǔ) 本書定位的是讀者的第二本程序設(shè)計類圖書。所以,讀者可能有以下三種情況: (1)已經(jīng)學(xué)習(xí)了一門《C程序設(shè)計》之類的課程。第1篇,可被視作為一個C程序設(shè)計的濃縮,幫助你回顧了解C語言核心的內(nèi)容。 (2)正在學(xué)習(xí)《C程序設(shè)計》的課程。第1篇可以作為教學(xué)輔導(dǎo)圖書,一邊學(xué)習(xí)教材,一邊閱讀本書,時刻提醒讀者注意入門之初別糾纏于語法細(xì)節(jié),起到幫助讀者糾正學(xué)習(xí)方向的作用。 (3)學(xué)習(xí)了一門程序設(shè)計語言,是VB之類的非C程序設(shè)計語言。第1篇可以作為快速學(xué)習(xí)C語言的教材。當(dāng)然,這些內(nèi)容還遠(yuǎn)遠(yuǎn)不夠,我們在網(wǎng)上提供了一個免費(fèi)的C語言學(xué)習(xí)教材。 總的來說,第1篇主要是配合讀者正在學(xué)習(xí)的C語言教材,幫助讀者掌握C語言核心的語法。同時,幫助讀者建立重要的程序設(shè)計概念。 第2篇 提升你的編程功力 按照學(xué)習(xí)地圖,提供全書重要的學(xué)習(xí)概念和學(xué)習(xí)內(nèi)容。 首先安排庫函數(shù)的學(xué)習(xí),通過學(xué)習(xí)庫函數(shù)的應(yīng)用,一方面熟悉語法,另一方面,建立起接口的觀念,進(jìn)一步通過自己編寫個別庫函數(shù)的訓(xùn)練,可以較快的提升編程能力。 其次是逐步編寫大軟件的項目和辦法。教會讀者如何編寫自己的小工具軟件,讓讀者在趣味中學(xué)習(xí)。 后是讓讀者自己掌握軟件運(yùn)行時的數(shù)據(jù)結(jié)構(gòu)、硬盤上的文件數(shù)據(jù)和用戶看到的界面之間的奧秘。 當(dāng)讀者明白了這些奧秘后,就會知道自己需要掌握的知識、算法和數(shù)據(jù)結(jié)構(gòu),解決問題的方法。接下來,本書通過其他章節(jié),將讀者引入這些領(lǐng)域中,讓讀者得到初步的修煉。 可以說,這部分內(nèi)容是本書的及格線。即使讀者沒有掌握本書的其他內(nèi)容,只要能理解這部分內(nèi)容,對讀者提升對計算機(jī)的認(rèn)識將會有非常大的幫助。 有了上面的基礎(chǔ),可以進(jìn)入熟練掌握一些關(guān)鍵語法的階段,這就是static、const、指針、內(nèi)存管理等。我們對這些內(nèi)容會進(jìn)行比較詳細(xì)的講解。要知道,這些內(nèi)容一般都是存在于多本圖書之中,而這些內(nèi)容,又是C/C 程序員必須掌握的語法內(nèi)容,面試常考,偏偏理解起來又有一些難度。所以,編寫時將其放在了熟悉語法,編寫了幾個小工具之后,作為提高訓(xùn)練之用。 第3篇 積累專業(yè)程序員的開發(fā)經(jīng)驗 掌握了C/C 之后,也許會成為一個嵌入式開發(fā)程序員。畢竟,在信息時代,這樣的工作崗位會越來越多。 為此,我們也花了一定的篇幅來介紹在跨越第一到第七個臺階之后的程序員。掌握哪些知識,可以成為一個合格的嵌入式程序員。要知道,嵌入式開發(fā)專業(yè)方面的人才需求極大,數(shù)學(xué)、物理、機(jī)電、儀器、計算機(jī)、電子等相關(guān)專業(yè)的學(xué)生,成為這個行業(yè)的主要人才來源,這就相當(dāng)于給這部分同學(xué),提供了一個就業(yè)出口。 第4篇 C 和類面向?qū)ο蟮氖澜缬^ C 領(lǐng)域有很多經(jīng)典名著,但這些圖書都有一個統(tǒng)一的缺點(diǎn):太厚。給初學(xué)者以恐懼感,不太容易看得完。 C 確實博大精深,編程模式多,涉及面廣。比如,引入類和對象的概念之后,和前面的知識一交叉,可以有類和指針交叉:對象的指針,對象的內(nèi)存分配等;類和數(shù)組交叉:對象數(shù)組;類和函數(shù)的交叉:方法和函數(shù)的區(qū)別,對象作為函數(shù)的參數(shù)等。引入任何一個新的概念,會引發(fā)連鎖反應(yīng)。更何況C 引入的內(nèi)容越來越多。因此很少有人敢稱他掌握了C 的全貌。 在實踐中,我們會發(fā)現(xiàn),經(jīng)常用到的只是類、封裝、繼承、虛函數(shù)和多態(tài)等幾個有限的C 精華,這基本上是所有面向?qū)ο箝_發(fā)語言的小核心子集。 接下來,我們以抽絲剝繭的方式,把這些C Core內(nèi)容抽取出來,重點(diǎn)講解,作為讀者學(xué)習(xí)其他C 程序設(shè)計教材的補(bǔ)充。 本篇內(nèi)容和C 教材結(jié)合起來學(xué)習(xí)是比較好的選擇。一個全面,一個重點(diǎn);一個重在語法細(xì)節(jié)的闡述,一個重在關(guān)鍵要點(diǎn)的把握;一個重在從語言學(xué)習(xí)的角度編寫,一個從實踐需要角度側(cè)面敘述。一厚一薄,互相配合,學(xué)習(xí)起來更容易。 第5篇 以C 為母語 并不是每一個讀者,將來都會成為一個C/C 程序員。 大多數(shù)現(xiàn)代的程序設(shè)計語言都和C 有一定的親緣關(guān)系,Delphi,Java,C#這些先后出現(xiàn)的面向?qū)ο蟮拈_發(fā)語言,在C 的基礎(chǔ)上,都有一些自己的獨(dú)有的特點(diǎn)。對學(xué)習(xí)者來說,在C/C 上的學(xué)習(xí)投資,完全可以用到這些語言的學(xué)習(xí)上。你的C 功力越深厚,學(xué)習(xí)這些新的開發(fā)語言的時間就越短。 本篇簡單講述如何在已經(jīng)掌握的知識基礎(chǔ)上,快速學(xué)習(xí)這些帶有面向?qū)ο箝_發(fā)特性的程序設(shè)計語言。強(qiáng)化每個現(xiàn)代人都必須掌握的學(xué)習(xí)能力。 后續(xù)學(xué)習(xí)與提高 有了前面的學(xué)習(xí)基礎(chǔ),還有兩個學(xué)習(xí)與提高方向,一個是走Java或者C#的通用程序員之路,另外一個是成為一名嵌入式程序開發(fā)人員。當(dāng)然,建議你繼續(xù)閱讀更多的C/C 著作,不斷提升自己的內(nèi)功,這對讀者學(xué)習(xí)任何新的工具或者開發(fā)語言,都將會帶來很大的幫助。 對于通用程序員之路,一般有三種選擇,一個是以Visual C 作為主要的開發(fā)工具,這在開發(fā)Windows相關(guān)系統(tǒng)類應(yīng)用中比較多見,有了前面的基礎(chǔ),需要適當(dāng)?shù)腣isual C 項目開發(fā)訓(xùn)練。推薦訓(xùn)練之前學(xué)習(xí)《深入淺出MFC》這本書。其次,是走Java或者C#的開發(fā)之路,這方面的好書很多,有了本書的基礎(chǔ),讀者可以先選擇一本語法類,快速強(qiáng)化訓(xùn)練掌握語法,然后根據(jù)自己的情況選擇合適的圖書項目和技巧開發(fā)類圖書。 對于嵌入式程序員就業(yè)分支,在學(xué)習(xí)本書的基礎(chǔ)上,可以再開發(fā)一個實踐項目,封閉開發(fā)1~2個月。每天至少4小時,總共需要至少100個小時。經(jīng)過一個比較大的項目的操作過程,應(yīng)該即可成為一個合格的嵌入式開發(fā)程序員了。 輔助學(xué)習(xí)材料 在圖書封底左上方的二維碼下載包中,我們精心放置了以下資料: 《C語言百問百例》和《C 語言百問百例》兩套電子書。 包含14講視頻的C語言高級教程。 包含19講視頻的嵌入式LINUX培訓(xùn)計劃教程。 本書源代碼。 局限性和副作用 雖然竭力回憶我們成長之初的一些代碼編寫經(jīng)驗,但非常遺憾,現(xiàn)在只記得剛開始的時候,編寫一個程序,會有滿屏的錯誤需要糾正。至于如何度過這一階段,在這一階段積累了哪些經(jīng)驗,現(xiàn)在幾乎都不記得了。也就是說,早期時候的代碼調(diào)試經(jīng)驗,本書基本不具備,因為現(xiàn)在編寫代碼一般都是一次性通過,很少有語法問題,有問題也是隱藏得比較深的運(yùn)行漏洞。另外,每個人的學(xué)習(xí)過程差異也很大。我們的作者中,有的英語很好,一看錯誤提示,很輕松就能解決問題。有的則靠詞典,一個一個地解決,C語言編寫了一學(xué)期,英語水平卻提高了不少,這是一種積極的副作用。 其次,每一個專業(yè)的程序員,到一定的時候,都只專注于自己的問題領(lǐng)域。雖然我們也邀請了高校教師、其他領(lǐng)域程序員參與到本書的創(chuàng)作中來,但C/C 應(yīng)用面極廣,難免有些見解有所偏頗,盡信書則不如無書,當(dāng)你通過本書完成階段性過渡后,需要放下本書,尋找新的幫助。 還有一種C 程序設(shè)計學(xué)習(xí)觀點(diǎn),在面向?qū)ο髸r代,應(yīng)該先建立面向?qū)ο蟮拈_發(fā)思想,直接學(xué)習(xí)C 。假如工作需要進(jìn)入嵌入式開發(fā)領(lǐng)域,再學(xué)習(xí)C語言。這種先建立面向?qū)ο,然后學(xué)習(xí)面向過程的思路,我們有一定程度的認(rèn)同。一方面,我們都是先學(xué)習(xí)了C語言,然后再學(xué)習(xí)C ,這方面經(jīng)驗比較豐富。另一方面,我們調(diào)研發(fā)現(xiàn),絕大多數(shù)高校,依然是保持先學(xué)習(xí)面向過程的C語言,然后學(xué)習(xí)面向?qū)ο箝_發(fā)語言的教學(xué)過程,所以,本書按照大多數(shù)讀者的學(xué)習(xí)模式設(shè)計。如果您恰好是先學(xué)習(xí)的C ,我們建議您先從本書第4篇開始學(xué)起。 另外,本書的大多數(shù)作者沒有在大學(xué)課堂教學(xué)的經(jīng)驗,有些講解方法,可能沒有考慮到讀者當(dāng)前的客觀情況,如果你學(xué)習(xí)本書時有一些困惑,還請讀者和我們聯(lián)系。 多人智慧勝一人 對于C/C 的學(xué)習(xí),除圖書之外,我們認(rèn)為,不斷的上機(jī)實踐是尤為重要的。沒有笨學(xué)生,只有懶學(xué)生。長期的堅持是非常重要的,這就看個人的毅力了。 一個比較好的建議是:如果你是在校的學(xué)生,建議你同時再找一個同學(xué),和你一起學(xué)習(xí)C語言。根據(jù)經(jīng)驗,如果有兩三個同樣愛好的同學(xué)一起學(xué)習(xí)?梢曰ハ喔偁帯⒒ハ啻龠M(jìn)。而且,有了問題大家互相交流,學(xué)起來特別快。 當(dāng)然,更主要的是靠自己,只是有些時候,旁觀者清,同學(xué)可能可以輕松地發(fā)現(xiàn)代碼中的問題所在,而我們卻要調(diào)試半天。 如果沒有同學(xué)或?qū)W長一起學(xué)習(xí),在網(wǎng)上找一兩個牛人請教也特別重要。為了促進(jìn)本書讀者的學(xué)習(xí),我們特地在網(wǎng)上提供了一個讀者之間交流的QQ群:16900070。同時,在QQ群的共享文件中也提供一些免費(fèi)的學(xué)習(xí)材料,作為本書的補(bǔ)充。歡迎讀者在學(xué)習(xí)過程中下載使用。 不積跬步,難行千里 在十多年的程序設(shè)計學(xué)習(xí)與實踐過程中,有一個同學(xué)的經(jīng)歷讓我特別感慨: 大學(xué)時候有個同學(xué),愛好編程。大四做畢業(yè)設(shè)計的時候,發(fā)現(xiàn)他水平比我們高一截。因為很多大程序編譯和調(diào)試的經(jīng)驗,你不去干,是明顯不會知道的。 有問題我一般都去問他,和他探討,當(dāng)然,水平太低的問題他也不感興趣。 有一次我無聊說到這個開發(fā)提升過程,夸獎了他一下。他說,哪里,我只是把你們打游戲的時間,用來寫代碼了。 你想想啊,其實我平均一周去三次機(jī)房。一學(xué)期只有20周比較有空,兩年也就80周,240次上機(jī)。再說,我家條件也不好,也不能保證我有更多的上機(jī)費(fèi)用。 兩年前我發(fā)現(xiàn)學(xué)校機(jī)房的開放策略后,開始我只能去上機(jī)練習(xí)一下DOS命令,還有就是C語言書上的小案例。后來想開發(fā)一個壓縮小工具,不斷折磨自己,想代碼,練習(xí),上機(jī)去測試,查資料,代碼越寫越長,水平才慢慢提高的。 你以為我天生就明白exe文件的原理啊,我也是看了多少書,做了很多次試驗才明白的。 之所以感慨,因為他的水平提高經(jīng)歷沒有什么特別的,就是堅持每周上機(jī)3次罷了。但萬事貴在堅持,開始可能只能編寫一些小程序,只能驗證一下語法,但量變會產(chǎn)生質(zhì)變,當(dāng)你逐漸能快速地寫出數(shù)千行代碼的一個小項目,開發(fā)一個小工具。你就已經(jīng)具備了專業(yè)程序員的潛質(zhì),你可以很輕松成為一個專業(yè)程序員了。 而這些不過是要求你按照一定的學(xué)習(xí)路線,一步一個臺階,堅持就是勝利。大多數(shù)時候,完美的學(xué)習(xí)計劃和一時的熱情,敵不過長期的堅持。 好了,現(xiàn)在方法有了,工具有了,學(xué)習(xí)材料有了。我們開始逐步來完成學(xué)習(xí)目標(biāo)吧! 祝你成功!
陳黎娟:610103197504161642目前就職于美國勝利通訊北京分公司,職位為Senior Firmware Engineer(高級固件工程師)。先后在SunPlus,SST等公司擔(dān)任工程師和高級架構(gòu)工程師。在嵌入式系統(tǒng)、嵌入式接口和底層固件開發(fā)方面積累了豐富的經(jīng)驗。
第1篇 夯實C語言核心基礎(chǔ) 第1章 Hello,C語言 1-1 閉上眼睛細(xì)數(shù)C語言的特點(diǎn) 2 C語言精巧 2 支持結(jié)構(gòu)化程序編寫模型 2 變量和語句是C語言的細(xì)胞 3 數(shù)學(xué)運(yùn)算和邏輯表達(dá)式是C語言的第一個難點(diǎn) 3 函數(shù)是C語言賜給我們最有力的武器 3 數(shù)組是我們第一次學(xué)習(xí)組織數(shù)據(jù) 4 指針是C語言的精華,但它是魔鬼發(fā)明的 4 struct是我們臨摹世界的畫板 4 掌握基本概念的組合才是成為C語言高手的必經(jīng)之路 4 字符串是指針確認(rèn)的 5 位運(yùn)算是C語言底層開發(fā)的特色 5 預(yù)處理命令是程序開發(fā)的腳手架 5 文件是一個序列 5 1-2 從基本概念開始 6 1-3 掌握C語言核心,逐步擴(kuò)張 8 1-4 C 時代的C語言學(xué)習(xí) 11 1-5 C :更好的C 12 新的注釋模式 13 新的輸入/輸出方法 13 const的新功能 13 變量的定義更加靈活 13 函數(shù)的重載 13 帶默認(rèn)參數(shù)的函數(shù) 13 變量的引用類型 13 新的內(nèi)存分配函數(shù)new和delete 14 內(nèi)嵌(inline)函數(shù) 14 作用域運(yùn)算符 14 第2章 建立起程序設(shè)計基本概念 2-1 軟件與程序 15 2-2 程序與可執(zhí)行文件 16 2-3 程序與源程序 17 2-4 源程序與程序設(shè)計語言 18 2-5 程序設(shè)計的基本過程 19 2-6 文件和目錄 19 2-7 理解編碼上機(jī)調(diào)試和步驟 22 2-8 C/C 程序員成長經(jīng)驗 23 第一階段:C語言的學(xué)習(xí) 23 第二階段:課程設(shè)計和畢業(yè)設(shè)計 24 第三階段:硬件開發(fā)和學(xué)習(xí)C 25 第四階段:中型項目開發(fā)經(jīng)驗 25 第五階段:大型項目開發(fā)經(jīng)驗 25 總結(jié)個人學(xué)習(xí)成長的道路 25 因材施教:使用兩套教材 26 第3章 在Visual C 中驗證C程序 3-1 選擇Visual C 的三個理由 27 3-2 調(diào)試程序的五個步驟 28 3-3 編寫Console應(yīng)用 32 3-4 跨過調(diào)試程序的最初障礙 35 語法錯誤(Syntax Error) 38 語義錯誤(Semantic Error) 38 運(yùn)行錯誤(BUG) 39 3-5 Visual C 簡易使用參考 40 新建文檔 40 打開文檔 41 查看文檔 42 保存文檔 44 在打開的文檔中搜索文本 45 在已打開的文檔中替換文本 45 在磁盤文件中搜索文本 46 常規(guī)表達(dá)式搜索 46 3-6 從Turbo C到Borland C 47 3-7 理解函數(shù)庫和頭文件 48 第4章 代碼基本邏輯:順序、選擇和循環(huán) 4-1 流程圖 51 4-2 順序結(jié)構(gòu) 52 【示例4-1】輸入三角形的三邊長,求三角形面積 52 4-3 選擇結(jié)構(gòu) 52 4-3-1 if語句 52 【示例4-2】if語句的基本用法(輸入數(shù)值,如果大于0,輸出正數(shù)) 53 【示例4-3】利用if-else語句對數(shù)值進(jìn)行正負(fù)的判斷 54 4-3-2 switch語句 54 【示例4-4】利用switch判斷用戶輸入的日期是星期幾 55 【示例4-5】判斷輸入的日期是星期幾(使用break語句) 56 【示例4-6】利用if語句根據(jù)成績范圍給出等級 56 4-4 循環(huán)結(jié)構(gòu) 57 4-4-1 利用goto語句和if語句構(gòu)成循環(huán) 57 【示例4-7】計算1 2 3 … 100的值 57 4-4-2 while語句 58 【示例4-8】利用while循環(huán)語句計算1 2 3 … 100的值 58 4-4-3 do-while語句 58 【示例4-9】利用do-while循環(huán)語句來計算1 2 3 … 100的值 59 4-4-4 for語句 59 【示例4-10】小高斯的for循環(huán)語句實現(xiàn)方法。 60 【示例4-11】小高斯的for循環(huán)語句實現(xiàn)方法之二(省略表達(dá)式2的應(yīng)用舉例) 60 【示例4-12】小高斯的for循環(huán)語句實現(xiàn)方法之三(省略表達(dá)式3的應(yīng)用舉例) 60 【示例4-13】小高斯的for循環(huán)語句實現(xiàn)方法之四(省略表達(dá)式1和表達(dá)式3的 應(yīng)用舉例) 61 【示例4-14】當(dāng)需要無限循環(huán)時,for循環(huán)語句表達(dá)式全部被省略的應(yīng)用舉例 61 【示例4-15】小高斯的for循環(huán)實現(xiàn)方法之五(for語句中的逗號表達(dá)式) 61 【示例4-16】讀懂奇怪的for循環(huán)(for循環(huán)語句中的表達(dá)式2為特殊表達(dá)式時) 61 【示例4-17】利用while循環(huán)求滿足n2-15n-36>0的最小整數(shù) 62 4-4-5 break語句 63 【示例4-18】演示break語句的應(yīng)用:計算1 2 3 … 100的值 63 4-4-6 continue語句 63 【示例4-19】演示continue語句的應(yīng)用:計算1到100的偶數(shù)之和 63 4-5 本章綜合實例 64 4-5-1 綜合實例1:求某整數(shù)段區(qū)間中的素數(shù),并輸出 64 4-5-2 綜合實例2:根據(jù)用戶輸入的年份判斷年份是否為閏年 66 第5章 加強(qiáng)對函數(shù)的理解 5-1 函數(shù)的引入 67 【示例5-1】求從1加到100的值 67 【示例5-2】求從1加到n的值 68 【示例5-3】求從1加到n的值(高斯算法) 69 5-2 函數(shù)的基本概念 69 5-3 庫函數(shù) 70 5-4 函數(shù)的嵌套調(diào)用 71 【示例5-4】在max3函數(shù)中實現(xiàn)嵌套調(diào)用 71 5-5 代碼封裝:模塊化程序設(shè)計的起步 71 5-6 接口/實現(xiàn)思想的第一次體現(xiàn) 72 5-7 總結(jié)一下:函數(shù)幫你編寫更好的代碼 72 5-8 對比Pascal語言和C語言中函數(shù)使用的差異 74 第6章 總結(jié):快速掌握C語言基礎(chǔ)知識 6-1 再次Understand C 76 6-2 把基礎(chǔ)知識串起來 77 6-3 綜合實例1:打印Fibonacci數(shù)列 78 6-4 綜合實例2:把Fibonacci數(shù)列中的素數(shù)找出來 79 6-5 綜合案例3:在Fibonacci數(shù)列中加入數(shù)組的應(yīng)用 80 6-6 最后的綜合性代碼 81 6-7 成為C程序員你還需要知道的事情 82 6-8 三小時你可以學(xué)會FORTRAN 85 第2篇 提升你的編程功力 第7章 逐步寫出大程序 7-1 準(zhǔn)備案例1:閏年的判斷 88 7-2 準(zhǔn)備案例2:這一天是星期幾 89 7-3 更高要求:萬年歷的編寫 91 7-4 再完善一下:打印某年日歷 94 7-5 總結(jié)與思考:程序成長與模塊化 96 第8章 自己動手編寫小工具 8-1 DIR命令今猶在 97 8-2 DOS版DIR命令 98 8-3 Windows版本的DIR 100 8-4 工具編寫總結(jié)和練習(xí) 103 8-5 繼續(xù)學(xué)習(xí)和提高 104 第9章 學(xué)會組織自己的代碼 9-1 解決問題的基本方法和C程序的基本結(jié)構(gòu) 105 9-2 用Project管理自己的代碼 108 9-3 為自己的代碼擴(kuò)充功能 110 9-4 養(yǎng)成一些編碼的好習(xí)慣 111 第10章 讀源代碼,逐步體會算法的力量 10-1 讀函數(shù)源代碼,學(xué)技巧 116 10-2 體會算法的力量 118 【示例10-1】判斷一個自然數(shù)n是否是素數(shù) 119 10-3 算法的三重境界 121 【示例10-2】寫一個函數(shù)計算當(dāng)參數(shù)為n(n很大)時的值1-2 3-4 5-6 7-… n 121 【示例10-3】在一個很小的內(nèi)存空間中,將北京某電話局的8位電話號碼排序。號碼在 10000個以內(nèi) 122 10-4 那些C語言必須調(diào)試的陷阱 123 第3篇 積累專業(yè)程序員的開發(fā)經(jīng)驗 第11章 煩瑣但很重要的變量和類型 11-1 計算機(jī)是如何存儲變量的 126 11-2 確保每個對象在使用前已被初始化 131 11-3 局部變量和全局變量的差別 133 11-3-1 首先理解函數(shù)中的局部變量 134 11-3-2 其次理解函數(shù)外的全局變量 135 11-3-3 掌握變量在內(nèi)存中的存儲方式 136 11-4 掌握變量定義的位置與時機(jī) 138 11-5 引用難道只是別人的替身 140 第12章 理解數(shù)組和指針 12-1 理解指針的本質(zhì) 143 12-1-1 指針變量和變量的指針 143 12-1-2 空指針和void指針 145 12-1-3 const修飾指針 146 12-2 論數(shù)組和指針的等價性 147 12-3 再論數(shù)組和指針的差異性 149 12-3-1 字符串?dāng)?shù)組與字符指針的區(qū)別 149 12-3-2 當(dāng)編譯器強(qiáng)行把指針和數(shù)組混合 151 12-4 充滿疑惑的數(shù)組指針和指針數(shù)組 152 第13章 常見更要謹(jǐn)慎的字符和字符串 13-1 關(guān)于字符編碼的討論 155 13-2 請牢記字符串結(jié)束標(biāo)志為\0 157 13-3 請務(wù)必小心使用memcpy()系列函數(shù) 159 【示例13-1】POD對象的復(fù)制 160 13-4 正確使用字符串處理函數(shù) 161 第14章 表達(dá)式和語句中的陷阱 14-1 運(yùn)算符引發(fā)的混亂 164 14-2 表達(dá)式求值順序不要想當(dāng)然 167 14-3 switch-case語句的陷阱 170 14-3-1 正確使用break語句 171 14-3-2 case標(biāo)號和default標(biāo)號的正確使用 173 14-4 a || b和a&&b的陷阱 174 14-4-1 陷阱一:短路求值 175 【示例14-1】沒想清邏輯,代碼死循環(huán) 175 14-4-2 陷阱二:邏輯運(yùn)算混淆使用 176 14-5 懸掛else引起的問題 177 第15章 函數(shù)的秘密 15-1 禁止函數(shù)返回局部變量的引用 180 15-2 函數(shù)傳值、傳指針及傳引用的效率分析 183 15-3 內(nèi)聯(lián)函數(shù)會像宏一樣替換嗎 188 15-4 函數(shù)重載需考慮什么 191 15-4-1 準(zhǔn)確理解函數(shù)重載 191 【示例15-1】實現(xiàn)一個打印函數(shù),既可打印int類型,也可打印string類型 191 15-4-2 為什么引入函數(shù)重載 192 15-4-3 如何處理函數(shù)重載 192 15-5 不要讓main返回void 195 15-5-1 理解main函數(shù)的定義形式 195 15-5-2 main函數(shù)的返回值作用 196 15-5-3 void main()形式函數(shù)的風(fēng)險隱患 197 15-5-4 好壞難定的準(zhǔn)則 197 15-6 盡量拒絕使用變參函數(shù) 198 【示例15-2】實現(xiàn)一個支持std::string的printf 199 15-7 為何降低函數(shù)的圈復(fù)雜度 202 15-7-1 提煉函數(shù)的方法 203 15-7-2 以明確函數(shù)取代參數(shù) 204 第16章 正確使用預(yù)處理 16-1 使用#define定義字面值和偽函數(shù) 206 16-1-1 簡單宏定義(字面值) 206 16-1-2 #define和const定義的恒值常量對比 207 16-1-3 帶參數(shù)的宏定義(偽函數(shù)) 208 16-1-4 帶參數(shù)的宏和函數(shù)的區(qū)別 208 16-1-5 引入宏的優(yōu)點(diǎn) 209 16-1-6 宏定義和命名空間的關(guān)系 209 16-2 #define的使用陷阱 210 16-2-1 由操作符優(yōu)先級引起的問題 210 16-2-2 使用宏定義,不允許參數(shù)發(fā)生變化 211 16-2-3 使用do{}while(false)將宏定義包含的多條表達(dá)式放到大括號中 211 16-2-4 關(guān)于...的使用 212 16-2-5 消除多余的分號 213 16-3 防止重復(fù)包含頭文件 214 【示例16-1】頭文件重復(fù)包含bug 214 16-3-1 解決方案之一:#ifndef方式 215 16-3-2 解決方案之二:#pragma once 215 16-3-3 #pragma once與 #ifndef的區(qū)別 216 16-4 assert的副作用 216 【示例16-2】斷言出現(xiàn)bug 217 16-5 多學(xué)一點(diǎn),關(guān)于#和##的討論 219 16-5-1 #讓字符串巧妙用在宏定義中 219 16-5-2 ##讓宏定義像函數(shù)一樣輸入?yún)?shù) 220 16-5-3 #與##使用的陷阱 221 第17章 非絕對禁止者,皆可使用 17-1 表示語句結(jié)束的分號的思考 222 17-2 goto語句真的一無是處嗎 224 17-2-1 觀點(diǎn)一:goto語句是有害的 225 【示例17-1】使用goto語句執(zhí)行數(shù)組元素的交換順序 225 17-2-2 觀點(diǎn)二:某些情況下支持使用goto語句 226 17-3 條件操作符和逗號操作符 229 17-3-1 理解條件操作符并用好它 229 17-3-2 讓逗號操作符派上用場 230 17-4 和魔鬼數(shù)字說再見 230 17-4-1 魔鬼數(shù)字帶來的麻煩 230 17-4-2 給魔鬼數(shù)字起一個名字 231 17-5 關(guān)于循環(huán)語句的變化 232 17-5-1 新舊標(biāo)準(zhǔn)中for語句的變化 232 17-5-2 巧用do循環(huán)宏定義 233 17-5-3 循環(huán)語句的效率 234 第18章 程序員應(yīng)該知道的指針技術(shù) 18-1 深刻理解void和void* 236 18-2 防微杜漸,拒絕野指針 239 18-2-1 野指針產(chǎn)生的原因 240 18-2-2 預(yù)防野指針的策略 241 18-3 臭名昭著的空指針到底是什么 242 18-3-1 怎樣在程序中獲得一個空指針 243 18-3-2 使用if(p)
你還可能感興趣
我要評論
|