XXXX计算机专业企业招聘笔试试题(附答案)_第1页
XXXX计算机专业企业招聘笔试试题(附答案)_第2页
XXXX计算机专业企业招聘笔试试题(附答案)_第3页
XXXX计算机专业企业招聘笔试试题(附答案)_第4页
XXXX计算机专业企业招聘笔试试题(附答案)_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、面试准备备题(包包括高质质量c+题)consst ccharr*, chaar cconsst*, chhar*connst的的区别问问题几乎乎是C+面试试中每次次都会有有的题目目。事实上这这个概念念谁都有有只是三三种声明明方式非非常相似似很容易易记混。 Bjarrne在在他的TThe C+ Prrogrrammmingg Laanguuagee里面给给出过一一个助记记的方法法: 把一个声声明从右右向左读读。charr * connst cp; ( * 读读成 ppoinnterr too ) cp iis aa coonstt poointter to chaarconsst ccharr

2、* p; p iss a poiinteer tto cconsst ccharr;charr coonstt * p; 同上因为为C+里面没没有coonstt*的运运算符,所所以coonstt只能属属于前面面的类型型。 下面这个个程序执执行后会会有什么么错误或或者效果果:#deffinee MAAX 2255int maiin() uunsiigneed ccharr AMAXX,ii; ffor (i=0;ii=MMAX;i+) AAi=i;解答:MAX=2555数组A的的下标范范围为:0.MAXX-1,这是其其一.其二.当当i循环环到2555时,循环内内执行:A2555=2555;这句本

3、身身没有问问题.但是返返回foor (i=00;i=MAAX;ii+)语句时时,由于unnsiggnedd chhar的的取值范范围在(0.2555),ii+以以后i又又为0了了.无无限循环环下去.注:chhar类类型为一一个字节节,取值值范围是是-1128,1127,unnsiggnedd chhar 0 ,2555编写用CC语言实实现的求求n阶阶阶乘问题题的递归归算法:longg innt ffactt(innt nn)int x;longg innt yy;if(nnhiggh) retturnn -11;mid=(loow+hhighh)/22;if(xx=aamiid) reetur

4、rn mmid;if(xxamidd) retturnn(BSSearrch(a,xx,loow,mmid-1);elsee reeturrn(BBSeaarchh(a,x,mmid+1,hhighh);2、非递递归方法法实现:int BSeearcch(eelemmtyppe aa,keyytyppe kkey,intt n)int loww,hiigh,midd;low=0;hhighh=n-1;whille(llow=hiigh) mmid=(loow+hhighh)/22; iif(aamiid.keyy=kkey) reeturrn mmid; eelsee iff(amidd.kk

5、ey22解:int f(iint n)int i,ss,s11,s22;s1=11;/*s1用用于保存存f(nn-1)的值*/s2=11;/*s2用用于保存存f(nn-2)的值*/s=1;for(i=33;i= - EEPSIINONN) & (x =”或“=”此类形式。如下是错错误的写写法,不不得分。if (x = 00.0)if (x != 00.0)请写出 chaar *p 与与“零值”比较的的 iff 语句句。(33 分)标准答案案:if (p = NNULLL)if (p != NNULLL)如下写法法均属不不良风格格,不得得分。if (p = 00)if (p != 00)if (

6、p)if (!)二、以下下为Wiindoows NT 下的332 位位C+程序,请请计算ssizeeof 的值(110 分分)voidd Fuunc ( ccharr sttr1100)请计算sizeeof( sttr ) = 4 (22 分)charr sttr = “Heelloo” ;charr *pp = strr ;int n = 100;请计算sizeeof (sttr ) = 6 (22 分)sizeeof ( pp ) = 44 (22 分)sizeeof ( nn ) = 44 (22 分)voidd *pp = malllocc( 1100 );请计算sizeeof ( p

7、p ) = 44 (22 分)三、简答答题(225 分分)1、头文文件中的的 iffndeef/ddefiine/enddif 干什么么用?(55 分)答:防止止该头文文件被重重复引用用。2、#iinclludee 和和 #iinclludee “fillenaame.h” 有什什么区别别?(55 分)答:对于于#inncluude ,编编译器从从标准库库路径开开始搜索索 fiilennamee.h对于#iinclludee “fillenaame.h” ,编编译器从从用户的的工作路路径开始始搜索 fillenaame.h3、coonstt 有什什么用途途?(请请至少说说明两种种)(55 分)

8、答:(11)可以以定义 connst 常量(2)cconsst 可可以修饰饰函数的的参数、返回值值,甚至至函数的的定义体体。被cconsst 修修饰的东东西都受到到强制保保护,可可以预防防意外的的变动,能能提高程程序的健健壮性。4、在CC+ 程序中中调用被被 C 编译器器编译后后的函数数,为什什么要加加 exxterrn “C”? (55 分)答:C+语言言支持函函数重载载,C 语言不不支持函函数重载载。函数数被C+编译译后在库库中的名名字与C 语语言的不不同。假假设某个个函数的的原型为为: vvoidd fooo(iint x, intt y);该函数被被C 编编译器编编译后在在库中的的名字

9、为为_fooo , 而C+编译译器则会会产生像像_fooo_innt_iint 之类的的名字。C+提提供了CC 连接接交换指指定符号号extternn“C”来解决决名字匹匹配问题题。5、请简简述以下下两个ffor 循环的的优缺点点(5 分)for (i=0; iNN; ii+)if (conndittionn)DoSoometthinng();elseeDoOttherrthiing();if (conndittionn)for (i=0; iNN; ii+)DoSoometthinng();elseefor (i=0; iNN; ii+)DoOttherrthiing();优点:程程序简洁洁

10、缺点:多多执行了了N-11 次逻逻辑判断断,并且且打断了循循环“流水线线”作业,使使得编译译器不能对对循环进进行优化化处理,降降低了效效率。优点:循循环的效效率高缺点:程程序不简简洁四、有关关内存的的思考题题(每小小题5 分,共共20 分)voidd GeetMeemorry(ccharr *pp)p = (chhar *)mmallloc(1000);voidd Teest(voiid)charr *sstr = NNULLL;GetMMemoory(strr);strccpy(strr, helllo worrld);prinntf(strr);请问运行行Tesst 函函数会有有什么样样的

11、结果果?答:程序序崩溃。因为GeetMeemorry 并并不能传传递动态态内存,Testt 函数数中的 strr 一直直都是 NULLL。strccpy(strr, helllo worrld);将将使程序序崩溃。charr *GGetMMemoory(voiid)charr p = hhelllo wworlld;retuurn p;voidd Teest(voiid)charr *sstr = NNULLL;str = GGetMMemoory();prinntf(strr);请问运行行Tesst 函函数会有有什么样样的结果果?答:可能能是乱码码。因为GeetMeemorry 返返回的是是

12、指向“栈内存存”的指针,该该指针的的地址不不是 NNULLL,但其其原现的内容容已经被被清除,新新内容不不可知。voidd GeetMeemorry2(chaar *p, innt nnum)*p = (ccharr *)malllocc(nuum);voidd Teest(voiid)charr *sstr = NNULLL;GetMMemoory(&sttr, 1000);strccpy(strr, helllo);prinntf(strr);请问运行行Tesst 函函数会有有什么样样的结果果?答:(1)能能够输出出helllo(2)内内存泄漏漏voidd Teest(voiid)char

13、r *sstr = (chaar *) mmallloc(1000);strccpy(strr, “hhelllo”);freee(sttr);if(sstr != NULLL)strccpy(strr, “wworlld”);prinntf(strr);请问运行行Tesst 函函数会有有什么样样的结果果?答:篡改改动态内内存区的的内容,后后果难以以预料,非常常危险。因为frree(strr);之之后,sstr 成为野野指针,if(sstr != NULLL)语语句不起起作用。五、编写写strrcpyy 函数数(100 分)已知sttrcppy 函函数的原原型是charr *sstrccpy(

14、chaar *strrDesst, connst chaar *strrSrcc);其中sttrDeest 是目的的字符串串,sttrSrrc 是是源字符符串。(1)不不调用CC+/C 的的字符串串库函数数,请编编写函数数 sttrcppycharr *sstrccpy(chaar *strrDesst, connst chaar *strrSrcc);asseert(sttrDeest!=NUULL) & (sstrSSrc !=NNULLL); / 2分分charr *aaddrresss = strrDesst; / 2分whille( (*sstrDDestt+ = * sttrSrr

15、c+) != 0 ) / 2分NULLL ;retuurn adddresss ; / 2分分(2)sstrccpy 能把sstrSSrc 的内容容复制到到strrDesst,为为什么还还要chhar * 类类型的返返回值?答:为了了实现链链式表达达式。 / 2 分分例如 iint lenngthh = strrlenn( sstrccpy( sttrDeest, “helllo worrld”) );六、编写写类Sttrinng 的的构造函函数、析析构函数数和赋值值函数(225 分分)已知类SStriing 的原型型为:classs SStriingpubllic:Striing(conns

16、t chaar *strr = NULLL); / 普通通构造函函数Striing(connst Strringg &ootheer); / 拷贝贝构造函函数 Sttrinng(vvoidd); / 析构函函数Striing & ooperratee =(connst Strringg &ootheer); / 赋值值函数privvatee:charr *mm_daata; / 用于于保存字字符串;请编写SStriing 的上述述4 个个函数。标准答案案:/ SStriing 的析构构函数Striing:SStriing(voiid) / 3 分分deleete m_ddataa;/ 由由于m

17、_datta 是是内部数数据类型型,也可可以写成成 deelette mm_daata;/ SStriing 的普通通构造函函数Striing:Sttrinng(cconsst ccharr *sstr) / 6 分if(sstr=NUULL)m_daata = nnew chaar11; / 若能加加 NUULL 判断则则更好*m_ddataa = 00;elseeint lenngthh = strrlenn(sttr);m_daata = nnew chaarllenggth+1; / 若能能加 NNULLL 判断断则更好好strccpy(m_ddataa, sstr);/ 拷拷贝构造造

18、函数Striing:Sttrinng(cconsst SStriing &ottherr) / 33 分int lenngthh = strrlenn(ottherr.m_datta);m_daata = nnew chaarllenggth+1; / 若能能加 NNULLL 判断断则更好好strccpy(m_ddataa, ootheer.mm_daata);/ 赋赋值函数数Striing & SStriing:opperaate =(cconsst SStriing &ottherr) / 113 分分/ (1) 检查自自赋值 / 4 分分if(tthiss = &ootheer)retu

19、urn *thhis;/ (2) 释放原原有的内内存资源源 / 3 分deleete m_ddataa;/ (33)分配配新的内内存资源源,并复复制内容容 / 3 分int lenngthh = strrlenn(ottherr.m_datta);m_daata = nnew chaarllenggth+1; / 若能能加 NNULLL 判断断则更好好strccpy(m_ddataa, ootheer.mm_daata);/ (44)返回回本对象象的引用用 / 3 分retuurn *thhis;winssockket编编程#inccludde #inccludde voidd maain()

20、WORDDwVeersiionRRequuestted;WSADDATAA wssaDaata;int errr; wVerrsioonReequeesteed = MAAKEWWORDD(1,1);err = WWSASStarrtupp(wVVerssionnReqquesstedd,&wwsaDDataa);if( errr != 0) rretuurn; if(LLOBYYTE( wssaDaata.wVeersiion ) != 11| HIIBYTTE( wsaaDatta.wwVerrsioon) != 1) WSSAClleannup(); reeturrn;SOCKKET s

21、occkSrrv=ssockket(AF_INEET,SSOCKK_STTREAAM,00);SOCKKADDDR_IIN aaddrrSrvv;addrrSrvv.siin_aaddrr.S_un.S_aaddrr=httonll(INNADDDR_AANY);addrrSrvv.siin_ffamiily=AF_INEET;addrrSrvv.siin_pportt=httonss(60000);bindd(soockSSrv,(SOOCKAADDRR*)&adddrSrrv,ssizeeof(SOCCKADDDR);listten(socckSrrv,55);SOCKKADDDR_IIN

22、 aaddrrCliientt;int lenn=siizeoof(SSOCKKADDDR);whille(11) SOOCKEET ssockkConnn=aacceept(socckSrrv,(SOCCKADDDR*)&aaddrrCliientt,&llen); chhar senndBuuf1100; spprinnt(ssenddBuff,WWelccomee %ss too htttp:/wwww.95wwanggminng.ccom, innet_ntooa(aaddrrCliientt.siin_aaddrr); seend(socckCoonn,senndBuuf,sstrl

23、len(senndBuuf)+1,00); chhar reccvBuuf1100; reecv(socckCoonn,reccvBuuf); prrinttf(%sn,reccvBuuf); clloseesocckett(soockCConnn); WSSAClleannup(); 注:这是是Serrverr端;FFilee-NNew-Wiin322 Coonsoole Apppliccatiion,工工程名:TcppSrvv;然后后,Fiile-Neew-C+ Soourcce FFilee,文件件名:TTcpSSrv;在该工工程的SSetttingg的Liink的的Objjectt/l

24、iibraary moddulees项要要加入wws2_32.libb#inccludde #inccludde voidd maain()WORDDwVeersiionRRequuestted;WSADDATAA wssaDaata;int errr; wVerrsioonReequeesteed = MAAKEWWORDD(1,1);err = WWSASStarrtupp(wVVerssionnReqquesstedd,&wwsaDDataa);if( errr != 0) rretuurn; if(LLOBYYTE( wssaDaata.wVeersiion ) != 11| HIIB

25、YTTE( wsaaDatta.wwVerrsioon) != 1) WSSAClleannup(); reeturrn;SOCKKET socckClliennt=ssockket(AF_INEET,SSOCKK_STTREAAM,00);SOCKKADDDR_IIN aaddrrSrvv;addrrSrvv.siin_aaddrr.S_un.S_aaddrr=innet_adddr(121); addrrSrvv.siin_ffamiily=AF_INEET;addrrSrvv.siin_pportthtoons(60000);connnectt(soockCClieent

26、,(SOOCKAADDRR*)&adddrSrrv,ssizeeof(SOCCKADDDR);charr reecvBBuf1000;recvv(soockCClieent,reccvBuuf,1100,0);prinntf(%ssn,reecvBBuf);sendd(soockCClieent,Thhis is zhaangssan,sttrleen(Thiis iis zzhanngsaan)+1,0); clossesoockeet(ssockkCliientt);WSACCleaanupp();注:这是是Cliientt端;FFilee-NNew-Wiin322 Coonsoole A

27、pppliccatiion,工工程名:TcppCliientt;然后后,Fiile-Neew-C+ Soourcce FFilee,文件件名:TTcpCClieent;同理,在在该工程程的Seettiing的的Linnk的OObjeect/libbrarry mmoduuless项要加加入wss2_332.llibC#inccludde classs hhumaanpubllic:humaan() hhumaan_nnum+;stattic intt huumann_nuum;humman()humaan_nnum-;prinnt();voidd prrintt()coutthumman nu

28、mm iss: hhumaan_nnumenndl;prottectted:privvatee:;int humman:huumann_nuum = 0;humaan ff1(hhumaan xx)x.prrintt();retuurn x;int maiin(iint arggc, chaar* arggv)humaan hh1;h1.pprinnt();humaan hh2 = f11(h11);h2.pprinnt();retuurn 0;输出:110012分析:humaan hh1; /调调用构造造函数,-humm_nuum = 1;h1.pprinnt(); /输输出:humman

29、is 1humaan hh2 = f11(h11); /再调调用f11(h11)的过过程中,由于函函数参数数是按值值传递对对象,调调用默认认的复制制构造函函数,它它并没有有对huum_nnum+,所所以huum_nnum 仍= 1,所所以x.priint()输出出:hhumaan iis 11; 在在推出ff1函数数时,要要销毁XX,调用用析构函函数(hhumaan_nnum-),输出:huumann iss 0(,由由于该函函数返回回一个hhumaan 对对象,所所以又调调用默认认构造函函数,创创建一个个临时对对象(hhumaan_nnum = 00;),把临时时对象赋赋给h22,又调调用默

30、认认构造函函数( humman_numm = 0); h2.pprinnt(); /输出: huumann iss 0;/在退退出maain()函数数是,先先销毁hh2,调调用析构构函数(humman_numm-),输出出 hhumaan_nnum is -1然后销毁毁h1,调用析析构函数数(-),输输出hhumaan_nnum is -2冒泡排序序:voidd BuubblleSoort(eleemtyype x,innt nn)int i,jj;elemmtyppe ttempp;for(i=11;in;ii+) ffor(j=00;jxj+11.kkey) teemp=xjj; xj=x

31、jj+1; xj+11=ttempp; c语言 文件读读写#inccludde stddio.hmainn()FILEE *ffp;charr chh,fiilennamee100;scannf(%s,fiilennamee);if(fp=foppen(fillenaame,w)=NULLL) priintff(ccannnt opeen ffileen); exiit(00);ch=ggetccharr();whille(cch!=#) fpuutc(ch,fp); puttchaar(cch); ch=gettchaar();fcloose(fp);c指针int *pn;-指指针数组组,每

32、个个元素均均为指向向整型数数据的指指针。int (*)pnn;-pp为指向向一维数数组的指指针,这这个一维维数组有有n个整整型数据据。int *p();-函数带带回指针针,指针针指向返返回的值值。int (*)p();-p为为指向函函数的指指针。Winddowss的消息息机制11Winddowss是一个个消息(MMesssagee)驱动动系统。Winndowws的消消息提供供了应用用程序之之间、应应用程序序与Wiindoows系系统之间间进行通通信的手手段。应应用程序序想要实实现的功功能由消消息来触触发,并并且靠对对消息的的响应和和处理来来完成。 Wiindoows系系统中有有两种消消息队列列

33、:系统统消息队队列和应应用程序序消息队队列。计计算机的的所有输输入设备备由Wiindoows监监控。当当一个事事件发生生时,WWinddowss先将输输入的消消息放入入系统消消息队列列中,再再将消息息拷贝到到相应的的应用程程序消息息队列中中。应用用程序的的消息处处理程序序将反复复检测消消息队列列,并把把检测到到的每个个消息发发送到相相应的窗窗口函数数中。这这便是一一个事件件从发生生至到达达窗口函函数必须须经历的的过程。 必须须注意的的是,消消息并非非是抢占占性的,无无论事件件的缓急急,总是是按照到到达的先先后派对对,依次次处理(一一些系统统消息除除外),这这样可能能使一些些实时外外部事件件得不

34、到到及时处处理。Winddowss的消息息机制22Winddowss中的消消息是放放在对应应的进程程的消息息队列里里的。可可以通过过GettMesssagge取得得,并且且对于一一般的消消息,此此函数返返回非零零值,但但是对于于WM_QUIIT消息息,返回回零。可可以通过过这个特特征,结结束程序序。当取取得消息息之后,应应该先转转换消息息,再分分发消息息。所谓谓转换,就就是把键键盘码的的转换,所所谓分发发,就是是把消息息分发给给对应的的窗口,由由对应的的窗口处处理消息息,这样样对应窗窗体的消消息处理理函数就就会被调调用。两两个函数数可以实实现这两两个功能能:TrransslatteMeessa

35、age和和DisspattchMMesssagee。另外,需需要注意意,当我我们点击击窗口的的关闭按按钮关闭闭窗口时时,程序序并没有有自动退退出,而而是向程程序发送送了一个个WM_DESSTROOY消息息(其实实过程是是这样的的,首先先向程序序发送WWM_CCLOSSE消息息,默认认的处理理程序是是调用DDesttroyyWinndoww销毁窗窗体,从从而引发发WM_DESSTROOY消息息),此此时在窗窗体中我我们要响响应这个个消息,如如果需要要退出程程序,那那么就要要向程序序发送WWM_QQUITT消息(通过PPosttQuiitMeessaage实实现)。一个窗体体如果想想要调用用自己的

36、的消息处处理函数数,可以以使用SSenddMesssagge向自自己发消消息。如上所述述,大部部分(注注意是大大部分)的的消息是是这样传传递的:首先放放到进程程的消息息队列中中,之后后由GeetMeessaage取取出,转转换后,分分发给对对应的窗窗口。这这种消息息成为存存储式消消息。存存储式消消息基本本上是使使用者输输入的结结果,以以击键(如如WM_KEYYDOWWN和WWM_KKEYUUP讯息息)、击击键产生生的字符符(WMM_CHHAR)、鼠标移移动(WWM_MMOUSSEMOOVE)和和鼠标按按钮(WWM_LLBUTTTONNDOWWN)的的形式给给出。存存储式消消息还包包含时钟钟消息

37、(WWM_TTIMEER)、更新消消息(WWM_PPAINNT)和和退出消消息(WWM_QQUITT)。但是也有有的消息息是直接接发送给给窗口的的,它们们被称为为非存储储式消息息。例如如,当WWinMMainn调用CCreaateWWinddow时时,Wiindoows将将建立窗窗口并在在处理中中给窗口口消息处处理函数数发送一一个WMM_CRREATTE消息息。当WWinMMainn调用SShowwWinndoww时,WWinddowss将给窗窗口消息息处理函函数发送送WM_SIZZE和WWM_SSHOWWWINNDOWW消息。当WiinMaain调调用UppdatteWiindoow时,WWinddowss将给窗窗口消息息处理函函数发送送WM_PAIINT消消息。Winddowss的消息息机制33C+:memmsett ,mmemccpy 和sttrcppy 的的根本区区别? #inccludde memmoryy.hmemsset用用来对一一段内存存空间全全部设置置为某个个字符,一一般用在在对定义义的字符符串进行行初始化化为 或或0;例:chaar aa1000;memmsett(a, 0, siizeoof(aa); memccpy用用来做内内存拷贝贝,你可可以拿它它拷贝任任何数据据类型的的对象,可可以指定定拷贝的的数据长长度;例例:chhar a11

温馨提示

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

最新文档

评论

0/150

提交评论