摘 要:根據(jù)循環(huán)嵌套的特點(diǎn),結(jié)合本人教學(xué)實(shí)踐,運(yùn)用二分課堂法,提出了一種較為理想的循環(huán)嵌套教學(xué)方法,意在倡導(dǎo)以教師為主導(dǎo),以學(xué)生為主體的教學(xué)理念,改變傳統(tǒng)的“灌輸式”教學(xué)模式。該方法在C語言、VC++、VB等程序語言教學(xué)中得到試用,其教學(xué)效果反應(yīng)良好。
關(guān)鍵詞:二分課堂法;程序語言教學(xué);循環(huán)嵌套
中圖分類號:TP312 文獻(xiàn)標(biāo)識碼:A
1 引言(Introduction)
《程序設(shè)計(jì)語言》是計(jì)算機(jī)及其相關(guān)專業(yè)(電子商務(wù),信息管理等)的專業(yè)基礎(chǔ)課,高等院校開設(shè)的入門程序語言課一般都是C語言、VC++、VB、C#、JAVA等。然而對于初學(xué)者來說,不管學(xué)哪一門語言,學(xué)好三種基本編程結(jié)構(gòu):即順序結(jié)構(gòu),選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)是關(guān)鍵[1-4],而循環(huán)的嵌套使用,是初學(xué)者學(xué)習(xí)過程的重點(diǎn),也是難點(diǎn)。
2 二分課堂法(The method of dichotomous class)
隨著微課、慕課、翻轉(zhuǎn)課堂等網(wǎng)絡(luò)教學(xué)方法在《程序設(shè)計(jì)語言》教學(xué)中的普及,教師應(yīng)如何抓住課堂的分分秒秒來提高教學(xué)質(zhì)量是高校教師面臨的困惑?其實(shí)無論任一門課程學(xué)習(xí)還是一個知識點(diǎn)學(xué)習(xí),都是一個從0—N過程。如何要把握好0—N過程?需分兩個步驟。第一步:0—1的基礎(chǔ),主要由主講教師講透知識點(diǎn)原理,思想,以及簡單運(yùn)用;第二步:1—N的擴(kuò)充與探討,需要學(xué)生與教師互動,首先由學(xué)生課后思考,探究,然后由教師提煉學(xué)生的研究成果,并進(jìn)行歸納總結(jié),真正讓學(xué)生理解并掌握該知識。
所謂二分課堂法,就是將一次課(一般兩學(xué)時(shí))進(jìn)行二分,前半部分用探討和擴(kuò)充上一次課的內(nèi)容,后半部分用于新知識的傳授,如此重復(fù)。此方法在文科課程教學(xué)中的使用已屢見不鮮,但在工科和理科課程教學(xué)中并不普遍,如能巧妙運(yùn)用,將達(dá)到事半功倍的效果。
下面結(jié)合本人在一線教育中多年的教學(xué)實(shí)踐,談一談循環(huán)嵌套的教學(xué)方法。
3 二分課堂法在循環(huán)嵌套中的應(yīng)用(The application
of dichotomous class in nesting loop)
3.1 0—1的循環(huán)嵌套知識的闡述
首先要講透循環(huán)結(jié)構(gòu)的編程思想(以C語言為例),所謂循環(huán)就是重復(fù)[2],但重復(fù)的內(nèi)容(即循環(huán)體)和重復(fù)次數(shù)(即循環(huán)次數(shù))務(wù)必要給同學(xué)澄清,這一點(diǎn)是學(xué)習(xí)循環(huán)嵌套的前提。
例: for (j=1;j<=4;j++) printf(" ");
//重復(fù)的內(nèi)容是輸出" ",重復(fù)的次數(shù)是4次,即整個語句的功能就是輸出4個空格
同理: for (k=1;k<=4;k++) printf("*");
//重復(fù)的內(nèi)容是輸出"*",重復(fù)的次數(shù)是4次,即整個語句的功能就是輸出4個*"號
其次要講透循環(huán)嵌套的編程思想,所謂循環(huán)的嵌套就是循環(huán)(外循環(huán))里面又有循環(huán)(內(nèi)循環(huán)),即內(nèi)循環(huán)又是一個完整的循環(huán)結(jié)構(gòu)[2]。
例:
for (i=1;i<=4;i++)
{ }
如果在上面的{ }內(nèi)添加一個完整的循環(huán)結(jié)構(gòu),就成了循環(huán)嵌套的編程。
即:for (i=1;i<=4;i++)
{ for (j=1;j<=4;j++) printf("*"); }
因?yàn)榛ɡㄌ杻?nèi)的循環(huán)(內(nèi)循環(huán))是實(shí)現(xiàn)重復(fù)輸出4個"*"號,現(xiàn)在是要把這個動作重復(fù)4次,將會輸出16個"*"號。這一點(diǎn)讓同學(xué)們明白了循環(huán)嵌套的思想。
下面再來把這道題擴(kuò)展一下,主要通過改變內(nèi)循環(huán)的內(nèi)容來進(jìn)行拓展,即更改花括號里面的內(nèi)容來實(shí)現(xiàn)。
for (i=1;i<=4;i++)
{ for (j=1;j<=4;j++) printf(" ");
for (k=1;k<=4;k++) printf(" *");
printf("\n "); }
要求同學(xué)們回答這個循環(huán)嵌套的循環(huán)體是什么?即i循環(huán)的循環(huán)體包括哪些內(nèi)容?
先輸出4個空格,再連續(xù)輸出4個"*"號,最后是換行。把這個動作重復(fù)4次,程序運(yùn)行結(jié)果如圖1所示。
圖1 程序運(yùn)行結(jié)果
Fig.1 The results of program running
緊接著要求同學(xué)們思考輸出如下圖形[3](圖2),該怎樣編程?
圖2 上三角形
Fig.2 Upper triangle
同學(xué)們的思維基本上都能回答出如下編程框架;每行都是先輸出空格,再輸出"*"號,最后是換行,如此重復(fù)4次。
for (i=1;i<=4;i++)
{ for ( …… ) printf("*"); //輸出空格
for ( …… ) printf(" "); //輸出"*"號
printf("\n "); } //換行
問題是每行究竟要輸出多少空格,多少個"*"號?可以先給出點(diǎn)提示,上圖中每一行的空格和"*"號如作如下分析:
(1)每一行后面的空格可以不用輸出(因?yàn)椴挥绊憟D形的輸出效果)。
(2)這個圖形的"*"號是對稱的,如果畫一條對稱軸的話(如圖3所示),"*"號的個數(shù)為左邊"*"號個數(shù)的2倍加1。
圖3 平分上三角形
Fig.3 Upper triangle dividing
第i行 空格(個數(shù)j) "*"號 (左邊"*"號個數(shù)k)
i=1 3 0
i=2 2 1
i=3 1 2
i=4 0 3
發(fā)現(xiàn)秘密: 行號i加每行空格個數(shù)等于4 "*"號個數(shù)比行號i始終少1
得出: j=4-i k=i-1
于是每行空格個數(shù)為j=4-i,每行"*"號個數(shù)為2*k+1,即2*(i-1)+1=2*i-1,最后補(bǔ)全程序得到如下程序段:
for (i=1;i<=4;i++)
{ for (j=1;j<=4-i;j++) printf(" ");
for (k=1;k<=2*i-1;k++) printf("*");
printf("\n "); }
到此為止,一個上三角形的圖形已被成功輸出,我們已經(jīng)完成0—1基礎(chǔ)學(xué)習(xí)過程;一步是要將同學(xué)們分成3—5組,讓同學(xué)們圍繞以下問題進(jìn)行課后思考與探究,為下一次課進(jìn)行1—N的拓展做好準(zhǔn)備。
課后思考題:
(1)如何輸出下三角形、直角三角形。
(2)如何輸出梯形,平行四邊形,矩形。
(3)如何輸出菱形,漏斗[3]。
3.2 1—N循環(huán)嵌套知識的拓展
經(jīng)過上機(jī)練習(xí),教材反復(fù)的滲透,在第二次課的討論與總結(jié)中,各組同學(xué)不僅完成課后作業(yè),還進(jìn)行循環(huán)嵌套知識點(diǎn)的總結(jié),匯總?cè)缦拢?/p>
(1)簡單圖形的輸出:即空格("*"號)個數(shù)逐步增加(減少)的情形,參照例題便可實(shí)現(xiàn),如上述的(1),(2)中的圖形。
(2)組合圖形的輸出:即空格("*"號)個數(shù)先增加(減少),然后減少(增加)的情形,需要分開輸出(如菱形的輸出需將上三角和下三角分開輸出)不能一氣呵成,如上述的(3)中圖形。
(3)循環(huán)嵌套可以多層次嵌套:如把輸出菱形的程序段,重復(fù)N次,將會輸出一條菱形的項(xiàng)鏈。
尤其是最后一點(diǎn)的匯總,盡管只有一組同學(xué)(實(shí)際上為成績較好者的一組,且上機(jī)試運(yùn)行過)提出,但是我還是感到非常欣慰,因?yàn)閷τ诔鯇W(xué)者來說,循環(huán)的嵌套本來就比較難理解,他們能想出再次嵌套,不能不說這得益于對循環(huán)嵌套知識理解透徹和同學(xué)們課后大膽探究的結(jié)果??磥砣缜擅钸\(yùn)用二分課堂法,不僅能讓同學(xué)們充分發(fā)揮腦力、動手能力,而且能鼓動同學(xué)們大膽創(chuàng)新,挖掘同學(xué)們探究問題的興趣。
4 結(jié)論(Conclusion)
以上是二分課堂法在循環(huán)嵌套中的應(yīng)用,該教學(xué)方法在C語言、VC++、VB等程序語言教學(xué)中得到試用,其教學(xué)效果反應(yīng)很好。學(xué)生對循環(huán)嵌套意義及其應(yīng)用有了較深刻的認(rèn)識,做到能夠靈活運(yùn)用而不是死記硬背,此外為后面學(xué)習(xí)數(shù)組排序、遞歸調(diào)用、數(shù)據(jù)結(jié)構(gòu)中二叉樹的遍歷打下了良好基礎(chǔ)。
參考文獻(xiàn)(References)
[1] 林卓然.VB語言程序設(shè)計(jì)[M].北京:電子工業(yè)出版社,2013.
[2] 譚浩強(qiáng).C程序設(shè)計(jì)(第4版)[M].北京:清華大學(xué)出版社,2010.
[3] 譚浩強(qiáng).C程序設(shè)計(jì)(第4版)學(xué)習(xí)輔導(dǎo)[M].北京:清華大學(xué)出
版社,2010.
[4] 譚浩強(qiáng).C++程序設(shè)計(jì)(第2版)[M].北京:清華大學(xué)出版社,
2011.
作者簡介:
管麗娟(1973-),女,碩士,講師.研究領(lǐng)域:計(jì)算機(jī)應(yīng)用.