安徽省合肥中國科大附中 黃嚴(yán)生 高龍錦
“算法初步”學(xué)習(xí)的定位與思考
安徽省合肥中國科大附中 黃嚴(yán)生 高龍錦
算法思想是新課程強(qiáng)調(diào)的一種數(shù)學(xué)思想,算法的基本知識、方法和思想已滲透到人們的日常生活的方方面面,成為現(xiàn)代人理應(yīng)具備的一種數(shù)學(xué)素養(yǎng)。算法通常是指按照一定規(guī)則解決某一類問題的明確和有限的步驟。因此,算法有三個重要特征,其一是有窮性,一個算法必須保證能在執(zhí)行有限步后結(jié)束,不能是無限的;其二是明確性,算法的每一步和次序必須是明確的;其三是有效性,算法每一步都是有效的,能精確地運行。算法有三種語言,即自然語言、框圖語言、程序語言。程序框圖又有三種基本邏輯結(jié)構(gòu),即順序結(jié)構(gòu)、條件結(jié)構(gòu)(分支結(jié)構(gòu))、循環(huán)結(jié)構(gòu)。算法知識結(jié)構(gòu)如下:
本章的重點是程序框圖。程序框圖往往含有順序結(jié)構(gòu)、條件結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本邏輯結(jié)構(gòu),其中的難點是對循環(huán)結(jié)構(gòu)的理解和應(yīng)用。正確理解循環(huán)結(jié)構(gòu),首先要確定是當(dāng)型循環(huán)結(jié)構(gòu)還是直到型循環(huán)結(jié)構(gòu),第二要認(rèn)清表示累計變量的意義,第三要確定在哪一步開始循環(huán)。
算法的程序語言,是將算法框圖轉(zhuǎn)化為計算機(jī)能識別和執(zhí)行操作的語句,任何一種正確的算法程序,輸入到計算機(jī)中,通過計算機(jī)運行就能輸出結(jié)果。輸入語句、輸出語句和賦值語句是任何一個算法中必不可少的語句。在賦值語句中,一定要注意其格式要求,如:“=”的右側(cè)必須是數(shù)值表達(dá)式,左側(cè)必須是變量,一個語句只能給一個變量賦值,變量的值始終等于最近一次賦給它的值,先前的值將被替換。在一個算法對輸入的值進(jìn)行判斷時,就需要條件語句。若一個算法中某些步驟需要反復(fù)執(zhí)行多次,就少不了循環(huán)語句。
多元表征是數(shù)學(xué)一大特征,算法是解決某一類問題有限的步驟,表征算法的語言有三種,我們可以將解決問題的步驟分別用自然語言、框圖語言、程序語言表征出來。我們要能實現(xiàn)這三種語言的相互轉(zhuǎn)化。自然語言就是用文字表述一個算法;框圖語言用框圖及相關(guān)的連接符號表示算法,這種表示方法具有鮮明、直觀的特征;程序語言是用特定(計算機(jī)能識別)的語言表示算法,用于計算機(jī)識別和運行,只要輸入計算機(jī),經(jīng)過計算機(jī)運行后就能輸出結(jié)果。下面結(jié)合實例來分析三種語言之間的轉(zhuǎn)化。(由于順序結(jié)構(gòu)簡單易懂,這里不再贅述)
1.條件結(jié)構(gòu)的應(yīng)用
解析求分段函數(shù)f(x)的值,首先要對自變量x的值在什么范圍內(nèi)進(jìn)行判斷,然后代入相應(yīng)的解析式中進(jìn)行計算。所以算法步驟可以寫成:
第一步,輸入一個實數(shù)x。第二步,判斷x的取值范圍,若x<0,則輸出x+1;否則,再判斷x的取值范圍,若x≤2,則輸出(x-1)2;否則,輸出-x+3。
程序框圖:
評析例1要求設(shè)計求分段函數(shù)值的算法。雖然在函數(shù)解析式中的三個條件是并列的,但在算法中,首先判斷x<0,若是,則執(zhí)行計算x+1,否則,再對x的取值進(jìn)行判斷,這就是基本邏輯結(jié)構(gòu)中的條件結(jié)構(gòu)。本題在設(shè)計算法時,先將x分為兩類:一類是x<0,另一類是x≥0;在x≥0的前提下,再對x的取值進(jìn)行第二次分類,即分x≤2和x>2兩類。算法中的這種處理方法值得大家注意。程序中每執(zhí)行完一個條件結(jié)構(gòu)后都有必須有結(jié)束條件結(jié)構(gòu)的語句“ENDIF”,因此,上面程序出現(xiàn)兩個“ENDIF”,其中,第一個“ENDIF”是執(zhí)行x≤2條件的結(jié)束語,第二個“ENDIF”是執(zhí)行x<0條件的結(jié)束語。
2.循環(huán)結(jié)構(gòu)的應(yīng)用
例2設(shè)計一個計算1+2+22+…+2100的值的算法,畫出程序框圖,并寫出程序。
解析第一步,令S=1,i=1。第二步,若i≤100成立,則執(zhí)行第三、第四步;否則,輸出S,結(jié)束算法。第三步,S=S+2i。第四步,i=i+1,返回第二步。
程序框圖:
評析上面是求數(shù)列前n項和(n=100)的一個算法,實際上,第一次計算1+2=3,第二次計算3+22=7,第三次計算7+23=15,…,第100次計算2100-1+2100。這個過程中包含重復(fù)操作的步驟,因此需要使用循環(huán)結(jié)構(gòu)。上述的算法用的是當(dāng)型循環(huán)結(jié)構(gòu),其特征為:在每次執(zhí)行循環(huán)體前,對條件進(jìn)行判斷,當(dāng)條件滿足時,執(zhí)行循環(huán)體,否則終止循環(huán)。
我們也可以用直到型循環(huán)結(jié)構(gòu)設(shè)計算法,其算法如下。
解析第一步,令S=1,i=1。第二步,S=S+2i。第三步,i=i+1。第四步,若i>100成立,則輸出S,算法結(jié)束;否則,返回第二步。
評析此算法用的是直到型循環(huán)結(jié)構(gòu),其特征為:在執(zhí)行一次循環(huán)體后,對條件進(jìn)行判斷,如果不滿足條件,就繼續(xù)執(zhí)行循環(huán)體,直到條件滿足時終止循環(huán)。注意直到型和當(dāng)型循環(huán)結(jié)構(gòu)的區(qū)別和聯(lián)系,它們都是對循環(huán)體反復(fù)執(zhí)行多次,但執(zhí)行次序不同。當(dāng)型循環(huán)結(jié)構(gòu)先判斷條件,滿足條件執(zhí)行循環(huán)體;而直到型循環(huán)結(jié)構(gòu)先執(zhí)行循環(huán)體,再判斷條件,不滿足條件繼續(xù)執(zhí)行循環(huán)體。
算法思想是新課程強(qiáng)調(diào)的一種數(shù)學(xué)思想,算法初步是新課程試驗教材的新增內(nèi)容。上面通過實例分析了算法的三種語言的相互轉(zhuǎn)化和應(yīng)用。我們常常會遇到根據(jù)算法框圖識別框圖所表示的具體算法,并根據(jù)算法計算出輸出結(jié)果的一類試題。
例3如果執(zhí)行右面的程序框圖,輸入N=5,則輸出的數(shù)等于()。
解析
此題若使用當(dāng)型循環(huán)結(jié)構(gòu)或直到型循環(huán)結(jié)構(gòu),則應(yīng)做如下修改:
無獨有偶,2012年高考新課標(biāo)Ⅰ卷再次出現(xiàn)這種情況,題目如下:
如果執(zhí)行右邊的程序框圖,輸入正整數(shù)N(N≥
2)和實數(shù)a1,a2,…,an,輸出A和B,則()。
請同學(xué)們思考本題的輸出結(jié)果,并自己動手修改,將其改為規(guī)范的框圖。
通過以上的算法分析我們可以知道,對于算法我們并不陌生。我們?nèi)粘I钪幸呀?jīng)使用了算法思想,只是沒有系統(tǒng)地總結(jié)。如加法法則、乘法法則、去括號法則、對數(shù)運算法則、向量運算、必修1中“二分法求函數(shù)的零點”等都是具體的算法。正如張奠宙先生所說的“算法貫穿整個中學(xué)數(shù)學(xué)”,算法不是空洞的,而是實實在在的,每一個算法都有它的知識載體。所以,將算法的學(xué)習(xí)與相關(guān)知識聯(lián)系起來,能夠幫助我們體會數(shù)學(xué)的整體性,加深對所學(xué)數(shù)學(xué)知識的理解。
通過本章的學(xué)習(xí),我們應(yīng)充分認(rèn)識到算法重視“算則”,更重視“算理”。算法具有程序化、機(jī)械化的特點,同時又具有抽象性、概括性和精確性的特點。對于一個具體算法而言,它非常具體,具體到某個計算公式以及計算過程,任何一個疏漏或錯誤都將導(dǎo)致算法出錯。因此,算法學(xué)習(xí)是培養(yǎng)思維的縝密性的有效方法。