沈?qū)?/p>
摘要:計(jì)算思維能力是當(dāng)今高校計(jì)算機(jī)基礎(chǔ)課程培養(yǎng)的基本目標(biāo)之一。針對目前C語言程序設(shè)計(jì)課程的教學(xué)現(xiàn)狀,探討對學(xué)生計(jì)算思維能力的培養(yǎng),介紹培養(yǎng)學(xué)生計(jì)算思維能力的教學(xué)方法以及教學(xué)過程中的具體實(shí)施手段。
關(guān)鍵詞:計(jì)算思維;程序設(shè)計(jì);C語言;項(xiàng)目驅(qū)動;教學(xué)方法
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)11-0128-02
Computational Thinking Ability Training in C Language Programming Course
SHEN Ning
(College of Math & Computer Science, Jianghan University, Wuhan 430056, China)
Abstract: Computational thinking is one of the basic goals of training today's computer basic course in university. Aiming at the present situation of the teaching of C language programming course, discussion on cultivating computational thinking ability of students, to introduce the specific implementation means of teaching method of training student's computational thinking ability and calculation in the process of teaching.
Key words: computational thinking; C language; programming; project driven; teaching method
《中國高等院校計(jì)算機(jī)基礎(chǔ)教育課程體系2008》中提出了對大學(xué)生計(jì)算機(jī)應(yīng)用能力的三大要求是:操作使用能力、應(yīng)用開發(fā)能力、研究創(chuàng)新能力[1]。而C語言程序設(shè)計(jì)課程是培養(yǎng)大學(xué)生應(yīng)用開發(fā)能力和研究創(chuàng)新能力的一門重要課程。
1目前教學(xué)現(xiàn)狀
由于C語言本身的數(shù)據(jù)語法結(jié)構(gòu)較復(fù)雜、表達(dá)式類型眾多,而大多數(shù)初學(xué)者基本沒有計(jì)算機(jī)編程知識,所以,一開始理解起來存在很大難度。同時,傳統(tǒng)的教學(xué)方法是講授法,大多注重語句細(xì)節(jié)等知識點(diǎn),實(shí)踐不足,學(xué)生往往把重心放在語法語句的學(xué)習(xí),忽視了對解決問題和抽象思維能力的培養(yǎng)。
2計(jì)算思維的重要性
計(jì)算思維是指運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行求解、系統(tǒng)設(shè)計(jì)以及人類行為理解等涵蓋計(jì)算機(jī)科學(xué)之廣度的系列思維活動。在2010年“第六屆大學(xué)計(jì)算機(jī)課程報(bào)告論壇”中,陳國良院士指出:人類科學(xué)發(fā)展的三大支柱是理論科學(xué)、實(shí)驗(yàn)科學(xué)和計(jì)算科學(xué),與之相對應(yīng)得是人們認(rèn)識世界、改造世界的三種思維方式,即理論思維、實(shí)驗(yàn)思維和計(jì)算機(jī)思維。計(jì)算思維能力是大學(xué)計(jì)算機(jī)基礎(chǔ)課程教育工程中一個重要的培養(yǎng)目標(biāo)[2]。而且,近些年來,高校大學(xué)生的計(jì)算機(jī)應(yīng)用能力普遍提高,故在計(jì)算機(jī)基礎(chǔ)教學(xué)過程中,教育的重點(diǎn)由原來的以計(jì)算機(jī)應(yīng)用能力培養(yǎng)為主轉(zhuǎn)變?yōu)橐杂?jì)算思維的培養(yǎng)為主。
在大學(xué)計(jì)算機(jī)通識教育階段,我們對計(jì)算思維的培養(yǎng)應(yīng)當(dāng)有效地融入每一堂課中[3]。C語言程序設(shè)計(jì)是新生入學(xué)第一年學(xué)的計(jì)算機(jī)基礎(chǔ)課程,這門課能較好的體現(xiàn)語言級問題的求解方法,也是學(xué)生最容易理解計(jì)算機(jī)求解問題的方法的語言課程,故培養(yǎng)學(xué)生的計(jì)算機(jī)思維能力是這門課的重要目標(biāo)。
3教學(xué)方法改革及計(jì)算思維能力的培養(yǎng)
3.1激發(fā)學(xué)生興趣
教師在上第一節(jié)課時就可以用實(shí)例說明C 語言的重要地位,最好選擇趣味性很強(qiáng)的例子給學(xué)生進(jìn)行演示,增加學(xué)生對C 語言的興趣,也使學(xué)生們也明確了學(xué)習(xí)的目的和必要性。在實(shí)際教學(xué)中,不妨多選擇一些具有趣味性的問題進(jìn)行講解,如 “和尚吃饅頭”、“猴子吃桃”、“愛因斯坦階梯”,“漢諾塔”等一系列有趣且經(jīng)典的問題,這些充滿樂趣的問題,有利于學(xué)生帶著愉快的心情學(xué)習(xí),主動且積極的思考,學(xué)完之后也不容易遺忘,還可以達(dá)到舉一反三的效果。
在平時教學(xué)中,學(xué)生對與實(shí)際生活相關(guān)的例子往往很感興趣,因此,需要從案例設(shè)計(jì)入手,盡量選擇能激發(fā)學(xué)生興趣的范例。例如,要學(xué)生設(shè)計(jì)一個計(jì)算器程序,能將用戶提供的兩個操作數(shù)完成四則運(yùn)算。講完輸入輸出函數(shù),就可以動手設(shè)計(jì)了,只不過此時的計(jì)算器會一次算出并顯示出四則運(yùn)算的四個結(jié)果,不能選擇運(yùn)算的類型。隨著內(nèi)容的深入,講到選擇結(jié)構(gòu)的時候,學(xué)生就可以設(shè)計(jì)一個有著較好交互性的計(jì)算器了,這時要根據(jù)所輸入的運(yùn)算符做出選擇,從而只得到一個結(jié)果。有多種方式可以實(shí)現(xiàn),如if語句、switch語句等。當(dāng)講到循環(huán)時,可以進(jìn)一步提高交互性??梢詫?shí)現(xiàn)對多組數(shù)據(jù)進(jìn)行四則運(yùn)算。實(shí)現(xiàn)循環(huán)的語句有for語句、while語句、 do-while語句。隨著教學(xué)過程的不斷深入,學(xué)生循序漸進(jìn)地設(shè)計(jì)出不同功能的計(jì)算器,從而掌握了相對應(yīng)的知識點(diǎn)。
3.2抽象思維能力的培養(yǎng)
對大多數(shù)學(xué)生而言,學(xué)習(xí)程序設(shè)計(jì)語言的目的,是為了學(xué)習(xí)計(jì)算機(jī)解決問題的思路和方法,而不是為了成為程序員,故教師的重點(diǎn)應(yīng)放在抽象思維能力的培養(yǎng)上。
3.2.1樹立計(jì)算思維的概念
在C語言程序設(shè)計(jì)課程上,培養(yǎng)學(xué)生的計(jì)算思維體現(xiàn)在對問題的分析和求解能力的培養(yǎng)上。對于剛剛?cè)雽W(xué)不久的學(xué)生而言,在學(xué)習(xí)程序設(shè)計(jì)課程時往往容易走入誤區(qū),把所有的精力放在語句本身,注意力集中在語法的學(xué)習(xí)上,過于關(guān)注語法細(xì)節(jié)本身,忽略了最重要的事情:大腦的思維方式——編程能力的學(xué)習(xí)。只會語法,只記住語句而不會分析和解決實(shí)際問題,不會靈活運(yùn)用C語言編程。
針對上述情況,在第一次課上,我們并不講解C語言本身,而是從計(jì)算思維講起。介紹計(jì)算思維是什么,計(jì)算思維的重要意義,引導(dǎo)學(xué)生樹立計(jì)算思維的概念。選擇一些具有趣味性的問題進(jìn)行講解,如 “和尚吃饅頭”、“猴子吃桃”、“愛因斯坦階梯”,“漢諾塔”等一系列有趣且經(jīng)典的問題,讓學(xué)生感受計(jì)算機(jī)分析和求解問題的過程和基本方法,從而讓學(xué)生在學(xué)習(xí)的初期,就在主觀意識上明確語言程序設(shè)計(jì)課程的學(xué)習(xí)目標(biāo)不僅是語言本身,而是學(xué)會如何把實(shí)際問題轉(zhuǎn)化成計(jì)算機(jī)可以解決的問題,利用計(jì)算機(jī)的方法來解決實(shí)際問題。讓學(xué)生自發(fā)的注重計(jì)算思維的培養(yǎng)。
3.2.2項(xiàng)目驅(qū)動教學(xué)
在教學(xué)過程中,以“項(xiàng)目驅(qū)動、興趣引導(dǎo)”貫穿整個教學(xué)過程,同時結(jié)合多種教學(xué)方法。
用幾個項(xiàng)目貫穿所有的知識點(diǎn),將零散的語句連在一起。在這種教學(xué)方法下,學(xué)生學(xué)習(xí)的時候可以相互關(guān)聯(lián),學(xué)習(xí)新知識的時候,還可以復(fù)習(xí)舊知識,邊學(xué)邊對比總結(jié),從而加深印象和理解。上文提到的計(jì)算器程序就是一個典型的范例,隨著教學(xué)內(nèi)容的不斷深入,學(xué)生設(shè)計(jì)出功能越來越完善的計(jì)算器,將順序語句、選擇語句、循環(huán)語句這幾種主要的控制語句都囊括在其中,比較三者的區(qū)別,從而掌握它們的用法。
3.2.3掌握計(jì)算思維的方法
程序設(shè)計(jì)課程教學(xué)中有一個常見現(xiàn)象,就是在講解某個算法時,學(xué)生都能聽懂,但是要自己寫程序就發(fā)愁了,不知道從何下手。模仿是學(xué)習(xí)的第一步,給學(xué)生介紹各種典型范例,讓學(xué)生先模仿,在模仿的基礎(chǔ)上進(jìn)行修改,再發(fā)展到自己能夠獨(dú)立編寫程序的階段。教師要幫助學(xué)生理清思路,將問題分解,采取自頂向下,逐步求精的結(jié)構(gòu)化方法。
“自頂向下,逐步求精”就是將問題求解的過程由抽象逐步具體化的過程,這是解決復(fù)雜問題的一個有效方法,特別適合初學(xué)者明確設(shè)計(jì)思路。
下面以循環(huán)結(jié)構(gòu)中數(shù)列問題的講解為例。
循環(huán)結(jié)構(gòu)是一種非常重要的控制結(jié)構(gòu),能很好地體現(xiàn)計(jì)算機(jī)解決問題的特點(diǎn),往往也是學(xué)生學(xué)習(xí)的難點(diǎn)。主要的難點(diǎn)集中在循環(huán)條件的設(shè)置、循環(huán)變量初值的設(shè)置以及循環(huán)體的構(gòu)造。累加和累乘是數(shù)列問題的基礎(chǔ)算法。先看累加中最基礎(chǔ)的:sum =1 +...+ 100,暫稱為基礎(chǔ)累加數(shù)列,假設(shè)我們用for語句實(shí)現(xiàn),分析如下:sum是累加和變量,初值為0,循環(huán)變量i初值為1,循環(huán)體是sum=sum + i, 每次循環(huán)都是做加法,累加項(xiàng)就是循環(huán)變量i ,循環(huán)語句為
for(i=1;i<=100; i++ ) /* 循環(huán)條件 */
sum = sum + i; /* 不斷累加 */
這個程序大多數(shù)學(xué)生都很好理解并能編寫出,在此基礎(chǔ)上分析sum=1+3+5+7+...+101,學(xué)生仔細(xì)對比發(fā)現(xiàn),這個數(shù)列跟基礎(chǔ)累加數(shù)列相比,關(guān)鍵的區(qū)別在于循環(huán)變量的遞增規(guī)律不同,對應(yīng)程序語句i++改為i=i+2,循環(huán)語句為
for(i=1;i<=101; i=i+2) /* 循環(huán)條件 */
sum = sum + i; /* 不斷累加 */
再增加難度,分析sum=1-3+5-7+...+101的解題方法。大多數(shù)學(xué)生經(jīng)歷了前面的積累,已經(jīng)可以迅速發(fā)現(xiàn)本程序的關(guān)鍵在于怎么在循環(huán)體中表示數(shù)列中項(xiàng)的符號的變化,這里引入符號變量m,初值為1,循環(huán)體是兩條語句:sum=sum+ i*m, m=-1*m;
循環(huán)語句為
for(i=1;i<=101; i=i+2) /* 循環(huán)條件 */
{
sum = sum + i*m ; /* 不斷累加 */
m=-1*m;
}
再看累乘中最基礎(chǔ)的:p=100! 即p=1×2×3×…×100的值。 暫稱為基礎(chǔ)累乘數(shù)列,分析如下:p是累乘積變量,初值為1,循環(huán)變量初值為1,循環(huán)體是p=p*i ,每次循環(huán)都是做乘法,累乘項(xiàng)就是循環(huán)變量i ,循環(huán)語句為
for(i=1;i<=100; i++ ) /* 循環(huán)條件 */
p = p*i; /* 不斷累乘 */
在基礎(chǔ)累加數(shù)列和基礎(chǔ)累乘數(shù)列的基礎(chǔ)上,分析s=1+2! +3! + ... + 100!。這個數(shù)列的求解需要綜合兩者的循環(huán)體。教師講到這里,要啟發(fā)學(xué)生根據(jù)基礎(chǔ)累加和基礎(chǔ)累乘數(shù)列分析出數(shù)列的循環(huán)體,跟前面方法類似,過程不再贅述,循環(huán)語句為
for(i=1;i<=100; i++ ) /* 循環(huán)條件 */
{
p = p*i; /* p為當(dāng)此循環(huán)的累乘積 */
s= s + p; /* 累乘積p又為當(dāng)此累加循環(huán)的累加項(xiàng) */
}
在講課的過程中,既要先講解典型范例,又要啟發(fā)學(xué)生自己思考,舉一反三,這樣學(xué)生才能把書上的知識消化為自己的知識,靈活靈用,鍛煉抽象思維的形成,自己獨(dú)立編寫出程序。
3.2.4發(fā)散性思維訓(xùn)練
程序設(shè)計(jì)課程重點(diǎn)培養(yǎng)學(xué)生的計(jì)算思維能力,所以要讓學(xué)生在學(xué)習(xí)老師分析問題的同時,提出自己分析、解決問題的方法,提倡算法的多樣性。鼓勵學(xué)生不斷探索和創(chuàng)新。
講到選擇結(jié)構(gòu)的時候,學(xué)生就可以設(shè)計(jì)一個有著較好交互性的計(jì)算器了,這時要根據(jù)所輸入的運(yùn)算符做出選擇,從而只得到一個結(jié)果。學(xué)生往往先想到if語句,待他們用if語句編好程序,還可以啟發(fā)他們用switch語句編寫程序,并要學(xué)生通過這個例子分析if語句和switch語句這兩種選擇語句的異同點(diǎn)。
4結(jié)語
在C語言程序設(shè)計(jì)課程中,學(xué)生的計(jì)算思維能力的培養(yǎng)是 (下轉(zhuǎn)第134頁)
(上接第129頁)
教學(xué)的重點(diǎn)內(nèi)容。我們把計(jì)算思維能力培養(yǎng)融入到教學(xué)的各個環(huán)節(jié),貫穿始終。實(shí)踐證明,我們?nèi)〉昧溯^好的教學(xué)效果,學(xué)生的學(xué)習(xí)積極性增強(qiáng),分析、解決問題的能力也得到明顯提高。我們還可以選擇更多更好的范例將分散的語法語句結(jié)構(gòu)關(guān)聯(lián)起來 ,不斷改進(jìn)教學(xué)方法進(jìn)而取得更好的教學(xué)效果。
參考文獻(xiàn):
[1] 中國高等院校計(jì)算機(jī)基礎(chǔ)教育改革課題研究組.中國高等院校計(jì)算機(jī)基礎(chǔ)教育課程體系2008[M].北京:清華大學(xué)出版社,2008.
[2] 陳國良.計(jì)算思維與大學(xué)計(jì)算機(jī)基礎(chǔ)教育[R].濟(jì)南:第六屆大學(xué)計(jì)算機(jī)基礎(chǔ)課程報(bào)告論壇,2010.
[3] 朱鳴華,趙銘偉,趙晶,等.計(jì)算機(jī)基礎(chǔ)教學(xué)中計(jì)算思維能力培養(yǎng)的探討[J].中國大學(xué)教學(xué),2012(3):33-35.