高职C语言课程中循环结构的教学设计与实践
1C语言课程特点及学情分析
当前的高职生源主要是统招录取的普通高中毕业生,少量来源于中专、技校或职业中学对口升学(3+证书)的学生。近年来,由于社会对高职教育缺乏足够的了解,加上一些用人单位片面地追求高学历,使得高职院校的学生与本科院校的学生相比处于劣势,不少高职学生甚至觉得自己是“非正规”的大学生[1]。高职学生的这种自卑失落情绪导致了他们在就学期间学习目标不明确、学习兴趣不高,面对学习中遇到的困难缺乏信心和毅力。
C语言是一种面向过程的通用程序设计语言,它具有表达简明、使用灵活、丰富的数据结构、良好的程序可移植性和高效率的目标代码等众多优点[2],因而已成为高职软件类学生的必修课程。从高职软件类的课程体系来看,C语言是面向对象程序设计语言、数据结构、动态网页编程等后续课程的前导课,因而该课程一般在第一学年中开设。在还没有进入专业的情况下,C语言的教学案例往往取材于数学问题求解或数学味道很浓的工程问题求解,这不仅导致课程枯燥难学,(本文转载自 www.yzbxz.com 一枝笔写作网)一定程度上也使学生出现了厌学的情绪。
基于多年的高职C语言课程的教学经验积累和反思,作者对该课程的教学内容、教法及教学过程作了重构和优化,初步取得了一定成效。下面就for循环结构的教学方法加以介绍和讨论。
2循环结构的教学设计与实践
2.1教学内容的选取
C语言提供了三种循环结构,for语句(步长型循环),while语句(当型循环)和do-while(直到型),它们在一定程度上可相互转换。对于for语句,我们按照从易到难的认知规律,选取了1+2+…+n的求和问题、规则图形的打印输出以及九九乘法表的打印输出等为教学案例。为了增强教学内容的趣味性、提高学习自信心和运用知识的能力,在主要的教学案例引入了多种编程解决方案,并进一步,指引和鼓励学生深化现有的解决方案。
2.2教学方法设计
在整个课堂教学过程中,教师首先串讲分析教学案例的编程原理、要点和难点,并展示初步的解决方案;然后组织学生进行分组思考、讨论、深化现有的解决方案;在上机调试程序结束后,各个小组进行简要发言,介绍实验过程中遇到的问题及相关解决办法等;最后,教师小结、点评各个小组的解决方案,归纳分析一些共性的问题,并启发点题整个教学案例[3]。
2.3教学过程的实施
2.3.11+2+…+n的求和问题
①教师结合电子课件串讲分析:C语言一个编译工具,用户利用它提供的语言描述规则可以把某一问题的手工求解想法传递至计算机中,由机器来完成问题的求解。在该教学案例中,我们的手工求解是这样的一个过程:
②组织学生思考、讨论并提问:在已学的知识基础上,要用C语言描述上述求解过程,将会出现什么问题?
教师指出:出现的问题有两点,需要定义n-1个形如sum1,sum2,…sumn的变量;需要编写n-1次两数相加的计算过程。
教师启发:根据顺序程序的运行特点,可把上述的求解过程改写为:sum=1+2,sum=sum+3,…,sum=sum+n,故此时只需定义一个变量sum即可;而在n-1次两数相加的计算过程中,每次都呈现出两个值不同的数在作加法运算的规律,为了有效地处理这种具有共性的重复过程,C语言引入了循环结构。
③导入循环结构知识点:着重围绕循环结构的使用场合(存在共性的重复过程)和循环次数的控制(循环条件)展开讲解。
进一步,教师结合for语句一般格式{for(表达式1;表达式2;表达式3)}和图1所示的流程图详尽剖析循环结构的运行过程。
[求解表达式1][表达式2][语句][求解表达式3][for语句的
下一语句]
图1语句的流程图
④承上启下,引领学生用for语句编写式子1+2+…+n的求和问题:
#include
main()
{
inti,n,sum=0;
printf("请输入式子中的:");
scanf("%d",&n);
for(i=1;i<=n;i++)
sum=sum+i;
printf("%d=%d",n,sum);
}
⑤学生上机调试程序。
2.3.2九九乘法表的打印输出问题
图2九九乘法表的打印输出示意图
①教师结合电子课件串讲分析:九九乘法表共有9行数据,且随着行数的增加,其输出的列数也在增加如图2所示。不难发现,图2具有“某两数相乘的打印输出”这一共性的重复过程,为此可用循环结构来编程实现该问题。由于该输出涉及行、列两个方向,所以须用双重循环来实现,即在外循环控制行(列)数,相应地,在内循环控制列(行)数;此时,可结合已学的多分支语句(分支中有分支)来串讲多循环语句(循环中有循环)。
②教师现场编写示范程序,并用多媒体课件展示多重循环的过程。这里的教学重点和难点是让学生深刻领会,外循环的循环体又是一个循环结构,而外循环的下一次循环必须等待内循环的循环结束后才能重新开始。
#include
main()
{
inti,j;
for(i=1;i<=9;i++)/*i变量控制输出的行数*/
{
for(j=1;j<=i;j++)/*j变量控制每行输出的列数*/
printf("%d×%d=%2d",i,j,i*j);
printf("\n");/*换行*/
}
}
③教师辅导学生调试示范程序。
④教师展示如图3(先从上至下,后从左至右)和图4(先从右至左,后从下至上)所示的九九乘法表的打印输出新方案(注意调度和激发学生的学习兴趣)。
图3先从上至下,后从左至右地输出九九乘法表
图4先从右至左,后从下至上地输出九九乘法表
⑤组织学生思考、讨论并提问:要实现图3和图4所示的打印输出方案,关键要解决什么问题?教师结合图3指出,当打印输出完第1列第9行数据时,其当前的输出光标就处于图3中的[A]标志处,按照“先从上至下,后从左至右”的输出规则,此时需要把输出光标移至[B]标志处。启发学生,由于C语言的printf函数只能紧随当前光标输出,为此,要实现图3所示的输出方案核心就是要解决光标的定位问题。(责任编辑:一枝笔写作事务所)