喬 良
(華北科技學(xué)院計(jì)算機(jī)學(xué)院,北京東燕郊 101601)
C語言具有功能豐富、表達(dá)能力強(qiáng)、目標(biāo)程序效率高、可移植性好等特點(diǎn),已成為計(jì)算機(jī)程序設(shè)計(jì)人員必須掌握的一種通用高級(jí)程序設(shè)計(jì)語言。加之其應(yīng)用范圍廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力,因此,C程序設(shè)計(jì)是國(guó)內(nèi)許多高校工科專業(yè)必修的計(jì)算機(jī)課程,用來培養(yǎng)學(xué)生設(shè)計(jì)算法和動(dòng)手編程的能力。本文作者根據(jù)教學(xué)經(jīng)驗(yàn),對(duì)C語言教學(xué)過程中遇到的主要問題進(jìn)行分析,并提出了解決方法。
對(duì)于工科非計(jì)算機(jī)專業(yè)來說,很多學(xué)生往往會(huì)有這樣的疑問,我又不是學(xué)計(jì)算機(jī)專業(yè)的,為什么要學(xué)C語言呢?這樣的疑問來自于一個(gè)先入為主的想法:編程是計(jì)算機(jī)專業(yè)才去做的事情。有些老師往往忽視了這樣的想法,上來就講“hello world”,導(dǎo)致了學(xué)生帶著疑慮學(xué)習(xí),這種疑慮甚至?xí)灤┍鹃T課程教學(xué)活動(dòng)的始終。教師沒有解決好“為何而學(xué)”,結(jié)果是學(xué)生學(xué)習(xí)的目的性不強(qiáng)。而學(xué)生如果長(zhǎng)期處于這種學(xué)習(xí)目的不確定的狀態(tài),勢(shì)必會(huì)造成心理上的障礙,結(jié)果一定會(huì)影響學(xué)習(xí)效果。
不少學(xué)生學(xué)習(xí)C語言的方法跟學(xué)習(xí)英語課一樣,靠背書,喜歡下力氣去記課本里面的各種語法規(guī)則,這是一個(gè)很大的學(xué)習(xí)誤區(qū)。學(xué)生單單憑記憶很難記住所有的知識(shí)點(diǎn),即便是記住了,在運(yùn)用的時(shí)候也往往很難得心應(yīng)手,表現(xiàn)就是學(xué)生感覺知識(shí)點(diǎn)都知道了,但寫出的程序中總是誤百出,怎么改運(yùn)行都不通過。這種情況的發(fā)生,源自學(xué)生沒有理清理論學(xué)習(xí)與動(dòng)手實(shí)踐的關(guān)系,還按照學(xué)習(xí)數(shù)學(xué)、物理那樣,先背公式再做題的套路去看待C語言,這種思路在計(jì)算機(jī)編程語言的學(xué)習(xí)上是行不通的。而且,由于方法的錯(cuò)誤,學(xué)生的學(xué)習(xí)往往見效較慢,容易倦怠,效果會(huì)很不理想。
學(xué)生缺乏主動(dòng)性的表現(xiàn)很多,比如不進(jìn)行課前預(yù)習(xí),對(duì)提問表現(xiàn)不積極,不喜歡設(shè)計(jì)新算法等等,其中以上機(jī)課中的情況最為突出。輔導(dǎo)過C語言上機(jī)課的老師都有體會(huì),在課堂上沉默寡言的學(xué)生突然都變得愛提問了,而問題一般集中在程序無法通過編譯,或運(yùn)行出錯(cuò)上。通過觀察發(fā)現(xiàn),為數(shù)不少的學(xué)生,一旦遇到程序編譯出錯(cuò)或是程序運(yùn)行結(jié)果不正確的情況,立刻就舉手叫老師,而不是去找問題的原因。而教師如統(tǒng)統(tǒng)解答,結(jié)果就是教師事實(shí)上完成了程序的調(diào)試,而學(xué)生并沒有真正參與其中,久而久之,容易使學(xué)生養(yǎng)成不愛動(dòng)腦的習(xí)慣,有些學(xué)生直到期末結(jié)課時(shí)都看不懂編譯器的錯(cuò)誤提示,這樣就使上機(jī)課徹底失去了應(yīng)有的作用。
同時(shí),學(xué)生求知欲低也是一個(gè)較為普遍的問題,主要表現(xiàn)在上課時(shí)位置靠后,睡覺、玩手機(jī),編程作業(yè)抄襲或直接從互聯(lián)網(wǎng)上查找答案等等。原因有很多種,前文提到的目的不明,定位不清,方法有誤等因素都會(huì)導(dǎo)致學(xué)生失去對(duì)課程的興趣。經(jīng)與學(xué)生交流,最主要的原因是學(xué)生認(rèn)為這門課程“沒什么用”,學(xué)習(xí)就是為了最后能順利通過考試而已。如果學(xué)生都以通過考試為最終目標(biāo),勢(shì)必出現(xiàn)“六十分萬歲,多一分浪費(fèi)”的情況,學(xué)習(xí)效果不理想也就很容易理解了。
隨著計(jì)算機(jī)的普及,很多地方在高中階段已經(jīng)開設(shè)了計(jì)算機(jī)課程。但各地計(jì)算機(jī)教育的水平還是參差不齊,導(dǎo)致學(xué)生的計(jì)算機(jī)基礎(chǔ)水平也有很大區(qū)別。以我校大一新生為例,有的學(xué)生已經(jīng)學(xué)過編程語言,可以獨(dú)立設(shè)計(jì)算法,寫出簡(jiǎn)單的程序;有的學(xué)生對(duì)計(jì)算機(jī)的認(rèn)識(shí)只限于office辦公軟件的應(yīng)用,還有少數(shù)學(xué)生甚至沒有真正接觸過計(jì)算機(jī)。面對(duì)基礎(chǔ)相差如此巨大的學(xué)生,教師的教學(xué)內(nèi)容卻是一致的。教學(xué)活動(dòng)參照的是平均水平,面向的是絕大多數(shù),但這一定會(huì)導(dǎo)致部分學(xué)生“吃不飽”,還有部分學(xué)生“咽不下”,長(zhǎng)此以往,勢(shì)必會(huì)影響到教學(xué)質(zhì)量。
受到學(xué)時(shí)和教材的限制,C語言課程往往無法將學(xué)生訓(xùn)練出理想的狀態(tài)。這里的“理想”是指學(xué)生所設(shè)計(jì)算法的合理性和所編寫程序的實(shí)用性,而原因在于當(dāng)前的C語言教學(xué)內(nèi)容缺乏實(shí)用性。舉例來說,學(xué)生學(xué)了一學(xué)期的編程,寫程序時(shí)變量名永遠(yuǎn)是“a,b,c,x,y,z”這樣的簡(jiǎn)單字符,很少有學(xué)生會(huì)使用超過3個(gè)字符的變量名(數(shù)組名除外),更別提有意義的字符串了;寫出的程序最多一二十幾行,很多老師稱之為“豆腐塊程序”,不具備明顯的實(shí)用價(jià)值;學(xué)生接觸到的函數(shù)太少,使用C語言能完成的工作極其有限;指針等內(nèi)容由于難度較大,同時(shí)學(xué)時(shí)不足,教學(xué)中淺嘗輒止,沒有體現(xiàn)出其真正的價(jià)值等等,這一系列的因素,導(dǎo)致學(xué)生最終能寫出的程序是幼稚的,僅僅能應(yīng)付考試而已。
針對(duì)以上教學(xué)中存在的問題,經(jīng)過積極探索,從教師和學(xué)生兩方面分析原因,并提出改進(jìn)措施,以期幫助學(xué)生提高學(xué)習(xí)興趣,提升教與學(xué)的效果。
想讓學(xué)生較快的進(jìn)入學(xué)習(xí)狀態(tài),首先就要明確課程開設(shè)的意義和目的。當(dāng)學(xué)生搞清楚因何而學(xué)的時(shí)候,他們的學(xué)習(xí)行為才會(huì)更有目的,更為主動(dòng)。因此,教師在設(shè)計(jì)教學(xué)內(nèi)容時(shí),很重要的一點(diǎn),應(yīng)該在第一次課上首先講清楚C語言課程對(duì)于學(xué)生有何幫助,更通俗一點(diǎn)講,要讓學(xué)生心里明白“學(xué)了有啥用”。而此時(shí)教師也應(yīng)避免向?qū)W生傳達(dá)過于空洞或不太實(shí)際的內(nèi)容,比如“C語言能鍛煉邏輯思維能力,提高綜合素質(zhì)”等等,因?yàn)楸磉_(dá)的事物過于抽象,學(xué)生聽后往往如過耳煙云,沒有印象。相反,如果能利用學(xué)生務(wù)實(shí)的心理,把C語言的作用與學(xué)生最關(guān)心的學(xué)業(yè)、工作等問題聯(lián)系起來,效果就要好得多。比如,在面向電信專業(yè)的學(xué)生授課時(shí),可以告訴學(xué)生目前電信行業(yè)中C語言的地位:絕大多數(shù)軟件都由C語言編寫,能夠精通掌握C語言無疑在從事電信軟件的相關(guān)工作時(shí)有很大的優(yōu)勢(shì);再如,可列舉一些較為突出的往屆畢業(yè)生的收入狀況等等,這些內(nèi)容,對(duì)于大多數(shù)學(xué)生來說,往往具有很大的吸引力和驅(qū)動(dòng)力。而學(xué)生明白了學(xué)習(xí)意義后,其積極性必然得到提高。
C語言的特點(diǎn)之一就是知識(shí)點(diǎn)龐雜零散,條條框框很多,編程時(shí)一不注意,容易出錯(cuò)。因此學(xué)生經(jīng)常犯的一個(gè)學(xué)習(xí)方法上的錯(cuò)誤就是:先去背書,把規(guī)則都記住了再去寫程序。這樣做有其合理性,就像學(xué)英語一樣,單詞都記不住,如何寫文章呢?但是這種方法存在兩個(gè)明顯的弊端:第一,C語言中規(guī)則很多,單憑死記硬背很難全部掌握。第二,記住了一條條的規(guī)則,但實(shí)際使用效果并不好。背課本的學(xué)生常遇到一個(gè)問題,貌似規(guī)則都記住了,但是程序的結(jié)果就是不對(duì)。究其原因,C語言是一門實(shí)踐性非常強(qiáng)的課程,與其說是看書記住的,不如說是編程練會(huì)的。因此,教師應(yīng)向?qū)W生灌輸和強(qiáng)調(diào)動(dòng)手的重要性,一些編程的規(guī)則,通過學(xué)生反復(fù)使用練習(xí),自然而然就成為一種習(xí)慣,而不需要去刻意記憶,這樣的方法,相比背課本顯然有效的多。
很多教師在教授C語言時(shí),只是簡(jiǎn)單地將講授內(nèi)容做成電子教案,在課堂上照本宣科,按照程序語言語法、規(guī)則、變量、三種結(jié)構(gòu)按部就班地一路講來,學(xué)生卻日益提不起興趣,以至于對(duì)學(xué)習(xí)C語言產(chǎn)生倦怠心理,最后的教學(xué)效果會(huì)非常不理想。因此,教師要精心設(shè)計(jì)課堂內(nèi)容,做好知識(shí)的引入和適時(shí)啟發(fā),用學(xué)生容易接受的方式進(jìn)行講解。比如,在學(xué)習(xí)函數(shù)一章時(shí),很多學(xué)生對(duì)于函數(shù)如何使用很不理解,不知道何時(shí)該定義函數(shù),何時(shí)該寫調(diào)用語句。教師如果單單從頭到尾一行行的講程序,學(xué)生不好把握。應(yīng)該從程序設(shè)計(jì)的一般步驟上向?qū)W生講清這個(gè)問題。C語言的程序編寫可分為四步,即:定義,輸入,運(yùn)算,輸出。而子函數(shù)的引入,就是把原有的運(yùn)算部分放到子函數(shù)中去,主函數(shù)中的運(yùn)算語句換成函數(shù)調(diào)用語句。主函數(shù)中的四步變成了:定義,輸入,調(diào)用,輸出,而具體的運(yùn)算過程由子函數(shù)完成。經(jīng)過這樣的講解,學(xué)生就比較容易理解函數(shù)的定義和使用了。
教師在教學(xué)過程中,一定要注意培養(yǎng)學(xué)生自主學(xué)習(xí),獨(dú)立思考的能力和習(xí)慣,要讓學(xué)生“斷奶”。比如,在進(jìn)行上機(jī)課輔導(dǎo)時(shí),面對(duì)學(xué)生的提問,教師不能一味的幫學(xué)生找問題,調(diào)試程序。而是應(yīng)該引導(dǎo)學(xué)生自己動(dòng)腦動(dòng)手去找到問題,解決問題。我校使用VC++6.0作為編程環(huán)境,學(xué)生開始對(duì)錯(cuò)誤提示很不感興趣,一是沒有養(yǎng)成看提示信息的習(xí)慣,二是發(fā)現(xiàn)是英文,不愿意花時(shí)間去閱讀。此時(shí),教師可以在開始的幾次實(shí)踐課上先帶領(lǐng)學(xué)生讀錯(cuò)誤提示,幫助學(xué)生判斷問題,查找原因,逐漸教會(huì)學(xué)生使用VC的各個(gè)輔助功能,從而慢慢的讓學(xué)生具備獨(dú)立調(diào)試程序的能力。絕不能大包大攬,使學(xué)生過于依賴教師。
學(xué)生計(jì)算機(jī)基礎(chǔ)不同是教師時(shí)常要面對(duì)的情況。有兩個(gè)處理此情況的思路,一是實(shí)行差異化的教學(xué)。比如,對(duì)于有一定編程基礎(chǔ)的學(xué)生,可以額外布置一些有一定難度的作業(yè),引導(dǎo)其進(jìn)行更深層次的思考;或是給學(xué)生創(chuàng)造實(shí)踐的機(jī)會(huì),參與某個(gè)具體的項(xiàng)目等等。此外,可以參照英語的分級(jí)教學(xué)的思路,實(shí)行編程語言分級(jí)教學(xué)。在開課之前,先對(duì)學(xué)生進(jìn)行水平測(cè)試,根據(jù)成績(jī)把學(xué)生分在不同層次的班級(jí)進(jìn)行授課,授課內(nèi)容當(dāng)然有所不同,這樣也可在一定程度上化解學(xué)生基礎(chǔ)不同和教學(xué)內(nèi)容一致之間的矛盾??偠灾?,應(yīng)該把學(xué)生之間的差異作為安排教學(xué)內(nèi)容一個(gè)重要因素來考慮。
每一位教師都希望把學(xué)生個(gè)個(gè)都培養(yǎng)成編程高手,而這個(gè)愿望是不切實(shí)際的。教學(xué)的內(nèi)容往往受多方面因素的影響:本課程的培養(yǎng)目標(biāo),學(xué)生的接受能力,課時(shí)的多少,教材的選用等等。以當(dāng)前的實(shí)際情況來看,學(xué)生在一學(xué)期的學(xué)習(xí)后,還很難寫出真正像樣的程序:定義變量名沒有實(shí)際意義(多是簡(jiǎn)單的單個(gè)字符),所編程序不具有實(shí)用價(jià)值(只能應(yīng)付考試),不了解系統(tǒng)函數(shù)(學(xué)生能接觸到的函數(shù)很有限),沒有養(yǎng)成良好的編程習(xí)慣(不懂如何加注釋)等等??梢哉f,學(xué)生從課堂上學(xué)到的只是C語言的皮毛,遠(yuǎn)遠(yuǎn)沒有看到C語言的全貌。這其中,有教材的原因,一些教材上就是用的a,b,c這樣簡(jiǎn)單的變量,就是十幾行的簡(jiǎn)單程序,學(xué)生難免會(huì)依葫蘆畫瓢,因此,選用恰當(dāng)?shù)慕滩膶?duì)培養(yǎng)學(xué)生的編程習(xí)慣非常重要。除了教材,也有課程安排的原因,C語言往往課時(shí)少,內(nèi)容多,很多老師有這樣的感覺,剛剛講到精髓的地方,要結(jié)課了;學(xué)生剛學(xué)了點(diǎn)有深度的東西(指針),還沒吃透,馬上又要進(jìn)行期末考試。當(dāng)然,要在60-70學(xué)時(shí)內(nèi)把C語言講透很困難。但在課程設(shè)置時(shí),應(yīng)該考慮到課程的延續(xù)性,可以讓學(xué)生在后續(xù)學(xué)期中選修C語言的高級(jí)內(nèi)容,以利于學(xué)生對(duì)于本門語言的精通掌握。
作為一門重要的基礎(chǔ)性編程語言,C語言在培養(yǎng)學(xué)生的編程習(xí)慣,算法設(shè)計(jì)能力,以及后續(xù)課程的學(xué)習(xí),都有著重要的意義。本文從教學(xué)實(shí)踐出發(fā),列舉了C語言教學(xué)中常面臨的一些問題,并分析原因,同時(shí)提出了解決思路,為進(jìn)一步做好C語言的教學(xué)工作,不斷提升教學(xué)效果做出探討。
[1] 程傳鵬.基于大學(xué)生心理特點(diǎn)的C語言教學(xué)方法[J].計(jì)算機(jī)教育,2012,(01):68 -71.
[2] 方紅琴.立體式C語言程序設(shè)計(jì)教學(xué)改革探討[J].計(jì)算機(jī)教育,2012,(12):26 -28.
[3] 王巍.高級(jí)語言程序設(shè)計(jì)課程教學(xué)方法探析[J].計(jì)算機(jī)教育,2012,(08):44 -46.
[4] 陳高云,李蕊,王嘉昀.貫穿模塊化編碼的C語言教學(xué)過程[J].計(jì)算機(jī)教育,2012,(12):86-89.
華北科技學(xué)院學(xué)報(bào)2014年3期