当前位置:免费教育资源网论文数学论文
关键字: 所属栏目:

中学数学《算法初步》课程探究

来源:人民教育出版社  作者:山东省临沂二中 许永忠  更新时间:2006-10-13 23:53:39   

r = 1

d = 2

WHILE d <= SQR(n) AND r <> 0

r = n MOD d

d = d + 1

WEND

IF r = 0 THEN

PRINT n;"不是质数"

ELSE

PRINT n;"是质数"

END IF

END

这里没有使用flag。循环由两个条件d <= SQR(n) 和r <> 0控制。如果是因为r=0退出循环,则说明某个d能整除n,从而n不是质数。若由于d>SQR(n)退出循环,则说明2~SQR(n)的整数都不能整除n,从而n是质数,此时r不会变为0。当n=2和3时,循环体不执行,因而r=1,也能得到正确的结果。改进的程序中判断部分由原来的11行减少为6行!我们给生介绍了这种方法,生感到比较容易理解。

当然,材在此处安排这个算法,也许只是为了让初者了解程序框图的结构,并不需要真正搞懂所涉及的算法。在上述的改进方法中,显然三种结构在框图中同样都有体现。因此,用此框图代替原框图作为一个范例仍不失其实用价值。笔者建议材在修订时改用以上方法。

2.2.2 更相减损术

更相减损术是中国古代算书《九章算术》中的一个优秀算法,其作用是对分数进行约分,因此也称为“约分术”。材称这是“求两个数的最大公约数的算法”是不妥的。材中将原文“以等数约之”翻译成“则这个数(等数)就是所求的最大公约数”,明显有误。例如,12和18约掉2变成6和9,9-6=3,6-3=3,3-3=0,最后的等数是3,因此将得到“12和18的最大公约数为3”的错误结论。显然,正确结果应该是最后的等数再乘以约掉的2(约掉几个再乘上几个)。

事实上,更相减损术确实可以求最大公约数,不过要做一些改进。实际上,只要按照材中的解释,去掉约2这一步,即不管两个数是否有公约数2,直接“更相减损”就可以了。这样做能保证最后的“等数”就是所求的最大公约数。原文中“可半者半之”,是指在约分时,先约掉2,使分子分母变小,这并不影响分数值,但在求最大公约数时就不可以这样了。

2.2.3 类BASIC语言

材中出现了“类BASIC语言”的概念。笔者曾BASIC多年,先后用过BASIC、BASICA、Turbo BASIC、QBASIC、VB等BASIC语言的多种版本,还是第一次接触“类BASIC”的概念。惊讶之余赶紧上网搜索“类BASIC”,还真找到了。下载后安装,生成一个iBASIC的快捷方式。但运行之后却大为失望──材上的程序基本上都无法运行,特别是循环语句。这时才明白:此“类BASIC”非彼“类BASIC”也。

材中所谓的“类BASIC”,指的是类似BASIC语言的语句,而并不是一种真实的计算机语言!笔者认为,如果只生算法和语句而不上机实习,那就无异于纸上谈兵,不但起来费力,而且即使死记硬背下来,也肯定记忆不牢,理解不深,更谈不上灵活运用。因此,材最好能以基本的BASIC语句来分析算法,提供一种真实的语言环境,让广大师生能够验证自己的“成果”。这样,起来省力,习兴趣也会大大提高。经试验发现,材中的程序都能在QBASIC中运行(有错误的除外)。

当然,我们让生编程序,并不是要把生培养成程序员,更何况材涉及的语句有限,BASIC语言的功能也有限。也许正因为如此,有些师提出,BASIC太落后了,最好换成其他语言。其实这是不必要的。我们的目的,是让生掌握算法的最基本的思想方法和技巧,只要能编写一些简单的程序即可,不要对生提过高的要求。BASIC语言是各种计算机语言中最好接受的一种,因此选用BASIC是明智之举。

2.2.4 GET函数

材在34页用到一个“函数”:GET,其功能是取出一个正整数的右数第i位数字。据笔者所知,在BASIC语言的多种版本中都没有这个函数。在某些版本中,虽然有这个关键字,但其功能却并非如此。也许有人会说,可以用自定义函数。但是,稍有编程经验的人都能看出,t=GET a[i]这种格式是违反各种语言中函数使用惯例的(包括自定义函数)。这种做法,将习者引入了歧途,因此是不可取的。

2.2.5 几点建议

(1)将第5页的框图改成一个浅显易懂的例子,或将其改成更易于接受的算法,或者加注释说明:此框图仅供观察框图的构成,暂不要求完全理解。

上一页  [1] [2] [3] [4]  下一页


文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
精彩推荐