摘要:C程序設(shè)計(jì)課程中概念繁雜,例題繁多,不少學(xué)生死記硬背。針對(duì)這種情況,本文從激發(fā)興趣、創(chuàng)造成績(jī)?nèi)胧?,給出了4個(gè)教學(xué)示例的組織過(guò)程,特點(diǎn)是起點(diǎn)簡(jiǎn)單,步驟間逐步添加知識(shí)點(diǎn),步步有成果,基本覆蓋了c程序設(shè)計(jì)課程的核心內(nèi)容,能起到通過(guò)趣味促進(jìn)實(shí)踐、激發(fā)創(chuàng)造力的作用。
關(guān)鍵詞:程序設(shè)計(jì);教學(xué)組織;相似性;抽象;實(shí)踐
中圖分類號(hào):G642
文獻(xiàn)標(biāo)識(shí)碼:B
1引言
C程序設(shè)計(jì)課程一般開(kāi)設(shè)在大一上學(xué)期,大多數(shù)學(xué)生處在從中學(xué)學(xué)習(xí)方法向大學(xué)學(xué)習(xí)方法的過(guò)渡期,他們知道這門(mén)課程是計(jì)算機(jī)專業(yè)的第一塊基石,卻常常以死記硬背的方法應(yīng)付,更無(wú)法找到課程的趣味。對(duì)初學(xué)者而言,C程序設(shè)計(jì)語(yǔ)言課程的概念繁雜,例題繁多,教材內(nèi)容給讀者的系統(tǒng)感不強(qiáng)。可實(shí)際教學(xué)中,理論課時(shí)和上機(jī)課時(shí)常顯不足,教師忙于完成教學(xué)內(nèi)容,知識(shí)點(diǎn)間的聯(lián)系常被淡化。如何在增加課時(shí)的前提下,提高教學(xué)效率,是一個(gè)值得關(guān)注的教學(xué)課題。
學(xué)習(xí)的第一動(dòng)力是興趣,筆者在多年的C程序設(shè)計(jì)教學(xué)中,感到最無(wú)奈的是學(xué)生缺乏對(duì)課程的興趣。編程類課程的趣味性,一在于其中知識(shí)點(diǎn)的聯(lián)系,二在于成果有實(shí)際的應(yīng)用價(jià)值。教師的教學(xué)重點(diǎn)應(yīng)是通過(guò)教材內(nèi)容的重組織,引導(dǎo)學(xué)生發(fā)掘課程興趣點(diǎn),帶動(dòng)課程難點(diǎn)的學(xué)習(xí)。雖然教學(xué)示例俯手皆拾,但示例的選擇、組合卻可以匠心獨(dú)到。
示例的組織不僅應(yīng)自然顯示出同類問(wèn)題、方法的代碼相似性,更應(yīng)展現(xiàn)出層次遞進(jìn)的抽象思維過(guò)程;示例的組織應(yīng)讓每一步都有新意,但難度變化不應(yīng)過(guò)大,還應(yīng)讓每一步都有成果,成果是興趣的激發(fā)點(diǎn);示例的組織還應(yīng)既便于教師連續(xù)講解,也便于暫停數(shù)次,讓學(xué)生自我探索實(shí)踐。筆者在課程教學(xué)中有意摸索、積累了若干此類示例,在此拋磚引玉。
2數(shù)值程序的趣味
在講解循環(huán)結(jié)構(gòu)和函數(shù)時(shí),數(shù)制轉(zhuǎn)換程序常常作為示例,但這么一個(gè)涉及到計(jì)算機(jī)專業(yè)最基本概念的程序若只被提及一次,實(shí)在太可惜了??梢栽噷⒃撌纠纸鉃橐韵?個(gè)步驟。
第1階段,講解將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的程序,這個(gè)程序以main函數(shù)的形式展現(xiàn)給學(xué)生,讓學(xué)生體會(huì)到循環(huán)的流程和調(diào)試的成果。這是本例的最基本目標(biāo)。
第2階段,改造代碼為函數(shù)A1,函數(shù)有一個(gè)參數(shù)x,實(shí)現(xiàn)將任意十進(jìn)制數(shù)x轉(zhuǎn)換為二進(jìn)制數(shù)的功能。這提升了程序的結(jié)構(gòu)。
第3階段,擴(kuò)展函數(shù)A1為函數(shù)A2,在函數(shù)接口中增加參數(shù)m、n,實(shí)現(xiàn)將m進(jìn)制數(shù)x轉(zhuǎn)換為n進(jìn)制數(shù)的功能。函數(shù)在具體代碼的基礎(chǔ)上,抽象程度有所提高。
第4階段,設(shè)計(jì)main函數(shù),反復(fù)調(diào)用函數(shù)A2,計(jì)算1至100所有十進(jìn)制數(shù)的二、三、…、九進(jìn)制的表示,并將結(jié)果輸出到某文本文件中。
第5階段,將結(jié)果文件內(nèi)容,粘貼到Excel文件中,排版成一張精美的各進(jìn)制的數(shù)字對(duì)照表。
以上每個(gè)階段所涉及的技術(shù)都屬于基本技能,但以一條主線帶動(dòng)學(xué)生,逐步深入,步步都有成果。與Excel聯(lián)合應(yīng)用,更使學(xué)生開(kāi)闊了學(xué)習(xí)和實(shí)踐的視野。
3類型變換程序的趣味
在講解字符串處理時(shí),類型轉(zhuǎn)換是基本例題。如將數(shù)值轉(zhuǎn)換數(shù)字串,將數(shù)字串轉(zhuǎn)換為數(shù)值等。結(jié)合數(shù)制概念,可將問(wèn)題多樣化。雖然教學(xué)意圖是開(kāi)闊學(xué)生思路,卻常常使學(xué)生感到程序繁雜無(wú)序。實(shí)際上,合適的示例組合可促進(jìn)學(xué)生自己發(fā)現(xiàn)、領(lǐng)悟其中的規(guī)則。可以試將這些示例組成以下6個(gè)步驟。
第1階段,講解函數(shù)B1,函數(shù)有參數(shù)s,實(shí)現(xiàn)將lO進(jìn)制數(shù)字串s轉(zhuǎn)換為10進(jìn)制整數(shù)的功能。
第2階段,擴(kuò)展函數(shù)B1功能,在接口中增加參數(shù)k,實(shí)現(xiàn)將k進(jìn)制數(shù)字串轉(zhuǎn)換為k進(jìn)制的整數(shù)的功能。通過(guò)代碼的抽象,強(qiáng)化了對(duì)核心代碼的認(rèn)識(shí),也降低了編程難度。
第3階段,講解函數(shù)B2,函數(shù)有參數(shù)x,實(shí)現(xiàn)將10進(jìn)制整數(shù)x轉(zhuǎn)換為10進(jìn)制數(shù)字串的功能。
第4階段,擴(kuò)展函數(shù)B2功能,在接口中增加參數(shù)k,實(shí)現(xiàn)將k進(jìn)制整數(shù)轉(zhuǎn)換為k進(jìn)制數(shù)字串的功能。
第5階段,設(shè)計(jì)函數(shù)B3,函數(shù)有參數(shù)s、m、t、n,調(diào)用Bl函數(shù),將m進(jìn)制數(shù)字串s轉(zhuǎn)換為m進(jìn)制整數(shù);調(diào)用上節(jié)中的A2函數(shù),將m進(jìn)制整數(shù)轉(zhuǎn)換為n進(jìn)制整數(shù);調(diào)用B2函數(shù),將n進(jìn)制整數(shù)轉(zhuǎn)換為n進(jìn)制數(shù)字串。
第6階段,設(shè)計(jì)main函數(shù),反復(fù)調(diào)用函數(shù)B3,計(jì)算十進(jìn)制數(shù)字串“001”至“100”對(duì)應(yīng)的二、三、…、九進(jìn)制數(shù)字串;將結(jié)果輸出到文本文件;將文件內(nèi)容粘貼到Excel文件中,排版成一張與上節(jié)相同的各進(jìn)制數(shù)字串對(duì)照表。
以上6個(gè)階段,以易于掌握的函數(shù)入手,通過(guò)增加函數(shù)參數(shù)提高函數(shù)的抽象性,增強(qiáng)函數(shù)的功能,第2、4階段的成果都有一定的應(yīng)用價(jià)值,第5、6階段培養(yǎng)了函數(shù)組合調(diào)用的能力。
4加密、解密程序的趣味
在字符串編程的練習(xí)中,對(duì)稱加密、解密算法是一個(gè)有趣的話題,可以充分利用它引導(dǎo)學(xué)生做更深入的實(shí)踐??梢栽噷⒋耸纠纸鉃橐韵?個(gè)步驟。
第l階段,講解加密函數(shù)C1,函數(shù)有參數(shù)s、k,對(duì)存于字符數(shù)組s的明文采用密鑰k進(jìn)行對(duì)稱加密。這一短小精干的程序可以讓學(xué)生體驗(yàn)字符串操作的一般方法。
第2階段,擴(kuò)展函數(shù)C1,在接口中增加參數(shù)n、f2,實(shí)現(xiàn)讀取n指定的明文文件,將其中的每行字符串用密鑰k加密,生成密文文件f2;設(shè)計(jì)main函數(shù),實(shí)現(xiàn)獨(dú)立的加密程序。
第3階段,講解解密函數(shù)C2,函數(shù)有參數(shù)s、k,對(duì)存于字符數(shù)組s的密文采用密鑰k進(jìn)行對(duì)稱解密。
第4階段,擴(kuò)展函數(shù)C2,在接口中增加參數(shù)f1、f2,實(shí)現(xiàn)讀取n指定的密文文件,將其中的每行字符串用密鑰k解密,生成明文文件位;設(shè)計(jì)main函數(shù),實(shí)現(xiàn)獨(dú)立的解密程序。
第5階段,使用main(int argo,char*argv)函數(shù)的接口參數(shù),將加密、解密程序合二為一,具體執(zhí)行時(shí),使用命令行參數(shù)識(shí)別加密或解密功能。如命令行參數(shù)是“-e a1.txta2.txt 5”表示對(duì)a1.txt使用密鑰5加密,結(jié)果密文存于a2.txt;如命令行參數(shù)是“-d a2.txt a3.txt 5”表示對(duì)a2.txt使用密鑰5解密,結(jié)果明文存于a3.txt。
第6階段,對(duì)于優(yōu)秀的學(xué)生,還可以鼓勵(lì)他們進(jìn)一步探索,在沒(méi)有密鑰情形下如何猜測(cè)某個(gè)密文文件的密鑰進(jìn)行解密。這種探索性的實(shí)踐會(huì)帶給學(xué)生更廣闊的編程視野。
在以上6個(gè)階段中,C1和C2函數(shù)非常相似,對(duì)這種相似性的留意不僅能強(qiáng)化編程中的概念,更能提高編程、調(diào)試的效率。最終的軟件成果已經(jīng)具備商業(yè)軟件的雛形,學(xué)生們會(huì)更加興奮。
5打印字符圖案的趣味
在學(xué)習(xí)循環(huán)、分支結(jié)構(gòu)時(shí),用字符打印特定的幾何圖案是最簡(jiǎn)的示例??上н@個(gè)示例的思路沒(méi)有繼續(xù)延伸,只是局限在打印完全規(guī)則的圖案??梢栽噷⒋耸纠纸鉃橐韵?個(gè)步驟。
第1階段,講解一個(gè)打印固定規(guī)則圖案的函數(shù)Dl,實(shí)現(xiàn)用某種字符打印一個(gè)固定形狀的三角形。
第2階段,擴(kuò)展函數(shù)DI,在接口中增加參數(shù)base、angle、scale,base是圖案打印基點(diǎn),angle是圖案旋轉(zhuǎn)角度(0或90或180或270),scale是圖案的大小比例的參數(shù),值可以是1或2或3等正整數(shù)。
第3階段,按照函數(shù)D1的形式,引導(dǎo)學(xué)生編程更多的打印規(guī)則圖案的函數(shù):建立函數(shù)的調(diào)度管理函數(shù)D2;
第4階段,利用二維數(shù)組存儲(chǔ)圖案數(shù)據(jù),數(shù)組元素為1或0,表示在相應(yīng)位置上打印或不打印字符。二維數(shù)組相當(dāng)于任意字符圖案的數(shù)據(jù)結(jié)構(gòu)。設(shè)計(jì)函數(shù)D3,參數(shù)是一個(gè)二維數(shù)組,實(shí)現(xiàn)打印任意不規(guī)則圖案的功能。
第5階段,擴(kuò)展函數(shù)D3,在接口中增加參數(shù)base、angle、scale,意義同第2階段,函數(shù)的功能也類似第2階段。
第6階段,調(diào)試函數(shù)D3的圖案數(shù)據(jù),建立起對(duì)任意圖案的數(shù)據(jù)增加、修改、調(diào)用等管理函數(shù)D4.
第7階段,設(shè)計(jì)函數(shù)D5,以菜單形式組織函數(shù)D2、D4,實(shí)現(xiàn)規(guī)則圖案和任意圖案的多種形式的打印。此時(shí)程序的結(jié)構(gòu)已經(jīng)比較復(fù)雜了。這個(gè)示例不僅充分鍛煉了編程技術(shù),更為將來(lái)學(xué)習(xí)圖像處理技術(shù)做了鋪墊。
6結(jié)束語(yǔ)
本文給出了數(shù)值程序、類型變換程序、加密/解密程序、打印字符圖案等4個(gè)教學(xué)示例的組織過(guò)程,每個(gè)示例的起點(diǎn)簡(jiǎn)單,每個(gè)步驟涉及的新知識(shí)較少,思維跳躍小,但每個(gè)步驟的收獲喜人,最終涉及到了除指針、結(jié)構(gòu)之外的所有c語(yǔ)言知識(shí)點(diǎn)。每個(gè)示例可以一次講解,也可以分步驟多次講解,或空缺一二步驟,讓學(xué)生實(shí)踐完成,尤其能起到通過(guò)懸念、興趣促進(jìn)實(shí)踐、激發(fā)創(chuàng)造力的作用。