2025/10/1

台綜大B30 計概114 第七題 解答 ※ 販售必究 ※ 台灣綜合大學, 資訊管理系, 轉學考

Q7. 請將下列類似C語言的運算式寫成前序表示式 (prefix form)。請注意 && 與 || 的優先順序相同(且為由左至右):

A) a && b || (c>d) || !(e>f) || a+b
B) !a && (b<c) || x

Ans:

題目有特別說明:&&|| 的優先順序相同,且由左至右 (left-to-right)。這跟標準 C 稍微不同,標準 C 其實是 &&|| 優先,但這裡規則是相同、且左結合。

A) a && b || (c>d) || !(e>f) || a+b

  1. 先看結合方向:

    (((a && b) || (c > d)) || !(e > f)) || (a + b)

    這樣從左到右展開。

  2. 前序表示:

    • (a && b)&& a b

    • ((a && b) || (c > d))|| (&& a b) (> c d)

    • (((a && b) || (c > d)) || !(e > f))|| (|| (&& a b) (> c d)) (! (> e f))

    • 最後再和 (a + b)

      || (|| (|| (&& a b) (> c d)) (! (> e f))) (+ a b)

前序結果:

|| (|| (|| (&& a b) (> c d)) (! (> e f))) (+ a b)

B) !a && (b<c) || x

  1. 按左至右結合:

    ((!a && (b < c)) || x)
  2. 前序表示:

    • !a! a

    • (b < c)< b c

    • (!a && (b < c))&& (! a) (< b c)

    • ((!a && (b < c)) || x)|| (&& (! a) (< b c)) x

前序結果:

|| (&& (! a) (< b c)) x

台綜大B30 計概114 第六題 解答 ※ 販售必究 ※ 台灣綜合大學, 資訊管理系, 轉學考

※ 請供考生參考 / 營利必究 ※

 Q6. 如下,請計算當 n = 5 時,第 6 行語句(r = r + 1;)會被執行多少次。

int mystery(n) {

    int r = 0;

    for (int i = 1; i <= n - 1; i++)

        for (int j = i + 1; j <= n; j++)

            for (int k = 1; k <= j; k++)

                for (int m = 1; m <= k; m++)

                    r = r + 1;

    return r;

}

Ans:


int mystery(n) {

    int r = 0;


    for (int i = 1; i <= n - 1; i++)          // ①

        for (int j = i + 1; j <= n; j++)      // ②

            for (int k = 1; k <= j; k++)      // ③

                for (int m = 1; m <= k; m++)  // ④

                    r = r + 1;                // ⑤ (我們要計算的次數)


    return r;

}

內層迴圈展開

最內層 (m 迴圈):

  • for (m = 1; m <= k; m++)

  • 執行次數 = k

所以對於固定的 k,⑤ 執行次數 = k


第三層迴圈 (k 迴圈)

  • for (k = 1; k <= j; k++)

  • 執行總次數 = 1 + 2 + 3 + ... + j = j(j+1)/2

所以對於固定的 j,⑤ 執行次數 = j(j+1)/2


第二層迴圈 (j 迴圈)

  • for (j = i+1; j <= n; j++)

  • 所以對於固定的 i,⑤ 執行次數 =

    j=i+1nj(j+1)2\sum_{j=i+1}^{n} \frac{j(j+1)}{2}

第一層迴圈 (i 迴圈)

  • for (i = 1; i <= n-1; i++)

  • 所以總次數 =

    i=1n1j=i+1nj(j+1)2\sum_{i=1}^{n-1} \sum_{j=i+1}^{n} \frac{j(j+1)}{2}

代入 n = 5

我們要算:

i=14j=i+15j(j+1)2\sum_{i=1}^{4} \sum_{j=i+1}^{5} \frac{j(j+1)}{2}

逐步計算:

  • i = 1 → j = 2..5

    232+342+452+562=3+6+10+15=34\frac{2\cdot3}{2} + \frac{3\cdot4}{2} + \frac{4\cdot5}{2} + \frac{5\cdot6}{2} = 3 + 6 + 10 + 15 = 34
  • i = 2 → j = 3..5

    6+10+15=316 + 10 + 15 = 31
  • i = 3 → j = 4..5

    10+15=2510 + 15 = 25
  • i = 4 → j = 5

    1515

總和

34+31+25+15=10534 + 31 + 25 + 15 = 105


答案:當 n = 5 時,語句 r = r + 1; 會執行 105 次

台綜大B30 計概114 第五題 解答 ※ 販售必究 ※ 台灣綜合大學, 資訊管理系, 轉學考

 Q5. 對下列網際網路應用,請分別指出其採用 TCP 或 UDP 的傳輸層協定:

A) 電子郵件 (E-mail)

B) 檔案傳輸 (FTP)

C) 視訊會議 (video conference)

D) 網頁搜尋 (web searching, 如 Google)

E) 線上遊戲 (online games)

F) VoIP (voice on internet)


TCP vs UDP 傳輸層協定特性

  • TCP (Transmission Control Protocol)

    • 面向連線 (connection-oriented)。

    • 提供可靠性、錯誤檢查、資料順序控制。

    • 適合需要「正確性」的應用(如檔案、文字)。

  • UDP (User Datagram Protocol)

    • 無連線 (connectionless)。

    • 傳輸快速、延遲低,但不保證可靠性。

    • 因為對於與時間順序有關的應用,在超過需求時間後再重傳沒有意義。(這點最重要)

    • 適合即時應用(如影音串流、遊戲)。


各應用對應的協定

A) 電子郵件 (E-mail)TCP

  • 使用 SMTP、POP3、IMAP,都需要可靠傳輸。

B) 檔案傳輸 (FTP)TCP

  • FTP 需完整、正確的檔案傳輸,不能遺失資料。

C) 視訊會議 (Video Conference)UDP

  • 即時性比完整性重要,少量遺失可容忍。

D) 網頁搜尋 (Web Searching, 如 Google)TCP

  • 使用 HTTP/HTTPS (底層是 TCP),需完整正確的資料。

E) 線上遊戲 (Online Games)UDP

  • 要求低延遲,能容忍部分封包遺失。

F) VoIP (Voice over IP)UDP

  • 語音通訊強調即時性,延遲比正確性更重要。

台綜大B30 計概114 第四題 解答 ※ 販售必究 ※ 台灣綜合大學, 資訊管理系, 轉學考

 Q4 傳遞參數方式主要包含:傳值呼叫 (call-by-value)、傳址呼叫 (call-by-address)、傳參照呼叫 (call-by-reference)、傳名呼叫 (call-by-name)。請解釋這些方式在被呼叫副程式(callee subroutine)與呼叫者(caller)之間的資料傳遞差異,以及副程式結束後實際參數是否會受到影響。


🔹 參數傳遞方式比較

當呼叫者 (caller) 將參數傳入被呼叫副程式 (callee subroutine) 時,不同的傳遞方式會影響 副程式內部對參數的操作方式,以及 呼叫結束後實際參數是否會改變。以下逐一說明:


1️⃣ 傳值呼叫 (Call by Value)

  • 機制:呼叫時,會將 實際參數的值複製一份 傳給副程式。

  • 影響:副程式僅能操作這份「複本」,不會影響原始的實際參數。

  • 結果:副程式結束後,實際參數不變

  • 範例:C 語言傳遞基本型別。


2️⃣ 傳址呼叫 (Call by Address)

  • 機制:呼叫時,會將 實際參數的記憶體位址 (指標) 傳入副程式。

  • 影響:副程式若透過該位址修改內容,會直接作用於呼叫者的實際參數。

  • 結果:副程式結束後,實際參數可能改變

  • 範例:C 語言以指標 (int *p) 參數傳遞。


3️⃣ 傳參照呼叫 (Call by Reference)

  • 機制:呼叫時,傳入的是 實際參數的參照 (reference),就像是替呼叫者的變數取了一個「別名」。

  • 影響:副程式內對參數的修改,會直接反映在呼叫者的實際參數上。

  • 結果:副程式結束後,實際參數可能改變

  • 範例:C++ 的參照 (int &x),或 Java 的物件傳遞(嚴格來說是「值傳遞參照」)。


4️⃣ 傳名呼叫 (Call by Name)

  • 機制:呼叫時,傳入的不是值或位址,而是 一段可以重新計算的表達式。副程式每次使用該參數時,會「回頭」以文字替換或延遲計算的方式來求值。

  • 影響:效果類似巨集展開,每次取用都會重新計算,可能導致副作用。

  • 結果:實際參數是否改變,取決於該表達式的內容與副程式操作方式。

  • 範例:ALGOL 語言、Scala(透過 => call-by-name 參數)。

台綜大B30 計概114 第三題 解答 台灣綜合大學, 資訊管理系, 轉學考

Q3  請說明物件導向程式設計 (OOP) 中的封裝 (encapsulation)、多型 (polymorphism) 以及多載 (overloading) 的特徵。

🔹 1. 封裝 (Encapsulation)

  • 定義
    將資料 (屬性) 與操作這些資料的方法 (函式) 打包成一個物件,並透過存取修飾子 (如 private, public, protected) 來控制外部存取。

  • 特徵

    • 隱藏內部細節,只暴露必要的介面 (interface)。

    • 提高程式的 安全性(避免外部直接修改內部資料)。

    • 增加 模組化與可維護性

  • 範例 (Java)

    class BankAccount { private double balance; // 封裝在物件內,不可直接存取 public void deposit(double amount) { balance += amount; } public double getBalance() { return balance; } }

🔹 2. 多型 (Polymorphism)

  • 定義
    「相同的方法呼叫,依物件型態不同而有不同行為」。

  • 特徵

    • 方法覆寫 (Overriding):子類別重新定義父類別的方法。

    • 執行時期 (runtime) 會根據物件的實際型態決定呼叫哪個方法。

    • 提升 程式彈性可擴充性

  • 範例 (Java)

    class Animal { void speak() { System.out.println("Some sound"); } } class Dog extends Animal { @Override void speak() { System.out.println("Woof!"); } } class Cat extends Animal { @Override void speak() { System.out.println("Meow!"); } } // 多型展現 Animal a1 = new Dog(); Animal a2 = new Cat(); a1.speak(); // Woof! a2.speak(); // Meow!

🔹 3. 多載 (Overloading)

  • 定義
    在同一個類別中,方法名稱相同,但參數型態或數量不同

  • 特徵

    • 屬於 編譯時期多型 (compile-time polymorphism)

    • 不需要繼承關係。

    • 讓方法更直覺,根據輸入型態自動選擇正確版本。

  • 範例 (Java)

    class MathUtil { int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } int add(int a, int b, int c) { return a + b + c; } } MathUtil m = new MathUtil(); System.out.println(m.add(3, 5)); // 呼叫 int 版本 System.out.println(m.add(2.5, 4.3)); // 呼叫 double 版本 System.out.println(m.add(1, 2, 3)); // 呼叫三參數版本