XX計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題_第1頁
XX計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題_第2頁
免費(fèi)預(yù)覽已結(jié)束,剩余15頁可下載查看

下載本文檔

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

文檔簡介

1、面試準(zhǔn)備題(包括高質(zhì)量C+題)const char*, charconst*, char*const事實(shí)上這個(gè)概念誰都有只是三種聲明方式非常相似很容易記混。Bjarne在他的The C+ Programming Language里面給出過一個(gè)助記的方法: 把一個(gè)聲明從右向左讀。Char * Const Cp; ( *讀成pointer to )Cp is a Const pointer to CharConst Char * p;p is a pointer to Const Char;Char Const * p;同上因?yàn)镃+里面沒有con st*的運(yùn)算符,所以con st只能屬于前面的類型

2、。下面這個(gè)程序執(zhí)行后會(huì)有什么錯(cuò)誤或者效果:#define MAX 255int main()unsigned char AMAX,i;for (i=0;i=MAX;i+)Ai=i;解答:MAX=255數(shù)組A的下標(biāo)圍為:0.MAX-1,這是其一.其二.當(dāng)i循環(huán)到255時(shí),循環(huán)執(zhí)行:A255=255;這句本身沒有問題.但是返回for (i=0;i=MAX;i+)語句時(shí),由于unsigned char的取值圍在(0.255),i+以后i又為0了.無限循環(huán)下去注:char類型為一個(gè)字節(jié),取值圍是-128,127,unsigned char 0 ,255編寫用C語言實(shí)現(xiàn)的求n階階乘問題的遞歸算法:lon

3、g int fact(int n)int x;long int y;if(nhigh) return -1;mid=(low+high)/2; if(x=amid) return mid;if(xamid) return(BSearch(a,x,low,mid-1);else return(BSearch(a,x,mid+1,high);2、非遞歸方法實(shí)現(xiàn):int BSearch(elemtype a,keytype key,int n)int low,high,mid;low=0;high=n-1; while(low=high)mid=(low+high)/2;if(amid.key=ke

4、y) return mid;else if(amid.key2解:int f(int n)int i,s,s1,s2;s1=1;/*s1s2=1;/*s2s=1;用于保存f(n-1)的值*/用于保存f(n-2)的值*/for(i=3;i= - EPSINON) & (x =”或“=”此 類形式。如下是錯(cuò)誤的寫法,不得分。if (x = 0.0) if (x != 0.0)請寫出char *p與“零值”比較的if語句。(3分) 標(biāo)準(zhǔn)答案:if (p = NULL) if (p != NULL)如下寫法均屬不良風(fēng)格,不得分。if (p = 0) if (p != 0) if (p) if (!)二

5、、以下為Windows NT下的32位C+程序,請計(jì)算sizeof的值(10分)void Func ( char str100)請計(jì)算sizeof( str ) = 4(2分)char str =“Hello”;char *p = str ;int n = 10;請計(jì)算sizeof (str ) = 6sizeof ( p ) = 4sizeof ( n ) = 4(2分)(2分)(2分)void *p = malloc( 100 );請計(jì)算sizeof ( p ) = 4(2分)三、簡答題(25分)1、頭文件中的ifndef/define/endif干什么用?(5分)答:防止該頭文件被重復(fù)引

6、用。2、#include 和#include“filename.h” 有什么區(qū)別?(5分) 答:對(duì)于#include ,編譯器從標(biāo)準(zhǔn)庫路徑開始搜索filename.h對(duì)于#include“filename.h” ,編譯器從用戶的工作路徑開始搜索filename.h3、const有什么用途?(請至少說明兩種)(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+語言支持函數(shù)重載,

7、C語言不支持函數(shù)重載。函數(shù)被C+編譯后在庫中的名字與C語言的不同。假設(shè)某個(gè)函數(shù)的原型為:void foo(int x, int y);該函數(shù)被C編譯器編譯后在庫中的名字為_foo,而C+編譯器則會(huì)產(chǎn)生像_foo_int_int之類的名字。C+提供了C連接交換指定符號(hào)extern“C”來解決名字匹配問題。5、請簡述以下兩個(gè)for循環(huán)的優(yōu)缺點(diǎn)(5分)for (i=0; iN; i+)if (condition) DoSomething();elseDoOtherthing();if (condition)for (i=0; iN; i+) DoSomething();elsefor (i=0; i

8、N; i+) DoOtherthing();優(yōu)點(diǎn):程序簡潔 缺點(diǎn):多執(zhí)行了N-1次邏輯判斷,并且 打斷了循環(huán)“流水線”作業(yè),使得編譯 器不能對(duì)循環(huán)進(jìn)行優(yōu)化處理,降低了效率。優(yōu)點(diǎn):循環(huán)的效率高 缺點(diǎn):程序不簡潔四、有關(guān)存的思考題(每小題5分,共20分)void GetMemory(char *p)p = (char *)malloc(100);void Test(void)char *str = NULL;GetMemory(str);strcpy(str, hello world);printf(str);請問運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果? 答:程序崩潰。因?yàn)镚etMemory并不能傳遞動(dòng)

9、態(tài)存,Test函數(shù)中的str一直都是NULL。strcpy(str, hello world);將使程序崩 潰。char *GetMemory(void)char p = hello world;return p;void Test(void)char *str = NULL;str = GetMemory();printf(str);請問運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果? 答:可能是亂碼。因?yàn)镚etMemory返回的是指向“棧存” 的指針,該指針的地址不是NULL,但其原現(xiàn)的容已經(jīng)被清除,新容不可知。void GetMemory2(char *p, int num)*p = (char *)

10、malloc(num);void Test(void)char *str = NULL;GetMemory(&str, 100); strcpy(str, hello);printf(str);請問運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果? 答:(1)能夠輸出hello(2)存泄漏void Test(void)char *str = (char *) malloc(100); strcpy(str,“hello”); free(str);if(str != NULL)strcpy(str,“world”);printf(str);請問運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果? 答:篡改動(dòng)態(tài)存區(qū)的容,后果難以預(yù)

11、 料,非常危險(xiǎn)。因?yàn)閒ree(str);之后,str成為野指針,if(str != NULL)語句不起作用。五、編寫strcpy函數(shù)(10分)已知strcpy函數(shù)的原型是char *strcpy(char *strDest, const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。(1)不調(diào)用C+/C的字符串庫函數(shù),請編寫函數(shù)strcpy char *strcpy(char *strDest, const char *strSrc);assert(strDest!=NULL) & (strSrc !=NULL); / 2分char *address =

12、strDest; / 2分while( (*strDest+ = * strSrc+) !=0) / 2分NULL ;return address ; / 2分(2)strcpy能把strSrc的容復(fù)制到strDest,為什么還要char *答:為了實(shí)現(xiàn)鏈?zhǔn)奖磉_(dá)式。/ 2分例如int length = strlen( strcpy( strDest,“hello world”) );類型的返回值?六、編寫類String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)(25分) 已知類String的原型為:class Stringpublic:String(const char *str = NULL); /普通

13、構(gòu)造函數(shù)String(const String &other); /拷貝構(gòu)造函數(shù) String(void); /析構(gòu)函數(shù)String & operate =(const String &other); /賦值函數(shù)private:char *m_data; /用于保存字符串;請編寫String的上述4個(gè)函數(shù)。 標(biāo)準(zhǔn)答案:/ String的析構(gòu)函數(shù)String:String(void) / 3分delete m_data;/由于m_data是部數(shù)據(jù)類型,也可以寫成delete m_data;/ String的普通構(gòu)造函數(shù)String:String(const char *str) / 6if(st

14、r=NULL)m_data = new char1; /若能加*m_data =0;elseint length = strlen(str);m_data = new charlength+1; /strcpy(m_data, str);/拷貝構(gòu)造函數(shù)String:String(const String &other) / 3int length = strlen(other.m_data); m_data= new charlength+1; / strcpy(m_data,other.m_data);/賦值函數(shù)String & String:operate =(const String&o

15、ther) / 13/ (1)檢查自賦值/ 4分if(this = &other) return *this;/ (2)釋放原有的存資源/ 3分delete m_data;/(3)分配新的存資源,并復(fù)制容/ 3分int length = strlen(other.m_data);m_data = new charlength+1; /若能加NULL判斷則更好strcpy(m_data, other.m_data);/(4)返回本對(duì)象的引用/ 3分return *this;分NULL判斷則更好若能加NULL判斷則更好分若能加NULL判斷則更好winsocket編程#include #includ

16、e void main()WORDwVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1,1);err = WSAStartup(wVersionRequested,&wsaData); if( err != 0)return;if(LOBYTE( wsaData.wVersion ) != 1|HIBYTE( wsaData.wVersion) != 1)WSACleanup();return;SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_I

17、N addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);listen(sockSrv,5);SOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);while(1)SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);ch

18、ar sendBuf100;sprint(sendBuf,Welcome %s to .95wangming.,inet_ntoa(addrClient.sin_addr);send(sockConn,sendBuf,strlen(sendBuf)+1,0);char recvBuf100;recv(sockConn,recvBuf);printf(%sn,recvBuf);closesocket(sockConn);WSACleanup();注:這是Server端;File-New-Win32 Console Application,工程名:TcpSrv;然后,F(xiàn)ile-New-C+ Sou

19、rce File, 文 件 名 :TcpSrv; 在 該 工 程 的Setting的Link的Object/library modules項(xiàng)要加入ws2_32.lib#include #include void main()WORDwVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1,1);err = WSAStartup(wVersionRequested,&wsaData); if( err != 0)return;if(LOBYTE( wsaData.wVersion ) != 1|HIBYTE(

20、 wsaData.wVersion) != 1)WSACleanup();return;SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1); addrSrv.sin_family=AF_INET;addrSrv.sin_porthtons(6000); connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);char recvBuf100;recv(sock

21、Client,recvBuf,100,0); printf(%sn,recvBuf);send(sockClient,This is zhangsan,strlen(This is zhangsan)+1,0);closesocket(sockClient);WSACleanup();注:這是Client端;File-New-Win32 Console Application,工程名:TcpClient;然后,F(xiàn)ile-New-C+Source File,文件名:TcpClient;同理,在該工程的Setting的Link的Object/library modules項(xiàng)要加入ws2_32.li

22、bC#include class humanpublic:human() human_num+; static int human_num;human() human_num-;print();void print()couthuman num is: human_numendl;protected: private:;int human:human_num = 0;human f1(human x)x.print();return x;int main(int argc, char* argv)human h1;h1.print();human h2 = f1(h1);h2.print();

23、return 0;輸出:110012分析:human h1; /調(diào)用構(gòu)造函數(shù),-hum_num = 1;h1.print(); /輸出:human is 1 human h2 = f1(h1);/再調(diào)用f1(h1)的過程中,由于函數(shù)參數(shù)是按值傳遞對(duì)象,調(diào)用默認(rèn)的復(fù) 制構(gòu)造函數(shù),它并沒有對(duì)hum_num+所以hum_num仍=1,所以x.print()輸出:human is 1;在推出f1函數(shù)時(shí),要銷毀X,調(diào)用析構(gòu)函數(shù)(human_num-),輸出:human is 0(,由于該函數(shù) 返回一個(gè)human對(duì)象,所以又調(diào)用默認(rèn)構(gòu)造函數(shù),創(chuàng)建一個(gè)臨時(shí)對(duì)象(human_num = 0;),把臨 時(shí)對(duì)象賦

24、給h2,又調(diào)用默認(rèn)構(gòu)造函數(shù)( human_num = 0);h2.print(); /輸出: human is 0;/在退出main()函數(shù)是,先銷毀h2,調(diào)用析構(gòu)函數(shù)(human_num-),輸出human_num is -1然后銷毀h1,調(diào)用析構(gòu)函數(shù)(-),輸出human_num is -2冒泡排序:void BubbleSort(elemtype x,int n)int i,j;elemtype temp;for(i=1;in;i+)for(j=0;jxj+1.key)temp=xj;xj=xj+1; xj+1=temp;c語言 文件讀寫#include stdio.hmain()FIL

25、E *fp;char ch,filename10;scanf(%s,filename);if(fp=fopen(filename,w)=NULL)printf(cannt open filen);exit(0);ch=getchar();while(ch!=#)fputc(ch,fp);putchar(ch);ch=getchar();fclose(fp);c指針int *pn;指針數(shù)組,每個(gè)元素均為指向整型數(shù)據(jù)的指針。int (*)pn;- p為指向一維數(shù)組的指針,這個(gè)一維數(shù)組有n個(gè)整型數(shù)據(jù)。int *p();-函數(shù)帶回指針,指針指向返回的值。int (*)p();-p為指向函數(shù)的指針。Wi

26、ndows的消息機(jī)制1Windows是一個(gè)消息(Message)驅(qū)動(dòng)系統(tǒng)。Windows的消息提供了應(yīng)用程序之間、應(yīng)用程序 與Windows系統(tǒng)之間進(jìn)行通信的手段。應(yīng)用程序想要實(shí)現(xiàn)的功能由消息來觸發(fā),并且靠對(duì)消息的響應(yīng)和處理來完成。Windows系統(tǒng)中有兩種消息隊(duì)列:系統(tǒng)消息隊(duì)列和應(yīng)用程序消息隊(duì)列。計(jì)算機(jī)的所有 輸入設(shè)備由Windows監(jiān)控。當(dāng)一個(gè)事件發(fā)生時(shí),Windows先將輸入的消息放入系統(tǒng)消息隊(duì)列 中,再將消息拷貝到相應(yīng)的應(yīng)用程序消息隊(duì)列中。 應(yīng)用程序的消息處理程序?qū)⒎磸?fù)檢測消息 隊(duì)列, 并把檢測到的每個(gè)消息發(fā)送到相應(yīng)的窗口函數(shù)中。 這便是一個(gè)事件從發(fā)生至到達(dá)窗口 函數(shù)必須經(jīng)歷的過程。必

27、須注意的是, 消息并非是搶占性的, 無論事件的緩急, 總是按照到達(dá)的先后派對(duì),依次處理(一些系統(tǒng)消息除外) ,這樣可能使一些實(shí)時(shí)外部事件得不到及時(shí)處理。Windows的消息機(jī)制2Windows中的消息是放在對(duì)應(yīng)的進(jìn)程的消息隊(duì)列里的。可以通過GetMessage取得,并且對(duì) 于一般的消息,此函數(shù)返回非零值,但是對(duì)于WM_QUI消息,返回零。可以通過這個(gè)特征,結(jié)束程序。當(dāng)取得消息之后,應(yīng)該先轉(zhuǎn)換消息,再分發(fā)消息。所謂轉(zhuǎn)換,就是把鍵盤碼的轉(zhuǎn) 換,所謂分發(fā),就是把消息分發(fā)給對(duì)應(yīng)的窗口,由對(duì)應(yīng)的窗口處理消息,這樣對(duì)應(yīng)窗體的消 息 處理函 數(shù)就會(huì)被調(diào)用。 兩個(gè)函數(shù) 可以 實(shí)現(xiàn)這兩個(gè)功 能:Translat

28、eMessage和DispatchMessage。另外, 需要注意, 當(dāng)我們點(diǎn)擊窗口的關(guān)閉按鈕關(guān)閉窗口時(shí), 程序并沒有自動(dòng)退出, 而是向程 序發(fā)送了一個(gè)WM_DESTROW(其實(shí)過程是這樣的,首先向程序發(fā)送WM_CLOS消息,默認(rèn)的處理程序是調(diào)用DestroyWindow銷毀窗體,從而引發(fā)WM_DESTROY息),此時(shí)在窗體中我 們要響應(yīng)這個(gè)消息,如果需要退出程序,那么就要向程序發(fā)送WM_QUIT消息(通過PostQuitMessage實(shí)現(xiàn))。一個(gè)窗體如果想要調(diào)用自己的消息處理函數(shù),可以使用Se ndMessage向自己發(fā)消息。如上所述,大部分(注意是大部分)的消息是這樣傳遞的:首先放到進(jìn)程的

29、消息隊(duì)列中,之 后由GetMessage取出,轉(zhuǎn)換后,分發(fā)給對(duì)應(yīng)的窗口。這種消息成為存儲(chǔ)式消息。存儲(chǔ)式消 息基本上是使用者輸入的結(jié)果,以擊鍵(如WM_KEYDO和NWM_KEYUP息)、擊鍵產(chǎn)生的字符(WM_CHAR鼠標(biāo)移動(dòng)(WM_MOUSEMOVE鼠標(biāo)按鈕(WM_LBUTTONDOWN形式給出。存 儲(chǔ)式消息還包含時(shí)鐘消息(WM_TIMER更新消息(WM_PAINT和退出消息(WM_QUI)但是也有的消息是直接發(fā)送給窗口的,它們被稱為非存儲(chǔ)式消息。例如,當(dāng)WinMain調(diào)用CreateWindow時(shí),Windows將建立窗口并在處理中給窗口消息處理函數(shù)發(fā)送一個(gè)WM_CREATE消息。當(dāng)WinMain調(diào)用ShowWindow時(shí),Windows將給窗口消息處理函數(shù)發(fā)送WM_SIZE和WM_SH0WWINDO息。當(dāng)WinMain調(diào)用UpdateWindow時(shí),Windows將給窗口消息處理函數(shù)發(fā) 送WM_PAIN消息。Windows的消息機(jī)制3C+:memset ,memcpy禾口strcpy的根本區(qū)另U?#include memory.hmemset用來對(duì)一段存空間全部設(shè)置為某個(gè)字符,一般用在對(duì)定義的字符串進(jìn)行初始化為或0;例:char a100;memset(a, 0, sizeof(a);memcpy用來做存拷貝,你可以拿它拷貝任何數(shù)據(jù)類型的對(duì)象,可以指定拷貝的數(shù)據(jù)長度;例:ch

溫馨提示

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

評(píng)論

0/150

提交評(píng)論