您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > 重点C_C 面试题.TXT
希望这个贴子能给正在找工作的朋友一点帮助.如果代码里面有while(*p)判断字符串结束的,要用*p!='\0'代替。1)sizeof相关系列问题,const相关系列问题a.对于structs{chara;intb}sizeof(s)=8因为内存对齐b.对于structs{inta;charb}sizeof(s)=5这里不需要内存对齐,对齐只向上不向下,这种考得少c.对于inta[200]sizeof(a)=200*sizeof(int)=800对整个数组评测,int*a=newint[200],sizeof(a)=4对指针评测d.这种使用位域的也有,从上到下最多相加不大于8便占1个位置,bits=1+1(4+28)+1(3)=3.其中元素最大为1个char大小8位structbits{chara:8;charb:4;charc:2;chard:3;};2)写出二分查找的代码.intbfind(int*a,intlen,intval){intm=len/2;intl=0;intr=len;while(l!=m&&r!=m){if(a[m]val){r=m;m=(m+l)/2;}elseif(a[m]val){l=m;m=(m+r)/2;}elsereturnm;}return-1;//没有找到}3)写出在母串中查找子串出现次数的代码.intcount1(char*str,char*s){char*s1;char*s2;intcount=0;while(*str!='\0'){s1=str;s2=s;while(*s2==*s1&&(*s2!='\0')&&(*s1!='0')){s2++;s1++;}if(*s2=='\0')count++;str++;}returncount;}查找第一个匹配子串位置,如果返回的是s1长度len1表示没有找到size_tfind(char*s1,char*s2){size_ti=0;size_tlen1=strlen(s1)size_tlen2=strlen(s2);if(len1-len20)returnlen1;for(;ilen1-len2;i++){size_tm=i;for(size_tj=0;jlen2;j++){if(s1[m]!=s2[j])break;m++;}if(j==len)break;}returnilen1-len2?i:len1;}*4)写出快速排序或者某种排序算法代码快速排序:intpartition(int*a,intl,intr){inti=l-1,j=r,v=a[r];while(1){while(a[++i]v);while(a[--j]v)if(j=i)break;if(i=j)break;swap(a[i],a[j]);}swap(a[i],a[r]);returni;}voidqsort(int*a,intl,intr){if(l=r)return;inti=partition(a,l,r);qsort(a,l,i-1);qsort(a,i+1,r);}冒泡排序:voidbuble(int*a,intn){for(inti=0;in;i++){for(intj=1;jn-i;j++){if(a[j]a[j-1]){inttemp=a[j];a[j]=a[j-1];a[j-1]=temp;}}}}插入排序:voidinsertsort(int*a,intn){intkey;for(intj=1;jn;j++){key=a[j];for(inti=j-1;i=0&&a[i]key;i--){a[i+1]=a[i];}a[i+1]=key;}}出现次数相当频繁5)写出查找从一个集合中输出所有子集合的算法.????*6)实现strcpy函数char*strcpy(char*destination,constchar*source){assert(destination!=NULL&&source!=NULL);char*target=destinaton;while(*destinaton++=*source++);returntarget;}出现次数相当频繁*7)实现strcmp函数intstrcmp11(char*l,char*r){assert(l!=0&&r!=0);while(*l==*r&&*l!='\0')l++,r++;if(*l*r)return1;elseif(*l==*r)return0;return-1;}//实现字符串翻转voidreserve(char*str){assert(str!=NULL);char*p1=str;char*p2=str-1;while(*++p2);//一般要求不能使用strlenp2-=1;while(p1p2){charc=*p1;*p1++=*p2;*p2--=c;}}出现次数相当频繁8)将一个单链表逆序structlist_node{list_node(inta,list_node*b):data(a),next(b)//这个为了测试方便{}intdata;list_node*next;};voidreserve(list_node*phead){list_node*p=phead-next;if(p==NULL||p-next==NULL)return;//只有头节点或一个节点list_node*p1=p-next;p-next=NULL;while(p1!=NULL){p=p1-next;p1-next=phead-next;phead-next=p1;p1=p;}}测试程序:listlt;lt.phead=newlist_node(0,0);lt.phead-next=newlist_node(1,0);lt.phead-next-next=newlist_node(2,0);lt.phead-next-next-next=newlist_node(3,0);lt.reserve();list_node*p=lt.phead;while(p){coutp-dataendl;p=p-next;}9)循环链表的节点对换和删除。//双向循环list_node*earse(list_node*node){//if(node==rear)returnnode-next;//对于头节点可判断也可不判断。最好加上list_node*next=node-next;next-prev=node-prev;node-prev-next=next;deletenode;retrunnext;}//单项循环list_node*earse(list_node*node){//if(node==rear)returnnode-next;//对于头节点可判断也可不判断。最好加上list_node*p=rear;while(p-next!=node)p=p-next;p-next=node-next;deletenode;retrunp-next;}*10)将一个数字字符串转换为数字.1234--1234intatoii(char*s){assert(s!=NULL);intnum=0;inttemp;while(*s'0'&&*s'9'){num*=10;num+=*s-'0';s++;}returnnum;}出现次数相当频繁11)实现任意长度的整数相加或者相乘功能。voidbigadd(char*num,char*str,intlen){for(inti=len;i0;i--){num[i]+=str[i];intj=i;while(num[j]=10){num[j--]-=10;num[j]+=1;}}}*12)写函数完成内存的拷贝void*memcpy(void*dst,constvoid*src,unsignedintlen){registerchar*d;registerchar*s;if(len==0)returndst;if(dstsrc)//考虑覆盖情况{d=(char*)dst+len-1;s=(char*)src+len-1;while(len=4)//循环展开,提高执行效率{*d--=*s--;*d--=*s--;*d--=*s--;*d--=*s--;len-=4;}while(len--){*d--=*s--;}}elseif(dstsrc){d=(char*)dst;s=(char*)src;while(len=4){*d++=*s++;*d++=*s++;*d++=*s++;*d++=*s++;len-=4;}while(len--){*d++=*s++;}}returndst;}出现次数相当频繁13static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域,只在定于变量的源文件内可见经常问14.引用与指针有什么区别?1)引用必须被初始化,指针不必。2)引用初始化以后不能被改变,指针可以改变所指的对象。3)不存在指向空值的引用,但是存在指向空值的指针。4)重载操作符使用引用可以完成串试操作经常问15.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在全局静态存储区,局部变量在堆栈16.什么是平衡二叉树?左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于117.什么函数不能声明为虚函数?constructor13.冒泡排序算法的时间复杂度是什么?O(n^2)18.写出floatx与“零值”比较的if语句。if(x0.000001&&x-0.000001)这个都够古董的,恐怕是8086以前的事情吧.汇编早都可以用一条指令比较了.既然想考精度,就换个不是0的,比如0.00002,if(x-0.000020.000001&&x-0.0002-0.000001)19.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。循环链表,用取余操作做//这样写感觉不是太好,置1表示被访问过。voidjoe(intn,intm){int*a=newint[n];inti=0;intpos=0;while(in){intc=m;pos%=n;while(c){c--;while(a[pos]==1){pos++;pos%=n;}pos++;pos%=n;}a[pos-1]=1;coutpos;i++;}}20、设有以下说明和定义:typedefunion{longi;intk[5];charc;}DATE;//sizeof(int)*5=20structdata{intcat;DATEcow;doubledog;}too;//4+20+8=32DATEmax;则语句printf(%d,sizeof(structdate)+sizeof(max));的执行结果是:___52____21、用指针的方法,将字符串“ABCD1234efgh”前后对调显示//不要用strlen求字符串长度,这样就没分了代码如下:charstr123[]=ABCD1234efgh;char*p1=str123;char*p2=str123-1;while(*++p2);p2-=1;while(p1p2){charc=*p1;*p1++=*p2;*p2--=c;}22、有10亿个浮点数,求出其中最大的10000个,用了标准库的,不让用的话,只能自己写堆函数vectorfloatbigs(10000,0);vectorfloat::iteratorit;for(it=bigs.begin();it!=bigs.end();it++){*it=(float)rand()/7;//数据都是用随机数模拟的}coutbigs.size()endl;make_heap(bigs.begin(
本文标题:重点C_C 面试题.TXT
链接地址:https://www.777doc.com/doc-5838721 .html