Ⅰ 學習c語言用什麼書籍
程序員之路——如何學習C語言
學習C語言不是一朝一夕的事情,但也不需要花費十年時間才能精通。如何以最小的代價學習並精通C語言是本文的主題。請注意,即使是「最小的代價」,也絕不是什麼捷徑,而是以最短的時間取得最多的收獲,同時也意味著你需要經歷艱苦的過程。
一、要讀就讀好書,否則不如不讀
所有初學者面臨的第一個問題便是:如何選擇教材。好的開始是成功的一半,選擇一本優秀的教材是事半功倍的關鍵因素。不幸的是,學校通常會幫你指定一本很差勁的C語言課本;而幸運的是,你還可以再次選擇。
大名鼎鼎的譚浩強教授出了一本《C語言程序設計》,據說發行量有超過400萬,據我所知,很多學校都會推薦這本書作為C語言課本。雖然本人的名字(譚浩宇)跟教授僅僅一字之差,但我是無比堅定地黑他這本書的。這本書不是寫給計算機專業的學生的,而是給那些需要考計算機等級考試的其它專業學生看的。這本書的主要缺點是:例子程序非常不專業,不能教給你程序設計應該掌握的思考方式;程序風格相當地不好,會讓你養成亂寫代碼的惡習;錯誤太多,曾經有人指出過這本書的上百個錯誤,其中不乏關鍵的概念性錯誤。好了,這本書我也不想說太多了,有興趣大家可以網路一下:)
Kernighan和Ritchie的《The C Programming Language》(中譯名《C程序設計語言》)堪稱經典中的經典,不過舊版的很多內容都已過時,和現在的標准C語言相去甚遠,大家一定要看最新的版本,否則不如不看。另外,即使是最經典最權威的書,也沒有辦法面面俱到,所以手邊常備一本《C語言參考手冊》是十分必要的。《C語言參考手冊》就是《C Reference Manual》,是C語言標準的詳細描述,包括絕大多數C標准庫函數的細節,算得上是最好的標准C語言的工具書。順便提一句,最新的《C程序設計語言》是根據C89標准修訂的,而《C語言參考手冊》描述的是C99標准,二者可能會有些出入,建議按照C99標准學習。還有一本《C和指針》,寫得也是相當地不錯,英文名是《Pointers on C》,特別地強調指針的重要性,算是本書的一個特點吧。不過這本書並不十分適合初學者,如果你曾經學過C語言,有那麼一些C語言的基礎但又不是很扎實,那麼你可以嘗試一下這本書。我相信,只要你理解了指針,C語言便不再神秘。
如果你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊子,內容非常非常地有趣。要注意一點,這本書是二十多年前寫成的,裡面提到的很多C語言的缺陷都已被改進,不過能夠了解一些歷史也不是什麼壞事。然後你可以挑戰一下《Expert C Programming》(中譯名《C專家編程》),書如其名,這本書頗具難度,一旦你仔細讀完並能透徹理解,你便可以放心大膽地在簡歷上寫「精通C語言」了。
切記一個原則,不要讀自己目前還看不懂的書,那是浪費生命。如果你看不懂,那你一定是缺失了某些必需基礎知識。此時,你要仔細分析自己需要補充哪些內容,然後再去書店尋找講述的這些內容的書籍。把基礎知識補充完畢再回頭來學習,才會真正的事半功倍。
二、Unix/Linux還是Windows,這是個很大的問題
不同的編程環境會造就出不同思維的程序員。Windows的程序員大多依賴集成開發環境,比如Visual Studio,而Unix程序員更加鍾愛Makefile與控制台。顯而易見,集成開發環境更容易上手,在Windows上學習C語言,只需要會按幾個基本的Visutal C++工具欄按鈕就可以開始寫Hello, World!了,而在Unix下,你需要一些控制台操作的基本知識。有人也許認為Unix的環境更簡潔,但習慣的力量是很大的,大家都很熟悉Windows的基本操作,而為了學習C語言去專門裝一個Unix系統,似乎有點不劃算。
對於一個只懂得Windows基本操作、連DOS是什麼都不知道的新手而言,盡快做一些有趣而有意義的事情才是最重要的。用C語言寫一個小程序遠比學習ls、cat等命令有趣,況且我們要專注於C語言本身,就不得不暫時忽略一些東西,比如編譯鏈接的過程、Makefile的寫法等等等等。
所以我建議初學者應該以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作為主要的學習環境,而且千萬不要在IDE的使用技巧上過多糾纏,因為今後你一定要轉向Unix環境的。Visual C++ 6.0使用很方便,調試也很直觀,但其默認的編譯器對C標準的支持並不好,而Dev C++使用gcc編譯器,對C99的標准都支持良好。使用順帶提一下,很多大學的C語言課程還在使用Turbo C 2.0作為實驗環境,這是相當不可取的,原因其一是TC 2.0對C標准幾乎沒有支持,其二是TC 2.0編譯得到的程序是16位的,這對今後理解32位的程序會造成極大的困擾(當然,用djgpp之類的東西可以使TC 2.0編譯出32位程序,不過那過於復雜了)。
等你學完一本C語言的教材,你一定要轉向Unix平台繼續學習,幾乎所有的C語言高級教程都是基於Unix平台的(比如《C專家編程》)。轉變的過程是痛苦的,你需要面對的是各種紛繁復雜的命令,完全不同於Windows平台的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和習慣更加符合C語言的思考方式和習慣。在Unix下,你可以找到無數優秀的源代碼供你盡情閱讀,你可以方便地查看某個庫函數的聯機手冊,還可以看到最優秀的代碼風格
歸結起來就是一句話:初學C語言,建議使用Windows系統和集成開發環境,在准備向「高手」方向努力時,請先轉向Unix平台。
三、萬事俱備,你就是東風
書已選定,環境配置完成,正所謂萬事俱備,只欠你自己的努力了。請從書的前言開始,仔細地閱讀手頭的教材,很多人看書喜歡直接從第一章開始看,這是錯誤的做法。前言是作者對整本書的大體介紹,作者一般會告訴你需要什麼基礎才能夠順利閱讀本書,這可以幫助你檢驗自己的基礎知識是否已經具備。看完前言,還要瀏覽一下目錄,了解一下書的整體結構,順便給自己安排一下學習計劃。
學習C語言,必需注意每一個細節,書上的例子代碼一定要自己親自敲一遍,編譯執行輸出都跟書上說的一致才能算是學完了一個例子,如果不一致,就要仔細找原因。出了書本上有的例子,自己還要「創造」一些例子,比如學習運算符優先順序的時候,可以寫幾個相同的表達式,在不同的位置加上括弧,看看有哪些不同的行為,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的書上的例子以及改造之後的例子,還有自己「創造」的例子,都應該仔細地歸類保存,並且要在源代碼中寫上簡短的注釋,闡述這個例子的意圖。
例子之後就是習題了,我建議初學者把所有的習題都獨立做一遍,然後對照答案的代碼,看看自己的代碼有那些不足,再試著修改自己的代碼。很多人不重視習題,這是極大的錯誤,因為作者通常會在習題中說明一些重要的道理,而不是單純地檢驗前面的知識。
也許你認為這樣學習太慢,其實不然。學得細致就不用走回頭路,等你學到後面才發現自己前面沒搞清楚,那才是真的得不償失。一般說來,整本書讀完,你應該完成數千行乃至上萬行的代碼,無論是原封不動照抄書上的,還是自己心血來潮寫就的,都是今後繼續學習的一筆財富。以我自己舉例,閱讀《Windows核心編程》時(我只閱讀了3/4的內容),除了抄書上的代碼,還自己寫了很多例子,一共有5574行(用unix下的wc工具統計),時隔多日,我早已記不清Windows的系統編程了,但只要花幾分鍾翻出以前的代碼看看,便會重新瞭然於胸。所謂好記性不如爛筆頭,就是這個道理。
仔細讀書、認真抄寫源代碼、獨立完成習題外加更進一步的實驗,最後將所有的代碼留下,成為自己的經驗和財富,絕對的辛苦,也絕對的事半功倍。當然,這種方式只適合學習需要精通的技術,如果不是學習C語言,你還要具體情況具體分析。
寫到最後,還有非常非常重要的一點沒有提及——代碼風格,從最開始學習就必須強迫自己模仿最優秀的代碼風格
數學不好怎麼辦?
答案:學!
英語不會怎麼辦?
答案:學!
編程零基礎怎麼辦?
答案:從零學起!
等你學成功後回頭看看那些一無所成的人,他們總是在說我這里不行,我那裡基礎差,我沒時間學等等……
失敗的人總是找借口,成功的人總是找方法。
失敗的人總是碰到問題,成功的人總是發現問題。
方法:每個人都有自已的方法,認真去學總能找到方法.
Coding一般的小東西還可以,若去設計演算法什麼的沒有數學不行,如要交流不會英語不行(名校的開放課程全是英語,沒人給你翻譯)。如果想在軟體界發展下去,必須學習數學和英語。
Ⅱ 新手學習C語言,有什麼好的書籍值得推薦
一、要讀就讀好書,否則不如不讀
所有初學者面臨的第一個問題便是:如何選擇教材。好的開始是成功的一半,選擇一本優秀的教材是事半功倍的關鍵因素。不幸的是,學校通常會幫你指定一本很差勁的C語言課本;而幸運的是,你還可以再次選擇。
大名鼎鼎的譚浩強教授出了一本《C語言程序設計》,據說發行量有超過400萬,據我所知,很多學校都會推薦這本書作為C語言課本。雖然本人的名字(譚浩宇)跟教授僅僅一字之差,但我是無比堅定地黑他這本書的。這本書不是寫給計算機專業的學生的,而是給那些需要考計算機等級考試的其它專業學生看的。這本書的主要缺點是:例子程序非常不專業,不能教給你程序設計應該掌握的思考方式;程序風格相當地不好,會讓你養成亂寫代碼的惡習;錯誤太多,曾經有人指出過這本書的上百個錯誤,其中不乏關鍵的概念性錯誤。好了,這本書我也不想說太多了,有興趣大家可以網路一下:)
Kernighan和 Ritchie的《The C Programming Language》(中譯名《C程序設計語言》)堪稱經典中的經典,不過舊版的很多內容都已過時,和現在的標准C語言相去甚遠,大家一定要看最新的版本,否則不如不看。另外,即使是最經典最權威的書,也沒有辦法面面俱到,所以手邊常備一本《C語言參考手冊》是十分必要的。《C語言參考手冊》就是《C Reference Manual》,是C語言標準的詳細描述,包括絕大多數C標准庫函數的細節,算得上是最好的標准C語言的工具書。順便提一句,最新的《C程序設計語言》是根據C89標准修訂的,而《C語言參考手冊》描述的是C99標准,二者可能會有些出入,建議按照C99標准學習。還有一本《C和指針》,寫得也是相當地不錯,英文名是《Pointers on C》,特別地強調指針的重要性,算是本書的一個特點吧。不過這本書並不十分適合初學者,如果你曾經學過C語言,有那麼一些C語言的基礎但又不是很扎實,那麼你可以嘗試一下這本書。我相信,只要你理解了指針,C語言便不再神秘。
如果你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊子,內容非常非常地有趣。要注意一點,這本書是二十多年前寫成的,裡面提到的很多C語言的缺陷都已被改進,不過能夠了解一些歷史也不是什麼壞事。然後你可以挑戰一下《Expert C Programming》(中譯名《C專家編程》),書如其名,這本書頗具難度,一旦你仔細讀完並能透徹理解,你便可以放心大膽地在簡歷上寫「精通C語言」了。
切記一個原則,不要讀自己目前還看不懂的書,那是浪費生命。如果你看不懂,那你一定是缺失了某些必需基礎知識。此時,你要仔細分析自己需要補充哪些內容,然後再去書店尋找講述的這些內容的書籍。把基礎知識補充完畢再回頭來學習,才會真正的事半功倍。
Ⅲ 如何學好C語言
所有初學者面臨的第一個問題便是:如何選擇教材。好的開始是成功的一半,選擇一本優秀的教材是事半功倍的關鍵因素。不幸的是,學校通常會幫你指定一本很差勁的C語言課本;而幸運的是,你還可以再次選擇。沒有學習交流地方可以來
所以我建議初學者應該以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作為主要的學習環境,而且千萬不要在IDE的使用技巧上過多糾纏,因為今後你一定要轉向Unix環境的。Visual C++ 6.0使用很方便,調試也很直觀,但其默認的編譯器對C標準的支持並不好,而Dev C++使用gcc編譯器,對C99的標准都支持良好。使用順帶提一下,很多大學的C語言課程還在使用Turbo C 2.0作為實驗環境,這是相當不可取的,原因其一是TC 2.0對C標准幾乎沒有支持,其二是TC 2.0編譯得到的程序是16位的,這對今後理解32位的程序會造成極大的困擾(當然,用djgpp之類的東西可以使TC 2.0編譯出32位程序,不過那過於復雜了)。
等你學完一本C語言的教材,你一定要轉向Unix平台繼續學習,幾乎所有的C語言高級教程都是基於Unix平台的(比如《C專家編程》)。轉變的過程是痛苦的,你需要面對的是各種紛繁復雜的命令,完全不同於Windows平台的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和習慣更加符合C語言的思考方式和習慣。在Unix下,你可以找到無數優秀的源代碼供你盡情閱讀,你可以方便地查看某個庫函數的聯機手冊,還可以看到最優秀的代碼風格(說到代碼風格,我會專門寫一篇文章詳細敘述)。
歸結起來就是一句話:初學C語言,建議使用Windows系統和集成開發環境,在准備向「高手」方向努力時,請先轉向Unix平台。
三、萬事俱備,你就是東風
書已選定,環境配置完成,正所謂萬事俱備,只欠你自己的努力了。請從書的前言開始,仔細地閱讀手頭的教材,很多人看書喜歡直接從第一章開始看,這是錯誤的做法。前言是作者對整本書的大體介紹,作者一般會告訴你需要什麼基礎才能夠順利閱讀本書,這可以幫助你檢驗自己的基礎知識是否已經具備。看完前言,還要瀏覽一下目錄,了解一下書的整體結構,順便給自己安排一下學習計劃。
學習C語言,必需注意每一個細節,書上的例子代碼一定要自己親自敲一遍,編譯執行輸出都跟書上說的一致才能算是學完了一個例子,如果不一致,就要仔細找原因。出了書本上有的例子,自己還要「創造」一些例子,比如學習運算符優先順序的時候,可以寫幾個相同的表達式,在不同的位置加上括弧,看看有哪些不同的行為,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的書上的例子以及改造之後的例子,還有自己「創造」的例子,都應該仔細地歸類保存,並且要在源代碼中寫上簡短的注釋,闡述這個例子的意圖。
例子之後就是習題了,我建議初學者把所有的習題都獨立做一遍,然後對照答案的代碼,看看自己的代碼有那些不足,再試著修改自己的代碼。很多人不重視習題,這是極大的錯誤,因為作者通常會在習題中說明一些重要的道理,而不是單純地檢驗前面的知識。
也許你認為這樣學習太慢,其實不然。學得細致就不用走回頭路,等你學到後面才發現自己前面沒搞清楚,那才是真的得不償失。一般說來,整本書讀完,你應該完成數千行乃至上萬行的代碼,無論是原封不動照抄書上的,還是自己心血來潮寫就的,都是今後繼續學習的一筆財富。以我自己舉例,閱讀《Windows核心編程》時(我只閱讀了3/4的內容),除了抄書上的代碼,還自己寫了很多例子,一共有5574行(用unix下的wc工具統計),時隔多日,我早已記不清Windows的系統編程了,但只要花幾分鍾翻出以前的代碼看看,便會重新瞭然於胸。所謂好記性不如爛筆頭,就是這個道理。
仔細讀書、認真抄寫源代碼、獨立完成習題外加更進一步的實驗,最後將所有的代碼留下,成為自己的經驗和財富,絕對的辛苦,也絕對的事半功倍。當然,這種方式只適合學習需要精通的技術,如果不是學習C語言,你還要具體情況具體分析。
寫到最後,還有非常非常重要的一點沒有提及──代碼風格,從最開始學習就必須強迫自己模仿最優秀的代碼風格。因為代碼風格太重要內容也太多,我會用專門的一篇文章來詳細討論,請大家關注《程序員之路──關於代碼風格》。
題目是關於C語言,其實我主要想說說程序該怎麼學,或者一點感悟罷了,在這里,我只想引用身邊的幾個人的例子,來談一下對程序學習的理解
第一個人要說到我了,我對程序產生興趣,是聽說程序可以作游戲,那時候是在初一,然而借來一本G-BASIC簡明教材後,我便傻了眼。
陌生的詞彙,古怪的邏輯,都是些天文的中文譯本,頭疼了好一陣子。
然而當時又沒有別的閑書可看,我就整天捧著那一本書,什麼方法都試過了,甚至倒著看過了,都沒看出什麼眉目,自己又沒有電腦,只能不停地大膽地想像,然後滿腦子的疑惑……
在這里停一下,上面說的便是我學習的風格:總要經歷一番波折,瞎折騰幾下,然後才會有偶然間的明悟-開竅了!我甚至沒見過幾個人有我這么笨,現在明白過來了,我總是一開始把事情想得過於復雜,造成狗咬刺蝟的難堪的局面,然而竟然有意想不到的收獲!但是不建議大家模仿這種風格,起碼追女朋友的時候不能這樣,生活中很多機會在於接手的那一瞬間,失去就永遠找不回來了。
現在回來,後來偶然間,我看懂了一行代碼,是print 語句,當時興奮得要命,又仔細看了這個看了那個,一下子看懂了很多東西,像是在霎那間被什麼給擊中似的,立刻間醍醐灌頂。。。。
初三在學校學了FOXBASE,基本上自學的,我發現了一件奇怪的事,我這人是出了名的記性不好,然而當時背程序中的命令卻是過目不忘,到現在還記得很多,也許是感興趣吧,也感謝我的微機老師給我提供自由上機的機會!後來我又自學了QBASIC,初四暑假又學了一點C,那時學C遇到不少困難,當時我們學校機房連C語言都沒有,我只好悶在家裡,一本二級C教材,一本配套習題,整天發呆地想,把自己的腦袋當電腦cpu使,有時進入死循環,有時又徹底崩潰。我花十幾天看完了一本書,做完了一本題,然而腦袋裡充滿了疑惑,由於沒有上機實踐的機會,我就憑自己的猜測與推理己慢慢建立了一大堆理論,十分得意與自信,但後來證明大部分是錯的,害我花了很長時間去糾正,這是後話。可是,還是那句話不破不立,不阻不行。就像我現在有了電腦,整天泡在互聯網的海洋里,感受著快餐文化,好久都沒靜下心來好好想點東西了.
高中還上過幾節電腦課,只不過忙於應付高考,我將學程序的打算放棄了,到這里我該說下一個人了。
高中時坐我旁邊一女生,她的文曲星里有BASIC,我偶爾拿過來編了幾個小程序玩,她看到後很感興趣,令人驚訝的是,她只看了三五個程序,聽我講了幾個命令的功能,就能根據自己的想像編出小動畫來,她此前是絕沒有學過程序的!我曾一度懷疑過她的智商,然而她程序是如此之快,卻讓我的眼都瞪大了好幾圈,比我當年高了好幾個境界!我後來經常在想,是不是我當時的方法不對,程序到底應該怎樣學。。。
一晃就到了大學,我碰到另一個讓我佩服的人,跟我一樣是學計算機的,他是偶爾看到我在編動畫,然後十分感興趣,便開始自學。他令人吃驚的是,指針,結構體,位運算等等,都沒搞懂(更不用說演算法和數據結構),只學了三種程序結構,現在只學了C半年,便自己能編出貪吃蛇,俄羅斯方塊,掃雷,還有很多叫不出名字的小游戲來,現在又在寫黑白棋,我知道我確實是走了不少彎路。
程序應該怎樣學,對C來講,我覺得應該從畫圖學起。
原因有二。
一,畫圖程序很能振奮人心的,它能帶給你濃厚的興趣,這是學程序的關鍵。
二,畫圖程序容易上手,很簡單的道理,就能做出很漂亮的東西來。有很多東西甚至不用看課本,就能自己推出來(我認為推理的方法很重要,它是你自學的必要條件)。
比如畫一個圓,從數學角度來分析,要確定一個圓,只需知道它的圓心(x,y)與半徑r,那好一個圓就畫出來了,circle(x,y,r);
其它的類推,再畫一個立體的,選擇立方體,再分析,只要知道兩個對角的坐標就行了吧,翻一下課本,不是這樣,為什麼?你或許會想到,電腦屏幕本來就是平面的,用立體坐標的理論在這里,恐怕就不是最簡單的方法。所以它採用的應該是兩個平面圖形平移。此處留下疑問,立體圖形在平面坐標中怎麼表示?自己慢慢研究,很淺的東西。
想作動畫吧,想像一下動畫的原理只是從一個圖形變幻到另一個圖形,不同地變幻就出現動畫效果,那就可以畫一個,擦了,再畫一個新的,再變化。。。
數學功底好的話,從二維到三維,從靜態到動態我認為是很快的過渡。
具體該怎麼學呢,你可以多找幾個畫圖的例子,敲到電腦里,多敲幾個,慢慢地你就會知道哪些東西是干什麼的,慢慢地就會自己做出東西來。
但這里不要沉溺太久了,先學畫圖只是幫助你輕松地入門(很多人C學完了還沒有入門)。
從畫圖里暫時走出來,你應該打打基礎了,這里不再贅述。可以邊學邊實踐,物理,數學課本中很多問題都可以用程序來演示,來解決,嘗試著多做些東西,這比你老學課本中的模型強多了,只有你自己去體會才能知道。
談及C語言,我想凡是學過它的朋友都有這樣一種感覺,那就是「讓我歡喜讓我憂。」歡喜的是,C語言功能非常強大、應用廣泛,一旦掌握了後,你就可以理直氣壯地對他人說「我是電腦高手!」,而且以後若是再自學其他語言就顯得輕而易舉了。憂慮的是,C語言猶如「少林武功」一般博大精深,太難學了。其實就筆者認為C語言並非是「difficult(困難)」的,只要你能理清思路,掌握它的精髓,那麼自學C語言是一件非常容易且又其樂無窮的事。今天本人就與大家一起談談如何學習C語言或者說學習C語言應從哪幾方面著手。
了解一些基本知識
一.C語言的背景
就個人感觸,無論學習哪門語言首先應該了解一下自己所學語言的背景,也可以說它的發展史。
C語言屬於高級程序語言的一種,它的前身是「ALGOL」。其創始人是布朗·W·卡尼漢和丹尼斯·M·利奇。C語言問世時是帶有很大的局限性,因為它只能用於UNIX系統上。然而隨著科學技術的進步,計算機工業的發展,C語言逐漸脫離UNIX。1987年美國標准化協會制定了C語言的國際標准,簡稱「ANSI C」,從此以後它便成為一種廣泛使用的程序語言。C語言的優點很多,主要的有如下四點:
1.兼備高級語言與低級語言的優點,屬於一種中間語言。
2.它是一種結構化程序設計語言,非常適合結構化程序設計。
3.有較豐富的數據類型、運算符以及函數供以選用。
4.直接與內存打交道,使修改、編輯其他程序與文檔變得輕松,簡單。
二.二大語系二種不同的學習方法
筆者學習過很多程序語言,例如:C,C++(C語言的擴展),QBASIC,VB(BASIC的可視化),JAVA,J ,VB,JAVA,ASP,FOXPRO,PERL等等,就本人實踐所得,其實高級程序語言分為兩大語系。一路是以C為主的程序語言,例如:JAVA,JAVA等,這類語言在函數的調用,程序語句的書寫,循環的控制都極為相似。另一路是以BASIC為首的程序語言,例如:FOXPRO,VB等,此類語言同樣具有相似的函數調用,程序語句書寫以及循環控制,但與C語系是不同的。因此若是您以前是從QBASIC起家的,那麼在學習C語言前最好是先洗洗腦,千萬不要把學習BASIC的方法以及思路用在C身上。
講到這里,我想大家對C語言一定有了感性認識吧!下面讓我們再升華一下,全方位親密接觸它。學習C語言必須從以下四點入手,也就是說,只要你能掌握這四點的內容,那麼基本上就大功告成了。
怎樣才能學好c語言
有人問我c語言是不是很難學,我說不是,後來問的人多了,我就萌生了寫一篇關於c語言如何入門的文章的念頭來。
其實c語言很簡單,它只是一種交流的規則,一種表達的工具,一種承載思想的容器而已,之所以感覺難,我覺得是還不習慣使用計算機特點來考慮問題。這就好比中國人從到英國定居一樣,雖然你學過英語,但是那隻是想像中的英國,和現實的英國的情況還相差很遠,所以要有一個適應的過程,也就是常說的過渡期或磨合期。
想盡快上手就得掌握計算機的特點,計算機的特點包括:
1、 計算機在問題的處理方式上要求全,將所有的可能都要告訴它。人可以根據習慣忽略一些東西,但計算機不行。比如說求解一元二次方程,我們考慮問題就已經默認了a不等於0,更有甚者把b方減4ac也默認大於等於零了。這是我們的習慣,既然有解,我們一般習慣上就把它定為實數解,所以你做出來的程序一般是不考慮這兩個條件的,但是計算機不行,計算機是有名的弱智。計算機沒有象人一樣的智能處理能力,它是人忠實的信徒,不管你怎麼想,它都會執行你的命令。由於你的習慣,導致一些別有用心的人或者無意犯錯的人來犯錯誤,致使計算機有時無所適從。很疲憊,甚至崩潰,報錯,造成你的程序是不成功的,所以你感覺很難。
2、 計算機要求程序的描述精確,無二義性。人的語言有很強的隨機性和二義性。我們平時說話時,有時是一些招呼,有時說話的邏輯性可以不太清楚,話既可以表達這樣的意思,也可以表達那樣的意思,人可以根據環境和對方想表達的含義進行分析,最終得到正確的結果,但是計算機很弱智,雖然它很聽話,但是他不能理解你表達的思想,只會按你交給的指令執行,這樣導致執行時報警和出錯。
3、 計算機編程是要求有很強的全局性和邏輯性,不存在起伏的問題。人的思維有很強的活躍期和蟄伏期,計算機不會,它隨時待命。人在考慮問題時,有很多盡興的東西,但這不是處理問題的整體,而是一部分,所以就出現做完一段代碼後,就不願意再寫,或感覺很吃力,所以感覺很難。
計算機要求它的主人,考慮問題要全面,所有可能的情況及處理都要告訴它,要求學會沉穩,心態要穩定,要求交流的語句一定要明了含義單一。
怎樣才能很快的學會c語言,更快的度過磨合期呢?C語言的語法規則記憶理解當然是不可少的,除此之外還應注意以下幾個方面:
1、 好好理解一下變數和函數的概念,至少要重新回頭看看初等數學。這是基礎,否則就會先天不足,你學的再好,也成不了大氣候。
2、 平衡心態,雖然不能做到「不以物喜,不以己悲」的水平,但至少不要浮躁,不要急於求成,欲速則不達。
3、 培養自身的全局意識,既能小無內,也能大無外,才行。
4、 嚴格按照程序設計過程設計程序,不要跳脫,天馬行空,沒有規矩是不成方圓的。
5、 努力提高自身的綜合素質。程序是人思維的表達形式,是人處理問題思路和語言的結合體。你對客觀看成到什麼程度和你掌握的知識成正比。如果你對處理的問題不理解,不會處理,你怎麼也寫不出程序。
6、 學會交流,多交流,相互補益,同時團隊合作也是很重要的。
總之,實踐出真知,多學、多練、多思、多交流,勤奮好學才能學成。
Ⅳ C語言函數參考手冊的目錄
第1章 動態內存管理函數:alloc.h 1
1.1 brk()——重置數據段存儲空間函數 2
1.2 coreleft()——獲取未使用內存大小
函數 3
1.3 farcalloc()——申請遠堆空間函數 4
1.4 farcoreleft()——獲取遠堆空閑存儲
空間大小函數 5
1.5 farfree()——釋放遠堆空間函數 6
1.6 farmalloc()——申請遠堆空間函數 6
1.7 farrealloc()——遠堆存儲塊空間調整
函數 7
1.8 sbrk()——增加數據段存儲空間函數 8
第2章 DEBUG相關函數庫:
assert.h 10
assert()——錯誤判斷函數 11
第3章 BIOS相關函數庫:bios.h 12
3.1 bioscom()——串列I/O通信函數 13
3.2 biosdisk()——軟硬碟I/O函數 14
3.3 biosequip()——檢查設備函數 15
3.4 bioskey()——鍵盤介面函數 16
3.5 biosmemory()——獲取存儲塊大小
函數 18
3.6 biostime()——設置bios時間函數 19
第4章 控制台輸入/輸出函數庫:
conio.h 21
4.1 cgets()——從控制台輸入字元串
函數 22
4.2 clreol()——清除字元到行末函數 22
4.3 clrscr()——清除文本模式窗口函數 23
4.4 cprintf()——格式化輸出到屏幕
函數 24
4.5 cputs()——字元串輸出到屏幕函數 25
4.6 cscanf()——格式化輸入函數 26
4.7 delline()——刪除行函數 27
4.8 getch()——無回顯字元輸入函數 28
4.9 getche()——有回顯字元輸入函數 28
4.10 getpass()——以密碼形式輸入
函數 29
4.11 gettext()——文本復制函數 30
4.12 gettextinfo()——獲取文本模式的
屏幕信息函數 31
4.13 gotoxy()——設置游標函數 32
4.14 highvideo()——高亮顯示文本
函數 33
4.15 insline()——插入空行函數 34
4.16 kbhit()——檢查鍵盤按鍵函數 35
4.17 lowvideo()——低亮顯示文本
函數 36
4.18 movetext()——移動屏幕文本
函數 37
4.19 normvideo()——正常亮顯示文本
函數 38
4.20 putch()——字元輸出函數 39
4.21 puttext()——文本復制函數 40
4.22 textattr()——設置文本屬性函數 41
4.23 textbackground()——文本背景色
選擇函數 42
4.24 textcolor()——文本字元顏色選擇
函數 43
4.25 textmode()——文本模式設置函數 43
4.26 ungetch()——把字元退回鍵盤緩沖
區函數 44
4.27 wherex()——返回水平游標位置
函數 45
4.28 wherey()——返回垂直游標位置
函數 46
4.29 window()——定義活動文本窗口
函數 47
第5章 字元函數庫:ctype.h 49
5.1 isascii()——判斷字元是否為ASCII碼
函數 50
5.2 isalnum()——判斷字元是否為字母或
數字函數 50
5.3 isalpha()——判斷字元是否為英文
字母函數 51
5.4 iscntrl()——判斷字元是否為控制
字元函數 52
5.5 isdigit()——判斷字元是否為十進制
數字函數 53
5.6 isgraph()——判斷字元是否為除空格
外的可列印字元函數 54
5.7 islower()——判斷字元是否為小寫
英文字母函數 55
5.8 isprint()——判斷字元是否為可列印
字元(含空格)函數 56
5.9 ispunct()——判斷字元是否為標點
符號函數 57
5.10 isspace()——判斷字元是否為空白
字元函數 57
5.11 isupper()——判斷字元是否為大寫
英文字母函數 58
5.12 isxdigit()——判斷字元是否為十六
進制數字函數 59
5.13 toascii()——將字元轉換為ASCII碼
函數 60
5.14 tolower()——將字元轉換為小寫
英文字母函數 61
5.15 toupper()——將字元轉換為大寫
英文字母函數 62
第6章 目錄操作函數庫:dir.h 63
6.1 chdir()——更改當前工作目錄函數 64
6.2 findfirst()——搜索當前磁碟目錄
函數 65
6.3 findnext()——搜索磁碟下一個匹配的
文件函數 66
6.4 fnmerge()——構造完整路徑函數 66
6.5 fnsplit()——拆分路徑函數 67
6.6 getcurdir()——獲取指定驅動器上的
工件目錄函數 69
6.7 getcwd()——獲取當前工作目錄
函數 69
6.8 getdisk()——獲取當前磁碟驅動器號
函數 70
6.9 mkdir()——建立目錄函數 71
6.10 mktemp()——生成不重復文件名
函數 72
6.11 rmdir()——刪除文件目錄函數 73
6.12 setdisk()——設置當前工作驅動器
函數 73
6.13 searchpath()——查找文件函數 74
第7章 系統介面函數庫:dos.h 76
7.1 allocmem()——DOS分配存儲段
函數 77
7.2 bdos()——DOS系統調用函數 78
7.3 country()——返回國家相關信息
函數 79
7.4 ctrlbrk()——設置Ctrl-Break處理
程序函數 80
7.5 delay()——以毫秒為單位的延時
函數 81
7.6 dosexterr()——獲取擴展DOS錯誤
信息函數 82
7.7 dostounix()——把DOS時間轉換為UNIX時間 83
7.8 FP_OFF()——獲取遠指針的偏
移量 84
7.9 FP_SEG()——獲取遠指針的段
地址 85
7.10 freemem()——釋放已分配DOS內
存塊函數 86
7.11 getcbrk()——獲取Ctrl-Break設置
函數 87
7.12 getdate()——獲取DOS日期函數 88
7.13 getdta()——獲取磁碟傳輸地址
函數 89
7.14 gettime()——獲取系統時間函數 90
7.15 inport()——從硬體埠中輸入一個
字函數 91
7.16 inportb()——從硬體埠中輸入
一個位元組函數 92
7.17 int86()——通用8086軟中斷介面
函數 93
7.18 int86x()——增強型通用8086軟
中斷介面函數 94
7.19 intdos()——通用DOS中斷介面
函數 95
7.20 intdosx()——增強型通用DOS中斷
介面函數 97
7.21 intr()——改變軟中斷介面函數 98
7.22 keep()——退出並繼續駐留函數 99
7.23 MK_FP()——遠指針合成 100
7.24 nosound()——關閉PC揚聲器
函數 101
7.25 outport()——從硬體埠中輸出
一個字函數 102
7.26 outportb()——從硬體埠中輸出
一個位元組函數 103
7.27 parsfnm()——分析文件名函數 104
7.28 peek()——從存儲單元讀一個字
函數 105
7.29 peekb()——從存儲單元讀一個位元組
的函數 106
7.30 poke()——存一個字到給定存儲
單元函數 108
7.31 pokeb()——存一個位元組到給定
存儲單元函數 109
7.32 randbrd()——隨機塊讀函數 110
7.33 randbwr()——隨機塊寫函數 111
7.34 segread()——讀段寄存器值函數 112
7.35 setblock()——修改DOS分配地址
函數 113
7.36 setcbrk()——設置Ctrl-Break
函數 114
7.37 setdate()——設置DOS日期函數 115
7.38 settime()——設置DOS時間函數 116
7.39 setdta()——設置磁碟傳輸地址
函數 117
7.40 sleep()——以秒為單位的延時
函數 118
7.41 sound()——打開PC揚聲器函數 119
7.42 unixtodos()——把UNIX時間轉換
為DOS時間函數 120
第8章 浮點數據處理函數庫:
float.h 122
8.1 _clear87()——清除狀態字函數 123
8.2 _control87()——設置控制字函數 124
8.3 _status87()——獲取浮點處理器狀態
值函數 125
第9章 圖形處理函數庫:
graphics.h 126
9.1 arc()——畫弧線函數 127
9.2 bar()——繪制二維條形圖函數 128
9.3 bar3d()——繪制三維條形圖函數 129
9.4 circle()——畫圓函數 130
9.5 cleardevice()——清除圖形屏幕
函數 131
9.6 clearviewport()——清除圖形視區
函數 132
9.7 closegraph()——關閉圖形系統
函數 133
9.8 detectgraph()——通過檢測硬體確定
圖形驅動程序和模式函數 134
9.9 drawpoly()——繪制多邊形函數 134
9.10 ellipse()——繪制橢圓函數 135
9.11 fillellipse()——繪制並填充橢圓
函數 137
9.12 fillpoly()——繪制多邊形並填充
函數 138
9.13 floodfill()——填充有界區域
函數 139
9.14 getarccoords()——取得最後一次
調用畫弧線坐標函數 140
9.15 getaspectratio()——獲取當前圖形
模式的縱橫比函數 141
9.16 getbkcolor()——獲取當前背景顏色
函數 142
9.17 getcolor()——獲取當前畫線顏色
函數 143
9.18 getdefaultpalette()——返回默認
調色板函數 144
9.19 getdrivername()——獲取圖形驅動
程序名函數 145
9.20 getfillpattern()——獲取用戶定義的
填充模式函數 146
9.21 getfillsettings()——獲取填充模式和
填充顏色函數 147
9.22 getgraphmode()——獲取當前圖形
模式函數 148
9.23 getimage()——將指定區域的點陣圖
調入內存函數 149
9.24 getlinesettings()——獲取當前線型、
模式和寬度函數 150
9.25 getmaxcolor()——獲取最大顏色
函數 151
9.26 getmaxmode()——獲取當前驅動
程序的最大圖形模式 152
9.27 getmaxx()——返回屏幕的最大
x坐標函數 153
9.28 getmaxy()——返回屏幕的最大
y坐標函數 154
9.29 getmodename()——獲取指定圖形
模式的名稱 155
9.30 getmoderange()——獲取給定圖形
驅動程序的模式范圍函數 156
9.31 getpixel()——獲取指定像素的顏色
函數 157
9.32 getpalette()——獲取調色板函數 158
9.33 getpalettesize()——獲取調色板的
顏色數函數 159
9.34 gettextsettings()——獲取當前圖形
文本字體的信息函數 160
9.35 getviewsettings()——獲取當前視口
的信息函數 161
9.36 getx()——獲取當前圖形位置的
x坐標函數 163
9.37 gety()——獲取當前圖形位置的
y坐標函數 164
9.38 graphdefaults()——將所有圖形設置
復位為它們的默認值函數 164
9.39 grapherrormsg()——返回一個錯誤
信息串的指針函數 165
9.40 _graphfreemem()——用戶可修改的
圖形存儲區釋放函數 166
9.41 _graphgetmem()——用戶可修改的
圖形存儲區分配函數 167
9.42 graphresult()——返回最後一次不成功的圖形操作的錯誤代碼函數 168
9.43 imagesize()——返回保存點陣圖像
所需的位元組數函數 169
9.44 initgraph()——初始化圖形系統
函數 170
9.45 line()——在指定兩點間畫直線
函數 172
9.46 linerel()——從當前位置點到相對位
移點繪制直線函數 173
9.47 lineto()——在從當前位置點到指定
點間畫直線函數 174
9.48 moverel()——將當前點移動到一
相對距離函數 175
9.49 moveto()——將當前點移動到(x,y)
函數 176
9.50 outtext()——在視區顯示字元串
函數 176
9.51 outtextxy()——在指定位置顯示
字元串函數 177
9.52 pieslice()——繪制扇形並填充
函數 178
9.53 putimage()——在屏幕上輸出點陣圖
函數 179
9.54 putpixel()——在指定位置繪制像素
函數 180
9.55 rectangle()——繪制矩形函數 181
9.56 restorecrtmode()——將屏幕模式恢復為先前的initgraph設置函數 182
9.57 sector()——繪制並填充橢圓扇區
函數 183
9.58 setactivepage()——設置圖形輸出
活動頁函數 184
9.59 setallpalette()——按指定方式改變
所有的調色板顏色函數 185
9.60 setaspectratio()——設置圖形縱橫比
函數 187
9.61 setbkcolor()——設置當前背景顏色
函數 187
9.62 setcolor()——設置當前畫線顏色
函數 188
9.63 setfillpattern()——選擇用戶定義的
填充模式函數 189
9.64 setfillstyle()——設置填充模式和
顏色函數 191
9.65 setgraphmode()——設置當前圖形
模式函數 192
9.66 setlinestyle()——設置當前畫線寬度
和類型函數 193
9.67 setpalette()——設置有關當前調色板
的信息函數 193
9.68 settextjustify()——設置文本的對齊
方式函數 194
9.69 settextstyle()——設置當前的文本
屬性函數 195
9.70 setusercharsize()——為矢量字體
改變字元寬度和高度函數 196
9.71 setviewport()——為圖形輸出設置
當前視口函數 197
9.72 setvisualpage()——設置可見圖形
頁號函數 198
9.73 setwritemode()——設置輸出
模式 198
9.74 textheight()——獲取以像素為單位
的字元串高度函數 200
9.75 textwidth()——獲取以像素為單位
的字元串寬度函數 201
第10章 輸入/輸出函數庫:io.h 203
10.1 access()——文件訪問許可權設置
函數 204
10.2 chmod()——改變文件訪問方式
函數 205
10.3 close()——關閉文件函數 206
10.4 creat()——創建文件函數 206
10.5 p()——復制文件句柄函數 208
10.6 eof()——文件檢測結束函數 209
10.7 fdopen()——連接文件句柄函數 210
10.8 filelength()——文件位元組數統計
函數 211
10.9 getftime——獲取文件時間函數 211
10.10 isatty()——設備類型檢查函數 212
10.11 lock()——文件共享鎖設置函數 213
10.12 lseek()——移動文件指針函數 214
10.13 open()——打開文件函數 216
10.14 read()——讀文件函數 217
10.15 setmode()——設置文件打開方式
函數 218
10.16 tell()——獲取文件指針位置
函數 219
10.17 unlock()——解除共享鎖函數 219
10.18 write()——寫文件函數 220
第11章 數學函數庫:math.h 221
11.1 abs()——整數絕對值函數 222
11.2 acos()——反餘弦值函數 223
11.3 asin()——反正弦值函數 224
11.4 atan()——反正切值函數 225
11.5 atan2()——X/Y反正切函數 226
11.6 ceil()——不小於某數的最小整數
函數 226
11.7 cos()——餘弦值函數 227
11.8 cosh()——雙曲餘弦值函數 228
11.9 exp()——e的次冪函數 229
11.10 fabs()——浮點數絕對值函數 230
11.11 floor()——不大於某數的最大整數
函數 231
11.12 fmod()——余數函數 232
11.13 frexp()——計算浮點數尾數和指數
函數 233
11.14 hypot()——計算直角三角形斜邊
長度函數 234
11.15 labs()——長整型絕對值函數 235
11.16 ldexp()——計算冪函數 235
11.17 log()——自然對數函數 236
11.18 log10()——對數函數 237
11.19 modf()——取浮點數小數部分
函數 238
11.20 pow()——計算x的y次冪函數 239
11.21 pow10()——計算10的x次冪
函數 240
11.22 sin()——正弦值函數 241
11.23 sinh()——雙曲正弦值函數 242
11.24 sqrt()——平方根函數 243
11.25 tan()——正切值函數 244
11.26 tanh()——雙曲正切值函數 245
第12章 內存相關函數庫:mem.h 246
12.1 memccpy()——位元組復制函數 247
12.2 memchr()——字元搜索函數 248
12.3 memcmp()——串比較函數 249
12.4 memcpy()——位元組復制函數 250
12.5 memicmp()——串比較函數 251
12.6 memmove()——位元組移動函數 252
12.7 memset()——串設置函數 253
第13章 進程管理函數庫:
process.h 254
13.1 spawnl()——創建並運行子程序
函數 255
13.2 spawnle()——創建並運行子程序
函數 256
第14章 函數跳轉函數庫:
setjmp.h 258
14.1 longjmp()——非局部轉移執行
函數 259
14.2 setjmp()——非局部轉移函數 260
第15章 標准庫函數庫:stdarg.h 262
15.1 va_arg()——調用可變參數列表
函數 263
15.2 va_end()——停止使用可變參數
函數 264
15.3 va_start()——開始使用可變參數
函數 265
15.4 vfprintf()——格式化輸出流函數 266
15.5 vfscanf()——執行流中格式化輸入
函數 267
15.6 vprintf()——格式化輸出函數 269
15.7 vsprintf()——格式化輸出串函數 270
15.8 vscanf()——執行格式化輸入
函數 271
15.9 vsscanf()——執行流中格式化輸入
函數 272
第16章 輸入/輸出庫:stdio.h 274
16.1 clearerr()——復位錯誤標志函數 275
16.2 fclose()——關閉流函數 276
16.3 feof()——檢測流上的文件結束符
函數 276
16.4 ferror()——檢測流上的錯誤
函數 277
16.5 fflush()——清除流函數 278
16.6 fgetc()——從流中讀取字元函數 279
16.7 fgetchar()——從流中讀取字元
函數 280
16.8 fgetpos()——取得當前文件句柄
函數 281
16.9 fgets()——從流中讀取字元函數 282
16.10 fopen()——打開流函數 283
16.11 fprintf()——將格式化內容輸出
到流函數 284
16.12 fputchar()——輸出字元到標准
輸出流(stdout)函數 285
16.13 fputs()——送字元串到流中
函數 286
16.14 fread()——從流中讀數據函數 287
16.15 freopen()——替換流函數 288
16.16 fscanf()——從流中執行格式化
輸入內容函數 289
16.17 fseek()——重定位流上的文件
指針函數 290
16.18 fsetpos()——定位流上的文件
指針函數 291
16.19 ftell()——返回當前文件指針
函數 292
16.20 fwrite()——寫內容到流函數 293
16.21 getc()——從流中取字元函數 294
16.22 getchar()——從stdin流中讀字元
函數 295
16.23 getche()——從控制台取字元
(帶回顯)函數 296
16.24 gets()——從流中取字元函數 297
16.25 getw()——從流中取整數函數 298
16.26 perror()——系統錯誤信息 299
16.27 printf()——格式化輸出函數 300
16.28 putc()——輸出一個字元到流中
函數 301
16.29 putchar()——在stdout上輸出
字元函數 301
16.30 puts()——將字元串送到流中
函數 302
16.31 putw()——將字元或字送到流中
函數 303
16.32 rename()——重命名文件函數 305
16.33 remove()——刪除文件函數 305
16.34 rewind()——將文件指針重新指向
流的開頭函數 306
16.35 scanf()——格式化輸入函數 307
16.36 setbuf()——把緩沖區與流相聯
函數 308
16.37 setvbuf()——把緩沖區與流相關
函數 309
16.38 sprintf()——將格式化數據輸出到
字元串中函數 310
16.39 sscanf()——執行字元串中的格式化輸入函數 311
16.40 tmpfile()——以二進制方式打開
暫存文件函數 312
16.41 tmpnam()——創建一個唯一的
文件名函數 313
16.42 ungetc()——把字元退回到輸入
流函數 314
16.43 ungetch()——把字元退回到鍵盤
緩沖區函數 315
第17章 標准工具庫函數庫:
stdlib.h 317
17.1 abort()——異常終止進程函數 318
17.2 atexit()——注冊終止函數 318
17.3 atof()——轉換字元串函數 319
17.4 atoi()——轉換字元串函數 320
17.5 atol()——轉換字元串函數 321
17.6 bsearch()——二分法搜索函數 322
17.7 calloc()——分配主存儲器函數 323
17.8 div()——整數相除函數 324
17.9 ecvt()——轉換浮點數函數 325
17.10 exit()——終止程序函數 326
17.11 fcvt()——轉換浮點數函數 327
17.12 free()——釋放已分配塊函數 328
17.13 gcvt()——轉換浮點數函數 329
17.14 getenv()——獲取環境中字元串
函數 330
17.15 itoa()——轉換整數函數 331
17.16 ldiv()——長整型數相除函數 332
17.17 lfind()——線性搜索函數 333
17.18 lsearch()——線性搜索函數 334
17.19 malloc()——內存分配函數 335
17.20 putenv()——載入環境中字元串
函數 336
17.21 qsort()——快速排序函數 338
17.22 rand()——隨機數發生器函數 339
17.23 random()——隨機數發生器
函數 340
17.24 randomize()——隨機數發生器
函數 340
17.25 realloc()——重新分配主存函數 341
17.26 srand()——初始化隨機數發生器
函數 342
17.27 strtod()——轉換字元串函數 343
17.28 strtol()——轉換字元串函數 344
17.29 swab()——交換位元組函數 345
17.30 system()——發出DOS命令
函數 346
第18章 信號定義函數庫:
signal.h 347
18.1 raise()——發送信號函數 348
18.2 signal()——設置信號對應動作
函數 348
第19章 字元串函數庫:string.h 350
19.1 movmem()——從源字元中移動位元組
到目標字元函數 351
19.2 setmem()——把內存區域的位元組
設置成字元函數 352
19.3 stpcpy()——把字元串復制到數組
函數 353
19.4 strcat()——字元串追加函數 354
19.5 strchr()——查找字元串首次出現
位置函數 355
19.6 strcmp()——字元串比較函數 356
19.7 strcmpi()——字元串比較(不區分
大小寫)函數 357
19.8 strcpy()——復制字元串到數組
函數 357
19.9 strcspn()——字元串查找函數 358
19.10 strp()——字元串復制函數 359
19.11 stricmp()——字元串比較(不區分
大小寫)函數 360
19.12 strlen()——字元串長度函數 361
19.13 strlwr()——將字元串轉換為小寫
形式函數 362
19.14 strncat()——字元串尾部追加
函數 362
19.15 strncmp()——字元串比較函數 363
19.16 strncmpi()——字元串比較(不區
分大小寫)函數 364
19.17 strncpy()——將字元串復制到數組
函數 365
19.18 strnicmp()——字元串比較(不區分
大小寫)函數 366
19.19 strpbrk()——字元串查找函數 367
19.20 strrev()——字元串倒序函數 368
19.21 strset()——將字元串設置成指定
字元函數 369
19.22 strstr()——在字元串中查找指定
字元首次出現位置函數 370
19.23 strtok()——用分隔符分解字元串
函數 371
19.24 strupr()——將字元串轉換為大寫
形式函數 372
第20章 時間函數庫:time.h 373
20.1 asctime()——日期和時間轉換
函數 374
20.2 clock()——測定運行時間函數 375
20.3 ctime()——轉換日期和時間為字元
串函數 376
20.4 difftime()——計算時間差函數 376
20.5 gmtime()——獲取格林尼治結構的
時間函數 377
20.6 localtime()——獲取tm結構的系統
時間函數 378
20.7 time()——獲取或設置時間函數 379
20.8 tzset()——UNIX時間兼容函數 380
Ⅳ C語言參考手冊的內容簡介
本書是關於C語言的詳盡的參考手冊。最新的第5版增加了對C99標準的介紹,更加符合當前讀者學習C語言的需要。
全書分為兩大部分,共24章。第一部分討論了C語言的所有語言特徵,包括詞法、預處理機制、聲明、類型、表達式、語句以及函數等基本語言特性。第二部分討論了C語言的標准庫,根據它們不同的功能分別詳細介紹。為幫助讀者理解相關概念,本書在討論C語言及其標准庫的各方面問題時,提供了許多實例和解釋。在第一部分的各章中還提供了練習題,書後則給出了主要練習的解答。這些練習的主要目的是幫助讀者理解C語言的基本機制及其重要細節,其中並不涉及復雜的程序設計技術與問題。
本書可以作為高等院校計算機專業C語言課程的教材和參考書,對於一般的C程序員也有重要的參考價值。
Ⅵ 北航的991資料庫與c語言程序設計考什麼書
先學譚浩強的《C語言程序設計》,這本書比較簡單可以入個門隨便考個全國二級
不過要想學好C語言這樣還遠遠不夠,建議多學習,精通C語言。一下是我搜集的書!!
比如《C語言之四書五經》中介紹的4本。(雖然這些書很多已經絕版了,但我相信電子版也是很有益處。況且,如果你真的想看,我相信你一定有辦法搞的到。)這些書你會在很短的時間內看完(比如一兩個月),這取決於你的基礎和悟性。之後要看那些書呢?我不妨再列幾本。Bjarne Stroustrup的《C++程序設計語言》(The C++ Programming Language)一定要看,這本書裡面對於C的一些基礎概念的定義,比我見過的其他任何C語言書都要全,都要仔細;Bjarne Stroustrup的《C++語言的設計與演化》(The Design and Evolution of C++)和David R.Hanson 的《C語言介面與實現 創建可重用軟體的技術》(C Interfaces and Implaementations Techniques for Creating Reusable Software)一定要看,這兩本書講述了如何用C來實現異常處理、實現類型的封裝和擴展等一些大的項目中經常用到的高級技術。
另外,即使是最經典最權威的書,也沒有辦法面面俱到,所以手邊常備一本《C語言參考手冊》是十分必要的。《C語言參考手冊》就是《C Reference Manual》,是C語言標準的詳細描述,包括絕大多數C標准庫函數的細節,算得上是最好的標准C語言的工具書。順便提一句,最新的《C程序設計語言》是根據C89標准修訂的,而《C語言參考手冊》描述的是C99標准,二者可能會有些出入,建議按照C99標准學習。還有一本《C和指針》,寫得也是相當地不錯,英文名是《Pointers on C》,特別地強調指針的重要性,
Ⅶ 《c語言參考手冊原書第五版》pdf下載在線閱讀全文,求百度網盤雲資源
《c語言參考手冊原書第五版》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1PhXbkkQU-mOG5XHWgX-X9A
簡介:c語言參考手冊第五版涵蓋了傳統C語言、C89,C95.C99等所有C語言版本的實現,同時討論了C++與C語言兼容的部分。全書自上而下介紹了C語言的詞法結構、預處理器、聲明、類型表達式、語句、函數和運行庫,是所有C語言編程人員必備的參考書。
Ⅷ C語言參考手冊的介紹
《C語言參考手冊》是2007年人民郵電出版社出版的圖書,作者是哈濱遜(Harbison,S.P)。
Ⅸ C語言函數參考手冊的前言
C語言作為當前程序開發中最流行的編程語言之一,以其簡單、高效、快捷、方便的特性吸引了大批用戶。根據筆者使用C語言的經驗,相信對C語言程序開發人員來說,C語言函數參考手冊是必需的。因此,筆者編寫了本書,希望能真正幫助C語言程序開發人員在編程時實現易查、易學、易用,並使其成為程序開發必備的工具書。
本書內容
本書按照C語言庫函數的頭文件進行分類,每個頭文件為一章內容,分別介紹了對應頭文件中常用的C語言函數。對每個頭文件中的函數按照字母進行排序,其中每個函數都按照功能、語法來介紹,在每個方法後都有相關的示例。
本書特點
* 即查、即學、即用
本書將查、學、用結合為一體,讀者能夠使用本書進行快速查詢和快速應用,既是實用的工具書,也是學習的參考書。
* 字母排序,快捷搜索
本書在講解C語言函數時按照頭文件進行分類,用戶在使用時可以根據頭文件快速地縮小查找范圍,並且每個頭文件以字母順序進行排序,以便讀者更快、更准確地查找相關內容。
* 內容全面,示例豐富
本書內容涵蓋了學習C語言應用的各方面技術。為了便於讀者快速掌握每個知識點,每個知識點都給出對應的一個或多個示例,並提供了詳盡的注釋。
* 精彩欄目,貼心提醒
本書根據需要在各章使用了「注意」、「說明」和「技巧」等小欄目,讓讀者可以在學習過程中更輕松地理解相關知識點及概念,並輕松地掌握個別技術的應用技巧。
本書配套資源
本書提供了內容豐富的配套資源,包括源程序、素材,以及模塊庫、案例庫、題庫、素材庫等多項輔助內容,讀者朋友可以通過如下方式獲取。
第1種方式:
(1)登錄清華大學出版社的網站,在網頁右上角的搜索文本框中輸入本書書名(注意區分大小寫和留出空格),或者輸入本書關鍵字,或者輸入本書ISBN號(注意去掉ISBN號間隔線「-」),單擊「搜索」按鈕。
(2)找到本書後單擊超鏈接,在該書的網頁下側單擊「網路資源」超鏈接,即可下載。
第2種方式:
訪問本書的新浪微博:C語言圖書,找到配套資源的鏈接地址進行下載。
讀者對象
本書適合以下人群閱讀。
? 初學編程的自學者 ? 編程愛好者
? 大中專院校的老師和學生 ? 相關培訓機構的老師和學員
? 初、中級程序開發人員 ? 程序測試及維護人員
? 參加實習的程序員
Ⅹ 學習C語言有什麼書適合新手看
學習C語言不是一朝一夕的事情,但也不需要花費十年時間才能精通。如何以最小的代價學習並精通C語言是本文的主題。請注意,即使是「最小的代價」,也絕不是什麼捷徑,而是以最短的時間取得最多的收獲,同時也意味著你需要經歷艱苦的過程。
一、要讀就讀好書,否則不如不讀
所有初學者面臨的第一個問題便是:如何選擇教材。好的開始是成功的一半,選擇一本優秀的教材是事半功倍的關鍵因素。不幸的是,學校通常會幫你指定一本很差勁的C語言課本;而幸運的是,你還可以再次選擇。
大名鼎鼎的譚浩強教授出了一本《C語言程序設計》,據說發行量有超過400萬,據我所知,很多學校都會推薦這本書作為C語言課本。雖然本人的名字(譚浩宇)跟教授僅僅一字之差,但我是無比堅定地黑他這本書的。這本書不是寫給計算機專業的學生的,而是給那些需要考計算機等級考試的其它專業學生看的。這本書的主要缺點是:例子程序非常不專業,不能教給你程序設計應該掌握的思考方式;程序風格相當地不好,會讓你養成亂寫代碼的惡習;錯誤太多,曾經有人指出過這本書的上百個錯誤,其中不乏關鍵的概念性錯誤。好了,這本書我也不想說太多了,有興趣大家可以網路一下:)
Kernighan和 Ritchie的《The C Programming Language》(中譯名《C程序設計語言》)堪稱經典中的經典,不過舊版的很多內容都已過時,和現在的標准C語言相去甚遠,大家一定要看最新的版本,否則不如不看。另外,即使是最經典最權威的書,也沒有辦法面面俱到,所以手邊常備一本《C語言參考手冊》是十分必要的。《C語言參考手冊》就是《C Reference Manual》,是C語言標準的詳細描述,包括絕大多數C標准庫函數的細節,算得上是最好的標准C語言的工具書。順便提一句,最新的《C程序設計語言》是根據C89標准修訂的,而《C語言參考手冊》描述的是C99標准,二者可能會有些出入,建議按照C99標准學習。還有一本《C和指針》,寫得也是相當地不錯,英文名是《Pointers on C》,特別地強調指針的重要性,算是本書的一個特點吧。不過這本書並不十分適合初學者,如果你曾經學過C語言,有那麼一些C語言的基礎但又不是很扎實,那麼你可以嘗試一下這本書。我相信,只要你理解了指針,C語言便不再神秘。
如果你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊子,內容非常非常地有趣。要注意一點,這本書是二十多年前寫成的,裡面提到的很多C語言的缺陷都已被改進,不過能夠了解一些歷史也不是什麼壞事。然後你可以挑戰一下《Expert C Programming》(中譯名《C專家編程》),書如其名,這本書頗具難度,一旦你仔細讀完並能透徹理解,你便可以放心大膽地在簡歷上寫「精通C語言」了。
切記一個原則,不要讀自己目前還看不懂的書,那是浪費生命。如果你看不懂,那你一定是缺失了某些必需基礎知識。此時,你要仔細分析自己需要補充哪些內容,然後再去書店尋找講述的這些內容的書籍。把基礎知識補充完畢再回頭來學習,才會真正的事半功倍。
二、Unix/Linux還是Windows,這是個很大的問題
不同的編程環境會造就出不同思維的程序員。Windows的程序員大多依賴集成開發環境,比如Visual Studio,而Unix程序員更加鍾愛Makefile與控制台。顯而易見,集成開發環境更容易上手,在Windows上學習C語言,只需要會按幾個基本的Visutal C++工具欄按鈕就可以開始寫Hello, World!了,而在Unix下,你需要一些控制台操作的基本知識。有人也許認為Unix的環境更簡潔,但習慣的力量是很大的,大家都很熟悉 Windows的基本操作,而為了學習C語言去專門裝一個Unix系統,似乎有點不劃算。
對於一個只懂得Windows基本操作、連 DOS是什麼都不知道的新手而言,盡快做一些有趣而有意義的事情才是最重要的。用C語言寫一個小程序遠比學習ls、cat等命令有趣,況且我們要專注於C 語言本身,就不得不暫時忽略一些東西,比如編譯鏈接的過程、Makefile的寫法等等等等。
所以我建議初學者應該以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作為主要的學習環境,而且千萬不要在IDE的使用技巧上過多糾纏,因為今後你一定要轉向Unix環境的。Visual C++ 6.0使用很方便,調試也很直觀,但其默認的編譯器對C標準的支持並不好,而Dev C++使用gcc編譯器,對C99的標准都支持良好。使用順帶提一下,很多大學的C語言課程還在使用Turbo C 2.0作為實驗環境,這是相當不可取的,原因其一是TC 2.0對C標准幾乎沒有支持,其二是TC 2.0編譯得到的程序是16位的,這對今後理解32位的程序會造成極大的困擾(當然,用djgpp之類的東西可以使TC 2.0編譯出32位程序,不過那過於復雜了)。
等你學完一本C語言的教材,你一定要轉向Unix平台繼續學習,幾乎所有的C語言高級教程都是基於Unix平台的(比如《C專家編程》)。轉變的過程是痛苦的,你需要面對的是各種紛繁復雜的命令,完全不同於Windows平台的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和習慣更加符合C語言的思考方式和習慣。在Unix下,你可以找到無數優秀的源代碼供你盡情閱讀,你可以方便地查看某個庫函數的聯機手冊,還可以看到最優秀的代碼風格(說到代碼風格,我會專門寫一篇文章詳細敘述)。
歸結起來就是一句話:初學C語言,建議使用Windows系統和集成開發環境,在准備向「高手」方向努力時,請先轉向Unix平台。
三、萬事俱備,你就是東風
書已選定,環境配置完成,正所謂萬事俱備,只欠你自己的努力了。請從書的前言開始,仔細地閱讀手頭的教材,很多人看書喜歡直接從第一章開始看,這是錯誤的做法。前言是作者對整本書的大體介紹,作者一般會告訴你需要什麼基礎才能夠順利閱讀本書,這可以幫助你檢驗自己的基礎知識是否已經具備。看完前言,還要瀏覽一下目錄,了解一下書的整體結構,順便給自己安排一下學習計劃。
學習C語言,必需注意每一個細節,書上的例子代碼一定要自己親自敲一遍,編譯執行輸出都跟書上說的一致才能算是學完了一個例子,如果不一致,就要仔細找原因。出了書本上有的例子,自己還要「創造」一些例子,比如學習運算符優先順序的時候,可以寫幾個相同的表達式,在不同的位置加上括弧,看看有哪些不同的行為,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的書上的例子以及改造之後的例子,還有自己「創造」的例子,都應該仔細地歸類保存,並且要在源代碼中寫上簡短的注釋,闡述這個例子的意圖。
例子之後就是習題了,我建議初學者把所有的習題都獨立做一遍,然後對照答案的代碼,看看自己的代碼有那些不足,再試著修改自己的代碼。很多人不重視習題,這是極大的錯誤,因為作者通常會在習題中說明一些重要的道理,而不是單純地檢驗前面的知識。
也許你認為這樣學習太慢,其實不然。學得細致就不用走回頭路,等你學到後面才發現自己前面沒搞清楚,那才是真的得不償失。一般說來,整本書讀完,你應該完成數千行乃至上萬行的代碼,無論是原封不動照抄書上的,還是自己心血來潮寫就的,都是今後繼續學習的一筆財富。以我自己舉例,閱讀《Windows核心編程》時(我只閱讀了3/4的內容),除了抄書上的代碼,還自己寫了很多例子,一共有5574行(用unix下的wc工具統計),時隔多日,我早已記不清 Windows的系統編程了,但只要花幾分鍾翻出以前的代碼看看,便會重新瞭然於胸。所謂好記性不如爛筆頭,就是這個道理。
仔細讀書、認真抄寫源代碼、獨立完成習題外加更進一步的實驗,最後將所有的代碼留下,成為自己的經驗和財富,絕對的辛苦,也絕對的事半功倍。當然,這種方式只適合學習需要精通的技術,如果不是學習C語言,你還要具體情況具體分析。
寫到最後,還有非常非常重要的一點沒有提及──代碼風格,從最開始學習就必須強迫自己模仿最優秀的代碼風格。因為代碼風格太重要內容也太多,我會用專門的一篇文章來詳細討論,請大家關注《程序員之路──關於代碼風格》。