“循环嵌套之图形”教学设计
江苏省东台中学 朱世华
一、教学课题
第二章第三节《循环嵌套之图形》——算法与程序设计(新课标教科书;教育科学出版社)
二、教材与学者分析
教材使用教育科学出版社的《算法与程序设计》(选修),教学内容为第二章(程序设计ABC)第三节(程序的基本结构)中的第三部分(循环结构)。教材中对循环嵌套的内容只是简单的介绍了一下,就给出了程序代码,不便于学生理解。就教材而言,我没有按照课本知识结构进行讲解,学习了for…next语句后没有讲do while…loop语句,而是紧接着通过由浅入深的图形将循环嵌套内容作为一节知识探究课程来讲解。
对学生而言,在人教版高中数学必修三的课程中,学生们已经初步认识了程序的基本结构,会用循环的思想解答一些数学问题,这些知识都为这节课打下良好的基础。但是数学课上的内容主要还是停留在纸面上,在vb平台上编写程序解决问题并得到正确结果,可以让学生有成就感。
三、教学目标
1、认知目标:
让学生在理解for-next循环基础上,进一步掌握使用for-next循环嵌套打印输出图形。
2、技能目标:
使学生在掌握for-next循环嵌套基础上,能够打印一些常规图形。
3、情感目标:
通过合作学习和探究实践,培养学生的思维能力、创新能力、动手实践能力以及分析和解决问题的能力。
4、重点和难点:
重点:循环嵌套的结构
难点:内外循环的功能
四、教法与学法
本节课主要采用示例引导方式由浅入深进行讲解,并结合学生的合作学习、自主学习、探究学习相结合的学习方法。 教学过程中教师起主导作用,引导学生关注新知识并思考、讨论,学生在倾听、反馈和实践过程中建构知识。
五、课时安排
1课时
六、媒体准备
多媒体教学平台、网络电子教室
七、教学过程
教师:请同学们通过程序实现输出“********”图形,并在小组内交流自己的算法。
学生:编写程序。(教师查看学生程序编写情况)
【设计意图】实际上对于1行8列的“********”图形输出,可以通过多种算法实现。如有同学直接用Print “********”,也有同学用①For I=1 to 8;②print “*”;③next I 来实现,通过小组交流能够让同学们对不同算法进行比较,哪一种算法更适合这一问题。同时要关注学生所出现的问题,如有同学输出的是8行1列的图形。
教师:刚才我发现有少数同学程序运行后输出的是8行1列的图形,这是为什么呢?
学生:由于print “*”后少了;号。
教师:进一步强调print 后的;号和,号的区别。有部分同学用的print “********”,有部分同学用的是for…next语句,下面请大家输出1行100列的”*”号图形。
我们来比较一下这两种算法,首先,这两种算法都可行,但哪一种算法更好?
学生:异口同声——for…next
教师:下面我们一起来分析矩形“*”号图的输出。

首先,每行都是8个“*”号,我们可以通过for…next来实现;
其次,它共有4行,每行的“*”号个数相同,那我们可不可在for…next语句外再加一个for…next语句来控制1~4行呢?下面大家通过程序试一下能不能输出这样的图形!
学生:编写程序。
【设计意图】教师在这边留了一手,并没有直接把print tab();介绍给学生,而是等学生认为这一方法不可行时再分析图形的特点,引出print tab(); ,从而显示它的重要性。
学生:议论,怎么输出是一行,32个“*”号呢?
教师:我们再来分析一下这一图形,除了共4行,每行8个“*”号外,这一图形还有什么特点?
学生:每行第一个“*”号的位置相同。
教师:讲解print tab();的作用:对“*”的输出位置进行定位并控制换行,外循环控制输出的行数,内循环控制每行输出的“*”个数,由于print tab();是控制每一行的第一个“*”的位置,所以print tab();语句应在进入内循环前。如果每行“*”号的起始位置相同,则tab()内的值为常数。(特别提醒tab()后的;号)
学生:修改程序实现图形输出。
教师:如果把刚才的图形向左拉一下,如下图,如何输出呢?

我们与刚才的图形比较一下,有什么不同?
学生:每行第一个“*”号的起始位置不同,其它相同。
教师:假设第一行的起始位置为10,那第二行就为11,第三行为12,第四行为13,那怎样用行来表示起始位置呢?
学生:tab(9+I);
教师:请大家修改程序实现图形输出。
教师:如向右推呢?如下图

学生:tab(9+i);
教师:我们再一起来分析下图:

分析:每一行的起始位置相同,所以tab();内是常数,共5行,第一行,1个“*”;第二行2个“*”,第三行3个“*”,第四行4个“*”,第五行5个“*”,如下表:
怎样用行(i)来表示“*”的个数(j)呢?
学生:I从1到5,j从1到I
学生:修改程序实现图形输出。
For I=1 to 5
Print tab(10);
For j=1 to I
Print “*”;
Next j
Next i
【设计意图】上面的几个图形由简单到复杂,在逐步深入的过程中,主要培养学生分析问题的能力,并通过归纳找到每行起始位置、每行“*”个数j与行I之间的关系,从而实现这一系列问题的解决。
教师:归纳,只要我们能够通过分析找到每行起始位置、每行“*”个数j与行I之间的关系,即print tab(?); for I=? To ?, for j=1 to ?(用I表示), 那这一类图形的输出就会迎刃而解。下面请大家分析下图,小组讨论并修改程序。

【设计意图】这一图形的特点是:图形上下对称,每行的起始位置也上下对称,而行是1~9,这就要求我们的学生变换思维,将行I也变换成对称的,大家可以在讨论过程是激发思维的火花。教师也可以适当点拨。
教师:这一图形的特点:
从上表可以看出,起始位置和“*”个数的数值上下对称,那我们可不可把行I的数值也改成上下对称呢?
学生:可以。-4~4。
代码:
For I=-4 to 4
Print tab(6+abs(i));
For j=1 to 5-abs(i)
Print “*”;
Next j
Next i
教师:请大家分析下图,编写程序代码,实现图形输出,并上传。

【设计意图】学生根据已有知识结构,通过分析问题,确定算法来解决问题,通过学生作业的提交,了解学生这节知识的掌握情况。
教师总结:对于通过多重循环来实现图形输出这一系列问题,我们首先要对图形进行分析,找出相关变量之间的关系,那我们就能通过已有的知识来解决这一系列问题。
教学反思:本节课内容在计算机房完成,由浅入深,环环相连,这节内容由原先直接告诉学生print tab();有什么作用,内外循环的功能等修改而来,通过设计障碍,小“陷阱”,让学生亲身体会到print tab();的作用和内外循环的功能,教学效果不错。采用示例引导,任务驱动等方式,充分调动学生的学习积极性,激发学生的求知欲。引导学生分析问题、归纳总结问题,将能力的培养落到具体的探究问题的过程中,使学生成为学习的主体,从而使学生在不知不觉中掌握并消化本节课的重点、难点。





