Q1輸出是?預測輸出
printf("%d+%d=%d\n", 3, 4, 3+4);
3+4=7。三個 %d 依序替換成 3、4、7(3+4 先算),其餘字元原樣輸出、不自動加空格。
Q2printf("%d", 5 / 2) 的輸出?預測輸出
2。兩個 int 相除是整數除法,去掉小數。要 2.5 得轉型 (float)5/2 或寫 5/2.0。
Q3scanf("%d", x)(漏了 &)會怎樣?抓 bug
可能 crash。scanf 要變數的位址才寫得回;傳 x(未初始化的值)當位址會寫到亂處,且編譯器常不警告。要寫 scanf("%d", &x)。
Q4#include 在哪個編譯階段被處理?
前處理。所有 # 開頭的指令在編譯之前由前處理器處理(展開 include、去註解)。
Q5呼叫了 printf 但實作沒被接上(undefined reference),錯誤在哪階段?
連結。連結器負責把函式呼叫接到實際的函式庫實作,找不到就報 undefined reference。語法錯則是在「編譯」階段。
Q6關於 warning 與 error,正確的是?概念
error 編不過、warning 能編但常是真 bug。所以標準編譯加 -Wall 把警告打開並清掉。
Q7把 double 印到小數第二位,用哪個格式符?填空
%.2f。%f 印浮點、.2 指定小數位數。用 %d 印 float 是型別不符(未定義行為)。
Q8printf("a\tb") 中的 \t 是?預測輸出
Tab。\t 是跳脫字元,輸出水平定位;\n 才是換行。
Q9main 結尾的 return 0; 代表?
正常結束。0 代表正常、非 0 代表錯誤;終端機 echo $? 可查上一個程式的回傳值。
Q10要讓 5 / 2 得到 2.5,正確做法是?
轉型或讓其一是浮點。(float)5 / 2 或 5 / 2.0 觸發浮點除法。只改 %.2f 沒用,因為 5/2 早就在整數階段算成 2。