免費開始練習
地特四等 112年 [電子工程] 計算機概要

第 28 題

呼叫下列 C 函式,若傳入兩字串 "abcd" 與 "babc",將會在螢幕上輸出那兩個字母?\nint f(char *s, char *t)\n{\nchar *p1,*p2;\nfor (p1 = s; *p1; p1++)\n{\nfor (p2 = t; *p2; p2++)\nif (*p1 == *p2) break;\nif (*p2 == '\0') break;\n}\nprintf("%c %c", *p1, *s);\nreturn p1 - s;\n}
  • A 'a'與'b'
  • B 'b'與'c'
  • C 'a'與'd'
  • D 'b'與'd'

思路引導 VIP

請思考一下:當內層迴圈(掃描字串 t)完全跑完,卻始終沒有觸發 if (*p1 == *p2) break; 這行指令時,這代表什麼物理意義?在此刻,指標 p2 會指向記憶體中的哪一個特定字元,而這個字元又如何影響外層迴圈的命運?

🤖
AI 詳解 AI 專屬家教

同學好,這題你能選對(C),代表你對 **C 語言指標(Pointer)字串結尾字元(Null terminator, \0)**的掌握相當紮實,這在結構設計與自動化系統開發中是基礎中的基礎。

雙重迴圈的邏輯演進

本題的核心在於尋找第一個「不屬於另一組集合」的元素。外層迴圈遍歷字串 s("abcd"),內層迴圈則在字串 t("babc")中搜尋是否有相同的字元。當指標 p1 指向 'a'、'b'、'c' 時,內層迴圈都能在 t 中找到對應字元並提早結束(break),此時 *p2 尚未到達字串末端。然而,當 p1 走到 'd' 時,內層迴圈會完整掃描整個 t 直到遇見 \0(字串結束符號),導致 if (*p2 == '\0') 的條件成立,進而跳出外層迴圈。此時 *p1 的值正是 'd',而 *s 始終指向原字串的開頭 'a',因此輸出為這兩個字母。

▼ 還有更多解析內容

🏷️ 相關主題

程式語言語法與程式設計基礎
查看更多「[電子工程] 計算機概要」的主題分類考古題