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