ImageVerifierCode 换一换
格式:DOCX , 页数:35 ,大小:35.16KB ,
资源ID:2245953      下载积分:12 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(C和C++经典面试题(面试必备).docx)为本站上传会员【w****g】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

C和C++经典面试题(面试必备).docx

1、C和C+经典面试题(面试必备)C和C+经典面试题(面试必备) 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(C和C+经典面试题(面试必备))的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为C和C+经典面试题(面试必备)的全部内容。C/C+经典面试题(面试必备)面试题 1:变量的声明和定义有什么区别为变量分配地址和存储空间的

2、称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在一个地方定义。加入 extern 修饰的是变量的声明, 说明此变量将在文件以外或在文件后面部分定义.说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量. 面试题 2:写出 bool 、 int、 float、指针变量与“零值” 比较的 if 语句bool 型数据:if( flag )A;elseB;int 型数据:if( 0 != flag )A;elseB;指针型数:if( NULL = flag )A;elseB;float 型数据:if ( ( flag = NORM ) &

3、 ( flag = NORM ) )A; 2注意:应特别注意在 int、指针型变量和“零值”比较的时候,把“零值放在左边,这样当把“ =”误写成“ =”时,编译器可以报错,否则这种逻辑错误不容易发现,并且可能导致很严重的后果。 面试题 3: sizeof 和 strlen 的区别sizeof 和 strlen 有以下区别:q sizeof 是一个操作符, strlen 是库函数。q sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾为0的字符串作参数。q 编译器在编译时就计算出了 sizeof 的结果。而 strlen 函数必须在运行时才能计算出来。并且 size

4、of计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。q 数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了.注意:有些是操作符看起来像是函数,而有些函数名看起来又像操作符,这类容易混淆的名称一定要加以区分,否则遇到数组名这类特殊数据类型作参数时就很容易出错。最容易混淆为函数的操作符就是 sizeof。面试题 4: C 语言的关键字 static 和 C+ 的关键字 static 有什么区别在 C 中 static 用来修饰局部静态变量和外部静态变量、函数。而 C+中除了上述功能外,还用来定义类的成员变量和函数。即静态成员和静态成员函数。注意:编程

5、时 static 的记忆性,和全局性的特点可以让在不同时期调用的函数进行通信,传递信息,而 C+的静态成员则可以在多个对象实例间进行通信,传递信息.面试题 5: 中的 malloc 和中的 new 有什么区别malloc 和 new 有以下不同:( 1) new、 delete 是操作符,可以重载,只能在 C+中使用.( 2) malloc、 free 是函数,可以覆盖, C、 C+中都可以使用。( 3) new 可以调用对象的构造函数,对应的 delete 调用相应的析构函数.( 4) malloc 仅仅分配内存, free 仅仅回收内存,并不执行构造和析构函数( 5) new、 delet

6、e 返回的是某种数据类型指针, malloc、 free 返回的是 void 指针.注意: malloc 申请的内存空间要用 free 释放,而 new 申请的内存空间要用 delete 释放,不要混用。因为两者实现的机理不同。 面试题 6: 写一个“ 标准” 宏 MIN#define min(a,b)((a)=(b)?(a):(b))注意:在调用时一定要注意这个宏定义的副作用,如下调用:(+p)=(x)?(+p):(x).p 指针就自加了两次,违背了 MIN 的本意。3 面试题 7: 一个指针可以是 volatile 吗可以,因为指针和普通变量一样,有时也有变化程序的不可控性。常见例:子中断

7、服务子程序修改一个指向一个 buffer 的指针时,必须用 volatile 来修饰这个指针.说明:指针是一种普通的变量,从访问上没有什么不同于其他变量的特性.其保存的数值是个整型数据,和整型变量不同的是,这个整型数据指向的是一段内存地址。 面试题 8: a 和a 有什么区别请写出以下代码的打印结果,主要目的是考察 a 和&a 的区别。#includevoid main( void )int a5=1,2,3,4,5;int ptr=(int *)(a+1);printf(”d,d,(a+1),(ptr1);return;输出结果: 2, 5.注意:数组名 a 可以作数组的首地址,而&a 是数

8、组的指针.思考,将原式的 int *ptr=(int *)(&a+1);改为 int ptr=(int *)(a+1);时输出结果将是什么呢? 面试题 9: 简述 C、 C+程序编译的内存分配情况C、 C+中内存分配方式可以分为三种:( 1) 从静态存储区域分配:内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。 速度快、 不容易出错,因为有系统会善后。 例如全局变量, static 变量等。( 2) 在栈上分配:在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(

9、3) 从堆上分配:即动态内存分配。程序在运行的时候用 malloc 或 new 申请任意大小的内存,程序员自己负责在何时用 free 或 delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活。 如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏, 另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块.一个 C、 C+程序编译时内存分为 5 大存储区:堆区、栈区、全局区、文字常量区、程序代码区.4 面试题 10: 简述 strcpy、 sprintf 与 memcpy 的区别三者主要有以下不同之处:( 1) 操作对象不同, strcpy 的两个操作对象均为字符串,

10、sprintf 的操作源对象可以是多种数据类型,目的操作对象是字符串, memcpy 的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。( 2) 执行效率不同, memcpy 最高, strcpy 次之, sprintf 的效率最低。( 3) 实现功能不同, strcpy 主要实现字符串变量间的拷贝, sprintf 主要实现其他数据类型格式到字符串的转化, memcpy 主要是内存块间的拷贝。说明: strcpy、 sprintf 与 memcpy 都可以实现拷贝的功能,但是针对的对象不同,根据实际需求,来选择合适的函数实现拷贝功能。 面试题 11: 设置地址为 0x67a9 的

11、整型变量的值为 0xaa66int *ptr;ptr = (int )0x67a9;ptr = 0xaa66;说明:这道题就是强制类型转换的典型例子,无论在什么平台地址长度和整型数据的长度是一样的,即一个整型数据可以强制转换成地址指针类型,只要有意义即可。 面试题 12: 面向对象的三大特征面向对象的三大特征是封装性、继承性和多态性:q 封装性:将客观事物抽象成类,每个类对自身的数据和方法实行 protection( private, protected,public)。q 继承性:广义的继承有三种实现形式: 实现继承( 使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的

12、外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。q 多态性:是将父类对象设置成为和一个或更多它的子对象相等的技术.用子类对象给父类对象赋值之后,父类对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。说明:面向对象的三个特征是实现面向对象技术的关键,每一个特征的相关技术都非常的复杂,程序员应该多看、多练. 面试题 13: C+的空类有哪些成员函数q 缺省构造函数.q 缺省拷贝构造函数。q 缺省析构函数.q 缺省赋值运算符。q 缺省取址运算符。q 缺省取址运算符 const。注意:有些书上只是简单的介绍了前四个函数.没有提及后面这两个函数.但后面这两个函数也是空类的默认

13、函数。另外需要注意的是,只有当实际使用这些函数的时候,编译器才会去定义它们.5 面试题 14: 谈谈你对拷贝构造函数和赋值运算符的认识拷贝构造函数和赋值运算符重载有以下两个不同之处:( 1)拷贝构造函数生成新的类对象,而赋值运算符不能.( 2)由于拷贝构造函数是直接构造一个新的类对象,所以在初始化这个对象之前不用检验源对象是否和新建对象相同。而赋值运算符则需要这个操作,另外赋值运算中如果原来的对象中有内存分配要先把内存释放掉注意:当有类中有指针类型的成员变量时,一定要重写拷贝构造函数和赋值运算符,不要使用默认的. 面试题 15: 用 C+设计一个不能被继承的类template typename

14、 T class Afriend T;private:A() A() ;class B : virtual public ABpublic:B() B() ;class C : virtual public Bpublic:C() C() ;void main( void )B b;/C c;return;注意:构造函数是继承实现的关键,每次子类对象构造时,首先调用的是父类的构造函数,然后才是自己的. 面试题 16: 访问基类的私有虚函数写出以下程序的输出结果:#include iostream。hclass A 6virtual void g()cout ”A::g” endl;privat

15、e:virtual void f()cout ”A::f endl;class B : public Avoid g()cout ”B::g endl;virtual void h()cout B::h endl;;typedef void( *Fun )( void );void main()B b;Fun pFun;for(int i = 0 ; i next)p-next = NULL;elsep-next = Snext; pdata = data; /初始化新结点Snext = p; /插入新结点return S;出栈函数:node Pop( LinkStack &S)node te

16、mp;temp。data = 0;temp.next = NULL;if( NULL = S) /检验栈printf(There no node in stack!);return temp;temp = S;10if( S-next = NULL )printf(The stack is NULL,cant pop!n”);return temp;LinkStack p = S -next; /节点出栈S-next = S-next-next;temp = p;free( p );p = NULL;return temp;双栈实现队列的入队函数:LinkStack StackToQueuPu

17、sh( LinkStack &S, int data)node n;LinkStack S1 = NULL;CreateNULLStack( S1 ); /创建空栈while( NULL != Snext ) /S 出栈入 S1n = Pop( S );Push( S1, n。data );Push( S1, data ); /新结点入栈while( NULL != S1-next ) /S1 出栈入 Sn = Pop( S1 );Push( S, n.data );return S;说明:用两个栈能够实现一个队列的功能,那用两个队列能否实现一个队列的功能呢?结果是否定的,因为栈是先进后出,将

18、两个栈连在一起,就是先进先出。而队列是现先进先出,无论多少个连在一起都是先进先出,而无法实现先进后出.面试题 23: 计算一颗二叉树的深度深度的计算函数:int depth(BiTree T)if(!T) return 0; /判断当前结点是否为叶子结点11int d1= depth(Tlchild); /求当前结点的左孩子树的深度int d2= depth(Trchild); /求当前结点的右孩子树的深度return (d1d2?d1:d2)+1;注意:根据二叉树的结构特点,很多算法都可以用递归算法来实现。 面试题 24: 编码实现直接插入排序直接插入排序编程实现如下:#includevoi

19、d main( void )int ARRAY10 = 0, 6, 3, 2, 7, 5, 4, 9, 1, 8 ;int i,j;for( i = 0; i 10; i+)coutARRAYi ”;coutendl;for( i = 2; i = 10; i+ ) /将 ARRAY2,ARRAYn依次按序插入if(ARRAYi ARRAYi1) /如果 ARRAYi大于一切有序的数值,/ARRAYi将保持原位不动ARRAY0 = ARRAYi; /将 ARRAY0看做是哨兵,是 ARRAYi的副本j = i 1;do /从右向左在有序区 ARRAY1 i1中/查找 ARRAYi的插入位置AR

20、RAYj+1 = ARRAYj; /将数值大于 ARRAYi记录后移j ;while( ARRAY0 ARRAYj );ARRAYj+1=ARRAY0; /ARRAYi插入到正确的位置上for( i = 0; i 10; i+)coutARRAYi” ”;coutendl;12注意: 所有为简化边界条件而引入的附加结点( 元素) 均可称为哨兵。引入哨兵后使得查找循环条件的时间大约减少了一半, 对于记录数较大的文件节约的时间就相当可观。类似于排序这样使用频率非常高的算法,要尽可能地减少其运行时间.所以不能把上述算法中的哨兵视为雕虫小技. 面试题 25: 编码实现冒泡排序冒泡排序编程实现如下:in

21、clude define LEN 10 /数组长度void main( void )int ARRAY10 = 0, 6, 3, 2, 7, 5, 4, 9, 1, 8 ; /待排序数组printf( ”n” );for( int a = 0; a = i; j- ) /对当前无序区 ARRAYi.。LEN自下向上扫描if( ARRAYj+1 ARRAYj ) /交换记录ARRAY0 = ARRAYj+1; /ARRAY0不是哨兵,仅做暂存单元ARRAYj+1 = ARRAYj;ARRAYj = ARRAY0;isChange = 1; /发生了交换,故将交换标志置为真printf( n );

22、for( a = 0; a LEN; a+) /打印本次排序后数组内容printf( %d , ARRAYa );if( !isChange ) /本趟排序未发生交换,提前终止算法break;printf( ”n” );return;13 面试题 26: 编码实现直接选择排序#include”stdio.h#define LEN 9void main( void )int ARRAYLEN= 5, 6, 8, 2, 4, 1, 9, 3, 7 ; /待序数组printf(Before sorted:n);for( int m = 0; m LEN; m+ ) /打印排序前数组printf( ”

23、d , ARRAYm );for (int i = 1; i = LEN 1; i+) /选择排序int t = i - 1;int temp = 0;for (int j = i; j LEN; j+)if (ARRAYj ARRAYt)t = j;if (t != (i 1)temp = ARRAYi - 1;ARRAYi 1 = ARRAYt;ARRAYt = temp;printf( n );printf(”After sorted:n”);for( i = 0; i LEN; i+ ) /打印排序后数组printf( ”d ”, ARRAYi );printf( n );注意:在直接

24、选择排序中,具有相同关键码的对象可能会颠倒次序,因而直接选择排序算法是一种不稳定的排序方法。在本例中只是例举了简单的整形数组排序,肯定不会有什么问题.但是在复杂的数据元素序列组合中,只是根据单一的某一个关键值排序,直接选择排序则不保证其稳定性,这是直接选择排序的一个弱点。 面试题 27: 编程实现堆排序堆排序编程实现:#include stdio。h14void createHeep(int ARRAY,int sPoint, int Len) /生成大根堆while( ( 2 * sPoint + 1 ) Len )int mPoint = 2 sPoint + 1 ;if( ( 2 * s

25、Point + 2 ) Len )if(ARRAY 2 * sPoint + 1 ARRAY 2 sPoint + 2 )mPoint = 2sPoint+2;if(ARRAY sPoint = 0; i- ) /将 Hr0, Lenght1建成大根堆createHeep(ARRAY, i, Len);for ( i = Len 1; i 0; i- )int tmpData = ARRAY0; /与最后一个记录交换ARRAY0 = ARRAYi;ARRAYi = tmpData;createHeep( ARRAY, 0, i ); /将 H。r0。i重新调整为大根堆return;int ma

26、in( void )15int ARRAY = 5, 4, 7, 3, 9, 1, 6, 8, 2;printf(Before sorted:n); /打印排序前数组内容for ( int i = 0; i 9; i+ )printf(”d , ARRAYi);printf(”n);heepSort( ARRAY, 9 ); /堆排序printf(After sorted:n); /打印排序后数组内容for( i = 0; i 9; i+ )printf( ”%d ”, ARRAYi );printf( n” );return 0;说明:堆排序,虽然实现复杂,但是非常的实用。另外读者可是自己设

27、计实现小堆排序的算法。虽然和大堆排序的实现过程相似,但是却可以加深对堆排序的记忆和理解。 面试题 28: 编程实现基数排序#include front = ( QueueNode )malloc( sizeof( node ) );Qrear = ( QueueNode )malloc( sizeof( node ) );if( NULL = Q-front | NULL = Q-rear )printf(Fail to malloc a new queues fornt or rear!n);return NULL; Qrear = NULL;Qfrontnext= Q-rear;retur

28、n Q;int lenData( node data, int len) /计算队列中各结点的数据的最大位数int m = 0;int temp = 0;int d;for( int i = 0; i len; i+)d = datai.data;while( d 0)d /= 10;temp +;if( temp m )m = temp;temp = 0;return m;QueueLink Push( QueueLink Q , node node ) /将数据压入队列QueueNode p1,p;p =( QueueNode )malloc( sizeof( node ) );if( N

29、ULL = p )printf(Fail to malloc a new node!n”);return NULL;p1 = Q-front;while(p1next != NULL)p1 = p1next; p-data = node。data;p1next = p;pnext = Q-rear;17return NULL;node Pop( QueueLink Q) /数据出队列node temp;temp。data = 0;temp。next = NULL;QueueNode p;p = Qfront-next;if( p != Q-rear )temp = *p;Q-front-nex

30、t = p-next;free( p );p = NULL;return temp;int IsEmpty( QueueLink Q)if( Q-frontnext = Q-rear )return 0;return 1;int main( void )int i = 0;int Max = 0; /记录结点中数据的最大位数int d = 10;int power = 1;int k = 0;node ArrayLEN =450, NULL, 32,NULL, 781,NULL, 57 ,NULL,组 145,NULL, 613,NULL, 401,NULL, 594,NULL;/队列结点数Q

31、ueueLink Queue10;for( i = 0; i 10; i+)CreateNullQueue( Queuei); /初始化队列数组for( i = 0; i LEN; i+)printf(”d ,Arrayi.data);printf(”n”);Max = lenData( Array, LEN ); /计算数组中关键字的最大位数printf(%dn,Max);18for(int j = 0; j Max; j+) /按位排序if(j = 0) power = 1;else power = power d;for(i = 0; i LEN; i+)k = Arrayi。data /power

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服