C++期末复习题
枣庄学院分数线-试用期自我评价
:
名
姓
线
:
号
学
订
:
号
班
学
教
装
:
业
专
级
年
( 20
至 20 学年 第___学期 )
课程名称: C++语言
考试时间
: 110 分钟
课程代码:
试卷总分
: 100 分
考试形式: 闭卷
学生自带普通计算机器:
是
一、判断题(在下列各题中,请在正确
的题后括号中打√,错误的题后括号中打。本大
题共15小题,每小题1分,总计15分)
1. C++源程序时,出现了警告错(Warning)也可以生成可执行文件。√
2.定义变量时,变量的存储类说明符不得省略。×
3.增1和减1运算符不仅可以作用在变量上,也可以作用在表达式上。×
4.在定义一个数组时,对其部分元素进行了初始化,没有初始化的元素的值都是无意
义的。×
5.开关语句可实现多路分支。√
6.指针的类型是它所指向的变量或对象的类型。√
7.函数可以设置默认的参数值,默认参数值必须设置在函数定义时的形参上。×
8.对象成员的表示方法与结构变量成员的表示方法相同。√
9.构造函数和析构函数都可以重载。×
10.静态数据成员必须在构造函数的成员初始化列表中进行初始化。×
11.友元函数是说明在类体内的非成员函数,它可以访问类中的所有成员。√
12.派生类只继承基类中的公有成员和保护成员,而不继承私有成员。×
13.运算符重载
是通过函数来实现的,定义运算符重载函数时,函数名中要使用关
键字operator。√
14.只要是成员函数就可以说明为虚函数,因为虚函数是一种成员函数。×
15.含有纯虚函数的类称为抽象类。√
二、填空题(在___处填上最准确的答案)(本大
题共15个空,每空1分,总计15分)
1.已知:double dd[ ][3]={{1.2,
2.4, 3.6}, {4.8, 5.2},{6.4}};
这里dd是
一个二维数组的数组名,该数组共有 9 个元素,每个元素的类型是
double 。
数组元素dd[0][0] dd[1][1]的值是 5.3 。
2.表达式语句是一个表达式后边加上 分号的。
3.使用关键字inline说明的函数称为 内联
函数,具有相同函数名但具有不同
实现的函数称为 重载 函数。
4.使用class定义
的表中,成员的默认访问权限是私有的;由struct定义的类中,
成员的默认的访问权限是
公有的。
5.静态成员是属于
类的,它除了可以通过对象名来引用外,还可以使用类
名限定。
6.运行下面程序段后,k值为 36 。
int k=1,n=263;
do {k*=n%10;n=10; } while(n);
7.利用“对象名.成员变量”形式访问的对象成员仅限于被声明为 public 成员;
第
1 页 共 10 页
若要访问其他成员变量,需要通过成员函数函数或 友元 函数。
8.在保护继承方式下,基类的public成员成为派生类的保护 成员。
9.C++语言多态性主要表现在动态联编、函数重载和运算符重载
10.虚函数是一种非静态成员函数。说明方法是在函数名前加关键字virtual
三、选
择题(在每个小题四个备选答案中选出一个正确答案)(本大题共20小题,每小
题1分,总计20分)
1.面向对象的(B )是一种信息隐蔽技术,目的在于将对象的使用者与设计者分开。不
允许
使用者直接存取对象的属性,只能通过有限的接口与对象发生联系。
A.多态性
B.封装性 C.继承性 D.重用性
2.下列标识符中,(B )是合法的。
A.goto B.Student
C. 123 D.k-ld
3.已知a=4,b=6,c=8,d=9,则“(a++,b>a
++&&c>d)?++d:aA.9 B.6
C.8 D.0
4.以下不正确的语句是(B )。
A.if(x>y);
B.if(x=y)&&(x!=0) x+=y;
C.if(x!=y)cin>>x;else
cin>>y;D.if(x
A.do
{i=1;s=1; B.do {i=1;s=0;
s=s*i;
i++;} s=s*i;i++;}
while(i<=10); while(i<=10);
C. i=1;s=1; D.i=1;s=0;
do {s=s*i; do{s=s*i;
i++;}
i++;}
while(i<=10);
while(i<=10);
6.下列数组的定义中,(C )是错误的。
A.char
ca1[]={‘c’,’m’,’n’}; ca2[]=”name”;
C.
char ca3[4]=”your”;
array[]={1,2,3,4};
7.如果一个函数无返回值,定义时它的函数类型应是(C
)。
A.任意 B.int C.void D.无
8.已知:int fun (int
&a),m=10;下列调用fum()函数的语句中,正确的是(C )。
A.fun(&m);
B.fun (m*2); C.fun (m); D.fun (m++);
9.在C++语言中,关于参数默认值的描述正确的是( B )。
A.只能在函数定义时设置参数默认值
B.设置参数默认值时,应当从右向左设置
C.设置参数默认值时,应当全部设置
D.设置参数默认值后,调用函数不能再对参数赋值
10.如果x是整型变量,则合法的形式是( D )。
A.&(x+5) B.*x
C.&*x D.*&x
11. 拷贝构造函数具有的下列特点中,(D )是错误的。
A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的
第 2 页 共
10 页
B.拷贝构造函数只有一个参数,并且是该类对象的引用
C.拷贝构造函数是一种成员函数
D.拷贝构造函数的名字不能用类名
12.关于静态成员的描述中,(B )是错误的。
A.静态成员可分为静态数据成员和静态成员函数
B.静态数据成员定义后必须在类体内进行初始化
C.静态数据成员初始化不使用其构造函数
D.静态成员函数中不能直接引用非静态成员
13.关于友元的描述中,(A )是错误的。
A.友元函数是成员函数,它被说明在类体内
B.友元函数可直接访问类中的私有成员
C.友元函数破坏封装性,使用时尽量少用
D.友元类中的所有成员函数都是友元函数
14. 以下有关类与结构体的叙述不正确的是(C )
A.
结构体中只包含数据;类中封装了数据和操作
B.
结构体的成员对外界通常是开放的;类的成员可以被隐藏
C.
用struct不能声明一个类型名;而class可以声明一个类名
D.
结构体成员默认为public;类成员默认为private
15.派生类的对象对它的(A)是可以访问的。
A.公有继承的基类的公有成员
B. 公有继承的基类的保护成员
C. 公有继承的基类的私有成员 D.
保护继承的基类的公有成员
16.下列对基类和派生类关系的描述中,错误的是(B )。
A.派生类是基类的具体化 B.派生类是基类的子集
C.派生类是基类定义的延续
D.派生类是基类的组合
17.下列虚基类的声明中,正确的是(D )。
virtual B:public A l class B:public A
B:public A virtual B: virtual public A
18.要实现动态联编,必须通过( A)调用虚函数。
A.对象指针 B.成员名限定
C.对象名 D.派生类名
19.下列关于抽象类的描述中,错误的是( D)。
A.抽象类中至少应该有一个纯虚函数 B.抽象类可以定义对象指针和对象引用
C.抽象类通常用作类族中最顶层的类 D.抽象类的派生类必定是具体类
20.下列描述中,(D )是抽象类的特征。
A.可以说明虚函数
B.可以进行构造函数重载
C.可以定义友元函数 D.不能说明其对象
四、写出程序的运行结果(本大题共5小题,共计30分)
1.程序一(本题4分)
#include
class Date
{
public:
第 3 页 共 10 页
void
Setvalue(int m,int d,int y)
{
month=m;
date=d;
year=y;
}
void
Display()
{
cout<
private:
int month;
int date;
int year;
};
void main()
{
Date today;
cout<<
ue(18,12,2005);
y();
}
2.程序二(本题6分)
#include
#include
class Complex
{
public:
Complex(double r,double i);
~Complex();
double abscomplex();
private:
double
real;
double imag;
};
Complex::Complex(double r,double i)
{
cout<<
real=r;
imag=i;
cout<<
}
Complex::~Complex()
{
第 4 页 共 10 页
cout<<
cout<<
}
double Complex::abscomplex()
{
double t;
t=real*real+imag*imag;
return sqrt(t);
}
int main()
{
Complex
A(3,4);
Complex
B(6,8);
cout<<
cout<<
return 0;
}
3.程序三(本题6分)
#include
class Point
{
public:
Point()
{
x=0;
y=0;
cout<<
cout<
Point(int x1,int y1)
{
x=x1;
y=y1;
cout<<
cout<
~Point()
{
cout<<
}
int Getx() {return x;}
int Gety()
{return y;}
private:
int x,y;
};
第 5 页 共 10 页
void
main()
{
cout<<
Point
*Ptr1=new Point;
delete
Ptr1;
cout<<
Ptr1=new
Point(1,2);
delete Ptr1;
}
4.程序四(本题8分)
#include
class BaseA1
{
public:
BaseA1(int i)
{
cout<<
x1=i;
}
void print()
{
cout<<
}
protected:
int x1;
};
class BaseA2
{
public:
BaseA2(int j)
{
cout<<
x2=j;
}
void print()
{
cout<<
}
protected:
int x2;
};
class BaseA3
{
public:
BaseA3()
第 6 页 共 10 页
{
cout<<
}
void print()
{
cout<<
}
};
class MDerivedB: public BaseA2, public
BaseA1, public BaseA3
{
public:
MDerivedB(int a, int b, int c, int
d):BaseA1(a),A2(d),
A1(c),BaseA2(b){}
void print()
{
BaseA1::print();
BaseA2::print();
BaseA3::print();
}
private:
BaseA1 A1;
BaseA2 A2;
BaseA3 A3;
};
void main()
{
MDerivedB obj(1,2,3,4);
();
}
5.程序五(本题6分)
#include
const double PI=3.14159;
class Shapes
{
protected:
int
sidevalue1,sidevalue2,high;
public:
void
setvalue(int x,int y=0,int h=0)
{
sidevalue1=x;
sidevalue2=y;
high=h;
}
virtual void CalculateArea()=0;
};
第 7 页 共 10 页
class
Square:public Shapes
{
public:
virtual void CalculateArea()
{
cout<<
}
};
class
Rectangle:public Shapes
{
public:
virtual void CalculateArea()
{
cout<<
}
};
class
Circle:public Shapes
{
public:
virtual void CalculateArea()
{
cout<<
}
};
class
LadderShape:public Shapes
{
public:
virtual void CalculateArea()
{
cout<<
laddershaper:
}
};
void main()
{
Shapes*
pointer[4];
Square s1;
Rectangle r1;
Circle c1;
LadderShape
l1;
pointer[0]=&s1;
pointer[0]->setvalue(10);
pointer[0]->CalculateArea();
pointer[1]=&r1;
第 8 页 共 10 页
pointer[1]->setvalue(10,5);
pointer[1]->CalculateArea();
pointer[2]=&c1;
pointer[2]->setvalue(10);
pointer[2]->CalculateArea();
pointer[3]=&l1;
pointer[3]->setvalue(10,12,8);
pointer[3]->CalculateArea();
}
五、程序设计题(本大题共2小题,总计20分)
1、定义一个Score类,Score中
有CourseScore私有成员用于表示学生成绩,有SetScore成员函数用
于设定学生成绩
,有PrintScore成员函数用于在控制台上输出成绩。在主函数中定义两个Score类的
对象
stu1、stu2,其成绩分别为85和98,并输出这两个学生的成绩。(8分)
2、定义一个点
类Point,其私有数据包含点的平面坐标x、y,利用有参构造函数实现对象坐标的确
定。编写一友
元函数Distance计算任意两点的距离。在主函数中定义两个点P1、P2,坐标分别为(0,0)
和(10,20),计算并输出这两个点的距离(12分)
#include
class Score
{
private:
double CourseScore;
public:
void SetScore(double
s);
void PrintScore();
};
void
Score::SetScore(double s)
{
CourseScore=s;
}
void Score::PrintScore()
{
cout<<”The Student’s Score
is:”<
void main()
{
Score stu1,stu2;
re(85);
re(98);
core();
core();
#include
#include
第 9 页 共 10 页
class Point
{
public:
Point(double x1,double y1)
{
x=x1;
y=y1;
}
friend double Distance(Point
&p1,Point &p2); 友元函数的声明
private:
double x,y;
};
double Distance(Point
&p1,Point &p2) 普通函数作为友元函数
{
double deltax,deltay;
deltax=p1.x-p2.x;
访问私有成员
deltay=p1.y-p2.y;
访问私有成员
return
sqrt(deltax*deltax+deltay*deltay);
}
void main()
{
Point p1(0,0);
Point p2(10,20);
cout<<以上两给定点之间的距离是:
第 10 页 共 10 页