220 likes | 426 Views
1. 假設以下的敘述為一未提供“捷徑計算”能力的程式段,試用程式設計的技巧,使此敘述經此改寫的動作後,具有與“捷徑計算”之處理方法相同之處理模式。 if <A> and <B> then E1 else E2 endif. if <A> then if <B> then E1 else E2 endif else E2 endif. (1) 寫出兩種布耳表式 (boolean expression) 之 AND 與 OR 兩運算子 (operator) 運算方式並比較兩方法之主要優缺點。
E N D
1. 假設以下的敘述為一未提供“捷徑計算”能力的程式段,試用程式設計的技巧,使此敘述經此改寫的動作後,具有與“捷徑計算”之處理方法相同之處理模式。if <A> and <B> then E1 else E2 endif
(1) 寫出兩種布耳表式(boolean expression)之AND與OR兩運算子(operator)運算方式並比較兩方法之主要優缺點。 • (2) 比較ADA,C,Pascal等三種程式語言對布耳表式運算方式所提供的機制。
(1) 二種作法: • a. 捷徑計算(short circuit evaluation)的意義:對運算式作求值動作時,無需做完整個運算式即可得出最後的結果,如此的計算方式便稱為捷徑計算。 • 範例: • (a) A and B當A為false時,A and B之結果即為false。 • (b) A or B當A為true時,A or B之結果即為true。 • b. 完全計算(complete circuit evaluation)的意義:對運算式作求值動作時,必需做完整個運算式,可得出最後的結果,如此的計算方式便稱為完全計算。 • 範例: • (a) A and B當A為false時,仍然必須處理B之值,但結果依然為false。 • (b)A or B當A為true時,仍然必須處理B之值,但結果依然為true。 • c. 捷徑計算與完全計算之比較:捷徑計算效率較佳,但可能較容易使程式設計師犯下難以除錯之邏輯錯誤;而完全計算則是效率較差,但較不容易使程式設計師犯下難以除錯之邏輯錯誤。
(2) a. ADA利用不同的運算子代表不同之計算,如and與or代表完全計算而and then與or else則代表捷徑計算。 b. C採用捷徑計算。 c. Pascal採用完全計算。
試問在C語言中,最佳化編譯程式(optimization compiler)是否可以將二元布林運算子(boolean operator)前後的兩項子陳式(sub-expression)互相對調?其理由為何?
因為C語言採用捷徑計算,所以最佳化編譯程式不可以將二元布林運算子前後的兩項子陳式互相對調,否則可能會使得執行結果不唯一。
試說明何以動態儲存區配置允許程式中使用遞迴呼叫(recursive call),而靜態儲存區配置則不允許?
試指出下列各種語言中何者使用靜態儲存區配置?何者使用動態儲存區配置?SNOBOL,APL,LISP,Pascal的區域變數及全域變數,FORTRAN,COBOL。
(1) 靜態儲存區配置:FORTRAN、Pascal的全域變數與COBOL。(1) 靜態儲存區配置:FORTRAN、Pascal的全域變數與COBOL。 • (2) 動態儲存區配置:SNOBOL、APL、LISP及Pascal的區域變數。
(1) 試定義何謂靜態資料型態繫結(static type binding),及動態資料型態繫結(dynamic type binding)。 • (2) 試說明下列的語言,各主要採取何種型態繫結方式:Fortran,Pascal,Lisp,APL,Smalltalk。
(1) 靜態資料型態繫結:在編譯時,指定變數的型態。例:Fortran,Pascal。(1) 靜態資料型態繫結:在編譯時,指定變數的型態。例:Fortran,Pascal。 • (2) 動態資料型態繫結:在執行時,指定變數的型態。例:Lisp,APL及Smalltalk。
在一個程式中,一個變數(variable)是一個5-tuple<name、scope、type、l-value、r-value>,請逐一解釋這些tuples。
(1) name:代表名稱。 • (2) scope:代表變數可被引用的空間。詳細內容請參考第六章。 • (3) type:代表型態。 • (4) l-value:代表位址。 • (5) r-value:代表值。
1. 把資料的屬性(attribute)繫於(binding)資料名稱之時機若是在執行程式時為之,此種方式稱為:(A)動態繫法(dynamic binding) (B)靜態繫法(static binding) (C)早期繫法(early binding) (D)隨機繫法(random binding)。
2. 把資料的屬性(Attribute)繫於(binding)資料名稱之時機若是在執行前為之,此種方式稱為:(A)動態繫法(dynamic binding) (B)靜態繫法(static binding) (C)早期繫法(early binding) (D)隨機繫法(random binding)。
3. 程式語言中對變數(variables)之描述不包含 (A)名稱(name) (B)數值(value) (C)錯誤訊息(error message) (D)屬性(attribute)。
4. 那一種程式語言的原始設計中,變數名稱與記憶體位置的連結一資料結合(data binding)在編譯器處理時(compile time)決定?(A)LISP (B)PROLOG (C)Pascal (D)APL。
5. 以下語言在資料類型及儲存的處理上 何者與另三者不同?請選擇。(A)APL (B)BASIC (C)C (D)PL/1。 • 6. 以下語言中,有幾種語言之變數採用動態繫合型態(dynamic binding type) : Lisp、Scheme、C++、Java?(A)1 (B)2 (C)3 (D)4。
7. 陣列(array)的設定採用堆積動態(heap dynamic)者的語言為何?(A)FORTRAN 77 (B)Pascal (C)Ada (D)FORTRAN 9O。 • 8. 在APL中可寫指令L1,2,3,4,5,6;其後又寫L38,就儲存繫合(storage binding)方式而言,應屬那一個變數?(A)靜態(static)變數 (B)堆疊動態(static dynamic)變數 (C)明示堆積動態變數(explicit-dynamic variable) (D)內隱堆積動態變數(implicit-dynamic variable)。
9. 在以下語言中,指出有幾種語言其變數採用靜態型態繫合(static binding type):ADA,C,FORTRAN,APL (A)1 (B)2 (C)3 (D)4。 • 10. 在處理式子(expression)時,多數語言均做強制型態檢查(type checking),而接受合理的混合式子,做強制轉換(coercion),以下語言何者不做強制轉換。(A)ADA (B)C (C)C++ (D)FORTRAN。