好未來2017秋招筆試真題
1.一個C語言程序在一台32位機器上運行。程序中定義了三個變量xyz,其中x和z是int型,y為short型。當x=127,y=-9時,執行賦值語句z=x+y后,xyz的值分別是
A:X=0000007FH,y=FFF9H,z=00000076H
B:X=0000007FH,y=FFF9H,z=FFFF0076H
C:X=0000007FH,y=FFF7H,z=FFFF0076H
D:X=0000007FH,y=FFF7H,z=00000076H
正確答案: D
X = 127 (int 占 4字節 32位) 換算16進制 就是 0000007FH
Z = 127 - 9 = 118同上 , 16 進制 是 00000076H
Y = -9 二進制用補碼表示
原碼:1000 0000 0000 1001
反碼:1111 1111 1111 0110
補碼:反碼+1
1111 1111 1111 0111 --> F F F 7
2. 關於進程狀態的說法,下列錯誤的是
A:處於就緒狀態的進程,當進程調度程序為之分配了處理機后,該進程便由就緒狀態變為執行狀態
B:當前進程因發生某事件而無法執行,如訪問已被占用的臨界資源,就會使進程由執行狀態轉變為阻塞狀態
C:當前進程因時間片用完而被暫停執行,該進程便由執行狀態轉變為阻塞狀態
D:處於掛起狀態的進程不能接收處理機調度
正確答案: C
A,對。處於就緒狀態的進程,當進程調度程序為之分配了處理機后,該進程便由就緒狀態變為執行狀態;B,對。當前進程因發生某事件而無法執行,如訪問已被占用的臨界資源,就會使進程由執行狀態轉變為阻塞狀態;C,錯。當前進程因時間片用完而被暫停執行,該進程便由執行狀態轉變為就緒狀態;D,對。處於掛起狀態的進程不能接收處理機調度
3. 同一進程下的線程不可以共享的是
A:stack
B:data section
C:code section
D:file fd
正確答案: A
4. 在OSI 7 層模型中,網絡層的功能有
A:確保數據的傳送正確無誤
B:確定數據包如何轉發與路由
C:在信道上傳送比特流
D:糾錯與流控
正確答案: B
A 數據鏈路層 ;B 網絡層 ;C 物理層 ;D 數據鏈路層
5.應用程序PING 發出的是_______報文
A:TCP 請求報文
B:TCP 應答報文
C:ICMP 請求報文
D:ICMP 應答報文
正確答案: C
ICMP (Internet Control Message Protocol) Internet控制報文協議, 用於在IP主機、路由器 之間傳遞控制消息。控制消息是指網絡 不通、主機 是否可達、路由 是否可用等網絡本身的消息。
6. 使用traceroute命令測試網絡時可以
A:檢驗鏈路協議是否運行正常
B:檢驗目標網絡是否在路由表中
C:檢驗應用程序是否正常
D:顯示分組到達目標路徑上經過的各路由器
正確答案: D
UNIX命令traceroute可以顯示分組到達目標所經過的各個路由器的IP地址和到達目標的時間,通過traceroute可以知道從你的計算機到互聯網另一端的主機走的什么路徑。在MS Windows中對應的命令為tracert。
7. 主機甲向主機乙連續發送了兩個TCP報文段,其序號分別為70和100。下列錯誤的是
A:第一個報文段攜帶了30個字節的數據
B:主機乙收到第一個報文段后發回的確認中的確認號是100
C:如果主機乙收到第二個報文段后發回的確認中的確認號是180,那么甲發送的第二個報文段中的數據有80字節
D:如果甲發送的第一個報文段丟失了,但第二個報文段到達了乙,乙在第二個報文段到達后向甲發送確認,這個確認號為100
正確答案: D
D選項:如果甲發送的第一個報文段丟失了,但第二個報文段到達了乙,乙在第二個報文段到達后向甲發送確認,這個確認號為70
8. 在單鏈表中刪除指針p所指結點的后繼結點,則執行________操作
A:p->next=p->next->next
B:p->next=p->next
C:p=p->next->next
D:p=p->next;p->next=p->next->next
正確答案: A
選擇A p->next=p->next->next 下下個節點把下個節點給截斷了
9.表達式(a-b)*(c+5)的后綴式是
A:a b c 5 + * -
B:a b – c + 5 *
C:a b c - * 5 +
D:a b- c 5 + *
正確答案: D
首先要了解什么是后綴式,后綴式是一種指把運算符號寫在運算數后面的表達式。最大的特點是省去了括號。
例如:a+b的后綴式為ab+;
后綴式的解法:
1.從左到右找到第一個運算符
2.使用該運算符計算其前面緊挨的兩個數值並作為一個新的運算數
3.依次尋找下一個運算符並計算其前兩“個”運算數
直接應用對表達式進行計算。
10. 以下說法正確的有?
A:7月有30天
B:8月有30天
C:2014年2月有28天
D:2月有28天
正確答案: C D 你的答案: C (錯誤)
我覺得這個題目應該選A、B、C、D。7月有30天,因為7月一共有31天,所以自然是有30天的,就好比七月是有這個能力有30天的。如果按照這種思路,那么我認為四個選項都對。如果AB不對,那D也就不對了,所以個人覺得要么選ABCD,要么選C
11. [編程題]字符串中找出連續最長的數字串
讀入一個字符串str,輸出字符串str中的連續最長的數字串
輸入描述:
個測試輸入包含1個測試用例,一個字符串str,長度不超過255。
輸出描述:
在一行內輸出str中里連續最長的數字串。
輸入例子:
abcd12345ed125ss123456789
輸出例子:
123456789
#include<iostream> #include<string.h> using namespace std; int main() { int i=0, j; int num1=0, num2=0; int index1=0, index2=0; char str[255]; char flag=0; scanf("%s", str); while(str[i] != '\0') { num2=0; while(str[i]>='0' && str[i]<='9') { num2++; index2 = i; i++; } if(num2>num1) { num1 = num2; index1 = index2; } i++; } for(j=index1-num1+1; j<=index1; j++) cout << str[j]; cout << endl; return 0; }
12. [編程題]n個數里最小的k個
讀入一個字符串str,輸出字符串str中的連續最長的數字串
輸入描述:
每個測試輸入包含空格分割的n+1個整數,最后一個整數為k值,n
不超過100。
輸出描述:
輸出n個整數里最小的k個數。升序輸出
輸入例子:
3 9 6 8 -10 7 -11 19 30 12 23 5
輸出例子:
-11 -10 3 6 7
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int a[100] = {0}; int num=0; vector<int> b; while (scanf("%d",&a[num]) != EOF && getchar() != '\n')//錄入帶空格的數字流。 num++; int n = num+1; int k = a[num]; for(int i=0;i<n-2;i++) b.push_back(a[i]); sort(b.begin(),b.end()); for(int i=0; i<k-1; i++) { cout << b[i] << ' '; } cout<<b[k-1]<<endl; return 0; }
13. [編程題]n個數里出現次數大於等於n/2的數
輸入n個整數,輸出出現次數大於等於數組長度一半的數。
輸入描述:
每個測試輸入包含 n個空格分割的n個整數,n不超過100,其中有一個整數出現次數大於等於n/2。
輸出描述:
輸出出現次數大於等於n/2的數。
輸入例子:
3 9 3 2 5 6 7 3 2 3 3 3
輸出例子:
3
#include <iostream> #include <string.h> #include <math.h> using namespace std; int main() { char str[202]; int a[101];//存儲數字,這里可以進行動態開辟數組 gets(str); int len = strlen(str); int i,j=0; for(i=len-1;i>=0;) { int sum=0; int ling = -1;//判斷個、十、百...位 int flag = 0; while(str[i]!=' ' && i>=0){ if(str[i]!='-') { ling++; sum+=(str[i]-48)*pow(10,ling); } else{ flag = 1; } i--; } if(flag) a[j] = sum*(-1); else a[j] = sum; j++; i--; } for(i=0;i<j;i++) { int account= 1; int number; for(int k=i+1;k<j;k++) { if(a[i]==a[k]) { account++; number = a[k]; } } if(account>=j/2){ cout<<number; break; } } return 0; }