May 25th, 2008

可以拿去考別人對 C 語言的熟悉度喔 XD

剛才跟某個朋友聊 MSN,聊著就突然講到 C 語言去了,因為好人助教的職業病使然,我突然扮起壞人考了他這樣的題目:


int x = 0;
if (x = 0 || x == 0) printf("%dn", x);
printf("%dn", x);

請問這段正常的 C 語言程式碼會輸出什麼結果到螢幕上呢?

當然直接去 compile & run 就會知道答案了,不過你可以問問自己第一時間想到什麼答案 :P

 

歷史上的今天

目前有 8 則留言
  1. Avatar 日落:

    好機車 XDDD
    不過哪個傢伙 C 語言這樣寫
    就抓去當掉吧

  2. Avatar GDX:

    真的很機車…XD

  3. Avatar Rack Lin:

    呵呵.. 這種 operators priority order
    出在考題沒幾個 programmer 會通過的.. :D

    不過基本上 Logical Operator 優先權一定大於 Assignment Operator (大部份語言都是).
    如果改成以下會比較機車..

    if (x = ++x >>1 || x == 0) printf(”%d\n”, x);

  4. Avatar ericsk:

    @Lian
    我想你拿去 compile 執行一下就知道答案了,
    謎底就留給想猜謎的朋友來猜好了 XD

  5. Avatar ericsk:

    @Lian
    防雷頁應該也夠長了…XD
    答案是
    1
    1

  6. Avatar JonesLai:

    
    int x = 0;
       if (x = (0 || (x == 0))) printf("%dn", x);
       printf("%dn", x);
    

  7. Avatar JonesLai:

    因為int x=0; 所以(x == 0) 為true,C語言true = 1,接著(0 || 1) 為 1 (!註 or 有1就1),再來x = 1 即 變數 x 載入 1,所以 x 內容為 1,只要把 if 括弧內依次判斷就可以知道為什麼,這個應該是考驗運算符號的先後次序關係,以及 = 與 == 粗心的問題。

  8. Avatar (依主題重組):電腦技術領域 « eweibookmark:

    [...] 唬人的 C 語言考題 at 國二學生認真打雜 [...]

我要留言
(必填)
(必填)