1. 程式人生 > >2016大唐移動 線上筆試題

2016大唐移動 線上筆試題

1. 5 24 61 122 213 數字序列的下面一個數是什麼?

解答:340,以上數字同加上3後,得到8,27,64,125,216,分別是2,3,4,5,6的立方,所以下面的數應該是7³-3=340。

2.下面的程式碼,輸出是什麼?

int main () {
   
    int x = 5, y = 6;
    printf("%%d, %%d", x, y);
    return 0;
}
解答:輸出為%d,%d。因為前兩個%%表示%,後兩個%%也表示%。參見下一題。

3.x=11/3;y=5;

printf("%%d,%%%d/n",x,y)
為什麼輸出的是%d %3
解答:%無法單獨作為字元輸出
(因為其特殊性),如果想要輸出%則可以用%%的形式,你的printf中從左向右兩個%一組,前兩個和第三、四分別表示一個%字元,第五個則是和d組成了%d表示一個整形變數x的值。

4.下面程式碼的輸出結果是什麼?

char str[]="ABCD",*p=str; printf("%d\n",*(p+4));
解答:
char str[]="ABCD",*p=str; 語句中p指標指向字串陣列str的首地址,
printf("%d\n",*(p+4));  語句中 p+4 指向str陣列的第五個字元(字串預設以'\0'結尾)'\0'
故輸出'\0'的ASCII碼 0。
5.優先順序佇列使用什麼資料結構實現?
答案:二叉堆。

6.若有定義int c[4][5],(*cp)[5];和語句cp=c,則能正確引用c陣列元素的是
a。cp+1    b.*(cp+3)   c.*(cp+1)+3    d.*(*cp+2)

解答:

*(*cp+2)代表c[0][2]這個元素。
cp是行指標,用於指向二維陣列的一行。
cp=c,故cp+1是第1行的指標。
*(cp+3)等價於c[3],代表第3行,其數值大小為第三行第一列的地址。
*(cp+1)+3 等價於c[1]+3,代表第一行第三列的地址。
*(*cp+2)等價於*(*(cp+0)+2),等價於c[0][2],代表c陣列的一個元素。
註解:cp+1與*(cp+1)到底有什麼區別,cp+1是指向第一行的指標,
其數值大小為行地址。*(cp+1)代表第一行元素,也可以說是第一行第一列元素的地址。其數值大小為列地址,其大小與cp+1是相等的,但是概念卻是完全不一樣的。
7.當輸入 4, 5, 6之後,下面程式碼中c陣列中的元素是什麼樣子的?
    int c[3][2]={1, 2, 3};
    for(int i=0;i<3; i++)
        scanf("%d", c[i]);


解答:c是一個陣列指標c[0]為第一行第一列元素的地址,如下雷同。所以c中的元素分佈為:
4,2,5,0,6,0.
8.下面程式碼的輸出是什麼?
int main () {
   
    int a='a', b = 'A';
    printf("%d,%o",(a=a+a,a+b,b),a+'a'-'A');
    return 0;
}

解答:首先要知道%d是十進位制輸出,%o是八進位制輸出。其次,()的優先順序最高,","運算子的結合順序是從左到右的。所以第一個%d輸出的是b的數值。第二個%o輸出的是a+'a'-'A'的數值。其次需要注意的一點是:::賦值運算子的結合(包括=,+=,-=,&=等符號),是從右向左的。

9.下面程式碼的輸出是什麼?

int main () {
   
    int a='a', b = 'A';
    printf("%d, %d", a=a+a, a+b, b);
    return 0;
}

解答:","運算子的結合順序是從左到右的。所以先輸出a=a+a的數值,其次是a+b的數值。所以為194, 259。

10.下面程式片段的輸出是多少?

    int a = 5, b =6;
    printf("%d\n",a,b);
    return 0;

解答:逗號運算子的結合順序是從左至右,所以只輸出a的數值。

11.C語言中,函式的隱含儲存型別是:A. auto B.static C.extern D.register

解答:選A。C語言中,宣告變數的時候,如果型別前面不特別指明某些關鍵字(如static, extern, register)時,預設是auto,也稱自動變數。這種變數一般是臨時的,程式執行結束後,就由系統回收了。

舉個簡單的例子:int a; 我們一般是這樣定義變數的。其實系統自動會在int前面自動加上atuo,變成auto  int  a;所以函式的隱含儲存型別是auto.
其它的幾個關鍵字各自都有其特殊的用途。
12.

13.char *s="\ta\017bc"中s所指向的字串是5個還是6個啊?

解答:

\t,相當於按了一下tab鍵
a,字母a
\017,表示8進位制的ascii碼對應的字元
b,字母b
c,字母c
最後還有一個\0,不過字串長度應該不算在內。
可以用strlen測試一下是5

所佔位元組數應該是6
可以這樣測試.
另外如果把\017替換為\0,則s所指向的字串佔據的位元組數為3。
14.下面的程式碼,定義是否合法?

char t[10]='c';

解答:不合法。應該是char t[10]="c"。

15.設迴圈佇列的容量為40(序號從0到39),現經過一系列的入隊和出隊運算後,有①front=11,rear=19;②front=19,rear=11;問在這兩種情況下,迴圈佇列中各有元素多少個?

解答:此處可直接使用佇列長度計算公式: (N+r-f)% N,其中N為佇列容量40,r,f分別為尾指標、頭指標所指向元素,則可以得出:
1)L=(40+19-11)% 40=8
2)L=(40+11-19)% 40=32
16.c程式編譯過程?

預處理,編譯,優化,彙編,連結。

17.死程式碼刪除的概念是什麼?

解答:死程式碼是指永遠不會執行到的程式碼,不是註釋,比如if(0){…},大括號裡的就是死程式碼。

18.D類IP地址僅用於多投點資料傳送

解答:對的!!!!!!

19.關係資料模型有哪三部分組成?

解答:資料結構,資料操作,資料約束

20.指標變數所佔空間大小和該指標變數指向的資料型別沒有任何直接關係.

解答:對!!!!

21.函式模板的例項化是由編譯程式在處理函式呼叫時自動完成的,而類模板的例項化必須由程式設計師在程式中顯式地指定

解答:對!!!!

22.多執行緒中,堆疊是私有的還是共享的?

解答:

執行緒佔有的都是不共享的,其中包括:棧、暫存器、狀態、程式計數器

執行緒間共享的有:堆,全域性變數,靜態變數

程序佔有的資源有:地址空間,全域性變數,開啟的檔案,子程序,訊號量、賬戶資訊。

在一個程序的執行緒共享堆區。因為堆疊是保證執行緒獨立執行所必須的。執行緒函式可以呼叫函式,而被呼叫的函式中又是可以層層巢狀的,所以執行緒必須擁有自己的函式堆疊,使得函式呼叫可以正常執行,不受其他執行緒的影響。

23.下面程式碼的輸出是什麼?
int f() {
    static int b = 0;
    b += 1;
    return b;
}
int main(){
    
    printf("%d\n", f());
    printf("%d\n", f());
    return 0;
}


解答:因為函式中的static變數具有記憶功能,所以輸出為1,2。

24.下面的程式碼輸出什麼?

#include <stdio.h>
#include <string.h>
enum day{
    mon,day
};
struct p{
    int q;
    enum day a;
    int g:3;
    int t:3;
};
int main(){
    printf("%d\n", sizeof(p));
    return 0;
}

解答:輸出12,首先列舉變數佔4個位元組。g和t是位域變數。他們倆佔一個位元組,又因為要位對齊,所以他們倆佔4個位元組,所以3*4=12。

25.代理程序通過MIB與管理站對話。

解答:錯!!! 

代理程序通過網路管理協議與管理站對話。

26.wifi與wlan的關係。

解答:包含關係,wifi是wlan的一種

27.SNMPv2 定義了 8 種 PDU 型別

解答:對的,是8種!!!

28.下面程式碼的輸出是什麼?

int main()
{
    unsigned char a = 0xbc;
    unsigned char b = ~a<<3+1;
    printf("%d %d", a, b);
    return 0;
}

解答:可知,~的優先順序高於+,其次是<<。所以答案為188,48。