关于循环结构设计的一个问题
2008-07-31朱华根
朱华根
在人教A版高中数学必修3第一章《算法初步》中,循环结构有下面两种形式:
(1)当型循环结构,如下左图所示,它的功能是当给定的条件P成立时,执行A框,A框执行完毕后,再判断条件P是否成立,如果仍然成立,再执行A框,如此反复执行A框,直到某一次条件P不成立为止,此时不再执行A框,离开循环结构.
(2)直到型循环结构,如下右图所示,它的功能是先执行,然后判断给定的条件P是否成立,如果P仍然不成立,则继续执行A框,直到某一次给定的条件P成立为止,此时不再执行A框,离开循环结构.
这里就提出了一个问题:如果设计的算法(含循环结构)不是上述形式,哪怎么办?由于教材中只给了上述两种形式,所以基本的办法就是:改进这类结构,使其成为标准的当型循环结构和直到型循环结构.
其实,人教A版教材中就提供了相应的例子,不过很不明显,而且因为前后不连贯,使人看不懂,不好理解,也许是教材的一个不明显的纰漏.
教材第4页,提出探究:你能写出“判断整数n(n>2)是否为质数”的算法吗?然后给出了下面的算法:
第一步:给定大于2的整数n.
第二步:令i=2.
第三步:用i除n,得到余数r.
第四步:判断“r=0”是否成立.若是,则n不是质数,结束算法;否则,将i的值增加1,仍用i表示.
第五步:判断“i>(n-1)”是否成立.若是,则n是质数,结束算法;否则,返回第三步.
如果按照这一算法,相应的程序框图为:
这个算法就很难用WHILE ……WEND 语句和DO …… LOOP UNTIL语句来写(不能用GOTO语句或EXIT语句).在教材第7页,给出了“这个算法”的程序框图:
很明显,这已经是改进了的.容易看到,这个结构是严格按照两种循环结构之一的直到型来设计的,因此利用这个框图是很容易写出相应的程序的.
下面再举一个例子:
分析 如果有人把算法设计成下面的形式:
接下去写程序就很难了,所以这个算法必须改进,即改成严格按照两种循环结构来设计(这里当型和直到型都可以,下面给出的是直到型):最后,需要指出的是,当型循环结构和直到型循环结构其实可以合并成一种结构:
如果没有B,则就是当型循环结构,如果没有A,并把条件P换成非P,再把“是”和“否”交换一下,则就是直到型循环结构.上面例题中的第一个框图所显示的算法结构,就是这种型.但这种合并型,教材并没有提供相应的程序语句,如果一定要用,还是要对这种结构作一下改变(如右图):
容易看到效果是一样的,相应的语句就容易写了.以QBASIC为例对应的程序结构如下:
“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文”