《C++复习题(2015).doc》由会员分享,可在线阅读,更多相关《C++复习题(2015).doc(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+练习题一、选择题1. C+语言是从早期的C语言逐渐发展演变而来的。与C语言相比,它在求解问题方法上进行的最大改进是( B )。 A面向过程 B面向对象 C安全性 D复用性2. C+对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是 ( D )。A. 增加了一些新的运算符 B. 允许函数重载,并允许设置缺省参数C. 规定函数说明符必须用原型 D. 引进了类和对象的概念3. 对C+语言和C语言的兼容性,描述正确的是( A )。 AC+兼容C BC+部分兼容C CC+不兼容C DC兼容C+4. 在C+中,头文件扩展名为( B )。A. .cpp B. .h C. .1ib D. .ob
2、j5. C+源程序文件扩展名为( A ) 。A. .cpp B. .h C. .1ib D. .obj6. 由C+源程序文件编译而成的目标代码文件的缺省扩展名为( C )。A. .cpp B. .exe C. .obj D. .lik 7. 布尔类型标识符是( D )。A.void B.short C.long D.bool8. 下列不是C+语言的基本数据类型的是( D )。A.字符类型 B.整数类型 C.逻辑类型 D.枚举类型9. 用于标识十六进制前缀或后缀是( D )。 A. 后缀L B.后缀e C.前缀零 D.前缀0x10. 设x和y均为bool量,则x&y为真的条件是( A )。A.
3、它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假11. 在下列成对的表达式中,运算结果类型相同的一对是( D )。 A.72和7.02.0 B.72.0和72 C.7.02和72 D.7.02.0和7.02 12. 如果a=1,b=2,c=3,d=4,则条件表达式ab?a:cd?c:d的值为( A )。A1 B2 C3 D413在预编译指令中,宏定义使用哪个指令( B )。 A#include B#define C#if D#else14. 包含自定义头文件file.h的预处理指令是( D )。 A.#define B.#include file.h C.#define f
4、ile.h D.#includefile.h 15. 可替换#define PI 3.1415926的语句是( B )。A.float PI 3.1415926; B.const float PI=3.1415926;C.const PI(3.1415926); D.const 3.1415926; 16. 在C+中使用流进行输入输出,其中专用于从键盘进行输入的流是( B )。 A.cerr B.cin C.cout D.cfile17在C+中使用流进行输入输出,其中用于屏幕输出的对象是( C )。 Acerr Bcin Ccout Dcfile 18. 下列给字符数组进行的初始化中,正确的是
5、 ( A )。A. char s1=abcd; B.char s23=xyz;C. char s3=a,x,y; D.char s423=xyz,mnp;19. 在int b3=1,3,2,4,5,6,0中,a22的值是( C )。A. 0 B. 5 C.6 D.2 20. int a=3;int *p=&a;中,*p的值是( D ) 。A.变量a的地址值 B.无意义 C.变量p的地址值 D. 321. 对于int *pa5;的描述,正确的是 ( D )。A. pa是一个指向数组的指针,所指向的数组是5个int型元素B. pa是一个指向某数组中第5个元素的指针,该元素是int型变量C. pa5
6、表示某个数组中的第5个元素的值D. pa是一个具有5个元素的指针数组,每个元素是一个int型指针22. 已知:int a,&ra=a;关于ra的描述中正确的是 ( C )。A. ra是int型变量a的地址值 B.a是int型变量ra的地址值C. ra是int型变量a的引用 D. ra是int型变量a的指针23. 假定变量x定义为“int x=5;”,要使rx成为x的引用(别名),rx应定义为( D )。A. int rx=x; B. int rx=&x; C. int *rx=&x; D. int &rx=x;24. 设存在整型变量int x,则下列语句中与其它三项含义不同的是( A ) 。A
7、.int* p=&x; B.int& p=x; C.int & p=x; D.int &p=x;25. 设函数void swap(int&,int&)将交换两形参的值,如两整型变量int a=10;int b=15;则执行swap(a,b)后,a、b值分别为( C ) 。A.10,10 B.10,15 C.15,10 D.15,1526. 设存在函数int min(int,int)返回两参数中较小值,若求15,26,47三者中最小值,下列表达式中错误的是( B ) 。A.int m=min(min(15,26),min(15,47);B.int m=min(15,26,47);C.int m=
8、min(15,min(47,26); D.int m =min(min(47,26),16);27设存在函数int max(int,int)返回两参数中较大值,若求22,59,70三者中最大值,下列表达式不正确的是( C )。 Aint m = max(22,max(59,70); Bint m = max(max(22,59),70); Cint m = max(22,59,70); Dint m = max(59,max(22,70);28. 以下正确的函数原型语句是( C )。 A. double fun(int x,int y) B. double fun(int x;int y)C.
9、 double fun(int,int); D. double fun(int x,y);29. 在函数声明中,下面哪项不是必要的( D )。A.函数参数的类型和参数名B.函数名C.函数的类型D.函数体30. 使用值传递方式将实参传给形参,下列说法正确的是( A )。 A形参是实参的备份 B实参是形参的备份 C形参和实参是同一对象 D形参和实参无联系31. 在每个C+程序中都必须包含有这样一个函数,该函数的函数名为( A ) A. main B. MAIN C. name D. function32. 包含哪种语句的函数不能声明为内联函数( A )。A.循环 B.变量自增自减 C.if.els
10、e D.变量声明33. 在( C)情况下适宜采用inline定义内联函数。 A.函数体含有循环语句 B.函数体含有递归语句C.函数代码少、频繁调用 D.函数代码多、不常调用量34. 一个函数功能不太复杂,但要求被频繁调用,选用(A )。 A.内联函数 B.重载函数C.递归函数D.嵌套函数35. 在C+中,关于下列设置参数默认值的描述中,正确的是 ( C )。A不允许设置参数的默认值B设置参数默认值只能在定义函数时设置C设置参数默认值时,应该是先设置右边的再设置左边的D设置参数默认值时,应该全部参数都设置36. 函数默认参数在函数原型中说明,默认参数必须放在参数序列的( C )。 A.前部 B.
11、中部 C.后部 D.两端37. 下列哪种默认参数的声明是不正确的( C )。A. int max(int a,int b,int c,int d=0);B. int max(int a,int b,int c=0,int d=0);C. int max(int a=0,int b,int c=0,int d=0); D. int max(int a,int b=0,int c=0,int d=0);38.下列函数不能和函数void print(char)构成重载的是( C ) 。A.int print(int); B.void print(char,char);C.int print(char
12、); D.void print(int,int);39int Func(int,int);不可与下列哪个函数构成重载( B )。 Aint Func(int,int,int); Bdouble Func(int,int); Cdouble Func(double,double); Ddouble Func(int,double);40. 定义函数模板中使用的参数类型标识符需使用下列哪组符号括起来( A )。A. B.“” C.() D.41. 设有函数T Sum(T x,T y)return x+y;,其中T为模板类型,则下列语句中对该函数错误的使用是( D ) 。A.Sum(1,2); B.
13、Sum(3.0,2.2);C.Sum(A,C); D. Sum(A,C);42. 对于结构中定义的成员,其隐含访问权限为( C )。A. public B. protected C. private D. static 43. C+允许在结构中定义函数,这些函数称为( D )。A.静态函数 B.构造函数 C.析构函数 D.成员函数44对使用关键字new所开辟的动态存储空间,释放时必须使用( C )。 Afree Bcreate Cdelete Drealse45. 假定指针变量p定义为“int *p=new int30;”,要释放p所指向的动态内存,应使用语句(D )。A. delete p;
14、 B. delete *p; C. delete &p; D. delete p;46. 要使语句“p=new int1020;”能够正常执行,p应被事先定义为( D )。A. int *p; B. int *p; C. int *p20; D. int(*p)20;47. 使用delete删除对象数组时,描述正确的是( A )。A.数组中各元素都调用析构函数 B.数组中各元素都调用构造函数C.不调用析构函数 D.只有首元素调用析构函数48. 有关类的说法不正确的是 ( D )。A类是一种用户自定义的数据类型B. 类中的成员函数可以存取类中的私有数据C. 在类中,如果不作特别说明,所有的数据均
15、为私有类型D. 在类中,如果不作特别说明,所有的成员函数均为公有类型49. 在下列关键字中,用以说明类中公有成员的是 ( A )。Apublic Bprivate Cprotected Dfriend50. 下列哪个不是面向对象的关键要素( B )。A.抽象性 B.结构性 C.封装性 D.多态性51. 下列可以不是类的成员函数的是 ( C )。 A.构造函数 B.析构函数C.友元函数 D.复制构造函数52. print()函数是一个类的常成员函数,它无返回值,下列表示中,正确的是 ( A )。Avoid print() const Bconst void print()Cvoid const
16、print() Dvoid print(const)53. 在定义类成员时,为产生封装性,则需使用哪个关键字( D ) 。A.public B.publish C.protected D.private54. 如没有使用private关键字定义类的数据成员,则默认为( A )。 Aprivate Bpublic Cprotected Dfriend55. 类的私有成员可在何处被访问( A ) 。A.本类的成员函数中 B.本类及子类的成员函数中C.通过对象名在任何位置 D.不可访问56this指针存在的目的是( B )。 A保证基类公有成员在子类中可以被访问 B保证每个对象拥有自己的数据成员,但
17、共享处理这些数据成员的代码 C保证基类保护成员在子类中可以被访问D保证基类私有成员在子类中可以被访问57. 有关构造函数的说法不正确的是 ( D )。A.构造函数名字和类的名字一样 B.构造函数在定义对象时自动执行C.构造函数无任何函数类型 D.构造函数有且只有一个58. 为对象进行初始化的是 ( C )。A析构函数 B数据成员 C构造函数 D静态成员函数59. 类的构造函数在以下什么情况下会被自动调用( B ) 。A.定义成员函数时 B.定义对象时 C.定义数据成员时 D.定义友元函数时60. 构造函数不具备的特征的是 ( D ) 。 A.构造函数的函数名与类名相同 B.构造函数可以重载C.
18、构造函数可以设置默认参数 D.构造函数必须指定类型说明61. 一个类拥有多个构造函数,则这些构造函数间为( A )。A.重载关系 B.重复关系 C.拷贝关系 D.无关系62如果没有为一个类定义任何构造函数的情况下,下列描述正确的是( A )。 A编译器总是自动创建一个不带参数的构造函数 B这个类没有构造函数 C这个类不需要构造函数 D该类不能通过编译 63. 对于拷贝构造函数point:point(point& p),下列说明正确的是( C )。A.该函数只能访问P的私有成员 B.该函数不能访问P的公有成员C.该函数可以访问P的私有和公有成员 D.该函数不能访问P的成员64. 通常,拷贝构造函
19、数的参数是 ( C ) 。 A.某个对象名B.某个对象的成员名 C.某个对象的引用名 D.某个对象的指针名65. 假定AB为一个类,则执行“AB a(4) , b3 , * p2 ;”语句时,自动调用该类构造函数的次数为( B ) 。A. 3 B. 4 C. 6 D. 966. 下列关于析构函数描述正确的是( D ) 。A.可以重载 B.函数体中必须有delete语句C.返回类型必须是void类型 D.不能指定返回类型 67. 类的析构函数是在( C )调用的。 A.类创建时 B.创建对象时C.删除对象时D.不自动调用68. 类的析构函数的作用是 ( D )。A.一般成员函数 B.类的初始化
20、C.对象的初始化 D.撤消对象时做清理工作69. 下述静态数据成员的特性中,错误的是 ( D )。A说明静态数据成员时前边要加修饰符staticB静态数据成员要在类体外进行初始化C引用静态数据成员时,要在静态数据成员前加类名和作用域运算符D静态数据成员不是所有对象所共有的70. 设类Test中存在成员static int x,则下列哪种初始化方式是正确的( C )。A.Test:int x=25; B.int x=25;C.int Test:x=25; D.int Test x=25;71.下列关于友元的描述错误的是( A )。A.成员函数不可作友元 B.类可以作友元C.普通函数可以作友元 D
21、.静态函数可以作友元72对于友元描述正确的是( B )。 A友元是本类的成员函数 B友元不是本类的成员函数 C友元不是函数 D友元不能访问本类私有成员73. 如果类A被说明成类B的友元,则( D )。 A. 类A的成员即类B的成员 B. 类B的成员即类A的成员C. 类A的成员函数不得访问类B的成员 D. 类B不一定是类A的友元74. 下列运算符中,在C+中不能重载运算符是 ( A )。A?:B+ C- D=75. 假定要对类AB定义“+”号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为( B )。A. AB operator+(AB&a,AB&b) B.
22、 AB operator+(AB& a)C. operator+(AB a) D. AB & operator+( )76. 继承的机制是 ( C ) 。A.信息隐藏 B.数据封装C.定义新类 D.数据抽象77. 关于私有继承,下列说法错误的是( B )。 A.基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问他们。 B.基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员不能直接访问他们。 C.派生类的成员和派生类的对象都无法访问基类的私有成员。 D.派生类的对象无法访问基类的所有成员。78. 在公有继承中,基类中的保护成员作为派生类的( C
23、 )。A. 公有成员B. 私有成员C. 保护成员D. 私有成员函数79. C+类体系中,不能被派生类继承的有( A )。 A.构造函数 B. 虚函数 C. 静态成员函数 D. 赋值操作函数80. C+类体系中,能被派生类继承的是( B )。A. 构造函数B. 虚函数 C. 析构函数D. 友元函数81. 基类中的( C )不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。A. 公有成员B. 私有成员 C. 保护成员D. 私有成员函数82设类A将其它类对象作为成员,则建立A类对象时,下列描述正确的是( B )。 AA类构造函数先执行 B成员构造函数先执行 C两者并
24、行执行 D不能确定83在哪种派生方式中,派生类可以访问基类中的protected成员( B )。 Apublic和private Bpublic和protected Cprotected和private D仅protected84. 派生类的对象可以访问以下那种情况继承的基类成员( D )。A.私有继承的私有成员 B.公有继承的私有成员C.私有继承的保护成员 D.公有继承的公有成员85. 在继承中,派生类拥有的基类个数为( D )。A.0个 B.1个 C.多个 D.至少1个86. 基类中的protected成员,通过public派生,其在派生类中的可见性为( C )。A.不可访问 B.priv
25、ate C.protected D.public87下面关于C+中类的继承与派生的说法错误的是: ( C )。A基类的protected成员在公有派生类的成员函数中可以直接使用B基类的protected成员在私有派生类的成员函数中可以直接使用C私有派生时,基类的所有成员访问权限在派生类中保持不变D继承可以分为单一继承与多重继承88. 下列关于继承的描述中,正确的是( D )。A.继承不是类之间的一种关系 B.C+语言仅支持单一继承C.继承会增加程序的冗余性 D.继承是面向对象方法中一个很重要的特性89. 下列关于派生类构造函数的描述中,错误的是 ( A )。 A派生类构造函数应包含直接基类和所
26、有间接基类的构造函数B派生类构造函数仅包含直接基类构造函数和其他(如子对象)类构造函数等C派生类构造函数通常带有成员初始化表D派生类默认构造函数中隐含包括直接基类的默认构造函数90. 如果一个类至少有一个纯虚函数,那么就称该类为( A )。 A抽象类 B虚基类 C派生类 D以上都不对二、填空题 1. 在C+中,声明布尔类型变量所用的关键字是 ( BOOL ) 。2. 执行下列代码 int b=100; coutHex:hexb; 程序的输出结果是( Hex:64 )。3. 执行下列代码cout Hex: hex 255;程序的输出结果为 ( Hex:ff ) 。4. 执行“cout char(
27、A+2)endl;”语句后得到的输出结果为( C )。5. C+语言中可以实现输出一个换行符并刷新流功能的操控符是( endl )。 6. cout实际上是C+系统定义的对象名,称为( 输出流对象 )。7. 若使用标准输出流把整型变量a的值输出到屏幕上,实现此操作的C+语句是( couta; ) 。8. C+将数据从一个对象流向另一个对象的流动抽象为“流”,从流中获取数据的操作称为( 提取 ) 操作。9. 使用cin和cout进行输入输出操作的程序必须包含头文件( iostream或iostream.h ),其指令格式为( #include ) 。10. 若要使用C+标准类库,需要指定相应的命
28、名空间,所用的语句是( using namespace std; )。10. C+的注释行以( / )开头。11. 一般编译系统给出的出错信息分为两种:一种是( 错误或error );一种是( 警告或warning )。12. 转义字符t在内存中占( 1 )个字节。13. 将一个字符常量存放到内存单元时,实际上并不是把该字符本身放到内存单元中去,而是将该字符相应的( ASCII )代码放到存储单元中。14. 变量必须先( 定义 ),后( 使用 )。15. 在定义变量时,如果加上关键字( const ),则变量的值在程序运行期间不能改变,这种变量称为( 常 )变量。16. 数学式子0x0&x5
29、)。17. 循环结构中,要提前结束本次循环的语句是( continue )。18. 如果被调用的函数的定义出现在主调函数之后,需要对被调用的函数进行( 声明 )。19. 定义内联函数所用的关键字是( inline ),定义友元所用的关键字为( friend )。20. 重载函数的参数( 个数 )、参数( 类型 )或参数( 参数顺序 )三者中必须至少有一种不同。21. 字符串的结束标志是( 0 )。22. C+提供了一种用于处理字符串的数据类型,叫( 字符串类型或string类型 )。23. C+语言的函数参数传递方式有传值和( 传地址 )两种方式。24. C+语言中的,每条复合语句以( )作为
30、结束符。25. 变量分为全局和局部两种,( 局部 )变量没有赋初值时,其值是不确定的。26. C+程序必须有且只有一个主函数,其函数名为( main )。27. 若有函数定义为: int add(int ml=0,int m2=2,int m3=4) return ml+m2+m3; 在主函数中有int s=add(1)+add(0,1)+add(0,1,2);则执行此语句后s的值为( 15 )。28. 在源程序中有宏定义:#define PI 3.14,则若不想使该宏定义影响到程序的其它地方,可以使用 删除该宏定义。(#undef PI)29. 设在程序中使用如下语句建立了一个对象数组:Po
31、int * ptr = new Point2;则在需要释放ptr指向的动态数组对象时,所使用的语句是( deleteptr; ) 。30. 声明一个名为a的整型引用变量所使用的语句是( int &a ; )。31. C+支持面向对象程序设计的四个要素是:封装性、( 抽象 )、继承和派生和( 多态性 )。32. 在用class定义一个类时,数据成员和成员函数的默认访问权限是( private ) 。33类A有如下成员函数int A:fun(double x)return (int) x2;int A:fun(int x)return x*2;设a为类A的对象,在主函数中有int s=a.fun(
32、6.0)+a.fun(2),则执行该语句后,s的值为( 7 ) 。34. 使用( 对象引用 )作为函数参数,实参对象和形参对象代表同一对象,改变形参对象的值就是改变实参对象的值。35. C+类的构造函数名与( 类 )同名,且没有返回值。36. C+规定,当一个成员函数被调用时,系统自动向它传递一个隐含的参数,该参数是一个指向调用该函数的对象的指针,该指针被称为( this )指针。37. 声明一个常成员函数Fun,其返回类型为char,第一个参数类型为int,第二个参数类型为double,函数Fun的声明原型是( char Fun(int ,double) const ; )。38. 当一个成
33、员函数被调用时,该成员函数的( this指针 )指向调用它的对象。39. 在C+中,可以在定义对象时加关键字const,指定对象为( 常 )对象。40. const成员函数可以访问常对象中的数据成员,但不能 ( 修改 ) 数据成员的值 。41. 一个const对象只能访问( const )成员函数。42. 假定AB为一个类,则执行“AB a10;”语句时,系统自动调用该类的构造函数的次数为( 10 )。43. 类和其它数据类型不同的是,组成这种类型的不仅可以有数据,还可以有对数据进行操作的( 成员函数 )。44. 对于类Point而言,其析构函数的定义原型为( Point() )。45. 调用
34、构造函数和析构函数的顺序是:先构造的( 后 )析构,后构造的( 先 )析构。46. 拷贝构造函数使用( 引用 )作为参数初始化创建中的对象。47运算符 只能用 ( 成员 ) 函数来重载,不能用友元函数来重载。 48. C+中用于动态创建对象,并返回该对象的指针的关键字是( new )。49. 重载赋值操作符时,运算符重载函数应声明为( 成员 )函数。50. 重载的运算符仍保留原有的优先级、( 结合性 )和语法结构。51. C+重载“=”运算符的函数名是( operator= ) 。52. 从一个或多个以前定义的类产生新类的过程称为( 派生 )。53类的继承是指子类继承基类的( 数据成员 ) 和
35、成员函数。54. 派生类的构造函数的一般形式中,通常应包含( 基类 )构造函数和( 派生类 )构造函数。55. 在公有继承的情况下,基类的( 公用 )成员和( 保护 )成员在派生类中的访问权限不变。65. 派生类对基类继承方式有三种( 公用的 )、( 保护的 )、( 私有的 )。57. 派生类继承的基类成员的初始化,需要由派生类的构造函数调用基类的( 构造函数 )来完成。58在保护派生中,基类权限为private的成员在派生类中 ( 不可访问 ) 。59. 在C+类中,有一种不能定义对象的类,这样的类只能被继承,称之为 ( 抽象类 ) ,定义该类至少具有一个 ( 纯虚 )函数 。60. 用(
36、class virtual )声明的基类称为虚基类。61. 用( virtual )声明的函数称为虚函数。62定义虚函数所用的关键字是( virtual ) 。 63. 带有纯虚函数的类称为抽象类,它只能作为( 基类 )来使用。64不同对象可以调用相同名称的函数,但可导致完全不同的行为的现象称为( 多态性 ) 。65. C+语言支持两种多态性,分别是( 静态多态性 )和( 动态多态性 ) 。66. 静态关联所支持的多态性称为( 编译时 )的多态性。67. 动态关联要满足两个条件,它们是( 用指针或引用调用的成员函数 )、( 成员函数为虚函数) 。68. 动态关联是程序运行到需要的语句处才动态确
37、定的,这称为( 运行时 )多态性。69. 用来标识变量、符号常量、函数、数组、类型等实体名字的有效字符序列称为( 标识符 )。70任何一个对象都应当具有两个要素:即( 属性 )和( 行为 )。71可以对一个对象进行( 封装 )处理,把它的一部分属性和功能对外界屏蔽,也就是说从外界是看不到的、甚至是不可知的。72类是对象的( 抽象 ),而对象则是类的( 具体化 )。73一个对象所占有的存储空间大小只取决于该对象中( 数据成员 )所占的空间。74C+专门设立了一个名为( this )的指针,用来指向不同的对象。75访问对象中的成员可以有3种方法:通过对象名和成员运算符访问、通过指向对象的指针访问、
38、通过对象的( 引用 )访问。76通过成员函数对数据成员进行操作称为类的功能的( 实现 )。77类中被操作的数据是私有的,类的功能的实现细节对用户是隐蔽的,这种实现称为(私有实现)。78类的( 公用接口 )和私有实现的分离形成了信息隐蔽。79运算符重载的方法是定义一个重载运算符的( 函数 )。80一个派生类只从一个基类派生,这称为( 单 )继承。 三、 写出以下程序运行结果 1. #include iostream using namespace std;class test private:int num;float f1; public:test();int getint()return n
39、um;float getfloat()return f1;test();test:test()coutInitalizing default.endl;num=0;f1=0.0;test:test()coutDestructor is active.endl;void main()test array2;coutarray1.getint() array1.getfloat()endl;答:Initalizing default.Initalizing default.0 0Destructor is active.Destructor is active.Press any key to continue2.#include #include using namespace std;class Personpublic: Person(char* pN); Person(Person& p); Person();protected: char* pName;Person:Person(char* pN) cout Constructing pN endl; pName=new charstrlen(pN)+1; if(pName!=0) strcpy(pName, pN);P
限制150内