朱華根
在人教A版高中數(shù)學必修3第一章《算法初步》中,循環(huán)結(jié)構(gòu)有下面兩種形式:
(1)當型循環(huán)結(jié)構(gòu),如下左圖所示,它的功能是當給定的條件P成立時,執(zhí)行A框,A框執(zhí)行完畢后,再判斷條件P是否成立,如果仍然成立,再執(zhí)行A框,如此反復執(zhí)行A框,直到某一次條件P不成立為止,此時不再執(zhí)行A框,離開循環(huán)結(jié)構(gòu).
(2)直到型循環(huán)結(jié)構(gòu),如下右圖所示,它的功能是先執(zhí)行,然后判斷給定的條件P是否成立,如果P仍然不成立,則繼續(xù)執(zhí)行A框,直到某一次給定的條件P成立為止,此時不再執(zhí)行A框,離開循環(huán)結(jié)構(gòu).
這里就提出了一個問題:如果設計的算法(含循環(huán)結(jié)構(gòu))不是上述形式,哪怎么辦?由于教材中只給了上述兩種形式,所以基本的辦法就是:改進這類結(jié)構(gòu),使其成為標準的當型循環(huán)結(jié)構(gòu)和直到型循環(huán)結(jié)構(gòu).
其實,人教A版教材中就提供了相應的例子,不過很不明顯,而且因為前后不連貫,使人看不懂,不好理解,也許是教材的一個不明顯的紕漏.
教材第4頁,提出探究:你能寫出“判斷整數(shù)n(n>2)是否為質(zhì)數(shù)”的算法嗎?然后給出了下面的算法:
第一步:給定大于2的整數(shù)n.
第二步:令i=2.
第三步:用i除n,得到余數(shù)r.
第四步:判斷“r=0”是否成立.若是,則n不是質(zhì)數(shù),結(jié)束算法;否則,將i的值增加1,仍用i表示.
第五步:判斷“i>(n-1)”是否成立.若是,則n是質(zhì)數(shù),結(jié)束算法;否則,返回第三步.
如果按照這一算法,相應的程序框圖為:
這個算法就很難用WHILE ……WEND 語句和DO …… LOOP UNTIL語句來寫(不能用GOTO語句或EXIT語句).在教材第7頁,給出了“這個算法”的程序框圖:
很明顯,這已經(jīng)是改進了的.容易看到,這個結(jié)構(gòu)是嚴格按照兩種循環(huán)結(jié)構(gòu)之一的直到型來設計的,因此利用這個框圖是很容易寫出相應的程序的.
下面再舉一個例子:
分析 如果有人把算法設計成下面的形式:
接下去寫程序就很難了,所以這個算法必須改進,即改成嚴格按照兩種循環(huán)結(jié)構(gòu)來設計(這里當型和直到型都可以,下面給出的是直到型):最后,需要指出的是,當型循環(huán)結(jié)構(gòu)和直到型循環(huán)結(jié)構(gòu)其實可以合并成一種結(jié)構(gòu):
如果沒有B,則就是當型循環(huán)結(jié)構(gòu),如果沒有A,并把條件P換成非P,再把“是”和“否”交換一下,則就是直到型循環(huán)結(jié)構(gòu).上面例題中的第一個框圖所顯示的算法結(jié)構(gòu),就是這種型.但這種合并型,教材并沒有提供相應的程序語句,如果一定要用,還是要對這種結(jié)構(gòu)作一下改變(如右圖):
容易看到效果是一樣的,相應的語句就容易寫了.以QBASIC為例對應的程序結(jié)構(gòu)如下:
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”