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