飞道的博客

重庆大学c++2022级-期末模拟考试

753人阅读  评论(0)

A.单选题

2-1下列程序代码,正确的输出结果是( )

 
 

   
  1. int a= 0xfe;
  2. char b= 062;
  3. cout<<a<< ","<<b<<endl;

A.

0xfe,062

B.

fe,62

C.

254,2

D.

254,62

 

2-2下列代码能正确执行的是( )

A.

 
 

   
  1. char a= 'C';
  2. const char& p=a;

B.

 
 

   
  1. char a= 'C';
  2. char* const p;
  3. p=&a;

C.

 
 

   
  1. char a= 'C';
  2. const char& p;
  3. p=a;

D.

 
 

   
  1. char a= 'C';
  2. char& p;
  3. p=a;

 2-3

new和delete运算符正确的使用是( )

A.

 
 
int* p=new int[10]; delete p;

B.

 
 
int* p=new int(10); delete []p;

C.

 
 
vector<int>* v=new vector<int>[10]; delete []v;

D.

 
 
int* a=new int[]{1,2,3,4}; delete []a;

 2-4

下列哪个代码能够实现x和y值的交换( )

A.

 
 

   
  1. void fun(int a,int b) {
  2. int x = a;
  3. a = b;
  4. b = x;
  5. }
  6. int main() {
  7. int x = 1, y = 2;
  8. fun(&x, &y);
  9. cout << x << ","<<y << endl;
  10. return 0;
  11. }

B.


   
  1. void fun(int* a,int* b) {
  2. int x = *a;
  3. *a = *b;
  4. *b = x;
  5. }
  6. int main() {
  7. int x = 1, y = 2;
  8. fun(&x,&y);
  9. cout << x << ","<<y << endl;
  10. return 0;
  11. }

C.


   
  1. void fun(int& a,int& b) {
  2. int x = a;
  3. a = b;
  4. b = x;
  5. }
  6. int main() {
  7. int x = 1, y = 2;
  8. fun(&x, &y);
  9. cout << x << ","<<y << endl;
  10. return 0;
  11. }

D.


   
  1. void fun(const int&a,const int&b) {
  2. int x = a;
  3. a = b;
  4. b = x;
  5. }
  6. int main() {
  7. int x = 1, y = 2;
  8. fun(x, y);
  9. cout << x << ","<<y << endl;
  10. return 0;
  11. }

 

 2-5

下面有一个结构体,对结构体的错误使用是( )


   
  1. struct Book{
  2. string name;
  3. double price;
  4. }

A

Book b{"C++",20};

B


   
  1. Book b;
  2. b->name= "C++";
  3. b->price= 20;

C


   
  1. Book *b= new Book[ 2];
  2. b[ 0].name= "C++";
  3. b[ 0].price= 20;

D


   
  1. Book *p= new Book();
  2. p->name= "C++";
  3. p->price= 20;

 2-6

下列种类的函数中,哪一种不是类的成员函数?

A.

构造函数

B.

析构函数

C.

友元函数

D.

拷贝构造函数

2-7 

父类Base和子类Derive的定义如下。请问在子类中,继承的父类成员f,x,y的访问控制权限分别是:


   
  1. class Base
  2. {
  3. public:
  4. void f();
  5. protected:
  6. int x;
  7. private:
  8. int y;
  9. };
  10. class Derive : protected Base
  11. {
  12. };

A.

public, protected, private

B.

public, public, public

C.

private, private, private

D.

protected, protected, private

 2-8

当变量x的输入值是9时,下面程序的运行结果是:


   
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. int x;
  7. cin>>x;
  8. try
  9. {
  10. cout<< "begin"<<endl;
  11. if(x> 100)
  12. {
  13. cout<< "1"<<endl;
  14. throw string( "too big.");
  15. }
  16. else
  17. {
  18. cout<< "x="<<x<<endl;
  19. }
  20. cout<< "2"<<endl;
  21. }
  22. catch(string e)
  23. {
  24. cout<< "3:"<<e<<endl;
  25. }
  26. cout<< "end"<<endl;
  27. return 0;
  28. }

A


   
  1. begin
  2. 1
  3. 2
  4. end

B


   
  1. begin
  2. 1
  3. 3: too big.
  4. 2
  5. end

C


   
  1. begin
  2. x= 9
  3. 2
  4. end

D


   
  1. begin
  2. 1
  3. 3: too big.
  4. end

 2-9

下列哪个代码不会调用对象的拷贝构造函数( C)


  
  1. A.
  2. MyClass a;
  3. MyClass b=a;
  4. B.
  5. MyClass a;
  6. MyClass b(a);
  7. C.
  8. MyClass a;
  9. MyClass& b=a;
  10. D.
  11. void f(MyClass obj)
  12. {
  13. ....
  14. }
  15. MyClass a;
  16. f(a);

2-10根据下列类模板声明,正确初始化对象的方式是( A)


   
  1. template< typename T1, typename T2>
  2. class MyClass{
  3. private:
  4. T1 x;
  5. T2 y;
  6. public:
  7. MyClass(T1 _x, T2 _y): x(_x), y(_y){}
  8. };

  
  1. A.
  2. MyClass<int,char> a(10,'a');
  3. B.
  4. MyClass a(10,'a');
  5. C.
  6. MyClass< int, char> a;
  7. D.
  8. MyClass a;

Fn函数题

 

6-1 类的定义(教师类Teacher)

分数 10

全屏浏览题目

切换布局

作者 刘骥

单位 重庆大学

本题要求定义一个教师类Teacher,数据成员包含姓名name和年龄age,类的声明见给出的代码,请给出类的完整实现,并通过测试程序。

类的声明:

 
 

   
  1. class Teacher{
  2. private:
  3. string name;
  4. int age;
  5. public:
  6. Teacher(string name, int age);
  7. string getName() const;
  8. int getAge() const ;
  9. void setName(string name);
  10. void setAge(int age);
  11. };

测试程序:

 
 

   
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. class Teacher{
  5. private:
  6. string name;
  7. int age;
  8. public:
  9. Teacher(string name, int age);
  10. string getName() const;
  11. int getAge() const ;
  12. void setName(string name);
  13. void setAge(int age);
  14. };
  15. /* 请在这里填写答案 */
  16. int main(){
  17. Teacher a("Wang",20);
  18. cout<< "name:"<<a. getName()<<endl;
  19. cout<< "age:"<<a. getAge()<<endl;
  20. a. setName( "Zhang");
  21. a. setAge( 30);
  22. cout<< "name:"<<a. getName()<<endl;
  23. cout<< "age:"<<a. getAge()<<endl;
  24. return 0;
  25. }

测试程序的输入:


测试程序的输出:


   
  1. name:Wang
  2. age: 20
  3. name:Zhang
  4. age: 30

注意:“:”是英文冒号

提示

下列代码为类实现的骨架代码


   
  1. Teacher:: Teacher(string name, int age){
  2. //代码
  3. }
  4. string Teacher::getName() const{
  5. //代码
  6. }
  7. int Teacher::getAge() const{
  8. //代码
  9. }
  10. void Teacher::setName(string name)
  11. {
  12. //代码
  13. }
  14. void Teacher::setAge(int age)
  15. {
  16. //代码
  17. }

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

 参考答案


   
  1. /* 请在这里填写答案 */
  2. Teacher:: Teacher(string name, int age)
  3. {
  4. //代码
  5. this->name = name;
  6. this->age = age;
  7. }
  8. string Teacher::getName() const
  9. {
  10. //代码
  11. return name;
  12. }
  13. int Teacher::getAge() const
  14. {
  15. //代码
  16. return age;
  17. }
  18. void Teacher::setName(string name)
  19. {
  20. //代码
  21. this->name = name;
  22. }
  23. void Teacher::setAge(int age)
  24. {
  25. //代码
  26. this->age = age;
  27. }

 

 

6-2 加、不等和输入输出的运算符重载(2维向量Vec2)

分数 10

全屏浏览题目

切换布局

作者 刘骥

单位 重庆大学

本题要求定义一个二维向量类Vec2,类的声明见给出的代码,请给出类的完整实现,并通过测试程序。类的声明包括如下内容:

  1. 数据成员,向量的第一维u和第二维v;
  2. u和v的访问函数;
  3. 构造函数;
  4. 加号、减号运算符重载(遵守二维向量的运算规则);
  5. ==和!=运算符重载(遵守二维向量的运算规则)
  6. 输入、输出运算符重载。

类实现代码需要补充构造函数以及加、不等、输入输出运算。

类的声明:


   
  1. class Vec2{
  2. private:
  3. double u;
  4. double v;
  5. public:
  6. Vec2( double u= 0, double v= 0);
  7. double getU() const;
  8. double getV() const;
  9. Vec2 operator+( const Vec2&b);
  10. friend Vec2 operator-( const Vec2&a, const Vec2&b);
  11. bool operator==( const Vec2&b) const;
  12. friend bool operator!=( const Vec2&a, const Vec2&b);
  13. friend ostream& operator<<(ostream&os, const Vec2&c);
  14. friend istream& operator>>(istream&is,Vec2&c);
  15. };

测试程序:


   
  1. #include<iostream>
  2. using namespace std;
  3. class Vec2{
  4. private:
  5. double u;
  6. double v;
  7. public:
  8. Vec2( double u= 0, double v= 0);
  9. double getU() const;
  10. double getV() const;
  11. Vec2 operator+( const Vec2&b);
  12. friend Vec2 operator-( const Vec2&a, const Vec2&b);
  13. bool operator==( const Vec2&b) const;
  14. friend bool operator!=( const Vec2&a, const Vec2&b);
  15. friend ostream& operator<<(ostream&os, const Vec2&c);
  16. friend istream& operator>>(istream&is,Vec2&c);
  17. };
  18. double Vec2::getU() const
  19. {
  20. return u;
  21. }
  22. double Vec2::getV() const
  23. {
  24. return v;
  25. }
  26. Vec2 operator-( const Vec2&a, const Vec2&b){
  27. return Vec2(a.u-b.u,a.v-b.v);
  28. }
  29. bool Vec2:: operator==( const Vec2&b) const{
  30. return u==b.u&&v==b.v;
  31. }
  32. /* 请在这里填写答案 */
  33. int main(){
  34. Vec2 a;
  35. cin>>a;
  36. cout<< "a: "<<a<<endl;
  37. Vec2 b(3,4);
  38. Vec2 c=a+b;
  39. cout<< "c: "<<c<<endl;
  40. Vec2 d=a-b;
  41. cout<< "d: "<<d<<endl;
  42. cout<< "a==a: "<<(a==a)<<endl;
  43. cout<< "a!=a: "<<(a!=a)<<endl;
  44. return 0;
  45. }

测试程序的输入:

10 5

测试程序的输出:


   
  1. a: u= 10,v= 5
  2. c: u= 13,v= 9
  3. d: u= 7,v= 1
  4. a==a: 1
  5. a!=a: 0

注意:“:”和“,”为英文,“:”后有一个空格

提示

下列代码为类实现的骨架代码


   
  1. Vec2:: Vec2( double u, double v){
  2. //代码
  3. }
  4. Vec2 Vec2:: operator+( const Vec2&b){
  5. //代码
  6. }
  7. bool operator!=( const Vec2&a, const Vec2&b)
  8. {
  9. //代码
  10. }
  11. ostream& operator<<(ostream&os, const Vec2&c){
  12. //代码
  13. }
  14. istream& operator>>(istream&is,Vec2&c){
  15. //代码
  16. }

参考答案


   
  1. Vec2:: Vec2( double u, double v)
  2. {
  3. //代码
  4. this->u = u;
  5. this->v = v;
  6. }
  7. Vec2 Vec2:: operator+( const Vec2& b)
  8. {
  9. //代码
  10. Vec2 temp;
  11. temp.u = this->u + b.u;
  12. temp.v = this->v + b.v;
  13. return temp;
  14. }
  15. bool operator!=( const Vec2& a, const Vec2& b)
  16. {
  17. //代码
  18. if (a.u == b.u && a.v == b.v)
  19. {
  20. return 0;
  21. }
  22. return 1;
  23. }
  24. ostream& operator<<(ostream& os, const Vec2& c)
  25. {
  26. //代码
  27. os << "u=" << c.u << ",v=" << c.v;
  28. return os;
  29. }
  30. istream& operator>>(istream& is, Vec2& c)
  31. {
  32. //代码
  33. is >> c.u >> c.v;
  34. return is;
  35. }

6-3 继承和多态(水果和香蕉)

请设计水果和香蕉类,并通过测试程序,具体要求如下:

  1. 水果(Fruit)是基类,成员包含:
    • 保护成员变量重量(weight,int类型)
    • 公有构造函数
    • 公有析构函数
    • 公有函数display
  2. 香蕉(Banana)从水果类公有继承,成员包含:
    • 私有成员变量产地(origin,string类型)
    • 公有构造函数
    • 公有析构函数
    • 公有函数display

对应代码


   
  1. Fruit f(10);
  2. f. display();

输出为:


   
  1. Fruit Constructor
  2. weight= 10
  3. Fruit Destructor

对应代码


   
  1. Banana a("Chongqing",10);
  2. a. display();

输出为:


   
  1. Fruit Constructor
  2. Banana Constructor
  3. origin=Chongqing,weight= 10
  4. Banana Destructor
  5. Fruit Destructor

对应代码


   
  1. Fruit *pf= new Banana( "Chongqing", 10);;
  2. pf-> display();
  3. delete pf;

输出为:


   
  1. Fruit Constructor
  2. Banana Constructor
  3. origin=Chongqing,weight= 10
  4. Banana Destructor
  5. Fruit Destructor

测试程序


   
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. /* 请在这里填写答案 */
  5. int main(){
  6. Fruit *pf= new Banana( "Chongqing", 10);;
  7. pf-> display();
  8. delete pf;
  9. return 0;
  10. }

测试程序的输入


   

测试程序的输出


   
  1. Fruit Constructor
  2. Banana Constructor
  3. origin=Chongqing,weight= 10
  4. Banana Destructor
  5. Fruit Destructor

参考答案


   
  1. class Fruit
  2. {
  3. public:
  4. Fruit()
  5. {
  6. cout << "Fruit Constructor" << endl;
  7. }
  8. Fruit( int a)
  9. {
  10. cout << "Fruit Constructor" << endl;
  11. weight = a;
  12. }
  13. virtual void display()
  14. {
  15. cout << "weight=" << weight << endl;
  16. }
  17. virtual ~ Fruit()
  18. {
  19. cout << "Fruit Destructor" << endl;
  20. }
  21. protected:
  22. int weight;
  23. };
  24. class Banana : public Fruit
  25. {
  26. public:
  27. Banana(string str, int weit)
  28. {
  29. cout << "Banana Constructor" << endl;
  30. weight = weit;
  31. origin = str;
  32. }
  33. void display()
  34. {
  35. cout << "origin=" << origin << ",weight=" << weight << endl;
  36. }
  37. ~ Banana()
  38. {
  39. cout << "Banana Destructor" << endl;
  40. }
  41. private:
  42. string origin;
  43. };

 编程题

7-1 约数

分数 10

全屏浏览题目

切换布局

作者 葛亮

单位 重庆大学

当整数a除以整数b(b≠0),除得的商正好是整数而没有余数时,称b是a的约数。给你两个正整数A和B, 如果B是A的约数,请打印输出A+B, 否则打印输出A−B。

输入格式:

输入包括两个正整数A和B(1≤B≤A≤100)。

输出格式:

输出结果。

输入样例1:

12 4

输出样例1:

16

输入样例2:

20 8

输出样例2:

12

输入样例3:

1 1

输出样例3:

2

 


   
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a, b;
  6. cin >> a >> b;
  7. bool flag = 0;
  8. if (a % b == 0)
  9. {
  10. flag = 1;
  11. }
  12. if (flag == 1)
  13. {
  14. cout << a + b;
  15. }
  16. else
  17. {
  18. cout << a - b;
  19. }
  20. }

 

7-2 逆序整数

分数 10

全屏浏览题目

切换布局

作者 葛亮

单位 重庆大学

对于n位的两个正整数x和y,可以把x表示为x1​x2​…xn​,其中xi​(1≤i≤n)表示整数x第i位上的数字;把y表示为y1​y2​…yn​,其中yi​(1≤i≤n)表示整数y第i位上的数字。如果x1+k​=yn−k​(0≤k≤n−1)始终成立,则x和y互为逆序整数。

给你两个正整数A和B, 判断两个整数是否互为逆序整数,并输出相应的结果。

注:题目保证正整数A和B的个位数字不是0。

输入格式:

先在第一行输入位数n,然后在接下来的两行分别输入位数为n的正整数A和B(1≤n≤50)。

输出格式:

输入样例1:


   
  1. 2
  2. 89
  3. 98

输出样例1:

89 and 98 are reverse.

输入样例2:


   
  1. 3
  2. 981
  3. 289

输出样例2:

981 and 289 are not reverse.

提示:

输入的两个正整数可能会超过long long int所能表示数的范围。可以用字符串来表示正整数。

输出结果以“.”结尾。

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

 


   
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int n;
  6. string A; string B;
  7. cin >> n;
  8. cin >> A >> B;
  9. int cishu = 0;
  10. for ( int k = 0; k < n; k++)
  11. {
  12. if (A[k] == B[n - 1 - k])
  13. {
  14. cishu;
  15. }
  16. else
  17. {
  18. cishu++;
  19. }
  20. }
  21. if (cishu == 0)
  22. {
  23. cout << A << " and " << B << " are reverse.";
  24. }
  25. else
  26. {
  27. cout << A << " and " << B << " are not reverse.";
  28. }
  29. }

 

7-3 一维世界的疫情传播

分数 10

全屏浏览题目

切换布局

作者 葛亮

单位 重庆大学

可怕的阿尔法病毒正在一维世界传播,如果某人的活动范围与病毒携带者的活动范围有交集,则有被感染的可能。假设有一名病毒携带者A在位于X的家附近活动,他到过的地方用xi​表示(这些地点不重复),对于X和xi​之间的区域,都认为是A的活动范围。另外有一名健康者B,他在位于Y的家附近活动,他到过的地方用yi​表示(这些地点不重复),对于Y和yi​之间的区域,都认为是B的活动范围。所有的地点都位于整数点上,−100≤X,Y,xi​,yi​≤100,X=Y,xi​=X,yi​=Y。现在需要判断B是否有被感染的可能。

输入格式:

第一行输入N,M,X,Y四个整数,接下来2行分别是N个xi​和M个yi​的值。整数值之间都用空格隔开。具体如下:

NMXY

x1​x2​…xN​

y1​y2​…yM​

输出格式:

用家的位置表示A和B两人,输出是否有被感染的可能,具体格式请参见样例。

输入样例1:


   
  1. 3 2 10 20
  2. 8 15 13
  3. 16 22

输出样例1:

10 and 20: impossible

输入样例2:


   
  1. 4 2 -48 -1
  2. -20 -35 -91 -23
  3. -22 66

输出样例2:

-48 and -1: possible

输入样例3:


   
  1. 5 3 6 8
  2. -10 3 1 5 -100
  3. 100 6 14

输出样例3:

6 and 8: possible

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

 


   
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int N, M, X, Y;
  6. cin >> N >> M >> X >> Y;
  7. int* x = new int[N];
  8. int* y = new int[M];
  9. //lipu
  10. int x_Max = X, x_Min = X;
  11. int y_Max = Y, y_Min = Y;
  12. for ( int i = 0; i < N;i++)
  13. {
  14. cin >> x[i];
  15. if (x[i] > x_Max)
  16. {
  17. x_Max = x[i];
  18. }
  19. if (x[i] < x_Min)
  20. {
  21. x_Min = x[i];
  22. } //找到x小组数据区间x_Min-x_Max;
  23. }
  24. for ( int i = 0; i < M; i++)
  25. {
  26. cin >> y[i];
  27. if (y[i] > y_Max)
  28. {
  29. y_Max = y[i];
  30. }
  31. if (y[i] < y_Min)
  32. {
  33. y_Min = y[i];
  34. } //找到y小组数据区间x_Min-x_Max;
  35. }
  36. bool isPossible = 0;
  37. if (x_Max < y_Min || y_Max < x_Min)
  38. {
  39. isPossible = 0;
  40. }
  41. else
  42. {
  43. isPossible = 1;
  44. }
  45. if (isPossible == 1)
  46. {
  47. cout << X << " and " << Y << ": possible";
  48. }
  49. else
  50. {
  51. cout << X << " and " << Y << ": impossible";
  52. }
  53. return 0;
  54. }

 


转载:https://blog.csdn.net/mo_zhongzhou/article/details/128111251
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场