论文部分内容阅读
摘 要: 阅读递归调用程序进行答题是大学计算机Visual Basic二级考试的重要题型,也是教学中的难点之一。使用表格法辅助阅读递归调用的程序,能够使学生有法可依,克服畏难情绪,有效防止出错。对于阅读复杂的递归调用程序,表格法更能显示其有效作用。
关键词: Visual Basic二级考试 表格法 递归调用程序
在Visual Basic程序设计中,允许用户自定义的子过程或函数过程在过程体的内部调用自己,这样的子过程或函数过程称为递归子过程或者递归函数。我们在设计程序时碰到的许多问题都具有递归的特性,用递归调用的方式描述它们会非常方便,能使程序设计化繁为简。因此,对递归程序调用的读写训练是Visual Basic程序设计教学中的重要内容,也是Visual Basic二级考试的重要题型。
在递归调用程序中,比较容易阅读的是求解数学上阶梯函数的递归调用程序。首先在程序中找到递推语句、递归结束条件及递归结束时的值,根据递推语句一步一步递推,直到条件成立获得递归结束时的值,使递推结束;然后一步一步回归,即可求得函数的值。递推的轨迹和回归的轨迹都比较清晰。若递推语句之后还有赋值语句或输入输出语句等,则递推的每一步要将许多参数压栈,回归的每一步又要根据先前压栈的相关参数确定若干变量的值,程序阅读起来就比较复杂。使学生能顺利正确地阅读这类程序是教学难点之一。教学实践表明,在阅读递归调用的程序时引入表格法,可以使学生感觉有方法可依,能够按部就班地阅读程序,克服畏难情绪,也能够有效防止出错。越是阅读复杂的递归调用程序,表格法越是能显示其有效作用。本文以一道Visual Basic二级考试题为例,介绍怎样采用表格法辅助阅读递归调用程序。
例题如下:运行下面的程序,单击命令按钮Command1,则在窗体上显示的第一行内容是?摇?摇?摇,第二行内容是?摇?摇?摇,最后一行内容是。
Private Sub Command1_Click()
Dim N%,M%,Lcm%
N=16
M=64
Lcm=Recursion(N,M)
Print "Lcm=";Lcm
End Sub
Private Function Recursion%(A%,B%)
Static k As Integer
k=k+1
If A Mod B=0 Then
?摇Recursion=A
Else
?摇Recursion=2*Recursion(A+A/k,B)
End If
Print 2*A,k
k=k-1
End Function
1.通读程序找出递推语句和递推结束语句
在本例中,程序由主过程Command1_Click()和函数过程Recursion%(A%,B%)构成。在主过程中从“Lcm=Recursion(N,M)”语句开始调用函数过程Recursion%(A%,B%)。函数过程Recursion%(A%,B%)以A、B为形式参数,采用传址调用。“Recursion=2*Recursion(A+A/k,B)”语句为递推语句。“A Mod B=0”是递推结束的条件,“Recursion=A”语句是递推结束语句。程序执行过程中,只要“A Mod B=0”条件不为True,就使递推语句“Recursion=2*Recursion(A+A/k,B)”执行一次,直到“A Mod B=0”条件为True,执行“Recursion=A”语句,递推才结束。
2.用表格演绎递推过程
表一是为阅读递归调用程序而设计的表格,其横向从左向右表示递推的步骤,每一列表示递推一步,即调用自身一次;纵向依序是程序执行语句中的表达式。表格的含义就是每递推一步,程序中各表达式依照其顺序应该获得什么值。在阅读程序时,程序的阅读者首先应该按照程序语句执行的顺序将各个表达式填入表格,然后开始逐步递推。在递推过程每一步中,要填写递推步骤序号,填写在本步递推中各个表达式获得的值。对于本例而言,因为“A Mod B=0”是递推结束条件,当在某一步中A与B的值相等时,表明该步骤是递推的最后一步了。从已填的表格可见,在递推结束之前,递推结束条件“A Mod B=0”在每一步均为False,因此执行“Recursion=2*Recursion(A+A/k,B)”语句。而“Recursion=2*Recursion(A+A/k,B)”语句并不能立即获得具体的值,要用“A+A/k,B”作为实际参数调用Recursion%(A%,B%)函数一次。当递推结束条件“A Mod B=0”的值为True,Recursion获得值64,即获得参数A的值,递推结束。在递推结束后,程序要向下执行语句“Print 2*A,k”和“k=k-1”,开始回归。因此,在递推的最后一步,程序阅读者还应该填写表达式“2*A,k”和“k”的值。
3.用表格演绎回归过程
在表一的下方再增加一行,从右向左表示回归的步骤,如表二所示。在本例中,回归的每一步做三件事:(1)根据得到的Recursion值计算“2*Recursion”的值并赋值给Recursion自身;(2)执行“Print 2*A,k”语句;(3)执行“k=k-1”语句。表格中后三栏分别记录“2*Recursion”、“2*A,k”、“k”三个表达式在回归的每一步中所获得的值。因此,在回归的每一步中,程序阅读者应该做的事情是分别填写表达式“2*Recursion”、“2*A,k”、“k”的值。
4.根据表格答题
程序阅读者根据所填的表二,就可以进行答题工作,即填写题目所留的空格。依据程序,在窗体上显示信息是由函数过程中的语句“Print 2*A,k”和主过程中的语句“Print “Lcm=”;Lcm”完成。“Print 2*A,k”语句在回归的每一步中执行一次,显示一行信息,即表达式“2*A,k”的值,共显示四行。主过程中的语句“Print “Lcm=”;Lcm”执行一次,在窗体上显示的信息为第五行。
因此,在窗体上显示的第一行内容是128?摇4,第二行内容是96?摇3,最后一行内容是Lcm=512。
5.结语
本文为参加Visual Basic二级考试的学生阅读递归调用程序提供了一种有效的方法,这种方法能够有效地阅读复杂的递归调用程序,防止出错。使用这种方法达到熟练以后,在阅读递归调用程序时不一定要画出表格,可以在程序的旁边根据递推与回归的步骤,按行按列依序写出各个表达式的值,但要做到心中有表。
参考文献:
[1]龚沛曾,杨志强,陆慰民.Visual Basic程序设计教程[M].北京:高等教育出版社,2007.
[2]江苏省高等学校计算机等级考试中心.二级考试试卷汇编Visual Basic语言分册[M].苏州:苏州大学出版社,2005.
关键词: Visual Basic二级考试 表格法 递归调用程序
在Visual Basic程序设计中,允许用户自定义的子过程或函数过程在过程体的内部调用自己,这样的子过程或函数过程称为递归子过程或者递归函数。我们在设计程序时碰到的许多问题都具有递归的特性,用递归调用的方式描述它们会非常方便,能使程序设计化繁为简。因此,对递归程序调用的读写训练是Visual Basic程序设计教学中的重要内容,也是Visual Basic二级考试的重要题型。
在递归调用程序中,比较容易阅读的是求解数学上阶梯函数的递归调用程序。首先在程序中找到递推语句、递归结束条件及递归结束时的值,根据递推语句一步一步递推,直到条件成立获得递归结束时的值,使递推结束;然后一步一步回归,即可求得函数的值。递推的轨迹和回归的轨迹都比较清晰。若递推语句之后还有赋值语句或输入输出语句等,则递推的每一步要将许多参数压栈,回归的每一步又要根据先前压栈的相关参数确定若干变量的值,程序阅读起来就比较复杂。使学生能顺利正确地阅读这类程序是教学难点之一。教学实践表明,在阅读递归调用的程序时引入表格法,可以使学生感觉有方法可依,能够按部就班地阅读程序,克服畏难情绪,也能够有效防止出错。越是阅读复杂的递归调用程序,表格法越是能显示其有效作用。本文以一道Visual Basic二级考试题为例,介绍怎样采用表格法辅助阅读递归调用程序。
例题如下:运行下面的程序,单击命令按钮Command1,则在窗体上显示的第一行内容是?摇?摇?摇,第二行内容是?摇?摇?摇,最后一行内容是。
Private Sub Command1_Click()
Dim N%,M%,Lcm%
N=16
M=64
Lcm=Recursion(N,M)
Print "Lcm=";Lcm
End Sub
Private Function Recursion%(A%,B%)
Static k As Integer
k=k+1
If A Mod B=0 Then
?摇Recursion=A
Else
?摇Recursion=2*Recursion(A+A/k,B)
End If
Print 2*A,k
k=k-1
End Function
1.通读程序找出递推语句和递推结束语句
在本例中,程序由主过程Command1_Click()和函数过程Recursion%(A%,B%)构成。在主过程中从“Lcm=Recursion(N,M)”语句开始调用函数过程Recursion%(A%,B%)。函数过程Recursion%(A%,B%)以A、B为形式参数,采用传址调用。“Recursion=2*Recursion(A+A/k,B)”语句为递推语句。“A Mod B=0”是递推结束的条件,“Recursion=A”语句是递推结束语句。程序执行过程中,只要“A Mod B=0”条件不为True,就使递推语句“Recursion=2*Recursion(A+A/k,B)”执行一次,直到“A Mod B=0”条件为True,执行“Recursion=A”语句,递推才结束。
2.用表格演绎递推过程
表一是为阅读递归调用程序而设计的表格,其横向从左向右表示递推的步骤,每一列表示递推一步,即调用自身一次;纵向依序是程序执行语句中的表达式。表格的含义就是每递推一步,程序中各表达式依照其顺序应该获得什么值。在阅读程序时,程序的阅读者首先应该按照程序语句执行的顺序将各个表达式填入表格,然后开始逐步递推。在递推过程每一步中,要填写递推步骤序号,填写在本步递推中各个表达式获得的值。对于本例而言,因为“A Mod B=0”是递推结束条件,当在某一步中A与B的值相等时,表明该步骤是递推的最后一步了。从已填的表格可见,在递推结束之前,递推结束条件“A Mod B=0”在每一步均为False,因此执行“Recursion=2*Recursion(A+A/k,B)”语句。而“Recursion=2*Recursion(A+A/k,B)”语句并不能立即获得具体的值,要用“A+A/k,B”作为实际参数调用Recursion%(A%,B%)函数一次。当递推结束条件“A Mod B=0”的值为True,Recursion获得值64,即获得参数A的值,递推结束。在递推结束后,程序要向下执行语句“Print 2*A,k”和“k=k-1”,开始回归。因此,在递推的最后一步,程序阅读者还应该填写表达式“2*A,k”和“k”的值。
3.用表格演绎回归过程
在表一的下方再增加一行,从右向左表示回归的步骤,如表二所示。在本例中,回归的每一步做三件事:(1)根据得到的Recursion值计算“2*Recursion”的值并赋值给Recursion自身;(2)执行“Print 2*A,k”语句;(3)执行“k=k-1”语句。表格中后三栏分别记录“2*Recursion”、“2*A,k”、“k”三个表达式在回归的每一步中所获得的值。因此,在回归的每一步中,程序阅读者应该做的事情是分别填写表达式“2*Recursion”、“2*A,k”、“k”的值。
4.根据表格答题
程序阅读者根据所填的表二,就可以进行答题工作,即填写题目所留的空格。依据程序,在窗体上显示信息是由函数过程中的语句“Print 2*A,k”和主过程中的语句“Print “Lcm=”;Lcm”完成。“Print 2*A,k”语句在回归的每一步中执行一次,显示一行信息,即表达式“2*A,k”的值,共显示四行。主过程中的语句“Print “Lcm=”;Lcm”执行一次,在窗体上显示的信息为第五行。
因此,在窗体上显示的第一行内容是128?摇4,第二行内容是96?摇3,最后一行内容是Lcm=512。
5.结语
本文为参加Visual Basic二级考试的学生阅读递归调用程序提供了一种有效的方法,这种方法能够有效地阅读复杂的递归调用程序,防止出错。使用这种方法达到熟练以后,在阅读递归调用程序时不一定要画出表格,可以在程序的旁边根据递推与回归的步骤,按行按列依序写出各个表达式的值,但要做到心中有表。
参考文献:
[1]龚沛曾,杨志强,陆慰民.Visual Basic程序设计教程[M].北京:高等教育出版社,2007.
[2]江苏省高等学校计算机等级考试中心.二级考试试卷汇编Visual Basic语言分册[M].苏州:苏州大学出版社,2005.