Try   HackMD

2018q1 第 5 週測驗題 (中)


測驗 1

已知在 x86_64 架構,以下程式碼的執行輸出是 jserv++C:

#include <stdio.h>
int main() {
    puts((char *) &(double []){ 3823806048287157.0, 96 });
}

考慮以下程式碼,假設 puts 函式總是可正確運作,那麼程式輸出為何?

#include <stdio.h>
double m[] = { 3823806048287157.0, 96 };
void gen() {
    if (m[1]--) {
        m[0] *= 2;
        gen();
    } else
        puts((char *) m);
}
int main() { gen(); return 0; }

作答區

  • (a) jserv++A
  • (b) jserv++B
  • (c) jserv++C
  • (d) jserv++D
  • (e) jserv++E
  • (f) jserv++F
  • (g) jserv++G
  • (h) jserv++H
  • (i) jserv++I
  • (j) 沒有輸出

參考資訊:

延伸題目:

  1. 修改程式,允許輸出你的 GitHub 帳號名稱
  2. 承上,修改 gen() 函式,透過特定的轉換,讓 m[] 的內容變為你的英文姓氏 (last name),程式碼應該越短越好,而且不得以字串的形式存在於原始程式碼
  3. 如果在 big-endian 的環境中,要達到一樣的效果,我們該如何改寫?