程妮,景运革
(运城学院数学与信息技术学院,运城 044000)
《C语言程序设计》课程是一门应用性极强的结构化程序设计语言,是全院非计算机专业理工科学生的通识教育课程。结构化程序设计主要使用三种基本结构来构造程序,其中循环结构是最为重要且最难掌握的一种,尤其是其中的循环嵌套,一些学生就会出现“上课听不懂,实验不会做”的情况,所以常规的讲授法学生很难理解、掌握和消化。基于此,根据笔者多年的教学实践经验,在精选教学案例的基础上,以问题为引导,层层深入地分析讲解案例,一步步引导学生理解循环嵌套的执行过程,并灵活应用循环嵌套解决实际问题。教学实践表明,案例教学法的实施,调动了学生学习的积极性,培养学生分析和解决问题的能力,从而达到教学目标和效果。
案例教学法是教师根据学生的理解程度和教学需要,将知识点加工成一些典型的案例,并引导学生一起思考、分析、讨论案例[1],并最终掌握所学知识和技能的一种开放式、互动式的教学模式。
在C语言的循环嵌套教学中实施案例教学法,从教学内容和教学目标来看都是可行的。循环嵌套是C语言循环结构章节中的难点内容,所以本节内容的知识性、逻辑性、抽象性较强,内容相对枯燥,学生很难理解。教师通过选取生动有趣的典型案例,吸取了学生的注意力,提高学生学习的积极性,让学生参与到案例学习的各个环节中,从而让学生在完成实例的过程加强对循环嵌套的概念、结构和执行过程的理解,掌握类似案例的编程规律,使学生能够举一反三,提高学生的动手操作能力和编程能力,以及解决实际问题的能力。
在案例教学法中,案例的选取十分关键,教师要根据学生的实际情况以及教学目标、内容的需要,选择有针对性的典型案例。而且案例既要突出本节课的重难点,还要和学生的日常生活相适应[2]。同时,教学中使用的案例要由易到难、层层深入,这样可以循序渐渐地启发学生,培养学生的逻辑思维能力,达到教学目标和效果。
在C语言的三种基本结构中,循环结构最为重要,而且应用也最为广泛。其中循环嵌套是循环结构章节中的难点内容,是本门课程的难点与核心。循环嵌套的内容难度高且相对抽象,学生接受起来有些困难,所以教师要综合考虑学生的实际情况、教学内容和需要等,运用各种教学方法来调动学生学习的积极性。
循环嵌套结构的教学目标是:①理解循环嵌套的含义、基本结构和语句格式;②掌握循环嵌套的执行过程;③应用循环嵌套结构设计程序的方法;④培养学生分析、解决问题的能力以及解决实际问题的能力。
循环嵌套结构的教学重点:①循环嵌套的含义、基本结构;②平面图形的输出;③循环嵌套结构的应用。
循环嵌套结构的教学难点:应用for循环嵌套,编写程序解决实际问题。
大二的理工科学生已具备一定的逻辑思维能力和学习能力,而且上一节课已经学习了循环的概念,实现循环的三种语句以及使用循环编写简单的程序,这些为本节课内容的学习奠定一定的基础。但是,由于内容的抽象性和应用性较强,受学习和思维能力等因素的影响,学生在学习过程中很难完全理解和掌握循环嵌套的相关概念和执行过程,因此激发学生兴趣,增强学生学习的积极性十分重要。
循环嵌套的教学主要采用案例教学法,通过问题的方式引入案例,进而引导学生分析案例,将知识分解,然后通过具体案例分析、掌握循环嵌套的执行过程和应用,最后编程解决案例中的问题。
教师活动:
提出问题1:当循环次数确定时,使用哪种循环结构更方便?其基本格式如何?
提出问题2:如何输出一行*?
学生活动:
学生口述for循环的语句格式和循环的三要素等。师生共同分析输出一行*时,循环变量的初值、终值和步长,然后教师板书程序。
通过问题引导是学生回顾已学知识,熟悉for循环的三要素及语句格式;教师通过板书for循环基本格式可以进一步加深学生的直观印象,为引入for循环嵌套做铺垫。
教师活动:
提出问题:使用for循环可以输出一行*,那如果要打印4行7列的*,该如何解决?那如果要打印一百行*呢?
学生活动:
学生能回答出上面输出一行*的程序段将要被执行4次。
在此基础上,教师进一步引导,展开对该实例的讲解。
课件展示:循环嵌套的应用——平面图形的输出(板书)
【实例1】输出4行7列的*。
算法分析过程:
(1)对行的输入:平面图形的每一行输出7个*,需要重复进行4次。输出一行*将作为循环结构的循环体,而行数则是循环结构的循环控制变量。
(2)对列的输入:每一行需要重复输出7个*,也用循环结构来实现。
(3)循环嵌套:for循环的循环体又被另一个for循环语句替代,则形成了循环的嵌套结构。
C程序代码如下:
教师提问:
语句printf(“ ”);能否不写?
在输出平面图形时,在每一行符号输入完成后,要加一条换行显示语句,否则所有的符号会在一行中显示。
结论:
有规律的平面图形,一般使用双重循环,逐行输出。
外循环控制行,内循环控制列。
(1)循环嵌套的含义和结构
在一个循环体内完整地包含另一个循环结构,称为循环嵌套。
其中外层的循环称为外循环,嵌套在循环体内的循环称为内循环。嵌套可以有很多层,一般使用双重或三重循环。
(2)实现循环嵌套的方式
三种循环结构while、do-while、for可以互相嵌套,这节课我们主讲for循环的嵌套结构。而且循环语句之间只存在并列和嵌套两种关系。
循环嵌套的设计要点:在使用循环嵌套结构实现行列输出时,首先要找出循环体,其次要确定控制循环的次数。其中,循环体的次数一般由循环控制变量来实现,需要明确三要素[3]。
(3)循环嵌套的执行过程
循环嵌套的执行规律是外循环执行一次,内循环要执行多次。即在每次执行外循环的循环体时若遇到内循环,应将内循环体的全部循环结束后再执行下一次的外循环,直到外循环也全部结束为止[4]。
结合课件上的流程图,教师引导学生分析循环嵌套的执行过程。
图1 循环嵌套的执行流程
【实例2】输出右图的平面图形。
教师提问:
共输出几行*?每一行输出几个*?
教师引导学生分析规律,共4行*,所以外循环执行4次,循环体的次数用i表示,三要素分别为i=1;i<=4;i++;外循环的循环体是输出*,通过观察,可得出每一行输出*个数不同,第i行输出i个*,如果内循环由j来控制,j的变化应为1到i;另外注意,每一行符号输完后要换行[5]。
通过实例1的学习,学生在理解循环嵌套后都能完成实例2的这个平面图形的输出,教师及时给于鼓励和反馈,可以大大提高学生的自信心。
【实例3】输出右图的平面图形。
●教师提问:行和列的关系是什么?
●学生回答,教师分析并板书行和列的规律,课件呈现程序代码。
【拓展实例】输出右图的平面图形。教师提问:
●每行输出的空格数有什么特点?
●外循环的循环体是什么?
●如何输出空格?
结合课件,教师引导学生一起分析平面图形的规律,得出答案:
●学生讨论分析每行空格数的特点。
●外循环的循环体应包括两部分:即每一行先输出空格,再输出*并换行。
●观察平面图形,分析得出第i行要先输出4-i个空格,再输出2*i-1个*。
C程序代码如下:
教师提问:
●外循环的循环体包括了两个for语句,这两个for语句的关系是什么?
通过以上案例的学习,学生进一步了理解for循环嵌套的语句格式和执行过程,并通过几个案例的逐层深入,可以做到举一反三,从而利用循环嵌套解决实际问题。
通过上面几个实例的学习,学生基本上掌握了循环的嵌套结构了,对循环嵌套的概念和执行过程也有了深入的理解。为了更好地掌握和应用for循环嵌套,利用循环嵌套解决实际问题,教师进一步讲解几个应用实例。
【应用实例1】利用循环嵌套结构编程,输出九九乘法表。
图2 九九乘法表
教师活动:
●提出问题1:参考课件上的九九乘法表,思考如何输出?
●提出问题2:每行输出几个式子?行与列有什么关系?
教师引导学生分析,这个例子与实例2比较相似,一共要打印9行,所有外循环变量i的值应为1到9,第i行打印出i个式子,所以内循环变量j的取值应为1到i[6]。另外,第i行第j列要输出的式子为:printf("%d*%d=%2d",j,i,i*j);有了上面几个实例的基础,学生可以写出如下程序:
强调:
●讲解行和列的规律,强调j<=i
●式子的表示和输出
●%2d的用意
【应用实例2】求1!+2!+….+10!
结合课件,教师引导学生分析:
(1)外循环:累加求和 循环变量i1~10
根据以上分析,学生对于该实例的求解过程很清晰了。学生可以在纸上编写程序。教师适时地给以引导,最后通过课件程序该程序的完整代码,并做总结。
完整C程序代码为:
【思考】输出100以内所有的素数。
提示:循环嵌套程序设计还常出现在使用枚举法解决实际问题的程序中,例如,该题和“寻找水仙花数”等问题。
实例结束后,给学生留下思考题,学生可以在课下,利用所学知识编程实现。
本节课我们通过平面图形的输出的一个案例,引出循环嵌套,讲解了循环嵌套的概念,分析了其结构和执行过程;并通过多个案例的讲解,进一步巩固了循环嵌套的相关知识,主要是for循环嵌套的应用;最后结合总结的规律,在屏幕上输出九九乘法表等,并给学生留下思考题目以供学生课下学习,巩固新知。
针对学生的实际情况和教学需要,结合多年的教学经验,在C语言循环嵌套教学实践摸索出一套适合学生的案例教学法,教学实践表明,案例教学改变了传统以理论知识为中心的教学模式,将复杂抽象的知识贯穿于一些典型案例中,并通过问题引导层层深入地分析、讲解案例,调动了学生学习的积极主动性,学生的逻辑思维能力和编程能力也得到了明显提高,取得了良好的教学效果。