0  445754  445762  445768  445772  445778  445780  445784  445790  445792  445798  445804  445808  445810  445814  445820  445822  445828  445832  445834  445838  445840  445844  445846  445848  445849  445850  445852  445853  445854  445856  445858  445862  445864  445868  445870  445874  445880  445882  445888  445892  445894  445898  445904  445910  445912  445918  445922  445924  445930  445934  445940  445948  447090 

在設(shè)計算法的過程中,解決問題的基本思想常常很簡單、很清楚,但表述參與運(yùn)算的數(shù)值的頻頻變換卻很麻煩。為了解決這個問題,需要在程序中引入變量。前面通過對函數(shù)概念的學(xué)習(xí),我們就已經(jīng)了解變量的含義:在研究問題的過程中可以取代不同數(shù)值的量稱為變量。

程序中一些重要的函數(shù)也很有用處,如取平方根函數(shù)SQR(x)=|x|,取絕對值函數(shù)ABS(x)=。

變量與函數(shù)是中學(xué)數(shù)學(xué)里面最重要的和最基本的概念,在算法的設(shè)計里面仍然發(fā)揮著重要的和最基本的作用,它們會使得算法的表達(dá)變得非常整潔、清楚。

1.賦值語句在程序運(yùn)行時給變量賦值;“=”的右側(cè)必須是表達(dá)式,左側(cè)必須是變量;一個語句只能給一個變量賦值;有計算功能;將一個變量的值賦給另一個變量時,前一個變量的值保持不變;可先后給一個變量賦多個不同的值,但變量的取值只與最后一次賦值有關(guān)。

試題詳情

2.累加變量是最終的輸出結(jié)果。每進(jìn)入一次循環(huán)體隨著計數(shù)變量改變而改變。累加變量的初始值通常為0。

試題詳情

1.計數(shù)變量的作用一般是統(tǒng)計循環(huán)體執(zhí)行的次數(shù),改變循環(huán)條件的取值,為結(jié)束循環(huán)作準(zhǔn)備。譬如:計算等差、等比數(shù)列的前n項的和,n就是計數(shù)變量的臨界值,在當(dāng)型結(jié)構(gòu)中“小于等于n”維持循環(huán),而在直到型循環(huán)結(jié)構(gòu)中“大于n”跳出循環(huán)。

試題詳情

2.條件語句的嵌套可多于兩層,可以表達(dá)算法步驟中的多重限制條件。

題型4:循環(huán)語句

例7.設(shè)計一個計算1×3×5×7×…×99的算法,編寫算法程序。

解析:

算法如下:

第一步:s=1;

第二步:i=3;

第三步:s=s×i;

第四步:i=i+2;

第五步:如果i≤99,那么轉(zhuǎn)到第三步;

第六步:輸出s;

程序如下:(“WHILE型”循環(huán)語句)

s=1

i=3

WHILE  i<=99

s=s*i

i=i+2

WEND

PRINT  s

END

點評:你能用“UNTIL”型循環(huán)語句表示“典例1”中的程序嗎?

例8.編寫一個程序,求1!+2!+…+10!的值。

解析:這個問題是求前10個正整數(shù)的階乘之和,可以用“WHILE+ WHILE”循環(huán)嵌套語句格式來實現(xiàn)。

程序結(jié)構(gòu)要做到如下步驟:

①處理“N!”的值;(注:處理N!值的變量就是一個內(nèi)循環(huán)變量)

②累加“N!”的值。(注:累加N!值的變量就是一個外循環(huán)變量)

顯然,通過10次循環(huán)可分別求出1!、2!、…、10!的值,并同時累加起來, 可求得S的值。而求T=N!,又可以用一個循環(huán)(內(nèi)循環(huán))來實現(xià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

上面程序中哪個變量是內(nèi)循環(huán)變量,哪個變量是外循環(huán)變量?

(1)內(nèi)循環(huán)變量:j,t

(2)外循環(huán)變量:s,i

“典例2”程序是一個的“WHILE+WHILE”型循環(huán)嵌套語句格式。這是一個比較好想的方法,但實際上對于求n!,我們也可以根據(jù)求出的(n-1)!乘上n即可得到,而無需重新從1再累乘到n。

程序可改為:

s=0

i=1

j=1

WHILE i<=10

j=j*i

s=s+j

i=i+1

WEND

PRINT s

END

顯然第二個程序的效率要比第一個高得多。第一程序要進(jìn)行1+2+…+10=55次循環(huán),而第二程序進(jìn)行10次循環(huán)。如題目中求的是1!+2!+…+1000!,則兩個程序的效率區(qū)別更明顯。

點評:解決具體的構(gòu)造循環(huán)語句的算法問題,要盡可能的少引入循環(huán)變量,否則較多的變量會使得設(shè)計程序比較麻煩,并且較多的變量會使得計算機(jī)占用大量的系統(tǒng)資源,致使系統(tǒng)緩慢。另外,也盡可能使得循環(huán)嵌套的層數(shù)少,否則也浪費(fèi)計算機(jī)的系統(tǒng)資源。

題型5:實際應(yīng)用

例9.中國網(wǎng)通規(guī)定:撥打市內(nèi)電話時,如果不超過3分鐘,則收取話費(fèi)0.22元;如果通話時間超過3分鐘,則超出部分按每分鐘0.1元收取通話費(fèi),不足一分鐘按以一分鐘計算。設(shè)通話時間為t(分鐘),通話費(fèi)用y(元),如何設(shè)計一個程序,計算通話的費(fèi)用。

解析:

算法分析:

數(shù)學(xué)模型實際上為:y關(guān)于t的分段函數(shù)。

關(guān)系是如下:

其中[t-3]表示取不大于t-3的整數(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 “請輸入通話時間:”;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

點評:實際應(yīng)用問題,在高考中是一個熱點。如何將實際問題轉(zhuǎn)化成數(shù)學(xué)問題是解題的關(guān)鍵,最后還要用算法步驟和程序進(jìn)行表達(dá)。如:中國網(wǎng)通通話費(fèi)的規(guī)定在數(shù)學(xué)中就是通話時間到通話費(fèi)用的分段函數(shù)。日常生活中的分段函數(shù)問題還有很多:出租車的計費(fèi)問題、個人所得稅問題、銀行利率問題等等。

例10.編寫程序,計算數(shù)列{an}的前20項的和。(其中數(shù)列的前幾項分別為1,1,2,3,5,8,……)

解析:這是“Fibonacci數(shù)列”的典型特征,從第三項起每一項都是它前兩項的和,即

程序如下:

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

點評:

試題詳情

題型1:輸入、輸出和賦值語句

例1.判斷下列給出的輸入語句、輸出語句和賦值語句是否正確?為什么?

(1)輸入語句 INPUT  a;b;c

(2)輸出語句 A=4

(3)賦值語句 3=B

(4)賦值語句  AB=-2

解析:(1)錯,變量之間應(yīng)用“,”號隔開;

(2)錯,PRINT語句不能用賦值號“=”;

(3)錯,賦值語句中“=”號左右不能互換;

(4)錯,一個賦值語句只能給一個變量賦值。

點評:輸入語句、輸出語句和賦值語句基本上對應(yīng)于算法中的順序結(jié)構(gòu)。輸入語句、輸出語句和賦值語句都不包括“控制轉(zhuǎn)移”,由它們組成的程序段必然是順序結(jié)構(gòu)。

例2.請寫出下面運(yùn)算輸出的結(jié)果。

(1)

(2)

(3)

解析:

(1)16;語句是將a,b和的一半賦值給變量c,語句是將c的平方賦值給d,最后輸出d的值。

(2)1,2,3;語句是將ab的和賦值給c,語句是將的值賦值給了b。

(3)20,30,20;經(jīng)過語句a,b,c的值是20,20,30。經(jīng)過語句a,b,c的值是20,30,30。經(jīng)過語句a,b,c的值是20,30,20。

點評:語句的識別問題是一個逆向性思維,一般我們認(rèn)為我們的學(xué)習(xí)是從算法步驟(自然語言)至程序框圖,再到算法語言(程序)。如果將程序擺在我們的面前時,我們要從識別逐個語句,整體把握,概括程序的功能。

題型2:賦值語句的應(yīng)用

例3.寫出求三個數(shù)a,b,c的方差的程序。

解析:方差是在初中統(tǒng)計內(nèi)容中學(xué)習(xí)過的知識,計算所有數(shù)的方差首先計算所有數(shù)的平均數(shù),通過公式來計算。

算法步驟:

第一步:計算平均數(shù);

第二步:計算方差

第三步:得到的結(jié)果即為所求。

程序如下:

INPUT a,b,c

y=(a+b+c)/3

S=((a-y)2+ (b-y)2+ (c-y)2)/3

PRINT S

END

點評:套用公式求值問題是傳統(tǒng)數(shù)學(xué)求值問題的一種,它是一種典型的順序結(jié)構(gòu),也就是說只通過輸入、輸出和賦值語句就可以完成任務(wù)。解決這類問題的關(guān)鍵是先分析這種問題的解法,即構(gòu)造計算的過程,再寫出算法步驟和流程圖,再翻譯成算法語句即可。

例4.編寫一個程序,要求輸入的兩個正數(shù)ab的值,輸出abba的值。

解析:可以利用INPUT語句輸入兩個正數(shù),然后將abba的值分別賦給兩個變量輸出即可。也可以將abba的底數(shù)和冪數(shù)進(jìn)行交換,故還可以利用賦值語句,采用將兩個變量的值互換的辦法實現(xiàn)。

程序1:

INPUT “a,b:”;a,b

A=a^b

B=b^a

PRINT “ab=”;A,“ba=”;B

END

程序2:

INPUT “a,b:”;ab

A=a^b

PRINT “ab=”;A

x=a

a=b

b=x

A=a^b

PRINT “ab=”;A

END

點評:交換a,b的值可通過下面三個語句來實現(xiàn):

通過引進(jìn)一個變量t實現(xiàn)變量a和b的值的交換,因此只需用賦值語句即可實現(xiàn)算法。在一些較為復(fù)雜的問題算法中經(jīng)常需要對兩個變量的值進(jìn)行交換,因此應(yīng)熟練掌握這種方法。

題型3:條件語句

例5.編寫程序,輸出兩個不相等的實數(shù)a、b的最大值。

解析:要輸出兩個不相等的實數(shù)a、b的最大值,從而想到對a,b的大小關(guān)系進(jìn)行判斷,a,b的大小關(guān)系有兩種情況:(1)a>b;(2)b>a,這也就用到了我們經(jīng)常提及的分類討論的方式,找出兩個數(shù)的最大值。

解:算法一:

第一步:輸入a, b的數(shù)值;

第二步:判斷a,b的大小關(guān)系,若a>b,則輸出a的值,否則輸出b的值。

(程序框圖如右圖)

程序如下:(“IF-THEN-ELSE”語句)

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”語句)

INPUT“a,b”;a,b

IF  b>a  THEN

a=b

END IF

PRINT  a

END

點評:1.一個“好”的算法往往像上面教材例題中的“小技巧”,要熟練、有效的使用它們,則需要在大量的算法設(shè)計中積累經(jīng)驗。我們也可以先根據(jù)自己的思路設(shè)計算法,再與 “成形”的、高效的、優(yōu)秀的算法比較,改進(jìn)思路,改進(jìn)算法,以避免重復(fù)計算等問題,提高算法設(shè)計的水平!

2.我們在平常的訓(xùn)練中盡可能的少引用變量,過多的變量不僅會使得算法和程序變得復(fù)雜,而且不利于計算機(jī)的執(zhí)行。為此,我們在練習(xí)中要積極思考盡可能少引入變量以及如何才能少引入變量。

例6.高等數(shù)學(xué)中經(jīng)常用到符號函數(shù),符號函數(shù)的定義為,試編寫程序輸入x的值,輸出y的值。

程序一:(嵌套結(jié)構(gòu))

程序框圖:(右圖)

程序語言:

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

點評:1.條件結(jié)構(gòu)的差異,造成程序執(zhí)行的不同。當(dāng)代入x的數(shù)值時,“程序一”先判斷外層的條件,依次執(zhí)行不同的分支,才有可能判斷內(nèi)層的條件;而“程序二”中執(zhí)行了對“條件1”的判斷,同時也對“條件2”進(jìn)行判斷,是按程序中條件語句的先后依次判斷所有的條件,滿足哪個條件就執(zhí)行哪個語句。

試題詳情

5.循環(huán)語句

(1)當(dāng)型循環(huán)語句

當(dāng)型(WHILE型)語句的一般格式為:

WHILE  條件

循環(huán)體

WEND

說明:計算機(jī)執(zhí)行此程序時,遇到WHILE語句,先判斷條件是否成立,如果成立,則執(zhí)行WHILE和WEND之間的循環(huán)體,然后返回到WHILE語句再判斷上述條件是否成立,如果成立,再執(zhí)行循環(huán)體,這個過程反復(fù)執(zhí)行,直到一次返回到WHILE語句判斷上述條件不成立為止,這時不再執(zhí)行循環(huán)體,而是跳到WEND語句后,執(zhí)行WEND后面的語句。因此當(dāng)型循環(huán)又稱“前測試型”循環(huán),也就是我們經(jīng)常講的“先測試后執(zhí)行”、“先判斷后循環(huán)”。

(2)直到型循環(huán)語句

直到型(UNTIL型)語句的一般格式為:

DO

循環(huán)體

LOOP  UNTIL  條件

說明:計算機(jī)執(zhí)行UNTIL語句時,先執(zhí)行DO和LOOP  UNTIL之間的循環(huán)體,然后判斷 “LOOP  UNTIL”后面的條件是否成立,如果條件成立,返回DO語句處重新執(zhí)行循環(huán)體。這個過程反復(fù)執(zhí)行,直到一次判斷 “LOOP  UNTIL”后面的條件條件不成立為止,這時不再返回執(zhí)行循環(huán)體,而是跳出循環(huán)體執(zhí)行“LOOP  UNTIL  條件”下面的語句。

因此直到型循環(huán)又稱“后測試型”循環(huán),也就是我們經(jīng)常講的“先執(zhí)行后測試”、“先循環(huán)后判斷”。

試題詳情

4.條件語句

(1)“IF-THEN-ELSE”語句

格式:

IF  條件  THEN

語句1

ELSE

語句2

END  IF

說明:在“IF-THEN-ELSE”語句中,“條件”表示判斷的條件,“語句1”表示滿足條件時執(zhí)行的操作內(nèi)容;“語句2”表示不滿足條件時執(zhí)行的操作內(nèi)容;END  IF表示條件語句的結(jié)束。計算機(jī)在執(zhí)行“IF-THEN-ELSE”語句時,首先對IF后的條件進(jìn)行判斷,如果符合條件,則執(zhí)行THEN后面的“語句1”;若不符合條件,則執(zhí)行ELSE后面的“語句2”。

(2)“IF-THEN”語句

格式:

IF  條件 THEN

語句

END  IF

說明:“條件”表示判斷的條件;“語句”表示滿足條件時執(zhí)行的操作內(nèi)容,條件不滿足時,直接結(jié)束判斷過程;END  IF表示條件語句的結(jié)束。計算機(jī)在執(zhí)行“IF-THEN”語句時,首先對IF后的條件進(jìn)行判斷,如果符合條件就執(zhí)行THEN后邊的語句,若不符合條件則直接結(jié)束該條件語句,轉(zhuǎn)而執(zhí)行其它后面的語句。

試題詳情

3.賦值語句

賦值語句的一般格式:變量=表達(dá)式

賦值語句中的“=”稱作賦值號

作用:賦值語句的作用是將表達(dá)式所代表的值賦給變量;

要求:

(1)賦值語句左邊只能是變量名字,而不是表達(dá)式,右邊表達(dá)式可以是一個常量、變量或含變量的運(yùn)算式。如:2=x是錯誤的;

(2)賦值號的左右兩邊不能對換。賦值語句是將賦值號右邊的表達(dá)式的值賦給賦值號左邊的變量。如“A=B”“B=A”的含義運(yùn)行結(jié)果是不同的,如x=5是對的,5=x是錯的,A+B=C是錯的,C=A+B是對的。

(3)不能利用賦值語句進(jìn)行代數(shù)式的演算。(如化簡、因式分解、解方程等),如

這是實現(xiàn)不了的。在賦值號右邊表達(dá)式中每一個變量的值必須事先賦給確定的值。在一個賦值語句中只能給一個變量賦值。不能出現(xiàn)兩個或以上的“=”。但對于同一個變量可以多次賦值。

試題詳情

2.輸出語句

輸出語句的一般格式:PRINT“提示內(nèi)容”;表達(dá)式

例如:PRINT“S=”;S

功能:實現(xiàn)算法輸出信息(表達(dá)式)

要求:

(1)表達(dá)式是指算法和程序要求輸出的信息;

(2)提示內(nèi)容提示用戶要輸出的是什么信息,提示內(nèi)容必須加雙引號,提示內(nèi)容要用分號和表達(dá)式分開。

(3)如同輸入語句一樣,輸出語句可以一次完成輸出多個表達(dá)式的功能,不同的表達(dá)式之間可用“,”分隔;輸出語句還可以是“提示內(nèi)容1”;表達(dá)式1,“提示內(nèi)容2”;表達(dá)式2,“提示內(nèi)容3”;表達(dá)式3,……”的形式;例如:PRINT “a,b,c:”;a,b,c。

試題詳情

1.輸入語句

輸入語句的格式:INPUT “提示內(nèi)容”; 變量

例如:INPUT “x=”; x功能:實現(xiàn)算法的輸入變量信息(數(shù)值或字符)的功能。

要求:

(1)輸入語句要求輸入的值是具體的常量;

(2)提示內(nèi)容提示用戶輸入的是什么信息,必須加雙引號,提示內(nèi)容 “原原本本”的在計算機(jī)屏幕上顯示,提示內(nèi)容與變量之間要用分號隔開;

(3)一個輸入語句可以給多個變量賦值,中間用“,”分隔;輸入語句還可以是““提示內(nèi)容1”;變量1,“提示內(nèi)容2”;變量2,“提示內(nèi)容3”;變量3,……”的形式。例如:INPUT“a=,b=,c=,”;ab,c。

試題詳情


同步練習(xí)冊答案