寫出下面程式的輸出
#includeint main()
本題答案
答案為1,2本題的考察重點在於邏輯運算子的短路問題。
在邏輯判斷中,常常需要判斷多個條件,如:
if a and b;
這時,當a為false時,無論b值是什什麼,結果都為false,
所以可以不用判斷b,直接跳過。這種情況稱為邏輯短路路。
邏輯短路有許多應用,如
if(name != null && name.equals("admin"))
這種情況下當name為null時,直接跳過判斷name.equals("admin"),
如果沒有短路路效應,後面是有可能報空指標異常的。
還有,滿足某條件時執行函式
f != null && ff();
這樣的語句,等價於
if (f != null)
但是寫法更更為簡練。
所以,對於本題來說,因為使用的是邏輯或運算子,
因此只要兩個條件中有乙個為真,則整體為
真,計算的時候先計算m=ad不予計算,故該程式的輸出為1,2
如果對上面的程式作出如下修改:
# include int main()
則輸出值為0,2
該題的迷惑性更為大一點,程式首先計算m=a>b的值,
因為a=4,b=6,所以a>b不成立,取值為0,
即m=0,整體表示式為假。因為使用的是邏輯與運算子,
必須兩遍都為真,整體為真,所以當程式
判斷乙個條件為假的時候,則進行短路路操作,
第二個表示式不予就算,故該程式的整體輸出為0,2.
接下來可以看一道更更為巧妙的面試題,這是微軟的一道題目:
原題是:求 1 + 2 + 3 + … + n
要求:不能用乘除法,
不能用if if, while, do_while, for, switch, case,
不能用(a < b ? a : b)三目運算子
# include int test( int n , int *sum)
int main()
如果沒有那麼多的限制的話,這是一道入門級的題目,但是正是因為有那麼多的限制,
所以這道題目才變得有意思起來,這道題目主要考察兩個方面,
乙個是遞迴的使用,乙個就是邏輯短路的使用了。
遞迴的使用是顯而易見的,不再贅述,而對於邏輯短路來說,
邏輯面試題
1 有兩個桶,乙個能盛5公升水,乙個能盛3公升水,如何用測量出4公升水?2 編寫程式求解 1 2 3 4 5 n 3 20個球,其中乙個比其它的重一點,請用最快的方式找它出來。4 27個運動員在參加完比賽後,口渴難耐,去小店買飲料,飲料店搞 憑三個空瓶可以再換一瓶,他們最買多少瓶飲料才能保證一人一瓶...
C語言面試題 耶穌問題
耶穌有13個門徒,其中有乙個就是出賣耶穌的叛徒,請用排除法找出這位叛徒 13人圍坐一圈,從第乙個開始報號 1,2,3,1,2,3.凡是報到 3 就退出圈子,最後留在圈子內的人就是出賣耶穌的叛徒。請找出它原來的序號。解題思路 1 如何表示13個人?通過陣列表示,有13個元素,賦初值是,可以賦值為1 1...
C語言面試題
基礎篇 1 區域性變數能否和全域性變數重名?可以2 如何引用乙個已經定義過的全域性變數?直接呼叫並初始化 3 全域性變數可不可以定義在可被多個.c檔案包含的標頭檔案中?為什麼?可以,6 堆和棧有什麼區別?7 什麼是預編譯,何時需要預編譯 8 c和c 中的struct有什麼不同?9 memset me...