总结网上转载面试题_第1页
总结网上转载面试题_第2页
总结网上转载面试题_第3页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

1、1. C/C+最近这段时间忙于笔试、面试,没时间做总结。把碰到的几个有些疑问的东西拿出来分享一下。1, 如果用一个循环数组q0.m-1表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。(华赛面试题、腾讯笔试题)刚开始是去华赛面试时,面试官把这个题拿出来问我,我看了半天,没明白什么意思,考官说用一个很简单的表达式表示出来,楞了半天,还是不明白什么意思。当时面试官也没说答案,昨天去腾讯笔试,又碰到了这个题。后来网上查了下,自己又仔细想了想。这个题分两种情况,一种是rear>front,此时n=rear-fro

2、nt+1;由于是循环队列,如果是rearvfront的情况,那么就应该是n=rear-front+1+m;此时rear-front是一个负数。所以将其综合一下就是:(rear-front+1+m)%m。2, 关于函数重载(国民技术的笔试题)下面选项和所给函数不能构成重载的是voidtest(char);A.voidtest(char,char)B.inttest(char)C.inttest(int)D.voidtest(int,int)当时看到这个题就很纳闷,记得函数重载就是参数类型、参数个数不一样就能构成函数的重载呀!这个是个自己记错了,以为函数返回值不一样也能构成重载,其实如果只是函数返

3、回值不一样的话,编译器不能确认去匹配哪一个函数,编译就会出现错误。3, 宏的问题(MTK一道笔试题)#definecall(x,y)x#yintx=10,y=5,xy=30;求x+y+call(x,y)当时就晕了,不懂哇,其实以前见过这种#的,当时完全记不得了,不牢固哇。其实x#y就是xy,所以这个题答案应该是:45字符串提取数字完成函数voidtake_num(constchar*strIn,int*n,unsignedint*outArray)如输入strln="ab00cd+123fght456-253.005fgh"输出n=6outArray=0,123,456,2

4、5,3,5不考虑小数如3.005输出3和5题目分析:将字符串转换成uint,按公式temp=0;temp=temp*10;temp+=stri-'0';一直循环。对于一个数,如果前面是0的话,那么按上面公式也会把0去掉的,也就是会从第一个非零的数开始计数。比如005,temp=0;temp=temp*10(temp=0);temp+=stri-'0'(temp=0);当i=i+1时,按上面过程计算,仍然有temp=0,直到第一个非零的数字出现,这也正符合数的形式。cppviewplaincopyoutArray)1.#include<string.h>

5、;2.#include<stdio.h>3.#include<assert.h>4.voidtake_num(constchar*strIn,int*n,unsignedint*5. assert(strIn!=NULL&&n!=NULL&&outArray!=NULL);否则就7.intnCount=0;8.intlent=strlen(strIn);9.inttemp=0;10.boolIsNum=false;11.for(inti=0;i<lent;i+)12.13.if(strIni>='0'&

6、&strIni<='9')14.15.IsNum=true;16.temp=temp*10;17.temp+=strIni-'0'18.19.else20.if(IsNum)21.22.outArraynCount=temp;23.nCount+;24.IsNum=false;25.temp=0;26.27.28.if(IsNum)/一定要对最后一个进行判断,会丢失最后一个数的信心29.30.outArraynCount=temp;31.nCount+;32.33.*n=nCount;34.35.voidmain()36.37.charstr100

7、="ab00cd+123n=0;39.unsignedintoutstr100=0;40.take_num(str,&n,outstr);41.printf("%dn",n);42.for(inti=0;i<n;i+)43.44.printf("%ut",outstri);45.46.printf("n");47.48.n和输出整型数的个数一样。可巧妙利用3.005fgh12"其中返回的个数3.高精度整数加法要求实现函数:voidadd(constchar*num1,c

8、onstchar*num2,char*result)【输入】numl字符串形式操作数1,如果操作数为负,则num10为符号位'-'num2:字符串形式操作数2,如果操作数为负,则num20为符号位'-'【输出】result:保存加法计算结果字符串,如果结果为负,则result0为符号位。注:I 、当输入为正数时,'+'不会出现在输入字符串中;当输入为负数时,'-'会出现在输入字符串中,且一定在输入字符串最左边位置;II 、输入字符串所有位均代表有效数字,即不存在由'0'开始的输入字符串,比如"0012&q

9、uot;,"-0012"不会出现;、要求输出字符串所有位均为有效数字,结果为正或0时'+'不出现在输出字符串,结果为负时输出字符串最左边位置为'-'。示例输入:num1="580"num2="-50"输出:result="530"输入:num1="580"num2="-600"1.#include1.#include<stdio.h>4.void倒序convert(char*str)/5.6.intlent=strlen(str);

10、7.for(inti=0;i<=(lent-1)/2;i+)8.9.inttemp=stri;10.stri=strlent-1-i;11.strlent-1-i=temp;12.13.14.voidadd(constchar*num1,constchar*num2,sult)2.#include<assert.h>3.#include<string.h>char*re15.16.assert(num1!=NULL&&num2!=NULL&&result!=NULL);字符串17.intlen1=strlen(num1);/串长18

11、.intlen2=strlen(num2);19.intret100=0;20.char*pNum1=(char*)num1;21.char*pNum2=(char*)num2;22.char*pResult=result;23.boolIsNum1PosInt=true;/判断符标记24.boolIsNum2PosInt=true;25.boolIsExchange=false;/是否交换两个数的信息标志位,将绝对值大的数放在第一个数上。26.if(*pNum1='-')27.28.IsNum1PosInt=false;29.pNum1+;30.len1-;31.32.if(

12、*pNum2='-')33.34.IsNum2PosInt=false;35.pNum2+;36.len2-;37.38.if(*pNum1='0'|*pNum2='0')/判断输入数据是否格39.40.printf("errorinput!");41.return;42.43.if(len1<len2)/num1绝对值小于num244.45.IsExchange=true;46.47.else48.if(len1=len2)/长度相等的情况下,是否需要交换49.50.intj=0;51.for(j=0;j<len

13、1;j+)52.53.if(pNum1j<pNum2j)54.55.IsExchange=true;56.57.58.else59.break;60.61.62.if(IsExchange)63.64.char*temp=pNum1;/交换字符串65.pNum1=pNum2;66.pNum2=temp;断是两正数相加还是两负数相加67.temp=NULL;68.69.intlentemp=len1;/交换长度信息70.len1=len2;71.len2=lentemp;72.73.boollsPostemp=lsNum1Poslnt;74.IsNum1PosInt=IsNum2PosIn

14、t;75.IsNum2PosInt=IsPostemp;76.77.convert(pNum1);78.convert(pNum2);79.if(!lsNum1Poslnt9sNum2Poslnt)/同为正或者同为负80.81.inti=0;82.for(i=0;i<len1;i+)83.84.if(i>=len2)/后面的都置'0'85.86.pNum2i='0'87.88.89.reti+=(pNum1i-'0')+(pNum2i-'0');90.if(reti>=10)91.92.reti=reti%10;

15、93.reti+1+;94.95.96.if(!lsNum1Poslnt)/判97.98.pResult0='-'99.pResult+;100.101.if(reti=1)/如果有进位,长度加1102.103.len1+;104.105.106.else/如果为一正一负,大数在前,小数在后,相减107.如果小于0,intfori=0;(i=0;i<len1;i+)if(i>=len2)pNum2i='0'reti+=(pNum1i-'0')-(pNum2i-'(reti<0)11.112.11

16、3.114.115.if则需要借位。0');116./reti+=10;119.reti+1-;120.121.122.if(retlen1-1=0)123.124.len1-;125.126.if(!IsNum1PosInt)127.128.pResult0='-'129.pResult+;130.131.132.for(intj=0;j<len1;j+)/换成字符串保存到结果字符串中133.134.pResultj=*(char*)(ret+len1-1-j)+'0'38.139.voidmain()140.141.c

17、harn1100="-90"142.charn2100="50"143.charret100=""144.add(n1,n2,ret);145.puts(ret);146.将整型数组转117.118.删除字符串中所有给定的子串问题描述:在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。要求实现函数:intdelete_sub_str(constchar*str,constchar*sub_str,char*result_str)【输入】str:输入的被操作字符串一一sub_str:需要查找并删除的特定子字符串

18、【输出】result_str:在str字符串中删除所有sub_str子字符串后的结果【返回】删除的子字符串的个数注:I、子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。比如:在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。如果匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。cppviewplaincopy1. #include<stdio.h>2. #include<string.h&

19、gt;3. #include<assert.h>4.intdelete_sub_str(constchar*result_str)5.6.assert(str!=NULL&&sub_str!=NULL&&result_str!=NUchar*str,constchar*sub_str,LL);7.intnCount=O;8.intlenstr=strlen(str);9.intlensubstr=strlen(sub_str);10.if(0=lensubstr|lensubstr>lenstr)11.12.strcpy(result_str,

20、str);13.14.inti=0,j=0;15.for(i=0;i<lenstr;i+)16.17.intk=i;18.for(j=0;j<lensubstr;j+)19.20.if(stri+j=sub_strj&&j=lensubstr-1)21.22.nCount+;算法就是最简单的算法,从左往右对比,每次源字符串都要回朔。判断如果没有相同子串,则赋给结果字符串。23.i=i+lensubstr-124.25.if(stri+j!=sub_strj)26._27.break;1.if(k=i)32.33.*result_str=stri;

21、34.result_str+;35.36.37.returnnCount;1.voidmain()42.43.charstrsrc100="aabababaababab"44.charstrdel100="aba"45.charresult100=""46.intn=delete_sub_str(strsrc,strdel,result);47.printf("%dn",n);48.puts(result);49.大数运算分类:C/C+2011-09-0421:4766人阅读评论(0)收藏举报所

22、谓的高精度运算,是指参与运算的数(加数,减数,因子)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算。例如,求两个200位的数的和。这时,就要用到高精度算法了。在这里,我们先讨论高精度加法。高精度运算主要解决以下三个问题:基本方法1、加数、减数、运算结果的输入和存储运算因子超出了整型、实型能表示的范围,肯定不能直接用一个数的形式来表示。能表示多个数的数据类型有两种:数组和字符串(1)数组:每个数组元素存储1位(在优化时,这里是一个重点!),有多少位就需要多少个数组元素;用数组表示数的优点:每一位都是数的形式,可以直接加减;运算时非常方便用数组表示数的缺点:数组不能直接输入;输入时每两

23、位数之间必须有分隔符,不符合数值的输入习惯;(2)字符串:字符串的最大长度是255,可以表示255位。用字符串表示数的优点:能直接输入输出,输入时,每两位数之间不必分隔符,符合数值的输入习惯;用字符串表示数的缺点:字符串中的每一位是一个字符,不能直接进行运算,必须先将它转化为数值再进行运算;运算时非常不方便;(3)因此,综合以上所述,对上面两种数据结构取长补短:用字符串读入数据,用数组存储数据:cppviewplaincopy1.#include<stdio.h>2.#include<assert.h>3.#include<string.h>4.#defin

24、emax_strlen1005.voidconvert(char*num)6.7.assert(num!=NULL);8.intstrlent=strlen(num);9.inttemp=0;10.for(inti=0;i<=(strlent-1)/2;i+)11. 12. temp=numi;13. numi=numstrlent-1-i;14. numstrlent-1-i=temp;15. 16.16. 17. voidaddbig(constchar*num1,constchar*num2,char*result)18. 19. assert(num1!=NULL&&am

25、p;num2!=NULL);20. char*num11=(char*)num1;22.char*num22=(char*)num2;23.intlen1=strlen(num1);24.intlen2=strlen(num2);25.convert(num11);26.convert(num22);27.intlen=(len1>=len2)?len1:len2;28.intretmax_strlen;29.memset(void*)ret,0,max_strlen*sizeof(int);30.31.for(inti=0;i<len;i+)32.33.if(i>=len1)34.35.num11i='0'36.37.if(i>=len2

温馨提示

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

评论

0/150

提交评论