C++试题及答案.docx

上传人:b****3 文档编号:4902067 上传时间:2023-05-07 格式:DOCX 页数:36 大小:42.02KB
下载 相关 举报
C++试题及答案.docx_第1页
第1页 / 共36页
C++试题及答案.docx_第2页
第2页 / 共36页
C++试题及答案.docx_第3页
第3页 / 共36页
C++试题及答案.docx_第4页
第4页 / 共36页
C++试题及答案.docx_第5页
第5页 / 共36页
C++试题及答案.docx_第6页
第6页 / 共36页
C++试题及答案.docx_第7页
第7页 / 共36页
C++试题及答案.docx_第8页
第8页 / 共36页
C++试题及答案.docx_第9页
第9页 / 共36页
C++试题及答案.docx_第10页
第10页 / 共36页
C++试题及答案.docx_第11页
第11页 / 共36页
C++试题及答案.docx_第12页
第12页 / 共36页
C++试题及答案.docx_第13页
第13页 / 共36页
C++试题及答案.docx_第14页
第14页 / 共36页
C++试题及答案.docx_第15页
第15页 / 共36页
C++试题及答案.docx_第16页
第16页 / 共36页
C++试题及答案.docx_第17页
第17页 / 共36页
C++试题及答案.docx_第18页
第18页 / 共36页
C++试题及答案.docx_第19页
第19页 / 共36页
C++试题及答案.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++试题及答案.docx

《C++试题及答案.docx》由会员分享,可在线阅读,更多相关《C++试题及答案.docx(36页珍藏版)》请在冰点文库上搜索。

C++试题及答案.docx

C++试题及答案

C++试卷

一、选择题(每题1分)

1.下面是关于构造函数的说法,不正确的是()。

A.C++规定,每一个类必须有一个构造函数,没有构造函数就不能创建对象

B.如果没有提供一个类的构造函数(一个都未提供),则C++提供一个默认的构造函数,该默认构造函数是个无参构造函数,它仅仅负责创建对象

C.虽然一个类定义了一个构造函数(不一定是无参构造函数),C++仍然提供默认的构造函数

D.与变量定义类似,在用默认构造函数创建对象时,如果创建的是全局对象或静态对象,则对象的位模式全为0,否则,对象值是随机的

 

2.在下列说法中,不正确的是()。

A.静态成员函数不能利用this指针

B.只有非静态成员才可以使用this关键字,因为静态成员没有this指针

C.析构函数不接受任何参数,也不带有任何类型的返回值

D.虚机制在构造函数和析构函数中仍然可以很好地工作,以实现多态性

 

3.多重继承的构造顺序一般可分为4步,下面给出这4个步骤:

step1:

任何非虚拟基类的构造函数按照它们被继承的顺序构造。

step2:

任何虚拟基类的构造函数按照它们被继承的顺序构造。

step3:

任何成员对象的构造函数按照它们声明的顺序构造。

step4:

类自己的构造函数。

这4个步骤的正确顺序是()。

A.step4、step3、step1、step2B.step2、step4、step3、step1

C.step2、step1、step3、step4D.step3、step4、step1、step2

 

4.若程序中有非法操作,则()。

A.eofbit置位B.failbit置位C.badbit置位D.hardbit置位

 

5.设置填充字符的函数是()。

A.intios:

:

width(int)B.intios:

:

width()C.charios:

:

fill(char)D.charios:

:

fill()

 

6.返回当前精度的成员函数是()。

A.intios:

:

width(int)B.intios:

:

width()C.intios:

:

precision()D.intios:

:

precision(int)

 

7.要求浮点输出时必须带有一个小数点的格式控制常量是()。

A.sowbaseB.showposC.showpointD.fixed

 

8.目前推荐的C++标准()虚构造函数。

A.不支持B.支持C.曾经支持过D.已经由过去的不支持改为支持

 

9.下列对模板的声明,正确的是()。

A.templateB.template

C.templateD.template

 

10.友元运算符obj++被C++编译器解释为()。

A.operator++(obj)B.operator++(obj,0)

B.obj.operator++()D.obj.operator++(0)

 

11.C++的运算符函数的返回类型()。

A.可以是任意类型B.不可以是int类型

C.不能是void类型D.不可以是float类型

 

12.声明类test的复制构造函数的正确形式是()。

A.inttestB.voidtestC.test(void)D.test(test&)

 

13.一个const对象()。

A.能访问所有成员函数B.只能访问const成员函数

C.也能访问volatile成员函数D.能访问const和volatile成员函数

 

14.下面关于类的对象性质的描述,正确的是()。

A.对象之间不可以相互赋值B.不可以说明指向对象的指针

C.对象不能用作数组元素D.一个对象能用作另一个对象的成员

 

二、填空题(每题2分)

1.在c++中,除具有、语句的函数不能说明为内联函数外,其它函数都可以说明为内联函数。

 

2.在c++中,封装可以由、和等关键字提供。

 

3.若example是已定义的类,在程序结束之前,共计存在个对象。

#include”example”

main()

{exampleX(0);

X=5;X.print();

X=example(10);

X.print();

}

 

4.由于二义性原因,一个类不能从同一个类中直接一次以上,如果必须这样做,可以使用一个。

 

5.在c++中,如果在多条继承路径有一个公共的基类,如果想使这个公共的基类只产生一个拷贝,则可以将这个基类说明为。

使用关键字说明。

 

6.简单成员函数是指声明中不含有、、关键字的函数。

 

7.静态成员为该类的所有共享,它们被存储于一个中。

 

8.在c++中声明和时使用volatile或const均是非法的。

 

9.当访问私有静态数据成员时,可通过定义公有的来访问。

 

10.有关继承,静态成员被继承,友元被继承。

 

11.c++不允许重载、、、运算符。

 

12.、、、四个运算符只能用类运算符来重载。

 

13.c++提供两种格式控制方式,一种是,另一种是。

 

14.如果Empty是从某个其它类派生出来的,而且这个其它类又有一个析构函数,c++也将为Empty写一个。

 

15.当一个基类定义了赋值或初始化语义,而其派生类却未定义赋值或初始化语义时,c++编译器为该派生类自动生成一个或函数。

 

16.如果程序员定义classEmpty{};,下列各语句将产生的函数名称是:

a.      constEmptye1;//                                         

b.     Emptye2=e1;//

c.      e2=e1;//

d.     Empty*pe2=&e2;//

e.      constEmpty*pe1=&e1;//

 

三、改错题(每题7分)

1.仔细阅读下面的程序,找出类定义中的错误及其理由,并以尽量少的改动使其能够正确编译运行并给出运行结果。

#include

classtest{

intm;

intGet(){returnm;}

public:

statictest(inti){m=i;}

voidSet(inti){m=i;}

voidShow(){cout<

~test(){cout<

};

 

voidmain()

{

testa(25);

a.Show();

a.Set(45);

a.Show();

testc;

c.Set(55);

c.Show();

}

 

2.仔细阅读下面的程序,改正其中的错误并给出运行结果。

#include

#include

main()

{

ifstreamout("myfile2");

if(!

out){

cout<<"can'topenmyfile2."<

return1;

}

charstr[]="Howareyou?

";

char*p=str;

while(*p)

{out.put(*p);}

 

out.close();

ofstreamin("myfile2");

if(!

in){

cout<<"can'topenmyfile2."<

return1;

}

charch;

while(!

in){

in.get(ch);

cout<

}

in.close();

return0;

}

 

 

四、程序分析(每题10分)

1.分析下面的程序,写出输出结果。

 

#include

#include

classbase{

public:

virtualchar*fun(void)const=0;

};

char*base:

:

fun(void)const

{return"base";}

classderived1:

virtualpublicbase{

public:

char*fun(void)const{

return"derived1";

}

};

classderived2:

virtualpublicbase{

public:

char*fun(void)const{

return"derived2";

}

};

classsubderived:

publicderived1,publicderived2{

public:

char*fun(void)const{

char*pch;

pch=newchar[strlen(derived1:

:

fun())+strlen(derived2:

:

fun())+1];

strcpy(pch,derived1:

:

fun());

strcat(pch,derived2:

:

fun());

returnpch;

}

};

voidmain(void){

base*pb;

pb=newderived1;

cout<fun()<

pb=newderived2;

cout<fun()<

pb=newsubderived;

cout<fun()<

}

2.阅读程序,给出正确的输出结果。

#include

classbase{

public:

virtualintfun(void)const{

cout<<"base:

:

fun"<

return10;

}

};

classdivide:

publicbase{

public:

intfun(void)const{

cout<<"divide:

:

fun"<

return20;

}

};

voidmain(void){

divided;

base*b1=&d;

base&b2=d;

baseb3;

b1->fun();

b2.fun();

b3.fun();

}

 

五、完成程序(每题10分)

1.1.根据已有程序和输出结果完成下面的程序。

  #include

  #include

  classPoint

  {

  private:

  _______

  protected:

  _______

  public:

  Point(floata,floatb,floatc){__________}

  floatGetx(){returnX;}

  floatGety(){returnY;}

  floatGetz(){returnZ;}

  };

  classLine:

_______Point

  {

  private:

  floatm;

  public:

  Line(floata,floatb,floatc,floatd)_______

  {_________}

  voidshow()

  {

  cout<

  cout<

  cout<

  cout<

  cout<

  cout<

  }

};

  voidmain()

  {

  LineA(4.5,6.5,8.5,9.5);

  A.show();

  

}

 

  程序输出结果为:

  

4.5

  6.5

  6.5

  8.5

  8.5

  9.5

4.5

 

2.仔细阅读下面的程序,在下划线处填上正确的内容,然后给出正确的输出结果。

#include

classbase{

inti;

intj;

public:

base(void):

i(0),j(0){}

base(intI,intJ):

{}

intgetI(void)const{

returni;

}

intgetJ(void)const{

returnj;

}

virtualvoiddisplay(void)const{

cout<<"i="<

}

virtual~base(void){

display();

}

};

classderived:

publicbase{

intk;

public:

derived(void):

{}

derived(intI,intJ,intK):

base(I,J),k(K){}

voiddisplay(void)const{

cout<<"i+k="<

:

getI()+k<<"\t"<<"j+k="<

:

getJ()+k<

}

~derived(void){

display();

}

};

voidmain(void){

derivedd1;

d1.display();

derivedd2(10,20,5);

d2.display();

}                                                              返回

计算机与信息工程学院2004-2005第二学期

《C++试卷》(B)04软件

 

一、单选题(每小题1分,共15分)

1、C++源程序文件的扩展名为( )

    A、.CPP   B、.C   C、.DLL  D、.EXE

2、编译程序的功能是( )

A、将汇编语言程序转换为目标程序

B、将汇编语言程序转换为高级语言程序

C、将高级语言程序转换为目标程序

D、将高级语言程序转换为汇编语言程序

3、下面的函数声明中,哪一个是”voidBC(inta,intb);”的重载函数?

( )

A、int BC(inta,intb)      B、voidBC(inta,charb)

C、floatBC(inta,intb,intc=0)   

D、voidBC(inta,intb=0)

4.如果a=1,b=2,c=3,d=4,则条件表达式“a>b?

a:

c

c:

d”的值为(  )

A.3            B.2          C.1        D.4

5.在inta[][3]={{1},{3,2},{4,5,6},{0}}中,a[2][2]的值是(  )

  A.3            B。

2              C。

6             D。

4

6. 已知charc;char*constpc="asdf",( )是正确的。

A.pc="dfgh"

B.*pc=‘b’

C.*pc++=‘y’

D.pc=&c

7.对于int*pa[5]的描述,()是正确的。

A.pa是一个指向数组的指针,所指向的数组是5个int型元素

B.pa是一个指向某数组中的第5个元素的指针,该元素是int型变量

C.pa[5]表示某个数组的第5个元素的值    

D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针

8.执行下列语句后的输出结果是( )。

inthot=100;

int&rad=hot;

hot+=100;

cout<

     A.0;                 B。

100;

     C.200;               D。

300;

9.下列对结构及其变量定义错误的是:

( )

 A.structMyStruct{             B。

structMyStruct{

          intnum;                                intnum;

          charch;                                charch;

       };                                        }my;

 MyStruct my;                              

 C. struct{                      D。

struct{

         intnum;                           intnum;

         charch;                           charch;

}                                    };

my;                                      struct my;                                     

10.下列关于指针运算的描述错误的是:

()

 A.在一定条件下,两个指针可以相加

   B.在一定条件下,两个指针可以进行关系运算

   C.在一定条件下,指针可以为空

   D.在一定条件下,两个指针可以相互赋值

11.在C++语言中,对函数参数默认值描述正确的是:

( )

   A.函数参数的默认值只能设定一个

   B.一个函数的参数若有多个,则参数默认值的设定可以不连续

   C.函数参数必须设定默认值

   D.在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值

12.不能作为函数重载判断依据的是:

( )

   A.参数个数  B。

参数类型  C。

函数名字  D。

返回类型

13.以下程序的输出结果是:

( )

     #include

     voidprt(int*x,int*y,int*z){

        cout<<++*x<<","<<++*y<<","<<*z++<

     }

     inta=10,c=20,b=40;

    voidmain(){

      prt(&a,&b,&c); prt(&a,&b,&c);

  }

     A.11,42,31     B。

11,41,20     C。

11,21,40     D。

11,41,21

         12,21,41       12,42,20        11,21,41        12,42,22

14.以下程序的输出结果是:

( )

     #include

     voidfunc(char**m){

       ++m;

       cout<<*m<

      }

     voidmain(){

       staticchar*a[]={"morning","afternoon","evening"};

       char**p;

       p=a;

       func(p);

     }

      A.字符o的起始地址             B。

字符a的起始地址

      C.字符o                       D。

afernoon

 

15.以下程序的输出结果是:

(  )

      #include

      int fun(char*s){

      char*p=s;

      while(*p!

='\0') p++;

      return(p-s);

      }

    voidmain(){

       cout<

     }

   A.0         B。

1         C。

2        D。

3

二、填空题(每小题2分,共20分)

 

1.设

structstudent

{intno;charname[12];

charsex;floatscore[4];

}stu1;

在程序执行时,系统为stu1分配       个字节的内存空间。

2.设有一函数,其代码如下:

intpower(x,n)

{

  inti,p;

  for(p=1,i=1;i<=n;++i)

   p=p*x;

     return(p);

}

现要求取消变量i,重写该函数如下,请在空白上填上适当内容。

int power(intx,intn)

{

 intp;

  for(_________;n>0;__________)

   p=p*x;

  return(p);

}3.函数voidrevstr(char*s)将字符串s逆置。

例如字符串“abcde”,经过逆置后变为“edcba”。

voidrevstr(char*s)

{char*p,c;

if(s==NULL)return;

p=        ;/*p指向字符串s的最后一个有效字符*/

while(s

/*交换并移动指针*/

C=*S;

=*p;

 

=c;

}

}

4.本程序用古典的Eratosthenes的筛法求从2起到指定范围内的素数。

如果要找出2至10中的素数,开始时筛中有2到10的数,然后取走筛中的最小的数2,宣布它是素数,并把该素数的倍数都取走。

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2