久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

程序員學習C語言的十大好處

時間:2019-05-12 21:46:50下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《程序員學習C語言的十大好處》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《程序員學習C語言的十大好處》。

第一篇:程序員學習C語言的十大好處

www.tmdps.cn 程序員學習C語言的十大好處

凡是程序員都知道C語言也都學習過C語言,因為它是程序員最基礎的學習內容,往往最基礎的也是最重要的并且是對我們最有幫助的。那就讓我們來談談程序員學習C語言的十大好處吧!

1)相比較其他的編程語言(像C++,JAVA),C語言是個低級語言。從總體上來說,低級的編程語言可以讓你更好的了解計算機。

2)設備驅動程序和操作系統只能用C語言來編寫。現在,你可能還從來沒有編寫過一個設備驅動程序或者一個操作系統,但是如果你需要去修改他們的時候,怎么辦?

3)如果你想要得到一份編寫微控制器程序的工作的時候,該怎么辦?他們都是用C語言編寫的。就因為不想學習一門新的語言,你就準備限制你能得到工作的機會嗎?

4)C的程序比其他用別的語言寫的程序,實現相同的功能,它用的代碼行數更少,而它帶來的運行效率卻更快。有時候,你的程序所需要的速度,中國自學編程網,只有C語言能做到。

www.tmdps.cn

5)如果你學習過C語言,你就能學習現在任何的高級編程語言。因為所有的高級語言都是以C語言為基礎的(像JAVA,C++,C#等等)。

6)因為C語言已經存在很多年了,它有廣泛的使用團體并且有大量的現成代碼可以利用。這就使你能在過去程序的基礎上,快速和高效的編寫新的算法和函數。

7)C語言是一個開源組織的語言。一個開源組織的產物--LINUX,就是用C語言寫的。如果你會C語言,你就能參加這個組織并且還能向眾多的開源組織投稿,比如參加Source Forge并且給他們投稿。

8)C語言是唯一一個向你闡述指針的本質的語言。而C#和Java干脆跳過了指針這個題目。可是指針確實使C語言變得更加強大。

9)找編程開發方面的工作時,C語言仍然是最普遍需要的語言。所以它值得你花時間去學會它。

10)任何里面有微處理器的設備都支持C語言。從微波爐到手機,都是由C語言技術來推動的。

(ps:本文章由北大青鳥廣安門校區搜集自互聯網)

第二篇:29.如何學習C語言-----程序員之路

作者:t5k5 日期:2007-10-24

一周沒有寫東西了,今天上校內的時候有個好友分享了這篇帖子,深有感觸,以后堅決不用TC了,去下個VC++來學習C,哈哈~~還說我們用的教材太LJ了,這個我倒不怎么清楚,因為沒學懂啊。。

看文章結尾的鏈接就知道是CSDN上的了,以下是原文:

=================T5K5的學習分割線=================

學習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語言,你還要具體情況具體分析。

寫到最后,還有非常非常重要的一點沒有提及──代碼風格,從最開始學習就必須強迫自己模仿最優秀的代碼風格。因為代碼風格太重要內容也太多,我會用專門的一篇文章來詳細討論,請大家關注《程序員之路──關于代碼風格》。

第三篇:程序員教你學C語言

程序員教你學C語言

很多小伙伴都老是會碰到疑問,其實還是基礎沒打扎實,這些題如果你不看答案你能知道多少呢?如果還有很多不知道就證明基礎沒打扎實,如果你還在入門糾結,如果你還在苦惱怎么入門!小編有個建議,可以加小編弄的一個C語言交流基地,大家可以進入交流基地:565122788,里面新手入門資料,可以說從零到項目實戰,都是可以免費獲取的,還有程序員大牛為各位免費解答問題,熱心腸的小伙伴也是蠻多的。不失為是一個交流的的好地方,小編在這里邀請大家加入我的大家庭。歡迎你的到來。一起交流學習!共同進步!小編等你!還有前面沒有看的同學最好從程序員教你學C語言

(一)開始看哦,尤其是基礎還沒打扎實的同學!

今天只舉幾個例子,主要幫大家鞏固循環的知識,每個例子大家都要敲鍵盤敲出來,然后運行成功了才算掌握了,不然還是眼高手低,看上去懂了,一到寫程序又犯難了。我發現有不少人熱衷于打印圖形,所以就弄了幾個圖形。第一個是打印金字塔。代碼和運行圖如下:

首先定義了兩個變量i、j,然后使用system(“color 0e”)改變顏色。接下來會進入一個外層循環,其中的i代表層數,我們可以看到這里金字塔有6層,所以i的取值范圍也是0<=i<6,第一次進循環時,i=0,然后到第一個內層循環,這個循環的初始條件是j=6-i=6,結束條件是j>0,所以這里會打印6個空格,然后來到第二個內層循環,這個循環的初始條件是j=1;結束條件是j<=2*i+1=1,所以這里會打印一個星,然后會以printf(“ ”)打印一個換行結束第一次外層循環,然后開始第二次外層循環,如此反復,最后就得到了如上所示的圖形。

不理解的話可以把外層循環for(i = 0;i < 6;i++)的i<6改成i<3,這樣就只會打印三行,可以便于理解。

第二個是打印菱形,其實就是上一個圖形的變化,效果和代碼如下:

可以看到,我們這個圖形是上下對稱的,所以打印菱形上半部分(就是上一個例子的打印金字塔)的代碼和下半部分的代碼十分相似,只是把外層循環的頭部從for(i = 0;i < 6;i++)變成了for(i = 6;i >= 0;i--),大家理解一下代碼,菱形的上半部分,打印的星星數會越來越多,從1到3再到5再到7...而星星前面的空格數會越來越少,從6到5再到4再到3...而菱形的下半部分剛好反過來了,所以只需要修改很少的代碼就能實現菱形了

接下來是打印一個五角星,這是之前一個萌萌噠妹紙學習的代碼,因為我比較懶啦,所以沒做修改就直接拿來了,希望不要介意 #include #include void main(){ int n1,j1,k1;//n1表示行數,j1表示空格,k1表示*號 int n2,j2,k2;int n3,j3,k3;int n4,j4,k4;int a4,b4;system(“color 0e”);for(n1=1;n1<6;n1++)//1;n1<=6就是5行;n1++后+1 n1=2 { for(j1=1;j1<19-n1;j1++)//j1=1;j1<19-n1打印19-1=18個空格;j1++后+1 j1=2 printf(“ ”);for(k1=1;k1<=2*n1-1;k1++)//k1=1;k1<=2*n1-1打印2*1-1=1個*號;j1++后+1 j1=2 printf(“*”);printf(“ ”);} for(n2=1;n2<5;n2++){ for(j2=1;j2<3*n2-3;j2++)//j2=1;j2<3*n2-3;j2=3*1-3打印0個空格;j2++ printf(“ ”);for(k2=1;k2<=42-6*n2;k2++)//k2=1;k2<=42-6*n2;k2<=42-6*1打印36個*;k2++ printf(“*”);printf(“ ”);} for(n3=1;n3<3;n3++){ for(j3=1;j3<12-n3;j3++)printf(“ ”);for(k3=1;k3<=12+2*n3;k3++)printf(“*”);printf(“ ”);} for(n4=1;n4<5;n4++){ for(j4=1;j4<10-n4;j4++)printf(“ ”);for(k4=1;k4<=10-2*n4;k4++)printf(“*”);for(a4=1;a4<6*n4-3;a4++)printf(“ ”);for(b4=1;b4<10-2*n4;b4++)printf(“*”);printf(“ ”);} }

這個程序很明顯分成了四塊,由四個外層for循環構成,for(n1=1;n1<6;n1++)打印最上面5行,for(n2=1;n2<5;n2++)打印中間4行,for(n3=1;n3<3;n3++)打印下面2行行,for(n4=1;n4<5;n4++)打印最下面4行,大家自己理解下代碼,不懂的就問

最后一個圖形是我剛剛寫的六芒星,完整的代碼輸出結果是這樣的:

學習交流群(565122788)

但是我這里只給出一半代碼,剩下的需要大家自己學完成,當是對自己的考驗也好,作業也罷,還是希望大家能夠自己親自動手試一下的。不懂的就再問 #include #include void main(){ inti,j;system(“color 0e”);//輸出第一行 for(j = 15;j >= 1;j--){ printf(“ ”);} printf(“* ”);//輸出接下來四行 for(i = 1;i <= 4;i++){ for(j = 14;j >= i;j--){ printf(“ ”);} printf(“*”);for(j = 1;j < 2*i;j++){ printf(“ ”);} printf(“* ”);} //輸出最長的一行 for(i = 1;i < 17;i++){ printf(“* ”);} printf(“ ”);//打印接下來四行 for(i = 0;i < 4;i++){ for(j = 0;j < i+1;j++){ printf(“ ”);} printf(“*”);for(j = 7;j > 2*i;j--){ printf(“ ”);} printf(“*”);for(j = 0;j < 2*i+11;j++){ printf(“ ”);} printf(“*”);for(j = 7;j > 2*i;j--){ printf(“ ”);} printf(“* ”);} //輸出接下來一行,就2個星 printf(“ * * ”);} 這一半代碼的輸出結果是:

更多的數據類型和循環

前面我們說為了讓計算機能夠識別一個變量到底占了多少字節,我們需要為變量定義數據類型,那究竟有多少種數據類型呢,其實前面我給出32個關鍵字里面就已經包括了,short、int、long、char、float、double這6個關鍵字代表了C語言里的6中基本數據類型,怎么去理解它們呢,舉個例子:大家都見過剪卡器吧?(沒見過?手機卡總見過吧)。我們知道不同的手機使用的手機卡的大小是有區別的,我們通常是用剪卡器,拿著它把原來移動的大卡這么一咔,一個小卡就出來了,不同型號的剪卡器咔出來的手機卡大小不一樣,比如蘋果手機的卡就特別小,三星的卡稍微大點......,現在我們聯想一下,short、int、long、char、float、double這六個東東是不是很像不同類型的剪卡器?拿著它們在內存上咔咔咔,不同大小的內存就分配好了。在32位的系統下short咔出來的內存大小是2個字節(也叫byte);int咔出來的內存大小是4個byte;long咔出來的內存大小是4個byte;float咔出來的內存大小是4個byte;double咔出來的內存大小是8個byte;char咔出來的內存大小是1個byte。接下來我們就寫程序看看這些基本的數據類型在我們自己電腦上的大小吧。

其中sizeof關鍵字可以確定給定的類型占據了多少字節,它后面可以直接跟類型的關鍵字,比如sizeof(int),也可以跟變量(比如sizeof(i))甚至是表達式,比如最后一行的sizeof(i-1),它的結果是表達式的計算結果所占據的字節數,i-1的結果為0,0也是整數,所以占據的字節數為4。(注意這里是指的32位的編譯環境下的情況,具體平臺大家可以運行這個程序測試一下)。然后接下來是對這6種基本數據的使用情況

可以看到,兩組都是同樣的數據,但是最后打印出來的結果,上面一組數據中字符變量、浮點變量和雙精度變量打印出來的結果都不對。原因是什么呢,因為是printf的第一個參數,%d這個符號,前面的%是占位符,后面的這個d代表是以整數形式打印出來,而不同的數據類型要以不同的形式打印出來,所以總結一下,%c表示打印字符、%f是打印浮點數、%lf是打印雙精度,%hd、%d、%ld分別是打印短整型、整型和長整型

關于上面的字符c='a'為什么按%d整數打印是97的問題,這個其實就涉及到ascii碼表了,我們知道在計算機底層,所有的數據都是以0和1存儲的,那計算機如何識別像a、b、c這樣的字符呢,其他它們最終在計算機里也是被以0、1數據的形式存放的,而且美國人就為它們指定了一個統一的標準,就是ascii編碼,圖片如下

可以看到小寫字符a的ascii碼值的十進制就是97,而大寫A的ascii碼是65,printf中的%d就是以十進制整數方式輸出它在內存中的數據,所以就輸出了97 接下來將大家使用這些基本數據類型最容易犯錯的一點,就是極限值,我們知道計算機里的一位只能表示0或者1,而兩位只能表示0、1、2、3,依次類推,我們如果有N位,那也只能表示2的N次方個數據,我們說int是4字節的,就是32位,所以int也是有極限值的,那是不是就是2的32次方呢,理論上來講,它能表示這么多的數據,但是因為有正負數的存在,這個值還得減半,我們接下來的程序就是測試你機器上的這些基本類型的極限值的,注意unsigned這個修飾符就是無符號的數,比如unsigned int,這就是無符號整數,這樣它能表示的范圍就是0~4294967295(2的32次方-1)了。不小心極限值的話,就會經常犯錯

C/C++學習交流群,歡迎大家一起來交流提升。565122788進群就能獲取C語言新手學習大禮包

另外兩種循環:while循環和do...while循環(還有一種可以構成循環的是goto,但是先不講).while循環的格式: while(表達式){ 循環執行語句;} 下一條語句;while循環和for循環的區別在于它的循環頭部沒有賦初值的操作,一開始就會進行循環表達式的判斷,如果表達式成立,則進入循環,否則跳到循環的下一條語句。看一個例子 # include void main(){ inti;printf(“please enter the right password ”);scanf(“%d”,&i);while(i!= 520){ printf(“please enter the right password ”);scanf(“%d”,&i);} printf(“right!good boy!”);} 程序一開始定義了整數變量i,然后提示用戶輸入密碼,這時我們輸入i的值,來到while(i!= 520)這句,i!= 520這句是如果i不等于520,就進入循環里面,并且提示密碼輸入錯誤,用戶重新輸入密碼,再次輸入密碼后,會再次來到循環頭部,如果i!= 520成立,會再次進入循環提示用戶錯誤和重新輸入,直到用戶輸入正確的數(也就是520)后i!= 520才不成立,就退出了循環。再來看看do while循環的格式: do { 循環執行語句;}while(表達式);循環下一句;do while和while的區別是它會首先執行一遍循環執行語句(所以do while最少都要執行一次),然后再循環尾部判斷表達式是否成立,如果成立就繼續進入循環,否則到達循環下一句。同樣的例子 # include void main(){ inti;do { printf(“please enter the right password ”);scanf(“%d”,&i);}while(i!= 520);printf(“right!good boy!”);} 仔細對比它們的差異,假設我們第一次i的值就輸入520,那么while循環里的循環執行語句就不會執行,但是do while還是會執行一次循環執行語句再在循環尾部判斷表達式是否成立

第四篇:程序員之路──如何學習C語言并精通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語言,你還要具體情況具體分析。

寫到最后,還有非常非常重要的一點沒有提及──代碼風格,從最開始學習就必須強迫自己模仿最優秀的代碼風格。

第五篇:十大C語言經典程序

計算機二級C語言程序必背

1、/*輸出9*9口訣。共9行9列,i控制行,j控制列。*/ #include main(){int i,j,result;for(i=1;i<10;i++)

{ for(j=1;j<10;j++)

{

result=i*j;

printf(“%d*%d=%-3d”,i,j,result);/*-3d表示左對齊,占3位*/

}

printf(“n”);/*每一行后換行*/

} }

2、/*古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少? 兔子的規律為數列1,1,2,3,5,8,13,21....*/ main(){ long f1,f2;int i;f1=f2=1;for(i=1;i<=20;i++)

{ printf(“%12ld %12ld”,f1,f2);

if(i%2==0)printf(“n”);/*控制輸出,每行四個*/

f1=f1+f2;/*前兩個月加起來賦值給第三個月*/

f2=f1+f2;/*前兩個月加起來賦值給第三個月*/

} }

3、/*判斷101-200之間有多少個素數,并輸出所有素數及素數的個數。

程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。*/ #include “math.h” main(){

int m,i,k,h=0,leap=1;

printf(“n”);

for(m=101;m<=200;m++)

{ k=sqrt(m+1);

for(i=2;i<=k;i++)

if(m%i==0)

{leap=0;break;}

if(leap)

/*內循環結束后,leap依然為1,則m是素數*/

{printf(“%-4d”,m);h++;

if(h%10==0)

printf(“n”);

}

leap=1;

}

printf(“nThe total is %d”,h);}

4、/*一個數如果恰好等于它的因子之和,這個數就稱為“完數”。例如6=1+2+3.編程

找出1000以內的所有完數。*/ main(){

static int k[10];

int i,j,n,s;

for(j=2;j<1000;j++)

{

n=-1;

s=j;

for(i=1;i

{if((j%i)==0)

{ n++;

s=s-i;

k[n]=i;

}

}

if(s==0)

{printf(“%d is a wanshu: ”,j);

for(i=0;i

printf(“%d,”,k[i]);

printf(“%dn”,k[n]);

} } }

5、/*下面程序的功能是將一個4×4的數組進行逆時針旋轉90度后輸出,要求原始數組的數據隨機輸入,新數組以4行4列的方式輸出,請在空白處完善程序。*/ main(){ int a[4][4],b[4][4],i,j;

/*a存放原始數組數據,b存放旋轉后數組數據*/

printf(“input 16 numbers: ”);/*輸入一組數據存放到數組a中,然后旋轉存放到b數組中*/

for(i=0;i<4;i++)

for(j=0;j<4;j++)

{ scanf(“%d”,&a[i][j]);

b[3-j][i]=a[i][j];

}

printf(“array b:n”);

for(i=0;i<4;i++)

{ for(j=0;j<4;j++)

printf(“%6d”,b[i][j]);

printf(“n”);

} }

6、/*編程打印直角楊輝三角形*/ main(){int i,j,a[6][6];for(i=0;i<=5;i++)

{a[i][i]=1;a[i][0]=1;} for(i=2;i<=5;i++)

for(j=1;j<=i-1;j++)

a[i][j]=a[i-1][j]+a[i-1][j-1];for(i=0;i<=5;i++)

{for(j=0;j<=i;j++)

printf(“%4d”,a[i][j]);

printf(“n”);} }

7、/*通過鍵盤輸入3名學生4門課程的成績,分別求每個學生的平均成績和每門課程的平均成績。

要求所有成績均放入一個4行5列的數組中,輸入時同一人數據間用空格,不同人用回車

其中最后一列和最后一行分別放每個學生的平均成績、每門課程的平均成績及班級總平均分。*/ #include #include main(){ float a[4][5],sum1,sum2;

int i,j;

for(i=0;i<3;i++)

for(j=0;j<4;j++)

scanf(“%f”,&a[i][j]);

for(i=0;i<3;i++)

{ sum1=0;

for(j=0;j<4;j++)

sum1+=a[i][j];

a[i][4]=sum1/4;

}

for(j=0;j<5;j++)

{ sum2=0;

for(i=0;i<3;i++)

sum2+=a[i][j];

a[3][j]=sum2/3;

}

for(i=0;i<4;i++)

{ for(j=0;j<5;j++)

printf(“%6.2f”,a[i][j]);

printf(“n”);

} }

8、/*完善程序,實現將輸入的字符串反序輸出,如輸入windows 輸出swodniw。*/ #include main(){ char c[200],c1;

int i,j,k;

printf(“Enter a string: ”);

scanf(“%s”,c);

k=strlen(c);

for(i=0,j=k-1;i

{ c1=c[i];c[i]=c[j];c[j]=c1;}

printf(“%sn”,c);

}

指針法:

void invert(char *s){int i,j,k;char t;k=strlen(s);for(i=0,j=k-1;i

{ printf(“cannot open the filen”);

exit(0);

}

printf(“input str:n”);gets(str);

printf(“n%s”,str);

fprintf(fp,“%s”,str);invert(str);

printf(“n%s”,str);fprintf(fp,“n%s”,str);

fclose(fp);}

9、/*下面程序的功能是從字符數組s中刪除存放在c中的字符。*/ #include main(){ char s[80],c;

int j,k;

printf(“nEnter a string: ”);

gets(s);

printf(“nEnter a character: ”);

c=getchar();

for(j=k=0;s[j]!= '

主站蜘蛛池模板: 亚洲精品国产精品乱码在线观看| 成人精品视频一区二区| 精品国产一区二区三区麻豆| 婷婷成人小说综合专区| 国产精品r级最新在线观看| 高大丰满欧美熟妇hd| y111111少妇影院无码| www一区二区www免费| 欧美成人精品三级网站| 国产精品久久久久久久久久| 精品人妻无码一区二区色欲产成人| 国产麻豆天美果冻无码视频| 国产麻豆成人精品av| 亚洲色无码中文字幕yy51999| 在线永久看片免费的视频| 国产成人a视频高清在线观看| 欧美亚洲日韩不卡在线在线观看| 久久不见久久见www免费| 欧美xxxxx性喷潮| 亚洲精品国产suv一区| 东北女人毛多水多牲交视频| 77se77亚洲欧美在线| 欧美成人免费视频一区二区| 无码粉嫩虎白一线天在线观看| 国产麻花豆剧传媒精品mv在线| 137肉体摄影日本裸交| 午夜无码片在线观看影院| 国产欧美在线一区二区三| 无码丰满熟妇bbbbxxx| 一本大道东京热无码一区| 国产无套中出学生姝| 午夜男女爽爽影院免费视频下载| 人妻少妇精品中文字幕av蜜桃| 欧美疯狂做受xxxx高潮小说| 亚洲加勒比久久88色综合| 欧美精品一区二区性色a+v| 日本中文一区二区三区亚洲| 噜噜吧噜吧噜吧噜噜网a| 欧美黑人又粗又大的性格特点| 国产精品视频色尤物yw| 熟妇人妻系列aⅴ无码专区友真希|