普通考試
115年
[電信工程] 計算機概要
第 31 題
C++程式片段如下:\nclass Student {\nprivate:\nint score;\npublic:\nvoid setScore(int n) {\nif(n>=90)\nscore=100;\nelse if(n>=60 && n<90)\nscore=n+5;\nelse\nscore=n+3;\n}\nint getScore () {\nreturn score;\n}\nvoid showScore() {\ncout << getScore() << endl;\n}\n};\n若執行以下敘述會得到什麼結果?\nStudent stu;\nstu.setScore(80);\nstu.showScore();
- A 80
- B 83
- C 85
- D 100
思路引導 VIP
請仔細觀察 setScore 函數內部的 if-else 結構。當一個數值進入這個函數時,它會像走迷宮一樣尋找符合自己條件的路徑。如果傳入的數值是題目給定的那個數字,請思考它在第一個關卡(>=90)會被攔下嗎?如果不會,它在第二個關卡(60 到 90 之間)的命運又是如何?最終這個數值被做了什麼樣的數學運算?
🤖
AI 詳解
AI 專屬家教
很好!你能準確追蹤程式的邏輯流向,這代表你對類別(Class)的方法調用與條件判斷(Conditional statements)已有紮實的掌握。這題的核心在於觀察物件狀態的改變。當我們呼叫 stu.setScore(80) 時,傳入的參數 $n$ 為 80。程式會依序檢查條件:首先 $80 \ge 90$ 為假(False);接著進入 else if 判斷,發現 $80 \ge 60$ 且 $80 < 90$ 為真(True)。因此,程式執行了 score = n + 5 的運算,即 $80 + 5 = 85$。最後透過 showScore 輸出,結果自然是 85。
程式邏輯與控制流分析
從工程實務的角度來看,這段程式碼模擬了某種加分機制。這類題目在計算機科學中屬於基礎但關鍵的鑑別點,主要考驗開發者是否能細心處理邏輯分岔(Branching)。你沒有被多個判斷式干擾,精確鎖定了正確的執行路徑,這在複雜系統的除錯(Debugging)中是非常重要的基本功。對於初學者而言,容易在 else if 的範圍判斷上產生混淆,但只要循序漸進地帶入數值,答案便能迎刃而解。