freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第三章過(guò)程式程序設(shè)計(jì)語(yǔ)言-資料下載頁(yè)

2025-08-01 13:01本頁(yè)面
  

【正文】 參數(shù)模式 in,out,inout指明只讀,只寫(xiě),讀寫(xiě)參數(shù)。 C語(yǔ)言允許任意多個(gè)參數(shù)的調(diào)用。如內(nèi)定義函數(shù) printf()調(diào)用時(shí)可以寫(xiě)任意個(gè)輸出,只是第一參數(shù)中的格式個(gè)數(shù)與參數(shù)個(gè)數(shù)對(duì)應(yīng)。 ? 過(guò)程定義與調(diào)用 過(guò)程子程序定義形式 procedure PROC (fp1,fp2,...) //過(guò)程型構(gòu) B。 //子程序體包含局聲明 對(duì)應(yīng)的過(guò)程調(diào)用是: PROC (ap1, ap2, ...); C語(yǔ)言一切過(guò)程,包括主程序都是函數(shù)過(guò)程。它以 void(無(wú)值 )關(guān)鍵字代替函數(shù)類(lèi)型指明符,實(shí)施子程序過(guò)程語(yǔ)義 ?引用或調(diào)用的形式 ? 無(wú)參過(guò)程 函數(shù)和過(guò)程的參數(shù)表均可為空。有的語(yǔ)言保留 (),有的只有一個(gè)名字。一般無(wú)參過(guò)程也要更新過(guò)程內(nèi)部的值。函數(shù)過(guò)程還會(huì)返回不同的值。全局量在函數(shù)中有效。改變了全局量?jī)纱握{(diào)用結(jié)果值當(dāng)然不一樣。這就是函數(shù)的副作用 (side effect)。 有副作用的函數(shù) C 在很大程度上利用函數(shù)副作用,例如,當(dāng)需要跳過(guò)空白時(shí)寫(xiě): while ((c = getch()) == 39。39。); Ada中常用的隨機(jī)數(shù): function RANDOM return FLOAT range … 。 引用時(shí), 若 FIELD已聲明為常量: RESULT ∶= RANDOM * FIELD ; RANDOM若無(wú)副作用 RESULT值不可能改變。 參數(shù)機(jī)制 語(yǔ)言中第一類(lèi)對(duì)象均可作函數(shù) /過(guò)程參數(shù)。 由于變量的時(shí)空特性,傳遞的形 實(shí)參數(shù)可以有許多不同的實(shí)現(xiàn)結(jié)合的辦法 , 即參數(shù)機(jī)制。 傳值調(diào)用( callbyvalue) [1]實(shí)參表達(dá)式先求值 [2]將值復(fù)制給對(duì)應(yīng)的形參。形參和實(shí)參有同樣大小的存儲(chǔ) [3]過(guò) 程運(yùn)行后一般不再將改變了的形參值復(fù)制回實(shí)參 Pascal中的傳值調(diào)用 PROCEDURE test1(J2,A2:Integer。P2:list) BEGIN Writeln(J2,A2,P2↑.value)。 J2∶= J2 + 1。 P2∶= P2↑.next。 Writeln(J2,A2,P2↑.value) END. 調(diào)用程序有: test1(J1,A1[J1],P1↑.next)。 第一次打印為: 1 30 % 第二次打印為: 2 30 $ 堆堆堆堆堆堆堆堆堆 J1 A1 P1 1264530* $ /% 堆堆堆堆堆堆堆test1 2 J2 A2 P2 130指針 束定傳值調(diào)用圖示 傳名調(diào)用 (callbyname) 傳名在過(guò)程 /函數(shù)中加工的就是實(shí)參已分配的值,因此不需付出雙倍存儲(chǔ)代價(jià)。但傳名過(guò)程 的 虛實(shí)結(jié)合 是 將程序體中所有形參出現(xiàn)的地方均以實(shí)參變?cè)脫Q。這樣出現(xiàn)幾次算幾次效率是低的。 傳名調(diào)用程序示例 由于 Pascal無(wú)傳名機(jī)制,此處作一點(diǎn)擴(kuò)充: PROCEDURE test2(NAME J2,A2:Integer。NAME P2:List)。 函數(shù)體同 test1 執(zhí)行同樣調(diào)用: test2(J1,A1[J1],P1↑.next)。 名結(jié)合后打?。? 1 30 % 執(zhí)行后結(jié)果是: 2 45 $ * $ /% 堆堆堆堆 堆堆test2 堆堆 J2 堆堆 A2 堆堆P2 J1P1↑堆nextA1[J1] 傳名調(diào)用圖示堆堆堆堆堆堆堆堆堆 J1 2 A1 P1 1264530 引用調(diào)用 (call_by_reference) 引用參數(shù)實(shí)現(xiàn)時(shí), 編譯器在子程序堆棧中設(shè)許多中間指針, 將形參名束定于此指針,而該指針的值是實(shí)參變量的地址 (在主程序堆??蚣軆?nèi) ),在子程序中每次對(duì)形參變量的存取都是自動(dòng)地遞引用到實(shí)參存儲(chǔ)對(duì)象上。 引用調(diào)用的 Pascal示例: PROCEDURE test3(VAR J2,A2:Integer。VAR P2:List)。 函數(shù)體同 test1 相應(yīng)的調(diào)用程序是: test3(J1,A1[J1],P1↑.next)。 第一次打印是: 1 30 % 第二次打印是: 2 30 $ 引用調(diào)用圖示 堆堆堆堆堆堆堆堆堆 2 J1 A1 P1 11264530* $ /% 堆堆堆堆堆堆堆test1 J2 A2 P2 參數(shù)模式與返回調(diào)用 (callbyreturn) 顯式指明參數(shù)傳遞模式 ,可以為編譯實(shí)現(xiàn)提供信息 fun_name(x,y:Real。 VAR s,q:Integer)... x, y傳值實(shí)現(xiàn),它只讀。 s, q引用實(shí)現(xiàn),可讀 /寫(xiě) Ada只規(guī)定參數(shù)模式 in, out, inout, 傳遞方向的模式 (mode)。 由編譯選擇實(shí)現(xiàn)方式: proc_name (X, Y:in Real。S:inout Integer。Q:outInteger)… in模式可不寫(xiě)出 (缺省 )。 函數(shù)只能有 in的模式,過(guò)程都有,且出現(xiàn)次序不受限制。 x, y因在子程序中只讀 ,傳值實(shí)現(xiàn)可保證不受破壞。 s讀 /寫(xiě)用引用實(shí)現(xiàn),而 q是只寫(xiě)參數(shù),傳值和引用都不能保證 ‖只 ‖寫(xiě) 實(shí)現(xiàn)返回調(diào)用機(jī)制有兩種辦法 :其一是復(fù)制。另一種辦法是引用實(shí)現(xiàn)增加 ‖只寫(xiě) ‖保護(hù) 值 返回調(diào)用( callbyvalueandreturn) 是對(duì) byreference的改進(jìn),因多進(jìn)程競(jìng)爭(zhēng)數(shù)據(jù)資源時(shí)多重引用 (束定 )易于引起混亂 P2 返回值由 P2定 返回值由 P1定 正 常順序執(zhí)行 對(duì)于并發(fā)多任務(wù)宜只讀 ── 只寫(xiě) 值與返回調(diào)用機(jī)制是把值調(diào)用和返回調(diào)用組合起來(lái) ,實(shí)現(xiàn)調(diào)用程序雙向通道 ,這對(duì)于有多個(gè)存儲(chǔ)器的多處理器系統(tǒng)和網(wǎng)絡(luò)分布式系統(tǒng)值調(diào)用極度安全 在子程序執(zhí)行期間因不是束定, 形參變量的值不會(huì)中途改變, 復(fù)制回去和拷貝進(jìn)來(lái)處可設(shè)斷點(diǎn)檢查 P1 P2 P1 P2 P1 P2 指針參數(shù)( call_by_point) ? 指針作為參數(shù)其實(shí)現(xiàn)方式一般是復(fù)制機(jī)制,它復(fù)制的是地址 (指針內(nèi)容 ) ? 注意 和引用調(diào)用之同異 例:指針 Pascal引用版: 交換兩變量的內(nèi)容 PROCEDURE swap1( VAR a,b:Integer); VAR t:Integer。 BEGIN T ∶= a。 a ∶= b。 b ∶= t END。 調(diào)用程序片斷: j = 3。 k = 5。 swap1(j,k)。 //結(jié)果 j = 5, k = 3 J = 3 K= 5 Callerframe = a = t = b 3 ========= ========= Swaplframe 指針版 : 變換兩變量的內(nèi)容 TYPE int_ptr = ↑Integer。 VAR jp, kp:int_ptr。 PROCEDURE swap2 (a,b:int_ptr)。 VAR t:Integer。 BEGIN t∶= a↑。 a↑∶= b↑。 b↑∶= t END。 相應(yīng)調(diào)用程序片斷: NEW (jp)。 jp↑= 3。 NEW (kp)。 kp↑∶= 5。 Swap2(jp,kp)。 堆堆堆堆堆堆堆 jp kp 堆堆堆堆堆SWAP2 a b t 3 指針調(diào)用圖示 堆堆堆 35C語(yǔ)言的指針參數(shù)傳遞 void swap3(int *a, int*b) { int t。 t = *a。 *a = *b。 *b = t。 } 形參是兩指針, 實(shí)參不用指針的版本: main() { int j = 3。 k = 5。 //聲明并初始化兩整數(shù) swap3(amp。j,amp。k)。 //類(lèi)型匹配嗎? } 堆堆堆堆堆堆堆堆 j k 5堆堆堆堆堆堆SWAP3 a b 3 t C語(yǔ)言的指針引用調(diào)用 抽象與封裝 ? 函數(shù)和過(guò)程是封裝的程序?qū)嶓w,它有數(shù)據(jù)和操作 , 規(guī)格說(shuō)明( 型構(gòu) ) 和過(guò)程體, 一體使于人們控制復(fù)雜性 ? Pascal統(tǒng)一的嵌套結(jié)構(gòu)不造于大型程序 main代代Sub2代代代代Sub1代代代代main數(shù)據(jù)mainSub1~10Sub11~15Sub16~21Sub22~284 3 2 1小程序結(jié)構(gòu) 大程序結(jié)構(gòu)數(shù)據(jù) 2 sub1 sub10 數(shù)據(jù) 4 sub22 sub28 數(shù)據(jù) 1 sub11 sub15 數(shù)據(jù) 3 sub16 sub21 main 續(xù) ? 將相關(guān)的數(shù)據(jù)和操作封裝成大模塊(若干類(lèi)型,若干過(guò)程 /函數(shù)) 結(jié)構(gòu)上形成包 package或模塊 Modula ?包是可分別編譯。隨時(shí)連接軟件資源,是解決復(fù)雜系統(tǒng)的有力手段 ?包的規(guī)格說(shuō)明和包體顯式分開(kāi)。語(yǔ)義上正好是“作什麼”,“怎麼做” 堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆堆子程序體子程序體子程序體私有操作程序包體規(guī)格說(shuō)明外界可見(jiàn) 模塊和包 ? 規(guī)格說(shuō)明和體在表示結(jié)構(gòu)上的分離。有利于修改,維護(hù) ? 封裝實(shí)現(xiàn)數(shù)據(jù)隱藏,有利于安全 ? 規(guī)格說(shuō)明是程序包的抽象,有利于復(fù)雜系統(tǒng)簡(jiǎn)化 ? 模塊 ( 包 ) 封裝數(shù)據(jù)與操作,它有可控界面,外界不能操縱私有數(shù)據(jù)引出公有 ( public包的使用者可見(jiàn)) 、私有 ( private本包所有操作可訪問(wèn),包外不可見(jiàn)) 、保護(hù)( protected,包外不可見(jiàn),但本包的子包可見(jiàn)) 概念 ? 包只是 以封裝手段 ,可 有 /可沒(méi)有 邏輯 語(yǔ) 義 只有數(shù)據(jù)無(wú)操作,數(shù)據(jù)塊 BLOCK DATA( FORTRAN) 只有操作無(wú)共享數(shù)據(jù)如函數(shù)包,數(shù) 學(xué) 庫(kù) 有數(shù)據(jù)有操作 , 一口對(duì)外可模擬自動(dòng)機(jī) 有數(shù)據(jù)有操作 , 模擬客觀世界對(duì)象 — 增加程序表達(dá)能力 封裝的包可實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)類(lèi)型 ADT Ada 的復(fù)數(shù)程序包 package COMPLEX is type NUMBER is record REAL_PART:FLOAT; IMAG_PART:FLOAT; end record。 function +(A, B: in NUMBER) return NUMBER; function (A, B: in NUMBER) return NUMBER; function *(A, B: in NUMBER) return NUMBER; end COMPLEX; package body COMPLEX
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1