CC经典问题及面试笔试题 .docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《CC经典问题及面试笔试题 .docx》由会员分享,可在线阅读,更多相关《CC经典问题及面试笔试题 .docx(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C, C+经典问题,及面试笔试题1编程基础 基本概念1 .的理解:constchar*, charconst*, char*const 的区 别问题几乎是C+面试中每次都会有的题目。事实上这个概 念谁都有只是三种声明方式非常相似很容易记混。Bjarne 在他的TheC+ProgrammingLanguage里面给出过个助记 的方法:把个声明从右向左读。constchar*constcp; (读成 pointert )cpisa co nstpoint ert ochar c onstc har*p ;pis apo intertoc on stchar;ch arconst*p;同上因为C+里
2、面没有const的运算符,所以const 只能属于前面的类型。2 .指针c1 nt*pn;一指针数组,每个元素均为指向整型数据 的指针。int(*)p n;p为指向维数组的指针,这个维数组有n个整型数据。int*p();函数带回指针,指针指向返回的值。in t (*)p() ;p为指向函数的指针。3 .数组越界问题下面这个程序执行后会有什么错误或者效果:#def ine MAX255 intma in ()unsi gne dcharA M AX , i ;for (i =0; iAi二i;)解答:MAX=2 55,数组A的下标范围为:0. MAX -1,这是 其,其二当i循环到255时,循环
3、内执行:A25 5 =255 ;这 句本身没有问题,但是返回for(i=0;i注:char类型为 个字节,取值范围是T28, 127, un signedchar 0, 2554 .和strcpy 的根本区别?C+:me mset , memcp y#inc lude ” “mem se t用来对一段内存空间全部设置为某个字符,一 般用在对定义的字符串进行初始化为或、; 例:chara 100 ;mems et (a, 、 , siz eof (a);m emcpy用来做内存拷贝,你可以拿它拷贝任何数据类 型的对象,可以指定拷贝的数据长度;例:c hara100, b50 ;memcp y (
4、b, a, sizeo ();注意如用$ izeof (a),会 造成b的内存地址溢出。strep y就只能拷贝字符串了,它遇到、就结束拷 贝;例:c har a100, b 5 0 ; strcpy (a, b);如用 str cpy (b, a),要注意a中的字符串长度(第一个、。之前) 是否超过50位,如超过,则会造成b的内存地址溢出。strcpy原型:exte rnchar *str cpy (cha r*d est, char *s rc);用法:#i nclude功能:把src所指由NUL L结束的字符串复制到de st 所指的数组中。说明:src和dest所指内存区域不可以重叠且
5、des t 必须有足够的空间来容纳src的字符串。返回指向dest的指针。memcpy原型:externv id*memcpy (v oid*dest , vo id*src, unsi gnedin tcoun t);用法:ftincl ude功能:由sr c所指内存区域复制co unt个字节到 dest所指内存区域。说明:src和dest所指内存区域不能重叠,函数返回 指向des t的指针。Memse t原型:ext ernvoid *me mset (voi d* buffer, ch a rc, intcoun t);用法:ttincl ude功能:把bu ffer所指内存区域的前co
6、unt个字节设置 成字符Co说明:返回指向buf fer的指针。5.是干什么用的ASSERT()ASSE RT()是个调试程序时经常使用的宏,在程序运 行时它计算括号内的表达式,如果表达式为FA LSE(0),程 序将报告错误,并终止执行。如果表达式不为0,则继续执 行后面的语句。这个宏通常原来判断程序中是否出现了明 显非法的数据,如果出现了终止程序以免导致严重后果, 同时也便于查找错误。例如,变量n在程序中不应该为, 如果为可能导致错误,你可以这样写程序:ASSERT(n!=O);k=10/n;ASSERT只有在Debug版本中有效,如果编译为 Re lea se版本则被忽略。assert。
7、的功能类似,它是AN SIC标准中规定的函数, 它与A SSERT的个重要区别是可以用在Relea se版本中。6 .( pause);系统的暂停程序,按任意键继续,屏 幕会打印,”按任意键继续。”省去了使用getch ar();syste m7 .请问C+的类和C里面的st ruct有什么区别?C+中的类具有成员保护功能,并且具有继承,多态这 类特点,而c里的struct没有8 .请讲讲析构函数和虚函数的用法和作用?析构函数也是特殊的类成员函数,它没有返回类型, 没有参数,不能随意调用,也没有重载。知识在类对象生 命期结束的时候,由系统自动调用释放在构造函数中分配 的资源。这种在运行时,能依
8、据其类型确认调用那个函数 的能力称为多态性,或称迟后联编。另:析构函数一般在 对象撤消前做收尾工作,比如回收内存等工作,虚拟函数 的功能是使子类可以用同名的函数对父类函数进行重载, 并且在调用时自动调用子类重载函数,如果是纯虚函数, 则纯粹是为了在子类重载时有个统的命名而已。9 .全局变量和局部变量有什么区别?实怎么实现的?操 作系统和编译器是怎么知道的?全局变量的生命周期是整个程序运行的时间,而局部 变量的生命周期则是局部函数或过程调用的时间段。其实 现是由编译器在编译时采用不同内存分配方法。全局变量 在main函数调用后,就开始分配,如果是静态变量则是在 mai n函数前就已经初始化了。而
9、局部变量则是在用户栈中 动态分配的(还是建议看编译原理中的活动记录这一块)10 .是多少尉的系统?在数据总线上是怎么实现的?8。868086系统是16位系统,其数据总线是20位。程序设计1.编写用C语言实现的求n阶阶乘问题的递 归算法:1 ongintfa ct (intn)in tx;longinty ;if (npri nt f ( u error !);)if (n-0)r eturn 1;x=n-l;y=fact (x);return(n*y);2 .二分查找算法:1)递归方法实现:intBSe arch (elemt ypea口,ele mtypex , int low, int h
10、ig h)/在下届为low,上界为hi gh的数组a中折半查找数据元素X*/in t mid;if (lo whigh) retu rn-1;mid=(l ow+h igh)/2;if (xam i d)returnm id;if (xel sereturn (B S earch(a, x , m id+1, hig h);)2)非递归方法实现:i ntBSear ch (elemtype a, keytype k ey, intn)i ntlow, high, mid;low二 ; h igh二nT ;whi le (low mid= (low +high) /2;if (a mi d .
11、keykey ) returnmid;elseif (am i d. keyel seh igh二mid -1;retur n-l;3.递归计算如下递归函数的值(斐波拉契): f (1)=1f(2)=lf (n) =f (n -1) +f (n-2 ) n 2解:int f (in tn)i nti, s, si, s 2;sl=l ;/*sl用于保存f (nT)的值/ s2=l ;/*s2用于保存f (n-2)的值/ s=l;for (i=3;i s=sl+s2 ;s2=s 1;sl=s ;Ireturn (s);4 .交换两个数,不用第三块儿内存:in t a二;int b=: a=a+b
12、 ;b=a -b;a=a - b;5 .冒泡排序:void B ubbleSort (elemtypex, intn)int i ,j;elemt ype temp;f or(i=l;if or(j=0;jif(xj. keyxj+l.key)temp=xj;xj=x j+1;x E j+1 =temp ;6 .语言文件读写c#in cl ude ” “main ()FILE*fp;charch, fi le name10;scanf ( %s” , f ilen ame);if (fp=fop en (filename , v w )=NULL)printf ( cann topenfile
13、n);ex it (0);)ch=g etcha r ();wh ile (ch!=#)fputc(ch, fp);putchar (ch);ch=g et char ();fcl ose (fp );7 .编程 wi nsocket#in elude #in c ludevoidma in ()WOR D wVersionR eq nested;WSAD ATAwsa Data;inter r;wV ers ionReque st ed=MAKEWO R D(l, 1);e rr=WSAStart up (wVersio n Requested , w saData);if (err!=0
14、)ret urn;)if (LOB YTE() !=1| IH IBYTE () !=1)WSACleanu p ();return ;SOCK ETsoc kSrv=socket (AF_INET, SO CK_STREAM, 0 );SOCKADDR_INaddrSrv;addr=h t onl (INADD R ANY);_f amil y=AF I NET;_port =htons (600 0);bin d (sockSrv, ( SOCKADDR*)a ddrSrv, size of (SOCKADD R); liste n(s ockSrv,5);SOCK ADDR_I Nadd
15、 rClient ;intlen=s i zeof (SOCKA DDR);while (1)SOCK ET sockConn =ac cept (so ckSr v, (SOC KADDR*)add rClien t, le n);char se ndBuf100 ;sprint (sendBuf, “ We lcome%stoh t tps:” , ine t ntoa ( add r);send (sock Conn, se ndB uf, strle n (sendBuf) +1,0); charre cvBuf 100;recv (so ck Conn, rec vBu f);p r
16、intf ( %sn , rec vBuf );clo se socket(so c kConn);WSA Cleanup ();注:这是 S erv er 端;Fil e-N ew-Wi n32Co nsoleApplic at io n,工程名:T cpS rv;然后,Fi le NewC+ SourceFile 文件名:TcpSrv ;在该工程的Setti ng的 Link 的 Ob j ect/libra ry modules 项要加入ws2_#i nclud e#inc ludevo idm ain ()W ORDwVersio nRequested;WSADATAwsa D ata
17、;inte rr;wVer sionR eques ted=MA KEWO RD(1, 1);er r=WSASta rt up (wVersi o nRequested , wsaData);i f(err!=0)r eturn;)if(L OBYTE () !=1| |HIB YTE () !=1)WSAClean u p ();return ;SOCKET s ockClient =s ocket(AF _IN ET, SOCK _STR EAM, 0);SOCK ADDR _INaddr Srv ;ad d r=inet_add r ( );_fami ly=AF_INET ;port
18、hto ns (6000);con nect (sockCl ient , (SOCKA DDR *) addrSr v, sizeof (SOCKADDR);ch arrecvBuf 1 00;rec v(sockClie nt, recvBuf , 100,0);print f ( %sn,re cvB uf);se n d(sockClie nt, “ Thisisz hangsan” , st rlen( This i szhangsan )+1,0);clo sesock et (so ckCli ent);W SAC leanup ();)注:这是 Cli ent 端;FileNe
19、w-Win32c onsoleAppl i cation工程名:TcpClien t;然后,FileNew -C+S ource File,文件名:Tc pCli ent;同理,在该工程的 Settin g 的Link 的 Obje c t/librarym odules 项要加入 w s2_8.类的知识c +include cl asshuma npu blic:huma n () human n um +;stat icinthuman num;human ()human num - ;print ();)void print ()ico utprote c ted:privat e:;i
20、nth u man: : huma n_num=0;h uman fl (hum anx)t0;returnx;intmain (intargc, cha r*argv)h umanhl;0;h umanh2=f 1 (hl);0;retur nO;输出:1100-2分析:hum an hl; 调用构造函数,一hum n um=l ;();输出:“ h uman isl h um anh2=f 1 (h 1 );再调用fl (hl)的过程中,由于函 数参数是按值传递对象,调用默认的复制构造函数,它并没 有对hum _n um+,所以h um num仍二1,所以()输出:“hu manis 1
21、;在推出fl函数时,要销毁X,调用析构函数(h uman num -),输出:huma n isO(,由于该函数返回一个 human对象,所以又调用默认构造函数,创建一个临时对象 (human_nu m=0;),把临时对象赋给h2,又调用默认构造函数 (huma n num =0);();输出:hum anisO;/在退出mainO函数是,先销毁h2,调用析构函数 (huma n num -),输出“human numi s -1然后销毁 hl ,调 用析构函数(-),输出 human_numi s_2 W indows的消息机制 1,的消息机制1 WindowsWindows是个消息(Mes
22、sage)驱动系统。Window s的 消息提供了应用程序之间、应用程序与W ind ows系统之间 进行通信的手段。应用程序想要实现的功能由消息来触 发,并且靠对消息的响应和处理来完成。Wind ws系统中有两种消息队列:系统消息队列和应 用程序消息队列。计算机的所有输入设备由Wi n dows监控。 当个事件发生时,Win dow s先将输入的消息放入系统消 息队列中,再将消息拷贝到相应的应用程序消息队列中。 应用程序的消息处理程序将反复检测消息队列,并把检测 到的每个消息发送到相应的窗口函数中。这便是个事件 从发生至到达窗口函数必须经历的过程。必须注意的是,消息并非是抢占性的,无论事件的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CC 经典 问题 试笔 试题
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内