C期末考试试卷及答案

温柔似野鬼°
732次浏览
2021年01月29日 00:59
最佳经验
本文由作者推荐

同义词成语-带石字的成语

2021年1月29日发(作者:小爸爸李三妹妈妈)
C++
期末考试试卷及答案
1
一、单项选择题(每题
2
分,共
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[] =
可判断函数
course
的调用采用的

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

8.
用来说明类中公有成员的关键字是
________
A. public B. private C. protected D. 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. int B. int * C. A D. A *
12.
内存泄漏是指
_______
A.
内存中的数据出现丢失
B.
试图释放一个已经释放了的动态分
配的堆内存

C.
函数中局部变量所占的栈内存没有及时回收
D.
动态分配的堆内存在程序退出后
始终被占用

A.
私有成员数据
B.
私有成员函数
C.
公有成员数据
D.
公有
成员函数

14.
友元函数
_______
A.
可以被声明为
const B.
没有
this
指针

C.
可以用类名或对象名来调用
D.
只能用对象名来调用

15.
若一个类的成员函数前用
stati c
关键字修饰,则该成员函数
________
A.
可以被声明为
const B.
没有
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
类 的一个定义,试改正程序中的错误。
(共
10
分)

#include
#include #inlcude
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 << endl; }
~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 = &abook;
p_book_obj->print();
}
三、根据如下所示程序,回答下列问题(共
10
分)

#include
class 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

default
destructor”
<<
endl;
}

};
void main()
{
CComputerDesign journal1;
CJournal *p_journal;
ibe();
();
//


p_journal = &journal1;
p_journal->subscribe();
p_journal->read();
}
1.
当程序运行到①处时,写出程序运行的输出结果
(3

)
2.
当程序结束时,程序会在第
1
问的基础上增加哪些输出。
(4

)
3.
若在主函数中定义一个对象
CJournal journal;
程序编译时会否出错?为什么?
(3

)
四、编程题
(

40

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

)
#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_;



p_name=new char[strlen(r_course.p_name)+1];



strcpy(p_name,r_course.p_name);



credit=r_;


}


void CCourse:print() const


{



cout<<



cout<<



cout<<


}
2.

CGoods
类增加一个商品总数
(int
count)
数据成员,并增加一个成员函数
getCount()
获取
count
的值 ,
编写一个友元函数
getName()
获取商品名称
p_name

做如上修改后,
重新实现
CGoods

(
与第
1
问相同的不用再重复
)

(10

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

)(10

)
4.

CGoods
类为基类,派生出服装类CClothes
和食品类
CFood
两个派生类,并在这两个类中
分别 增加一个表示品牌的指针数据成员
(char *p_brand)
和表示用途的成员函数
(void usedFor()
——可分 别输出一条表示服装和食品用途的信息
)
。写出
CClothes
类和
CFood
类的完整定义
(
包括
构造、析构和
usedFor()
成员函数的实现
)

(10

)
五、附加题(

30
分。注意:确保基本题成绩能达到
75
分以上,再尝试 做附加题!
)
1.
在基本题第四题的基础上,

CGoods< br>类增加总商品数
(long
total_goods)
和商品总价格
(double
total_pr ice)
两个数据成员,以及相应的获取这两个数据成员值的成员函数
getTotalGoo ds()

getTotalPrice()




















便







getTotalGoods ()

getTotalPrice()
这两个函数)
。为了能够采用动态联 编的方式调用派生类的
usedFor()
成员函数,应该在
CGoods
类 及其派生类
CClothes

CFood
类中作何改动?
(15

)
2.
编写一个实现两个数交换的函数模板
swap< br>,
然后使用该函数模板再编写一个对具有
n
个数组元
素(通用类型)的 数组采用冒泡排序算法进行排序的函数模板。
(15

)
试卷参考答案

一、单项选择题

1-5. BDABC 6-10. BDAAC
11-15. CADBB 16-20. CADDA < br>(
每小题答对
2
分,不答
0
分,答错
0
分< br>)
二、

#include
改为
#include
p_book = new char[strlen(p_val)]
改为
p_book = new char[strlen(p_val)+1]
CBook abook;
改为
CBook abook(p);
p_book_obj = abook
改为
p_book_obj = &abook;
p_book_()
改为
p_book_obj->print();
(< br>该对得
2
分,未改或改错得
0
分,正确之处该成错误倒扣
1< br>分
)
三、

1. Journal default constructor
<> default constructor
Subscribing <>
Reading <>
(
全部答对得
3
分,答错或漏答一条输出扣
1

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

)
3.
会出错,因为
CJournal
中包含有纯虚函数,故
CJ ournal
是抽象类,不能定义抽象类
对象。

(
答对编译会出错得
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)
{

同义词成语-带石字的成语


同义词成语-带石字的成语


同义词成语-带石字的成语


同义词成语-带石字的成语


同义词成语-带石字的成语


同义词成语-带石字的成语


同义词成语-带石字的成语


同义词成语-带石字的成语