劉 光 蓉
(武漢輕工大學(xué) 數(shù)學(xué)與計算機學(xué)院,湖北 武漢 430023)
?
融入計算思維的C語言實驗教學(xué)設(shè)計
劉 光 蓉
(武漢輕工大學(xué) 數(shù)學(xué)與計算機學(xué)院,湖北 武漢 430023)
C語言是計算機基礎(chǔ)教學(xué)中的一門重要課程,在學(xué)生綜合素質(zhì)與創(chuàng)新能力的培養(yǎng)方面發(fā)揮著重要作用。計算思維具有抽象化和自動化、問題約簡、關(guān)注點分離和優(yōu)化的特征。C語言實驗充分體現(xiàn)了計算思維的特征。本文闡述了融入計算思維特征的C語言教學(xué)內(nèi)容的組織,通過具體實例闡述了融入計算思維特征的實驗教學(xué)方法實施過程。在C語言上機實踐教學(xué)中,通過計算思維方法的模仿與綜合運用,計算思維方法能夠更深層次地融人到C程序設(shè)計實驗教學(xué)中。
計算思維; C語言; 實驗教學(xué)設(shè)計
計算思維的含義是運用計算機科學(xué)的基礎(chǔ)概念進行問題求解、系統(tǒng)設(shè)計以及人類行為理解等涵蓋計算機科學(xué)之廣度的一系列思維活動,其本質(zhì)內(nèi)容體現(xiàn)了抽象、約簡、規(guī)劃、關(guān)注點分離、遞歸、優(yōu)化、分解等思維特征[1]。
“C程序設(shè)計”是一門非常重要的計算機基礎(chǔ)課程[2],涉及的知識點繁多,不僅包含程序設(shè)計的基本知識,還包含和體現(xiàn)了計算思維的基礎(chǔ)概念、思維模式和解決問題的方法。在C程序設(shè)計教學(xué)中融入計算思維,利用計算思維的特征梳理和整合繁雜的知識點,幫助學(xué)生清晰地理解和掌握C程序設(shè)計編程方法,鍛煉學(xué)生的計算思維和養(yǎng)成用計算思維的方法思考解決問題的習(xí)慣[2-4]。
C程序設(shè)計實驗教學(xué)中以計算思維能力培養(yǎng)為核心任務(wù),以講授程序設(shè)計方法為主要內(nèi)容,加強上機實踐,使學(xué)生通過實踐確實感受和領(lǐng)悟計算機問題求解的基本方法和思維模式,為提高學(xué)生綜合素質(zhì),培養(yǎng)學(xué)生創(chuàng)新能力奠定堅實的基礎(chǔ)[5]。
C程序設(shè)計是一門實踐性很強的學(xué)科,C語言編程能力必須依靠一個又一個上機實驗,不斷地“思考一編程一調(diào)試一運行一反思”[6]而逐步提高。C語言是高度過程化的計算機編程語言,結(jié)構(gòu)非常嚴謹,需要格外注意其語法和語義的準確性和完整性,需要在大量的上機實踐中培養(yǎng)編程者的這些良好習(xí)慣和注意度[7]。我們?nèi)粘栴}處理的一般過程:先做什么,再做什么;如果發(fā)生了什么,就做什么;必須要做了什么,才能再去做什么,與C程序的執(zhí)行過程完全類似。計算思維將問題引入、歸納、分解、進而求解的過程與C語言自頂向下、逐步求精、模塊化的設(shè)計思路[8]是類似的,因此,在C語言實驗中融入計算思維的思想,可以培養(yǎng)學(xué)生發(fā)現(xiàn)問題、分析問題、解決問題的能力,可以培養(yǎng)學(xué)生計算思維的能力[9]。
C語言涉及的概念規(guī)則很多,使用形式靈活,在C程序設(shè)計課程教學(xué)過程中,要落實兩個方面的內(nèi)容:①C語言本身的語法與程序結(jié)構(gòu);②通過該門課程的學(xué)習(xí)掌握一定的算法與程序的編程實現(xiàn)。該門課程中的內(nèi)容都是程序設(shè)計的基本內(nèi)容,但隨著各專業(yè)人才培養(yǎng)方案的修改,作為公共基礎(chǔ)課程的C語言教學(xué)課時被壓縮,很多任課教師未能對教學(xué)內(nèi)容進行整合優(yōu)化,上課時仍然按部就班講解,忽視了學(xué)生計算思維的培養(yǎng),而計算思維恰恰又是對問題抽象的基礎(chǔ)。
計算思維通過約簡、轉(zhuǎn)化等方法,把一個看來困難的問題重新闡釋成一個怎樣解決的方法問題。在此方法的指導(dǎo)下,以“理論夠用,突出實踐”為原則,以譚浩強編著,清華大學(xué)出版社出版的《C程序設(shè)計(第3版)》教材為基礎(chǔ),按照教學(xué)步驟,將《C程序設(shè)計》知識對象進行粒度劃分,歸納整理基本覆蓋整個《C程序設(shè)計》教學(xué)內(nèi)容邏輯框架如圖1所示。
圖1 《C程序設(shè)計》教學(xué)內(nèi)容邏輯框架
“C程序設(shè)計”課程知識體系完整,具有很強的理論性、實用性和創(chuàng)新性。將計算思維的思維特征方法融入到具體的教學(xué)過程中,一方面可以簡化學(xué)習(xí)內(nèi)容,降低學(xué)習(xí)難度,激發(fā)學(xué)生的學(xué)習(xí)興趣;另一方面,可以培養(yǎng)學(xué)生的計算思維能力,提高學(xué)生的計算機綜合應(yīng)用能力和創(chuàng)新能力[10]。
3.1 抽象化和自動化
抽象化和自動化是計算思維的重要本質(zhì)[11]。抽象化是實現(xiàn)問題的精確表達和建模的方法[12],“C程序設(shè)計”課程中的很多概念和方法都體現(xiàn)了抽象化的思想。例如,C語言數(shù)據(jù)類型就是對現(xiàn)實世界中的信息進行抽象、表示和處理的方法。在進行程序設(shè)計時,首先,實現(xiàn)從現(xiàn)實世界到信息世界的轉(zhuǎn)化。分析題目,對需要處理的問題進行認識抽象,得到需要處理的數(shù)據(jù)的概念模型。然后,實現(xiàn)從信息世界到機器世界的映射。將需要處理的數(shù)據(jù)的概念模型轉(zhuǎn)換為C語言語法規(guī)則支持的數(shù)據(jù)結(jié)構(gòu)類型。最后,利用C語言編寫程序,由計算機自動實現(xiàn)數(shù)據(jù)處理功能,見圖2。
圖2 程序設(shè)計中的抽象化與自動化
在教學(xué)過程中,教師通過實例進行抽象化和自動化方法的介紹,引導(dǎo)學(xué)生逐漸領(lǐng)會抽象化和自動化的思想方法,并在解決問題的過程中提升計算思維能力。
3.2 問題約簡
計算思維是一種選擇合適的方式陳述一個問題,或?qū)σ粋€問題的相關(guān)方面建模使其易于處理的思維方法,這就是對問題的約簡[13]?!癈程序設(shè)計”課程涉及的知識點很多,如何在有限的教學(xué)課時里實現(xiàn)總體教學(xué)目標是一個難題。
采用案例教學(xué)法,將計算思維的問題約簡方法融人課堂教學(xué)中,以理解和應(yīng)用為目標,結(jié)合實例講授C語言的基本知識,避免過于枯燥的純理論介紹。例如,學(xué)習(xí)C語言循環(huán)結(jié)構(gòu)的實現(xiàn)形式時,從循環(huán)條件、循環(huán)體、循環(huán)控制變量、循環(huán)的執(zhí)行過程等方面進行講解。教學(xué)過程中,對循環(huán)的實現(xiàn)形式理論知識只做一些簡要講解,對于循環(huán)結(jié)構(gòu)的編程,則通過具體例子對循環(huán)實現(xiàn)形式加以分析和應(yīng)用。通過對復(fù)雜問題的約簡,學(xué)生能夠清晰地了解C語言的基本語法知識和一些常用算法,能夠比較輕松地完成C程序簡單編程。
3.3 關(guān)注點分離和優(yōu)化
計算思維的關(guān)注點分離[14]方法就是,先將復(fù)雜問題做合理的分解,再分別仔細研究問題的不同側(cè)面(關(guān)注點),最后綜合各方面的結(jié)果,合成整體的解決方案[15]。在教學(xué)過程中,指導(dǎo)學(xué)生將任何一個程序設(shè)計問題分為7個階段:分析題目確定所需數(shù)據(jù)結(jié)構(gòu)、給參與運算的變量賦初值、利用三種基本結(jié)構(gòu)解決問題、輸出結(jié)果、繪制流程圖、編寫程序、上機調(diào)試。每個階段的任務(wù)相互獨立,具有明確的完成標志,前一個階段完成的任務(wù)是后一個階段的前提和基礎(chǔ),后一階段的任務(wù)是前一階段任務(wù)的深入,相鄰階段互相聯(lián)系相互承接,共同完成整個程序設(shè)計任務(wù)。
例如在編寫判斷一個數(shù)是否是素數(shù)的程序時,按如下步驟實現(xiàn):
步驟1:分析題目,確定兩個整型變量m與i,m是要判斷的數(shù),作為被除數(shù),i是除數(shù)。
步驟2:給參與運算的變量賦初值。從鍵盤輸入m的值,scanf(“%d”,&m);素數(shù)是除了能被1和它本身整除外,不能被其他任何數(shù)整除,因此,確定i的初值為2。
步驟3:利用三種基本結(jié)構(gòu)解決問題,這是解決問題的關(guān)鍵所在。素數(shù)的判斷就是要用2~m-1中的每一個數(shù)去除m,若每一個都不能被整除則表示m是素數(shù),否則只要有一個能整除,則m都不是素數(shù),根據(jù)分析,需要利用循環(huán)結(jié)構(gòu)解決問題。
步驟4:輸出結(jié)果。根據(jù)第(3)步的分析,如果2~m-1中的每一個數(shù)都不能整除m,循環(huán)結(jié)束后i>=m,輸出m是素數(shù),如果m不是素數(shù),i 步驟5:繪制N-S流程圖如圖3所示。 圖3 素數(shù)判斷N-S流程圖 步驟6:根據(jù)N-S流程圖編寫程序 #include void main() { int m,i; scanf(“%d”,&m); for(i=2;i } 步驟7:為驗證程序的正確與否,上機調(diào)試是一個非常重要的環(huán)節(jié)。 上述實例講解,可以幫助學(xué)生在掌握C語言基本知識的同時,掌握程序設(shè)計的方法與步驟,避免學(xué)生在學(xué)習(xí)過程中感覺知識點的零散繁雜。使學(xué)生能夠?qū)⑺鶎W(xué)的知識進行綜合應(yīng)用,聯(lián)系實際問題的綜合分析、設(shè)計和實現(xiàn)。 計算思維的優(yōu)化特征也可以很好地融人到了C語言程序設(shè)計過程中。任何一個問題可能都有多種算法,我們在設(shè)計算法時不僅要能實現(xiàn)問題的解決,還要考慮算法的時間復(fù)雜度和空間復(fù)雜度,尋找最優(yōu)算法。例如,在上述素數(shù)判斷方法中,利用循環(huán)結(jié)構(gòu)解決問題部分,循環(huán)次數(shù)是m-2次,其實可以簡化,m不必被2~m-1之間的每一個整數(shù)去除,只需被2~根號m之間的每個數(shù)去除就可以了。因此可以對程序進行如下修改以減少循環(huán)次數(shù): #include #include void main() { int m,i; scanf(“%d”,&m); for(i=2;i<(int) sqrt(m);i++) if(m%i==0) break; if(i>=(int)sqrt(m)) printf(“m是素數(shù)”); else printf(“m不是素數(shù)”); } “C程序設(shè)計”課程是一門實踐性非常強的學(xué)科,實踐教學(xué)重點是鞏固理論知識的掌握,鍛煉學(xué)生對計算思維方法的運用,提高解決實際問題的能力。實踐環(huán)節(jié)采用循序漸進、由淺人深的方法,將實驗分為驗證型和設(shè)計型綜合實驗。驗證型實驗要求學(xué)生模擬教師解決問題的方法完成實驗內(nèi)容,是計算思維方法的模仿。設(shè)計型綜合實驗運用多種計算思維方法分析問題和解決問題,是計算思維方法的綜合運用。設(shè)計型實驗要求同學(xué)們在掌握了一定的實驗技能和方法的基礎(chǔ)上,運用所學(xué)C語言基本知識,自行提出問題,分析問題,解決問題,通過算法分析、觀察實驗結(jié)果、對程序運行結(jié)果進行分析處理等環(huán)節(jié)最終得出正確的研究結(jié)論。計算思維方法的綜合運用,鍛煉了學(xué)生綜合運用所學(xué)知識的能力,更進一步地培養(yǎng)了學(xué)生發(fā)現(xiàn)問題、勇于探索、創(chuàng)新的能力,是計算思維方法更深層次的融人。 [1] Jeannette M Wing. Computational Thinking[J]. Communications of ACM,2006,49(3):33-35. [2] 教育部高等學(xué)校計算機基礎(chǔ)課程教學(xué)指導(dǎo)委員會. 高等學(xué)校計算機基礎(chǔ)教學(xué)發(fā)展戰(zhàn)略研究報告暨計算機基礎(chǔ)課程教學(xué)基本要求[M]. 北京:高等教育出版社,2009. [3] 何欽銘,陸漢權(quán),馮博琴. 計算機基礎(chǔ)教學(xué)的核心任務(wù)是計算思維能力的培養(yǎng)[J]. 中國大學(xué)教學(xué),2010(9):5-9. [4] 陳國良.計算思維與大學(xué)計算機基礎(chǔ)教育[C]//濟南:第六屆大學(xué)計算機課程報告論壇,2O10. [5] 劉光蓉. C程序設(shè)計實驗教學(xué)的理實一體化教學(xué)模式[J]. 實驗室研究與探索,2013,32(10):350-352. [6] 劉遠軍.培養(yǎng)計算思維的C語言實驗方案設(shè)計[J]. 軟件導(dǎo)刊,2014,13(1):189-190. [7] 劉光蓉,汪 靖,陸登波.C程序設(shè)計實驗與實踐教程[M].清華大學(xué)出版社,2011. [8] 譚浩強.C程序設(shè)計(第四版)[M].清華大學(xué)出版社,2010. [9] 劉光蓉.以計算思維能力培養(yǎng)為導(dǎo)向的C程序設(shè)計實驗教學(xué)[J]. 實驗技術(shù)與管理,2013,30(1):154-156,191. [10] 黃雅萍,劉曉強,施霞萍,等.融入計算思維的“信息系統(tǒng)與數(shù)據(jù)庫技術(shù)”教學(xué)模式[J]. 紡織服裝教育,2014,29(1):69-73,76. [11] 王文軍,鄧景順,王 靜.基于計算思維的數(shù)據(jù)庫課程體系教學(xué)模式研究[J].臨沂大學(xué)學(xué)報,2012,34(6):66-69. [12] 董榮勝.計算思維與計算機導(dǎo)論[J].計算機科學(xué),2009,36(4):50-52. [13] 牟 琴,譚 良.計算思維的研究及其進展[J].計算機科學(xué),2011,38(3):10-15. [14] Parnas D L.On the criteria to be used in decomposing systems into modules[J].Comm.ACM,1972,15(12):1053-1058. [15] 何明聽.關(guān)注點分離在計算思維和軟件工程中的方法論意義[J].計算機科學(xué),2009,36(4):60-63. Experimental Teaching Design of C Language Integrated by Computational Thinking LIUGuang-rong (School of Mathematics and Computer Science, Wuhan Polytechnic University, Wuhan 430023, China) Training computational thinking ability is a core task of computer basic teaching. C language is an important course in computer based teaching. It plays an important role for the cultivation of students’ comprehensive quality and innovation capability. Abstraction and automation, problem reduction, separation of concerns and optimization are main features of computational thinking. The C language experiment fully reflects the characteristics of computational thinking. This paper describes C language teaching content organization which integrates of computational thinking characteristic, and also describes implementation of the experimental teaching method within the characteristics of computational thinking by specific examples. In the C language experiment teaching, because of simulating and using computational thinking method, computational thinking method can melt deeper into the C programming experiment teaching. computational thinking; C language; experimental teaching design 2015-01-05 2011年湖北省高等學(xué)校省級教學(xué)研究項目(2011_32);湖北省教育科學(xué)“十二五”規(guī)劃2014年度重點課題(2014A030);教育部2014年與百度公司校企合作專業(yè)綜合改革項目(2014-B013);全國高等院校計算機基礎(chǔ)教育研究會2014年課題(201416);2014年校級重點實踐教學(xué)改革研究及試點項目(XSZ2014007) 劉光蓉(1971-),女,湖北武漢人,碩士,副教授,研究方向主要是圖像處理及計算機基礎(chǔ)教學(xué)研究。 Tel.:18986286198;E-mail:lgr981009@126.com TP 312.1-4;G 642 A 1006-7167(2015)10-0081-034 結(jié) 語