二、貴公司正在準備針對某個政府標案進行投標,該標案要求專案的進行必須採 用所謂的安全軟體發展生命週期 (SSDLC) 來進行開發。
(一)請問為什麼客戶會要求採用 SSDLC 而非傳統的 SDLC 進行該系統的開發?(10分)
(二)請說明 SSDLC 在需求分析、系統設計…等各個 SDLC 階段,如何將安全性納入這些軟體的開發中?(15分)
二、貴公司正在準備針對某個政府標案進行投標,該標案要求專案的進行必須採 用所謂的安全軟體發展生命週期 (SSDLC) 來進行開發。
(一)請問為什麼客戶會要求採用 SSDLC 而非傳統的 SDLC 進行該系統的開發?(10分)
(二)請說明 SSDLC 在需求分析、系統設計…等各個 SDLC 階段,如何將安全性納入這些軟體的開發中?(15分)
二、請列舉及解釋至少三種不同的需求驗證技術 (Requirements Validation Techniques),並請說明那些需求是屬於不可測試 (Not Testable)。(25分)
二、請回答下列 C 語言程式問題:
(一)請問下列函式,f1(0.5, 6.5) 的輸出為何 (該數字的精確度到小數點後第一位)?(5分)
double f1(double x, double y) {
int a = 2, b = 1, c = 1;
x += (a+b+c == 2*b);
x -= a*b/x;
return (x+c);
}
(二)請問下列函式,f2(0, 3) 的輸出為何?(5分)
int f2(int x, int y) {
if (x > 5) return (y+1);
else if (x > 3) return 3+f2(x+1, y+1);
else return 1+f2(x+1, y);
}
(三)以下程式功能為:輸入的第一個參數為指定的進位制 (base),B(2 <=B<=9),第二個參數為以 B 進位制表示的數字,N(0 < N < 10,000)。請將 N 經十進位制轉換後輸出,例如將九進位的1621轉成十進位的1234,我們有程式碼,如 printf("%d\n", transformX10(9, 1621));其中會呼叫 transformX10(9, 1621) 做進位制 (base) 的轉換且其輸出為1234。有關 transformX10 的程式如下,請填寫空格處。(每一空格5分,共15分)
int transformX10(int base, int x) {
int ans = 0, index = 1;
while (x > (1) )
ans = (2) +index*(x%10);
index = (3) *base;
x = x/10;
}
return ans;
}

三、假設書架上有七本書,已知每一本書的高度都不一樣,請以下列方式進行排序:第一個與第二個位置上的書先比較,較低的書放到第一個位置,較高的書放到第二個位置;再來第二個與第三個位置的書相比較,依此類推。第一輪做完後,再從頭開始進行第二輪的比較與交換,然後再進行第三輪、第四輪等,直至第六輪結束為止。
(一)若這七本書高度分別為15, 12, 17, 18, 11, 14, 19,請問每一輪需交換書本位置的次數為何?(10分)
(二)若總共有 n 本書本,最多共需交換幾次書本才能排序完成?(5分)
(三)請宣告並說明如何以一維陣列 books[n] 來表示書本的位置與高度。(5分)
(四)請以上述宣告的一維陣列資料結構為基礎,用 C, C++ 或 Java 寫出上述排序演算法。(10分)
五、請使用 C 語言設計一個程式,讀取使用者輸入的六個整數,並對讀取的六個整數分別判斷他們是否為質數,若是質數則在數字後標上 (P)、若非質數則在數字後標上 (N)。(20分)
三、定義一個函數如下:
int f(int n) { if(n == 0) return 0; if(n == 1) return 1; if(n == 2) return 2;
return f(n-1)+f(n-2)+f(n-3); }
請問計算 f(6) 時,共呼叫 f(n) 幾次?(8分)

三、如下程式碼所構成的方法/ 函數 (method/function),在呼叫時,使用recursiveFlowControl(3, “ss”, “dd”, “aa”),請問該方法被呼叫執行後,顯示結果為何?如為語法有誤或執行時期發生中斷,請說明原因,並請修正錯誤或引起中斷的程式,讓程式可以正常執行結束並顯示結果。註:System.out.println( );會將小括號中的字串顯示到螢幕輸出裝置。(15分)
void recursiveFlowControl(int num, String s1, String s2, String s3)
{ System.out.println(“... I am here ...”);
if (num == 1)
{ System.out.println(“num==1, Move from ” + s1 + “ to ” + s2); }
else
{ recursiveFlowControl(num-1, s1, s3, s2);
System.out.println(“num!=1, Move from ” + s1 + “ to ” + s2);
recursiveFlowControl(num-1, s3, s2, s1);
}
} // End of recursiveFlowContorl
六、試說明下列程式碼在瀏覽器上的呈現為何?(15分)
<!DOCTYPE html>
<html>
<body>
<p> line 1 </p>
<p id="demo"></p>
<p> line 2 </p>
<script>
var cars = ["BMW", "Volvo", "Saab", "Ford"];
var i = 0;
var text = "";
while (cars[i]) {
text += cars[i] + "<br>";
i++;
}
document.getElementById("demo").innerHTML = text;
</script>
</body>
</html>
十、在32 位元的作業系統下,試回答下列問題:
(一) int a; 請問 a 的範圍?(4分)
(二)計時系統都是以正整數範圍 (負整數範圍不計) 來計算秒數,假如開始計時時間為:1 January, 1970 at 12:00:00 a.m.(午夜12點,非中午12點),請問在西元何年何月何日何時,這樣的計時系統會出現問題?(8分)
四、如果我們採取不同參數傳遞的方法,請回答下面程式執行的結果:(每小題4分,共12分)
(一) pass-by-reference
(二) pass-by-name
(三) pass-by-value-result
int y = 1, x = 1; int fun(int a, int b) {b += a; a = b+x; return a;} void main( ) { int x = 2; y = fun(x, y)+y; printf(“x = %d, y = %d”, x, y); } |