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