版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.“ 程序”工作區(qū)的使用 - 269 -第十章 “程序”工作區(qū)的使用如果你精通程序設(shè)計(jì)或接觸過(guò)程序設(shè)計(jì),想要使用工作區(qū)中的“程序”選項(xiàng)卡,那就不用吹灰之力;可也許你根本就沒(méi)接觸過(guò)程序設(shè)計(jì),那也不用擔(dān)心,因?yàn)楝F(xiàn)在我們就可以開始學(xué)習(xí)如何使用該選項(xiàng)卡,輕輕松松地你就會(huì)發(fā)現(xiàn)其實(shí)也可以“設(shè)計(jì)程序”的。不過(guò)無(wú)論你是否有程序設(shè)計(jì)的經(jīng)驗(yàn),通過(guò)這里的學(xué)習(xí)你總會(huì)有些收獲的,只是你的目的可能不同。首先來(lái)認(rèn)識(shí)一下“程序”選項(xiàng)卡,打開超級(jí)畫板,然后單擊工作區(qū)最下一行的“程序”;如圖6-1,工作區(qū)的狀態(tài)就是處于“程序”選項(xiàng),一個(gè)空白的工作狀態(tài)就由你去發(fā)揮,我們所要進(jìn)行的“程序設(shè)計(jì)”就是在這里完成。大概你也發(fā)現(xiàn),當(dāng)鼠標(biāo)在該
2、選項(xiàng)卡的編輯框中單擊(即在工作區(qū)空白處)時(shí),在作圖區(qū)左上角會(huì)出現(xiàn)一個(gè)圓角矩形,所有的輸入及輸出在這個(gè)圓角矩形中都將有顯示,其實(shí)基本上就是工作區(qū)中的輸入及輸出,只不過(guò)字體的大小不同而已,當(dāng)然這樣還可以給你方便的觀察。圖6-1 “程序”選項(xiàng)卡超級(jí)畫板程序編寫中的幾個(gè)基本規(guī)定:(1)在每個(gè)語(yǔ)句最后都必需加以英文逗號(hào)“;”,用來(lái)標(biāo)示該語(yǔ)句結(jié)束;計(jì)算機(jī)就是把上一語(yǔ)句的結(jié)束到最近的“;”之間看作為一個(gè)語(yǔ)句,因此逗號(hào)“;”是每個(gè)語(yǔ)句所必須的,而且它規(guī)定寫在語(yǔ)句的結(jié)束;(2)以“”開頭,且以“#”結(jié)尾的是上一語(yǔ)句、分程序或函數(shù)經(jīng)計(jì)算機(jī)計(jì)算后的返回值,用戶不能對(duì)之進(jìn)行編輯;(3)需要執(zhí)行某個(gè)語(yǔ)句、分程序或函數(shù),
3、在語(yǔ)句、分程序或函數(shù)實(shí)體最后按“Ctrl+Enter”或按數(shù)字鍵盤的“Enter”鍵。(4)分程序或函數(shù)的返回值(即結(jié)果)將是該分程序或函數(shù)最后一次所計(jì)算所得的值。一、運(yùn)算符圖6-2 一個(gè)簡(jiǎn)單語(yǔ)句圖6-3 語(yǔ)句結(jié)果如圖6-2,就是一個(gè)簡(jiǎn)單的超級(jí)畫板程序,當(dāng)然其實(shí)它就只是一個(gè)語(yǔ)句而已,圖6-3便是該語(yǔ)句執(zhí)行(按“Ctrl+Enter”或小“Enter”鍵)后的結(jié)果,以及在作圖區(qū)中的顯示結(jié)果。很明顯其作用就是用來(lái)計(jì)算表達(dá)式“2+33-2*4”(即)的值,其中“;”是用來(lái)標(biāo)示該結(jié)束;而“”就是表示指數(shù),是一個(gè)運(yùn)算符,除此之外,超級(jí)畫板中還有下列各種運(yùn)算符:算術(shù)運(yùn)算符+-*/加減 / 負(fù)乘除冪關(guān)系運(yùn)算
4、符=!=Cos (x)”的關(guān)系運(yùn)算結(jié)果為1(即為真)。(3)邏輯運(yùn)算符是用于進(jìn)行邏輯值運(yùn)算的操作符;我們知道邏輯值有且只有兩個(gè):真(True)與假(False),如果用數(shù)字來(lái)表示就是非0實(shí)數(shù)(表示True,一般地,選擇數(shù)字1)與0(表示False)。邏輯與“&”,通俗地說(shuō)就類似于算術(shù)運(yùn)算符中的“*”,當(dāng)且僅當(dāng)左、右兩數(shù)或表達(dá)式為True時(shí),運(yùn)算結(jié)果才為1(即True),否則運(yùn)算結(jié)果為0(即False);邏輯或“|”,類似地就有點(diǎn)象算術(shù)運(yùn)算符中的“+”,當(dāng)且僅當(dāng)左、右兩數(shù)或表達(dá)式為0(即False)時(shí),運(yùn)算結(jié)果才為0(即False),否則運(yùn)算結(jié)果為1(即True),不過(guò)這里可沒(méi)有進(jìn)位的概念;邏輯
5、非“!”,這好象集合中的取反,邏輯值只有兩個(gè),所以“真”(1)的反就“假”(0),“假”的反就是“真”(1)。因此有下表的運(yùn)算關(guān)系:邏輯與“&”1 & 1 = 11 & 0 = 00 & 1 = 00 & 0 = 0邏輯或“|”1 | 1 = 11 | 0 = 10 | 1 = 10 | 0 = 0邏輯非“!”! 1 = 0! 0 = 1注:上面各式“=”左邊表達(dá)式中的“1”可以換成任何非0數(shù)字,當(dāng)然右邊的值式不會(huì)變的,要么是0,要么就是1。 (4)賦值運(yùn)算符“=”,這可不是我們通常用作等號(hào)意思。所謂賦值就是一個(gè)值或表達(dá)式賦給另一個(gè)量;這個(gè)“量”就是程序設(shè)計(jì)當(dāng)中相對(duì)常量而言的另一個(gè)基本重要的量
6、,程序變量,簡(jiǎn)稱變量。正是在程序中使用了變量,才模擬了數(shù)據(jù)的運(yùn)動(dòng)與變化,使得解題過(guò)程能有問(wèn)題空間狀態(tài)邁向解空間狀態(tài),因此學(xué)會(huì)正確使用變量被稱為程序設(shè)計(jì)的“第一課”。不過(guò)不用害怕,只是要學(xué)會(huì)用的話并不難。兩個(gè)簡(jiǎn)單的賦值:“x = 2”,這樣在以后的計(jì)算過(guò)程中只要遇到“x”,計(jì)算機(jī)都將會(huì)用值2來(lái)代替,直到你再次改變它;“val = sin(t) + cos(t)”,賦值以后“val”將是“sin(t) + cos(t)”的代表,當(dāng)然如果你喜歡把“val”代表“sin(t)*cos(t)”的話,那只要你對(duì)“val”再進(jìn)行賦值“val = sin(x)*cos(x)”就可以了。圖6-4,為上述各語(yǔ)句的
7、結(jié)果。圖6-4 各語(yǔ)句結(jié)果從上面知道,變量的值是可以改變的,也就是說(shuō)可以對(duì)變量進(jìn)行多次賦值,但變量的值將是你最后一次對(duì)它所賦的值;這就是變量的優(yōu)點(diǎn):需要的時(shí)候就可以改變;語(yǔ)句“i = i + 1;” 為典型的變數(shù)再賦值語(yǔ)句。變量可以分為:局部變數(shù)和全局變量。這兩種變量用法是相同的,只是所用在地方是不同的,因此其用處也就跟著有不同了。局部變量,一般是用在函數(shù)體中的變量,它只在該函數(shù)體中起作用,一旦退出該函數(shù)它的值將會(huì)有所變化:若在此之前該變量已經(jīng)被賦值,那么它的值將是在該函數(shù)中最后所賦的值;若在此之前該變量沒(méi)有被賦值,那么它將繼續(xù)沒(méi)有任何值,與沒(méi)有進(jìn)行過(guò)的變量是一樣的。全局變量,相對(duì)來(lái)說(shuō)就是不在
8、函數(shù)體中的變量,一般用在塊語(yǔ)句,單個(gè)賦值語(yǔ)句當(dāng)中,它的值將在整頁(yè)面(該文檔中的該頁(yè))中的程序中起作用;當(dāng)然如果它在某個(gè)函數(shù)中被再定義賦值的話,它的值同樣是會(huì)被改變的,就像是被再賦值一樣。為了更清楚些明白這種變數(shù)的不同,看看如圖6-5的程序:圖6-5 變數(shù)但不管是局部變量還是全局變量,在使用時(shí)都需要注意以下幾點(diǎn):1、在超級(jí)畫板中變量的名稱的長(zhǎng)度是不能超過(guò)4個(gè)字符的,若超過(guò)4個(gè)字符計(jì)算機(jī)將把第4個(gè)字符后的所有字符忽略掉;2、在變量名稱中第一個(gè)字符必需是英文字符。3、在變量名稱中不可以包含任何標(biāo)點(diǎn)符號(hào),不過(guò)下劃線“_”除外;因此變量的名稱只能含有英文字母、數(shù)字或下劃線“_”, 例如temp、temp
9、1、temp2、temp_1、a等都是合法的變量名稱,而1temp、a*1、a!、?temp等都是非法的變量名稱。4、給變量取名字的時(shí)候,一般地,這個(gè)名稱應(yīng)該含有一定的意義,這樣會(huì)方便你將來(lái)閱讀你自己的程序。5、變數(shù)的名字是有大小寫之分,如Temp與temp是不同的兩個(gè)變數(shù)。正和我們平時(shí)進(jìn)行算術(shù)運(yùn)算一樣,在超級(jí)畫板中各種運(yùn)算符之間同樣也有優(yōu)先級(jí)別,也就是說(shuō)在相鄰的兩種運(yùn)算符中,應(yīng)先執(zhí)行哪一種。超級(jí)畫板中的各種運(yùn)算符的優(yōu)先級(jí)別如下表:優(yōu)先級(jí)運(yùn)算符結(jié)合性高 低單目算術(shù)運(yùn)算符: -(負(fù))雙目算術(shù)運(yùn)算符* /+ -(減)關(guān)系運(yùn)算符 = !=邏輯運(yùn)算符&|賦值:=注:1、+(加)、-(減)、*(乘)、/
10、(除)等運(yùn)算時(shí)要求兩個(gè)操作數(shù),這類運(yùn)算符稱為雙目(二元)運(yùn)算符;而-(負(fù))只要求一個(gè)操作數(shù),這類運(yùn)算符成為單目(一元)運(yùn)算符;2、所謂“結(jié)合性”就是兩個(gè)同優(yōu)先級(jí)的運(yùn)算相鄰時(shí),應(yīng)按從左到右的順序運(yùn)算,還是按從右到左的順序運(yùn)算;例如表達(dá)式“2+33-2*4”的運(yùn)算順序就是從左到右;而賦值表達(dá)式“a = 4”的順序運(yùn)算從右到左,即:a 4;一般地,單目算術(shù)運(yùn)算符是從右到左結(jié)合的,而雙目算術(shù)運(yùn)算符是從左到右的;3、一般地,單目算術(shù)運(yùn)算符的優(yōu)先級(jí)別高于雙目算術(shù)運(yùn)算符是從左到右的優(yōu)先級(jí)別。4、每個(gè)表達(dá)式都產(chǎn)生一個(gè)單一的值。當(dāng)運(yùn)算對(duì)象的類型相同時(shí),運(yùn)算結(jié)果的類型也相同;當(dāng)運(yùn)算對(duì)象的類型不相同時(shí),要按一定的規(guī)
11、則進(jìn)行運(yùn)算對(duì)象類型的轉(zhuǎn)換。二、語(yǔ)句語(yǔ)句簡(jiǎn)單地說(shuō)就是操作指令。在超級(jí)畫板中有下面幾種語(yǔ)句:1、表達(dá)式語(yǔ)句在一個(gè)表達(dá)式后加一個(gè)分號(hào)。例如我們前面說(shuō)過(guò)的“2+33-2*4;”就是一個(gè)表達(dá)式語(yǔ)句。2、聲明語(yǔ)句在超級(jí)畫板中只有聲明變量一種聲明語(yǔ)句,這和其它編程語(yǔ)言是不同的。3、空語(yǔ)句只有一個(gè)分號(hào)的語(yǔ)句就構(gòu)成一個(gè)空語(yǔ)句,一般來(lái)說(shuō)空語(yǔ)句沒(méi)有任何實(shí)際作用;主要出現(xiàn)在語(yǔ)法上要求必需有一條語(yǔ)句但沒(méi)有任何實(shí)際操作的場(chǎng)合。4、塊語(yǔ)句塊語(yǔ)句也可稱為復(fù)合語(yǔ)句、分程序;塊語(yǔ)句它有若干條表達(dá)式語(yǔ)句、聲明語(yǔ)句、空語(yǔ)句組成,必須要用一對(duì)花括號(hào)“”括起來(lái),而且在花括號(hào)外不再需要寫分號(hào)“;”。5、流程控制語(yǔ)句一般地,程序中的各個(gè)語(yǔ)句
12、的執(zhí)行順序是按書寫順序,而流程控制語(yǔ)句可以改變這種執(zhí)行順序,使得程序中的語(yǔ)句的執(zhí)行順序多樣化。按其呈現(xiàn)的控制結(jié)構(gòu)分為:順序語(yǔ)句、條件語(yǔ)句、循環(huán)語(yǔ)句。順序、條件、循環(huán)并稱為算法的三種基本流程控制結(jié)構(gòu),而算法是一個(gè)好程序所必需著中考慮的因素。6、注釋語(yǔ)句在某一行“/”后的表達(dá)式、語(yǔ)句、符號(hào)等等任何程序都將被計(jì)算機(jī)忽略,相當(dāng)于不存在,它不參加任何計(jì)算;其作用是對(duì)程序加以說(shuō)明,使得程序容易讀懂,它可以出現(xiàn)在程序的任何位置中。如下圖為注釋語(yǔ)句的用法:2.1 if else 條件語(yǔ)句1、if else的基本結(jié)構(gòu)if else的基本結(jié)構(gòu)形式如下:if (判斷表達(dá)式) 判斷表達(dá)式為True(非0)#“真”語(yǔ)句
13、; else 判斷表達(dá)式為False(0)#“假”語(yǔ)句;功能:進(jìn)入該結(jié)構(gòu),首先測(cè)試if后的“判斷表達(dá)式”,當(dāng)該表達(dá)式的測(cè)試結(jié)果為“真”(即判斷表達(dá)式結(jié)果不為0,True)時(shí),則執(zhí)行if語(yǔ)句:“真”語(yǔ)句,而else語(yǔ)句是不會(huì)執(zhí)行的;若測(cè)試結(jié)果為“假”(即判斷表達(dá)式結(jié)果為0,F(xiàn)alse)時(shí),則執(zhí)行else語(yǔ)句:“假”語(yǔ)句,而if語(yǔ)句是不會(huì)執(zhí)行的;所以if else語(yǔ)句計(jì)算機(jī)會(huì)且僅會(huì)執(zhí)行其中的某個(gè)。在“真”語(yǔ)句或“假”語(yǔ)句所處的一對(duì)括號(hào)中,你可以寫多條語(yǔ)句,這就是我們前面講過(guò)的塊語(yǔ)句。例1,如圖6-6:圖6-6 例1分析:3顯然是大于2,所以“3=2”的測(cè)試結(jié)果為真(True),所以計(jì)算機(jī)執(zhí)行if語(yǔ)
14、句,對(duì)val進(jìn)行賦值32,而else語(yǔ)句被忽略而不執(zhí)行,str在該條件語(yǔ)句執(zhí)行結(jié)束后沒(méi)有任何賦值;因此語(yǔ)句“str;”的結(jié)果(即返回值)為其本身,而“val;”語(yǔ)句的返回值為32。該if else條件語(yǔ)句的返回值為32是因?yàn)樵摋l件語(yǔ)句最后一次的計(jì)算是對(duì)val進(jìn)行賦值,因此返回的值為32。2、if else結(jié)構(gòu)嵌套所謂結(jié)構(gòu)嵌套是指一個(gè)結(jié)構(gòu)中含有另一個(gè)同樣的結(jié)構(gòu)。if else同樣可以進(jìn)行結(jié)構(gòu)嵌套。例2,實(shí)現(xiàn)功能:。程序如圖6-7:圖6-7 例2圖6-8 不同的例2分析:首先給x 賦值為10,因?yàn)?09,所以該條件語(yǔ)句執(zhí)行了第一個(gè)if 語(yǔ)句里的else語(yǔ)句,最后x重新賦值為9;而其它語(yǔ)句在該條件下
15、(x=10)不執(zhí)行。如圖6-8,同樣符合本例的要求,當(dāng)然也許你寫的與這兩種不同,但只要可以達(dá)到目的就可以。程序設(shè)計(jì)就是這樣多樣化,同樣的內(nèi)容可以有多種實(shí)現(xiàn)方法,但一般來(lái)說(shuō)好的程序需要一種好的實(shí)現(xiàn)方法,也就是人們常說(shuō)的算法。3、if 結(jié)構(gòu)其實(shí)在if else結(jié)構(gòu)中,else語(yǔ)句部分是可以省略的;其格式如下:if (判斷表達(dá)式) 判斷表達(dá)式為True(非0)#“真”語(yǔ)句; 判斷表達(dá)式為False(0)時(shí)不執(zhí)行其它語(yǔ)句#例3,實(shí)現(xiàn)功能:取x、y中較大的那個(gè)數(shù)。程序如圖6-9:圖6-10 不同的例3圖6-9 例3分析:注意該例中塊語(yǔ)句(最外一對(duì)化括號(hào)之間的語(yǔ)句)的返回值為0,這是因?yàn)樵搲K語(yǔ)句最后一次進(jìn)
16、行計(jì)算的表達(dá)式為“x 循環(huán)體 #功能:進(jìn)入該結(jié)構(gòu)時(shí),首先對(duì)控制表達(dá)式進(jìn)行計(jì)算,若該控制表達(dá)式的測(cè)試結(jié)果不為0,即結(jié)果為“真”、True,則執(zhí)行循環(huán)體里的語(yǔ)句;若控制表達(dá)式的測(cè)試結(jié)果不為0,即結(jié)果為“假”、False,則結(jié)束該循環(huán)語(yǔ)句,跳過(guò)while結(jié)構(gòu)。每次執(zhí)行完一次循環(huán)體都要再對(duì)表達(dá)式計(jì)算一次,以決定是進(jìn)行該循環(huán)結(jié)構(gòu)還是跳過(guò)該while結(jié)構(gòu)。例4,實(shí)現(xiàn)功能 (從1一直加到500的值)。程序如圖6-11:圖6-11 例4分析:(1)首先執(zhí)行兩個(gè)賦值運(yùn)算:i 是循環(huán)變量,而sum是用來(lái)記錄從1到i相加的和。(2)進(jìn)入while循環(huán)結(jié)構(gòu),因i開始賦值為1,所以首先計(jì)算控制表達(dá)式“i = 500”的
17、值為“真”(非0),則進(jìn)入循環(huán)體:“sum = sum + i;”,是一個(gè)賦值語(yǔ)句,把(sum + i)計(jì)算所得的值仍然賦給變量sum(變量可以進(jìn)行多次賦值),由于sum初值為0,這樣sum的值就為1了;接著執(zhí)行語(yǔ)句“i = i + 1;”,同樣一個(gè)賦值語(yǔ)句,執(zhí)行完后i值則2。(3)循環(huán)體執(zhí)行完后又對(duì)控制表達(dá)式“i = 500”進(jìn)行計(jì)算,此時(shí)i的值為2,所以“i = 500”的值仍然為“真”(非0),這樣又進(jìn)入循環(huán)體,重復(fù)第(2)步操作直到i的值為501(此時(shí)sum的值為125250)時(shí),控制表達(dá)式“i 循環(huán)體 #功能:(1)進(jìn)入該結(jié)構(gòu)后,先進(jìn)行各項(xiàng)表達(dá)式初始化,而且這些表達(dá)式僅初始化一次。(
18、2)然后進(jìn)行控制表達(dá)式的計(jì)算,若該控制表達(dá)式的測(cè)試結(jié)果不為0,即結(jié)果為“真”、True,則執(zhí)行循環(huán)體里的語(yǔ)句,接著進(jìn)行上述各項(xiàng)表達(dá)式的重新初始化,然后再計(jì)算控制表達(dá)式的值,以決定是進(jìn)行該循環(huán)結(jié)構(gòu)還是跳過(guò)該循環(huán)結(jié)構(gòu)。若控制表達(dá)式的測(cè)試結(jié)果為0,即結(jié)果為“假”、False,則結(jié)束該循環(huán)語(yǔ)句,進(jìn)行該for語(yǔ)句后面的語(yǔ)句計(jì)算。若把for 語(yǔ)句中的“初始化表達(dá)式1,初始化表達(dá)式2,”稱為初始化表達(dá)式,而“重新初始化表達(dá)式1,出現(xiàn)初始化表達(dá)式2,”稱為修正表達(dá)式,那么for語(yǔ)句可以用圖6-12來(lái)表示起循環(huán)控制的原理:循環(huán)體“真”“假”for (初始化表達(dá)式; 控制表達(dá)式; 修正表達(dá)式)圖6-12 for語(yǔ)
19、句的控制原理例5,用for語(yǔ)句實(shí)現(xiàn)例4功能()。程序如圖6-13:圖6-13 例5 分析:該循環(huán)類似于while循環(huán),當(dāng)然很明顯for循環(huán)要比while循環(huán)要緊湊而清晰,只是在運(yùn)用for循環(huán)結(jié)構(gòu)是時(shí)候,一定要注意是先執(zhí)行循環(huán)體,然后再執(zhí)行修正表達(dá)式。其實(shí)對(duì)于for循環(huán)結(jié)構(gòu)來(lái)說(shuō),for后的三個(gè)表達(dá)式語(yǔ)句只是語(yǔ)法上的要求,只要其后有且僅三個(gè)語(yǔ)句就可以,不管其內(nèi)容為何,當(dāng)然就可以是空語(yǔ)句了。因此上例可以寫成下面幾種形式:sum = 0, i = 1;for( ; i = 500 ; ) sum = sum + i;i = i + 1; 或:for (sum = 0, i = 1; i = 500;
20、sum = sum + i, i = i + 1);或:sum = 0, i = 1;for( ; ; )if ( i 500時(shí),執(zhí)行語(yǔ)句“return sum;”,它可以用來(lái)強(qiáng)行跳出任何循環(huán)語(yǔ)句,而且可以是多重循環(huán)嵌套,因此同樣也達(dá)到了相同的目的;語(yǔ)句“return sum;”可以換成語(yǔ)句“break;”,作用相同,一樣可以跳出任何循環(huán)語(yǔ)句,不同是語(yǔ)句“return sum;”將會(huì)把sum的值作為該程序的返回值,而語(yǔ)句“break;”卻把最近一次的計(jì)算結(jié)果當(dāng)作該程序的返回值,即i的值。在超級(jí)畫板中,如果你確認(rèn)是因?yàn)樗姥h(huán)而導(dǎo)致死機(jī)或機(jī)器沒(méi)響應(yīng)等現(xiàn)象時(shí),你可以通過(guò)按“Ctrl + C”組合鍵來(lái)
21、強(qiáng)行中斷正在運(yùn)行的程序。例6,搬磚問(wèn)題:36塊磚,36人搬,男搬4、女搬3、2小孩抬1磚,要求一次搬完,給出一組各需男、女、小孩的數(shù)目。設(shè)男、女、小孩數(shù)各為m、w、c,依題意則有:4*m + 3 * w + c/2 = 36m + w + c = 36兩個(gè)不定方程,但是很顯然,m、w、c必需滿足下列條件:0 m 80 w 120 c 1,函數(shù)返回n*fact(n-1)。fact(n-1)是函數(shù)自己的調(diào)用,因此求fact(n-1)的值,又要進(jìn)行fact(n-2)的計(jì)算,這樣一直循環(huán)到n=1時(shí),函數(shù)返回1,而不再進(jìn)行下去;然后在回過(guò)頭來(lái)將fact(1)乘以2求出fact(2),再求出fact(3)
22、 = 3*fact(2),這樣一次一次往上乘,直到計(jì)算出n*fact(n-1),程序結(jié)束得到fact(n)的值。遞歸過(guò)程不應(yīng)無(wú)限制地進(jìn)行下去,在有限次調(diào)用后,就達(dá)到遞歸調(diào)用的終點(diǎn)得到一個(gè)已知的值(如上例中的fact(1) = 1),然后回代。遞歸是一種非常有用的程序設(shè)計(jì)技術(shù),當(dāng)一個(gè)問(wèn)題蘊(yùn)涵遞歸形式且關(guān)系比較復(fù)雜時(shí),采用遞歸算法往往簡(jiǎn)潔明了,容易理解。在數(shù)學(xué)中有一個(gè)重要的分支學(xué)科分形,就是一個(gè)非常典型的遞歸例子。下面就是通過(guò)本系統(tǒng)超級(jí)畫板使用遞歸算法作出的圖形,程序中的各函數(shù)可參見后面的庫(kù)函數(shù)介紹;下面的兩例中所涉及的背景可參見有關(guān)分形方面的書籍。例1樹/ 程序代碼Tree(p1, p2, n,
23、 max)L = Segment(p1, p2);n = n + 1;if (n max) return max;Hide(L);p3 = DivisionPoint(p1, p2, 1/2);p4 = DivisionPoint(p1, p2, 2);p5 = PointFlexRotate(p4,p3,1,60);p6 = PointFlexRotate(p2,p4,1,-60);Hide(p1, p2, p3, p4, p5, p6);i = n, j = n, k = n, u = n, v = n;Tree(p1, p3, i, max);n = i;Tree(p3, p5, j,
24、max);n = j;Tree(p3, p4, k, max);n = k;Tree(p4, p6, u, max);n = u;Tree(p4, p2, v, max);n = v; Tree(p1, p2, n, max)覆蓋先前定義的函數(shù) # Tree(p1, p2, n, max) # Tree(p1, p2, n, max) #n = 0;p1 = Point(0, -6);p2 = Point(0, 6);圖6-21 分形樹Tree (p1, p2, n, 4); 5 #/ 圖形如圖6-21例2龍曲線/ 程序代碼dragon(p1, p2, n, max)L = Segment(p
25、1, p2);n = n + 1;if (n max) return max;p3 = PointFlexRotate(p2, p1,2(1/2)/2,45);Hide(p1, p2, p3, L);k = n, m = n;dragon(p2, p3, m, max);n = m;dragon(p1, p3, k, max);n = k; dragon(p1, p2, n, max) #n = 0;p1 = Point(1, -4);p2 = Point(1 , 4);dragon(p1, p2, n, 10); 11 #/ 圖形如圖6-22圖6-21 分形樹四、庫(kù)函數(shù)在超級(jí)畫板中,庫(kù)函數(shù)包
26、括:標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)、一般運(yùn)算函數(shù)、三角等式化簡(jiǎn)函數(shù)、圖形函數(shù)及其它系統(tǒng)函數(shù)等五種。4.1、標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)包括下列函數(shù):函數(shù)名稱格式備注1sin正弦sin (a)2cos余弦cos(a)3tg / tan正切tg(a) / tan(a)4ctg / cot余切ctg(a) / cot(a)5sec正割sec(a)6csc余割csc(a)7arcsin反正弦arcsin(a)8arccos反余弦arccos(a)9arctg / arctan反正切arctg(a) / arccot(a)10arcctg / arccot反余切arcctg(a)11abs絕對(duì)值abs(a)12lg常用對(duì)數(shù)l
27、g(a)13ln自然對(duì)數(shù)ln(a)14floor取整floor(a),即值為比a小的最大整數(shù)15ceiling取整ceiling(a)比a大的最小整數(shù)16Mod取模Mod(a, b)Mod(a, b)的值為a整除b的余數(shù),如Mod(9, 2) = 117log對(duì)數(shù)log(a, b)18pow指數(shù)pow(a, b)19sign符號(hào)函數(shù)sign(a, b)注:(1)上述函數(shù)的參數(shù)a或b為實(shí)數(shù)或數(shù)學(xué)表達(dá)式,有“/”表示該函數(shù)可有多種形式(2)所有函數(shù)的函數(shù)名都區(qū)分大小寫4.2、一般運(yùn)算函數(shù)在這類函數(shù)中:Expr表示一個(gè)代數(shù)表達(dá)式,n為整數(shù),Poly為多項(xiàng)式,x為多項(xiàng)式或代數(shù)表達(dá)式中的變量(字母)。p
28、ow(Expr, n)返回值:代數(shù)表達(dá)式作用:對(duì)表達(dá)式Expr進(jìn)行n次乘方例:Pow( x2+1, 2); (x2 + 1)2 #Sqrt(Expr, n)返回值:代數(shù)表達(dá)式作用:對(duì)表達(dá)式Expr開n次方例:Sqrt(x2 + 1)2, 2); | x2+1 | #Factor(Expr)返回值:代數(shù)表達(dá)式作用:對(duì)表達(dá)式Expr進(jìn)行因式分解,結(jié)果為乘積形式例:Factor( x4 + 2*x2 +1); (x2 + 1)2 #Expand(Expr)返回值:代數(shù)表達(dá)式作用:展開表達(dá)式Expr,結(jié)果為多項(xiàng)式的形式例:Expand( (x2 + 1)2 ); x4 + 2*x2 +1 #Degre
29、e(Poly, x)返回值:實(shí)數(shù)作用:計(jì)算出多項(xiàng)式Poly中x的最高指數(shù)例:Degree( x4 + 2*x2 + 1 ); 4 #Coeff(Poly, x , n)返回值:代數(shù)式作用:計(jì)算出多項(xiàng)式Poly中x的次數(shù)為n項(xiàng)的系數(shù)例:Coeff( x4 + 2*x2 + 1, x , 2 ); 2 #Subst(Expr, x, Expr1)返回值:代數(shù)式作用:把表達(dá)式Expr中的變數(shù)x 用表達(dá)式Expr1來(lái)代替例:Subst(x4 + 2*x2 +1, x , y+1); y4+4*y3+8*y2+8*y+4 #ReducGcd( )返回值:0作用:以后運(yùn)算時(shí)分之和分母約分,直到下次改變分之
30、和分母的狀態(tài)例:ReducGcd(); 0 #sin(x)*cos(x) / sin(x); cos(x) #NoReducGcd( )返回值:0作用:以后運(yùn)算時(shí)分之和分母不約分,直到下次改變分之和分母的狀態(tài)例:NoReducGcd(); 0 #sin(x)*cos(x) / sin(x); (sin(x)*coss(x) / (cos(x) #注:運(yùn)算時(shí)分之和分母約分或不約分的狀態(tài)可以隨時(shí)通過(guò)ReducGcd( )與NoReducGcd( )兩函數(shù)來(lái)改變,但系統(tǒng)默認(rèn)狀態(tài)(即原始狀態(tài))為運(yùn)算時(shí)分之和分母約分。DeleteAbs(Expr, nSign, abs )返回值:代數(shù)式作用:去掉表達(dá)式
31、Expr中的絕對(duì)值abs;nSign為 + 或 -(正或負(fù))為指定去絕對(duì)值時(shí)所取的符號(hào);abs意思是多個(gè)絕對(duì)值表達(dá)式,以逗號(hào)“,”分開,當(dāng)然你可以只寫一個(gè),即指定要去絕對(duì)值的表達(dá)式。例:DeleteAbs(abs(x+1)+abs(y+2)+abs(x), -, x+1, x); -2*x+abs(y+2)-1 #DeleteGcd(Expr)返回值:代數(shù)式作用:約去分子和分母的公因子。也許你在上面的用了函數(shù)NoReducGcd(),那么你所得計(jì)算結(jié)果都將不會(huì)化簡(jiǎn),但使用該函數(shù)可以強(qiáng)行分子與分母約分成最簡(jiǎn)化。例:NoReducGcd(); 0 #expr = sin(x)*cos(x)/sin
32、(x); (sin(x)*cos(x)/(sin(x) #DeleteGcd(expr); cos(x) #Timer( )返回值:整數(shù)作用:返回的整數(shù)為從1980年01月01日00:00時(shí)到當(dāng)前時(shí)刻的秒數(shù)例:Timer(); 1017287872 #t1 = Timer( );1234567890;t2 = Timer( );t = t2 -t1; 1 #注:上塊語(yǔ)句表明計(jì)算機(jī)計(jì)算1234567890所花的時(shí)間為1秒。Factorial( n )返回值:整數(shù)作用:計(jì)算n的階層例:Factorial( 10 ); 3628800 #4.3、三角等式化簡(jiǎn)函數(shù)在下列函數(shù)中,nTf表示三角函數(shù)表達(dá)式
33、,a、b 是角;角a、b用來(lái)表明該函數(shù)只對(duì)角a、b進(jìn)行化簡(jiǎn),即指明所需要進(jìn)行化簡(jiǎn)的對(duì)象。如:SinToCos(sin2(x) + sin2(y) + sin2(z), x, y),則該函數(shù)只對(duì)那些含有角x, y的正弦(即對(duì)sin2(x)及sin2(y))進(jìn)行同角三角函數(shù)的轉(zhuǎn)化,而sin2(z)是不進(jìn)行化簡(jiǎn)的;如果是角為2*x,4*a等形式時(shí),則指定角時(shí)要以同樣的形式2*x,4*a,而不是x,a的形式。要下列函數(shù)對(duì)你的三角函數(shù)表達(dá)式起作用,則表達(dá)式中對(duì)應(yīng)的三角函數(shù)一定要完全符合該函數(shù)的條件。SinToCos(nTf, a, b )是用1 cos2(a)來(lái)替換sin2(a),因此在表達(dá)式nTf中只
34、對(duì)次數(shù)大于2的正弦(即sinn(x),n=2)進(jìn)行化簡(jiǎn),而sin(x)不進(jìn)行化簡(jiǎn)。如“SinToCos(sin3(x) + sin(x), x)”的結(jié)果為 “-sin(x)*cos2(x)+2*sin(x) ”。SystemIni( )返回值:0作用:取消所有三角函數(shù)的值和角的范圍計(jì)算過(guò)程中我們可以對(duì)三角函數(shù)進(jìn)行賦值,以及設(shè)置角的范圍,因此通過(guò)該函數(shù)就可以取消這些約束,從而使得其為初始值。例:SetTfValue(sin(x), 1/2); / sin(x) = 1/2, 設(shè)置三角函數(shù)的值 (1)/(2) #TfEvaluate( sin2(x) ); /三角函數(shù)求值 (1)/(4) #Sys
35、temIni(); 0 #TfEvaluate( sin2(x) ); 函數(shù)TfEvaluate求值不能成功 #注:上例部分函數(shù)可參見后面解釋。ReasoningNum()返回值:0作用:三角函數(shù)的化簡(jiǎn)僅對(duì)分子,分母不進(jìn)行化簡(jiǎn)例:ReasoningNum(); 0 #SinToCos(sin2(x)+cos(x)/sin2(x), x); (-cos2(x)+cos(x)+1)/(sin2(x) #ReasoningDen()返回值:0作用:三角函數(shù)的化簡(jiǎn)僅對(duì)分母,分子不進(jìn)行化簡(jiǎn)例:ReasoningDen(); 0 #SinToCos(sin2(x)+cos(x) / sin2(x), x)
36、; (sin2(x)+cos(x) / (-cos2(x)+1) #ReasoningAll()返回值:0作用:三角函數(shù)的化簡(jiǎn)對(duì)分子和分母例:ReasoningAll(); 0 #SinToCos(sin2(x)+cos(x) / sin2(x), x); (-cos2(x)+cos(x)+1)/(-cos2(x)+1) #SetAngleRange(sRange)返回值:0作用:設(shè)置角的范圍。sRange為一個(gè)不等式,如:0 a 90。例:SetAngleRange(0a 0 #同角三角函數(shù)之間的關(guān)系ConstToSinCos(nTf , a)返回值:三角函數(shù)表達(dá)式作用:n = n*(sin
37、2(a) + cos2(x)例:ConstToSinCos(2, x); -sin(x)*cos2(x)+sin(x)+cos(x) #SinToCos(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:sin2 (a) = 1 cos2 (a)例:SinToCos(sin3 (x) + sin(x), x); -sin(x)*cos2(x)+sin(x)+cos(x) #CosToSin(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:cos2 (a) = 1 sin2 (a)例:CosToSin(cos4(x) + cos(x) + cos2(y), x); sin4(x)-2*si
38、n2(x)+cos(x)+cos2(y)+1 #CotToTan(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:cot(a) = 1/tan(a)例:CotToTan(cot(x)+cot2(x), x); (tan(x)+1)/(tan2(x) #TanToCot(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:tan(a) = 1/cot(a)例:TanToCot(tan(x)+tan2(x), x); (cot(x)+1)/(cot2(x) #SecToCos(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:sec(a) = 1/cos(a)例:SecToCos(sec(x
39、)+sec2(x), x); (cos(x)+1)/(cos2(x) #CscToSin(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:csc(a) = 1/sin(a)例:CscToSin(csc(x)+csc2(x), x); (sin(x)+1)/(sin2(x) #TanToCosSin(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:tan(a) = sin(a)/cos(a)例:TanToCosSin(tan(x)+tan2(x), x); (sin2(x)+sin(x)*cos(x)/(cos2(x) #CotToCosSin(nTf , a, b )返回值:三角函數(shù)表
40、達(dá)式作用:cot(a) = cos(a)/sin(a)例:CotToCosSin(cot(x)+cot2(x), x); (sin(x)*cos(x)+cos2(x)/(sin2(x) #SinToCosTan(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:sin(a) = cos(a)*tan(a)例:SinToCosTan(sin(x)+sin2(x), x); cos2(x)*tan2(x)+cos(x)*tan(x) #CosToSinCot(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:cos(a) = sin(a)*cot(a)例:CosToSinCot(cos(x)+
41、cos2(x), x); sin2(x)*cot2(x)+sin(x)*cot(x) #SecToTan(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:sec2(a) = 1 + tan2(a)例:SecToTan(sec(x)+sec2(x),x); tan2(x)+sec(x)+1 #TanToSec(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:tan2(a) = sec2(a) - 1例:TanToSec(tan(x)+tan2(x),x); tan(x)+sec2(x)-1 #CscToCot(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:csc(a) = 1 +
42、cot2(a)例:CscToCot(csc(x)+csc2(x),x); cot2(x)+csc(x)+1 #CotToCsc(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:cot2(a) = csc(a) - 1例:CotToCsc(cot(x)+cot2(x),x); cot(x)+csc2(x)-1 #SinToCosCot(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:sin(a) = cos(a)/cot(a)例:SinToCosCot(sin(x)+sin2(x),x); (cos2(x)+cos(x)*cot(x)/(cot2(x) #CosToSinTan(nTf
43、, a, b )返回值:三角函數(shù)表達(dá)式作用:cos(a) = sin(a)/tan(a)例:CosToSinTan(cos(x)+cos2(x),x); (sin2(x)+sin(x)*tan(x)/(tan2(x) #SinToCsc(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:sin (a) = 1/csc(a)例:SinToCsc(sin(x)+sin2(x),x); (csc(x)+1)/(csc2(x) #CosToSec(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:cos(a) = 1/sec(a)例:CosToSec(cos(x)+cos2(x),x); (sec
44、(x)+1)/(sec2(x) #降序公式CosTo2Cos(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:cos2 (a) = (1 + cos(2*a)/2例:CosTo2Cos(cos(x)+cos2(x), x); (2*cos(x)+cos(2*x)+1)/(2) #SinTo2Cos(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:sin2 (a) = (1 - cos(2*a)/2例:SinTo2Cos(sin(x)+sin2(x), x); (-cos(2*x)+2*sin(x)+1)/(2) #SinCosTo2Sin(nTf , a, b )返回值:三角函數(shù)表達(dá)式
45、作用:sin(a)*cos(x) = sin(2*a)/2例:SinCosTo2Sin(2*cos(x)*sin(x),x); sin(2*x) #CosTo3Cos(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:cos3(a) = (3*cos(a) + cos(3*a)/4例:CosTo3Cos(4*cos3(x) - 3*cos(x), x); cos(3*x) #SinTo3Sin(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:sin3(a) = (3*sin(a) sin(3*a)/4例:SinTo3Sin(4*sin3(x) - 3*sin(x), x); -sin(3*x) #倍角公式Sin2ToSinCos(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:sin(2*a) = 2*sin(a)*cos(a)例:Sin2ToSinCos(sin(2*x),2* x) 2*sin(x)*cos(x) #Cos2ToCosSin(nTf , a, b )返回值:三角函數(shù)表達(dá)式作用:cos(2*a) = cos2(a) sin2(a)例:Cos2ToCosSin(cos(x), x); -sin2(x)/(2)+cos2(x)/(2) #
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥物篩選與評(píng)價(jià)-洞察分析
- 碳減排技術(shù)經(jīng)濟(jì)性分析-洞察分析
- 冶金固廢環(huán)境風(fēng)險(xiǎn)評(píng)估與管理-洞察分析
- 網(wǎng)絡(luò)優(yōu)化與資源調(diào)度策略-洞察分析
- 采購(gòu)合同買賣合同的培訓(xùn)成果展示柜3篇
- 采購(gòu)合同培訓(xùn)講師致辭3篇
- 采購(gòu)合同會(huì)審制度的優(yōu)化方案3篇
- 采購(gòu)戰(zhàn)略合同的綠色供應(yīng)鏈構(gòu)建3篇
- 采購(gòu)合同樣本的羅馬尼亞語(yǔ)3篇
- 2024年地坪工程售后服務(wù)合同3篇
- 10kV電力電纜試驗(yàn)報(bào)告
- -期末復(fù)習(xí)試題(五)(試題)北師大版四年級(jí)上冊(cè)數(shù)學(xué)
- 《經(jīng)緯網(wǎng)的應(yīng)用》課件
- 山東省淄博市張店區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期中化學(xué)試題(解析版)
- 啦啦操智慧樹知到課后章節(jié)答案2023年下西安體育學(xué)院
- 一般生產(chǎn)經(jīng)營(yíng)單位安全培訓(xùn)考試題及完整答案(全國(guó)通用)
- 2024屆廣東珠海市香洲區(qū)九年級(jí)英語(yǔ)第一學(xué)期期末檢測(cè)試題含解析
- 基于費(fèi)托合成的天然氣制合成油工藝技術(shù)綜述
- 常見抗痛風(fēng)藥物課件整理
- 2023年高考真題-地理(浙江卷)含答案
- 人員招聘與培訓(xùn)實(shí)務(wù)期末復(fù)習(xí)資料
評(píng)論
0/150
提交評(píng)論