




已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
面試準備題(包括高質量c+題)const char*, char const*, char*const的區(qū)別問題幾乎是C+面試中每次都會有的題目。事實上這個概念誰都有只是三種聲明方式非常相似很容易記混。 Bjarne在他的The C+ Programming Language里面給出過一個助記的方法: 把一個聲明從右向左讀。char * const cp; ( * 讀成 pointer to ) cp is a const pointer to charconst char * p; p is a pointer to const char;char const * p; 同上因為C+里面沒有const*的運算符,所以const只能屬于前面的類型。 下面這個程序執(zhí)行后會有什么錯誤或者效果:#define MAX 255int main() unsigned char AMAX,i; for (i=0;i=MAX;i+) Ai=i;解答:MAX=255 數(shù)組A的下標范圍為:0.MAX-1,這是其一.其二.當i循環(huán)到255時,循環(huán)內執(zhí)行:A255=255;這句本身沒有問題.但是返回for (i=0;i=MAX;i+)語句時,由于unsigned char的取值范圍在(0.255),i+以后i又為0了.無限循環(huán)下去.注:char類型為一個字節(jié),取值范圍是-128,127,unsigned char 0 ,255編寫用C語言實現(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、非遞歸方法實現(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 =”或“=”此類形式。如下是錯誤的寫法,不得分。if (x = 0.0)if (x != 0.0)請寫出 char *p 與“零值”比較的 if 語句。(3 分)標準答案:if (p = NULL)if (p != NULL)如下寫法均屬不良風格,不得分。if (p = 0)if (p != 0)if (p)if (!)二、以下為Windows NT 下的32 位C+程序,請計算sizeof 的值(10 分)void Func ( char str100)請計算sizeof( str ) = 4 (2 分)char str = “Hello” ;char *p = str ;int n = 10;請計算sizeof (str ) = 6 (2 分)sizeof ( p ) = 4 (2 分)sizeof ( n ) = 4 (2 分)void *p = malloc( 100 );請計算sizeof ( p ) = 4 (2 分)三、簡答題(25 分)1、頭文件中的 ifndef/define/endif 干什么用?(5 分)答:防止該頭文件被重復引用。2、#include 和 #include “filename.h” 有什么區(qū)別?(5 分)答:對于#include ,編譯器從標準庫路徑開始搜索 filename.h對于#include “filename.h” ,編譯器從用戶的工作路徑開始搜索 filename.h3、const 有什么用途?(請至少說明兩種)(5 分)答:(1)可以定義 const 常量(2)const 可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被const 修飾的東西都受到強制保護,可以預防意外的變動,能提高程序的健壯性。4、在C+ 程序中調用被 C 編譯器編譯后的函數(shù),為什么要加 extern “C”? (5 分)答:C+語言支持函數(shù)重載,C 語言不支持函數(shù)重載。函數(shù)被C+編譯后在庫中的名字與C 語言的不同。假設某個函數(shù)的原型為: void foo(int x, int y);該函數(shù)被C 編譯器編譯后在庫中的名字為_foo , 而C+編譯器則會產生像_foo_int_int 之類的名字。C+提供了C 連接交換指定符號extern“C”來解決名字匹配問題。5、請簡述以下兩個for 循環(huán)的優(yōu)缺點(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)點:程序簡潔缺點:多執(zhí)行了N-1 次邏輯判斷,并且打斷了循環(huán)“流水線”作業(yè),使得編譯器不能對循環(huán)進行優(yōu)化處理,降低了效率。優(yōu)點:循環(huá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);請問運行Test 函數(shù)會有什么樣的結果?答:程序崩潰。因為GetMemory 并不能傳遞動態(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);請問運行Test 函數(shù)會有什么樣的結果?答:可能是亂碼。因為GetMemory 返回的是指向“棧內存”的指針,該指針的地址不是 NULL,但其原現(xiàn)的內容已經被清除,新內容不可知。void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL;GetMemory(&str, 100);strcpy(str, hello);printf(str);請問運行Test 函數(shù)會有什么樣的結果?答:(1)能夠輸出hello(2)內存泄漏void Test(void)char *str = (char *) malloc(100);strcpy(str, “hello”);free(str);if(str != NULL)strcpy(str, “world”);printf(str);請問運行Test 函數(shù)會有什么樣的結果?答:篡改動態(tài)內存區(qū)的內容,后果難以預料,非常危險。因為free(str);之后,str 成為野指針,if(str != NULL)語句不起作用。五、編寫strcpy 函數(shù)(10 分)已知strcpy 函數(shù)的原型是char *strcpy(char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。(1)不調用C+/C 的字符串庫函數(shù),請編寫函數(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 的內容復制到strDest,為什么還要char * 類型的返回值?答:為了實現(xiàn)鏈式表達式。 / 2 分例如 int length = strlen( strcpy( strDest, “hello world”) );六、編寫類String 的構造函數(shù)、析構函數(shù)和賦值函數(shù)(25 分)已知類String 的原型為:class Stringpublic:String(const char *str = NULL); / 普通構造函數(shù)String(const String &other); / 拷貝構造函數(shù) String(void); / 析構函數(shù)String & operate =(const String &other); / 賦值函數(shù)private:char *m_data; / 用于保存字符串;請編寫String 的上述4 個函數(shù)。標準答案:/ String 的析構函數(shù)String:String(void) / 3 分delete m_data;/ 由于m_data 是內部數(shù)據(jù)類型,也可以寫成 delete m_data;/ String 的普通構造函數(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);/ 拷貝構造函數(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) 釋放原有的內存資源 / 3 分delete m_data;/ (3)分配新的內存資源,并復制內容 / 3 分int length = strlen(other.m_data);m_data = new charlength+1; / 若能加 NULL 判斷則更好strcpy(m_data, other.m_data);/ (4)返回本對象的引用 / 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項要加入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項要加入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; /調用構造函數(shù),-hum_num = 1;h1.print(); /輸出:human is 1human h2 = f1(h1); /再調用f1(h1)的過程中,由于函數(shù)參數(shù)是按值傳遞對象,調用默認的復制構造函數(shù),它并沒有對hum_num+,所以hum_num 仍= 1,所以x.print()輸出:human is 1; 在推出f1函數(shù)時,要銷毀X,調用析構函數(shù)(human_num-),輸出:human is 0(,由于該函數(shù)返回一個human 對象,所以又調用默認構造函數(shù),創(chuàng)建一個臨時對象(human_num = 0;),把臨時對象賦給h2,又調用默認構造函數(shù)( human_num = 0); h2.print(); /輸出: human is 0;/在退出main()函數(shù)是,先銷毀h2,調用析構函數(shù)(human_num-),輸出 human_num is -1然后銷毀h1,調用析構函數(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()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ù)組,每個元素均為指向整型數(shù)據(jù)的指針。int (*)pn;-p為指向一維數(shù)組的指針,這個一維數(shù)組有n個整型數(shù)據(jù)。int *p();-函數(shù)帶回指針,指針指向返回的值。int (*)p();-p為指向函數(shù)的指針。Windows的消息機制1Windows是一個消息(Message)驅動系統(tǒng)。Windows的消息提供了應用程序之間、應用程序與Windows系統(tǒng)之間進行通信的手段。應用程序想要實現(xiàn)的功能由消息來觸發(fā),并且靠對消息的響應和處理來完成。 Windows系統(tǒng)中有兩種消息隊列:系統(tǒng)消息隊列和應用程序消息隊列。計算機的所有輸入設備由Windows監(jiān)控。當一個事件發(fā)生時,Windows先將輸入的消息放入系統(tǒng)消息隊列中,再將消息拷貝到相應的應用程序消息隊列中。應用程序的消息處理程序將反復檢測消息隊列,并把檢測到的每個消息發(fā)送到相應的窗口函數(shù)中。這便是一個事件從發(fā)生至到達窗口函數(shù)必須經歷的過程。 必須注意的是,消息并非是搶占性的,無論事件的緩急,總是按照到達的先后派對,依次處理(一些系統(tǒng)消息除外),這樣可能使一些實時外部事件得不到及時處理。Windows的消息機制2Windows中的消息是放在對應的進程的消息隊列里的。可以通過GetMessage取得,并且對于一般的消息,此函數(shù)返回非零值,但是對于WM_QUIT消息,返回零。可以通過這個特征,結束程序。當取得消息之后,應該先轉換消息,再分發(fā)消息。所謂轉換,就是把鍵盤碼的轉換,所謂分發(fā),就是把消息分發(fā)給對應的窗口,由對應的窗口處理消息,這樣對應窗體的消息處理函數(shù)就會被調用。兩個函數(shù)可以實現(xiàn)這兩個功能:TranslateMessage和DispatchMessage。另外,需要注意,當我們點擊窗口的關閉按鈕關閉窗口時,程序并沒有自動退出,而是向程序發(fā)送了一個WM_DESTROY消息(其實過程是這樣的,首先向程序發(fā)送WM_CLOSE消息,默認的處理程序是調用DestroyWindow銷毀窗體,從而引發(fā)WM_DESTROY消息),此時在窗體中我們要響應這個消息,如果需要退出程序,那么就要向程序發(fā)送WM_QUIT消息(通過PostQuitMessage實現(xiàn))。一個窗體如果想要調用自己的消息處理函數(shù),可以使用SendMessage向自己發(fā)消息。如上所述,大部分(注意是大部分)的消息是這樣傳遞的:首先放到進程的消息隊列中,之后由GetMessage取出,轉換后,分發(fā)給對應的窗口。這種消息成為存儲式消息。存儲式消息基本上是使用者輸入的結果,以擊鍵(如WM_KEYDOWN和WM_KEYUP訊息)、擊鍵產生的字符(WM_CHAR)、鼠標移動(WM_MOUSEMOVE)和鼠標按鈕(WM_LBUTTONDOWN)的形式給出。存儲式消息還包含時鐘消息(WM_TIMER)、更新消息(WM_PAINT)和退出消息(WM_QUIT)。但是也有的消息是直接發(fā)送給窗口的,它們被稱為非存儲式消息。例如,當WinMain調用CreateWindow時,Windows將建立窗口并在處理中給窗口消息處理函數(shù)發(fā)送一個WM_CREATE消息。當WinMain調用ShowWindow時,Windows將給窗口消息處理函數(shù)發(fā)送WM_SIZE和WM_SHOWWINDOW消息。當WinMain調用UpdateWindow時,Windows將給窗口消息處理函數(shù)發(fā)送WM_PAINT消息。Windows的消息機制3C+:memset ,memcpy 和strcpy 的根本區(qū)別? #include memory.hmemset用來對一段內存空間全部設置為某個字符,一般用在對定義的字符串進行初始化為 或0;例:char a100;memset(a, 0, sizeof(a); memcpy用來做內存拷貝,你可以拿它拷貝任何數(shù)據(jù)類型的對象,可以指定拷貝的數(shù)據(jù)長
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲企業(yè)餐飲產業(yè)鏈整合與供應鏈優(yōu)化顧問服務協(xié)議
- 代駕租賃車輛合同服務質量規(guī)范
- 高端制造廠房租賃合同樣本
- 農村交房協(xié)議書范本
- 跨國貿易保理融資合作協(xié)議
- 股權退出協(xié)議范本:針對公司撤資的全面合作協(xié)議
- 標準商鋪租賃及商業(yè)活動策劃服務合同
- 高新技術廠房交易合同模板
- 出差人員交通補貼及費用結算規(guī)范合同
- 車輛抵押租賃與汽車維修保養(yǎng)合作協(xié)議
- 英語新閩教版小學四年級下冊全冊教案
- 人才梯隊培養(yǎng)計劃
- 新疆阿克蘇地區(qū)(2024年-2025年小學六年級語文)統(tǒng)編版小升初真題(下學期)試卷及答案
- 2025年初級社會工作者綜合能力全國考試題庫(含答案)
- 課程思政示范課程申報書
- 河南天一大聯(lián)考2024屆高一數(shù)學第二學期期末考試試題含解析
- 北京101中學2023-2024學年七下英語期末檢測試題含答案
- 國家開放大學本科《管理英語4》一平臺機考真題及答案(第六套)
- 2024年廣東省中考生物試卷附答案
- 合肥市瑤海區(qū)2022-2023學年七年級下學期期中歷史試題【帶答案】
- 一年級下冊口算題卡大全(口算練習題50套直接打印版)
評論
0/150
提交評論