CC++ 笔试题 集锦.docx
- 文档编号:18228881
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:63
- 大小:38.25KB
CC++ 笔试题 集锦.docx
《CC++ 笔试题 集锦.docx》由会员分享,可在线阅读,更多相关《CC++ 笔试题 集锦.docx(63页珍藏版)》请在冰点文库上搜索。
CC++笔试题集锦
一、输入一个n,然后在屏幕上打印出NxN的矩阵!
例如,输入一个3,则
123
894
765
输入一个4,则
1 234
1213145
1116156
10987
参考答案:
#include
#include
#defineN10
voidprintCube(inta[][N],intn);
voidmain()
{
inta[N][N],n;
printf("inputn:
\n");
scanf("%d",&n);
printCube(&a[0],n);
getch();
}
voidprintCube(inta[][N],intn)
{
inti,j,round=1;
intm=1;
for(i=0;i a[0]=m++; for(i=n-1;i>=n/2;i--) { for(j=round;j<=i;j++) a[j]=m++; for(j=i;j>=round;j--) a[j-1]=m++; for(j=i;j>round;j--) a[j-1][round-1]=m++; for(j=round;j a[round][j]=m++; round++; } for(i=0;i for(j=0;j printf("%3d",a[j]); printf("\n"); } } 二、朗讯面试题: Therearetwointvariables: aandb,don’tuse“if”,“? : ”,“switch”orotherjudgementstatements,findoutthebiggestoneofthetwonumbers. 参考答案: 方案一 intmax=((a+b)+abs(a-b))/2 方案二 intc=a-b; char*strs[2]={"a大","b大"}; c=unsigned(c)>>(sizeof(int)*8-1); 三、朗讯面试题: 如何打印出当前源文件的文件名以及源文件的当前行号? 参考答案: 通常使用的就是__FILE__,__LINE__,在调试函数中利用“%s","%ld",打印就好了。 四、朗讯面试题: main主函数执行完毕后,是否可能会再执行一段代码,给出说明? 参考答案: crt会执行另一些代码,进行处理工作。 如果你需要加入一段在main退出后执行的代码,可以使用atexit()函数,注册一个函数。 语法: #include intatexit(void(*function")(void)); #include #include voidfn1(void),fn2(void),fn3(void),fn4(void); intmain(void) { atexit(fn1); atexit(fn2); atexit(fn3); atexit(fn4); printf("Thisisexecutedfirst.\n"); } voidfn1() { printf("next.\n"); } voidfn2() { printf("executed"); } voidfn3() { printf("is"); } voidfn4() { printf("This"); } 五、朗讯面试题: 如何判断一段程序是由C编译程序还是由C++编译程序编译的? 参考答案: c++编译时定义了__cplusplus c编译时定义了_STDC_ 六、下面这道面试题怎么做(指针)? #include main(){ intc[3][3]={1,2,3,4,5,6,7,8,9}; for(inti=0;i<3;i++) for(intj=0;j<3;j++) printf("%ld\n",&c[j]); printf("-------------------------\n"); printf("%ld\n",(c+1)); printf("%ld\n",(*c+1)); printf("%ld\n",&c[0][0]); printf("%ld\n",**c); printf("%ld\n",*c[0]); if(int(c)==int(*c)) printf("equl"); } 为什么c,*c的值相等,(c+1),(*c+1)的值不等 c,*c,**c,代表什么意思? 参考答案: c是第一个元素的地址,*c是第一行元素的首地址,其实第一行元素的地址就是第一个元素的地址,这容易理解。 **c是提领第一个元素。 为什么c,*c的值相等? intc因为直接用c表示数组c[0][0] printf("%ld\n",*c[0]);语句已将指针移到数组头。 int(*c)表示c0的值为1,所以相等。 数组c的存放空间示意如下: (机器中是行优先存放的) c[0][0]c[0][1]c[0][2] c[1][0]c[1][1]c[1][2] c[2][0]c[2][1]c[2][2] c是一个二维数组名,实际上它是一个指针常量,不能进行自加、自减运算,即: c++、c--、++c、--c 都是不允许的; c: 数组名;是一个二维指针,它的值就是数组的首地址,也即第一行元素的首地址(等于*c),也 等于第一行第一个元素的地址(&c[0][0]);可以说成是二维数组的行指针。 *c: 第一行元素的首地址;是一个一维指针,可以说成是二维数组的列指针。 **c: 二维数组中的第一个元素的值;即: c[0][0] 所以: c和*c的值是相等的,但他们两者不能相互赋值,(类型不同); (c+1): c是行指针,(c+1)是在c的基础上加上二维数组一行的地址长度,即从&c[0][0] 变到了&c[1][0]; (*c+1): *c是列指针,(*c+1)是在*c的基础上加上二数组一个元素的所占的长度,即从 &c[0][0]变到了&c[0][1] 从而(c+1)和(*c+1)的值就不相等了 七、定义int**a[3][4],则变量占有的内存空间为: _____ 参考答案: int**p;/*16位下sizeof(p)=2,32位下sizeof(p)=4*/ 总共3*4*sizeof(p) 八、编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。 如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。 参考答案: 判断年份是否是闰年,月份的大小月, 月(12进制)、日(与闰年、大小月有关)、时(24进制)、分(60进制)、妙(60进制) 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CC+ 笔试题 集锦 CC 笔试