吳舜歆 梁寶蘭(電子科技大學(xué)中山學(xué)院,廣東中山528402)
?
C++程序設(shè)計(jì)課程案例教學(xué)探索*
吳舜歆梁寶蘭
(電子科技大學(xué)中山學(xué)院,廣東中山528402)
摘要:針對(duì)目前C++程序設(shè)計(jì)課程普遍存在的問(wèn)題,提出了案例教學(xué)法。通過(guò)精心設(shè)計(jì)5個(gè)實(shí)用、有趣的案例,分階段引導(dǎo)學(xué)生開(kāi)發(fā)小軟件。從而提高學(xué)生靈活運(yùn)用所學(xué)知識(shí)解決問(wèn)題的能力,增強(qiáng)動(dòng)手能力,為后續(xù)專業(yè)課程的學(xué)習(xí)打下良好的基礎(chǔ)。實(shí)踐證明,這些案例能夠極大提高學(xué)生的學(xué)習(xí)興趣、積極性。
關(guān)鍵詞:案例教學(xué);C++程序設(shè)計(jì);教學(xué)方法
Abstract:Case teaching method is presented based on the problems in current teaching of C++ programming course. 5 practical and interesting cases are carefully designed to guide students to develop small software in stages, which improves students' ability of using knowledge to solve problems and enhances practical ability for the followup professional courses. Practice has proved that these cases can greatly improve students' learning interest and enthusiasm.
Keywords:case teaching; C++ programming; teaching method
在目前國(guó)內(nèi),C++程序設(shè)計(jì)課程是很多計(jì)算機(jī)專業(yè)學(xué)生學(xué)習(xí)的第一門程序設(shè)計(jì)課程。該課程的重要性毋庸置疑,它將引領(lǐng)學(xué)生進(jìn)入計(jì)算機(jī)專業(yè)的殿堂。學(xué)好該課程,不但有助于掌握程序設(shè)計(jì)的方法、為后續(xù)的專業(yè)學(xué)習(xí)打下良好的基礎(chǔ),而且能夠增強(qiáng)學(xué)生學(xué)好計(jì)算機(jī)專業(yè)的信心。
從目前來(lái)看,不少學(xué)生學(xué)習(xí)的情況并不理想,以至于對(duì)程序設(shè)計(jì)談虎色變、望而生畏,進(jìn)而對(duì)本專業(yè)的學(xué)習(xí)喪失了信心。
一般的C++程序設(shè)計(jì)課程普遍存在以下一些問(wèn)題:
1.過(guò)于強(qiáng)調(diào)語(yǔ)法教學(xué)。課堂教學(xué)的重心在于介紹各種C++的語(yǔ)法、規(guī)則,不注重解題思路、解題方法的培養(yǎng)。
2.解決的問(wèn)題過(guò)于簡(jiǎn)單,沒(méi)有采用案例教學(xué),或所采用的案例缺乏真正的實(shí)用性、趣味性。平時(shí)只是零星地寫了一些小程序,并沒(méi)有引導(dǎo)學(xué)生設(shè)計(jì)功能較多的軟件。這樣一來(lái),學(xué)生難以對(duì)課程產(chǎn)生興趣,信心也不足。他們并不懂得一個(gè)較大的程序是如何實(shí)現(xiàn)的。
3.缺乏正確的程序設(shè)計(jì)方法的引導(dǎo)。
針對(duì)傳統(tǒng)的C++程序設(shè)計(jì)課程教學(xué)中存在的問(wèn)題,結(jié)合多年的實(shí)際教學(xué)實(shí)踐,介紹在C++程序設(shè)計(jì)課程中案例教學(xué)法的運(yùn)用。
(一)案例教學(xué)的重要性、必要性
傳統(tǒng)的C++程序設(shè)計(jì)教學(xué)中往往過(guò)于強(qiáng)調(diào)語(yǔ)法教學(xué),課堂所舉的例子往往都是比較簡(jiǎn)單,一般用于說(shuō)明相關(guān)的C++語(yǔ)法、規(guī)則。這樣一來(lái),學(xué)生通過(guò)本課程的學(xué)習(xí)之后,往往只是掌握了C++的一些語(yǔ)言特性,所寫的程序一般不超過(guò)100行。通過(guò)在本課程中引入案例教學(xué),引導(dǎo)學(xué)生開(kāi)發(fā)一些有趣、實(shí)用的小軟件,能夠增強(qiáng)學(xué)生的編程能力、綜合運(yùn)用所學(xué)知識(shí)解決問(wèn)題的能力,提高學(xué)生的學(xué)習(xí)興趣,為后續(xù)專業(yè)課程的學(xué)習(xí)打下良好的基礎(chǔ)。
(二)一般案例教學(xué)中存在的問(wèn)題
傳統(tǒng)的C++程序設(shè)計(jì)課程中的案例教學(xué)所采用的例子往往對(duì)學(xué)生沒(méi)有足夠的吸引力。比如開(kāi)發(fā)通訊錄、銀行賬戶管理系統(tǒng)、成績(jī)管理系統(tǒng)等。誠(chéng)然,這些例子確實(shí)有助于培養(yǎng)學(xué)生的綜合編程能力。但這些例子存在的問(wèn)題是缺乏“真正的”實(shí)用性和趣味性。哪怕是成績(jī)管理系統(tǒng),像這樣的系統(tǒng)開(kāi)發(fā)出來(lái)后,也不大可能真的會(huì)被派上用場(chǎng),缺乏“真正的”實(shí)用性。趣味性更無(wú)從談起。所以,這些傳統(tǒng)的案例往往不容易真正引起學(xué)生的興趣。
當(dāng)然,也有在本課程教學(xué)中將游戲作為案例來(lái)開(kāi)展教學(xué)工作,但常見(jiàn)的類似貪吃蛇這樣的游戲,往往涉及到圖形接口,超出本課程的要求,學(xué)生往往望而生畏。
針對(duì)傳統(tǒng)C++程序設(shè)計(jì)課程案例教學(xué)中存在的以上問(wèn)題,通過(guò)多年的探索,我們?cè)诮虒W(xué)中通過(guò)引入一系列的案例來(lái)引導(dǎo)學(xué)生綜合運(yùn)用程序設(shè)計(jì)知識(shí)編寫實(shí)用、有趣的軟件,從而大大提高學(xué)生的程序設(shè)計(jì)能力、專業(yè)素養(yǎng),為后續(xù)專業(yè)課程的學(xué)習(xí)打下良好的基礎(chǔ)。
(三)總體實(shí)施方案
本課程通過(guò)精心設(shè)計(jì)、引入5個(gè)案例,分階段實(shí)施案例教學(xué)。通過(guò)在不同章節(jié)引入相應(yīng)的案例來(lái)教授學(xué)生靈活運(yùn)用所學(xué)知識(shí)解決實(shí)際問(wèn)題的能力,提高學(xué)生的編程技能、學(xué)習(xí)興趣。這5個(gè)案例分別為萬(wàn)年歷、猜數(shù)字游戲、打字游戲、井字游戲和二十一點(diǎn)。各案例介紹如下。
1.萬(wàn)年歷:功能為顯示某年某月的月歷(陽(yáng)歷信息)。這個(gè)案例分為4個(gè)版本。分別用于控制語(yǔ)句、函數(shù)、數(shù)組和面向?qū)ο笾蓄惖慕虒W(xué)過(guò)程。
2.猜數(shù)字游戲:既有傳統(tǒng)的機(jī)器隨機(jī)生成一個(gè)4位數(shù),然后玩家來(lái)猜。又可以玩家隨機(jī)出一個(gè)數(shù),機(jī)器來(lái)猜。用于函數(shù)、數(shù)組的教學(xué)。
3.打字游戲:屏幕隨機(jī)在一個(gè)位置掉下一個(gè)字符,讓玩家輸入該字符,直到正確或觸底為止。用于數(shù)組的教學(xué)。
4.字游戲:在3*3格子上進(jìn)行的連珠游戲。機(jī)器和玩家輪流在格子留下O和X標(biāo)記,由最先在任意一條直線上成功連接三個(gè)標(biāo)記的一方獲勝。用于指針和引用的教學(xué)。
5.二十一點(diǎn):玩家的目標(biāo)是使自己手中的牌的點(diǎn)數(shù)總和不超過(guò)21且盡量大。用于繼承和多態(tài)的教學(xué)。
以上5個(gè)案例,既有實(shí)用性,又有趣味性。后面的4個(gè)案例雖然也是游戲,但均不涉及圖形接口,并不會(huì)增加學(xué)生的負(fù)擔(dān)。這5個(gè)案例貫穿整個(gè)課程的教學(xué),分階段地實(shí)施,能夠?qū)W(xué)生在整個(gè)課程的學(xué)習(xí)中隨時(shí)調(diào)動(dòng)起來(lái)。通過(guò)教會(huì)學(xué)生開(kāi)發(fā)出一個(gè)個(gè)實(shí)用的、有趣的小軟件,大大提高他們學(xué)習(xí)的興趣。
下面結(jié)合前兩個(gè)案例,詳細(xì)介紹實(shí)際教學(xué)環(huán)節(jié)中的處理。
(四)萬(wàn)年歷案例教學(xué)探討
萬(wàn)年歷是一個(gè)典型的案例,它的功能為顯示某年某月的陽(yáng)歷信息。如用戶要顯示2009年12月的月歷,則輸出如下:
對(duì)于這個(gè)案例,關(guān)鍵的問(wèn)題是求出該月1號(hào)是星期幾。而我們知道,求某一天是星期幾存在如下公式:year-1+(year-1)/4-(year-1)/100+(year-1)/400+c。其中,year為所求的月所在的年份,c為該天是當(dāng)年的第幾天。這個(gè)案例需要解決幾個(gè)關(guān)鍵的問(wèn)題:
1.判斷某一年是否為閏年。
2.求某年某月共有多少天。
3.求某一天是該年的第幾天。
在實(shí)際教學(xué)中,為了降低學(xué)生的學(xué)習(xí)難度,可以先介紹一下軟件的整體框架。通過(guò)介紹這個(gè)框架,同時(shí)也可以將相關(guān)的軟件開(kāi)發(fā)方法介紹給學(xué)生。因?yàn)閷?duì)于這個(gè)問(wèn)題,某個(gè)月的1號(hào)是星期幾只有7種可能,所以這里直接輸入,以便簡(jiǎn)單化問(wèn)題。有了這個(gè)框架,剩下的問(wèn)題就是解決框架注釋中待解決的兩個(gè)問(wèn)題就可以了。萬(wàn)年歷的整體框架如下:
萬(wàn)年歷這個(gè)案例一共分為4個(gè)版本,具體情況如下:
ROC曲線分析顯示,CURB評(píng)分≥3分、PCT-4>1.33 ng/mL結(jié)合△PCT>0.09 ng/mL預(yù)測(cè)老年SCAP 28 d死亡的效能高于單一指標(biāo),AUC為0.856,靈敏度為 84.6%,特異性為91.5%,約登指數(shù)為 0.761。見(jiàn)表4。
1.第一版:用于控制語(yǔ)句的教學(xué),從學(xué)習(xí)選擇語(yǔ)句開(kāi)始,首先解決閏年判斷的問(wèn)題。在此基礎(chǔ)上解決某年某月的天數(shù)。最后是求某一天是該年的第幾天,方法非常簡(jiǎn)單,可以借助switch語(yǔ)句加以實(shí)現(xiàn)。通過(guò)這個(gè)案例,能夠一開(kāi)始就吸引學(xué)生的眼球,讓他們動(dòng)起來(lái),既做出一個(gè)實(shí)用的小軟件,又提高了編程能力,增強(qiáng)了學(xué)習(xí)的自信心。
2.第二版:用于函數(shù)的教學(xué)。眾所周知,函數(shù)對(duì)于面向過(guò)程的程序設(shè)計(jì)非常重要,是結(jié)構(gòu)化程序設(shè)計(jì)的關(guān)鍵。掌握好函數(shù),不但是本課程后續(xù)學(xué)習(xí)的關(guān)鍵,同時(shí)有助于提高學(xué)生的實(shí)際編程技能。這一部分的案例教學(xué)很重要,因?yàn)閭鹘y(tǒng)的C++教材中,這一部分基本介紹的就是關(guān)于函數(shù)的一整套規(guī)則。學(xué)生學(xué)習(xí)之后,盡管懂得定義函數(shù)的形式、參數(shù)傳遞的機(jī)制、形式參數(shù)、實(shí)際參數(shù)、返回值等。但在實(shí)際編程中,學(xué)生往往不知道該將問(wèn)題中的哪些部分獨(dú)立出來(lái)成為自定義函數(shù),函數(shù)的參數(shù)應(yīng)該是什么,返回值應(yīng)該是什么?同時(shí)傳統(tǒng)的C++教材這一部分所舉的例子往往過(guò)于簡(jiǎn)單,基本就是一個(gè)主函數(shù),然后調(diào)用1-2個(gè)自定義函數(shù),根本無(wú)法鍛煉學(xué)生的模塊化思想。在這一版本的萬(wàn)年歷案例教學(xué)中,要求學(xué)生通過(guò)自定義如下4個(gè)函數(shù)來(lái)解決問(wèn)題:
(1)判斷某年是否為閏年:int isLeapYear (int year)
(2)求某年某月共有多少天:int monthDays(int year,int mo nth)
(3)求某一天是該年的第幾天:int dayNumber (int year,int month,int day)
(4)求某一天是星期幾:int week(int year,int month,int day)
3.第三版:用于數(shù)組的教學(xué)。要求學(xué)生在第二版的基礎(chǔ)上,利用數(shù)組這一工具更好地解決問(wèn)題。這一版本要求對(duì)第二版進(jìn)行改寫,具體情況如下:
(1)判斷某年是否為閏年:不變。
(2)求某年某月共有多少天:去掉,改由數(shù)組實(shí)現(xiàn)。
(3)求某一天是該年的第幾天:改寫,用數(shù)組實(shí)現(xiàn)。
(4)求某一天是星期幾:不變。
在第三版的案例教學(xué)中,通過(guò)引入如下數(shù)組來(lái)簡(jiǎn)化問(wèn)題的實(shí)現(xiàn):
int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
4.第四版:用于面向?qū)ο笾蓄惖慕虒W(xué)。通過(guò)設(shè)計(jì)一個(gè)日期類來(lái)解決問(wèn)題,該案例有助于學(xué)生進(jìn)一步掌握類的設(shè)計(jì)。同時(shí)有助于體會(huì)同一問(wèn)題在面向過(guò)程和面向?qū)ο笾刑幚矸椒ǖ牟煌?,為接下?lái)的面向?qū)ο髮W(xué)習(xí)打下良好的基礎(chǔ)。
(五)猜數(shù)字游戲案例教學(xué)探討
猜數(shù)字游戲,又稱Bulls and Cows,起源于20世紀(jì)中期的英國(guó),是一款益智游戲。該游戲有兩種模式,一種是機(jī)器隨機(jī)生成一個(gè)沒(méi)有重復(fù)數(shù)字的四位數(shù),然后讓玩家來(lái)猜。一種是反過(guò)來(lái),玩家隨機(jī)記下一個(gè)沒(méi)有重復(fù)數(shù)字的四位數(shù),然后讓機(jī)器來(lái)猜。兩種模式要解決的問(wèn)題完全不同。
對(duì)于第一種模式,關(guān)鍵是解決如何隨機(jī)生成一個(gè)沒(méi)有重復(fù)數(shù)字的四位數(shù),同時(shí)根據(jù)玩家的猜測(cè)給出xAyB的答復(fù)。下面的函數(shù)用于隨機(jī)生成一個(gè)沒(méi)有重復(fù)數(shù)字的四位數(shù):
//隨機(jī)產(chǎn)生一個(gè)沒(méi)有重復(fù)數(shù)字的四位數(shù),可以前導(dǎo)為0.
對(duì)于第二種模式,關(guān)鍵是如何為機(jī)器設(shè)計(jì)一種猜測(cè)的方法,同時(shí)根據(jù)玩家的回答進(jìn)行調(diào)整。在實(shí)際教學(xué)中,第二種模式的實(shí)現(xiàn)難度相對(duì)較大,有助于進(jìn)一步提高學(xué)生解決實(shí)際問(wèn)題的能力。
通過(guò)在C++程序設(shè)計(jì)課程教學(xué)中引入上述5個(gè)案例,分階段引導(dǎo)學(xué)生設(shè)計(jì)開(kāi)發(fā)實(shí)用、有趣的小軟件,大大調(diào)動(dòng)了學(xué)生學(xué)習(xí)本課程的積極性,為后續(xù)專業(yè)課程的學(xué)習(xí)打下良好的基礎(chǔ)。
參考文獻(xiàn)
[1]吳文虎.程序設(shè)計(jì)基礎(chǔ)(第三版)[M].清華大學(xué)出版社,2010.
[2]邱桂華,袁麗.C++程序設(shè)計(jì)案例教學(xué)的研究[J].軟件導(dǎo)刊,2008 (3):123-124.
[3]梁鳳蘭.案例教學(xué)法在“C++程序設(shè)計(jì)”課程教學(xué)改革中的應(yīng)用研究[J].計(jì)算機(jī)時(shí)代,2015(11):68-70.
[4]肖明.案例教學(xué)法在“C++語(yǔ)言程序設(shè)計(jì)”教學(xué)中的應(yīng)用[J].計(jì)算機(jī)教育,2010(6):83-86.
[5]覃國(guó)蓉.案例教學(xué)法在C++語(yǔ)言教學(xué)中的應(yīng)用[J].深圳信息職業(yè)技術(shù)學(xué)院學(xué)報(bào),2003(2):59-63.
作者簡(jiǎn)介:吳舜歆(1978-),男,漢族,廣東潮州人,講師,碩士,研究方向?yàn)闄C(jī)器學(xué)習(xí)、推薦系統(tǒng)。
*基金項(xiàng)目:2014年度廣東省高等教育教學(xué)改革資助項(xiàng)目(GDJG20142517)
中圖分類號(hào):G642
文獻(xiàn)標(biāo)志碼:A
文章編號(hào):2096-000X(2016)08-0108-03