巧设问题情境 提升编程纠错能力

2021-07-11 01:43王声光
中小学信息技术教育 2021年6期

王声光

【摘 要】本文阐述了VB上机编程过程中的常见错误,主要包括编译错误、运行错误和逻辑错误。对于不同的错误类型,提出相应的解决办法,并结合具体程序调试教学,详细介绍添加断点、单步执行、跟踪变量的方法在调试程序时的操作步骤,希望对提高学生的纠错能力和程序设计水平有较大的帮助。

【关键词】VB程序;程序调试;错误处理

【中图分类号】G434 【文献标识码】A

【论文编号】1671-7384(2021)06-060-04

问题的提出

在《高中信息科技》(华师大版教材)第二册的教学中,学生不仅要进行基础算法理论的学习,还要进行上机编程实践,验证算法设计的正确性。学生在上机过程中,出现程序错误是难免的,无论怎样精心地设计算法,在编程时都很难做到一次就运行正确。在編程过程中,不怕程序报错,就怕程序结果不对但不报错。为了解决这个问题,在教学过程中,要注重培养学生的程序调试能力,使其掌握程序调试的相关方法。学生通过不断地编程实践,提高程序设计的自信心和解决实际问题的能力。

编程中常见的错误分类

1.编译错误

编译错误又分为两种,一种是VB集成开发环境自动检查出的语法错误。当用户在输入代码时,发现程序存在输入错误,如语句缺少运算符、语句没输入完整、遗漏关键字等,编译器会弹出一个窗口提示,告知出错原因,出错代码会变成红色字体显示。例如,在if语句中遗漏了then,在换行时就会弹出错误提示:缺少Then或GoTo。另一种是单击“启动”按钮后,系统在编译时检查出来的错误。程序编写完成后,编译器会先编译程序,检查程序中是否有错误,如单词拼写错误,函数缺少参数,if语句结束时遗漏了endif。for语句结束时遗漏了next语句等。

2.运行错误

运行错误是指在编译通过后,运行时发生的错误。这类错误一般是由代码在执行过程中遇到了不可执行的操作引起的,如溢出错误、类型不匹配、下标越界、试图打开一个不存在的文件等。当遇到运行错误时,系统也会弹出一个提示框,显示错误原因。同时,在弹出框中还会有四个按钮,分别是“继续”“结束”“调试”“帮助”。当用户单击提示框上的“调试”按钮时,系统会将出错代码以黄底黑字突出显示。

3.逻辑错误

逻辑错误是指编译和运行都正常,没有提示错误,但是运行没有结果或者结果和预期不一致,这说明程序中存在逻辑错误。逻辑错误不容易被发现,需要用户自己去排查,所以查找错误语句就比较困难,一般可能的原因有运算符使用不正确、语句中前后使用的变量不一致、语句前后的次序不对、循环语句的初值或终值不正确等。逻辑错误是这三类错误中最难排查的,需要借助断点调试来查找错误原因。

不同错误的应对方法

1.编译错误和运行错误的应对方法

当遇到编译错误时,弹出框上有“确定”和“帮助”两个按钮,单击“确定”按钮,出错的语句会自动选中,认真检查选中的语句就能找到错误原因。如输入语句,学生经常写成a=imputbox(“”),在执行时编译器会弹出提示:编译错误,子程序或函数未定义,单击“确定”按钮后,imputbox单词会被选中,仔细检查发现是单词拼写错误,修改后程序执行正确。

当遇到弹出框上有“调试”按钮时,说明是运行错误,此时要单击“调试”按钮,定位到错误语句所在的行,根据提示的错误原因,修改程序即可。如在累加或累乘的算法中,经常会出现“溢出”错误,主要原因是计算的结果超过了变量所能存放的最大值,只需要修改变量类型即可。对于运行错误,需要学生在平时遇到错误时多积累,遇到看不懂的错误时多提问,再遇到时就能轻松解决了。

2.逻辑错误的应对方法

对于逻辑错误,无法轻松地定位到错误语句所在的行,在排查时要借助断点调试,单步执行语句,跟踪变量值的变化,来检查程序中的错误。通过添加断点,可以中断程序的运行,具体使用断点进行调试的方法如下。

第一步,插入断点。在需要设置断点的语句左侧灰色区域单击鼠标左键或者按下键盘上的F9键,此时语句前面有一个红色圆圈,整条语句呈红底白字的突出显示状态,再次单击红色圆圈,就可以取消断点。一般断点是加在可能出错的语句上,加一个断点即可。

第二步,添加监视。通过监视窗口,可以显示当前程序执行过程中变量的值。单击菜单栏中的“调试”,添加监视,在弹出的对话框中输入变量名或者表达式,即可以打开监视窗口。如果程序执行过程中,监视窗口隐藏起来了,也可以通过视图菜单,监视窗口会显示隐藏的监视界面。

第三步,单步执行程序。单击运行菜单下的“启动”按钮,程序就会执行到断点语句停下来,然后选择调试菜单下的单步执行或者按键盘上的F8键,即可单步执行程序,单步执行后,执行点会移动到下一行。每执行一行语句,在监视窗口查看变量当前的值,检查程序中的错误。

案例分析

虽然在平时的上机练习中,当学生遇到程序错误时,解释过当前程序出错的原因及解决的办法,但是对于如何解决逻辑错误,却很少涉及。笔者在经典算法实例讲完之后,以平时学生上传的作业为例,挑选了一些典型的错误程序,带领学生一起查错误,调试程序,修改代码,整理和归纳程序调试的方法。

1.活动1—— 计算快递费

问题情境:放暑假时,小明利用顺丰快递将自己本学期的书籍寄回家,目前的收费标准是上海本地1kg以内收费12元,超过1kg的部分,每1Kg收费2元,输入书籍的重量,计算应付快递费。程序代码如表1所示,程序共有多处错误,请运行程序,找出错误语句并改正。

学生1:点击启动按钮之后,系统弹出编译错误,必选参数。同时inputBox单词被选中,检查发现,inputbox()是输入函数,在括号中缺少了双引号,加上双引号就可以了。继续执行程序,系统弹出第2个错误提示,else 没有if。程序中else语句会被选中,初步看else是和if语句匹配的,出错了说明没有匹配成功。仔细阅读程序,发现if语句单独写成了一行,此时的if语句是单分支结构,else不能与if进行匹配,而双分支结构的语句格式是then后面的语句要换行写,所以在then后面敲一下回车,后面的语句换行写就可以了。

在上面的程序中,其在运行时出现了两个编译错误,分别是“必选参数”“else没有if”。这些错误在执行程序时,都会有错误提示,根据提示定位错误行,修改语句即可。

2.活动2—— 求三位数中所有的水仙花数

具体程序如表2所示,程序中有多处错误,先运行程序,再修改错误。

学生2:尝试运行程序,发现没有输出结果,也没有任何的错误提示,初步检查代码,并没有发现什么错误,这时该如何修改呢?

这就是我们常说的逻辑错误,可以用断点调试的方法来排查。第一步是添加断点,在a=x/100这一行前面添加断点,然后添加监视,监视变量a,b,c,i的值,再单步执行语句。当i=100时,执行循环体,分别计算变量的值。if语句判断条件不满足,i的值加1,i=101,继续进入循环判断,再次执行循环体,在监视窗口很方便地看到当前a,b,c,i的值,如图1所示。程序运行到这里,阅读代码,思考程序中可能存在的问题。

学生3:通过观察变量a,b,c,i值的变化,发现了两个问题,一个是第二次执行循环体时,i=102,说明执行一次循环,i的值加了2次,for循环中省略了步长step,默认的步长为1,不需要在循环体中加上i=i+1这条语句,否则就会跳过了所有对奇数数据的判断,在枚举时就会遗漏可能的结果,修改的方法是把循环体中的i=i+1去掉。另一个问题是变量a应该是存放三位数百位上的值,当i=102时,a的值应该是1,而不是1.02,说明a=i/100此处应使用整除运算,应该加上取整函数int()或者改用整除运算符。

学生4:发现还有另外一个问题,变量a是求三位数百位上的值,用的是整除运算,变量b是求三位数十位上的值,应该也用整除运算,所以应该将b=i/10 mod 10修改为b=i\10 mod 10或者b=int(i/10) mod 10。

通过断点调试,跟踪变量,可以清楚地看到变量值的变化,这有助于我们排查错误。对于循环结构的程序,有时循环体执行一次,跟踪变量后就能发现问题,有时要多次反复执行循环体,才能检查出错误语句。当找到错误后,修改好程序,再执行时可以去掉断点,看是否能得到预期的结果。

通过课堂教学实践,总结上机编程过程中的常见问题。当遇到程序出错时,主要分两类:报错和不报错,如图2所示。当程序报错时,根据错误原因不同又分为编译错误和运行错误,此时要认真阅读错误提示,根据错误提示定位到错误语句所在的行,再去修改程序。如果程序没有报错,但是没有结果,说明此时是逻辑错误,需要通过断点调试的方法来排查错误语句,再修改程序。

结束语

本文介绍了VB上机编程过程中的常见错误类型,不同类型错误的调试方法,并以具体的教学实践为例,阐述了如何使用添加断点、单步执行、跟踪变量来调试程序,修改错误。掌握这些方法,对提高程序设计能力有较大的帮助。除此之外,在一开始的上机练习中,帮助学生做好语句书写的规范,让学生养成良好的编程习惯也同样重要。例如,在分支结构或循环结构的语句中,采用缩进的语句格式,如if和else中间的语句进行缩进,for语句的循环体也是以缩进的方式来书写,这样在阅读程序时能快速厘清程序的框架結构,更容易地找到程序中的错误。

程序调试不是一件容易的事,仅仅掌握这些方法还是不够的,还需要在上机实践过程中不断地积累,不断地总结经验,才能快速地提高VB程序设计水平,写出高质量的程序。