c++面試編程題_第1頁
c++面試編程題_第2頁
c++面試編程題_第3頁
c++面試編程題_第4頁
c++面試編程題_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、常用經(jīng)典編程例子:一于讎表酌結(jié)點(diǎn)結(jié)構(gòu)CI)已知讎表的頭結(jié)點(diǎn)h歸a寫一個(gè)函數(shù)把這亍璉表逆序(Intel)宥一于函數(shù)找出一T整數(shù)數(shù)逅中$第二大閥(m1Cr9S5ftl輪程實(shí)現(xiàn)單薙表的插入編程丈現(xiàn)雙鏈表刪陳結(jié)點(diǎn)【注意它和單槌表刪險(xiǎn)結(jié)直的情況有所不同)編程實(shí)現(xiàn)雙捱表的插入如何證明一亍耒是循環(huán)軽黑如何判斷一個(gè)單糙表是有環(huán)的【建意不肓湃標(biāo)志儻.最多只能用兩個(gè)鎖外指鈦)埶臥列的岀認(rèn)與入甌String的具俸實(shí)現(xiàn)判斷宇特串是否為回文整數(shù)轉(zhuǎn)換成字符串itw函數(shù)的實(shí)現(xiàn)編程實(shí)現(xiàn)字袴串轉(zhuǎn)化宵整型不用譏典H諳寫出一個(gè)函數(shù)來複擬 卅中的strstr函數(shù):該函數(shù)的遞回值是主隹申宇篙子串的位置端的所有字符I 孚帶串輸出2. 2

2、 串翻轉(zhuǎn)E3宇符串大小寫轉(zhuǎn)換24字符串連接字哥串中的畫存呂&宇符串中毎大的宇符2.7$刪陳一28字符串刪除二2. g字霸串查找2 10孚符串排序2 11回文數(shù)數(shù)組查找一3. 6數(shù)組査找二一個(gè)鏈表的結(jié)點(diǎn)結(jié)構(gòu)struct Nodeint data ;Node *next ;typedef struct Node Node ;(1)已知鏈表的頭結(jié)點(diǎn) head, 寫一個(gè)函數(shù)把這個(gè)鏈表逆序 ( Intel)Node * ReverseList(Node *head) / 鏈表逆序if ( head = NULL | head-next = NULL )return head;Node *p1 = hea

3、d ;Node *p2 = p1-next ;Node *p3 = p2-next ;p1-next = NULL ;while ( p3 != NULL )p2-next = p1 ;p1 = p2 ;p2 = p3 ;p3 = p3-next ;p2-next = p1 ;head = p2 ;return head ;(保留所(2) 已知兩個(gè)鏈表 head1 和 head2 各自有序, 請把它們合并成一個(gè)鏈表依然有序。 有結(jié)點(diǎn),即便大小相同)Node * Merge(Node *head1 , Node *head2)if ( head1 = NULL)return head2 ;if

4、( head2 = NULL)return head1 ;Node *head = NULL ;Node *p1 = NULL;Node *p2 = NULL;if ( head1-data data )head = head1 ;p1 = head1-next;p2 = head2 ;elsehead = head2 ;p2 = head2-next ;p1 = head1 ;Node *pcurrent = head ;while ( p1 != NULL & p2 != NULL)if ( p1-data data )pcurrent-next = p1 ;pcurrent = p1 ;

5、p1 = p1-next ;elsepcurrent-next = p2 ;pcurrent = p2 ;p2 = p2-next ;if ( p1 != NULL ) pcurrent-next = p1 ;if ( p2 != NULL )pcurrent-next = p2 ;return head ;(3) 已知兩個(gè)鏈表 head1 和 head2 各自有序,請把它們合并成一個(gè)鏈表依然有序,這次要 求用遞歸方法進(jìn)行。 (Autodesk) 答案:Node * MergeRecursive(Node *head1 , Node *head2)if ( head1 = NULL )retu

6、rn head2 ;if ( head2 = NULL)return head1 ;Node *head = NULL ;if ( head1-data data )head = head1 ;head-next = MergeRecursive(head1-next,head2);else head = head2 ;head-next = MergeRecursive(head1,head2-next); return head ;microsoft )寫一個(gè)函數(shù)找出一個(gè)整數(shù)數(shù)組中,第二大的數(shù) 答案:const int MINNUMBER = -32767 ;int find_sec_ma

7、x( int data , int count)int maxnumber = data0 ;int sec_max = MINNUMBER ;for ( int i = 1 ; i maxnumber ) sec_max = maxnumber ; maxnumber = datai ;elseif ( datai sec_max ) sec_max = datai ; return sec_max ;編程實(shí)現(xiàn)單鏈表的插入Node* InsertNode(Node *Head, int num) Node *newNode = new Node; newNode-data = num;if(

8、!Head) /此時(shí)為空鏈表 newNode-next = NULL; return newNode;Node *p = Head;Node *q = NULL; q指向p結(jié)點(diǎn)之前的結(jié)點(diǎn) while (p) /此時(shí)尋找位置if (p-data next; else/此時(shí)找到了位置 break;if(p = Head) /插入到頭結(jié)點(diǎn)之前 newNode-next = Head;Head = newNode;else if(!p) /插入到尾結(jié)點(diǎn)之后,此時(shí)q指向尾結(jié)點(diǎn)q-next = newNode; newNode-next = NULL;else/插入到p結(jié)點(diǎn)和q結(jié)點(diǎn)之間 newNode-n

9、ext = q-next; q-next = newNode;return Head;編程實(shí)現(xiàn)雙鏈表刪除結(jié)點(diǎn)(注意它和單鏈表刪除結(jié)點(diǎn)的情況有所不同)Node* DoubleLink_DelNode(Node *Head, int num) Node *p = Head;if(!p)return NULL;while(p)if(num != p-data)p = p-next;elsebreak;if(!p) /沒有找到要?jiǎng)h除的結(jié)點(diǎn)return NULL;elseif(p = Head) /此時(shí)刪除的是頭結(jié)點(diǎn)Head = Head-next;delete p;else if (p-next) /

10、此時(shí)刪除的是中間結(jié)點(diǎn)p-prev-next = p-next;p-next-prev = p-prev; delete p;else/刪除的是尾結(jié)點(diǎn)p-prev-next = NULL; delete p;return Head;編程實(shí)現(xiàn)雙鏈表的插入Node* DoubleLink_InsertNode(Node *Head, int num)Node *n ewNode = new Node;/初始化產(chǎn)生一個(gè)新結(jié)點(diǎn) newNode-data = num; newNode-prev = NULL; newNode-next = NULL;Node *p = Head;Node *q = NUL

11、L;whil e (p)if (p-data next;elsebreak;if(p = Head) /此時(shí)是在頭結(jié)點(diǎn)之前進(jìn)行插入newNode-next = p;p-prev = newNode;Head = newNode;else if (!p) /在尾結(jié)點(diǎn)之后進(jìn)行插入q-next = newNode; newNode-prev = q;else/在中間進(jìn)行插入 p-prev-next = newNode; newNode-prev = p-prev; newNode-next = p; p-prev = newNode;return Head;如何證明一個(gè)表是循環(huán)鏈表link * p,

12、*q;p=head;q=p-next;while(q&q-next&p!=q) /q or q-next =NULL 時(shí)無環(huán), q=q 時(shí)有環(huán)p=p-next; q=q-next-next;if(p=q) couthave ring;elsecoutnext;while(fast!=NULL & fast-next!=NULL) low=low-next; fast=fast-next-next;if(low=fast) return true;return false;實(shí)現(xiàn)隊(duì)列的出隊(duì)與入隊(duì) /數(shù)據(jù)入隊(duì)列int data)Node *EnQueue(Node *head, Node *tail

13、, /創(chuàng)建一個(gè)新結(jié)點(diǎn)Node *p = new Node; p-data = data; p-next = NULL; if(head = NULL) / 此時(shí)為空隊(duì)列 head = p;*tail = p;else(*tail)-next = p;*tail = p;return head;/刪除頭結(jié)點(diǎn)Node* DeQueue(Node *head)if(!head) /頭結(jié)點(diǎn)為空return NULL;elseNode *p = head;head = head-next;delete p;return head;String 的具體實(shí)現(xiàn)已知 String 類定義如下: class St

14、ringpublic:String(const char *str = NULL); / 通用構(gòu)造函數(shù)String(const String &another); / 拷貝構(gòu)造函數(shù) String(); / 析構(gòu)函數(shù)String & operater =(const String &rhs); / 賦值函數(shù) private:char *m_data; / 用于保存字符串;嘗試寫出類的成員函數(shù)實(shí)現(xiàn)。答案:String:String(const char *str)if ( str = NULL ) /strlen 在參數(shù)為 NULL 時(shí)會(huì)拋異常才會(huì)有這步判斷 m_data = new char1

15、; m_data0 = 0 ;elsem_data = new charstrlen(str) + 1; strcpy(m_data,str);String:String(const String &another)m_data = new charstrlen(another.m_data) + 1; strcpy(m_data,other.m_data);String& String:operator =(const String &rhs)if ( this = &rhs)return *this ;delete m_data; / 刪除原來的數(shù)據(jù),新開一塊內(nèi)存m_data = new

16、charstrlen(rhs.m_data) + 1; strcpy(m_data,rhs.m_data);return *this ;Stri ng:Stri ng()delete m_data ;判斷字符串是否為回文bool lsSymmetry( const char * p)assert(p!=NULL);const char * q=p;int len=0;while (*q+!= 0)len+;bool bSign= true ;q=p+len-1;if (0len)for ( int i=0;ilen/2;i+)if (*p+!=*q-) bSign= false ; break

17、 ;if (bSign= true )printf( Yes!n);elseprintf( No!n);return bSign;整數(shù)轉(zhuǎn)換成字符串itoa函數(shù)的實(shí)現(xiàn)1 #include stdafx.h2 #include 3 using namespacestd;4 void itoaTest( int num, char str)6int sign = num,i = 0,j = 0;7char temp11;Sif (sign0);ISif (sign=0)25苫strj = tempi;27j+;i-;蓉30strj =0;31編程實(shí)現(xiàn)字符串轉(zhuǎn)化為整型,不用 atoistring st

18、r;:;:,int sum = 0;34cin str;35for (i nt i = 0; i str.size(); i+)丄37sum = sum * 10 + stri - O;3S39cout sum en dl;請寫出一個(gè)函數(shù)來模擬C+中的strstr函數(shù):該函數(shù)的返回值是主傳中字符子串的位置以后的所有字符,請不要使用任何c程序已有的函數(shù)string LeftSting( const string &Srcstr, const string &Substr)二工.string Results();屯 int i = 0;爼 while(i Srcstr.size()- zz 筋47

19、4S14?5056I157SSint j = i;int k = 0;while (k Substr.size()if(Srcstrj = Substrk)j+; k+;elsebreak;if(k = Substr.size() /找到了子串for(i nt t = i; t Srcstr.size(); t+)Results += Srcstrt;break;else if(k = 0) /此時(shí)第一個(gè)不是匹配的 i+;else/此時(shí)已經(jīng)匹配了 k個(gè)字符i += k;二 return Results;字符串輸出35.22 .簡單應(yīng)用題請編寫一個(gè)函數(shù)display。,該函數(shù)要求用戶先輸入一字符

20、串,然后在屏幕上再輸出該字符串符串長度小于100) o注意:部分源程序已存在文件test35_2.cpp中。請勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)display()的花括號(hào)中填寫若干語句如輸入abc,輸出結(jié)果如下:please input string:abcabcPress any key to continue文件test35_2.cpp的內(nèi)容如下:#include #include void display()void main() coutplease input string:endl; display();(假設(shè)該字答案】void display()char str

21、100,ch;int i=0;while (ch=getche()!=r)stri=ch;i+;stri=0;coutendlstrendl;2.2 字符串翻轉(zhuǎn)16.22簡單應(yīng)用題請編寫一個(gè)函數(shù)void fun(char ss),該函數(shù)將字符串ss翻轉(zhuǎn),如ss為123abC,則翻轉(zhuǎn)后為cba321 意:用數(shù)組方式及for循環(huán)來實(shí)現(xiàn)該函數(shù)。注意:部分源程序已存在文件test16_2.cpp中。請勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填寫若干語句。文件test16_2.cpp的內(nèi)容如下:#include#includevoid fun(char ss);void ma

22、in()char s80;couts;fun(s);cout 逆序后的字符串 :sendl;void fun(char ss)【答案】 void fun(char ss)int n=strlen(ss);for(int i=0;i(n/2); i+)char c=ssi; ssi=ssn-1-i; ssn-1-i=c;2.3 字符串大小寫轉(zhuǎn)換2 1 .22 簡單應(yīng)用題請編寫一個(gè)函數(shù) char *change(char instr) ,將輸入字符串中的所有小寫字母轉(zhuǎn)換為大寫字母輸出。要求 使用for循環(huán)實(shí)現(xiàn)。如輸入jinfeiteng,則輸出結(jié)果是JINFEITENG。注意:部分源程序已存在文件

23、test21_2.cpp中。請勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)change的花括號(hào)中填寫若干語句。文件test21_2.cpp的內(nèi)容如下:char *change(char instr);#include iostream.hvoid main()char instr50;char *outstr;cout Input a string: instr;outstr=change(instr);cout Over graded string: endl;cout outstr = a & instri = z)outstri = instri + delta;elseouts

24、tri = instri;outstri = 0;return outstr;2.4 字符串連接4.22簡單應(yīng)用題常用字符串函數(shù)strcat(s1,s2)可將字符串s2添加到字符串s1的末端,但其使用必須保證字符串 s1足夠大, 以便保存它自己的內(nèi)容和字符串 s2中的內(nèi)容。請編寫一個(gè)函數(shù) char *append(char *s1,char *s2),其可將字符 串s2添加到字符串s1的末端,而且不受s1空間大小的限制。請利用常用字符串函數(shù)實(shí)現(xiàn)。常用字符串函數(shù)說明:strcpy(to,form):將form字符串復(fù)制到to字符串;strcat(s1,s2):將字符串s2添加到字符串s1的末端,

25、但必須保證字符串s1足夠大;strlen(s):返回字符串s的長度;注意:部分源程序已存在文件test4_2.cpp中。請勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)append的花括號(hào)中填寫若干語句。輸出結(jié)果如下:this is a string.文件 test4_2.cpp 的內(nèi)容如下: #include #include char *append(char *s1,char *s2) void main()char *s,*s1,*s2; s1=this is ; s2=a string.; s=append(s1,s2); coutsendl;答案】char *append(c

26、har *s1,char *s2) char *tmp;int length; length=strlen(s1)+strlen(s2); tmp=new charlength+1; strcpy(tmp,s1);strcat(tmp,s2);return tmp;9.22簡單應(yīng)用題請編寫一個(gè)函數(shù)int CalcDigital(char *str),該函數(shù)可返回字符串str中數(shù)字字符(即0-9這10個(gè)數(shù)字)的 個(gè)數(shù),如字符串olympic2008中數(shù)字字符的個(gè)數(shù)為4。請用if條件判斷語句與for循環(huán)語句來實(shí)現(xiàn)該函數(shù)。注意:部分源程序已存在文件test9_2.cpp中。請勿修改主函數(shù)main和其

27、他函數(shù)中的任何內(nèi)容,僅在函數(shù)find的花括號(hào)中填寫若干語句。文件test9_2.cpp的內(nèi)容如下:#include#includeint CalcDigital(char *str);void main()char *str;str=new char255;coutstr;int num=CalcDigital(str);coutstr:numendl;int CalcDigital(char *str)答案】 int CalcDigital(char *str)if(str=NULL) return 0;int num_of_digital=0; int len=strlen(str);fo

28、r(int i=0;ilen;i+)if(stri=0) num_of_digital+; return num_of_digital;2.6 字符串中最大的字符15.22簡單應(yīng)用題請編寫一個(gè)函數(shù)char MaxCharacter(char * str),該函數(shù)返回參數(shù)str所指向的字符串中具有最大 ASCII碼 的那個(gè)字符(如字符串world中字符w具有最大的ASCII碼)。當(dāng)str所指向的字符串為空時(shí),則返回空字 符0x0或0。輸出結(jié)果如下:Good Morning!Max char: r注意:部分源程序已存在文件test15_2.cpp中。請勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅

29、在函數(shù)MaxCharacte啲花括號(hào)中填寫若干語句。文件test15_2.cpp的內(nèi)容如下:#include #include char MaxCharacter(char * str);void main()char str100;strcpy(str,Good Morning!);char maxc=MaxCharacter(str);coutstrendl;coutMax char:maxcendl;char MaxCharacter (char *str)【答案】char MaxCharacter (char *str)if(str=NULL)return 0x0;char maxCh

30、ar=0x0;int len=strlen(str);for(int i=0;imaxChar) maxChar=stri;return maxChar;2.7 字符串刪除一18.22 簡單應(yīng)用題 編寫函數(shù)fun(),該函數(shù)的功能是從字符串中刪除指定的字符,同一字母的大、小寫按不同字符處理。例如:程序執(zhí)行時(shí)輸入字符串為 turbo c and borland c+,從鍵盤上輸入字符n,則輸出后變?yōu)閠urbo c ad borlad c+如果輸入的字符在字符串中不存在,則字符串照原樣輸出。注意:部分源程序已存在文件test18_2.cpp中。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)

31、fun的花括號(hào)中填入所編寫的若干語句文件test18_2.cpp的內(nèi)容如下:#include#include#includevoid fun(char s , int c)void main()static char str =turbo c and borland c+;char ch;cout 原始字符串 :nstrendl;coutch;fun(str,ch);coutstr=strendl;【答案】void fun(char s , int c)int i=0;char *p;p=s;while(*p)if(*p!=c)si=*p;i+;p+;si=0;2.8 字符串刪除二27. 22

32、 簡單應(yīng)用題請編寫函數(shù)fun(),其功能是將s所指字符串中除了下標(biāo)為奇數(shù)、同時(shí)ASCII值也為奇數(shù)的字符之外,其余的所有字符都刪除。字符串中剩余的字符所形成的一個(gè)新的字符串放在t所指的數(shù)組中。例如:s所指字符串中的內(nèi)容為 ABCDEFG12345,其中字符A的ASCII碼值雖為奇數(shù),但元素所在的下 標(biāo)為偶數(shù),因此必需刪除;字符1的ASCII碼值為奇數(shù),所在數(shù)組中的下標(biāo)也為奇數(shù),不刪除,最后 t所指的數(shù)組中的內(nèi)容應(yīng)是 135。請勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)su的花括號(hào)中填寫若干語句。文件test27_2.cpp的內(nèi)容如下:#include #include #includ

33、e #include void fun(char *s,char t )void main()char s100,t100;coutPlease enter string S: endl; gets(s);fun(s, t);puts(t);【答案】void fun(char *s,char t )int i,j=0,n;n=strlen(s);for(i=0;in;i+) if(i%2!=0&si%2!=0) tj=si;j+;tj=0;2.9 字符串查找20.22簡單應(yīng)用題請編寫一個(gè)函數(shù) int pattern_index(char substr,char str) ,該函數(shù)執(zhí)行含通配符

34、? 的字符串的查找時(shí), 該通配符可以與任一個(gè)字符匹配成功。當(dāng)子串substr在str中匹配查找成功時(shí),返回子串substr在str中的位置,否則返回值為0。要求使用for循環(huán)實(shí)現(xiàn)。輸出結(jié)果如下:子串起始位置: 5注意:部分源程序已存在文件test20_2.cpp中。請勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)patternndex的花括號(hào)中填寫若干語句。文件test20_2.cpp的內(nèi)容如下:#include int pattern_index(char substr,char str)void main()char *substring,*string;int same;subst

35、ring=?gram; string=this program return index of substring; same=pattern_index(substring,string); if(same)cout 子串起始位置 :sameendl;elsecout 匹配不成功 endl;【答案】int pattern_index(char substr,char str)int i,j,k;for(i=0;stri;i+) for(j=i,k=0;(strj=substrk)|(substrk=?);j+,k+)if(!substrk+1) return(i); return(0);2.

36、10 字符串排序22.22簡單應(yīng)用題請編寫函數(shù)fun(),對長度為7個(gè)字符的字符串,除首、尾字符外,將其余5個(gè)字符按ASCII值碼降序排列 例如:原來的字符串為 CEAedca,則排序后輸出為CedcEAa。注意:部分源程序已存在文件test22_2.cpp中。請勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。文件test22_2.cpp的內(nèi)容如下:#include #include #include #include void int fun(char *s, int num) void main()char s10;printf( 輸入7個(gè)字符的字

37、符串 :);gets(s);fun(s,7);couts;答案】int fun(char *s, int num)char t;int i, j;for(i=1;inum-2;i+)for(j=i+1;jnum-1;j+)if(sisj) t=si;si=sj;sj=t;2.11 回文數(shù)26. 22 簡單應(yīng)用題請編寫函數(shù)fun(),該函數(shù)的功能是判斷字符串是否為回文,若是則函數(shù)返回1主函數(shù)中輸出YES ;否則返回 0,主函數(shù)中輸出 NO ?;匚氖侵疙樧x和倒讀都一樣的字符串。例如:字符串 LEVEL 是回文,而字符串 123312就不是回文。注意:部分源程序已存在文件 test26_2.cpp中。請勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填寫若干語句。文件test26_2.cpp的內(nèi)容如下: #include #include #define N 80 int fun(char *str)void main()char sN;coutEnter a string : endl; gets(s);coutnn;puts(s);if(fun(s)c

溫馨提示

  • 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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論