2020年度C常見(jiàn)筆試題及答案_第1頁(yè)
2020年度C常見(jiàn)筆試題及答案_第2頁(yè)
2020年度C常見(jiàn)筆試題及答案_第3頁(yè)
2020年度C常見(jiàn)筆試題及答案_第4頁(yè)
2020年度C常見(jiàn)筆試題及答案_第5頁(yè)
已閱讀5頁(yè),還剩186頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論