您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > C++常见笔试题及答案
C++面试题1#include“filename.h”和#includefilename.h的区别?答:对于#includefilename.h编译器从标准库开始搜索filename.h对于#include“filename.h”编译器从用户工作路径开始搜索filename.h2头文件的作用是什么?答:一、通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。二、头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则,能大大减轻程序员调试、改错的负担。3C++函数中值的传递方式有哪几种?答:C++函数的三种传递方式为:值传递、指针传递和引用传递。4内存的分配方式有几种?答:一、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。二、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。三、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。5实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数;答:双向链表删除一个节点Ptemplateclasstypevoidlisttype::delnode(intp){intk=1;listnodetype*ptr,*t;ptr=first;while(ptr-next!=NULL&&k!=p){ptr=ptr-next;k++;}t=ptr-next;cout你已经将数据项t-data删除endl;ptr-next=ptr-next-next;length--;deletet;}在节点P后插入一个节点:templateclasstypeboollisttype::insert(typet,intp){listnodetype*ptr;ptr=first;intk=1;while(ptr!=NULL&&kp){ptr=ptr-next;k++;}if(ptr==NULL&&k!=p)returnfalse;else{listnodetype*tp;tp=newlistnodetype;tp-data=t;tp-next=ptr-next;ptr-next=tp;length++;returntrue;}}6写一个函数,将其中的\t都转换成4个空格。boolchange(char*buf,intlen){intcount=0;inti;//统计有多少个'\t'for(i=0;buf[i]!='\0';i++){if(buf[i]=='\t')count++;}//给定的buf空间是否能装下生成的字符串intj=i+3*count;if(lenj+1)returnfalse;//从后向前逐个替换while(count0){while(buf[i]!='\t')buf[j--]=buf[i--];count--;buf[j]=buf[j-1]=buf[j-2]=buf[j-3]='';j-=4;i--;}returntrue;}intmain(){charbuf[100]=123\t45\t\t\t6\t\t65\n4234\t5345;coutBeforechage:endl;coutbufendl;coutAftercallingthefunction:endl;//buf是原字符串,100是buf的长度(要足够大,最好是原字符串的3倍)if(change(buf,100)==true)coutbufendl;charc;cinc;}7Windows程序的入口是哪里?写出Windows消息机制的流程.函数WinMain()Windows应用程序的消息处理机制如图1.2所示。(1)操作系统接收到应用程序的窗口消息,将消息投递到该应用程序的消息队列中。(2)应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息。取出消息后,应用程序可以对消息进行一些预处理,例如,放弃对某些消息的响应,或者调用TranslateMessage产生新的消息。(3)应用程序调用DispatchMessage,将消息回传给操作系统。消息是由MSG结构体对象来表示的,其中就包含了接收消息的窗口的句柄。因此,DispatchMessage函数总能进行正确的传递。(4)系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理(即“系统给应用程序发送了消息”)。8如何定义和实现一个类的成员函数为回调函数?把函数声明为static9C++里面是不是所有的动作都是main()引起的?如果不是,请举例.答:在运行c++程序时,通常从main()函数开始执行。因此如果没有main(),程序将不完整,编译器将指出未定义main()函数。例外情况:如,在windows编程中,可以编写一个动态连接库(dll)模块,这是其他windows程序可以使用的代码。由于DLL模块不是独立的程序,因此不需要main().用于专用环境的程序--如机器人中的控制器芯片--可能不需要main().但常规的独立程序都需要main().10C++里面如何声明constvoidf(void)函数为C程序中的库函数?externCvoidf(void);11下列哪两个是等同的C==Dintb;Aconstint*a=&b;Bconst*inta=&b;Cconstint*consta=&b;Dintconst*consta=&b;12内联函数在编译时是否做参数类型检查是13三个float:a,b,c问值(a+b)+c==(b+a)+c1(a+b)+c==(a+c)+b114把一个链表反向填空voidreverse(test*head){test*pe=head;test*ps=head-next;while(ps){pe-next=ps-next;ps-next=head;head=ps;ps=pe-next;}}16某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最化了,换到另一个系统(300M的CPU,50M的SDRAM)中运行,还需要优化吗?要。程序在每时每刻都要优化,只要能找到可以优化的方法。优化有多种目的,在200M的CPU中可能需要以速度为重点优化,在300M的CPU中可能要以代码长度为目的优化。17.下面哪种排序法对12354最快Caquicksort//快速排序b.bublesort//冒泡排序c.mergesort//归并排序18.哪种结构,平均来讲,获取一个值最快Ba.binarytree//二叉树b.hashtable//散列表,哈希表c.stack//栈19请问C++的类和C里面的struct有什么区别?答:c++的类的成员默认情况下是私有的,c的struct的成员默认情况下是公共的.20请讲一讲析构函数和虚函数的用法和作用?答:析构函数的名字和类名相同,没有返回值,没有参数,不能随意调用也没有重载。只是在类对象生命期结束时由系统自动调用。虚函数用在继承中,当在派生类中需要重新定义基类的函数时需要在基类中将该函数声明为虚函数,作用为使程序支持动态联编。21全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?答:一些变量整个程序中都是可见的,它们称为全局变量,一些变量在函数内部定义且只在函数中可知,则称为局部变量。全局变量由编译器建立且存放在内存的全局数据区,局部变量存放在栈区.22一些寄存器的题目,主要是寻址和内存管理等一些知识。1、立即寻址2、寄存器寻址3、直接寻址4、寄存器间接寻址5、基址加变址寻址6、寄存器相对寻址7、相对基址加变址寻址238086是多少位的系统?在数据总线上是怎么实现的?8086有16根数据线和20根地址线,因为可用20位地址.8086是16位处理器.24多态。overload和override的区别。答:多态:接口的多种不同的实现方式即为多态重载在相同范围(同一个类中),函数名字相同,参数不同,virtual关键字可有可无。覆盖是指派生类函数覆盖基类函数,不同的范围,函数名字相同,参数相同,基类函数必须有virtual关键字。Sony笔试题25.完成下列程序**.*.*..*..*..*...*...*...*...*....*....*....*....*....*.....*.....*.....*.....*.....*.....*......*......*......*......*......*......*......*.......*.......*.......*.......*.......*.......*.......*.......#includeiostreamusingnamespacestd;constintn=8;main(){inti;intj;intk;for(i=n;i=1;i--){for(j=0;jn-i+1;j++){cout*;for(k=1;kn-i+1;k++){cout.;}}coutendl;}system(pause)}26完成程序,实现对数组的降序排序#includeiostreamusingnamespacestd;voidsort(int*arr,intn);intmain(){intarray[]={45,56,76,234,1,34,23,2,3};sort(array,9);for(inti=0;i=8;i++)//曾经在这儿出界coutarray[i];coutendl;system(pause);}voidsort(int*arr,intn){inttemp;for(inti=1;i9;i++){for(intk=0;k9-i;k++)//曾经在这儿出界{if(arr[k]arr[k+1]){temp=arr[k];arr[k]=arr[k+1];arr[k+1]=temp;}}}}27费波那其数列,1,1,2,3,5……编写程序求第十项。可以用递归,也可以用其他方法,但要说明你选择的理由。非递归#includeiostreamusingnamespacestd;intPheponatch(intn);main(){intPh=Pheponatch(10);coutPhendl;system(pause);}intPheponatch(intn){intelem;intn1=1;intn2=1;if(n==1||n==2)return1;else{for(inti=3;i=n;i++){elem=n1+n2;n1=n2;n2=elem;}returnelem;}}递归#includeiostreamusingnamespacestd;intPheponatch(intn);main(){intn;cinn;intph=Pheponatch(n);coutphendl;system(pause);}intPheponatch(intn){if(n=0)exit(-1);elseif(n==1||n==2)return1;elsereturnPheponatch(n-1)+Pheponatch(n-2);}28下列程序运行时会崩溃,请找出错误并改正,
本文标题:C++常见笔试题及答案
链接地址:https://www.777doc.com/doc-3591386 .html