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