C++习题集2.docx

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

C++习题集2.docx

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

C++习题集2.docx

C++习题集2

《C++面向对象程序设计》复习题

一、填空题

1.C++程序语言中程序从Main()位置开始执行。

2.设inta=7;floatx=2.5,y=8.2;表达式x+a%3*(int)(y-x)%2/4的值是2.5

3.“判断整数x和整数y是否都为奇数”的C++语言表达式是x%2<>0&&y%2<>0。

4.将字符串s2连接到字符串s1后的函数调用是strcat(s1,s2)。

5设x=2,y=3,z=4;则z+=x++&&y++&&++z表达式执行后,x、y、z的值分别是3,4,6。

6.若有函数调用语句fun(a+b,(y=9,x),37),则其实参的个数是3。

7.已知字母a的ASCII码为十进制数97,ch为字符变量,则ch=’a’+’8’-’5’的值为d。

8.设:

inta[5]={10,20,30,40,50};int*p=&a[0];表达式++*p+*(a+3)的值是51。

9.若有宏定义:

#defineT(x,y,z)x*y*z/4

cout<

上述程序段运行结果为132。

10.“判断整数a是否在闭区间[-10,10]之中”的C++语言表达式是a>=-10&&a<=10。

11.设有代码“staticinta[3][4]={{1,2},{0},{4,6,8,10}};”则a[1][2]值为0。

12.假定所有变量均已正确定义,下列程序段运行后x的值是3。

a=b=c=14;x=35;

if(!

a)x--;elseif(b);if(c)x=3;elsex=4;

13.类的成员函数可以在类体内定义,也可以在类体外定义。

14.如类中没有明确定义析构函数,清除对象的工作仍由析构函数来完成,原因是编译器自动提供缺省析构函数。

15.生成一个派生类对象时,先调用基类的构造函数,然后调用派生类的构造函数。

16.在继承关系中,一个派生类同时继承自多个基类的情形称为多重继承,一个派生类继承自一个基类的情形称为单继承。

17.若在I/O流的输出中使用控制符setfill()设置填充字符,应包含的头文件是iomanip.h。

18.在私有继承关系下,基类的公有成员和保护成员将成为派生类中的私有成员,它们只能由派生类的成员函数来访问。

19在C++中,函数的参数有两种传递方式,它们是值传递和地址或指针或引用传递。

20.当一个成员函数被调用时,该成员函数的this指针指向调用它的对象。

21.在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。

对两个有相同名字的数据成员进行访问时,如果没有作用域分隔符限定时,对此数据成员的访问将出现歧义。

22.拷贝构造函数使用引用作为参数初始化创建中的对象。

23.在公有继承的情况下,基类数据成员在派生类中的访问权限保持不变。

 24.描述命题"A小于B或小于C"的表达式为A

 25.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到没有形参的或缺省参数构造函数,否则应用程序会产生一个编译错误。

 26.静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象共享。

 27.为了避免可能出现的歧义,C++对if…else语句配对规则规定为:

else总是与与最近的if配对。

 28.设"inta=3,b=4,c=5;",表达式"(a+b)>c&&b==c"的值是0。

 29.面向对象的程序设计有四大特征,它们是抽象、封装、继承、多态。

 30.在VisualC++中,定义重载函数时,应至少使重载函数的参数个数或参数类型不同;在基类和派生类中,成员函数的覆盖是指派生类成员函数与在基类被覆盖的成员函数名、参数个数、参数类型和返回值类型均相同。

 31.构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个~、析构函数没有参数、析构函数可以定义为虚函数。

 32.动态联编要满足两个条件,它们是被调用的成员函数是虚函数、用指针或引用调用虚函数。

 33.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为抽象类,定义该类至少具有一个纯虚函数。

 34.在C++类中,const关键字可以修饰对象和成员函数,const对象不能被修改,const成员函数不能修改类数据成员。

 35.举出C++中两种用户自定义的数据类型:

类、枚举。

 36.C++中没有字符串类型,字符串是通过字符数组来表示的,每一个字符串都有一个结尾字符\0。

 37.C++中没有输入输出语句,输入输出是通过输入输出库实现的,写出一条打印整型变量n的输出语句:

cout<

 38.举出C++中两种代码复用的方式:

继承、复用。

39.C++程序有且只有一个main()。

40.若有变量定义intx=7;floata=2.5,c=4.7;表达式

a+(int)(x/3*(int)(c+2)/2)%4的值是4.5。

41.“x或y中至少有一个小于z”的C++语言表达式是x

42.将字符串s2拷贝到字符数组s1的函数调用是strcay(s1,s2)。

43.执行语句“x=(a=4,b=a++);”后,变量x、a、b的值依次为4,5,4。

44.表述“x或y中有一个大于z”的C++语言表达式是x>z||y>z。

45.字符串str长度的函数调用是strlen(str)。

46.执行语句“y=(x=3,z=--x);”后,变量的值依次为2,2,2。

47.设#definea(x)x*x;

cout<

上述程序段运行结果为34。

48.设x为整型变量,表达数学关系式:

1319。

49.设有代码“staticinta[3][4]={{1,2},{3},{4,5,6}};”则a[1][1]值为0。

50.若有定义:

charu;intb;floatv;doubled;

则表达式u*b+d-v的值的类型为double。

51.假定所有变量均已正确定义,下列程序段运行后x的值是4。

a=b=c=0;x=35;

if(!

a)x--;elseif(b);if(c)x=3;elsex=4;

52.类的构造函数的主要作用是对对象进行初始化

53.C++将类继承分为单一继承和多重继承两种。

54.建立类对象时,为节省内存,系统一般只分配用于对象的内存。

55.派生类可以定义其基类中不具备的数据和操作。

56.operator是C++的一个关键字,它经常和C++的一个运算符连用,构成一个运算符函数名。

运算符函数的返回类型不能是void类型。

57.在继承机制下,当对象消亡时,编译系统先执行派生类的析构函数,然后再执行基类的析构函数。

58.C++文件的两种类型,分别是字符文件和二进制文件。

59.在保护继承关系下,基类有公有成员和保护成员将成为派生类中的保护成员,它们只能由派生类的成员来访问。

60.下面程序的运行结果是 3 。

 #include

 voidmain()

 {

  chara='a',b='j';

  floatx;

  x=(b-a)/('F'-'A');

  printf("%d\n",(int)(3.14*x));

 }

61.下面程序的运行结果是2581114。

 #include"iostream.h"

 voidmain()

 {

  inti=1;

  while(i<=15){

   i++;

   if(i%3!

=2)continue;

   elsecout<<"i="<

  }

 }

62.下面程序的运行结果是________。

 #include"iostream.h"

 classtest

 {

 private:

  intnum;

  floatfl;

 public:

  test();

  intgetint(){returnnum;}

  floatgetfloat(){returnfl;}

  ~test();

 };

 test:

:

test()

 {

  cout<<"Initalizingdefault"<

  num=0;fl=0.0;

 }

 test:

:

~test()

 {

  cout<<"Desdtructorisactive"<

 }

 voidmain()

 {

  testarray[2];

  cout<

 }

 Initalizingdefault

 Initalizingdefault

 00

 Desdtructorisactive

 Desdtructorisactive

 63.下面程序的运行结果是________。

 #include

 classA

 {

 public:

  A(){cout<<"A:

:

A()called.\n";}

  virtual~A(){cout<<"A:

:

~A()called.\n";}

 };

 classB:

publicA

 {

 public:

  B(inti){

  cout<<"B:

:

B()called.\n";

  buf=newchar[i];}

  virtual~B()

  {

   delete[]buf;

   cout<<"B:

:

~B()called.\n";

  }

 private:

  char*buf;

 };

 voidfun(A*a)

 {

  deletea;

 }

 voidmain()

 {

  A*a=newB(15);

  fun(a);

 }

 A:

:

A()called.

 B:

:

B()called.

 B:

:

~B()called.

 A:

:

~A()called.

 64.下面程序的运行结果是________。

 #include

 inta[]={1,3,5,7,9};

 int*p[]={a,a+1,a+2,a+3,a+4};

 voidmain()

 {

  printf("%d\t%d\t%d\n",a[4],*(a+2),*p[1]);

  printf("%d\t%d\t%d\n",**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]);

 }

 953

 847

二、选择题

1.下列变量名中,(B)是合法的。

A.56AB._abcC.d-PtrD.while

2.下列各种运算符中,(A)优先级最高。

A.+B.&&C.==D.*=

3.设变量m,n,a,b,c,d均为0,执行(m=a==b)&&(n=c==d)后,m,n的值是(D)。

A.0,0B.0,1C.1,0D.1,1

4.字符串”\t\v\\\0which\n”的长度是(B)。

A.4B.3C.9D.字符串有非法字符,输出值不确定

5.设a=2,b=3,c=2;计算a+=b*=(++b-c++)中a、b、c的值(C)。

A.8、6、2B.2、4、2C.10、8、3D.5、3、3

6.已知:

inti=5,下列do-while循环语句的循环次数为(D)。

do{cout<

i--;

}while(i!

=0);

A.0B.1C.5D.无限

7.下面关于循环语句的描述中,(B)是错误的。

A.循环体内可以包含有循环语句

B.循环体内必须同时出现break语句和continue语句

C.循环体内可以出现选择语句

D.循环体内可以是空语句

8.下面程序段(B)。

x=3;

do

{y=x--;

if(!

y){cout<<”x”;continue;}

cout<<”#”;}

while(x>=1&&x<=2);

A.将输出##B.将输出###

C.是死循环D.含有不合法的控制表达式

9.在函数的定义格式中,下面各组成部分中,(D)是可以省略的。

A.函数名B.函数体C.函数数据类型说明D.函数参数

10.在函数的引用调用时,实参和形参应该是使用(C)。

A.变量值和变量B.地址值和指针C.变量值和引用D.地址值和引用

11.以下关于文件操作的叙述中,不正确的是(B)。

A.打开文件的目的是使文件对象与磁盘文件建立联系

B.文件读写过程中,程序将直接与磁盘文件进行数据交换

C.关闭文件的目的之一是保证将输出的数据写入硬盘文件

D.关闭文件的目的之一是释放内存中的文件对象

12.若有语句inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则(B)不是对a数组元素的正确引用(其中0≤i<10)。

A.p[i]   B.*(*(a+i))C.a[p-a]D.*(&a[i])

13.以下程序的输出结果是(A)。

#include

voidmain()

{chars[]="abcdefbcde",*p=s;

intv1=0,v2=0,v3=0,v4=0;

for(p;*p;p++)

switch(*p)

{

case'a':

v1++;break;

case'b':

v3++;break;

case'e':

v2++;break;

default:

v4++;

}

cout<

}

A.1,2,2,5B.4,7,5,8C.1,5,3,10D.8,8,8,8

14.下列结构体定义,正确的是。

C

A.record{B.structrecord{

intno;intno;

charnum[16];charnum[16];

floatscore;floatscore;

};}

C.structrecord{D.structrecord{

intno;intno

charnum[16];charnum[16]

floatscore;floatscore

};}

15.下列是构造函数的特点,(C)是错误的。

A.构造函数是一种成员函数,它具有一般成员函数的特点

B.构造函数的名称与其类名相同

C.构造函数必须指明其类型

D.一个类中可定义一个或多个构造函数

16.关于友元函数的描述中,(A)是错的。

A.A.友元函数是成员函数,它被说明在类体内

B.B.友元函数可直接访问类中的私有成员

C.C.友元函数破坏封装性,使用时尽量少用

D.D.友元类中的所有成员函数都是友元函数

17.下列对派生类的描述中,(C)是错误的。

A.A.一个派生类可以作为另一个派生类的基类

B.B.派生类至少应有一个基类

C.C.基类中成员访问权限继承到派生类中都保持不变

D.D.派生类的成员除了自已定义的成员外,还包含了它的基类成员

18.C++类体系中,能被派生类继承的有(B)。

A.构造函数B.虚函数C.友元函数D.析构函数

19.关于下列虚函数的描述中,(C)是正确的。

A.虚函数是一个static存储类的成员函数

B.虚函数是一个非成员函数

C.基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数

D.派生类的虚函数与基类的虚函数应具有不同的类型或个数

20.以下有关静态数据成员函数的叙述不正确的是(B)。

A.静态成员函数属于整个类

B.对静态成员函数的引用不允许使用对象名

C.在静态成员函数中不能直接引用类的非静态成员

D.使用类名可以直接调用其静态成员函数

21.下列有关运算符重载的描述中,(B)是正确的。

A.运算符重载可改变其优先级B.运算符重载不改变其语法结构

C.运算符重载可改变其结合性D.运算符重载可改变其操作数的个数

22.对new运算符的下列描述中,(B)是错误的。

A.它可以动态创建对象和对象数组

B.用它创建对象数组时必须指定初始值

C.用它创建对象时要调用构造函数

D.用它创建的对象可以使用运算符delete来释放

23.下列是为字符数组赋字符串的语句组,其中错误是(A)。

A.chars[10];s=”program”;B.chars[]=”program”;

C.chars[10]=”Hello!

”;D.chars[10];strcpy(s,”hello!

”);

24.当调用函数时,实参是一个一维数组名a,则向函数传送的是(D)。

A.数组的长度B.数组所有元素的值

C.数组元素a[0]的值D.数组元素a[0]的地址

25.下列有关类的说法不正确的是(C)。

A.A.对象是类的一个实例

B.B.任何一个对象只能属于一个具体的类

C.C.一个类只能有一个对象

D.D.类与对象的关系和数据类型与变量的关系相似

26、下面关于类概念的描述中,(D)是错误的。

A)类是抽象数据类型的实现B)类是具有共同行为的若干对象的统一描述体

C)类是创建对象的样板D)类就是C语言中的结构体类型

27、面向对象程序设计思想的主要特征中不包括(D)。

A)封装性B)多态性C)继承性D)功能分解,逐步求精

28、在C++中,函数原型不能标识(D)。

A)函数的返回类型B)函数参数的个数C)函数参数类型D)函数的功能

29、有关析构函数的说法不正确的是(B)。

A)析构函数有且仅有一个B)析构函数和构造函数一样可以有形参

C)析构函数的功能是用来释放一个对象D)析构函数无任何函数类型

30、已知X类.则当程序执行到语句,X array[3];时,调用了(D)次构造函数。

A)0B)1C)2D)3

31、类定义的内容允许被其他对象无限制地存取是(C)。

A)private部分B)protected部分C)public部分D)以上都不对

32、关于new运算符的下列描述中,(D)是错误的.。

A)它可以用来动态创建对象和对象数组

B)使用它创建对象或对象数组,可以使用运算符DELETE删除

C)使用它创建对象时要调用构造函数

D)使用它调用对象数组时不许指定初始值

33、对于下面程序段,表达式正确的是(B)。

classBase{public:

intb;};

classBase1:

publicbase{};

classBase2:

publicbase{};

classDerived:

publicbase1,publicbase2{public:

intfun();};

Derivedd;

A)d.Base1:

:

bB)d.Base:

:

bC)d.bD)d.Base:

:

fun()

34、可以用p.a的形式访问派生类对象p的基类成员a其中a是(D)。

A)私有继承的公有成员B)公有继承的私有成员

C)公有继承的保护成员D)公有继承的公有成员

35、下列关于C++类的描述中错误的是(C)。

A)类与类之间可以通过一些手段进行通信和联络

B)类用于描述事物的属性和对事物的操作

C)类与类之间必须是平等的关系,

D)类与类之间可以通过封装而具有明确的独立性

36、下列描述中哪个是正确的(B)。

A)私有派生的子类无法访问父类的成员

B)类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的

C)私有派生类不能作为基类派生子类

D)私有派生类的所有子孙类将无法继续继承该类的成员

37、下列关于构造函数说法不正确的是(C)。

A)构造函数必须与类同名B)构造函数可以省略不写

C)构造函数必须有返回值D)在构造函数中可以对类中的成员进行初始化

38、如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是(D)。

A)一元运算符B)二元运算符

C)选项A)和选项B)都可能D)重载错误

39、在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是(D)。

A)一元成员运算符B)二元成员运算符

C)一元友元运算符D)选项B)和选项C)都可能

40、一个类的友元函数能够访问该类的(D)。

A)私有成员B)保护成员C)公有成员D)所有成员

41、下列关于类定义的说法中,正确的是(A)。

A)类定义中包括数据成员和函数成员的声明  

B)类成员的缺省访问权限是保护的 

C)数据成员必须被声明为私有的 

D)成员函数只能在类体外进行定义

42、^通过运算符重载,可以改变运算符原有的(A)。

A)操作数类型  B)操作数个数  C)优先级  D)结合性

43、在C++语言中,数据封装要解决的问题是(D)。

A)数据的规范化B)便于数据转换C)避免数据丢失

D)防止不同模块之间数据的非法访问

44、对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是(D)。

A)公有类型B)私有类型C)保护类型D)友元类型

45、在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是(C)。

A)友元函数B)虚函数C)构造函数D)析构函数

46、类的析构函数的作用是(D)。

A)一般成员函数的初始化B)类的初始化

C)对象的初始化D)删除类创建的对象

47、下列说法正确的是(B)。

A)内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方

B)内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方

C)类的内联函数必须在类体内定义

D)类的内联函数必须在类体外通过加关键字inline定义

48、下列对派生类的描述中,错误的是(D)。

A)一个派生类可以作为另一个派生类的基类

B)派生类至少有一个基类

C)派生类的成员除了自己的成员外,还包含了它的基类的成员

D)派生类中继承的基类成员的访问权限到派生类保持不变

49、运算符的重载是对已有的运算符

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

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

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

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