版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简介:计算机考研之家搜集的华为C语言经典面试题,来试试你的C语言水平吧。每道题都附有详细解答和讲解,很有参考价值的C语言面试题。怎么判断链表中是否有环?boolCkcleIiiList(LHik*pHead){if(pHead==NULL||pHead->next==NULL)〃无节点或只有一个节点并且无自环return(false);if(pHead->next==pHead)//自环return(tme);Link*pTempl=pHead;//step1Link*pTemp=pHead->nexty/step2wliile(pTenip!=pTempl&&pTemp!=NULL&&pTemp->next!=NULL){pTempl=pTempl->next;pTemp=pTemp->next->next;}if(pTemp==pTempl)return(tme);return(false);}两个字符串,s,t;把t字符串插入到S字符串中,S字符串有足够的空间存放t字符串voidinsert(char*s,char*t,mti){memcpy(&s[stilen(t)+i].&s[i].stilen(s)-i);memcpy(&s[i]j,strlen(t));s[stilen(s)+stilen(t)]=,\O,;}lo编写一个C函数,该函数在一个字符串中找到可能的最长的子字符串,旦该字符串是由同一字符组成的。char*search(chai-*cpSource,charch){char*cpTemp=NULL.*cpDest=NULL;hitiTemp,iCount=0:wliile(*cpSource){if(*cpSource==ch){iTenip=0;cpTemp=cpSource;wliile(*cpSource==ch)-H-iTemp,-H-cpSource;if(iTemp>iCount)iCount=[Temp,cpDest=cpTemp;if(!*cpSouice)break;}++cpSource;}returncpDest;}2。请编写一个C函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。iiitsearch(char*cpSoi】rce,intn,charch){mti;fbr(i=O;iretunii;}一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。^includevoidfbo(mtm,intn){printf("m=%d.n=%d\n”,m,n);}hitmam(){mtb=3;fbo(b+=3,++b);pnntf(”b=%d'm”,b);leturn0;}输出:m=7,n=4,b=7(VC6.0)这种方式和编译器中得函数调用关系相关即先后入栈顺序。不过不同编译器得处理不同。也是因为C标准中对这种方式说明为未定义,所以各个编译器厂商都有自己得理解,所以最后产生得结果完全不同。因为这样,所以遇见这种函数,我们首先要考虑我们得编译器会如何处理这样得函数,其次看函数得调用方式,不同得调用方式,可能产生不同得结果。最后是看编译器优化。写一函数,实现删除字符串stil中含有的字符串str2.第二个就是利用一个KMP匹配算法找到str2然后删除(用链表实现的话,便捷于数组)尸雅虎笔试题(字符串操作)给定字符串A和B,输出A和B中的最大公共子串。比如A=naocdfenB=MpmcdfaH则输出”cdP*///Author:azlien#iiiclude#iiiclude#iiicludechar*conmiaiistiiiig(charshoitstringf],chailongstimg[]){intij;char*substiing=nialloc(256);if(stistr(longstring,shoestring)!=NULL)〃如果,那么返回shoitstriiigreturnshoitstrmg;fbr(i=stikn(shortstring)・l;i>0;i-)〃否则,开始循环计算{j<=stilen(shortstimg)-i;j++){memcpy(substnng,&shonstriiig[j],i);substriiig[i]=,\O,;if(stistr(longstring,substring)!=NULL)returnsubstring;}}returnNULL;}main(){char*strl=nialloc(256);char*str2=nialloc(256);char*conmiaii=NULL;gets(strl);gets(str2);if(sulen(sti-l)>strlen(str2))〃将短的字符串放前面conunan=conmiaiistiing(sti2,stil);elseconunan=conmiaiistiing(stil,sti2);printf(Mthelongestconmianstringis:%s\iT,coniinan);}11.写一个函数比较两个字符串strl和str2的大小,若相等返回0,若strl大于str2返回1,若strl小于str2返回一1hitsticmp(constchar*src,constchar*dst){hitret=0;wliile(!(ret=*(unsignedchar*)src-*(unsignedchar*)dst)&&*dst){++src;++dst;}if(iet<0)ret=-1;elseif(ret>0)ret=1;return(ret);}3,求1000!的未尾有几个0(用素数相乘的方法来做,如72=2*2*2*3*3);求出1->1000里,能被5整除的数的个数nl,能被25整除的数的个数n2,能被125整除的数的个数113,能被625整除的数的个数n4.1000!末尾的零的个数=nl+n2+n3+n4;#iiiclude#defineNUM1000mtfind5(hitnum)(mtret=O;wliile(num%5==0)(num--5;iet++;}returnret;}hitmam()(mtresult=0;inti;fbr(i=5;i<=NUM;i+=5)iesult+=fiiid5(i);}printf(Mthetotalzeronumberis%d\n”,result);leturn0;}有双向循环链表结点定义为:stmctnode{mtdata;stmctnode*fiont,*next;};有两个双向循环链表A,B,知道其头指针为:pHeadA^pHeadB,请写一函数将两链表中data值相同的结点删除BOOLDeteleNode(Node*pHeader,DataTypeValue){if(pHeadei==NULL)return;BOOLbRet=FALSE;Node*pNode=pHead;wliile(pNode!=NULL){if(pNode->data==Value){if(pNode->fiont=NULL){pHeader=pNode->next;pHeader->fiont=NULL;}else{if(pNode->next!=NULL){pNode->next->fiont=pNode->fiont;}pNode->fiont->next=pNode->next;}Node*pNextNode=pNode->next;deletepNode;pNode=pNextNode;bRet=TRUE;〃不要break或return,删除所有}else{pNode=pNode->next;}}retuinbRet;}voidDE(Node*pHeadA.Node*pHeadB){if(pHeadA==NULL||pHeadB==NULL){return;}Node*pNode=pHeadA:wliile(pNode!=NULL){if(DeteleNode(pHeadB.pNode->data)){if(pNode->fiont=NULL){pHeadA=pNode->next;pHeadA->fiont=NULL;}else{pNode->fiont->next=pNode->next;if(pNode->next!=NULL){pNode->next->fiont=pNode->fiont;}}Node*pNextNode=pNode->next;deletepNode;pNode=pNextNode;}elsepNode=pNode->next;}}}编程实现:找出两个字符串中最大公共子字符串,如"abccade^-dgcadde"的最大子串为“cad”hitGetConiinon(char*sl,char*s2,char**rl,char**r2){hitlenl=strlen(sl);hitleii2=strlen(s2);hitmaxlen=0;fbi(mti=0;i<lenl;i++){fbi(mtj=0;j<len2;j++){if(sl[i]==s2[j]){hitas=i,bs=j,count=1;wliile(as+1<lenl&&bs+1<leii2&&sl[++as]==s2[++bs])count++;if(count>niaxlen){maxlen=count;*rl=si+i;*r2=s2+j;}}}}编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用pnntf系列库函数char*test3(longnum)(char*buffer=(char*)nialloc(ll);buffei[0]=。;buffer[l]=X;buffer[10]=0char*temp=buffer+2;fbr(mti=0;i<8;i++)(temp[i]=(chai)(num«4*i»28);temp[i]=temp[i]>=0?temp[i]:temp[i]+16;-empEHormpEA102??mpE+48二ompE+55」rotunlbuAbr;S>NMsN*N流每我度NH3・MEF894765Nn4・frEF一2341213145111615610987s.14tdofinoN15infSEN〕NXvoidmaA)finfkHpinpjno;巨aH1;fbr(-kA(N+W2;k++)fwhiAjAN—k)SEU*〕Ha++;-++二——;whiAiAN—k)SU++1SHa++;T;j—J.whiAjVk—1)SEU!Ha++;!•;whiAiVk)suiEHa++」i++二++;fbcHO;iANT)ffbr(JH5?JAN;j++)coinaasesaacoinAAgdL2doml。MAXIN100m-ma_nx【MAXIN=MAXINJ;*(x,y):第一个元素的坐标*start:第一个元素的值*n:矩阵的大小*/voidSetMatiix(iiitx,mty,intstart,hitn)(inti,j;if(nv=0)〃递归结束条件return;if(n==1){〃矩阵大小为1时matiix[x][y]=start;return;}fbr(i=x;ivx+n-1;i++)〃矩阵上部matiix[y][i]=start++;fbr(j=y;Jvy+n-1;j++)〃右削<matrix]][x+d-1]=start++;for(i=x+n-1;i>x;i..)〃底部inatiix[y+n-l][i]=start++;for(j=y+n-l;j>y;j-)〃左部matrix]][x]=start++;SetMatrix(x+l,y+1,start,n-2);〃递归}voidmain()(inti,j;intn;scanf(”%d”,&n);SetMatrix(O,0,1,n);//打印螺旋矩阵fbr(i=0;i<n;i++)(版(j=o;jVn;j++)piintf(”%4d”,niatrix[i][j]);pnntf(”\ir);}}斐波拉契数列递归实现的方法如EhitFunct(mtn)if(n=O)return1;return1;letnirnFunct(n-l)+Funct(n-2);}请问,如何不使用递归,来实现上述函数?请教各位高手!解答:intFunct(intn)//n为非负整数{hita=0;mtb=l;hitc;if(n=O)c=l;elseif(n==l)c=l;elsefor(inti=2;iv=n;i++)〃应该n从2开始算起{c=a+b;a=b;b=c;}returnc;}解答:现在大多数系统都是将低字位放在前面,而结构体中位域的申明一般是先声明高位。100的二进制是001100100低位在前高位在后001——S3100-…s2100-…si所以结果应该是1如果先申明的在低位则:001——si100-…s2100-…s3结果是41、原题跟little-endian,big-endian没有关系2、原题跟位域的存储空间分配有关,到底是从低字节分配还是从高字节分配,从DevC++和VC7.1上看,都是从低字节开始分配,并且连续分配,中间不空,不像谭的书那样会留空位3、原题跟编译器有关,编译器在未用堆栈空间的默认值分配上有所不同,DevC++未用空间分配为01110111b,VC7.1F为11001100b,所以在DevC++下的结果为5,在VC7』下为L注:PC—般采用endum,即高高低低,但在网络传输上,一般采用big-endian,即高低低高,华为是做网络的,所以可能考虑big-endian模式,这样输出结果可能为4判断一个字符串是不是回文hitIsReverseStr(chai-*aStr){intij;hitfbund=l;if(aSti==NULL)return-1;j=strlen(aStr);fbi(i=0;iiR*(aStr+i)!=*(aStf+j・i・1)){fbund=0;break:}leturnfound;}Josephu问题为:设编号为1,2,…n的n个人困坐一圈,约定编号为k(l〈=k〈=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。数组实现:#iiiclude#iiicludehitJosephu(iiitn,mtm){mtflag,i,j=0;int*arr=(int*)malloc(n*sizeof(mt));fbr(i=0;i<n;++i)an[i]=1;fbr(i=l;i<n;++i){flag=0;while(flag<m){if(j==n)J=0;if(anU])++flag;f;}an[j-1]=0;pnntf(”第%4d个出局的人是:%4d号\n”,i,j);}free(an);returnj;}hit{hitn,m;scanf(”%d%d”,&n.&m);printf(”最后胜利的是%d号!\n",Josephu(n,m));system(HpauseM);return0;}链表实现:#iiiclude#iiicludetypedefstmctNode{hitindex;stmctNode*next;)JosephuNode;mtJosephu(mtn,mtm){JosephuNode*head,*tail;head=tail=(JosephuNode*)nialloc(sizeof(JosephuNode));fbr(i=1;i<n;++i){tail->mdex=i;tail->next=(JosephuNode*)malloc(sizeof(JosephuNode));tail=tail->next;}tail->mdex=i;tail->next=head;fbr(i=1;tail!=head;++i){fbi(j=l;j<m;++j)tail=head;head=head->next;}tail->next=head->next;printf(”第%4d个出局的人是:%4d号\n",i,head->index);free(head);head=tail->next;}i=head->index;free(head);returni;}hit{hitn,m;scanf(”%d%d”,&n.&m);printf("最后胜利的是%d号!\n",Josephu(n,m));system(HpauseM);leturn0;}己知strcpy函数的原型是:char*strcpy(chai*stiDest,constchar*strSrc);不调用库函数,实现strcpy函数。解释为什么要返回char*。解说:l.strcpy的实现代码char*strcpy(chai*stiDest,constchar*stiSrc){if((strDest==NULL)||(strSic=NULL))file://[/l]tliiowHInvalidargument⑸”;//[2]char*strDestCopy=strDest;file://[/3]wliile((*strDest++=*strSrc++)!=*\0f);flle://[/4]leturnstrDestCopy;}错误的做法:[1]不检查指针的有效性,说明答题者不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年林芝市重点中学学业水平测试及答案含解析
- 2025-2026学年黑龙江省哈尔滨市哈尔滨风华中学第二学期期末学业质量阳光指标调研卷初三数学试题含解析
- 护理操作:肌肉注射方法详解
- 锤炼写作语言让文章更美
- 2026三年级数学上册 中间有0的退位减法
- 急救护理呼吸管理培训
- 心理咨询室安全责任制度
- 快递库房责任制度
- 意识形态责任制追究制度
- 执法办案区责任制度
- 工商管理专业 酒店业人力资源流动管理分析
- 船舶机舱监控系统教学课件
- 外国文学史(下)-马工程
- 住院医师大课-糖尿病病人的麻醉-罗贞
- GB/T 42061-2022医疗器械质量管理体系用于法规的要求
- 丁往道英语写作手册课件
- 创新型城市建设的工作思路课件
- EHS有感领导(培训)
- 化工过程数值模拟及Aspen-Plus软件应用
- 苏教版一年级科学下册全册教案(常用)
- 2008年全国中学生生物竞赛(试卷及答案解析)
评论
0/150
提交评论