XXXX計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題(附答案).doc_第1頁(yè)
XXXX計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題(附答案).doc_第2頁(yè)
XXXX計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題(附答案).doc_第3頁(yè)
XXXX計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題(附答案).doc_第4頁(yè)
XXXX計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題(附答案).doc_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

面試準(zhǔn)備題(包括高質(zhì)量c+題)const char*, char const*, char*const的區(qū)別問題幾乎是C+面試中每次都會(huì)有的題目。事實(shí)上這個(gè)概念誰(shuí)都有只是三種聲明方式非常相似很容易記混。 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)镃+里面沒有const*的運(yùn)算符,所以const只能屬于前面的類型。 下面這個(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)內(nèi)執(zhí)行:A255=255;這句本身沒有問題.但是返回for (i=0;i=MAX;i+)語(yǔ)句時(shí),由于unsigned char的取值范圍在(0.255),i+以后i又為0了.無(wú)限循環(huán)下去.注:char類型為一個(gè)字節(jié),取值范圍是-128,127,unsigned char 0 ,255編寫用C語(yǔ)言實(shí)現(xiàn)的求n階階乘問題的遞歸算法:long 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=key) return mid; else if(amid.key2解:int f(int n)int i,s,s1,s2;s1=1;/*s1用于保存f(n-1)的值*/s2=1;/*s2用于保存f(n-2)的值*/s=1;for(i=3;i= - EPSINON) & (x =”或“=”此類形式。如下是錯(cuò)誤的寫法,不得分。if (x = 0.0)if (x != 0.0)請(qǐng)寫出 char *p 與“零值”比較的 if 語(yǔ)句。(3 分)標(biāo)準(zhǔn)答案:if (p = NULL)if (p != NULL)如下寫法均屬不良風(fēng)格,不得分。if (p = 0)if (p != 0)if (p)if (!)二、以下為Windows NT 下的32 位C+程序,請(qǐng)計(jì)算sizeof 的值(10 分)void Func ( char str100)請(qǐng)計(jì)算sizeof( str ) = 4 (2 分)char str = “Hello” ;char *p = str ;int n = 10;請(qǐng)計(jì)算sizeof (str ) = 6 (2 分)sizeof ( p ) = 4 (2 分)sizeof ( n ) = 4 (2 分)void *p = malloc( 100 );請(qǐng)計(jì)算sizeof ( p ) = 4 (2 分)三、簡(jiǎn)答題(25 分)1、頭文件中的 ifndef/define/endif 干什么用?(5 分)答:防止該頭文件被重復(fù)引用。2、#include 和 #include “filename.h” 有什么區(qū)別?(5 分)答:對(duì)于#include ,編譯器從標(biāo)準(zhǔn)庫(kù)路徑開始搜索 filename.h對(duì)于#include “filename.h” ,編譯器從用戶的工作路徑開始搜索 filename.h3、const 有什么用途?(請(qǐng)至少說明兩種)(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ù)的原型為: void foo(int x, int y);該函數(shù)被C 編譯器編譯后在庫(kù)中的名字為_foo , 而C+編譯器則會(huì)產(chǎn)生像_foo_int_int 之類的名字。C+提供了C 連接交換指定符號(hào)extern“C”來解決名字匹配問題。5、請(qǐng)簡(jiǎn)述以下兩個(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; iN; 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 分)void GetMemory(char *p)p = (char *)malloc(100);void Test(void)char *str = NULL;GetMemory(str);strcpy(str, hello world);printf(str);請(qǐng)問運(yùn)行Test 函數(shù)會(huì)有什么樣的結(jié)果?答:程序崩潰。因?yàn)镚etMemory 并不能傳遞動(dòng)態(tài)內(nè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);請(qǐng)問運(yùn)行Test 函數(shù)會(huì)有什么樣的結(jié)果?答:可能是亂碼。因?yàn)镚etMemory 返回的是指向“棧內(nèi)存”的指針,該指針的地址不是 NULL,但其原現(xiàn)的內(nèi)容已經(jīng)被清除,新內(nèi)容不可知。void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL;GetMemory(&str, 100);strcpy(str, hello);printf(str);請(qǐng)問運(yùn)行Test 函數(shù)會(huì)有什么樣的結(jié)果?答:(1)能夠輸出hello(2)內(nèi)存泄漏void Test(void)char *str = (char *) malloc(100);strcpy(str, “hello”);free(str);if(str != NULL)strcpy(str, “world”);printf(str);請(qǐng)問運(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ǔ)句不起作用。五、編寫strcpy 函數(shù)(10 分)已知strcpy 函數(shù)的原型是char *strcpy(char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。(1)不調(diào)用C+/C 的字符串庫(kù)函數(shù),請(qǐng)編寫函數(shù) strcpychar *strcpy(char *strDest, const char *strSrc);assert(strDest!=NULL) & (strSrc !=NULL); / 2分char *address = strDest; / 2分while( (*strDest+ = * strSrc+) != 0 ) / 2分NULL ;return address ; / 2分(2)strcpy 能把strSrc 的內(nèi)容復(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); / 普通構(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; / 用于保存字符串;請(qǐng)編寫String 的上述4 個(gè)函數(shù)。標(biāo)準(zhǔn)答案:/ String 的析構(gòu)函數(shù)String:String(void) / 3 分delete m_data;/ 由于m_data 是內(nèi)部數(shù)據(jù)類型,也可以寫成 delete m_data;/ String 的普通構(gòu)造函數(shù)String:String(const char *str) / 6 分if(str=NULL)m_data = new char1; / 若能加 NULL 判斷則更好*m_data = 0;elseint length = strlen(str);m_data = new charlength+1; / 若能加 NULL 判斷則更好strcpy(m_data, str);/ 拷貝構(gòu)造函數(shù)String:String(const String &other) / 3 分int length = strlen(other.m_data);m_data = new charlength+1; / 若能加 NULL 判斷則更好strcpy(m_data, other.m_data);/ 賦值函數(shù)String & String:operate =(const String &other) / 13 分/ (1) 檢查自賦值 / 4 分if(this = &other)return *this;/ (2) 釋放原有的內(nèi)存資源 / 3 分delete m_data;/ (3)分配新的內(nèi)存資源,并復(fù)制內(nèi)容 / 3 分int length = strlen(other.m_data);m_data = new charlength+1; / 若能加 NULL 判斷則更好strcpy(m_data, other.m_data);/ (4)返回本對(duì)象的引用 / 3 分return *this;winsocket編程#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( wsaData.wVersion) != 1) WSACleanup(); return;SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN 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); char sendBuf100; sprint(sendBuf,Welcome %s to , 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+ Source 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( 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(); addrSrv.sin_family=AF_INET;addrSrv.sin_porthtons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);char recvBuf100;recv(sockClient,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.libC#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();return 0;輸出:110012分析:human h1; /調(diào)用構(gòu)造函數(shù),-hum_num = 1;h1.print(); /輸出:human is 1human 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ì)象賦給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語(yǔ)言 文件讀寫#include stdio.hmain()FILE *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ù)的指針。Windows的消息機(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ù)檢測(cè)消息隊(duì)列,并把檢測(cè)到的每個(gè)消息發(fā)送到相應(yīng)的窗口函數(shù)中。這便是一個(gè)事件從發(fā)生至到達(dá)窗口函數(shù)必須經(jīng)歷的過程。 必須注意的是,消息并非是搶占性的,無(wú)論事件的緩急,總是按照到達(dá)的先后派對(duì),依次處理(一些系統(tǒng)消息除外),這樣可能使一些實(shí)時(shí)外部事件得不到及時(shí)處理。Windows的消息機(jī)制2Windows中的消息是放在對(duì)應(yīng)的進(jìn)程的消息隊(duì)列里的。可以通過GetMessage取得,并且對(duì)于一般的消息,此函數(shù)返回非零值,但是對(duì)于WM_QUIT消息,返回零。可以通過這個(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è)功能:TranslateMessage和DispatchMessage。另外,需要注意,當(dāng)我們點(diǎn)擊窗口的關(guān)閉按鈕關(guān)閉窗口時(shí),程序并沒有自動(dòng)退出,而是向程序發(fā)送了一個(gè)WM_DESTROY消息(其實(shí)過程是這樣的,首先向程序發(fā)送WM_CLOSE消息,默認(rèn)的處理程序是調(diào)用DestroyWindow銷毀窗體,從而引發(fā)WM_DESTROY消息),此時(shí)在窗體中我們要響應(yīng)這個(gè)消息,如果需要退出程序,那么就要向程序發(fā)送WM_QUIT消息(通過PostQuitMessage實(shí)現(xiàn))。一個(gè)窗體如果想要調(diào)用自己的消息處理函數(shù),可以使用SendMessage向自己發(fā)消息。如上所述,大部分(注意是大部分)的消息是這樣傳遞的:首先放到進(jìn)程的消息隊(duì)列中,之后由GetMessage取出,轉(zhuǎn)換后,分發(fā)給對(duì)應(yīng)的窗口。這種消息成為存儲(chǔ)式消息。存儲(chǔ)式消息基本上是使用者輸入的結(jié)果,以擊鍵(如WM_KEYDOWN和WM_KEYUP訊息)、擊鍵產(chǎn)生的字符(WM_CHAR)、鼠標(biāo)移動(dòng)(WM_MOUSEMOVE)和鼠標(biāo)按鈕(WM_LBUTTONDOWN)的形式給出。存儲(chǔ)式消息還包含時(shí)鐘消息(WM_TIMER)、更新消息(WM_PAINT)和退出消息(WM_QUIT)。但是也有的消息是直接發(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_SHOWWINDOW消息。當(dāng)WinMain調(diào)用UpdateWindow時(shí),Windows將給窗口消息處理函數(shù)發(fā)送WM_PAINT消息。Windows的消息機(jī)制3C+:memset ,memcpy 和strcpy 的根本區(qū)別? #include memory.hmemset用來對(duì)一段內(nèi)存空間全部設(shè)置為某個(gè)字符,一般用在對(duì)定義的字符串進(jìn)行初始化為 或0;例:char a100;memset(a, 0, sizeof(a); memcpy用來做內(nèi)存拷貝,你可以拿它拷貝任何數(shù)據(jù)類型的對(duì)象,可以指定拷貝的數(shù)據(jù)長(zhǎng)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論