- 相關(guān)推薦
2017年計算機c語(yǔ)言學(xué)習技巧
C 語(yǔ)言可以像匯編語(yǔ)言一樣對位、字節和地址進(jìn)行操作,而這三者是計算機最基本的工作單元。下面是小編整理的關(guān)于計算機c語(yǔ)言學(xué)習技巧,歡迎參考!
C語(yǔ)言學(xué)習心得
許多人第一次接觸C語(yǔ)言都會(huì )覺(jué)得C語(yǔ)言難懂和不容易使用,其實(shí)就我個(gè)人的看法,C語(yǔ)言其實(shí)是很基礎的匯編語(yǔ)言,除了一些必須要記憶的關(guān)鍵字、語(yǔ)法和庫函數,其余的都是需要靠自己的邏輯思維通過(guò)這些關(guān)鍵字、語(yǔ)法和庫函數來(lái)組織或構成一個(gè)完整的函數,所以C語(yǔ)言大多數的學(xué)習時(shí)間都是在鍛煉我們的抽象邏輯思維能力。只有當你具有了抽象邏輯思維能力和弄清楚了關(guān)鍵字、語(yǔ)法和庫函數的相關(guān)知識后,編寫(xiě)C語(yǔ)言就不是難事了。
通過(guò)C語(yǔ)言初步的學(xué)習后都很容易弄懂關(guān)鍵字、語(yǔ)法和庫函數的相關(guān)知識,但是由于大部分人因為以前沒(méi)有接觸過(guò)電腦或電腦語(yǔ)言的相關(guān)知識所以缺乏抽象邏輯思維能力,不知道如何將所學(xué)到C語(yǔ)言的知識如何組織和構成一個(gè)完整的函數,那么如何來(lái)有效的鍛煉自己的抽象邏輯思維能力呢?
在這里是我個(gè)人的一套自學(xué)心得,通過(guò)學(xué)習后所掌握的知識使用上課老師所提到的案例或找一段簡(jiǎn)單的完整的案例,然后將案例讀懂,也就是把它轉換成我們日常所能接受的自然語(yǔ)言(在這里不妨把你所能理解的自然語(yǔ)言寫(xiě)下來(lái))。例如下面這段代碼是手工輸入兩個(gè)整數數字并計算兩個(gè)數字之間從最小的數字開(kāi)始到最大的數結束其中所有奇數相加的和:
void main()
{
首先INT是表示整數形數據的定義,那么接下來(lái)有兩個(gè)未知的整數和一個(gè)已知的整數0;這里出現的3個(gè)整數數字用C語(yǔ)言里的變量來(lái)替代它們,這時(shí)第一個(gè)數字就用取名為NUM1的變量,第二個(gè)數字就用取名為NUM2的變量,第三個(gè)數字就用取名為X的變量并且用賦值符號來(lái)為它賦予0這個(gè)值。
int num1,num2,x=0;
由于知道了有兩個(gè)未知的整數,所以要通過(guò)鍵盤(pán)輸入使這兩個(gè)未知的整數變成已知的整數并且儲存在前面所提到的變量中。
scanf("%d%d ",&num1,&num2) ;
得到數字后下面就開(kāi)始進(jìn)行一系列的運算和判斷,如果NUM1小于NUM2的話(huà)最小的數字就是NUM1最大的數字就是NUM2,如果NUM1這個(gè)變量不小于NUM2的話(huà)就跳過(guò)這個(gè){}所包含的內容。開(kāi)始進(jìn)行循環(huán)。
if(num1 {
NUM1到NUM2之間的數字個(gè)數不是固定的,不能得到固定的循環(huán)起始點(diǎn),所以這里的循環(huán)起始點(diǎn)就不輸入代碼中,但是通過(guò)題目中的提示知道NUM1這個(gè)變量如果大于NUM2的話(huà)循環(huán)就終止了,而NUM1這個(gè)變量還需每循環(huán)一次就必須改變其值。由于NUM1到NUM2之間的數字列如1-9每個(gè)數字跟其右邊的數字都是存在加1的關(guān)系,所以這里就可以把NUM1這個(gè)值用做循環(huán)的“計數器”每循環(huán)一次就讓NUM1加1,讓其跟NUM2做比較是否結束循環(huán)。
如何學(xué)好C語(yǔ)言
1、基礎
先從“單詞”談起,在英語(yǔ)中就是由26個(gè)英文字母以及26個(gè)英文字母構成的單詞組成,學(xué)習語(yǔ)言我們首先應該記憶的就是“單詞”,26個(gè)英文字母A,B,C,……然后就是令人頭痛的英文單詞,記憶的過(guò)程是痛苦的至少我學(xué)英語(yǔ)時(shí)最?lèi)阑鸬牡胤骄褪欠磸陀洃浝鲜峭浀膯卧~,類(lèi)似的在C語(yǔ)言中我們可以作這樣的類(lèi)比,C語(yǔ)言的單詞是由26個(gè)英文字母、數字(0,1,2……9)、運算符以及其他特殊符號組成,所以相比而言學(xué)習C語(yǔ)言是多么的幸福。
“語(yǔ)法”,在英語(yǔ)中是如常見(jiàn)構詞法、時(shí)態(tài)、常用句型、特殊用法、固定用法等等(呵呵,不是語(yǔ)言專(zhuān)家如有興趣可以參考英語(yǔ)語(yǔ)法書(shū)籍),僅拿構詞法來(lái)說(shuō)動(dòng)詞后面加er就變成名詞(work-worker),名詞后面加y就變成形容詞(wind-windy)等十多種變換還要記憶些特殊變換,復雜且繁瑣,假如算上時(shí)態(tài)、句型等那就更復雜了。在C語(yǔ)言中也同樣也存在有語(yǔ)法,比如標識符、常量、表達式、數據定義、函數定義、變量初始化、語(yǔ)句構成、預處理命令等大致8種語(yǔ)法,如標識符[2]可由字母、數字以及下劃線(xiàn)組成,且必須以字母或下劃線(xiàn)開(kāi)頭,區分大小寫(xiě),另外在不同的編譯器中字符數目有不同的規定,一般為7個(gè)字符。不過(guò)這里有些可能會(huì )被忽略的就是書(shū)寫(xiě)格式,在C語(yǔ)言中書(shū)寫(xiě)格式也是需要被注意的,因為格式也可以當作C語(yǔ)言的語(yǔ)法項目,如語(yǔ)句是以分號‘;’作為結束的標志的而不是以換行作為結束標志,其實(shí)英語(yǔ)也有要求比如什么時(shí)候該使用句號什么時(shí)候該使用逗號等等只不過(guò)我們日常要求并不注意,而且也可以看的懂所以不太較真。
綜上所述我們要學(xué)好一門(mén)程序設計語(yǔ)言首先就要象學(xué)習英語(yǔ)一樣先熟記至少要熟悉這門(mén)語(yǔ)言的“單詞”和“語(yǔ)法”然后才能談得上使用,俗話(huà)說(shuō)“萬(wàn)丈高樓平地起”,學(xué)好C語(yǔ)言的必要前提就是先打下堅實(shí)的C語(yǔ)言基礎,所以潭先生的書(shū)作為一本很好的教材,我建議是不能丟的,而且還要反復看,至少剛開(kāi)始我學(xué)習的時(shí)候上機機會(huì )不多,就是反復看懂看明白這本書(shū),有些東西該記的還是要記尤其是一些重要的語(yǔ)法比如標識符、數據類(lèi)型、語(yǔ)句的特點(diǎn)、函數的棧式結構,指針的意義等等。
最后始終記住這點(diǎn)在沒(méi)有實(shí)踐之前,先打下堅實(shí)的理論基礎吧,畢竟理論是實(shí)踐的先行,理論可以更好的指導實(shí)踐。即使再低點(diǎn)的要求至少要先熟悉理論吧,畢竟“摸著(zhù)石頭過(guò)河”感覺(jué)還是盲目以及痛苦的。
2、重點(diǎn)
“語(yǔ)義”即語(yǔ)句的意思、含義。同人類(lèi)語(yǔ)言一樣,程序設計語(yǔ)言最重要的目的還是“交流”,所以寫(xiě)一段沒(méi)有任何作用的代碼就如同說(shuō)一句沒(méi)有任何意思的話(huà)是沒(méi)有意義的,在這一點(diǎn)上兩者是共同的,至于在其他某些方面兩者也有驚人的相似之處,試舉一例吧,比如說(shuō)可以有不同的表達表示同一個(gè)意思,如微型計算機同個(gè)人計算機就是同一個(gè)意思,在C語(yǔ)言中比如要讓變量i自增1,可以有i=i+1或者i+=1等等。不過(guò)與人類(lèi)語(yǔ)言相比,程序設計語(yǔ)言畢竟是與計算機交流,交流對象計算機與人類(lèi)的不同也決定了程序設計語(yǔ)言與人類(lèi)語(yǔ)言還是有所區別,甚至可以說(shuō)是存在巨大的“鴻溝”,這也就是學(xué)習程序設計語(yǔ)言的重點(diǎn)。
與人類(lèi)相區別,計算機最大的不同之處在于沒(méi)有“自己”的“思維”,沒(méi)有象人類(lèi)那樣豐富的感情,所以在交流過(guò)程中對于人類(lèi)的跳躍性的思維,對于人類(lèi)的“幽默”無(wú)法理解也沒(méi)有絲毫的興趣。比如說(shuō)對與同樣一句話(huà)“Do it”,在不同的場(chǎng)景不同的說(shuō)話(huà)語(yǔ)氣,對10個(gè)人來(lái)說(shuō)就會(huì )有10種不同的回答,有的人可能會(huì )認為這是合理的要求,有的人可能會(huì )認為這可能是個(gè)玩笑而不與理睬,有的人則可能認為語(yǔ)氣要求有些過(guò)分而感到非常憤怒……,但對所有的計算機來(lái)說(shuō)則是嚴格執行。不過(guò)也正是由于計算機“機械”“笨著(zhù)”的可愛(ài)而深得人們的喜愛(ài)并被廣泛使用,因為對我們來(lái)說(shuō),計算機就象一個(gè)忠實(shí)的士兵一樣在執行我們的命令并且作為指揮者,當然我們希望計算機在合適的時(shí)間干切當的事情。而要達到這個(gè)目的,很湊巧有點(diǎn)類(lèi)似于社會(huì )的“權利與義務(wù)”法則一樣,我們也有自己的義務(wù)那就是下達明確而又正確的“命令”。
首先明確,即我們要在與計算機交流時(shí)“語(yǔ)義”必須明確,否則計算機將無(wú)所適從,因此作為交流工具的程序設計語(yǔ)言的“語(yǔ)義”也必須是能夠明確無(wú)二義的。當然程序設計語(yǔ)言的設計者已經(jīng)注意到這一點(diǎn),在設計時(shí)就回避了這個(gè)問(wèn)題,所以我們——程序設計語(yǔ)言的使用者——程序員也就無(wú)須過(guò)多關(guān)注這點(diǎn),也就是說(shuō)使用何種程序設計語(yǔ)言(C,Basic,Pascal等)并不是我們要關(guān)注的重點(diǎn)。
其次正確,包括正確的輸入以及正確的邏輯。由于計算機 “忠實(shí)”得有點(diǎn)“盲目”以至于對事情的對錯毫無(wú)判斷力,就象一把槍一樣,在警察手里它就是正義的化身,而在土匪手里就成了惡魔的代言人,因此要時(shí)刻記住計算機是沒(méi)有錯的,“錯誤”掌握在我們自己手里,這也就決定了我們在編程時(shí)是不是應該投入更多的精力來(lái)糾正我們自己所犯下的錯誤上面來(lái)?除此之外,我們智慧的結晶——程序,在我們的上帝——顧客,在程序的使用者看來(lái)就象個(gè)黑匣子,他們只管輸入哪怕是錯誤的輸入卻同樣期待能得到正確的結果,而對于上帝我們除了祈禱和期望之外還能有什么選擇?因此對于輸入的不可預期的程序源數據,我們是不是也應該花更多的時(shí)間進(jìn)行處理呢?
先小結下,由于我們在編程時(shí)需要對于輸入的不可預期的程序源數據以及提高我們自己的邏輯正確性花費更多的時(shí)間,因此這也就是我們編程訓練所應該關(guān)注的重點(diǎn),而不是關(guān)注于何種實(shí)際的程序設計語(yǔ)言。
為了加深印象,下面我們舉個(gè)實(shí)際的例子來(lái)說(shuō)明這點(diǎn)。先看題目要求“輸入一行字符串(全字母或空格),統計其中的單詞數量,單詞之間用空格分開(kāi)”,應該說(shuō)這是個(gè)簡(jiǎn)單的題目,有些人可能一看到這個(gè)題目很快就給出了自己的答案。如有些人會(huì )想單詞是以空格分開(kāi)的,我們統計其中空格的數量再加上最后一個(gè)單詞不就是單詞的個(gè)數嗎,因此便很快給出如下答案。
/*Program1*/
#include
main()
{
char string[81];
int i,num = 0;
char c;
gets(string);
for(i = 0;(c=string[i])!='\0';i++)
if(c == ' ')
num++;
printf("There are %d words in the line.\n",num+1);
}
編譯運行,然后輸入“I am a student”,得出正確答案“There are 4 words in the line.”在輸入幾個(gè)類(lèi)似的測試用例,都得出正確答案,最后確信無(wú)誤便自信滿(mǎn)滿(mǎn)的交出自己的答卷。應該說(shuō)正確的輸入情況下,這個(gè)程序毫無(wú)疑問(wèn)是能夠正確運行的,但這種正確性是非常脆弱的,你不能指望用戶(hù)和你一樣聰明并且不犯錯誤,何況即使是神仙那也有打盹的時(shí)候。假如用戶(hù)輸入“ I am a student”,“ I am a student”, “ I am a student ”……這種情況下,你是不是應該重新修正你的思路呢?現在我這樣考慮一個(gè)單詞應該是字母后面緊接著(zhù)一個(gè)空格或者結束符號,所以重新寫(xiě)下如下程序。
/* Program 2*/
#include
main()
{
char string[81];
int i,num = 0;
char c;
gets(string);
for(i = 0;(c = string[i])!='\0';i++)
if(c != ' ' &&(string[i+1] ==' '|| string[i+1]== '\0'))
num++;
printf("There are %d words in the line.\n",num);
}
運行一遍,發(fā)現結果是正確的,單詞之間不管你是有幾個(gè)空格,不管是兩個(gè)也好,三個(gè)也好都能夠正確運行,但是回過(guò)頭來(lái)我們看下這個(gè)程序是不是還有些可以改進(jìn)的地方呢?我們再看如下一個(gè)程序
/* Program 3[3]*/
#include
main()
{
char string[81];
int i,num = 0,word = 0;/*word標志位*/
char c;
gets(string);
for(i = 0;(c = string[i])!='\0';i++)
if(c == ' ') word = 0;
else if(word == 0)
{
word = 1;
num++;
}
printf("There are %d words in the line.\n",num);
}
輸入測試用例也能夠完全正確,看看源程序,其中增加了一個(gè)標志位便把所有的情況給考慮進(jìn)去了,相比前一個(gè)程序,程序2就是直白的描述了解題的思路,而程序3看起來(lái)好象不好理解但似乎更能滿(mǎn)足我們作為“天才程序員”的欲望,這也就是編程時(shí)使用的一些小技巧。
總體比較三個(gè)程序,可以說(shuō)類(lèi)似程序1的錯誤——邏輯錯誤是我們程序員比較容易犯的,也是在編程調試過(guò)程中最費時(shí)間的,至于語(yǔ)法錯誤編譯器可以很快的給我們找出錯誤的地方程序2邏輯正確但相比程序1思路要更難想到,程序3思路不但正確而且還在編程的過(guò)程中使用了一些編程技巧,所有這些開(kāi)闊的邏輯思路(解決問(wèn)題),快速的調試方法及過(guò)程(發(fā)現錯誤),累積的編程技巧(讓程序讓“好看”)都需要我們在編程實(shí)踐中去獲得,這是寶貴的經(jīng)驗也我們作為程序員最珍貴的地方,而且最重要的這些經(jīng)驗是屬于我們自己的,獨一無(wú)二的。
3、兩者之間的關(guān)系
綜合上面的敘述,我們把編程看成程序設計語(yǔ)言的“單詞”“語(yǔ)法”“明確的語(yǔ)義”“正確的語(yǔ)義”四個(gè)部分,可以看出前面三個(gè)部分是幾乎所有的程序設計語(yǔ)言自身所具有的,“單詞”“語(yǔ)法”不同的程序設計語(yǔ)言有所不同,但如果你仔細觀(guān)察所有的程序設計語(yǔ)言,可以分成幾類(lèi),而且有很多地方也有相通的地方,有點(diǎn)象一通百通的味道,這也就是為什么很多有經(jīng)驗的程序員可以在很短的時(shí)間就能熟悉其他語(yǔ)言的原因。至于“明確的語(yǔ)義”這是所有的程序設計語(yǔ)言都應該具備的,只是表述的方法由于程序設計的“單詞”“語(yǔ)法”不同表述不同而已,但讓計算機明白該做什么這點(diǎn)是相同的。最后“正確的語(yǔ)義”包括開(kāi)闊的,正確的邏輯思路以及發(fā)現并糾正錯誤的能力則是屬于我們自己的,這也是我們區別于其他人的地方,這些都需要在經(jīng)常性的編程實(shí)踐中去積累去開(kāi)闊,所以是我們所應該關(guān)注的重中之重。
跟許多前輩一樣,我是建議初學(xué)編程者先熟練掌握一門(mén)語(yǔ)言的,至于怎么學(xué)習,我想書(shū)本是綱領(lǐng),我們首先要熟悉一門(mén)語(yǔ)言的粗枝大葉,在編程的過(guò)程中不至于老是去翻書(shū)查找一門(mén)語(yǔ)言的基本語(yǔ)法,比如說(shuō)函數的傳遞方式,函數調用的一些特點(diǎn),這樣不僅非常浪費時(shí)間而且一直困擾于語(yǔ)法中使得自己有種身緣“廬山”中的那種非常迷茫的感覺(jué)。就象施工一樣,建造一個(gè)茅屋可能沒(méi)有圖紙,抱著(zhù)邊建邊看的態(tài)度興許能完成(事實(shí)上你自己腦海里至少也有個(gè)大致的樣子),但要建造一座大廈,沒(méi)有圖紙,困難可想而知。當然光有圖紙還是不夠的,我們可能在施工的過(guò)程中發(fā)現一些問(wèn)題,這樣我們在慢慢修改原來(lái)的方案或者原先有些地方描述不清楚通過(guò)具體施工確認我們的想法。因此編程實(shí)踐同樣不可少,編程實(shí)踐不僅可以“讓語(yǔ)義正確”即開(kāi)闊編程思路,發(fā)現錯誤(調試),累計編程技巧,而且可以在編程過(guò)程中熟悉這門(mén)語(yǔ)言,熟悉這門(mén)語(yǔ)言的細節部分,但也請記住這些細節雖然重要,但也僅僅是細節。當然光看書(shū),光有理論那也是不行的,有“綱領(lǐng)”而沒(méi)有“章程”,有“綱領(lǐng)”而沒(méi)有實(shí)施那同樣也是沒(méi)用的,畢竟實(shí)踐是檢驗真理的唯一標準,實(shí)踐過(guò)程中給理論修枝剪葉。
總得來(lái)說(shuō)熟悉一門(mén)程序設計語(yǔ)言的語(yǔ)法是編程實(shí)踐的先行,而編程實(shí)踐是可以更好促進(jìn)對程序設計語(yǔ)言基本語(yǔ)法知識的理解和熟悉,而積累的寶貴的編程經(jīng)驗則我們自己最珍貴的地方,最獨一無(wú)二的地方,是所有程序設計語(yǔ)言所沒(méi)有的。
4、寫(xiě)在最后面的話(huà)
寫(xiě)到這里,我想現在應該是回答第一個(gè)問(wèn)題的時(shí)候了,有人說(shuō)我學(xué)了這么長(cháng)時(shí)間的C語(yǔ)言還是沒(méi)編過(guò)一個(gè)漂亮花哨的程序,編出來(lái)的都是丑陋的而且看起來(lái)沒(méi)什么價(jià)值的程序,一點(diǎn)自豪感都沒(méi)有便喪失了對編程的興趣,為什么前面我一直強調一門(mén)語(yǔ)言豐富的編程經(jīng)驗是你最珍貴的地方呢?原因就在于編程不僅僅是把我們的想法把我們的思路用程序設計語(yǔ)言寫(xiě)下來(lái)就夠了,要得到實(shí)際運用還需要與計算機的其他知識如網(wǎng)絡(luò ),低層硬件,圖形圖象,開(kāi)發(fā)環(huán)境等,甚至還有其他學(xué)科知識比如自動(dòng)控制,通訊等相結合,而這些知識需要我們在以后的學(xué)習過(guò)程中學(xué)習,比如一些后續課程,數據結構與算法,操作系統,數據庫,計算機網(wǎng)絡(luò ),軟件工程等等,如果有興趣你也可以在以后的課程中專(zhuān)門(mén)學(xué)習視窗程序的編程,或者也可以學(xué)習自己做個(gè)網(wǎng)站,那時(shí)侯就真的是有自豪感并且貨真價(jià)實(shí)的了。當然那時(shí)侯可能你會(huì )有另外的想法比如說(shuō)做嵌入式程序員,網(wǎng)絡(luò )程序員,甚至去搞算法研究等等了。不管你選擇做什么,書(shū)本知識都是大家所共有的,是全人類(lèi)的財富,而自身的知識,尤其是經(jīng)驗卻實(shí)實(shí)在在是你自己的,最后我還想強調一遍,這是我們最珍貴的地方。
【計算機c語(yǔ)言學(xué)習技巧】相關(guān)文章:
C語(yǔ)言程序設計學(xué)習技巧03-10
計算機C語(yǔ)言試題及答案02-25
2017年c語(yǔ)言二級考試技巧03-09
計算機二級c語(yǔ)言題庫及答案03-28
計算機二級C語(yǔ)言考點(diǎn)盤(pán)點(diǎn)03-09
計算機二級考試c語(yǔ)言過(guò)關(guān)經(jīng)驗03-21