本文目錄一覽:
初學c語言應該要注意一些什麼?
祥子
[學者] 編程語言其實是一個很初級的工具,但是你又必須熟練的掌握它,學懂一門編程語言就好像學會了寫字,但是會寫字的人不見得會寫文章,而會寫文章又不見的寫得好。可是如果你不會寫字,那就一定寫不出文章來。
首先,在學習C語言之前,應該學好計算機基礎。裡面的很多概念對於C程序員都是非常重要的。如果你在着手學習C之前,或者已經開始學習C,但是碰到了很多問題,應該再把計算機基礎的書拿來好好看看。
如果你有足夠的耐心,十足的毅力,應該再學習C語言之前學學彙編,這會讓你對許多比較細膩的概念有清醒的認識,如果你不是那麼有耐心(恕我直言,大部分人可能沒有)。那麼可以在看完一遍C語言的教材後再看,但是一定要看一遍,相信我一定會受益匪淺。
看到有些人發問的帖子,很明顯的沒有仔細的思考過問題,或者沒有認真地查閱過書籍,因為其中的語法和邏輯錯誤實在是不能理解。想來如果你的語文作業上面滿篇都是錯字,老師一定不會放過你。為什麼不先打好基礎呢?有些人抱怨說因為教材不好,老師水平不行等等。但是我本人就是在TC2下學習C語言的,那時候除了譚浩強的書,也幾乎找不到什麼別的書。我不打算就譚浩強的書發表什麼意見,那也實在稱不上是一本好書,但是如果這本是能學好,全部看好,都記住,也應該有相當的水平了。建議不管看什麼書,先認真地看懂,不要貪速度,應該力求深入的理解。
如果你能夠比較熟練的解決一本教材上的所有習題,那麼就應該轉入對算法的學習,儘管此時你的C語言還稱不上精通,有許多細節問題還不了解,許多問題還沒有碰到,但是這些問題會在後面的工作和學習中得到解決的。
新手學習C語言,有很多誤區,以一個學過C語言的人,給新手一些建議。
拋磚引玉,請前輩指出問題,發表意見,新手請注意後面的回復。
第一:一些概念。
C語言是一門程序設計語言,有一些標準,比較重要的是ANSI C(好像是C89)和C99。
數據結構包括邏輯結構和物理結構。邏輯結構是數據元素集合和定義在集合上的關係。物理結構是邏輯結構在計算機中的實現。
LCC、VC、TC、GCC都是C語言編譯器,一般包括集成開發環境,編譯器和鏈接器及輔助工具
我們書寫的是C源程序,源程序通過編譯器編譯為中間文件,中間文件經鏈接器鏈接生成可執行文件。不同操作系統可執行文件不同。中間文件也有幾個標準,微軟使用的和Linux下通用的有差異。
第二:學習什麼。
個人認為程序設計學習的重點放在數據結構的學習上,但是這種學習要有一個平台,比如C語言。
學習C語言首先要掌握基本語法,常量、變量、類型、及順序結構、分支結構和循環結構的意義及用法。進一步學習構造類型如指針、結構、函數的意義和用法。
C語言提供一些標準函數以減輕程序設計工作量,這些函數我們自己也可以實現。即使不依靠函數庫,只有編譯器,理論上就足夠了。事實上,提供的標準函數效率都很高,使用很頻繁,沒有自己實現的必要,所以掌握常用函數是非常必要的,但是要注意函數的適用範圍。
繼續學習因人而異,應該可以獨立選擇了。
第三:如何學習。
強調多實踐,C語言的學習要經常上機,多寫程序才能逐步提高。
推薦書籍:C Programming Languge。有中譯本,但最好看英文版。
通讀,並將所有習題獨立思考,給出解答,尤其是編程實踐題,最好逐一上機完成。
C語言其實並不難,如果認真掌握了C Programming Language,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的可視化),JAVASCRIPT,JSCRIPT ,VBSCRIPT,JAVA,ASP,FOXPRO,PERL等等,就本人實踐所得,其實高級程序語言分為兩大語系。一路是以C為主的程序語言,例如: JAVASCRIPT,JAVA等,這類語言在函數的調用,程序語句的書寫,循環的控制都極為相似。另一路是以BASIC為首的程序語言,例如: FOXPRO,VBSCRIPT等,此類語言同樣具有相似的函數調用,程序語句書寫以及循環控制,但與C語系是不同的。因此若是您以前是從QBASIC起家的,那麼在學習C語言前最好是先洗洗腦,千萬不要把學習BASIC的方法以及思路用在C身上。
講到這裡,我想大家對C語言一定有了感性認識吧!下面讓我們再升華一下,全方位親密接觸它。學習C語言必須從以下四點入手,也就是說,只要你能掌握這四點的內容,那麼基本上就大功告成了。
親密接觸C語言
一.輸入輸出
C語言的輸入輸出是非常嚴格的,或許在其他程序語言中我們可以不關心這個問題,但在C語言中,我們必須要徹底了解它。由於篇幅有限,因此筆者不能詳談,有興趣的朋友可以參考由著名程序語言教授譚浩強先生主編,由清華大學出版社出版的《C程序設計第二版》。不過這裡筆者還是有幾點要談一下。
1.二維浮點數數組的輸入
二維浮點數數組的輸入(即:通過鍵盤給二維浮點數數組賦值)在很多專業書中都沒有詳細講過這個問題。在給二維浮點數數組賦值時一定要先聲明一個變量,接着把數值賦予這個變量,最後把變量數值賦予二維浮點數數組賦值。實例如下:
# include “stdio.h”
main()
{
float a[2][3],x ;
int i,j;
for(i=0;i2;i++)
for(j=0;j3;j++)
{scanf(“%f”,x); bra[i][j]=x;}
}
不能寫成:
# include “stdio.h”
main()
{
float a[2][3] ;
int i,j;
for(i=0;i2;i++)
for(j=0;j3;j++)
scanf(“%f”,a[i][j]);
}
同樣道理,在結構性浮點數組變量中也一定要按照這種格式輸入。實例如下:
# include “stdio.h”
struct student
{float b[3]; brint x; br }a[2];
main()
{
float x ;
int i,j;
for(i=0;i2;i++)
for(j=0;j3;j++)
{scanf(“%f”,x); br a[i].b[j]=x;}
}
2.注意輸出格式中“%”後的字符
C語言的輸出說複雜不複雜,因為常用的都很簡單。可說不複雜也未必,記得曾在一次等級考前輔導我們C語言的教授講道:“如果C語言要考得很難的話,根本不用考什麼指針,只要專考輸出格式,我想百分之九十九的學生都不及格。”當時我們無不認同。從這則事例中可以看出C語言的輸出格式之複雜程度。因此大家在學習它時千萬要學會辨別輸出格式中“%”後的字符,每個字符都有其意義,也都有其作用。
二.優先級
說道優先級,有很多朋友都不是很了解或說很模糊。為此筆者想先通過一個例子讓各位有個概念。什麼叫優先級?比方說,我們在公交車終點站排座隊時總會遇到70歲以上的老人不需要排隊就能上車的情景,這就是優先級的涵義。C程序在運行時也象排隊坐車一樣,首先照顧那些優先級高的運算符,若是優先級相同,那麼就象遇到兩位(或兩位以上)70歲以上的老人那樣,讓他們依次上車。但是C語言中的優先級的運算並不是千篇一律的,只能說是在大多數情況下,有些運算符的優先級有其自己的特點,因此這點大家要注意。例如條件表達式:條件?結果1:結果2,這種表達式很多朋友都知道,它的作用與IF…ELSE…條件判斷語句很雷同,它運算時的優先級就不是按照C語言的規則來完成的。所以說對於優先級各位編程愛好者一定靈活掌握,不要死記硬背。
三.指針
就個人認為,C語言中的指針是最有特色的,當然也是最難學的。指針說穿了,其實是變量的一種表現形式,只不過這種變量記載的不是數值而是地址。就象一個人可以用姓名來表示自己,也可以用身份證號碼來表示自己一樣。筆者涉足編程已經有三年多了,在這期間曾經收到過很多網友的電子郵件詢問學習指針的方法。就本人感觸,學習指針最好是先學些計算機硬件工作的原理,例如:直接尋址,間接尋址等,只有了解了這些內容以後,你再學指針就比較容易理會,畢竟C語言是一門介於機器語言與高級語言中間的語言,沒有一些硬件工作知識是很難領悟它的真諦的。然而事事並非絕對,如果你沒有這些知識也不要緊,只要清楚知道以下筆者總結的二點再加上多練習便可:
1.指針是地址變量:它的值有兩種:其一是地址,其二是內容。不同的表達方式可以取不同的值,這有點象一個家庭地址在不同的場合標識的人物也不同。例如:父母親在他們的單位所登記的家庭地址就代表他們自己,而你在學校中登記的同樣的家庭地址就代表你自己。
2.指針是可以運算的,它的運算法則與變量是一致的。
另外,在編寫一個程序時,除非萬不得已,一般不要使用指針變量。因為指針是比較複雜的,用不好就“當機”。所以筆者建議各位對於指針只要能看懂就行,當然如果你是準備參加考試的就另當別論了。
四.函數
雖說很多程序語言都有函數這一內容,但筆者覺得C語言的函數是最有魅力的。如果你能完全掌握C語言的函數,那麼學習C++就不成問題了(C++是一門建立在C語言上,但又不同於C語言的高級程序語言,它增添了很多函數。)。學習函數的方法是比較簡單的,只有兩個字“牢記”,即:牢記函數的功能,牢記函數的用途以及如何輸入輸出。有些朋友認為,程序語言中的函數沒有多大用處,其實這並不正確,函數從本質上講是一段通用程序,用它可以幫助我們節約很多編程的時間,一個聰明的編程者在編寫程序前往往總是先找自己所編寫的程序中有多少是可以用函數來代替的。筆者曾經作過一個比較字符串的實驗,用C語言中的 strcmp()函數只要一句話,而自己編寫的話30句話都擺不平,可想而知函數是多麼實用呀!
寫到這裡筆者該告一段落了,下面送一個本人自己用C 語言編寫的註冊表比較程序給諸位。此段程序的注釋請看“/*…*/”後的文字,程序運行時(在DOS模式下)輸入的方式如下:compare xx1.reg xxx2.reg xxx3.txt,注意字段與字段之間是有空格的。(compare是程序名)
程序代碼:
# include “stdio.h” /*定義頭文件或說包含文件*/
main(argc,argv) /*定義帶參數的主函數*/
int argc; /*定義參數類型*/
char *argv[]; /*定義第二參數類型*/
{ FILE *fp1,*fp2,*fp3; /*定義文件指針*/
char a,b; /*定義字符變量*/
if((fp1=fopen(argv[1],”r”))==NULL)
/*打開第一的註冊表備份文件,如果不存在則跳出程序並顯示“The file don`t open!”*/
{ printf(“The file don`t open!”);
exit(0); }
if((fp2=fopen(argv[2],”r”))==NULL) /*打開第二的註冊表備份文件,如果不存在則跳出程序並顯示“The file don`t open!”*/
{ printf(“The file don`t open!”);
exit(0);}
if((fp3=fopen(argv[3],”w”))==NULL) /*建立新的文本文件,用於存放比較結果。*/
{printf(“The file don`t open!”); br exit(0);}
rewind(fp1); /*規定文件指針fp1指向第一個註冊表文件頭部*/
rewind(fp2); /*規定文件指針fp2指向第二個註冊表文件頭部*/
while(!feof(fp1)||!feof(fp2)) /*開始比較*/
{ a=fgetc(fp1); /*讀取第一個註冊表文件內容並賦予給字符變量a*/
b=fgetc(fp2); /*讀取第二個註冊表文件內容並賦予給字符變量b*/
if(a!=b) fputc(b,fp3);
/*字符變量a與b不相同的話,那麼把不同之處寫入新建的文本文件中*/
if(feof(fp1)) fputc(b,fp3);
/*如果第一個註冊表文件已經讀完,第二個文件還有未讀取部分,那麼把第二個文件的剩餘部分全部寫入新建文件中*/
if(feof(fp2)) fputc(a,fp3);} /*如果第二個註冊表文件已經讀完,第一個文件還有未讀取部分,那麼把第一個文件的剩餘部分全部寫入新建文件中*/
fclose(fp1); /*關閉第一個註冊表文件*/
fclose(fp2); /*關閉第二個註冊表文件*/
fclose(fp3); /*關閉新建文件*/
}
對於高深莫測的C語言來說,寥寥3千字並不能說清楚的什麼問題。但只要您看了此文後,我想對於您學習此語言一定有很大的幫助,同時也能了知曉如何用最短的時間學會C語言以及掌握C語言的精髓所在。另外,此文中所涉及的知識點都是筆者通過實踐得出的,因此若是其他專業書籍沒有講到過的問題可以參考本文。最後祝大家學習C語言順利!
c語言是什麼?
C語言誕生於20世紀70年代,比我們大多數人都大。當然,C語言並非沒有缺點,畢竟,是“70後的老人”,時代有點落後,開發效率低。接下來給大家講講C語言是什麼,希望對你們有幫助。
對於大多數程序員來說,C語言是學習編程的第一門語言,很少有不懂C語言的程序員。
C語言編程,除了讓你知道相關的概念,把你帶入編程的大門,還可以讓你了解這個項目運行的原理,例如,計算機的各個部分是如何交互的,程序在內存中是一種什麼樣的狀態,操作系統和用戶程序之間有着什麼樣的“愛與恨”,這些基礎知識決定了你的高度,也決定着你的職業生涯。
C語言概念少、詞彙少,並且包含基本的編程元素。許多後來的語言(C++、Java等)都參考了C語言。毫不誇張地說,C語言是現代編程語言的祖先,它改變了編程世界。
這是因為C語言簡單,對於初學者來說,學習成本小,時間短,結合教程,可以快速掌握編程技巧。
C語言還獲得過2017年“年度編程語言”的稱號,成為2017年全球增長最快的編程語言。
C語言誕生於20世紀70年代,比我們大多數人都大。當然,C語言並非沒有缺點,畢竟,是“70後的老人”,時代有點落後,開發效率低,後來人們在C語言的基礎上增加了面向對象機制,形成一種新的語言,稱為C++。
C語言是至今為止最為重要的編程語言:要進入編程行業高手級別必學C語言,要掙大錢必學C語言,要做黑客、紅客必學C語言,要面試名企、外企、高薪職位必學C語言。
C語言難不難?與Java、C++、Python、C#、JavaScript等高級編程語言相比,C語言涉及的編程概念較少,標準庫小,所以整體比較簡潔,容易學習,非常適合初學者。
想學C語言怎麼入手啊!
如果你剛開始的話推薦C Primer Plus或者C In A Nutshell。
去書店買那種翻譯版的書,紅色皮的那種. 原著國外的.
如果可以直接看那種英文原版的(畢竟翻譯過來的有些詫異).
21天學通C語言(第六版)
Bradley L. Jones, Peler Aitken 著.
信達工作室 譯.
人民郵電出版社
這本書對初學者很好, 如果有點基礎那就更好了.
建議選擇譚浩強譚老師的書,簡單易學,理論與實踐結合的很好,而且如果能認真學的話,你會發現你的C語言基礎非常的實。
也不是說其他的書不好,但是有些書只是為了讓讀者入門,沒有前途呀。
先讀譚浩強的《C語言程序設計》,這是公認的中文入門級教材。但是書中的代碼風格不敢恭維。看完這本,推薦《21天學通C語言》,這本書比較好,個人感覺。看完這兩本,你就可以進階C++了。
C語言只要把基礎打好就好,你要是想精通的話,最好是精通C++,這樣比較有前途。但不要操之過急。
以下一段話是我給另一位初學編程的朋友建議的學習軌跡,你可以參考以下:
學習編程語言貴精不貴多,而且要循序漸進、有張有馳。
初學語言時,基本上都是從C語言入手。
一本譚浩強老師的《C語言程序設計》足夠。
不過在學習過程中請注意不要學習他老人家的編程風格!我不知道現在改版了沒有,反正我當年學這本書的時候,上面的代碼風格讓我極其崩潰。
良好的C語言代碼風格,可以參閱《21天學通C語言》等。
學C最多也就半年,感覺差不多了,做一個像樣的小項目,檢驗一下自己即可。然後就應該步入C++中。C++是一門值得深入研究的語言,仔細學進去你會發現它嗷嗷強大。其中也有許多經典的設計思想。入門級書籍推薦《C++大學自學教程》講的比較透徹,但很厚。進階級推薦《C++語言深入研究》等,就比較深奧了。高手級推薦《C++大師的沉思》等國外名著,講的很暈,呵呵。
Java是一定要學的,但如果不想在這方面發展,可以不學得那麼累。Java是發展最迅猛的語言之一,其技術更新之快,遠勝於我們學習的速度。學習Java的重點要放在學習她的思想上。學習面向對象思想,以及建築在其上的各種框架和架構的思想。學精C++之後再學Java,語法部分10天足夠,但思想部分就看你的悟性了。
追加建議:學過C++、Java之後,再回頭重溫C語言,研究一下用C語言如何實現面向對象的四大特性(抽象、封裝、繼承和多態)。這時你就會發現,哦,之前顯得如此神秘的東西原來是這樣的啊……
當以上三門語言你都經歷了一遍之後,就可以選擇自己所要進一步深造的方向了。那時候你已經心裡有數。而且這時的你學習任何一門其他程序設計語言都是手到擒來易如反掌。這就是基礎的作用。
編程珠璣-中國電力出版社
程序設計實踐-機械工程出版社
實用c語言編程-O’Rerly出版
算法導論
以上是本人所知道的,希望對你有幫助
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/235704.html