很經典的C 筆試題(附答案)

2021-04-20 03:47:21 字數 4724 閱讀 8941

1.

以下三條輸出語句分別輸出什麼?

char

str1 =

"abc"

;

char

str2 =

"abc"

;

const

char

str3 =

"abc"

;

const

char

str4 =

"abc"

;

const

char

* str5 =

"abc"

;

const

char

* str6 =

"abc"

;

cout << boolalpha << ( str1==str2 ) << endl;

// 輸出什麼?

cout << boolalpha << ( str3==str4 ) << endl;

// 輸出什麼?

cout << boolalpha << ( str5==str6 ) << endl;

// 輸出什麼?

2. 以下**中的兩個sizeof用法有問題嗎?

void

uppercase(

char

str )

// 將str 中的小寫字母轉換成大寫字母}}

char

str =

"abcde"

;

cout <<

"str

字元長度為: "

<<

sizeof

(str)/

sizeof

(str[0]) << endl;

uppercase( str );

cout << str << endl;

3. 非c++內建型別a和b,在哪幾種情況下b能隱式轉化為a?

4. 以下**有什麼問題?

struct

test

test() {}

void

fun() {}

};void

main(

void

)

5. 以下**有什麼問題?

cout << (

true

?1:"0"

) << endl;

6. 以下**能夠編譯通過嗎,為什麼?

unsigned

intconst

size1 = 2;

char

str1[ size1 ];

unsigned

inttemp = 0;

cin >> temp;

unsigned

intconst

size2 = temp;

char

str2[ size2 ];

7. 以下反向遍歷array陣列的方法有什麼錯誤?

vector

array

;

array

.push_back( 1 );

array

.push_back( 2 );

array

.push_back( 3 );

for( vector::size_type i=

array

.size()-1; i>=0; --i )

// 反向遍歷array陣列

8. 以下**中的輸出語句輸出嗎,為什麼?

struct

cls

cls()

};

cls obj;

cout << obj.m_i << endl;

9. c++

中的空類,預設產生哪些類成員函式?

10.

以下兩條輸出語句分別輸出什麼?

float

a =

1.0f

;cout << (

int)a << endl;

cout << (

int&)a << endl;

cout << boolalpha << ( (

int)a == (

int&)a ) << endl;

// 輸出什麼?

float

b =

0.0f

;cout << (

int)b << endl;

cout << (

int&)b << endl;

cout << boolalpha << ( (

int)b == (

int&)b ) << endl;

// 輸出什麼?

11.

以下**有什麼問題?

typedef

vector intarray;

intarray

array

;

array

.push_back( 1 );

array

.push_back( 2 );

array

.push_back( 2 );

array

.push_back( 3 );

// 刪除array陣列中所有的2

for( intarray::iterator itor=

array

.begin(); itor!=

array

.end(); ++itor )

12.

寫乙個函式,完成記憶體之間的拷貝。[考慮問題是否全面]

答案: 1.

答:分別輸出false,false,true。str1和str2都是字元陣列,每個都有其自己的儲存區,它們的值則是各儲存區首位址,不等;str3和str4同上,只是按const語義,它們所指向的資料區不能修改。str5和str6並非陣列而是字元指標,並不分配儲存區,其後的「abc」以常量形式存於靜態資料區,而它們自己僅是指向該區首位址的指標,相等。 2.

答:函式內的sizeof有問題。根據語法,sizeof如用於陣列,只能測出靜態陣列的大小,無法檢測動態分配的或外部陣列大小。函式外的str是乙個靜態定義的陣列,因此其大小為,函式內的str實際只是乙個指向字串的指標,沒有任何額外的與陣列相關的資訊,因此sizeof作用於上只將其當指標看,乙個指標為個位元組,因此返回。 3.

答: a. class

b :

public

a // b

公有繼承自a,可以是間接繼承的

b. class

b // b

實現了隱式轉化為a的轉化

c. class

a // a

實現了non-explicit的引數為b(可以有其他帶預設值的引數)建構函式

d. a&

operator

= (

const

a& );

// 賦值操作,雖不是正宗的隱式型別轉換,但也勉強算乙個

4.答:變數b定義出錯。按預設建構函式定義物件,不需要加括號。 5.

答:三元表示式「?:」問號後面的兩個運算元必須為同一型別。 6.

答:str2定義出錯,size2非編譯器期間常量,而陣列定義要求長度必須為編譯期常量。 7.

答:首先陣列定義有誤,應加上型別引數:vectorarray。其次vector::size_type被定義為unsigned int,即無符號數,這樣做為迴圈變數的i為時再減就會變成最大的整數,導致迴圈失去控制。 8.

答:不能。在預設建構函式內部再呼叫帶參的建構函式屬使用者行為而非編譯器行為,亦即僅執行函式呼叫,而不會執行其後的初始化表示式。只有在生成物件時,初始化表示式才會隨相應的建構函式一起呼叫。 9.

答: class

empty

;10.

答:分別輸出false和true。注意轉換的應用。(int)a實際上是以浮點數a為引數構造了乙個整型數,該整數的值是,(int&)a則是告訴編譯器將a當作整數看(並沒有做任何實質上的轉換)。因為以整數形式存放和以浮點形式存放其記憶體資料是不一樣的,因此兩者不等。對b的兩種轉換意義同上,但是的整數形式和浮點形式其記憶體資料是一樣的,因此在這種特殊情形下,兩者相等(僅僅在數值意義上)。

注意,程式的輸出會顯示(int&)a=1065353216,這個值是怎麼來的呢?前面已經說了,以浮點數形式存放在記憶體中,按ieee754規定,其內容為x

0000803f

(已考慮位元組反序)。這也就是a這個變數所佔據的記憶體單元的值。當(int&)a出現時,它相當於告訴它的上下文:「把這塊位址當做整數看待!不要管它原來是什麼。」這樣,內容x

0000803f

按整數解釋,其值正好就是(十進位制數)。

通過檢視彙編**可以證實「(int)a相當於重新構造了乙個值等於a的整型數」之說,而(int&)的作用則僅僅是表達了乙個型別資訊,意義在於為cout《及==選擇正確的過載版本。

11.答:同樣有缺少型別引數的問題。另外,每次呼叫「array.erase(itor);」,被刪除元素之後的內容會自動往前移,導致迭代漏項,應在刪除一項後使itor--,使之從已經前移的下乙個元素起繼續遍歷。

12.答:

void

* mymemcpy(

void

*dest,

const

void

*src, size_t count )

else

return

dest;

}

華為C語言筆試題 附答案

華為c語言筆試題 附答案 1 區域性變數能否和全域性變數重名?答 能,區域性會遮蔽全域性。要用全域性變數,需要使用 區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同乙個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內...

聯想筆試題(附簡單答案)

1 設計函式 int atoi char s 2 int i j 4,k 8,l 16,m 32 printf d i 輸出是多少?3 解釋區域性變數 全域性變數和靜態變數的含義。4 解釋堆和棧的區別。解答 1 2 逗號表示式,i 32 3 定義在函式裡的就是內部變數,其作用域就是本函式範圍,又被稱...

經典邏輯筆試題和答案

1 有 1000瓶酒,其中只有一瓶有毒。現在用小白鼠進行實驗,小白鼠只要服用任意量有毒酒就會在24小時內死亡。問最少要用多少只小白鼠進行實驗 才能在24小時內檢測出哪瓶藥水有毒?這是乙個二進位制的問題,答案是用10只就可以。將1000瓶酒分別編號,用十隻小白鼠分別代表十位二進位制儲存,將編號為i的酒...