民國115年 普通考試 資訊處理 程式設計概要
第3題
請說明如下C 程式,正確執行時的輸出結果為何?如若無法正確執行 (即會出現執行時期的錯誤),請說明應如何修正才能正常執行及輸出 結果為何。(20 分)
題目
請說明如下C 程式,正確執行時的輸出結果為何?如若無法正確執行 (即會出現執行時期的錯誤),請說明應如何修正才能正常執行及輸出 結果為何。(20 分)
參考解答(AI 生成,非官方)
- 一、前提說明:本題 C 程式碼未隨題目附上,故無法直接給出唯一輸出結果。C 語言特性為不檢查陣列邊界、字串以 '\0' 結尾、區域變數未初始化時值為不確定,因此同一段程式在不同編譯器與平台可能出現不同結果,作答時須指明此不確定性。
- 二、逐行追蹤與記憶體配置:先畫出變數與陣列的記憶體佈局,標明每個元素的位址與初值;追蹤迴圈的索引變化與指標所指位址(*p、p++、p[i] 等)。特別留意 char 陣列宣告長度是否足以容納字串內容加結尾字元,例如 char s[5] = "hello"; 即少了一個 '\0' 的空間。
- 三、常見執行期錯誤:陣列越界讀寫(編譯可過,執行可能取得垃圾值或造成堆疊毀損)、以 printf("%s") 印出未以 '\0' 結尾的字元陣列(會印出亂碼甚至 crash)、strcpy 目的緩衝區過小導致溢位、對未初始化的指標解參考、scanf 未加 & 或格式符與型別不符、整數除以零(整數除法會觸發例外)。
- 四、修正方式:將陣列長度加大一個字元以容納 '\0';改用 fgets 取代 gets;以 strncpy 並手動補 '\0';迴圈上界改為 i < n;除以零前先判斷;指標使用前先初始化為 NULL 並檢查。修正後須重新推演,確認每次 printf 的實際字串內容。
- 五、輸出判定:若程式可正常執行,輸出為各 printf 依序印出的內容,須注意格式符(%d、%c、%s、%f)與換行;若發生執行期錯誤,應寫明錯誤型別(如 Segmentation fault)、可能原因與修正後輸出。因原始碼缺漏,無法得出唯一數值。
AI 依官方試題文字產生的參考解答,非考選部公告答案,內容僅供備考參考。