昨天師兄乙個朋友找外企工作,幫他做程式設計題,其中一道比較有意思,如下
問輸出什麼?為什麼?
#include #include int main()
這道題感覺很有意思,算是知識的綜合。考慮清楚了,卻挺簡單
1. fork()的理解
fork()是乙個程序建立函式,乙個程序呼叫fork()函式後,系統先給新的程序分配資源,例如儲存資料和**的空間。然後把原來的程序的所有值都複製到新的新程序中,只有少數值與原來的程序的值不同。相當於轉殖了乙個自己。
最有特點的是;fork僅僅被呼叫一次,卻能夠返回兩次,它可能有三種不同的返回值:
1)在父程序中,fork返回新建立子程序的程序id(大於0);
2)在子程序中,fork返回0;
3)如果出現錯誤,fork返回乙個負值;
2. 邏輯運算子的理解
只看這個fork() && fork() || fork();會比較蛋疼,換一下,int a,b,c; a,b,c為三個int型別的值,那麼a && b || c運算規律如下:
1)、a為假,那就不判斷b,接著判斷c
2)、a為真,這又要分為兩種情況:
2.1、b為真,這就不需要判斷c, a && b || c表示式的值已經知道了
2.2、b為假,那還得判斷c
換成fork() && fork() || fork()也一樣,只不過是用返回的子程序id和返回的0判斷
3. 分析如下:(編號見上述**)
先不考慮第一行,先看第二行fork() && fork() || fork(),如下圖
所以fork() && fork() || fork() 這行一共建立了4個程序
4. 結果
第一行fork(),建立了乙個程序,所以該程式一共建立1 + 4*2 = 9個新程序
輸出10個*, 9個新程序輸出+最開始的程序輸出
一道關於fork的面試題
include include include int main 使用gcc編譯,4個程序,這在我的一篇部落格有講 fork遇上for迴圈 已知其中乙個程序 列印結果是 pid1 1002,pid2 1003 求其他程序列印的結果 不考慮執行順序,程序id順序連續分配 首先fork的返回值,父程序返...
從一道面試題開始說fork
自 http blog.csdn.net yuwenliang archive 2010 01 18 5209239.aspx 給出如下c程式,在linux下使用gcc編譯 1 include stdio.h 2 include sys types.h 3 include unistd.h 4 5 ...
一道面試題
一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...