第五章分支結(jié)構(gòu)

上傳人:gui****hi 文檔編號:158414917 上傳時間:2022-10-04 格式:PPT 頁數(shù):19 大?。?.48MB
收藏 版權(quán)申訴 舉報 下載
第五章分支結(jié)構(gòu)_第1頁
第1頁 / 共19頁
第五章分支結(jié)構(gòu)_第2頁
第2頁 / 共19頁
第五章分支結(jié)構(gòu)_第3頁
第3頁 / 共19頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《第五章分支結(jié)構(gòu)》由會員分享,可在線閱讀,更多相關(guān)《第五章分支結(jié)構(gòu)(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第五章第五章 分支結(jié)構(gòu)分支結(jié)構(gòu) 分支結(jié)構(gòu)是計算機程序中一種主要結(jié)構(gòu),它是進行邏輯判斷的主要手段。各種計算機語言都提供了實現(xiàn)分支結(jié)構(gòu)的語句,Auto LISP語言提供了兩個實現(xiàn)分支結(jié)構(gòu)的函數(shù)if和cond。本章的重點是介紹這兩個函數(shù)的功能和應(yīng)用。同時也是分別介紹各種測試函數(shù)。5.1 關(guān)系運算函數(shù)關(guān)系運算函數(shù) 關(guān)系運算函數(shù)就是對數(shù)值型表達式的大小進行比較的函數(shù)。這些函數(shù)的參數(shù)即數(shù)值表達式可以是兩個也可以是多個。關(guān)系運算函數(shù)的求值結(jié)果的返回值不是數(shù)值量而是邏輯量,如果成立返回值為T,否則為nil。Auto LISP語言提供了六種關(guān)系運算函數(shù):5.1.1 格式格式 (函數(shù)名 數(shù)1 數(shù)2)其函數(shù)名:=等

2、于 小于 大于 =大于或等于 /=不等于 參數(shù):數(shù)1數(shù)2為數(shù)值表達式,其值必須為數(shù),可以是整型數(shù)也可以是實型數(shù),如果是字符串,則要按ASC碼大小進行比較。函數(shù)的參數(shù)個數(shù)一般不限。5.1.2 功用及求值結(jié)果功用及求值結(jié)果 主要 用于比較各數(shù)值型表達式的值之間的關(guān)系,數(shù)值表達式可以是數(shù)字原子、變量或表,執(zhí)行關(guān)系運算函數(shù)時先對各表達式求值,再對其值進行比較,比較 結(jié)果成立,返回值為T,否則為nil。(e1 e2 e3 e4en)只有e1e2e3e4en 返回值為T,否則為nil。;e1en為表達式的數(shù)值。(=e1 e2 e3 e4en)只有e1e2e3e4en 返回值為T,否則為nil。(=e1 e

3、2 e3 e4en)只有e1=e2=e3=e4=en 返回值為T,否則為nil。但/=函數(shù)略有不同 (/=e1 e2 e3 e4en)只要有任意兩個數(shù)值表達式不等即返回T,只有全部相等返回nil。例如:(1 2 3 4 5)返回值為T (+4 3 2)(sqrt 4)1)返回值為T (setq a 3 b 4 c 6)(a b c)返回值為T (=a b c)返回值nil (“A”“B”“C”“X”“Y”“Z”)返回值為T(以ASC碼進行比較)(/=1 2 3 4)返回值為T (/=1 1 3 4)返回值nil 5.2 邏輯運算函數(shù)邏輯運算函數(shù) 對應(yīng)于一般高級語言的邏輯運算符,Auto LIS

4、P也相應(yīng)的提供了三種邏輯運算函數(shù),即邏輯“與”and,邏輯“或”or和邏輯“非”not。Auto LISP的三個邏輯運算函數(shù) 的參數(shù)可以是任意類型的表達式,下面分別介紹:5.2.1 邏輯邏輯“與與”函數(shù)函數(shù)AND 1.調(diào)用格式調(diào)用格式 (and 表達式)表達式個數(shù)不限。2.功用及求值結(jié)果功用及求值結(jié)果 執(zhí)行該函數(shù)時對其各表達式依次求值,若求值過程中碰到nil,函數(shù)的返回值即為nil,若所有表達式的值均為非nil,該函數(shù)返回T。例如:(and 1 2 3 T)返回值T (and 1 2 3()返回值nil (and(setq e 10)(+3 1)12)返回值T 5.2.2 邏輯邏輯“或或”函數(shù)

5、函數(shù)OR 1.調(diào)用格式調(diào)用格式 (or 表達式)表達式個數(shù)不限。2.功用及求值結(jié)果功用及求值結(jié)果 執(zhí)行該函數(shù)時對表達式依次求值,只要有一個表達式的值為非nil則返回T。只有全部表達式的值為nil,才返回nil,例如:(or 1 2 3 nil)返回值T (or(3 5)返回值nil (or a b c d)返回值nil ;(a b c d均未賦值)5.2.3 邏輯邏輯“非非”函數(shù)函數(shù)NOT 1.調(diào)用格式調(diào)用格式 (not 表達式)只有一個參數(shù)。2.功用及求值結(jié)果功用及求值結(jié)果 當表達式的值為nil時,該函數(shù)返回T,否則返回nil,例如:(setq a 10 b /(A B C)c nil)(n

6、ot a)返回T (not b)返回nil (not c)返回T (not /()返回T 5.3 二分支條件函數(shù)二分支條件函數(shù) IF 5.3.1調(diào)用格式調(diào)用格式 (if測試表達式則表達式否則表達式)表達式可以是任意表達式,包括原子和表。5.3.2功用及求值結(jié)果功用及求值結(jié)果 在程序設(shè)計中,根據(jù)其是否滿足某一條件來決定程序走向時常用此函數(shù),執(zhí)行此函數(shù)時,先對測試表達式進行求值,若其值為非nil,即測試式成立,執(zhí)行則表達式,并把其求值結(jié)果作為if函數(shù)的調(diào)用返回值。否則,若測試表達式的值為nil,且任選項否則表達式存在,則執(zhí)行否則表達式,并返回其求值結(jié)果,若否則表達式不存在,且測試表達式為nil,則

7、返回nil。例如:(if(=(+2 3)5)“Yes”“No”)返回值“Yes”(if(-3 2)6)“Yes”“No”)返回值“No”(setq c (if (/=“a”“a”)3 8)返回值8 (if(setq pt(getpoint“n p=?”)(print pt)p=?2,3 ;屏上顯示(2.0 3.0)(2.0 3.0)打印值 返回值 (if(or(4 3)“Yes”“No”)返回值“Yes”(if and(4 3)“Yes”“No”)返回值“Yes”(if not(=2 3)“Yes”“No”)5.3.3 注意注意 1.if函數(shù)的參數(shù)可以是任意表達式,即可以是數(shù)字原子、字符原子及

8、字符串亦可以是表。2.測試表達式的值不一定必須為T才算成立,因為從邏輯角度來說任何非nil的表達式都與T等效,只要其值為非nil即可,例如測試表達式為1.2.“text”,(List 1 2 3),(setq a 3.0)(+13 8),(print“a”),a(已賦值)等,其值雖非T,但為非nil,固測試均成立。并進行則表達式。只有測試表達式的值為nil,如/(),(and(3 2)測試不成功,則進行否則表達式。3.if函數(shù)中的則函數(shù)中的則表達式或否則表達式或否則表達式不能為多個表達式。否則表達式不能為多個表達式。否則必須用順序控制函數(shù)必須用順序控制函數(shù)progn。例如:(if(x 0)(p

9、rogn(setq y 10)(setq z(/y x)5.4 多分支條件函數(shù)多分支條件函數(shù)COND 5.4.1調(diào)用格式調(diào)用格式 (cond(測試式1結(jié)果1)(測試式2結(jié)果2)(測試式n結(jié)果n )cond函數(shù)的參數(shù)為任意數(shù)目的表,而每一個表中第一個元素為測試式,表中其余元素為結(jié)果。結(jié)果部分可以是多個表達式。測試式和結(jié)果均可以是任意S表達式。5.4.2 功用功用 多分支條件函數(shù),包括多個測試條件。根據(jù)滿足條件的不同,執(zhí)行相應(yīng)的的操作。當執(zhí)行cond函數(shù)的函數(shù)時依次測試每一個條件分支,即對每個支表中第一個元素測試式求值。若測試結(jié)果為nil,即測試失敗,則轉(zhuǎn)向下一個條件分支。若某一個條件分支的測試式

10、求值結(jié)果為非nil,則該分支便是滿足測試條件的分支,其后面的其它分支即不在被求值,cond函數(shù)就轉(zhuǎn)向執(zhí)行該成功分支的結(jié)果。cond函數(shù)的控制結(jié)果見圖5.1。測試式1測試式2nil nilnil測試式nnil結(jié)果1結(jié)果2結(jié)果nTTT圖 5.1 5.4.3求值結(jié)果求值結(jié)果 cond函數(shù)總是對成功分支的結(jié)果部分各表達式進行求值并把邏輯上的最后一個表達式的求值結(jié)果作為調(diào)用cond函數(shù)的返回值。當所有分支的測試結(jié)果均為nil,或者一個分支也不存在時,cond函數(shù)返回nil。若成功的分支沒有結(jié)果部分,那么測試式的求值結(jié)果即為cond的返回值。為了深入理解cond函數(shù)的應(yīng)用、功能、下面舉幾個例子:例1用co

11、nd函數(shù)打印學生某門課的成績。(defun M1()(initget 7)(setq m(getreal“n 分數(shù):”)(cond(m 60.0)(print“不及格”)(m 70.0)(print“及格”)(=0)”)(setq fx(cond(and(=x 0)(=x 2)(=x 5)(=x 0)(=x 2)(=x 5)(x 7)(expt x 3)T(exp x)即是錯誤的。2.最后一個表的測試式為T,它好象是一個收容器,凡是不能滿足上面任一測試式的情況,多收容在這個分支來執(zhí)行,表示“其它”的意思。3.每個分支表中的結(jié)果可以由多個表達式組成,若該分支條件成立其結(jié)果中各表達式依次被求值。4

12、.和if函數(shù)一樣,測試式、結(jié)果可以是任意表達式。5.5 其它測試函數(shù)其它測試函數(shù) 除前面介紹的測試函數(shù)外Auto LISP還提供了以下10個測試函數(shù):判斷數(shù)的性質(zhì)的函數(shù) ZEROP,MINUSP,NUMBERP 判斷數(shù)據(jù)類型的函數(shù) TYPE,ATOM,LISTP,NULL,BOUNDP 判斷等值函數(shù) EQ,EQUAL 由于這些測試函數(shù),大部分可用前面函數(shù)代替,有些函數(shù)不常用,故對其功能只作簡單介紹。5.5.1判斷性質(zhì)的函數(shù)判斷性質(zhì)的函數(shù) 1.ZEROP函數(shù) (1)調(diào)用格式調(diào)用格式 (zerop 項)(2)功用及求值結(jié)果功用及求值結(jié)果 測試項是否為零。若項為數(shù),此函數(shù)返回T。否則返回nil。例如

13、:(setq a 0.0 b 12.0)(zerop a)返回T (zerop b)返回nil 2.MINUSP函數(shù)(1)調(diào)用格式調(diào)用格式 (minusp 項)(2)功用及求值結(jié)果功用及求值結(jié)果 測試項是否為負值,若項為數(shù)且其值為負,則此函數(shù)返回T,否則返回nil,例如:(minusp(-2.0 4.0)返回T (minusp 0)返回nil 3.NUMBERP函數(shù)(1)調(diào)用格式調(diào)用格式 (numberp 項)功用及求值結(jié)果功用及求值結(jié)果 測試項是否為數(shù),若項的值為數(shù),則返回T,否則返回nil。(setq e 1.2 f 3 g/(3 5)h/e)(numberp e)返回T (numberp

14、 f)返回T (numberp g)返回nil (numberp h)返回nil (numberp(eval)h)返回T 5.5.2判斷數(shù)據(jù)類型的函數(shù)判斷數(shù)據(jù)類型的函數(shù) 1.YYPE函數(shù) (1)調(diào)用格式調(diào)用格式 (type 項)(2)功用及求值結(jié)果功用及求值結(jié)果 該函數(shù)判斷項是什么數(shù)據(jù),返回數(shù)據(jù)類型名,數(shù)據(jù)類型名在ATOMLST原子表中可找到,其表示的意義如表51所示:例如:(type/z)返回sym (type 16)返回int (type/(a b c)返回list (type“w”)返回str (type=)返回subrType返回值 意 義 REAL 實型數(shù) INT 整型數(shù) STR 字

15、符串 SYM 符號原子 LIST 表或用戶定義的函數(shù) SUBR 系統(tǒng)內(nèi)部函數(shù) FILE 文件描述符 PICKSET Auto CAD選擇集 ENAME Auto CAD實體名 PAGETB 函數(shù)頁表 表5-1 數(shù)據(jù)類型符號的意義 2.ATOM函數(shù)(1)調(diào)用格式調(diào)用格式 (atom 項)(2)功用及求值結(jié)果功用及求值結(jié)果 該函數(shù)測試項是否為原子,若是則返回T,否則返回nil。例如:(atom/a)返回T (atom/(x y z)返回nil 3.LISTP函數(shù)(1)調(diào)用格式調(diào)用格式 (listp 項)(2)功用及求值結(jié)果功用及求值結(jié)果 該函數(shù)測試項是否為表或用戶自定義的函數(shù),若是則返回T,否則返

16、回nil。例如:(atom/(a b c))返回T (atom/a)返回nil 4.NULL函數(shù)(1)調(diào)用格式調(diào)用格式 (null 項)(2)功用及求值結(jié)果功用及求值結(jié)果 該函數(shù)測試項的當前約束值是否為nil,若是則返回T,否則返回nil,例如:(setq a 1.0 b nil)(null b)返回T (null a)返回nil 5.BOUNDP函數(shù)(1)調(diào)用格式調(diào)用格式 (boundp 原子)(2)功用及求值結(jié)果功用及求值結(jié)果 該函數(shù)測試項是否為有無約束值,若原子的值是一個原子,且有一個值約束它,則返回T,否則返回nil,例如:(setq a 2.0 b nil c(1 2 3)d“ss”

17、)(boundp/a)返回T (boundp/b)返回nil (boundp/c)返回T (boundp c)返回nil (boundp/d)返回T 5.5.3等值函數(shù)等值函數(shù) 前面介紹的等值比較函數(shù)(=),它只能用于原子和字符串,而不能用于表,下面提供的等值函數(shù)EQ和EQUAL,可用于各種S表達式。1.調(diào)用格式調(diào)用格式 (eq 表達式1表達式2)(equal 表達式1表達式2)2.功用及求值結(jié)果功用及求值結(jié)果 eq和equal都是等值函數(shù),即都是判斷表達式1和表達式2是否相等,但兩者有區(qū)別。equal函數(shù)只要它的兩個參數(shù)表達式1和表達式2的值相等就返回T,否則返回nil,而eq函數(shù)的等值更嚴

18、格,即不只是表達式1、表達式2的值要相等,而且要占用同一內(nèi)存空間才返回T,否則返回nil。若兩個表達式為原子,反映不出eq和equal的差異,即兩個函數(shù)是等價的,但如果二表達式為表就反映出二者的差異來。例如:(setq x/a)(setq y/a)(eq x y)返回T (equal x y)返回T 又如:(setq L1(list/a/b/c)返回(a b c d)(setq L2(list/a/b/c)返回(a b c d)(setq L3 L2)返回(a b c d)對equal函數(shù)來說,(equal L1 L2)和(equal L3 L2),都返回T,但對eq來說,(eq L3 L2)

19、返回T,而(eq L1 L2)則返回nil。因為調(diào)用cons,list這樣函數(shù)構(gòu)成新表時,每調(diào)用一次都要從自由存貯表劃出一些新的內(nèi)存單元,用這些內(nèi)存單元來裝配新表,所以雖然(L1和L2)的值是相同的,都是表(a b c d),但兩個表都占用了不同的內(nèi)存單元;另一方面用setq時,只只加一指針,即L3指向L2的值所在的內(nèi)存單元,所以L3和L2不僅值相等,而且都指向相同的內(nèi)存單元,所以(eq L3 L2)返回T。5.6 順序控制函數(shù)順序控制函數(shù)PROGN 5.6.1調(diào)用格式調(diào)用格式 (progn 標準表)5.6.2功能及求值結(jié)果功能及求值結(jié)果 該函數(shù)按順序?qū)γ恳粋€標準表進行求值,并返回最后一個標準

20、表的求值結(jié)果。例如:(if(=x 1)(progn (setq x(+x 2)(setq y(*x 4.0)(print(list x y)5.7 綜合舉例綜合舉例例1.齒輪參數(shù)修改的另一程序。(defun clxg2()(prompt“齒輪參數(shù):p n i z”)(terpri)(initget“P N I Z”)(setq e(read(getwork“n欲修改的參數(shù):”)(initget 7)(setq el(getreal“n修改值:”)(set e el)(initget“Y N”)(setq ch(strcase(getwork“n是否還要修改?”);循環(huán)修改 (if(=ch“Y”

21、)(clxg2)例2.齒輪CAD系統(tǒng)的文本主菜單。(defun chd(/ch)(princ“*齒輪菜單*”)(print)(princ(strcat“n1設(shè)計計算”)(princ(strcat“n2結(jié)構(gòu)選型”)(princ(strcat“n3圖形繪制”)(princ(strcat“n4尺寸標注”)(princ(strcat“n5圖形輸出”)(print)(princ“*”)(print)(initget“1 2 3 4 5”)(setq ch(atoi(getwork“n輸入選項”);函數(shù)(sjjs),(jgxx),(txhz),(ccbz),(txsc)等源程序省略。(cond(=ch 1)(sjjs)(=ch 2)(jgxx)(=ch 3)(txhz)(=ch 4)(ccbz)(t(txsc);cond );defun例3 限制輸入數(shù)據(jù)范圍(2070)的函數(shù)。(defun fw(/a)(setq a(getreal“n輸入一個數(shù)(2070):”)(if(or(70)(progn(prompt“n輸入超界,請從新輸入”)(fw);progn );if );如輸入超界從新執(zhí)行fw函數(shù)直至正確為止。

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!