程序设计与算法(三)C++面向对象程序设计答案公众号中国大学mooc网课答案

物理答案 YtE5R 2022-07-02 17:34:52 812次浏览 61655个评论

第一周 从 C 到C++

第一周测验

1、下面程序片段哪个没错?
    A、int n = 4; int & r = n * 5;
    B、int n = 6; const int & r = n; r = 7;
    C、int n = 8; const int & r1 = n; int & r2 = r1;
    D、int n = 8; int & r1 = n; const int r2 = r1;

2、下面程序片段输出结果是什么? int a = 1,b = 2; int & r = a; r = b; r = 7; cout << a << endl;
    A、1
    B、2
    C、7
    D、8

3、下面说法哪种是对的?
    A、常引用所引用的变量,其值不能被修改
    B、不能通过常量指针,去修改其指向的变量
    C、常量指针一旦指向某个变量,就不能再指向其他变量
    D、1+1 = 3

4、表达式 “new int”的返回值类型是:
    A、int
    B、int *
    C、int &
    D、void

5、下面小段程序,哪个是正确的:
    A、char * p = new char[10]; p[0] = 'K'; delete [] p;
    B、int *p = new int[25]; p[10] = 100; delete p
    C、char * p = new int; p = 'a'; delete p;
    D、int * p = new char[20];

6、下面说法正确的是:
    A、多个重载函数的参数个数必须不同。
    B、两个函数,参数表相同,返回值类型不同,它们是重载关系。
    C、调用一个第二个和第三个参数都有有缺省值的函数时,可以不写第二个实参而写第三个实参。
    D、使用内联函数的目的是提高程序的运行速度。

7、001 简单的swap 通过码 ( 请参考公告中的“关于编程作业的说明”完成编程作业(请注意,编程题都要求提交通过码,在openjudge上提交了程序并且通过以后,就可以下载到通过码。)

8、002 难一点的swap 通过码

9、003 好怪异的返回值 通过码

10、004 神秘的数组初始化 通过码

第二周 类和对象基础

第二周测验

1、有类A如下定义: class A { int v; public: A ( int n) { v = n; } }; 下面哪条语句是编译不会出错的?
    A、A) A a = new A();
    B、B) A a2;
    C、C) A * p = new A();
    D、D) A a1(3);

2、假设 A 是一个类的名字,下面的语句生成了几个类A的对象? A * arr[4] = { new A(), NULL,new A() };
    A、A) 1
    B、B) 2
    C、C) 3
    D、D) 4

3、假设A 是一个类的名字,下面哪段程序不会用到A的复制构造函数?
    A、A) A a1,a2; a1 = a2;
    B、B) void func( A a) { cout << "good" << endl; }
    C、C) A func( ) { A tmp; return tmp; }
    D、D) A a1; A a2(a1);

4、类A定义如下: class A { int v; public: A(int i) { v = i; } A() { } }; 下面哪段程序不会引发类型转换构造函数被调用?
    A、A) A a1(4)
    B、B) A a2 = 4;
    C、C) A a3; a3 = 9;
    D、D) A a1,a2; a1 = a2;

5、假设A是一个类的名字,下面的程序片段会调用类A的调用析构函数几次? int main() { A * p = new A[2]; A * p2 = new A; A a; delete [] p; }
    A、A) 1
    B、B) 2
    C、C) 3
    D、D) 4

6、005 编程填空:学生信息处理程序 通过码

7、006 奇怪的类复制 通过码

8、007 返回什么才好呢 通过码

9、008 超简单的复数类 通过码

10、009 哪来的输出 通过码

第三周 类和对象提高

第三周测验

1、1) 以下说法不正确的是:
    A、A) 静态成员函数中不能使用this指针
    B、B) this指针就是指向成员函数所作用的对象的指针
    C、C) 每个对象的空间中都存放着一个this指针
    D、D) 类的非静态成员函数,真实的参数比所写的参数多1

2、2) 下面说法哪个不正确?
    A、A) 静态成员函数内部不能访问同类的非静态成员变量,也不能调用同类的非静态成员函数
    B、B) 非静态成员函数不能访问静态成员变量
    C、C) 静态成员变量被所有对象所共享
    D、D) 在没有任何对象存在的情况下,也可以访问类的静态成员

3、3) 以下说法正确的是:
    A、A) 成员对象都是用无参构造函数初始化的
    B、B) 封闭类中成员对象的构造函数先于封闭类的构造函数被调用
    C、C) 封闭类中成员对象的析构函数先于封闭类的析构函数被调用
    D、D) 若封闭类有多个成员对象,则它们的初始化顺序取决于封闭类构造函数中的成员初始化列表

4、4) 以下关于友元的说法哪个是不正确的?
    A、A) 一个类的友元函数中可以访问该类对象的私有成员
    B、B) 友元类关系是相互的,即若类A是类B的友元,则类B也是类A的友元
    C、C) 在一个类中可以将另一个类的成员函数声明为友元
    D、D) 类之间的友元关系不能传递

5、010 返回什么才好呢 通过码

6、011 Big & Base 封闭类问题 通过码

7、012 这个指针哪来的 通过码

8、013 魔兽世界之一:备战 通过码

第四周 运算符重载

第四周测验

1、1)如果将 [ ] 运算符重载成一个类的成员函数,则该重载函数有几个参数?
    A、A) 0
    B、B) 1
    C、C) 2
    D、D) 3

2、2)以下说法正确的是:
    A、A) 成员对象都是用无参构造函数初始化的
    B、B) 封闭类中成员对象的构造函数先于封闭类的构造函数被调用
    C、C) 封闭类中成员对象的析构函数先于封闭类的析构函数被调用
    D、D) 若封闭类有多个成员对象,则它们的初始化顺序取决于封闭类构造函数中的成员初始化列表

3、3)重载“<<”用于将自定义的对象通过cout输出时,以下说法哪个是正确的?
    A、A) 可以将"<<"重载为 ostream 类的成员函数,返回值类型是 ostream &
    B、B) 可以将"<<"重载为全局函数,第一个参数以及返回值,类型都是 ostream
    C、C) 可以将"<<"重载为全局函数,第一个参数以及返回值,类型都是 ostream &
    D、D) 可以将"<<"重载为 ostream 类的成员函数,返回值类型是 ostream

4、4)如何区分自增运算符重载的前置形式和后置形式?
    A、A) 重载时,前置形式的函数名是 ++ operator,后置形式的函数名是 operator ++
    B、B) 后置形式比前置形式多一个 int 类型的参数
    C、C) 无法区分,使用时不管前置形式还是后置形式,都调用相同的重载函数
    D、D) 前置形式比后置形式多了一个int类型的参数

5、014 MyString 通过码

6、015 看上去好坑的运算符重载 通过码

7、016 惊呆!Point竟然能这样输入输出 通过码

8、017 第四周程序填空题3(二维数组类Array2) 通过码

9、018 别叫,这个大整数已经很简化了! 通过码

第五周 继承

第五周测验

1、1) 如果多种事物,有一些共同的特点,又有一些各自不同的特点,如何编写类来代表这些事物比较合适?
    A、A) 为每种事物独立编写一个类,各类之间互相无关
    B、B) 写一个类代表其中一种事物,代表其他事物的类,都从这个类派生出来
    C、C) 概括所有事物的共同特点,写一个基类。然后为每种事物写一个类,都从基类派生而来
    D、D) 一共就写一个类,包含所有事物的所有特点,然后用一个成员变量作为标记来区分不同种类的事物

2、2) 以下哪种派生关系是合理的
    A、A) 从“虫子”类派生出“飞虫”类
    B、B) 从“点”类派生出“圆”类
    C、C) 从“狼”类派生出“狗”类
    D、D) 从“爬行动物”类派生出“哺乳动物”类

3、3) 派生类和基类有同名同参数表的成员函数,这种现象:
    A、A) 叫重复定义,是不允许的
    B、B) 叫函数的重载
    C、C) 叫覆盖。在派生类中基类的同名函数就没用了
    D、D) 叫覆盖。体现了派生类对从基类继承得到的特点的修改

4、4) 以下说法正确的是:
    A、A) 派生类可以和基类有同名成员函数,但是不能有同名成员变量
    B、B) 派生类的成员函数中,可以调用基类的同名同参数表的成员函数
    C、C) 派生类和基类的同名成员函数必须参数表不同,否则就是重复定义
    D、D) 派生类和基类的同名成员变量存放在相同的存储空间

5、5) 以下说法正确的是:
    A、A) 派生类对象生成时,派生类的构造函数先于基类的构造函数执行
    B、B) 派生类对象消亡时,基类的析构函数先于派生类的析构函数执行
    C、C) 如果基类有无参构造函数,则派生类的构造函数就可以不带初始化列表
    D、D) 在派生类的构造函数中部可以访问基类的成员变量

6、019 全面的MyString 通过码

7、020 继承自string的MyString 通过码

8、021 魔兽世界2 通过码

第六周 多态

第六周测验

1、022 看上去像多态 通过码

2、023 Fun和Do 通过码

3、024 这是什么鬼delete 通过码

4、025 怎么又是Fun和Do 通过码

5、026 统计动物数量 通过码

第七周 输入输出和模板

第七周测验

1、027 简单的SumArray 通过码

2、028 简单的foreach 通过码

3、029 简单的Filter 通过码

4、030 你真的搞清楚为啥 while(cin >> n) 能成立了吗? 通过码

5、031 山寨版istream_iterator 通过码

6、032 这个模板并不难 通过码

7、033 排序,又见排序! 通过码

第八周 标准模板库STL(一)

第八周测验

1、034 goodcopy 通过码

2、035 按距离排序 通过码

3、036 很难蒙混过关的CArray3d三维数组模板类 通过码

4、037 函数对象的过滤器 通过码

5、038 白给的list排序 通过码

6、039 我自己的 ostream_iterator 通过码

7、040 List 通过码

第九周 标准模板库STL(二)

第九周测验

1、041 Set 通过码

2、042 热血格斗场 通过码

3、043 冷血格斗场 通过码

4、044 编程填空:数据库内的学生信息 通过码

魔兽世界大作业及魔兽系列作业测试数据

魔兽世界大作业

1、到http://cxsjsxmooc.openjudge.cn 完成 045 魔兽世界三(开战) 通过后,下载通过码,然后提交一个输出通过码的程序

期末考试

期末考试

1、1) 关于复制构造函数,下列说法正确的是
    A、A. 系统不会生成缺省复制构造函数,因此必须自己实现
    B、B. 复制构造函数是形如X::X(X)的函数
    C、C. Myclass c1, c2; c1.n = 1; c2 = c1;第三句将会调用复制构造函数
    D、D. 调用函数A Func() { A a(4); return a; }时,将会调用A的复制构造函数

2、2)关于虚函数,下列说法不正确的是
    A、A. 不允许以虚函数作为构造函数
    B、B. 没有虚函数便无法实现多态
    C、C. 一般来讲,如果一个类中定义了虚函数,则不可将析构函数也定义为虚函数
    D、D. 不能用抽象类定义对象

3、3) 关于 this 指针,以下说法不正确的是
    A、A. static成员函数内部不可以使用this指针
    B、B. 在构造函数内部可以使用this指针
    C、C. 在析构函数内部可以使用 this 指针
    D、D. const成员函数内部不可以使用this 指针

4、4) 以下关于多态的说法那个不正确?
    A、A. 在成员函数中调用虚函数,是多态
    B、B. 通过“基类对象名.函数名"的方式调用虚函数,不是多态
    C、C. 多态的函数调用语句中,函数一定是虚函数
    D、D. 通过“基类引用名.函数名"的方式调用虚函数,是多态

5、5) map的每个元素包括KEY(first)和VALUE(second)。关于map容器,下列哪种说法错误
    A、A. map支持下标运算符
    B、B. map的不同元素可以有相同的VALUE
    C、C. map支持STL的sort算法
    D、D. map支持双向迭代器

6、6) 下列说法错误的是
    A、A. 可以在一个类的友元函数中使用this指针
    B、B 每个类只有一个析构函数
    C、C 抽象类至少包含一个纯虚函数
    D、D 构造函数不可以是virtual函数

7、7) 关于继承和派生的描述中,下列说法错误的是:
    A、A. 派生类的成员函数中,不能访问基类的private成员
    B、B. 在派生类的析构函数执行之前,会先调用基类的析构函数
    C、C. 派生类对象的地址可以赋值给基类指针
    D、D. 派生类可以有和基类同名同参数的成员函数`

8、8) 以下哪种使用std::sort算法的方式是不合法的:
    A、A. vector<int> a; …; sort(a.begin(), a.end());
    B、B. bool b[99]; …; sort(b, b + 99);
    C、C. string c = “2333”; …; sort(c.begin(), c.end());
    D、D. list<int> d; …; sort(d.begin(), d.end());

9、9) 类A重载的运算符声明是int operator<(A &other) const,那么以下说法中正确的是:
    A、A. 小于号左侧的A对象不可以是const的
    B、B. 小于号右侧的A对象不可以是const的
    C、C. 这个写法是错误的,因为小于号的返回类型必须是bool
    D、D. 使用小于号的时候,other参数处,传进来的对象实际上会被复制一次

10、10) 以下STL中的函数模板哪个可以作用于set
    A、A. sort
    B、B. random_shuffle
    C、C. find
    D、D. 都不行

11、编程填空:二进制输出 通过码

12、编程填空:统计动物数量 通过码

13、编程填空:简单的计算 通过码

14、编程填空:MyClass 通过码

15、编程填空:又是MyClass

16、编程填空:去除重复元素排序

17、编程填空:按要求输出 通过码

18、编程填空:还是Fun和Do 通过码

19、编程填空:简单的对象 通过码

20、编程填空:回调函数

21、编程填空:前K大的偶数 通过码

22、编程填空:Printer 通过码

23、编程填空:三生三世 通过码

24、编程填空:又见模板 通过码

25、编程填空:矩形排序 通过码

26、编程填空:维护平面点 通过码