免費開始練習
普考申論題 108年 [資訊處理] 程式設計概要

第 一 題

📖 題組:
數學中複數是實數的延伸,複數通常表示為 a+bi 或(a, b),其中 a, b 為實數,分別稱為複數的實部與虛部,i 為虛數單位,且 i^2=-1。複數的加、減、乘、除運算定義如下: (a+bi)+(c+di) = (a+c)+(b+d)i (a+bi)–(c+di) = (a–c)+(b–d)i (a+bi)*(c+di) = (ac-bd)+(ad+bc)i (a+bi)/(c+di) = ((ac+bd)/(c^2+d^2))+((bc-ad)/(c^2+d^2))i 試參考以下程式回答問題:(35 分) (一)此程式的列印結果為何? (二)利用 add(),在 ComplexTest.java 中加入一行程式以印出 “x + y = (3.0, 3.0)” (三)於 Complex.java 中撰寫 public Complex division(Complex right)回傳資料型態與參數命名必須分別為 Complex 與 right。 (四)利用 division(),在 ComplexTest.java 中算出 y=(2, 2) 的倒數(如果 y’*y=1 則稱 y’ 為 y 的倒數),並列印出有意義的訊息。 (五)撰寫 public String standardForm() 以印出複數的另一表示法 a+bi。注意 0.0+bi 要表示為 bi;a+0.0i 要表示為 a;a+1.0i 要表示為 a+i。 [程式碼見截圖第3、4頁...]
📝 此題為申論題,共 5 小題

小題 (一)

此程式的列印結果為何?

思路引導 VIP

分析 ComplexTest.java 中的 main 函式。觀察變數 xy 的初始值,以及 System.out.printf 如何格式化輸出。注意 toString() 的格式定義為 (%.1f, %.1f)

🤖
AI 詳解
AI 專屬家教

【分析與論述】

  • x 實部 1.0, 虛部 1.0,經 toString() 轉換為 (1.0, 1.0)
  • y 實部 2.0, 虛部 2.0,直接印出 y 物件會自動呼叫其 toString(),結果為 (2.0, 2.0)

小題 (二)

利用 add(),在 ComplexTest.java 中加入一行程式以印出 “x + y = (3.0, 3.0)”

思路引導 VIP

需要調用 x.add(y) 並將其結果格式化輸出。可以使用 printf 配合 %s 來顯示相加後的複數物件。

🤖
AI 詳解
AI 專屬家教

【分析與論述】 利用 x.add(y) 會回傳一個新的 Complex 物件,再透過其 toString() 方法格式化輸出。 【參考解答】

小題 (三)

於 Complex.java 中撰寫 public Complex division(Complex right)回傳資料型態與參數命名必須分別為 Complex 與 right。

思路引導 VIP

對照題目給出的除法公式:(a+bi)/(c+di) = ((ac+bd)/(c^2+d^2)) + ((bc-ad)/(c^2+d^2))i。 其中 a, b 為當前物件的 realimaginary;c, d 為 right.realright.imaginary

🤖
AI 詳解
AI 專屬家教

【參考解答】

public Complex division(Complex right) {

小題 (四)

利用 division(),在 ComplexTest.java 中算出 y=(2, 2) 的倒數(如果 y’*y=1 則稱 y’ 為 y 的倒數),並列印出有意義的訊息。

思路引導 VIP

複數 y 的倒數即為 1 / y。在程式中可表示為 (1.0 + 0.0i) / y。需先建立一個值為 (1, 0) 的 Complex 物件再執行 division(y)

🤖
AI 詳解
AI 專屬家教

【分析與論述】 倒數定義為 1 除以此複數。1 的複數表示為 (1.0, 0.0)。 【參考解答】

小題 (五)

撰寫 public String standardForm() 以印出複數的另一表示法 a+bi。注意 0.0+bi 要表示為 bi;a+0.0i 要表示為 a;a+1.0i 要表示為 a+i。

思路引導 VIP

這題考驗邏輯判斷的完整性。需要針對實部(real)是否為 0、虛部(imaginary)是否為 0、以及虛部是否為 1 或 -1 等特殊情況進行字串組合。

🤖
AI 詳解
AI 專屬家教

【分析與論述】 需考慮多種組合:

  1. 實部與虛部皆為 0:應顯示 "0.0"。