简---C++面试题.doc_第1页
简---C++面试题.doc_第2页
免费预览已结束,剩余26页可下载查看

下载本文档

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

文档简介

腾讯1 把字符串转换为小写,不成功返回null,成功返回新串 char* tolower(char* ssrcstr) char* sdest= null; if( _1_) int j; slen = strlen(ssrcstr); sdest = new _2_; if(*sdest = null) return null; sdestslen = 0; while(_3_) sdestslen = tolowerchar(ssrcstrslen); return sdest; 2 把字符串转换为整数 例如:-123 - -123 main() if( *string = - ) n = _1_; else n = num(string); . while( _3_) k = k * 10; num = num + k; return num; int num(char* string) for(;!(*string=0);string+) int k; k = _2_; j = -slen; 中兴面试1某人在某个市场某个商家买了某台电脑,请用你熟悉的计算机语言表达出里面的关系. 其中有商家类,买家类,商品类。还要有买方法,卖方法。 2一个完整的单例模式 3曹操南下攻打刘备,刘备派关羽守锦州,关羽派张飞去守城门。刘备又派诸葛亮去向孙权求援。孙权派兵攻打曹操! 请画出uml图 2006年12月中兴在我们学校的笔试,最后的大题 /*折半查找法*/int halfsearch(int array,int n,int k)int i,j,mid;i=1;j=n;while(i=j)mid=(i+j)/2;if(k=arraymid) return(mid);else if(karraymid) j=mid-1; else i=mid+1;return(0);排序及查找方法#include #include#define n 11/*用监视哨查找*/int search(int array,int n,int k)int i;i=n-1;array0=k;while(arrayi!=k) i-;return(i);/*直接插入排序*/void insertsort(int array)int i,j;for(i=2;in;i+)array0=arrayi;j=i-1;while(array0arrayj)arrayj+1=arrayj-;arrayj+1=array0;/*建立*/void creat(int array)int i;printf(enter the array:n);for(i=1;in;i+)scanf(%d,&arrayi);/*冒泡排序法(升序)*/void mpsort(int array)int i,j,a;a=0;for(i=1;in;i+) for(j=i+1;jarrayj) a=arrayi; arrayi=arrayj; arrayj=a;/*显示*/void print(int array) int i; printf(the numbers after sort is:n); for(i=1;in;i+) printf(%d ,arrayi); printf(n); main()int a11,i,x,chang;/*printf(enter the arrayn);for(i=1;inext=null;return 1;else return 0;2插入操作status listinsert_l(linklist &l,int i,elemtype e)p=l,j=0;while(p&jnext;+j;if(!p|ji-1) return error;s=(linklist)malloc(sizeof(lnode);s-data=e;s-next=p-next;p-next=s;return ok;/listinsert_l3删除操作status listdelete_l(linklist &l,int i,elemtype &e)p=l,j=0;while(p&jnext;+j;if(!p-next|ji-1) return error;q=p-next;p-next=q-next;e=q-data;free(q);return ok;/listdelete_l4取某序号元素的操作status getelem_l(linklist &l,int i,elemtype &e)p=l-next,j=1;while(p&jnext;+j;if(!p|ji) return error;e=p-data;return ok;/getelem_l5归并两个单链表的算法void mergelist_l(linklist &la,linklist &lb,linklist &lc)/已知单链线性表la和lb的元素按值非递减排列/归并后得到新的单链线性表lc,元素也按值非递减排列pa=la-next;pb=lb-next;lc=pc=la;while(pa&pb)if(pa-datadata)pc-next=pa;pc=pa;pa=pa-next;elsepc-next=pb;pc=pb;pb=pb-next;pc-next=pa?pa:pb;free(lb);/mergelist_lchar *getmemory(void)char p = hello world;return p;void test(void)char *str = null;str = getmemory();printf(str);请问运行test 函数会有什么样的结果?答:可能是乱码。因为getmemory 返回的是指向“栈内存”的指针,该指针的地址不是 null,但其原现的内容已经被清除,新内容不可知。取自/%e6%88%91%e5%9c%a8%e4%b8%ad%e5%85%b4%e7%9a%84%e5%85%ad%e4%b8%aa%e6%9c%88%ef%bc%88from_%e5%b0%8f%e7%99%be%e5%90%88%ef%bc%8c2003%e5%b9%b4%ef%bc%89.htmgoogle计算tribonaci队列(嗯,九成九记错了那个单词),规则是t(n) = t(n - 1) + t(n - 2) + t(n -3),其中t(0) = t(1) = 1,t(2) = 2。函数定义:int tribonaci(int n) 简单的说,在计算t(n)的时候要用到t(n - 1)、t(n - 2)和t(n - 3)的结果,在计算t(n - 1)的时候也要用到t(n - 2)和t(n - 3)的结果,所以在各项计算的时候必须把以前计算的结果记录下来,去掉重复计算int find_trib(int n, int & mid, int & right) if (3 = n) mid = 1; right = 1; return 2; else int temp; mid = find_trib(n - 1, right, temp); return mid + right + temp; int tribonaci(int n) if (n 0) / undefined feature. return 0; if (0 = n | 1 = n) return 1; if (2 = n) return 2; int mid, right; int left = find_trib(n, mid, right); return left + mid + right;以下函数的结果?int cal(int x) if(x=0) return 0;else return x+cal(x-1);以下程序的结果? void foo(int*a, int* b)*a = *a+*b;*b = *a-*b;*a = *a-*b;void main()int a=1, b=2, c=3;foo(&a,&b);foo(&b,&c);foo(&c,&a);printf(%d, %d, %d, a,b,c); 最大子序列 给定一整数序列a1, a2,. an (可能有负数),求a1an的一个子序列aiaj,使得ai到aj的和最大 例如:整数序列-2, 11, -4, 13, -5, 2, -5, -3, 12, -9的最大子序列的和为21。对于这个问题,最简单也是最容易想到的那就是穷举所有子序列的方法。利用三重循环,依次求出所有子序列的和然后取最大的那个。当然算法复杂度会达到o(n3)。显然这种方法不是最优的,下面给出一个算法复杂度为o(n)的线性算法实现,算法的来源于programming pearls一书。在给出线性算法之前,先来看一个对穷举算法进行优化的算法,它的算法复杂度为o(n2)。其实这个算法只是对对穷举算法稍微做了一些修改:其实子序列的和我们并不需要每次都重新计算一遍。假设sum(i, j)是ai . aj的和,那么sum(i, j+1) = sum(i, j) + aj+1。利用这一个递推,我们就可以得到下面这个算法: int max_sub(int a,int size)int i,j,v,max=a0;for(i=0;isize;i+)v=0;for(j=i;jmax)max=v;return max;那怎样才能达到线性复杂度呢?这里运用动态规划的思想。先看一下源代码实现:int max_sub2(int a, int size)int i,max=0,temp_sum=0;for(i=0;imax)max=temp_sum;else if(temp_sum0)temp_sum=0;return max;在这一遍扫描数组当中,从左到右记录当前子序列的和temp_sum,若这个和不断增加,那么最大子序列的和max也不断增加(不断更新max)。如果往前扫描中遇到负数,那么当前子序列的和将会减小。此时temp_sum 将会小于max,当然max也就不更新。如果temp_sum降到0时,说明前面已经扫描的那一段就可以抛弃了,这时将temp_sum置为0。然后,temp_sum将从后面开始将这个子段进行分析,若有比当前max大的子段,继续更新max。这样一趟扫描结果也就出来了。 百度1.用c语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。c=str;str=strn-i;strn-i=c;return str;char *revert(char * str)int n=strlen(str);int i=0;char c;for(i=0;i 2. 用c语言实现函数void * memmove(void *dest,const void *src,size_t n)。memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。 void * memmove(void *dest,const void *src,size_t n)assert(dest!=0)&(src!=0);char * temp=(char * )dest;char * ss=(char * )src;int i=0;for(;i *temp =*ss;return temp;3.(10分)某型cpu的一级数据缓存大小为16k字节,cache块大小为64字节;二级缓存大小为256k字节,cache块大小为4k字节,采用二路组相联。经测试,下面两段代码运行时效率差别很大,请分析哪段代码更好,以及可能的原因。 为了进一步提高效率,你还可以采取什么办法? a段代码 int matrix102315; const char *str = this is a str; int i, j, tmp, sum = 0; tmp = strlen(str); for(i = 0; i 1023; i+) for(j = 0; j 15; j+) sum += matrixij + tmp; b段代码 int matrix102517; const char *str = this is a str; int i, j, sum = 0; for(i = 0; i 17; i+) for(j = 0; j 1025; j+) sum += matrixji + strlen(str); 取自/2006%e7%99%be%e5%ba%a6%e7%ac%94%e8%af%95%e9%a2%98.htm取自/%e7%99%be%e5%ba%a6%e9%9d%a2%e8%af%95%e8%bf%87%e7%a8%8b%e8%af%a6%e8%a7%a3-%e9%99%84%e7%94%b5%e8%af%9d%e9%9d%a2%e8%af%95%e9%a2%98.htm北京中软笔试题 while(ij) psi = psi+psj; psj = psi-psj; psi = psi-psj; i+; j-; coutafter reverseendl; coutpsendl; return 0; 1.不许用中间变量,把string abcde 倒转 include stdafx.h include include using namespace std; int _tmain(int argc, _tchar* argv) char *ps = new char15; strcpy_s(ps,15,i am yuchifang); coutbefore reverse:endl; coutps0) ret += getnum(rand()%10)*index; ndex /= 10; -time; return ret; ; int main(int argc, char *argv) rand4 r4; coutr4.next()endl; coutr4.next()endl; coutr4.next()endl; system(pause); return 0; include include using namespace std; class rand4 private: int a10; int getnum(int index) while(aindex=-1) +index; index %= 10; int ret = aindex; aindex = -1; return ret; void init() for(int i=0;im_listlength)/插入点超过总长度returnfalse;while(ptemp!=null)/找到指定的节点curpos+;if(curpos=afternode)break;ptemp=ptemp-next;if(curpos!=afternode)/节点未寻到,错误退出returnfalse;lnode*newnode=newlnode;/将新节点插入指定节点后newnode-data=data;newnode-next=ptemp-next;ptemp-next=newnode;m_listlength+;returntrue;/remove the node after a specified nodeboollinklist:removeafter(intremovenode)lnode*ptemp=m_plist;intcurpos=-1;if(removenodem_listlength)/删除点超过总长度returnfalse;/找到指定的节点后一个节点,因为删除的是后一个节点while(ptemp!=null)curpos+;if(curpos=removenode+1)break;ptemp=ptemp-next;if(curpos!=removenode)/节点未寻到,错误退出returnfalse;lnode*pdel=null;/删除节点pdel=ptemp-next;ptemp-next=pdel-next;deletepdel;m_listlength-;returntrue;/sort the linked list to descending order.voidlinklist:sort()if(m_listlength=1)return;lnode*ptemp=m_plist;inttemp;/选择法排序for(inti=0;im_listlength-1;i+)for(intj=i+1;jm_listlength;j+)if(ptempi.dataptempj.data)temp=ptempi.data;ptempi.data=ptempj.data;ptempj.data=temp;/前两个函数实现了要求a,后一个函数sort()实现了要求b3. 判断下面的递归函数是否可以结束)staticintf(inti)returnf(i-1)*f(i-1);ansewr: n,明显没有返回条件语句,无限递归了staticintf(inti)if(i=0)return1;elsereturnf(i-1)*f(i-1);ansewr:y,当i0时可结束递归staticintf(inti)if(i=0)return1;elsereturnf(i-1)*f(i-2);ansewr:n,因为i=1时,f(i-2)=f(-1),进入一个无限递归中2编程将整数转换成字符串:void itoa(int,char);例如itoa(-123,s)则s=“-123”;答:char*itoa(intvalue,char*string)chartmp33;char*tp=tmp;inti;unsignedv;char*sp;/将值转为正值if(value0)v=-value;elsev=(unsigned)value;/将数转换为字符放在数组tmp中while(v)i=v%10;v=v/10;*tp+=i+0;/将tmp里的字符填入string指针里,并加上负号(如果有)sp=string;if(valuetmp)*sp+=*-tp;*sp=0;returnstring;网易 1、10个人分成4组 有几种分法? 2、如图: 7 8 9 10 6 1 2 11 5 4 3 12 16 15 14 13 设“1”的坐标为(0,0) “7”的坐标为(1,1) 编写一个小程序,使程序做到输入坐标(x,y)之后显示出相应的数字。 3、#include /example input and output /in 1 2 3 out 1 3 1 /in 123456789 2 100 out 123456789 100 21 long mex(long a,long b,long c) long d; if(b=0) return 0; if(b=1) return a%c; d=mex(a,b/2,c); d*=d;这里忘了;d*=mex(a,b%2,c);d%=c; return d; int main(void) long x,y,z; while(1) if(scanf(%d %d %d,&x,&y,&z)3) return 0; if(x0) printf(too small );continue; if(y0) printf(too small );continue; if(zz) printf(too big );continue; if(z1000000010) printf(too big );continue printf(%d %d %d,x,z,mex(x,y,z); 根据这个程序,当已知一个输入,算出输出,如:输入 1 3 1 则输出 1 2 3 输入 123456789 100 21 输出 123456789 2 100 2:2个基本有序数组的 合并题 #include int merge_set(int a,int la, int b, int lb,int c) int i=0,j=0,k=0,tmp; while( ila & jlb) if(aibj) tmp=ai+; else tmp=bj+; if (k=0 | tmp!=ck-1 ) ck+=tmp; while (ila) if (k=0 | ai!=ck-1 ) ck=ai;k+; i+; while (jlb) if ( k=0 | bj!=ck-1 ) ck=bj; k+; j+; return k; void print(int a, int la) int i;for(i=0;ila;i+) printf(%d ,ai);printf(n); int main() int a6=3,5,8,8,11,11;int b12=2,3,6,8,11,11,11,15,15,20,23,26;int la=6;int lb=12;int cla+lb;int lc;lc=merge_set(a,la,b,lb,c);print(c,lc);printf(nlength is %dn,lc);return 0; 取自/06%e5%b9%b43%e6%9c%8819%e5%8f%b7%e4%b8%ad%e5%85%b4%e7%ac%94%e8%af%95%e9%a2%98%e7%9b%ae.htm华为4. c 程序写运行结果。 void f2() printf(b:f2rn); void callfunc() printf(b:callfuncrn); f1(); f2(); ; int main() b *pb=new b; pb-callfunc(); a *pa=pb; pa-callfunc(); return 0; class a public: void f1() printf(a:f1rn); virtual void f2() printf(a:f2rn); void callfunc() printf(a:callfuncrn); f1(); f2(); ; class b:public a public: void f1() printf(b:f1rn); sizeof(n)=( ) void func(char str100) sizeof(str)=( ); 1、在windows下,写出运行结果,每空2分,共10分。 char str = hello; char *p=str; int n=10; sizeof(str)=( ) sizeof(p)=( ) 我的大学爱情观目录:1、 大学概念2、 分析爱情健康观3、 爱情观要三思4、 大学需要对爱情要认识和理解5、 总结1、什么是大学爱情:大学是一个相对宽松,时间自由,自己支配的环境,也正因为这样,培植爱情之花最肥沃的土地。大学生恋爱一直是大学校园的热门话题,恋爱和学业也就自然成为了大学生在校期间面对的两个主要问题。恋爱关系处理得好、正确,健康,可以成为学习和事业的催化剂,使人学习努力、成绩上升;恋爱关系处理的不当,不健康,可能分散精力、浪费时间、情绪波动、成绩下降。因此,大学生的恋爱观必须树立在健康之上,并且树立正确的恋爱观是十分有必要的。因此我从下面几方面谈谈自己的对大学爱情观。2、什么是健康的爱情:1) 尊重对方,不显示对爱情的占有欲,不把爱情放第一位,不痴情过分;2) 理解对方,互相关心,互相支持,互相鼓励,并以对方的幸福为自己的满足; 3) 是彼此独立的前提下结合;3、什么是不健康的爱情:1)盲目的约会,忽视了学业;2)过于痴情,一味地要求对方表露爱的情怀,这种爱情常有病态的夸张;3)缺乏体贴怜爱之心,只表现自己强烈的占有欲;4)偏重于外表的追求;4、大学生处理两人的在爱情观需要三思:1. 不影响学习:大学恋爱可以说是一种必要的经历,学习是大学的基本和主要任务,这两者之间有错综复杂的关系,有的学生因为爱情,过分的忽视了学习,把感情放在第一位;学习的时候就认真的去学,不要去想爱情中的事,谈恋爱的时候用心去谈,也可以交流下学习,互相鼓励,共同进步。2. 有足够的精力:大学生活,说忙也会很忙,但说轻松也是相对会轻松的!大学生恋爱必须合理安排自身的精力,忙于学习的同时不能因为感情的事情分心,不能在学习期间,放弃学习而去谈感情,把握合理的精力,分配好学习和感情。3、 有合理的时间;大学时间可以分为学习和生活时间,合理把握好学习时间和生活时间的“度”很重要;学习的时候,不能分配学习时间去安排两人的在一起的事情,应该以学习为第一;生活时间,两人可以相互谈谈恋爱,用心去谈,也可以交流下学习,互相鼓励,共同进步。5、大学生对爱情需要认识与理解,主要涉及到以下几个方面:(1)

温馨提示

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

评论

0/150

提交评论