版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++常見(jiàn)筆試題及答案
資料僅供參考
C++面試題
1#include“filename.h”和#include
<filename.h>的區(qū)另U?
答:對(duì)于#include〈filename.h>編譯器從標(biāo)準(zhǔn)庫(kù)
開(kāi)始搜索filename.h
對(duì)于#include"filename.h”編譯器從用戶工作
路徑開(kāi)始搜索filename.h
2頭文件的作用是什么?
答:一、經(jīng)過(guò)頭文件來(lái)調(diào)用庫(kù)功能。在很多場(chǎng)合,
源代碼不便(或不準(zhǔn))向用戶公布,只要向用戶
提供頭文件和二進(jìn)制的庫(kù)即可。用戶只需要按照
頭文件中的接口聲明來(lái)調(diào)用庫(kù)功能,而不必關(guān)心
接口怎么實(shí)現(xiàn)的。編譯器會(huì)從庫(kù)中提取相應(yīng)的代
碼。
二、頭文件能加強(qiáng)類型安全檢查。如果某個(gè)接口
被實(shí)現(xiàn)或被使用時(shí),其方式與頭文件中的聲明不
一致,編譯器就會(huì)指出錯(cuò)誤,這一簡(jiǎn)單的規(guī)則,
能大大減輕程序員調(diào)試、改錯(cuò)的負(fù)擔(dān)。
資料僅供參考
3C++函數(shù)中值的傳遞方式有哪幾種?
答:C++函數(shù)的三種傳遞方式為:值傳遞、指針
傳遞和引用傳遞。
4內(nèi)存的分配方式有幾種?
答:一、從靜態(tài)存儲(chǔ)區(qū)域分配。內(nèi)存在程序編譯
的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)
行期間都存在。例如全局變量。
二、在棧上創(chuàng)立。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變
量的存儲(chǔ)單元都能夠在棧上創(chuàng)立,函數(shù)執(zhí)行結(jié)束
時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)
置于處理器的指令集中,效率很高,可是分配的
內(nèi)存容量有限。
三、從堆上分配,亦稱動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)
行的時(shí)候用malloc或new申請(qǐng)任意多少的內(nèi)存,
程序員自己負(fù)責(zé)在何時(shí)用free或delete釋放內(nèi)
存。動(dòng)態(tài)內(nèi)存的生存期由我們決定,使用非常靈
活,但問(wèn)題也最多。
資料僅供參考
5實(shí)現(xiàn)雙向鏈表刪除一個(gè)節(jié)點(diǎn)P,在節(jié)點(diǎn)P后插
入一個(gè)節(jié)點(diǎn),寫(xiě)出這兩個(gè)函數(shù);
答:雙向鏈表刪除一個(gè)節(jié)點(diǎn)P
template<classtype>voidlist<type>::delnode(int
P)
(
intk=l;
listnode<type>*ptr,*t;
ptr=first;
while(ptr->next!=NULL&&k!=p)
(
ptr=ptr->next;
k++;
t=ptr->next;
cout?"你已經(jīng)將數(shù)據(jù)項(xiàng)"?t->data?"刪
資料僅供參考
除,,<<endl;
ptr->next=ptr->next->next;
length-;
deletet;
}
在節(jié)點(diǎn)P后插入一個(gè)節(jié)點(diǎn):
template<classtype>bool
list<type>::insert(typetjntp)
(
listnode<type>*ptr;
ptr=first;
intk=l;
while(ptr!=NULL&&k<p)
(
ptr=ptr->next;
k++;
資料僅供參考
if(ptr==NULL&&k!=p)
returnfalse;
else
(
listnode<type>*tp;
tp=newlistnode<type>;
tp->data=t;
tp->next=ptr->next;
ptr->next=tp;
length++;
returntrue;
6寫(xiě)一個(gè)函數(shù),將其中的\t都轉(zhuǎn)換成4個(gè)空格。
boolchange(char*buf,intlen)
資料僅供參考
intcount=0;
inti;
//統(tǒng)計(jì)有多少個(gè)‘\t'
for(i=0;buf[i]!='\0';i++){
if(buf[i]=='\t')
count++;
)
//給定的buf空間是否能裝下生成的字符串
intj=i+3*count;
if(len<j+1)
returnfalse;
//從后向前逐個(gè)替換
while(count>0)
資料僅供參考
while(buf[i]!='\t')
buf[j-]=buf[i-];
count-;
buf[j]=buf[j-1]=buf[j-2]=buf[j-3]=";
j-=4;
returntrue;
)
intmain()
(
charbuf[100]
"123\t45\t\t\t6\t\t65\n4234\t5345";
cout?"Beforechage:"?endl;
資料僅供參考
cout?buf?endl;
cout?"Aftercallingthefunction:"?endl;
//buf是原字符串,100是buf的長(zhǎng)度(要足
夠大,最好是原字符串的3倍)
if(change(buf,100)==true)
cout?buf?endl;
charc;
cin?c;
}
7Windows程序的入口是哪里?寫(xiě)出Windows
消息機(jī)制的流程.
函數(shù)WinMain()
Windows應(yīng)用程序的消息處理機(jī)制如圖1.2所示。
(1)操作系統(tǒng)接收到應(yīng)用程序的窗口消息,將
資料僅供參考
消息投遞到該應(yīng)用程序的消息隊(duì)列中。
(2)應(yīng)用程序在消息循環(huán)中調(diào)用GetMessage
函數(shù)從消息隊(duì)列中取出一條一條的消息。取出消
息后,應(yīng)用程序能夠?qū)ο⑦M(jìn)行一些預(yù)處理,例
如,放棄對(duì)某些消息的響應(yīng),或者調(diào)用
TranslateMessage產(chǎn)生新的消息。
(3)應(yīng)用程序調(diào)用DispatchMessage,將消息回
傳給操作系統(tǒng)。消息是由MSG結(jié)構(gòu)體對(duì)象來(lái)表
示的,其中就包含了接收消息的窗口的句柄。因
此,DispatchMessage函數(shù)總能進(jìn)行正確的傳遞。
(4)系統(tǒng)利用WNDCLASS結(jié)構(gòu)體的IpfnWndProc
成員保存的窗口過(guò)程函數(shù)的指針調(diào)用窗口過(guò)程,
對(duì)消息進(jìn)行處理(即“系統(tǒng)給應(yīng)用程序發(fā)送了消
息”)。
8如何定義和實(shí)現(xiàn)一個(gè)類的成員函數(shù)為回調(diào)函
數(shù)?
把函數(shù)聲明為static
資料僅供參考
9C++里面是不是所有的動(dòng)作都是main()引起的?
如果不是,請(qǐng)舉例.
答:在運(yùn)行C++程序時(shí),一般從main。函數(shù)開(kāi)始
執(zhí)行。因此如果沒(méi)有main(),程序?qū)⒉煌暾?,?/p>
譯器將指出未定義main()函數(shù)。
例外情況:如,在windows編程中,能夠編寫(xiě)
一個(gè)動(dòng)態(tài)連接庫(kù)(州)模塊,這是其它windows
程序能夠使用的代碼。由于DLL模塊不是獨(dú)立的
程序,因此不需要main。.用于專用環(huán)境的程序-
如機(jī)器人中的控制器芯片-可能不需要main().
但常規(guī)的獨(dú)立程序都需要main().
10C++里面如何聲明constvoidf(void)函數(shù)為C
程序中的庫(kù)函數(shù)?
extern"C"voidf(void);
11下列哪兩個(gè)是等同的C==D
intb;
Aconstint*a=&b;
資料僅供參考
Bconst*inta=&b;
Cconstint*consta=&b;
Dintconst*consta=&b;
12內(nèi)聯(lián)函數(shù)在編譯時(shí)是否做參數(shù)類型檢查
是
13三個(gè)float:a,b,c問(wèn)值
(a+b)+c==(b+a)+c1
(a+b)+c==(a+c)+b1
14把一個(gè)鏈表反向填空
voidreverse(test*head)
{test*pe=head;
test*ps=head->next;
while(ps)
{pe->next=ps->next;
資料僅供參考
ps->next=head;
head=ps;
ps=pe->next;}}
16某個(gè)程序在一個(gè)嵌入式系統(tǒng)(200M的
CPU,50M的SDRAM)中已經(jīng)最化了,換到另一個(gè)
系統(tǒng)(300M的CPU,501Vl的SDRAM)中運(yùn)行,還需
要優(yōu)化嗎?
要。程序在每時(shí)每刻都要優(yōu)化,只要能找到能夠
優(yōu)化的方法。
優(yōu)化有多種目的,在200M的CPU中可能需要以
速度為重點(diǎn)優(yōu)化,在300M的CPU中可能要以代
碼長(zhǎng)度為目的優(yōu)化。
17.下面哪種排序法對(duì)12354最快C
aquicksort//快速排序
b.bublesort//冒泡排序
c.mergesort〃歸并排序
資料僅供參考
18.哪種結(jié)構(gòu),平均來(lái)講,獲取一個(gè)值最快B
a.binarytree//二叉樹(shù)
b.hashtable〃散列表哈希表
c.stack//棧
19請(qǐng)問(wèn)C++的類和C里面的struct有什么區(qū)另(I?
答:C++的類的成員默認(rèn)情況下是私有的,C的
struct的成員默認(rèn)情況下是公共的.
20請(qǐng)講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?
答:析構(gòu)函數(shù)的名字和類名相同,沒(méi)有返回值,
沒(méi)有參數(shù),不能隨意調(diào)用也沒(méi)有重載。只是在類
對(duì)象生命期結(jié)束時(shí)由系統(tǒng)自動(dòng)調(diào)用。
虛函數(shù)用在繼承中,當(dāng)在派生類中需要重新定義
基類的函數(shù)時(shí)需要在基類中將該函數(shù)聲明為虛
函數(shù),作用為使程序支持動(dòng)態(tài)聯(lián)編。
資料僅供參考
21全局變量和局部變量有什么區(qū)別?是怎么實(shí)
現(xiàn)的?操作系統(tǒng)和編譯器是怎么知道的?
答:一些變量整個(gè)程序中都是可見(jiàn)的,它們稱為
全局變量,一些變量在函數(shù)內(nèi)部定義且只在函數(shù)
中可知,則稱為局部變量。
全局變量由編譯器建立且存放在內(nèi)存的全局?jǐn)?shù)
據(jù)區(qū),局部變量存放在棧區(qū).
22一些寄存器的題目,主要是尋址和內(nèi)存管理
等一些知識(shí)。
1、立即尋址
2、寄存器尋址
3、直接尋址
4、寄存器間接尋址
5、基址加變址尋址
資料僅供參考
6、寄存器相對(duì)尋址
7、相對(duì)基址加變址尋址
238086是多少位的系統(tǒng)?在數(shù)據(jù)總線上是怎么
實(shí)現(xiàn)的?
8086有16根數(shù)據(jù)線和20根地址線,因?yàn)榭捎?/p>
20位地址.8086是16位處理器.
24多態(tài)。overload和override的區(qū)別。
答:多態(tài):接口的多種不同的實(shí)現(xiàn)方式即為多態(tài)
重載在相同范圍(同一個(gè)類中),函數(shù)名字相同,
參數(shù)不同,virtual關(guān)鍵字可有可無(wú)。
覆蓋是指派生類函數(shù)覆蓋基類函數(shù),不同的范圍,
函數(shù)名字相同,參數(shù)相同,基類函數(shù)必須有
virtual關(guān)鍵字。
?Sony筆試題>>
25.完成下列程序
*
資料僅供參考
**
***
****
#include<iostream>
usingnamespacestd;
資料僅供參考
constintn=8;
main()
inti;
intj;
intk;
for(i=n;i>=1;i-)
(
for(j=0;j<n-i+1;j++)
(
cout?"*";
for(k=l;k<n-i+1;k++)
(
cout?".";
)
)
cout?endl;
資料僅供參考
)
system("pause")
)
26完成程序,實(shí)現(xiàn)對(duì)數(shù)組的降序排序
#include<iostream>
usingnamespacestd;
voidsort(int*arr,intn);
intmain()
(
intarray口={45,56,76,234,1,34,23,2,3};
sort(array,9);
for(inti=0;i<=8;i++)〃曾經(jīng)在這兒出界
cout?array[i]?"
cout?endl;
system("pause");
資料僅供參考
voidsort(int*arr,intn)
(
inttemp;
for(inti=1;i<9;i++)
(
for(intk=0;k<9-i;k++)〃曾經(jīng)在這兒出界
(
if(arr[k]<arr[k+1])
(
temp=arr[k];
arr[k]=arr[k+1];
arr[k+1]=temp;
資料僅供參考
27費(fèi)波那其數(shù)列,1,1,2,3,5……編寫(xiě)程序
求第十項(xiàng)。能夠用遞歸,也能夠用其它方法,但
要說(shuō)明你選擇的理由。
非遞歸
#include<iostream>
usingnamespacestd;
intPheponatch(intn);
main()
(
intPh=Pheponatch(lO);
cout?Ph?endl;
system("pause");
)
intPheponatch(intn)
(
intelem;
intnl=1;
資料僅供參考
intn2=1;
if(n==111n==2)
return1;
else
(
for(inti=3;i<=n;i++)
(
elem=nl+n2;
nl=n2;
n2=elem;
}returnelem;}}
遞歸
#include<iostream>
usingnamespacestd;
intPheponatch(intn);
main()
資料僅供參考
intn;
cin?n;
intph=Pheponatch(n);
cout?ph?endl;
system("pause");
}
intPheponatch(intn)
(
if(n<=0)
exit(-l);
else
if(n==111n==2)
return1;
else
returnPheponatch(n-1)+Pheponatch(n-2);
資料僅供參考
28下列程序運(yùn)行時(shí)會(huì)崩潰,請(qǐng)找出錯(cuò)誤并改正,
而且說(shuō)明原因。
#include<stdio.h>
#include<malloc.h>
typedefstruct{
TNode*left;
TNode*right;
intvalue;
}TNode;
TNode*root=NULL;
voidappend(intN);
intmain()
(
append(63);
append(45);
append(32);
append(77);
資料僅供參考
append(96);
append(21);
append(17);//Again,數(shù)字任意給出
}
voidappend(intN)
(
TNode*NewNode=(TNode
*)malloc(sizeof(TNode));
NewNode->value=N;
if(root==NULL)
(
root=NewNode;
return;
)
else
TNode*temp;
資料僅供參考
temp=root;
while((N>=temp.value&&temp.left!=NULL)11
(N<temp.value&&temp.right!=NULL))
(
while(N>=temp.value&&temp.left!=NULL)
temp=temp.left;
while(N<temp.value&&temp.right!=NULL)
temp=temp.right;
)
if(N>=temp.value)
temp.left=NewNode;
else
temp.right=NewNode;
return;}}
29.AclassBnetworkontheinternethasasubnet
maskof,whatisthemaximum
numberofhostspersubnet.
資料僅供參考
a.240b.255c.4094d.65534
30.Whatisthedifference:betweeno(logn)and
o(lognA2),wherebothlogarithemshavebase2.
a.o(lognA2)isbiggerb.o(logn)isbigger
c.nodifference
31.Foraclasswhatwouldhappenifwecalla
class'sconstructorfromwiththesameclass's
constructor.
pilationerrorb.linkingerror
c.stackoverflowd.noneoftheabove
32."new“inC++isa:.
a.libraryfunctionlikemallocinc
b.keywordc.operator
d.noneoftheabove
33.Whichofthefollowinginformationisnot
containedinaninode.
a.fileownerb.filesize
資料僅供參考
c.filenamed.diskaddress
34.What'sthenumberofcomparisonsinthe
worstcasetomergetwosortedlistscontainingn
elementseach.
a.2nb.2n-lc.2n+ld.2n-2
35.TimecomplexityofnalgorithmT(n),wheren
istheinputsize,isT(n)=T(n-l)+l/nifn>l
otherwise1theorderofthisalgorithmis.
a.log(n)b.nc.nA2d.nAn
36.Thenumberof1'sinthebinary
representationof3*4096+15*256+5*16+3are.
a.8b.9c.10d.12
設(shè)計(jì)函數(shù)
37.intatoi(char*s)o
38.inti=(j=4,k=8,l=16,m=32);printf("%d”,i);輸
資料僅供參考
出是多少?
39.解釋局部變量、全局變量和靜態(tài)變量的含義。
40.解釋堆和棧的區(qū)別。
棧區(qū)(stack)-由編譯器自動(dòng)分配釋放,存放
函數(shù)的參數(shù)值,局部變量的值等。其操作方式類
似于數(shù)據(jù)結(jié)構(gòu)中的棧。
堆:一般由程序員分配釋放,若程序員不釋放,
程序結(jié)束時(shí)可能由OS回收。注意它與數(shù)據(jù)結(jié)構(gòu)
中的堆是兩回事,分配方式倒是類似于鏈表.
41.論述含參數(shù)的宏與函數(shù)的優(yōu)缺點(diǎn)。
1.函數(shù)調(diào)用時(shí),先求出實(shí)參表示式的值,然后帶
入形參。而使用帶參的宏只是進(jìn)行簡(jiǎn)單的字符替
換。
2.函數(shù)調(diào)用是在程序運(yùn)行時(shí)處理的,分配臨時(shí)的
內(nèi)存單元;而宏展開(kāi)則是在編譯時(shí)進(jìn)行的,在展
開(kāi)時(shí)并不分配內(nèi)存單元,不進(jìn)行值的傳遞處理,
資料僅供參考
也沒(méi)有“返回值”的概念。
3.對(duì)函數(shù)中的實(shí)參和形參都要定義類型,二者的
類型要求一致,如不一致,應(yīng)進(jìn)行類型轉(zhuǎn)換;而
宏不存在類型問(wèn)題,宏名無(wú)類型,它的參數(shù)也無(wú)
類型,只是一個(gè)符號(hào)代表,展開(kāi)時(shí)帶入指定的字
符即可。宏定義時(shí),字符串能夠是任何類型的數(shù)
據(jù)。
4,調(diào)用函數(shù)只可得到一個(gè)返回值,而用宏能夠設(shè)
法得到幾個(gè)結(jié)果。
5,使用宏次數(shù)多時(shí),宏展開(kāi)后源程序長(zhǎng),因?yàn)槊?/p>
展開(kāi)一次都使程序增長(zhǎng),而函數(shù)調(diào)用不使源程序
變長(zhǎng)。
6.宏替換不占運(yùn)行時(shí)間,只占編譯時(shí)間;而函數(shù)
調(diào)用則占運(yùn)行時(shí)間(分配單元、保留現(xiàn)場(chǎng)、值傳
遞、返回)。
一般來(lái)說(shuō),用宏來(lái)代表簡(jiǎn)短的表示式比較合適。
42.以下三條輸出語(yǔ)句分別輸出什么?[C易]
charstrl[]="abc";
charstr2[]="abc";
資料僅供參考
constcharstr3[]="abc";
constcharstr4[]="abc";
constchar*str5="abc";
constchar*str6="abc";
cout?boolalpha?(strl==str2)?endl;//輸
出什么?0
cout?boolalpha?(str3==str4)?endl;//輸
出什么?0
cout?boolalpha?(str5==str6)?endl;//輸
出什么?1
答:分別輸出false,false,true。strl和str2
都是字符數(shù)組,每個(gè)都有其自己的存儲(chǔ)區(qū),它們
的值則是各存儲(chǔ)區(qū)首地址,不等;str3和str4
同上,只是按const語(yǔ)義,它們所指向的數(shù)據(jù)區(qū)
不能修改。str5和str6并非數(shù)組而是字符指針,
并不分配存儲(chǔ)區(qū),其后的“abc”以常量形式存于
靜態(tài)數(shù)據(jù)區(qū),而它們自己僅是指向該區(qū)首地址的
指針,相等。
資料僅供參考
43.非C++內(nèi)建型別A和B,在哪幾種情況下B
能隱式轉(zhuǎn)化為A?[C++中等]
答:BD
a.classB:publicA{.......}〃B公有繼承自A,能
夠是間接繼承的
b.classB{operatorA();}//B實(shí)現(xiàn)了隱式轉(zhuǎn)化為
A的轉(zhuǎn)化
c.classA{A(constB&);}//A實(shí)現(xiàn)了
non-explicit的參數(shù)為B(能夠有其它帶默認(rèn)值的
參數(shù))構(gòu)造函數(shù)
d.A&operator=(constA&);//賦值操作,雖不
是正宗的隱式類型轉(zhuǎn)換,但也能夠勉強(qiáng)算一個(gè)
44.以下代碼中的兩個(gè)sizeof用法有問(wèn)題嗎?[C
易]
voidUpperCase(charstr[])//將str中的小寫(xiě)
字母轉(zhuǎn)換成大寫(xiě)字母
for(size_ti=0;i<sizeof(str)/sizeof(str[0]);++i)
資料僅供參考
if('a'<=str[i]&&str[i]<='z')
str[i]-=('a'-'A');
}
charstr[]="aBcDe";
cout?"str字符長(zhǎng)度為:"?
sizeof(str)/sizeof(str[0])?endl;
UpperCase(str);
cout?str?endl;
45.以下代碼有什么問(wèn)題?[C難]
voidchar2Hex(charc)//將字符以16進(jìn)制表示
(
charch=c/OxlO+'O';if(ch>'9')ch+=('A'-'g'-l);
charcl=c%OxlO+'O';if(cl>'9')cl+=
cout?ch?cl?'
)
charstr[]="Ilove中國(guó)";
資料僅供參考
for(size_ti=0;i<strlen(str);++i)
char2Hex(str[i]);
cout?endl;
46.以下代碼有什么問(wèn)題?[C++易]
structTest
(
Test(int){}
Test(){}
voidfun(){}
};
voidmain(void)
(
Testa(l);
a.fun();
Testb();
b.fun();
資料僅供參考
***Testb();〃定義了一個(gè)函數(shù)
47.以下代碼有什么問(wèn)題?[C++易]
cout?(true?l:"l")?endl;
8.以下代碼能夠編譯經(jīng)過(guò)嗎,為什么?[C++易]
unsignedintconstsizel=2;
charstrl[sizel];
unsignedinttemp=0;
cin?temp;
unsignedintconstsize2=temp;
charstr2[size2];
48.以下代碼中的輸出語(yǔ)句輸出。嗎,為什么?
[C++易]
structCLS
資料僅供參考
intmi;
CLS(inti):m_i(i){}
CLS()
(
CLS(O);
)
);
CLSobj;
cout?obj.m_i?endl;
49.C++中的空類,默認(rèn)產(chǎn)生哪些類成員函數(shù)?
[C++易]
答:
classEmpty
public:
資料僅供參考
Empty();//缺省構(gòu)造函數(shù)
Empty(constEmpty&);//拷貝構(gòu)造函數(shù)
~Empty();〃析構(gòu)函數(shù)
Empty&operator=(constEmpty&);//賦值運(yùn)算
符
Empty*operator&();//取址運(yùn)算符
constEmpty*operator&()const;//取址運(yùn)算符
const
);
50.以下兩條輸出語(yǔ)句分別輸出什么?[C++難]
floata=l.Of;
cout?(int)a?endl;
cout?(int&)a?endl;
cout?boolalpha?((int)a==(int&)a)?endl;
//輸出什么0
floatb=O.Of;
資料僅供參考
cout?(int)b?endl;
cout?(int&)b?endl;
cout?boolalpha?((int)b==(int&)b)?endl;
//輸出1
51.以下反向遍歷array數(shù)組的方法有什么錯(cuò)誤?
[STL易]
vectorarray;
array.push_back(1);
array.push_back(2);
array.push_back(3);
for(vector::size_typei=array.size()-l;i>=0;-i)//
反向遍歷array數(shù)組
cout?array[i]?endl;
資料僅供參考
52.以下代碼有什么問(wèn)題?[STL易]
typedefvectorIntArray;
IntArrayarray;
array.push_back(1);
array.push_back(2);
array.push_back(2);
array.push_back(3);
//刪除array數(shù)組中所有的2
for(lntArray::iteratoritor=array.begin();
itor!=array.end();++itor)
(
if(2==*itor)array.erase(itor);
}
53.寫(xiě)一個(gè)函數(shù),完成內(nèi)存之間的拷貝。[考慮問(wèn)
題是否全面]
答:
資料僅供參考
void*mymemcpy(void*dest,constvoid*src,
size_tcount)
(
char*pdest=static_cast<char*>(dest);
constchar*psrc=static_cast<constchar*>(src);
if(pdest>psrc&&pdest<psrc+cout)能考慮到這
種情況就行了
(
for(size_ti=count-l;i!=-l;-i)
pdest[i]=psrc[i];
)
else
for(size_ti=0;i<count;++i)
pdest[i]=psrc[i];
)
returndest;
資料僅供參考
intmain(void)
(
charstr[]=
mymemcpy(str+1,str+O,9);
cout?str?endl;
system("Pause");
return0;
54線程與進(jìn)程的區(qū)別
進(jìn)程就是一個(gè)應(yīng)用程序在處理機(jī)上的一次執(zhí)
行過(guò)程,它是一個(gè)動(dòng)態(tài)的概念,而線程是進(jìn)程中
的一部分,進(jìn)程包含多個(gè)線程在運(yùn)行。
55:請(qǐng)你分別劃劃0SI(開(kāi)放式系統(tǒng)互聯(lián))的七
資料僅供參考
層網(wǎng)絡(luò)結(jié)構(gòu)圖,和TCP/IP的五層結(jié)構(gòu)圖?
加毒/安全技術(shù)OSI/梅披層安全協(xié)議
應(yīng)用程序網(wǎng)應(yīng)用相關(guān)
/保密網(wǎng)關(guān)
信淑加密
SOCKS
動(dòng)右包過(guò)濾ssyns
能塞包過(guò)濾IPSec
PPTP/L2IP
茴順密
應(yīng)用層(applicationlayer)
傳輸層(transportlayer)
網(wǎng)絡(luò)層(networklayer)
數(shù)據(jù)鏈路層(datalinklayer)
物理層(physicallayer)
56:請(qǐng)你詳細(xì)的解釋一下IP協(xié)議的定義,在哪
個(gè)層上面,主要有什么作用?TCP與UDP呢?
IP協(xié)議是網(wǎng)絡(luò)層的協(xié)議,它實(shí)現(xiàn)了Internet中
自動(dòng)路由的功能,即尋徑的功能,TCP協(xié)議是一
個(gè)傳輸性的協(xié)議它向下屏蔽了IP協(xié)議不可靠傳
輸?shù)奶匦?,向上提供一個(gè)可靠的點(diǎn)到點(diǎn)的傳輸,
UDP提供的是一種無(wú)連接的服務(wù),主要考慮到很
多應(yīng)用不需要可靠的連接,但需要快速的傳輸
資料僅供參考
57:請(qǐng)問(wèn)交換機(jī)和路由器分別的實(shí)現(xiàn)原理是什么?
分別在哪個(gè)層次上面實(shí)現(xiàn)的?
交換機(jī)用在局域網(wǎng)中,交換機(jī)經(jīng)過(guò)記錄局域網(wǎng)
內(nèi)各節(jié)點(diǎn)機(jī)器的MAC地質(zhì)(物理地址)就能夠?qū)?/p>
現(xiàn)傳遞報(bào)文,無(wú)需看報(bào)文中的IP地址。路由器識(shí)
別不同網(wǎng)絡(luò)的方法是經(jīng)過(guò)識(shí)別不同網(wǎng)絡(luò)的網(wǎng)絡(luò)
ID號(hào)(IP地址的高端部分)進(jìn)行的,因此為了保證
路由成功,每個(gè)網(wǎng)絡(luò)都必須有一個(gè)唯一的網(wǎng)絡(luò)編
號(hào)。路由器經(jīng)過(guò)察看報(bào)文中IP地址,來(lái)決定路
徑,向那個(gè)子網(wǎng)(下一跳)路由,也就是說(shuō)交換機(jī)
工作在數(shù)據(jù)鏈路層看MAC地址,路由器工作在
網(wǎng)際層看IP地址
可是由于現(xiàn)在網(wǎng)絡(luò)設(shè)備的發(fā)展,很多設(shè)備既有交
換機(jī)的功能有由路由器的功能(交換試路由器)使
得兩者界限越來(lái)越模糊。
58:請(qǐng)問(wèn)C++的類和C里面的struct有什么區(qū)別?
資料僅供參考
(1)C++類中屬性默認(rèn)訪問(wèn)類型為private,而C中
的struct默認(rèn)的訪問(wèn)類型為public
(2)c++類能夠有繼承,虛函數(shù),多態(tài),而C中struct
不能夠。
C++的class具有數(shù)據(jù)封裝功能,其包含屬性訪問(wèn)
級(jí)別能夠?yàn)閜rivate,public和protect,還具有實(shí)現(xiàn)
類接口功能和輔助功能的操作函數(shù),而struct屬
性訪問(wèn)權(quán)限只有public,沒(méi)有數(shù)據(jù)封裝功能,也
就沒(méi)有實(shí)現(xiàn)信息隱藏這一面向?qū)ο蟮乃枷氲臋C(jī)
制,struct本身不含有操作函數(shù),只有數(shù)據(jù)。
59:請(qǐng)講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?
析構(gòu)函數(shù)是在類對(duì)象死亡時(shí)由系統(tǒng)自動(dòng)調(diào)用,
其作用是用來(lái)釋放對(duì)象的指針數(shù)據(jù)成員所指的
動(dòng)態(tài)空間,如果在構(gòu)造函數(shù)中,你申請(qǐng)了動(dòng)態(tài)空
間,那么為了避免引起程序錯(cuò)誤,你必須在析構(gòu)
函數(shù)中釋放這部分內(nèi)存空間。如果基類的函數(shù)用
virtual修飾,成為虛函數(shù),則其派生類相應(yīng)的重
載函數(shù)仍能繼承該虛函數(shù)的性質(zhì),虛函數(shù)進(jìn)行動(dòng)
態(tài)聯(lián)編,也即具有多態(tài)性,也就是派生類能夠改
變基類同名函數(shù)的行為,在面向?qū)ο笫澜缰?,?/p>
態(tài)是最強(qiáng)大的機(jī)制,虛函數(shù)就是這一機(jī)制的C++
實(shí)現(xiàn)方式。
資料僅供參考
60:全局變量和局部變量有什么區(qū)別?實(shí)怎么實(shí)
現(xiàn)的?操作系統(tǒng)和編譯器是怎么知道的?
全局變量是整個(gè)程序都可訪問(wèn)的變量,誰(shuí)都能
夠訪問(wèn),生存期在整個(gè)程序從運(yùn)行到結(jié)束(在程
序結(jié)束時(shí)所占內(nèi)存釋放),而局部變量存在于模
塊(子程序,函數(shù))中,只有所在模塊能夠訪問(wèn),
其它模塊不可直接訪問(wèn),模塊結(jié)束(函數(shù)調(diào)用完
畢),局部變量消失,所占據(jù)的內(nèi)存釋放。
全局變量分配在全局?jǐn)?shù)據(jù)段而且在程序開(kāi)始
運(yùn)行的時(shí)候被加載.局部變量則分配在堆棧里
面。
61:一些寄存器的題目,主要是尋址和內(nèi)存管理
等一些知識(shí)。
2、交換機(jī)用在局域網(wǎng)中,交換機(jī)經(jīng)過(guò)紀(jì)錄局域
網(wǎng)內(nèi)各節(jié)點(diǎn)機(jī)器的MAC地質(zhì)(物理地址)就能夠
實(shí)現(xiàn)傳遞報(bào)文,無(wú)需看報(bào)文中的IP地質(zhì)。路由器
識(shí)別不同網(wǎng)絡(luò)的方法是經(jīng)過(guò)識(shí)別不同網(wǎng)絡(luò)的網(wǎng)
絡(luò)ID號(hào)(IP地址的高端部分)進(jìn)行的,因此為了保
資料僅供參考
證路由成功,每個(gè)網(wǎng)絡(luò)都必須有一個(gè)唯一的網(wǎng)絡(luò)
編號(hào)。路由器經(jīng)過(guò)察看報(bào)文中IP地址,來(lái)決定
路徑,向那個(gè)子網(wǎng)(下一跳)路由,也就是說(shuō)交換
機(jī)工作在數(shù)據(jù)鏈路層看MAC地址,路由器工作
在網(wǎng)際層看IP地質(zhì)
可是由于現(xiàn)在網(wǎng)絡(luò)設(shè)備的發(fā)展,很多設(shè)備既有交
換機(jī)的功能有由路由器的功能(交換試路由器)使
得兩者界限越來(lái)越模糊。
3、IP協(xié)議是網(wǎng)絡(luò)層的協(xié)議,它實(shí)現(xiàn)了Internet
中自動(dòng)路由的功能,即尋徑的功能,TCP協(xié)議是
一個(gè)傳輸性的協(xié)議它向下屏蔽了IP協(xié)議不可靠
傳輸?shù)奶匦?,向上提供一個(gè)可靠的點(diǎn)到點(diǎn)的傳輸,
UDP提供的是一種無(wú)連接的服務(wù),主要考慮到很
多應(yīng)用不需要可靠的連接,但需要快速的傳輸。
4、
Testb();〃定義了一個(gè)函數(shù)
62:8086是多少位的系統(tǒng)?在數(shù)據(jù)總線上是怎么
實(shí)現(xiàn)的?
資料僅供參考
?IBM?
63.怎樣用最快的方法判斷鏈表是否有環(huán)?
設(shè)置兩個(gè)指針,開(kāi)始都指向鏈表頭,然后其中
一個(gè)指針每次向前走一步,另一個(gè)指針每次向前
走兩步,如果快的遇到NULL了,證明該鏈表中
沒(méi)有環(huán),如果有環(huán),快的指針每次都要比慢的多
走一步,最終兩個(gè)指針會(huì)相遇,
64.C++中引用和指針有什么不同?指針加上什么
限制等于引用?
答:1引用被創(chuàng)立的時(shí)候必須被初始化,而指
針不是必須的。2引用在創(chuàng)立后就不能改變引用
的關(guān)系,而指針在初始化后能夠隨時(shí)指向其它的
變量或?qū)ο蟆?沒(méi)有NULL引用,引用必須與合法
的存儲(chǔ)單元關(guān)聯(lián),而指針能夠是NULL。
65,做的項(xiàng)目,遇到的困難,怎樣解決?
資料僅供參考
69.操作符重載
classCMyObject:pulicCObject
(
Public:
CMyObject();
CMyObject&operator=(constCMyObject&my);
private:
CStringstrName;
intnld:
};
請(qǐng)重載賦值操作符
70.鏈表
StructstructList
資料僅供參考
intvalue;
structList*pHead;
)
StructLinkedList*pMyList;
請(qǐng)編寫(xiě)刪除鏈表的頭、尾和第n個(gè)節(jié)點(diǎn)的程序
7L用SocketAPI制作一個(gè)聊天程序,通訊協(xié)議使
用tcp/ip。要求有簡(jiǎn)單界面即可,支持多人聊天。
72.如果有過(guò)工作經(jīng)驗(yàn),請(qǐng)說(shuō)明在先前公司的工
作以及離職原因(如無(wú),請(qǐng)說(shuō)明畢業(yè)后的個(gè)人展
望)
資料僅供參考
73對(duì)于C++中類(class)與結(jié)構(gòu)(struct)的描述正
確的為:
A,類中的成員默認(rèn)是private的,當(dāng)是能夠聲明為
public,private和protected,結(jié)構(gòu)中定義的成員默
認(rèn)的都是public;
B,結(jié)構(gòu)中不允許定義成員函數(shù),當(dāng)是類中能夠定
義成員函數(shù);
C,結(jié)構(gòu)實(shí)例使用malloc()動(dòng)態(tài)創(chuàng)立,類對(duì)象使用
new操作符動(dòng)態(tài)分配內(nèi)存;
D,結(jié)構(gòu)和類對(duì)象都必須使用new創(chuàng)立;
E,結(jié)構(gòu)中不能夠定義虛函數(shù),當(dāng)是類中能夠定義
虛函數(shù).
F,結(jié)構(gòu)不能夠存在繼承關(guān)系,當(dāng)是類能夠存在繼
承關(guān)系.
答:A,D,F
74,兩個(gè)互相獨(dú)立的類:ClassA和ClassB,都各自
資料僅供參考
定義了非靜態(tài)的公有成員函數(shù)PublicFunc()和
非靜態(tài)的私有成員函數(shù)PrivateFunc();
現(xiàn)在要在ClassA中增加定義一個(gè)成員函數(shù)
ClassA::AdditionalPunction(ClassAa,ClassBb);則
能夠在AdditionalPunction(ClassAx,ClassBy)的實(shí)
現(xiàn)部分(函數(shù)功能體內(nèi)部)
出現(xiàn)的合法的表示是最全的是:
A,x.PrivateFunc();x.PublicFuncO;y.PrivateFunc();y.
PublicFunc();
B^x.PrivateFuncO^.PublicFuncO^.PublicFuncO;
C^.PrivateFuncO^.PrivateFuncO^.PublicFuncO;
D^.PublicFuncOjy.PublicFuncO;
答:B
75,C++程序下列說(shuō)法正確的有:
A,對(duì)調(diào)用的虛函數(shù)和模板類都進(jìn)行遲后編譯.
B,基類與子類中函數(shù)如果要構(gòu)成虛函數(shù),除了要
求在基類中用virtual聲名,而且必須名字相同且
參數(shù)類型相同返回類型相同
資料僅供參考
C,重載的類成員函數(shù)都必須要:或者返回類型不
同,或者參數(shù)數(shù)目不同,或者參數(shù)序列的類型不
同.
D,靜態(tài)成員函數(shù)和內(nèi)聯(lián)函數(shù)不能是虛函數(shù),友員
函數(shù)和構(gòu)造函數(shù)也不能是虛函數(shù),可是析構(gòu)函數(shù)
能夠是虛函數(shù).
答:A
76,C++中的類與結(jié)構(gòu)的區(qū)別?
77,構(gòu)造函數(shù)和析構(gòu)函數(shù)是否能夠被重載,為什
么?
答:構(gòu)造函數(shù)能夠被重載,析構(gòu)函數(shù)不能夠被重
載。因?yàn)闃?gòu)造函數(shù)能夠有多個(gè)且能夠帶參數(shù),而
析構(gòu)函數(shù)只能有一個(gè),且不能帶參數(shù)。
資料僅供參考
78,一個(gè)類的構(gòu)造函數(shù)和析構(gòu)函數(shù)什么時(shí)候被調(diào)
用,是否需要手工調(diào)用?
答:構(gòu)造函數(shù)在創(chuàng)立類對(duì)象的時(shí)候被自動(dòng)調(diào)用,
析構(gòu)函數(shù)在類對(duì)象生命期結(jié)束時(shí),由系統(tǒng)自動(dòng)調(diào)
用。
1#include“filename.h”和#include
<filename.h>的區(qū)另U?
答:#include"filename.h”表明該文件是用戶
提供的頭文件,查找該文件時(shí)從當(dāng)前文件目錄開(kāi)
始;#include〈filename.h>表明這個(gè)文件是一個(gè)
工程或標(biāo)準(zhǔn)頭文件,查找過(guò)程會(huì)檢查預(yù)定義的目
錄。
2頭文件的作用是什么?
答:一、經(jīng)過(guò)頭文件來(lái)調(diào)用庫(kù)功能。在很多場(chǎng)合,
源代碼不便(或不準(zhǔn))向用戶公布,只要向用戶
資料僅供參考
提供頭文件和二進(jìn)制的庫(kù)即可。用戶只需要按照
頭文件中的接口聲明來(lái)調(diào)用庫(kù)功能,而不必關(guān)心
接口怎么實(shí)現(xiàn)的。編譯器會(huì)從庫(kù)中提取相應(yīng)的代
碼。
二、頭文件能加強(qiáng)類型安全檢查。如果某個(gè)接口
被實(shí)現(xiàn)或被使用時(shí),其方式與頭文件中的聲明不
一致,編譯器就會(huì)指出錯(cuò)誤,這一簡(jiǎn)單的規(guī)則能
大大減輕程序員調(diào)試、改錯(cuò)的負(fù)擔(dān)。
3C++函數(shù)中值的傳遞方式有哪幾種?
答:C++函數(shù)的三種傳遞方式為:值傳遞、指針
傳遞和引用傳遞。
4內(nèi)存的分配方式的分配方式有幾種?
答:一、從靜態(tài)存儲(chǔ)區(qū)域分配。內(nèi)存在程序編譯
的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)
行期間都存在。例如全局變量。
二、在棧上創(chuàng)立。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變
量的存儲(chǔ)單元都能夠在棧上創(chuàng)立,函數(shù)執(zhí)行結(jié)束
資料僅供參考
時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)
置于處理器的指令集中,效率很高,可是分配的
內(nèi)存容量有限。
三、從堆上分配,亦稱動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)
行的時(shí)候用malloc或new申請(qǐng)任意多少的內(nèi)存,
程序員自己負(fù)責(zé)在何時(shí)用free或delete釋放內(nèi)
存。動(dòng)態(tài)內(nèi)存的生存期由我們決定,使用非常靈
活,但問(wèn)題也最多。
5實(shí)現(xiàn)雙向鏈表刪除一個(gè)節(jié)點(diǎn)P,在節(jié)點(diǎn)P后插
入一個(gè)節(jié)點(diǎn),寫(xiě)出這兩個(gè)函數(shù);
答:雙向鏈表刪除一個(gè)節(jié)點(diǎn)P
template<classtype>voidlist<type>::delnode(int
P)
intk=l;
listnode<type>*ptr,*t;
ptr=first;
資料僅供參考
while(ptr->next!=NULL&&k!=p)
(
ptr=ptr->next;
k++;
}
t=ptr->next;
你已經(jīng)將數(shù)據(jù)項(xiàng)"?t->data?"j?ll^
"?endl;
ptr->next=ptr->next->next;
length-;
deletet;
}
在節(jié)點(diǎn)P后插入一個(gè)節(jié)點(diǎn):
template<classtype>boollist<type>::insert(type
t,intp)
資料僅供參考
listnode<type>*ptr;
ptr=first;
intk=l;
while(ptr!=NULL&&k<p)
(
ptr=ptr->next;
k++;
}
if(ptr==NULL&&k!=p)
returnfalse;
else
listnode<type>*tp;
tp=newlistnode<type>;
tp->data=t;
資料僅供參考
tp->next=ptr->next;
ptr->next=tp;
length++;
returntrue;
〃上海貝爾的面試題43分即可進(jìn)入復(fù)試
一、請(qǐng)?zhí)顚?xiě)B(tài)OOL,float,指針變量與“零值”
比較的if語(yǔ)句。(10分)
資料僅供參考
提示:這里“零值”能夠是0,0.0,FALSE或者“空
指針”。例如int變量n與“零值”比較的if語(yǔ)
句為:
if(n==0)
if(n!=0)
以此類推。
請(qǐng)寫(xiě)出BOOLflag與“零值”比較的if語(yǔ)句:
請(qǐng)寫(xiě)出floatx與“零值”比較的if語(yǔ)句:
請(qǐng)寫(xiě)出char*p與“零值”比較的if語(yǔ)句:
二、以下為WindowsNT下的32位C++程序,請(qǐng)
計(jì)算sizeof的值(10分)
charstr[]="Hello";
char*p=str;
intn=10;
請(qǐng)計(jì)算
sizeof(str)=
sizeof(p)=
資料僅供參考
sizeof(n)=voidFunc(charstr[100])
(
請(qǐng)計(jì)算
sizeof(str)=
}
void*p=malloc(100);
請(qǐng)計(jì)算
sizeof(p)=
、簡(jiǎn)答題(25分)
1、頭文件中的ifndef/define/endif干什么用?
防止頭文件重復(fù)定義。
2、#include<filename.h>和#include
“filename,h”有什么區(qū)別?
答:#include"filename.h”表明該文件是
用戶提供的頭文件,查找該文件時(shí)從當(dāng)前文件目
錄開(kāi)始;#include〈filename.h>表明這個(gè)文件是
一個(gè)工程或標(biāo)準(zhǔn)頭文件,查找過(guò)程會(huì)檢查預(yù)定義
的目錄。
資料僅供參考
3、const有什么用途?(請(qǐng)至少說(shuō)明兩種)
在C/C++中,(1)能夠定義const常量,(2)
修飾函數(shù)的返回值和形參;
在C++中,還能夠修飾函數(shù)的定義體,定義類的
const成員函數(shù)。被const修飾的東西受到強(qiáng)制J保
護(hù),能夠預(yù)防意外的變動(dòng),提高了程序的健壯性。
4、在C++程序中調(diào)用被C編譯器編譯后的函
數(shù),為什么要加extern“C”聲明?
答:C++語(yǔ)言支持函數(shù)重載,C語(yǔ)言不支持
函數(shù)重載。函數(shù)被C++編譯后在庫(kù)中的名字與C
語(yǔ)言不同。假設(shè)某個(gè)函數(shù)的原型為:voidfoo(i
ntx,inty);該函數(shù)被C編譯器編譯后在庫(kù)中的
名字為_(kāi)foo,而C++編譯器則會(huì)產(chǎn)生像_foo_i
nt_int之類的名字。C++提供了C連接交換指定
符號(hào)extern”〃來(lái)解決名字匹配問(wèn)題。
5、請(qǐng)簡(jiǎn)述以下兩個(gè)for循環(huán)的優(yōu)缺點(diǎn)
//第一個(gè)
for(i=0;i<N;i++)
if(condition)
資料僅供參考
DoSomething();
else
DoOtherthing();
}//第二個(gè)
if(condition)
(
for(i=0;i<N;i++)
DoSomething();
)
else
(
for(i=0;i<N;i++)
DoOtherthing();
)
優(yōu)點(diǎn):N次中,每次都要對(duì)8ndition進(jìn)行判斷
缺點(diǎn):優(yōu)點(diǎn):一次判斷condition后,對(duì)something
或Otherthing執(zhí)行N次
資料僅供參考
缺點(diǎn):
四、有關(guān)內(nèi)存的思考題(20分)
voidGetMemory(char*p)
(
p=(char*)malloc(100);
)
voidTest(void)
(
char*str=NULL;
GetMemory(str);
strcpy(str,"helloworld");
printf(str);
請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?
資料僅供參考
char*GetMemory(void)
(
charp[]="helloworld";
returnp;
}
voidTest(void)
(
char*str=NULL;
str=GetMemory();
printf(str);
}
請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?
VoidGetMemory2(char**p,intnum)
資料僅供參考
*p=(char*)malloc(num);
)
voidTest(void)
(
char*str=NULL;
GetMemory(&str,100);
strcpy(str,"hello");
printf(str);
)
請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?
voidTest(void)
(
char*str=(char*)malloc(lOO);
strcpy(str,"hello");
free(str);
資料僅供參考
if(str!=NULL)
strcpy(str,"world");
printf(str);
}
}
請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?
五、編寫(xiě)strcpy函數(shù)(10分)
已知strcpy函數(shù)的原型是
char*strcpy(char*strDest,constchar*strSrc);
其中strDest是目的字符串,strSrc是源字符串。
(1)不調(diào)用C++/C的字符串庫(kù)函數(shù),請(qǐng)編寫(xiě)函
數(shù)strcpy
資料僅供參考
char*strcpy(char*strDest,constchar*strSrc){
intn=0;
while(strSrc[n]!=NULL){
n++:
}
*srtDest=newchar[n];
for(inti=O;i<n;i++){
strDest=strSrc[i];
i++;
)
return*strDest;
}
(2)strcpy能把strSrc的內(nèi)容復(fù)制到strDest,
為什么還要char*類型的返回值?
因?yàn)樵摵瘮?shù)的還能夠把復(fù)制的字符串首地址
指針給其它的指針,而且這種需要也是有用的。
六、編寫(xiě)類String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值
資料僅供參考
函數(shù)(25分)
已知類String的原型為:
classString
(
public:
String(constchar*str=NULL);//普通構(gòu)造函
數(shù)
String(constString&other);//拷貝構(gòu)造函數(shù)
~String(void);//析構(gòu)函數(shù)
String&operate=(constString&other);//賦
值函數(shù)
private:
char*m_data;//用于保存字符串
};
請(qǐng)編寫(xiě)String的上述4個(gè)函數(shù)。
資料僅供參考
〃答案一并給出
一、請(qǐng)?zhí)顚?xiě)B(tài)OOL,float,指針變量與“零值”
比較的if語(yǔ)句。(10分)
請(qǐng)寫(xiě)出BOOLflag與“零值”比較的if語(yǔ)句。
(3分)
標(biāo)準(zhǔn)答案:
if(flag)
if“flag)如下寫(xiě)法均屬不良風(fēng)格,不得分。
if(flag==TRUE)
if(flag==1)
if(flag==FALSE)
if(flag==0)
請(qǐng)寫(xiě)出floatx與“零值”比較的if語(yǔ)句。(4
分)
資料僅供參考
標(biāo)準(zhǔn)答案示例:
constfloatEPSINON=0.00001;
if((x>=-EPSINON)&&(x<=EPSINON)
不可將浮點(diǎn)變量用或“!=”與數(shù)字比較,
應(yīng)該設(shè)法轉(zhuǎn)化成或"<=”此類形式。
如下是錯(cuò)誤的寫(xiě)法,不得分。
if(x==0.0)
if(x!=0.0)
請(qǐng)寫(xiě)出char*p與“零值”比較的if語(yǔ)句。,
分)
標(biāo)準(zhǔn)答案:
if(p==NULL)
if(p!:NULL)如下寫(xiě)法均屬不良風(fēng)格,不得分。
if(p==0)
if(p!=0)
資料僅供參考
if(P)
if(!)
二、以下為WindowsNT下的32位C++程序,請(qǐng)
計(jì)算sizeof的值(10分)
charstr[]="Hello”;
char*p=str;
intn=10;
請(qǐng)計(jì)算
sizeof(str)=6(2分)
sizeof(p)=4(2分)
sizeof(n)=4(2分)
voidFunc(charstr[100])
資料僅供參考
請(qǐng)計(jì)算
sizeof(str)=4(2分)
void*p=malloc(100);
請(qǐng)計(jì)算
sizeof(p)=4(2分)
三、簡(jiǎn)答題(25分)
1、頭文件中的ifndef/define/endif干什么用?
(5分)
答:防止該頭文件被重復(fù)引用。
2、#include<filename.h>和#include
“filename.h”有什么區(qū)別?(5分)
資料僅供參考
答:對(duì)于#include<filename.h>,編譯器從標(biāo)
準(zhǔn)庫(kù)路徑開(kāi)始搜索filename.h
對(duì)于#include“filename.h”,編譯器從用戶
的工作路徑開(kāi)始搜索filename.h
3、const有什么用途?(請(qǐng)至少說(shuō)明兩種)(5
分)
答:(1)能夠定義const常量
(2)const能夠修飾函數(shù)的參數(shù)、返回值,甚至
函數(shù)的定義體。被const修飾的東西都受到強(qiáng)制
保護(hù),能夠預(yù)防意外的變動(dòng),能提高程序的健壯
性。
4、在C++程序中調(diào)用被C編譯器編譯后的函數(shù),
為什么要加extern“C”?(5分)
答:C++語(yǔ)言支持函數(shù)重載,C語(yǔ)言不支持函數(shù)
重載。函數(shù)被C++編譯后在庫(kù)中的名字與C語(yǔ)言
的不同。假設(shè)某個(gè)函數(shù)的原型為:voidfoo(intx,
inty);該函數(shù)被C編譯器編譯后在庫(kù)中的名字為
資料僅供參考
_foo,而C++編譯器則會(huì)產(chǎn)生像_foo_int_int之類
的名字。C++提供了C連接交換指定符號(hào)extern
來(lái)解決名字匹配問(wèn)題。
5、請(qǐng)簡(jiǎn)述以下兩個(gè)for循環(huán)的優(yōu)缺點(diǎn)(5分)
for(i=0;i<N;i++)
if(condition)
DoSomething();
else
DoOtherthing();
if(condition)
for(i=0;i<N;i++)
資料僅供參考
DoSomething();
else
(
for(i=0;i<N;i++)
DoOtherthing();
)
優(yōu)點(diǎn):程序簡(jiǎn)潔
缺點(diǎn):多執(zhí)行了N-1次邏輯判斷,而且打斷了循
環(huán)“流水線”作業(yè),使得編譯器不能對(duì)循環(huán)進(jìn)行
優(yōu)化處理,降低了效率。
優(yōu)點(diǎn):循環(huán)的效率高
缺點(diǎn):程序不簡(jiǎn)潔
資料僅供參考
四、有關(guān)內(nèi)存的思考題(每小題5分,共20分)
voidGetMemory(char*p)
(
p=(char*)malloc(100);
)
voidTest(void)
(
char*str=NULL;
GetMemory(str);
strcpy(str,"helloworld");
printf(str);
請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?
資料僅供參考
答:程序崩潰。
因?yàn)镚etMemory并不能傳遞動(dòng)態(tài)內(nèi)存,
Test函數(shù)中的str一直都是NULL。
strcpy(str,"helloworld");將使程序崩潰。
char*GetMemory(void)
(
charp[]="helloworld";
returnp;
)
voidTest(void)
(
char*str=NULL;
str=GetMemory();
printf(str);
請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?
資料僅供參考
答:可能是亂碼。
因?yàn)镚etMemory返回的是指向“棧內(nèi)存”的指
針,該指針的地址不是NULL,但其原現(xiàn)的內(nèi)容
已經(jīng)被清除,新內(nèi)容不可知。
voidGetMemory2(char**p,intnum)
(
*p=(char*)malloc(num);
}
voidTest(void)
(
char*str=NULL;
GetMemory(&strz100);
strcpy(str,"hello");
printf(str);
}
請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?
答:
資料僅供參考
(1)能夠輸出hello
(2)內(nèi)存泄漏
voidTest(void)
(
char*str=(char*)malloc(lOO);
strcpy(str,"hello");
free(str);
if(str!=NULL)
(
strcpy(str,"world");
printf(str);
)
)
請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?
答:篡改動(dòng)態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預(yù)料,非
常危險(xiǎn)。
資料僅供參考
因?yàn)閒ree(str);之后,str成為野指針,
if(str!=NULL)語(yǔ)句不起作用。
"28下列程序運(yùn)行時(shí)會(huì)崩潰,請(qǐng)找出錯(cuò)誤并改正,
而且說(shuō)明原因?!?/p>
//voidappend(intN);
〃指針沒(méi)有初始化:
//NewNode->left=NULL;
//NewNode->right=NULL;
#include<stdio.h>
#include<malloc.h>
typedefstructTNode{
資料僅供參考
TNode*left;
TNode*right;
intvalue;
}TNode;
TNode*root=NULL;
voidappend(intN);
intmain()
(
append(63);
append(45);
append(32);
append(77);
append(96);
資料僅供參考
append(21);
append(17);//Again,數(shù)字任意給出
return0;
}
voidappend(intN)
(
TNode*NewNode=(TNode
*)malloc(sizeof(TNode));
NewNode->value=N;
NewNode->left=NULL;
NewNode->right=NULL;
if(root==NULL)
(
root=NewNode;
return;
資料僅供參考
else
TNode*temp;
temp=root;
while((N>=temp->value&&temp->left!=NULL)11
(N<temp->value&&temp->right!=NULL))
(
while(N>=temp->value&&temp->left!=NULL)
temp=temp->left;
while(N<temp->value&&temp->right!=NULL)
temp=temp->right;
)
if(N>=temp->value)
temp->left=NewNode;
else
temp->right=NewNode;
return;
資料僅供參考
算法:
1.什么是NPC,NP-Hard?
2.起泡排序的時(shí)間復(fù)雜度是多少?
說(shuō)出至少
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度食品加工外包服務(wù)協(xié)議3篇
- 二零二五年度網(wǎng)絡(luò)游戲公司股權(quán)轉(zhuǎn)讓與內(nèi)容合作協(xié)議3篇
- 2024版安全員聘用協(xié)議書(shū)參考
- 服裝化裝品直播帶貨銷售合作協(xié)議書(shū)
- 股份有限公司發(fā)起人協(xié)議
- 2024建筑工程項(xiàng)目安全協(xié)議
- 2025年建筑施工電梯安裝與使用合同2篇
- 二零二五年度航空航天伸縮縫研發(fā)與制造合同3篇
- 二零二五年度劇本改編合作協(xié)議書(shū)模板3篇
- 二零二五版建筑材料銷售合同模板9篇
- 插圖在小學(xué)英語(yǔ)口語(yǔ)教學(xué)中的運(yùn)用
- 前列腺增生藥物治療
- 人工智能知識(shí)圖譜(歸納導(dǎo)圖)
- 滴滴補(bǔ)貼方案
- 民宿建筑設(shè)計(jì)方案
- 干部基本信息審核認(rèn)定表
- 2023年11月外交學(xué)院(中國(guó)外交培訓(xùn)學(xué)院)2024年度公開(kāi)招聘24名工作人員筆試歷年高頻考點(diǎn)-難、易錯(cuò)點(diǎn)薈萃附答案帶詳解
- 春節(jié)行車安全常識(shí)普及
- 電機(jī)維護(hù)保養(yǎng)專題培訓(xùn)課件
- 汽車租賃行業(yè)利潤(rùn)分析
- 春節(jié)拜年的由來(lái)習(xí)俗來(lái)歷故事
評(píng)論
0/150
提交評(píng)論