在設(shè)計(jì)算法的過程中,解決問題的基本思想常常很簡(jiǎn)單、很清楚,但表述參與運(yùn)算的數(shù)值的頻頻變換卻很麻煩。為了解決這個(gè)問題,需要在程序中引入變量。前面通過對(duì)函數(shù)概念的學(xué)習(xí),我們就已經(jīng)了解變量的含義:在研究問題的過程中可以取代不同數(shù)值的量稱為變量。
程序中一些重要的函數(shù)也很有用處,如取平方根函數(shù)SQR(x)=|x|,取絕對(duì)值函數(shù)ABS(x)=。
變量與函數(shù)是中學(xué)數(shù)學(xué)里面最重要的和最基本的概念,在算法的設(shè)計(jì)里面仍然發(fā)揮著重要的和最基本的作用,它們會(huì)使得算法的表達(dá)變得非常整潔、清楚。
1.賦值語(yǔ)句在程序運(yùn)行時(shí)給變量賦值;“=”的右側(cè)必須是表達(dá)式,左側(cè)必須是變量;一個(gè)語(yǔ)句只能給一個(gè)變量賦值;有計(jì)算功能;將一個(gè)變量的值賦給另一個(gè)變量時(shí),前一個(gè)變量的值保持不變;可先后給一個(gè)變量賦多個(gè)不同的值,但變量的取值只與最后一次賦值有關(guān)。
2.累加變量是最終的輸出結(jié)果。每進(jìn)入一次循環(huán)體隨著計(jì)數(shù)變量改變而改變。累加變量的初始值通常為0。
1.計(jì)數(shù)變量的作用一般是統(tǒng)計(jì)循環(huán)體執(zhí)行的次數(shù),改變循環(huán)條件的取值,為結(jié)束循環(huán)作準(zhǔn)備。譬如:計(jì)算等差、等比數(shù)列的前n項(xiàng)的和,n就是計(jì)數(shù)變量的臨界值,在當(dāng)型結(jié)構(gòu)中“小于等于n”維持循環(huán),而在直到型循環(huán)結(jié)構(gòu)中“大于n”跳出循環(huán)。
2.條件語(yǔ)句的嵌套可多于兩層,可以表達(dá)算法步驟中的多重限制條件。
題型4:循環(huán)語(yǔ)句
例7.設(shè)計(jì)一個(gè)計(jì)算1×3×5×7×…×99的算法,編寫算法程序。
解析:
算法如下:
第一步:s=1;
第二步:i=3;
第三步:s=s×i;
第四步:i=i+2;
第五步:如果i≤99,那么轉(zhuǎn)到第三步;
第六步:輸出s;
程序如下:(“WHILE型”循環(huán)語(yǔ)句)
s=1
i=3
WHILE i<=99
s=s*i
i=i+2
WEND
PRINT s
END
點(diǎn)評(píng):你能用“UNTIL”型循環(huán)語(yǔ)句表示“典例1”中的程序嗎?
例8.編寫一個(gè)程序,求1!+2!+…+10!的值。
解析:這個(gè)問題是求前10個(gè)正整數(shù)的階乘之和,可以用“WHILE+ WHILE”循環(huán)嵌套語(yǔ)句格式來(lái)實(shí)現(xiàn)。
程序結(jié)構(gòu)要做到如下步驟:
①處理“N!”的值;(注:處理N!值的變量就是一個(gè)內(nèi)循環(huán)變量)
②累加“N!”的值。(注:累加N!值的變量就是一個(gè)外循環(huán)變量)
顯然,通過10次循環(huán)可分別求出1!、2!、…、10!的值,并同時(shí)累加起來(lái), 可求得S的值。而求T=N!,又可以用一個(gè)循環(huán)(內(nèi)循環(huán))來(lái)實(shí)現(xiàn)。
程序?yàn)?
s=0
i=1
WHILE i<=10
j=1
t=1
WHILE j<=i
t=t*j
j=j+1
WEND
s=s+t
i=i+1
WEND
PRINT s
END
上面程序中哪個(gè)變量是內(nèi)循環(huán)變量,哪個(gè)變量是外循環(huán)變量?
(1)內(nèi)循環(huán)變量:j,t
(2)外循環(huán)變量:s,i
“典例2”程序是一個(gè)的“WHILE+WHILE”型循環(huán)嵌套語(yǔ)句格式。這是一個(gè)比較好想的方法,但實(shí)際上對(duì)于求n!,我們也可以根據(jù)求出的(n-1)!乘上n即可得到,而無(wú)需重新從1再累乘到n。
程序可改為:
s=0
i=1
j=1
WHILE i<=10
j=j*i
s=s+j
i=i+1
WEND
PRINT s
END
顯然第二個(gè)程序的效率要比第一個(gè)高得多。第一程序要進(jìn)行1+2+…+10=55次循環(huán),而第二程序進(jìn)行10次循環(huán)。如題目中求的是1!+2!+…+1000!,則兩個(gè)程序的效率區(qū)別更明顯。
點(diǎn)評(píng):解決具體的構(gòu)造循環(huán)語(yǔ)句的算法問題,要盡可能的少引入循環(huán)變量,否則較多的變量會(huì)使得設(shè)計(jì)程序比較麻煩,并且較多的變量會(huì)使得計(jì)算機(jī)占用大量的系統(tǒng)資源,致使系統(tǒng)緩慢。另外,也盡可能使得循環(huán)嵌套的層數(shù)少,否則也浪費(fèi)計(jì)算機(jī)的系統(tǒng)資源。
題型5:實(shí)際應(yīng)用
例9.中國(guó)網(wǎng)通規(guī)定:撥打市內(nèi)電話時(shí),如果不超過3分鐘,則收取話費(fèi)0.22元;如果通話時(shí)間超過3分鐘,則超出部分按每分鐘0.1元收取通話費(fèi),不足一分鐘按以一分鐘計(jì)算。設(shè)通話時(shí)間為t(分鐘),通話費(fèi)用y(元),如何設(shè)計(jì)一個(gè)程序,計(jì)算通話的費(fèi)用。
解析:
算法分析:
數(shù)學(xué)模型實(shí)際上為:y關(guān)于t的分段函數(shù)。
關(guān)系是如下:
其中[t-3]表示取不大于t-3的整數(shù)部分。
算法步驟如下:
第一步:輸入通話時(shí)間t;
第二步:如果t≤3,那么y = 0.22;否則判斷t∈Z 是否成立,若成立執(zhí)行y= 0.2+0.1× (t-3);否則執(zhí)行y = 0.2+0.1×( [t-3]+1)。
第三步:輸出通話費(fèi)用c 。
算法程序如下:
INPUT “請(qǐng)輸入通話時(shí)間:”;t
IF t<=3 THEN
y=0.22
ELSE
IF INT(t)=t THEN
y=0.22+0.1*(t-3)
ELSE
y=0.22+0.1*(INT(t-3)+1)
END IF
END IF
PRINT “通話費(fèi)用為:”;y
END
點(diǎn)評(píng):實(shí)際應(yīng)用問題,在高考中是一個(gè)熱點(diǎn)。如何將實(shí)際問題轉(zhuǎn)化成數(shù)學(xué)問題是解題的關(guān)鍵,最后還要用算法步驟和程序進(jìn)行表達(dá)。如:中國(guó)網(wǎng)通通話費(fèi)的規(guī)定在數(shù)學(xué)中就是通話時(shí)間到通話費(fèi)用的分段函數(shù)。日常生活中的分段函數(shù)問題還有很多:出租車的計(jì)費(fèi)問題、個(gè)人所得稅問題、銀行利率問題等等。
例10.編寫程序,計(jì)算數(shù)列{an}的前20項(xiàng)的和。(其中數(shù)列的前幾項(xiàng)分別為1,1,2,3,5,8,……)
解析:這是“Fibonacci數(shù)列”的典型特征,從第三項(xiàng)起每一項(xiàng)都是它前兩項(xiàng)的和,即。
程序如下:
a=1
b=1
s=0
i=3
WHILE i<=20
s=s+a+b
t=a
a=b
b=b+t
i=i+1
WEND
PRINT s
END
點(diǎn)評(píng):
題型1:輸入、輸出和賦值語(yǔ)句
例1.判斷下列給出的輸入語(yǔ)句、輸出語(yǔ)句和賦值語(yǔ)句是否正確?為什么?
(1)輸入語(yǔ)句 INPUT a;b;c
(2)輸出語(yǔ)句 A=4
(3)賦值語(yǔ)句 3=B
(4)賦值語(yǔ)句 A=B=-2
解析:(1)錯(cuò),變量之間應(yīng)用“,”號(hào)隔開;
(2)錯(cuò),PRINT語(yǔ)句不能用賦值號(hào)“=”;
(3)錯(cuò),賦值語(yǔ)句中“=”號(hào)左右不能互換;
(4)錯(cuò),一個(gè)賦值語(yǔ)句只能給一個(gè)變量賦值。
點(diǎn)評(píng):輸入語(yǔ)句、輸出語(yǔ)句和賦值語(yǔ)句基本上對(duì)應(yīng)于算法中的順序結(jié)構(gòu)。輸入語(yǔ)句、輸出語(yǔ)句和賦值語(yǔ)句都不包括“控制轉(zhuǎn)移”,由它們組成的程序段必然是順序結(jié)構(gòu)。
例2.請(qǐng)寫出下面運(yùn)算輸出的結(jié)果。
(1)
(2)
(3)
解析:
(1)16;語(yǔ)句是將a,b和的一半賦值給變量c,語(yǔ)句是將c的平方賦值給d,最后輸出d的值。
(2)1,2,3;語(yǔ)句是將a,b的和賦值給c,語(yǔ)句是將的值賦值給了b。
(3)20,30,20;經(jīng)過語(yǔ)句后a,b,c的值是20,20,30。經(jīng)過語(yǔ)句后a,b,c的值是20,30,30。經(jīng)過語(yǔ)句后a,b,c的值是20,30,20。
點(diǎn)評(píng):語(yǔ)句的識(shí)別問題是一個(gè)逆向性思維,一般我們認(rèn)為我們的學(xué)習(xí)是從算法步驟(自然語(yǔ)言)至程序框圖,再到算法語(yǔ)言(程序)。如果將程序擺在我們的面前時(shí),我們要從識(shí)別逐個(gè)語(yǔ)句,整體把握,概括程序的功能。
題型2:賦值語(yǔ)句的應(yīng)用
例3.寫出求三個(gè)數(shù)a,b,c的方差的程序。
解析:方差是在初中統(tǒng)計(jì)內(nèi)容中學(xué)習(xí)過的知識(shí),計(jì)算所有數(shù)的方差首先計(jì)算所有數(shù)的平均數(shù),通過公式來(lái)計(jì)算。
算法步驟:
第一步:計(jì)算平均數(shù);
第二步:計(jì)算方差;
第三步:得到的結(jié)果即為所求。
程序如下:
INPUT a,b,c
y=(a+b+c)/3
S=((a-y)2+ (b-y)2+ (c-y)2)/3
PRINT S
END
點(diǎn)評(píng):套用公式求值問題是傳統(tǒng)數(shù)學(xué)求值問題的一種,它是一種典型的順序結(jié)構(gòu),也就是說只通過輸入、輸出和賦值語(yǔ)句就可以完成任務(wù)。解決這類問題的關(guān)鍵是先分析這種問題的解法,即構(gòu)造計(jì)算的過程,再寫出算法步驟和流程圖,再翻譯成算法語(yǔ)句即可。
例4.編寫一個(gè)程序,要求輸入的兩個(gè)正數(shù)a和b的值,輸出ab和ba的值。
解析:可以利用INPUT語(yǔ)句輸入兩個(gè)正數(shù),然后將ab和ba的值分別賦給兩個(gè)變量輸出即可。也可以將ab和ba的底數(shù)和冪數(shù)進(jìn)行交換,故還可以利用賦值語(yǔ)句,采用將兩個(gè)變量的值互換的辦法實(shí)現(xiàn)。
程序1:
INPUT “a,b:”;a,b
A=a^b
B=b^a
PRINT “ab=”;A,“ba=”;B
END
程序2:
INPUT “a,b:”;a,b
A=a^b
PRINT “ab=”;A
x=a
a=b
b=x
A=a^b
PRINT “ab=”;A
END
點(diǎn)評(píng):交換a,b的值可通過下面三個(gè)語(yǔ)句來(lái)實(shí)現(xiàn):
通過引進(jìn)一個(gè)變量t實(shí)現(xiàn)變量a和b的值的交換,因此只需用賦值語(yǔ)句即可實(shí)現(xiàn)算法。在一些較為復(fù)雜的問題算法中經(jīng)常需要對(duì)兩個(gè)變量的值進(jìn)行交換,因此應(yīng)熟練掌握這種方法。
題型3:條件語(yǔ)句
例5.編寫程序,輸出兩個(gè)不相等的實(shí)數(shù)a、b的最大值。
解析:要輸出兩個(gè)不相等的實(shí)數(shù)a、b的最大值,從而想到對(duì)a,b的大小關(guān)系進(jìn)行判斷,a,b的大小關(guān)系有兩種情況:(1)a>b;(2)b>a,這也就用到了我們經(jīng)常提及的分類討論的方式,找出兩個(gè)數(shù)的最大值。
解:算法一:
第一步:輸入a, b的數(shù)值;
第二步:判斷a,b的大小關(guān)系,若a>b,則輸出a的值,否則輸出b的值。
(程序框圖如右圖)
程序如下:(“IF-THEN-ELSE”語(yǔ)句)
INPUT“a,b”;a,b
IF a>b THEN
PRINT a
ELSE
PRINT b
END IF
END
算法二:
第一步:輸入a,b的數(shù)值;
第二步:判斷a,b的大小關(guān)系,若b > a,則將b的值賦予a;否則直接執(zhí)行第三步;
第三步:輸出a的值,結(jié)束。
(程序框圖如右圖)
程序如下:(“IF-THEN”語(yǔ)句)
INPUT“a,b”;a,b
IF b>a THEN
a=b
END IF
PRINT a
END
點(diǎn)評(píng):1.一個(gè)“好”的算法往往像上面教材例題中的“小技巧”,要熟練、有效的使用它們,則需要在大量的算法設(shè)計(jì)中積累經(jīng)驗(yàn)。我們也可以先根據(jù)自己的思路設(shè)計(jì)算法,再與 “成形”的、高效的、優(yōu)秀的算法比較,改進(jìn)思路,改進(jìn)算法,以避免重復(fù)計(jì)算等問題,提高算法設(shè)計(jì)的水平!
2.我們?cè)谄匠5挠?xùn)練中盡可能的少引用變量,過多的變量不僅會(huì)使得算法和程序變得復(fù)雜,而且不利于計(jì)算機(jī)的執(zhí)行。為此,我們?cè)诰毩?xí)中要積極思考盡可能少引入變量以及如何才能少引入變量。
例6.高等數(shù)學(xué)中經(jīng)常用到符號(hào)函數(shù),符號(hào)函數(shù)的定義為,試編寫程序輸入x的值,輸出y的值。
程序一:(嵌套結(jié)構(gòu))
程序框圖:(右圖)
程序語(yǔ)言:
INPUT x
IF x>0 THEN
y=1
ELSE
IF x=0 THEN
y=0
ELSE
y=-1
END IF
END IF
PRINT y
END
程序二:(疊加結(jié)構(gòu))
程序框圖:
程序如下:
INPUT x
IF x>0 THEN
y=1
END IF
IF x=0 THEN
y=0
END IF
IF x<0 THEN
y=-1
END IF
PRINT y
END
點(diǎn)評(píng):1.條件結(jié)構(gòu)的差異,造成程序執(zhí)行的不同。當(dāng)代入x的數(shù)值時(shí),“程序一”先判斷外層的條件,依次執(zhí)行不同的分支,才有可能判斷內(nèi)層的條件;而“程序二”中執(zhí)行了對(duì)“條件1”的判斷,同時(shí)也對(duì)“條件2”進(jìn)行判斷,是按程序中條件語(yǔ)句的先后依次判斷所有的條件,滿足哪個(gè)條件就執(zhí)行哪個(gè)語(yǔ)句。
5.循環(huán)語(yǔ)句
(1)當(dāng)型循環(huán)語(yǔ)句
當(dāng)型(WHILE型)語(yǔ)句的一般格式為:
WHILE 條件
循環(huán)體
WEND
說明:計(jì)算機(jī)執(zhí)行此程序時(shí),遇到WHILE語(yǔ)句,先判斷條件是否成立,如果成立,則執(zhí)行WHILE和WEND之間的循環(huán)體,然后返回到WHILE語(yǔ)句再判斷上述條件是否成立,如果成立,再執(zhí)行循環(huán)體,這個(gè)過程反復(fù)執(zhí)行,直到一次返回到WHILE語(yǔ)句判斷上述條件不成立為止,這時(shí)不再執(zhí)行循環(huán)體,而是跳到WEND語(yǔ)句后,執(zhí)行WEND后面的語(yǔ)句。因此當(dāng)型循環(huán)又稱“前測(cè)試型”循環(huán),也就是我們經(jīng)常講的“先測(cè)試后執(zhí)行”、“先判斷后循環(huán)”。
(2)直到型循環(huán)語(yǔ)句
直到型(UNTIL型)語(yǔ)句的一般格式為:
DO
循環(huán)體
LOOP UNTIL 條件
說明:計(jì)算機(jī)執(zhí)行UNTIL語(yǔ)句時(shí),先執(zhí)行DO和LOOP UNTIL之間的循環(huán)體,然后判斷 “LOOP UNTIL”后面的條件是否成立,如果條件成立,返回DO語(yǔ)句處重新執(zhí)行循環(huán)體。這個(gè)過程反復(fù)執(zhí)行,直到一次判斷 “LOOP UNTIL”后面的條件條件不成立為止,這時(shí)不再返回執(zhí)行循環(huán)體,而是跳出循環(huán)體執(zhí)行“LOOP UNTIL 條件”下面的語(yǔ)句。
因此直到型循環(huán)又稱“后測(cè)試型”循環(huán),也就是我們經(jīng)常講的“先執(zhí)行后測(cè)試”、“先循環(huán)后判斷”。
4.條件語(yǔ)句
(1)“IF-THEN-ELSE”語(yǔ)句
格式:
IF 條件 THEN
語(yǔ)句1
ELSE
語(yǔ)句2
END IF
說明:在“IF-THEN-ELSE”語(yǔ)句中,“條件”表示判斷的條件,“語(yǔ)句1”表示滿足條件時(shí)執(zhí)行的操作內(nèi)容;“語(yǔ)句2”表示不滿足條件時(shí)執(zhí)行的操作內(nèi)容;END IF表示條件語(yǔ)句的結(jié)束。計(jì)算機(jī)在執(zhí)行“IF-THEN-ELSE”語(yǔ)句時(shí),首先對(duì)IF后的條件進(jìn)行判斷,如果符合條件,則執(zhí)行THEN后面的“語(yǔ)句1”;若不符合條件,則執(zhí)行ELSE后面的“語(yǔ)句2”。
(2)“IF-THEN”語(yǔ)句
格式:
IF 條件 THEN
語(yǔ)句
END IF
說明:“條件”表示判斷的條件;“語(yǔ)句”表示滿足條件時(shí)執(zhí)行的操作內(nèi)容,條件不滿足時(shí),直接結(jié)束判斷過程;END IF表示條件語(yǔ)句的結(jié)束。計(jì)算機(jī)在執(zhí)行“IF-THEN”語(yǔ)句時(shí),首先對(duì)IF后的條件進(jìn)行判斷,如果符合條件就執(zhí)行THEN后邊的語(yǔ)句,若不符合條件則直接結(jié)束該條件語(yǔ)句,轉(zhuǎn)而執(zhí)行其它后面的語(yǔ)句。
3.賦值語(yǔ)句
賦值語(yǔ)句的一般格式:變量=表達(dá)式
賦值語(yǔ)句中的“=”稱作賦值號(hào)
作用:賦值語(yǔ)句的作用是將表達(dá)式所代表的值賦給變量;
要求:
(1)賦值語(yǔ)句左邊只能是變量名字,而不是表達(dá)式,右邊表達(dá)式可以是一個(gè)常量、變量或含變量的運(yùn)算式。如:2=x是錯(cuò)誤的;
(2)賦值號(hào)的左右兩邊不能對(duì)換。賦值語(yǔ)句是將賦值號(hào)右邊的表達(dá)式的值賦給賦值號(hào)左邊的變量。如“A=B”“B=A”的含義運(yùn)行結(jié)果是不同的,如x=5是對(duì)的,5=x是錯(cuò)的,A+B=C是錯(cuò)的,C=A+B是對(duì)的。
(3)不能利用賦值語(yǔ)句進(jìn)行代數(shù)式的演算。(如化簡(jiǎn)、因式分解、解方程等),如
這是實(shí)現(xiàn)不了的。在賦值號(hào)右邊表達(dá)式中每一個(gè)變量的值必須事先賦給確定的值。在一個(gè)賦值語(yǔ)句中只能給一個(gè)變量賦值。不能出現(xiàn)兩個(gè)或以上的“=”。但對(duì)于同一個(gè)變量可以多次賦值。
2.輸出語(yǔ)句
輸出語(yǔ)句的一般格式:PRINT“提示內(nèi)容”;表達(dá)式
例如:PRINT“S=”;S
功能:實(shí)現(xiàn)算法輸出信息(表達(dá)式)
要求:
(1)表達(dá)式是指算法和程序要求輸出的信息;
(2)提示內(nèi)容提示用戶要輸出的是什么信息,提示內(nèi)容必須加雙引號(hào),提示內(nèi)容要用分號(hào)和表達(dá)式分開。
(3)如同輸入語(yǔ)句一樣,輸出語(yǔ)句可以一次完成輸出多個(gè)表達(dá)式的功能,不同的表達(dá)式之間可用“,”分隔;輸出語(yǔ)句還可以是“提示內(nèi)容1”;表達(dá)式1,“提示內(nèi)容2”;表達(dá)式2,“提示內(nèi)容3”;表達(dá)式3,……”的形式;例如:PRINT “a,b,c:”;a,b,c。
1.輸入語(yǔ)句
輸入語(yǔ)句的格式:INPUT “提示內(nèi)容”; 變量
例如:INPUT “x=”; x功能:實(shí)現(xiàn)算法的輸入變量信息(數(shù)值或字符)的功能。
要求:
(1)輸入語(yǔ)句要求輸入的值是具體的常量;
(2)提示內(nèi)容提示用戶輸入的是什么信息,必須加雙引號(hào),提示內(nèi)容 “原原本本”的在計(jì)算機(jī)屏幕上顯示,提示內(nèi)容與變量之間要用分號(hào)隔開;
(3)一個(gè)輸入語(yǔ)句可以給多個(gè)變量賦值,中間用“,”分隔;輸入語(yǔ)句還可以是““提示內(nèi)容1”;變量1,“提示內(nèi)容2”;變量2,“提示內(nèi)容3”;變量3,……”的形式。例如:INPUT“a=,b=,c=,”;a,b,c。
百度致信 - 練習(xí)冊(cè)列表 - 試題列表
湖北省互聯(lián)網(wǎng)違法和不良信息舉報(bào)平臺(tái) | 網(wǎng)上有害信息舉報(bào)專區(qū) | 電信詐騙舉報(bào)專區(qū) | 涉歷史虛無(wú)主義有害信息舉報(bào)專區(qū) | 涉企侵權(quán)舉報(bào)專區(qū)
違法和不良信息舉報(bào)電話:027-86699610 舉報(bào)郵箱:58377363@163.com