CC++ 笔试题 集锦.docx

上传人:b****8 文档编号:30387357 上传时间:2023-08-14 格式:DOCX 页数:63 大小:38.25KB
下载 相关 举报
CC++ 笔试题 集锦.docx_第1页
第1页 / 共63页
CC++ 笔试题 集锦.docx_第2页
第2页 / 共63页
CC++ 笔试题 集锦.docx_第3页
第3页 / 共63页
CC++ 笔试题 集锦.docx_第4页
第4页 / 共63页
CC++ 笔试题 集锦.docx_第5页
第5页 / 共63页
点击查看更多>>
下载资源
资源描述

CC++ 笔试题 集锦.docx

《CC++ 笔试题 集锦.docx》由会员分享,可在线阅读,更多相关《CC++ 笔试题 集锦.docx(63页珍藏版)》请在冰豆网上搜索。

CC++ 笔试题 集锦.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1