1. 程式人生 > >C語言經典筆試題(一)

C語言經典筆試題(一)

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 )

(2)請寫出float x 與“零值”比較的if 語句:
【標準答案】 const float EPSINON = 0.00000001;
float的精確到小數位後8,其中符號位佔一位,指數位佔8位,小數位佔23位,共32位,2^23=8388608
if ((x >= - EPSINON) && (x <= EPSINON)
不可將浮點變數用“==” 或“!=” 與數字比較,應該設法
轉化成“>=” 或“<=” 此類形式。

(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
union資料型別的大小計算方法是: 聯合體中佔用記憶體空間最大的欄位加上填充位元組後的和是聯合體中佔用記憶體空間最大的欄位的整數倍。(max+n) / x 的結果是一個整數,result = max+n。
max 是union中佔用記憶體空間最大的欄位佔用的記憶體大小,大於等於1的整數。
n 是填充位元組,非負整數。
x 是union中佔用記憶體空間最大的一個基本資料型別佔用的記憶體空間大小,大於等於1的整數。
result 是union資料型別實際上在記憶體中佔用的記憶體大小,大於等於1。
舉例:
union a
{
char a;
int b;
char c[10];
};
這個聯合體佔用12個位元組的記憶體空間。根據上面的計算公式計算是:(10+2)/4。

data 是一個struct, 每個變數分開佔用空間. 依次為int4 + DATE20 + double8 = 32.
偏移量要是該變數所佔位元組的整數倍,否則要補足到整數倍。
如:
struct struct_data{
int a ;//int本身佔用4個位元組,偏移量為0
char b ;//char本身佔用1個位元組,偏移量為4
int c ;//1.暫時偏移量為5,編譯器會判斷出5不是4的整數倍,會在b的後面填充3個位元組,最後c的偏移量為8,使得c的偏移量為c本身大小的整數倍;2.現在整個結構體大小暫時為12,編譯器會判斷12是不是其最大成員的整數倍,會在c末尾填充為整數倍,最後得出結果為12
};
所以結果是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);
有什麼錯?
【標準答案】char* s=”AAA”; //s是一般的指標,但是存放的是字串常量首地址printf(“%s”,s); s[0]=’B’;//編譯正確,執行出錯,因為s[0]=’B’試圖修改字串常量,字串常量不能修改,一般情況下給字串常量賦值推薦做法是:const char* s=”AAA”;這樣當編譯器發現修改字串常量內容時,就會直接報錯。

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;
} 會出現什麼問題?
【標準答案】程式崩潰,指標str與形參指標p不是同一個地址,所以,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)();

相關推薦

C語言經典試題

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

No.23 經典試題:用巨集來計算偏移量,判斷大小端聯合體法,指標法

寫一個巨集,計算結構體中某變數相對於首地址的偏移,並給出說明 判斷大小端 程式碼1: //寫一個巨集,計算結構體中某變數相對於首地址的偏移,並給出說明 //定義的這個巨集將結構體裡邊的變數的地址取出後再強轉成char型,然後進行相減。 //注意:&s ==

C語言基礎面試題

1.寫出判斷ABCD四個表示式的是否正確, 若正確, 寫出經過表示式中 a的值 int a = 4; (A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++); a = ?答:C錯誤,左側不是一個有效變

C語言代碼訓練

color tro 題型 blank adding bsp 喜歡 add 方便 今天我們先來講解一道C語言的經典例題,也是從零開始系列中的一道課後練習題。 請用控制臺程序繪制如下圖案。 循環經典例題 分析情況 這個題目是要求打印30行"*",每行打印的個數不同。通過這

C語言基礎複習筆記指標

最近linux很火,年前對linux再詳細瞭解了個大概,結合在windows平臺活躍與強大無比的C++,最終得出一個結論:C語言依然強大。 過年回來,便對的C語言充滿了興趣,於是乎去網上下載了教程回來,細細研讀,基礎程式設計思想始終是很重要的。 首先,入手的便是C語言的核心精華部分,指標。要

Java試題

1.關於抽象類與最終類,下列說法錯誤的是?  A. 抽象類能被繼承,最終類只能被例項化  B. 抽象類和最終類都可以被宣告使用  C. 抽象類中可以沒有抽象方法,最終類中可以沒有最終方法  D. 抽象類和最終類被繼承時,方法可以被子類覆蓋   答案:

某找房網 試題

一、題目描述:  給你一個合法的算術表示式,只包含整數和加號,減號。但整數不一定都是十進位制的數,可能是八進位制,十六進位制,規定包含字首0x的是十六進位制,包含字首0的是八進位制,其他情況是十進位制。現在你能計算出這個式子的最終的值嗎? 說明:輸入的表示式式子只會是整數

No.25 經典試題:模擬實現strcpy,strcat,strcmp,strstr,memcpy

直接上程式碼: 1. //模擬實現strcpy #include <stdio.h> #include <assert.h> char* my_strcpy(char* dest, const char* src) { char* ret = dest ;

軟體測試工程師試題

軟體測試筆試題(答案) 判斷題1.軟體測試的目的是儘可能多的找出軟體的缺陷。(Y) 2.Beta 測試是驗收測試的一種。(Y) 3.驗收測試是由終端使用者來實施的。(N) 4.專案立項前測試人員不需要提交任何工件。(Y) 5.單元測試能發現約80%

c語言指標進階

指標也是一種資料型別 指標是一個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的一個地址。要搞清一個指標需要搞清指標的四方面的內容:指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。 1)指標是一種變數,佔有記憶體空間,用來儲存記憶體地址

木子網羅java試題

1.問:Java提供哪幾種運算子? 答:算術運算子、關係運算符、位運算子、邏輯運算子、賦值運算子、其他運算子。 答案相關連結 2.問:從下列選項選出java.lang包中的方法,用來比較兩個物件是否相等,相等返回true。 A.toString() B.equals() C.compare

C語言面向物件程式設計:封裝與繼承

最近在用 C 做專案,之前用慣了 C++ ,轉回頭來用C 還真有點不適應。 C++ 語言中自帶面向物件支援,如封裝、繼承、多型等面向物件的基本特徵。 C 原本是面向過程的語言,自身沒有內建這些特性,但我們還是可以利用 C 語言本身已有的特性來實現面向物件的一些基本特徵。接下來

程式設計菜鳥到大佬之路:C語言程式特別篇

程式設計習題 迴圈例題選講 例1.乘方計算 給出一個整數a和一個正整數n,求乘方ana^nan。 輸入:一行,包含兩個整數a和n。 -1000000 <= a <= 1000000,1 <= n <= 10000。 輸出:一個整數,

js經典試題

題目: function Foo(){ getName = function (){ alert(1); } return this; } Foo.getName = function(){ alert(2); }

C語言入門之旅

特殊的迴圈語句 ,讓for迴圈開始的方法: 將sum初始化為0;或者先在迴圈體外讀第一個數 注意要先判斷再運算,避免最後一個數據發生錯誤 for(sum=0;n!=-1;) { sum+=n; scanf(“%d”, n); } 輸入x,y之間的閏年 i

木子網羅資料庫試題

1.問:刪除表資料,同時保留表結構,()方法比()方法效率高 A.delete B.drop table C.truncate table D.delete all 答:C,A 解析: truncate table 命令將快速刪除資料表中的所有記錄,但保留

網易遊戲2016校園招聘試題

網易線上遊戲是網易公司的一個重要組成部分,在開發實力、產品線和市場佔有率上均是國產網遊的領軍者。正在運營的廣受中國玩家歡迎的遊戲包括《新大話西遊2》、《夢幻西遊2》、《天下3》等等。 小Z一直是網易的粉絲,從網易97年6月成立開始他就一直關注著它的發展,並且玩過幾乎所有的網易遊戲。同時他也是一名數學愛好者,

C語言編程練習

ota fin void 語言 enc main.c pre rotate mail 問題描述:.給出一個英語句子,希望你把句子裏的單詞順序都翻轉過來    輸入樣例:I love you   輸出樣例:you love I 1 /****************

美團試題-[程式設計題] 拼湊錢幣

[程式設計題] 拼湊錢幣 給你六種面額 1、5、10、20、50、100 元的紙幣,假設每種幣值的數量都足夠多,編寫程式求組成N元(N為0~10000的非負整數)的不同組合的個數。 輸入描述: 輸入包括一個整數n(1 ≤ n ≤ 10000) 輸出描述:

Windows下C語言開發環境配置:MinGW的簡介和安裝

Windows下C語言開發環境配置(一):MinGW的安裝和eclipse的配置 1.什麼是MinGW? MinGW即Minimalist GNU for Windows,是一個簡單Windows本地應用的開發環境。MinGW包含有一組GNU編譯器的集合(包