主題 15 結構化 程式設計 15-1 結構化程式設計概念 結構化程式設計的特性與優點 P. 15-3 15-2 內建函數 數值函數 (Int Fix Rnd) P. 15-4 字串函數 (Len Left Mid Right) P. 15-7 15-3 自定函數與副程式 自定函數與副程式的 P. 15-12 P. 15-16 定義與呼叫
主題 15: 結構化程式設計 15-1 結構化程式設計概念 一 認識結構化程式設計 1. 使用循序 條件 重複等 3 種基本結構 2. 將一個大型程式由上而下劃分成多個功能獨立的程式模組 3. 每一個模組只有㆒個入口與㆒個出口 4. 儘量不使用 GoTo 指令 大型程式模組 1 模組 2 模組 3 二 模組化的優點 模組 n 1. 模組 (module) 可重複使用, 節省程式開發時間 2. 程式開發易於分工, 可將這些模組交由多位設計師分工合作 3. 可簡化程式複雜度, 提升可讀性, 易於除錯與維護 + ( )1. 下列何者不是結構化程式設計的控制結構之一? (A) 循序結構 (B) 選擇結構 (C) 宣告結構 (D) 重複結構 [100 工管管理 ] ( )2. 結構化程式設計通常由循序 選擇及重複結構組成, 下列何者不是其主要的特 點? (A) 從上而下將程式分解成多個程式模組 (B) 每一個程式模組都具有多 個入口及出口 (C) 每一個程式模組分別負責一件獨立的工作 (D) 簡化程式的 複雜度 [96 商業類 ] ( )3. 結構化程式設計, 是一種由上而下且模組化的設計方法 下列關於每一個模組所擁有之出入口的敘述, 何者正確? (A) 單一入口 單一出口 (B) 單一入口 多個出口 (C) 多個入口 單一出口 (D) 多個入口 多個出口 [94 商業類 ] ( )4. 有關結構化程式設計的敘述, 以下何者錯誤? (A) 可以增進程式的易讀性 (B) 可以增進程式的易維護性 (C) 最好使用結構化分析 (Structured Analysis) 技術 (D) 可以節省程式撰寫的時間一半以上 [ 丙級軟體設計 ] ( )5. 在結構化程式設計中, 應該避免使用下列何種敘述? (A)If Then (B)GoTo (C)While End While (D)For Next 秒 測結構化程式設計的概念有哪些? 15-3
計算機概論總複習 ( 下 ) 答 1. C 2. B 3. A 4. D 5. B 解 2. 每一個模組只有一個入口與一個出口 4. 可以節省程式開發時間, 但不一定能節省一半以上 15-2 內建函數 一 函數的種類 1. 內建函數 : 是 VB 提供的函數, 可分為數值 字串 時間日期 型別轉換等 4 類 2. 自定函數 : 是使用者自行撰寫的函數 二 數值函數 函數功能範例結果 Abs(X) Abs(10) 10 或求 X 的絕對值 Math.Abs(X) Abs( 2) 2 Sqr(X) Math.Sqrt(X) Sgn(X) 或 或 Math.Sign(X) Int(X) 求 X 的平方根 Sqr(25) 5 求 X 的正負符號 : Sgn(8) 1 X > 0 1 Sgn(0) 0 X = 0 0 Sgn( 2) 1 X < 0 1 Int(5.9) 5 取小於等於 X 的最大整數 Int( 5.4) 6 VB 版本差異 6 2010 6 2010 6 2010 依 X 的小數部分做判斷 : CInt(7.8) 8 > 0.5 進位至整數 CInt(X) CInt(6.5) 6 = 0.5 取最接近該數的偶數整數 CInt( 5.5) 6 < 0.5 捨去小數 Fix(5.6) 5 Fix(X) 取 X 的整數部分 Fix( 5.4) 5 Rnd( ) 產生大於等於 0 且小於 1 的亂數 Rnd( ) 如 0.7055475 解題密技 : Int( ) CInt( ) Fix( ) 函數易搞混, 同學應注意辨別差異 ; 如使用這 3 種函數來計算 4.5, 其結果分別為 5 4 4 15-4 秒 測 Math.Sqrt( ) Int( ) Rnd( ) 各代表哪些功能?
主題 15: 結構化程式設計 1. Rnd( ) 函數是統測命題焦點之一, 同學應該要熟練以下題型 : 題型 亂數範圍 Rnd( ) * 10 0 X <10 Rnd( ) * 10 + 1 1 X <11 Rnd( ) * (M N) + N N X <M Int(Rnd( ) * 10) 介於 0 ~ 9 間的整數亂數 Int(Rnd( ) * 10) + 1 介於 1 ~ 10 間的整數亂數 Int(Rnd( ) * (M N + 1)) + N 介於 N ~ M 間的整數亂數 速記法題型整數亂數範圍 Int(Rnd( ) * 10 ) 0 ~ 10 1, 即 0 ~ 9 範圍的最大值為此數減 1 Int(Rnd( ) * 10) + 5 ) 0 + 5 ~ 9 + 5, 即 5 ~ 14 範圍的最小值與最大值各加此數 解題密技 : 歷屆考題曾出現 Rnd( ) 函數中包含有參數值的題型, 如 Int(Rnd(2) * 10), 其亂數範圍仍為 0 ~ 9, 也就是參數並不會影響亂數產生的範圍 2. Randomize( ): 初始化亂數產生器, 用來降低亂數重複出現的機率 + ( )1. 下列何者為給定之 Visual Basic 程式片段執行後的結果? (A)7 (B)8 (C)9 (D)10 [99 工管管理 ] A = 2 B = 3 S = A ^ B + Abs(A B) Print(S) ( )2. 在 VB 程式中,RND(1) 可產生一亂數 (0 RND(1) < 1), 下列何者可產生一 個介於 10 和 20 範圍之間 ( 含 10 和 20) 的整數? (A)10 + INT(11 * RND(1)) (B)10 + INT(10 * RND(1)) (C)10 + INT(21 * RND(1)) (D)10 + INT(20 * RND(1)) [94 電子計概 ] ( )3. 假設樂透彩券的中獎號碼是 10 ~ 42, 在 Visual Basic 語言中, 下列何者可以產生一個從 10 到 42 的整數亂數? (A)Int(Rnd * 10) + 33 (B)Int(Rnd * 32) + 10 (C)Int(Rnd * 33) + 10 (D)Int(Rnd * 41) + 2 [92 工管管理 ] 15-5
計算機概論總複習 ( 下 ) ( )4. 下列 Visual Basic 程式語言函數運算, 何者正確? (A)Fix(5.8) = 6 (B)Int(5.8) = 5 (C)Rnd(5.8) = 5 (D)Math.Sign(5.8) = 5 ( )5. 在 Visual Basic 中,CInt( 5.6) + Fix( 3.7) 的結果為 (A) 9 (B)2 (C) 3 (D) 9.3 ( )6. Visual Basic 指令 X = Int(Rnd(1) * 10) + 2 執行的結果,X 值最大為 a, 最小為 b, 則 a + 10b = (A)31 (B)32 (C)112 (D)122 ( )7. 欲模擬丟一顆公正的骰子所出現的點數, 應該表示為下列哪一個 Visual Basic 敘述? (A)Int(Rnd( ) * 6) (B)Int(Rnd( ) * 5 + 1) (C)Int(Rnd( ) * 6 + 1) (D)Fix(Rnd( ) * 6) ( )8. 執行 Visual Basic 敘述 Debug.Print(Int( 3.01)) 之結果為 (A) 3 (B) 4 (C) 3.00 (D)3 ( )9. 執行下列 Visual Basic 程式片段後, 不可能出現的數值是? (A)101 (B)86 (C)75 (D)32 For i = 1 To 10 Debug.Print(Int(100 * Rnd( ) + 1)) Next ( )10. 下列函數的值, 何者與其他三個不同? (A)Fix(6.3) (B)Int(6.3) (C)CInt(6.3) (D)Math.Abs(6.3) ( )11. 若 A = Int(Rnd( ) * 10) + 1, 則 A 的數值範圍是 (A)0 到 9 (B)1 到 9 (C)0 到 10 (D)1 到 10 ( )12. 下列 Visual Basic 運算式何者的執行結果為 1? (A)3 * 1 Int(2.52) (B)Math.Sqrt(Int(8.5) 8) (C)Fix(1 * Rnd( )) (D)2 Rnd( ) 答 1. C 2. A 3. C 4. B 5. A 6. A 7. C 8. B 9. A 10. D 11. D 12. A 解 4. Fix(5.8) = 5,Int(5.8) = 5,Rnd(5.8) 會得到大於等於 0 小於 1 的亂數, Math.Sign(5.8) = 1 5. CInt( 5.6) + Fix( 3.7) = 6 + ( 3) = 9 6. X = Int(Rnd(1) * 10) + 2,X 的亂數範圍為 2 ~ 11, 所以 a = 11 b = 2, a + 10b = 11 + 10 2 = 31 10. Fix(6.3) = Int(6.3) = CInt(6.3) = 6,Math.Abs(6.3) = 6.3 12. 3 * 1 Int(2.52) = 1,Math.Sqrt(Int(8.5) 8) = 0,Fix(1 * Rnd( )) = 0, 2 Rnd( ) 會得到大於 1 且小於等於 2 的亂數 15-6
主題 15: 結構化程式設計 三 字串函數 函數功能範例結果 VB 版本差異 Asc(X$) 傳回第一個字元的 ASCII 碼 Asc("A") Asc("apple") 65 97 Chr(n) 傳回 ASCII 碼所對應的字元 Chr(65) A Len(X$) 傳回字串的字元個數 Len("Linsanity") Len("Lucky 17") 9 8 Right(X$, n) 或 Microsoft.VisualBasic. Right(X$, n) 傳回字串由右算起的 n 個字元 Right("Jolin", 3) 代表空白 lin 6 2010 Left(X$, n) 或 Microsoft.VisualBasic. Left(X$, n) 傳回字串由左算起的 n 個字元 Left("Jolin", 2) Jo 6 2010 Mid(X$, n [, m]) 傳回字串由第 n 個字元算起的 m 個字元 Mid("Jolin", 3, 2) li LCase(X$) 將大寫英文字母轉換為小寫英文字母 LCase("iPad") ipad UCase(X$) 將小寫英文字母轉換為大寫英文字母 UCase("htc") HTC Space(n) 空 n 個空白字元 Space(3) 1. 文 英文字母 符號 空格都算㆒個字元, 如 Len(" 有 7-11 真好 ") 結果為 8 代表空白 2. 如果 Mid 函數省略參數 m, 會傳回第 n 個字元算起之後的所有字元, 如 Mid("123456", 3) 結果為 3456 + ( )1. 在 Visual Basic 中, 下列字串運算的結果為何? (A)"apple" (B)"asign" (C)"sign" (D)"simple" [100 工管管理 ] Left("access", 1) + Choose(3, "i", "si", "pp", "imp") + Right("grill", 1) + Mid("next", 2, 1) 秒 測 Len( ) Left( ) Right( ) Mid( ) 各代表哪些功能? 15-7
計算機概論總複習 ( 下 ) ( )2. 在 Visual Basic 中執行 Print Right(Left("ABCDE", 3), 2) 其結果為何? (A)BC (B)CD (C)DE (D)CDE [98 商業類 ] ( )3. Chr(Asc("A") + 2) 的結果為何? (A)A (B)65 (C)67 (D)C ( )4. 在 Visual Basic 語言中執行以下的程式碼後, 訊息交談窗輸出的資料為何? (A)DIC (B)ONA (C)TIONA (D)ICT A$ = "DICTIONARY" B$ = Mid(A$, 2, 7) C$ = Microsoft.VisualBasic.Right(B$, 3) MsgBox(C$) ( )5. 在 Visual Basic 語言中, 使用函數指令 Microsoft.VisualBasic.Right(A$, N) 相當於使用 (A)Mid(A$, Len(A$) N + 1, N) (B)Mid(A$, 1, N) (C)Mid(A$, N, 1) (D)Mid(A$, N 1, N) ( )6. 下列 Visual Basic 程式執行後, 即時運算視窗顯示的結果為何? (A)ORNI (B)RNIN (C)NING (D)ING! A$ = "MORNING!" Debug.Print(Mid(A$, 3, 4)) ( )7. 在 Visual Basic 語言中, 若 X$ = "ABCDE" 則下列何者正確? (A)Microsoft.VisualBasic.Left(X$, 2) = Mid(X$, 2, 4) (B)Microsoft.VisualBasic.Right(X$, 2) = Mid(X$, 2, 4) (C)Microsoft.VisualBasic.Left(X$, 2) = Mid(X$, 4, 2) (D)Microsoft.VisualBasic.Right(X$, 2) = Mid(X$, 4, 2) ( )8. 在 Visual Basic 語言中執行 Debug.Print(Mid("HELLO", 3, 2)), 則即時運算視窗顯示的資料為何? (A)HEL (B)LL (C)ELL (D)LO ( )9. Visual Basic 敘述 Debug.Print(Mid("X1Y2K3", 3)) 的輸出結果為 : (A)Y2K3 (B)1Y2 (C)2K3 (D)Y2K ( )10. 執行 Visual Basic 敘述 Debug.Print(Mid("BASIC LANGUAGE", 2, 3)) 的結果為 (A)BASIC (B)ASI (C)BAS (D)SI 答 1. A 2. A 3. D 4. B 5. A 6. B 7. D 8 B 9. A 10. B 解 1. Choose(n, X1$, X2$,, Xm$): 傳回字串集 (X1$ X2$ Xm$) 中第 n 個字串 ; 如 Choose(3, "i", "si", "pp", "imp"), 即會傳回第 3 個字串 "pp" 7. Microsoft.VisualBasic.Left(X$, 2) = AB Mid(X$, 2, 4) = BCDE; Microsoft.VisualBasic.Right(X$, 2) = DE Mid(X$, 4, 2) = DE 9. 若省略第 2 個參數, 就會傳回從第 1 個參數算起的所有字元 15-8
主題 15: 結構化程式設計 四 時間日期與型別轉換函數 函數功能範例結果 VB 版本差異 Now( ) 傳回系統的日期與時間 Now( ) 2014/5/16 下午 02:42:26 Time( ) 或 TimeString( ) 以字串資料型別傳回系統的時間 TimeString( ) 14:42:19 6 2010 Minute(#hh:mm:ss#) 傳回時間資料中的分鐘資料 Minute(#10:39:55 AM#) 39 Second(#hh:mm:ss#) 傳回時間資料中的秒數資料 Second(#10:39:55 AM#) 55 Date( ) Today( ) 或 傳回系統的日期 Today( ) 2014/5/16 6 2010 Year(#mm/dd/yyyy#) Month(#mm/dd/yyyy#) 傳回日期資料中的年份資料傳回日期資料中的月份資料 Year(#5/11/2014#) 2014 Month(#5/11/2014#) 5 Val(X$) 將字串轉換成數值 Val("cat") Val("123") Val("12") + Val("34") 0 123 46 Str(123) 123 Str(X) 將數值轉換成字串 Str( 123) Str(0.234) 123.234 Str(12) + Str(34) 12 34 1. 數值轉字串 : a. 當數值為正整數 ( 如 123), 轉成字串後會在前方加上一個空格, 如 Str(123) = 123 b. 當數值為小於 1 的正數 ( 如 0.234), 轉成字串後不會顯示 0, 但會在小數點前加上一個空格, 如 Str(0.234) =.234 c. 當數值為負數 ( 如 123), 轉成字串後不會在負號 ( ) 前加上空格, 如 Str( 123) = 123 15-9
計算機概論總複習 ( 下 ) 2. 練習 : 執行結果說明 Debug.Print(Mid(Str(12345), 3)) Debug.Print(Len(Str( 0.234))) Debug.Print(Len(Str(50 + 100))) 2345 5 4 Str(12345) = 12345 Str( 0.234) =.234 Str(50 + 100) = 150 + ( )1. 下列 Visual Basic 語言程式片段執行後, 即時運算視窗顯示的結果為何? (A)97 (B)7 4 (C)748 (D)48 A = 48 : X$ = "97" Debug.Print(Mid(X$ + Str(A), 2, 3)) ( )2. 明哲利用 Visual Basic 撰寫了一個可列印每日營收金額的程式, 若他希望在每日營收報表中加註當天的日期, 請問他必須在程式中使用下列哪一個函數? (A)Year( ) (B)Today( ) (C)TimeString( ) (D)Minute( ) ( )3. 執行 Visual Basic 敘述 "Debug.Print(Microsoft.VisualBasic.Right(TimeString(), 2))", 不可能出現下列哪一個輸出結果? (A)12 (B)28 (C)56 (D)90 ( )4. 執行 Visual Basic 敘述 "Debug.Print(Val(Asc("A") + 3))" 的輸出結果為何? (A)65 (B)68 (C)A (D)C ( )5. 若電腦的系統日期無誤, 下列程式在 2014 年 12 月 25 日執行, 則即時運算視窗顯示的結果為何? (A)20141225 (B)238 (C)2051 (D)1225 Dim LL, D1, D2, D3 As Integer Dim A As String A = Today( ) LL = Len(A) D1 = Val(Microsoft.VisualBasic.Left(A, LL 6)) D2 = Val(Mid(A, 6, 2)) D3 = Val(Microsoft.VisualBasic.Right(A, 2)) Debug.Print(D1 + D2 + D3) ( )6. 下列 Visual Basic 程式片段執行後, 即時運算視窗顯示的結果為何? (A)13.22 (B)3.22 (C)13 (D)13.2 X$ = "13.2" : Y$ = "22.22" : L = 4 Z = Val(Microsoft.VisualBasic.Left(X$ + Y$, L)) Debug.Print(Z) 15-10
主題 15: 結構化程式設計 ( )7. 下列程式片段執行後 C 值為 (A)312 (B)601 (C)690 (D)712 A = "1234" : B$ = "5678" C = Val(Mid$(B$, 2, 3)) + Val(Microsoft.VisualBasic.Right$(A$, 2)) 答 1. B 2. B 3. D 4. B 5. C 6. D 7. D 解 1. Mid(X$ + Str(A), 2, 3) = Mid(97 48, 2, 3) = 7 4( 代表空格 ) 3. TimeString( ) 是輸出系統時間,Microsoft.VisualBasic.Right(TimeString( ), 2) 則會擷取系統時間的秒數部分, 所以輸出結果會在 0 ~ 59 之間 5. A 為 2014/12/25,D1 為 2014 D2 為 12 D3 為 25,D1 + D2 + D3 = 2051 6. X$ + Y$ = "13.2" + "22.22" = "13.222.22"; Val(Microsoft.VisualBasic.Left(X$ + Y$, L)) = 13.2 15-3 自定函數與副程式 一 簡介 1. 設計模組化的程式時, 常會用到 定函數 (user-defined function) 與副程式 (subprogram), 兩者的主要差異 : 定函數 傳回值, 副程式則無 2. 自定函數與副程式的命 規則與變數相同 3. 在 VB, 自定函數與副程式的程式敘述須撰寫於㆒般程序中 (Form1 事件 ) Load Public Class Form1 Function area(byval r) As Double Const pi As Single = 3.14159 area = pi * r ^ 2 ' 計算圓面積的自定函數 area 自定函數與副程式需撰寫在㆒般程序中 Private Sub Form1_Load(ByVal sender As System.Object, ByV Dim a As Double a = area(10) MsgBox(a) End Class 事件程序 (Form1_Load) 15-11
計算機概論總複習 ( 下 ) + ( )1. 副程式與自定函數的主要差別在於 (A) 自定函數有傳回值, 副程式則無 (B) 自定函數可以被主程式呼叫, 副程式不行 (C) 副程式必須是單一出 / 入口, 自定函數則否 (D) 副程式可簡化程式複雜度, 自定函數不行 ( )2. 有關副程式 (subprogram) 的敘述, 下列何者不正確? (A) 可使主程式易於維護 (B) 副程式之中可再去執行另一個副程式 (C) 每一個主程式都必須要有副程式 (D) 若程式中有某部分需經常用到者可將其寫成副程式 答 1. A 2. C 二 定義自定函數 -Function 敘述 1. 語法 : 語法 Function 自定函數名稱 ([ 參數 1 [As 資料型別 ], ]) [As 資料型別 ] 程式區塊 [Exit Function] 自定函數名稱 = 傳回值 說明 同一個表單 ( 如 Form1) 下的自定函數, 名稱不可相同 Function 敘述中的參數, 稱為形式參數 (formal parameter), 用來承接由主程式傳入的參數 傳回值的資料型別須與函數名稱的資料型別相符 Function 和 為函數的開始與結束 ;Exit Function 敘述可強制跳離函數 15-12 2. 練習 :1 累加到 x 的函數註 Function Total(ByVal x As Integer) As Integer Dim i, tmp As Integer For i = 1 To x tmp = tmp + i Next i Total = tmp ' 傳回值為 tmp 註 : 在定義自定函數時,VB 會自動在參數前顯示預設的 "ByVal"( 傳值 ) 參數傳遞方式, 設定形式與實際參數不共用記憶體位址, 亦即自定函數中的形式參數改變後, 不會影響主程式中的實際參數 有關參數傳遞的方式將在本章第 15-19 頁說明
主題 15: 結構化程式設計 三 呼叫自定函數 1. 流程 : V = 自定函數 A( ) 1. 叫 Function 自定函數 A( ) As Integer 4. 返回, 並將 定函數的值傳給變數 V 2. 執行 自定函數 A( ) = X 3. 設定 定函數的值 主程式 自定函數 2. 語法 : 語法舉例呼叫 Sum 自定函數 變數 = 自定函數名稱 ([ 參數 1, 參數 2, ]) Temp = Sum(10) 說明 變數是用來承接傳回值 在呼叫敘述中的參數, 稱為實際參數 (actual parameter), 用來傳遞參數給自定函數 3. 練習 : 呼叫 1 累加到 10 的函數執行結果 Function Total(ByVal x As Integer) Dim i, tmp As Integer For i = 1 To x tmp = tmp + i Next Total = tmp Dim Ans As Integer Ans = Total(10) MsgBox("1 + 2 + + 10 = " & Ans) 秒 測上述練習題若在自定函數中的 For i = 1 To x 之後加上 Step 3, 並將主程式中的 MsgBox("1 + 2 + + 10 = " & Ans) 改為 MsgBox(Ans), 則執行結果為何? 15-13
計算機概論總複習 ( 下 ) + 基礎題 ( )1. 有關下列 Visual Basic 程式碼的執行結果, 何者正確? (A)10 (B)13 (C)20 (D)29 [96 商業類 ] Private Sub Form_Activate( ) a = 2 : b = 1 Print F(a, F(a, b)) Function F(X, Y) F = X ^ 2 + Y ^ 2 ( )2. 執行下列 VB 程式後, 印出的結果為 : (A)65 (B)105 (C)125 (D)305 [93 電子計概 ] Private Sub Form_Activate( ) X = 5 A = FS(X) Print A + X Function FS(X) FS = X For J = X To 3 Step 1 FS = FS * J Next J ( )3. 若一 VB 程式如下 : Private Function FAB(A As Integer) As Integer If A <= 1 Then FAB = 1 Else FAB = FAB(A 1) + FAB(A 2) 則呼叫 FAB(4) 會得到結果為 (A)2 (B)3 (C)5 (D)8 [ 教育視導 ] ( )4. 若一 VB 程式如下 : Private Function Test(a, b, c) As Single Test = (( b) + (b ^ 2 4 * a * c) ^ 0.5) / (2 * a) 則呼叫 Test(1, 4, 3) 會得到結果為 (A)0 (B)1 (C)2 (D)3 [ 教育視導 ] ( )5. 若某一 Visual Basic 程式如下, 則呼叫 FNA(4, 18) 會得到的結果為何? (A)9 (B)10 (C)16 (D)32 Function FNA(ByVal X As Integer, ByVal Y As Integer) Dim ANS As Integer ANS = (X ^ 2 + Y Mod 7) / 2 Debug.Print(ANS) 15-14
主題 15: 結構化程式設計 進階題 ( )6. 執行下列程式片段後,K 值為何? (A)1 (B)5 (C)15 (D)120 [ 商業語文 ] Rem MAIN PROGRAM K = GAME(5) Print K End Function GAME(X) If (X > 1) Then GAME = X * GAME(X 1) Else GAME = 1 End If ( )7. 在 Visual Basic 的程式中, 定義了一個遞迴函數 X 如下所示, 則 Print X(5) 的結果為何? (A)12 (B)15 (C)16 (D) 產生錯誤訊息 [ 公務考試 ] Function X(N) If N = 0 Then X = 0 Else X = X(N 1) + N End If 答 1. D 2. D 3. C 4. D 5. B 6. D 7. B 解 1. F(a, F(a, b)) = F(2, F(2, 1)) = F(2, 5) = 2 ^ 2 + 5 ^ 2 = 4 + 25 = 29 F = 2 ^ 2 + 1 ^ 2 = 5 6. 自己呼叫自己的函數稱為遞迴函數, 其解法如下 : GAME(5) = 5 GAME(5 1) = 5 4 GAME(4 1) = 5 4 3 GAME(3 1) = 5 4 3 2 GAME(2 1) = 5 4 3 2 1 = 120 7. 自己呼叫自己的函數稱為遞迴函數, 其解法如下 : X(5) = X(5 1) + 5 = X(4 1) + 4 + 5 = X(3 1) + 3 + 4 + 5 = X(2 1) + 2 + 3 + 4 + 5 = X(1 1) + 1 + 2 + 3 + 4 + 5 = 0 + 1 + 2 + 3 + 4 + 5 = 15 15-15
計算機概論總複習 ( 下 ) 四 定義副程式 -Sub 敘述 1. 語法 : 語法 Sub 副程式名稱 ([ 參數 1 [As 資料型別 ], 參數 2 [As 資料型別 ], ]) 程式區塊 [Exit Sub] 說明 同一個表單 ( 如 Form1) 下的副程式, 名稱不可相同 在 Sub 敘述中的參數, 稱為形式參數, 用來承接主程式傳入的參數 參數間要以逗號隔開 ; 未宣告資料型別的參數預設為 Object Sub 和 為副程式的開始和結束 ;Exit Sub 敘述可強制跳離副程式 2. 練習 : 計算 2 的 N 次方的副程式 Sub power2(byval N As Integer) Dim tmp As Integer = 1 For i = 1 To N tmp = tmp * 2 Next i MsgBox(tmp) 五 呼叫副程式 1. 流程 : Call 副程式 A 1. 叫 Sub 副程式 A 3. 返回 2. 執行 主程式 副程式 15-16
主題 15: 結構化程式設計 2. 語法 : 語法舉例呼叫 Sum 副程式 Call 副程式名稱 ([ 參數 1, 參數 2, ]) Call Sum(10) 3. 練習 : 呼叫 2 的 5 次方的副程式 執行結果 說明 Sub power2(byval N As Integer) Dim tmp As Integer = 1 For i = 1 To N tmp = tmp * 2 Next i MsgBox(tmp) Call power2(5) Call power2(5) 代表將 5 傳給 power2 副程式作為參數 N 的值 1. 堆疊 (stack): 是一種常用的資料結構, 採後進先出 (Last In First Out, LIFO) 方式, 意即後加入的資料先取出 副程式 定函數的 叫及返回處理, 就是使用堆疊來控制 例如 push 10 push 8 pop push 36 pop pop pop 後, 依序輸出的數值為 8 36 10 1 push 10 2 push 8 4 push 36 10 8 10 36 10 10 3 pop( 輸出 8) 5 pop( 輸出 36) 6 pop( 輸出 10) 2. 佇列 (queue): 也是一種常用的資料結構, 採先進先出 (First In First Out, FIFO) 方式, 意即先加入的資料先取出 印表機列印文件的順序即為佇列的應用 例如依序加入 10 加入 8 刪除元素 加入 36 刪除元素 加入 2 後, 佇列的內容為 36 2 1 加入 10 2 加入 8 4 加入 36 6 加入 2 10 10 8 8 36 36 2 3 刪除元素 5 刪除元素 15-17
計算機概論總複習 ( 下 ) + 基礎題 ( )1. 下列何種資料結構的資料元素存取方式是先進先出 (First In First Out)? (A) 陣列 (B) 雙向串列 (C) 堆疊 (D) 佇列 [99 工管管理 ] ( )2. 若給定如下之 Visual Basic 副程式, 則呼叫 Invest(3, 15) 會得到何種結果? (A)3 (B)4 (C)12 (D)15 [99 工管管理 ] Sub Invest (X as Integer, Y as Integer) Ans = (X ^ 2 + Y Mod 4) / 3 Print Ans ( )3. 在實作副程式 (Subroutine) 呼叫時, 需使用何種資料結構來處理返回呼叫程式的位址? (A)Queue (B)Stack (C)Tree (D)Linked list [ 乙級軟體應用 ] ( )4. 若有一副程式如下, 則計算 mystery(3, 14) 的結果如何? (A)9 (B)3 (C)11 (D)14 Sub mystery(a, b) If b < a Then MsgBox(b) Else MsgBox(a) ( )5. 程式 ( 一 ) 執行後, 訊息交談窗顯示的結果為何? (A)120 (B)15 (C)60 (D)20 Sub f1(byval n) Dim a, I As Integer a = 1 For I = 1 To n a = a * I Next MsgBox(a) Dim n As Integer = 5 Call f1(n) Sub q(byval C As String) Debug.Print(C) Sub p(byval C As String) C = "t" Call q(c) Debug.Print(C) Dim C As String C = "f" Call p(c) 程式 ( 一 ) 程式 ( 二 ) ( )6. 執行程式 ( 二 ) 後, 即時運算視窗顯示的結果為何? (A)tt (B)tf (C)ff (D)ft 秒 測上述第 4 題若將 mystery(3, 14) 改成 mystery(14, 3), 則執行結果為何? 15-18
主題 15: 結構化程式設計 進階題 ( )7. 程式 ( 三 ) 執行後, 訊息交談窗顯示的結果為何? (A) 2 (B) 1 (C)0 (D)1 Sub Heart(ByVal m As Integer) m = m ^ (m 2) Dim C As Integer = 1 Call Heart(C) MsgBox(C) Sub Sum(ByVal X, ByVal Y) Dim TOTAL As Integer TOTAL = X ^ Y MsgBox(TOTAL) Call Sum(2, 10) 程式 ( 三 ) 程式 ( 四 ) ( )8. 在 Visual Basic 中, 執行程式 ( 四 ) 後, 訊息交談窗顯示的結果為何? (A)0 (B)512 (C) 1024 (D)1024 ( )9. 承上題, 若將副程式中的第 3 行 TOTAL = X ^ Y 敘述更改為 TOTAL = X ^ 2 * ( Y), 其執行結果為何? (A) 40 (B)40 (C) 200 (D)200 答 1. D 2. B 3. B 4. B 5. A 6. A 7. B 8. C 9. A 解 6. 程式執行順序如下 :1 主程式呼叫副程式 p(f) 2 副程式 p 執行 C = "t", 呼叫 q(t) 3 副程式 q 印出 t 4 回到副程式 p, 印出 t 7. 呼叫副程式 Heart( 1), 執行結果 m = 1 ^ ( 1 2) = 1,m 值會傳回給 C, 所以 C = 1 六 參數的傳遞 1. 參數主要有 : a. 實際參數 : 呼叫時, 實際要傳給副程式或自定函數的參數 b. 形式參數 : 副程式或自定函數被呼叫時, 用來承接主程式傳入的參數 實際參數 Call SUM(10) Sub SUM(ByVal N As Integer) 形式參數 主程式 副程式 15-19
計算機概論總複習 ( 下 ) 2. 傳值與傳址呼叫的語法 : 語法 傳值 : Call Sum(10) 傳址 : Call Sum(10) Sub Sum (ByVal x As Integer) Sub Sum (ByRef x As Integer) 形式參數前加 "ByVal" 形式參數前加 "ByRef" 說明 ByVal 代表傳值 ;ByRef 代表傳址 傳值 叫 (call by value): 先將實際參數的值複製到形式參數中, 接著副程式 ( 自定函數 ) 使用形式參數的值來作運算 ; 形式與實際參數不共用記憶體位址 傳址 叫 (call by reference): 先將實際參數的位址傳遞給形式參數, 接著副程式 ( 自定函數 ) 使用該位址的值來作運算 ; 形式與實際參數共用記憶體位址 3. 練習 : 例 1 傳值呼叫執行結果說明 Sub calc(byval A, ByVal B) A = A * 2 : B = B * 2 Dim X, Y As Integer X = 1 : Y = 2 Call calc(x, Y) MsgBox("X = " & X & " Y = " & Y) 傳值呼叫時, 形式參數與實際參數不共用記憶體位址 : 變數內容 X 1 Y 2 A 1 2 B 2 4 例 2 傳址呼叫執行結果說明 Sub calc(byref A, ByRef B) A = A * 2 : B = B * 2 Dim X, Y As Integer X = 1 : Y = 2 Call calc(x, Y) MsgBox("X = " & X & " Y = " & Y) 傳址呼叫時, 形式參數與實際參數共用記憶體位址 : 變數內容 X, A 1 2 Y, B 2 4 15-20
主題 15: 結構化程式設計 4. 傳值與傳址呼叫的比較 : 比較項目 傳遞方式 傳值 傳址 傳遞方式設定 在形式參數前加上關鍵字 "ByVal" 在形式參數前加上關鍵字 "ByRef" 實際參數與形式參數是否使用同㆒記憶體位址形式參數的值改變, 實際參數的值是否跟著改變 否 否 是 是 + 基礎題 ( )1. 下列程式三個變數 A,B,C, 要找出其中最大值, 則必須在空格處填入 (A)A > B (B)C > A (C)B > C (D)C > B [100 商業競賽 ] If B > A Then Swap(A, B) If Then Swap(A, C) Print A Sub SWAP(ByRef A, ByRef B) Dim T As Integer T = B : B = A : A = T ( )2. 執行副程式呼叫時, 若傳入的參數不希望被更改, 可採用何種呼叫方式? (A) 傳址呼叫 (B) 傳值呼叫 (C) 傳名呼叫 (D) 遞迴呼叫 ( )3. 下列程式之執行結果為何? (A)1 (B)2 (C)3 (D)4 Sub mess(byref A, ByRef B) A = A + 1 B = B + 1 Dim X, Y As Integer X = 2 : Y = 3 mess(x, Y) Debug.Print(X) 15-21
計算機概論總複習 ( 下 ) ( )4. 下列 Visual Basic 程式輸出的結果為何? (A)11 10 (B)11 11 (C)11 12 (D)12 12 Sub X(ByRef K) K = K 1 Debug.Print(K) Dim L As Integer L = 12 Call X(L) Debug.Print(L) ( )5. 執行以下之程式碼輸出之資料為 (A)3 4 3 4 (B)3 4 4 5 (C)3 4 0 0 (D)3 4 4 3 Sub f(byref a, ByRef b) Debug.Print(a & " " & b) a = a + 1 b = b + 1 Dim X, Y As Integer X = 3 : Y = 4 Call f(x, Y) Debug.Print(X & " " & Y) 進階題 ( )6. 以下 Visual Basic 程式執行後, 各變數之值為 : (A)a = 1, b = 3, x = 2, y = 3 (B)a = 2, b = 3, x = 2, y = 3 (C)a = 1, b = 2, x = 1, y = 3 (D)a = 2, b = 2, x = 3, y = 3 Dim a, b As Integer a = 1 : b = 2 Call S1(a, b) Sub S1(ByVal x, ByRef y) x = x * 2 : y = y + 1 答 1. B 2. B 3. C 4. B 5. B 6. A 解 4. 副程式 X 為傳址呼叫方式, 所以 L 與 K 共用記憶體, 其值皆為 11 6. 參數 x 是採用傳值呼叫方式, 所以 x 與 a 不共用記憶體,x 值改變 a 值不會改變 ; 參數 y 是採用傳址呼叫方式, 所以 y 與 b 共用記憶體,y 值改變 b 值會跟著改變 15-22
MENU 主題 15: 結構化程式設計 時事生活題 ( )1. 當程式設計師在撰寫一個 計算班級平均成績 的程式時, 下列哪一項通常不會被用到? (A) 迴圈 (B) 隨機函數 (C) 陣列 (D) 輸入 / 輸出 [93 商業類 ] ( )2. 今年的校慶園遊會, 偉威和班上同學打算設置一個砸水球的攤位 ; 為了增加砸水球的趣味性, 偉威想要利用 VB 撰寫一個可隨機產生代表同學座號的程式, 以指定同學來作為供人砸水球的活靶 請問他可以使用下列哪一個內建函數來隨機產生亂數值? (A)Int( ) (B)Rnd( ) (C)Str( ) (D)Val( ) ( )3. 快樂星期天, 校園歌喉戰, 曾發生同分的兩名參賽者需再進行第二輪比賽的情形, 製作單位為求公平, 以隨機抽出標有編號 1 2 的任一彩球, 來決定哪位參賽者先出賽 試問若在沒有彩球的情形下, 利用下列哪一個 VB 敘述, 也可隨機產生 1 或 2 兩個數字? (A)Int(Rnd( ) * 1) + 1 (B)Int(Rnd( ) * 2) + 1 (C)Int(Rnd( ) + 1) * 1 (D)Int(Rnd( ) + 2) * 1 ( )4. 新 ipad 在美國首賣當日, 引爆大批人潮排隊搶購, 有人甚至利用替人排隊來賺取 排隊工 請問這種依先後順序購買產品的方式類似下列哪一種資料結構? (A) 堆疊 (B) 佇列 (C) 陣列 (D) 環狀 15-1 15-2 精選試題 ( )5. 下列何者不是結構化程式設計的主要特徵? (A) 使用循序 選擇與重複等三種基本控制結構 (B) 每種結構都是單一入口 / 單一出口 (C) 使用模組化的設計技巧 (D) 採用由下而上的設計方式 [95 衛生計概 ] ( )6. 在 Visual Basic 語言中, 為避免破壞結構化程式設計的單一入口及單一出口的特 性, 下列哪一種類的指令應該減少使用? (A)GoTo (B)MsgBox (C)Do Loop (D)Select Case [ 工管管理 ] ( )7. 下列何者是結構化程式設計的主要控制結構? (A) 重複 選擇 循序 (B) 重複 選擇 跳躍 (C) 重複 跳躍 循序 (D) 選擇 跳躍 循序 [ 工業設計 ] ( )8. 下列有關副程式 (subprogram) 的敘述, 何者錯誤? (A) 可使程式執行較有效率 (B) 可使程式結構較清晰 (C) 常可精簡程式並提昇程式的可讀性 (D) 有利於分工, 以便多人共同完成較大的程式 [100 公務考試 ] ( )9. 結構化程式設計中, 構成程式之基本邏輯有三 :Sequence( 循序 ) Selection( 選擇 ) 與 Repetition( 重複 ), 以所屬的邏輯而言, 下列何者與其他者不同? (A)Do-Until (B)Do-While (C)Do-Case (D)For-Loop [100 公務考試 ] ( )10. 下列何者不是程式模組化的優點? (A) 程式可讀性高 (B) 結構化 (C) 程式易於修改 (D) 程式執行效率高 [100 公務考試 ] ( )11. 下列哪一個 Visual Basic 的運算式執行後, 可以獲得 "5 月 1 日 " 的結果? (A)Left("20110501", 6) + " 月 " + Left("20110501", 8) + " 日 " (B)Mid("20110501", 1, 6) + " 月 " + Mid("20110501", 1, 8) + " 日 " (C)Mid("20110501", 6, 1) + " 月 " + Mid("20110501", 8, 1) + " 日 " (D)Right("20110501", 3) + " 月 " + Right("20110501", 1) + " 日 " [100 商業類 ] 15-23
計算機概論總複習 ( 下 ) 15-24 ( )12. 在 Visual Basic 中, 運算式 10.5 \ 3.5 + 2 ^ Fix(2.8) 之結果為何? (A)6 (B)7 (C)10 (D)11 [100 工管管理 ] ( )13. 下列何者為給定之 Visual Basic 程式語言函數執行後的結果? (A)3 (B)4 (C) 3 (D) 4 [99 工管管理 ] Print Int( 3.6) ( )14. 下列何者為給定之 Visual Basic 程式語言函數執行後的結果? (A)2 (B)4 (C)6 (D)8 [99 工管管理 ] Print Len(" 中華民國 ") ( )15. 執行下列 Visual Basic 程式片段, 程式順利執行後, 列印 N 的值為何? (A) 11.7 (B) 21 (C) 9 (D) 12 [92 工管管理 ] Private Sub Command1_Click( ) For K = 5.9 To 5 Step 2 If K < 0 Then N = N + Int(K) End If Next K Print N ( )16. 亂數 Int(Rnd * 4) + 5 最大可能值為 (A)4 (B)5 (C)8 (D)9 [ 教育視導 ] ( )17. 執行以下的程式碼後, 即時運算視窗顯示的資料為何? (A)8 (B)5 (C)3 (D)13 A = 0 : B = 2 : C = 1 : D = 7 While D > 0 A = B + C C = B B = A D = Int(D / 2) End While Debug.Print(A) End ( )18. 若 A = 16, 則執行 Visual Basic 敘述 "Debug.Print(Math.Sqrt(A) + Len(Str(A)))" 的結果為何? (A)6 (B)7 (C)8 (D)9 ( )19. 下列 Visual Basic 程式執行後, 即時運算視窗顯示的結果為何? (A)ABC (B)AAA (C)ABB (D)AAE A = "ABCDE" B = Mid(A, 1, 1) + Microsoft.VisualBasic.Left(A, 1) + Chr(65) Debug.Print(B) ( )20. 下列 Visual Basic 程式片段執行後, 即時運算視窗顯示的結果為何? (A)P4.5 (B)111 (C)NES111 (D)JON r = "JONES111P4.5" W = Mid(r, 6, 3) Debug.Print(W)
主題 15: 結構化程式設計 ( )21. 下列 Visual Basic 程式片段執行後, 即時運算視窗顯示的結果為何? (A)234 (B)4567 (C)567 (D)456 I = 4 A = "1234567890" B = Mid(A, I, 3) Debug.Print(B) ( )22. 下列 Visual Basic 程式片段執行後, 即時運算視窗顯示的結果為何? (A)COMP (B)UTER (C)COMPUTER (D)COMPUT A = "COMPUTER" Debug.Print(Microsoft.VisualBasic.Left(A, Len(A) / 2)) ( )23. 執行 Visual Basic 敘述 Debug.Print(Mid(" 資料處理科 Happy", 7, 6)) 的結果為何? (A)appy (B) 理科 Ha (C) 科 Happy (D)Error ( )24. 在 Visual Basic 語言中, 若字串變數 A 中之值為 "ABCDEF", 而字串變數 B 中之值為 "WXYZ", 則 Mid(A, 3, 2) + Mid(B, 2, 2) 之結果為? (A)ABCWX (B)DEFYZ (C)CDXY (D)DEYZ ( )25. 下列 Visual Basic 語言程式片段執行後, 即時運算視窗顯示的的結果為何? (A)COMAL (B)PETER (C)RSONALPUTER (D)TERPE A = "PERSONAL" B = "COMPUTER" Debug.Print(Microsoft.VisualBasic.Left(A, 2) + Microsoft.VisualBasic.Right(B, 3)) ( )26. 若 Addr = " 中正東路 83 號 ", 則執行 Visual Basic 敘述 Debug.Print(Microsoft. VisualBasic.Left(Addr, 5)) 的結果為何? (A) 中正東路 8 (B)83 號 (C) 中正東路 (D) 中正東路 3 ( )27. 已知字元 A 的 ASCII 碼為 65, 則 Visual Basic 敘述 Debug.Print(Chr(Asc("A") + 1)) 之結果為 (A)A (B)B (C)65 (D)66 ( )28. 在 Visual Basic 語言中, 若要求 X 值至小數點第一位 ( 即第二位四捨五入 ), 應用下列何敘述? (A)X = Int(X * 10) / 10 (B)X = Int(X * 10 + 0.5) / 10 (C)X = Int(X * 10) + 0.5 / 10 (D)X = Int(X * 100) + 0.5 / 100 ( )29. 在 Visual Basic 語言中, 若 K = Int(90 * Rnd( )) + 10, 則 K 之範圍為何? (A)1 K 90 (B)10 K 90 (C)10 K 99 (D)1 K 100 ( )30. 下列 Visual Basic 程式片段執行後, 即時運算視窗顯示的結果為何? (A)2.6 (B)52.6 (C)52 (D)53 A = Int(0.1 * 26 + 50) : Debug.Print(A) ( )31. 執行 Visual Basic 敘述 Debug.Print(Math.Sign(Fix( 0.7)) + 5), 其結果為 : (A)4 (B)4.3 (C)5 (D)5.7 15-25
計算機概論總複習 ( 下 ) ( )32. 下列 Visual Basic 程式執行後, 即時運算視窗顯示的結果為何? (A) 5 (B)5 (C) 15 (D)15 A = 5 : B = 10 Debug.Print(Math.Abs(A) Math.Abs(B)) ( )33. 若要使用 Rnd( ) 函數模擬擲銅板出現正 反面 ( 以 1 ~ 2 表示 ) 的結果, 則程式敘述 應撰寫為 (A)Rnd( ) * 2 (B)Int(Rnd( ) * 2) (C)Int(Rnd( ) * 2) + 1 (D)Int(Rnd( ) * 3) ( )34. 執行下列哪一個 Visual Basic 敘述, 執行結果為 "11"? (A)Math.Sqrt(121) Fix(2.3) (B)Int(Math.Abs( 3.8)) * 3 + 2 (C)Asc("A") / 2 (D)Int( 12.4) ( )35. 下列取整數的 Int 函數運算何者有誤? (A)Int(2) 輸出值為 2 (B)Int( 1.9) 輸出值為 1 (C)Int(1.9) 輸出值為 1 (D)Int(2.1) 輸出值為 2 ( )36. 若 A$ = "10",B$ = "15", 請問 Debug.Print(Val(A$) * Val(B$)) 的結果為? (A)1015 (B)5 (C)10*15 (D)150 ( )37. 若 X = "2013/9/27", 則執行 Visual Basic 敘述 "Debug.Print(Mid(X, 2, 2))" 的結果為何? (A)20 (B)01 (C)13 (D)3/ ( )38. 執行 Visual Basic 敘述 A$ = " 迎接 " + Str(22) + " 世紀 " : Debug.Print(Len(A$)) 的結果為何? (A)5 (B)6 (C)7 (D)8 ( )39. 惠萍想利用 VB 2010 設計一個小時鐘程式, 請問她應該使用下列哪一種控制項與函數來搭配, 才能讓這個程式每隔 0.1 秒自動抓取系統時間並顯示出來? (A)Lable 與 Val( ) (B)Timer 與 Today( ) (C)CheckBox 與 Now( ) (D)Timer 與 TimeString( ) ( )40. 下列運算結果, 何者為 0? (A)Int(Rnd(3) * 5) + 1 (B)Str(100 / 10) (C)Math.Sign( 1) (D)Val("A100") 15-3 ( )41. 執行下列 VB 程式後, 會印出變數 a 的值為 (A) 1 (B)0 (C)1 (D)2 [ 教育視導 ] Private Sub Good(ByRef s As Integer) s = s + 1 Private Sub Bad(ByVal t As Integer) t = t 2 Private Sub Form_Activate( ) Dim a As Integer a = 0 Call Good(a) Call Bad(a) Print a 15-26
主題 15: 結構化程式設計 閱讀下文, 回答第 42 ~ 43 題 : 有一 Visual Basic 程式片段如下 : Private Sub Command1_Click( ) Sum = Total(200) Total(100) Print Sum Private Function Total(ByRef i As Integer) As Long For j = 1 To i Total = Total + j Next j ( )42. 有關此程式片段之敘述, 下列何者正確? (A)Function Total 程式片段是一個遞迴程式 (B)Function Total 程式片段是一個函數 (C)Total 是一個位元組變數 (D)Total 是一個整數變數 [99 二技 ] ( )43. 此程式片段執行後, 有關 Sum 值之敘述, 下列何者正確? (A) 等於 100 + 101 + + 199 的和 (B) 等於 100 + 101 + + 200 的和 (C) 等於 101 + 102 + + 199 的和 (D) 等於 101 + 102 + + 200 的和 [99 二技 ] ( )44. 下列何種資料結構最適合用來記錄主程式呼叫副程式時, 所需儲存的各種資訊? (A) 堆疊 (B) 佇列 (C) 雙佇列 (D) 二元樹 [99 二技 ] ( )45. 若要處理先到先服務, 則下列何種資料結構較合適? (A) 堆疊 (Stack) (B) 佇列 (Queue) (C) 二元樹 (Binary Tree) (D) 鏈結串列 (Linked List) [ 100 公務考試 ] ( )46. 下列堆疊 (Stack) 運算依序輸出的數值為何? PUSH 16,PUSH 1,POP----,PUSH 5,POP----,PUSH 7,PUSH 3,POP----, POP----,POP---- (A)16,1,5,7,3 (B)3,7,5,1,16 (C)1,5,3,7,16 (D)1,16,5,3,7 [99 公務考試 ] ( )47. 假設有一個空的佇列 (queue), 經過以下次序操作後 : 加入元素 A, 加入元素 B, 刪除元素, 加入元素 C, 刪除元素, 加入元素 D, 最後佇列的內容為何? (A)A, D (B)B, C (C)B, D (D)C, D [99 公務考試 ] ( )48. 以下何種資料結構具有先進後出的特性? (A)queue (B)dequeue (C)stack (D)heap [99 公務考試 ] ( )49. 一般的佇列具備何種操作特性? (A) 先進先出 (B) 先進後出 (C) 優先者先出 (D) 優先者後出 [99 公務考試 ] ( )50. 有關堆疊 (stack) 與佇列 (queue) 之敘述, 下列何者正確? (A) 堆疊之新增 刪除不在串列之同一端進行 (B) 佇列具有後進先出 (last in, first out) 的特性 (C) 堆疊具有先進後出 (first in, last out) 的特性 (D) 佇列之新增 刪除都在同一端進行 [99 公務考試 ] 15-27
計算機概論總複習 ( 下 ) ( )51. 下列程式有三個變數 A,B 及 C, 若要找出其中最小值, 則必須在空格處填入 (A)A < B (B)C < A (C)B < C (D)C < B [100 商業競賽 ] If B < A Then Swap(A, B) If Then Swap(A, C) Print A Sub Swap(ByRef A, ByRef B) Dim T As Integer T = B : B = A : A = T ( )52. 執行下列 VB 6 程式片段, 其輸出結果為何? (A)4 (B)8 (C)16 (D)25 [100 商業競賽 ] Private Sub Command1_Click() Print G(2, 3) Function G(X, Y) G = Abs(2 * Y X) ^ 2 ( )53. 執行下列程式, 最後 T 值是多少? (A)40 (B)30 (C)20 (D)10 Function FNP(ByRef X) FNP = X * X + X Dim K, T As Integer For K = 1 To 4 T = T + FNP(K) Next MsgBox(T) ( )54. 下列程式的執行結果為何? (A)0 (B)5 (C)24 (D)120 Function FACT(ByRef X) Dim Y, K As Integer Y = 1 For K = 1 To X Y = Y * K Next FACT = Y Dim N As Integer = 5 MsgBox(FACT(N)) 15-28
主題 15: 結構化程式設計 ( )55. 下列程式的執行結果為何? (A)10 (B)11 (C)20 (D)30 Function Test(ByRef I As Integer) I = I + 10 Test = I Dim X As Integer = 10 MsgBox(Test(X)) 答案 答案 & 詳解 1.B 2.B 3.B 4.B 5.D 6.A 7.A 8.A 9.C 10.D 11.C 12.A 13.D 14.B 15.D 16.C 17.A 18.B 19.B 20.B 21.D 22.A 23.A 24.C 25.B 26.A 27.B 28.B 29.C 30.C 31.C 32.A 33.C 34.B 35.B 36.D 37.B 38.C 39.D 40.D 41.C 42.B 43.D 44.A 45.B 46.C 47.D 48.C 49.A 50.C 51.B 52.C 53.A 54.D 55.C 15-29
計算機概論總複習 ( 下 ) 詳解 15. 答案 & 詳解 K K < 0 N = N + Int(K) 5.9 True N = 0 + ( 6) = 6 3.9 True N = ( 6) + ( 4) = 10 1.9 True N = ( 10) + ( 2) = 12 0.1 False 2.1 False 4.1 False 31. Math.Sign(Fix( 0.7)) + 5 = Math.Sign(0) + 5 = 0 + 5 = 5 38. Str(22) = 22, 長度為 3 個字元, 所以 A$ = " 迎接 22 世紀 ", 長度為 7 個字元 40. Val("A100") = 0, 因字串 "A100" 的第 1 個字為英文字母而非數字, 所以會轉換成 0 41. a = 0, 執行 Call Good(a) 後,s = 0 + 1 = 1, 因 Good 是以傳址呼叫, 共用記憶體位址, 所以 a 會受 s 的影響, 即 a = s = 1;a = 1 執行 Call Bad(a) 後,t = 1 2 = 1, 因 Bad 是以傳值呼叫, 不共用記憶體位址, 所以 a 不受 t 的影響,a = 1 46. 堆疊採後進先出的方式來存取資料 存取資料的步驟如下 : 1 PUSH 16 2 PUSH 1 4 PUSH 5 6 PUSH 7 7 PUSH 3 16 1 16 5 16 7 16 3 7 16 7 16 16 3 POP( 輸出 1) 5 POP( 輸出 5) 8 POP( 輸出 3) 9 POP( 輸出 7)10 POP( 輸出 16) 故堆疊運算依序輸出的數值為 1 5 3 7 16 47. 佇列採先進先出的方式來存取資料, 存取資料的步驟如下 : 1 加入元素 A 2 加入元素 B 4 加入元素 C 6 加入元素 D A A B B C C D 3 刪除元素 5 刪除元素 故最後佇列的內容為 C D 53. T = (1 * 1 + 1) + (2 * 2 + 2) + (3 * 3 + 3) + (4 * 4 + 4) = 40 54. FACT 函數目的在求階乘, 所以 FACT(5) = 1 * 2 * 3 * 4 * 5 = 120 15-30