小編今天給大家詳細解答一下一些經(jīng)典的面試題,這些問題不僅在平時學(xué)習(xí)中會遇到,以后工作中也有很大的可能性會遇到的,希望詳解一下,會給準(zhǔn)備以后從事編程的各位有所幫助吧。因為之前找工作面試的時候,遇到的一些問題,現(xiàn)在就結(jié)合考查的知識點和我總結(jié)完 C 語言再學(xué)習(xí)后的深入理解。 一、請?zhí)顚?strong>BOOL , float,指針變量 與“零值”比較的if語句。(10分) 提示:這里“零值”可以是0, 0.0 , FALSE或者“空指針”。例如int變量n與“零值” 比較的 if語句為: if ( n == 0 ) if ( n != 0 ) 以此類推。 1、請寫出BOOL flag與“零值”比較的if語句: 標(biāo)準(zhǔn)答案: if ( flag ) if ( !flag ) 如下寫法均屬不良風(fēng)格,不得分。 if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0) 2、請寫出 float x與“零值”比較的if語句: 標(biāo)準(zhǔn)答案示例: const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <=>=> 不可將浮點變量用“ ==”或“! =”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“ >=”或“ <> 如下是錯誤的寫法,不得分。 if (x == 0.0) if (x != 0.0) 3、請寫出 char *p與“零值”比較的if語句: 標(biāo)準(zhǔn)答案: if (p == NULL) if (p != NULL) 如下寫法均屬不良風(fēng)格,不得分。 if (p == 0) if (p != 0) if (p) if (!) 解答: 1、根據(jù)布爾類型的語義,零值為“假”(記為FALSE),任何非零值都是“真”(記為TRUE)。 加群466572167,群內(nèi)有學(xué)習(xí)資料 2、在浮點數(shù)比較中不能使用 < 和="">,千萬要留意,無論是 float 還是 double 類型的變量,都有精度限制。所以一定要避免將浮點變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<>。 請寫出 float x與“零值”比較的 if語句 const float EPSINON = 0.000001; if ((x >= - EPSINON) && (x <=>=> 或者 if ( fabs (x) <=>=> // fabs (x) 取 x 的絕對值,其中EPSINON是允許的誤差(即精度)。 3、參看:C語言再學(xué)習(xí) -- NUL和NULL的區(qū)別 NULL用于表示什么也不指向,也就是空指針((void *)0)。 加群466572167,群內(nèi)有學(xué)習(xí)資料 程序員為了防止將 if (p == NULL) 誤寫成 if (p = NULL),而有意把 p 和 NULL 顛倒。編譯器認(rèn)為 if (p = NULL) 是合法的,但是會指出 if (NULL = p)是錯誤的,因為 NULL不能被賦值。 擴展:在表達式中使用無符號數(shù) 庫函數(shù) strlen 的原型如下: size_t strlen (char const *string); 注意:strlen 返回一個類型為 size_t 的值。這個類型是在頭文件 stddef.h 中定義的,它是一個無符號整數(shù)類型。在表達式中使用無符號數(shù)可能導(dǎo)致不可預(yù)料的結(jié)果。例如下面的表達式: 加群466572167,群內(nèi)有學(xué)習(xí)資料 但 strlen (ptr1) - strlen (ptr2) 為無符號類型,得不到想要的結(jié)果,應(yīng)該為 if (strlen (ptr1) >= strlen (ptr2)) 加群466572167,群內(nèi)有學(xué)習(xí)資料 二、以下為Windows NT下的32位C++程序,請計算sizeof的值(10分) void Func ( char str[100]) { 請計算 sizeof( str ) = 4 } char str[] = “Hello” ; char *p = str ; int n = 10; 請計算 sizeof (str ) = 6 sizeof ( p ) = 4 sizeof ( n ) = 4 void *p = malloc( 100 ); 請計算 sizeof ( p ) = 4 解答:關(guān)鍵字sizeof與strlen 記住這兩句話: 在 32 位系統(tǒng)下,不管什么樣的指針類型,其大小都為 4 byte。 參數(shù)傳遞數(shù)組永遠都是傳遞指向數(shù)組首元素的指針。 三、簡答題(25分) 1、頭文件中的ifndef/define/endif干什么用? 答:防止該頭文件被重復(fù)引用。 2、#include 答:對于#include 對于#include “filename.h” ,編譯器從用戶的工作路徑開始搜索 filename.h 3、const有什么用途?(請至少說明兩種) ( 1)可以定義 const 常量 ( 2) const 可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被 const 修飾的東西都受到強制保護,可以預(yù)防意外的變動,能提高程序的健壯性。 4、在C++程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加extern “C”聲明? 答: C++語言支持函數(shù)重載, C 語言不支持函數(shù)重載。函數(shù)被 C++編譯后在庫中的名字與 C 語言的不同。假設(shè)某個函數(shù)的原型為: void foo(int x, int y);該 函 數(shù) 被 C 編 譯 器 編 譯 后 在 庫 中 的 名 字 為 _foo, 而 C++編 譯 器 則 會 產(chǎn) 生 像_foo_int_int 之類的名字。C++提供了 C 連接交換指定符號 extern“ C”來解決名字匹配問題。 5、請簡述以下兩個for循環(huán)的優(yōu)缺點 // 第一個 加群466572167,群內(nèi)有學(xué)習(xí)資料 優(yōu)點:程序簡潔 缺點:多執(zhí)行了 N-1 次邏輯判斷,并且打斷了循環(huán)“流水線”作業(yè),使得編譯器不能對循環(huán)進行優(yōu)化處理,降低了效率。 // 第二個 加群466572167,群內(nèi)有學(xué)習(xí)資料 優(yōu)點:循環(huán)的效率高 缺點:程序不簡潔 就僅僅的幾個問題,但是寫的也挺多的,一下子寫太多,看上去也會有疲勞感,加群466572167,群內(nèi)有學(xué)習(xí)資料,可以交流學(xué)習(xí),希望對各位有所幫助吧,每一個點解釋有點多,會不會感覺有點啰嗦呢,要是有的話,可以提出一下,希望對各位有所幫助吧。 |
|