2020年度C常見筆試題及答案_第1頁
2020年度C常見筆試題及答案_第2頁
2020年度C常見筆試題及答案_第3頁
2020年度C常見筆試題及答案_第4頁
2020年度C常見筆試題及答案_第5頁
已閱讀5頁,還剩186頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C++常見筆試題及答案

資料僅供參考

C++面試題

1#include“filename.h”和#include

<filename.h>的區另U?

答:對于#include〈filename.h>編譯器從標準庫

開始搜索filename.h

對于#include"filename.h”編譯器從用戶工作

路徑開始搜索filename.h

2頭文件的作用是什么?

答:一、經過頭文件來調用庫功能。在很多場合,

源代碼不便(或不準)向用戶公布,只要向用戶

提供頭文件和二進制的庫即可。用戶只需要按照

頭文件中的接口聲明來調用庫功能,而不必關心

接口怎么實現的。編譯器會從庫中提取相應的代

碼。

二、頭文件能加強類型安全檢查。如果某個接口

被實現或被使用時,其方式與頭文件中的聲明不

一致,編譯器就會指出錯誤,這一簡單的規則,

能大大減輕程序員調試、改錯的負擔。

資料僅供參考

3C++函數中值的傳遞方式有哪幾種?

答:C++函數的三種傳遞方式為:值傳遞、指針

傳遞和引用傳遞。

4內存的分配方式有幾種?

答:一、從靜態存儲區域分配。內存在程序編譯

的時候就已經分配好,這塊內存在程序的整個運

行期間都存在。例如全局變量。

二、在棧上創立。在執行函數時,函數內局部變

量的存儲單元都能夠在棧上創立,函數執行結束

時這些存儲單元自動被釋放。棧內存分配運算內

置于處理器的指令集中,效率很高,可是分配的

內存容量有限。

三、從堆上分配,亦稱動態內存分配。程序在運

行的時候用malloc或new申請任意多少的內存,

程序員自己負責在何時用free或delete釋放內

存。動態內存的生存期由我們決定,使用非常靈

活,但問題也最多。

資料僅供參考

5實現雙向鏈表刪除一個節點P,在節點P后插

入一個節點,寫出這兩個函數;

答:雙向鏈表刪除一個節點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?"你已經將數據項"?t->data?"刪

資料僅供參考

除,,<<endl;

ptr->next=ptr->next->next;

length-;

deletet;

}

在節點P后插入一個節點:

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寫一個函數,將其中的\t都轉換成4個空格。

boolchange(char*buf,intlen)

資料僅供參考

intcount=0;

inti;

//統計有多少個‘\t'

for(i=0;buf[i]!='\0';i++){

if(buf[i]=='\t')

count++;

)

//給定的buf空間是否能裝下生成的字符串

intj=i+3*count;

if(len<j+1)

returnfalse;

//從后向前逐個替換

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的長度(要足

夠大,最好是原字符串的3倍)

if(change(buf,100)==true)

cout?buf?endl;

charc;

cin?c;

}

7Windows程序的入口是哪里?寫出Windows

消息機制的流程.

函數WinMain()

Windows應用程序的消息處理機制如圖1.2所示。

(1)操作系統接收到應用程序的窗口消息,將

資料僅供參考

消息投遞到該應用程序的消息隊列中。

(2)應用程序在消息循環中調用GetMessage

函數從消息隊列中取出一條一條的消息。取出消

息后,應用程序能夠對消息進行一些預處理,例

如,放棄對某些消息的響應,或者調用

TranslateMessage產生新的消息。

(3)應用程序調用DispatchMessage,將消息回

傳給操作系統。消息是由MSG結構體對象來表

示的,其中就包含了接收消息的窗口的句柄。因

此,DispatchMessage函數總能進行正確的傳遞。

(4)系統利用WNDCLASS結構體的IpfnWndProc

成員保存的窗口過程函數的指針調用窗口過程,

對消息進行處理(即“系統給應用程序發送了消

息”)。

8如何定義和實現一個類的成員函數為回調函

數?

把函數聲明為static

資料僅供參考

9C++里面是不是所有的動作都是main()引起的?

如果不是,請舉例.

答:在運行C++程序時,一般從main。函數開始

執行。因此如果沒有main(),程序將不完整,編

譯器將指出未定義main()函數。

例外情況:如,在windows編程中,能夠編寫

一個動態連接庫(州)模塊,這是其它windows

程序能夠使用的代碼。由于DLL模塊不是獨立的

程序,因此不需要main。.用于專用環境的程序-

如機器人中的控制器芯片-可能不需要main().

但常規的獨立程序都需要main().

10C++里面如何聲明constvoidf(void)函數為C

程序中的庫函數?

extern"C"voidf(void);

11下列哪兩個是等同的C==D

intb;

Aconstint*a=&b;

資料僅供參考

Bconst*inta=&b;

Cconstint*consta=&b;

Dintconst*consta=&b;

12內聯函數在編譯時是否做參數類型檢查

13三個float:a,b,c問值

(a+b)+c==(b+a)+c1

(a+b)+c==(a+c)+b1

14把一個鏈表反向填空

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某個程序在一個嵌入式系統(200M的

CPU,50M的SDRAM)中已經最化了,換到另一個

系統(300M的CPU,501Vl的SDRAM)中運行,還需

要優化嗎?

要。程序在每時每刻都要優化,只要能找到能夠

優化的方法。

優化有多種目的,在200M的CPU中可能需要以

速度為重點優化,在300M的CPU中可能要以代

碼長度為目的優化。

17.下面哪種排序法對12354最快C

aquicksort//快速排序

b.bublesort//冒泡排序

c.mergesort〃歸并排序

資料僅供參考

18.哪種結構,平均來講,獲取一個值最快B

a.binarytree//二叉樹

b.hashtable〃散列表哈希表

c.stack//棧

19請問C++的類和C里面的struct有什么區另(I?

答:C++的類的成員默認情況下是私有的,C的

struct的成員默認情況下是公共的.

20請講一講析構函數和虛函數的用法和作用?

答:析構函數的名字和類名相同,沒有返回值,

沒有參數,不能隨意調用也沒有重載。只是在類

對象生命期結束時由系統自動調用。

虛函數用在繼承中,當在派生類中需要重新定義

基類的函數時需要在基類中將該函數聲明為虛

函數,作用為使程序支持動態聯編。

資料僅供參考

21全局變量和局部變量有什么區別?是怎么實

現的?操作系統和編譯器是怎么知道的?

答:一些變量整個程序中都是可見的,它們稱為

全局變量,一些變量在函數內部定義且只在函數

中可知,則稱為局部變量。

全局變量由編譯器建立且存放在內存的全局數

據區,局部變量存放在棧區.

22一些寄存器的題目,主要是尋址和內存管理

等一些知識。

1、立即尋址

2、寄存器尋址

3、直接尋址

4、寄存器間接尋址

5、基址加變址尋址

資料僅供參考

6、寄存器相對尋址

7、相對基址加變址尋址

238086是多少位的系統?在數據總線上是怎么

實現的?

8086有16根數據線和20根地址線,因為可用

20位地址.8086是16位處理器.

24多態。overload和override的區別。

答:多態:接口的多種不同的實現方式即為多態

重載在相同范圍(同一個類中),函數名字相同,

參數不同,virtual關鍵字可有可無。

覆蓋是指派生類函數覆蓋基類函數,不同的范圍,

函數名字相同,參數相同,基類函數必須有

virtual關鍵字。

?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完成程序,實現對數組的降序排序

#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++)〃曾經在這兒出界

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++)〃曾經在這兒出界

(

if(arr[k]<arr[k+1])

(

temp=arr[k];

arr[k]=arr[k+1];

arr[k+1]=temp;

資料僅供參考

27費波那其數列,1,1,2,3,5……編寫程序

求第十項。能夠用遞歸,也能夠用其它方法,但

要說明你選擇的理由。

非遞歸

#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下列程序運行時會崩潰,請找出錯誤并改正,

而且說明原因。

#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,數字任意給出

}

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

設計函數

37.intatoi(char*s)o

38.inti=(j=4,k=8,l=16,m=32);printf("%d”,i);輸

資料僅供參考

出是多少?

39.解釋局部變量、全局變量和靜態變量的含義。

40.解釋堆和棧的區別。

棧區(stack)-由編譯器自動分配釋放,存放

函數的參數值,局部變量的值等。其操作方式類

似于數據結構中的棧。

堆:一般由程序員分配釋放,若程序員不釋放,

程序結束時可能由OS回收。注意它與數據結構

中的堆是兩回事,分配方式倒是類似于鏈表.

41.論述含參數的宏與函數的優缺點。

1.函數調用時,先求出實參表示式的值,然后帶

入形參。而使用帶參的宏只是進行簡單的字符替

換。

2.函數調用是在程序運行時處理的,分配臨時的

內存單元;而宏展開則是在編譯時進行的,在展

開時并不分配內存單元,不進行值的傳遞處理,

資料僅供參考

也沒有“返回值”的概念。

3.對函數中的實參和形參都要定義類型,二者的

類型要求一致,如不一致,應進行類型轉換;而

宏不存在類型問題,宏名無類型,它的參數也無

類型,只是一個符號代表,展開時帶入指定的字

符即可。宏定義時,字符串能夠是任何類型的數

據。

4,調用函數只可得到一個返回值,而用宏能夠設

法得到幾個結果。

5,使用宏次數多時,宏展開后源程序長,因為每

展開一次都使程序增長,而函數調用不使源程序

變長。

6.宏替換不占運行時間,只占編譯時間;而函數

調用則占運行時間(分配單元、保留現場、值傳

遞、返回)。

一般來說,用宏來代表簡短的表示式比較合適。

42.以下三條輸出語句分別輸出什么?[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

都是字符數組,每個都有其自己的存儲區,它們

的值則是各存儲區首地址,不等;str3和str4

同上,只是按const語義,它們所指向的數據區

不能修改。str5和str6并非數組而是字符指針,

并不分配存儲區,其后的“abc”以常量形式存于

靜態數據區,而它們自己僅是指向該區首地址的

指針,相等。

資料僅供參考

43.非C++內建型別A和B,在哪幾種情況下B

能隱式轉化為A?[C++中等]

答:BD

a.classB:publicA{.......}〃B公有繼承自A,能

夠是間接繼承的

b.classB{operatorA();}//B實現了隱式轉化為

A的轉化

c.classA{A(constB&);}//A實現了

non-explicit的參數為B(能夠有其它帶默認值的

參數)構造函數

d.A&operator=(constA&);//賦值操作,雖不

是正宗的隱式類型轉換,但也能夠勉強算一個

44.以下代碼中的兩個sizeof用法有問題嗎?[C

易]

voidUpperCase(charstr[])//將str中的小寫

字母轉換成大寫字母

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字符長度為:"?

sizeof(str)/sizeof(str[0])?endl;

UpperCase(str);

cout?str?endl;

45.以下代碼有什么問題?[C難]

voidchar2Hex(charc)//將字符以16進制表示

(

charch=c/OxlO+'O';if(ch>'9')ch+=('A'-'g'-l);

charcl=c%OxlO+'O';if(cl>'9')cl+=

cout?ch?cl?'

)

charstr[]="Ilove中國";

資料僅供參考

for(size_ti=0;i<strlen(str);++i)

char2Hex(str[i]);

cout?endl;

46.以下代碼有什么問題?[C++易]

structTest

(

Test(int){}

Test(){}

voidfun(){}

};

voidmain(void)

(

Testa(l);

a.fun();

Testb();

b.fun();

資料僅供參考

***Testb();〃定義了一個函數

47.以下代碼有什么問題?[C++易]

cout?(true?l:"l")?endl;

8.以下代碼能夠編譯經過嗎,為什么?[C++易]

unsignedintconstsizel=2;

charstrl[sizel];

unsignedinttemp=0;

cin?temp;

unsignedintconstsize2=temp;

charstr2[size2];

48.以下代碼中的輸出語句輸出。嗎,為什么?

[C++易]

structCLS

資料僅供參考

intmi;

CLS(inti):m_i(i){}

CLS()

(

CLS(O);

)

);

CLSobj;

cout?obj.m_i?endl;

49.C++中的空類,默認產生哪些類成員函數?

[C++易]

答:

classEmpty

public:

資料僅供參考

Empty();//缺省構造函數

Empty(constEmpty&);//拷貝構造函數

~Empty();〃析構函數

Empty&operator=(constEmpty&);//賦值運算

Empty*operator&();//取址運算符

constEmpty*operator&()const;//取址運算符

const

);

50.以下兩條輸出語句分別輸出什么?[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數組的方法有什么錯誤?

[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數組

cout?array[i]?endl;

資料僅供參考

52.以下代碼有什么問題?[STL易]

typedefvectorIntArray;

IntArrayarray;

array.push_back(1);

array.push_back(2);

array.push_back(2);

array.push_back(3);

//刪除array數組中所有的2

for(lntArray::iteratoritor=array.begin();

itor!=array.end();++itor)

(

if(2==*itor)array.erase(itor);

}

53.寫一個函數,完成內存之間的拷貝。[考慮問

題是否全面]

答:

資料僅供參考

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線程與進程的區別

進程就是一個應用程序在處理機上的一次執

行過程,它是一個動態的概念,而線程是進程中

的一部分,進程包含多個線程在運行。

55:請你分別劃劃0SI(開放式系統互聯)的七

資料僅供參考

層網絡結構圖,和TCP/IP的五層結構圖?

加毒/安全技術OSI/梅披層安全協議

應用程序網應用相關

/保密網關

信淑加密

SOCKS

動右包過濾ssyns

能塞包過濾IPSec

PPTP/L2IP

茴順密

應用層(applicationlayer)

傳輸層(transportlayer)

網絡層(networklayer)

數據鏈路層(datalinklayer)

物理層(physicallayer)

56:請你詳細的解釋一下IP協議的定義,在哪

個層上面,主要有什么作用?TCP與UDP呢?

IP協議是網絡層的協議,它實現了Internet中

自動路由的功能,即尋徑的功能,TCP協議是一

個傳輸性的協議它向下屏蔽了IP協議不可靠傳

輸的特性,向上提供一個可靠的點到點的傳輸,

UDP提供的是一種無連接的服務,主要考慮到很

多應用不需要可靠的連接,但需要快速的傳輸

資料僅供參考

57:請問交換機和路由器分別的實現原理是什么?

分別在哪個層次上面實現的?

交換機用在局域網中,交換機經過記錄局域網

內各節點機器的MAC地質(物理地址)就能夠實

現傳遞報文,無需看報文中的IP地址。路由器識

別不同網絡的方法是經過識別不同網絡的網絡

ID號(IP地址的高端部分)進行的,因此為了保證

路由成功,每個網絡都必須有一個唯一的網絡編

號。路由器經過察看報文中IP地址,來決定路

徑,向那個子網(下一跳)路由,也就是說交換機

工作在數據鏈路層看MAC地址,路由器工作在

網際層看IP地址

可是由于現在網絡設備的發展,很多設備既有交

換機的功能有由路由器的功能(交換試路由器)使

得兩者界限越來越模糊。

58:請問C++的類和C里面的struct有什么區別?

資料僅供參考

(1)C++類中屬性默認訪問類型為private,而C中

的struct默認的訪問類型為public

(2)c++類能夠有繼承,虛函數,多態,而C中struct

不能夠。

C++的class具有數據封裝功能,其包含屬性訪問

級別能夠為private,public和protect,還具有實現

類接口功能和輔助功能的操作函數,而struct屬

性訪問權限只有public,沒有數據封裝功能,也

就沒有實現信息隱藏這一面向對象的思想的機

制,struct本身不含有操作函數,只有數據。

59:請講一講析構函數和虛函數的用法和作用?

析構函數是在類對象死亡時由系統自動調用,

其作用是用來釋放對象的指針數據成員所指的

動態空間,如果在構造函數中,你申請了動態空

間,那么為了避免引起程序錯誤,你必須在析構

函數中釋放這部分內存空間。如果基類的函數用

virtual修飾,成為虛函數,則其派生類相應的重

載函數仍能繼承該虛函數的性質,虛函數進行動

態聯編,也即具有多態性,也就是派生類能夠改

變基類同名函數的行為,在面向對象世界中,多

態是最強大的機制,虛函數就是這一機制的C++

實現方式。

資料僅供參考

60:全局變量和局部變量有什么區別?實怎么實

現的?操作系統和編譯器是怎么知道的?

全局變量是整個程序都可訪問的變量,誰都能

夠訪問,生存期在整個程序從運行到結束(在程

序結束時所占內存釋放),而局部變量存在于模

塊(子程序,函數)中,只有所在模塊能夠訪問,

其它模塊不可直接訪問,模塊結束(函數調用完

畢),局部變量消失,所占據的內存釋放。

全局變量分配在全局數據段而且在程序開始

運行的時候被加載.局部變量則分配在堆棧里

面。

61:一些寄存器的題目,主要是尋址和內存管理

等一些知識。

2、交換機用在局域網中,交換機經過紀錄局域

網內各節點機器的MAC地質(物理地址)就能夠

實現傳遞報文,無需看報文中的IP地質。路由器

識別不同網絡的方法是經過識別不同網絡的網

絡ID號(IP地址的高端部分)進行的,因此為了保

資料僅供參考

證路由成功,每個網絡都必須有一個唯一的網絡

編號。路由器經過察看報文中IP地址,來決定

路徑,向那個子網(下一跳)路由,也就是說交換

機工作在數據鏈路層看MAC地址,路由器工作

在網際層看IP地質

可是由于現在網絡設備的發展,很多設備既有交

換機的功能有由路由器的功能(交換試路由器)使

得兩者界限越來越模糊。

3、IP協議是網絡層的協議,它實現了Internet

中自動路由的功能,即尋徑的功能,TCP協議是

一個傳輸性的協議它向下屏蔽了IP協議不可靠

傳輸的特性,向上提供一個可靠的點到點的傳輸,

UDP提供的是一種無連接的服務,主要考慮到很

多應用不需要可靠的連接,但需要快速的傳輸。

4、

Testb();〃定義了一個函數

62:8086是多少位的系統?在數據總線上是怎么

實現的?

資料僅供參考

?IBM?

63.怎樣用最快的方法判斷鏈表是否有環?

設置兩個指針,開始都指向鏈表頭,然后其中

一個指針每次向前走一步,另一個指針每次向前

走兩步,如果快的遇到NULL了,證明該鏈表中

沒有環,如果有環,快的指針每次都要比慢的多

走一步,最終兩個指針會相遇,

64.C++中引用和指針有什么不同?指針加上什么

限制等于引用?

答:1引用被創立的時候必須被初始化,而指

針不是必須的。2引用在創立后就不能改變引用

的關系,而指針在初始化后能夠隨時指向其它的

變量或對象。3沒有NULL引用,引用必須與合法

的存儲單元關聯,而指針能夠是NULL。

65,做的項目,遇到的困難,怎樣解決?

資料僅供參考

69.操作符重載

classCMyObject:pulicCObject

(

Public:

CMyObject();

CMyObject&operator=(constCMyObject&my);

private:

CStringstrName;

intnld:

};

請重載賦值操作符

70.鏈表

StructstructList

資料僅供參考

intvalue;

structList*pHead;

StructLinkedList*pMyList;

請編寫刪除鏈表的頭、尾和第n個節點的程序

7L用SocketAPI制作一個聊天程序,通訊協議使

用tcp/ip。要求有簡單界面即可,支持多人聊天。

72.如果有過工作經驗,請說明在先前公司的工

作以及離職原因(如無,請說明畢業后的個人展

望)

資料僅供參考

73對于C++中類(class)與結構(struct)的描述正

確的為:

A,類中的成員默認是private的,當是能夠聲明為

public,private和protected,結構中定義的成員默

認的都是public;

B,結構中不允許定義成員函數,當是類中能夠定

義成員函數;

C,結構實例使用malloc()動態創立,類對象使用

new操作符動態分配內存;

D,結構和類對象都必須使用new創立;

E,結構中不能夠定義虛函數,當是類中能夠定義

虛函數.

F,結構不能夠存在繼承關系,當是類能夠存在繼

承關系.

答:A,D,F

74,兩個互相獨立的類:ClassA和ClassB,都各自

資料僅供參考

定義了非靜態的公有成員函數PublicFunc()和

非靜態的私有成員函數PrivateFunc();

現在要在ClassA中增加定義一個成員函數

ClassA::AdditionalPunction(ClassAa,ClassBb);則

能夠在AdditionalPunction(ClassAx,ClassBy)的實

現部分(函數功能體內部)

出現的合法的表示是最全的是:

A,x.PrivateFunc();x.PublicFuncO;y.PrivateFunc();y.

PublicFunc();

B^x.PrivateFuncO^.PublicFuncO^.PublicFuncO;

C^.PrivateFuncO^.PrivateFuncO^.PublicFuncO;

D^.PublicFuncOjy.PublicFuncO;

答:B

75,C++程序下列說法正確的有:

A,對調用的虛函數和模板類都進行遲后編譯.

B,基類與子類中函數如果要構成虛函數,除了要

求在基類中用virtual聲名,而且必須名字相同且

參數類型相同返回類型相同

資料僅供參考

C,重載的類成員函數都必須要:或者返回類型不

同,或者參數數目不同,或者參數序列的類型不

同.

D,靜態成員函數和內聯函數不能是虛函數,友員

函數和構造函數也不能是虛函數,可是析構函數

能夠是虛函數.

答:A

76,C++中的類與結構的區別?

77,構造函數和析構函數是否能夠被重載,為什

么?

答:構造函數能夠被重載,析構函數不能夠被重

載。因為構造函數能夠有多個且能夠帶參數,而

析構函數只能有一個,且不能帶參數。

資料僅供參考

78,一個類的構造函數和析構函數什么時候被調

用,是否需要手工調用?

答:構造函數在創立類對象的時候被自動調用,

析構函數在類對象生命期結束時,由系統自動調

用。

1#include“filename.h”和#include

<filename.h>的區另U?

答:#include"filename.h”表明該文件是用戶

提供的頭文件,查找該文件時從當前文件目錄開

始;#include〈filename.h>表明這個文件是一個

工程或標準頭文件,查找過程會檢查預定義的目

錄。

2頭文件的作用是什么?

答:一、經過頭文件來調用庫功能。在很多場合,

源代碼不便(或不準)向用戶公布,只要向用戶

資料僅供參考

提供頭文件和二進制的庫即可。用戶只需要按照

頭文件中的接口聲明來調用庫功能,而不必關心

接口怎么實現的。編譯器會從庫中提取相應的代

碼。

二、頭文件能加強類型安全檢查。如果某個接口

被實現或被使用時,其方式與頭文件中的聲明不

一致,編譯器就會指出錯誤,這一簡單的規則能

大大減輕程序員調試、改錯的負擔。

3C++函數中值的傳遞方式有哪幾種?

答:C++函數的三種傳遞方式為:值傳遞、指針

傳遞和引用傳遞。

4內存的分配方式的分配方式有幾種?

答:一、從靜態存儲區域分配。內存在程序編譯

的時候就已經分配好,這塊內存在程序的整個運

行期間都存在。例如全局變量。

二、在棧上創立。在執行函數時,函數內局部變

量的存儲單元都能夠在棧上創立,函數執行結束

資料僅供參考

時這些存儲單元自動被釋放。棧內存分配運算內

置于處理器的指令集中,效率很高,可是分配的

內存容量有限。

三、從堆上分配,亦稱動態內存分配。程序在運

行的時候用malloc或new申請任意多少的內存,

程序員自己負責在何時用free或delete釋放內

存。動態內存的生存期由我們決定,使用非常靈

活,但問題也最多。

5實現雙向鏈表刪除一個節點P,在節點P后插

入一個節點,寫出這兩個函數;

答:雙向鏈表刪除一個節點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;

你已經將數據項"?t->data?"j?ll^

"?endl;

ptr->next=ptr->next->next;

length-;

deletet;

}

在節點P后插入一個節點:

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分即可進入復試

一、請填寫BOOL,float,指針變量與“零值”

比較的if語句。(10分)

資料僅供參考

提示:這里“零值”能夠是0,0.0,FALSE或者“空

指針”。例如int變量n與“零值”比較的if語

句為:

if(n==0)

if(n!=0)

以此類推。

請寫出BOOLflag與“零值”比較的if語句:

請寫出floatx與“零值”比較的if語句:

請寫出char*p與“零值”比較的if語句:

二、以下為WindowsNT下的32位C++程序,請

計算sizeof的值(10分)

charstr[]="Hello";

char*p=str;

intn=10;

請計算

sizeof(str)=

sizeof(p)=

資料僅供參考

sizeof(n)=voidFunc(charstr[100])

(

請計算

sizeof(str)=

}

void*p=malloc(100);

請計算

sizeof(p)=

、簡答題(25分)

1、頭文件中的ifndef/define/endif干什么用?

防止頭文件重復定義。

2、#include<filename.h>和#include

“filename,h”有什么區別?

答:#include"filename.h”表明該文件是

用戶提供的頭文件,查找該文件時從當前文件目

錄開始;#include〈filename.h>表明這個文件是

一個工程或標準頭文件,查找過程會檢查預定義

的目錄。

資料僅供參考

3、const有什么用途?(請至少說明兩種)

在C/C++中,(1)能夠定義const常量,(2)

修飾函數的返回值和形參;

在C++中,還能夠修飾函數的定義體,定義類的

const成員函數。被const修飾的東西受到強制J保

護,能夠預防意外的變動,提高了程序的健壯性。

4、在C++程序中調用被C編譯器編譯后的函

數,為什么要加extern“C”聲明?

答:C++語言支持函數重載,C語言不支持

函數重載。函數被C++編譯后在庫中的名字與C

語言不同。假設某個函數的原型為:voidfoo(i

ntx,inty);該函數被C編譯器編譯后在庫中的

名字為_foo,而C++編譯器則會產生像_foo_i

nt_int之類的名字。C++提供了C連接交換指定

符號extern”〃來解決名字匹配問題。

5、請簡述以下兩個for循環的優缺點

//第一個

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();

)

優點:N次中,每次都要對8ndition進行判斷

缺點:優點:一次判斷condition后,對something

或Otherthing執行N次

資料僅供參考

缺點:

四、有關內存的思考題(20分)

voidGetMemory(char*p)

(

p=(char*)malloc(100);

)

voidTest(void)

(

char*str=NULL;

GetMemory(str);

strcpy(str,"helloworld");

printf(str);

請問運行Test函數會有什么樣的結果?

資料僅供參考

char*GetMemory(void)

(

charp[]="helloworld";

returnp;

}

voidTest(void)

(

char*str=NULL;

str=GetMemory();

printf(str);

}

請問運行Test函數會有什么樣的結果?

VoidGetMemory2(char**p,intnum)

資料僅供參考

*p=(char*)malloc(num);

)

voidTest(void)

(

char*str=NULL;

GetMemory(&str,100);

strcpy(str,"hello");

printf(str);

)

請問運行Test函數會有什么樣的結果?

voidTest(void)

(

char*str=(char*)malloc(lOO);

strcpy(str,"hello");

free(str);

資料僅供參考

if(str!=NULL)

strcpy(str,"world");

printf(str);

}

}

請問運行Test函數會有什么樣的結果?

五、編寫strcpy函數(10分)

已知strcpy函數的原型是

char*strcpy(char*strDest,constchar*strSrc);

其中strDest是目的字符串,strSrc是源字符串。

(1)不調用C++/C的字符串庫函數,請編寫函

數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的內容復制到strDest,

為什么還要char*類型的返回值?

因為該函數的還能夠把復制的字符串首地址

指針給其它的指針,而且這種需要也是有用的。

六、編寫類String的構造函數、析構函數和賦值

資料僅供參考

函數(25分)

已知類String的原型為:

classString

(

public:

String(constchar*str=NULL);//普通構造函

String(constString&other);//拷貝構造函數

~String(void);//析構函數

String&operate=(constString&other);//賦

值函數

private:

char*m_data;//用于保存字符串

};

請編寫String的上述4個函數。

資料僅供參考

〃答案一并給出

一、請填寫BOOL,float,指針變量與“零值”

比較的if語句。(10分)

請寫出BOOLflag與“零值”比較的if語句。

(3分)

標準答案:

if(flag)

if“flag)如下寫法均屬不良風格,不得分。

if(flag==TRUE)

if(flag==1)

if(flag==FALSE)

if(flag==0)

請寫出floatx與“零值”比較的if語句。(4

分)

資料僅供參考

標準答案示例:

constfloatEPSINON=0.00001;

if((x>=-EPSINON)&&(x<=EPSINON)

不可將浮點變量用或“!=”與數字比較,

應該設法轉化成或"<=”此類形式。

如下是錯誤的寫法,不得分。

if(x==0.0)

if(x!=0.0)

請寫出char*p與“零值”比較的if語句。,

分)

標準答案:

if(p==NULL)

if(p!:NULL)如下寫法均屬不良風格,不得分。

if(p==0)

if(p!=0)

資料僅供參考

if(P)

if(!)

二、以下為WindowsNT下的32位C++程序,請

計算sizeof的值(10分)

charstr[]="Hello”;

char*p=str;

intn=10;

請計算

sizeof(str)=6(2分)

sizeof(p)=4(2分)

sizeof(n)=4(2分)

voidFunc(charstr[100])

資料僅供參考

請計算

sizeof(str)=4(2分)

void*p=malloc(100);

請計算

sizeof(p)=4(2分)

三、簡答題(25分)

1、頭文件中的ifndef/define/endif干什么用?

(5分)

答:防止該頭文件被重復引用。

2、#include<filename.h>和#include

“filename.h”有什么區別?(5分)

資料僅供參考

答:對于#include<filename.h>,編譯器從標

準庫路徑開始搜索filename.h

對于#include“filename.h”,編譯器從用戶

的工作路徑開始搜索filename.h

3、const有什么用途?(請至少說明兩種)(5

分)

答:(1)能夠定義const常量

(2)const能夠修飾函數的參數、返回值,甚至

函數的定義體。被const修飾的東西都受到強制

保護,能夠預防意外的變動,能提高程序的健壯

性。

4、在C++程序中調用被C編譯器編譯后的函數,

為什么要加extern“C”?(5分)

答:C++語言支持函數重載,C語言不支持函數

重載。函數被C++編譯后在庫中的名字與C語言

的不同。假設某個函數的原型為:voidfoo(intx,

inty);該函數被C編譯器編譯后在庫中的名字為

資料僅供參考

_foo,而C++編譯器則會產生像_foo_int_int之類

的名字。C++提供了C連接交換指定符號extern

來解決名字匹配問題。

5、請簡述以下兩個for循環的優缺點(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();

)

優點:程序簡潔

缺點:多執行了N-1次邏輯判斷,而且打斷了循

環“流水線”作業,使得編譯器不能對循環進行

優化處理,降低了效率。

優點:循環的效率高

缺點:程序不簡潔

資料僅供參考

四、有關內存的思考題(每小題5分,共20分)

voidGetMemory(char*p)

(

p=(char*)malloc(100);

)

voidTest(void)

(

char*str=NULL;

GetMemory(str);

strcpy(str,"helloworld");

printf(str);

請問運行Test函數會有什么樣的結果?

資料僅供參考

答:程序崩潰。

因為GetMemory并不能傳遞動態內存,

Test函數中的str一直都是NULL。

strcpy(str,"helloworld");將使程序崩潰。

char*GetMemory(void)

(

charp[]="helloworld";

returnp;

)

voidTest(void)

(

char*str=NULL;

str=GetMemory();

printf(str);

請問運行Test函數會有什么樣的結果?

資料僅供參考

答:可能是亂碼。

因為GetMemory返回的是指向“棧內存”的指

針,該指針的地址不是NULL,但其原現的內容

已經被清除,新內容不可知。

voidGetMemory2(char**p,intnum)

(

*p=(char*)malloc(num);

}

voidTest(void)

(

char*str=NULL;

GetMemory(&strz100);

strcpy(str,"hello");

printf(str);

}

請問運行Test函數會有什么樣的結果?

答:

資料僅供參考

(1)能夠輸出hello

(2)內存泄漏

voidTest(void)

(

char*str=(char*)malloc(lOO);

strcpy(str,"hello");

free(str);

if(str!=NULL)

(

strcpy(str,"world");

printf(str);

)

)

請問運行Test函數會有什么樣的結果?

答:篡改動態內存區的內容,后果難以預料,非

常危險。

資料僅供參考

因為free(str);之后,str成為野指針,

if(str!=NULL)語句不起作用。

"28下列程序運行時會崩潰,請找出錯誤并改正,

而且說明原因。”

//voidappend(intN);

〃指針沒有初始化:

//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,數字任意給出

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.起泡排序的時間復雜度是多少?

說出至少

溫馨提示

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

評論

0/150

提交評論