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