APP下载

选择有趣算例激发学生兴趣上好VB程序设计课

2011-04-27渭南技术学院

电子世界 2011年11期
关键词:运算符公鸡小鸡

渭南技术学院 王 玲

我是一名中等职业技术学院讲授Visual Basic(简称VB)程序设计课程的教师。VB是一种面向对象的程序设计的高级语言,是目前最为流行的程序设计语言之一。它由Basic发展而来,目前已进入了VB.NET阶段。

上个世纪50年代,当计算机还处于第一代——即电子管计算机时代时,为了使工程技术人员在科学计算中,能充分利用计算机,人们在计算机的低级语言:机器语言和汇编语言之后,开发了第一个适用于科学计算的程序设计高级语言——FORTRAN语言(Formuler Translation)。到了60年代,当计算机上升为第二代——晶体管时代时,为了普及计算机程序设计,就诞生了第二个程序设计高级语言:基于初学者通用目的的符号指令代码——Basic(Beginner’s ALL-puperse Symbolic Instruction Code)。在此之后各种面向过程的程序设计高级语言如雨后春笋般的被开发了出来,如70年代发展起来的C程序设计语言等。进入80年代后,伴随着计算机进入了第三代(中小规模集成电路计算机)、第四代(大规模集成电路计算机),微型计算机得到了空前的大普及。微机操作系统由磁盘操作系统DOS(Disk Operating System)被视窗操作系统Windows所取代。人们在面向过程的程序设计基础上,引入了可视化编程(Visual)的方法,并在程序设计中引入了类和对象、方法和事件驱动等概念,程序设计逐渐由面向过程过渡到了面向对象。如人们最常用的Visual Basic、Visual C++、Visual J++、Visual FoxPro等。但既然是过渡,尽管人们进入了面向对象的程序设计时代,但各种程序设计高级语言都不可避免地带有面向过程的烙印。如程序的基本结构,都分为顺序结构、选择结构、循环结构。

图1 窗体界面

作为一名中等职业技术学院的计算机教师,面对的是一些理解力较差、概念较为模糊、基本功较低的学生。如何对这些学生讲好程序设计课?如何使他们对程序设计产生兴趣、提高学习积极性,学好程序设计课?几年来在教学实践中,总结正反两方面的经验和教训,我深深地认识到,要想真正上好面向对象的程序设计课,并非易事。必须在理论联系实际,激发学生的学习兴趣,提高他们的学习积极性上狠下功夫。只有千方百计,通过挖掘选择有趣的古今中外著名算例,联系实际,深入浅出地进行剖析,才能为学生讲清讲透程序设计语言中的数据类型、运算符、表达式、基本结构等基本概念,提高程序设计课的教学质量,使学生在学习程序设计时少走或不走弯路,达到事半功倍的结果。

图2 运行结果1

在讲VB程序设计时,为了使学生能够较深刻的理解不同数据类型所允许的运算,不同运算符的功能差异,学会正确使用基本结构的嵌套,经认真筛选,我选择了以中国古代算题“百钱买百鸡”为例,引导学生设计解决该问题的VB应用程序。该题要解决的问题是:

每只公鸡5元钱,每只母鸡3元钱,每3只小鸡1元钱。今有100元钱,要求必须且只能买100只鸡。问可买公鸡、母鸡、小鸡各多少只。

这个问题既可蜕变为中国民间妇孺皆知的“百僧分百馍”问题,也和“百马驮百担”问题类似,都是未知数的个数比方程的个数多1个不定解问题。它可能无解,也可能只有一组解或多组解。

图3 运行结果2

同学们对此题非常感兴趣,因为他们在孩提时代就拼凑过“百僧分百馍”的古老算题,但只是拼出了答案:25个大和尚、75个小和尚,但却说不清楚是否还有别的解。此时,看到要解决一直困扰他们的问题了,学生们精神大振,动脑筋分析问题的积极性机灵型也大为提高。据此引导他们分析该题。

由于每只公鸡(coke)5元钱,所以100元全部用来买公鸡,也最多一直能买20只。因此买公鸡的可能是0只到20只;同理买母鸡(hen)的可能是0只到33只;而买小鸡(poult)的可能只能是100-公鸡数-母鸡数。可见这是一个典型的枚举求解问题,所以设计出了如图1所示VB窗体界面,并未窗体中标题为“计算开始”的按钮,设计出了单击按钮Command1_Click程序。它的VB程序源代码如下:

程序运行后,结果如图2所示。这个结果无疑是正确的,因为通过核对,不但鸡的和为100个,钱的和也是100元。该题的第一组接则是“百僧分百馍”的算题解。但当我们将语句:

money=5*coke+3*hen+poult/3

中的除法运算符“/”改为整除运算符””时,将会得到如图3所示的运行结果。显然图3的解比图2的解多了3组:

分析这三组解,经核对会发现尽管公鸡、母鸡、小鸡的和是100只,但钱数却不对,这3组解,钱数分别为100.67,比限定的100元多出了0.67元,即隐藏着多买了2只小鸡问题。此时学生的兴趣更浓,都急于想知道错在了什么地方。

此时引导学生进一步分析产生错误的原因。学生立即会联想到,程序仅修改了一个算术运算符,肯定是由于两种除法运算符的功能不同所导致的。

在正确的结果1中,使用了除法运算符“/”。它是一个实型算子,该算子的特点是对实型数进行运算,运算的结果也是实型数。如除数和被除数都是整型数,系统会自动将它们全部换算为对应的实型数,然后再进行实型运算,得到实型结果。例如:

77/3=25.67

此时表达式:

3*5+20*3+77/3的结果将是100.67,显然这不符合钱数限定为100元的要求,它将被因钱数超出了0.67元而被排除,同样其它两组解也以同样的理由被排除。

再分析在错误结果2中,由于计算买小鸡所用的钱数时使用了整除算子“”,而整除的结果是不带小数的。当结果有小数部分存在时,将自动被截去小数部分而仅保留整数部分。此时753、763、773均为25;783、793、803均为26;813、823、833均为27。正因为如此,在上面三组解中,钱数计算的结果将都是100元,而并非100.67元,从而导致了钱数似乎符合100元限定的错误结论,错误的结论必然产生错误的结果,从而认为“钱数刚好”而作为是“正确解”输出。

在学生明白了错误产生的原因后,又通过引导学生探讨如何避免此类错误发生,使学生更进一步拓宽了知识面。指出,在计算实际买小鸡所花的钱时,最好的方法的使用实型算子“/”,它方便快捷。但绝不能依次就得出不能使用整型算子“”的结论。事实上如使用了它,则只要将后面的:

则会排除掉上面钱数超限的三组解,从而取得于图1完全一致的结果。其原因是,只有当欲买小鸡的只数是3的整数倍时,poult/3才与poult3真正相等。只不过此时if语句中的条件表达式就成了复合条件表达式,它将彻底解决钱数超出的问题。

这样学生在实际案例中理解了VB除法算子和整除算子各自的功能和区别,学到了循环嵌套的有关知识。学生们普遍反映这的确是一个教授程序设计课好方法。

综上所述,在程序设计中,正确选用一些古今中外有名的算例,联系所讲高级语言的数据类型、运算符、语句语法等特点,通过对算例的认真剖析,一定会使枯燥艰涩的程序设计课程变得生动活泼,使学生由怕程序设计变为爱程序设计,从而调动他们的学习程序设计的积极性,一定会在高级语言程序设计中达到事半功倍的良好效果。

[1]贾长林等.可视化编程应用——Visual Basic(第2版)[M].北京:高等教育出版社,2001.

[2]龚沛曾等.Visual Basic程序设计教程(6.0版)[M].北京:高等教育出版社,2000.

猜你喜欢

运算符公鸡小鸡
两只公鸡
老祖传授基本运算符
闪电小鸡
小鸡想飞
用手机插头的思路学习布尔运算符
说话的公鸡
聪明的公鸡
小鸡不见啦
表达式求值及符号推导
C++中运算符的重载应用