C语言面试题目

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1.给两个数组和他们的大小,还有一动态开辟的内存,求交集,把交集放到动态内存dongtai,并且返回交集个数longjiaoji(long*a[],longb[],long*alength,longblength,long*dongtai[])2.单连表的建立,把'a'--'z'26个字母插入到连表中,并且倒叙,还要打印!方法1:typedefstructval{intdate_1;structval*next;}*p;voidmain(void){charc;for(c=122;c=97;c--){p.date=c;p=p-next;}p.next=NULL;}}方法2:node*p=NULL;node*q=NULL;node*head=(node*)malloc(sizeof(node));head-data='';head-next=NULL;node*first=(node*)malloc(sizeof(node));first-data='a';first-next=NULL;head-next=first;p=first;intlongth='z'-'b';inti=0;while(i=longth){node*temp=(node*)malloc(sizeof(node));temp-data='b'+i;temp-next=NULL;q=temp;head-next=temp;temp-next=p;p=q;i++;}print(head);3.可怕的题目终于来了象搜索的输入信息是一个字符串,统计300万输入信息中的最热门的前十条,我们每次输入的一个字符串为不超过255byte,内存使用只有1G,请描述思想,写出算发(c语言),空间和时间复杂度,4.国内的一些帖吧,如baidu,有几十万个主题,假设每一个主题都有上亿的跟帖子,怎么样设计这个系统速度最好,请描述思想,写出算发(c语言),空间和时间复杂度,#includestring.hmain(void){char*src=hello,world;char*dest=NULL;dest=(char*)malloc(strlen(src));intlen=strlen(str);char*d=dest;char*s=src[len];while(len--!=0)d++=s--;printf(%s,dest);}找出错误!!#includestring.h#includestdio.h#includemalloc.hmain(void){char*src=hello,world;char*dest=NULL;dest=(char*)malloc(sizeof(char)*(strlen(src)+1));intlen=strlen(src);char*d=dest;char*s=src+len-1;while(len--!=0)*d++=*s--;*d='\0';printf(%s,dest);}1.简述一个Linux驱动程序的主要流程与功能。2.请列举一个软件中时间换空间或者空间换时间的例子。voidswap(inta,intb){intc;c=a;a=b;b=a;}---空优voidswap(inta,intb){a=a+b;b=a-b;a=a-b;}6.请问一下程序将输出什么结果?char*RetMenory(void){charp[]=“hellowworld”;returnp;}voidTest(void){char*str=NULL;str=RetMemory();printf(str);}RetMenory执行完毕,p资源被回收,指向未知地址。返回地址,str的内容应是不可预测的,打印的应该是str的地址写一个函数,它的原形是intcontinumax(char*outputstr,char*intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:abcd12345ed125ss123456789的首地址传给intputstr后,函数将返回9,outputstr所指的值为123456789intcontinumax(char*outputstr,char*inputstr){char*in=inputstr,*out=outputstr,*temp,*final;intcount=0,maxlen=0;while(*in!='\0'){if(*in47&&*in58){for(temp=in;*in47&&*in58;in++)count++;}elsein++;if(maxlencount){maxlen=count;count=0;final=temp;}}for(inti=0;imaxlen;i++){*out=*final;out++;final++;}*out='\0';returnmaxlen;}不用库函数,用C语言实现将一整型数字转化为字符串方法1:intgetlen(char*s){intn;for(n=0;*s!='\0';s++)n++;returnn;}voidreverse(chars[]){intc,i,j;for(i=0,j=getlen(s)-1;ij;i++,j--){c=s[i];s[i]=s[j];s[j]=c;}}voiditoa(intn,chars[]){inti,sign;if((sign=n)0)n=-n;i=0;do{/*以反序生成数字*/s[i++]=n%10+'0';/*getnextnumber*/}while((n/=10)0);/*deletethenumber*/if(sign0)s[i++]='-';s[i]='\0';reverse(s);}方法2:#includeiostreamusingnamespacestd;voiditochar(intnum);voiditochar(intnum){inti=0;intj;charstra[10];charstrb[10];while(num){stra[i++]=num%10+48;num=num/10;}stra[i]='\0';for(j=0;ji;j++){strb[j]=stra[i-j-1];}strb[j]='\0';coutstrbendl;}intmain(){intnum;cinnum;itochar(num);return0;}前几天面试,有一题想不明白,请教大家!typedefstruct{inta:2;intb:2;intc:1;}test;testt;t.a=1;t.b=3;t.c=1;printf(%d,t.a);printf(%d,t.b);printf(%d,t.c);谢谢!t.a为01,输出就是1t.b为11,输出就是-1t.c为1,输出也是-13个都是有符号数int嘛。这是位扩展问题01111编译器进行符号扩展求组合数:求n个数(1....n)中k个数的组合....如:combination(5,3)要求输出:543,542,541,532,531,521,432,431,421,321,#includestdio.hintpop(int*);intpush(int);voidcombination(int,int);intstack[3]={0};top=-1;intmain(){intn,m;printf(Inputtwonumbers:\n);while((2!=scanf(%d%*c%d,&n,&m))){fflush(stdin);printf(Inputerror!Again:\n);}combination(n,m);printf(\n);}voidcombination(intm,intn){inttemp=m;push(temp);while(1){if(1==temp){if(pop(&temp)&&stack[0]==n)//当栈底元素弹出&&为可能取的最小值,循环退出break;}elseif(push(--temp)){printf(%d%d%d,stack[0],stack[1],stack[2]);//§ä¨ì¤@?pop(&temp);}}}intpush(inti){stack[++top]=i;if(top2)return0;elsereturn1;}intpop(int*i){*i=stack[top--];if(top=0)return0;elsereturn1;}1、用指针的方法,将字符串“ABCD1234efgh”前后对调显示#includestdio.h#includestring.h#includedos.hintmain(){charstr[]=ABCD1234efgh;intlength=strlen(str);char*p1=str;char*p2=str+length-1;while(p1p2){charc=*p1;*p1=*p2;*p2=c;++p1;--p2;}printf(strnowis%s\n,str);system(pause);return0;}2、有一分数序列:1/2,1/4,1/6,1/8……,用函数调用的方法,求此数列前20项的和#includestdio.hdoublegetValue(){doubleresult=0;inti=2;while(i42){result+=1.0/i;//一定要使用1.0做除数,不能用1,否则结果将自动转化成整数,即0.000000i+=2;}returnresult;}intmain(){printf(resultis%f\n,getValue());system(pause);return0;}华为全套完整试题高级题6、已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除。slnodetype*Delete(slnodetype*Head,intkey){}中if(Head-number==key){Head=Pointer-next;free(Pointer);break;}Back=Pointer;Pointer=Pointer-next;if(Pointer-number==key){Back-next=Pointer-next;free(Pointer);break;}voiddelete(Node*p){if(Head=Node)while(p)}有一个16位的整数,每4位为一个数,写函数求他们的和。解释:整数1101010110110111和1101+0101+1011+0111感觉应该不难,当时对题理解的不是很清楚,所以写了一个函数,也不知道对不对。疑问:既然是16位的整数,1101010110110111是2进制的,那么函数参数怎么定义呢,请大虾指教。答案:用十进制做参数,计算时按二进制考虑。/*n就是16位的数,函数返回它的四个部分之和*/charSumOfQuaters(unsignedshortn){charc=0;inti=4;do{c+=n&15;n=n4;}while(--i);returnc;}有1,2,....一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数.(华为)#includeiostream.hintmain(){inta[]={10,6,9,5,2,8,4,7,1,3};intlen=sizeof(a)/sizeof(int);inttemp;for(inti=0;ilen;){temp=a[a[i]-1];a[a[i]-1]=a[i];a[i]=temp;if(a[i]==i+1)i++;}for(intj=0;jlen;

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功