1 / 17

本試卷全部試題均須回答。 作答各題時,考生不得加入新的變量,否則不獲給分。

1. 3. 5. 7. 9. head. 本試卷全部試題均須回答。 作答各題時,考生不得加入新的變量,否則不獲給分。. 2 堆疊. 1.(a) 現欲儲存一數字序列。 在 (1) 隊列、 (2) 堆疊、及 (3) 鏈表 當中, 選出 最合適 的數據結構。以完成下列任務。 (i) 移除 序列中最後一個數字: (____) (ii) 在序列 中間插入 一個數字: (____) (iii) 以 相反次序 列印數字序列: (____) (3 分 ). 2. 3. 2. 1 隊列. 3 鏈表. nil.

Download Presentation

本試卷全部試題均須回答。 作答各題時,考生不得加入新的變量,否則不獲給分。

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 1 3 5 7 9 head 本試卷全部試題均須回答。 作答各題時,考生不得加入新的變量,否則不獲給分。 2堆疊 1.(a) 現欲儲存一數字序列。 在(1)隊列、(2)堆疊、及(3)鏈表當中, 選出最合適的數據結構。以完成下列任務。 (i) 移除序列中最後一個數字:(____) (ii) 在序列中間插入一個數字:(____) (iii) 以相反次序列印數字序列:(____) (3分) 2 3 2 1隊列 3鏈表 nil

  2. 1.(b) 假設已有一組數字儲存於 S 內,而 X、Y 和 N 是變量。參考以下算法。 POP (X) 當 S 不是空時, POP (Y) N  X + Y PUSH (N) POP (X) PUSH (X) X=9 (i) 上述算法有什麼目的? Y=5 找出這些數字的總和。 以其總和取替所有數字。 X= 14 Y= 14 14 (ii) 以不使用 N 和用上更少的 PUSH 及 POP 操作為原則, 改寫上述算法,以改善其效率。 POP (X) 當 S 不是空時, POP (Y) X X + Y PUSH (X) CIT 2010 2

  3. 設 N >= 2,參考下列算法,而 N、I 和 X 是變量。 PUSH (N) I  2 當 I < N , POP (X) 若 X 可被 I 整除, PUSH (I) PUSH (X / I) 否則 若 X > 1, PUSH (X) I  I + 1 否則 I  N 5 (c) (i) 假設 S 的初始內容是空的。 試就下列每個情況, 寫出空運行上述算法後 S 的最終內容。 2 5 X%I==0 5 3 5 I=3,4,5

  4. 設 N >= 2,參考下列算法,而 N、I 和 X 是變量。 X%I==0 PUSH (N) I  2 當 I < N , POP (X) 若 X 可被 I 整除, PUSH (I) PUSH (X / I) 否則 若 X > 1, PUSH (X) I  I + 1 否則 I  N 72 (c) (i) 假設 S 的初始內容是空的。 試就下列每個情況, 寫出空運行上述算法後 S 的最終內容。 2 72 36 18 9 2 36 18 9 9 18 2 9 36 2 3 72 2 (ii) s 的最終內容與 N 有什麼關係? 7分 S 是 N的質因數 N 是 S所有數值的連乘積

  5. #include <stdio.h> int score[6], rank[6]; main(){ } 2. 某收費電視台提供五個頻道供顧客訂購。 其資訊科技部門將編寫一個程式, 以便處理顧客給予各頻道的評級。 所有評級均不可相同。 假設 score 及 rank 為全程整數陣列。 void SubA(void){ int i; printf ("There are 5 channels." "Please enter scores for them.\n"); for (i=1; i<=5; i++){ printf ("Channel %d:", i); scanf ("%d", &score[i]); } } 輸入5個數字 不會重覆 (a)為確保 SubA 內輸入的數字不會重覆,在子程式 SubB 採用下列算法。 當於 SubA 內輸人的五個數字出現重覆,SubA 便會不斷地在 SubB 內運行。

  6. 開始 執行 SubA 5 個輸入數字 沒有重覆? 否 是 結束 (a)為確保 SubA 內輸入的數字不會重覆,在子程式 SubB 採用下列算法。 當於 SubA 內輸人的五個數字出現重覆,SubA 便會不斷地在 SubB 內運行。 試完成下列SubB void SubB(void){ int unique, i, j; // 獨一無二 } do{ SubA(); unique = 1; if (score[i]==score[j]) unique = 0; }while( ); for (i=1; i<=4; i++) for (j=i+1; j<=5; j++) 每個數字 跟後數比較 ! unique score[i] i=1 j=2..5

  7. 已輸入分數 (score) (b) SubB 已被執行, 而顧客的評級已儲存於score內。 假設以下的子程式SubC 會以下列score和rank的 初始內容運行。 排名次 (rank) void SubC(void){ int i, j, temp; for(i=1; i<=4; i++) for(j=1; j<=5-i; j++) if (score[j] < score[j+1]){ } } // Bubble-Sort  由大至小排列? 由小至大排列? temp = score[j+1]; score[j+1] = score[j]; score[j] = temp; temp = rank[j+1]; rank[j+1] = rank[j]; rank[j] = temp;

  8. j=1,2,3,4 (i)試於外循環的第一輪運作之後, 亦即僅在 i=2之前, 寫出score 和 rank 的內容。 for(i=1; i<=4; i++) for(j=1; j<=5-i; j++) if(score[j]<score[j+1]) (ii)試寫出 score 和 rank 的最終內容。 (iii) rank 的索引代表 score 內容的序列,rank 的內容又代表什麼? 8分 頻道號數 / score 最初的索引 輸入先後次序

  9. TEU=貨櫃 = P = 2Q = 4R 3. 一個 TEU是貨櫃的容量單位。 家強於船務公司工作, 他需要處理三類貨物,如下所示 N和st是兩個全程變量。 家強編寫以下子程式 InputCargo 來找出貨物數量 N 及運送貨物的次序 st。 int N; char ch, st[50]; (a) (i) InputCargo內的 N 應該於運用前被初始化。 試寫出其初始化的語句及相關行號。 輸入:PRQRPXRQ scanf("%c", &ch); while (ch!='X') { st[N] = ch; N++; scanf("%c", &ch); } N = 0; 135N = 0;

  10. 輸入:P R Q R P X R Q scanf("%c", &ch); N=0; while (ch!='X') { st[N] = ch; N++; scanf("%c", &ch); } 3a(ii)假設 InputCargo 已恰當地 處理(a)(i)的初始化, 當執行InputCargo 時, 家強想依下列次序輸入貨物: P,R,Q,R,P,X,R,Q。 這樣 N 的最終內容 和 st 首N項的最終內容是什麼? 5 (1) N = (2) st = P R Q R P (4分) TEU=貨櫃 = P = 2Q = 4R 以下例子展示出某一天首五個貨櫃內貨物的次序。 一個TEU ¼,¼,½, 1, 1, ¼,½,¼, ¼,¼,½, 1, ½,¼,¼, (b)考慮下列貨物的次序 根據上述貨物的次序, 在第四個貨櫃內, 貨物的次序是什麼? 2分 R Q R

  11. TEU=貨櫃 = P = 2Q = 4R st 假設 N 和 st分別儲存了某一天的 貨物總數量及貨櫃內貨物的次序。 家強編寫子程式 BCheck 去檢查是否所有貨櫃都完全裝滿, 最後一個貨櫃除外。例如, int BCheck(void){ const int capacity=4; // 容量=4R int k, i, flag; // ok=0 k = capacity; flag = 0; for (i=0; i<N; i++){ // N=5 } return flag; } (c) (i) X和Y的內容 是什麼? switch (st[i]){ case 'P' :; break; case 'Q' :; break; case 'R' :k--; break; } if (k==0) k = capacity; if (k<0) flag = 1; 4 k-=X 2 k-=Y

  12. 3(c) (i) 方格 X 和方格 Y 的內容是什麼? (ii) 舉出兩個支持使用常數 capacity 的原因。 X:4 (capacity) Y:2 (capacity/2) 此數值會在函數內不變。/ 只需改變此常數的數字一次,便可修改所有有關的數值 (容易修改)/ 它是一個有意思的數值(易讀)。 (iii) BCheck 的返回值(return flag)代表什麼? 6分 若返回值是1/TRUE, 表示貨櫃未完全裝滿 int BCheck(void){ const int capacity=4; // 容量=4R int k, i, flag; // ok=0 k = capacity; flag = 0; for (i=0; i<N; i++){ // N=5 } return flag; }

  13. 3(d) 假設貨物 P、Q 和 R的數量已分別儲存於全程變量 NP、NQ和NR內。 試為家強完成下列子程式 FindNC,以傳回所要求貨櫃數量的最小值。 e.g. NP=4 NQ=3 NR=5 NC=4+1+1 1 2 可以混合 NQ%2>0 NR%4>0

  14. 4. 小明打算編寫一個程式,將儲存在檔案內的一句子, 以英文字為單位,以相反次序調換。例如, 原本的句子:IT IS SIMPLE 調換後的句子:SIMPLE IS IT int N; char st1[100], st2[100]; 假設該句子只包含英文字母及空格,而每個英文字後均有一個空格。在程式中,N是全程整數變量,而st1和st2 均是全程字符陣列。小明編寫子程式 init 來讀取一個檔案內的句子。 (a)試指出 init 內的三個問題,並作出相應的更正。 6分 fopen ("f.txt", "r"); != fclose(fp);

  15. N=12 (b)小明亦編寫了另一子程式conv1來處理 st1。假設執行 init 後,st1 儲存了以下句子。 void conv1 (int a, int b){ int i; for (i=a; i<=b; i++) st2[a+b-i] = st1[i]; } 1 N st2[12] =st1[1]; 如果執行 conv1 (1,N), st2會儲存了什麼內容? ELPMIS SI TI Reverse 反轉一句 st1  st2

  16. (c) 小明亦編寫了另一附有 conv1 的子程式 conv2,用來處理st1。 假設執行 init 後,st1 儲存了以下句子。 N=12 j=1 i=3 void conv2 (void){ int i, j; j = 1; for(i=1; i<=N; i++) } (i)如果執行 conv2 , st2 會儲存了什麼內容? TI SI ELPMIS if (st1[i]==' '){ conv1(j,i-1); st2[i] = ' '; j=i+1; } (ii)若果 st1 內有兩個連續的空格字符, 這樣會不會有問題呢?試簡略說明。 4分 沒有問題。 此程式能處理額外的空格字符, conv1(j,i-1)不會對第一個空格字符 往後的空格作任何修定 反轉 1個字 conv1(1,2) conv1(4,5) conv1(7,12)

  17. (d) conv1 和 conv2 都不能將 st1內的句子,以英文字為單位,以相反次序調換。例如, 原本的句子:IT IS SIMPLE 調換後的句子:SIMPLE IS IT strncpy(st1,st2,N); 小明已編寫了一個子程式MyCopy(st2, st1, 1 , N), 可將st2 內首N 個字符複製到st1 的對應位置。 試運用 conv1、conv2 和 MyCopy, 編寫一個子程式 conv3, 幫助小明完成上述調換。 4分 conv1: 反轉一句st1  st2 ELPMIS SI TI conv2: 反轉一字st1  st2 TI SI ELPMIS void conv3(void){ } conv2(); MyCopy(st2,st1,1,N); conv1(1,N); conv1(1,N); MyCopy(st2,st1,1,N); conv2();

More Related