C语言面试题大汇总之华为面试题3_第1页
C语言面试题大汇总之华为面试题3_第2页
C语言面试题大汇总之华为面试题3_第3页
C语言面试题大汇总之华为面试题3_第4页
C语言面试题大汇总之华为面试题3_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

面试经典试题Author:Vince————即使你是个编程高手,你在面试前也应该要看看这套题,她也许会给你带来好运,否则你有可能后悔当初为什么没有看而跳楼自杀,这样我会很内疚的。这套题看似简单,但你未必能得高分,即使你看不懂也要把她背下来!欢迎转载此文,转载时请注明文章来源:文斯测试技术研究中心/vincetest1编程基础1.1基本概念1.const的理解:constchar*,charconst*,char*const的区别问题几乎是C++面试中每次都会有的题目。事实上这个概念谁都有只是三种声明方式非常相似很容易记混。Bjarne在他的TheC++ProgrammingLanguage里面给出过一个助记的方法:把一个声明从右向左读。char*constcp;(*读成pointerto)cpisaconstpointertocharconstchar*p;pisapointertoconstchar;charconst*p;同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。2.c指针int*p[n];-----指针数组,每个元素均为指向整型数据的指针。int(*p)[n];------p为指向一维数组的指针,这个一维数组有n个整型数据。int*p();----------函数带回指针,指针指向返回的值。int(*p)();------p为指向函数的指针。3.数组越界问题(这个题目还是有点小险的)下面这个程序执行后会有什么错误或者效果:#defineMAX255intmain(){unsignedcharA[MAX],i;for(i=0;i<=MAX;i++)A[i]=i;}解答:MAX=255,数组A的下标范围为:0..MAX-1,这是其一,其二当i循环到255时,循环内执行:A[255]=255;这句本身没有问题,但是返回for(i=0;i<=MAX;i++)语句时,由于unsignedchar的取值范围在(0..255),i++以后i又为0了..无限循环下去.注:char类型为一个字节,取值范围是[-128,127],unsignedchar[0,255]4.C++:memset,memcpy和strcpy的根本区别?答:#include"memory.h"memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为''或'';例:chara[100];memset(a,'',sizeof(a));memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:chara[100],b[50];memcpy(b,a,sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。strcpy就只能拷贝字符串了,它遇到'\0'就结束拷贝;例:chara[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个'\0'之前)是否超过50位,如超过,则会造成b的内存地址溢出。strcpy原型:externchar*strcpy(char*dest,char*src);

{

ASSERT((dest!=NULL)&&(src!=NULL));

Char*address=dest;

While((*dest++=*src++)!=’\0’)

Continue;

Returndest;

}用法:#include<string.h>功能:把src所指由NULL结束的字符串复制到dest所指的数组中。说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。memcpy原型:externvoid*memcpy(void*dest,void*src,unsignedintcount);

{

ASSERT((dest!=NULL)&&(src!=NULL));

ASSERT((dest>src+count)||(src>dest+count));//防止内存重叠,也可以用restrict修饰指针

Byte*bdest=(Byte*)dest;

Byte*bsrc=(Byte*)src;

While(count-->0)

*bdest++=**bsrc++;

Returndest;

}用法:#include<memory.h>功能:由src所指内存区域复制count个字节到dest所指内存区域。说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。Memset原型:externvoid*memset(void*buffer,charc,intcount);用法:#include功能:把buffer所指内存区域的前count个字节设置成字符c。说明:返回指向buffer的指针。5.ASSERT()是干什么用的答:ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE(0),程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n在程序中不应该为0,如果为0可能导致错误,你可以这样写程序:......ASSERT(n!=0);k=10/n;

Rerutnf(n-1)+f(n-2);}4.交换两个数,不用第三块儿内存:答:inta=……;intb=……;a=a+b;b=a-b;a=a-b;5.冒泡排序:答:voidBubbleSort(elemtypex[],intn)

//时间复杂度为0(n*n);{inti,j;elemtypetemp;for(i=1;i<n;i++)for(j=0;j<n-i;j++)

{if(x[j].key>x[j+1].key){temp=x[j];x[j]=x[j+1];x[j+1]=temp;}}}//补充一个改进的冒泡算法:voidBubbleSort(elemtypex[],intn){Inti,j;BOOLexchange;

//记录交换标志for(i=1;i<n;++i)

//最多做n-1趟排序{Exchange=false;For(j=n-1;j>=i;--j){If(x[j]>x[j+1]){

x[0]=x[j];

X[j]=x[j+1];

X[j+1]=x[0];

Exchange=true;

//发生了交换,设置标志为真.}}if(!Exchange)

//为发生替换,提前终止算法return;}}6.c语言文件读写#include"stdio.h"main(){FILE*fp;charch,filename[10];scanf("%s",filename);if((fp=fopen(filename,"w")==NULL){printf("cann'topenfilen");exit(0);}ch=getchar();while(ch!='#'){fputc(ch,fp);putchar(ch);ch=getchar();}fclose(fp);}7.winsocket编程

//这个不错//服务器代码#include<Winsock2.h>#include<stdio.h>voidmain(){WORDwVersionRequested;//版本号WSADATAwsaData;

//数据interr;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){WSACleanup();return;}SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);//建立套接字SOCKADDR_INaddrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//绑定端口listen(sockSrv,5);

//转换socket套接子为侦听套接子SOCKADDR_INaddrClient;intlen=sizeof(SOCKADDR);while(1)

//无限循环{SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);charsendBuf[100];sprint(sendBuf,"Welcome%sto",inet_ntoa(addrClient.sin_addr));send(sockConn,sendBuf,strlen(sendBuf)+1,0);charrecvBuf[100];recv(sockConn,recvBuf);printf("%sn",recvBuf);closesocket(sockConn);WSACleanup();}}注:这是Server端;File->New->Win32ConsoleApplication,工程名:TcpSrv;然后,File->New->C++SourceFile,文件名:TcpSrv;在该工程的Setting的Link的Object/librarymodules项要加入ws2_32.lib#include<Winsock2.h>#include<stdio.h>voidmain(){WORD

wVersionRequested;WSADATA

wsaData;interr;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,&wsaData);//启动winsockDllif(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){WSACleanup();return;}SOCKETsockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_INaddrSrv;

addrSrv.sin_addr.S_un.S_addr=inet_addr("");addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));charrecvBuf[100];recv(sockClient,recvBuf,100,0);printf("%sn",recvBuf);send(sockClient,"Thisiszhangsan",strlen("Thisiszhangsan")+1,0);closesocket(sockClient);WSACleanup();}注:这是Client端;File->New->Win32ConsoleApplication,工程名:TcpClient;然后,File->New->C++SourceFile,文件名:TcpClient;同理,在该工程的Setting的Link的Object/librarymodules项要加入ws2_32.lib8.类的知识(非常不错的一道题目)..C++#include<iostream.h>classhuman{public:human(){human_num++;};//默认构造函数staticinthuman_num;

//静态成员~human(){human_num--;

温馨提示

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

评论

0/150

提交评论