青青 发表于 2021-8-4 11:20:44

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

模拟试卷
考试时间:90分钟
一、简答题(10分)
1.1 (3分)C++中的函数调用有哪几种方式?它们有什么区别?
答案:C++中的函数调用有值传递和引用传递两种。(1分)
      值传递时,函数体对形参的任何修改都不会影响实参。(1分)
      引用传递时,函数体对形参的修改就相当于对实参的修改。(1分)

1.2 (3分)若派生类以private方式从一个基类派生,派生类的对象可以访问基类中的那些成员?派生类的成员函数可以访问基类中的那些成员?
答案:若派生类以private方式从一个基类派生,派生类的对象不能访问基类中的任何成员(1分);派生类的成员函数可以访问基类中的public和protected成员(2分)。

1.3(4分)什么是引用?它与指针有什么区别?
答案:引用是某个变量或对象的别名。引用不是变量,它不占据内存空间,它本身没有内存
地址。引用只是被引用的变量或对象的替身。(2分)
引用与指针的区别在于应用不是变量,而指针是变量。没有引用的引用,却有指针的引用。(2分)

二、填空题(20分,每空2分)
2.1 C++程序中的数据可以分为两大类,其中          是指在程序执行过程中值不改变的数据;      是程序中用于存储信息的单元,并对应于某个内存空间。
答案:常量、变量

2.2有如下定义语句“MyClass *p;”则执行“p = new MyClass;”语句时,将自动调用类MyClass的         。执行“delete p;”语句时,自动调用该类的         。
答案:构造函数、析构函数

2.3 C++中函数之间传递参数有            和               两种方式。
答案:值传递,引用传递

2.4 给出下列程序的输出结果:               。
   #include <iostream.h>
   #define MIN(x, y)        (x) < (y) ? (x) : (y)
voidmain() {
int i, j, k;
i = 10;    j = 15;
k = 10 * MIN(i, j);
cout << k << endl;
   }
答案:15

2.6 类的访问权限有            、               和               三种。
答案:private,protect,public

三、选择题(20分,每题2分)
3.1 在下列选项中,合法的C++变量名是         。
A. long                                B. _2Test                        C. 3Dmax                D. A.dat
答案:B

3.2在对字符数组进行初始化,               是正确的。
A. char s1[] = "abcd";                                        B. char s2 = "xyz";
C. char s3[] = {'a', 'x','y'};                        D. char s4 = {"xyz", "mnp"};
答案:A

3.3 字符串常量"ME"的字符个数是         。
A. 4                                B. 3                                C. 2                                D.1
答案:B

3.4 下列对C++ main()函数的描述中,正确的是          。
A. main()函数在同一个C++文件中可以有多个
B. main()函数类型必须是void类型
C. main()函数一定有返回值
D. 每个C++程序都必须有一个main()函数
答案:D

3.5已知:int m = 10,下列表示引用的方法中,            是正确的。
A. int &x = m;                B. int &x = 10;                C. int &x;                D. float &x = &m;
答案:A

3.6 下列对C++语言中函数参数默认值的描述中,正确的是            。
A. 函数参数的默认值只能设定一个
B. 一个函数的参数若有多个,则参数默认值的设定可以不连续
C. 函数参数必须设定默认值
D. 在设定参数的默认值之后,该参数后面定义的所有参数都必须设定默认值
答案:D

3.7 下列关于运算符重载的描述中,         是正确的。
A. 运算符重载可改变其优先级                                B. 运算符重载不改变其语法结构
C. 运算符重载可改变其结合性                                D. 运算符重载可改变其操作数的个数
答案:B

3.8 下列关于类的析构函数的描述中,错误的是               。
A. 类中有且仅有一个析构函数                                B. 析构函数可以有形参
C. 析构函数没有函数类型                                        D. 析构函数在对象撤销时被自动执行
答案:B

3.9 为了使类中的成员能够被类的对象通过成员运算符访问,则应该把成员的访问权限定义为          。
A. public                        B. protected        C. private                D. packaged
答案:A

3.10 假设MyClass为一个类,那么下列函数说明中,               是该类的析构函数。
A. void ~MyClass();                                        B. ~MyClass(int n);
C. ~MyClass(void);                                        D. ~MyClass();
答案:D

四、读程题(20分,每题5分)
4.1 给出下列源程序的输出结果。
#include <iostream.h>
void main( ) {
   int x = 5, y = 2;
   cout << !(y == x/2) << ",";
   cout << (y != x%3) << ",";
   cout << (x > 0 && y < 0) << ",";
   cout << (x != y || x >= y) << endl;
}
答案:0, 0, 0, 1

4.2 给出下述源程序的运行结果。
#include <iostream.h>
void sub(int x, int y, int *z) {
   *z = y + x;
}
void main() {
   int a, b, c;
   sub(8, 4, &a);   
   sub(6, a, &b);   
   sub(a, b, &c);   
   cout << a << "," << b << "," << c << endl;
}
答案:12, 18, 30

4.3 指出下列类定义中的错误。
class MyClass {
int i = 0;
public:
void MyClass();
~MyClass(int value);
};
答案:(1) 数据成员i在定义进行了初始化
(2) 构造函数定义了返回值
(3) 析构函数定义了参数

4.4给出下列程序的运行结果。
#include <iostream.h>
class Point {
public:
Point(int i, int j) { x = i;y = j; }
void Print() { cout << '(' << x << ','<< y << ')' << endl; }
void operator += (Point p) { x += p.x; y += p.y; }
void operator -= (Point p) { x -= p.x; y -= p.y; }
private:
    int x, y;
};
void main() {
   Point P1(5, 7), P2(4, 3);
   P1.Print();
   P2.Print();
   P1 += P2;
   P1.Print();
   P2 -= P1;
   P2.Print();
}
答案:(5,7)
(4,3)
(9,10)
(-5,-7)

五、编程题(30分,每题15分)
5.1定义并实现一个类Myst,使下列语句能够正常运行。
Mystx(3.2), y(5,5), z(0.0);
z = 8.9 – y;
y = x – 6.3;
参考程序:
#include <iostream.h>
class Myst {
private:
   double v;
public:
   Myst(double d){ v = d; }
   Myst operator – (double d) {v = v - d; return v;}
   friend Myst operator - (double d, Myst m);
};
Myst operator – (double d, Myst m) {
   return d - m.v;
}

5.2 编写能统计某个字符在字符串中出现次数的函数,该函数能利用引用的方式将统计结果带回给主调函数。编写该函数,利用main函数调用并测试它。
参考程序:
#include <iostream.h>
#define MAX                100
void cal(char *s, char ch, int &rp) {
   while (*s)
   if( *s++ == ch)rp++;
}
void main() {
   char *string = new char;
   char ch;
   int result = 0;
   cout << "请输入一个字符串:";
   cin >> string;
   cout << "请输入一个字符:";
   cin >> ch;
   cal(string, ch, result);
   cout << "该字符在串中出现的次数为:" << result << endl;
}


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