□任仲晟
計算思維與實例相結(jié)合為導(dǎo)向的C語言公共課教學(xué)研究
□任仲晟
C語言程序設(shè)計是一門重要的公共基礎(chǔ)課,傳統(tǒng)的教學(xué)過程存在一些弊端,諸如過多地強(qiáng)調(diào)語法規(guī)則,簡單乏味的程序示例等。本文倡導(dǎo)在教學(xué)過程中引入計算思維和實例相結(jié)合為導(dǎo)向的實例教學(xué)法,讓學(xué)生從現(xiàn)實逐步過渡到抽象的C語言程序世界,掌握用計算機(jī)來求解生活中的問題的方法。通過實例教學(xué),培養(yǎng)學(xué)生對課程的興趣愛好,以及學(xué)習(xí)的主動性和創(chuàng)新性,并最終提高他們的計算思維能力。
計算思維;實例教學(xué);公共課改革
近年來,有關(guān)計算思維在程序設(shè)計類課程中的研究層出不窮,大量文獻(xiàn)都對此進(jìn)行了探討。所謂計算思維指的是運用計算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行問題求解、系統(tǒng)設(shè)計以及人類行為理解等涵蓋計算機(jī)科學(xué)之廣度的一系列思維活動。
作為一門重要的公共課,C語言程序設(shè)計課程面向的是廣大非計算機(jī)類專業(yè)的學(xué)生。與計算機(jī)本專業(yè)的學(xué)生相比,這些學(xué)生無論在知識背景還是在認(rèn)知程度上,層次差異更加明顯。這些學(xué)生中的大多數(shù)學(xué)習(xí)C語言的目的并不是成為一名程序員,而是掌握程序設(shè)計的基本思想和方法,學(xué)習(xí)利用計算機(jī)解決問題,提高自身邏輯思維能力,一定程度上為學(xué)習(xí)自己本專業(yè)的課程打下良好的基礎(chǔ)。此外,自身的學(xué)科背景差異,導(dǎo)致很大一部分非計算機(jī)專業(yè)的學(xué)生對C語言課程的興趣程度不高。
根據(jù)周以真教授的論述,計算思維的本質(zhì)應(yīng)該是問題的抽象、計算機(jī)的映射和自動化的求解。用C語言的觀點看:面對一個現(xiàn)實生活中的復(fù)雜問題,采用分而治之的思想對其進(jìn)行劃分,亦即將一個現(xiàn)實問題做抽象化的同時進(jìn)行子問題的分解,利用函數(shù)求解子問題,通過程序的邏輯跳轉(zhuǎn)和控制來實現(xiàn)原問題的求解。數(shù)據(jù)類型、函數(shù)、遞歸等等都是C語言里面的常見概念,故而計算思維與C語言程序設(shè)計有著一種天然的聯(lián)系。但由于計算思維強(qiáng)調(diào)的是抽象和自動化,對前文曾經(jīng)分析過的學(xué)生來說,存在一定的距離,故而需要依托另外一種理念來幫助,這種理念就是下文提到的實例導(dǎo)向。
盡管計算思維強(qiáng)調(diào)了C語言課程的教學(xué)本質(zhì)和重點難點,但是結(jié)合教學(xué)對象的實際情況,我們認(rèn)為,在把握計算思維的同時,更應(yīng)該堅持面向?qū)嵗慕虒W(xué)思路。實例教學(xué)更加側(cè)重具體的示例(案例、樣例)在教學(xué)過程中的應(yīng)用,它能充分彌補(bǔ)計算思維的不足,將抽象變成具體,由具體到抽象,讓學(xué)生在具體和抽象之間游刃有余,融會貫通。近年來關(guān)于實例教學(xué)的研究也有很多,有興趣的讀者可以查閱相關(guān)文獻(xiàn)。
結(jié)合上述分析,我們選取一個具體的例子來描述這二者相結(jié)合的C語言公共課的教學(xué)。作為教學(xué)的實例,題目應(yīng)當(dāng)是學(xué)生相對熟悉的,這樣才能充分調(diào)動學(xué)生的學(xué)習(xí)興趣,激發(fā)學(xué)生的求知欲望,避免學(xué)生由于程序語言枯燥、煩瑣的語法規(guī)則而失去對學(xué)習(xí)興趣。
基于上述考慮,本次選擇的實例是“石頭剪刀布”小游戲的設(shè)計與實現(xiàn)。該實例覆蓋的知識點有:數(shù)據(jù)類型的使用,輸入輸出函數(shù)的應(yīng)用,某一特定區(qū)間范圍隨機(jī)數(shù)的產(chǎn)生與使用,循環(huán)結(jié)構(gòu)的使用,指針數(shù)組的定義與使用,函數(shù)的定義與調(diào)用等等。這些知識點都是C語言程序設(shè)計中必備且重要的,是學(xué)習(xí)的重點與難點。如果對這些知識點進(jìn)行單一的講解,則容易給人支離破碎的感覺,并陷入程序語言語法漩渦的怪圈。我們應(yīng)該站在全局的高度,通過實例融合各知識點,并引導(dǎo)學(xué)生對程序設(shè)計的全過程有一個全面的感性認(rèn)知。
首先,根據(jù)馮諾依曼體系結(jié)構(gòu)計算機(jī)的要求,程序的數(shù)據(jù)和指令都必須放置于內(nèi)存,而后才能逐條指令地分析和執(zhí)行。我們就可以這么告訴學(xué)生:現(xiàn)在我們用C語言和計算機(jī)交流,讓計算機(jī)幫我們做一件事情(能夠和人類玩石頭剪刀布的游戲)。所以在交流的時候,首先要注意交流的語法規(guī)范,才能保證對方能夠聽得懂,其次既然是讓計算機(jī)做一件事情(執(zhí)行一系列的計算),就得先提供數(shù)據(jù)給它。為了提供數(shù)據(jù),我們又該先在內(nèi)存開辟足夠的空間,用于存儲數(shù)據(jù)。那么這個空間該開辟多大呢?為了給不同的數(shù)據(jù)量身定做一個空間,數(shù)據(jù)類型的概念和變量的定義就引入了。
其次,平時在玩這個游戲時,我們是用手勢來表示不同的對象(石頭、剪刀、布),那么在計算機(jī)內(nèi)部,又該如何處理呢?計算機(jī)可無法用“手”來表示。計算思維的抽象化在這個時候可以得到體現(xiàn)。我們可以引導(dǎo)學(xué)生,對于不同的手勢,我們可以利用不同的整數(shù)來表達(dá),例如0,1,2分別表示石頭、剪刀和布。所以出手勢的過程,就相當(dāng)于產(chǎn)生數(shù)字0,1,2的過程。人的手勢就用輸入來實現(xiàn),讓用戶輸入一個整數(shù)來表達(dá)自己的手勢。而計算機(jī)如何產(chǎn)生一個整數(shù)呢?這不就是生成一個0~2區(qū)間隨機(jī)整數(shù)嘛!rand()函數(shù)就引入了。不僅在手勢表示的時候有一個抽象的過程,更重要的游戲規(guī)則又該如何表示呢?此時,我們可以進(jìn)一步引導(dǎo)學(xué)生。為了描述游戲過程中的游戲規(guī)則,我們可以先在稿紙上畫出一張二維表格,如表1所示(輸贏從玩家角度描述)。
表1 實例游戲規(guī)則表
面對這么一張由行列構(gòu)成的二維表格,學(xué)生便會發(fā)現(xiàn),這不就是一個二維矩陣嘛!既然講到了二維數(shù)組,我們又可以借勢引導(dǎo)學(xué)生,這個用于描述游戲規(guī)則的二維數(shù)組又該定義成什么類型呢?觀察發(fā)現(xiàn),這個二維數(shù)組的每個元素就是玩家與電腦PK的輸贏結(jié)果。進(jìn)一步地,我們還可以在表1的基礎(chǔ)上做個改進(jìn),將“平”“輸”“贏”這些字眼改造成“打成平手”“Sorry,你輸了”“恭喜你,贏啦”,如此一來,將游戲規(guī)則二維數(shù)組每個元素看成是一個字符串就是水到渠成的事情了。綜上,類似 char*gameRule[]={“打成平手”“Sorry,你輸了”“恭喜你,贏啦”}這樣的二維指針數(shù)組就產(chǎn)生了。
再次,如何描述整個游戲的過程呢?如果照本宣科地念課本,一般就是介紹順序、循環(huán)和選擇三種結(jié)構(gòu),而學(xué)生則會陷入它們的語法結(jié)構(gòu),例如if和else的配對關(guān)系,for表達(dá)式的描述等等,而忽略了這些結(jié)構(gòu)背后的內(nèi)在要素。結(jié)合“石頭剪刀布”游戲,我們可以先讓學(xué)生回憶并感受一下平時的游戲過程。通常游戲的雙方會進(jìn)行多輪的PK,甚至還會在輸贏的基礎(chǔ)上弄個獎懲措施。每次PK的過程,都是雙方出手勢、比輸贏、獎懲這三部曲,結(jié)合C語言,容易得到這就是一個循環(huán)結(jié)構(gòu)的結(jié)論。一旦介入到循環(huán)結(jié)構(gòu),又會自然地引導(dǎo)學(xué)生思考循環(huán)的條件,引入break等機(jī)制的描述。這樣若干知識點的教學(xué)就串在了一起,給人一種天衣無縫的感覺,而不是突兀的語法規(guī)則的堆砌。
囿于文章篇幅的關(guān)系,本文不再一一列舉游戲的其他方面。我們只是希望在此能夠拋磚引玉,展示一下計算思維與實例教學(xué)二者的結(jié)合。這種教學(xué)理念有其合理的一面,在未來的教學(xué)實踐過程中,我們將進(jìn)一步予以研究,并跟蹤學(xué)生的學(xué)習(xí)效果。
[1]朱世敏,孫桂芳,張重陽等.C語言程序設(shè)計教學(xué)中計算思維的培養(yǎng)[J].Proceedings of Conference on Creative Education(CCE 2014)
[2]李妮.基于計算思維能力培養(yǎng)的C語言程序設(shè)計課程改革[J].運城學(xué)院學(xué)報,2014,32(5):72-74.
[3]劉紅霞.基于計算思維的C語言程序設(shè)計教學(xué)模式改革[J].大學(xué)教育,2015,(8):116-117.
[4]潘亞平,徐燕.基于計算思維的計算機(jī)程序設(shè)計課程的教學(xué)改革與實踐[J].淮海工學(xué)院學(xué)報(人文社會科學(xué)版),2012,10(23):76-78.
(編輯:王春蘭)
G642.4
A
1671-0568(2016)26-0094-02
任仲晟,碩士,福建師范大學(xué)講師。研究方向:數(shù)據(jù)庫理論與應(yīng)用、數(shù)據(jù)倉庫、數(shù)據(jù)挖掘、計算機(jī)公共課教學(xué)改革等。