版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年山東省菏澤市高二下學(xué)期期中考試歷史試題(A)(解析版)
- 2024-2025學(xué)年江蘇省鹽城市高二下學(xué)期期終考試歷史試題(解析版)
- 2026年生物與醫(yī)學(xué)前沿科技知識(shí)競(jìng)賽題集
- 2026年計(jì)算機(jī)應(yīng)用基礎(chǔ)初級(jí)水平測(cè)試題
- 2026年心理學(xué)入門認(rèn)知心理學(xué)與社會(huì)心理學(xué)試題庫(kù)
- 2026年城市規(guī)劃領(lǐng)域?qū)I(yè)技術(shù)人員考試練習(xí)題集
- 2026年文化常識(shí)與歷史知識(shí)綜合測(cè)試題
- 2026年高考化學(xué)模擬試題及答案解析
- 2026年寫作技巧基礎(chǔ)訓(xùn)練初級(jí)自測(cè)模擬題
- 2026年房地產(chǎn)銷售經(jīng)理人才選拔模擬測(cè)試
- 頸內(nèi)靜脈血栓的護(hù)理
- 操作工技能等級(jí)評(píng)級(jí)方案
- 國(guó)家職業(yè)技術(shù)技能標(biāo)準(zhǔn) 5-05-02-01 農(nóng)作物植保員 人社廳發(fā)202021號(hào)
- 購(gòu)房委托書范文
- 素描第2版(藝術(shù)設(shè)計(jì)相關(guān)專業(yè))全套教學(xué)課件
- 新生兒先天性腎上腺皮質(zhì)增生癥
- 中國(guó)傳統(tǒng)木雕工藝美術(shù)的繼承與發(fā)展-以平遙木雕神像傳統(tǒng)技藝為例
- (完整版)四宮格數(shù)獨(dú)題目204道(可直接打印)及空表(一年級(jí)數(shù)獨(dú)題練習(xí))
- DB32/T+4539-2023+淡水生物環(huán)境DNA監(jiān)測(cè)技術(shù)方法
- 火電廠鍋爐運(yùn)行與維護(hù)
- CTM系列產(chǎn)品使用手冊(cè)
評(píng)論
0/150
提交評(píng)論