2023年C語(yǔ)言筆試題C筆試題大全14附答案_第1頁(yè)
2023年C語(yǔ)言筆試題C筆試題大全14附答案_第2頁(yè)
2023年C語(yǔ)言筆試題C筆試題大全14附答案_第3頁(yè)
2023年C語(yǔ)言筆試題C筆試題大全14附答案_第4頁(yè)
2023年C語(yǔ)言筆試題C筆試題大全14附答案_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C語(yǔ)言常見筆試題總結(jié)

【1使用宏】

l.l#error口勺作用?

#error用于向編譯器報(bào)錯(cuò),并輸出它背面帶口勺錯(cuò)誤信息。例如:

#ifndefSOMETHING

#errorSOMETHINGnotdefined!

#endif

假如在這段代碼之前未定義過SOMETHING,則在編譯時(shí)出錯(cuò),并給出"SOMETHINGnot

defined!"的錯(cuò)誤信息。

1.2定義一種宏,求出給定數(shù)組中的元素U勺個(gè)數(shù)

#dcfincNELEMENTS(array)(sizcof(array)/sizcof((array)[0]))

(2數(shù)據(jù)申明和定義】

給定如下類型H勺變量a的定義式:

a)Aninteger

inta;

b)Apointertoaninteger

int*a;

c)Apointertoapointertoaninteger

int**a;

d)Anarrayof10integers

inta[10];

c)Anarrayof10pointerstointegers

int*a[10];

f)Apointer(oanarrayof10integers

int(*a)[101;

g)Apointertoa<I>function</I>thattakesanintegerasanargumentandreturnsaninteger

int(*a)(int);

h)Anarrayoftenpointersto<I>function</I>sthattakeanintegerargumentandreturnaninteger

int(*a[10])(int);

[3復(fù)雜類型(1)1

有如卜體現(xiàn)式:

char(*(*x())[])();

請(qǐng)用文字描述x是什么。

首先,確定標(biāo)識(shí)符:x

X是一種函數(shù),沒有參數(shù):x()

返回值是一種指針:*x()

這個(gè)指針指向一種數(shù)組:i*x())口

數(shù)組中的每個(gè)元素是指針:*(*x())口

指向i種不帶參數(shù)的函數(shù):(*(*x())口)()

函數(shù)的返回值是char:char(*(*x())[])()

這里,要懂得*、()和口的優(yōu)先級(jí)

[5頭文件]

問:為何原則頭文件均有類似如下口勺構(gòu)造?

#ifndef_INCvxWorksh

#deflne_INCvxWorksh

#ifdef_cplusplus

extern"C"{

#endif

/*...*/

#ifdef_cplusplus

#endif

#endif

在編譯源文件時(shí),C編譯器和C++編譯器都會(huì)對(duì)符號(hào)(函數(shù)或變量)名作某些修正,但兩者采

用的修正措施不一樣,因此兩者生成的目標(biāo)文件不能互相鏈接。在C++中使用extern"C"

可以讓C++符號(hào)獲得C鏈接特性。由于C++編譯器會(huì)自動(dòng)定義_cpkisphis宏,因此在C語(yǔ)

言頭文件中采用這種構(gòu)造可以保證無論使用何種編譯器,生成的目標(biāo)文件都具有C鏈接特

性,可以與原則C編譯器所生成II勺目標(biāo)文件相鏈接

[6static關(guān)鍵字】

請(qǐng)說出static關(guān)鍵字口勺3種用處:

(1)用于全局變量;外部靜態(tài)變量,只能在本源文件中被引用,不能被其他源文件所引用。

(2)用于局部變量;局部靜態(tài)變量,在函數(shù)返回后存儲(chǔ)單元不釋放;卜.一次調(diào)用該函數(shù)時(shí),

該變量為上次函數(shù)返回時(shí)的值。

(3)用于函數(shù)。內(nèi)部函數(shù),只能被本源文件中的函數(shù)所調(diào)用,不能被其他源文件調(diào)用。

/*file.c*/

staticinta;

intb:

staticintfn()

{

staticintx;

inty;

)

[7const關(guān)鍵字】

7.1const關(guān)鍵字口勺意義是什么?

7.2解釋如下的變量定義:

constintal;al是整型常量。

intconsta2;a2是整型常量。等同于constinta2。

constint*a3;a3是指針(a3是可變的),指向一種整型常量。等同于intconst*a3o

涂*811日&4:24是常量指針但4不可變),指向?種整型變量。

intconst*consta5;a5是常顯指針(a5不可變),指向一種整型常顯。等同Tconstint*const

a5o

[8volatile關(guān)鍵字】

8.1volatile意義?

volatilein(*p;

8.2volatile能和const一起使用嗎?

const關(guān)鍵字IJ勺意思是限制編程者自己不能修變化量的值;兩者并不矛盾。

例如一種內(nèi)存映射的、只讀II勺硬件寄存器,假設(shè)它口勺地址是p,則可以這樣申明:

volatileconstUINT32*p;

[9sizeof()]

有如下定義:

char*pmsg="A";

charmsg[]="A";

charch='A';

問:

sizeof(pmsg)=?4

sizeof(msg)=?2

sizeof("A")=?2

sizeof(ch)=?1

sizeof(*A*)=?(在C++中等于多少?)(在C語(yǔ)言中,字符常量的數(shù)據(jù)類型實(shí)際上是int;

在C++中,它的數(shù)據(jù)類型是char,從而原式等于1)

voidf(charparam[100])

{

//sizeof(param)=?4

1

[10字符串】

有如下代碼

char*pmsg="hello,world!";

strcpy(pmsg,"hi,there.");

試評(píng)論該代碼。

[II混合運(yùn)算】

有如下代碼:

voidfoo()

{

unsignedinta=6;

intb=-20;

(a+b>6)?puts(">6"):puts(H<=6");

請(qǐng)問調(diào)用foo()時(shí)輸出?

C語(yǔ)言筆試題(九)

I.

struct

{

signedintbitO:l;

signedintbi(l:1;

signedintbit2:1;

signedintbit3:l;

signedintbit4:1;

signedintbit5:l;

signedintbit6:1;

signedintbit7:l;

Jbils;

請(qǐng)問sizeoRbils)與否是對(duì)時(shí)內(nèi)體現(xiàn)式?

請(qǐng)問語(yǔ)句bitsmybits;II勺定義與否對(duì)的?

假如不對(duì)的,要怎樣修改上述的構(gòu)造定義才能使該語(yǔ)句對(duì)的?

修改后的構(gòu)造定義與否會(huì)影響sizeof(bits)l內(nèi)對(duì)的性?

假如對(duì)時(shí)則該體現(xiàn)式的值為多少?

假如將上述口勺構(gòu)造中int類型改為char類型,此時(shí)sizcof(bits)的大小為多少?

答案:

I)是對(duì)口勺日勺體現(xiàn)式,因?yàn)閟izeof背面日勺內(nèi)容可以是類型,也可以是變量。

2)該語(yǔ)句日勺定義不對(duì)的I,因?yàn)榇藭r(shí)的bits為一種變量;應(yīng)該這樣修改構(gòu)造的定義

typedefstruct

}bits;

修改后sizeof(bils)體現(xiàn)式依然對(duì)例其值為4;類型改為char后其值為1,注意該值是在VC

環(huán)境中的32位程序中得到H勺值,在不一樣H勺編譯器其值有可能不一樣,因此在編程時(shí)不能

自己假定類似構(gòu)造的大小,

3.

structbit

unsignedinta[0]:l,a[l]:l,a[2]:l....a[7]:l;

請(qǐng)問這種寫法與否對(duì)依J?為何?

答案:不對(duì)的,位域中的變量不能是數(shù)組。

4.

structa

(

intx;

chary;

structaz;

structa*p;

)

請(qǐng)問這種定義構(gòu)造對(duì)的否?假如有問題,問題在哪里?

答案:構(gòu)造中不能對(duì)定義構(gòu)造自身的非指針變量,假如編譯器支持則會(huì)導(dǎo)致無限嵌套,因此

?般編譯器都會(huì)認(rèn)為structa是未定義的類型,雖然提前申明也不會(huì)有任何用處。

5.什么是可重入函數(shù)?C語(yǔ)言中寫可重入函數(shù),應(yīng)注意的事項(xiàng)?

答案:

可重入函數(shù)是指可以被多種線程“同步”調(diào)用日勺函數(shù),并且能保證函數(shù)成果附對(duì)的性的函數(shù)。

在編寫可重入函數(shù)時(shí)一般要注意如下H勺某些問題:

盡量不要使用全局變量,靜態(tài)變量,假如使用了應(yīng)該注意對(duì)變量訪問時(shí)互斥。一般可以根據(jù)

詳細(xì)的狀況采用:信號(hào)錄機(jī)制,關(guān)調(diào)度機(jī)制,關(guān)中斷機(jī)制等方式來保證函數(shù)口勺可重入性。

不要調(diào)用不可重入口勺函數(shù),調(diào)用了不可重入的函數(shù)會(huì)使該函數(shù)也變?yōu)椴豢芍厝肴丈缀瘮?shù)。

注意對(duì)系統(tǒng)中的臨界資源,互斥資源日勺訪問方式,防止使函數(shù)成為不可重入口勺函數(shù)。

一般驅(qū)動(dòng)程序都是不可重入的函數(shù),因此在編寫驅(qū)動(dòng)程序時(shí)一定要注意重入的問題。

6.簡(jiǎn)述slackframeH勺含義。

答案:stackframe的中文譯名為:棧框架,表達(dá)函數(shù)在??臻g的調(diào)用層次,

7.printf(M%d%d\nw,++n,power(2,n));其中power(2,n)為實(shí)現(xiàn)一定功能及J函數(shù)如2An。

請(qǐng)問這種表達(dá)措施有什么潛在的問題?

答案:編譯器的不一樣,對(duì)++n和power(2,n)處理的J先后次序不一樣,形成二義性,導(dǎo)致

序的移植性差,因此最佳把++n寫在primf函數(shù)外面,以消除二義性。

8.prinif(s);請(qǐng)問這樣的語(yǔ)句有無問題?(s為一指向有效字符串的指針)

答案:沒有%的話,可以這樣體現(xiàn),假如有%在$中的話,故意想不到口勺輸出成果。

9.兩段代碼共存于一種文件,編譯時(shí)有選擇的編譯其中口勺一部分,請(qǐng)問怎樣實(shí)現(xiàn)?

答案:有兩種簡(jiǎn)樸的措施可以實(shí)現(xiàn):

在源碼中使用條件編譯語(yǔ)句,然后在程序文件中定義宏n勺形式來選擇需要H勺編譯代碼。

在源碼中使用條件編譯語(yǔ)句,然后在編譯命令中加入宏定義命令來實(shí)現(xiàn)選擇編譯。

io.數(shù)據(jù)構(gòu)造指針傳給函數(shù),函數(shù)能訪問數(shù)據(jù)單元,但不能修改實(shí)際日勺內(nèi)容,怎樣實(shí)現(xiàn)?

答案:定義為指向常量的指針,這樣指針?biāo)傅臄?shù)據(jù)構(gòu)造中的內(nèi)容就不會(huì)被變化。如:

const類型*p或類型const*p

II.在頭文件中定義靜態(tài)變晟,可能產(chǎn)生什么問題?

答案:在使用了該頭文件向每個(gè)C程序文件中都單獨(dú)存在一種該靜態(tài)變量,這樣導(dǎo)致空間口勺

揮霍并且很輕易引起錯(cuò)誤。因此提議不要在頭文件中定義任何變量。

12.malloc()與calloc(邢J區(qū)別?

答案:

1)參數(shù)上I內(nèi)區(qū)別

malloc(size_tsize);

calloc(size_tn,size_tsize);

malloc分派一塊size大小的內(nèi)存塊,而calloc分派一種resize大小的I內(nèi)存塊

2)返回內(nèi)存塊的狀態(tài)不一樣

malloc分派的內(nèi)存塊沒有被清零,而calloc分派的J內(nèi)存塊是清了零時(shí)。不過提議在使用內(nèi)存

時(shí),假如需要初始化,則最佳自己按照需要來進(jìn)行初試化,不要依賴函數(shù)的實(shí)現(xiàn)闡明。

13.寄存器變量可不可以訪問其地址?可否是全局變量?在什么場(chǎng)所使用寄存器變量?

答案:這些問題都與編譯器H勺實(shí)既有關(guān),提議不要申明全局變量為寄存器變量,雖然是局部

變量都最佳不要申明其為寄存器變量,目前H勺編譯器在優(yōu)化時(shí)都會(huì)較為合理的安排寄存器變

量的使用,而人為的安排有時(shí)會(huì)導(dǎo)致優(yōu)化的低效。

14."\n"'\n'的區(qū)別?

答案:前者是一種字符串并且以'/O'結(jié)束,而后者只是一種簡(jiǎn)樸的字符。

15.包括預(yù)定義頭文件<>和””的區(qū)別?

答案:<>只在指定的目錄里尋找被包括文件;””先在目前目錄下查找,再在指定目錄下查

找;一般V>方式用于系統(tǒng)的頭文件,而一般顧客的頭文件用“W、J方式。

16.struntS_A

|

inta[IO];

);

voidf()

(

inti;

structS_A*s_ptr;

for(i=0,i<10,i++)

s_ptr->a[i]=i;

)

請(qǐng)問這段代碼對(duì)口勺否?

答案:這段代碼不對(duì)的,沒有對(duì)s_ptr指針進(jìn)行初始化,在編程中要注意此類低級(jí)錯(cuò)誤H勺發(fā)

生。

C語(yǔ)言筆試題(八)

1.#pragmapack(8)

structsi

shorta;

longb;

);

structs2

{

charc;

sid;

longlonge;

I;

#praginapack()

問:

1.sizeof(s2)=?24

2.s2《Jsl中的a背面空了幾種字節(jié)接著是b?2

答:

sizeof(S2)成果為24.

組員對(duì)齊有一種重要的條件,即每個(gè)組員分別對(duì)齊.即每個(gè)組員按自己的方式對(duì)齊.

也就是說上面雖然指定了按8字節(jié)對(duì)齊,但并不是所有U勺組員都是以8字節(jié)對(duì)齊.其對(duì)齊

的規(guī)則是,每個(gè)組員按其類型的對(duì)齊參數(shù)(一般是這個(gè)類型的大小)和指定對(duì)齊參數(shù)(這里是8

字節(jié))中較小的一種對(duì)齊.并且構(gòu)造的長(zhǎng)度必須為所用過的所有對(duì)齊參數(shù)的整數(shù)倍,不夠就補(bǔ)

空字節(jié).

S1中,組員a是2字節(jié)默認(rèn)按2字節(jié)對(duì)齊,指定對(duì)齊參數(shù)為8,這兩個(gè)值中取2,a按2字節(jié)

對(duì)?齊;組員b是4個(gè)字節(jié),默認(rèn)是按4字節(jié)對(duì)齊,這時(shí)就按4字節(jié)對(duì)齊,因此sizeof(Sl)應(yīng)該為8;

S2中,c和S1中『、Ja一樣,按I字節(jié)對(duì)齊,而d是個(gè)構(gòu)造,它是8個(gè)字節(jié),它按什么對(duì)?齊呢?

對(duì)于構(gòu)造來說,它H勺默認(rèn)在齊方式就是它H勺所有組員使用的對(duì)齊參數(shù)中最大歐I一種,S1的就

是4.因此,組員d就是按4字節(jié)對(duì)齊.組員e是8個(gè)字節(jié),它是默認(rèn)按8字節(jié)對(duì)齊,和指定的一樣,

因此它對(duì)到8字節(jié)的邊界上,這時(shí),已經(jīng)使用了12個(gè)字節(jié)了,因此又添加了4個(gè)字節(jié)的空、從第

16個(gè)字節(jié)開始放置組員e.這時(shí),長(zhǎng)度為24,已經(jīng)可以被8(組員e按8字節(jié)對(duì)齊)整除.這樣、一共

使用了24個(gè)字節(jié).

ab

S1日勺內(nèi)存布局:

cSl.aSl.bd

S2的內(nèi)存布局:1***JI**J111,****11111111

這里有三點(diǎn)很重要:

1.每個(gè)組員分別按自己的方式對(duì)齊,并能最小化長(zhǎng)度

2.復(fù)雜類型(如構(gòu)造)的默認(rèn)對(duì)齊方式是它最長(zhǎng)的組員H勺對(duì)齊方式,這樣在組員是復(fù)雜類

型時(shí),可以最小化長(zhǎng)度

3.對(duì)齊后的長(zhǎng)度必須是組員中最大的對(duì)齊參數(shù)的整數(shù)倍,這樣在處理數(shù)組時(shí)可以保證每

一項(xiàng)都邊界對(duì)齊

有程序查一下各個(gè)變量的內(nèi)存地址得知:

各個(gè)變量在內(nèi)存中的位置為

c***aa**

bbbb****

dddddddd

測(cè)試代碼為:

s2ss;

cout?"ss.c="?&ss?endl;

cout?"ss.d.a="?&ss.d.a?endl;

cout?"ss.d.b="?&(ss.d.b)?endl:

cout?"ss.d="?&ss.e?endl;

printout各個(gè)變量日勺內(nèi)存地址不就可以看出來了嗎。

因此答案是24,2.

C語(yǔ)言筆試題(七)

1.找錯(cuò)

VoidtestI()

{

charstring[10];

char*strl="";

strcpy(string,strl);//string數(shù)組溢出

}

Voidtest2()

charstringl10],strl[10J;

for(i=0;i<10;i++)

(

strlfil='a';

I

strcpy(string,strl);〃str必須是字符串

}

Voidtest3(char*strl)

(

charstring!10];

if(strien(str1)<=10)//strlen不記錄'\0'字符

(

strcpy(string,strl);

)

}

2.找錯(cuò)

#defineMAX_SRM256

DSNget_SRM_no()

staticintSRM_no;

intI;

for(I=0;II<MAX_SRVI;I++,SRM_no++)

(

SRM_no%=MAX.SRM;

if(MY_SRM.state==IDLE)

(

break;

}

)

if(I>=MAX_SRM)

return(NULL_SRM);

else

returnSRM_no;

)

3.寫出程序運(yùn)行成果

intsum(inta)

{

autointc=0;

staticintb=3;

c+=l;

b+=2;

retum(a+b+C);

)

voidmain()

(

intI;

inta=2;

for(I=0;I<5;I++)

{

printf("%d,",sum(a));

)

)

答:8,10,12,14,16,

4.

intfunc(inta)

{

intb;

switch(a)

case1:b=30;

case2:b=20;

case3:b=16;

default:b=0;

}

returnb;

}

則func(l尸?〃0,因?yàn)闆]有break:

5:

inta[3];

a[OJ=O;a[l]=l;a[2]=2;

int*p,*q;

p=a;

q=&a⑵;

則a|q-p]=?2

6.

定義int**a[3][41,則變量占有的內(nèi)存空間為:_48_

7.

編寫一種函數(shù),規(guī)定輸入年月FI時(shí)分秒,輸出該年月日時(shí)分秒的下一秒。如輸入12月31

日23時(shí)59分59秒,則輸出1月1日0時(shí)。分0秒。

C語(yǔ)言筆試題(六)

4.static有什么用途?(請(qǐng)至少闡明兩種)

I.限制變量的作用域

2.設(shè)置變量的存儲(chǔ)域

7.引用與指針有什么區(qū)別?

1)引用必須被初始化,指針不必。

2)引用初始化后來不能被變化,指針可以變化所指的對(duì)象。

2)不存在指向空值的引注,不過存在指向空值的指針。

8.描述實(shí)時(shí)系統(tǒng)的基本特性

在特定時(shí)間內(nèi)完成特定的任務(wù),實(shí)時(shí)性與可靠性

9.全局變量和局部變量在內(nèi)存中與否有區(qū)別?假如有,是什么區(qū)別?

全局變量?jī)?chǔ)存在靜態(tài)數(shù)據(jù)庫(kù),局部變量在堆棧

10.什么是平衡二叉樹?

左右子樹都是平衡二叉樹且左右子樹的深度差值日勺絕對(duì)值不不小于1

II.堆棧溢出一般是由什么原因?qū)е碌模?/p>

沒有回收垃圾資源

12.什么函數(shù)不能申明為虛函數(shù)?

constructor

13.冒泡排序算法的時(shí)間復(fù)雜度是什么?

0(22)

14.寫出floatx與“零值”比較的if語(yǔ)句。

if(x>0.0(X)001&&x<-0.000(X)l)

16.Internet采用哪種網(wǎng)絡(luò)協(xié)議?該協(xié)議R勺重要層次構(gòu)造?

tcp/ip應(yīng)用層/傳播層/網(wǎng)絡(luò)層/數(shù)據(jù)鏈路層/物理層

17.Internet物理地址和IP地址轉(zhuǎn)換采用什么協(xié)議?

ARP(AddressResolutionProtocol)(地址解析)

18.IP地址的編碼分為哪倆部分?

IP地址由兩部分構(gòu)成,網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)。不過是要和“子網(wǎng)掩碼”按位與上之后才能辨別

哪些是網(wǎng)絡(luò)位哪些是主機(jī)位。

2.顧客輸入M,N值,從1至N開始次序循環(huán)數(shù)數(shù),每數(shù)到M輸出該數(shù)值,直至全部輸出。

寫出C程序。

循環(huán)鏈表,用取余操作做

3.不能做swiichO/、J參數(shù)類型是:

switch艮I參數(shù)不能為實(shí)型。

莘卷

1、局部變量能否和全局變量重名?

答:能,局部會(huì)屏蔽全局,要用全局變量,需要使用”::“

局部變量可以與全局變量同名,在函數(shù)內(nèi)引用這個(gè)變量時(shí),會(huì)用到同名口勺局部變最,而不會(huì)

用到全局變量。對(duì)于有些編譯器而言,在同一種函數(shù)內(nèi)可以定義多種同名口勺局部變量,例如

在兩個(gè)循環(huán)體內(nèi)都定義一種同名的局部變量,而那個(gè)局部變量的作用域就在那個(gè)循環(huán)體內(nèi)

2、怎樣引用一種已經(jīng)定義過的全局變量?

答:extern

可以用引用頭文件的方式,也可以用exlem關(guān)鍵字,假如用引用頭文件方式來引用某個(gè)在頭

文件中申明的全局變理,限定你將那個(gè)變寫錯(cuò)了,那么在編譯期間會(huì)報(bào)錯(cuò),假如你用exlem

方式引用時(shí),假定你犯了同樣的錯(cuò)誤,那么在編譯期間不會(huì)報(bào)錯(cuò),而在連接期間報(bào)錯(cuò)

3、全局變量可不可以定義在可被多種C文件包括的頭文件中?為何?

答:可以,在不一樣的C文件中以static形式來申明同名全局變量。

可以在不?樣的JC文件中申明同名的全局變量,前提是其中只能有?種C文件中對(duì)此變量

賦初值,此時(shí)連接不會(huì)出錯(cuò)

4、語(yǔ)句for(;1;)有什么問題?它是什么意思?

答:和while(l)相信U

5、do....while和while.....do有什么區(qū)別?

答:前一種循環(huán)一遍再判斷,后一種判斷后來再循環(huán)

6、請(qǐng)寫出下列代碼的輸出內(nèi)容

#include

main()

(

inta,b,c,d;

a=10;

b=a++;

c=++a;

d=10*a++;

printf("b,c,d:%d,%d,%d",b,c,d);

return0;

}

答:10,12,120

1、static全局變量與一般的全局變量有什么區(qū)別?static局部變量和一般局部變量有什么區(qū)

別?static函數(shù)與一般函數(shù)有什么區(qū)別?

全局變量(外部變量)的闡明之前再冠以static就構(gòu)成了靜態(tài)的全局變量。全局變量自身就是

靜態(tài)存儲(chǔ)方式,靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方式上并無不一樣。這

兩者的區(qū)別雖在于非靜態(tài)全局變量日勺作用域是整個(gè)源程序,當(dāng)一種源程序由多種源文件構(gòu)成

時(shí),非靜態(tài)口勺全局變量在各個(gè)源文件中都是有效H勺。而靜態(tài)全局變量則限制了其作用域.,

即只在定義該變量口勺源文件內(nèi)有效,在同一源程序的其他源文件中不能使用它。由「靜態(tài)全

局變量的作用域局限于一種源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以防止在其他

源文件中引起錯(cuò)誤。

從以上分析可以看出,把局部變量變化為靜態(tài)變量后是變化了它的存儲(chǔ)方式即變化了它的

生存期。把全局變量變化為靜態(tài)變量后是變化了它的作用域,限制了它的使用范圍。

static函數(shù)與一般函數(shù)作網(wǎng)域不一樣。僅在本文件。只在FI前源文件中使用的函數(shù)應(yīng)該闡明

為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在FI前源文件中闡明和定義。對(duì)于可在目前源文件以外使

用的函數(shù),應(yīng)該在一種頭文件中闡明,要使用這些函數(shù)II勺源文件要包括這個(gè)頭文件

static全局變量與一般的全局變量有什么區(qū)別:static全局變量只初使化一次,防止在其他文

件單元中被引用;

sialic局部變量和一般局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次根據(jù)上

一次成果值;

static函數(shù)與一般函數(shù)有什么區(qū)別:sialic函數(shù)在內(nèi)存中只有一份,一般函數(shù)在每個(gè)被調(diào)用中

維持一份拷貝

2、程序U勺局部變量存在于(堆棧)中,全局變量存在于(靜態(tài)區(qū))中,動(dòng)態(tài)申請(qǐng)數(shù)據(jù)存在

于(堆)中。

3、設(shè)有如下闡明和定義:

typcdcfunion{longi;intk[5];charc;}DATE;

structdata{intcat;DATEcow;doubledog;}too;

DATEmax;

貝ij語(yǔ)句printf("%d",sizeof(stiucldale)+sizeof(max));H勺執(zhí)行成果是:___52

答:DATE是一種union.變量公用空間.里面最大的變量類型是inl[5],占用20個(gè)字節(jié).因

此它的大小是20

data是一種struct,每個(gè)變量分開占用空間.依次為int4+DATE20+double8=32.

因此成果是20+32=52.

當(dāng)然…在某些16位編輯器下,int可能是2字節(jié),那么成果是int2+DATE10+double8=20

4、隊(duì)列和棧有什么區(qū)別?

隊(duì)列先進(jìn)先出,棧后進(jìn)先出

5、寫出下列代碼的輸出內(nèi)容

#include<stdio.h>

intinc(inta)

(

retum(++a);

)

intmulti(int*a,int*b,int*c)

|

rcturn(*c=*a**b);

)

typedefint(FUNCl)(intin);

typedefint(FUNC2)(int*,int*,int*);

voidshow(FUNC2fun,intargI,int*arg2)

(

FUNCIp=&inc;

inttemp=p(arg1);

fun(&temp,&argl,arg2);

printf("%dn,',*arg2);

)

niain()

inta;〃局部變量a為0;

show(multi,10,&a);

return0;

}

答:110

7、請(qǐng)找出下面代碼中的因此錯(cuò)誤

闡明:如下代碼是把一種字符串倒序,如“abed”倒序后變?yōu)椤癲eba”

1、#include"string.h"

2、main()

3、{

4、char*src="hello,world";

5、char*dest=NULL;

6、intlen=strlen(src);

7、dest=(char*)manoc(len);

8、char*d=dest;

9、char*s=src[len];

10、while(len-!=0)

11、d++=s—;

12、printf("%s",dest);

13、return0;

14、}

答:

措施1:

inimain()

(

char*sre="hello,world'1;

intlen=strlen(src);

char*dest=(char*)maHoc(len+l);〃要為分派一種空間

char*d=dcst;

char*s=&src[len-l];〃指向最終一種字符

while(len—!=0)

*d++=*s—;

=0;〃尾部要加

printf("%s\n'\dest);

free(dest);//使用完,應(yīng)當(dāng)釋放空間,以免導(dǎo)致內(nèi)存匯泄露

return0;

I

措施2:

#includc

#includc

main()

(

charstr[l="hello,world";

intIen=strlen(str);

chart;

for(inti=O;i<len/2;i++)

|

t=str[i];

str[i]=str[len-i-l];

str[lcn-i-l]=t;

)

printf("%s",str);

return0;

)

1.-1,2,7,28,,126請(qǐng)問28和126中間那個(gè)數(shù)是什么?為何?

第一題口勺答案應(yīng)該是4人3-1=63

規(guī)律是23-1(當(dāng)n為偶數(shù)偶2,4)

M3+l(當(dāng)n為奇數(shù)1,3,5)

答案:63

2.用兩個(gè)棧實(shí)現(xiàn)一種隊(duì)列的功能?規(guī)定給出算法和思緒!

設(shè)2個(gè)棧為A,B,一開始均為空.

入隊(duì):

將新元素push入棧A;

出隊(duì):

(1)判斷棧B與否為空;

⑵假如不為空,則將棧A中所有元素依次pop出并push到棧B;

⑶將棧B的棧頂元素pop出;

這樣實(shí)現(xiàn)的隊(duì)列入隊(duì)和出隊(duì)的平攤復(fù)雜度都還是0(1),比上面的幾種措施要好。

3.在c語(yǔ)言庫(kù)函數(shù)中將一種字符轉(zhuǎn)換成整型口勺函數(shù)是alol()嗎,這個(gè)函數(shù)的原型是什么?

函數(shù)名:atol

功能:把字符串轉(zhuǎn)換成長(zhǎng)整型數(shù)

/I]*去:longatol(constchar*nptr);

程序例:

longintmy_atol(char*str)

(

char*p=str;

longintrcsult=O;

intflag=l;

whilc(*p)

if(*p=='J)

{

flag=O;

p++;

)

if(*p>=O&&*p<=9)

{

rcsult=rcsult*10+*p-'O';

)

P++;

if(*p<O||*p>'9')

break;

)

if(flag==l)

returnresult;

else

return-result;

2.對(duì)于一種頻繁使用口勺短小函數(shù),在C語(yǔ)言中應(yīng)用什么實(shí)現(xiàn),在C++中應(yīng)用什么實(shí)現(xiàn)?

c用宏定義,C++用inline

3.直接鏈接兩個(gè)信令點(diǎn)口勺一組鏈路稱作什么?

PPP點(diǎn)到點(diǎn)連接

6.軟件測(cè)試均有那些種類?

黑盒:針對(duì)系統(tǒng)功能的測(cè)試白盒:測(cè)試函數(shù)功能,各函數(shù)接口

7.確定模塊的功能和模塊的接口是在軟件設(shè)計(jì)的那個(gè)隊(duì)段完成U勺?

概要設(shè)計(jì)階段

9.unsignedchar*pl;

unsignedlong*p2;

pl=(unsigncdchar*)0x801(X)();

p2=(unsignedlong*)0x810000;

請(qǐng)問pl+5=0x801005;

p2+5=0x801014;

三.選擇題:

1.Ethtcrnct鏈接到Internet用到如卜那個(gè)協(xié)議?

A.HDLC;B.ARP;C.UDP;DTCP;E.ID

2.屬于網(wǎng)絡(luò)層協(xié)議的是:

A.TCP;B.IP;C.ICMP;D.X.25

3.Windows消息調(diào)度機(jī)制是:

A.指令隊(duì)列;B.指令堆棧;C.消息隊(duì)列;D.消息堆棧;

4.unsignedshorthash(unsignedshortkey)

(

return(key?)%256

}

請(qǐng)問hash(l6),hash(256)時(shí)值分別是:

A.1.16;B.8.32;C.4.16;D.1.32

四.找錯(cuò)題:

1.請(qǐng)問下面程序有什么錯(cuò)誤?

inta[60][250][1000],ij,k;

for(k=0;k<=1000;k++)

for(j=0;j<250;j++)

for(i=0;i<60;i++)

a[i]|j][k]=0;

把循環(huán)語(yǔ)句內(nèi)外換一下

3.如下是求一種數(shù)的I平方向程序,請(qǐng)找出錯(cuò)誤:

#dcfineSQUARE(a)((a)*(a))

inta=5;

intb;

b=SQUARE(a++);

4.typcdcfunsignedcharBYTE

intexaniply_fun(BYTEgtjen;BYTE*gt_code)

(

BYTE*gt_buf;

gt_buf=(BYTE*)MALLOC(Max_GT_Length);

if(gt_len>Max_GT_Length)

|

returnGT_Lcngth_ERROR;

)

思科

1.用宏定義寫出swap(x,y)

#defineswap(x,y)\

x=x+y;\

y=x-y;\

x=x-y;

2.數(shù)組a[N],寄存了1至N-l個(gè)數(shù),其中某個(gè)數(shù)反復(fù)一次。寫一種函數(shù),找出被反復(fù)的數(shù)字.

時(shí)間復(fù)雜度必須為。(N)函數(shù)原型:

intdo_dup(inta[],intN)

3一語(yǔ)句實(shí)現(xiàn)x與否為2時(shí)若干次哥口勺判斷

inti=512;

cout?boolalpha?((i&(i-1))?false:true)?endl;

慧通:

什么是預(yù)編譯

何時(shí)需要預(yù)編譯:

char*constp;

charconst*p

constchar*p

上述三個(gè)有什么區(qū)別?

char*constp;〃常量指針,p日勺值不可以修改

charconst*p;〃指向常旱指針,指向時(shí)常量值不可以改

constchar*p;〃和charconst*p

charstrl[]="abc";

charstr2(J="abc";

constcharstr3n="abc";

constcharstr4[]="abc";

constchar*str5="abc";

constchar*str6="abcH;

char*str7="abc";

char*str8="abc";

cout?(strI==str2)?endl;

cout?(str3==slr4)?endl;

coul?(str5==slr6)?endl;

cout?(str7==str8)?endl;

成果是:0011

解答:strl,str2,str3,str4是數(shù)組變量,它們有各自的內(nèi)存空間;

而s【r5,str6,sir7.str8是指針,它們指向相似的常量區(qū)域。

一種32位的機(jī)器,該機(jī)器的指針是多少位

指針是多少位只要看地址總線曰勺位數(shù)就行了。80386后來的機(jī)子都是32的數(shù)據(jù)總線。因此

指針的位數(shù)就是4個(gè)字節(jié)了。

main()

(

inta[5]={1,2,3,4,51;

int*ptr=(int*)(&a+l);

printf(,,%d,%d",*(a+l),*(ptr-l));

輸出:2,5

*(a+l)就是a[l],*(ptr-l僦是a[4],執(zhí)行成果是2,5

&a+l不是首地址+1,系統(tǒng)會(huì)認(rèn)為加一種a數(shù)組H勺偏移,是偏移了一種數(shù)組的大小(本例是

5個(gè)ini)

int*ptr=(int*)(&a+l);

則ptr實(shí)際是&(a[5]),也就是a+5

原因如下:

&a是數(shù)組指針,其類型為int(*)[5];

而指針加1要根據(jù)指針類型加上一定日勺值,

不一樣類型的指針+1之后增加日勺大小不一樣

a是長(zhǎng)度為5的int數(shù)組指針,因此要加5*sizeof(int)

因此ptr實(shí)際是a[5]

不過prt與(&a+l)類型是不一樣啊(這點(diǎn)很重要)

因此prt-1只會(huì)減去sizeof(int*)

a,&a的地址是一樣H勺,但意思不一樣,a是數(shù)組首地址,也就是a[0]的地址,&a是對(duì)象(數(shù)

組)首地址,a+1是數(shù)組下一元素的地址,即a[l],&a+l是下一種對(duì)象的地址,即a[5].

1.請(qǐng)問如下代碼有什么問題:

intinain()

chara;

har*str=&a;

strcpy(str,"hello");

printf(str);

retum0;

沒有為str分派內(nèi)存空間,將會(huì)發(fā)生異常,問題出在將一種字符串復(fù)制進(jìn)一種字符變量指針?biāo)?/p>

指地址。雖然可以對(duì)I內(nèi)輸出成果,但因?yàn)樵浇邕M(jìn)行內(nèi)在讀寫而導(dǎo)致程序瓦解。

char*s="AAA";

printf("%s",s);

s[0]='B';

printf("%s",s);

有什么錯(cuò)?

“AAA”是字符串常量。s是指針,指向這個(gè)字符串常量,因此申明s的時(shí)候就有問題。

cosntc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論