[摘要]本文指出了學習計算機語言的目的是學習程序設計的一般方法,并結合C語言的特點,提出了高校教師在課程教學的過程中應重點講授結構化程序設計的步驟的觀點;分析了概念和算法相似性對比講授的作用,以及采用“任務驅動”和“競爭”相結合的教學方法在C語言實驗教學中的成功經驗:提出了依托校園網構建C程序設計教學平臺的一般要求。
[關鍵詞]C語言 計算機教學 程序設計方法 任務驅動 競爭機制
C語言程序設計課程作為高校計算機技術基礎課程體系和教學內容的核心,在高校計算機教育中有著十分重要的地位。通過對該課程的學習與實踐,不僅要培養學生在今后的工作中利用計算機解決本專業實際問題的能力,為后續專業課程的理論學習和實踐提供有力的基礎支撐,還要拓展學生的思維模式,培養學生面向工程應用的意識,增強實踐技能。
計算機程序設計語言多種多樣,每一種語言都在發展完善中,因此高校教師在教學中除了要使學生能熟練運用C語言進行程序開發以外,更重要的是引導學生從C語言繁瑣的語法枝節中解脫出來,真正掌握使用計算機語言進行程序設計的方法,做到舉一反三、觸類旁通。下面筆者結合幾年來從事C語言教學的經驗,談談在C語言教學中幾個比較重要的問題。
一、重視程序設計方法的講解
學習計算機語言最重要的是讓學生在學習的過程中體會計算機語言的精髓——程序設計方法。因為計算機的發展日新月異,沒有人保證現在很流行的語言將來就不會被淘汰。但是不論計算機語言怎么變化,基本的程序設計方法是不會有很大變化的。掌握了程序設計的方法就是掌握了程序設計的靈魂,再通過學習相關的語法知識,就能夠編寫出任何一種語言的程序。因此程序設計方法的講解是C語言課程講授的重點。
在教學的過程中,教師要讓學生在短時間內領會結構化程序設計思想是行不通的。教師在教學中可以由淺入深、循序漸進地引導學生理解結構化編程的思想。譬如,可以先讓學生嘗試設計一個簡單的四則運算器,要求將每個運算功能用獨立的函數來實現,并把參與運算的對象作為函數的參數。當學生完成后,讓學生計算不同的算術式,從中體會結構化程序設計易于調試、移植的優點。這個任務讓學生對結構化程序設計方法有了感性的認識。
在后續的教學過程中,教師應該把結構化程序設計的思想貫穿在整個C語言的教學過程,體現在每一個具體的程序當中。但是很多時候由于時間和教學進度的關系,教師往往只能簡單地分析題意,然后直接給出程序流程圖和程序。這樣的講解過程割裂了題目、程序流程圖和程序三者之間的推導關系,學生自己編程時仍會感到無從下手。因此教師在教學過程中,應該首先教會學生如何由題意分析出算法,進而對算法進行圖形化描述,繪出程序流程圖,再使用相應的程序控制語句實現它。教師的言傳身教在C語言教學中不僅有利于培養學生良好的編程習慣,還能幫助學生提綱挈領地掌握各個知識點。
二、不同概念和算法的對比講述
《教學論》認為:“知識的對比是調動學生注意力的好方法,知識之間對比得越清楚,學生的注意力越集中,越能加強概念的理解與知識的掌握。”C語言中的概念比較復雜,規則繁多,而且內容前后銜接得很緊。教學過程中教師將前后的概念對比起來講述,將會收到事半功倍的效果。比如,指針這一部分有很多相關的概念,如指向變量的指針、指向數組的指針、指向字符串的指針、指向函數的指針等。這些概念很容易混淆,但是將這些概念對比起來講解,學生就很容易理解了。這些概念的落腳點都在最后兩個字——指針,表示它們是同一類型的變量。那么它們不同的地方在哪里呢?關鍵在于指針變量指向的不同,指針所指向變量的數據類型決定了指針變量的用法。通過這樣的講解,概念的定義就很容易理解,概念的用法也就可以統一了。
除了概念可以對比起來講述,C語言中還有許多針對同一問題采用不同解決方案的算法。比如,數據的排序問題有冒泡排序法、選擇排序法、插入排序法等,求解方程的根有迭代法、牛頓迭代法、二分法和弦截法。這些算法之間既有聯系又有區別,講清楚了算法的聯系和區別,也就解決了整個問題。舉個例子,用二分法和弦截法求方程f(X)=0的根,其原理都是在給定區間X1,X2內按照算法取得一個L值,用來替代端點X1或X2,從而循環形成新的區間,直到找到近似根為止。它們的算法大體相似,不同點就在于確定X0值的方法不同。所以這兩個算法對應的程序結構完全相同,只是計算X0的表達式有所不同。這樣的對比講授大大提高了學生學習的效率。
通過對概念和算法的相似性進行對比講授,幫助學生理順它們之間的內在聯系,指出異同,有助于學生對C語言中相關知識點進行橫向和縱向的融會貫通,從而從整體上把握C語言的知識結構。
三、采用“任務驅動”和“競爭”相結合的教學方法
“任務驅動”和“競爭”相結合的教學法就是針對教學內容設計相應的任務,在不同層次任務的驅動下激發學生學習的主動性,從而提高學生應用能力的一種方法。貫穿在整個教學活動中的“任務”實質上就是考試題目,學生在精心設計的任務驅動下展開學習活動,由簡到繁、由易到難、循序漸進地完成一系列任務。學生在不斷的任務驅動下總結出清晰的思路和方法,培養分析問題、解決問題以及綜合運用知識的能力,為在今后的學習中取得好成績奠定基礎。
在C語言實驗課中教師可以先將課程的基本知識點融合在一起,為每一章節按照難易程度設計必做題和選做題,并作為任務布置給學生。在保證正確率的前提下,教師不限定學生完成任務的數量,允許學得好的學生一直往前做;對于學習欠佳,不能按時完成必做題任務的學生,教師應督促他們提前預習,課后復習,要求他們弄清基本概念,掌握必備知識,鼓勵他們完成部分選做題任務;對于大部分能按時完成必做題任務的同學,應著重培養他們綜合運用知識解決問題的能力。教師還可以組織各種競賽,如開展擂臺賽,強化競技氣氛,通過定期適當公布每個學生的學習進度,評出各期擂臺賽的冠、亞、季軍,激發學生學習的熱情,鼓勵他們為達到下一目標奮力拼搏。在實際教學過程中,教師要關心少數競爭意識薄弱的學生,要引導他們正確認識競爭,幫助他們解決心理困惑,讓他們意識到在經過努力后也可以提升自己的層次,也會取得成功。
四、發揮網絡教學優勢
目前,C語言的網絡學習資源大多是建立在簡單的Web頁面和其他常用文件共享的基礎上,僅僅是課件或課程學習內容等學習資源的簡單羅列和閱讀。教師可以以校園網為依托,開發C語言程序設計教學網站,為學生構建一個自主學習和培養創新能力的平臺。
學生在“任務”的驅動和“競爭”的激勵下自主學習C語言時,要想超越他人必然要利用課余時間學習。當學習遇到困難吋,C語言程序設計教學網站可以成為學生自主學習的好助手。該系統應該按照教學步驟和教學規律將C語言程序設計知識點中具有代表性的概念提取出來,對相關、相似概念進行定義和描述,形成一個關于C語言程序設計課程的知識網絡,并以框圖形式直觀地顯示該知識的前導知識、后繼知識、相關知識,便于學生可以快速、準確地定位所要學習的知識。同時該系統還應按照學生自身的學習要求重組學習內容,實現個性化學習。其中的程序舉例還應從算法分析、流程圖、源程序三方面來描述,讓學生通過網站自主學習。
五、結構化程序設計語言向面向對象程序設計語言的過渡
作為對結構化程序設計語言的擴充,現在很多面向對象的程序設計語言,如JAVA、VC++等,都在保留C語言基本語法體系結構的基礎上增加了面向對象的機制,因其功能強大得到了越來越廣泛的應用。教學的過程中,教師應在學生掌握結構化編程思想的基礎上,結合具體實例向學有余力的學生灌輸面向對象程序設計的基本思想和思維方法,并在教學的后期有意識地引入繼承和派生的概念,將函數公有、私有和保護成員的優點與C語言中函數封閉性的優點和缺點相比較,為今后學生自學其他面向對象的程序設計語言打下基礎。
C語言的教學不應該拘泥于具體的某些語法規則,應讓學生在學完C語言課程之后,感覺自己的編程思想有了一次革命性的洗禮,這樣的C語言教學才是成功的。C語言教學過程本身是一個精益求精的過程,對于每一位教師,只要能把提高學生的學習興趣放在首位,在教學過程中不斷摸索,勇于進行教學改革,就會取得良好的教學效果。
責編 韋 微