馮 麗
(南京江寧中等專業(yè)學(xué)校,江蘇 南京 211100)
很多學(xué)生在初次學(xué)習(xí)C語言時(shí),就缺乏信心,甚至直接放棄,認(rèn)為自己肯定學(xué)不好,其實(shí)不然。通過本人的一線教學(xué),發(fā)現(xiàn)C語言并非是學(xué)不好,只是學(xué)生缺乏耐心、邏輯思維混亂,沒有找到好的捷徑。那么,作為一個(gè)計(jì)算機(jī)專業(yè)的學(xué)生,如何學(xué)好C語言呢?這就需要學(xué)生能夠逐步做到以下幾點(diǎn):
目前,很多單招的學(xué)生都是在高一下學(xué)期開設(shè)C語言這門課。通過前面一學(xué)期的在校學(xué)習(xí),很多學(xué)生了解到關(guān)于單招考試中理論及技能各門學(xué)科的分值。在此階段中,需要教師進(jìn)行正確導(dǎo)向,千萬不能直接告訴學(xué)生說C語言很難學(xué),一般學(xué)生學(xué)不好。而是引導(dǎo)告訴學(xué)生C語言的學(xué)習(xí)很有趣,并且在學(xué)習(xí)的過程中能利用軟件調(diào)試程序是否正確有效。我們還可以通過C語言的學(xué)習(xí)解決很多實(shí)際生活中的難題,能讓自己變得更加聰明。通過逐步的引導(dǎo)來激發(fā)學(xué)生的學(xué)習(xí)興趣,并調(diào)動(dòng)學(xué)生的學(xué)習(xí)欲望。很多學(xué)生對C語言的學(xué)習(xí)產(chǎn)生了正確的認(rèn)識,從而對后期的教學(xué)帶來了幫助。
任何一門語言學(xué)科,我們在進(jìn)行學(xué)習(xí)時(shí)需要掌握其相關(guān)的語法規(guī)定。對于C語言來說,首先要掌握各種語句的語法。比如選擇結(jié)構(gòu)中單分支、雙分支、多分支及分支語句的嵌套,特別是分支語句的嵌套中,要能清晰地了解每個(gè)分支的語句執(zhí)行部分。尤其是不只一條語句時(shí),需要用花括號括起來作為復(fù)合語句使用。另外在學(xué)習(xí)循環(huán)結(jié)構(gòu)時(shí),要掌握三種基本的循環(huán)語句執(zhí)行過程。特別是循環(huán)語句的嵌套,任何一個(gè)程序要能夠首先判斷出每一層循環(huán)的循環(huán)體,只有理解了循環(huán)體是哪些才能進(jìn)一步地看懂程序的執(zhí)行過程。
這些語句格式的學(xué)習(xí),需要學(xué)生平時(shí)上課認(rèn)真聽,大量閱讀程序做題,上機(jī)調(diào)試加強(qiáng)記憶。另外在后期學(xué)習(xí)函數(shù)時(shí),也需要理解每種函數(shù)的定義、說明及各種值的返回。
在前面的知識掌握后,學(xué)生能進(jìn)行簡單程序的編寫了。但此時(shí),學(xué)生的重點(diǎn)并非是編寫程序,而是要理解每條語句的作用及語法規(guī)定。所以,在教師講解循環(huán)章節(jié)時(shí),學(xué)生需要經(jīng)常做些讀程序題,并通過上機(jī)調(diào)試知道自己的答案是否正確,如果不正確,是因?yàn)槟男﹩栴}造成的。通過這些大量的讀程——調(diào)試——分析,學(xué)生能進(jìn)一步地理解各種語句的使用及語法規(guī)定等,而且通過讀程也能分析出一些程序的功能,從而為后期的編程打下基礎(chǔ)。特別是在C語言的單招理論考試中,此類讀程序題很重要,分值也很高。歷年的理論考試,讀程序題都是12分,每道題對與錯(cuò)直接影響總分。所以,此階段學(xué)生一定要做好讀程序題,并且在做題的過程中,要培養(yǎng)良好的分析能力并且需要學(xué)生做題細(xì)心。
另外,在上機(jī)調(diào)試程序的過程中,學(xué)生必須養(yǎng)成良好的程序書寫習(xí)慣。并且,如果程序出現(xiàn)錯(cuò)誤,調(diào)試時(shí)可以發(fā)現(xiàn)錯(cuò)誤是什么,是在哪一行出現(xiàn)的。通過這種調(diào)試,可以讓學(xué)生發(fā)現(xiàn)自己平時(shí)書寫或者語法還有哪些錯(cuò)誤,對此如何改正。學(xué)生對錯(cuò)誤一一進(jìn)行解決、理解,并加以鞏固。學(xué)生通過上機(jī)調(diào)試,能發(fā)現(xiàn)程序的常見錯(cuò)誤,這樣可以幫助學(xué)生初期解決一些技能題中的程序改錯(cuò)題。
通過上機(jī)調(diào)試,學(xué)生還可以進(jìn)行一些例題的驗(yàn)證練習(xí),并可以對此進(jìn)行簡單更改,發(fā)現(xiàn)區(qū)別、分析原因并加深理解。比如學(xué)生上機(jī)時(shí)可以將書本上的例題進(jìn)行簡單錄入調(diào)試,理解運(yùn)行結(jié)果是如何得出的。如在練習(xí)循環(huán)語句時(shí),可以將單層循環(huán)體內(nèi)的變量進(jìn)行逐次輸出,也可以等循環(huán)全部結(jié)束后,將變量值進(jìn)行輸出。這兩種變量的輸出結(jié)果是有區(qū)別的。
在循環(huán)章節(jié)中,程序應(yīng)用主要有累加累乘、文本作圖、素?cái)?shù)、最大公約數(shù)、遞推、窮舉等。而這些程序都要涉及到算法的理解。如有一個(gè)數(shù)列前兩項(xiàng)值為0,0,從第三項(xiàng)開始值為前兩項(xiàng)之和。求該數(shù)列的前十項(xiàng)值。此題屬于遞推題,關(guān)鍵算法是每項(xiàng)值計(jì)算出來后,要作為已知值,從而計(jì)算它后面的值。即如何將每一次計(jì)算的值進(jìn)行更改。再如猴子吃桃問題也是屬于遞推題,但它屬于反推(已知第十天的值,求第一天的桃子數(shù))。
在數(shù)組章節(jié)中,程序應(yīng)用主要涉及一維、二維及字符數(shù)組。其中字符數(shù)組尤為重要。數(shù)組的應(yīng)用主要有計(jì)算最大、最小值、排序、查找、插入、刪除、統(tǒng)計(jì)、計(jì)算等。這一系列的數(shù)組應(yīng)用都離不開算法。比如如何將數(shù)組中某個(gè)內(nèi)容刪除或如何查找數(shù)組中是否包含某個(gè)數(shù)。這兩題的算法有多種。每種算法都需要理解思路。如查找的算法有順序查找算法及折半查找算法。其中折半查找算法的前提必須是排好序的數(shù)據(jù)才能進(jìn)行。而且升序與降序排變量設(shè)置也有區(qū)別。再比如二維數(shù)組求鞍點(diǎn)問題。所謂鞍點(diǎn)是指某個(gè)矩陣中某個(gè)數(shù)在所在行上最大,而在所在列上最小。對于任意一個(gè)矩陣,鞍點(diǎn)有可能沒有,也有可能1個(gè)或多個(gè)。這種矩陣題型,實(shí)際生活中較多,在編程時(shí)首先要求出行上最大,再求出列上最小。通過這種形象的分析,學(xué)生能夠理解算法精髓。
C語言程序設(shè)計(jì)時(shí)都要求采用模塊化的程序編程,即將一個(gè)程序分解成若干個(gè)功能較為單一的程序模塊去實(shí)現(xiàn),最后再將所有的程序模塊像搭積木一樣裝配起來。而每個(gè)單一的程序模塊可用函數(shù)來實(shí)現(xiàn)。從而函數(shù)的使用顯得尤其重要。函數(shù)使用中涉及到函數(shù)的定義、申明、及調(diào)用,其中函數(shù)調(diào)用時(shí)涉及到函數(shù)的嵌套調(diào)用及遞歸調(diào)用。學(xué)生在這部分主要難點(diǎn)涉及到函數(shù)的實(shí)參與形參的傳遞以及函數(shù)值的返回。學(xué)生在此需要理解理論知識并大量做題掌握其中實(shí)參形參值的傳遞。
對于每個(gè)函數(shù)需要實(shí)現(xiàn)哪些功能,這需要用算法來理解編寫程序。而針對同一個(gè)題目,算法實(shí)現(xiàn)時(shí)通常有多種。那么學(xué)生在使用時(shí)需要理解每一種算法的使用場合以及區(qū)別。重點(diǎn)還要理解哪一種算法程序書寫最短、程序?qū)崿F(xiàn)時(shí)間最短。即編寫程序時(shí)盡量使用最優(yōu)算法來實(shí)現(xiàn)。這也是每一個(gè)程序員必須具備的基本條件。這部分知識可以提高學(xué)生的邏輯思維能力,對于很多學(xué)生可以通過大量例題進(jìn)行理解,再逐步套用關(guān)鍵算法進(jìn)行編程。
總之,在對口單招考試中C語言的題型主要有程序閱讀、程序改錯(cuò)、程序填空及程序設(shè)計(jì)四種類型。前兩種類型難度不大普通學(xué)生都能應(yīng)付,而后兩種類型涉及較多的是算法的理解。對于很多算法的理解學(xué)生需要經(jīng)過上課聽講、課后理解、上機(jī)調(diào)試、加強(qiáng)記憶等多種形式結(jié)合,并能對算法進(jìn)行適當(dāng)修改,靈活記憶。對于算法的理解需要學(xué)生按照要求將關(guān)鍵算法中的每一條語句執(zhí)行情況一一進(jìn)行分析,逐步理解。而很多學(xué)生在算法理解時(shí)總是會出現(xiàn)問題遇到瓶頸,問題的根源在于學(xué)生的邏輯思維能力不夠,理解不了程序的每一步執(zhí)行。
相信每一個(gè)學(xué)生通過上述由淺入深地學(xué)習(xí),能逐步掌握C語言的關(guān)鍵算法及程序模塊的使用。很多學(xué)生對此會產(chǎn)生學(xué)習(xí)C語言的興趣,從而取得進(jìn)步,甚至很多學(xué)生會對它愛不釋手。最終為后期進(jìn)入高校打下良好基礎(chǔ)。