ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:44KB ,
资源ID:7758062      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7758062.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c++面试编程题.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

c++面试编程题.docx

1、c+面试编程题常用经典编程例子一个链表的结点结构struct Nodeint data ;Node *next ;typedef struct Node Node ;(1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel)Node * ReverseList(Node *head) /链表逆序if ( head = NULL | head-next = NULL )return head;Node *p1 = head ;Node *p2 = p1-next ;Node *p3 = p2-next ;p1-next = NULL ;while ( p3 != NULL )p2

2、-next = p1 ;p1 = p2 ;p2 = p3 ;p3 = p3-next ;p2-next = p1 ;head = p2 ;return head ;(2)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)Node * Merge(Node *head1 , Node *head2)if ( head1 = NULL)return head2 ;if ( head2 = NULL)return head1 ;Node *head = NULL ;Node *p1 = NULL;Node *p2 = NULL;if ( h

3、ead1-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 ;p1 = p1-next ;elsepcurrent-next = p2 ;pcurrent = p2 ;p2 = p2-next ;if ( p1 != NULL )pc

4、urrent-next = p1 ;if ( p2 != NULL )pcurrent-next = p2 ;return head ;(3)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序,这次要求用递归方法进行。 (Autodesk)答案:Node * MergeRecursive(Node *head1 , Node *head2)if ( head1 = NULL )return head2 ;if ( head2 = NULL)return head1 ;Node *head = NULL ;if ( head1-data data )head = he

5、ad1 ;head-next = MergeRecursive(head1-next,head2);elsehead = head2 ;head-next = MergeRecursive(head1,head2-next);return head ;写一个函数找出一个整数数组中,第二大的数 (microsoft)答案:const int MINNUMBER = -32767 ;int find_sec_max( int data , int count)int maxnumber = data0 ;int sec_max = MINNUMBER ;for ( int i = 1 ; i ma

6、xnumber )sec_max = maxnumber ;maxnumber = datai ;elseif ( datai sec_max )sec_max = datai ;return sec_max ;编程实现单链表的插入Node* InsertNode(Node *Head, int num) Node *newNode = new Node; newNode-data = num; if(!Head)/此时为空链表 newNode-next = NULL; return newNode; Node *p = Head; Node *q = NULL;/q指向p结点之前的结点 wh

7、ile(p)/此时寻找位置 if(p-data next; else/此时找到了位置 break; if(p = Head)/插入到头结点之前 newNode-next = Head; Head = newNode; else if(!p)/插入到尾结点之后,此时q指向尾结点 q-next = newNode; newNode-next = NULL; else/插入到p结点和q结点之间 newNode-next = q-next; q-next = newNode; return Head;编程实现双链表删除结点(注意它和单链表删除结点的情况有所不同)Node* DoubleLink_Del

8、Node(Node *Head, int num) Node *p = Head; if(!p) return NULL; while(p) if(num != p-data) p = p-next; else break; if(!p)/没有找到要删除的结点 return NULL; else if(p = Head)/此时删除的是头结点 Head = Head-next; delete p; else if(p-next)/此时删除的是中间结点 p-prev-next = p-next; p-next-prev = p-prev; delete p; else/删除的是尾结点 p-prev

9、-next = NULL; delete p; return Head;编程实现双链表的插入Node* DoubleLink_InsertNode(Node *Head, int num) Node *newNode = new Node;/初始化产生一个新结点 newNode-data = num; newNode-prev = NULL; newNode-next = NULL; Node *p = Head; Node *q = NULL; while(p) if(p-data next; else break; if(p = Head)/此时是在头结点之前进行插入 newNode-ne

10、xt = p; p-prev = newNode; Head = newNode; else if(!p)/在尾结点之后进行插入 q-next = newNode; newNode-prev = q; else/在中间进行插入 p-prev-next = newNode; newNode-prev = p-prev; newNode-next = p; p-prev = newNode; return Head;如何证明一个表是循环链表link * p,*q; p=head; q=p-next; while(q&q-next&p!=q)/q or q-next =NULL时无环, q=q时有环

11、 p=p-next; q=q-next-next; if(p=q) couthave ring; else coutnext; while(fast!=NULL & fast-next!=NULL) low=low-next; fast=fast-next-next; if(low=fast) return true; return false;实现队列的出队与入队/数据入队列Node *EnQueue(Node *head, Node *tail, int data) /创建一个新结点 Node *p = new Node; p-data = data; p-next = NULL; if(

12、head = NULL)/此时为空队列 head = p; *tail = p; else (*tail)-next = p; *tail = p; return head;/删除头结点Node* DeQueue(Node *head) if(!head)/头结点为空 return NULL; else Node *p = head; head = head-next; delete p; return head;String 的具体实现 已知String类定义如下:class String public: String(const char *str = NULL); / 通用构造函数 St

13、ring(const String &another); / 拷贝构造函数 String(); / 析构函数 String & operater =(const String &rhs); / 赋值函数 private: char *m_data; / 用于保存字符串;尝试写出类的成员函数实现。答案:String:String(const char *str) if ( str = NULL ) /strlen在参数为NULL时会抛异常才会有这步判断 m_data = new char1 ; m_data0 = 0 ; else m_data = new charstrlen(str) + 1

14、; 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; /删除原来的数据,新开一块内存 m_data = new charstrlen(rhs.m_data) + 1; strcpy(m_data,rhs.

15、m_data); return *this ;String:String() delete m_data ;判断字符串是否为回文bool IsSymmetry(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; if(bSign=true) printf(Yes!n); else printf(No!n

16、); return bSign;整数转换成字符串itoa函数的实现 1 #include stdafx.h 2 #include 3 using namespace std; 4 void itoaTest(int num,char str ) 5 6 int sign = num,i = 0,j = 0; 7 char temp11; 8 if(sign0); 18 if(sign=0) 25 26 strj = tempi; 27 j+; 28 i-; 29 30 strj = 0; 31 编程实现字符串转化为整型,不用atoi32 string str;33 int sum = 0;34

17、 cin str;35 for(int i = 0; i str.size(); i+)36 37 sum = sum * 10 + stri - 0;38 39 cout sum endl;请写出一个函数来模拟c+中的strstr函数:该函数的返回值是主传中字符子串的位置以后的所有字符,请不要使用任何c程序已有的函数40 string LeftSting(const string &Srcstr, const string &Substr)41 42 string Results();43 int i = 0;44 while(i Srcstr.size()45 46 int j = i;4

18、7 int k = 0;48 while(k Substr.size()49 50 if(Srcstrj = Substrk)51 52 j+;53 k+;54 55 else56 break;57 58 if(k = Substr.size()/找到了子串59 60 for(int t = i; t Srcstr.size(); t+)61 Results += Srcstrt;62 break;63 64 else if(k = 0)/此时第一个不是匹配的65 i+;66 else/此时已经匹配了k个字符67 i += k;68 69 return Results;70 字符串输出35.2

19、2简单应用题请编写一个函数display(),该函数要求用户先输入一字符串,然后在屏幕上再输出该字符串(假设该字符串长度小于100)。注意:部分源程序已存在文件test35_2.cpp中。请勿修改主函数main和其他函数中的任何内容,仅在函数display()的花括号中填写若干语句。如输入abc,输出结果如下:please input string:abcabcPress any key to continue文件test35_2.cpp的内容如下:#include #include void display() void main() coutplease input string:endl

20、; display();【答案】void display()char str100,ch; int i=0; while (ch=getche()!=r) stri=ch; i+; stri=0; coutendlstrendl;2.2字符串翻转16.22简单应用题请编写一个函数void fun(char ss),该函数将字符串ss翻转,如ss为123abc则翻转后为cba321。注意:用数组方式及for循环来实现该函数。注意:部分源程序已存在文件test16_2.cpp中。请勿修改主函数main和其他函数中的任何内容,仅在函数fun的花括号中填写若干语句。文件test16_2.cpp的内容如

21、下:#include#includevoid fun(char ss);void main() 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字符串大小写转换21.22简单应用题请编写一个函数char *change(char instr),将输入字符串中的所有小写字母转换为大写字母输出。要求使用for循环实现。如输入j

22、infeiteng,则输出结果是JINFEITENG。注意:部分源程序已存在文件test21_2.cpp中。请勿修改主函数main和其他函数中的任何内容,仅在函数change的花括号中填写若干语句。文件test21_2.cpp的内容如下: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 & inst

23、ri = z) outstri = instri + delta; else outstri = instri; outstri = 0; return outstr;2.4字符串连接4.22简单应用题常用字符串函数strcat(s1,s2)可将字符串s2添加到字符串s1的末端,但其使用必须保证字符串s1足够大,以便保存它自己的内容和字符串s2中的内容。请编写一个函数char *append(char *s1,char *s2),其可将字符串s2添加到字符串s1的末端,而且不受s1空间大小的限制。请利用常用字符串函数实现。常用字符串函数说明:strcpy(to,form):将form字符串复制到to字符串;strcat(s1,s2):将字符串s2添加到字符串s1的末端,但必须保证字符串s1足够大;strlen(s):返回字符串s的长度;注意:部分源程序已存在文件test4_2.cpp中。请勿修改主函数main和其他函数中的任何内容,仅在函数append的花括号中填写若干语句。输出结果如下: this is a string.文件test4_2.cpp的内容如下:#include#includechar *append(char *s1,char *s2)void main()char *s,*s1,*s2;s1=this is ;s2=a string.;s=append

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1