您好,欢迎来到刀刀网。
搜索
您的当前位置:首页C++期末考试试卷及答案

C++期末考试试卷及答案

来源:刀刀网
C++期末考试试卷及答案

40分)

1. ______不是属于⾯向对象程序设计的特性A. 抽象性B. 数据相关性C. 多态性D. 继承性

2. 将对某⼀类数据的处理算法应⽤到另⼀类数据的处理中,要⽤到C++的______A. 类B. 虚函数C. 运算符重载D. 模板

3. C++与C语⾔最根本的不同之处在于_______A. 使⽤了类

B. 能够实现变量⾃动初始化C. ⽀持软件重⽤D. ⽀持接⼝重⽤

4. 动态内存分配的主要⽬的是_______A. 使程序按动态联编⽅式运⾏B. 正确合理的使⽤内存C. 提⾼程序的运⾏速度D. 提⾼程序的可维护性

5. 在C++函数的形参前加const关键字,是为了提⾼函数的_______A. 数据封装性B. 可理解性C. 可维护性D. 可重⽤性

6. 函数重载的⽬的是________A. 实现共享

B. 使⽤⽅便,提⾼可读性C. 提⾼速度D. 减少空间

7. 从程序⽚断:char name[] = \"C++\"; course(name);可判断函数course的调⽤采⽤的是_______

A. 传值调⽤

B. 带缺省参数值的函数调⽤C. 引⽤调⽤D. 传址调⽤

8. ⽤来说明类中公有成员的关键字是________A. publicB. privateC. protectedD. friend

9. 如果⼀个类的成员函数print()不修改类的数据成员值,则应将其声明为A. void print() const;B. const void print();C. void const print();D. void print(const);

10. 下列关于构造函数的论述中,不正确的是_______A. 构造函数的函数名与类名相同B. 构造函数可以设置默认参数C. 构造函数的返回类型缺省为int型D. 构造函数可以重载

11. 在程序代码:A::A(int a, int *b) { this->x = a; this->y = b; }中,this的类型是______A. intB. int *C. AD. A *

12. 内存泄漏是指_______A. 内存中的数据出现丢失

B.试图释放⼀个已经释放了的动态分配的堆内存C. 函数中局部变量所占的栈内存没有及时回收D. 动态分配的堆内存在程序退出后始终被占⽤

13. 从程序⽚断:student zhangsan(\"张三\可判断id是⼀个________A. 私有成员数据B. 私有成员函数C. 公有成员数据D. 公有成员函数14. 友元函数_______

A. 可以被声明为constB. 没有this指针

15. 若⼀个类的成员函数前⽤static关键字修饰,则该成员函数________A. 可以被声明为constB. 没有this指针

C. 可以访问该类的所有成员D. 只能⽤对象名来调⽤

16. C++是⽤_______实现接⼝重⽤的A. 内联函数B. 虚函数C. 重载函数D. 模板函数

17. 公有继承的派⽣类对象可以访问其基类的________A. 公有成员

B. 公有成员及受保护成员C. 受保护成员D. 私有成员

18. 设置虚基类的⽬的是________A. 简化程序

B. 使程序按动态联编⽅式运⾏C. 提⾼程序运⾏效率D. 消除⼆义性

19. 下列关于纯虚函数和抽象类的描述中,不正确的是________A. 纯虚函数是⼀个没有具体实现的虚函数B. 抽象类是包括纯虚函数的类

C. 抽象类只能作为基类,其纯虚函数的实现在派⽣类中给出D. 可以定义⼀个抽象类的对象

20. 关于运算符重载的不正确的描述是________A. 运算符重载函数是友元函数B. 体现了程序设计的多态性C. 增加新的运算符D. 使运算符能对对象操作

⼆、下⾯的程序是关于CBook类的⼀个定义,试改正程序中的错误。(共#include

#include #inlcude

10分)class CBook{private:char *p_book;

public: p_book=new char[strlen(p_val)+1]

CBook(const char *p_val) { p_book = new char[strlen(p_val)]; strcpy(p_book, p_val); } void print() const { cout << p_book <~CBook() { delete [] p_book; }};

void main(){

char book_title[60];CBook *p_book_obj;cout << “Enter book title: ”;cin >> p;CBook abook(p);p_book_obj = &abookp_book_obj->print();}#includeclass CJournal{public:

CJournal() { cout << “Journal default constructor” << endl; }virtual void subscribe() = 0;

void read() { cout << “Read paper” << endl; }

~CJournal() { cout << “Journal default destructor” << endl; }};

class CComputerDesign : public CJournal{public:

CComputerDesign () {cout << “《Computer Design》default constructor” << endl; } virtual void subscribe() { cout <<“Subscribing 《Computer Design》” << endl; } void read() {cout << “Reading 《Computer Design》” << endl; }~CComputerDesign() { cout << “《Computer Design》defa ult destructor” << endl; }};

void main()

{

CComputerDesign journal1;CJournal *p_journal;journal1.subscribe();journal1.read();// ①

p_journal = &journal1p_journal->subscribe();p_journal->read();}

1.当程序运⾏到①处时,写出程序运⾏的输出结果 (3分)2. 当程序结束时,程序会在第1问的基础上增加哪些输出。 (4分)

3. 若在主函数中定义⼀个对象CJournal journal;程序编译时会否出错?为什么?(3分)四、编程题(共40分)

1. 定义⼀个商品类CGoods,其中包含商品号(long no)、商品名(char *p_name)、商品价格(double price)三个数据成员,以及相应的构造函数、拷贝构造函数、析构函数、#include

using namespace std;class CCourse{private:long no;char *p_name;float credit;public:

CCourse(long no_val,char p_val,float credit_val); CCourse(const CCourse &r_course);~CCourse(){delete p_name;}void print() const;};

CCourse:CCourse(long no_val,char p_val,float credit_val) {no=no_val;

p_name=new char[strlen(p_val)+1];strcpy(p_name,p_val);credit=credit_val;}

CCourse:CCourse(const CCourse &r_course)

{

no=r_course.no;

p_name=new char[strlen(r_course.p_name)+1];strcpy(p_name,r_course.p_name);credit=r_course.credit;}

void CCourse:print() const{

cout<<\"Course number\"2. 为CGoods类增加⼀个商品总数(int count)数据成员,并增加⼀个成员函数getCount()获取count的值,编写⼀个友元函数getName()获取商品名称p_name。做如上修改后,重新实现CGoods类(与第1问相同的不⽤再重复)。(10分)

3. 为CGoods类定义⼩于运算符(‘<’)和不⼩于运算符(‘>=’)两个运算符重载函数。CGoods类对象⼤⼩的⽐较是根据其商品价格(price)的值的⼤⼩来实现的。(与第2问相同的不⽤再重复)(10分)

4. 以CGoods类为基类,派⽣出服装类CClothes和⾷品类CFood两个派⽣类,并在这两个类中分别增加⼀个表⽰品牌的指针数据成员(char *p_brand)和表⽰⽤途的成员函数(void usedFor()——可分别输出⼀条表⽰服装和⾷品⽤途的信息)。写出CClothes类和CFood类的完整定义(包括构造、析构和usedFor()成员函数的实现)。(10分)五、附加题(共30分。注意:确保基本题成绩能达到75分以上,再尝试做附加题!)

1. 在基本题第四题的基础上,在CGoods类增加总商品数(long total_goods)和商品总价格(double total_price)两个数据成员,以及相应的获取这两个数据成员值的成员函数getTotalGoods()和getTotalPrice()。(注意说明数据成员和成员函数的存储类型,以便能够⽤类名来调⽤getTotalGoods()和getTotalPrice()这两个函数)。为了能够采⽤动态联编的⽅式调⽤派⽣类的usedFor()成员函数,应该在CGoods类及其派⽣类CClothes和CFood类中作何改动? (15分)

2. 编写⼀个实现两个数交换的函数模板swap,然后使⽤该函数模板再编写⼀个对具有n 个数组元素(通⽤类型)的数组采⽤冒泡排序算法进⾏排序的函数模板。(15分)试卷参⼀、单项选择题

1-5. BDABC 6-10. BDAAC11-15. CADBB 16-20. CADDA(每⼩题答对2分,不答0分,答错0分)⼆、

CBook abook;改为CBook abook(p);

p_book_obj = abook改为p_book_obj = &abookp_book_obj.print()改为p_book_obj->print();

(该对得2分,未改或改错得0分,正确之处该成错误倒扣1分)三、

1. Journal default constructor<> default constructor

Subscribing <>Reading <>

(全部答对得3分,答错或漏答⼀条输出扣1分)2. Subscribing <>Reading paper<> default destructorJournal default destructor

(全部答对得4分,答错或漏答⼀条输出扣1分)

3. 会出错,因为CJournal中包含有纯虚函数,故CJournal是抽象类,不能定义抽象类对象。(答对编译会出错得1分,答对原因得2分。)四、1. #include#include

using namespace std;class CCourse{private:long no;char *p_name;float credit;public:

CCourse(long no_val, char *p_val, float credit_val);CCourse(const CCourse &r_course);~CCourse() { delete p_name; }void print() const;};

CCourse::CCourse(long no_val, char *p_val, float credit_val){

no = no_val;

p_name = new char[strlen(p_val)+1];strcpy(p_name, p_val);credit = credit_val;}

CCourse::CCourse(const CCourse &r_course){

no = r_course.no;

p_name = new char[strlen(r_course.p_name)+1];strcpy(p_name, r_course.p_name);credit = r_course.credit;}

void CCourse::print() const{

cout << \"Course number: \" << no << endl;cout << \"Course name: \" << p_name << endl;cout << \"Course credit: \" << credit << endl;}

(数据成员定义正确得2分,部分正确得1分,不正确得0分

每个成员函数定义正确得2分,每个成员函数有⼩错误扣1分,完全不正确不得分) 2. 在class CCourse定义中增加⼀条:(答对得1分,未加static得0分)在类外部增加⼀条:

int CCourse::total_course = 0;(答对得1分,答错或漏答得0分)在CCourse类的构造函数中增加⼀条:total_course++;(答对得1分)

在CCourse类的拷贝构造函数中增加⼀条:total_course++;(答对得1分)

在CCourse类的析构函数中增加⼀条:total_course--;(答对得1分)

在class CCourse定义中增加⼀条:public:

static getTotalCourse() { return total_course; } (答对得2分,未加static得1分)在class CCourse定义中增加⼀条:

friend char *getCourseName(const CCourse &r_course); (答对得1分,未加friend得0分)在类外部定义:

char *getCourseName(const CCourse &r_course){

return r_course.p_name;}

(答对得2分)

bool operator <(const CCourse &r_course);(答对得2分)在类外部定义:

bool CCourse::operator <(const CCourse &r_course){

if (credit < r_course.credit)return true;elsereturn false;}

(答对得3分)

在class CCourse定义中增加⼀条:public:

bool operator >=(const CCourse &r_course);(答对得2分)在类外部定义:

bool CCourse::operator >=(const CCourse &r_course){

if (credit >= r_course.credit)return true;elsereturn false;}

(答对得3分)4.

class CHLP : public CCourse{private:char *p_openby;public:

CHLP(long no_val, char *p_val, float credit_val, char *p_open) : CCourse(no_val, p_val, credit_val){

p_openby = new char[strlen(p_open)+1];strcpy(p_openby, p_open);

}

~CHLP() { delete p_openby; }

(答对得5分,其中构造函数3分,析构函数1分,studyFor()函数1分)class COOP : public CCourse{private:char *p_openby;public:

COOP(long no_val, char *p_val, float credit_val, char *p_open) : CCourse(no_val, p_val, credit_val){

p_openby = new char[strlen(p_open)+1];strcpy(p_openby, p_open);}

~COOP() { delete p_openby; }

void studyFor() { cout << \"Study for object oriented programming\" << endl; }};

(答对得5分,其中构造函数3分,析构函数1分,studyFor()函数1分)五、

1. 在class CCourse定义中增加⼀条:public:

virtual void studyFor() { cout << \"study for degree\\n\"; }(答对得2分)增加:#include

主函数可定义为:void main(){

char choice, instructor[10];float credit;long id;

CCourse *p_course;cout << \"Select course:\\n\";

cout << \"1. for High Level Language Programming\\n\";cout << \"2. for Object Oriented Programming\\n\";cin >> choice;

cout << \"Enter course number: \";cin >> id;

cout << \"Enter credit: \";cin >> instructor;switch (choice){case '1':

p_course = new CHLP(id, \"⾼级语⾔程序设计\case '2':

p_course = new COOP(id, \"⾯向对象程序设计\default:exit(0);}

p_course->studyFor();delete p_course;}

(答对得13分)2.#include

using namespace std;template

void swap(T &a, T &b){T temp;temp = a;a = b;b = temp;}template

void bubbleSort(T a[], int n){int i, j;

for (i=1; i < n; i++)for (j=0; j < n-i; j++)if (a[j] > a[j+1])

swap(a[j], a[j+1]);}template

void print(T1 a[], int n){

cout << endl;}

void main(){

int a[] = {2, 3, 1, 6, 43, 22};

double b[] = {2.3, 3.2, 1.6, -6.0, 4.3, 2.2};print(a, 6);bubbleSort(a, 6);print(a, 6);print(b, 6);bubbleSort(b, 6);print(b, 6);(答对得15分)

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务