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

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

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