21秋西电面向对象程序设计C++模拟试卷答案
考试时间:90分钟一.简答题(10分,每题2分)
1.1(3分) 运算符new和delete的功能分别是什么?
答案:运算符new的功能是创建动态对象;delete的功能是释放由new创建的动态对象。
1.2(3分)分别给出至少三种C++的基本数据类型、组合数据类型。
答案:基本数据类型:整型、浮点型、字符型、布尔型、空值型(给出3种即可)
组合数据类型:指针类型、引用类型、数组类型、枚举类型、结构类型(给出3种即可)。
1.3(4分)什么是内联函数?为什么要引进内联函数?
答案:用inline关键字说明的函数被称为内联函数。
引入内联函数的目的是提高调用频繁、但代码又不大的函数的工作效率。
二.填空题(20分,每空2分)
2.1C++中的重载函数至少要在 、 或 上有所不同。
答案:参数个数;参数类型;参数顺序
2.2 在C++中,类A的每一个非静态成员函数都有一个隐藏的指针类型的形参 ,它指向当前正在操作的对象,其类型为 。
答案:this,A* const
2.3 对于双目运算符,以成员函数方式重载时,有 个参数;以友元函数方式重载时,有 个参数。
答案:1,2
2.4派生类对基类的继承有三种方式: 、 和 。
答案:私有继承、公有继承、保护继承(答案顺序可以打乱)
三.单项选择题(20分,每题2分)
3.1 在“int a = 10, *p = &a;”语句中,p的值是 。
A. 10 B. 变量p的地址 C. 变量a的地址 D. 随机数
答案:C
3.2 在一个被调用函数中,关于return语句使用的描述, 是错误的。
A.被调用函数中可以不使用return语句
B. 被调用函数中可以使用多个return语句
C. 被调用函数中如果有返回值,就一定要有return语句
D. 被调用函数中,一个return语句可返回多个值给调用函数
答案:D
3.3下列程序段中,不是死循环的是 。
A. int j = 100; B. for(;;)
while (1) {
j = j % 100 + 1;
if (j > 1000) break;
}
C. int n = 0; D. int m = 36;
do { ++n; while( m )--m;
} while( n >= 0)
答案:D
3.4 关于虚函数的描述中,正确的是 。
A. 虚函数是一个静态成员函数
B. 虚函数是一个非成员函数
C. 虚函数既可以在函数说明时定义,也可以在函数实现时定义
D. 派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型
答案:D
3.5下列常量中, 不是C++语言的整型常量。
A. 01 B. 0x11 C. 081 D. -32768
答案:C
3.6 下列关于运算符重载的描述中,正确的是 。
A. 运算符重载不可以改变运算符的语法结构
B. 运算符重载可以改变运算符的优先级
C. 运算符重载可以改变运算符的结合性
D. 运算符重载可以改变操作数的个数
答案:A
3.7 下列关于派生类析构函数的叙述中,错误的是 。
A. 派生类析构函数的调用顺序与构造函数调用顺序相反
B. 派生类析构函数是不能从基类继承
C. 派生类析构函数的处理顺序为:派生类新增的普通成员,派生类新增的对象成员,所有从基类继承的成员
D. 派生类析构函数的处理顺序为:所有从基类继承的成员,派生类新增的普通成员,派生类新增的对象成员
答案:D
3.8 下列关于C++中类的叙述,其中错误的是 。
A. 类的构造函数在定义对象时自动执行
B. 析构函数不能够重载
C. 只有类的成员函数才能访问类中的私有成员
D. 在类中,成员缺省的访问权限是private
答案:C
3.9下面的函数中,静态成员函数不能访问的是 。
A. 静态数据成员 B. 静态成员函数
C. 类以外的函数和数据 D. 非静态数据成员
答案:D
3.10 假设A是一个类,那么执行语句“A a, b(3), *p;”,调用了 次构造函数。
A. 2 B. 3 C. 4 D. 5
答案:A
四.读程题(20分,每题5分)
4.1 给出下述源程序的运行结果。
#include <iostream.h>
void main( ) {
int x[] = {5, 4, 3, 2, 1};
int *p = &x;
int a = 10, b;
for(int i = 3; i >= 0; i--)
b = (*(p+i) < a) ? *(p+i) : a;
cout << b << endl;
}
答案: 4
4.2 给出下述源程序的运行结果。
#include <iostream.h>
void fun(int, int&);
void main( ) {
int a, b;
fun(5, a);
fun(8, b);
cout << "a + b = " << a + b << endl;
}
void fun(int i, int& j)
{ j = i * 3;}
答案: a + b = 39
4.3给出下述源程序的运行结果。
#include<iostream.h>
void main( )
{ double d = 2.2, e = 3.3;
double &rd = d, &re = e;
cout << rd+re << ", " << d+re << endl;
rd = 4.4;
cout << rd+re <<", " << d+re << endl;
}
答案: 5.5,5.5
7.7,7.7
4.4 给出下述源程序的运行结果。
#include <iostream.h>
class A {
public:
A() { a1 = a2 = 0; cout << "Default constructor called.\n"; }
A(int i, int j) {a1 = i; a2 = j; cout << "Constructor called.\n"; }
void print() { cout << "a1 = " << a1 <<" , " << "a2 = " << a2 << endl; }
private:
int a1, a2;
};
void main() {
A x, y(3,9);
x.print();
y.print();
}
答案:Default constructor called.
Constructor called.
a1 = 0, a2 = 0
a1 = 3, a2 = 9
五.编程题(30分,每题15分)
5.1 定义两个重载函数,分别能求矩形和圆的周长,然后在main函数中对这两个函数进行调用并测试其功能。求矩形的周长时需要输入矩形的长和宽;求圆的周长时需要输入圆的半径。
参考程序:
#include <iostream.h>
const double PI = 3.14;
double length(double r) { return 2 * r * 3.14; }
double length(double l, double w) { return 2*l + 2&w; }
void main() {
double r, l, w;
cout << "请输入圆的半径:";
cin >> r;
cout << "请输入矩形的长和宽:";
cin >> l >> w;
cout << "圆的周长为:" << length(r) << endl;
cout << "矩形的周长为:" << length(l, w) << endl;
}
5.2 设计一个整型数组类,要求实现以下功能:
(1)创建指定大小的数组;
(2)判断数组中的元素个数是否已达到数组的最大元素数;
(3)判断数组中是否有元素;
(4)输出数组中的各个元素;
参考程序:
#include <iostream>
using namespace std;
const int MAX_LEN = 100; // 默认的数组最大容量
const int NO = -1;
class MyArray {
private:
int *a; // 数组元素
int iMaxSize; // 数组最大容量
int iCurrentSize; // 数组中当前元素数
public:
MyArray(int size = MAX_LEN); // 创建大小为size的数组
// 若不给出实参,则按照默认大小创建数组
bool full(); // 判断数组是否达到最大元素数
bool empty(); // 判断数组中是否有元素
void printArray(); // 输出数组中的所有元素
};
MyArray :: MyArray(int size) {
a = new int;
iMaxSize = size;
iCurrentSize = 0;
}
bool MyArray :: full() {
if(iCurrentSize == iMaxSize)return true; // 数组已满
else return false; // 数组未满
}
bool MyArray :: empty() {
if(iCurrentSize == 0) return true; // 数组为空
else return false; // 数组不为空
}
void MyArray :: printArray() {
for(int i = 0; i < iCurrentSize; i++) {
cout << "a[" << i << "] = " << a << '\t';
if(i % 5 == 0)cout << endl;
}
}
页:
[1]