青青 发表于 2021-8-4 11:21:12

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

考试时间:90分钟
一.简答题(10分)
1.1(3分) 派生类与基类之间是什么关系?类与对象之间是什么关系?
答案:派生类和基类之间是继承关系,派生类继承了基类。(2分)
      类和对象之间是实例化关系,对象是类的实例。(1分)

1.2(3分) 构造函数的作用是什么?在创建派生类的对象时,应按照怎样的顺序调用构造函数?
答案:构造函数的作用是创建对象并对其进行必要的初始化。(1分)
构造函数调用顺序:基类构造函数、子对象类构造函数(如果有)、派生类构造函数。(2分)

1.3 (4分)C++提供了哪些循环语句?它们各自的特点是什么?
答案:C++提供了三种循环语句for、while和do-while。(1分)
      while循环语句先判断是否满足循环条件,如果满足循环条件,则执行一次循环体,再判断是否执行下一次循环,否则退出循环。(1分)
      do-while循环语句先执行一次循环体后再判断是继续执行循环体还是退出循环。(1分)
      for循环先设置循环变量的初值,再判断是执行循环体还是退出循环体。如果执行了循环体,再改变循环变量值后,判断是执行下一次循环体还是退出循环,依此类推。(1分)

二.填空题(20分,每空2分)
2.1表示逻辑关系“a大于等于8或者a小于等于5”的C++表达式是               。
答案:a >= 8 || a <= 5

2.2break语句在循环结构中的功能是                     ,continue语句的功能是                            。
答案:退出其所在的循环,结束本次循环

2.3友元可以是               ,也可以是                。
答案:类,函数(答案顺序可以交换)

2.4有如下程序:
#include <iostream.h>
void main() {
char s1, s2;
int i = 0, j = 0;
cin >> s1 >> s2;
while (s1 != '\0')   i++;
do {
    s1 = s2;
    i++;   j++;
} while (s2 != '\0');
cout << s1 << endl;
}
如果为程序输入:abcdef        1234567,执行程序后的输出结果是:                  。
答案:abcdef1234567

2.5                   是用来初始化类的数据成员的一种特殊的成员函数;对象消失时自动执行的成员函数称为                  。
答案:构造函数,析构函数

2.6如果类A继承了类B,则类A称为               ,类B称为               。
答案:派生类,基类

三.选择题(20分,每题2分)
3.1 下列常量中,       是C++语言的浮点型常量。
        A.0x12                                B. -12345e-3                C. 1e0.5                        D. e-5
答案:B

3.2 字符串常量"HELLO"的字符个数是         。
        A. 3                                B. 4                                C. 5                                D. 6
答案:D

3.3 下列有关设置函数参数默认值的描述中,   是正确的。
        A.对设置函数参数默认值的顺序没有任何规定
        B.函数具有一个参数时不能设置默认值
        C.默认参数要设置在函数的定义语句中,而不能设置在函数说明语句中
D.设置默认参数可使用表达式,但表达式中不可用局部变量
答案:D

3.4 已知:P是一个指向类A数据成员m的指针,a 是类A的一个对象,在给m赋值为5的下列表达式中,       是正确的。
A. a.p = 5                        B. a.*p = 5                        C. a->p = 5                    D. *a.p = 5
答案:B

3.5 在C++中,使用关键字             来说明虚函数。
A. virtual                        B. public                        C. protected                D. private
答案:A

3.6 假设类AB用成员函数的方式重载加法运算符,以实现两个AB类对象的加法,并返回相加的结果,则该成员函数的声明为               。
A. AB operator + (AB &a, AB &B);                B. AB operator + (AB&);
C. operator + (AB a);                                        D. AB & operator + ();
答案:B

3.7 对定义重载函数的下列要求中,            是错误的。
A. 要求参数的个数不同                                        B. 要求参数中至少有一个类型不同
C. 要求参数个数相同时,参数类型不同                D. 要求参数的返回值不同
答案:D

3.8 下列关于C++中类与对象关系的叙述,其中错误的是      。
A. 对象是类的一个实例
B. 一个类只能有一个实例
C. 类与对象的关系和数据类型与变量的关系相似
D. 任何一个对象都属于一个已知的类
答案:B

3.9 下列关于公有继承方式的描述中,错误的是         。
A. 基类的公有成员对其派生类的对象为可见
B. 基类的保护成员对其派生类的对象为可见
C. 基类的公有和保护成员对派生类可见
D. 基类中的私有成员对派生类不可见
答案:B

3.10下列对C++中静态数据成员的描述中,正确的是             。
A. 静态数据成员是类的所有对象共享的数据
B. 类的每个对象都有自己的静态数据成员
C. 类的不同对象有不同的静态数据成员值
D. 静态数据成员不能通过类的对象来调用
答案:A

四.读程题(20分,每题5分)
4.1给出下述源程序的运行结果。
#include <iostream.h>
   void main() {
int i = 0, a = 0;
while (i <= 20) {
    for (;;) {
       if ((i % 10) == 0)   break;
       else   i++;
    }
    a += i;
    i++;
}
cout << a << endl;
   }
答案:30

4.2 给出下述源程序的运行结果并说明该程序的功能。
#include <iostream.h>
#include <string.h>
void main() {
   char a[] = “changuage”, t, m;
   int i, j, k;
   k = strlen(a);
   for(i = 0; i <= k - 2; i += 2) {
      m = i;
      for(j = i + 2; j <= k; j += 2)   
         if (a > a)   m = j;
      if(m != i) {   
         t = a; a = a; a = t;
      }
   }
   cout << a << endl;
}
答案:程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其他元素不变。
      运行结果:ahancuegg

4.3给出下述源程序的运行结果。
#include <iostream.h>
void main() {
        static 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.4 指出下列源程序中的错误及出错原因,并改正之。
#include <iostream.h>
class Point {
        int x, y;
        Point() { x = y = 0;}
public:       
        int Getx() {return x;}
        int Gety() {return y;}
        void setPoint(int i, int j) { x = i, y = j;}
};
void main()
{        Point p1, *p2;
        p1.setPoint(10, 5);
        p2->setPoint(3, 6);
        cout << p1.Getx() << endl;
}
答案:(1) Point() {x=y=0;} 应声明成public(编译错)
(2) p2->setPoint(3, 6); 之前应为p2赋初值(运行错)

五.编程题(30分,每题15分)
5.1编写程序统计“char *strSource = "AABADCDABDEA"”中A的个数。
参考程序:
#include <iostream.h>
void main( ) {
   char *strSource = "AABADCDABDEA";
   int count = 0;      // 计数器

   for(int i = 0; strSource != '\0'; i++){
      if(strSource == 'A')
         count++;
   }
   cout << "A的个数是:" << count << endl;
}

5.2 在一个程序中,类Person定义了name和age两个数据成员;由类Person派生出类Student和Teacher,其中类Student定义了学号数据,类Teacher定义了职称数据。每个类均有构造函数、析构函数和打印类中数据的函数。给出类Person、Student、Teacher的定义与实现。
参考程序:
#include <iostream>
#include <cstring>
using namespace std;
const int length = 100;
const int NO_LENGTH = 10;
const int TITLE_LENGTH = 50;
class Person {
protected:
      char *name;
      int age;
public:
       Person(char *s, int i) {
          name = new char;
          strcpy(name, s);
          age = i;
       }
       ~Person() { delete name; }
       void print() {
            cout << "name: " << name << "\tage: " << age << endl;
       }
};
class Student : public Person {
private:
       char *sNo;
public:
       Student(char *s, char *n, int i) : Person(s, i) {
         sNo = new char;
         strcpy(sNo, n);
       }
       ~Student() { delete sNo; }
       void print() {
          cout << endl;
          Person :: print();
          cout << "The student number: " << sNo << endl;
       }
};

class Teacher : public Person {
private:
      char *title;
public:
       Teacher(char *s, char *t, int i): Person(s, i) {
          title = new char;
          strcpy(title, t);
       }
       ~Teacher() { delete title; }
       void print() {
          cout << endl;
          Person :: print();
          cout << "The title is: " << title << endl;
       }
};


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