第 四 題
依據以下 C 程式碼,回答下列問題: 1 #include
小題 (四)
思路引導 VIP
看到這題,首先觀察 for 迴圈的邊界條件(走訪 count 次)與迴圈主體(printf 輸出)。接著回溯確認自訂函式 c2 的內部邏輯(透過 while 迴圈計算並回傳字串長度),結合參數 words[i],即可推導出整體程式碼的具體功能。
小題 (一)
思路引導 VIP
看到此題,首先觀察函式接收兩個字元指標,且迴圈內透過解指標(*s1, *s2)逐一比對字元並遞增指標。最後回傳相異字元的差值,即可輕易辨識出這是 C 標準函式庫 strcmp(字串比較)的底層手動實作,作答時務必點出「字串比較」目的與「回傳值」代表的意義。
小題 (二)
思路引導 VIP
考生看到這段程式碼,應首先分析傳入函式的參數型態與迴圈的終止條件。觀察 while (s[len]) 判斷式可知,當遇到字串結束字元 \0(數值為 0)時迴圈才會停止,透過變數 len 累加計算次數,便能推導出這是在實作計算字串長度的功能。
小題 (三)
思路引導 VIP
遇到程式碼功能解釋題,先將程式碼依據『初始化、輸入處理、核心邏輯更新』等區塊進行拆解。接著逐行觀察變數狀態變化、系統呼叫(如 malloc, fgets)的用途,以及字串處理(如去換行)的細節,最後綜合成一個完整的功能描述。
小題 (五)
思路引導 VIP
觀察巢狀迴圈與相鄰元素(words[j]與words[j+1])比較後交換位置的特徵,可直接判定為氣泡排序法(Bubble Sort)。接著分析比較條件 c1(...) > 0,確認 c1 功能類似 strcmp,即可推導出整體功能為對字串陣列進行字典序遞增排序。
小題 (六)
思路引導 VIP
先觀察第42行的提示字串,再檢視第43至45行的 for 迴圈結構與 printf 函式。由於前段程式碼(第33至41行)剛執行完氣泡排序,因此這段程式碼的目的顯然是將排序後的結果逐一輸出至螢幕。
小題 (七)
思路引導 VIP
看到 free() 函數,第一直覺應聯想到與 malloc() 配對的動態記憶體釋放。接著對照程式碼前半段 words[i] 與 words 的配置位置,說明迴圈內外釋放的具體對象,並點出避免「記憶體洩漏 (memory leak)」的核心目的。