第八章順序控制_第1頁
第八章順序控制_第2頁
第八章順序控制_第3頁
第八章順序控制_第4頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、第八章第八章 順序控制順序控制2n順序控制提供了操作和數(shù)據(jù)被組合成程順序控制提供了操作和數(shù)據(jù)被組合成程序和程序集合的框架。序和程序集合的框架。n涉及兩個方面的問題:涉及兩個方面的問題:n操作執(zhí)行順序的控制(順序控制)操作執(zhí)行順序的控制(順序控制)n數(shù)據(jù)在子程序間的傳遞(數(shù)據(jù)控制)數(shù)據(jù)在子程序間的傳遞(數(shù)據(jù)控制)3執(zhí)行順序控制執(zhí)行順序控制n控制的層次和形式控制的層次和形式n語句內(nèi)(即表達(dá)式)的順序控制語句內(nèi)(即表達(dá)式)的順序控制n算術(shù)表達(dá)的順序控制算術(shù)表達(dá)的順序控制n非算術(shù)表達(dá)式的順序控制非算術(shù)表達(dá)式的順序控制n語句間的順序控制語句間的順序控制48.1 隱式和顯式順序控制隱式和顯式順序控制n順序

2、控制結(jié)構(gòu)可分為四組:順序控制結(jié)構(gòu)可分為四組:1、用于表達(dá)式中的結(jié)構(gòu)(也針對語句,表達(dá)式是語句的基本建、用于表達(dá)式中的結(jié)構(gòu)(也針對語句,表達(dá)式是語句的基本建筑塊)。如:優(yōu)先級規(guī)則和括號。筑塊)。如:優(yōu)先級規(guī)則和括號。2、用于語句或語句組間的結(jié)構(gòu)。如:條件和迭代。、用于語句或語句組間的結(jié)構(gòu)。如:條件和迭代。3、用于申明式程序設(shè)計語言的程序結(jié)構(gòu)。如邏輯程序設(shè)計語言、用于申明式程序設(shè)計語言的程序結(jié)構(gòu)。如邏輯程序設(shè)計語言4、用于子程序間的結(jié)構(gòu),如:子程序調(diào)用和協(xié)同例程。、用于子程序間的結(jié)構(gòu),如:子程序調(diào)用和協(xié)同例程。n這種分法并不是精確的,如這種分法并不是精確的,如LISP和和APL中只有表達(dá)式中只有表

3、達(dá)式而無語句。而無語句。n順序控制結(jié)構(gòu)可以是隱含的(缺省的)(由語言定義,順序控制結(jié)構(gòu)可以是隱含的(缺省的)(由語言定義,除非程序員顯式修改)或顯式的(程序員可用來修改除非程序員顯式修改)或顯式的(程序員可用來修改隱含順序)。隱含順序)。 5ACABBroot2428.2 算術(shù)表達(dá)的順序控制算術(shù)表達(dá)的順序控制n考慮方程求根:考慮方程求根:n該公式至少涉及該公式至少涉及15個分開的操作,用匯編或機器語個分開的操作,用匯編或機器語言至少需要言至少需要15條指令甚至更多。而寫成條指令甚至更多。而寫成Fortran程程序則為:序則為:nROOT=(-B+SQRT(B*2-4*A*C)/(2*A)n這是

4、自然的表達(dá)方法,由翻譯器而不是程序員來考這是自然的表達(dá)方法,由翻譯器而不是程序員來考慮各種優(yōu)化問題。慮各種優(yōu)化問題。n然而,翻譯器如何控制正確的操作順序?然而,翻譯器如何控制正確的操作順序? 6算術(shù)表達(dá)的順序控制算術(shù)表達(dá)的順序控制n算術(shù)表達(dá)式的表示算術(shù)表達(dá)式的表示n語法:語法:直觀表示直觀表示和和形式化表示形式化表示n語義語義:決定計值方式和過程:決定計值方式和過程n運算符的優(yōu)先級運算符的優(yōu)先級n算術(shù)表達(dá)式算術(shù)表達(dá)式在執(zhí)行時的表示在執(zhí)行時的表示7樹結(jié)構(gòu)表示樹結(jié)構(gòu)表示n目前,我們將表達(dá)式考慮為單個實體,目前,我們將表達(dá)式考慮為單個實體,忽略了其計值必需的實際語法和語義。忽略了其計值必需的實際語法

5、和語義。n表達(dá)式中的基本順序控制機制是表達(dá)式中的基本順序控制機制是“函數(shù)函數(shù)復(fù)合復(fù)合”:刻劃操作及其操作數(shù)。:刻劃操作及其操作數(shù)。n函數(shù)復(fù)合使表達(dá)式呈樹結(jié)構(gòu)特征,根為函數(shù)復(fù)合使表達(dá)式呈樹結(jié)構(gòu)特征,根為主操作,中間節(jié)點為中間層次操作,葉主操作,中間節(jié)點為中間層次操作,葉為操作數(shù)。為操作數(shù)。8樹結(jié)構(gòu)表示樹結(jié)構(gòu)表示n求方程根的表達(dá)式的樹。求方程根的表達(dá)式的樹。n樹表示闡明了表達(dá)式的控制結(jié)構(gòu),樹表示闡明了表達(dá)式的控制結(jié)構(gòu),低層的數(shù)據(jù)引用和操作作為高層低層的數(shù)據(jù)引用和操作作為高層操作的操作數(shù),必須先計值,但操作的操作數(shù),必須先計值,但樹表示也留下一些計值順序沒有樹表示也留下一些計值順序沒有指定。指定。n

6、如:如:B和和B*2誰先計值?誰先計值?B是否是否可組合為同一引用?可組合為同一引用?n通常語言定義只在樹表示級定義通常語言定義只在樹表示級定義表達(dá)式計值順序,允許實現(xiàn)者決表達(dá)式計值順序,允許實現(xiàn)者決定計值細(xì)節(jié)。定計值細(xì)節(jié)。返回9表達(dá)式的語法表達(dá)式的語法n表達(dá)式表達(dá)式(a+b)(ca)的樹結(jié)構(gòu)的樹結(jié)構(gòu)10表達(dá)式的語法表達(dá)式的語法n表達(dá)式可表示為樹結(jié)構(gòu),但為了在程序中表示,表達(dá)式可表示為樹結(jié)構(gòu),但為了在程序中表示,線性化是需要的。線性化是需要的。n前綴(波蘭前綴)記法。前綴(波蘭前綴)記法。n這是波蘭數(shù)學(xué)家發(fā)明的無括號記號法。如:這是波蘭數(shù)學(xué)家發(fā)明的無括號記號法。如:f(x,y,z),+ab-c

7、anLISP使用了該記號法的變種,稱為劍橋波蘭,用括號將使用了該記號法的變種,稱為劍橋波蘭,用括號將操作符及其操作數(shù)括起來,如:操作符及其操作數(shù)括起來,如:(X(+ab)(-ca)。n后綴(逆波蘭)記號法后綴(逆波蘭)記號法n類似于前綴,但操作符數(shù)在后面,如:類似于前綴,但操作符數(shù)在后面,如:ab+ca-n中綴記號法中綴記號法n最適合二元操作,也是我們最常用的方式。最適合二元操作,也是我們最常用的方式。返回11表達(dá)式的語義表達(dá)式的語義 (1/3)n上三種記號法對語言的設(shè)計都有一些有用的屬上三種記號法對語言的設(shè)計都有一些有用的屬性,在如何計算表達(dá)式值方面也有不同。性,在如何計算表達(dá)式值方面也有不

8、同。n前綴計值前綴計值n可以通過一遍掃描計值每個表達(dá)式,然而需要知道可以通過一遍掃描計值每個表達(dá)式,然而需要知道每個操作的操作數(shù)量。除了可省去括號外,前綴表每個操作的操作數(shù)量。除了可省去括號外,前綴表達(dá)式在語言設(shè)計中有如下價值:達(dá)式在語言設(shè)計中有如下價值:1、一般的函數(shù)調(diào)用均采用前綴方式。、一般的函數(shù)調(diào)用均采用前綴方式。2、可表示有任意數(shù)量操作數(shù)的操作,寫表達(dá)式只需一個語、可表示有任意數(shù)量操作數(shù)的操作,寫表達(dá)式只需一個語法規(guī)則。法規(guī)則。3、解碼可以機械地很容易地進行,將其翻譯成簡單代碼序、解碼可以機械地很容易地進行,將其翻譯成簡單代碼序是容易的。是容易的。12表達(dá)式的語義表達(dá)式的語義 (1/3

9、)n前綴計值前綴計值n下面算法用一個執(zhí)行棧計值表達(dá)式:對表達(dá)下面算法用一個執(zhí)行棧計值表達(dá)式:對表達(dá)式式P,1、如、如P中下一項是操作子,壓入棧項,設(shè)置所需中下一項是操作子,壓入棧項,設(shè)置所需參數(shù)數(shù)目。參數(shù)數(shù)目。2、如、如P中下一項是操作數(shù),壓入棧項。中下一項是操作數(shù),壓入棧項。3、如棧項、如棧項n項是操作數(shù)(對棧中第一個項是操作數(shù)(對棧中第一個n元操元操作),則可以進行計值,用計值結(jié)果替代該操作作),則可以進行計值,用計值結(jié)果替代該操作符和操作數(shù)。符和操作數(shù)。13表達(dá)式的語義表達(dá)式的語義 (2/3)n后綴計值后綴計值n后綴計值時,操作符緊跟其操作數(shù)后而且操后綴計值時,操作符緊跟其操作數(shù)后而且操

10、作數(shù)已被計值。作數(shù)已被計值。n1、如、如P中下一項是操作數(shù),壓入棧頂中下一項是操作數(shù),壓入棧頂n2、如、如P中下一項是中下一項是n元操作符,元操作符,n個參數(shù)必須是個參數(shù)必須是棧頂部的棧頂部的n個元素,計算結(jié)果并替換這個元素,計算結(jié)果并替換這n個元素。個元素。n這種計值策略直接、簡單,是很多翻譯器中生成這種計值策略直接、簡單,是很多翻譯器中生成表達(dá)式代碼的基礎(chǔ)。表達(dá)式代碼的基礎(chǔ)。14表達(dá)式的語義表達(dá)式的語義 (3/3)n中綴計值中綴計值n中綴是常見的,但用于程序語言中會導(dǎo)致一中綴是常見的,但用于程序語言中會導(dǎo)致一些問題:些問題:n1、只適合于二元操作。語言單用中綴是不夠的,、只適合于二元操作。

11、語言單用中綴是不夠的,還需使用前綴,這二者的混合使翻譯更為復(fù)雜。還需使用前綴,這二者的混合使翻譯更為復(fù)雜。n2、表達(dá)式中涉及多個中綴操作時,如不使用括、表達(dá)式中涉及多個中綴操作時,如不使用括號,則存在固有二義性。為解決這個問題,通常號,則存在固有二義性。為解決這個問題,通常引入隱含的規(guī)則。引入隱含的規(guī)則。返回15操作子計值順序操作子計值順序16操作的層次操作的層次n即操作的優(yōu)先規(guī)則即操作的優(yōu)先規(guī)則返回返回n同一層次操作的計算順序的隱含規(guī)則同一層次操作的計算順序的隱含規(guī)則n優(yōu)先級對算術(shù)表達(dá)式是適用的,因為表優(yōu)先級對算術(shù)表達(dá)式是適用的,因為表達(dá)式語義的數(shù)學(xué)模型已對大多數(shù)程序員達(dá)式語義的數(shù)學(xué)模型已對

12、大多數(shù)程序員熟知的。熟知的。結(jié)合律結(jié)合律17結(jié)合律結(jié)合律n然而,當(dāng)語言引入新的,不是源自傳統(tǒng)數(shù)學(xué)的操作符然而,當(dāng)語言引入新的,不是源自傳統(tǒng)數(shù)學(xué)的操作符時,優(yōu)先規(guī)則可能不再有用,因此,需要有不同方法時,優(yōu)先規(guī)則可能不再有用,因此,需要有不同方法來處理擴展的操作集。來處理擴展的操作集。nC語言:使用擴展的優(yōu)先規(guī)則集合,大多數(shù)使用從左到右的結(jié)語言:使用擴展的優(yōu)先規(guī)則集合,大多數(shù)使用從左到右的結(jié)合律。大多數(shù)合律。大多數(shù)C規(guī)則是合理的。規(guī)則是合理的。nAPL:操作數(shù)為數(shù)組和矢量,語言沒有優(yōu)先規(guī)則。所有表達(dá):操作數(shù)為數(shù)組和矢量,語言沒有優(yōu)先規(guī)則。所有表達(dá)式計值從右到左。這規(guī)則對大多數(shù)表達(dá)式也是合理的,除了

13、式計值從右到左。這規(guī)則對大多數(shù)表達(dá)式也是合理的,除了一些典型的表達(dá)式,如一些典型的表達(dá)式,如a-b-c-意為意為a-(b-c)。nSmalltalk:模型類似:模型類似APL,沒有優(yōu)先規(guī)則,表達(dá)式計值從左,沒有優(yōu)先規(guī)則,表達(dá)式計值從左到右。到右。nForth:用于實時過程控制。其運行時結(jié)構(gòu)為棧,語言是純后:用于實時過程控制。其運行時結(jié)構(gòu)為棧,語言是純后綴的,沒有優(yōu)先規(guī)則。綴的,沒有優(yōu)先規(guī)則。返回返回18執(zhí)行時表示執(zhí)行時表示n對中綴形式的表達(dá)式的解碼是困難的,需要翻對中綴形式的表達(dá)式的解碼是困難的,需要翻譯為易于解碼的可執(zhí)行形式。通常的選擇有:譯為易于解碼的可執(zhí)行形式。通常的選擇有:1、機器代碼

14、序列、機器代碼序列n表達(dá)式被直接翻譯成實際的機器代碼,而不是先翻譯為中表達(dá)式被直接翻譯成實際的機器代碼,而不是先翻譯為中間形式。指令順序反映了初始表達(dá)式的順序控制結(jié)構(gòu)。間形式。指令順序反映了初始表達(dá)式的順序控制結(jié)構(gòu)。n機器代碼序列必須使用顯式的臨時存儲位置來保持中間結(jié)機器代碼序列必須使用顯式的臨時存儲位置來保持中間結(jié)果,允許使用硬件解釋器,因此,執(zhí)行速度快。果,允許使用硬件解釋器,因此,執(zhí)行速度快。2、樹結(jié)構(gòu)、樹結(jié)構(gòu)n表達(dá)式可以表達(dá)式可以以其自然的樹結(jié)構(gòu)直接執(zhí)行以其自然的樹結(jié)構(gòu)直接執(zhí)行(使用軟件解釋(使用軟件解釋器)。執(zhí)行通過簡單的樹遍歷來完成。器)。執(zhí)行通過簡單的樹遍歷來完成。n這是這是LI

15、SP中使用的典型技術(shù),整個程序被表示為樹結(jié)構(gòu)。中使用的典型技術(shù),整個程序被表示為樹結(jié)構(gòu)。19執(zhí)行時表示執(zhí)行時表示3、前綴或后綴形式、前綴或后綴形式n這兩種形式可用前面給出的解釋算法來執(zhí)行。這兩種形式可用前面給出的解釋算法來執(zhí)行。n在某些基于堆棧組織的實際計算機中,實際的機在某些基于堆棧組織的實際計算機中,實際的機器代碼表示為后綴形式。器代碼表示為后綴形式。n前綴表示是前綴表示是SNOBOL4程序的執(zhí)行形式,執(zhí)行從程序的執(zhí)行形式,執(zhí)行從左到右進行。左到右進行。n每個操作遞歸地調(diào)用解釋器來計值其操作數(shù)。每個操作遞歸地調(diào)用解釋器來計值其操作數(shù)。20表達(dá)式的樹表示的計值表達(dá)式的樹表示的計值n表達(dá)式翻成

16、樹結(jié)構(gòu)雖有困難,但總體上是直接表達(dá)式翻成樹結(jié)構(gòu)雖有困難,但總體上是直接的。的。n而樹到可執(zhí)行原語序列的翻譯,則涉及計值順而樹到可執(zhí)行原語序列的翻譯,則涉及計值順序的一些微妙問題。在代碼生成中出現(xiàn)的計值序的一些微妙問題。在代碼生成中出現(xiàn)的計值順序問題有:順序問題有:n問題一:統(tǒng)一的計值規(guī)則問題一:統(tǒng)一的計值規(guī)則n問題二:副作用,問題二:副作用,Side effect。n問題三:出錯條件問題三:出錯條件n問題四:短路布爾表達(dá)式問題四:短路布爾表達(dá)式21表達(dá)式的計值表達(dá)式的計值(1):統(tǒng)一的計值規(guī)則:統(tǒng)一的計值規(guī)則n對表達(dá)式樹中的每個操作結(jié)點,首先計值其操作數(shù)對表達(dá)式樹中的每個操作結(jié)點,首先計值其操

17、作數(shù)(或生成相應(yīng)代碼),然而應(yīng)用操作到計算出的操作(或生成相應(yīng)代碼),然而應(yīng)用操作到計算出的操作數(shù)上(或生成相應(yīng)代碼)數(shù)上(或生成相應(yīng)代碼)積極計值規(guī)則(積極計值規(guī)則(eager)。)。n對有些表達(dá)式來說,計值發(fā)生的順序并不重要,可以對有些表達(dá)式來說,計值發(fā)生的順序并不重要,可以選擇以優(yōu)化存儲和其他機器特性。選擇以優(yōu)化存儲和其他機器特性。n例,對例,對(a+b)(c-a),下列順序均可接受。,下列順序均可接受。順序一:取順序一:取a的右值的右值順序二:取順序二:取c的右值的右值 取取b的右值的右值 取取b的右值的右值 a+bd 取取a的右值的右值 取取c右值右值 c-ae c-ae a+bd

18、def表達(dá)式的右值表達(dá)式的右值 def22ZY0XXYIF/表達(dá)式的計值表達(dá)式的計值(1):統(tǒng)一的計值規(guī)則:統(tǒng)一的計值規(guī)則n但是,并不是在任何情況下都可以使用這種統(tǒng)但是,并不是在任何情況下都可以使用這種統(tǒng)一的計值規(guī)則。一的計值規(guī)則。n例如,包含條件的表達(dá)式:例如,包含條件的表達(dá)式:nZ+(Y=0?X:X/Y),當(dāng),當(dāng)Y0時,計算時,計算X/Y23表達(dá)式的計值表達(dá)式的計值(1):統(tǒng)一的計值規(guī)則:統(tǒng)一的計值規(guī)則n采用統(tǒng)一規(guī)則,對采用統(tǒng)一規(guī)則,對IF操作,需先計算操作數(shù),即使操作,需先計算操作數(shù),即使Y=0。n顯然,此時我們不希望所有操作數(shù)被計值。顯然,此時我們不希望所有操作數(shù)被計值。n從而,我們有

19、另一個規(guī)則:永不在應(yīng)用操作之前計值從而,我們有另一個規(guī)則:永不在應(yīng)用操作之前計值操作數(shù)。操作數(shù)。n即,總是不計值地傳遞操作數(shù),由作用操作決定什么時候計即,總是不計值地傳遞操作數(shù),由作用操作決定什么時候計值操作數(shù)值操作數(shù)Lazy計值。計值。n然而,對此規(guī)則,在很多情況下是不實際的。比如:如何仿然而,對此規(guī)則,在很多情況下是不實際的。比如:如何仿真未計值操作數(shù)到操作的傳遞?這需要軟件仿真。真未計值操作數(shù)到操作的傳遞?這需要軟件仿真。n這兩種計值規(guī)則:積極和隋性(這兩種計值規(guī)則:積極和隋性(lazy),對應(yīng)子程序),對應(yīng)子程序參數(shù)傳遞的按值和按名。參數(shù)傳遞的按值和按名。n對表達(dá)式而言,沒有簡單的統(tǒng)一

20、規(guī)則是完全令人滿意的,通對表達(dá)式而言,沒有簡單的統(tǒng)一規(guī)則是完全令人滿意的,通常規(guī)則是混合的。常規(guī)則是混合的。24表達(dá)式的計值表達(dá)式的計值(2):副作用:副作用n表達(dá)式中使用有副作用的操作,一直是語言設(shè)計中的表達(dá)式中使用有副作用的操作,一直是語言設(shè)計中的爭論點。爭論點。n考慮:考慮:afun(x)+an對乘法:需先取對乘法:需先取a的右值并計值的右值并計值fun(x)n對加法:需取對加法:需取a的右值,并計算乘法。的右值,并計算乘法。n顯然,我們希望只取顯然,我們希望只取a一次并應(yīng)用到兩個地方,而且一次并應(yīng)用到兩個地方,而且fun(x)的的計值在取計值在取a的前或后并無區(qū)別。的前或后并無區(qū)別。n

21、但如但如fun有副作用,改變了有副作用,改變了a的值,則計值序成為關(guān)鍵。的值,則計值序成為關(guān)鍵。n如如a值本為值本為1,但,但fun執(zhí)行后值為執(zhí)行后值為3,并改,并改a為為2。則表達(dá)式可能值。則表達(dá)式可能值為:為:1、順序計值:、順序計值:13+2=52、取、取a一次:一次:13+1=43、在取、在取a前調(diào)用前調(diào)用fun:23+2=8n執(zhí)行序不同導(dǎo)致不同結(jié)果。執(zhí)行序不同導(dǎo)致不同結(jié)果。25表達(dá)式的計值表達(dá)式的計值(2):副作用:副作用n對表達(dá)式中副作用的使用有兩種選擇:對表達(dá)式中副作用的使用有兩種選擇:1、不允許副作用、不允許副作用n不允許有副作用的函數(shù)或?qū)Ω弊饔每赡苡绊懙谋聿辉试S有副作用的函數(shù)

22、或?qū)Ω弊饔每赡苡绊懙谋磉_(dá)式的值改為未定義。達(dá)式的值改為未定義。2、允許副作用、允許副作用n但語言定義應(yīng)精確地給出計值順序,這將使很多但語言定義應(yīng)精確地給出計值順序,這將使很多優(yōu)化不可能。優(yōu)化不可能。n通常,語句允許有副作用,如:賦值必通常,語句允許有副作用,如:賦值必須產(chǎn)生副作用。須產(chǎn)生副作用。26表達(dá)式的計值表達(dá)式的計值(3):出錯條件:出錯條件n對可能失敗和產(chǎn)生出錯條件的操作,涉及一種對可能失敗和產(chǎn)生出錯條件的操作,涉及一種特殊的副作用。一般的副作用只涉及到程序員特殊的副作用。一般的副作用只涉及到程序員定義的函數(shù),而出錯條件可能在很多原操作中定義的函數(shù),而出錯條件可能在很多原操作中出現(xiàn)(溢

23、出、被零除等)。出現(xiàn)(溢出、被零除等)。n這類副作用是不希望被排除的,而出錯條件的這類副作用是不希望被排除的,而出錯條件的意義在于其出現(xiàn)甚至?xí)艿奖磉_(dá)式的計值順序意義在于其出現(xiàn)甚至?xí)艿奖磉_(dá)式的計值順序的影響。這樣,程序員需要精確的計值順序控的影響。這樣,程序員需要精確的計值順序控制。制。27表達(dá)式的計值表達(dá)式的計值(4):短路布爾表達(dá)式:短路布爾表達(dá)式n考慮例子:考慮例子:nif (A=0)|(B/AC)nWhile(IC)n兩個例子中,第二個條件可能產(chǎn)生出錯條件。第一兩個例子中,第二個條件可能產(chǎn)生出錯條件。第一個操作數(shù)用于防止錯誤產(chǎn)生。個操作數(shù)用于防止錯誤產(chǎn)生。n在很多語言中,求布爾操作需

24、先計值操作數(shù),在很多語言中,求布爾操作需先計值操作數(shù),這將產(chǎn)生不期望的錯誤,因為人們期望左操作這將產(chǎn)生不期望的錯誤,因為人們期望左操作數(shù)短路右操作數(shù)。數(shù)短路右操作數(shù)。nAda中提供了兩個特殊的布爾操作來解決這個問題。中提供了兩個特殊的布爾操作來解決這個問題。nand then 和和 or else。顯式地提供短路機制。顯式地提供短路機制。n例:例:if (A=0) or else (B/AC) thenn這將不會失敗,因這將不會失敗,因A=0將導(dǎo)致整個表達(dá)式計值結(jié)束。將導(dǎo)致整個表達(dá)式計值結(jié)束。返回288.3 語句間的順序控制語句間的順序控制n基本語句基本語句n語句級順序控制的語句級順序控制的形

25、式形式n語句級順序控制的語句級順序控制的語句語句n結(jié)構(gòu)化順序控制結(jié)構(gòu)化順序控制n結(jié)構(gòu)的程序設(shè)計簡介結(jié)構(gòu)的程序設(shè)計簡介n結(jié)構(gòu)順序控制語句結(jié)構(gòu)順序控制語句n結(jié)構(gòu)順序控制中的問題結(jié)構(gòu)順序控制中的問題n順序控制的結(jié)構(gòu)化:順序控制的結(jié)構(gòu)化:素程序素程序29基本語句基本語句n任何程序的結(jié)果由其基本語句確定。這任何程序的結(jié)果由其基本語句確定。這里我們不再考慮語句中表達(dá)式,而是將里我們不再考慮語句中表達(dá)式,而是將語句作為考慮的單元來代表一單步計算。語句作為考慮的單元來代表一單步計算。n數(shù)據(jù)對象的賦值數(shù)據(jù)對象的賦值n通過向數(shù)據(jù)對象賦值而改變計算狀態(tài)是影響通過向數(shù)據(jù)對象賦值而改變計算狀態(tài)是影響計算狀態(tài)的主要機制。

26、計算狀態(tài)的主要機制。30基本語句基本語句n數(shù)據(jù)對象的賦值數(shù)據(jù)對象的賦值n賦值語句賦值語句n主要目的是將某表達(dá)式的右值賦給某數(shù)據(jù)對象的左值。主要目的是將某表達(dá)式的右值賦給某數(shù)據(jù)對象的左值。n賦值為每個基本數(shù)據(jù)類型定義的中心操作。賦值為每個基本數(shù)據(jù)類型定義的中心操作。n輸入語句輸入語句n大多數(shù)語言有一種語句形式,從終端用戶、文件或通大多數(shù)語言有一種語句形式,從終端用戶、文件或通訊線讀數(shù)據(jù)。這樣的語句也通過賦值改變變量的值。訊線讀數(shù)據(jù)。這樣的語句也通過賦值改變變量的值。n其他賦值操作其他賦值操作n參數(shù)傳遞:給形參賦值參數(shù)傳遞:給形參賦值n隱含賦值:如隱含賦值:如SNOBOL4中的引用,中的引用,Pr

27、olog目標(biāo)匹配,目標(biāo)匹配,聲明時初始值等。聲明時初始值等。返回31語句級順序控制的形式語句級順序控制的形式n三種主要的語句級順序控制:三種主要的語句級順序控制:n復(fù)合:語句順序放置,順序執(zhí)行。復(fù)合:語句順序放置,順序執(zhí)行。n選擇:兩個語句序列可形成選擇,使得一個選擇:兩個語句序列可形成選擇,使得一個或另一個序列被執(zhí)行,但不能同時執(zhí)行?;蛄硪粋€序列被執(zhí)行,但不能同時執(zhí)行。n迭代:一個語句序列被重復(fù)執(zhí)行零次或多次。迭代:一個語句序列被重復(fù)執(zhí)行零次或多次。n這是三種常見結(jié)構(gòu),語句被組成這三種這是三種常見結(jié)構(gòu),語句被組成這三種結(jié)構(gòu)而形成程序。結(jié)構(gòu)而形成程序。返回32顯式順序控制顯式順序控制ngoto

28、語句,兩種形式語句,兩種形式n無條件無條件goto和條件和條件gotonGoto語句導(dǎo)致無結(jié)構(gòu)的設(shè)計。語言的很多形式模語句導(dǎo)致無結(jié)構(gòu)的設(shè)計。語言的很多形式模型均不允許型均不允許goto存在。存在。n此外,此外,goto也是多余的,沒有也是多余的,沒有g(shù)oto也可以寫出同也可以寫出同樣能力的程序。樣能力的程序。nBreak語句語句n通常使控制被前移到一個顯式點(在給定控制結(jié)構(gòu)通常使控制被前移到一個顯式點(在給定控制結(jié)構(gòu)的結(jié)束處)。的結(jié)束處)。n如如C中中Break語句使得立即退出語句使得立即退出while、for、switch語句。語句。nC中還有中還有Continue語句,只結(jié)束本次循環(huán)。語句

29、,只結(jié)束本次循環(huán)。33結(jié)構(gòu)化結(jié)構(gòu)化break語句語句返回34結(jié)構(gòu)的程序設(shè)計結(jié)構(gòu)的程序設(shè)計n70年代,年代,goto語句受到很大攻擊,以至語句受到很大攻擊,以至有的語言完全刪去了有的語言完全刪去了goto。goto 語句語句有一些優(yōu)點:有一些優(yōu)點:如果標(biāo)號只是局部語法標(biāo)記,則對高效執(zhí)如果標(biāo)號只是局部語法標(biāo)記,則對高效執(zhí)行有直接的硬件支持。行有直接的硬件支持。在小程序中使用簡單、容易。在小程序中使用簡單、容易。為匯編語言和老語言用戶熟悉。為匯編語言和老語言用戶熟悉??勺鳛橥ㄓ媒ㄖK來表示(仿真)其他控可作為通用建筑塊來表示(仿真)其他控制形式。制形式。35結(jié)構(gòu)的程序設(shè)計結(jié)構(gòu)的程序設(shè)計n它也有嚴(yán)重的

30、缺點:它也有嚴(yán)重的缺點:1、缺乏層次的程序結(jié)構(gòu)、缺乏層次的程序結(jié)構(gòu)n程序的正確性和開發(fā)效率已遠(yuǎn)比效率更為重要,語言也應(yīng)程序的正確性和開發(fā)效率已遠(yuǎn)比效率更為重要,語言也應(yīng)反映此需求。單進單出的控制結(jié)構(gòu)概念,已成為更易理解反映此需求。單進單出的控制結(jié)構(gòu)概念,已成為更易理解的設(shè)計。層次化提供了一種抽象,符合的設(shè)計。層次化提供了一種抽象,符合“分而治之分而治之”的思的思想。而想。而goto將打破這種層次性。將打破這種層次性。2、程序文本中語句順序不一定對應(yīng)執(zhí)行的順序。、程序文本中語句順序不一定對應(yīng)執(zhí)行的順序。n要理解程序,必須理解語句的執(zhí)行順序。要理解程序,必須理解語句的執(zhí)行順序。n靜態(tài)順序和動態(tài)順序

31、有關(guān)聯(lián)將使程序更易于理解。靜態(tài)順序和動態(tài)順序有關(guān)聯(lián)將使程序更易于理解。3、語句組可能有多個用途。、語句組可能有多個用途。n如果每個組只含單個用途。則程序更易理解。如果每個組只含單個用途。則程序更易理解。n人為地通過人為地通過goto使某組有多用途將打亂執(zhí)行順序,使程使某組有多用途將打亂執(zhí)行順序,使程序難于修改。序難于修改。36結(jié)構(gòu)的程序設(shè)計結(jié)構(gòu)的程序設(shè)計n結(jié)構(gòu)化程序設(shè)計強調(diào):結(jié)構(gòu)化程序設(shè)計強調(diào):、程序結(jié)構(gòu)的層次設(shè)計,只用三種控制結(jié)、程序結(jié)構(gòu)的層次設(shè)計,只用三種控制結(jié)構(gòu)。構(gòu)。、層次設(shè)計的表示應(yīng)直接體現(xiàn)在程序文本、層次設(shè)計的表示應(yīng)直接體現(xiàn)在程序文本中(只使用結(jié)構(gòu)化控制語句)。中(只使用結(jié)構(gòu)化控制語

32、句)。、語句的文本序列對應(yīng)執(zhí)行序列:、語句的文本序列對應(yīng)執(zhí)行序列:、使用單一用途的語句組。、使用單一用途的語句組。返回37結(jié)構(gòu)順序控制結(jié)構(gòu)順序控制n大多數(shù)語言提供了控制語句集合來表示三種基本的控大多數(shù)語言提供了控制語句集合來表示三種基本的控制形式,這些語句均應(yīng)該是單入單出的。它們所構(gòu)成制形式,這些語句均應(yīng)該是單入單出的。它們所構(gòu)成的程序,其執(zhí)行和語句序基本對應(yīng)。的程序,其執(zhí)行和語句序基本對應(yīng)。n復(fù)合語句復(fù)合語句n一個語句序列,可按單個語句處理來構(gòu)造更大的語句。一個語句序列,可按單個語句處理來構(gòu)造更大的語句。n用用beginend 和和 等來構(gòu)造等來構(gòu)造n其實現(xiàn)是將其存放在一個連續(xù)存儲區(qū)域中。其

33、實現(xiàn)是將其存放在一個連續(xù)存儲區(qū)域中。n條件語句條件語句n用來表示兩個或更多語句的選擇執(zhí)行,或單個語句的可選執(zhí)用來表示兩個或更多語句的選擇執(zhí)行,或單個語句的可選執(zhí)行。行。nif 語句語句n單分枝:單分枝:if 條件條件 then 語句語句語句的可選執(zhí)行語句的可選執(zhí)行n兩分枝:兩分枝:if 條件條件 thenelsen還可表示多分枝。還可表示多分枝。 38結(jié)構(gòu)順序控制結(jié)構(gòu)順序控制n條件語句條件語句ncase語句,重復(fù)測試某變量的值。語句,重復(fù)測試某變量的值。case Tag is When 0 When 1 endcasen實現(xiàn)實現(xiàn)nif語句常用硬件支持的分枝和跳轉(zhuǎn)指令實現(xiàn)。語句常用硬件支持的分枝

34、和跳轉(zhuǎn)指令實現(xiàn)。ncase語句常用跳轉(zhuǎn)表來避免同一變量值的重復(fù)測試。語句常用跳轉(zhuǎn)表來避免同一變量值的重復(fù)測試。n跳轉(zhuǎn)表是一個向量,順序存放在內(nèi)存中,其部件是無條件跳跳轉(zhuǎn)表是一個向量,順序存放在內(nèi)存中,其部件是無條件跳轉(zhuǎn)指令。轉(zhuǎn)指令。39case語語句句的的跳跳轉(zhuǎn)轉(zhuǎn)表表實實現(xiàn)現(xiàn)40結(jié)構(gòu)順序控制結(jié)構(gòu)順序控制n迭代語句迭代語句n提供重復(fù)計算的機制。通常分為頭和體兩部分。體提供語句提供重復(fù)計算的機制。通常分為頭和體兩部分。體提供語句的動作。頭控制重復(fù)執(zhí)行體的次數(shù)。的動作。頭控制重復(fù)執(zhí)行體的次數(shù)。n簡單重復(fù)簡單重復(fù)n直接給出執(zhí)行的次數(shù)。直接給出執(zhí)行的次數(shù)。n例:例:COBOL中,中,perform bo

35、dy k timesn當(dāng)條件成立時重復(fù)當(dāng)條件成立時重復(fù)nwhile test do bodyn計數(shù)器增量的重復(fù)計數(shù)器增量的重復(fù)nfor I:=1 step 2 until 30 do bodyn無限重復(fù)無限重復(fù)nLoopexit when condition沒有顯式的終止測試。沒有顯式的終止測試。endloopn循環(huán)的實現(xiàn)循環(huán)的實現(xiàn)n直接使用硬件提供的分支直接使用硬件提供的分支/跳轉(zhuǎn)指令。跳轉(zhuǎn)指令。返回41結(jié)構(gòu)順序控制中的問題結(jié)構(gòu)順序控制中的問題n多出口循環(huán)多出口循環(huán)n有些情況下,可能在幾種條件下都需要循環(huán)終止。有些情況下,可能在幾種條件下都需要循環(huán)終止。n如:搜索循環(huán)是一個例子:如:搜索循環(huán)

36、是一個例子:從從K元素矢量中搜索第一個滿足某條件的元素。元素矢量中搜索第一個滿足某條件的元素。For I:=1 to k do if VECT(I)=0 the goto for I in 1k loop exit when VECT (I)=0;endloop42結(jié)構(gòu)順序控制中的問題結(jié)構(gòu)順序控制中的問題ndo-while-don經(jīng)常最自然的測試是否退出循環(huán)的地方是在中間部經(jīng)常最自然的測試是否退出循環(huán)的地方是在中間部位,即已完成某些處理之后。稱為位,即已完成某些處理之后。稱為do while do,因為中間點因為中間點while是需要的是需要的do while doread (x)while

37、(not end-of-file)process (x)endn例外條件例外條件n例外可表示各種錯誤條件。例外可表示各種錯誤條件。nRaise BAD-CHAR-VALVEloopread(x)if end-of-file then goto process (x)end loop返回43n素程序的理論可用于描述一致的控制結(jié)構(gòu)理論。素程序的理論可用于描述一致的控制結(jié)構(gòu)理論。n1975年由年由Maddux提出,作為結(jié)構(gòu)化程序設(shè)計的推廣,提出,作為結(jié)構(gòu)化程序設(shè)計的推廣,以定義唯一的流程圖分解。以定義唯一的流程圖分解。n假定程序圖有三類結(jié)點:假定程序圖有三類結(jié)點:nn每個流程圖由這三類結(jié)構(gòu)成。每個流

38、程圖由這三類結(jié)構(gòu)成。功能結(jié)點決策結(jié)點匯合結(jié)點素程序(素程序(Prime Program)44合式程序(合式程序( proper program )n控制結(jié)構(gòu)的形式模式是如下的流程圖:控制結(jié)構(gòu)的形式模式是如下的流程圖:n1、有單個進入線、有單個進入線n2、有單個退出線、有單個退出線n3、有從入口到每個結(jié)點和從每個結(jié)點到出口的路徑。、有從入口到每個結(jié)點和從每個結(jié)點到出口的路徑。n我們的目標(biāo)是區(qū)分我們的目標(biāo)是區(qū)分“結(jié)構(gòu)的結(jié)構(gòu)的”“”“合式程序合式程序”和和“非結(jié)非結(jié)構(gòu)的構(gòu)的”合式程序。下圖均為合式程序,差別在于結(jié)構(gòu)合式程序。下圖均為合式程序,差別在于結(jié)構(gòu)性。性。45素程序素程序n是合式程序,但不能被

39、分為更小的合式程序,是合式程序,但不能被分為更小的合式程序,(功能結(jié)點的長序列被視為基本的)。否則成(功能結(jié)點的長序列被視為基本的)。否則成為復(fù)合程序。為復(fù)合程序。n所有素程序可以枚舉出來。注意:它們中大多所有素程序可以枚舉出來。注意:它們中大多數(shù)或是無效的,或是常見的控制結(jié)構(gòu)。數(shù)或是無效的,或是常見的控制結(jié)構(gòu)。n所用的控制結(jié)構(gòu)均是具有少量結(jié)點的素程序。所用的控制結(jié)構(gòu)均是具有少量結(jié)點的素程序。n通過枚舉,我們看出,通過枚舉,我們看出,do-while-do是自然的是自然的控制結(jié)構(gòu)。但很少有語言提供這種機制??刂平Y(jié)構(gòu)。但很少有語言提供這種機制。46素程序的枚舉素程序的枚舉n至多至多4節(jié)點的素程序

40、,其中節(jié)點的素程序,其中na、b、e、i是功能結(jié)點序列。是功能結(jié)點序列。nf是是if-then、 g是是 do while、h 是是 repeat-until、nj是是 if-then-else、k是是 do-while-donc、d、l和和q只含決策結(jié)點和只含決策結(jié)點和匯合結(jié)點,沒有功能結(jié)點,匯合結(jié)點,沒有功能結(jié)點,故不會改變抽象機的狀態(tài)空故不會改變抽象機的狀態(tài)空間,因此,等價于恒等函數(shù)。間,因此,等價于恒等函數(shù)。而其中而其中c、l總退出,而總退出,而d、q是循環(huán)(一旦循環(huán),將不會是循環(huán)(一旦循環(huán),將不會終止)。終止)。47結(jié)構(gòu)定理結(jié)構(gòu)定理nBohm & Jacobini任何素程序可

41、被轉(zhuǎn)換為任何素程序可被轉(zhuǎn)換為只使用只使用while和和if的素程序。的素程序。n該構(gòu)造過程的概述:該構(gòu)造過程的概述:1、給定任意流程圖,標(biāo)記每個結(jié)點,出口標(biāo)記為、給定任意流程圖,標(biāo)記每個結(jié)點,出口標(biāo)記為O2、定義、定義I為新的程序變量為新的程序變量3、對流程圖中每個結(jié)點,應(yīng)用轉(zhuǎn)換規(guī)則。、對流程圖中每個結(jié)點,應(yīng)用轉(zhuǎn)換規(guī)則。4、重建程序。、重建程序。n這里這里I類似虛擬機指令計數(shù)器,指出下一條執(zhí)行語類似虛擬機指令計數(shù)器,指出下一條執(zhí)行語句。句。n整個程序簡單地是一系列嵌套的整個程序簡單地是一系列嵌套的if語句(在單個語句(在單個while循環(huán)中),這樣,任何程序可用此法轉(zhuǎn)換為循環(huán)中),這樣,任何程

42、序可用此法轉(zhuǎn)換為“良構(gòu)良構(gòu)”程序。程序。48結(jié)結(jié)構(gòu)構(gòu)定定理理返回498.4 非算術(shù)表達(dá)式的順序控制非算術(shù)表達(dá)式的順序控制n控制方式:控制方式:n模式匹配模式匹配n合一合一n回溯回溯50n這是這是SNOBOL4、Prolog、ML等語言中的重要操作。操作的等語言中的重要操作。操作的成功是:匹配并賦一變量集到預(yù)定義的模板。如成功是:匹配并賦一變量集到預(yù)定義的模板。如BNF文法中文法中分析樹的識別。分析樹的識別。n例:例:A0A0|1A0|01n合法有效串合法有效串00100的識別過程為:的識別過程為:nA1匹配中間匹配中間1nA2匹配匹配 0 A1 0nA3匹配匹配 0 A2 0nSNOBOL4是

43、為直接仿真這個操作而設(shè)計的語言。其實現(xiàn)獨立是為直接仿真這個操作而設(shè)計的語言。其實現(xiàn)獨立于任何實際的機器體系結(jié)構(gòu),面向串處理虛擬機而設(shè)計。為于任何實際的機器體系結(jié)構(gòu),面向串處理虛擬機而設(shè)計。為了執(zhí)行了執(zhí)行SNOROL4,需將串處理機的操作實現(xiàn)為現(xiàn)有機器上,需將串處理機的操作實現(xiàn)為現(xiàn)有機器上的宏。的宏。n因此,因此,SNOBOL4是第一個幾乎可運行于所有機器的語言。在是第一個幾乎可運行于所有機器的語言。在其每個實現(xiàn)中有精確相同的語義。其每個實現(xiàn)中有精確相同的語義。nSNOBOL4使用串替代來實現(xiàn)匹配操作。使用串替代來實現(xiàn)匹配操作。模式匹配模式匹配51模式匹配模式匹配nProlog使用使用“關(guān)系作為

44、關(guān)系作為n元組集合元組集合”的概念作為匹的概念作為匹配機制。配機制。n通過刻劃這些關(guān)系的已知實例,其他實例可被導(dǎo)出。通過刻劃這些關(guān)系的已知實例,其他實例可被導(dǎo)出。n例:有事實例:有事實nParentof(John,Mary)nParentof(Susan,Mary)nParentof(Bill,John)nParentof(Ann,John)n要想知道要想知道Mary的父輩,我們寫的父輩,我們寫Parentof(X,Mary),推導(dǎo),推導(dǎo)結(jié)果結(jié)果X可以是可以是John或或Susan。n如需知道如需知道Mary的兩個父輩,式子為:的兩個父輩,式子為:nParentof(X,Mary), Pare

45、ntof(Y,Mary), not(X=Y)n也可自己建立關(guān)系:也可自己建立關(guān)系:nGrandparentof(X,Y) :- Parentof(X,Z), Parentof(Z,Y)52模式匹配:模式匹配:項重寫項重寫n模式匹配的一種限制形式。模式匹配的一種限制形式。n給定串給定串a(chǎn)1a2an和重寫規(guī)則和重寫規(guī)則 ,if =ai,則,則a1a2ai-1an是是a1a2an的項重寫。的項重寫。n例:對文法例:對文法nA0B|1nB0An產(chǎn)生產(chǎn)生001串的重寫過程為:串的重寫過程為:nA0B00A001nML將項重寫表示為一種函數(shù)定義形式。將項重寫表示為一種函數(shù)定義形式。n例:求階乘例:求階乘f

46、un fact (1)=1 | fact (N:int)=N*fact(N-1)返回53合一合一nProlog數(shù)據(jù)庫包含事實和規(guī)則。包含一個或多個變量數(shù)據(jù)庫包含事實和規(guī)則。包含一個或多個變量的表達(dá)式稱為查詢,用來表示一個未知關(guān)系。的表達(dá)式稱為查詢,用來表示一個未知關(guān)系。nProlog的主要特性是使用模式匹配來發(fā)現(xiàn)是否查詢可的主要特性是使用模式匹配來發(fā)現(xiàn)是否查詢可解。解。n合一是進行模式匹配的方法,用于確定對查詢的合法合一是進行模式匹配的方法,用于確定對查詢的合法一致的替代。一致的替代。n例:對查詢例:對查詢nParentof(X, Mary)=Parentof(John, Y)n顯然,解答為顯

47、然,解答為Parentof(John,Mary)n我們稱,該實例使用替代我們稱,該實例使用替代John/X, Mary/Y,合一了合一了Parentof(X, Mary)和和Parentof(John, Y)n合一可視為對替代的公共性質(zhì)的擴展。合一可視為對替代的公共性質(zhì)的擴展。54合一:替代與一般合一合一:替代與一般合一n替代替代n這是在編程中學(xué)到的第一條原則,涉及參數(shù)傳遞和這是在編程中學(xué)到的第一條原則,涉及參數(shù)傳遞和宏擴展。在宏擴展中,是用任意表達(dá)式替代一個變宏擴展。在宏擴展中,是用任意表達(dá)式替代一個變量。量。n一般合一:一般合一:n要合一兩個表達(dá)式要合一兩個表達(dá)式U和和V,需找到對,需找到

48、對U、V中出現(xiàn)的中出現(xiàn)的變量的替代,該替代使兩個表達(dá)式相同。變量的替代,該替代使兩個表達(dá)式相同。n例,例,f(X,John), f(g(John),Z)n綁定綁定X到到g(John), Z到到John可完成合一??赏瓿珊弦弧結(jié)果為結(jié)果為f(g(John),John), 我們將替代稱為我們將替代稱為 (sigma),),寫成寫成U =V 55替代和合一的不同替代和合一的不同56替代和合一的不同替代和合一的不同n對替代,有模式定義(表示子程序基調(diào)對替代,有模式定義(表示子程序基調(diào)或宏定義),以及模式的實例(表示子或宏定義),以及模式的實例(表示子程序調(diào)用或宏擴展)。程序調(diào)用或宏擴展)。n替代需用

49、實際的實例值來替代模式定義中的替代需用實際的實例值來替代模式定義中的參數(shù)。參數(shù)。n例:例:F(A, B)=G(A, B),實例為,實例為F(g(I),h(j)n用用g(i)替替A, h(j)替替B,得到,得到F(A,B)=G(g(i),h(j)57替代和合一的不同替代和合一的不同n對合一,有兩個模式定義,和一個模式的一個實例。對合一,有兩個模式定義,和一個模式的一個實例。n需要知道的是:是否有對參數(shù)的賦值使得模式的實例成為兩需要知道的是:是否有對參數(shù)的賦值使得模式的實例成為兩個模式定義的一個替代。個模式定義的一個替代。n為了應(yīng)用模式的定義,我們必須在兩個方向上替換。為了應(yīng)用模式的定義,我們必須在兩個方向上替換。n例:模式例:模式F(A, B)=G(A, B),M(C, D)=N(C, D)n實例為:實例為:F(John, M(h(v),7)n如果用如果用John替代替代A,7替代替代D,同時,用,同時,用M(h(v)替代替代B,h(v)替代替代C。n則我們的模式實例代表了一個有效的替代。則我們的模式實例代表了一個有效的替代。n從我們的初始表達(dá)式從我們的初始表達(dá)式F(John, M(h(v),7),我們可有兩個結(jié),我們可有兩個結(jié)果。果。n如先作用到如先作用到F:F(J

溫馨提示

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

評論

0/150

提交評論