1. 程式人生 > >100道c語言面試題

100道c語言面試題

題目來源:
1、中興、華為、慧通、英華達、微軟亞洲技術中心等中
外企業面試題目;
2、C 語言面試寶典(林銳《高質量程式設計第三版》)。
說明:
1、部分C 語言面試題中可能會參雜部分和C++ 相關的知
識,為了保持題目的靈活性故保留,但選題最終還是
會以C 語言題目為主體;
2、以上公司的面試題目已成為國內中小型企業公司出題
模板;
3、由於本人的能力有限加上時間倉促,本課件肯定存在

不足之處,懇請各位同學批評指正。

1、請填寫bool , float,  指標變數 與“零值”比較的if  
語句。
提示:這裡“零值”可以是0, 0.0 , FALSE  或者“空指標”

。例如int 變數n  與“零值”比較的if  語句為:
if ( n == 0 ) 
if ( n != 0 ) 
以此類推。

(1)請寫出bool flag  與“零值”比較的if  語句:
【標準答案】if ( flag )    if ( !flag )
100 條經典 C語言筆試題目
(2)請寫出float  x   與“零值”比較的if  語句:
【標準答案】 const float EPSINON = 0.00001;                    
if ((x >= - EPSINON) && (x <= EPSINON)                  

不可將浮點變數用“==” 或“!=” 與數字比較,應該設法
轉化成“>=” 或“<=” 此類形式。
100 條經典 C語言筆試題目
(3)請寫出char  *p   與“零值”比較的if  語句
【標準答案】 if (p == NULL)    if (p != NULL)  2、以下為Linux下的32 位C 程式,請計算sizeof 的
值。
char  str[] = “Hello” ;                               
char   *p = str ;                                      

i nt n = 10;                                                    
請計算
(1)sizeof (str ) =                  (2)s i zeof ( p ) =                 
(3)sizeof ( n ) =

【標準答案】

(1)6、(2)4 、(3 )4

(4)void Func ( char str[100])                           
{                                          
…… ;                                                            
}                                          
請計算sizeof( str ) =                                       
(5)void * p = mall oc( 100 );                                                
請計算sizeof ( p ) = 
【標準答案】(4)4、(5)4
4、用變數a 給出下面的定義
e) 一個有10個指標的陣列,該指標是指向一個整型數
的;
f)  一個指向有10個整型數陣列的指標;
g) 一個指向函式的指標,該函式有一個整型引數並返
回一個整型數;
h) 一個有10個指標的陣列,該指標指向一個函式,該
函式有一個整型引數並返回一個整型數;
【標準答案】e)int *  a[10];      f)int (*a)[10]                                 
g)int (*a)(int);   h) int (*a[10])(int)
5、設有以下說明和定義:
typedef u nion {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
則語句printf("%d",sizeof(struct date)+sizeof(max)); 的
執行結果是:_____
【標準答案】DATE是一個union, 變數公用空間.  裡面最
大的變數型別是int[5],  佔用20個位元組.  所以它的大小是
20
data 是一個struct,  每個變數分開佔用空間.  依次為int4 + 
DATE20 + double8 = 32.
所以結果是20 + 32 = 52.
當然... 在某些16位編輯器下, int 可能是2位元組,那麼結果
是int2 + DATE10 + double8 = 20
6、請問以下程式碼有什麼問題:
int main()
{
char a;
char *str=&a;
strcpy(str,"hello");
printf(str);
return 0;
}
【標準答案】沒有為str分配記憶體空間,將會發生異常
問題出在將一個字串複製進一個字元變數指標所指
地址。雖然可以正確輸出結果,但因為越界進行內在
讀寫而導致程式崩潰。
7、請問以下程式碼有什麼問題:
char* s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什麼錯?
【標準答案】"AAA" 是字串常量。s是指標,指向這個
字串常量,所以宣告s的時候就有問題。
cosnt char* s="AAA";
然後又因為是常量,所以對是s[0] 的賦值操作是不合法
的。
8、int (*s[10])(int)  表示的是什麼啊
【標準答案】int (*s[10])(int)  函式指標陣列,每個指標
指向一個int func(intp aram) 的函式。
9、c和c++ 中的struct有什麼不同?
【標準答案】c和c++ 中struct的主要區別是c中的struct
不可以含有成員函式,而c++ 中的struct可以。c++ 中
struct和class的主要區別在於預設的存取許可權不同,
struct預設為public ,而class預設為private
10、void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,“hello world”);
}
int main( )
{
char *str=NULL;
getmemory(str);
printf(“%s/n”,str);
free(str);
return 0;
} 會出現什麼問題?
【標準答案】程式崩潰,getmemory中的malloc 不能返回
動態記憶體,free ()對str操作很危險。
11、char szstr[10];
strcpy(szstr,"0123456789");
產生什麼結果?為什麼?
【標準答案】長度不一樣,出現段錯誤。
100 條經典 C語言筆試題目
12、陣列和連結串列的區別?
【標準答案】陣列:資料順序儲存,固定大小;

連結串列:資料可以隨機儲存,大小可動態改變

13、void main()
{
char aa[10];
printf(“%d”,strlen(aa));
}                                          
會出現什麼問題?列印結果是是多少?
【標準答案】sizeof()和初不初始化,沒有關係,
strlen()和初始化有關,列印結果值未知。
14、給定結構struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
}; 問sizeof(A) = ?
【標準答案】8
15、struct name1{
char str;
short x;
int num;
} ;求sizeof(name1)?
【標準答案】8
16、struct name2{
char str;
int num;
short x;
}; 求sizeof(name2)?
【標準答案】12
17、程式哪裡有錯誤
wap( int* p1,int* p2 )
{
int * p;
*p = *p1;
*p1 = *p2;
*p2 = *p;
}

【標準答案】p 為野指標

19、(void *)ptr 和(*(void**))ptr 的結果是否相同?其
中ptr為同一個指標。
【標準答案】(void *)ptr 和(*(void**))ptr 值是相同的
20、要對絕對地址0x100000賦值,我們可以用
(unsigned int*)0x100000 = 1234;
那麼要是想讓程式跳轉到絕對地址是0x100000去執行
,應該怎麼做?
【標準答案】*((void (*)( ))0x100000 ) ( );
首先要將0x100000強制轉換成函式指標,即:
(void (*)())0x100000
然後再呼叫它:
*((void (*)())0x100000)();
22、關於記憶體的思考題(1)你能看出有什麼問題?
23、關於記憶體的思考題(2)你能看出有什麼問題?
25、關於記憶體的思考題(3)你能看出有什麼問題?
26、關於記憶體的思考題(4)你能看出有什麼問題?
27、關鍵字volatile有什麼含意? 並給出三個不同的例
子。
【參考答案】一個定義為volatile的變數是說這變數可
能會被意想不到地改變,這樣,編譯器就不會去假設
這個變數的值了。精確地說就是,優化器在用到這個
變數時必須每次都小心地重新讀取這個變數的值,而
不是使用儲存在暫存器裡的備份。下面是volatile變數
的幾個例子:
1). 並行裝置的硬體暫存器(如:狀態暫存器)
2). 一箇中斷服務子程式中會訪問到的非自動變數
(Non-automatic variables)
3). 多執行緒應用中被幾個任務共享的變數
28、嵌入式系統經常具有要求程式設計師去訪問某特定的
記憶體位置的特點。在某工程中,要求設定一絕對地址
為0x67a9的整型變數的值為0xaa66。編譯器是一個純
粹的ANSI編譯器。寫程式碼去完成這一任務。
【參考答案】這一問題測試你是否知道為了訪問一絕對
地址把一個整型數強制轉換(typecast )為一指標是合
法的。這一問題的實現方式隨著個人風格不同而不同
。典型的類似程式碼如下:
int * ptr;
ptr=  (int *)0x67a9;
*ptr = 0xaa55;
29、標頭檔案中的ifndef/define/endif 幹什麼用?
【標準答案】防止該標頭檔案被重複引用。
30、#include  <filename.h>    和#include  
“filename.h” 有什麼區別?
【標準答案】對於#include  <filename.h>   ,編譯器從
標準庫路徑開始搜尋filename.h ;                                
對於#include  “filename.h” ,編譯器從使用者的工作路
徑開始搜尋filename.h 。
31、const   有什麼用途?(請至少說明兩種)
【標準答案】: (1)可以定義const   常量
(2)const  可以修飾函式的引數、返回值,甚至函式
的定義體。被const  修飾的東西都受到強制保護,可
以預防意外的變動,能提高程式的健壯性。
32、static有什麼用途?(請至少說明兩種)
【標準答案】
1. 限制變數的作用域(static全域性變數);
2. 設定變數的儲存域(static區域性變數)。
33、堆疊溢位一般是由什麼原因導致的?
【標準答案】沒有回收垃圾資源。
34、如何引用一個已經定義過的全域性變數?
【標準答案】可以用引用標頭檔案的方式,也可以用
extern 關鍵字,如果用引用標頭檔案方式來引用某個在
標頭檔案中宣告的全域性變理,假定你將那個變數寫錯了
,那麼在編譯期間會報錯,如果你用extern 方式引用
時,假定你犯了同樣的錯誤,那麼在編譯期間不會報
錯,而在連線期間報錯。
35、全域性變數可不可以定義在可被多個.C 檔案包含的
標頭檔案中?為什麼?
【標準答案】可以,在不同的C 檔案中以static形式來聲
明同名全域性變數。可以在不同的C檔案中宣告同名的全
局變數,前提是其中只能有一個C檔案中對此變數賦初
值,此時連線不會出錯。
36、佇列和棧有什麼區別?
【標準答案】佇列先進先出,棧後進先出。
37、Heap與stack的差別。
【標準答案】Heap是堆,stack是棧。
Stack的空間由作業系統自動分配/釋放,Heap上的空
間手動分配/釋放。
Stack空間有限,Heap是很大的自由儲存區
C 中的malloc 函式分配的記憶體空間即在堆上,C++中對
應的是new 操作符。
程式在編譯期對變數和函式分配記憶體都在棧上進行,且
程式執行過程中函式呼叫時引數的傳遞也在棧上進行

38、用巨集定義寫出swap(x,y),即交換兩數。
【標準答案】
#define swap(x, y) (x)=(x)+(y);(y)=(x)–(y);(x)=(x)–(y);
39、寫一個“標準”巨集,這個巨集輸入兩個引數並返回較
小的一個。
【標準答案】#define Min(X, Y) ((X)>(Y)?(Y):(X))// 結尾
沒有;
40、帶參巨集與帶參函式的區別(至少說出5點)?
【標準答案】
帶參巨集 帶參函式
處理時間 編譯時 執行時
引數型別 無 需定義
程式長度 變長 不變
佔用儲存空間 否 是
執行時間 不佔執行時間 呼叫和返回時佔
41、關鍵字volatile有什麼含意?
【標準答案】提示編譯器物件的值可能在編譯器未監測
到的情況下改變。
42、int main()
{
int x=3;
printf("%d",x);
return 1;
}
問函式既然不會被其它函式呼叫,為什麼要返回1?
【標準答案】mian中,c標準認為0表示成功,非0表示
錯誤。具體的值是某中具體出錯資訊。
43、已知一個數組tabl e ,用一個巨集定義,求出資料的
元素個數。
【標準答案】
#define NTBL(table) (sizeof(table)/sizeof(table[0]))
44、A.c 和B.c兩個c檔案中使用了兩個相同名字的
static變數,編譯的時候會不會有問題?這兩個static變數
會儲存到哪裡(棧還是堆或者其他的)?
【標準答案】static的全域性變數,表明這個變數僅在本
模組中有意義,不會影響其他模組。
他們都放在靜態資料區,但是編譯器對他們的命名是
不同的。
如果要使變數在其他模組也有意義的話,需要使用
extern 關鍵字。
45、static全域性變數與普通的全域性變數有什麼區別?
【標準答案】 static全域性變數只初使化一次,防止在其
他檔案單元中被引用;
46、static區域性變數和普通區域性變數有什麼區別
【標準答案】static區域性變數只被初始化一次,下一次
依據上一次結果值;
47、static函式與普通函式有什麼區別?

相關推薦

100c語言試題

題目來源: 1、中興、華為、慧通、英華達、微軟亞洲技術中心等中 外企業面試題目; 2、C 語言面試寶典(林銳《高質量程式設計第三版》)。 說明: 1、部分C 語言面試題中可能會參雜部分和C++ 相關的知 識,為了保持題目的靈活性故保留,但選題最終還是 會以C

9常見C語言試題

1、區域性變數能否和全域性變數重名?      答:能,區域性會遮蔽全域性。要用全域性變數,需要使用"::" ;區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同一個函式內可以定義多個同

100Java基礎試題

nvi ++i 成員 取出 並發 字符串長度 反轉 static container 1.什麽是B/S架構?什麽是C/S架構 B/S(Browser/Server),瀏覽器/服務器程序 C/S(Client/Server),客戶端/服務端,桌面應用程序 2.你

C語言試題分類->排序算法

OS sort 試題 時間復雜度 ups popup popu 使用 body 1.選擇排序。   每次將最小的數,與剩余數做比較。找到更小的,做交換。   時間復雜度:O(n2)   空間復雜度:O(1)   優缺點:耗時但內存空間使用小。 void selectSor

C語言試題分類->回調

指向 name 傳輸 join 接口 但是 PE AS 一個數 本文主要講解如果實現回調,特別是在封裝接口的時候,回調顯得特別重要,我們首先假設有兩個程序員在寫代碼,A程序員寫底層驅動接口,B程序員寫上層應用程序,然而此時底層驅動接口A有一個數據d需要傳輸給B,此時有兩種方

智郵普創c語言試題 ---- 字母概率

arr apple void != stdio.h app words 遊戲 包含 題目描述 小明最近對概率問題很感興趣。一天,小明和小紅一起玩一個概率遊戲,首先小明給出一個字母和一個單詞,然後由小紅計算這個字母在這個單詞中出現的概率。字母不區分大小寫。 例如,給定的字母是

C語言試題---指標篇(三)

版本宣告:本文轉載於公眾號TeachPlus C語言面試題---指標篇(三) 了解了記憶體空間,接下來我們就一起看一下指標自身用法的一些題目,先來看這樣一道題目: 分析下面程式碼:` # include <stdio.h> # include

C語言試題---指標篇(一)

版本宣告:本文轉載於公眾號TeachPlus 指標的使用,一直是c語言面試題中必考的部分, 因為指標本身使用的複雜性與普適性,所以考點非常多,而且也可以與其他知識相互結合, 因此我們將會使用五篇專題的篇幅來介紹指標。分析下面的程式,指出程式中的錯誤:

C語言試題2

1 預處理 問題1:什麼是預編譯?何時需要預編譯? 答: 預編譯又稱預處理,是整個編譯過程最先做的工作,即程式執行前的一些預處理工作。主要處理#開頭的指令。如拷貝#include包含的檔案程式碼、替換#define定義的巨集、條件編譯#if等。. 何時需要預編譯: 1、總是使用不經常改動的

C語言試題---指標篇(二)

# include <stdio.h># include <stdlib.h># include <string.h>void getMemory( char **p , int num){ *p = malloc(num);} int main() {

100Java經典試題及答案解析

作用域public,private,protected,以及不寫時的區別 答:區別如下: 作用域 當前類 同一package 子孫類 其他package public √ √ √ √ protected √ √ √ × friendly √ √ ×

C語言試題大彙總 (影象處理方向)

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

100python真實試題(附答案)

最近收集整理了100道python真實面試筆試題,並自己做了一些,希望能幫助大家,順利早日找到工作,限於篇幅問題,本文附有30道面試題計算答案,另外70道題答案、面試簡歷、如何面試等如有興趣,請新增作者微信好友或者文章底部公眾號並備註(CSDN)免費獲取。 公眾號回覆:面試

C語言試題

關於“一年有多少秒”的巨集定義 網上關於這個問題的答案都是(365*24*60*60)UL,是錯誤的。 正解:數字和型別是一個整體,()是外人。 #include <stdio.h> #define SECONDS_PER_YEAR (3

12個有趣的C語言試題(中英文對照)

In this article, we will discuss some interesting problems on C language that can help students to brush up their C programming skills

C語言試題 4 (查詢整數陣列中第二大的數)

題目:寫一個函式找出一個整數陣列中,第二大的數。【Mirosoft】 PS:1、” 66,66,66,66,66 ”,則沒有第二大數。 2、” 99,99,88,86,68,66 ”,則最大數是88。 下面我先給出查詢最大數字的程式: int GetFirstMaxNumbe

c語言試題1

> 前處理器(Preprocessor) 1. 用預處理指令#define 宣告一個常數,用以表明1年中有多少秒(忽略閏年問題)     #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在這想看到幾件事情: 1).

2016 C語言試題——字串函式的實現

2016 C語言面試題——字串函式 前言:最近準備找工作了,所以需要做一些準備。先從基本的字串函式的實現開始。如果有發現什麼問題或有什麼疑惑,請及時評論。 strcat /************

C語言試題---指標篇(四)

解析:首先看最後一個問題, c  是第一個元素的地址, *c  是第一行元素的首地址,其實第一行元素的地址就是第一個元素的地址, **c  是提取第一個元素。為什麼 c  , *c  的值相等?c是陣列名,是一個二維指標,它的值就是陣列的首地址,也即第一行元素的首地址(等於 *c  ),也等於第一行第一個元素

經典C語言試題4:位元組對齊的作用

   一、什麼是位元組對齊?     在現代計算機中,記憶體空間都是按照字節(byte)劃分的。從理論上講對任何型別的變數的訪問可以從任何地址開始,但實際情況是,訪問特定型別的變數的時候經常在特定的記憶體地址訪問,這就需要各種型別的資料按照一定規則在空間上排列,而不是順序地一