李凤强
摘要:C语言程序设计是一门实践性、工程性很强的课程,旨在培养学生编写程序解决实际问题的能力。在非计算机专业的C语言教学中,由于重理论,轻实践,同时缺乏调试技能和编码规范的培养,导致教学效果不佳,不能达到人才培养的目的。该文分析了产生这些问题的原因,同时指出了对策,将有利于全面培养学生的编程能力。
关键词:C语言;任务驱动教学;程序调试;编码规范;编程能力
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2018)09-0127-03
Abstract:The programming of C language is an application course with the focuses of practicality and engineering, which aims to develop students' programming skills to solve practical problems. Due to theory is valued and practice is despised in the C language teaching process for the students of non computer majors , at the same time, pay less attention on the teach of debugging skills and coding standards, all this caused that the teaching efficiency is not good enough to achieve the goal of talent training. This paper analyzes the reasons and presents the solutions for above problems, which will help develop students programming ability.
Key words: C language; task-driven; debug; coding standards; programming
1 引言
C语言程序设计是一门实践性、工程性很强的课程,旨在培养学生编写程序解决实际问题的能力,很多非计算机专业中也开设了这门课程。传统的C语言教学重理论轻实践,同时不能根据非计算机专业学生的特点因材施教,或者在培养学生的编程能力时只传授了编写程序的方法,但没有传授调试的方法和编码规范化的要求,导致学生的编程能力先天不足,无法达到较好的教学效果。
2 教学现状
2.1 照搬教材,不做二次开发
在C语言程序设计的教学中很多老师只是按照教材的内容把对应的知识传授给了学生,并没有对教材内容进行二次开发以适应学生的特点和教学过程。教材的编写体例是为了系统的传授知识,注重内容之间的逻辑关系和系统性,但是并不完全适合学生的认知规律。这样的教学,老师就变成了教材的复述器,无法提高学生的学习兴趣,自然达不到良好的教学效果。
2.2 调试技能培养缺失
程序是由人编写的,难免会出现各种问题。程序出现问题后,这就需要用到调试技能,调试程序的能力是编程能力中非常重要的一个方面。现实是C语言课程教学中,调试技能的培养很多时候都是缺失的。这其中一个很重要的原因就是我们很多老师都是学校毕业后就进入了大学从教,自身写程序比较少,大型的程序就更少了,对于调试的重要性体会不是很深,调试的技能也有所缺失,导致教学中弱化了对学生调试技能的培养。
2.3 编码规范化培养缺失
作为专业的程序开发人员不仅要能够根据问题编写程序,而且要能够编写符合编码规范的程序,程序要写的简洁,清楚,美观,逻辑清晰,层次分明。C语言程序设计课程中,教师对学生的要求偏重于能否实现功能,对于编码规范的要求几乎没有,导致学生编码规范素养的缺失。
3 教学改进措施
3.1 重视任务驱动教学
通过实践证明对于学生来说按照教材的体例按部就班地进行理论传授会有很多弊端:
1)学生没有兴趣。C语言中有很多的理论知识,如果就理论讲理论,学生会陷入学了很多东西但是不知道如何使用的困境,时间一长就失去了学习的兴趣,效果自然就打了折扣。
2)学生不知道所学知识有何用途。C语言教材开始部分有很多理论比如数据类型、操作符等,如果我们按部就班进行理论传授,就会造成学生学了好几周,也不知道如何写程序,心中会有很多迷惑和不解,影响教学效果。
任务驱动教学法是一种建立在建构主义学习理论基础上的教学法,它将以往以传授知识为主的传统教学理念,转变为以解决问题、完成任务为主的多维互动式的教学理念,将再现式教学转变为探究式学习,使学生处于积极的学习状态,每一位学生都能根据自己对当前问题的理解,运用共有的知识和自己特有的经验提出方案、解决问题。
在使用任务驱动教学法的时要注意两个问题:
1)所构造的任务和情景要和学生将来从事的工作尽量切合。C语言是一门高级编程语言,从理论上来说可以解决任何问题,所以我们在构造教学任务的时候可以有很多种选择。选择符合学生所学职业的工作任务,能够调动学生学习的积极性,起到事半功倍的效果;
2)任务的难度要适中。对于非计算机的学生来说,逻辑思维,程序思维都有待进一步培养,所以任务不能过于数学化,最好是逻辑思维很直观,但是手工操作很麻烦最好借助计算机来实现的的任务。
3.2 重视调试技能培养
C语言是一门实践性很强的课程,目的就是培养学生编写程序解决实际问题的能力,这个能力中不可缺少的就是调试技能。程序是由人编写的,由于各种原因编写的程序难免存在各种BUG,如果没有调试技能,当我们面对各种BUG时将费时费力甚至束手无策。掌握调试技能可以使我們快速地修改编译错误,高效的定位逻辑错误,提高开发的效率。
3.2.1 编译错误
编译错误是在编译程序时报的错误,大多数都是语法错误,编译器也会提供比较详细的说明告诉你错误是什么,这些错误是比较好改的。常见的编译错误有:缺少分号、括号不匹配、未定义的标识符、变量在使用前未初始化等等。编译错误只要看懂编译信息就可以快速地修改。这里面要注意一个问题,有时候编译器会报很多错误,但是其实只是一处有问题,然后导致后面都错了,这时候最关键的就是要找到这一处错误然后修改掉,重新编译之后由它引起的编译错误也就自然消失了。
3.2.2 逻辑错误
逻辑错误是指程序通过编译可以正常运行,但是运行结果不符合预期或者出现程序奔溃或停止运行等问题。解决逻辑错误一般有两种方法一种是源代码审核,一种是运行调试。
源代码审核就是通过阅读源代码发现其中存在的问题,这是非常重要的一步,在专业的软件公司开发流程中都有源代码审核的步骤和要求。在C语言学习开始,所写程序都是非常简单的,这时候主要培养学生反复阅读代码的习惯,就是通过反复的阅读代码发现自己程序的语法问题、逻辑问题。
运行调试中需要学生掌握最基本的调试方法。1)会设置断点;2)会在VC开发环境中启动调试模式;3)会单步跟踪4)会在VC开发环境的watch窗口中查看变量的值;5)会在VC开发环境的memory窗口中查看指定内存的值。6)会查看VC开发环境的Output窗口输出的信息。上面的这些基本方法掌握之后就可以进行最基本的调试,教学中要求的调试技能已经基本达到。
在实际工作中,软件的规模会增大很多,逻辑也会复杂很多,调试有时候就成了创造性的工作,因此也需要给学生传授一些调试技巧。
1)分析问题的现象和代码,大胆猜测问题产生的位置。比如程序报内存错误,需要重点关注有内存申请和使用的代码,然后根据产生这个问题的操作,大胆猜测是哪一处代码的问题。
2)运用一切能够运用的方法来进行调试。比如程序生成一个xml文件,生成的xml文件在某一个地方有问题,导致无法正常解析。这时候我们可以采用二分法来定位问题产生的位置,具体就是先完整生成一半内容,如果有问题,再生成这一半中的一半,如果没有问题,生成剩余部分的一半,通过这种折半查找的方法来锁定问题出现的位置,然后再用基本的调试方法跟踪为何会产生这样的问题,最后解决问题。二分查找不属于任何的调试方法,但是他可以帮助我们定位问题出现的位置,所以我们在调试的时候要放开自己的思维,不能死板,多动脑子,多思考,这样才能提高解决问题的能力。
培养调试能力的方法:
1)教师演示调试的方法;
2)学生通过调试自己的程序巩固调试的基本技能;
3)教师在上机辅导时要有意识的培养学生自己通过调试程序解决问题的能力;
4)设计一些具有典型问题的程序,让学生做调试练习,提高学生调试的技能。
3.3 重视编码规范化培养
3.3.1 重视编码规范化的理由
良好的编码风格是编程能力中非常重要的能力,良好的编码风格可以保证程序的正确性、稳定性、易读性。重视编码规范化培养基于以下两个方面的考虑:
1)对于计算机专业的学生来说即使没有在C语言的课程中介绍或要求编码规范,也会在后续的软件工程课程中学到编码规范的要求和思想,而对于非计算机专业的学生来说,后续是没有软件工程课程的,如果没有在C语言程序设计中介绍编码规范的要求,养成基本的编码规范的能力、学生们将无法培养这方面的能力。
2)编码规范化非常重要。首先规范的编码会显得更加专业。一个程序是否是专业人员编写,从编码是否规范上基本就可以判断出来。符合编码规范的程序会给人一种简洁、清晰,赏心悦目的感觉,不符合编码规范的程序会给人一种乱糟糟的感觉。其次规范的编码会降低程序出错的可能性。比如我们常用的==符号,一般程序员会写成if(i==1),如果误写成了if(i=1),程序就不是我们需要的逻辑了。专业的程序员会写成if(1==i),如果我们误写成了if(1=i),这时候编译的时候会报错,让我们可以提前发现错误,提高程序的正确性。再比如内存操作函数malloc()和free(),这两个函数是成对出现的,所以我们在书写的時候一定要成对的写,写完malloc()函数之后就直接写上free()函数,然后在它们中间写我们需要的程序,这样就可以保证所有申请的函数都得到了释放,不会造成内存泄露。如果不这样做,就有可能造成内存泄露,然后内存被消耗殆尽导致宕机事件。
3.3.2 培养编码规范的方法
1)老师在演示程序编写时有意识的贯穿编码规范化的要求。
2)在评判学生的作业时,除过对程序的功能性要求外,加入对编码规范化的要求。
3)通过比较符合编码规范的程序和不符合编码规范的程序,让学生直观的感受编码规范的重要性。
4)提供一些不符合编码规范的程序,让学生修改使其符合编码规范,通过这样的练习,培养学生的编码规范能力。
4 总结
C语言程序设计是一门实践性很强的课程,教师要根据非计算机专业学生的特点,通过任务驱动教学法使学生轻松掌握c语言程序设计的能力。通过提高学生的调试能力,可以使学生在开发程序的时候可以独立自主的解决程序中出现的问题,减少对老师的依赖,提高学习的成就感。通过编码规范化的培养,使学生认识编码规范的重要性和掌握编码规范的一些基本要求,使学生不仅能够开发程序,而且能够写出漂亮的质量高的程序,进一步提高开发的能力。
参考文献:
[1] 赵丽娜.高职非计算机专业”c程序设计”课程改革[J].中国市场,2017(18):283-284.
[2] 张鑫.高校非计算机专业《C语言程序设计》课程建设的创新研究[J].电子世界,2017(3):77-79
[3] 杨晓谙.高校非计算机专业C语言课程教学改革探讨[J].电脑知识与技术,2017,27(9):138-139.
[4] 夏芸.非计算机专业《C语言程序设计》循环结构教学用例探讨[J].电脑知识与技术,2017,35(12):163-165.
[5] 刘磊.基于应用型人才培养的“C语言程序”课程教学改革的探讨与实践[J].当代教研论丛,2017(17):25+27.
[6] 姚衡.计算机C语言编程过程中的常见问题[J].电子技术与软件工程,2018(1):246.
[7] 邹静. 浅谈大学C语言教学方法[J].现代职业教育,2017(1):126.
[8] 庞晓凤.浅析非计算机专业《C语言》课程教学改革[J].高教学刊,2017(7):118-119.