面试-纯程序题13.冒泡排序算法时间复杂度是什么_第1页
面试-纯程序题13.冒泡排序算法时间复杂度是什么_第2页
面试-纯程序题13.冒泡排序算法时间复杂度是什么_第3页
面试-纯程序题13.冒泡排序算法时间复杂度是什么_第4页
面试-纯程序题13.冒泡排序算法时间复杂度是什么_第5页
免费预览已结束,剩余44页可下载查看

付费下载

下载本文档

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

文档简介

14.floatx与“零值”if2.M,N1NM输出该数值,直至C程序。4for(;1;)有什么问题?它是什么意思?while(1)相同。5、do……whilewhile……do{inta,b,c,d;return}3typedefunion{longi;intk[5];charc;}DATE;structdata{intcat;DATEcow;doubledog;}too;DATEmax;则语句printf("%d",sizeof(structdate)+sizeof(max));的执行结果是 答:DATEunion,变量公用空间.int[5],个字节.data是一个struct,每个变量分开占用空间.依次为int4DATE20double8所以结果是20+32=当然...16位编辑器下,int2字节,int2+DATE10+double8=20intinc(int{}int{}typedefint(FUNC1)(inttypedefint(FUNC2)voidshow(FUNC2fun,intarg1,{inttemp=p(arg1);fun(&temp,&arg1,arg2);}{inta;return0;}73、4、char*src="o,world";5、char*dest=NULL;6、int7dest=(char*)malloc(len);8、char*d=dest;9char*s=src[len];10while(len--!=0)11、d++=s--;12printf("%s",dest);13、return0;14、1:intmain(){char*src=" intlen=strlen(src);char*dest(char*)malloc(len+1);//要为\0char*d=char*s&src[len-1];//while(len--!=0*d0;//尾部要加\0free(dest);//使用完,应当释放空间,以免造成内存汇return}2:#include#include<string.h>{charstr[]="o,world";intlen=strlen(str);charfor(inti=0;i<len/2;{str[i]=str[len-i-1];str[len-i-}return0;}1.-1,2,7,28,,12628126中间那个数是什么?为什么?4^3-1=63n^3-1(n0,2,4)n^3+1(n1,3,5)2A,B,一开始均为空.入队push出队BApoppushBpopO(1),catool()吗,这个函数的原型函数名功能::longatol(constchar程序例#include<stdlib.h>#include<stdio.h>intmain(void){longchar*str= l=printf("string=%sinteger=%ld\n",str,l);}enum{x=0x801005,0x8010f4unsignedchar*p1;unsignedlong*p2;p1=(unsignedchar*)0x801000;p2=(unsignedlong*)0x810000;p1+5=;p2+5=unsignedshorthash(unsignedshort{return}四.找错题inta[60][250][1000],i,j,k;#defineMax_CBvoidLmiQueryCSmd(StructMSgCB*{unsignedchar{ }以下是求一个数的平方的程序,请找出错误#defineSQUARE(a)((a)*(a))inta=5;intb;typedefunsignedcharintexamply_fun(BYTEgt_len;BYTE{BYTEgt_buf=(BYTE{return}}#defineswap(x,y)\x=x+y;\y=x-y;\x=x-y;intdo_dup(inta[],intN)3x2inti=cout<<boolalpha<<((i&(i-1))?false:true)<<4.unsignedintintvert(unsignedintx,intp,intn)x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b00010001,p=4,n=3转换后x=0b01100001unsignedintintvert(unsignedintx,intp,intn){unsignedint_t=0;unsignedint_a=1;for(inti=0;i<n;++i){_t|=_a=_a<<}_t=_t<<p;x^=_t;returnx;}char*constp;charconst*pconstchar*pchar*constp;常量指针,pcharconst*p;//指向常量的指针,指向的常量值不可以改constchar*p;//charconst*pcharstr1[]="abc";charstr2[]=constcharstr3[]="abc";constcharstr4[]=constchar*str5="abc";constchar*str6=char*str7="abc";char*str8=cout<<(str1==str2)<<endl;cout<<(str3==str4)<<endl;cout<<(str5==str6)<<endl;cout<<(str7==str8)<<结果是:001解答:str1,str2,str3,str4是数组变量,它们有各自的内存空间;str5,str6,str7,str8是指针,它们指向相同的常量区域。12.sizeof用法有问题吗?[C易voidUpperCase(charstr[])//str{for(size_ti=0;i<sizeof(str)/sizeof(str[0]);++i)if('a'<=str[i]&&str[i]<='z')str[i]-=('a'-'A'}charstr[]=cout"str字符长度为sizeof(str)/sizeof(str[0])endl;UpperCase(str);cout<<str<<sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组str是一个静态定义的6str实际只是一个指向字符串的指针,没有任44。32位的机器,指针是多少位只要看地址总线的位数就行了。8038632的数据4个字节了。{intint*ptr=(int}&a+1不是首地址+1a数组的偏移,是偏移了一个数组的大小(5int)int*ptr=(intptr实际是&(a[5]),&aint1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同a5int数组指针,所以要加ptrprt与(&a+1)类型是不一样的(这点很重要)prt-1sizeof(int*)是对象(数组)首地址,a+1a[1],&a+1是下一个对a[5].intmain(){charchar*str=&a;return}str问题出在将一个字符串进一个字符变量指针所指地址虽然可以正确输出结果,但因为越界进行内在读写而导致程序。char*s="AAA";"AAA"是字符串常量。s是指针,指向这个字符串常量,所以s的时候就有cosntchar*1、写一个“标准”.#defineMin(X,YX)>(Y)?(Y):(X))//结尾没有2Ccc++structc和c++中struct的主要区别是c中的struct不可以含有成员函数c++中的struct可以。c++structclass的主要区别在于默认的存取权限不同,struct默认为public,而classprivate#include<stdio.h>#include<stdlib.h>voidgetmemory(char{p=(char*)strcpy(p,"o}intmain({char*str=NULL;return}程序,getmemory中的malloc不能返回动态内存,free()对str操作很危charszstr[10]; 长度不一样,会造成的1:(void*)ptr(*(void**))ptrptr.(void*)ptr(*(void**))ptr2:int{intx=3;return1;}10x100000(unsignedint*)0x100000=0x100000*((void(*)())0x100000)(0x100000强制转换成函数指针,即:(void(*)())0x100000然后再调用它*((voidtypedef可以看得更直观些:typedefvoid(*)()voidFuncPtr;#defineNTBL#defineNTBLunsignedshortA=10;printf("~A=%u\n",~A);charc=128;第二题,c=0x10,输出的是int,最为1,是负数,所以它的值就是0x00的128,所以输出-128。这两道题都是在二进制向int或uint转换时的最处理voidGetMemory(char**p,int{*p=(char}int{char*str=NULL;{}printf("\nstris%s",str);}strisworld。freestr指向的内存空间,它本身的值还是存在的.所以free之后,有一个好的就是将str=NULL.这段空间是可能被重新分配给其他变量的,world来。malloc一块内存的时候,管理库向操作系统申请一块空间(可能会比你申将内存还给操作系统,因此你是可以继续这块地址的,只不过。楼上都了,最好别这么干。chara[10],strlen(a)15?运行的结果#include"stdio.h"#includevoid{charaa[10];}char(*str)[20];/*str是一个数组指针,即指向数组的指针.*/char*str[20];/*strlonga=0x801010;0x801010用二进制表示为:“100000000001000000010000”,再加上5就 {chart:4;charunsignedshorti:8;unsignedlongm;};sizeof(A{chart:4;4chark:4;4unsignedshorti:8;8unsignedlongm;//24};//8intadd_n(intn){staticinti=100;i+=n;return}就出在static上?//帮忙分析一下#include<string.h>#include<malloc.h>#include<stdio.h>#include<stdlib.h>typedefstructAA{intb1:5;intvoid{char cout<<aa.b1<<endl;cout<<aa.b2}答案是-16首先sizeof(AA)的大小为4,b1和b2分别占5bit和2bit.经过strcpy和memcpy后,aa的4个字节所存放的值是:0,1,2,3的ASC码,即, 分别为:10000,因为int是有正负之 所以:答案是-16和intfunc(x){intcountx=0;while(x){countx++;x=x&(x-1);}return}?999919×10241512125611511881000101111的个数是很效率很高的。inta,b,c请写函数实现C=a+b不可以改变数据类型,如将c改为longint,关键是如booladd(inta,intb,int{return(a>0&&b>0&&(*c<a||*c<b)||(a<0&&b<0&&(*c>a||}struct{inta:3;intb:2;intc:3;int{bitchar*c=(char*)&s;cout<<s.a<<endl<<s.b<<endl<<s.c<<endl;inta=-1;return0;}41--0x9910011001a001,b11,cc为有符合数时c100,1c为负数,负数在计算机用补码表示,c=-4;同理b=-c为有符合数时,c=100,即c=4,同理b=struct{unsigneda:1;unsignedb:3;unsigned}bit,*pbit;#include<stdio.h>intmain(void){intintarr[100];p=&arr;return0;}int**p;//二级指针&arr;100#include<stdio.h>intmain(void){int**p,*q;intarr[100];q=arr;p=&q;return0;}下面这个程序执行后会有什么错误或者效果#defineMAX255intmain(){unsignedcharA[MAX],i;//iunsignedcharfor(i=0;i<=MAX;i++)}解答:死循环加数组越界(C/C++不进行数组越界检查A的下标范围为:0..MAX-1,这是其一..其二.i255时,循环内执行:这句本身没有问题..for(i=0;i<=MAX;i++)语句时unsignedchar的取值范围在(0..255),i++i0了..无限循环下去structname1{charstr;shortx;intnum;}structname2{charstr;intnum;shortx;}sizeof(structname1)=8,sizeof(struct在第二个结构中,为保证num按节对齐,char后必须留出3字节的空间;同时为保证整个结构的自然对齐(4字节对齐x2个字12字节。struct{inti:intj:inta:3;doubleb;struct{inti:intj:4;doubleb;inta:3;printf("sizeof(s1)=%d\n",sizeof(s1));printf("sizeof(s2)=%d\n",sizeof(s2));result:16,24struct{inti:intj:inta:3;doubleb;i08位一个字节,然后,j就在相a31518228081888161)file1.txt的内容(例如:例如n=5#include<stdio.h>#includeint{intMAX=int*a=(int*)malloc(MAX*sizeof(int));int*b;FILEFILEfp1=fopen("a.txt","r");if(fp1==NULL)}fp2=fopen("b.txt","w");if(fp2==NULL)}inti=intj=while(fscanf(fp1,"%d",&a[i])!=if(i>={MAX=2*b=(int*)realloc(a,MAX*sizeof(int));if(b==NULL){}a=}}for(;--j>=0;)return}第二题#includeint{unsignedlongintprintf("pleaseinputthenumber\n");if(i%2==0)j=i/2;j=i/2+printf("Theresultis\n");for(k=0;k<j;k++)printf("%d=%d+%d\n",i,k,i-k);return0;}#include<stdio.h>voidmain(){unsignedlonginta,i=1;{}printf("%d,%d",i,a-i);}兄弟,这样的题目若是做不出来实在是有些不应该,给你一个递规反向输出字符voidinverse(char{if(*p=='\0')inverse(p+1);printf("%c",*p}intmain(intargc,char{return}#include<stdio.h>voidtest(FILE*fread,FILE{charbuf[1024]=if(!fgets(buf,sizeof(buf),fread))test(fread,fwrite);fputs(buf,fwrite);}intmain(intargc,char{FILE*fr=FILE*fw=fr=fopen("data",fw=fopen("dataout","wb");test(fr,fw);return0;}4struct{longnum;char*name;shortintdata;charha;short 32CPU上,sizeof(long)=4bytessizeof(char*)=4bytessizeof(shortint)=sizeof(short)=2bytessizeof(char)=1bytes4sizeof(structBBB)=44+21+1/*补齐*/2*52/*补齐*/24bytes(Dev-C++验证 = + = + = +7}7441、3随便输出哪一个均可。函数接口为:intfind_orderk(constint*narry,constintn,constintk)VC++6.0运行通过。给分吧^-^intPartition(int*L,intlow,int{inttemp=L[low];intpt=L[low];while(low<{while(low<high&&L[high]>=--L[low]=while(low<high&&L[low]<=L[low]=}L[low]=}voidQSort(int*L,intlow,int{if(low<{intpl=PartitionQSort(L,low,pl-1);QSort(L,pl+1,high);}}intmain{intsum=1,t;cout<<"Inputnumber:"<<endl;cin>>t;while(t!=-{narry[sum]=t;addr[sum-1]=t;cin>>}sum-=QSortfor(inti=1;i<=sum;i++)cout<<narry[i]<<'\t';cout<<endl;cout<<"Pleaseinputplaceyouwant:"<<endl;cin>>k;intaa=intkk=for{if(aa==k)if(narry[kk]!=narry[kk+{aa+=1;}}cout<<"TheNO."<<k<<"numberis:"<<narry[sum-kk]<<endl;cout<<"Andit'splaceis:";for(i=0;i<{if(addr[i]==narry[sum-kk])cout<<i<<'\t';}}{charchar* strcpy(stringstr1);//溢出,应该包括一个存放'\0'}{charstring[10],str1[10];for(I=0;I<10;I++){str1[i]}strcpy(string,str1);//I,i没有}{charif(strlen(str1)<=10)//改成<10,strlensizeof{strcpy(string,}}voidg(int**);intmain(){intint*p=line//pfor{}return0;}void{(*p)++;//无效}123456789intsum(int{autointc=0;staticintb=3;}void{intI;inta=2;{printf("%d,",}}static会保存上次结果,记住这一点,剩下的自己写intfunc(int{intb;{case1:case2:case3:default:}return}binta[0]=0;a[1]=1;int*p,*q;a[q-int四环某:h;叫做:归并排序Linklist*unio(Linklist*p,Linklist*q){linklist*R,*pa,*qa,*ra;}}}return}2N1、2、3、4四种,另有数组adj[][N]adj[i][j]=1则表示i区域与j区域相邻,数组color[N]color[i]=1,i1号颜色。false结束:boolfun(inta[],intn{if(n==1)returntrue;if(n==2)returna[n-1]>=a[n-returnfun(a,n-1)&&(a[n-1]>=a[n-2]}41010000个。n5unix程序,防止僵尸进程的出现4(希望大家dongtai,并且返回交集个数longjiaoji(long*a[],longb[],long*alength,longblength,long*单连表的建立,把'a'--'z'26个字母到连表中,并且倒叙,还要打印!1:typedefstruct{intdate_1;structval*next;void{char{p.date=c;p=p-}}}node*p=NULL;node*q=node*head=(node*)malloc(sizeof(node));head->data='';head->next=NULL;node*first=first->data='a';first->next=NULL;head->next=first;p=first;intlongth='z'-'b';inti=0;while(i<=longth{node*temp=temp->data='b'+i;temp-head->next=temp;temp->next=p;p=q;}255byte,1G,请描述思想,写出算发(c语言国内的一些帖吧,如baidu,有几十万个,假设每一个都有上亿的跟帖子,怎么样设计这个系统速度最好,请描述思想,写出算发(c语言,空间和#includestring.h{char*src="o,world";char*dest=NULL;dest=(char*)malloc(strlen(src));intlen=strlen(str);char*d=dest;char*s=src[len];}#include"string.h"#include"stdio.h"#include"malloc.h"{char*src="o,world";char*dest=NULL;dest=(char*)malloc(sizeof(char)*(strlen(src)+1));intlen=strlen(src);charchar*s=src+len-1;{{}Linuxvoidswap(inta,int{intc;}--->voidswap(inta,int{}6.char{charp[]=“owworld”;returnp;}void{char*str=NULL;str=RetMemory();}不可预测的,str的地址写一个函数,它的是intcontinumax(char*outputstr,char串付给其中一个函数参数outputstr 所指内存。例如: "的首地址传给intputstr后,函数将返回9,outputstr所指的值为intcontinumax(char*outputstr,char{char*in=inputstr,*out=outputstr,*temp,*final;intcount=0,maxlen=0;while(*in!='\0'if(*in>47&&*in<58{for(temp=in;*in>47&&*in<58;in++)}if(maxlen<count{maxlen=count;count=0;final=}}for(inti=0;i<maxlen;{*out=*final;}*out='\0';returnmaxlen;}不用库函数,C语言实现将一整型数字转化为字符串1:intgetlen(char*s){intn;for(n=0;*s!='\0';s++)return}voidreverse(char{intfor(i=0,j=getlen(s)-1;i<j;i++,j--){c=s[i];s[i]=s[j];s[j]=c;}}voiditoa(intn,charinti,sign;if((sign=n)<0)n=-n;i=do{/*以反序生成数字s[i++]=n%10+'0';/*getnext}while((n/=10)>0);/*deletetheif(sign<0)s[i++]='-s[i]='\0';}#include<iostream>usingnamespacestd;voiditochar(intnum);voiditochar(intnum){inti=0;intj;charstra[10];charstrb[10];while(num{}stra[i]=for(j=0;j<i;{strb[j]=stra[i-j-}strb[j]='\0';}int{intnum;return0;}前几天面试,有一题想不明白,typedef{inta:2;intb:2;inttestt.a=t.b=t.c=谢谢3int嘛。1n个数(1....n)k个数的组合....intpop(int*);intpush(intvoidcombination(int,intintstack[3]={0};int{intprintf("Inputtwowhile((2!=scanf("%d%*c%d",&n,&m)){printf("Inputerror!}}voidcombination(intm,int{inttemp=m;{{if(pop(&temp)&&stack[0]==n)当栈底元素弹出&&}elseif(push(--{printf("%d%d%d",stack[0],stack[1],stack[2]);//§ä¨ì¤@?}}}intpush(int{return0;return1;}intpop(int{return0;return1;}#include<stdio.h>#include<string.h>#include<dos.h>intmain(){charstr[]="ABCD1234efgh";intlength=strlen(str);char*p1=char*p2=str+length-1;while(p1<p2){charc=*p1=*p2=--}printf("strnowis%s\n",str);return}#include<stdio.h>doublegetValue(){doubleresult=0;inti=2;while(i<{0.000000i+=}return}int{printf("resultis%f\n",return0;}7{0,1,2,3,4,5,6,7}0-->1-->2(删除)-->3-->4-->5(删除)-->6-->7-->0(删除1:数组#include<iostream>usingnamespacestd;#definenull1000int{intfor(inti=0;i<1000;++i)intintcount=0;{}return0;}2usingnamespacestd;#definenull0struct{intdata;node*next;int{node*head=newnode;node*p=head;for(int{node*tmp=newnode;}{}return0;}#include#defineMAXLINE1000MAXLINEa[]元素数组R[]指针场suffix下标index返回最后的下标序号values返回最后的下标对应的值start从第几个开始Kintfind_n(inta[],intR[],intK,int&index,int&values,ints=0){intsuffix;intif(s==0){}else{}while(R[front_node]!=front_node){if(K==1){}for(inti=0;i<K;i++){}}return}intmain(void)inta[MAXLINE],R[MAXLINE],suffix,index,values,start,i,K;for(i=0;i<MAXLINE;i++)}R[i-printf("thevalueis%d,%d\n",index,values);return0;}void{charstring[10],str1[10];inti;for(i=0;i<10;{str1[i]=}strcpy(string,str1}解答:对试题2,如果面试者字符数组str1不能在数组内结束可以给3分;如果面试者strcpy(string,str1)调用使得从str1内存起到string内存起所的字节数具有不确定性可以给7分在此基础上库函数strcpy工作方式10分;str1不能在数组内结束:因为str1的为:{a,a,a,a,a,a,a,a,a,a},没有'\0'(字符串结所指向的内存,直到碰到'\0',str1结尾没有'\0',所以具有不确定性,不知道void{charstring[10],str1[10];inti;for(i=0;i<9;{str1[i]a'+i;abcdefghi}strcpy(string,str1);}codeintStrCmp(constchar*str1,constcharintStrCmp(constchar*str1,constchar{assert(str1&&while(*str1&&*str2&&*str1==*str2){str1++,str2++;}if(*str1&&*str2)return(*str1-elseif(*str1&&*str2==0)return1;elseif(*str1==0&&return-1;return0;}intStrCmp(constchar*str1,constchar{while(*str1&&*str1++*str2++);return*str1-*str2;}codeintFindSubStr(constchar*MainStr,constcharintMyStrstr(constchar*MainStr,constchar*{constchar*p;constcharconstchar*u=//assert((MainStr!=NULL)&&SubStr!=NULL));//用断言对输入进行判断while(*MainStr)//进行递增{p=q=while(*q&&*p&&*p++==*q++);if(!*q){returnMainStru+1/MainStr指向当前起始位,u}MainStr}return-}intarr[]=int*ptr=printf(“%d%d”,*ptr,输出:8过程:对于*(ptr++)+=123;先做加法6+123,然后,指针指向7;对于printf(“%d%d*ptr*(++ptr));从后往前执行,指针先++88,8slnodetype*Delete(slnodetype*Head,intkey){}if(Head-{}Back=Pointer;{}voiddelete(Node*{if(Head=}164位为一个数,写函数求他们的和。和/*n16*/charSumOfQuaters(unsignedshortn){charc=0;inti=4;{c+=n&n=n>>}while(--return}有 一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复度O(1),使用交换,而且一次只能交换两个数.(int{inta[]=intlen=sizeof(a)/sizeof(int);inttemp;for(inti=0;i<len;{temp=a[a[i]-a[a[i]-1]=a[i];a[i]=temp;if(a[i]==i+1)}for(intj=0;j<len;j++)return}(慧通typedefstruct{intstructlinknodenode*reverse(node{node{}return}voiddel_all(node{node*p;{}}两个字符串,s,t;把t字符串到s字符串中,s字符串有足够的空间存放voidinsert(char*s,char*t,int{char*q=t;char*pif(q==NULL)return;}{}*p=}char*a="char*b="o";if(a==b)这个简单的面试题目,我选输出no(对比的应该是指针地址吧),可在VC是Cmemcpysourcevoid*memcpy(void*dst,constvoid*src,unsignedintlen{registercharregistercharif(len==returnif(is_overlap(dst,src,len,complain3("memcpy",dst,src,len);if(dst>src)d=(char*)dst+len-s=(char*)src+len-while(len>=4)*d--=*s--*d--=*s--*d--=*s--*d--=*s--len-=}while(len--)*d--=*s--}}elseif(dst<src)d=(chars=(charwhile(len>=4)*d++=*d++=*d++=*d++=len-=}while(len--)*d++=}}return}2、检查的源目标和目的地是否为同一个,若为同一个,则直接跳出memcpystrcpy是字符串拷贝,遇到'\0'/*memcpy───拷贝不的内存块voidmemcpy(void*pvTo,void*pvFrom,size_t{void*pbTo=(byte*)pvTo;void*pbFrom=(byte*)pvFrom;ASSERT(pvToNULL&&pvFromNULL);ASSERT(pbTo>=pbFrom+size||pbFrom>=pbTo+size);//检查两个指针指向的内存是否*pbTo++==*pbFrom++;boolCircleInList(Link*{if(pHead==NULL||pHead->next==NULL)//无节点或只有一个节点并且无自returnif(pHead

温馨提示

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

最新文档

评论

0/150

提交评论