二分课堂法在程序语言教学中的应用

2015-05-30 13:16管丽娟
软件工程 2015年11期

摘 要:根据循环嵌套的特点,结合本人教学实践,运用二分课堂法,提出了一种较为理想的循环嵌套教学方法,意在倡导以教师为主导,以学生为主体的教学理念,改变传统的“灌输式”教学模式。该方法在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-),女,硕士,讲师.研究领域:计算机应用.