季麗琴
(蘇州健雄職業(yè)技術(shù)學(xué)院 電子信息學(xué)院,江蘇 太倉(cāng) 215400)
C語(yǔ)言課程是我國(guó)多數(shù)高職院校電子信息技術(shù)等相關(guān)專業(yè)必修的一門基礎(chǔ)課程,它對(duì)學(xué)生后續(xù)學(xué)習(xí)專業(yè)技能課程(如單片機(jī)、嵌入式操作系統(tǒng)等)起著非常重要的作用。那么判斷一個(gè)學(xué)生是否學(xué)好這門課程的標(biāo)準(zhǔn)是什么呢?答案無(wú)疑是看學(xué)生能否根據(jù)要求用C語(yǔ)言自行設(shè)計(jì)且編輯出相關(guān)程序,并使之通過(guò)計(jì)算機(jī)的編譯(若有語(yǔ)法錯(cuò)誤,必須改正),然后進(jìn)行連接并形成目標(biāo)文件,最后看執(zhí)行結(jié)果與預(yù)期是否一致,若不一致,則需進(jìn)一步調(diào)試、糾錯(cuò)或重新設(shè)計(jì)程序,直至運(yùn)行結(jié)果與預(yù)期一致。從這個(gè)標(biāo)準(zhǔn)可以明顯看出,學(xué)生學(xué)好這門課程的關(guān)鍵點(diǎn)在于程序的編輯、程序的編譯和程序的調(diào)試,而這恰恰也是當(dāng)前許多高職生的弱項(xiàng),說(shuō)明以上三個(gè)關(guān)鍵點(diǎn)應(yīng)是教師在授課過(guò)程中最該關(guān)注、重視和強(qiáng)化的環(huán)節(jié)。筆者以學(xué)生的學(xué)習(xí)效果判斷標(biāo)準(zhǔn)為基礎(chǔ),結(jié)合實(shí)際教學(xué)過(guò)程中學(xué)生的學(xué)習(xí)困惑和體會(huì),反思C語(yǔ)言課程的教學(xué)方法和模式,提出奏好“編、改、調(diào)”教學(xué)三部曲,改革C語(yǔ)言實(shí)踐教學(xué)模式[1-3],逐步提升學(xué)生編程技能。
在多年的C語(yǔ)言教學(xué)中,筆者深切地感受到要教好這門課程是非常不容易的,因?yàn)榇蟛糠指呗殞W(xué)生在學(xué)習(xí)的過(guò)程中存在以下幾個(gè)主要問(wèn)題。
部分學(xué)生因?yàn)閷?duì)自己的能力表示懷疑,不夠自信,覺得憑自己的知識(shí)水平是設(shè)計(jì)不出程序的,所以不想編;還有學(xué)生因?yàn)闆]有發(fā)現(xiàn)程序設(shè)計(jì)的奧妙,認(rèn)為程序設(shè)計(jì)枯燥、乏味,所以對(duì)編程序不感興趣,也不想編。
很多高職學(xué)生的數(shù)學(xué)基本功并不扎實(shí),抽象思維和邏輯思維能力比較弱,即計(jì)算思維能力較差,導(dǎo)致對(duì)問(wèn)題的分析不透徹,不知道如何設(shè)置變量、不知道如何設(shè)計(jì)程序的結(jié)構(gòu)、不知道如何設(shè)置函數(shù),有了這么多的“不知道”,自然也就不會(huì)編輯程序。
編譯是計(jì)算機(jī)對(duì)所寫程序進(jìn)行語(yǔ)法檢查的一個(gè)過(guò)程,在實(shí)際授課過(guò)程中,很多學(xué)生會(huì)在這個(gè)環(huán)節(jié)停滯不前,不知道如何改正錯(cuò)誤,因?yàn)樗麄兛床欢霈F(xiàn)的英文錯(cuò)誤提示。
當(dāng)學(xué)生通過(guò)編譯后,在進(jìn)行連接、執(zhí)行程序時(shí),卻發(fā)現(xiàn)結(jié)果與理論預(yù)期值不同,這時(shí)就需要利用調(diào)試來(lái)分析錯(cuò)誤,找出問(wèn)題的源頭。然而,學(xué)生的弱點(diǎn)就在此處,沒有耐心進(jìn)行調(diào)試或是不會(huì)調(diào)試。長(zhǎng)此以往,極大地影響了學(xué)生讀程和編程的能力。
事實(shí)上,這些問(wèn)題就是影響學(xué)生學(xué)習(xí)進(jìn)程的嚴(yán)重“病癥”,針對(duì)這些“病癥”,教師應(yīng)該及時(shí)轉(zhuǎn)變角色,成為一名“良醫(yī)”,施以“良藥”,才能“藥到病除”。
生活中很多學(xué)生對(duì)游戲非常感興趣,達(dá)到近乎廢寢忘食的地步,但很多學(xué)生并不知曉原來(lái)這么好玩的游戲是用程序編寫完成的。如果教師在授課過(guò)程中給出一些游戲編寫實(shí)例,如計(jì)算器、貪食蛇、速算24、走迷宮等,讓學(xué)生親眼見證程序的魅力,那么學(xué)生對(duì)程序的第一印象就會(huì)不同,甚至?xí)ぐl(fā)學(xué)生自主設(shè)計(jì)完成游戲開發(fā)的學(xué)習(xí)欲望。
此外,部分學(xué)生對(duì)計(jì)算機(jī)的印象只是停留在計(jì)算機(jī)是一臺(tái)比人腦運(yùn)行速度快、存儲(chǔ)記憶能力比人腦強(qiáng)的“電腦”這樣一個(gè)普通的概念上,并沒有發(fā)現(xiàn)我們?nèi)四X要比電腦強(qiáng),人腦可以讓電腦乖乖地執(zhí)行任務(wù)。在C語(yǔ)言的授課過(guò)程中,教師必須通過(guò)形象的言語(yǔ)讓學(xué)生在頭腦里形成一個(gè)概念:電腦是一個(gè)聽不懂我們?nèi)祟惾魏我环N編程語(yǔ)言(包括中文、英語(yǔ)、法語(yǔ)等其他自然語(yǔ)言)但可以通過(guò)C語(yǔ)言等其他語(yǔ)言與人類溝通、交流的“機(jī)器人”。學(xué)生明白了這一點(diǎn)后,必然會(huì)為了與“機(jī)器人”交流、更為了讓“機(jī)器人”聽從指揮而激發(fā)內(nèi)在的編程熱情。
對(duì)于學(xué)習(xí)C語(yǔ)言這門課程來(lái)說(shuō),只有興趣還遠(yuǎn)遠(yuǎn)不夠,學(xué)生除了具備基本的數(shù)學(xué)思維能力,還必須具備一種特殊的思維能力才會(huì)編輯程序,這種特殊的思維能力被稱之為計(jì)算思維[4-5]。
計(jì)算思維的兩個(gè)本質(zhì)特征是抽象化[6]和自動(dòng)化[7]:抽象化指的是利用各種符號(hào)來(lái)精確描述實(shí)際事物的特征或?qū)傩曰蚬δ?,是一種建模的過(guò)程;自動(dòng)化指的是對(duì)抽象化得到的各種符號(hào)元素進(jìn)行具體操作,是一種按照順序、選擇或循環(huán)等各種結(jié)構(gòu)執(zhí)行的過(guò)程。兩種過(guò)程相輔相成、缺一不可,從以下例子可見一斑。
題目要求:某公司年終時(shí)舉行一場(chǎng)抽獎(jiǎng)活動(dòng),獎(jiǎng)勵(lì)人數(shù)共計(jì)10名,獎(jiǎng)勵(lì)規(guī)則:一等獎(jiǎng)1名,獎(jiǎng)勵(lì)金額2000元;二等獎(jiǎng)3名,獎(jiǎng)勵(lì)金額1000元;三等獎(jiǎng)6名,獎(jiǎng)勵(lì)金額500元。求:為舉辦這場(chǎng)抽獎(jiǎng)活動(dòng),該公司應(yīng)預(yù)備多少獎(jiǎng)金?
題目分析:以數(shù)學(xué)思維分析這道題目,假設(shè)公司應(yīng)預(yù)備的獎(jiǎng)金為S,一等獎(jiǎng)金額為x,二等獎(jiǎng)金額為y,三等獎(jiǎng)金額為z,則可列出數(shù)學(xué)算式S=x+3*y+6*z,將具體的數(shù)據(jù)分別代入x、y和z,得到S=2000+3*1000+6*500=8000元。從數(shù)學(xué)算式可以明顯看出,不同類別的獎(jiǎng)具有不同的獎(jiǎng)金數(shù)據(jù),這些數(shù)據(jù)可以抽象為3類變量,且這些數(shù)據(jù)的共同特征是為整型,這樣就完成了數(shù)據(jù)的抽象化。我們需要對(duì)這些抽象化的變量通過(guò)算術(shù)運(yùn)算符進(jìn)行簡(jiǎn)單的求和運(yùn)算,即需要建立一個(gè)求和函數(shù)來(lái)完成此項(xiàng)功能,這就是對(duì)求和功能的抽象化;還需要思考利用什么結(jié)構(gòu)來(lái)完成整個(gè)程序的編寫,經(jīng)分析,這道題目只需運(yùn)用簡(jiǎn)單的順序結(jié)構(gòu)就可完成變量與函數(shù)之間的自動(dòng)化過(guò)程,即先定義4個(gè)變量(3個(gè)變量代表不同金額的獎(jiǎng)金,另外1個(gè)變量代表預(yù)備獎(jiǎng)金),聲明求和函數(shù)模型,定義求和函數(shù)功能,然后在main( )函數(shù)中利用相關(guān)語(yǔ)句調(diào)用求和函數(shù),最后需調(diào)用printf()函數(shù)讓計(jì)算機(jī)在屏幕上輸出運(yùn)算結(jié)果。本題程序的抽象化和自動(dòng)化過(guò)程見表1。
表 1 抽象化和自動(dòng)化過(guò)程
完成抽象化和自動(dòng)化過(guò)程,必將有利于學(xué)生在頭腦中架構(gòu)起整個(gè)程序的框架,然后學(xué)生只需完成相關(guān)代碼的編寫即可。經(jīng)過(guò)這樣的反復(fù)訓(xùn)練,學(xué)生在一定程度上會(huì)更容易掌握編輯程序的技巧,所謂“熟能生巧”。
俗話說(shuō)得好,“吃一塹,長(zhǎng)一智。”這句古話揭示著這樣一個(gè)真理:犯錯(cuò)后才會(huì)進(jìn)步、才會(huì)增長(zhǎng)智慧,通過(guò)反思、反省、總結(jié)教訓(xùn)后,才不會(huì)再次犯同樣的錯(cuò)誤。這條真理同樣適用于C語(yǔ)言的學(xué)習(xí)。在C語(yǔ)言教學(xué)過(guò)程中,為了節(jié)約時(shí)間,可要求學(xué)生將錯(cuò)誤用手機(jī)拍照的方式記錄下來(lái),然后再利用已有的理論知識(shí)將錯(cuò)誤一一改正,若實(shí)在沒有能力改正,才能請(qǐng)教老師或其他同學(xué)。這樣可以加深學(xué)生對(duì)錯(cuò)誤的記憶,鍛煉學(xué)生的糾錯(cuò)能力,也可以減輕授課老師的負(fù)擔(dān),可謂一舉兩得。在課下,教師要求學(xué)生將編譯時(shí)的錯(cuò)誤以及對(duì)應(yīng)的改正方法認(rèn)真詳細(xì)地整理在各自的作業(yè)本上,這樣便能起到鞏固和加深印象的作用。學(xué)生常見的幾類編譯錯(cuò)誤見表2。從此法的實(shí)際運(yùn)用效果來(lái)看,學(xué)生們發(fā)生錯(cuò)誤的概率越來(lái)越少,即便編譯時(shí)仍舊發(fā)生錯(cuò)誤,但能在較短的時(shí)間內(nèi)完成糾錯(cuò)任務(wù)。
表 2 常見的編譯錯(cuò)誤類型及改正方法
編譯時(shí)的語(yǔ)法錯(cuò)誤是普遍現(xiàn)象,也是較低層次的錯(cuò)誤。一般來(lái)說(shuō),學(xué)生在多次實(shí)踐的過(guò)程中都能認(rèn)識(shí)并糾正,但有一類錯(cuò)誤是較高層次的錯(cuò)誤,在編譯時(shí)不容易被發(fā)現(xiàn),只有在執(zhí)行結(jié)果時(shí)才發(fā)覺,這類錯(cuò)誤就是邏輯錯(cuò)誤。改正這類錯(cuò)誤有助于學(xué)生提高C語(yǔ)言應(yīng)用能力和計(jì)算思維能力,也是對(duì)教師教學(xué)技能和C語(yǔ)言應(yīng)用技能的一種考驗(yàn)。
以下列程序段為例。
很明顯,該例旨在求取1+2+3+4+5的和,但由于缺少了一對(duì)花括符{ },導(dǎo)致計(jì)算機(jī)認(rèn)為while語(yǔ)句后只有一條執(zhí)行語(yǔ)句sum+=i,所以此例中的while語(yǔ)句會(huì)變成一個(gè)死循環(huán),應(yīng)將其改為以下形式:
因此,教師必須率先垂范,通過(guò)設(shè)置較多的、典型的錯(cuò)誤案例,進(jìn)行單步調(diào)試演示,邊調(diào)試邊講解分析,分析要有邏輯性、透徹性,讓學(xué)生掌握基本的調(diào)試方法。此外,還可以設(shè)置一些較難的邏輯錯(cuò)誤案例,教師以引導(dǎo)為主,讓學(xué)生自主調(diào)試程序。在實(shí)際教學(xué)中,學(xué)生的學(xué)習(xí)積極性和主觀能動(dòng)性被極大調(diào)動(dòng)起來(lái),調(diào)試技能逐步提升。
“實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)”,因此,判斷學(xué)生是否掌握C語(yǔ)言編程技能的標(biāo)準(zhǔn)主要是學(xué)生會(huì)不會(huì)編、會(huì)不會(huì)改、會(huì)不會(huì)調(diào),筆者以“編、改、調(diào)”三部曲改革C語(yǔ)言實(shí)踐教學(xué)的觀點(diǎn)正是立足于這個(gè)標(biāo)準(zhǔn)而提出的。實(shí)踐表明,大部分學(xué)生取得了可喜的進(jìn)步:從沒有興趣、一點(diǎn)不想編到逐步有了熱情,慢慢地想編;從沒有太多的思路而不知所措到逐步能運(yùn)用計(jì)算思維能力,慢慢地會(huì)編;從初學(xué)時(shí)編譯程序產(chǎn)生大量的語(yǔ)法錯(cuò)誤到逐步減少錯(cuò)誤的發(fā)生,慢慢地會(huì)改;從不會(huì)設(shè)置斷點(diǎn)、不會(huì)通過(guò)單步調(diào)試分析到逐步能自主調(diào)試分析、解決邏輯問(wèn)題,慢慢地會(huì)調(diào)。
參考文獻(xiàn):
[1]肖捷, 肖海容. C 語(yǔ)言程序設(shè)計(jì)實(shí)踐教學(xué)方案研究與設(shè)計(jì)[J].東莞理工學(xué)院學(xué)報(bào), 2012,19(5): 105-109.
[2]劉在英,楊平, 張麗曉. 程序設(shè)計(jì)課程實(shí)踐教學(xué)模式的探討[J].實(shí)驗(yàn)室研究與探索, 2013, 32(10): 156-159.
[3]于延, 周國(guó)輝, 李紅宇, 等. CDIO模式下C語(yǔ)言程序設(shè)計(jì)實(shí)踐教學(xué)改革[J]. 計(jì)算機(jī)教育, 2016(2): 122-126.
[4]吳紹兵. 計(jì)算思維和程序設(shè)計(jì)能力的培養(yǎng)[J].計(jì)算機(jī)教育, 2011(16): 11-14.
[5]蘇海英. 計(jì)算思維理論指導(dǎo)下的程序設(shè)計(jì)教學(xué)改革實(shí)踐[J]. 現(xiàn)代計(jì)算機(jī), 2012(8): 32-34.
[6]汪紅兵, 姚琳, 武航星, 等. C語(yǔ)言程序設(shè)計(jì)課程中的計(jì)算思維探析[J]. 中國(guó)大學(xué)教學(xué), 2014(9): 59-62.
[7]劉光蓉. 融入計(jì)算思維的C語(yǔ)言實(shí)驗(yàn)教學(xué)設(shè)計(jì)[J]. 實(shí)驗(yàn)室研究與探索, 2015, 34(10): 81-103.
[8]陳娟, 徐新海, 王學(xué)慧. 如何提高學(xué)生的實(shí)際編程能力[J]. 計(jì)算機(jī)工程與科學(xué), 2014, 36(增刊2): 213-219.