Re: [問題] 面試遇到的問題
又到了練習上色的時候啦~
※ 引述《caxz ( )》之銘言:
: 前幾天去M面試預到的幾個城是問題,請各位高手解解惑
: void f(int a)
: {
: if(a-- >0)
: {
: f(a); // (1)
: cout<< a; // (2)
: f(a); // (3)
: }
: }
: int main()
: {
: int a=3;
: f(a);
: }
依照函式呼叫順序:
一開始:
f(3) // main 裡面呼叫的
展開 f(3):
f(3):
f(2)
cout << 2
f(2)
展開 f(2):
f(3):
f(2):
f(1)
cout << 1
f(1)
cout << 2
f(2):
f(1)
cout << 1
f(1)
展開 f(1)
f(3):
f(2):
f(1):
f(0)
cout << 0
f(0)
cout << 1
f(1):
f(0)
cout << 0
f(0)
cout << 2
f(2):
f(1):
f(0)
cout << 0
f(0)
cout << 1
f(1):
f(0)
cout << 0
f(0)
因為 f(0) 展開後甚麼都不會做
因此我們收集一下 cout 的順序
cout << 0
cout << 1
cout << 0
cout << 2
cout << 0
cout << 1
cout << 0
你說面試要畫這個嗎?
如果你看得出來這個顆跑中序的樹就不用 QQ
: 我事後用devC++跑了一下結果是 0102010
: 但我無法看懂f()內的邏輯...
: 例如 : 是執行完第一行之後(也就是執行 f(2)->f(1)->f(0)->end )
: 之後才會執行第二行?
: ====================================================
: 下列成是可能有什麼錯誤?
: 我事後自己在devC++上跑都能動, 實在不解多宣告 volatile 有什麼影響?
: int SQR(volatile int *a)
: {
: return (*a)*(*a);
: }
: int main()
: {
: int a = 5;
: int *p = &a;
: SQR(p);
: }
: =====================================================
這也是老梗啦.
這邊給你 volatile 是要提示你這個題目裡面 a 指向的值可能在你未被告知的時間點變動
所以前後兩次 *a 可能會得到不同的值。
那要看對方想問甚麼,如果是想問怎麼改會對的話,你可以敲他的頭。
: 第三題
更改後
: int main()
: {
:
: float a = 0.7;
:
: if(a > 0.7) cout<< "C" <<endl;
: else cout<< "C++" <<endl;
: //以上這段印出C++
:
: if(a < 0.7)
: cout<< "C" <<endl;
: else
: cout<< "C++" <<endl;
: //以上這段印出C
: }
改成這樣應該是考字面常數 (literal)
首先要知道 0.7 的型別是 double
所以 float a = 0.7; 會做一個隱性轉型.
0.7 不論用 double 或 float 表示,在常見的編譯條件下, 都會變成 0.6999 多,
但是 double 後面的 "多" 因為精度關係硬是比較多了一點。
而比較的時候 a > 0.7 或 a < 0.7 就是轉成 float 的 0.7 跟 double 的 0.7 比誰多而已。
我還看不出來跟 C 或 C++ 的差別有甚麼關係
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.122.83.198
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1438359264.A.A58.html
※ 編輯: Feis (140.122.83.198), 08/01/2015 00:23:59
推
08/01 00:26, , 1F
08/01 00:26, 1F
※ 編輯: Feis (140.122.83.198), 08/01/2015 00:40:13
推
08/01 01:15, , 2F
08/01 01:15, 2F
→
08/01 01:19, , 3F
08/01 01:19, 3F
→
08/01 01:20, , 4F
08/01 01:20, 4F
推
08/01 01:23, , 5F
08/01 01:23, 5F
推
08/01 08:19, , 6F
08/01 08:19, 6F
推
08/01 09:44, , 7F
08/01 09:44, 7F
推
08/01 18:05, , 8F
08/01 18:05, 8F
→
08/01 18:05, , 9F
08/01 18:05, 9F
→
08/01 22:14, , 10F
08/01 22:14, 10F
→
08/01 22:16, , 11F
08/01 22:16, 11F
討論串 (同標題文章)