c++-期末练习题+答案_第1页
c++-期末练习题+答案_第2页
c++-期末练习题+答案_第3页
c++-期末练习题+答案_第4页
c++-期末练习题+答案_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+程序设计练习题一、选择题1. 有函数f定义如下:int f(int a = 1, int b = 2, int c = 3) return a + b + c;下列说法中错误的是(D)。A函数调用f()的结果为6。B函数调用f(f(f()的结果为16。C函数调用f(f(), f()的结果为15D函数调用f(f(), f(f()的结果为21。2.C+中,关于参数默认值的描述正确的是( B)。A.只能在函数定义时设置参数默认值B.设置参数默认值时,应当从右向左设置C.设置参数默认值时,应当全部设置D.设置参数默认值后,调用函数不能再对参数赋值3.如果类A被说明成类B的友元,则(D) A.类A的

2、成员即类B的成员 B.类B的成员即类A的成员 C.类A的成员函数不得访问类B的成员D.类B不一定是类A的友元4、如下是某同学定义的类A,则其中有(B)处错误。class A int a = 1;void A();A(void);A2B3C4D55、针对下列类型定义,可以出现在main函数中的语句有(A)。class Date private:int year, month, day;ADate d;BDate:year = 1;CDate d = 2009, 1, 1;Dcout month;6、有程序如下,下列说法中错误的是(B)。class RMB int yuan, jiao, fen;

3、public:RMB(int y = 0, int j = 0, int f = 0) yuan = y, jiao = j, fen = f;RMB() cout yuan : jiao : fen;int main() RMB a2, b(10, 20, 30), c(b);A20:10:30不可能是程序的输出结果。B析构对象c时输出结果是0:0:0。C0:0:0会在输出结果中出现两遍。D对象a0最后析构。7、类A是自定义类型,下列说法中错误的是(C)。A* a = new A;A* b = new A(a);delete a;delete b;A构造堆对象a时会调用类A的默认构造函数。B

4、构造堆对象b时会调用类A的拷贝构造函数。C堆对象a先构造,所以它后析构。D释放指针b所指内存时,会调用类A的析构函数。8、a、b、c是类T的对象,为计算表达式c = a + b,必须(C )。A以成员函数形式重载加法运算符+。B以友元函数形式重载赋值运算符=。C以友元函数形式重载加法运算符+。D以T作为加法运算符函数的返回类型。9.执行如下的程序段后,输出结果是(A )。 cout.fill(*); cout.width(6); cout.fill(#); cout 123 abc11.下列程序中,访问出错的是(B)。class A private:int x;protected:int y(

5、) x = 1;/ Apublic:int z;class B : public A public:void u() cout x;/ B;int main() B b;b.z = 1;/ Cb.u();/ D12.有类型定义如下,则下列说法中错误的是(B)。class Object ;class A Object oa;class B : public A Object ob;A构造类B的对象时会首先调用类Object的构造函数。B对语句B b;的执行会先后引发6次函数调用。C析构类B的对象时,类B的析构函数在类A的析构函数之前调用。D析构类A的对象时会最后调用类Object的析构函数。13

6、.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是(A) A.派生类的对象可以直接访问基类中的成员 B.派生类的对象可以初始化基类的引用 C.派生类的对象可以赋给基类的对象 D.派生类的对象的地址可以赋给指向基类的指针14.下列( D)行的输出结果是B:v。class A public:void f() cout A:f endl;virtual void v() cout A:v endl;class B : public A public:void f() cout B:f endl;virtual void v() cout B:v f();/ Apa-v();/ BB

7、b; pa = &b;pa-f();/ Cpa-v();/ D15.以下(C )成员函数表示纯虚函数。 A.virtual int vf(int); B.void vf(int)=0; C.virtual void vf()=0; D.virtual void vf(int)17.下列程序段中,ofs是ofstream类的对象,ifs是ifstream类的对象,c是char型变量,则执行结果是(B)。while (ifs.get(c)ofs.put(c);A把一个文件的第1个字节写入到另一个文件中B把一个文件的内容全部写入到另一个文件C仅仅把字符c写入到一个文件中D把两个文件的内容合并到一起4

8、.下面说法正确的是(B) A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方 B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 C.类的内联函数必须在类体内定义 D.类的内联函数必须在类体外通过加关键字inline定义18.下列(B)循环能够把26个小写字母以文本方式写入文件中。int main() int a;ofstream ofs(data.txt);a = a; while (a = z) ofs a+;/ Aa = a; while (a = z) ofs.put(a+);/ Ba = a; while (a = z) / Cofs.write(cons

9、t char*)&a, sizeof(a);+a;a = a; while (a = z) cout char(a+);/ Dofs.close();19.假定AB为一个类,则执行“AB a(4), b5, *p2;”语句时,自动调用该类构造函数的次数为( A )。 A. 6 B. 7 C. 9 D. 11 20.下面叙述错误的是( A)。 A. 基类的protected成员在派生类中仍然是protected B. 基类的protected成员在public派生类中仍然是protected的 C. 基类的protected成员在private派生类中是private的 D. 基类的protec

10、ted成员不能被派生类的对象访问 21. 多继承派生类构造函数构造对象时,( B)被最先调用。 A. 派生类自己的构造函数 B. 虚基类的构造函数 C. 非虚基类的构造函数 D. 派生类中子对象类的构造函数 22关键字 _C_ 说明对象或变量初始化后不会被修改。 A. static B. public C. const D. inline23.在C+中,函数原型不能标识( D) A.函数的返回类型 B.函数参数的个数 C.函数参数类型 D.函数的功能 24.以下能正确定义数组并正确赋初值的语句是D A. int N=5,bNN; B. int a2=1,3,4,5; C. int c2=1,2

11、,3,4; D. int d32=1,2,3,4;25.对于动态分配内存空间描述正确的是( D ) A使用new运算符分配的内存空间的长度必需是常量 Bdelete运算符可以释放动态的存储空间和静态的存储空间 C由new分配的内存空间是不连续的 Ddelete运算符只能释放由new分配的动态存储空间26.C+中解决命名冲突的机制是:D A虚基类 B虚函数 C函数重载 D名字空间27.对于一个功能不太复杂,并且要求加快执行速度,选用(A )合适。A.内联函数 B.重载函数C.递归调用 D.嵌套调用 28在一个源文件中定义的全局变量的作用域为( C ) A. 本程序的全部范围 B. 本函数的全部范

12、围 C. 从定义该变量的位置开始到本文件结束 D. 以上说法都不正确 5.对于任意一个类,析构函数的个数最多为(B ) A.0 B.1 C.2 D.3 29.假定AB为一个类,则执行ABx;语句时将自动调用该类的(B) A.有参构造函数 B.无参构造函数 C.拷贝构造函数 D.赋值构造函数30.类型修饰符unsigned不能修饰(D) A.char B.int C.longint D.float 31.可以用p.a的形式访问派生类对象p的基类成员a,其中a是(D)A.私有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.公有继承的公有成员 32.下列程序的输出结果是(B)。v

13、oid f(int& i, int& j) int t(i);i = j, j = t;cout i t j t;int main() int a = 5, b = 8;f(b, a);cout a t b endl;A8558B5885C5858D858533.对于类定义 class A public: virtual void func1( ) void func2( ) ; class B:public A public: void func1( )coutclass B func 1end1; virtual void func2( )coutclass B func 2end1; ;

14、 下面正确的叙述是( C ) A. A:func2( )和B:func1( )都是虚函数 B. A:func2( )和B:func1( )都不是虚函数 C. B:func1( )是虚函数,而A:func2( )不是虚函数 D. B:func1( )不是虚函数,而A:func2( )是虚函数34.在下列函数原型中,可以作为类AA构造函数的是( D )。 A.void AA(int); B.int AA(); C.AA(int)const; D.AA(int);35.将两个字符串连接起来组成一个字符串时,选用( C)函数。 A. strlen() B. strcap() C. strcat() D

15、. strcmp()36.如果类A被说明成类B的友元,则(D) A.类A的成员即类B的成员 B.类B的成员即类A的成员 C.类A的成员函数不得访问类B的成员D.类B不一定是类A的友元37.用new运算符创建一个含10个元素的一维整型数组的正确语句是(C )。 A. int *p=new a10; B. int *p=new float10; C. int *p=new int10; D. int *p=new int10=1,2,3,4,5 38.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是(C)A.派生类的对象可以赋给基类的对象 B.派生类的对象可以初始化基类的引用 C.

16、派生类的对象可以直接访问基类中的成员 D.派生类的对象的地址可以赋给指向基类的指针40.面向对象方法的多态性是指(B)。 A. 一个类可以派生出多个特殊类 B. 一个对象在不同的运行环境中可以有不同的变体 C. 针对一消息,不同的对象可以以适合自身的方式加以响应 D. 一个对象可以是由多个其他对象组合而成的41.在C+程序中,对象之间的相互通信通过(B) A.继承实现 B.调用成员函数实现 C.封装实现 D.函数重载实现 42面向对象软件开发中使用的OOA表示( A)。 A. 面向对象分析 B. 面向对象设计 C. 面向对象语言 D. 面向对象方法43.在inta=3,int*p=&a;中,*

17、p的值是(D) A.变量a的地址值 B.无意义 C.变量p的地址值 D.3 44.使用重载函数编程序的目的是(A) A. 使用相同的函数名调用功能相似的函数 B. 共享程序代码 C. 提高程序的运行速度 D.节省存储空间45.在多文件结构的程序中,通常把类的定义单独存放于(D)中。 A. 主文件 B. 实现文件 C. 库文件 D. 头文件 46.可以用p.a的形式访问派生类对象p的基类成员a,其中a是(D)A.私有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.公有继承的公有成员47C+语言中函数返回值的类型是由( C )决定的? A. return语句中的表达式类型 B.

18、 调用该函数的主调函数类型 C. 定义函数时所指定的函数类型 D. 上说法都不正确48当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的(D )。 A. 只能是公有成员 B. 只能是保护成员 C. 只能是除私有成员之外的任何成员 D. 具有任何权限的成员 49下正确的函数原型为(D) A. func (int x ; int y); B. void (x , y); C.void (int x , y); D. void func (int , int);50在一个源文件中定义的全局变量的作用域为( C ) A. 本程序的全部范围 B. 本函数的全部范围 C.

19、 从定义该变量的位置开始到本文件结束 D. 以上说法都不正确51.应在下列程序划线处填入的正确语句是( C )。 class Base public: void fun()coutBase:funendl; ;class Derived:public Base void fun() /显示调用基类的函数fun() coutDerived:funfun();52.C+中,关于参数默认值的描述正确的是(A )。A.只能在函数定义时设置参数默认值B.设置参数默认值时,应当从右向左设置C.设置参数默认值时,应当全部设置 D.设置参数默认值后,调用函数不能再对参数赋值53如果表达式a+b中的“+”是作为

20、成员函数重载的运算符,若采用运算符函数调用格式,则可表示为(A )。 A. a.operator+(b) B. b.operator+(a) C. operator+(a,b) D. operator(a+b)54.实现运行时的多态性要使用( D )。 A.重载函数 B.构造函数 C.析构函数 D.虚函数 55对数组名作函数的参数,下面描述正确的是(B )。A.数组名作函数的参数,调用时将实参数组复制给形参数组。B.数组名作函数的参数,主调函数和被调函数共用一段存储单元。C.数组名作参数时,形参定义的数组长度不能省略。D.数组名作参数,不能改变主调函数中的数据。56对于一个功能不太复杂,并且要

21、求加快执行速度,选用(A )合适。A.内联函数 B.重载函数C.递归调用 D.嵌套调用57.在inta=3,int*p=&a;中,*p的值是(D) A.变量a的地址值 B.无意义 C.变量p的地址值 D.358C+中的虚基类机制可以保证:( D)。 A. 限定基类只通过一条路径派生出派生类 B. 允许基类通过多条路径派生出派生类,派生类也就能多次继承该基类 C. 当一个类多次间接从基类派生以后,派生类对象能保留多份间接基类的成员 D. 当一个类多次间接从基类派生以后,其基类只被一次继承59.用重载函数编程序的目的是(A ) A.使用相同的函数名调用功能相似的函数 B. 共享程序代码 C. 提高

22、程序的运行速度 D. 节省存储空间60.在C+程序中,对象之间的相互通信通过(B) A.继承实现 B.调用成员函数实现 C.封装实现 D.函数重载实现61、下列关于C+标识符的命名不合法的是CA. Pad B. name_1 C. A#bc D. _a1262、若有以下类型标识符定义: (D)int x=2; char w=a; float y=23.45f; double z=45.6712;则表达式w*x+y-z的结果类型是A. float B. char C. int D. double 63、若有int x=10,y=20,z=30; 则执行下面语句后,x的值是Bif(xy)z=x;

23、x=y; y=z; A. 10 B. 20 C. 30 D. 064、循环语句whlie(int i=0 )i-;的循环次数是AA. 0 B. 1 C. 5 D. 无限65、一个函数无返回值时,应选择的说明符是CA. static B. extern C. void D. 无说明符66、对重载函数形参的描述中,错误的是DA. 参数的个数可能不同 B. 参数的类型可能不同C. 参数的顺序可能不同 D. 参数的个数、类型、顺序都相同,只是函数的返回值类型不同67、以下能正确定义数组并正确赋初值的语句是DA. int N=5,bNN; B. int a2=1,3,4,5;C. int c2=1,2,

24、3,4; D. int d32=1,2,3,4;68、下列给字符数组进行的初始化中,不正确的是DA. char s1=abcd; B. char s23=x,y,0;C. char s3=a,x,y,0; D. char s46=xyz,mnp;69、通常的拷贝构造函数的参数是CA 某个对象名 B某个对象成员名C 某个对象的引用 D某个对象的指针名70、关于构造函数特点的描述中,错误的是AA. 定义构造函数必须指出类型 B. 构造函数的名字与该类的类名相同C. 一个类中可定义0至多个构造函数 D. 构造函数是一种成员函数71、下面程序的运行结果为 D +using namespace std;

25、后选C#include int add(int a,int b);void main() extern int x,y;coutadd(x,y)_。11、已知有定义“int x, a=5,7,9, *pa=a;”,在执行“x=+*pa;”语句后,x的值是_6_,*(pa+1)的值为_7_。12.若希望用一个已有对象来构造另一个同类型的对象,可以使用 拷贝构造函数 来实现。13、假定AB为一个类,则类定义体中的“AB(AB& x);”语句为该类_拷贝构造函数_的原型语句,而“operator=(AB& x);”为该类_赋值重载函数_的原型语句。14、为了访问某个类的私有数据成员,必须在该类中声明

26、该类的 友元 。15、静态成员是局部于类的成员,它提供一种同类对象的_共享 _机制。16、访问一个指针所指向的对象的成员所用的运算符是_-_。17. 面向对象程序设计有四个主要特点,即抽象、封装、_继承_和_多态 _。18.在用class定义一个类时,数据成员和成员函数的默认访问权限是_private_。19.在函数体之后加_const_关键字可以防止覆盖函数改变数据成员的值。20.私有数据通常由公有成员函数来访问(读和写)。这些函数统称为_操作_。21.在字长为32位的机器中,sizeof(float) 4 字节,sizeof(double) 8 字节22.引用通常用作函数的参数和_引用变量

27、_。23. 如果new返回的指针丢失,则所分配的堆空间无法收回,称为 _内存泄漏_ 。24. C+中多态性包括两种多态性:_编译_时的多态性和_运行_时的多态性。25. 若有char a80;则cina表示从键盘上读入一个_字符串_ 到数组a中。26.静态数据成员是类的所有对象中 共享 的成员,静态数据成员初始化与一般数据成员初始化 不同 。27. C+流类库定义的cin,cout,cerr和clog是_全局流对象_ 。28. 访问一个指针所指向的对象的成员所用的运算符是_-_。29. 假定用户没有给一个名为shape的类定义析构函数,则系统自动给出的缺省析构函数定义为_shap:shap()

28、_。30._构造函数_是特殊的成员函数,在创建和初始化对象时调用。_静态成员_是局部于类的成员,它提供一种同类对象的_共享_机制。31.运算符重载的作用是使运算符可以操作自定义的_类_,但重载后运算符原有的 操作_不变。32.派生类不能访问基类的_私有_成员,但可以访问基类的公有成员和_保护_成员。33.具有_纯虚拟函数_的类称为抽象类。三、判断题1.( F)基类中被说明为protected和private的成员只能被其派生类的成员函数访问,不能被其它的函数访问。2.(F)break语句也可以用于if体内,它可退出if语句。3.( F) 类的静态数据成员需要在定义每个类的对象时进行初始化。4(

29、F)友元函数说明在类体内,它是一种成员函数。5.(F)在传值调用中,要求实参和形参的类型完全一致并且个数相等。6.(T) 如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。7(F)异常必须在其产生的当前函数中捕获,而不能在外层函数中捕获该异常。8.(T) 如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。9.( F) 类的静态数据成员需要在定义每个类的对象时进行初始化。10( T)程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。1

30、1( T)重载函数必须有不同的参数列表。12.( T)类B从类A公有继承,则程序段A a;B &b=a;会引发编译错误。13.(T)拷贝构造函数用于用类的一个对象去初始化该类的另一个对象时使用,也可已用于当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。14(T)类中所提供的成员函数可以直接访问私有成员。15. ( T ) int i,*p=&i;是正确的C说明。16( F)析构函数不能被继承。17(F)一个类只有一个构造函数, 但可以有多个析构函数。18( F)引用和指针都可作函数参数。19( F)对于任意正确定义的类,都可以构造出该类型的对象。20( T) 若要实例化一个含有引

31、用型数据成员的类,那么只能使用构造函数初始化列表来初始化该数据成员。四、写出下列程序的运行结果1、#include using namespace std;class A friend double count(A&);public: A(double t, double r):total(t),rate(r)private:double total; double rate;double count(A& a) a.total+=a.rate*a.total; return a.total;int main(void)A x(80,0.5),y(100,0.2);coutcount(x),c

32、ount(y)n;coutcount(x)n;return 0;运行结果:120,1201802、#include using namespace std;class Count private: static int counter; int obj_id; public: Count(); /constructor static void display_total(); /static function void display(); Count(); /destructor ; int Count:counter; /definition of static data member C

33、ount:Count() counter+; obj_id = counter; Count:Count() counter-; coutObject number obj_id being destroyedn; void Count:display_total() cout Number of objects created is = counterendl; void Count:display() cout Object ID is obj_idendl; int main(void) Count a1; Count:display_total(); Count a2, a3,a4;

34、Count:display_total(); a2.display(); a4.display(); return 0;运行结果:Number of objects created is = 1Number of objects created is = 4Object ID is 2Object ID is 4Object number 4 being destroyedObject number 3 being destroyedObject number 2 being destroyedObject number 1 being destroyed3、#include class ex

35、ample private: int date; static int count; public: example(int y=10):date(y) cout”date=”dateendl; Count+;static int display() return count;int example:count=0;void main()example e1; example e2(20); coute1.Display()endl; coute2.Display()endl; coutexample:Display()endl;程序运行结果:date=10date=202224.#inclu

36、de class A public:A();A(int i,int j);A()coutDonstructor.n;void print(); private:int a,b;A:A()a=b=10;coutDefault constructor.n;A:A(int i,int j) a=i,b=j;coutConstructor.n;void A:print()couta=a,b=bendl;void main()A m,n(15,18);m.print();n.print();Default constructor.Constructor.a=10,b=10a=15,b=18Donstru

37、ctor.Donstructor.5、#include #include class Base private: char msg30; protected: int n; public: Base(char s,int m=0):n(m) strcpy(msg,s); void output(void) coutnendlmsgendl; ;class Derived1:public Baseprivate:int n;public:Derived1(int m=1):Base(Base,m-1) n=m; void output(void) coutnendl; Base:output()

38、;class Derived2:public Derived1private:int n;public:Derived2(int m=2):Derived1(m-1) n=m; void output(void) coutnendl; Derived1:output();int main()Base B(Base Class,1);Derived2 D;B.output();D.output();程序运行结果:1Base Class210Base6、#include class Xpublic: X(int i) x=i; cout”int: ”i,”calledn”; X(double i)

39、 x=(int)i*2; cout” double: ”i,”calledn”; X() cout” X(): ”x,”calledn”; private: int x;void main()int a=8;double b=11.0;X x1(55), x2(a*5);X x3=X(2*a);X x4=X(b);程序输出结果:int: 55,calledint: 40,calledint: 16,called double: 11,called X(): 22,called X(): 16,called X(): 40,called X(): 55,called7.#include clas

40、s Samppublic:void Setij(int a,int b)i=a,j=b;Samp()coutDestroying.iendl;int GetMuti()return i*j; protected:int i;int j;int main()Samp *p;p=new Samp5;if(!p)coutAllocation errorn;return 1;for(int j=0;j5;j+)pj.Setij(j,j);for(int k=0;k5;k+)coutMutik is: pk.GetMuti()endl;deletep;return 0;Muti0 is:0Muti1 i

41、s:1Muti2 is:4Muti3 is:9Muti4 is:16Destroying.4Destroying.3Destroying.2Destroying.1Destroying.08、 #include int func(int a)int b=0;static int c=4;b+; c-;return(a+b+c);void main( )int a=2;for(int j=0;j2;j+)coutfunc(a+j) ;输出结果为:6 69. #includeclass Abcpublic: Abc( )a=0; b=0; c=0;Abc(int i,int j,int k)a=i; b=j; c=k;void get(int&i,int&j,int&k)i=a; j=b; k=c;Abc operator * (Abc obj);private: int a,b,c;Abc Abc:operator * (Abc obj)Abc tempobj; tempobj

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论