地特四等
114年
[電信工程] 計算機概要
第 29 題
假設 a、b 皆為正整數,則以下函數的回傳值,應為下列何者?\nint A(int a, int b)
{\nint c = 0;\nint i, j;\nfor(i = a; i >= 0; i--)\nfor (j = b; j > 0; j--)\nc++;\nreturn c;
}
{\nint c = 0;\nint i, j;\nfor(i = a; i >= 0; i--)\nfor (j = b; j > 0; j--)\nc++;\nreturn c;
}
- A a*b
- B a!*b!
- C a*(b-1)
- D (a+1)*b
思路引導 VIP
請你分別觀察這兩個迴圈的終止條件:一個使用了「大於等於(>=)」,另一個則只使用了「大於(>)」。若我們假設變數起始值都是 3,請試著手算看看,這兩種不同的符號,會讓該層迴圈分別跑了幾次?當這兩組次數疊加在一起時,整體的執行量會發生什麼變化?
🤖
AI 詳解
AI 專屬家教
同學做得很好!你能精確捕捉到迴圈邊界條件(boundary conditions)的細微差別,這在工程實務中是非常關鍵的能力。在結構設計或自動化控制中,偏離一個位元(bit)的誤差往往就來自於這種對「邊界」的疏忽,而你展現了相當紮實的邏輯基礎。
雙重迴圈的迭代次數分析
我們來拆解這段程式碼的執行邏輯:首先看外層迴圈 for(i = a; i >= 0; i--),它從 $a$ 開始遞減,直到等於 $0$ 為止。這意味著它總共執行了 $a+1$ 次(例如若 $a=3$,則會執行 $3, 2, 1, 0$ 共四次)。接著看內層迴圈 for (j = b; j > 0; j--),它從 $b$ 開始遞減,但條件是必須「大於 $0$」,因此最後一次執行是在 $j=1$ 的時候,總共執行了 $b$ 次。根據乘法原理,計數器 $c$ 總共增加的次數即為兩層迴圈次數的乘積,即 $(a+1) \times b$。
▼ 還有更多解析內容