吳秦
(江南大學 物聯網工程學院,江蘇 無錫 21412)
C語言程序設計教學模式探討
吳秦
(江南大學 物聯網工程學院,江蘇 無錫 21412)
本文從如何激發學生對課程的學習熱情、實例滲透基本概念、啟發式教學、引導學生互動等多個方面闡述C語言的有效教學模式,幫助學生更好地掌握C語言、提升編程能力。
C語言程序設計;實例教學;啟發式教學;正反饋
隨著計算機技術的飛速發展和普及,計算機在各個領域中得到了廣泛應用。為了適應時代需求,幫助大學生更好地利用計算機編程技術解決專業問題,在高校的本科教育中,計算機程序設計課程已成為大部分理工科專業的必修課或者選修課。而C語言作為最經典的編程語言之一,以其豐富的數據類型、清晰的語言結構和結構化編程思想,成為首選的程序設計課程。
本文結合筆者在高校多年從事C語言程序設計這門課程的教學經驗,討論C語言程序設計的教學模式,從而調動學生學習C語言的積極性,幫助學生更好地掌握C語言編程技能。
大學生在修一門課程時通常會問:為什么要學這門課?這門課程有什么用處?如果問題得不到答案或者認為這門課程學了也沒有用處,那么學生就會缺乏學習動力和積極性。在修C語言程序設計這門課程的時候,學生也會存在同樣的疑問。所謂“磨刀不誤砍柴工”,在開始正式講述C語言理論知識之前,給學生闡明C語言的重要性和實用性是非常有必要的。只有這樣,才能從一開始就激發學生學習的內在動力和激情。
那么,如何闡明C語言學習的重要性呢?作為老師,應該結合學生的興趣點,讓他們感受到C語言的重要性和學習意義。筆者在講授C語言的第一節課時,通常會花一點時間給學生講述這方面的知識。例如,Linux和Unix操作系統都是以C語言為主進行開發,Windows操作系統是以C++為主開發。手機內部的應用軟件、游戲等很多都是采用C語言進行嵌入式開發的,例如推箱子、貪吃蛇等游戲。學生所熟知的游戲“仙劍奇俠傳”,由WATCOM C/C++寫的。而C語言是C++的基礎,通常都是先學習C再學習C++,可見C語言的重要性。另外,在上課過程中,再穿插講一些著名人士(如比爾·蓋茨、馬克·扎克伯格)的成功故事,則更有益于激勵和提升學生對于計算機編程課程的學習熱情。
很多學生在上C語言程序設計課程之前,未上過其他計算機語言課程,在剛接觸這門課程時,通常懷著惴惴不安的心情,擔心自己學不好。因此,在剛開始上課時,應該用簡單的例題吸引學生,讓學生感受到學習C語言并非想象的那么難。例如,在第一節課,可以先在屏幕上通過運行C程序顯示一行信息:“This is a C program.”然后給學生顯示該信息的C語言源代碼:
void main()
{print("This is a C program. ");}
此時學生雖然還未學C語言編程,但是發現程序很簡單,就比較容易接受這門課程。隨后可以讓學生仿照例題寫程序顯示“I am an undergraduate student.”讓學生動手寫自己的第一個程序,內容也與他們自己有關,增強學生的參與性,無形中也會增加學生的學習熱情。
最初的幾堂課由于內容相對簡單,學生感到新奇,因此學習積極性比較高。隨著課程內容的深入,出現大量的語法規則時,往往會覺得枯燥乏味。因此,在講解C語言的一些定義和語法規則時,最好避免按部就班,直接給出定義和語法規則再給出例題。相反,我們可先舉若干例題,讓學生從中發現規律和總結規則,再給出定義。一方面有利于激發學生的上課積極性和活躍思維,另一方面也有利于學生記住這些規則。畢竟,通過思考總結出來的規則比死記硬背的知識更讓人印象深刻。在給出定義時,應對照著例題進行解釋,這樣有利于幫助學生記憶和理解。例如,我們在講解for循環語句規則時,可以先給出以下兩個簡單的例題(例1和例2),并通過運行程序給出對應運行結果。讓學生思考和猜測程序大致完成什么工作,再結合例題給出for循環的語法規則,并通過例題講解for循環中各個表達式及語句的執行順序。其解釋過程如圖1所示。學生對應示例理解規則,就能較快地掌握for語法規則。

圖1 for循環語法、示例及執行流程
在講完語法規則以后,可趁熱打鐵讓學生進行課堂練習,鞏固剛學習的知識點。例如,在講解完for語句規則以后,可以讓學生模仿例2用for語句完成1到20的偶數之和,加深其對知識點的理解。
在學習過程中,提高學生主動學習的積極性非常重要。只有學生發自內心想學,主動思考,學習效果才會更好。因此,在課堂教學過程中,老師應避免直接陳述知識點,而應積極引導學生思考。理工科的學生,邏輯思維能力較強,讓他們通過例題分析去總結知識點,更利于他們的學習和記憶。例如,在講解while和do while語句差異時,可以先給出以下兩個例題(例3和例4)。在不運行程序的前提下讓學生思考k=1和k=11時兩個例題的結果;然后運行程序給出例題運行結果(k=1,例3和4的結果都為sum=55。k=11,例3的結果為sum=0;例4的結果為sum=55)。對于理解while和do while循環的同學,在寫出答案的時已經領悟出while和do while兩者的差異;而對于不理解while和do while差異的同學,則讓他們對比程序運行結果,思考兩者差異。最后,再由老師解釋兩者差異:“while語句先判斷,后執行循環體;do while先執行循環體再做判斷。當while判斷表達式第一次的值為‘真’時,兩種循環結果相同;否則不相同。”通過例題對比思考,可加深學生對知識點的理解。

除了通過對比讓學生加深思考以外,也可故意在程序中制造一些錯誤,使程序編譯報錯或者編譯通過但無法實現預期目標,讓學生從老師給出的程序中找bug,在程序調試過程中解決問題并加深對知識點的掌握。例如,給出例5,該程序的本意是計算1到10之和,運行程序后屏幕上沒有任何運行結果,再讓學生思考為什么得不到想要的結果。學生通過觀察可以發現,“while(i<=10);”中的分號代表while循環體為空,i的值始終為1,導致程序陷入死循環。要想完成計算1到10之和,只需將“while(i<=10);”中的分號刪除。此例題也體現出對于C語言而言,“失之毫厘,謬以千里”,從而讓學生在編程過程中關注細節。
著名的《本科教育實踐七原則》一書中指出,本科教育的前兩個原則為:(1)加強師生交流;(2)引導學生間開展互惠合作。可見,在教學過程中,加強師生交流以及學生與學生之間的交流是非常重要的。一方面,老師應該通過課堂提問等方式加強師生互動。另一方面,老師也應該積極引導學生與學生之間開展互動。例如,在課堂練習時,可將學生分成若干小組,給出題目由學生在小組內通過討論給出答案。受競賽獲勝心理的驅使,使得學生通力協作,積極思考。另外,由于不同學生的思維模式不一樣,對于同一題目,不同組往往給出不同的解題方式,實現了“一題多解”的課堂教學。
除了在上課期間分組討論以外,在實驗課也應鼓勵學生之間互相討論。實驗課是學生真正親自動手的階段,在實踐過程中難免會遇到各種問題。有些學生擔心向老師求助會被老師認為上課沒有認真聽講,所以不敢問老師。如果鼓勵學生之間討論,學生可以沒有思想負擔地向其他同學請教,回答問題的學生則從學生的角度幫助提問的學生解答問題,更有利于學生對知識點的理解。另外,在學生A向老師求助時,老師也可以讓學生B分析學生A編程中存在的問題,鼓勵學生積極思考。如果學生B發現問題所在,則會有一定的成就感,從而更喜歡這門課程;如果學生B無法找到學生A程序中的問題,則可以同時給學生A和B講解這一知識點,幫助兩位同學解決問題,這樣也有利于學生更好的掌握C語言編程技能。
在上課期間,老師通常鼓勵學生不懂就立即提問。但是,不同學生喜歡和老師溝通的方式不一樣,有的同學可能因為害羞不喜歡課堂提問,所以應該鼓勵學生通過其他方式與老師溝通。例如,讓學生在作業本上寫出完成作業時遇到的問題,或者通過email、qq等方式尋求老師的幫助,老師也應及時給學生回饋。例如,學生在編程過程中遇到問題,通過email向老師求助,隔了幾天還沒有收到老師的回復,那么學生會認為老師讓學生提問只是流于形式,下次再遇到問題時,也就沒有再與老師溝通的積極性,也影響了學生的學習積極性。相反,老師若能立刻給學生回饋或在課堂上分析講解,學生則會認為老師重視自己的問題,學習積極性也因此提高。
另外,無論學生提什么樣的問題,都應給予正回饋,而不是對學生進行批評教育。事實上,學生向老師提問前會有各種顧慮,通常需要很大的勇氣才敢提問。所以,學生提問本身勇氣可嘉,這一點就值得表揚。如果學生提問遭到批評,學生以后再不敢也不愿提問,直接影響其學習積極性。
本文從如何激發學生學習熱情、開展啟發式教學、引導學生參與課堂互動、給予學生正反饋等多個角度探討C語言課程教學模式。相信通過以上方法,可以幫助學生更好地掌握這門課程。同時,筆者認為本文所提的教學模式也可以推廣到理工科其他課程,尤其是偏重實踐的課程教學中。
[1]Arthur W.Chickering and Zelda F.Gamson.Seven principles for good practice in undergraduate education[J].American Association of Higher Education Bulletin,1987,39(7).
[2][美]拉爾夫·泰勒.課程與教學的基本原理[M].羅康,張閱,譯.北京:中國輕工業出版社,2008.
G642.0
A
1674-9324(2014)42-0271-02
江南大學2013年校級本科教育教學改革研究項目(項目編號:JGB2013041)。
吳秦(1978-),女,江蘇宜興人,博士,副教授,研究方向:計算機視覺、模式識別。