APP下载

教学中提高学生C语言编程能力的探析

2022-07-20邱京伟

关键词:C语言编程程序

邱京伟

(宁德师范学院 信息与机电工程学院,福建 宁德 352100)

C语言具有功能丰富、格式灵活、代码效率高等优点,广泛应用于教学研究、计算机等级考试、单片机编程、嵌入式编程等学习与生产领域.作为一门广泛采用的入门级别的编程语言,C语言还是学习算法、JAVA编程、嵌入式等课程的基础.学习C语言是为了培养学生结构化的编程思想与技能,为今后的专业学习打好基础[1].在C语言程序设计这门课程的教学中,学生的编程能力是学生后续相关课程学习的重要基础,不仅是检验学生学习成果的重要指标,而且对学生的实践能力和创新能力的发展有很大促进作用,对C 语言教学而言,其教学目的是培养和提高学生的编程能力,使学生能够根据C 语言的算法和命令编写各种实用程序,满足生产生活需要[2].所以培养学生的编程能力一直是C语言教学的重点之一.

编程能力是学生根据给定问题合理安排命令和步骤解决问题的一种逻辑推理能力,不仅考验学生的知识储备和编程素养,更是其动手实践能力的体现.“C 语言程序设计”是我校数学、机械电子工程等理工科专业的基础课程,教学活动主要在计算机基础实验室和软件工程实验室进行,作为许多课程的先导课,教学上除了重视基础知识和实践操作技能的应用,还充分考虑到将编程思想培养融入到培养专业人才方案当中,便于学生在学习其他课程的时候通过举一反三更好地理解新知识.为了在教学实践中更好地提高学生C 语言编程能力,笔者总结以往C 语言编程教学中出现的问题,提出相应的解决方法,完善教学实践.

1 C语言教学主要存在问题

C语言教学采用以班级为单位进行集体授课和实验的教学形式,在具体教学中,不论是教学大纲还是实验大纲,都强调对学生程序设计技能的培养.在实际教学中,主要存在的问题如下.

1.1 课堂教学中存在的问题

C语言教学的对象基本是大一新生,他们对计算机知识了解有限,大部分同学甚至未接触过任何编程语言.在C语言一节课的学习过程中,既有关键字、标识符等词汇需要记忆,又有编程格式和编程语法需要理解掌握,对学生的记忆理解能力都提出了一定的要求.虽然多媒体技术的使用是对以往教学方式的很大改善,但其“填鸭式”的教学实质并未改变[3],一旦教师在教学方法上有所不足,典型的就是讲课进度过快,容易和学生思维脱节,尤其是在讲解行数较多的程序时,往往有不少同学因跟不上老师的讲解速度而无所适从,在走访的学生中,有90%出现过这种问题.随着教学的深入和内容难度的加大,在基础知识上积累的问题给学生学习新知识带来非常大的困难,戳伤了学生学习的积极性,在调查的同学中,70%以上的同学表示基础知识的不牢固影响了课堂学习的效率,降低了学习兴趣.

1.2 实验教学中存在的问题

C语言虽然是一种较为简单的编程语言,但其语法较为灵活,导致部分同学在书写程序时格式不够严谨,主要表现在相关程序行该缩进的没有缩进,或是图方便将几句程序写在一行.在初学的1 个月内90%以上的学生有这种问题,虽然编译器没有报错,但容易导致程序理解困难,如果把这个习惯带入汇编、Python等的学习中,将导致程序出错,无法编译,也不利于学生的进一步学习和职业素养的培养.

另一方面,在C 语言教学中不但要教授语言的语法规则,更重要的是要教授C 语言程序设计的思想和算法,培养学生的编程思维能力[4].由于教学对象的是没有编程基础的大一新生,实验中题目的难度普遍不高,编写的程序往往规模较小,虽然比较适合入门学习,但这导致这些程序并没有太多算法上的需求,学生往往根据经验就足以应付当前的问题,使学生对算法设计重视不够,对培养学生探寻新算法解决问题的能力有一定消极影响.

1.3 学生实践锻炼的机会有限

C语言的学习往往要经历从简单到复杂,程序难度逐渐加大的过程,学生在学习的过程中只有通过大量的实践锻炼不断积累编程的技巧和经验,才能在最后拥有较高水平的编程能力.在现阶段教学中,缺乏实践机会一直是妨碍编程能力提高的一大问题.

一方面C语言的教学一般在大一开展,而大一新生刚跨入大学校门,绝大多数同学都正在努力适应大学生活的过程中,对学业的规划能力有限,面对海量的信息和知识无所适从,不知道哪些知识对他们的后续学习有帮助,导致学生学习的积极性没有充分调动起来,部分同学甚至把有限的时间浪费在一些无用的事情上.另一方面,不论是加强基础理论教学,还是加强实验实践,都需要充足的课时作基础,但是C语言程序设计的教学受教学规划限制,周课时根据不同专业只有3~4课时,而一学期要学习的课程高达10 个单元左右,这导致不论是课堂教学还是实验教学都面临着课时有限的问题,不但限制了教师为学生讲解经典范例的数量,也使学生忙于应付课内任务而缺乏自主探索磨炼编程技巧的时间,不但影响了编程能力的锻炼,也不利于学生相关能力的培养.

2 解决途径探讨

针对C语言教学实践中出现的问题,笔者解决问题的途径及效果如下.

2.1 加强基础知识教学,夯实基本功

课堂教学是传授知识和培养学生能力的主渠道[5].为此,需要在以下几个方面进行改进:1)根据学生的接受情况有针对性地调整教学进度尤其是程序讲解速度,例如在期初适当降低讲课速度,对顺序结构和选择结构程序这类基础性质的知识在课时上有所倾斜,避免学生思维跟不上老师讲解速度的情况发生.2)加强教学反馈,加强与学生互动交流,及时解决学生学习中遇到的疑难问题,避免学生的困惑随时间的推移越积越多,可供选择的方法除了课堂教学中留有一定时间为学生答疑解惑外,还可以引导学生利用QQ 或是微信向老师提出疑问,甚至在有关论坛里发帖寻求帮助,不但可以有效弥补时间的不足,还可以解决部分学生内向不敢在课堂提出疑问的问题,这些方法都收到同学欢迎.

2.2 加强实验教学,提高动手实践能力

编程类课程向来重视动手能力的培养,针对学生程序书写格式不规范的问题,任课教师一方面要在课堂上向学生说明,书本上程序的书写格式和排版是几代电脑工作者多年工作经验进行优化的成果,有助于今后的学习,也是专业精神的体现,另一方面,良好的编码风格应当从学生第一次动手编程开始强调[6].在课程初期就要严格要求学生按照书本格式编写,在批改作业或是检查实验报告的时候,注意纠正书写错误,教导学生该缩进的地方缩进,没有必要不要把几行程序写在同一行,帮助学生尽快培养起良好的编程风格,为以后的学习打好基础.此外,在练习中布置一定量的多重判断或是循环与选择相互嵌套的习题,通过演示标准书写格式和无缩进或无序书写格式的区别,让学生了解到标准书写格式不但易于阅读,更是避免程序出错的有效方法.例如,判断101~200 之间有多少个素数,如果用图1 的写法,则可以较容易分辨出每个for 语句和每个if 语句的作用域,而用图2 的写法则较难分辨,一旦程序行数较多,出错的概率将大大增加.

图1 程序写法1

图2 程序写法2

另一方面,在实验课中应加强对学生的实验指导尤其是算法方面的指导,每次实验前,针对实验题目进行一定的讲解,重在帮助学生理顺思路,引导学生形成正确的编程思想,同时,在讲解题目的时候注意融入算法思想的培养,尤其在选择结构、循环结构等复杂编程题目的讲授中,例如判断一个数能否被3、5、7 中的其中两个整除时,按常规方法,先判断能否被3 和5 整除,再判断能否被3 和7 整除……这样编程就比较复杂,一个简单的方法是,设定一个变量a,如果输入的数能被3整除,a自加1,能被5整除,a自加1……最后只要判断一下a是否不小于2(a是为可以被整除的个数,=>2 就表示至少可以被其中两个整除),就知道这个数是否符合条件,按这个算法编写出的程序也简单.再如鸡兔同笼问题,解题方法可以用穷举法先计算1 只鸡(或兔子)是否满足条件,若条件不满足就试试2 只鸡(或兔子)是否满足条件……依此直到试到满足条件或全部为只鸡(或兔子)仍不满足条件为止,也可以将脚数减去鸡兔总数的两倍,得到兔子数量的两倍,最后推出鸡的数目.

2.3 增加学生实践机会,促进编程能力提高

1)引导学生参加相关考试与竞赛.根据各专业学生情况,调查筛选合适的计算机等级考试和比赛推荐给学生,引导学生参与自身专业相关的项目,学生在准备考试或竞赛的过程中,不但可以得到教师额外的辅导和帮助,一般情况下还可以得到学校在场地和设备方面提供的帮助,这些有利因素对学生提升自身编程能力帮助很大.

2)借助网络资源.随着网络技术的普及,学生越来越多的接触到以网络尤其是移动网络为代表的新媒体,网络作为课堂教学的补充发挥了越来越大的作用.网络信息来源丰富,种类繁多,仅哔哩哔哩网站有关C 语言的视频资源就多达上百个,网络信息打破了时间和空间的限制,在不调整课时的情况下,为学生的个性化学习创造了有利条件,有利于编程技术的传播和编程经验的积累.

作为教师,在利用网络资源提高学生编程能力上并不是一个旁观者,对学生在网络上的活动,要尽到引导员和监督者的责任.学生的课余时间也是宝贵的,而网络上的信息却是无穷无尽的,这就要求教师对学生上网的行为进行及时的引导,对网上学习的内容进行筛选供学生参考,指导学生根据自身情况选择适合自己的学习方式,例如介绍可供学习的网站、论坛,查询资料的方法等等,使他们调动学生的积极性,使学生能够在论坛、QQ群和贴吧等场所进行学习交流讨论过程中有目的有选择地交流学习信息,解决具体问题,深化理解所学内容,将宝贵的精力时间集中在对提高编程技能有帮助的地方.在引导的同时,加强对于学生在网上活动的监督.作为课堂教学的补充,将课堂知识融入网络实践中,让学生带着问题上网,可以有效避免学生不自觉地浪费时间和精力.例如布置作业让学生上网查找某个程序的问题,补全某段程序,等等.此外还可以通过不定期通过交流心得体会、提问有关事项等方法督促学生的网上学习.

3 实施成效

实施有关方法后取得的成效如下.

1)课堂教学方面,在走访的几个班级中,86%左右的同学表示程序行数较少时思路能够跟上老师讲解速度,除了课堂提问,有50%的同学有在QQ、贴吧向教师提问过,线上和线下提出的问题解决率都在95%以上,大部分同学反映这些方法有效解决了当天教学中遇到的问题,避免了长期“消化不良”对后续学习造成不利影响.

2)实验教学方面,对于规范书写格式,根据有关班级实验报告统计,有目的地进行纠正能使学生程序格式规范在期末率达到80%以上,而没有纠正的班级格式规范率不到20%.对于实验指导与算法指导,在对几个班同学做的访谈中,几乎所有的学生都认为实验指导有利于更快地解决实验中的问题.批改的作业和实验报告也表明,在有力指导下,几乎所有的编程题目都用到2种或2种以上编程方法来解决,算法的灵活性之一,反映在对同一问题解决方法的多样性[7].这表明学生对算法的讲解有助于提高学生的编程水平,学生接受程度高.

3)增加实践机会方面,通过走访统计了解到,那些参加过等级考试或比赛的同学大部分都取得了优异的成绩,以我校参加多年的福建省大学生电子设计竞赛为例,每年都有多人获一等奖、二等奖,如表1所示.在后续的编程学习中往往表现出比其他同学更好的分析问题的能力,作业和实验报告也显示,在程序的书写格式规范性和解题思路等方面不但优于其他同学,与参赛前比也有很大进步.

表1 宁德师范学院2016—2018年参加福建省大学生电子设计竞赛获奖情况表

在利用网络资源方面,接受调查的学生中,90%以上的学生认为老师的引导和推荐大大加快了他们获取知识的速度,对他们的编程学习有帮助,85%的学生认为网络上的知识提升了他们的编程水平.对布置的网上任务完成情况的统计表明,大部分同学能够按时完成任务,能将常见的编程模式和技术融入到自己的编程风格中去,提高了自身的编程水平.

4 结论

在C 语言教学中提高学生编程能力,使学生养成良好的编程习惯,不仅有利于学生的全面发展,也利于教师提高教学质量和教学效率.为了更进一步利于高院人才培养目标的实现,符合以人为本的科学发展观.

提高学生C语言编程能力,除了离不开学校的在完善奖励机制和开放场地等有关方面提供支持外,作为教师.一方面,教师可以将部分讲座、习题分析等以视频或文本等形式上传学校教学网站或是有关论坛和视频网站,扩充教学内容,另一方面,将出现的新情况新问题加入到量规设计考虑范围内,例如书写格式的规范程度,算法的使用、网络知识的应用等,让学生的学习成果以成绩的形式直观地表现出来,既便于教师评估教学效果,调整教学计划和教学方法,也利于形成长效机制.

猜你喜欢

C语言编程程序
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
基于Visual Studio Code的C语言程序设计实践教学探索
纺织机上诞生的编程
51单片机C语言入门方法
试论我国未决羁押程序的立法完善
基于C语言的计算机软件编程
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序