高职C语言循环结构单元的教学设计
2016-11-12沈涵飞
沈涵飞,刘 正
(苏州工业园区服务外包职业学院 信息工程学院,江苏 苏州 215123)
高职C语言循环结构单元的教学设计
沈涵飞,刘 正
(苏州工业园区服务外包职业学院 信息工程学院,江苏 苏州 215123)
循环结构是“C语言程序设计”课程的重点和难点。基于多年教学实践,该单元的教学设计采用了任务驱动的方式来展现不同循环结构的应用场景,从简单任务开始,围绕示例,阶梯式地引入各种循环语句,并将难点分散到不同的教学单元。教学实践表明这种方式取得了较好的教学效果。
循环结构;阶梯式教学;教学设计;C语言
“C语言程序设计”是信息工程相关专业的重要基础课,通常安排在大一讲授。课程开设的主要目的是使学生理解计算思维,建立算法意识,借助C程序的知识载体,能编写结构化程序来解决问题。C语言是结构化程序设计的代表语言,在顺序结构、分支结构和循环结构这3种基本结构中,循环结构是最复杂的,而且和数组、函数、结构体等内容关系非常密切。
基于多年的高职C语言课程的教学实践,作者对循环结构单元的教学内容和过程进行了重构和优化,在实践中取得了很好的成效。
1 传统的教学方式存在的问题
当前的C语言教材侧重于知识传授的系统性和逻辑性,教师通常按部就班地进行讲解,先花大量的时间系统地讲授各循环语句的语法规则、执行过程,然后再举出相应的示例。
这种教学方法本意是期望学生能够掌握基础理论后,能够举一反三,灵活应用所学知识解决问题。但如果把这种方法用于抽象思维较弱的高职学生,往往适得其反。理论学习能力本就不强的高职学生由于消化困难,很容易丧失兴趣,产生畏难情绪,很多同学干脆就放弃了课程的学习。
2 阶梯式的循环结构教学设计
根据高职学生的认知特点,在循环结构的教学设计上,直接采用任务驱动的方式来展现循环结构的重要使用场景,强调for循环适合表示序列,在学习初期学生采用“依样画葫芦”的方式就能完成程序编写,完全不需要理解for循环的执行流程。接着从有限序列到无穷序列,很自然的引入break语句来改变循环的执行流程。然后强调 for循环和 while循环的等价性,在没有序列或者序列并不明显的情况下使用while循环和流程图表示来解决其他循环结构的问题。
对于循环结构中的非重点内容如loop语句和continue语句,由于这些内容实际应用相对较少,作教学中做了弱化处理,避免给学生太多选择而使学生陷入迷茫。把循环结构中的嵌套循环放在数组单元进行介绍,给学生的学习提供了适当的缓冲,避免难点过于集中而使学生产生畏难情绪。
同时,在整个课程的教学中,课程组使用“C/C++程序设计自动评测系统”的练习平台,学生编写的程序可以由练习平台直接给出评判结果。在循环结构的教学中,更是布置了大量基础练习题来帮助学生熟练掌握循环的应用。下面是循环结构教学设计和实施的具体步骤。
2.1 介绍循环的最简单应用—简单重复
循环最简单的应用是控制语句块重复执行的次数,循环变量在循环体内部并不使用。采用的例题是输出10行的“good good study,day day up”。建议学生编写的循环代码为 for(i=1;i≤=10;i=i+1),鼓励学生改变各个参数后运行程序,通过观察结果来帮助理解程序。
2.2 使用for循环来表示序列
循环尤其是for循环最典型的应用是表示序列,例如语句 for(i=1;i≤=10;i=i+1)表示的序列是 {1,2,3,…,10},语句 for(c='a';c≤='z';c=c+1)表示字符序列 {a,b,… ,z}。通过分析常用的循环表达方式,归纳了常用序列表示,如表1所示。
表1 常用序列和 for循环的对应关系
在这个环节,采用的案例是计算 1+2+3+…+100 的值。这个例子可以写成最原始也是最容易理解的顺序结构;通过归纳可改写成sum=sum+i,其中i依次遍历序列{1,2,3,…,100},这个步骤学生也容易理解;在最后一个环节,学生可以根据常用序列的for循环表示写出对应的for语句,从而完成程序的编写。这几个步骤如图1所示。
在学生学习循环的初期,采用这种教学方式可以避免陷入“必须先理解for循环的执行机制,再编写代码”的困境中,让学生相对容易地写出程序代码,增强学习C语言的信心。
for循环for(i=1;;i++)可以表达无穷序列,在这种情况下,程序会永远运行下去吗?此时引入改变循环正常执行流程的break语句就显得非常自然了。对于改变循环正常执行流程的另一个语句continue,在初期教学时作了弱化处理,因为break语句是必须的,而continue语句是可有可无的,完全可用 if-else 语句来代替。
2.3 将for循环改写成while和do-while循环(见图2)
在介绍while循环时,一开始并没有引入新的例子,还是使用同一个例子:计算 1+2+3+…+100 的值。向学生特别强调for循环和while循环在使用上是完全等价的,可以相互改写,特别设计了图2中的中间过渡环节来强调两者的语义上的等价性,并要求学生把for循环表达改写成while循环表达,然后再改写回for循环表达。这种教学方式有利于消除学生对于循环的陌生感,不会增加心理上的负担。
在学生掌握了for循环和while循环的代码相互改写后,再要求学生完成while循环和do-while循环的相互改写,从而向学生全面介绍了结构化程序设计中最常使用的3种基本循环结构。
2.4 介绍流程图、while循环及其适用场合
循环结构有for循环、while循环和do-while循环这3种基本表达方式。for循环适合表达序列,并不需要使用流程图来帮助理解,循环体至少要执行一次的情况采用do-while循环,其他情况建议采用while循环。
while循环和do-while循环用流程图来表达是非常直观的。在介绍流程图时,采用的例题是3n+1问题:对于任意大于1的自然数,若n为奇数,则将n变为3n+1,否则变为n的一半,经过若干次这样的变换,一定会使n变为1,例如3→10→5→16→8→4→2→1。程序要求的输入是n,要求程序输出变换的次数。
如图3所示,基本的当型流程图很适合表达3n+1问题,再把流程图转化成代码也很直观,易于理解。
图1 累加问题从顺序结构迁移到循环结构
图2 for循环转化为while循环的过程
图3 3n+1问题的流程图和对应的while循环代码
2.5 结合二维数组讲解双重循环
对于循环的嵌套,并没有放在循环结构这个教学单元中进行讲解,而是放在了数组单元。这主要基于两个考虑:(1)大多数高职学生在短期内接受大量概念和变化有困难,等学生经过一段时间熟练掌握循环结构最基本的用法后,再引入相对复杂的内容,学生的理解效果会更好。(2)双重循环和二维数组本身的关系就非常密切,双重循环是二维数组的典型应用场景。
2.6 循环在其他编程语言中的实现
由于C语言在工业界的广泛应用,其他主流编程语言如C++,Java和PHP在设计时就充分借鉴了C语言的特性,这些编程语言在控制结构上和C语言非常接近甚至完全一致。Java和PHP在C语言的基础上提供了增强型的for循环—foreach,这种结构能更加清晰地用来表达序列,介绍foreach能加强学生对于for循环表达序列的理解。
在学生较好掌握C语言循环结构的基础上,适时向学生介绍其他编程语言是如何编写循环语句的,有助于学生了解C语言在程序设计课程中的基础地位,增进学生对其他编程语言的亲切感,增强学生学好程序设计类课程的信心。
3 结语
循环结构是“C语言程序设计”课程的重点和难点。在该单元的教学设计中,采用了任务驱动的方式来展现不同循环结构的应用场景,从简单开始,围绕示例,阶梯式的引入各种循环语句,并通过相互改写 for循环和 while循环来帮助学生理解两者的联系和区别,并将难点分散到不同的教学单元,消除了学生的畏难情绪,让学生拾级而上,增强了学习的自信心。近两年的教学实践和学生程序设计竞赛的表现表明该方法的教学效果非常有效。
[1]吴文虎.计算机程序设计基础课程改革[J].中国大学教学,2004(2):14-15.
[2]吴文虎.我怎么讲好“程序设计基础”这门课[J].中国大学教学,2011(12):10-12.
[3]沈涵飞.比较教学法在 C语言和Java程序设计课程中的运用[J].软件导刊,2013(12):171-173.
[4]何钦铭,陆汉权,冯博琴.计算机基础教学的核心任务是计算思维能力的培养—《九校联盟(C9)计算机基础教学发展战略联合声明》解读[J].中国大学教学,2010(9):7-11.
Teaching design of C language loop structure unit in higher vocational education
Shen Hanfei,Liu Zheng
(Information Engineering College of Suzhou Industrial Park Institute of Services Outsourcing,Suzhou 215123,China)
Loop structure is the key and difficult point in the course of "C language program design".Based on many years of teaching practice,the teaching design of the unit uses task driven approach to show the different application scenarios of loop structures,and then this paper starts from a simple task,around the example,introduced a variety of ladder cycle statement,and difficulties will be distributed to different units.Teaching practice shows that this method has achieved good teaching effect.
loop structure;ladder teaching;instructional design;C language
江苏省现代教育技术研究课题;项目名称:基于智能终端的“数字化校园”与信息化学习环境建设;项目编号:2016-R-47449。
沈涵飞(1978—),男,江苏苏州,硕士,软件架构设计师,讲师;研究方向:信息化教学,移动互联网,云计算。