#define e=2.7182818284
期末模拟
选择题
答案:CACBBCDCCA
分数 4
作者 刘骥
单位 重庆大学
下列程序代码,正确的输出结果是( )
int a=0xfe;
char b=062;
cout<<a<<“,”<<b<<endl;
A.
0xfe,062
B.
fe,62
C.
254,2
D.
254,62
2-2
分数 4
作者 刘骥
单位 重庆大学
下列代码能正确执行的是( )
A.
char a=‘C’;
const char& p=a;
B.
char a=‘C’;
char* const p;
p=&a;
C.
char a=‘C’;
const char& p;
p=a;
D.
char a=‘C’;
char& p;
p=a;
2-3
分数 4
作者 刘骥
单位 重庆大学
new和delete运算符正确的使用是( )
A.
int* p=new int[10];
delete p;
B.
int* p=new int(10);
delete []p;
C.
vector* v=new vector[10];
delete []v;
D.
int* a=new int[]{1,2,3,4};
delete []a;
2-4
分数 4
作者 刘骥
单位 重庆大学
下列哪个代码能够实现x和y值的交换( )
A.
void fun(int a,int b) {
int x = a;
a = b;
b = x;
}
int main() {
int x = 1, y = 2;
fun(&x, &y);
cout << x << “,”<<y << endl;
return 0;
}
B.
void fun(int* a,int* b) {
int x = *a;
*a = *b;
*b = x;
}
int main() {
int x = 1, y = 2;
fun(&x,&y);
cout << x << “,”<<y << endl;
return 0;
}
C.
void fun(int& a,int& b) {
int x = a;
a = b;
b = x;
}
int main() {
int x = 1, y = 2;
fun(&x, &y);
cout << x << “,”<<y << endl;
return 0;
}
D.
void fun(const int&a,const int&b) {
int x = a;
a = b;
b = x;
}
int main() {
int x = 1, y = 2;
fun(x, y);
cout << x << “,”<<y << endl;
return 0;
}
2-5
分数 4
作者 刘骥
单位 重庆大学
下面有一个结构体,对结构体的错误使用是( )
struct Book{
string name;
double price;
}
A.
Book b{“C++”,20};
B.
Book b;
b->name=“C++”;
b->price=20;
C.
Book *b=new Book[2];
b[0].name=“C++”;
b[0].price=20;
D.
Book *p=new Book();
p->name=“C++”;
p->price=20;
2-6
分数 4
作者 葛亮
单位 重庆大学
下列种类的函数中,哪一种不是类的成员函数?
A.
构造函数
B.
析构函数
C.
友元函数
D.
拷贝构造函数
2-7
分数 4
作者 葛亮
单位 重庆大学
父类Base和子类Derive的定义如下。请问在子类中,继承的父类成员f,x,y的访问控制权限分别是:
class Base
{
public:
void f();
protected:
int x;
private:
int y;
};
class Derive : protected Base
{
};
A.
public, protected, private
B.
public, public, public
C.
private, private, private
D.
protected, protected, private
2-8
分数 4
作者 葛亮
单位 重庆大学
当变量x的输入值是9时,下面程序的运行结果是:
#include
#include
using namespace std;
int main()
{
int x;
cin>>x;
try
{
cout<<“begin”<<endl;
if(x>100)
{
cout<<“1”<<endl;
throw string(“too big.”);
}
else
{
cout<<“x=”<<x<<endl;
}
cout<<“2”<<endl;
}
catch(string e)
{
cout<<“3:”<<e<<endl;
}
cout<<“end”<<endl;
return 0;
}
A.
begin
1
2
end
B.
begin
1
3: too big.
2
end
C.
begin
x=9
2
end
D.
begin
1
3: too big.
end
2-9
分数 4
作者 刘骥
单位 重庆大学
下列哪个代码不会调用对象的拷贝构造函数( )
A.
MyClass a;
MyClass b=a;
B.
MyClass a;
MyClass b(a);
C.
MyClass a;
MyClass& b=a;
D.
void f(MyClass obj)
{
…
}
MyClass a;
f(a);
2-10
分数 4
作者 刘骥
单位 重庆大学
根据下列类模板声明,正确初始化对象的方式是( )
template<typename T1, typename T2>
class MyClass{
private:
T1 x;
T2 y;
public:
MyClass(T1 _x, T2 _y):x(_x),y(_y){}
};
A.
MyClass<int,char> a(10,‘a’);
B.
MyClass a(10,‘a’);
C.
MyClass<int,char> a;
D.
MyClass a;
二、函数题:
6-1 类的定义(教师类Teacher)
分数 10
全屏浏览题目
切换布局
作者 刘骥
单位 重庆大学
本题要求定义一个教师类Teacher,数据成员包含姓名name和年龄age,类的声明见给出的代码,请给出类的完整实现,并通过测试程序。
类的声明:
class Teacher{
private:
string name;
int age;
public:
Teacher(string name,int age);
string getName() const;
int getAge() const ;
void setName(string name);
void setAge(int age);
};
测试程序:
#include
#include
using namespace std;
class Teacher{
private:
string name;
int age;
public:
Teacher(string name,int age);
string getName() const;
int getAge() const ;
void setName(string name);
void setAge(int age);
};
/* 请在这里填写答案 */
int main(){
Teacher a(“Wang”,20);
cout<<“name:”<<a.getName()<<endl;
cout<<“age:”<<a.getAge()<<endl;
a.setName(“Zhang”);
a.setAge(30);
cout<<“name:”<<a.getName()<<endl;
cout<<“age:”<<a.getAge()<<endl;
return 0;
}
1:答案
Teacher::Teacher(string name, int age) {
Teacher::name = name;
Teacher::age = age; //代码
}
string Teacher::getName() const {
return name;//代码
}
int Teacher::getAge() const {
return age;//代码
}
void Teacher::setName(string name) {
Teacher::name = name; //代码
}
void Teacher::setAge(int age) {
Teacher::age = age; //代码
}
6-2 加、不等和输入输出的运算符重载(2维向量Vec2)
维向量类Vec2,类的声明见给出的代码,请给出类的完整实现,并通过测试程序。类的声明包括如下内容:
- 数据成员,向量的第一维u和第二维v;
- u和v的访问函数;
- 构造函数;
- 加号、减号运算符重载(遵守二维向量的运算规则);
- 和!=运算符重载(遵守二维向量的运算规则)
输入、输出运算符重载。class Vec2{
private:
double u;
double v;
public:
Vec2(double u=0,double v=0);
double getU() const;
double getV() const;
Vec2 operator+(const Vec2&b);
friend Vec2 operator-(const Vec2&a,const Vec2&b);
bool operator(const Vec2&b) const;
friend bool operator!=(const Vec2&a,const Vec2&b);
friend ostream&operator<<(ostream&os,const Vec2&c);
friend istream&operator>>(istream&is,Vec2&c);
};
测试程序:
#include
using namespace std;
class Vec2{
private:
double u;
double v;
public:
Vec2(double u=0,double v=0);
double getU() const;
double getV() const;
Vec2 operator+(const Vec2&b);
friend Vec2 operator-(const Vec2&a,const Vec2&b);
bool operator==(const Vec2&b) const;
friend bool operator!=(const Vec2&a,const Vec2&b);
friend ostream&operator<<(ostream&os,const Vec2&c);
friend istream&operator>>(istream&is,Vec2&c);
};
double Vec2::getU() const
{
return u;
}
double Vec2::getV() const
{
return v;
}
Vec2 operator-(const Vec2&a,const Vec2&b){
return Vec2(a.u-b.u,a.v-b.v);
}
bool Vec2::operator==(const Vec2&b) const{
return ub.u&&vb.v;
}
/* 请在这里填写答案 */
int main(){
Vec2 a;
cin>>a;
cout<<"a: "<<a<<endl;
Vec2 b(3,4);
Vec2 c=a+b;
cout<<"c: "<<c<<endl;
Vec2 d=a-b;
cout<<"d: "<<d<<endl;
cout<<"aa: "<<(aa)<<endl;
cout<<"a!=a: "<<(a!=a)<<endl;
return 0;
}
测试程序的输入:
10 5
测试程序的输出:
a: u=10,v=5
c: u=13,v=9
d: u=7,v=1
a==a: 1
a!=a: 0
2、答案:
Vec2::Vec2(double u, double v ) {
Vec2::u = u;
Vec2::v = v;
}
Vec2 Vec2::operator+(const Vec2 &b) {
return Vec2(u + b.u, v + b.v);
}
bool operator!=(const Vec2 &a, const Vec2 &b) {
return a.u != b.u || a.v != b.v;
}
ostream &operator<<(ostream &os, const Vec2 &c) {
os << " u=" << c.u << “,v=” << c.v;
}
istream &operator>>(istream &is, Vec2 &c) {
is >> c.u >> c.v;
}
6-3 继承和多态(水果和香蕉)
分数 10
全屏浏览题目
切换布局
作者 刘骥
单位 重庆大学
请设计水果和香蕉类,并通过测试程序,具体要求如下:
- 水果(Fruit)是基类,成员包含:
o 保护成员变量重量(weight,int类型)
o 公有构造函数
o 公有析构函数
o 公有函数display - 香蕉(Banana)从水果类公有继承,成员包含:
o 私有成员变量产地(origin,string类型)
o 公有构造函数
o 公有析构函数
o 公有函数display
对应代码
3、答案:
class Fruit {
protected:
int weight;
public:
Fruit(int i) {
weight = i;
cout << “Fruit Constructor” << endl;
}
virtual ~Fruit() {
cout << “Fruit Destructor” << endl;
}
virtual void display() {
cout << “weight=” << weight << endl;
}
};
class Banana: public Fruit {
private:
string origin;
public :
Banana(string o, int i): Fruit(i) {
origin = o;
weight = i;
cout << “Banana Constructor” << endl;
}
~Banana() {
cout << "Banana Destructor" << endl;
}
void display() {
cout << "origin=" << origin << ",weight=" << weight << endl;
}
};
二、编程题:
1、答案:
#include
#include
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if (a % b == 0)
cout << a + b << endl;
else
cout << a - b << endl;
return 0;
}
7-2 逆序整数
分数 10
全屏浏览题目
切换布局
作者 葛亮
单位 重庆大学
对于n位的两个正整数x和y,可以把x表示为x1x2…xn,其中xi(1≤i≤n)表示整数x第i位上的数字;把y表示为y1y2…yn,其中yi(1≤i≤n)表示整数y第i位上的数字。如果x1+k=yn−k(0≤k≤n−1)始终成立,则x和y互为逆序整数。