程式設計師C語言經典筆試題

weixin_33724059發表於2018-02-01

這些是C/C++能做的

伺服器開發工程師、人工智慧、雲端計算工程師、資訊保安(黑客反黑客)、大資料 、資料平臺、嵌入式工程師、流媒體伺服器、資料控解、影象處理、音訊視訊開發工程師、遊戲伺服器、分散式系統、遊戲輔助等

9850446-bcf94925d187579b

C語言是程式導向的,而C++是物件導向的

小編推薦一個學C語言/C++的學習裙【 二六三,六八八,二七六 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多幹貨和技術資料分享!

1.以下程式的結果是什麼?

9850446-e13732d9ea8a9346

A: main()函式裡的i是一個未定義值

B: main()函式的i為1

C: 編譯器不允許這種寫法

D: main()裡i的值為0

解答:當筆試者看到此程式碼時,可能會覺得古怪。雖然在C++中編譯是可以通過的(顯然是不合理)。當main()函式裡的i從定義開始,外部的全域性變數i就已經被遮蔽掉,所以main()函式裡作為右值的i的值不會0也不會是1,與外部的i無關。而是一個未定義的符號。

答案:A

2.以下程式的輸出結果是什麼?

9850446-dbdb0dc793a7a171

A:13 13

B:112 13

C :12 12

D:12 13

解析:本題主要考察指標以及棧的概念 。ptr首先指向陣列arr的第一個元素,*(ptr++) += 100之後,arr中的0號元素即a[0]變成了111,別忘了ptr也向後挪了一位即指向1號元素,此時*ptr的值為12。問題來了:printf(“%d %d ”,*ptr,*(++ptr))的輸出結果竟然不是12 13 而是13 13 原因在於printf的兩個引數壓棧順序為從右至左,故也先計算*(++ptr),所以ptr已經指向了arr[2],所以兩次都是13

答案:A

3. 以下程式碼說法正確的是:

9850446-1ec53ecc1b369772

A:一定輸出-120

B:一定不能輸出-120

C:可能輸出-120

D:輸出%d

解答:本題乍一看,-120木有問題! 再仔細一看 char型別表示的資料範圍是-128~127,也沒有溢位。應該沒錯咯。但本題考查的重點並非在此。重點在於aInt = aChar = -120;這句話,為什麼呢?我們知道=號的意思是賦值,是從右往左運算,那第一步會將-120賦給aChar。第二步是aChar的值給aInt。對於第一步沒有什麼要說的。第二步呢就有個問題了。以32位系統常規平臺來看,是將8位元組資料的char型別變數放到32個位元組的int變數裡去,那這裡就存在一個問題了!沒錯,那就是大小端儲存導致的問題,即-120這個數字對應的八個位的二進位制碼是放到int變數的高位還是低位,所以結果自然不必多說了。

答案:C

9850446-aa756fcc033707a8
9850446-8597ad724a5548d6.png
9850446-e89407fec7ac1c72.png
9850446-8652ff47141c22e3.png

喜歡的話關注收藏評論轉發一波,還會持續分享

相關文章