优质华为慧通笔试题范文word版 28页.docx

上传人:b****2 文档编号:1798681 上传时间:2022-10-24 格式:DOCX 页数:22 大小:22.75KB
下载 相关 举报
优质华为慧通笔试题范文word版 28页.docx_第1页
第1页 / 共22页
优质华为慧通笔试题范文word版 28页.docx_第2页
第2页 / 共22页
优质华为慧通笔试题范文word版 28页.docx_第3页
第3页 / 共22页
优质华为慧通笔试题范文word版 28页.docx_第4页
第4页 / 共22页
优质华为慧通笔试题范文word版 28页.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

优质华为慧通笔试题范文word版 28页.docx

《优质华为慧通笔试题范文word版 28页.docx》由会员分享,可在线阅读,更多相关《优质华为慧通笔试题范文word版 28页.docx(22页珍藏版)》请在冰豆网上搜索。

优质华为慧通笔试题范文word版 28页.docx

优质华为慧通笔试题范文word版28页

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!

==本文为word格式,下载后可方便编辑和修改!

==

华为慧通笔试题

  1写出程序把一个链表中的接点顺序倒排

  typedefstructlinknode

  {

  intdata;

  structlinknode*next;

  }node;

  //将一个链表逆置

  node*reverse(node*head)

  {

  node*p,*q,*r;

  p=head;

  q=p->next;

  while(q!

=NULL)

  {

  r=q->next;

  q->next=p;

  p=q;

  q=r;

  }

  head->next=NULL;

  head=p;

  returnhead;

  }

  2写出程序删除链表中的所有接点

  voiddel_all(node*head)

  {

  node*p;

  while(head!

=NULL)

  {

  p=head->next;

  free(head);

  head=p;

  }

  cout<<”释放空间成功!

”<}

  3两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串

  voidinsert(char*s,char*t,inti)

  {

  char*q=t;

  char*p=s;

  if(q==NULL)return;

  while(*p!

=’\0′)

  {

  p++;

  }

  while(*q!

=0)

  {

  *p=*q;

  p++;

  q++;

  }

  *p=‘\0′;

  }

  分析下面的代码:

  char*a=“hello”;

  char*b=“hello”;

  if(a==b)

  printf(“YES”);

  else

  printf(“NO”);

  这个简单的面试题目,我选输出no(对比的应该是指针地址吧),可在VC是YES在C是NO

  lz的呢,是一个常量字符串。

位于静态存储区,它在程序生命期内恒定不变。

如果编译器优化的话,会有可能a和b同时指向同一个hello的。

则地址相同。

如果编译器没有优化,那么就是两个不同的地址,则不同

  写一个函数,功能:

完成内存之间的拷贝

  memcpysourcecode:

  270void*memcpy(void*dst,constvoid*src,unsignedintlen)

  271{

  272registerchar*d;

  273registerchar*s;

  27

  275if(len==0)

  276returndst;

  277

  278if(is_overlap(dst,src,len,len))

  279complain3(“memcpy”,dst,src,len);

  280

  281if(dst>src){

  282d=(char*)dst+len–1;

  283s=(char*)src+len–1;

  284while(len>=4){

  285*d–=*s–;

  286*d–=*s–;

  287*d–=*s–;

  288*d–=*s–;

  289len-=4;

  290}

  291while(len–){

  292*d–=*s–;

  293}

  294}elseif(dst

  295d=(char*)dst;

  296s=(char*)src;

  297while(len>=4){

  298*d++=*s++;

  299*d++=*s++;

  300*d++=*s++;

  301*d++=*s++;

  302len-=4;

  303}

  304while(len–){

  305*d++=*s++;

  306}

  307}

  308returndst;

  309}

  公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出)

  各种情况包括:

  1、参数是指针,检查指针是否有效

  2、检查复制的源目标和目的地是否为同一个,若为同一个,则直接跳出

  3、读写权限检查

  4、安全检查,是否会溢出

  memcpy拷贝一块内存,内存的大小你告诉它

  strcpy是字符串拷贝,遇到’\0′结束

  /*memcpy───拷贝不重叠的内存块*/

  voidmemcpy(void*pvTo,void*pvFrom,size_tsize)

  {

  void*pbTo=(byte*)pvTo;

  void*pbFrom=(byte*)pvFrom;

  ASSERT(pvTo!

=NULL&&pvFrom!

=NULL);//检查输入指针的有效性

  ASSERT(pbTo>=pbFrom+size||pbFrom>=pbTo+size);//检查两个指针指向的内存是否重叠

  while(size–>0)

  *pbTo++==*pbFrom++;

  return(pvTo);

  }

  华为面试题:

怎么判断链表中是否有环?

  boolCircleInList(Link*pHead)

  {

  if(pHead==NULL||pHead->next==NULL)//无节点或只有一个节点并且无自环

  return(false);

  if(pHead->next==pHead)//自环

  return(true);

  Link*pTemp1=pHead;//step1

  Link*pTemp=pHead->next;//step2

  while(pTemp!

=pTemp1&&pTemp!

=NULL&&pTemp->next!

=NULL)

  {

  pTemp1=pTemp1->next;

  pTemp=pTemp->next->next;

  }

  if(pTemp==pTemp1)

  return(true);

  return(false);

  }

  两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串

  voidinsert(char*s,char*t,inti)

  {

  memcpy(&s[strlen(t)+i],&s[i],strlen(s)-i);

  memcpy(&s[i],t,strlen(t));

  s[strlen(s)+strlen(t)]=’\0′;

  }

  1。

编写一个C函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。

  char*search(char*cpSource,charch)

  {

  char*cpTemp=NULL,*cpDest=NULL;

  intiTemp,iCount=0;

  while(*cpSource)

  {

  if(*cpSource==ch)

  {

  iTemp=0;

  cpTemp=cpSource;

  while(*cpSource==ch)

  ++iTemp,++cpSource;

  if(iTemp>iCount)

  iCount=iTemp,cpDest=cpTemp;

  if(!

*cpSource)

  break;

  }

  ++cpSource;

  }

  returncpDest;

  }

  2。

请编写一个C函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。

  intsearch(char*cpSource,intn,charch)

  {

  inti;

  for(i=0;ireturni;

  }

  一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?

  将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。

  #include

  voidfoo(intm,intn)

  {

  printf(“m=%d,n=%d\n”,m,n);

  }

  intmain()

  {

  intb=3;

  foo(b+=3,++b);

  printf(“b=%d\n”,b);

  return0;

  }

  输出:

m=7,n=4,b=7(VC6.0)

  这种方式和编译器中得函数调用关系相关即先后入栈顺序。

不过不同编译器得处理不同。

也是因为C标准中对这种方式说明为未定义,所以各个编译器厂商都有自己得理解,所以最后产生得结果完全不同。

  因为这样,所以遇见这种函数,我们首先要考虑我们得编译器会如何处理这样得函数,其次看函数得调用方式,不同得调用方式,可能产生不同得结果。

最后是看编译器优化。

  2.写一函数,实现删除字符串str1中含有的字符串str2.

  第二个就是利用一个KMP匹配算法找到str2然后删除(用链表实现的话,便捷于数组)

  /*雅虎笔试题(字符串操作)

  给定字符串A和B,输出A和B中的最大公共子串。

  比如A=”aocdfe”B=”pmcdfa”则输出”cdf”

  */

  //Author:

azhen

  #include

  #include

  #include

  char*commanstring(charshortstring[],charlongstring[])

  {

  inti,j;

  char*substring=malloc(256);

  if(strstr(longstring,shortstring)!

=NULL)//如果……,那么返回shortstring

  returnshortstring;

  for(i=strlen(shortstring)-1;i>0;i–)//否则,开始循环计算

  {

  for(j=0;j<=strlen(shortstring)-i;j++){

  memcpy(substring,&shortstring[j],i);

  substring[i]=’\0′;

  if(strstr(longstring,substring)!

=NULL)

  returnsubstring;

  }

  }

  returnNULL;

  }

  main()

  {

  char*str1=malloc(256);

  char*str2=malloc(

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

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1