简C++面试题.doc

上传人:文库蛋蛋多 文档编号:4080474 上传时间:2023-04-03 格式:DOC 页数:28 大小:67.50KB
返回 下载 相关 举报
简C++面试题.doc_第1页
第1页 / 共28页
简C++面试题.doc_第2页
第2页 / 共28页
简C++面试题.doc_第3页
第3页 / 共28页
简C++面试题.doc_第4页
第4页 / 共28页
简C++面试题.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《简C++面试题.doc》由会员分享,可在线阅读,更多相关《简C++面试题.doc(28页珍藏版)》请在三一办公上搜索。

1、腾讯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 =

2、 _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图

3、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(arr

4、ayi!=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;i

5、N;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(LinkL

6、ist &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-d

7、ata;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

8、;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 返

9、回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。Google计算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 fin

10、d_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

11、_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 (可能有负数),求A

12、1An的一个子序列AiAj,使得Ai到Aj的和最大 例如:整数序列-2, 11, -4, 13, -5, 2, -5, -3, 12, -9的最大子序列的和为21。对于这个问题,最简单也是最容易想到的那就是穷举所有子序列的方法。利用三重循环,依次求出所有子序列的和然后取最大的那个。当然算法复杂度会达到O(n3)。显然这种方法不是最优的,下面给出一个算法复杂度为O(n)的线性算法实现,算法的来源于Programming Pearls一书。在给出线性算法之前,先来看一个对穷举算法进行优化的算法,它的算法复杂度为O(n2)。其实这个算法只是对对穷举算法稍微做了一些修改:其实子序列的和我们并不需要每次

13、都重新计算一遍。假设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

14、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函数,它的功能是将输

15、入的字符串在原串上倒序后返回。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)

16、;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, su

17、m = 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); 取自取自北京中软笔试题 while(ij) psi = psi+psj; psj = psi-psj; psi =

18、 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;

19、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;

20、 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=newNod

21、e;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!=removen

22、ode)/节点未寻到,错误退出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+

23、)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;

24、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里的字

25、符填入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 l

26、ong 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

27、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+;

28、 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;in

29、t 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; 取自华为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

30、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、什么是大学爱情:大学是一个相对宽松,时间自由,自己支配的环境,也正因为这样,培植爱情之花最肥沃的土地。大学生恋爱一直是大学校园的热门话题,恋爱和学业也就自然成为了大学生在校期间面对的两个主要问题。恋爱关系处理得好、正确,健康,可以成为学习和事业的催化剂,使人学习努力、成

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号