基于编程思维培养的C语言教学改革
2022-06-24邸未冬冯丽萍张静
邸未冬,冯丽萍,张静
基于编程思维培养的C语言教学改革
邸未冬,冯丽萍,张静
(忻州师范学院 计算机系,山西 忻州 034000)
C语言作为计算机专业编程语言的首门课程,对学生编程思维的培养尤为重要.目前C语言教学普遍存在的问题是学生程序设计能力弱,形不成编程思维.针对这一问题,从教学设计、教学手段、考核方式等方面,探讨了面向编程思维能力培养的C语言教学改革模式.改革后的实践表明,学生在期末考试、计算机等级考试等方面的成绩都有所提升,程序设计能力明显加强.
C语言;编程思维;算法设计;教学研究
1 编程思维的培养目标
在以往的教学中,忽视了程序的本质是人思维的表达方式这一理念,导致学生只注重了语法的细节[1],结果就是学知识容易用知识难,形不成编程思维,编程毫无切入点,自己写不了程序,久而久之失去了对编程的兴趣.结合C语言程序设计课程的特点和教学要求,教学中从3个方面培养学生的编程思维.
1.1 编程基础
用计算机解决问题的最后手段是通过编程实现,深刻理解C语言程序设计的相关概念及语法语义,能用C语言实现算法.
1.2 模块化思维
主要是分析问题的能力,将程序的框架结构分解成编程可实现的具体功能点,即函数思维.
1.3 算法设计能力的培养
算法是编程实现的前提,把算法思维融入到编程中,能够理解算法并构建算法.
2 基于编程思维培养的教学设计
编程思维的重点是问题的解决过程,程序设计的重点在解题的思路上.在基于编程思维培养的C语言课程教学中,以程序设计为主线,把算法思维与语法紧密结合起来[2].基于培养目标,教学过程的实施环节见表1.
表1 基于编程思维培养的教学实施环节
2.1 采用启发式案例引导教学
教师在设计每一章节内容的教学时,应避免直接枯燥地讲解概念规则,孤立地讲授基本语法,这样学生打不好编程基础.通过创设情景案例,在案例中引出语法规则,把枯燥无味的语法规则变成生动活泼的编程应用.如最开始讲基础知识时,先创设情景案例,求圆的面积.然后设置一些问题:如何向计算机输入半径,如何计算出面积并输出,是否需要一些东西把信息存储在电脑中等.利用设置的问题引出讲解的知识点,如变量、常量及内存中的存储方式、变量的数据类型、输入输出等,最后通过完整的程序来展示给学生.再如讲到数组概念时,抛出求最值的问题:给定同一类型的10个数,求出最大和最小的数并输出.
先让学生思考,很显然用之前的知识定义10个变量来解决这个问题是很困难的,此时引出数组的相关概念进行讲解,然后引导学生进行案例设计,这样就把编程思维的训练与案例结合起来.通过学习,使学生打好编程基础,具有简单的编程能力.在创设情景案例时,注意由简单到复杂,循序渐进地学习编写程序.
2.2 教学设计中融入算法思维的训练
教师在讲授过程中,要有意识地训练学生算法设计的能力.算法思维的形成,是个潜移默化的过程[3],需要从问题的不同角度多思考,多练习.教师可根据不同章节内容,采用一些不同的策略以培养学生的算法思维.
2.2.1 强化算法描述过程 利用计算机程序解决问题,一般通过问题分析->算法描述->编写代码几个步骤,其中算法描述是代码实现的关键所在.在讲解案例时,充分利用伪代码、流程图等算法工具进行算法描述,然后现场编程完成代码编写,以此贯穿于整个教学过程.如在讲解选择结构时,给定案例:输入3个数,找出其中的最大值并输出.教学过程描述见表2.显然通过算法描述,编写代码的思路更加清晰.
表2 结合算法描述的编程教学示例
2.2.2 以反向思维促进算法的理解 C语言是结构化语言,学生在学习了顺序结构、选择结构、循环结构这3种基本的算法结构以后,就可以进行一定的程序设计.但在初期教学过程中发现算法设计这个过程仍然是难以逾越的,特别是一些抽象的算法.反向思维是先给定程序,通过在对程序的分析过程中培养思维的一种方法,可以作为培养算法思维的辅助手段.在具体实施中,针对每种数据结构,如基本变量、数组、指针、结构体、链表、文件等,教师每次要精心准备3~5个典型案例题目,先给出程序,让学生分析题目中程序的功能,进行逆向思维,最后根据程序画出流程图.让学生从读程序中理解算法,通过这种反向思维训练有助于形成初期的编程思维.
2.2.3 灵活应用算法 同一个问题,用不同的算法解决[4-5].例如:在讲到函数递归问题时,因为递归有个重复执行的过程,教师可提问学生解决重复执行的操作还可以怎么实现,学生会想到循环算法,这时让学生思考,求1+2+3+…+50之和,之前使用循环实现,用递归能否实现,教师可以启发学生将用循环语句执行的操作变为函数重复调用自己的操作,用简易代码描述:
用for语句描述
int i, sum=0;
for(i=1;i<=50;i++)
sum=sum+i; //反复执行
用递归描述
int sum(n)
{ if(n==1) return n;
else return sum(n-1)+n;//反复执行
通过这样灵活应用算法,对编程思维的养成会有一定的促进作用.
2.3 模块化思维(函数思维)的训练
模块化思维的核心就是把一个复杂的问题,分解成多个子问题模块来处理,在C语言中主要就是函数思维,也就是函数即功能.一个较大的程序都写在main()函数中,不仅不易于程序的编写,而且会导致编程思维混乱,所以模块化的程序设计思维是非常重要的.首先,要进行自定义函数能力的训练,如给出一个功能需求,要求学生编写一个函数来实现;其次,要掌握库函数及其调用方法;最后,按照课程设计的要求,让学生根据题目需求,自行设计功能模块,然后编制函数完成程序的整体设计.通过模块化设计的训练,既可培养学生的逻辑思维,同时对编程思维的提升也有一定的作用.
2.4 重视实践环节
对于编程思维培养的目的,就是能自己写代码解决问题,所以上机实践是非常重要且不可缺少的环节.上机实践不能只是模仿练习,自己编写程序、调试代码对培养编程思维有很大的作用.特别在调试程序时引导学生单步执行程序,理解每条C语句对应的汇编并观察相应的内存和寄存器变化.这样学生对写程序会有一个感性的认知,而这种认知反过来会激发学生的编程思维.在教学中积累一定的知识后,精选题目让学生上机自主实验.实践环节具体实施过程见表3.
表3 实践环节实施过程
3 基于编程思维培养的教学手段改革
3.1 结合思政培养科学素养
C语言作为学生最初接触的编程语言,在学习过程中会有一定的障碍,有些学生会因此产生厌学的情绪,学习敷衍了事.教师在备课时融入思政元素,培养学生科学素养,激发学习热情.例如:讲C语言语法规则时,强调做事要讲规则、讲原则;通过介绍C语言程序设计在嵌入式系统、人工智能等科技领域的应用,结合国家对技术创新等方面的要求,激发学生的学习热情;讲算法设计时要有大局观,培养框架思维能力.通过融入思政元素的教学手段,增强学生克服困难、学好知识的信心.
3.2 借助移动端编译器提升学习效率
随着软件技术的发展,移动端如手机都可以安装简易的C语言编译器[6],学生在日常学习中可以随时在手机上编写C程序代码并调试,特别是对语法规则中难以理解的小问题.如自加运算符++和自减运算符--的理解,在学习指针时对*p++、*(++p)、*(p++)、++(*p)等表达式的理解,学生刚开始学习时在理解上是有困难的,可即时利用手机编写代码进行测试,通过分析程序结果来帮助学生理解这些问题.利用手机编译器的方便性,可以提高学生编程的学习频率,对学生程序设计能力及思维能力的提升大有帮助.
3.3 利用好网络教学平台实现线上线下教学相结合
编程思维能力的提高要求有扎实的知识基础,对C语言教学来说,教师在课堂讲授的知识学生难以全部掌握,同时因学生个体差异,对知识点掌握效果参差不齐.目前,线上+线下相结合的教学方式成为教学的主流方式[7],借助于网上教学平台,为学生提供有效的课程学习资源,学生可以在课下进行查缺补漏,进一步强化学习过程,提高教学的效果.以超星学习通网络教学平台为例,教师可以上传讲课视频、课件、案例等资源供学生使用,并可布置、批阅作业、讨论答疑,方便学生交流学习.在每章节内容讲解完以后,教师可以在平台上出卷子进行单元测试,以了解学生对知识的掌握情况,这对教学效果的保障是一个有效的手段.
3.4 以小组为单位组织程序设计竞赛
编程思维的形成不可能在短期内实现,需要经过长期的实践.程序设计竞赛从大二直到大三每学期末都要举行一次,在学生具有一定编程能力的基础上,以小组为单位实施编程竞赛.教师要精心设计题目,创建算法模型库,学生从模型库中自行选择题目,自主完成分析、设计、编程、测试的过程.竞赛的打分不完全取决于结果是否正确,而要包含对题目的分析、设计过程的测评.通过竞赛,学生对自己的编程水平会有一定的认可度[8],不仅训练了编程思维,也提高了对编程的学习兴趣.通过近3年的学生程序设计竞赛实施来看,学生参与人数越来越多,竞赛成绩逐步提高.
4 明确过程化考核目标
考核是促进学生学习的动力之一[9].以往的考核以期末笔试为主,考试内容重语法,不利于学生对实践的重视,也不利于编程思维的培养.考核方案要综合评价基础知识的掌握和编程实践的能力,应以多种形式的考核方式促使学生对编程思维能力培养的重视度.考核方案为:期末笔试(40%)+上机实践(40%)+程序竞赛(5%)+平时成绩(15%).
其中,期末笔试是对学生基础知识的考核;上机实践部分是对学生的编程能力的考核,机试题目为功能较小的综合设计,根据学生完成任务的比例打分;程序竞赛以小组综合评分,是对编程思维能力的考核;平时成绩包括线上线下作业完成情况和课堂表现,是对学生学习过程评价的依据.
综上所述,C语言课程作为大学新生的编程入门语言,既要掌握语法结构,打好基础,又要掌握程序设计的思维方法.在基于编程思维能力培养的目标下,对C语言的教学模式实施了一定的改革.通过改革前后多项考核数据对比发现,期末考试成绩良好以上占比由以往的40%左右提高到了65%以上;计算机二级C语言等级考试报名人数逐年增加,考试通过率增加近20个百分点;参加大学生程序竞赛的人数及获奖次数比以往都有提高.实践表明,采用改革后的教学模式,学生的编程思维及程序设计能力普遍有所提升.
[1] 尹波,孟爱国,朱前飞,等.面向编程思维能力培养的C语言教学改革研究[J].计算机时代,2016(11):67-69,72.
[2] 谭浩强.C程序设计[M].5版.北京:清华大学出版社,2017.
[3] 郑冰,宁鹏飞.基于JiTT模式的C语言教学中计算思维的培养[J].计算机教育,2018(10):101-104.
[4] 王磊,叶军,韩宇珍.以计算思维为导向的C语言教学方法的探索与实践[J].计算机教育,2019(7):168-172.
[5] 苑丽红.在C语言教学中启发和训练学生的编程思维[J].福建电脑,2006(12):207-208.
[6] 唐彩红.基于计算思维的计算机程序设计课程教学改革研究:以C语言为例[J].教育现代化,2019,6(29):100-101.
[7] 柳原.基于网络教学平台的大学生探究式新型学习方法的探索与实践:以《C语言程序设计》课程为例[J].电脑知识与技术,2020,16(6):121-122.
[8] 邸未冬,贺国平.基于目标导向的Java程序设计课程的教学研究[J].高师理科学刊,2016,36(12):93-96.
[9] 郭群.基于技术技能型人才培养的《C语言程序设计》课程教学改革与探索[J].办公自动化(综合版),2014(10):60-62.
Teaching reform of C language course based on the cultivation of programming thinking
DI Weidong,FENG Liping,ZHANG Jing
(Department of Computer,Xinzhou Teachers University,Xinzhou 034000,China)
As the first course of programming language for computer majors,C language is particularly important for the cultivation of students′ programming thinking.At present,the common problem in C language teaching is that students have weak programming ability and cannot form programming thinking.Aiming at this problem,C language teaching mode for the cultivation of programming thinking ability is discussed from the aspects of teaching design, teaching means and examination methods.The reform practice shows that students′ scores in the final examination and computer grade examination have been improved,and programming ability has been significantly strengthened.
C language;programming thinking;algorithm design;teaching research
1007-9831(2022)05-0080-04
TP312∶G642.0
A
10.3969/j.issn.1007-9831.2022.05.015
2021-11-30
忻州师范学院教学改革创新研究项目(JGYB202020)
邸未冬(1972-),男,山西原平人,讲师,硕士,从事软件工程和图像处理研究.E-mail:diwdong@126.com