• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. 計(jì)算機(jī)c語言學(xué)習(xí)技巧

        時(shí)間:2024-10-30 09:44:02 計(jì)算機(jī)等級 我要投稿
        • 相關(guān)推薦

        2017年計(jì)算機(jī)c語言學(xué)習(xí)技巧

          C 語言可以像匯編語言一樣對位、字節(jié)和地址進(jìn)行操作,而這三者是計(jì)算機(jī)最基本的工作單元。下面是小編整理的關(guān)于計(jì)算機(jī)c語言學(xué)習(xí)技巧,歡迎參考!

        2017年計(jì)算機(jī)c語言學(xué)習(xí)技巧

          C語言學(xué)習(xí)心得

          許多人第一次接觸C語言都會覺得C語言難懂和不容易使用,其實(shí)就我個(gè)人的看法,C語言其實(shí)是很基礎(chǔ)的匯編語言,除了一些必須要記憶的關(guān)鍵字、語法和庫函數(shù),其余的都是需要靠自己的邏輯思維通過這些關(guān)鍵字、語法和庫函數(shù)來組織或構(gòu)成一個(gè)完整的函數(shù),所以C語言大多數(shù)的學(xué)習(xí)時(shí)間都是在鍛煉我們的抽象邏輯思維能力。只有當(dāng)你具有了抽象邏輯思維能力和弄清楚了關(guān)鍵字、語法和庫函數(shù)的相關(guān)知識后,編寫C語言就不是難事了。

          通過C語言初步的學(xué)習(xí)后都很容易弄懂關(guān)鍵字、語法和庫函數(shù)的相關(guān)知識,但是由于大部分人因?yàn)橐郧皼]有接觸過電腦或電腦語言的相關(guān)知識所以缺乏抽象邏輯思維能力,不知道如何將所學(xué)到C語言的知識如何組織和構(gòu)成一個(gè)完整的函數(shù),那么如何來有效的鍛煉自己的抽象邏輯思維能力呢?

          在這里是我個(gè)人的一套自學(xué)心得,通過學(xué)習(xí)后所掌握的知識使用上課老師所提到的案例或找一段簡單的完整的案例,然后將案例讀懂,也就是把它轉(zhuǎn)換成我們?nèi)粘K芙邮艿淖匀徽Z言(在這里不妨把你所能理解的自然語言寫下來)。例如下面這段代碼是手工輸入兩個(gè)整數(shù)數(shù)字并計(jì)算兩個(gè)數(shù)字之間從最小的數(shù)字開始到最大的數(shù)結(jié)束其中所有奇數(shù)相加的和:

          void main()

          {

          首先INT是表示整數(shù)形數(shù)據(jù)的定義,那么接下來有兩個(gè)未知的整數(shù)和一個(gè)已知的整數(shù)0;這里出現(xiàn)的3個(gè)整數(shù)數(shù)字用C語言里的變量來替代它們,這時(shí)第一個(gè)數(shù)字就用取名為NUM1的變量,第二個(gè)數(shù)字就用取名為NUM2的變量,第三個(gè)數(shù)字就用取名為X的變量并且用賦值符號來為它賦予0這個(gè)值。

          int num1,num2,x=0;

          由于知道了有兩個(gè)未知的整數(shù),所以要通過鍵盤輸入使這兩個(gè)未知的整數(shù)變成已知的整數(shù)并且儲存在前面所提到的變量中。

          scanf("%d%d ",&num1,&num2) ;

          得到數(shù)字后下面就開始進(jìn)行一系列的運(yùn)算和判斷,如果NUM1小于NUM2的話最小的數(shù)字就是NUM1最大的數(shù)字就是NUM2,如果NUM1這個(gè)變量不小于NUM2的話就跳過這個(gè){}所包含的內(nèi)容。開始進(jìn)行循環(huán)。

          if(num1  {

          NUM1到NUM2之間的數(shù)字個(gè)數(shù)不是固定的,不能得到固定的循環(huán)起始點(diǎn),所以這里的循環(huán)起始點(diǎn)就不輸入代碼中,但是通過題目中的提示知道NUM1這個(gè)變量如果大于NUM2的話循環(huán)就終止了,而NUM1這個(gè)變量還需每循環(huán)一次就必須改變其值。由于NUM1到NUM2之間的數(shù)字列如1-9每個(gè)數(shù)字跟其右邊的數(shù)字都是存在加1的關(guān)系,所以這里就可以把NUM1這個(gè)值用做循環(huán)的“計(jì)數(shù)器”每循環(huán)一次就讓NUM1加1,讓其跟NUM2做比較是否結(jié)束循環(huán)。

          如何學(xué)好C語言

          1、基礎(chǔ)

          先從“單詞”談起,在英語中就是由26個(gè)英文字母以及26個(gè)英文字母構(gòu)成的單詞組成,學(xué)習(xí)語言我們首先應(yīng)該記憶的就是“單詞”,26個(gè)英文字母A,B,C,……然后就是令人頭痛的英文單詞,記憶的過程是痛苦的至少我學(xué)英語時(shí)最惱火的地方就是反復(fù)記憶老是忘記的單詞,類似的在C語言中我們可以作這樣的類比,C語言的單詞是由26個(gè)英文字母、數(shù)字(0,1,2……9)、運(yùn)算符以及其他特殊符號組成,所以相比而言學(xué)習(xí)C語言是多么的幸福。

          “語法”,在英語中是如常見構(gòu)詞法、時(shí)態(tài)、常用句型、特殊用法、固定用法等等(呵呵,不是語言專家如有興趣可以參考英語語法書籍),僅拿構(gòu)詞法來說動詞后面加er就變成名詞(work-worker),名詞后面加y就變成形容詞(wind-windy)等十多種變換還要記憶些特殊變換,復(fù)雜且繁瑣,假如算上時(shí)態(tài)、句型等那就更復(fù)雜了。在C語言中也同樣也存在有語法,比如標(biāo)識符、常量、表達(dá)式、數(shù)據(jù)定義、函數(shù)定義、變量初始化、語句構(gòu)成、預(yù)處理命令等大致8種語法,如標(biāo)識符[2]可由字母、數(shù)字以及下劃線組成,且必須以字母或下劃線開頭,區(qū)分大小寫,另外在不同的編譯器中字符數(shù)目有不同的規(guī)定,一般為7個(gè)字符。不過這里有些可能會被忽略的就是書寫格式,在C語言中書寫格式也是需要被注意的,因?yàn)楦袷揭部梢援?dāng)作C語言的語法項(xiàng)目,如語句是以分號‘;’作為結(jié)束的標(biāo)志的而不是以換行作為結(jié)束標(biāo)志,其實(shí)英語也有要求比如什么時(shí)候該使用句號什么時(shí)候該使用逗號等等只不過我們?nèi)粘R蟛⒉蛔⒁猓乙部梢钥吹亩圆惶^真。

          綜上所述我們要學(xué)好一門程序設(shè)計(jì)語言首先就要象學(xué)習(xí)英語一樣先熟記至少要熟悉這門語言的“單詞”和“語法”然后才能談得上使用,俗話說“萬丈高樓平地起”,學(xué)好C語言的必要前提就是先打下堅(jiān)實(shí)的C語言基礎(chǔ),所以潭先生的書作為一本很好的教材,我建議是不能丟的,而且還要反復(fù)看,至少剛開始我學(xué)習(xí)的時(shí)候上機(jī)機(jī)會不多,就是反復(fù)看懂看明白這本書,有些東西該記的還是要記尤其是一些重要的語法比如標(biāo)識符、數(shù)據(jù)類型、語句的特點(diǎn)、函數(shù)的棧式結(jié)構(gòu),指針的意義等等。

          最后始終記住這點(diǎn)在沒有實(shí)踐之前,先打下堅(jiān)實(shí)的理論基礎(chǔ)吧,畢竟理論是實(shí)踐的先行,理論可以更好的指導(dǎo)實(shí)踐。即使再低點(diǎn)的要求至少要先熟悉理論吧,畢竟“摸著石頭過河”感覺還是盲目以及痛苦的。

          2、重點(diǎn)

          “語義”即語句的意思、含義。同人類語言一樣,程序設(shè)計(jì)語言最重要的目的還是“交流”,所以寫一段沒有任何作用的代碼就如同說一句沒有任何意思的話是沒有意義的,在這一點(diǎn)上兩者是共同的,至于在其他某些方面兩者也有驚人的相似之處,試舉一例吧,比如說可以有不同的表達(dá)表示同一個(gè)意思,如微型計(jì)算機(jī)同個(gè)人計(jì)算機(jī)就是同一個(gè)意思,在C語言中比如要讓變量i自增1,可以有i=i+1或者i+=1等等。不過與人類語言相比,程序設(shè)計(jì)語言畢竟是與計(jì)算機(jī)交流,交流對象計(jì)算機(jī)與人類的不同也決定了程序設(shè)計(jì)語言與人類語言還是有所區(qū)別,甚至可以說是存在巨大的“鴻溝”,這也就是學(xué)習(xí)程序設(shè)計(jì)語言的重點(diǎn)。

          與人類相區(qū)別,計(jì)算機(jī)最大的不同之處在于沒有“自己”的“思維”,沒有象人類那樣豐富的感情,所以在交流過程中對于人類的跳躍性的思維,對于人類的“幽默”無法理解也沒有絲毫的興趣。比如說對與同樣一句話“Do it”,在不同的場景不同的說話語氣,對10個(gè)人來說就會有10種不同的回答,有的人可能會認(rèn)為這是合理的要求,有的人可能會認(rèn)為這可能是個(gè)玩笑而不與理睬,有的人則可能認(rèn)為語氣要求有些過分而感到非常憤怒……,但對所有的計(jì)算機(jī)來說則是嚴(yán)格執(zhí)行。不過也正是由于計(jì)算機(jī)“機(jī)械”“笨著”的可愛而深得人們的喜愛并被廣泛使用,因?yàn)閷ξ覀儊碚f,計(jì)算機(jī)就象一個(gè)忠實(shí)的士兵一樣在執(zhí)行我們的命令并且作為指揮者,當(dāng)然我們希望計(jì)算機(jī)在合適的時(shí)間干切當(dāng)?shù)氖虑椤6_(dá)到這個(gè)目的,很湊巧有點(diǎn)類似于社會的“權(quán)利與義務(wù)”法則一樣,我們也有自己的義務(wù)那就是下達(dá)明確而又正確的“命令”。

          首先明確,即我們要在與計(jì)算機(jī)交流時(shí)“語義”必須明確,否則計(jì)算機(jī)將無所適從,因此作為交流工具的程序設(shè)計(jì)語言的“語義”也必須是能夠明確無二義的。當(dāng)然程序設(shè)計(jì)語言的設(shè)計(jì)者已經(jīng)注意到這一點(diǎn),在設(shè)計(jì)時(shí)就回避了這個(gè)問題,所以我們——程序設(shè)計(jì)語言的使用者——程序員也就無須過多關(guān)注這點(diǎn),也就是說使用何種程序設(shè)計(jì)語言(C,Basic,Pascal等)并不是我們要關(guān)注的重點(diǎn)。

          其次正確,包括正確的輸入以及正確的邏輯。由于計(jì)算機(jī) “忠實(shí)”得有點(diǎn)“盲目”以至于對事情的對錯(cuò)毫無判斷力,就象一把槍一樣,在警察手里它就是正義的化身,而在土匪手里就成了惡魔的代言人,因此要時(shí)刻記住計(jì)算機(jī)是沒有錯(cuò)的,“錯(cuò)誤”掌握在我們自己手里,這也就決定了我們在編程時(shí)是不是應(yīng)該投入更多的精力來糾正我們自己所犯下的錯(cuò)誤上面來?除此之外,我們智慧的結(jié)晶——程序,在我們的上帝——顧客,在程序的使用者看來就象個(gè)黑匣子,他們只管輸入哪怕是錯(cuò)誤的輸入?yún)s同樣期待能得到正確的結(jié)果,而對于上帝我們除了祈禱和期望之外還能有什么選擇?因此對于輸入的不可預(yù)期的程序源數(shù)據(jù),我們是不是也應(yīng)該花更多的時(shí)間進(jìn)行處理呢?

          先小結(jié)下,由于我們在編程時(shí)需要對于輸入的不可預(yù)期的程序源數(shù)據(jù)以及提高我們自己的邏輯正確性花費(fèi)更多的時(shí)間,因此這也就是我們編程訓(xùn)練所應(yīng)該關(guān)注的重點(diǎn),而不是關(guān)注于何種實(shí)際的程序設(shè)計(jì)語言。

          為了加深印象,下面我們舉個(gè)實(shí)際的例子來說明這點(diǎn)。先看題目要求“輸入一行字符串(全字母或空格),統(tǒng)計(jì)其中的單詞數(shù)量,單詞之間用空格分開”,應(yīng)該說這是個(gè)簡單的題目,有些人可能一看到這個(gè)題目很快就給出了自己的答案。如有些人會想單詞是以空格分開的,我們統(tǒng)計(jì)其中空格的數(shù)量再加上最后一個(gè)單詞不就是單詞的個(gè)數(shù)嗎,因此便很快給出如下答案。

          /*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);

          }

          編譯運(yùn)行,然后輸入“I am a student”,得出正確答案“There are 4 words in the line.”在輸入幾個(gè)類似的測試用例,都得出正確答案,最后確信無誤便自信滿滿的交出自己的答卷。應(yīng)該說正確的輸入情況下,這個(gè)程序毫無疑問是能夠正確運(yùn)行的,但這種正確性是非常脆弱的,你不能指望用戶和你一樣聰明并且不犯錯(cuò)誤,何況即使是神仙那也有打盹的時(shí)候。假如用戶輸入“ I am a student”,“ I am a student”, “ I am a student ”……這種情況下,你是不是應(yīng)該重新修正你的思路呢?現(xiàn)在我這樣考慮一個(gè)單詞應(yīng)該是字母后面緊接著一個(gè)空格或者結(jié)束符號,所以重新寫下如下程序。

          /* 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);

          }

          運(yùn)行一遍,發(fā)現(xiàn)結(jié)果是正確的,單詞之間不管你是有幾個(gè)空格,不管是兩個(gè)也好,三個(gè)也好都能夠正確運(yùn)行,但是回過頭來我們看下這個(gè)程序是不是還有些可以改進(jìn)的地方呢?我們再看如下一個(gè)程序

          /* Program 3[3]*/

          #include

          main()

          {

          char string[81];

          int i,num = 0,word = 0;/*word標(biāo)志位*/

          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è)標(biāo)志位便把所有的情況給考慮進(jìn)去了,相比前一個(gè)程序,程序2就是直白的描述了解題的思路,而程序3看起來好象不好理解但似乎更能滿足我們作為“天才程序員”的欲望,這也就是編程時(shí)使用的一些小技巧。

          總體比較三個(gè)程序,可以說類似程序1的錯(cuò)誤——邏輯錯(cuò)誤是我們程序員比較容易犯的,也是在編程調(diào)試過程中最費(fèi)時(shí)間的,至于語法錯(cuò)誤編譯器可以很快的給我們找出錯(cuò)誤的地方程序2邏輯正確但相比程序1思路要更難想到,程序3思路不但正確而且還在編程的過程中使用了一些編程技巧,所有這些開闊的邏輯思路(解決問題),快速的調(diào)試方法及過程(發(fā)現(xiàn)錯(cuò)誤),累積的編程技巧(讓程序讓“好看”)都需要我們在編程實(shí)踐中去獲得,這是寶貴的經(jīng)驗(yàn)也我們作為程序員最珍貴的地方,而且最重要的這些經(jīng)驗(yàn)是屬于我們自己的,獨(dú)一無二的。

          3、兩者之間的關(guān)系

          綜合上面的敘述,我們把編程看成程序設(shè)計(jì)語言的“單詞”“語法”“明確的語義”“正確的語義”四個(gè)部分,可以看出前面三個(gè)部分是幾乎所有的程序設(shè)計(jì)語言自身所具有的,“單詞”“語法”不同的程序設(shè)計(jì)語言有所不同,但如果你仔細(xì)觀察所有的程序設(shè)計(jì)語言,可以分成幾類,而且有很多地方也有相通的地方,有點(diǎn)象一通百通的味道,這也就是為什么很多有經(jīng)驗(yàn)的程序員可以在很短的時(shí)間就能熟悉其他語言的原因。至于“明確的語義”這是所有的程序設(shè)計(jì)語言都應(yīng)該具備的,只是表述的方法由于程序設(shè)計(jì)的“單詞”“語法”不同表述不同而已,但讓計(jì)算機(jī)明白該做什么這點(diǎn)是相同的。最后“正確的語義”包括開闊的,正確的邏輯思路以及發(fā)現(xiàn)并糾正錯(cuò)誤的能力則是屬于我們自己的,這也是我們區(qū)別于其他人的地方,這些都需要在經(jīng)常性的編程實(shí)踐中去積累去開闊,所以是我們所應(yīng)該關(guān)注的重中之重。

          跟許多前輩一樣,我是建議初學(xué)編程者先熟練掌握一門語言的,至于怎么學(xué)習(xí),我想書本是綱領(lǐng),我們首先要熟悉一門語言的粗枝大葉,在編程的過程中不至于老是去翻書查找一門語言的基本語法,比如說函數(shù)的傳遞方式,函數(shù)調(diào)用的一些特點(diǎn),這樣不僅非常浪費(fèi)時(shí)間而且一直困擾于語法中使得自己有種身緣“廬山”中的那種非常迷茫的感覺。就象施工一樣,建造一個(gè)茅屋可能沒有圖紙,抱著邊建邊看的態(tài)度興許能完成(事實(shí)上你自己腦海里至少也有個(gè)大致的樣子),但要建造一座大廈,沒有圖紙,困難可想而知。當(dāng)然光有圖紙還是不夠的,我們可能在施工的過程中發(fā)現(xiàn)一些問題,這樣我們在慢慢修改原來的方案或者原先有些地方描述不清楚通過具體施工確認(rèn)我們的想法。因此編程實(shí)踐同樣不可少,編程實(shí)踐不僅可以“讓語義正確”即開闊編程思路,發(fā)現(xiàn)錯(cuò)誤(調(diào)試),累計(jì)編程技巧,而且可以在編程過程中熟悉這門語言,熟悉這門語言的細(xì)節(jié)部分,但也請記住這些細(xì)節(jié)雖然重要,但也僅僅是細(xì)節(jié)。當(dāng)然光看書,光有理論那也是不行的,有“綱領(lǐng)”而沒有“章程”,有“綱領(lǐng)”而沒有實(shí)施那同樣也是沒用的,畢竟實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),實(shí)踐過程中給理論修枝剪葉。

          總得來說熟悉一門程序設(shè)計(jì)語言的語法是編程實(shí)踐的先行,而編程實(shí)踐是可以更好促進(jìn)對程序設(shè)計(jì)語言基本語法知識的理解和熟悉,而積累的寶貴的編程經(jīng)驗(yàn)則我們自己最珍貴的地方,最獨(dú)一無二的地方,是所有程序設(shè)計(jì)語言所沒有的。

          4、寫在最后面的話

          寫到這里,我想現(xiàn)在應(yīng)該是回答第一個(gè)問題的時(shí)候了,有人說我學(xué)了這么長時(shí)間的C語言還是沒編過一個(gè)漂亮花哨的程序,編出來的都是丑陋的而且看起來沒什么價(jià)值的程序,一點(diǎn)自豪感都沒有便喪失了對編程的興趣,為什么前面我一直強(qiáng)調(diào)一門語言豐富的編程經(jīng)驗(yàn)是你最珍貴的地方呢?原因就在于編程不僅僅是把我們的想法把我們的思路用程序設(shè)計(jì)語言寫下來就夠了,要得到實(shí)際運(yùn)用還需要與計(jì)算機(jī)的其他知識如網(wǎng)絡(luò),低層硬件,圖形圖象,開發(fā)環(huán)境等,甚至還有其他學(xué)科知識比如自動控制,通訊等相結(jié)合,而這些知識需要我們在以后的學(xué)習(xí)過程中學(xué)習(xí),比如一些后續(xù)課程,數(shù)據(jù)結(jié)構(gòu)與算法,操作系統(tǒng),數(shù)據(jù)庫,計(jì)算機(jī)網(wǎng)絡(luò),軟件工程等等,如果有興趣你也可以在以后的課程中專門學(xué)習(xí)視窗程序的編程,或者也可以學(xué)習(xí)自己做個(gè)網(wǎng)站,那時(shí)侯就真的是有自豪感并且貨真價(jià)實(shí)的了。當(dāng)然那時(shí)侯可能你會有另外的想法比如說做嵌入式程序員,網(wǎng)絡(luò)程序員,甚至去搞算法研究等等了。不管你選擇做什么,書本知識都是大家所共有的,是全人類的財(cái)富,而自身的知識,尤其是經(jīng)驗(yàn)卻實(shí)實(shí)在在是你自己的,最后我還想強(qiáng)調(diào)一遍,這是我們最珍貴的地方。

        《&.doc》
        将本文的Word文档下载到电脑,方便收藏和打印
        推荐度:
        点击下载文档

        【計(jì)算機(jī)c語言學(xué)習(xí)技巧】相關(guān)文章:

        C語言程序設(shè)計(jì)學(xué)習(xí)技巧03-10

        計(jì)算機(jī)C語言試題及答案02-25

        2017年c語言二級考試技巧03-09

        計(jì)算機(jī)二級c語言題庫及答案03-28

        計(jì)算機(jī)二級C語言考點(diǎn)盤點(diǎn)03-09

        2016計(jì)算機(jī)二級c語言習(xí)題及答案03-08

        計(jì)算機(jī)二級考試c語言過關(guān)經(jīng)驗(yàn)03-21

        2017年計(jì)算機(jī)C語言復(fù)習(xí)重點(diǎn)考點(diǎn)03-28

        2017年全國計(jì)算機(jī)c語言試題及答案03-09

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 中文字幕乱码二区免费 | 亚洲人成在线精品 | 欧美日韩精品久久免费 | 亚洲人成在线不卡网 | 中文一区二区三区视频 | 日本高清在线不卡中文字幕 |

            2017年計(jì)算機(jī)c語言學(xué)習(xí)技巧

              C 語言可以像匯編語言一樣對位、字節(jié)和地址進(jìn)行操作,而這三者是計(jì)算機(jī)最基本的工作單元。下面是小編整理的關(guān)于計(jì)算機(jī)c語言學(xué)習(xí)技巧,歡迎參考!

            2017年計(jì)算機(jī)c語言學(xué)習(xí)技巧

              C語言學(xué)習(xí)心得

              許多人第一次接觸C語言都會覺得C語言難懂和不容易使用,其實(shí)就我個(gè)人的看法,C語言其實(shí)是很基礎(chǔ)的匯編語言,除了一些必須要記憶的關(guān)鍵字、語法和庫函數(shù),其余的都是需要靠自己的邏輯思維通過這些關(guān)鍵字、語法和庫函數(shù)來組織或構(gòu)成一個(gè)完整的函數(shù),所以C語言大多數(shù)的學(xué)習(xí)時(shí)間都是在鍛煉我們的抽象邏輯思維能力。只有當(dāng)你具有了抽象邏輯思維能力和弄清楚了關(guān)鍵字、語法和庫函數(shù)的相關(guān)知識后,編寫C語言就不是難事了。

              通過C語言初步的學(xué)習(xí)后都很容易弄懂關(guān)鍵字、語法和庫函數(shù)的相關(guān)知識,但是由于大部分人因?yàn)橐郧皼]有接觸過電腦或電腦語言的相關(guān)知識所以缺乏抽象邏輯思維能力,不知道如何將所學(xué)到C語言的知識如何組織和構(gòu)成一個(gè)完整的函數(shù),那么如何來有效的鍛煉自己的抽象邏輯思維能力呢?

              在這里是我個(gè)人的一套自學(xué)心得,通過學(xué)習(xí)后所掌握的知識使用上課老師所提到的案例或找一段簡單的完整的案例,然后將案例讀懂,也就是把它轉(zhuǎn)換成我們?nèi)粘K芙邮艿淖匀徽Z言(在這里不妨把你所能理解的自然語言寫下來)。例如下面這段代碼是手工輸入兩個(gè)整數(shù)數(shù)字并計(jì)算兩個(gè)數(shù)字之間從最小的數(shù)字開始到最大的數(shù)結(jié)束其中所有奇數(shù)相加的和:

              void main()

              {

              首先INT是表示整數(shù)形數(shù)據(jù)的定義,那么接下來有兩個(gè)未知的整數(shù)和一個(gè)已知的整數(shù)0;這里出現(xiàn)的3個(gè)整數(shù)數(shù)字用C語言里的變量來替代它們,這時(shí)第一個(gè)數(shù)字就用取名為NUM1的變量,第二個(gè)數(shù)字就用取名為NUM2的變量,第三個(gè)數(shù)字就用取名為X的變量并且用賦值符號來為它賦予0這個(gè)值。

              int num1,num2,x=0;

              由于知道了有兩個(gè)未知的整數(shù),所以要通過鍵盤輸入使這兩個(gè)未知的整數(shù)變成已知的整數(shù)并且儲存在前面所提到的變量中。

              scanf("%d%d ",&num1,&num2) ;

              得到數(shù)字后下面就開始進(jìn)行一系列的運(yùn)算和判斷,如果NUM1小于NUM2的話最小的數(shù)字就是NUM1最大的數(shù)字就是NUM2,如果NUM1這個(gè)變量不小于NUM2的話就跳過這個(gè){}所包含的內(nèi)容。開始進(jìn)行循環(huán)。

              if(num1  {

              NUM1到NUM2之間的數(shù)字個(gè)數(shù)不是固定的,不能得到固定的循環(huán)起始點(diǎn),所以這里的循環(huán)起始點(diǎn)就不輸入代碼中,但是通過題目中的提示知道NUM1這個(gè)變量如果大于NUM2的話循環(huán)就終止了,而NUM1這個(gè)變量還需每循環(huán)一次就必須改變其值。由于NUM1到NUM2之間的數(shù)字列如1-9每個(gè)數(shù)字跟其右邊的數(shù)字都是存在加1的關(guān)系,所以這里就可以把NUM1這個(gè)值用做循環(huán)的“計(jì)數(shù)器”每循環(huán)一次就讓NUM1加1,讓其跟NUM2做比較是否結(jié)束循環(huán)。

              如何學(xué)好C語言

              1、基礎(chǔ)

              先從“單詞”談起,在英語中就是由26個(gè)英文字母以及26個(gè)英文字母構(gòu)成的單詞組成,學(xué)習(xí)語言我們首先應(yīng)該記憶的就是“單詞”,26個(gè)英文字母A,B,C,……然后就是令人頭痛的英文單詞,記憶的過程是痛苦的至少我學(xué)英語時(shí)最惱火的地方就是反復(fù)記憶老是忘記的單詞,類似的在C語言中我們可以作這樣的類比,C語言的單詞是由26個(gè)英文字母、數(shù)字(0,1,2……9)、運(yùn)算符以及其他特殊符號組成,所以相比而言學(xué)習(xí)C語言是多么的幸福。

              “語法”,在英語中是如常見構(gòu)詞法、時(shí)態(tài)、常用句型、特殊用法、固定用法等等(呵呵,不是語言專家如有興趣可以參考英語語法書籍),僅拿構(gòu)詞法來說動詞后面加er就變成名詞(work-worker),名詞后面加y就變成形容詞(wind-windy)等十多種變換還要記憶些特殊變換,復(fù)雜且繁瑣,假如算上時(shí)態(tài)、句型等那就更復(fù)雜了。在C語言中也同樣也存在有語法,比如標(biāo)識符、常量、表達(dá)式、數(shù)據(jù)定義、函數(shù)定義、變量初始化、語句構(gòu)成、預(yù)處理命令等大致8種語法,如標(biāo)識符[2]可由字母、數(shù)字以及下劃線組成,且必須以字母或下劃線開頭,區(qū)分大小寫,另外在不同的編譯器中字符數(shù)目有不同的規(guī)定,一般為7個(gè)字符。不過這里有些可能會被忽略的就是書寫格式,在C語言中書寫格式也是需要被注意的,因?yàn)楦袷揭部梢援?dāng)作C語言的語法項(xiàng)目,如語句是以分號‘;’作為結(jié)束的標(biāo)志的而不是以換行作為結(jié)束標(biāo)志,其實(shí)英語也有要求比如什么時(shí)候該使用句號什么時(shí)候該使用逗號等等只不過我們?nèi)粘R蟛⒉蛔⒁猓乙部梢钥吹亩圆惶^真。

              綜上所述我們要學(xué)好一門程序設(shè)計(jì)語言首先就要象學(xué)習(xí)英語一樣先熟記至少要熟悉這門語言的“單詞”和“語法”然后才能談得上使用,俗話說“萬丈高樓平地起”,學(xué)好C語言的必要前提就是先打下堅(jiān)實(shí)的C語言基礎(chǔ),所以潭先生的書作為一本很好的教材,我建議是不能丟的,而且還要反復(fù)看,至少剛開始我學(xué)習(xí)的時(shí)候上機(jī)機(jī)會不多,就是反復(fù)看懂看明白這本書,有些東西該記的還是要記尤其是一些重要的語法比如標(biāo)識符、數(shù)據(jù)類型、語句的特點(diǎn)、函數(shù)的棧式結(jié)構(gòu),指針的意義等等。

              最后始終記住這點(diǎn)在沒有實(shí)踐之前,先打下堅(jiān)實(shí)的理論基礎(chǔ)吧,畢竟理論是實(shí)踐的先行,理論可以更好的指導(dǎo)實(shí)踐。即使再低點(diǎn)的要求至少要先熟悉理論吧,畢竟“摸著石頭過河”感覺還是盲目以及痛苦的。

              2、重點(diǎn)

              “語義”即語句的意思、含義。同人類語言一樣,程序設(shè)計(jì)語言最重要的目的還是“交流”,所以寫一段沒有任何作用的代碼就如同說一句沒有任何意思的話是沒有意義的,在這一點(diǎn)上兩者是共同的,至于在其他某些方面兩者也有驚人的相似之處,試舉一例吧,比如說可以有不同的表達(dá)表示同一個(gè)意思,如微型計(jì)算機(jī)同個(gè)人計(jì)算機(jī)就是同一個(gè)意思,在C語言中比如要讓變量i自增1,可以有i=i+1或者i+=1等等。不過與人類語言相比,程序設(shè)計(jì)語言畢竟是與計(jì)算機(jī)交流,交流對象計(jì)算機(jī)與人類的不同也決定了程序設(shè)計(jì)語言與人類語言還是有所區(qū)別,甚至可以說是存在巨大的“鴻溝”,這也就是學(xué)習(xí)程序設(shè)計(jì)語言的重點(diǎn)。

              與人類相區(qū)別,計(jì)算機(jī)最大的不同之處在于沒有“自己”的“思維”,沒有象人類那樣豐富的感情,所以在交流過程中對于人類的跳躍性的思維,對于人類的“幽默”無法理解也沒有絲毫的興趣。比如說對與同樣一句話“Do it”,在不同的場景不同的說話語氣,對10個(gè)人來說就會有10種不同的回答,有的人可能會認(rèn)為這是合理的要求,有的人可能會認(rèn)為這可能是個(gè)玩笑而不與理睬,有的人則可能認(rèn)為語氣要求有些過分而感到非常憤怒……,但對所有的計(jì)算機(jī)來說則是嚴(yán)格執(zhí)行。不過也正是由于計(jì)算機(jī)“機(jī)械”“笨著”的可愛而深得人們的喜愛并被廣泛使用,因?yàn)閷ξ覀儊碚f,計(jì)算機(jī)就象一個(gè)忠實(shí)的士兵一樣在執(zhí)行我們的命令并且作為指揮者,當(dāng)然我們希望計(jì)算機(jī)在合適的時(shí)間干切當(dāng)?shù)氖虑椤6_(dá)到這個(gè)目的,很湊巧有點(diǎn)類似于社會的“權(quán)利與義務(wù)”法則一樣,我們也有自己的義務(wù)那就是下達(dá)明確而又正確的“命令”。

              首先明確,即我們要在與計(jì)算機(jī)交流時(shí)“語義”必須明確,否則計(jì)算機(jī)將無所適從,因此作為交流工具的程序設(shè)計(jì)語言的“語義”也必須是能夠明確無二義的。當(dāng)然程序設(shè)計(jì)語言的設(shè)計(jì)者已經(jīng)注意到這一點(diǎn),在設(shè)計(jì)時(shí)就回避了這個(gè)問題,所以我們——程序設(shè)計(jì)語言的使用者——程序員也就無須過多關(guān)注這點(diǎn),也就是說使用何種程序設(shè)計(jì)語言(C,Basic,Pascal等)并不是我們要關(guān)注的重點(diǎn)。

              其次正確,包括正確的輸入以及正確的邏輯。由于計(jì)算機(jī) “忠實(shí)”得有點(diǎn)“盲目”以至于對事情的對錯(cuò)毫無判斷力,就象一把槍一樣,在警察手里它就是正義的化身,而在土匪手里就成了惡魔的代言人,因此要時(shí)刻記住計(jì)算機(jī)是沒有錯(cuò)的,“錯(cuò)誤”掌握在我們自己手里,這也就決定了我們在編程時(shí)是不是應(yīng)該投入更多的精力來糾正我們自己所犯下的錯(cuò)誤上面來?除此之外,我們智慧的結(jié)晶——程序,在我們的上帝——顧客,在程序的使用者看來就象個(gè)黑匣子,他們只管輸入哪怕是錯(cuò)誤的輸入?yún)s同樣期待能得到正確的結(jié)果,而對于上帝我們除了祈禱和期望之外還能有什么選擇?因此對于輸入的不可預(yù)期的程序源數(shù)據(jù),我們是不是也應(yīng)該花更多的時(shí)間進(jìn)行處理呢?

              先小結(jié)下,由于我們在編程時(shí)需要對于輸入的不可預(yù)期的程序源數(shù)據(jù)以及提高我們自己的邏輯正確性花費(fèi)更多的時(shí)間,因此這也就是我們編程訓(xùn)練所應(yīng)該關(guān)注的重點(diǎn),而不是關(guān)注于何種實(shí)際的程序設(shè)計(jì)語言。

              為了加深印象,下面我們舉個(gè)實(shí)際的例子來說明這點(diǎn)。先看題目要求“輸入一行字符串(全字母或空格),統(tǒng)計(jì)其中的單詞數(shù)量,單詞之間用空格分開”,應(yīng)該說這是個(gè)簡單的題目,有些人可能一看到這個(gè)題目很快就給出了自己的答案。如有些人會想單詞是以空格分開的,我們統(tǒng)計(jì)其中空格的數(shù)量再加上最后一個(gè)單詞不就是單詞的個(gè)數(shù)嗎,因此便很快給出如下答案。

              /*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);

              }

              編譯運(yùn)行,然后輸入“I am a student”,得出正確答案“There are 4 words in the line.”在輸入幾個(gè)類似的測試用例,都得出正確答案,最后確信無誤便自信滿滿的交出自己的答卷。應(yīng)該說正確的輸入情況下,這個(gè)程序毫無疑問是能夠正確運(yùn)行的,但這種正確性是非常脆弱的,你不能指望用戶和你一樣聰明并且不犯錯(cuò)誤,何況即使是神仙那也有打盹的時(shí)候。假如用戶輸入“ I am a student”,“ I am a student”, “ I am a student ”……這種情況下,你是不是應(yīng)該重新修正你的思路呢?現(xiàn)在我這樣考慮一個(gè)單詞應(yīng)該是字母后面緊接著一個(gè)空格或者結(jié)束符號,所以重新寫下如下程序。

              /* 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);

              }

              運(yùn)行一遍,發(fā)現(xiàn)結(jié)果是正確的,單詞之間不管你是有幾個(gè)空格,不管是兩個(gè)也好,三個(gè)也好都能夠正確運(yùn)行,但是回過頭來我們看下這個(gè)程序是不是還有些可以改進(jìn)的地方呢?我們再看如下一個(gè)程序

              /* Program 3[3]*/

              #include

              main()

              {

              char string[81];

              int i,num = 0,word = 0;/*word標(biāo)志位*/

              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è)標(biāo)志位便把所有的情況給考慮進(jìn)去了,相比前一個(gè)程序,程序2就是直白的描述了解題的思路,而程序3看起來好象不好理解但似乎更能滿足我們作為“天才程序員”的欲望,這也就是編程時(shí)使用的一些小技巧。

              總體比較三個(gè)程序,可以說類似程序1的錯(cuò)誤——邏輯錯(cuò)誤是我們程序員比較容易犯的,也是在編程調(diào)試過程中最費(fèi)時(shí)間的,至于語法錯(cuò)誤編譯器可以很快的給我們找出錯(cuò)誤的地方程序2邏輯正確但相比程序1思路要更難想到,程序3思路不但正確而且還在編程的過程中使用了一些編程技巧,所有這些開闊的邏輯思路(解決問題),快速的調(diào)試方法及過程(發(fā)現(xiàn)錯(cuò)誤),累積的編程技巧(讓程序讓“好看”)都需要我們在編程實(shí)踐中去獲得,這是寶貴的經(jīng)驗(yàn)也我們作為程序員最珍貴的地方,而且最重要的這些經(jīng)驗(yàn)是屬于我們自己的,獨(dú)一無二的。

              3、兩者之間的關(guān)系

              綜合上面的敘述,我們把編程看成程序設(shè)計(jì)語言的“單詞”“語法”“明確的語義”“正確的語義”四個(gè)部分,可以看出前面三個(gè)部分是幾乎所有的程序設(shè)計(jì)語言自身所具有的,“單詞”“語法”不同的程序設(shè)計(jì)語言有所不同,但如果你仔細(xì)觀察所有的程序設(shè)計(jì)語言,可以分成幾類,而且有很多地方也有相通的地方,有點(diǎn)象一通百通的味道,這也就是為什么很多有經(jīng)驗(yàn)的程序員可以在很短的時(shí)間就能熟悉其他語言的原因。至于“明確的語義”這是所有的程序設(shè)計(jì)語言都應(yīng)該具備的,只是表述的方法由于程序設(shè)計(jì)的“單詞”“語法”不同表述不同而已,但讓計(jì)算機(jī)明白該做什么這點(diǎn)是相同的。最后“正確的語義”包括開闊的,正確的邏輯思路以及發(fā)現(xiàn)并糾正錯(cuò)誤的能力則是屬于我們自己的,這也是我們區(qū)別于其他人的地方,這些都需要在經(jīng)常性的編程實(shí)踐中去積累去開闊,所以是我們所應(yīng)該關(guān)注的重中之重。

              跟許多前輩一樣,我是建議初學(xué)編程者先熟練掌握一門語言的,至于怎么學(xué)習(xí),我想書本是綱領(lǐng),我們首先要熟悉一門語言的粗枝大葉,在編程的過程中不至于老是去翻書查找一門語言的基本語法,比如說函數(shù)的傳遞方式,函數(shù)調(diào)用的一些特點(diǎn),這樣不僅非常浪費(fèi)時(shí)間而且一直困擾于語法中使得自己有種身緣“廬山”中的那種非常迷茫的感覺。就象施工一樣,建造一個(gè)茅屋可能沒有圖紙,抱著邊建邊看的態(tài)度興許能完成(事實(shí)上你自己腦海里至少也有個(gè)大致的樣子),但要建造一座大廈,沒有圖紙,困難可想而知。當(dāng)然光有圖紙還是不夠的,我們可能在施工的過程中發(fā)現(xiàn)一些問題,這樣我們在慢慢修改原來的方案或者原先有些地方描述不清楚通過具體施工確認(rèn)我們的想法。因此編程實(shí)踐同樣不可少,編程實(shí)踐不僅可以“讓語義正確”即開闊編程思路,發(fā)現(xiàn)錯(cuò)誤(調(diào)試),累計(jì)編程技巧,而且可以在編程過程中熟悉這門語言,熟悉這門語言的細(xì)節(jié)部分,但也請記住這些細(xì)節(jié)雖然重要,但也僅僅是細(xì)節(jié)。當(dāng)然光看書,光有理論那也是不行的,有“綱領(lǐng)”而沒有“章程”,有“綱領(lǐng)”而沒有實(shí)施那同樣也是沒用的,畢竟實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),實(shí)踐過程中給理論修枝剪葉。

              總得來說熟悉一門程序設(shè)計(jì)語言的語法是編程實(shí)踐的先行,而編程實(shí)踐是可以更好促進(jìn)對程序設(shè)計(jì)語言基本語法知識的理解和熟悉,而積累的寶貴的編程經(jīng)驗(yàn)則我們自己最珍貴的地方,最獨(dú)一無二的地方,是所有程序設(shè)計(jì)語言所沒有的。

              4、寫在最后面的話

              寫到這里,我想現(xiàn)在應(yīng)該是回答第一個(gè)問題的時(shí)候了,有人說我學(xué)了這么長時(shí)間的C語言還是沒編過一個(gè)漂亮花哨的程序,編出來的都是丑陋的而且看起來沒什么價(jià)值的程序,一點(diǎn)自豪感都沒有便喪失了對編程的興趣,為什么前面我一直強(qiáng)調(diào)一門語言豐富的編程經(jīng)驗(yàn)是你最珍貴的地方呢?原因就在于編程不僅僅是把我們的想法把我們的思路用程序設(shè)計(jì)語言寫下來就夠了,要得到實(shí)際運(yùn)用還需要與計(jì)算機(jī)的其他知識如網(wǎng)絡(luò),低層硬件,圖形圖象,開發(fā)環(huán)境等,甚至還有其他學(xué)科知識比如自動控制,通訊等相結(jié)合,而這些知識需要我們在以后的學(xué)習(xí)過程中學(xué)習(xí),比如一些后續(xù)課程,數(shù)據(jù)結(jié)構(gòu)與算法,操作系統(tǒng),數(shù)據(jù)庫,計(jì)算機(jī)網(wǎng)絡(luò),軟件工程等等,如果有興趣你也可以在以后的課程中專門學(xué)習(xí)視窗程序的編程,或者也可以學(xué)習(xí)自己做個(gè)網(wǎng)站,那時(shí)侯就真的是有自豪感并且貨真價(jià)實(shí)的了。當(dāng)然那時(shí)侯可能你會有另外的想法比如說做嵌入式程序員,網(wǎng)絡(luò)程序員,甚至去搞算法研究等等了。不管你選擇做什么,書本知識都是大家所共有的,是全人類的財(cái)富,而自身的知識,尤其是經(jīng)驗(yàn)卻實(shí)實(shí)在在是你自己的,最后我還想強(qiáng)調(diào)一遍,這是我們最珍貴的地方。