cc++面试题集锦.docx
- 文档编号:18515156
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:13
- 大小:22.32KB
cc++面试题集锦.docx
《cc++面试题集锦.docx》由会员分享,可在线阅读,更多相关《cc++面试题集锦.docx(13页珍藏版)》请在冰点文库上搜索。
cc++面试题集锦
c/c++面试题集锦
1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?
2.将一个1M-10M的文件,逆序存储到另一个文件,就是前一个文件的最后一个
字符存到新文件的第一个字符,以此类推。
3.main主函数执行完毕后,是否可能会再执行一段代码?
4.一个父类写了一个virtual函数,如果子类覆盖它的函数不加virtual,也能实现多态?
在子类的空间里,有没有父类的这个函数,或者父类的私有变量?
5.给一个字符串、例如“ababc”要求返回“ab”.因为“ab”连续重复出现且最长。
用C/C++语言写一函数完成该算法,给出复杂度
6.对序列1、1、2、3、5、8、13。
。
。
。
是Fab..数列
2、3、5、13...是Fab..质数数列,因为他们与自己前面的Fab...数列都互质
给出k,返回第k小的Fab..质数
7.101个硬币100真、1假,真假区别在于重量。
请用无砝码天平称两次给出真币重还是假币重的结论。
8.完成字符串拷贝可以使用sprintf、strcpy及memcpy函数,请问这些函数有什么区别,你喜欢使用哪个,为什么?
9.变量的声明和定义有什么区别?
10.请写出下面代码在32位平台上的运行结果,并说明sizeof的性质:
#include
#include
intmain(void)
{
chara[30];
char*b=(char*)malloc(20*sizeof(char));
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(b));
printf("%d\n",sizeof(a[3]));
printf("%d\n",sizeof(b+3));
printf("%d\n",sizeof(*(b+4)));
return0;
}
12.请完成以下题目。
注意,请勿直接调用ANSIC函数库中的函数实现。
a)请编写一个C函数,该函数给出一个字节中被置1的位的个数,并请
给出该题的至少一个不同解法。
b)请编写一个C函数,该函数将给定的一个字符串转换成整数。
c)请编写一个C函数,该函数将给定的一个整数转换成字符串。
d)请编写一个C函数,该函数将一个字符串逆序。
e)请编写一个C函数,该函数在给定的内存区域搜索给定的字符,并返回
该字符所在位置索引值。
f)请编写一个C函数,该函数在一个字符串中找到可能的最长的子字符串,
该字符串是由同一字符组成的。
给出演示上述函数功能的一个简单程序,并请编写对应的Makefile文件
13.我们需要编写一个图形相关的应用程序,需要处理大量图形(Shape)信息,
图形有矩形(Rectangle),正方形(Square),圆形(Circle)等种类,应用
需要计算这些图形的面积,并且可能需要在某个设备上进行显示(使用在标准
输出上打印信息的方式做为示意)。
a)请用面向对象的方法对以上应用进行设计,编写可能需要的类
b)请给出实现以上应用功能的示例性代码,从某处获取图形信息,
并且进行计算和绘制
c)如果你的Square继承自Rectangle,请给出理由,如果不是,
请给出理由,并且请比较两种方式的优劣
d)请问你所编写的类,在如下代码中会有何表现,请解释
voidtest_rectangle_area(Rectangle&r)
{
r.set_width(10);
r.set_height(15);
assert(r.area()==150);
}
14.假设现有一个单向的链表,但是只知道只有一个指向该节点的指针p,并且假设这个节点不是尾节点,试编程实现删除此节点
15.写一个程序,把一个100以内的自然数分解因数。
(自然数分解因数就是将一个自然数分解为几个素数的乘积,提示,由于该数不是很大,所以可以将质数保存在数组中,以加快计算速度)
16.编写一个Identify的分配、释放的函数,为1-10000之间的自然数。
17.分别实现itoa和atoi.
18.Considerthefollowingcode:
#include
#include
intmain(intargc,char*argv[]){
inti=1;
charbuf[4];
strcpy(buf,"AAAA");
printf("%d\n",i);
return0;
}
a)Whencompiledandexecutedonx86,whydoesthisprogramusuallynot
outputwhattheprogrammerintended?
b)Nameseveralwaysinwhichthesecurityproblemthatcausesthis
programnottooutputwhattheprogrammerintendedcanbeprevented
WITHOUTchangingthecode.
19.intw=1,x=2,y=3,z=4;
m=(w w: x; m=(m m: y; m=(m<2)? m: z; printf("m=%d",m); 说出结果 20.说出结果 #include main() { FILE*fp; inti,a[4]={1,2,3,4},b; fp=fopen("data.dat","wb");//这里帮忙解释一下 for(i=0;i<4;i++) fwrite(&a[i],sizeof(int),1,fp);//这里也帮忙看一下 fclose(fp); fp=fopen("data.dat","rb"); fseek(fp,-2L*sizeof(int),SEEK_END);//还有这里 fread(&b,sizeof(int),1,fp);//这里还有也看一下 fclose(fp); printf("b=%d\n",b); } 21.有双向循环链表结点: typedefstructnode { intdate; structnode*front,*next; }_Node; 有两个双向循环链表A,B,知道其头指针为: pHeadA,pHeadB,请写一函数将两上链表中date值相同的结点删除 22. char*GetStr() { char*tmp; tmp="123" returntmp; } voidmain() { printf("%s",GetStr()); } 会输出123吗? 123创建在堆上还是栈上呢? 123的空间是什么时候释放的? 23. 字符指针、浮点数指针、以及函数指针这三种类型的变量哪个占用的内存最大? 为什么? 类ClassB从ClassA派生,那么ClassA*a=newClassB(…);试问该表达是否合法? 为什么? 如果ClassA中定义并实现虚函数intfunc(void),ClassB中也实现该函数,那么上述变量a->func()将调用哪个类里面的函数? 如果intfunc(void)不是虚函数,情况又如何? 为什么? char**p,a[16][8]; 问: p=a是否会导致程序在以后出现问题? 为什么? 如下所述的ifelse和switch语句哪个的效率高? 为什么? 在同一个进程中,一个模块是否可以通过指针操作破坏其它模块的内存,为什么? 应用程序在运行时的内存包括代码区和数据区,其中数据区又包括哪些部分? 24.Assignment2: PictureProcessing UseC++,Java,orsimilarlanguagesor/andanymiddlewaresuchasEJBandJ2EEtoprocessa picturewithahighresolution(3MegaPixelsforexample).Usesomemethodologiestodegrade theresolutionofthepicturetomakeitquickerforbrowsing.Thendividethedegraded pictureinto9sectorsequally.Clickanyofthe9sectorswillresultadetailedpicturefor thissectorwiththesameresolutionasthatoftheoriginalpicture.Thisassignmentis designedforyoutodemonstrateyourabilitytohandlepictures. 25.用<<,>>,|,&实现一个WORD(2个字节)的高低位交换! ! 26.要开辟P1,P2,P3,P4内存来做缓冲,大小自定,但这四个缓冲的大小要一样,并且是连续的! 27.有一浮点型数组A,用C语言写一函数实现对浮点数组A进行降序排序,并输出结果,要求要以数组A作为函数的入口.(建议用冒泡排序法) 28.找错: #include #include classBase { private: char*name; public: Base(char*className) { name=newchar[strlen(className)]; strcpy(name,className); } ~Base() { deletename; } char*copyName() { charnewname[256]; strcpy(newname,name); returnnewname; } char*getName() { returnname; } staticvoidprint(Basebase) { printf("name: %s\n",base.name); } }; classSubclass: publicBase { public: Subclass(char*className): Base(className) { } }; intmain() { Base*pBase=newSubclass("test"); Base: : print(*pBase); printf("name: %s\n",pBase->getName()); printf("newname: %s\n",pBase->copyName()); return0; } 29.编写一个函数,函数接收一个字符串,是由十六进制数组成的一组字符串,函数的功能是把接到的这组字符串转换成十进制数字.并将十进制数字返回. 30.编写一个函数将一条字符串分成两部分,将前半部分按ASCII码升序排序,后半部分不变,(如果字符串是奇数则中间的字符不变,)最后再将前后两部分交换,然后将该字符串输出, 测试字符串“ADZDDJKJFIEJHGI” 31.找错 Voidtest1() { charstring[10]; char*str1="0123456789"; strcpy(string,str1); } Voidtest2() { charstring[10],str1[10]; for(I=0;I<10;I++) { str1[i]='a'; } strcpy(string,str1); } Voidtest3(char*str1) { charstring[10]; if(strlen(str1)<=10) { strcpy(string,str1); } } 32. 找错 #defineMAX_SRM256 DSNget_SRM_no() { staticintSRM_no; intI; for(I=0;I{ SRM_no%=MAX_SRM; if(MY_SRM.state==IDLE) { break; } } if(I>=MAX_SRM) return(NULL_SRM); else returnSRM_no; } 33. 写出程序运行结果 intsum(inta) { autointc=0; staticintb=3; c+=1; b+=2; return(a+b+C); } voidmain() { intI; inta=2; for(I=0;I<5;I++) { printf("%d,",sum(a)); } } 34. intfunc(inta) { intb; switch(a) { case1: 30; case2: 20; case3: 16; default: 0 } returnb; } 则func (1)=? 35: inta[3]; a[0]=0;a[1]=1;a[2]=2; int*p,*q; p=a; q=&a[2]; 则a[q-p]=? 36. 定义int**a[3][4],则变量占有的内存空间为: _____ 37. 编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。 如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。 38.写一个函数,判断一个int型的整数是否是2的幂,即是否可以表示成2^X的形式(不可以用循环) 我只知道是用递推,大概写了一下,如下: intIsTwoPow(ints) { if(s==1)returnFALSE; s=s>>1; if(s>1)IsTwoPow(s); return(s==1)? TRUE: FALSE;//大概是这个意思,但是这一句似乎不该这么返回! } 39A,B从一堆玻璃球(共100个)里向外拿球,规则如下: (1)A先拿,然后一人一次交替着拿; (2)每次只能拿1个或2个或4个; (3)谁拿最后一个球,谁就是最后的失败者; 问A,B谁将是失败者? 写出你的判断步骤。 40.已知: 无序数组,折半查找,各元素值唯一。 函数原型是: Binary_Seach(intarray[],intiValue,intiCount) array是数组,在里面用折半查找的方法找等于iValue的值,找到返回1否则0,iCount是元素个数 41.统计一个字符串中字符出现的次数 42.100位以上的超大整数的加法(主要考虑数据结构和加法的实现)。 43.对如下电文: "CASTCASTSATATATASA"给出Huffman编码。 44.int(*(*f)(int,int))(int)表示什么含义? 45.x=x+1,x+=1,x++,为这三个语句的效率排序。 并说明为什么。 46.中缀表达式A-(B+C/D)*E的后缀形式是什么? 47.structS1 { charc; inti; }; sizeof(S1)=? classX{ public: X(); virtual~X(); voidmyMemberFunc(); staticvoidmyStaticFunc(); virtualvoidmyVirtualFunc(); private: inti; char*pstr; chara; } sizeof(X)=? 48.找出两个字符串中最大子字符串,如"abractyeyt","dgdsaeactyey"的最大子串为"actyet" 49.有一百个整数,其中有负数,找出连续三个数之和最大的部分. 50.写一程序实现快速排序.假设数据输入为一文件 快速算法描述如下 AlgorithmPartition Input: sequencea0,...,an-1withnelements Output: permutationofthesequencesuchthatallelementsa0,...,ajarelessthanorequaltoall elementsai,...,an-1(i>j) Method: choosetheelementinthemiddleofthesequenceascomparisonelementx leti=0andj=n-1 whileij searchthefirstelementaiwhichisgreaterthanorequaltox searchthelastelementajwhichislessthanorequaltox ifij exchangeaiandaj leti=i+1andj=j-1 Afterpartitioningthesequence,Quicksorttreatsthetwopartsrecursivelybythesameprocedure. Therecursionendswheneverapartconsistsofoneelementonly. 51.写一算法检测单向链表中是否存在环(whetherthereisaloopinalinklist), 要求算法复杂度(Algorithm'scomplexity是O(n))并只使用常数空间(spaceisO(c)). 注意,你只知道一个指向单向链表头的指针。 链表的长度是不定的,而且环出现的地方也是不定的,环有可能在头,有可能在中间。 而且要求是检测,不能破坏环的结构. 52.设下列函数已经通过了调试 boolSort_Array(ArrayType*Pinputarray,ArrayType*Poutarray); 该函数在内存中排序,能把字节数最大为100M字节的ArrayType类型的数组排序。 其中ArrayType是一个 预定义的数组类型(细节无关紧要),Pinputarray,Poutarray分别为排序前的指针和排序后的指针。 请用c语言的伪码风格设计一个算法,他调用上面给出的函数完成下列从输入到输出的任务: 输入: 排序前的大文件,名称为char*pinoutfilename,其内容为用分号分隔的ArrayType类型的数组元素,可装满4个100M字节的数组。 输出: 排序后的大文件char*poutoutfilename。 53.用最有效率的方法算出2乘以8等於几? 54. 1.错误的转义字符是(c) A.'\091'B.'\\' C.'\0'D.'\'' 2.若数组名作实参而指针变量作形参,函数调用实参传给形参的是(d) A.数组的长度B.数组第一个元素的值 C.数组所有元素的值D.数组第一个元素的地址 3.变量的指针含意是指变量的(b) A.值B.地址 C.存储D.名字 5.某文件中定义的静态全局变量(或称静态外部变量)其作用域是(d) A.只限某个函数B.本文件 C.跨文件D.不限制作用域 55. 1.解二次方程: a*x*x+b*x+c intQuadratic(doublea,doubleb,doublec,double&x1,double&x2); 返回值: 解的个数 2.最大公约数 DWORDDivisor(DWORDdwFirst,DWORDdwSecond); 返回值: 最大公约数 3.根据蒙特卡洛算法计算圆周率 doublePI(DOWRDdwCount/*测试次数*/); 返回值: PI 4.无符号整数乘法,乘数为32bit,结果为64bit 提示: 32bit整数分解为16bit相乘 voidMultiply(DWORDdwFirst,DWORDdwSecond,DWORD&dwHigh,DWORD&dwLower); 5.链表排序(从小到大) 节点定义为: structNode{ intnValue; structNode*pNext; }; 最后一个节点的pNext=NULL. Node*SortChain(Node*pHead); 返回值: 链表头 Trackback:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cc 试题 集锦