語言面試題 值的對比

2021-08-13 20:56:51 字數 1848 閱讀 5335

許多人看到這道題目的時候都會嗤之以鼻,覺得非常簡單,於是就寫下下面的**:

if(x==0.0);

if(x!=0.0);

偶爾可能還有個別人,會因為自己注意了寫的是0.0,而不是0而沾沾自喜,不過這樣的寫法均為錯誤的寫法,為什麼呢?因為float的表示方法的問題,float本身就是不精確的,精確度在小數點後6~7位,再往後的就不能保證資料的精確度了。大家可能知道,所有的資料儲存在記憶體中都是以二進位制的方式進行儲存的,首先說一下int型別,

任意的乙個整數,都可以使用 a*2^n+b*2^(n-1)+...x*2^0  來表示。也就是只要空間足夠大,那麼

就可以使用這種方式來表示所有的一切整數數字。

但是對於浮點數來說,在記憶體中使用的是指數冪的形式進行儲存的,跟整數型別是不一樣的。

float是 符號位+8bit的指數為+23bit的小數字組成的。那麼這樣就會有乙個問題,如果資料中的

小數字超過了用來表示小數字的bit長度,就會有資料丟失了,這個時候通常計算機會按照一定的

規律進行轉換得到乙個非常接近的數值,例如13.765432有時候得到的值卻是13.7654319。這就

是所謂的float型別不精確的原因了。

與之相似的,還有這樣一道題目:

等式(a+b)+c==(b+a)+c和

(a+b)+c==(a+c)+b能否成立?

對於這道題目而言,答案也是不能夠成立的,在比較float或double時,不能簡單地比較。由於計

算誤差,相等的概率很低。應判斷兩數之差是否落在區間(-e,e)內。這個e應比浮點數的精度大

乙個數量量級。

除此之外,下面的一道題目也是非常經典的面試題:

寫出bool,int,float指標變數與零值比較的if語句

//bool型資料

if(flag);

if(!flag);

//int型資料

if(0!=flag);

if(0==flag);

//指標型資料

if(null==flag);

if(null!=flag);

//float型資料

define norm 0.00001;

if(flag>= -norm && falg<=norm);

里需要注意的就是在

int,指標型變數和零值比較的時候,把零值放在左邊,這樣當把

==誤寫成

=時,編譯器

器可以報錯,否則這樣邏輯錯誤不容

易發現,並且可能導致很嚴重的後果

的面試題 C語言面試題總結

下面是我在軟通動力的一些面試題,雖然有些模糊了,但是都還是在面試中經常會看到的一些題,而且通過我面試的這些題,也總結了一些面試經驗,這些都是面試時你必須要做好的。首先看面試題吧。1,寫乙個單鏈表,儲存1,2,3,然後寫乙個函式讓其記憶體反轉,3,2,1。2,忘了 3,c字串,this is a te...

C語言面試題之華為面試題

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

C語言面試題

基礎篇 1 區域性變數能否和全域性變數重名?可以2 如何引用乙個已經定義過的全域性變數?直接呼叫並初始化 3 全域性變數可不可以定義在可被多個.c檔案包含的標頭檔案中?為什麼?可以,6 堆和棧有什麼區別?7 什麼是預編譯,何時需要預編譯 8 c和c 中的struct有什麼不同?9 memset me...