笔试与面试-无名字题_第1页
笔试与面试-无名字题_第2页
笔试与面试-无名字题_第3页
笔试与面试-无名字题_第4页
笔试与面试-无名字题_第5页
免费预览已结束,剩余19页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基本概

的理解:constchar*,charconst*,char*const的区别问题几乎是C++面试中每次都会有的题目。事实上这个概念谁都有只是三种方式非常相Bjarne在他的TheC++ProgrammingLanguage里面给出过一个助记的方法:把一个从右向左读。constchar*constcp;(*pointerto)cpisaconstpointertocharconstchar*pisapointertoconstchar;charconst*p;同上因为C++里面没有const*的运算符,所以const只能属于前面的类型指针int int p为指向一维数组的指针,这个一维数组有nint int( 下面这个程序执行后会有什么错误或者效果#defineMAX255intmain(){unsignedcharA[MAX],i;for(i=0;i<=MAX;i++)}解答:MAX=255,数组A的下标范围为:0..MAX-1,这是其一,其二当i255时,循环内执行:A[255]=255;这句本身没有问题,但是返回for(<=MAX;i++)语句时,由于unsignedchar的取值范围在(0..255),i++以后注:char类型为一个字节,取值范围是[-128,127],unsignedchar[0, 和strcpy的根本区别?C++:memset,memcpy#include"memory.h"memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘'或‘\0';例:chara[100];memset(a,'\0',sizeof(a));贝的数据长度;例:chara[100],b[50];memcpy(b,a,sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘\0'之前)50b的内存地址溢出。原型:externchar*strcpy(char*dest,char功能:把src所指由NULL结束的字符串到dest所指的数组中说明:src和dest所指内存区域不可以且dest必须有足够的空间来容纳src的字符串。返回指向dest原型:externvoid*memcpy(void*dest,void*src,unsignedintco功能:由src所指内存区域count个字节到dest所指内存区域。说明:src和dest所指内存区域不能,函数返回指向dest的指针。原型:externvoid*memset(void*buffer,charc,int功能:把buffer所指内存区域的前count个字节设置成字符c。说明:返回指向buffer的指针。是干什么用的式,如果表达式为FALSE(0),程序将报告错误,并终止执行。如果表达式不0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显变量n00可能导致错误,你可以这样写程序:ASSERT(n!=k=10/ASSERT只有在DebugRelease版本则被忽略。assert()的功能类似,它是ANSIC标准中规定的函数,它与ASSERT的一个重要区别是可以用在Release版本中。("pause");系统的暂停程序按任意键屏幕会打印"按任意键继续"省去了使用请问C++的类和C里面的struct有什么区别c++中的类具有成员保护功能,并且具有继承,多态这类ooc里的struct没有 局变量在main函数调用后,就开始分配,如果是静态变量则是在main函数前80861620程序设编写用C语言实现的求n阶阶乘问题的递归算法longintfact(int{intlonginty;{}return1;return(n*y);}递归方法实现intBSearch(elemtypea[],elemtypex,intlow,int/*在下届为low,上界为high的数组a中折半查找数据元素{intif(low>high)return-1;if(x==a[mid])returnmid;if(x<a[mid])return(BSearch(a,x,low,mid-1));elsereturn(BSearch(a,x,mid+1,high));}非递归方法实现intBSearch(elemtypea[],keytypekey,int{intlow,high,mid;{if(a[mid].key==key)returnmid;elseif(a[mid].key<key)low=mid+1;elsehigh=mid-1;}return-}递归计算如下递归函数的值(斐契f(n)=f(n-1)+f(n-2)intf(int{int{}}inta=……;intb=a=a+b=a-a=a-voidBubbleSoremtypex[],int{inti,j;elemtypetemp;{{}}}语言文件读写#include"stdio.h"{FILEcharch,filename[10];{printf("cann'topenfile\n");}{}}编程#include<Winsock2.h>#include<stdio.h>voidmain(){WSADATAwsaData;interr;wVersionRequested=err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){}SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_INaddrSrv;SOCKADDR_INaddrClient;intlen=sizeof(SOCKADDR);{

SOCKETchar e%sto",charrecvBuf[100];}}注:这是Server端;File->New->Win32ConsoleApplication,工程名:TcpSrv;然后,File->New->C++SourceFile,文件名:TcpSrv;在该工程的Setting的Link的Object/librarymodules项要加入ws2_32.lib#include<Winsock2.h>#include<stdio.h>voidmain(){WSADATAwsaData;intwVersionRequested=err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){}SOCKETsockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_INaddrSrv;charrecvBuf[100];send(sockClient,"Thisiszhangsan",strlen("Thisiszhangsan")+1,0);}注:这是Client端;File->New->Win32ConsoleApplication,工程名:TcpClient;然后,File->New->C++SourceFile,文件名:TcpClientSettingLinkObject/librarymodulesws2_32.lib#include<iostream.h>classhuman{human(){human_num++;};staticinthuman_num;{}void{cout<<"humannumis:}inthuman::human_num=0;humanf1(humanx){return}intmain(intargc,char*{humanh1;humanh2=f1(h1);return}1100humanh1; //调用构造函数,---hum_num=1; //输出:"humanis1"humanh2=f1(h1);//再调用f1(h1)的过程中,由于函数参数是按值传递对象,调用默认的构造函数,它并没有对hum_num++,所以hum_num仍=1,所以x.print()输出:"humanis1"; 在推出f1函数时,要销毁X,调用析构函数(human_num--),输出:"humanis0"(,由于该函数返回一个human对象,所以又调用默认构造函数,创建一个临时对象(human_num=0;),把临时对象赋给h2,又调用默认构造函数(human_num=0); //输出:humanis0;//在退出main()函数是,先销毁h2,调用析构函数(human_num--),输出"human_numis-1然后销毁h1,调用析构函数(--),输出"human_numis-2Windows的消息机Windows是一个消息(Message)驱动系统。Windows的消息提供了应用程序之间、应用程序与Windows系统之间进行通信段。应用程序想要Windows系统中有两种消息队列:系统消息队列和应用程序消息队列。计算机的所有输入设备由Windows。当一个事件发生时,Windows先将Windows中的消息是放在对应的进程的消息队列里的。可以通过GetMessageWM_QUIT用。两个函数可以实现这两个功能:TranslateMessage和Dispatessag动退出,而是向程序发送了一个WM_DESTROY消息(其实过程是这样的,首先向程序发送WM_CLOSE消息,默认的处理程序是调用DestroyWindow销毁窗体从而WM_DESTROY消息此时在窗体中要响应这个消息,如果需要退出程序,那么就要向程序发送WM_QUIT消息(通过PostQuitMessage实现)SendMessage向自己发消息。。的消息队列中,之后由GetMessage取出,转换后,分发给对应的窗口。这种。非式消息。例如,当WinMain调用CreateWindow时,Windows将建WM_CREATEWinMain调用ShowWindow时,Windows将给窗口消息处理函数发送WM_SIZE和WM_SHOWWINDOWWinMain调用UpdateWindow时,WindowsWM_PAINT消息。OSI的七层网络结构图(功能及特点应用层:该层直接面向用户,是OSI中的最。它的主要任务是为用户提供应用的接(功能及特点IP数据报并通过特定的网络进行传输,或从网络上接收物理帧,IP数据报并转交给网际层。网际网层(IP层):该层包括以下协议:IP(网际协议)、ICMP(InternetControlMessageProtocol,因特网控制报文协议)、ARP(AddressResolutionProtocol,地址解析协议)、RARP(ReverseAddressResolutionProtocol,反向地址解析协议)。该层负责相同或不同网络中计算机之间的通信,IP层中,ARPIP地址转换成物理地址,RARP协议用于将物理地址转换成IP地址,ICMP协议用于报告差错和传送控制信息。IP协议在TCP/IP协议组中处于地位。TCP(传输控制协议)UDP(UserDatagramProtocol,用户数据报协议IPTCP提供可靠的面向连接服务,UDP提供简单的无连接服务。传输层提供端到端,即应用程序之间的通信,主要功能是数有用户应用程序,它们均是建立在TCP/IP协议组之上的程序。参考模型和TCP/IP参考模型的区别请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用?与UDPICMP-因特网控制报文协议ICMPIP协议-网际协议交换机和路由 请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?(),Iy)。而这仍然是一个网络网关由于比较复杂,目前使用得较少。因此一般网络互连时。协议:网关协议IGP和外部网关协议EGP高质量编程BOOL,float,指针变量与“零值”if语句。(10分)请写出BOOLflag与“零值”比较的if语句。(3分)if(flagif(!flag1floatx与“零值”if语句。(4分)constfloatEPSINON=if((x>=-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二、以下为WindowsNT32C++sizeof的值(10分voidFunc(char{sizeof(str)=4(2分}charstr[]=“o”char*p=str;intn=10;sizeof(str)=6(2分)sizeof(p)=4(2分)sizeof(n)=4(2分)void*p=malloc(100);sizeof(p)=4(2分)三、简答题(25分)1ifndef/define/endif干什么用?(5分)2、#include<filename.h>#include“filename.h”有什么区别?(5分)答:对于#include<filename.h>,编译器从标准库路径开始搜索filename.h对于#include“filename.h”,编译器从用户的工作路径开始搜索filename.h3、const有什么用途?(请至少说明两种)(5分答:(1)可以定义const常量,(2)const可以修饰函数的参数、返回值,甚至函数const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健4C++C编译器编译后的函数,为什么要加extern“C”?(5分)答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字C语言的不同。假设某个函数的原型为:voidfoo(intx,inty);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。+Cextern“C”5、请简述以下两个for循环的优缺点(5分for(i=0;i<N;{if(condition)}if{for(i=0;i<N;i++)}{for(i=0;i<N;i++)}N-1次逻辑判断,并且四、有关内存的思考题(520分voidGetMemory(char{p=(char}void{char*str=NULL;strcpy(str,"oworld");}Test函数会有什么样的结果?GetMemory并不能传递动态内存,Test函数中的str一直都是NULL。strcpy(str,"oworld");将使程序崩char{charp[]="oworld";returnp;}void{char*str=NULL;str=GetMemory();}Test函数会有什么样的结果?GetMemory返回的是指向“栈内存”NULL,但其原voidGetMemory2(char**p,int{*p=(char}void{char*str=NULL;GetMemory(&str,100);strcpy(str,"o");}Test函数会有什么样的结果?答:(1)能够输出o;(2)内存泄漏void{char*str=(char*)malloc(100);strcpy(str,“o”);if(str!={strcpy(str,}}Test函数会有什么样的结果?free(str);之后,strif(str!=NULL)strcpy函数(10分)strcpy函数的原型是char*strcpy(char*strDest,constcharstrDest是目的字符串,strSrcC++/Cstrcpychar*strcpy(char*strDest,constchar*strSrc);{assert((strDest!=NULL)&&(strSrc!=NULL));//2char*address=strDest;//2while((*strDest++=*strSrc++)!=‘\0’)//2NULLreturnaddress;//2}strcpy能把strSrc的内容到strDest,为什么还要char*类型的返回值?答:为了实现链式表达式。//2分例如intlength=strlen(strcpy(strDest,“oworld”)String的构造函数、析构函数和赋值函数(25分)String的原型为:class{String(constchar*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论