还剩31页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
1.将一个字符串逆序
2.将一个链表逆序
3.计算一个字节里byte里面有多少bit被置
14.搜索给定的字节byte
5.在一个字符串中找到可能的最长的子字符串
6.字符串转换为整数
7、整数转换为字符串*题目将一个字符串逆序*完成时间:深圳极讯网吧*版权归刘志强所有*描述写本程序的目的是希望练一下手,希望下午去面试能成功,不希望国庆节之后再去找工作拉!#include iostreamusingnamespace std;//#define NULLvoid*0char*mystrrevchar*const dest,const char*const src if dest==NULLsrc=二NULL returnNULL;char*addr=dest;int valjen=strlensrc;dest[valjenj=\0;int i;for i=0;ival_len;i++*dest+i=^src+val_len-i-l;return addr;mainchar*str=nasdfa;char*strl=NULL;strl=char*malloc20;if str1==NULLcout«malloc failed11;cout«mystrrevstrl,str;freestrl;str1=NULL;//杜绝野指针p=head;q=p-next;前两个的作用是一样,a是一个常整型数第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)如果应试者能正确回答这些问题,那么他就给我留下了一个好印象顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由1)关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的)2)通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码3)合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改简而言之,这样可以减少bug的出现Volatile
999.p.H
2.Jones.Nigel..Efficien..Cod.fo.Eight-bi.MCU.,.Embedde.System.Programming.Novembe.
1998.p.
[5]={1,2,3,4,5;int*ptr=int*a+1;printfn%d%d,*a+l,;这段程序的输出是a22b21c25d以上均不是第题:考查多维数组及指针5void fooint[]
[3];maininta
[3]
[3]={{1,2,3},{4,5,6},{7,8,9}};fooa;printf%dn,a
[2][l];void foointb[]
[3]++b;b[l][l]=9;这段程序的输出是a8b9c7d以上均不对第题目:考查逗号表达式6mainint a,b,c,d;a=3;b=5;c=a,b;d=a,b;printfc=%dn,c;printfd=%d,d;这段程序的输出是ac=3d=3b c=5d=3whileq!=NULL temp=q-next;q-next=p;p=q;q=temp;这样增加个辅助的指针就行乐ok通过编译的代码#include stdio.h#include ctype.h#include stdlib.h typedefstruct List{int data;struct List*next;}List;List*list_createvoid structList*head,*tail,*p;int e;head=List*mallocsizeofList;tail二head;printfn\nList Create,input numbersendof0:;scanfn%dn,e;whilee{p=List*mallocsizeofList;p-data=e;tail-next=p;tail=p;scanfH%d,e;}tail-next=NULL;return head;List*list_reverseList*headList*p,*q,*r;p=head;q=p-next;whileq!=NULLr=q-next;q-next=p;p=q;cc=3d=5d c=5d=5e:考查指针数组mainint a[]
[3]={1,2,3,4,5,6;int*ptr
[3]=a;printf%d%d”,*ptr[l],*ptr|2J;++ptr;printf%d%d,*ptr[l],*ptr
[2];这段程序的输出是a2356b2345c4500d以上均不对第题:考查函数指针8int*flvoidint x=10;returnx;int*f2voidint*ptr;*ptr=10;return ptr;int*f3voidint*ptr;ptr=int*mallocsizeofint;return ptr;上面这3个函数哪一个最可能引起指针方面的问题a只有f3b只有fl andf3c只有fl andf2d fl,f2,f3第题:考查自加操作++9maininti=3;intj;j=sizeof++i+++i;printfi=%d j=%d,i J;这段程序的输出是a i=4j=2b i=3j=2ci=3j=4di=3j=6第10题:考查形式参数,实际参数,指针和数组void flint*,int;void f2int*,int;void*p⑵int*,int;mainint a;intb;p[O]=fl;p[l]=f2;a=3;b=5;p
[0]a,b;printf%d\t%d\tn,a,b;p[l]a,b;printf%d\t%d\tn,a,b;void flint*p,int qinttmp;tmp=*p;*p=q;q=tmp;void f2int*p,int qinttmp;tmp=*p;*p=q;q=tmp;这段程序的输出是a5555b3535c5353d3333第11题:考查自减操作•・void eint;mainint a;a=3;ea;void eint nifn06--n;printfH%dn,n;e-n;}这段程序的输出是a0120b0121c1201d0211第题:考查类型定义,函数指针12typedeftypedef int*testfloat*,float*test tmp;的类型是tmp函数的指针,该函数以两个指向浮点数的指针作为参数a floatpointer argumentsPointer to functionof havingtwo argumentsthat ispointer tofloat整型b函数的指针,该函数以两个指向浮点数的指针作为参数并且函数的返回值c floatpointer arguments,类型是整型Pointertofunction havingtwo argumentthat ispointer tofloat and return int以上都不是d第题:数组及指针的区别及联系13mainchar p;charbuf
[10]={1,2,3,4,5,6,9,8};p=buf+l
[5];printf%d,p;这段程序的输出是a5b6c9d以上都不对第题考查指针数组的指针14Void fchar**;mainchar*argv[]={ab”Jed”JeF Jgh“,“ij“,kr};f argv;void fchar**p char*t;t=p+二sizeofint[-l];printf n%sn,t;这段程序的输出是a abbcdc efdgh第题:此题考查的是的变长参数,就像标准函数库里那样,这个话题一般国内大学课堂是不会讲15C printf到的,不会也情有可原呵呵,#includestdarg.hint rippleint,...;mainint num;num=ripple3,5,7;printf%d,num;int rippleintn,...inti J;int k;va_list p;k=0;j=1;va_start p,n;for;jn;++ji二va_arg p,int;for;i;i=i-l++k;return k;这段程序的输出是a7b6c5d3第题:考查静态变量的知识16int counterint istaticint count=0;count=count+i;return count;mainintij;for i=0;i=5;i++j=counteri;本程序执行到最后,j的值是:a10b15c6d7详细参考答案第1题(b)字面意思是易于挥发的这个关键字来描述一个变量时,意味.给该变量赋值(写入)之后,马上再读取,volatile写入的值及读取的值可能不一样,所以说它“容易挥发”的这是因为这个变量可能一个寄存器,直接及外部设备相连,你写入之后,该寄存器也有可能被外部设备的写操作所改变;或者,该变量被一个中断程序,或另一个进程改变了.不会被编译器优化影响,在.后,它的,是后面假定的变量值,最后的值是所以被打印出来.volatil.kmgjum b5,5设置非局部跳setjm.../.setjmp.h*/Store.contex.informatio.suc.a.registe.value.s.tha.th.lomgjm.functio.ca.retur.contro.t.th.statemen.followin.th.on.callin.setjmp.Return..whe.i.i.initiall.called.Lonjjmp.执行一个非局部跳・/.setjmp・h*/(Transfer.contro.Lth.statemen.wher.th.cal.t.setjm.vvhic.initialize.buf.wa.made.Executio.continue.a.thi.poin.a.i.longjm.canno.retur.th.valu.
0..nonvolatil.automati.variabl.migh.b.change.b..cal.t.Iongjmp.Whe.yo.us.setjm.an.longjmp.th.onl.automati.variable.guarantee.t.remai.vali.ar.thos.declare.volatile.()Note.Tes.progra.withou.volatil.qualifie.resul.ma.very更详细介绍,请参语言的和.C setjmplongjmp第2题(a)结构题的成员在内存中的地址是按照他们定义的位置顺序依次增长的如果一个结构体的指针被看成它的第一个成员的指针,那么该指针的确指向第一个成员第3题(a)此题目较难.这个程序的非递归版本int whatint x,int nintval;int product;product=1;val=x;whilen0if n%2==1product二product*val;/*如果是奇数次基,xval要先乘上一次,;偶数次累,最后返回时才会到这里乘以1*/val二val*val;n=n/2;}return product;/*用二元复乘策略*/算法描述while n0{if nextmost significantbinary digitof npower isonethen multiplyaccumulated productby currentval,reduce npowersequence bya factorof twousing integerdivision.getnext valby multiplycurrent valueof itself}第题4ca的类型是一个整型数组,它有5个成员a的类型是一个整型数组的指针所以a+1指向的地方等同于a
[6]a[l]=*a+l ptr-1a+l所以*(a+l)等同于a[l]ptr等同a
[6],ptr・l就等同及a
[5]a
[0]a[l]a
[2]a
[2][l]第题()5b1234567++b b[l][l]=9题目自身就给了足够的提示b
[0]
[0]=4b[l][O]=7第6题(c)考查逗号表达式,逗号表达式的优先级是很低的,.赋值
(二)的优先•低.逗号表达式的值就是最后一个元素的值逗号表达式的还有一个作用就是分割函数的参数列表・.E
1.E
2、、、尸e~l terminates氓%4T prind”,0;}e-terminates考查-操作和递归调用,仔细分析一下就可以了第12题c分析函数声明,建议不会的看看《专家编程》C这里介绍一个简单规则:从左往右,遇到括号停下来,将第一个括号里的东西看成一个整体第题13c考查什么时候数组就是指针.对某些类型而言,如果一个表达式是的数组,这个表达式的值实际T Tf]T上就是指向该数组的第一个元素的指针.所以⑸实际上就是或者buf+1*buf+6buf
[6]第14题b的值是所以指向这点估sizeofint2,p+=sizeofint argv
[2],计大家都没有什么疑问指向能理解吗,因为p+=sizeofint[-l]argv[l],就相当于也就是p+=sizeofint[-l]p+=2[.l],p+2-l第题⑹15在C编译器通常提供了一系列处理可变参数的宏,以屏蔽不同的硬件平台造成的差异,增加程序的可移植性这些宏包括va_start va_arg和va_end等采用ANSI标准形式时,参数个数可变的函数的原型声明是type funcnametype paral,typepara2,...这种形式至少需要一个普通的形式参数,后面的省略号不表示省略,而是函数原型的一部分type是函数返同值和形式参数的类型不同的编译器,对这个可变长参数的实现不一样,gcc
4.x中是内置函数.关于可变长参数,可参阅程序分析vajist p;/*定义一个变量,保存函数参数列表的指针*/va_start p,n;/*用va_start宏初始化变量p,va_start宏的第2个参数n,是一个固定的参数,必须是我们自己定义的变长函数的最后一个入栈的参数也就是调用的时候参数列表里的第1个参数*/for;jn;++j/*j从1开始,遍历所有可变参数*/i=va_arg p,int;/*va_arg取出当前的参数,并认为取出的参数是一个整数int*/for;i;/*判断取出的i是否为0*/++k;/*如果i不为0,k自力口,i及i-1进行及逻辑运算,直到i为0这是一个技巧,下面会谈到它的功能*/当我们调用ripple函数时,传递给ripple函数的参数列表的第一个参数n的值是
3.va.start初始化p士气指向第一个未命名的参数n是有名字的参数,也就是is5第一个.每次对va_arg的调用,都将返回一个参数,并且把p指向下一个参数.va_arg用一个类型名来决定返回的参数是何种类型,以及在vajarg的内部实现中决定移动多大的距离才到达下一个参数;i;k++/*计算i有多少bit被置1*/5用二进制表示是10127用二进制表示1113所以k返回52+3,也即本题应该选c举个例子,就很好理解了令i=9=1001i-1=10001000+11001因为及的最右边的那位最低位肯定是不同,如果肯定是反之亦然.这个运算,在i i-1il,i-l0,ii-1二相补的数字系统中,将会消除最右边的位1第题16b答案是b相传高斯小学一年级的时候就会做这类等比数列的题目了•这道题考查的是静态变量的知识,当每次调用完函数之后,静态变量的值不会丢失,这及栈中的临时局部变量明显不同的地方.所以,第一次调用counterO之后,count=0第二次调用counterl后count=0+1;第三次调用counter⑵count=1+2;/*count=count+i*/第四次调用counter3count=3+3;第五次调用counter4count=6+4;第六次调用counter5count=10+5;counts〃右移一位或除以2,效果相同tt=tt/2;}}return count;}〃测试int mainBYTEb[IO]={333JlJJJJJJ;t fcoutcombb,Nendl;return0;}lo编写一个C函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的char*searchchar*cpSource,char chchar*cpTemp二NULL,*cpDest二NULL;int iTemp,iCount=0;while*cpSourceif*cpSource==chiTemp=0;cpTemp=cpSource;while*cpSource==ch4-+iTemp,++cpSource;ifiTempiCount iCount=iTemp,cpDest=cpTemp;if!*cpSource break;++cpSource;return cpDest;#include stdio.h#include string.h////自定义函数MyAtoI//实现整数字符串转换为证书输出//程序不检查字符串的正确性,请用户在调用前检查int MyAtoIchar str[]int i;int weight=1;//权重int rtn=0;//用作返回fori=strlenstr-1;i=0;i-rtn+=str[i]・0*weight;//weight*=10;//增重return rtn;}void maincharstr
[32];printfHInput astring:”;getsstr;printf%d\n,MyAtoIstr;#includestdio.h{〃字符串反转#includestring.h voidreversechar s[]intc,i=0,j;forj=strlens-l;ij;j-{c=s[i];s[i]=s[j];s[j]=c;;i++void IntegerToStringcharsflJnt n{int i=0,sign;〃如果是负数,先转成正数ifsign=n0n=-n;从个位开始变成字符,直到最高位,最后应该反转do//{s[i++]=n%10+0;}whilen=n/100;〃如果是负数,补上负号ifsign0尸-;s[i++;〃字符串结束s[i]=xrreverses;void main{int m;char c
[10];//An arrayof10pointers tointegersf int*a
[10];//A pointertoanarrayof10integersg int*aint;〃A pointertoafunction athat takesanintegerargument andreturns anintegerh int*a
[10]int;//An arrayof10pointerstofunctionsthattakeanintegerargumentandreturnaninteger人们经常声称这里有几个问题是那种要翻一下书才能回答的问题,我同意这种说法当我写这篇文章时,为了确定语法的正确性,我的确查了一下书但是当我被面试的时候,我期望被问到这个问题或者相近的问题因为在被面试的这段时间里,我确定我知道这个问题的答案应试者如果不知道所有的答案或至少大部分答案,那么也就没有为这次面试做准备,如果该面试者没有为这次面试做准备,那么他又能为什么出准备呢?Static
7.关键字const有什么含意?我只要一听到被面试者说“const意味着常数二我就知道我正在和一个业余者打交道去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP译者Embedded SystemsProgramming的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着“只读”就可以了尽管这个答案不是完全的答案,但我接受它作为一个正确的答案如果你想知道更详细的答案,仔细读一下Saks的文章吧如果应试者能正确回答这个问题,我将问他一个附加的问题下面的声明都是什么意思?const inta;int const a;const int*a;int*consta;int const*a const;/******/。