c語言的奧秘
『壹』 想深入的學習c語言(不是c++),不知道有什麼好的書籍可以使自己能把c語言學精通。請高手指教
作為一個經典書籍收藏閱讀者,在此,我再次推薦我的書列~~
大學期間我也走了很多彎路,學習c一直不得章法~~這些書籍還是工作了才了解到,慚愧
樓上也提到了很多,但是沒有給出合理的順序,我按照自身的曲折路線給你推薦下吧~~希望對你有所啟發。
0. 一點編程基礎都沒有,看下《編碼的奧秘》和《c語言大學教程》或者樓上說的《the c programming language》(此書有c++版本的,把c換成c++作為書名的,兩者都是經典!)也適合作以後的工具書,ps:編碼的奧秘出新版了,即使有編程基礎,看了此書有百利無一弊,了解計算機系統的發展史,同時對整個計算機體系的整體上的把握會有助於你學習程序員的英語 --- c語言,因為c比較接近機器的思維!
1. 如果之前學習過c語言,學的不扎實,想徹底學的扎實,如果看過國內的c語言的教程,那麼你應該買一本《c和指針》,絕對沒有爭議!
2. 如果c和指針,認真讀完了,並且把習題也做了,例子也照著編寫了,思考了,學的還可以了,仍想進一步提高,再看一下《c專家編程》,《c缺陷與陷阱》(這個我沒看過,但是別人推薦過,也不厚)
3. 《windows程序設計》是一本經典的書籍,和《編碼的奧秘》是同一個作者,如其名,此書涉及到windows編程的各個方面,不算是c語言的入門書籍,屬於針對某個操作系統平台的應用開發書籍。
4. 《windows核心編程》一書也是經典,也是屬於拔高性質的書籍,此書側重於講解和使用windows的API進行操作系統相關的各種編程。
目前我也就看了這么多編程以及和你題目相關的書籍,如果你很勤奮,不會太久,上述書籍我是畢業這兩年期間看完的,不過時常重新翻看,好書本就不是一蹴而就,讀完束之高閣的~~
工作的時候買本國人的《系統程序員成長計劃》(c語言的)看看,難得的國產好書~~實踐出的真知~
最後與你分享下我的感受,編程習慣和思想比語言本身更重要!學習語言不能孤立地去單獨學習一門語言,要從一開始養成良好的編程習慣,使用數據結構和庫,同時順帶了解系統API,循序漸進~~
優秀的程序員應該對自己編寫的每個位元組都了如指掌,與君共勉!
不是不推薦國產的書籍,確實和國外差距很大,我當初對c語言的興趣完全被譚浩強的那本概念書籍整沒了~~好書很多,但是針對自己的情況制定學習路線才是明智的,否則會打消積極性,適得其反。
以上都是我的個人經驗,走了很多彎路,終於入門了,提升了~~也希望我的回答能夠拋磚引玉~~
『貳』 C語言代碼是什麼,如何執行代碼
c語言代碼就是按c語言的語法寫出的程序代碼啊!
把代碼放在開發環境中(如TURBOR),然後編譯!源碼就是代碼了!是一個程序運行的奧秘所在!如果沒學過c語言。不是很容易哦
『叄』 初學c語言就遇到困難,演算法問題,麻煩各位大蝦指點下…
你現在才剛開始學c語言,演算法可以先跳過 不去看,從第三章開始看,等你c語言很熟了,再回過頭來看演算法,這樣比較合適,你現在還不會走就想跑,會跌跟頭的。
我個人認為 譚浩強的c語言教材,不太適合初學者學,因為書里例子太少,理論太多。
如果你想自學C語言,最好的辦法是 找一本 有很多完整例子的 c語言教材,然後把例子在電腦上面運行一遍,雖然是依樣畫葫蘆,但你動手編過程序後慢慢會有感覺的,然後在把理論部分也補上去。
如果你一直看書,看理論,學起來會很慢,很痛苦。
所以 你換本例子多點的教材,然後看完一節內容,就把書上的例子運行一遍,一遍不夠就兩遍,俗話說 孰能生巧。譚浩強的書名聲雖大,但不是每個人都適合的看。
以上內容只是本人的個人意見 僅供參考
『肆』 如何才能深一層的學習C語言萬分感謝~~朋友~~~
同志,我和你有同感,在也提過這樣的問題,有一個人給我這樣一篇文章,你可以看一下
最近 CompBook 版的一個題目:「初學者要如何學習 C++」,又引發一長串討論。每天我啜著咖啡,看著一篇篇的長短文,在精譬與幼稚、深遠與淺薄、罵聲與辯白之間,固然得稍遣一日下來的疲憊身心,聊以為茶餘飯後之資。但是看著日漸眾多的貼信,想到某些問題,心情也不很輕松得起來。
我有一些感觸。
●不要罵人
學問高、技術好,固然可以說話比較宏聲,比較強勢,比較得到大家的尊敬與體諒,別人也比較不敢招惹,但不表示可以出口罵人。「廢物、白痴、人渣、丑角」,這些罵人的話實在不宜。
不可以罵人,是網路的基本禮儀。「不可以」可以從兩個層面來說。法律上來講,網路上之不可以罵人也許是個灰色地帶,被罵者多半也不會訴諸大動作。所以除非是名人被罵,或名人罵人,而且咽不下一口氣,多半隻是清風徐來,水波不興。
我要談的是修養層面上的「不可以罵人」。我要談的是上網基本守則,就像談做人的基本道理一樣。
有些人的行事采「直率」原則,必要赤裸裸地表現自己的情緒而後快,至於禮儀諸等,則或斥之「偽善」。網路是個不露臉的世界,也大量容忍了這等「直率」。但是如我常說的『文如其人』,文字表現了作者的為人處世、心境修養、學問技術。為文能不慎乎?
古雲「君子不欺暗室」,意思是雖處於無人得見之暗室,亦不做欺心敗德之事(唐駱賓王.螢火賦:類君子之有道,入暗室而不欺)。網路這個虛擬世界,就像一個大暗室,雖然別人不得見你的真面目,你在暗室中的一切行為,仍忠實映照你自己。
昨天,我順道載來元智旁聽課程的交大學生回竹。途中剛好他提起 CompBook 版的這陣熱鬧。我淡然地說:不該罵人。學生說:可是有人本來就該被罵。
哦,是嗎?
如果說這個世界是「觀念可能有點偏差、技術可能有點不足、態度又沒讓你順眼的人,便該罵」,那麽我說,罵人有罵人的技巧與藝術,你罵人的表現這麽粗糙這麽差勁,「觀念可能有點偏差、技術可能有點不足、態度又沒讓我順眼」,也該罵羅?
不,你不該被罵。所以他也不該被罵。
要表現尖銳與犀利,另有辦法;請不要用罵,尤其是像「廢物、白痴、人渣、丑角」這種話。
或有人說,我的個性就是這樣,直率是我的座右銘。那也依得。我剛才說了,網路是個不露臉的世界,大量容忍了這等「直率」。我寫這篇文章,原也意不在影響罵人文章的作者(我想我沒有這樣的能力), 我想影響的是罵人文章的讀者 — 你。
指責別人是多麽地容易,檢討自己是多麽地不容易。我回想自己的文章,也出現過情緒性字眼。雖是一個比擬,非特定指哪個人,還是覺得有點慚愧。
●文如其人
衍生而來的,我還想說的是,競速的時代,以及台灣教育的偏頗,造成了網路上的文字錯別字連連、邏輯不通、語意不暢┅。大家都急就章地,有什麽想法就脫口而出,線上回覆;不但不檢閱,甚至不重讀第二遍就按鍵送出。
文如其人。如果你連自己出手的文字 — 代表自己思想的東西,都這麽不在乎不謹慎,你會對什麽在乎?你在乎的大概只剩功利銅臭之阿睹物。如果現實生活中你是謹言慎行的,到了暗室卻如脫疆野馬,這讓我想起現實社會中許多彬彬有禮之士,上了自家車駕駛座,便換了張頭臉,罵聲連連,閃超擠推,下得車來又彬彬有禮。
可是你,就是你,只有一個你。哪個是真實的你呢?半夜問問自己。
●初學者要如何學習 C++
發問者,有能力從回信內容判斷回信者的經驗,進而估量其正確性或適用性,進而決定自己的採用度嗎?
如果能,大概不會問這個問題。如果不能,應該不必問這個問題。
網路上這些年的悠遊經驗,使我輕易可以判斷哪一種題目又有好戲看了,哪一種題目又要引爆口水戰乃至口角戰 —而且最後只是一場混戰,篩子上留沒幾傢伙。
我們感謝熱心的回信者,他們熱切提供自身經驗,不論自己是一年經驗、三年經驗、五年經驗、十年經驗┅。不論自己是 1/4 瓶水或半瓶水,或 3/4 瓶水或滿瓶水。
我想知道,以發問者的水平,如何判斷和取捨這些回覆?
通常我們尋求這類學習之道(這是對自己非常重要且關鍵的問題),不應向陌生人求助,那於事無補。因為陌生人的經歷你一無所知,為什麽他的學習之道值得你遵循?你既無法判知,就沒有必要發問。
為什麽不問你的老師?你的學長?你的同學?那是你看得見摸得到的人,如果你佩服他們的能力,你就可以詢問他們的學習經驗。因為你知道他們的表現,所以你可以決定你的採信度。
對發問者而言,這樣是不是有意義多了?
●三不政策
現代學生有三不政策:不講話,不回答,不要問我。不論是在大學殿堂,或是公司職訓,我往往面對沉默的台下,所以我也學會從來不做田野調查 — 要人舉手點數那種。
是的,連舉手都有人不願意。任何會曝露自己任何狀態的動作,統統拒絕。
這大概是為什麽大家喜歡上網發問的原因了。呵,沒人知道我是誰。
學生心頭有惑,不喜歡上課問,喜歡下課問。我完全知道症結所在。因為你心裡頭掙扎『這個問題有水準嗎?藏拙算了,不要自曝其短』。於是上焉者下課來問,下焉者完全不問。
有的老師回答某些層次不高的問題時,會帶著揶揄的表情或口吻。這種老師應該為現代學生的三不政策負點責任。
不願自曝其短,是正常的人性。那麽,你應該做的是,課前預習。唯有課前預習,或課後復習,才有信心你所問的問題有沒有水準,不是嗎?我真不知道現在還有多少學生有課前預習的習慣。我的班上有一位,我很欣賞他的積極。
下學期我讓大家都帶面具上課,保證問題多得不得了 :)
●十倍速學習
只要保持一個原則,你就可以十倍速學習。
課前預習,課後復習。
那麽,上課時你的吸收力,便是別人的十倍。速度雖是一種絕對值(其實宇宙間沒有絕對) ,也是一種相對感覺。你的吸收力是別人的十倍,那你不是十倍速學習,是什麽?你每堂課課前花一小時,課後花一小時,便比別人考試前花二十小時還有價值。
但是因為短視,看不見未來,貪玩,所以做不到。哎!
課前預習,課後復習。老調!
古調雖自愛,今人多不彈。
●眼界 .1
從一連串 C++ 學習之道的討論信中,衍生出 C 和 C++ 的關系、C 和 C++ 的能力比較。
老掉牙的問題!
有人不認為 C++ 比 C 優秀,認為別人大力捧 C++ 是因為沒看過那種「C 功力出神入化」之神人,那種「C 語言程度高到讓人難以想像」之怪物。
是的,我確信,所有 C++ 能做的事,C 都做得到。"Inside the C++ Object Model" (中譯《深度探索 C++ 物件模型》,侯俊傑譯, 峰 1998)或是 "The Annotated C++ Reference Manual"(無中譯本)書中,把許多 C++ 的奧秘(例如 object model, vptr,vtbl, template, inline...)都曝露出來,讀者甚至可以因此寫個C++ 編譯器(當然,方向有了,你可能需要知道更多實作細節)。
也許,C++ 編譯器便是以 C 語言完成的(我不確知)。
那麽,有什麽是 C++ 做得到而 C 做不到的呢?
沒有。
大不了寫個具有 C++ 編譯器功能的 C library 附在 C 程式身上,還有什麽辦不到的。
問題是,「可用」不見得「最好」。想想付出的代價。
我接觸 C++ 的前數年中,和同事有時候會去聽些課程。我的慧根差,連 OOP 都轉不過來;我的同事慧根好一些,略可掌握 OOP。至於 OOA/OOD,我們兩人都嗤之以鼻,私下竊想,那些騰雲駕霧高來高去的老師,自己到底懂不懂呀。
但是我們只敢互相調侃開玩笑,不敢真的公開表達。即使表達,也語多保留,容有迴旋。
因為我們知道,OO 這一軟體界的大勢,這麽多人的研究,這麽多人的贊美,不可能沒有原因。我們也知道自己之不悟,怕只因自己的淺薄。
後來我因此對 OO 失去興趣,改攻 Windows(programming & OS),我的同事則繼續深究。他雖不喜歡看書,但 C++/OOP 的書倒是狠K了不少,並以個人卓越的 programming 功夫,在這個領域成為專家。
我自己終於在研究 MFC 的時候,不得不痛下決心好好搞 C++/OOP。所以我是為了運用一套 C++ class library,才開始學 C++。要搞當然就要搞點成績(並且也因為搞出興趣),所以才往object model, framework infrastructure, generic paradigm繼續搞下去。
我再說一次,「可用」不見得「最好」。
我再說一次,一種技術,一種 paradigm,得到多人(可說是整個業界)的推崇與贊美,不可能沒有原因。
眼界未開的時候,要知道自己眼界未開,保持謙遜。
●眼界 .2
十年前,我有了第一部車。於是我開始知道坐在駕駛座上的各種狀況。
有一天我和朋友夜至景美訪友,坐朋友的機車去。機車大燈壞了,我很擔心,要他閃方向燈一路騎去。他斥為無稽,並且說台北路燈那麽亮,我們看得見別人,別人也看得見我們。
但我知道汽車座里的駕駛從反光鏡看不見我們。
是看得見,但是要仔細看。如果仔細看反光鏡,就無法分神看前方,所以駕駛人看反光鏡都是目光一瞥而已。在夜間,只有燈光才能讓他瞥到。他不是在看後方有沒有物體,他是在看後方有沒有燈光。
我很慶幸在冒險夜騎那輛沒大燈的機車後,現在還活著。
我的朋友沒開過車,所以他不知道這種情況。我開過車,所以我知道。這是我和他在那個時候,就交通工具的駕駛而言,層次上的差異。
我開小客車,所以對於七人座廂型車、九人座廂型車也都能夠輕易掌握,立刻上手。但是要我開 10 輪大貨卡、兩噸半、甚至怪手,我就知道有級次(order)上的障礙需要克服。要我開飛機,那級次的障礙就更高了。
機車的駕駛難度,以及可游距離,和汽車有1個級次的差距。汽車的駕駛難度,以及可游距離,和飛機有n個級次的差距。
所以我們沒有辦法和井裡的青蛙談廣闊的天,和河裡的魚蚌談汪洋的海,和燕雀談鴻鵠之志。
但是我們必須有謙遜的心:在級次更高的人面前,我們便是他們眼中的井蛙、河魚和燕雀。
『伍』 C指針的真正奧妙是什麼
首先數組在內存中是連續存放的,這樣就佔了內存中整個的一部分,內存中的每一個塊被各個進程佔用,而系統長時間運行後各個進程塊之間難免產生縫隙(windows內存整理功能主要就是把這些分散的空間整合),比如5個分散的5k的空間,如果你使用數組申請一個25k的空間,則這分散的5個5k空間無法使用,系統要在內存中另外開辟一個25k的連續空間,而使用指針則可以利用分散的空間。這樣就提高了資源的利用率。其次數組在聲明的時候就要確定長度,這樣在具體應用的時候往往事先並不知道長度,無論是申請長了造成空間浪費還是申請短了不夠用,都在編程上帶來不便,而指針可以動態的分配內存。當然c的編譯器不能動態的回收內存,如果你編寫的是一個伺服器級別的程序要長時間運行的話些許的內存泄漏(指針空間的未回收)都會造成系統崩潰,所以使用指針的時候要記得釋放內存。當然指針還有很多優點,還是要靠你自己慢慢摸索的。
『陸』 c語言如何能掌握
教材一般都是先講解再舉例,C語言教材也是如此。我學習C語言的方法是先把每節中的舉例背下來幾個,當然那時還不太懂那些C程序的意思,找到哪些你不懂,帶著問題再去看上面的講解!這樣你不但思考了,而且記憶也比較深刻!最後再模仿你背下來的那些舉例自己編寫一些類似的程序!!! 下面是我在網上看到的一篇文章希望對你有所幫助:我是學文科出身的,從98年學計算機開始懷著對軟體編程的一腔熱情,到今天已走過了6年的漫長而又艱難的學習之路,以後的路還很長,但回首過去學習時的艱難和曲折,使我覺得有義務要和剛剛學習的以及想要學習編程技術的後學談談我的對學習的看法,不足之處也請其他老鳥們指正與補充。 一、 門檻降低了,我們應該怎麼學 隨著軟體技術的發展,軟體編程語言走過了一個由原始社會向工業社會發展的過程,從機器碼編程到匯編語言,從匯編語言到各種高級語言;編程思想由面向過程發展到面向對象;同時編程工具也變成了可視化的。編程門檻隨著技術和工具的發展變得越來越低,現在用delphi,vb等工具很快就可以做一個資料庫系統、媒體播放器等在過去足以傲人的軟體。但我要說,不要為你能在幾分鍾之內做一個軟體而沾沾自喜,更不要因為工具的先進就丟掉了程序員的基本功。不管你是在校的大學生,還是自學的愛好者,如果想在程序員這條路上走的更遠,一定要學好計算機的專業課。 二、 語言的選擇不重要,編程思想才是根本 經常在論壇里看到初學者問,「學什麼語言好?什麼語言最吃香,最有前途?」,早幾年,還有許多比較各種語言和編譯器的文章。這種思想也深深的影響了我,使我走了許多彎路。所以我要說,選擇什麼語言不是最重要的,編程思想才是程序員要學的根本。各種語言發展到今天都有它存在的原因。比如現在各種高級語言都有各自的優點,delphi最讓人稱道的是他在編寫資料庫系統方面的便捷,c/c++則在於它的靈活和高效性,vb的優點在於他最方便入門,Java的跨平台性是最好的。對於初學者學什麼都好,因為這一階段學習的重點在於語言和編譯器本身,畢竟書上的例子和一個實用的工程相差是在太遠。 當你走過了這個階段,語言已經不是困擾你的重要問題時,那麼你選在一個平台吧。(當然我的建議是Windows,一方面是學習的資料比較多,另一方面就是使用的人也多,好的軟體是不愁每人使用的。)了解在這個平台編程的方法,就Windows來說就是學習API函數,並逐漸深入到它的內核。 如果你走過了這一階段,那我告訴你你已經是最初你佩服的那種高至恕T謖飧銎教ㄉ夏芄揮穩杏杏啵 蘼凼強 ⒏髦鍾τ萌砑 故強 ⑸釗胂低車南低橙砑 愣薊岬眯撓κ幀?BR> 三、 編程不是單純的對技術的追求,軟體的靈魂是服務 作為技術人員,往往比較單純和執著,一心想著怎麼學好技術,不要落後於他人。殊不知,自己完全背離了軟體的宗旨,軟體(包括一切技術)的產生都是為了更好的為人服務。用戶是不會在意你是否使用了更先進的技術,他只關心你是否為他提供了完整的解決方案和便捷的服務。所以在寫程序前,一定要調查一下,你所寫的軟體會有多少用戶,他們想讓你提供那些服務。 以上是整體的思路,在此我以Windows平台上的學習為例,說一說學習之路。 首先以你的個人愛好或工作方向,選擇一門語言。一般來說,只需要這幾方面的書就夠了。一種是語言入門和開發工具使用的書,之後是語言的參考大全,最後一種就是編程指南或開發指南。如學習vb,按順序應該看《vb開發指南》《vb中文版參考祥解》(清華大學出版社);學習c/c++,則看《C語言程序設計(第二版)》(譚誥強)或《C++程序設計》(錢能),《Visual C++ 技術內幕(第4版)》(潘愛民), 然後看些計算機專業課程和深入Windows編程的書。如:《編碼的奧秘》(Charles Petzold),《數據結構》(嚴蔚敏 吳偉民),《編譯原理和技術》,《Windows程序設計》(Charles Petzold),《深入淺出MFC(第2版)》(侯捷),《Win32多線程程序設計》(侯捷),《Windows核心編程》(jeffrey Richter)。 最後就是些深入系統內核源碼和設計模式方面的書。如:《萊昂氏UNIX源代碼分析》(John Lions 著,尤晉元 譯),《STL源碼剖析》(侯捷),《計算機程序設計藝術》(蘇運霖 譯),《設計模式》( Erich Gamma 等著,李英軍等 譯)。 以上書籍為方便學習,都是按順序排列的。 羅羅嗦嗦了許多,不知道對你有多少幫助,但我知道希望有更多的向我一樣在這條路上摸索的同志能少走些彎路。
『柒』 發現了C語言中printf參數的幾個秘密
我們經常看到prinf("%+3f",xx)
但是不知道左邊的參數的具體含義,我今天就來說下吧。
%[flags][width][.prec][F|N|h|l][type]
1.flags.
— 左對齊。
+ 右對齊。
空格 正數輸出代替+,負數減號。
2.
width:
多少個字元的空格寬度。
3.prec
精度,就是指精確到小數點後幾位。
4.[F|N|h|l]
f-遠指針存放的地址。
n-近指針存放的地址
h-短整型數據的值。
l-長整形數據值。
5.
type用來格式轉換。
『捌』 初一學習C語言很吃力,各種名詞不懂,需要堅持嗎
像你初一時間很富裕的,你說初三的話沒時間學這個還是正常的,初一初二還是有很多時間來學的,就像我在高一高二時候學C語言的,高三時候幾本上也沒什麼 時間來整這個東西了
我學的時候是這樣的,先弄了本書, 然後網上找了點教程,首先從輸入輸出學起,因為所有書吧,開頭一般都是先講C語言的歷史之類的,對於一個不懂C的人來說簡直是越看越沒意思,然後就是數據類型和表達式,這里不建議開始就從它學起,因為你跟本開始就不懂C語言是幹嘛的,特別你初一的,估計你也不知道計算機內部處理數據都怎麼分類的。所以看的是一頭務水,還記不住,從這開始純是靠背才能記住的,因為你這塊沒法實踐。也就沒法練熟
所以我建議從printf 和scanf開始,首先以簡單的加減法計算題入手, 然後學學條件結構和循環結構。這三種控制結構學完了以後,你對編程有了一定了解了,開始學數據類型和表達式吧。這回不難了,也能看懂了,也能簡單的就記住了。
接下來是數組 函數 認真看書就可以了,最難的到了指針這里,你得先理解指針是什麼東西,它能有哪些特殊的用途,指針自己不是很難,但指針與數組和函數再就是後邊的結構體連系在一起的時候就復雜了許多。總的來說也是靠自己看書,並且多上機寫程序,上機是最好的辦法學C語言,遇到什麼不對的地方,細心調試一下。 提示你一下,想學好指針這里,特別是對指針的工作方式有個全面的了解,建議以後學學匯編語言,這樣你才能真正理解指針的奧秘。
加油吧,初一學這個也不是難事,我見過小學開始學VB的,到了高中就已經成一個牛人的了。現在我上大一,他上高二,那小子可以用VB寫程序來賺錢了。
『玖』 c語言奧妙……
運行結果:
37之後換行
希望能夠幫到您。