蔣海華 李俐 鄭爽 崔玲
摘要:文章針對(duì)高校非計(jì)算機(jī)專(zhuān)業(yè)C語(yǔ)言課程,分析課程教學(xué)中存在的問(wèn)題,從3個(gè)角度探討課程教學(xué)改進(jìn)的方法,進(jìn)而提高教學(xué)效果。
關(guān)鍵詞:C語(yǔ)言;非計(jì)算機(jī)專(zhuān)業(yè);教學(xué)方法;計(jì)算思維;實(shí)踐
中圖分類(lèi)號(hào):G642.41? ? ?文獻(xiàn)標(biāo)志碼:A? ? ?文章編號(hào):1674-9324(2019)49-0128-02
C語(yǔ)言程序設(shè)計(jì)是高校非計(jì)算機(jī)專(zhuān)業(yè)的一門(mén)重要的計(jì)算機(jī)基礎(chǔ)教學(xué)課程。通過(guò)該課程的學(xué)習(xí),有助于學(xué)生了解計(jì)算機(jī)能做什么,知道計(jì)算機(jī)擅長(zhǎng)解決什么,培養(yǎng)學(xué)生的計(jì)算思維能力,從而更好地利用計(jì)算機(jī)來(lái)解決本專(zhuān)業(yè)的實(shí)際問(wèn)題。C語(yǔ)言課程學(xué)習(xí)的內(nèi)容和要求是相對(duì)的,對(duì)不同的人群有不同的要求[1]。非計(jì)算機(jī)專(zhuān)業(yè)的C語(yǔ)言課程學(xué)時(shí)有限,學(xué)生在前期和后期也基本沒(méi)有學(xué)習(xí)計(jì)算機(jī)相關(guān)的其他課程,在課程講授過(guò)程中,存在一些問(wèn)題,影響學(xué)生程序設(shè)計(jì)能力的提高。
一、教學(xué)存在的問(wèn)題
(一)理論與實(shí)踐銜接不緊密
通常的授課方式是先在教室安排理論課,再在機(jī)房安排實(shí)驗(yàn)課或者布置課后作業(yè)。這種方式容易分離理論知識(shí)與實(shí)踐操作,使兩者銜接不緊密。C語(yǔ)言的語(yǔ)法理論枯燥、抽象,學(xué)生在接觸到新的理論知識(shí)點(diǎn)后,如果不及時(shí)上機(jī)動(dòng)手操作,不利于對(duì)抽象概念的理解,也容易將知識(shí)遺忘。
(二)學(xué)生缺乏計(jì)算思維,沒(méi)有學(xué)習(xí)方法
對(duì)于數(shù)學(xué)、英語(yǔ)、物理這些課程,學(xué)生們基本都有一套自己的學(xué)習(xí)方法。不同于這類(lèi)課程,大多數(shù)學(xué)生在上大學(xué)之前都沒(méi)有接觸過(guò)計(jì)算機(jī)程序編程類(lèi)的課程,學(xué)生們基礎(chǔ)薄弱,也沒(méi)有學(xué)習(xí)方法。同時(shí),非計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生基本只是孤立地學(xué)習(xí)C語(yǔ)言課程,沒(méi)有其他配套的課程加深理解計(jì)算思維。大部分學(xué)生能理解教師所講授的案例,但在獨(dú)立編寫(xiě)程序時(shí)卻沒(méi)有思路。缺乏計(jì)算思維,不會(huì)采用啟發(fā)式推理來(lái)尋找答案,不會(huì)用計(jì)算機(jī)解決問(wèn)題的方式去思考問(wèn)題[2]。
(三)學(xué)生動(dòng)手實(shí)踐能力提高緩慢
課程的教學(xué)目標(biāo)是讓學(xué)生具備程序設(shè)計(jì)能力,學(xué)生上機(jī)動(dòng)手能力的高低也決定了課程的教學(xué)效果。對(duì)于剛編寫(xiě)完成的程序,大部分都會(huì)編譯報(bào)錯(cuò)或者運(yùn)行結(jié)果不正確。作為初學(xué)者,學(xué)生往往找不見(jiàn)問(wèn)題,也就無(wú)法將程序調(diào)試正確。學(xué)生得不到成就感,會(huì)對(duì)上機(jī)實(shí)踐慢慢地失去興趣,甚至產(chǎn)生抵觸情緒,進(jìn)而影響編程能力的提高。
二、教學(xué)方法改進(jìn)
(一)緊密銜接理論與實(shí)踐
將授課方式改為統(tǒng)一在機(jī)房上課。教師在每次通過(guò)案例講完一個(gè)新的知識(shí)點(diǎn)后,學(xué)生緊接著就上機(jī)進(jìn)行操作。學(xué)生可以模仿已有的案例程序,也可以進(jìn)行改寫(xiě)完成新功能,發(fā)現(xiàn)自己的不足,進(jìn)而鞏固理論知識(shí)。當(dāng)學(xué)生遇到問(wèn)題時(shí),教師可以第一時(shí)間進(jìn)行解答,了解學(xué)生掌握的情況。這種授課方式需要教師控制好時(shí)間,不然很有可能在規(guī)定學(xué)時(shí)內(nèi)完不成所有理論知識(shí)的講授。
(二)啟發(fā)漸近式講解案例
為了讓學(xué)生學(xué)習(xí)程序語(yǔ)法不那么枯燥,筆者通過(guò)啟發(fā)漸講式講解案例的方式講授知識(shí)點(diǎn)。首先提出實(shí)際問(wèn)題,讓學(xué)生思考并給出解決方案,接著對(duì)學(xué)生的方案進(jìn)行點(diǎn)評(píng),再按照計(jì)算機(jī)解題的方式給出更多的思路,通過(guò)這種方式來(lái)培養(yǎng)學(xué)生的計(jì)算思維能力。案例中需要融入包含理論知識(shí)的主要語(yǔ)句,在學(xué)生對(duì)整體程序有大致理解的基礎(chǔ)上,再對(duì)其中涉及的相關(guān)語(yǔ)法進(jìn)行解釋分析。例如,在講授循環(huán)語(yǔ)句時(shí),教師先提問(wèn)如何計(jì)算數(shù)值50到59的和,學(xué)生一般給出方案,有利用計(jì)算器、筆算、套用數(shù)學(xué)公式等。教師在肯定學(xué)生回答的同時(shí),再進(jìn)一步提問(wèn)如何計(jì)算數(shù)值50到5000的和,或者50到5000的乘積,進(jìn)而引出循環(huán)語(yǔ)句的解法。
對(duì)案例具體程序進(jìn)行講解時(shí),除了程序的基本框架外,筆者將主體程序分為四部分:第一部分是定義變量,第二部分是給變量賦值,第三部分是數(shù)據(jù)計(jì)算處理,第四部分是輸出結(jié)果。這樣學(xué)生對(duì)程序的結(jié)構(gòu)有更清楚的認(rèn)識(shí),然后再去理解算法部分。學(xué)生自己獨(dú)立完成任務(wù)時(shí),也可以先將基本框架搭建完成,再按這四部分內(nèi)容進(jìn)行編寫(xiě)程序。
對(duì)于第三部分?jǐn)?shù)據(jù)計(jì)算處理,也就是算法部分,是整個(gè)程序的核心。這部分的理論知識(shí)通常比較抽象,學(xué)生不容易理解和掌握,是課程的重點(diǎn)和難點(diǎn)。講授時(shí),筆者將抽象的知識(shí)進(jìn)行具象化,進(jìn)而啟發(fā)學(xué)生的思維。例如,在講解循環(huán)執(zhí)行過(guò)程的時(shí)候,將for和while語(yǔ)句具象化為4步圖,如圖1所示。第一次按1、2、3、4步順序執(zhí)行,以后每次按2、3、4三步重復(fù)執(zhí)行,形成一個(gè)循環(huán)的閉合路徑。通過(guò)圖形化的方式,強(qiáng)化學(xué)生對(duì)這兩條語(yǔ)句的理解和記憶。
再例如,在講解break和continue語(yǔ)句時(shí),引入操場(chǎng)跑圈的例子。某同學(xué)鍛煉身體在操場(chǎng)跑步,打算跑2000米,也就是5圈循環(huán)。但是剛完成2圈準(zhǔn)備跑第3圈時(shí),天下雨了,這時(shí)該同學(xué)就結(jié)束跑步,要退出整個(gè)循環(huán)就用break。如果是在跑到第2圈一半時(shí),后半圈偷懶不跑了,直接從第3圈接著跑,這是退出當(dāng)次循環(huán)就用continue。通過(guò)將現(xiàn)實(shí)生活中簡(jiǎn)單的事件進(jìn)行類(lèi)比,使學(xué)生更容易理解這些理論知識(shí)。
(三)重視培養(yǎng)調(diào)試程序能力
筆者采用Dev C++作為開(kāi)發(fā)工具,該工具相對(duì)常用的VC++ 6.0而言,具有體積小、安裝方便、新建程序簡(jiǎn)易等特點(diǎn),更適用于初學(xué)者。上機(jī)編程的初期,學(xué)生往往會(huì)遇到不少問(wèn)題,甚至模仿教材中的案例也無(wú)法避免報(bào)錯(cuò)。這時(shí)需要教師去幫助找出錯(cuò)誤,由于學(xué)生人數(shù)較多,每一個(gè)都指導(dǎo)下來(lái)會(huì)花費(fèi)很多時(shí)間。還有小部分學(xué)生可能不好意思提問(wèn),就硬著頭皮找錯(cuò)誤,如果沒(méi)找到,學(xué)生的學(xué)習(xí)信心會(huì)受到打擊。為了提高編程的效率,減少學(xué)生找錯(cuò)誤的時(shí)間,筆者將常見(jiàn)的錯(cuò)誤提示和相應(yīng)的解決方法羅列出來(lái)。這樣,在學(xué)生遇到相似的問(wèn)題時(shí),可以自己解決,有利于增強(qiáng)學(xué)生學(xué)習(xí)的自信心,提高自身的學(xué)習(xí)能力,體會(huì)到編程的樂(lè)趣,由“要我學(xué)”變?yōu)椤拔乙獙W(xué)”[3]。教師也可以從一直解答相同問(wèn)題的困境中解脫出來(lái),而去幫助學(xué)生解決其他錯(cuò)誤。例如,課程初期,學(xué)生常遇到程序編譯沒(méi)有問(wèn)題,但運(yùn)行程序時(shí)被強(qiáng)制中止,提示程序已停止工作的現(xiàn)象,如圖2所示。出現(xiàn)這種錯(cuò)誤,通常是因?yàn)檩斎胝Z(yǔ)句中少寫(xiě)“&”符號(hào)。
對(duì)于初學(xué)者,語(yǔ)法錯(cuò)誤一般容易被找到并改正,然而邏輯錯(cuò)誤解決起來(lái)卻比較困難。對(duì)于邏輯錯(cuò)誤,學(xué)生可以利用Dev C++提供的單步執(zhí)行,跟蹤程序運(yùn)行過(guò)程,監(jiān)視其中變量的值,這樣有利于學(xué)生厘清思路,從而找到錯(cuò)誤。單步跟蹤調(diào)試首先需要設(shè)置好斷點(diǎn),而后執(zhí)行的過(guò)程中需要認(rèn)真仔細(xì)地觀察變量值的變化。通過(guò)跟蹤調(diào)試,有助于提高學(xué)生的細(xì)心和耐心度,減少下次出現(xiàn)編程錯(cuò)誤的可能。同時(shí)也有助于學(xué)生理解一些難點(diǎn)知識(shí),例如循環(huán)語(yǔ)句的執(zhí)行過(guò)程、指針和變量地址之間的關(guān)系等。筆者也讓學(xué)生兩兩相互進(jìn)行調(diào)試對(duì)方的程序,這種方式既可以提高學(xué)生的程序閱讀能力和調(diào)試能力,又可以讓學(xué)生注意程序書(shū)寫(xiě)規(guī)范,進(jìn)而提高程序可讀性,同時(shí)還能讓學(xué)生進(jìn)行互動(dòng)交流,提高溝通能力。
三、結(jié)語(yǔ)
C語(yǔ)言程序設(shè)計(jì)是一門(mén)很注重實(shí)踐操作的課程。為了進(jìn)一步引導(dǎo)學(xué)生重視實(shí)際動(dòng)手能力的提高,在課程考核中筆者將上機(jī)考試成績(jī)占總成績(jī)的比例設(shè)置為50%,這個(gè)比例可能還會(huì)提高。目前課程教學(xué)還存在一些問(wèn)題,我們需要努力讓學(xué)生從解決實(shí)際問(wèn)題中獲得成就感,盡可能地調(diào)動(dòng)學(xué)生的積極性、提高其學(xué)習(xí)興趣,培養(yǎng)學(xué)生通過(guò)計(jì)算思維的方式利用C語(yǔ)言程序設(shè)計(jì)能力去解決各自專(zhuān)業(yè)中遇到的問(wèn)題。
參考文獻(xiàn):
[1]譚浩強(qiáng).研究計(jì)算思維,堅(jiān)持面向應(yīng)用[J].計(jì)算機(jī)教育,2012,(21):45-49,56.
[2]J.M.Wing.Computational Thinking[J].Communications of the ACM,2006,(3):33-35.
[3]段學(xué)慶.C語(yǔ)言教學(xué)方法之淺析[J].教育教學(xué)論壇,2017,(23):263-264.