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

正文內(nèi)容

第三章過程式程序設計語言-資料下載頁

2025-08-01 13:01本頁面
  

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