地特四等申論題
113年
[資訊處理] 程式設計概要
第 一 題
📖 題組:
二、(一)請將下列 C++語言的迴圈程式以 for 迴圈方式改寫,並寫出此程式片段輸出的結果。(5 分) int i=1; while (i <= 10) { if (i < 5 && i !=2) std::cout << 'X'; i ++; } (二)下列 C++程式有一行錯誤,使得編譯無法通過。請列出那一行錯誤,並寫出正確程式碼。修正後執行此程式,使用者輸入 153 後輸出為何?(5 分) [程式碼見截圖,包含 main 函數與 Armstrong 數判斷邏輯] (三)執行下列 C++程式,當使用者輸入 32,其輸出結果為何?(5 分) [程式碼見截圖,包含因子分解與巢狀迴圈邏輯] (四)請利用 C, C#, C++, Java 或 Python 程式語言寫一個副程式,求二個正整數的最大公因數(GCD)及最小公倍數(LCM)。(10 分)
二、(一)請將下列 C++語言的迴圈程式以 for 迴圈方式改寫,並寫出此程式片段輸出的結果。(5 分) int i=1; while (i <= 10) { if (i < 5 && i !=2) std::cout << 'X'; i ++; } (二)下列 C++程式有一行錯誤,使得編譯無法通過。請列出那一行錯誤,並寫出正確程式碼。修正後執行此程式,使用者輸入 153 後輸出為何?(5 分) [程式碼見截圖,包含 main 函數與 Armstrong 數判斷邏輯] (三)執行下列 C++程式,當使用者輸入 32,其輸出結果為何?(5 分) [程式碼見截圖,包含因子分解與巢狀迴圈邏輯] (四)請利用 C, C#, C++, Java 或 Python 程式語言寫一個副程式,求二個正整數的最大公因數(GCD)及最小公倍數(LCM)。(10 分)
📝 此題為申論題,共 4 小題
小題 (一)
請將下列 C++語言的迴圈程式以 for 迴圈方式改寫,並寫出此程式片段輸出的結果。(5 分)
思路引導 VIP
將 while 迴圈轉換為 for 迴圈時,需找出「初始值、執行條件、遞加式」三個要素並整合至 for 迴圈的架構中。追蹤輸出結果時,建議逐一代入變數 i 的值,並利用 i < 5 且 i != 2 的邏輯判斷條件進行篩選來確認最終輸出的次數。
小題 (二)
下列 C++程式有一行錯誤,使得編譯無法通過。請列出那一行錯誤,並寫出正確程式碼。修正後執行此程式,使用者輸入 153 後輸出為何?(5 分)
思路引導 VIP
看到這題應先檢查程式碼中常見的語法錯誤(如 cin << 串流方向錯誤、遺漏分號、變數未先宣告等)以解決編譯失敗的問題。接著追蹤迴圈邏輯,辨識出此為判斷阿姆斯壯數(Armstrong number)的演算法,將 153 代入並計算各個數字的立方和以推導輸出結果。
小題 (三)
執行下列 C++程式,當使用者輸入 32,其輸出結果為何?(5 分)
思路引導 VIP
面對程式碼追蹤題,應備妥紙筆畫出變數追蹤表(Trace Table),逐行記錄變數變化與迴圈條件。本題涉及因子分解與巢狀迴圈,須特別留意內層迴圈的執行次數以及變數遞減(或相除)的終止條件。
小題 (四)
請利用 C, C#, C++, Java 或 Python 程式語言寫一個副程式,求二個正整數的最大公因數(GCD)及最小公倍數(LCM)。(10 分)
思路引導 VIP
看到最大公因數(GCD),應直覺聯想最高效的「輾轉相除法(Euclidean Algorithm)」。最小公倍數(LCM)則可利用公式 LCM = (a * b) / GCD 快速求得;實作時須注意副程式若要同時回傳兩個值,在 C/C++ 中可使用「傳參照(Pass by Reference)」或指標,且計算 LCM 時建議「先除後乘」以避免整數溢位(Integer Overflow)。