陳侃 陳梅
“算法初步”這一章是高中新課改數(shù)學(xué)新增的內(nèi)容,其思想非常重要, 但算法并不神秘,例如運用消元法解二元一次方程組的過程就是一種算法. 為了有條理地、清晰地表達(dá)算法,往往需要將解決問題的過程整理成程序框圖;為了能在計算機上實現(xiàn),還要將程序框圖翻譯成計算機語言,也就是程序. 在學(xué)習(xí)過程中,能熟練地進(jìn)行兩者間的互化,是掌握算法的基礎(chǔ).
一、根據(jù)程序框圖設(shè)計程序
根據(jù)程序框圖設(shè)計程序的一般步驟:(1)理解題意,確定程序框圖的結(jié)構(gòu)(順序結(jié)構(gòu)、條件結(jié)構(gòu)、循環(huán)結(jié)構(gòu));(2)明確各程序框的含義,并且寫出對應(yīng)的程序代碼;(3)在有條件的情況下,進(jìn)行上機運行.
例1 請寫出下面的程序框圖描述的程序.
[x<1?] [開始 ] [否][是][結(jié)束] [輸出y] [輸入x] [x<10?] [是] [否]
分析 通過觀察,此程序框圖為條件結(jié)構(gòu),而條件結(jié)構(gòu)的程序為:
[IF 條件 THEN
語句體1
ELSE
語句體2
END IF]
解 所求算法的程序為: [INPUT x
IF x<1 THEN
y = x^2
ELSE
IF x<10 THEN
y = 2*x+1
ELSE
y = 3*x-11
END IF
END IF
PRINT y
END]
點撥 (1)在本程序中,IF-THEN語句中嵌入了另一個IF-THEN語句,在每個語句結(jié)束時都要寫END IF; (2)程序中的符號都要用專用符號,例如:乘號、冪等.
例2 請寫出下面的程序框圖描述的程序.
[開始 ] [否][結(jié)束] [輸出S] [k>50?][是]
分析 通過觀察,此程序框圖是循環(huán)結(jié)構(gòu),程序設(shè)計語言中有直到型和當(dāng)型兩種循環(huán)結(jié)構(gòu). 直到型循環(huán)結(jié)構(gòu)對應(yīng)的UNTIL語句是:
[DO
循環(huán)體
LOOP UNTIL 條件]
當(dāng)型循環(huán)結(jié)構(gòu)對應(yīng)的WHILE語句是:
[WHILE 條件
循環(huán)體
WEND]
通過進(jìn)一步分析我們發(fā)現(xiàn),此循環(huán)結(jié)構(gòu)用當(dāng)型和直到型循環(huán)結(jié)構(gòu)的語句都符合程序框圖.
解法一 UNTIL語句編寫計算機程序:
[k=1
S=0
DO
S=S+1/k
k=k+1
LOOP UNTIL k>50
PRINT S
END]
解法二 WHILE語句編寫計算機程序:
[k=1
S=0
WHILE k<=50
S=S+1/k
k=k+1
WEND
PRINT S
END]
二、根據(jù)程序畫出程序框圖
根據(jù)程序畫程序框圖的一般步驟:(1)理解題意,確定程序的結(jié)構(gòu)語句(條件語句、循環(huán)語句);(2)明確各函數(shù)的含義,一步一步轉(zhuǎn)化為程序框圖;(3)最后合成整個程序的程序框圖. 在畫程序框圖的過程中,要注意所有的細(xì)節(jié),例如各種語句所對應(yīng)的框的特征,不要忘記起止框等.
例3 請根據(jù)給出的算法程序畫出程序框圖.
[INPUT “x=”; x
b = x MOD 2
IF b = 0 THEN
PRINT “it is even”
ELSE
PRINT “it is odd”
END IF
END]
分析 先讀懂題意,先找出關(guān)鍵語句(條件語句,循環(huán)語句),此題為條件結(jié)構(gòu),然后發(fā)現(xiàn)程序中“MOD”語句,意味著需要取余數(shù). 這里[b]等于[x]除以2的余數(shù),即判斷[x]是否為偶數(shù),最后寫出程序框圖.
解 此程序的程序框圖為:
[開始 ] [否][結(jié)束] [輸出“x是偶數(shù)”] [b=0?][是] [b等于x除以2的余數(shù)] [輸入x][輸出“x是奇數(shù)”]
例4 請根據(jù)給出的算法程序畫出程序框圖.
[INPUT “x=”;x
k = 0
DO
x = 10*x+9
k = k+1
LOOP UNTIL x>2014
PRINT k
END]
分析 由題意,很容易發(fā)現(xiàn)此程序為直到型循環(huán)結(jié)構(gòu),再加上一些基本的賦值語句.
解 此程序的程序框圖為:
[開始 ] [否][結(jié)束] [輸出k] [x>2014?][是] [輸入x]
通過以上例題分析,我們可以發(fā)現(xiàn),只要掌握了程序框圖的幾種結(jié)構(gòu)(順序結(jié)構(gòu)、條件結(jié)構(gòu)、循環(huán)結(jié)構(gòu))和各種框的功能,知道程序框圖的一般畫法,掌握了程序的算法語句(輸入、輸出語句,條件語句、循環(huán)語句),并且能把程序框圖的結(jié)構(gòu)與程序的語句一一對應(yīng),那么我們就可以非常輕松、方便地解決程序與程序框圖的互化問題.
程序與程序框圖是描述算法的兩種重要語言,它們各有優(yōu)勢. 程序框圖具有直觀、形象的特點,我們可以迅速地理解某一算法,但計算機無法理解它,程序雖復(fù)雜,但計算機可以執(zhí)行,方便計算. 所以我們在學(xué)習(xí)算法這一章時,應(yīng)該熟練掌握,靈活運用.
[練習(xí)]
1. 根據(jù)程序框圖寫出程序.
[開始 ] [否][結(jié)束] [輸出S] [是] [輸入a,b]
2. 根據(jù)程序框圖寫出程序.
[開始 ] [否][結(jié)束] [輸出y] [是] [輸入x]
3. 請根據(jù)下面的程序,畫出程序框圖. [INPUT “n=”;n
i = 1
S = 0
WHILE i<=n
S = S +(i+1)/i
i=i+1
WEND
PRINT “S=”;S
END]
[參考答案]
1.
[INPUT [a,b]
IF [a+b<1] THEN
[S=2*a+b]
ELSE
[S=1]
END IF
PRINT [S]
END]
2.
[INPUT “x=”;x
DO
y = x/3+2
x = y
LOOP UNTIL ABS(y-x)<1
PRINT y
END]
3.
[開始 ] [否][結(jié)束] [輸出s] [是] [輸入n] [[i≤n?]]