本复习题页码标注所用教材为:
教材名称 单价 作者 版本 出版社
C++程序设计教程(第二版) 39.5 钱能 2005年9月第2版 清华大学出版社
如学员使用其他版本教材,请参考相关知识点
一、选择填空(每小题2分,计16小题,共32分) 1、类MyClass的定义如下: class MyClass { public: MyClass(){ value = 0;} SetVariable(inti) { value = i; } private: intvalue; } 则对下列语句序列正确的描述是_______。 MyClass*p,my; p=&my; A)语句p=&my;是把对象my赋值给指针变量p B)语句MyClass *p,my;会调用两次类MyClass的构造函数 C)对语句 *p.SetVariable(5)的调用是正确的 D)语句p->SetVariable(5)与语句my.SetVariable(5)等价 【参考答案】:D 2、对类的构造函数和析构函数描述正确的是_______ 。 A) 构造函数不能重载,析构函数可以重载 B)构造函数可以重载,析构函数不能重载 C)构造函数可以重载,析构函数也可以重载 D)构造函数不能重载,析构函数也不能重载 【参考答案】:B 3、在C++中,数据封装要解决的问题是______。 A)数据的规范化 B)便于数据转换 C)避免数据丢失 D)防止不同模块之间数据的非法访问 【参考答案】:D 4、对于拷贝构造函数,正确的描述是________。 A)在C++语言中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数 B)必须为每个类定义拷贝构造函数 C)如果要使用拷贝构造函数,则必须在类中先定义 D)当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构造函数 【参考答案】:A 5、继承具有_____,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。 A)规律性 B)传递性 C) 重复性 D)多样性 【参考答案】:B 6、一个类的友元函数或友元类能够通过成员操作符访问该类的________。 A)私有成员 B) 所有成员 C)公用成员 D) 保护成员 【参考答案】:B 7、关于纯虚函数和抽象类的描述中,错误的是________。 A)纯虚函数是一种特殊的虚函数,它没有具体的实现 B)抽象类是指具有纯虚函数的类 C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类 D)抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 【参考答案】:C 8、__①___提供了类对外部的接口, __②____是类的内部实现,而__③___不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。 A)公有成员 B)私有成员 C)私有成员函数 D)保护成员 【参考答案】:A、C、D 9、关于C++语言和C语言的关系的下列描述中,错误的是________。 A)C语言是C++语言的一个子集 B)C语言和C++语言都是面向对象的语言 C)C++语言与C语言兼容 D)C++语言对C语言做了些改进 【参考答案】:B 10、组成C++语言程序的是________。 A)子程序 B)过程 C)函数 D)主程序和子程序 【参考答案】:C 11、C++语言规定:一个源程序中,main函数的位置________。 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 【参考答案】:C 12、C++中cin是________。 A)一个标准的语句 B)预定义的类 C)预定义的函数 D)预定义对象 【参考答案】:D 13、将C++源程序进行________可得到目标文件。 A)编辑 B)编译 C)连接 D)拼接 【参考答案】:B 14、将目标文件进行________可得到可执行文件。 A)编辑 B)编译 C)连接 D)拼接 【参考答案】:C 15、下列符号中能用作C++自定义标识符的是________。 A)5abc B)if C)-abc D)abc 【参考答案】:D 16、若要在if后一对圆括号中表示条件“a不等于0成立”,则能正确表示这一关系的表达式为________。 A)a<>0 B)!a C)a=0 D)a 【参考答案】:D 二、写出下列程序的运行结果 1、(4分) #include<iostream.h> #include<string.h> class StudentID{ public: StudentID(int id=0 ) { value=id; cout <<"Assigning student id" <<value <<endl; } ~StudentID() { cout <<"Destructing id "<<value <<endl; } protected: int value; }; class Student{ public: Student(char* pName="no name",intssID=0):id(ssID) { cout <<"Constructing student" <<pName <<endl; strncpy(name,pName,sizeof(name)); name[sizeof(name)-1]='\n'; } protected: char name[20]; StudentID id; }; void main() { Student s("Mary",2001); Studentt("John"); } 程序运行的结果为: 【知识点】:对象生灭,见P293,主要理解成员的初始化(P305) 2、(5分) #include <iostream.h> class Point { int x,y; public: Point(int x1,int y1) { x=x1;y=y1; } virtual int area() const { return 0; } }; class Rect:public Point { int l,w; public: Rect(int x1,int y1,int l1,intw1)  oint(x1,y1) { l=l1;w=w1; } virtual int area() const { return l*w; } }; void fun(Point &p) { cout << p.area() << endl; } void main() { Rect rec1(3,4,10,7),rec2(5,10,8,16); Point *base=&rec2; fun (rec1); fun(*base); } 程序运行的结果为: 【知识点】:继承,见P327,主要理解派生类的构造和继承方式。 3、(2分) void main() { int i=8; switch (i) { case 9:i=i+1; Default:i=i+1; Case 10:i=i+1; Case 11:i=i+1; } cout<<i; } 程序运行的结果为: 【知识点】:switch语句,见P31 4、(3分) void main() { int k=4,n=0; for (;n<k;) { n++; if(n%3!=0) continue; k--; } cout<<k<<”,”<<n; } 程序运行的结果为: 【知识点】:for循环,见P36;continue语句,见P51 三、填空题 1、下列程序在构造函数和析构函数中申请和释放类的私有成员,请完成该类的实现。(8分) class MyClass { public: MyClass(inta); ~MyClass(); private: int*X; }; MyClass::MyClass(int a) { ____①_____; } MyClass::~MyClassO { ____②______; } 【知识点】:构造函数的成员初始化(参见P305)和析构函数(参见P316) 2、以下是统计一个英文句子中字母出现个数的程序。请将此程序补充完整。(8分) #include<iostream.h> int count(charstr[]); void main() { char sl[80]; cout<<”Enteryaline:”; cin>>sl; cout<<”count=”<<count(sl)<<endl; } int count(charstr[]) { int num=0; for(int i=0;str;i++) if(_____(1)_________) num++; return______(2)________; } 【知识点】:函数机制,见P134 3、写出下面函数的功能。(9分) Float FI(int n) //n为大于等于1的整数 { float x,y=0; do{ cin>>x; n--; y+=x*x; }while(n>0); return y; } 答:该函数的功能为:______________________ 【知识点】:do-while循环,参见P39 四、编程题 1、定义一个Shape抽象类,由它派生出Rectanglr和Circle类,二者都有GetArea( )函数计算对象的面积,GetPerim( ) 函数计算对象的周长。(9分) #include <iostream.h> class Shape { [①定义GetArea 和GetPerim函数______] }; class Circle:public Shape { public: Circle(float radius):itsRadius(radius){} float GetArea(){return 3.14*itsRadius*itsRadius;} float GetPerim(){return 6.28*itsRadius;} private: float itsRadius; }; class Rectangle : publicShape { public: [②定义Rectangle构造函数_____________] [③定义 GetArea()和 GetPerim()函数_______] private: float GetLength(){return itsLength;} float GetWidth(){return itsWidth;} private: float itsWidth; float itsLength; }; 【知识点】:继承,见P327,主要理解派生类的构造以及继承方式。
2、编写一个程序求一元二次方程的解(10分)。 讨论下述情形: (1)a=0,不是二次方程。 (2)b^2-4ac=0,有两个相等实根。 (3) b^2-4ac>0,有两个不等实根。 (4) b^2-4ac<0,有两个复根(表示成x+yi,x-yi)。 【知识点】:综合知识题,主要见if语句(参见P27)
3、编写一个程序计算两个给定长方形的面积之和。要求在设计类成员函数addarea()(用于计算两个长方形的总面积之和)时使用对象作为参数。(10分) 【知识点】:类及相应的成员函数,参见P252
|