青青 发表于 2021-8-7 09:16:19

21秋西电面向对象程序设计C++模拟试卷答案

考试时间:90分钟
一.简答题(10分)
1.1 (3分)在C++中什么可以充当友元?友元是否可以继承,为什么?
答案:在C++中函数和类都可以充当友元,分别称为友元函数和友元类。(1分)
       友元不可以继承,因为友元不是类的成员。(2分)

1.2(3分) 什么是纯虚函数?什么是抽象类?
答案: 纯虚函数是一种没有实现体的虚函数,该函数的实现要在定义它的类的派生类中实现。(2分)
具有纯虚函数的类称为抽象类。抽象类是一种特殊的类,该类不能创建对象。(1分)

1.3 (4分)运算符重载有哪两种形式?这两种形式有何区别?
答案:运算符重载有两种形式:成员函数形式和友元函数形式。(1分)
区别:使用成员函数形式时,对单目运算符没有参数,对双目运算符仅有一个参数;使用友元函数形式时,对单目运算符有1个参数,对双目运算符有2个参数。成员函数方式可以继承,友元函数方式不能继承。(3分)

二.填空题(20分,每空2分)
2.1定义如下变量和数组
int i;
int x = {1, 2, 3, 4, 5, 6, 7, 8, 9};
则下面语句的输出结果是                            。
for(i = 0; i < 3; i++)   cout << x << '\t';
答案:2        5        8

2.2 若要把类bClass定义为类aClass的友元类,则应在类         的定义中加入语句                  。
答案:aClass,friend class bClass

2.3在C++中,模板可以分为            和               。
答案:函数模板,类模板
2.4 在公有继承中,派生类的对象可以访问基类中的            ;派生类的成员函数可以访问基类中的                        。
答案:公有成员;公有成员和受保护成员

2.5 流程控制语句的基本控制结构有三种:         、            和            。
答案:顺序结构,循环结构,选择结构

三.单项选择题(20分,每题2分)
3.1 下列程序段的循环次数为      次。
int x = -10;
while( ++x ) { }
A. 9                                B. 10                                C. 11                                D. 无限
答案:A

3.2 已知枚举类型enum Day {Monday, Tuesday, Wednesday, Friday = 2};
下列语句中,          是合法的。
A. Wednesday == Friday ? 1 : 0                        B. Day day; day = 3;
C. Day day;day = Monday + 3;                        D. Tuesday = 4;
答案:A

3.3 能正确表示逻辑关系“a大于等于10或a不大于0”的C++表达式是      。
A. a >= 10 or a = 0                                                B. a >= 10 | a <= 10
C. a >= 10 && a <= 0                                        D. a >= 10 || a <= 0
答案:D

3.4 在函数定义前加上关键字inline,表示该函数被定义为          。
A. 重载函数                        B. 内联函数                        C. 成员函数                        D. 友元函数
答案:B

3.5 在下面的类定义中,错误的语句是               。
class Sample {
   public:
   Sample (int val);                        // A
   ~Sample();                                        // B
   private:
   int a = 2.5;                                // C
   Sample();                                        // D
};
答案:C

3.6 下列对派生类的描述中,错误的是         。
A. 一个派生类可以作为另一个派生类的基类
B. 派生类至少有一个基类
C. 派生类的缺省继承方式为private
D. 派生类只继承了基类的公有成员和受保护成员
答案:D

3.7 实现运行时的多态性要使用             。
A. 重载函数                        B. 析构函数                        C. 构造函数                        D. 虚函数
答案:D

3.8 下列C++变量定义语句中,   是合法的。
        A. short_a = 1 - .1e-1;                                B. double b = 1 + 5e2.5;
        C. long do = 0xfdaL;                                        D. float 2_and = 1 – e-3;
答案:B

3.9 下列对类的构造函数和析构函数的描述中,正确的是             。
A. 构造函数可以重载,析构函数不能重载
B. 构造函数不能重载,析构函数可以重载
C. 构造函数和析构函数都可以重载
D. 构造函数和析构函数都不能重载
答案:A

3.10下列各函数的说明中,表示纯虚函数的是          。
A. virtual int vf(int);                                        B. void vf(int) = 0;
C. virtual int vf(int) = 0;                                D. virtual void vf(int) {}
答案:C

四.读程题(20分,每题5分)
4.1 给出下述源程序的运行结果。
#include <iostream.h>
struct abc { int a, *b; } *p;
int x[] = {6,7}, y[] = {8,9};
void main() {
   struct abc a[] = {20, x, 30, y};
   p = a;
   cout << *p->b << ",";
   cout << (*p).a << ",";
   cout << (++p)->a << ",";
   cout << ++(*p).a << endl;
}
答案:6, 20, 30, 31

4.2 阅读下列源程序:
#include <iostream.h>
int f1(int i, int i) {
   int k = i * j;
   while(i != j) {
      if( i > j )i -= j;
      if( i < j )j -= i;
   }
   return k / i;
}
int f2(int i, int j) {
   while (i != j) {
      if( i > j )i -= j;
      if( i < j )j -= i;
   }
   return i;
}
void main() {
   int a, b;
   cout << "Enter a, b: ";
   cin >> a >> b;
   int m = f1(a, b);
   int n = f2(a, b);
   cout << m << " , " << n << endl;
}
(1)说明该程序的功能。
(2)若从键盘输入6和9,给出该程序的输出结果。
答案:程序的功能:求两个正整数的最小公倍数和最大公约数。
运行结果:18,3

4.3 给出下述源程序的运行结果。
#include <iostream.h>
void main() {
        int a = 7;
do {
switch (a % 2) {
    case 1: a--; break;
    case 0: a++; break;
}
a--;
cout << a << endl;
}while(a > 0)
}
答案:5                3        1        -1

4.4 指出下列程序中有错误的语句,并说明错误原因。
#include <iostream.h>
class Sample {
   int n;
public:
   Sample(int i) { n = i; }
   void setValue(int i) { n = i; }
   void display() { cout << "n = " << n << endl;
};
void main() {
   const Sample a(10);
   a.setValue(5);
   a.display();
}
答案:错误语句:a.setValue(5)
      原因:a是常量对象,其数据成员的值不能改变

五.编程题(30分,每题15分)
5.1编写一个函数int deleteARR(int a[], int count),其功能是去掉元素个数为count的整型数组a中的重复元素,并将不重复元素的个数作为函数的返回值。
参考程序:
#include <iostream.h>
int deleteARR(int a[], int count)
{
   int k = 0, j = 1;
   while(j < count) {
   if(a != a)
      a[++k] = a;
      j++;
   }
   return k+1;// 返回数组中不重复元素的个数
}

5.2 定义一个类Area求圆的面积,该类有两个私有数据成员radius和area,两个公有成员函数:get_radius()(用来输入radius的值,并计算area的值)和disp_area()(用来输出圆的面积)。
参考程序:
#include <iostream.h>
const double PI = 3.14159;
class Area {
private:
   int radius;
   float area;
public:
   void get_radius() {
      cout << "请输入半径:";
      cin >> radius;
      area = PI * radius * radius;
   }
   void dip_area() {
      cout << "圆的面积为:" << area << endl;;
   }
};


页: [1]
查看完整版本: 21秋西电面向对象程序设计C++模拟试卷答案