兄弟,我也很喜歡C語言,交個朋友吧。
深入學(xué)習(xí)C語言的具體步驟希望能解答下
兄弟,我也很喜歡C語言,交個朋友吧。
看了下你寫的素?cái)?shù)代碼,結(jié)構(gòu)混亂,可閱讀性差,我改了下#include<stdio.h>#include<stdlib.h>#include<math.h>int Judge(int num){ int i; for (i=3; i<=sqrt(num); i+=2) {if (0 == num % i){ return 0;} } return 1;}void main(void){ int num = 3; int limit = 3; FILE *fp; fp = fopen("123.txt", "w"); printf("請輸入數(shù)字 : "); scanf("%d", &limit); if (num > limit) {exit(0); } fprintf(fp, "%d", 2);do {if (Judge(num)){ fprintf(fp, "%d", num);}num += 2;} while (num <= limit); fclose(fp);}另外一種算法#include<stdio.h>#include<stdlib.h>#include<math.h>void Judge(int num, int limit, int *data){//篩選法 雖然浪費(fèi)了點(diǎn)空間,但時間效率更高 int count; int flag = (int)sqrt(limit); while (num < limit + 1) {data[num++] = 1; } num = 2; while (num < flag) {count = 2 * num;while (count < limit + 1){ data[count] = 0; count += num;}count = num + 1;while (data[count] == 0 && count <= flag){ count++;}num = count; }}void main(void){ int num = 2; int limit; int *data = NULL; FILE *fp; fp = fopen("123.txt", "w"); printf("請輸入數(shù)字 : "); scanf("%d", &limit); if (num > limit) {exit(0); } data = (int *) malloc ((limit + 1) * sizeof(int)); if (NULL == data) {printf("申請內(nèi)存失敗!
");exit(1); } Judge(num, limit, data); for (num=2; num<limit+1; num++) {if (data[num]){ fprintf(fp, "%d", num);} } free(data); data = NULL; fclose(fp);}至于goto語句,蹦來跳去,用起來很爽,自我感覺良好,但有個問題,你無非也就跳了幾行,眼睛能跟的上,錯誤很容易發(fā)現(xiàn),改起來也容易,但跳個幾百行,一旦出錯,我相信很多程序員寧可重新設(shè)計(jì)結(jié)構(gòu)寫程序,也不愿修改程序。但我也不反對使用goto只是看情況而定。。。你現(xiàn)在不過就是剛學(xué)完C程序設(shè)計(jì),接下來應(yīng)該學(xué)學(xué)數(shù)據(jù)結(jié)構(gòu),然后在學(xué)算法,要想開發(fā)東西出來,基礎(chǔ)一定要扎實(shí),一定要有耐心,比如你學(xué)完數(shù)據(jù)結(jié)構(gòu)后,你就會知道CPU、緩存、棧內(nèi)存是怎么處理數(shù)據(jù),你甚至可以模仿他們的功能自己用C去寫這些功能,最后可以學(xué)學(xué)操作系統(tǒng)等等
黃金語言是C就業(yè)前景也好.雖然沒有java,c#,這樣的語言絢.但是1.中國奇缺精通這樣語言的人.2.C語言是一種面向過程的計(jì)算機(jī)程序設(shè)計(jì)語言。最初為unix而生。它既有高級語言的特點(diǎn),又具有匯編語言的特點(diǎn)。它可以作為系統(tǒng)設(shè)計(jì)語言,編寫工作系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語言,編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序。因此,它的應(yīng)用范圍廣泛。 C語言對操作系統(tǒng)和系統(tǒng)使用程序以及需要對硬件進(jìn)行操作的場合,用C語言明顯優(yōu)于其它解釋型高級語言,有一些大型應(yīng)用軟件也是用C語言編寫的。 C語言具有繪圖能力強(qiáng),可移植性,并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動畫。它是數(shù)值計(jì)算的高級語言。 C語言在Linux操作系統(tǒng)下使用時,還可以訪問MySql數(shù)據(jù)庫。
學(xué)習(xí)結(jié)構(gòu)如下:基本:c語言語法知識主要是掌握c語言的語言規(guī)則,即語法,分為數(shù)據(jù)類型、結(jié)構(gòu)語句、數(shù)組、指針、鏈表、結(jié)構(gòu)體。這些的語法知識需要記住。這些是基礎(chǔ),只能通過看書和不斷的練習(xí)才能熟練。一開始可能距地啥也不懂,這沒關(guān)系,重要的是不懂也要記住。課后習(xí)題一定要跟上,不會就看答案,沒關(guān)系,只要弄懂如何進(jìn)行的編程。學(xué)習(xí)方法:對于語法規(guī)則,死記硬背。重點(diǎn):c語言數(shù)組、指針、結(jié)構(gòu)體、鏈表此四點(diǎn)是c語言的精華所在,尤其指針鏈表是非常重要的語法。這些只掌握基礎(chǔ)是遠(yuǎn)遠(yuǎn)不夠的,但是沒有基礎(chǔ)是無法深入學(xué)習(xí)這些的。這四點(diǎn)每一個點(diǎn)都可以單獨(dú)出本書。學(xué)習(xí)方法:對于重點(diǎn),深入理解。推薦書籍:基礎(chǔ)類:C Primer 、 Thinking C 重點(diǎn)類:C和指針、C缺陷與陷阱。
①、對于你能寫這么長的問題描述,說明你很認(rèn)真。
②、你的目的性較強(qiáng),但是你也想有更加明確的目標(biāo),我可以給你講一下怎么自己去尋找目標(biāo)和路線以及怎樣學(xué)習(xí)。
③、計(jì)算機(jī)專業(yè)領(lǐng)域一共有幾個大方向,十幾個分支方向,而每個分支方向又有幾十個小方向,每一個方向的深入學(xué)習(xí)與熟練到一定火候都不是一朝一夕,互相之間也不是完全沒聯(lián)系的,但是你現(xiàn)在就應(yīng)該選擇一個大方向并在其中的一個小方向內(nèi)深入(為什么要這么早就選擇具體的分支方向?后面說)。
④、這里列出計(jì)算機(jī)的幾個大方向(非編程開發(fā)類的我就不說了): 基本方向: 1、單片機(jī)、嵌入式方向 2、網(wǎng)絡(luò)編程:涉及到服務(wù)器程序、客戶端開發(fā)、腳本設(shè)計(jì)等。 3、系統(tǒng)編程:基礎(chǔ)API開發(fā)、桌面開發(fā)、系統(tǒng)程序開發(fā)、服務(wù)程序 4、圖形學(xué):3D、2D、圖像識別、人臉識別 5、音頻:語音識別、音頻解碼、音頻軟件 6、編譯原理:編譯器設(shè)計(jì)、腳本解釋器、虛擬機(jī)、非自然語言翻譯系統(tǒng) 7、應(yīng)用層開發(fā):利用高層語言去開發(fā)表層應(yīng)用8、安全:反工程、病毒、反病毒、木馬、反木馬、軟件破解、軟件加殼附加方向: 8、人工智能:遺傳算法、神經(jīng)網(wǎng)絡(luò)、灰色系統(tǒng)等等 9、游戲設(shè)計(jì):各種游戲引擎設(shè)計(jì)以及業(yè)務(wù)邏輯設(shè)計(jì)等⑤、基本方向是你一定要選的,附加方向只是基于基本方向的一些錦上添花,但是不管你怎么選,最開始某些東西一定要深入而不是只是懂就夠(當(dāng)然你對自己要求似乎不會很低),我把這個列出來:數(shù)據(jù)結(jié)構(gòu):下面其他理論的基礎(chǔ)。操作系統(tǒng)原理:理解操作系統(tǒng)的架構(gòu)和細(xì)節(jié),你才能對以后關(guān)于多線程、文件管理、內(nèi)存管理、指令優(yōu)先級等有一個正確理解和運(yùn)用。編譯原理:能夠升華你對計(jì)算機(jī)編程語言的理解,對以后出現(xiàn)的各種編譯、解釋、兼容、移植、優(yōu)化、并發(fā)與并行算法等有一個深入理解。數(shù)據(jù)庫系統(tǒng)原理:這個是進(jìn)入公司都要會的,也是大型軟件開發(fā)的基礎(chǔ)。軟件工程:這個是你能夠在經(jīng)驗(yàn)不足還能保證大項(xiàng)目正常完成的理論基礎(chǔ)。網(wǎng)絡(luò)技術(shù):這個是必須學(xué)的,因?yàn)槟壳皫缀鯖]有一款裝幾率很高的軟件或者平臺跟網(wǎng)絡(luò)無關(guān)。數(shù)學(xué)的話,主要是:離散數(shù)學(xué)、線性代數(shù)、高等數(shù)學(xué)、計(jì)算機(jī)圖形學(xué)、概率論以上幾個基礎(chǔ)就是你成為一個融匯各個主要分支牛人必須學(xué)的(當(dāng)然不是指理論,而是理論+實(shí)踐編碼能力) ⑥以上都是大的基礎(chǔ),要一一攻破并深入學(xué)習(xí),雖然網(wǎng)絡(luò)時代計(jì)算機(jī)專業(yè)知識爆炸式的增長,但是以上幾個基礎(chǔ)掌握后,會發(fā)現(xiàn),以后的什么新的理論和技術(shù)都是基于這些大基礎(chǔ),你就很容易理解了。
⑦我為什么開頭不講你要具體學(xué)什么怎么順序?qū)W呢?因?yàn)槟切┘夹g(shù)你要掌握的話,根本可以自己解決,但是如果你由于興趣,沉迷于一些自己可見的小范圍技術(shù)的話,那么畢業(yè)后雖然也能找到不錯的工作,薪水也可能高,但是不能成為一個大牛?,F(xiàn)在才開始講學(xué)習(xí)順序,雖然你說不要推薦書,不過我還是要用書來做順序。C語言是可以寫很多核心和高級的東西,而不只是小東西,但是從你代碼來看,居然用到了 goto,我不是說你那些程序用到GOTO有什么不好,而是一定要避免用GOTO,goto是錯誤之源,如果你有什么內(nèi)容非要用到goto才能寫到,說明你的編碼技巧還有不少提高空間。你的學(xué)習(xí)順序應(yīng)該是:C:做一個超級馬里奧出來,并能夠讀取文本腳本來更新關(guān)卡。C++:寫一個2D圖形引擎,封裝掉細(xì)節(jié),實(shí)現(xiàn)面向?qū)ο笤O(shè)計(jì)和可復(fù)用設(shè)計(jì),并且用到《設(shè)計(jì)模式》中提到的一些設(shè)計(jì)模式,這樣才能算對C++有一個很好的掌握。MFC:MFC技術(shù)雖然近期已經(jīng)冷下來了,但是你能熟練掌握它,才能證明你的C++OO技術(shù)夠純熟,嚴(yán)格證明你掌握了MFC很簡單,你只要用MFC做出一個殺毒引擎就差不多了。推薦的書有《深入淺出MFC》。 《Windows程序設(shè)計(jì)》:和MFC不同的是,用的是windows核心SDK,也就是API,這本書學(xué)完后,你才能從操作系統(tǒng)層面上算掌握了win32 平臺下的機(jī)理(其實(shí)win64和win32大部分機(jī)理類似)。C#:C#里集合了當(dāng)代和前沿計(jì)算機(jī)科學(xué)里最先進(jìn)的一些語法(雖然執(zhí)行效率一直被人質(zhì)疑),但是你學(xué)完C#并深入后,至少能夠算是對計(jì)算機(jī)語言有一個更加深刻的理解了。如何證明你C#學(xué)的不錯了?也很簡單,再次寫一個隨便什么游戲,比如俄羅斯方塊。如果更加證明自己呢?用它寫一個P2P網(wǎng)絡(luò)對戰(zhàn)游戲。 (如果你注意的話,會發(fā)現(xiàn)我說的學(xué)習(xí)順序都是沿著語言和某些技術(shù)的,為什么呢?因?yàn)檫@些語言和技術(shù)涉及到特定的領(lǐng)域技術(shù)和計(jì)算機(jī)理論思想,比如【真正】學(xué)完了C#的話,就不單指學(xué)完了C#,而是把多種語言范式都學(xué)習(xí)了一遍,以及現(xiàn)代的程序開發(fā)思維(因?yàn)槔锩嬗玫搅撕芏嘧屇阋粍谟酪莸募夹g(shù)))以上5個步驟都是基礎(chǔ)大步驟,要解決的話要沒1-2年應(yīng)該不夠。與此同時,要盡快選出文中你感興趣的方向作為3-5年的長期方向,不要擔(dān)心過早選擇分支方向會有什么損失,因?yàn)橛?jì)算機(jī)很多分支是相通的,只有你把分支方向深入進(jìn)去,才能真正理解很多理論的實(shí)踐意義。并且一旦你在某個分支領(lǐng)域形成了較強(qiáng)的優(yōu)勢(比如,到公司里只有你這方面最強(qiáng)),那么你就是稀缺人才。關(guān)于大方向的步驟就不說了,你主要就是要把我說的這幾個基礎(chǔ)步驟先解決,同時平時要注重大方向理論結(jié)合實(shí)際去編碼和開發(fā)。