查看: 6122|回復: 3
打印 上一主題 下一主題

[提問(wèn)] 大蝦分享學(xué)習C語(yǔ)言的幾點(diǎn)建議!

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2014-4-29 14:53:47 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
初學(xué)C語(yǔ)言的朋友應該首先了解C語(yǔ)言關(guān)鍵的核心概念(結構化、三個(gè)執行流程、優(yōu)先級、指針、文件、共用體、函數、作用域、重載等 ),只有弄明白了這些才能在今后的學(xué)習中游刃有余的把握C語(yǔ)言的精髓。這幾個(gè)概念就像邏輯線(xiàn)一樣,把整個(gè)C語(yǔ)言的體系貫穿起來(lái),給人一種“結構化”的思想體系。下面我簡(jiǎn)要談一下這幾個(gè)核心概念。 1、從宏觀(guān)角度來(lái)看,結構化是C語(yǔ)言的編程思想基礎,就是說(shuō)C語(yǔ)言每一個(gè)功能模塊就是一個(gè)結構,每一個(gè)結構實(shí)現一個(gè)運算或一個(gè)算法,這個(gè)結構就用大括號表示“{ }”,大括號里面的就是算法。尤其注意的是大括號的“}”括在那里,就決定在哪里結束算法功能。這些是初學(xué)者經(jīng)常犯的錯誤,往往會(huì )把算法功能的結束點(diǎn)弄錯。 2、 三個(gè)執行流程就是順序流程、條件流程、循環(huán)流程。三個(gè)流程都是計算機通用的執行流程,是必須了解的流程,每一個(gè)算法都基于這三個(gè)流程執行順序。 3、 優(yōu)先級是對多個(gè)函數并列時(shí)候優(yōu)先算法的特權,沒(méi)有注意優(yōu)先級的順序就會(huì )把算法出錯,這些優(yōu)先級是必須記住的。 4、 指針是C語(yǔ)言的重要特點(diǎn),是對運算速度加快運算的重要精髓。它是對數據地址的操作,而不是對數據的操作。 5、文件和共用體是很簡(jiǎn)單的概念,不用多說(shuō)了。文件顧名思義和日常概念一樣,學(xué)過(guò)數據軟件的都對共用體了解不是太難。 6、從微觀(guān)角度來(lái)看,函數是C語(yǔ)言的驅動(dòng)機制,所有的語(yǔ)句都由函數驅動(dòng)來(lái)實(shí)現的。記住函數命令和相關(guān)的配置參數,就能好好的利用C的優(yōu)勢。注意的是,函數不能記錯,不然你將得出錯的結果。如果能學(xué)會(huì )調試,那就會(huì )更深一層了解函數功能的作用。 7、作用域就像使用期限一樣,說(shuō)明從那里到那里所起的作用,在這之外的就不起作用了(過(guò)期的東西就不值錢(qián)一樣)。把握好作用域的使用方式,就能明確函數的關(guān)系,不會(huì )在巨大的函數名里面迷失方向。 8、重載就是為了方便用戶(hù),使用類(lèi)似于調用的機制給用戶(hù)減少寫(xiě)入時(shí)間的功能。就像查字典一樣,你不懂一個(gè)字,就要去查字典(相當于調用別的工具來(lái)實(shí)現你要做的事),而查字典是你已經(jīng)學(xué)會(huì )的東西,就可以做這件事了。 學(xué)習C語(yǔ)言從大體上了解還不夠,要把各種原理在腦海里模擬一遍,實(shí)現把計算機C的功能在人腦里運作,就能從宏觀(guān)上把握C的步驟。
教了多年《C程序設計》課程,大多學(xué)生覺(jué)的這門(mén)課程難學(xué)。其實(shí),按照我們現在的教學(xué)大綱和教學(xué)要求,只要同學(xué)們掌握一些方法,克服心理上畏難、不輕言放棄,是完全可以學(xué)好的。
《C程序設計》的內容很豐富,按照我們現在的教學(xué)大綱,教學(xué)的主要內容是基礎知識、四種結構的的程序設計、函數與數組的應用和一些簡(jiǎn)單的算法。在學(xué)習時(shí),同學(xué)們應該把主要精力放在這些部分,通過(guò)實(shí)踐(練習和上機調試等熟練掌握。當然,在初學(xué)C語(yǔ)言時(shí),可能會(huì )遇到有些問(wèn)題理解不透,或者表達方式與以往數學(xué)學(xué)習中不同(如運算符等),這就要求不氣餒,不明白的地方多問(wèn)多想,鼓足勇氣進(jìn)行學(xué)習,待學(xué)完后面的章節知識,前面的問(wèn)題也就迎刃而解了,這一方面我感覺(jué)是我們同學(xué)最欠缺,大多學(xué)不好的就是因為一開(kāi)始遇到困難就放棄,曾經(jīng)和好多同學(xué)談他的問(wèn)題,回答是聽(tīng)不懂、不想聽(tīng)、放棄這樣三個(gè)過(guò)程,我反問(wèn),這節課你聽(tīng)過(guò)課嗎?回答又是沒(méi)有,根本就沒(méi)聽(tīng)過(guò)課,怎么說(shuō)自己聽(tīng)不懂呢?相應的根本就沒(méi)學(xué)習,又談何學(xué)的好?
學(xué)習C語(yǔ)言始終要記住“曙光在前頭”和“千金難買(mǎi)回頭看”,“千金難買(mǎi)回頭看”是學(xué)習知識的重要方法,就是說(shuō),學(xué)習后面的知識,不要忘了回頭弄清遺留下的問(wèn)題和加深理解前面的知識,這是我們學(xué)生最不易做到的,然而卻又是最重要的。比如:在C語(yǔ)言中最典型的是關(guān)于結構化程序設計構思,不管是那種教材,一開(kāi)始就強調這種方法,這時(shí)也許你不能充分體會(huì ),但是學(xué)到函數時(shí),再回頭來(lái)仔細體會(huì ),溫故知新,理解它就沒(méi)有那么難了。學(xué)習C語(yǔ)言就是要經(jīng)過(guò)幾個(gè)反復,才能前后貫穿,積累應該掌握的C知識。
那么,我們如何學(xué)好《C程序設計》呢?
一.學(xué)好C語(yǔ)言的運算符和運算順序
這是學(xué)好《C程序設計》的基礎,C語(yǔ)言的運算非常靈活,功能十分豐富,運算種類(lèi)遠多于其它程序設計語(yǔ)言。在表達式方面較其它程序語(yǔ)言更為簡(jiǎn)潔,如自加、自減、逗號運算和三目運算使表達式更為簡(jiǎn)單,但初學(xué)者往往會(huì )覺(jué)的這種表達式難讀,關(guān)鍵原因就是對運算符和運算順序理解不透不全。當多種不同運算組成一個(gè)運算表達式,即一個(gè)運算式中出現多種運算符時(shí),運算的優(yōu)先順序和結合規則顯得十分重要。在學(xué)習中,只要我們對此合理進(jìn)行分類(lèi),找出它們與我們在數學(xué)中所學(xué)到運算之間的不同點(diǎn)之后,記住這些運算也就不困難了,有些運算符在理解后更會(huì )牢記心中,將來(lái)用起來(lái)得心應手,而有些可暫時(shí)放棄不記,等用到時(shí)再記不遲。
先要明確運算符按優(yōu)先級不同分類(lèi),《C程序設計》運算符可分為15種優(yōu)先級,從高到低,優(yōu)先級為1 ~ 15,除第2、3級和第14級為從右至左結合外,其它都是從左至右結合,它決定同級運算符的運算順序。下面我們通過(guò)幾個(gè)例子來(lái)說(shuō)明:
(1) 5*8/4%10 這個(gè)表達式中出現3種運算符,是同級運算符,運算順序按從左至右結合,因此先計算5 *8=40,然后被4除,結果為10,最后是%(求余數)運算,所以表達式的最終結果為10%10 = 0;
(2)a = 3;b = 5;c =++ a* b ;d =a + +* b;
對于c=++a*b來(lái)說(shuō),按表中所列順序,+ +先執行,*后執行,所以+ + a執行后,a的值為4,由于+ +為前置運算,所以a的值4參與運算,C的值計算式為4*5=20而不是3*5=15了;而對于d=a++*b來(lái)說(shuō),由于a + +為后置運算,所以a值為4參與運算,使得d的值仍為20,而a參與運算后其值加1,值為5。 這個(gè)例子執行后,a的值為5,b的值為5,c的值為20,d的值也是20;
(3)(a = 3,b = 5,b+ = a,c = b* 5)
例子中的“,”是逗號結合運算,上式稱(chēng)為逗號表達式,自左向右結合,最后一個(gè)表達式的結果值就是逗號表達式的結果,所以上面的逗號表達式結果為40,a的值為3,b的值為8,c的值為40。
(4)a=5;b=6;c=a>b?a:b;
例中的a>b?a:b是一個(gè)三目運算,它的功能是先做關(guān)系運算a>b部分,若結果為真,則取問(wèn)號后a的值,否則取冒號后b的值,因此c的值應該為6,這個(gè)運算可以用來(lái)代替if…else…語(yǔ)句的簡(jiǎn)單應用。
二.學(xué)好C語(yǔ)言的四種程序結構
(1)順序結構
順序結構的程序設計是最簡(jiǎn)單的,只要按照解決問(wèn)題的順序寫(xiě)出相應的語(yǔ)句就行,它的執行順序是自上而下,依次執行。
例如;a = 3,b = 5,現交換a,b的值,這個(gè)問(wèn)題就好象交換兩個(gè)杯子水,這當然要用到第三個(gè)杯子,假如第三個(gè)杯子是c,那么正確的程序為: c = a; a = b; b = c; 執行結果是a = 5,b = c = 3如果改變其順序,寫(xiě)成:a = b; c = a; b = c; 則執行結果就變成a = b = c = 5,不能達到預期的目的,初學(xué)者最容易犯這種錯誤。 順序結構可以獨立使用構成一個(gè)簡(jiǎn)單的完整程序,常見(jiàn)的輸入、計算,輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語(yǔ)句順序就是輸入圓的半徑r,計算s = 3.14159*r*r,輸出圓的面積s。不過(guò)大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個(gè)復雜的程序,例如分支結構中的復合語(yǔ)句、循環(huán)結構中的循環(huán)體等。
(2) 分支結構
順序結構的程序雖然能解決計算、輸出等問(wèn)題,但不能做判斷再選擇。對于要先做判斷再選擇的問(wèn)題就要使用分支結構。分支結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語(yǔ)句出現的物理順序。分支結構的程序設計方法的關(guān)鍵在于構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的分支語(yǔ)句。分支結構適合于帶有邏輯或關(guān)系比較等條件判斷的計算,設計這類(lèi)程序時(shí)往往都要先繪制其程序流程圖,然后根據程序流程寫(xiě)出源程序,這樣做把程序設計分析與語(yǔ)言分開(kāi),使得問(wèn)題簡(jiǎn)單化,易于理解。程序流程圖是根據解題分析所繪制的程序執行流程圖。
學(xué)習分支結構不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執行的功能,嵌套結構也就不難了。嵌套只不過(guò)是分支中又包括分支語(yǔ)句而已,不是新知識,只要對雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結構。
①if(條件)
{
分支體
}
這種分支結構中的分支體可以是一條語(yǔ)句,此時(shí)“{ }”可以省略,也可以是多條語(yǔ)句即復合語(yǔ)句。它有兩條分支路徑可選,一是當條件為真,執行分支體,否則跳過(guò)分支體,這時(shí)分支體就不會(huì )執行。如:要計算x的絕對值,根據絕對值定義,我們知道,當x>=0時(shí),其絕對值不變,而x<0時(shí)其絕對值是為x的反號,因此程序段為:if(x =0時(shí),方程有兩個(gè)實(shí)根,否則(b^2-4ac =0)
{x1=(-b+sqrt(d))/2a;
x1=(-b-sqrt(d))/2a;
printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2);
}
else
{r=-b/(2*a);
i =sqrt(-d)/(2*a);
printf(“x1=%8.4f+%8.4fi\n”r, i);
printf(“x2=%8.4f-%8.4fi\n”r,i)
}
③嵌套分支語(yǔ)句:其語(yǔ)句格式為:
if(條件1) {分支1};
else if(條件2) {分支2}
else if(條件3) {分支3}
……
else if(條件n) {分支n}
else {分支n+1}
嵌套分支語(yǔ)句雖可解決多個(gè)入口和出口的問(wèn)題,但超過(guò)3重嵌套后,語(yǔ)句結構變得非常復雜,對于程序的閱讀和理解都極為不便,建議嵌套在3重以?xún),超過(guò)3重可以用下面的語(yǔ)句。
④switch開(kāi)關(guān)語(yǔ)句:該語(yǔ)句也是多分支選擇語(yǔ)句,到底執行哪一塊,取決于開(kāi)關(guān)設置,也就是表達式的值與常量表達式相匹配的那一路,它不同if…else 語(yǔ)句,它的所有分支都是并列的,程序執行時(shí),由第一分支開(kāi)始查找,如果相匹配,執行其后的塊,接著(zhù)執行第2分支,第3分支……的塊,直到遇到break語(yǔ)句;如果不匹配,查找下一個(gè)分支是否匹配。這個(gè)語(yǔ)句在應用時(shí)要特別注意開(kāi)關(guān)條件的合理設置以及break語(yǔ)句的合理應用。
(3)循環(huán)結構:
循環(huán)結構可以減少源程序重復書(shū)寫(xiě)的工作量,用來(lái)描述重復執行某段算法的問(wèn)題,這是程序設計中最能發(fā)揮計算機特長(cháng)的程序結構,C語(yǔ)言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do –while循環(huán)和for循環(huán)。四種循環(huán)可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),因為強制改變程序的順序經(jīng)常會(huì )給程序的運行帶來(lái)不可預料的錯誤,在學(xué)習中我們主要學(xué)習while、do…while、for三種循環(huán)。常用的三種循環(huán)結構學(xué)習的重點(diǎn)在于弄清它們相同與不同之處,以便在不同場(chǎng)合下使用,這就要清楚三種循環(huán)的格式和執行順序,將每種循環(huán)的流程圖理解透徹后就會(huì )明白如何替換使用,如把while循環(huán)的例題,用for語(yǔ)句重新編寫(xiě)一個(gè)程序,這樣能更好地理解它們的作用。特別要注意在循環(huán)體內應包含趨于結束的語(yǔ)句(即循環(huán)變量值的改變),否則就可能成了一個(gè)死循環(huán),這是初學(xué)者的一個(gè)常見(jiàn)錯誤。
在學(xué)完這三個(gè)循環(huán)后,應明確它們的異同點(diǎn):用while和do…while循環(huán)時(shí),循環(huán)變量的初始化的操作應在循環(huán)體之前,而for循環(huán)一般在語(yǔ)句1中進(jìn)行的;while 循環(huán)和for循環(huán)都是先判斷表達式,后執行循環(huán)體,而do…while循環(huán)是先執行循環(huán)體后判斷表達式,也就是說(shuō)do…while的循環(huán)體最少被執行一次,而while 循環(huán)和for就可能一次都不執行。另外還要注意的是這三種循環(huán)都可以用break語(yǔ)句跳出循環(huán),用continue語(yǔ)句結束本次循環(huán),而goto語(yǔ)句與if構成的循環(huán),是不能用break和 continue語(yǔ)句進(jìn)行控制的。
順序結構、分支結構和循環(huán)結構并不彼此孤立的,在循環(huán)中可以有分支、順序結構,分支中也可以有循環(huán)、順序結構,其實(shí)不管哪種結構,我們均可廣義的把它們看成一個(gè)語(yǔ)句。在實(shí)際編程過(guò)程中常將這三種結構相互結合以實(shí)現各種算法,設計出相應程序,但是要編程的問(wèn)題較大,編寫(xiě)出的程序就往往很長(cháng)、結構重復多,造成可讀性差,難以理解,解決這個(gè)問(wèn)題的方法是將C程序設計成模塊化結構。
(4)模塊化程序結構
C語(yǔ)言的模塊化程序結構用函數來(lái)實(shí)現,即將復雜的C程序分為若干模塊,每個(gè)模塊都編寫(xiě)成一個(gè)C函數,然后通過(guò)主函數調用函數及函數調用函數來(lái)實(shí)現一大型問(wèn)題的C程序編寫(xiě),因此常說(shuō):C程序=主函數+子函數。 因些,對函數的定義、調用、值的返回等中要尤其注重理解和應用,并通過(guò)上機調試加以鞏固。
三.掌握一些簡(jiǎn)單的算法
編程其實(shí)一大部分工作就是分析問(wèn)題,找到解決問(wèn)題的方法,再以相應的編程語(yǔ)言寫(xiě)出代碼。這就要求掌握算法,根據我們的《C程序設計》教學(xué)大綱中,只要求我們掌握一些簡(jiǎn)單的算法,在掌握這些基本算法后,要完成對問(wèn)題的分析就容易了。如兩個(gè)數的交換、三個(gè)數的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些算法的內在含義,其中選擇法排序和冒泡法排序稍難,但只要明白排序的具體過(guò)程,對代碼的理解就不難了。如用選擇法對10個(gè)不同整數排序(從小到大),選擇法排序思路:設有10個(gè)元素a[1]~a[10],將a[1]與a[2]~a[10]比較,若a[1]比a[2]~a[10]都小,則不進(jìn)行交換,即無(wú)任何操作;若a[2]~a[10] 中有一個(gè)比a[1]小,則將其中最大的一個(gè)(假設為a)與a[1]交換,此時(shí)a[1]中存放了10個(gè)中最小的數。第二輪將a[2]與a[3]~a[10]比較,將剩下9個(gè)數中的最小者a與a[2]交換,此時(shí)a[2] 中存放的10個(gè)數中第2小的數;依此類(lèi)推,共進(jìn)行9輪比較,a[1]到a[10]就已按從小到大的順序存放。即每一輪都找出剩下數中的最小一個(gè),代碼如下:
for(i=1;i<=9;i++)
for(j=i+1;j a[j]
{temp=a;
a=a[j];
a[j]=temp;
}
結語(yǔ):當我們把握好上述幾方面后,只要同學(xué)們能克服畏難、厭學(xué)、上課能專(zhuān)心聽(tīng)講,做好練習與上機調試,其實(shí)C語(yǔ)言并不難學(xué)。

更多內容歡迎交流:15089711217  qq:1765841775(李老師)
歡迎大家進(jìn)入華南地區最大的單片機嵌入式學(xué)習群:375528937。共同交流、學(xué)習。
歡迎登錄:www.edu118.com
沙發(fā)
發(fā)表于 2014-4-29 22:07:00 | 只看該作者
c語(yǔ)言不是鼓勵存在的,也要學(xué)好計算機組成原理、匯編(這兩者是對計算機硬件的建模),還有要了解編譯過(guò)程、操作系統,這些本來(lái)就是不可分割的整體,硬件是軟件的物質(zhì)載體,軟件是硬件的動(dòng)態(tài)變化,只是為了教學(xué)方便,才單獨設課
板凳
發(fā)表于 2014-4-30 02:26:28 | 只看該作者
其實(shí)c語(yǔ)言算簡(jiǎn)單的了,看了語(yǔ)法后,多做點(diǎn)項目,由淺入深積累經(jīng)驗,慢慢就駕輕就熟了。
地板
發(fā)表于 2014-5-4 08:57:04 | 只看該作者
復制下來(lái)。。。。。。。!我自己好好學(xué)習。。。。。。。。。。。。!

謝謝.jpg (8.65 KB)

謝謝.jpg
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页