文静
摘要:VisualBasic是很多高校非计算机专业理工科开设的一门公共基础课。本文以实例阐述了如何采用层次递进的教学方式,实践证明,深入浅出的讲解能有效地提高教学质量。
关键词:Visual Basic;教学;层次递进教学法
Visual Basic是具有友好界面和较强实用性的可视化编程语言。采用面向对象程序设计思想、采用事件驱动编程机制、直观易操作的开发环境,与传统的面向过程的程序设计语言存在很大差别。目前已经成为许多高等院校计算机教学的公共课,该课程的目的是使学生掌握计算机程序设计的思路和方法,初步具有运用VB程序设计解决实际问题的能力,是二级考试程序设计的主要候选语言之一。
一、存在的问题
很多非计算机专业学生是初次接触程序设计的,理解力相对较差。在课程的前半段,基础理论知识比较零散、枯燥,好多同学容易忽视基础知识的重要性,到后面编程时,由于前面的理论基础薄弱,又缺乏算法和数据结构的知识,自己编写程序很容易出错,这样会使得学生失去学习VB的兴趣。为了能解决好这一矛盾,可以深入浅出地进行讲解,将一个大的、复杂的难题化整为零,层层递进地讲解,从而有利于学生理解和掌握。
二、层次递进教学法
初次接触编程的同学很难理解和接受就题讲题,一节课下来绝大部分同学似懂非懂。教师可以从已有知识下手,寻找突破口,一点一点地增加难度,深入浅出,循循善诱,层层递进,这样会获得不错的教学效果。本文以判断素数为例分析层次递进教学法。素数指的是只能被1或者自身整除的自然数(不包括1),也称为质数。与素数相对的叫合数。判断素数是所有程序设计语言都绕不过的经典算法。
1.判断一个数的奇偶性
例题l,判断一个自然数n是奇数还是偶数,将结果打印在窗体上,该数通过键盘输入。
这是小学数学的内容,每个学生都知道判断的依据是n是否可以被2整除。具体过程为从键盘输入变量n的值,采用Mod求余运算,判断n除以2的余数是否为0,如果为0则判断n是偶数,否则是奇数。代码如下:
例题1是针对某一个数进行判断,在此基础上拓展教學,进一步学习针对一组数进行判断。
2.判断一组数的奇偶性
例题2,判断出100以内所有的偶数,将它们打印在窗体上。
在本例中,需要对1~100这一百个数依次进行判断,通过Mod运算将其中所有的偶数判断出来并显示在窗体上。
本代码中,所有的偶数均打印在窗体上,课堂教学中为了显示效果,可以将偶数5个一行地打印于窗体上,或者显示于列表框中。此为教师课堂额外拓展,本题及下例不再赘述。
3.判断一个数是否为素数
(1)除数取值范围为区间[2,n.1]
例题3,判断数一个数n是否是素数,n由键盘输入。
根据定义,因为素数除了1和本身之外没有其他约数,所以判断n是否为素数可用2~n-1依次分别去除n,如果每一个除数均除不尽,则n为素数。只要有一个除数能被n除尽,则n一定是非素数。具体过程为,设置循环变量i表示除数的范围,n依次对每一个除数i做Mod求余运算,如果对于所有的除数i均不能整除,则n是素数。如果有一个除数i使得Mod运算结果不为0,即可判断出n不是素数,且后续的除数i也无需再判断,可以提前退出循环。代码如下:
(2)除数取值范围为区间[2,n/2]
在例题3里,循环变量i代表的除数的范围是2~n-1,当除数i的值为n/2时,n除以i结果是2,当i处于区间[n/2,n]时,商不可能超过2,即只能位于区间(1,2),所以无需考虑区间[n/2,n-1],因为考虑到除数i为整型数,所以在程序中除数i取值范围[2,Int(n/2)]。代码可优化为:
(3)除数取值范围是区间[2,Sqr(n)]
因为如果一个数不是素数是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,一个小于或等于它的平方根,并且成对出现。所以可以进一步优化除数i的取值范围为[2,Sqr(n)]。因为考虑到除数i为整型数,所以在程序中i取值范围为[2,Int(Sqr(n))]。代码可进一步优化为:
4.判断一组数中的素数
例题4,判断出100以内所有的素数,将它们打印在窗体上。
上例是判断某一个数是否是素数,例题4进一步加大题目的难度,判断一组数中的素数。需要在例题3的基础上,增加外循环变量n,用来表示需要判断的每一个数,表示的范围为[2,100]。对于每一个外循环变量n,判断素数的方法与例题3完全相同。代码如下:
至此,学生已经掌握对素数的判断,无论是判断一个数还是判断一组数。
5.判断素数的通用过程
随着教学的深入,接触了通用过程。所谓通用过程是指如果完成一定功能的程序段在程序中重复出现多次,且这些重复的程序段代码相同,只是处理的数据不同,那么可以把程序段分离出来,设计成一个具有一定功能的独立程序段,即通用过程。通用过程可分为子程序过程和函数过程,它们的区别是后者有返回值,而前者没有。对于素数的判断,最终将给出判断是或否的结果,所以应该采用函数过程,且结果只在是与否之间,所以函数过程的返回值为布尔型。
例题5,判断素数的通用过程。
在通用过程里n是虚参,可以抽象地看成每一个需要被判断的数。循环变量i的取值范围采用最普通的[2,n-1]。由于在函数过程中函数名Prime可以被看成一个变量,且是布尔型,所以函数名Prime的初值为False。当有一个i使得Mod运算的结果为0,则提前退出通用过程,此时通用过程的返回值为False。若循环变量可以从初值运行到终值,并Rn对每一个i均不能除尽,那么不会提前退出循环,则函数名Prime最终被赋值为True。代码如下:
三、结论
整个教学过程层层递进,由浅及深,从必须掌握的判断偶数这个基础知识开始讲起。先是判断一个数,把小学生都知道的知识“翻译”成VB程序。然后加深难度,通过增加一个循环变量来判断一组数,即n由一个键盘输入的固定值变为一个表示范围的循环变量。接着再进一步把除数从固定的2变化为区间,此时用循环变量i表示这个区间。再增加难度,从判断一个数是否是素数,扩大到判断一组数是否是素数。最后,把判断过程升华为函数过程。
从本例可以看出,经典的算法对于学生来说,可能掌握起来比较困难。但是化整为零、知识难点各个击破,层层递进,有利于学生理解和接受。其他的经典算法也可以采用这样的方式。
VB作为一门重要的基础性编程语言,在教学中最大限度地培养学生的兴趣,调动学生的学习积极性和创造力,培养学生的创新能力。教师对VB语言及要讲解的内容非常熟悉,知识点能融会贯通。同时在教学方法和手段等方面进行不断地探索,VB课程的教学质量必将得到不断提高,从而达到预期的教学目的。实践证明,分层递进教学在提高学生学习兴趣、主动性及培养“计算思维”能力方面都大有帮助。