c語言筆試面試題?小編今天給大家詳細解答一下一些經典的面試題,這些問題不僅在平時學習中會遇到,以後工作中也有很大的可能性會遇到的,希望詳解一下,會給準備以後從事編程的各位有所幫助吧因為之前找工作面試的時候,遇到的一些問題,現在就結合考查的知識點和我總結完 C 語言再學習後的深入理解,我來為大家科普一下關于c語言筆試面試題?下面希望有你要的答案,我們一起來看看吧!
小編今天給大家詳細解答一下一些經典的面試題,這些問題不僅在平時學習中會遇到,以後工作中也有很大的可能性會遇到的,希望詳解一下,會給準備以後從事編程的各位有所幫助吧。因為之前找工作面試的時候,遇到的一些問題,現在就結合考查的知識點和我總結完 C 語言再學習後的深入理解。
一、請填寫BOOL , float,指針變量 與“零值”比較的if語句。(10分)
提示:這裡“零值”可以是0, 0.0 , FALSE或者“空指針”。例如int變量n與“零值”
比較的 if 語句為:
if ( n == 0 )
if ( n != 0 )
以此類推。
1、請寫出BOOL flag與“零值”比較的if語句:
标準答案:
if ( flag )
if ( !flag )
如下寫法均屬不良風格,不得分。
if (flag == TRUE)
if (flag == 1 )
if (flag == FALSE)
if (flag == 0)
2、請寫出 float x與“零值”比較的if語句:
标準答案示例:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
不可将浮點變量用“ ==”或“! =”與數字比較,應該設法轉化成“ >=”或“ <=”此類形式。
如下是錯誤的寫法,不得分。
if (x == 0.0)
if (x != 0.0)
3、請寫出 char *p與“零值”比較的if語句:
标準答案:
if (p == NULL)
if (p != NULL)
如下寫法均屬不良風格,不得分。
if (p == 0)
if (p != 0)
if (p)
if (!)
解答:
1、根據布爾類型的語義,零值為“假”(記為 FALSE),任何非零值都是“真”(記為TRUE)。
加群466572167,群内有學習資料
2、在浮點數比較中不能使用 < 和 >,千萬要留意,無論是 float 還是 double 類型的變量,都有精度限制。所以一定要避免将浮點變量用“==”或“!=”與數字比較,應該設法轉化成“>=”或“<=”形式。
請寫出 float x 與“零值”比較的 if 語句
const float EPSINON = 0.000001;
if ((x >= - EPSINON) && (x <= EPSINON)
或者 if ( fabs (x) <= EPSINON)
// fabs (x) 取 x 的絕對值,其中EPSINON是允許的誤差(即精度)。
3、參看:C語言再學習 -- NUL和NULL的區别
NULL用于表示什麼也不指向,也就是空指針((void *)0)。
加群466572167,群内有學習資料
程序員為了防止将 if (p == NULL) 誤寫成 if (p = NULL),而有意把 p 和 NULL 颠倒。編譯器認為 if (p = NULL) 是合法的,但是會指出 if (NULL = p)是錯誤的,因為 NULL不能被賦值。
擴展:在表達式中使用無符号數
庫函數 strlen 的原型如下:
size_t strlen (char const *string);
注意:strlen 返回一個類型為 size_t 的值。這個類型是在頭文件 stddef.h 中定義的,它是一個無符号整數類型。在表達式中使用無符号數可能導緻不可預料的結果。例如下面的表達式:
加群466572167,群内有學習資料
但 strlen (ptr1) - strlen (ptr2) 為無符号類型,得不到想要的結果,應該為 if (strlen (ptr1) >= strlen (ptr2))
加群466572167,群内有學習資料
二、以下為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
解答:關鍵字sizeof與strlen
記住這兩句話:
在 32 位系統下,不管什麼樣的指針類型,其大小都為 4 byte。
參數傳遞數組永遠都是傳遞指向數組首元素的指針。
三、簡答題(25分)
1、頭文件中的ifndef/define/endif幹什麼用?
答:防止該頭文件被重複引用。
2、#include <filename.h>和#include “filename.h”有什麼區别?
答:對于#include <filename.h> ,編譯器從标準庫路徑開始搜索 filename.h
對于#include “filename.h” ,編譯器從用戶的工作路徑開始搜索 filename.h
3、const有什麼用途?(請至少說明兩種)
( 1)可以定義 const 常量
( 2) const 可以修飾函數的參數、返回值,甚至函數的定義體。被 const 修飾的東西都受到強制保護,可以預防意外的變動,能提高程序的健壯性。
4、在C 程序中調用被C編譯器編譯後的函數,為什麼要加extern “C”聲明?
答: C 語言支持函數重載, C 語言不支持函數重載。函數被 C 編譯後在庫中的名字與 C 語言的不同。假設某個函數的原型為: void foo(int x, int y);該 函 數 被 C 編 譯 器 編 譯 後 在 庫 中 的 名 字 為 _foo, 而 C 編 譯 器 則 會 産 生 像_foo_int_int 之類的名字。C 提供了 C 連接交換指定符号 extern“ C”來解決名字匹配問題。
5、請簡述以下兩個for循環的優缺點
// 第一個
加群466572167,群内有學習資料
優點:程序簡潔
缺點:多執行了 N-1 次邏輯判斷,并且打斷了循環“流水線”作業,使得編譯器不能對循環進行優化處理,降低了效率。
// 第二個
加群466572167,群内有學習資料
優點:循環的效率高
缺點:程序不簡潔
就僅僅的幾個問題,但是寫的也挺多的,一下子寫太多,看上去也會有疲勞感,加群466572167,群内有學習資料,可以交流學習,希望對各位有所幫助吧,每一個點解釋有點多,會不會感覺有點啰嗦呢,要是有的話,可以提出一下,希望對各位有所幫助吧。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!