|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2012-06-05, 02:26 PM | #1 |
註冊會員
|
疑問 - 程式語言題目不會><求解答
有點多><
1. 考慮下列 ALGOL 程式片段: for index := l , 4, 13, 41 step 2 until 47, 3 * index while index < 1000, 34, 2, -24 do sum := sum + index 此 for 敘述可將那些數值依序加入 sum 中 2. 考慮下列 ALGOL 程式片段: SUM :=0; J :=1; N :=25; FOR I :=1 STEP J UNTIL N DO BEGIN SUM :=SUM+A[i]; J:=J+2*I; N:=N-2*J END; 如果在進入 FOR 迴圈時,計算 J 值和 I 值,此後每次執行迴圈之後重新計算 J 值,則會求 得陣列中那些元素之和? 3. 考慮下列 ALGOL 60 的 for 迴圈: i:=1; FOR count:=1 step count until 3*I do i:=i+1; 寫出 i, count, step count, until 3*i 的變化。 4. 寫出下列兩種由計數控制迴圈(counter-controlled loop)組成之程式執行後所印出的結果。 C 語言 ADA 語言 void test() procedure TEST is {int i, sum; I, SUM:INTEGER; sum=8; begin for(i=1;i<10;i++) I:=5; SUM:=8; sum+=i; for I:=1..10 loop printf("%d\n",i); SUM:=SUM+I; } end loop; PUT(I); NEW_LINE; end TEST; 5. 考慮下列程式,有三個副程式P,Q及R,P呼叫Q,Q呼叫R。 請繪出採用深存取(deep access),在副程式R可以引用的變數。 請繪出當R執行時,淺存取(shallow access)的中央環境表及隱藏堆疊的內容。 procedure P; integer X , Y ; begin : end ; procedure Q ; real B , A , U , X ; begin : end ; procedure R; integer Z , Y , A ; real W, V ; begin : end ; 6. 試就以下程式段分別以清除法及保留法說明執行結果為何? procedure B; var P:integer=6; begin write(P); P:=P*5; write(P); P:=P-10; end; {B} procedure A; begin B; …. B; end; {A} 7. 請寫出下列程式 (a)採取靜態領域法時,在位置、、中的變數在何處定義。 (b)採取動態領域法時,在位置、、中的變數在何處定義。 (c)請繪出當執行到SUB1時,中央堆疊之變化,標示靜態鏈及動態鏈。 (d)請繪出當執行到SUB1時,顯示堆疊(display stack)關係圖。 (e)請繪出採用深存取(deep access),在副程式SUB1可以引用的變數。 (f)請繪出當執行到SUB1時,淺存取(shallow access)的中央環境表及隱藏堆疊的內容。 program MAIN_2; var X : integer; procedure BIGSUB; var A, B, C : integer; procedure SUB1; var A, D : integer; begin { SUB1 } A := B + C + X; end; { SUB1 } procedure SUB2; var B, E : integer; procedure SUB3; var C, E : integer; begin { SUB3 } SUB1; E := B + A: end; { SUB3 } begin { SUB2 } SUB3; A := D + E; end; { SUB2 } begin { BIGSUB } SUB2; end; { BIGSUB } begin BIGSUB; end. { MAIN_2 } 8. 考慮以下程式: program P; var x, y: integer; procedure A (var Z : integer); var x : integer; begin x:=1; B; Z := x end A; procedure B; begin x := x + 1 end B; begin x:=5; A(y); write(y) end. 假如用(1) static scoping (2) dynamic scoping,則程式印出結果為何? 9. 此程式呼叫順序 MAIN → A → C → F → B → D, (a)請繪出當執行到 D 時,中央堆疊之變化,標示動態鏈及靜態鏈 (b)請繪出當執行到 D 時,顯示堆疊(display stack)關係圖。 program MAIN procedure A; procedure B; procedure D; …. end D; end B; procedure C; procedure E; … end E; procedure F; … end F; end C; end A; end. 10. 下列 Pascal 程式執行結果為何?若 Pascal 語言改採動態領域(dynamic scoping)的方式,結 果將如何? program A; var X, Y: integer; function B(D : integer): integer; begin B := X+D end; function C(D : integer) : real; var X : real; begin X := 5.1; C := X+B(D+1) end; begin X := 3; Y := 0; writeln(C(Y)) end. 11. 考慮下面的 C 語言程式片段,並回答下列問題。 int abc(int *k) { *k +=4; return 3 * (*k) - 1; } void main(){ int i = 10, j = 10, result1, result2; result1 = (i / 2) + abc(&i); result2 = abc(&j) + (j / 2); } (1)如果在運算式中的運算元估算的順序是由左到右,則 result1 及 result2 的值為何? (2)如果在運算式中的運算元估算的順序是由右到左,則 result1 及 result2 的值為何? 12. 使用本文呼叫法與傳名呼叫法的結果 begin integer x; procedure SUB(y); integer x; x:=2; y:=x+y*3; print(y); end SUB; x:=1; SUB(x); end; 13. 下面的程式在執行後,GLOBAL 與陣列 LIST 之值為何?請考慮下列二種參數傳遞的方式: (1) call by name (2) call by value Procedure BIGSUB; integer GLOBAL; integer array List[1:2], GLOBAL; procedure SUB(PARAM); integer PARAM; begin PARAM:=1; GLOBAL:=GLOBAL-1; PARAM:=3 end; begin List[1]:=4; list[2]:=6; GLOBAL:=2; SUB(LIST[GLOBAL]) end; 14. 底下類似 Algol (Algol-like)的程式,當參數傳遞時採用: (一)x 用名字法,y 用引用法 (二)x 與 y 皆用名字法時輸出值分別為何? Integer i; Integer Array A[1:2]; Procedure P(x, y); Integer x, y; Begin x:=x+1; y:=y+1; write(x, y); x:=x-1; y:=y-1; END Proc P; i:=1; A[1]:=6; A[2]:=12; P(i, A[i]); write(i, A[1], A[2]); P(A[i], i); write(i, A[1], A[2]); END; 15. 程式 sub1(x,y,z)的定義如下: procedure sub1(var x, y, z : integer) var a, b : integer; begin a:=x+y; b:=x*z; z:=a+b-z; y:=a+b+z; end; 若以 call-by-reference 呼叫 sub1(m,m,n),其中 m=2, n=1,則呼叫執行完畢後,m, n 之值為何? 16. 程序 sub1(x,y,z)的定義如下: procedure sub1(var x, y, z : integer) var a, b : integer; begin a:=x; b:=y; z:=a+b+z; y:=a+z; end; 若以 call-by-name 呼叫 sub1(m+n,m,n),其中 m=2, n=1,則呼叫執行完畢後,m, n 之值為何? 17. 以下是一個程式: program MAIN; var a, b, c: integer; procedure sub1(var x,y,z:integer); begin x:=y+z; y:=x+z; end; begin a:=3; b:=8; c:=5; sub1(a+b,a,b); print a; end. 若參數的傳遞是以傳址法(call by reference)的方式處理,則上述程式的輸出結果為何? 18. 若從單純的呼叫/返回(simple call-return)方式中,除去下列各項限制,則各得到何種控制 結構(control structure)? (1) 需用明顯呼叫 (2) 從頭開始執行 (3) 立即轉移控制 (4) 單一執行順序 (5) 不允許遞迴呼叫 |
送花文章: 0,
|
2012-06-05, 11:12 PM | #3 (permalink) |
論壇主管
|
抱歉
本論壇不代替回復作業問題, 此主題關閉。 |
__________________ 不飛的不飛 ... 因為曾經端座在雲霄之上 ... 所以不飛 , 因為期待您能與不飛抬頭共列翱翔天昊 ... 所以更是不飛 ! 不飛不想飛 ... 畢竟殘破雙翼在苔階沾濕 ... 所以低頭 , 只好安靜地蹲在這練習 ... 學習要如何才能飛的更高更遠 ! 不飛不曾飛 ... 終於知道青澀期代表蒼狗 ... 所以情殤 , 一甲子的意境等於六十年的期盼的凝固 ... 所以就此棲巢 ! |
|
送花文章: 959,
|
|
|
相似的主題 | ||||
主題 | 主題作者 | 討論區 | 回覆 | 最後發表 |
尋找古老的程式語言Turbo C | lin8093 | 一般電腦疑難討論區 | 0 | 2003-09-09 10:29 PM |