-->
当前位置:首页 > 题库 > 正文内容

湖州师范学院2020 C++程序设计 期末考试

Luz3年前 (2021-08-14)题库2608

湖州师范学院20202021学年第 1 学期

C++程序设计》期末考试卷(A卷)


得分

一、 读程序,写答案 (每空2分,共30分)



 

1. 6空)

#include <iostream>

using namespace std;

 

class CSample {

  int x;

public:

  CSample()

  {

    cout << "C1" << endl;

  }

  CSample(int n )

  {

    x = n;

    cout << "C2,x=" << x << endl;

  }

};

 

int main()

{

  CSample array1;

  CSample array2[3] = {3, 7};

  CSample array3[2] = {22};

  return 0;

}

2. 5空)

#include <iostream>

using namespace std;

 

class Sample {

public:

  int v;

  Sample()

  {

    v = 0;

  };

  Sample(int n): v(n) { };

  Sample(const Sample &x)

  {

    v = 1 + x.v;

  }

};

 

Sample PrintAndDouble(Sample o)

{

  cout << o.v << endl;

  o.v = o.v * 3;

  return o;

}

 

int main()

{

  Sample a(4);

  cout << a.v << endl;

  Sample b = a;

  cout << b.v << endl;

  Sample c = PrintAndDouble(b);

  cout << c.v << endl;

  Sample d;

  d = a;

  cout << d.v << endl;;

  return 0;

}

3. 4空)

#include <iostream>

using namespace std;

 

class C {

private:

  int x;

  double y;

public:

  C()

  {

    x = 0;

    y = 0;

  }

  void ask(int);

  void ask(double);

  void ask(int, double);

  void ask();

};

 

void C::ask(int a)

{

  x = a;

}

void C::ask(double b)

{

  y = b;

}

 

void C::ask(int a, double b)

{

  x = a;

  y = b;

}

 

void C::ask()

{

  cout << "x=" << x << ",y=" << y << endl;

}

 

int main()

{

  C c;

  c.ask();

  c.ask(6, 8.2);

  c.ask();

  c.ask(3);

  c.ask();

  c.ask(9.2);

  c.ask();

}

 


 

得分

二、 类和对象程序设计(20分)


现在需要录入一批学生的成绩(学号,成绩)。其中学号是正整数,并且录入时,后录入学生的学号会比前面的学号大;成绩分两等,通过(Pass,录入时用1代表),不通过(Fail,录入时用0代表)。

由于很多学号都是相邻的,并且学号相邻的学生成绩常常相同。所以在录入时,适当地加了速。如果当前学生的学号比前面的学号大1,且成绩与前面的成绩相同,则只输入0即可。

要求:完成Student类定义,使得以下程序能够按要求运行。

 

#include <iostream>

using namespace std;

 

/* Student类定义 */

 

int main() {

       const int size = 100;

       int i, N, no, score;

       Student *st[size];

       cin >> N;

       for (i = 0; i < N; i++) {

              cin >> no;

              if (no > 0) {

                     cin >> score;

                     st[i] = new Student(no, score);

              } else

                     st[i] = new Student(*st[i - 1]);

       }

       cout << Student::count << " Students" << endl;

       for (i = 0; i < N; i++)

              st[i]->display();

       for (i = 0; i < N; i++)

              delete st[i];

       return 0;

}

 

输入样例:

5

3 0

0

7 1

0

12 1

输出样例:

5   Students

3 Fail

4 Fail

7 Pass

8 Pass

12 Pass

 

得分

三、类模板程序设计(20分)


实现一个类模板,它可以接受一组数据,能对数据排序,也能输出数组的内容。每行输入的第一个数字为0123:0时表示输入结束; 1时表示将输入整数,为2时表示将输入有一位小数的浮点数,为3时表示输入字符。如果第一个数字非0,则接下来将输入一个正整数,表示即将输入的数据的数量。从每行第三个输入开始,依次输入指定类型的数据。

类模板:template <class T> class MyArray

裁判测试程序样例:

#include <iostream>

using namespace std;

 

/* 你的代码将放到这里 */

 

template<class T> MyArray<T>::~MyArray() {

     delete[] data;

}

 

template<class T> bool MyArray<T>::check() {

     int i;

     for (i = 0; i < size - 1; i++)

       if (data[i] > data[i + 1]) {

              cout << "ERROR!" << endl;

              return false;

       }

     return true;

}

 

int main( ) {

     MyArray<int> *pI;

     MyArray<float> *pF;

     MyArray<char> *pC;

     int ty, size;

     cin >> ty;

     while (ty > 0) {

       cin >> size;

       switch (ty) {

              case 1:

                     pI = new MyArray<int>(size);

                     pI->sort();

                     pI->check();

                     pI->display();

                     delete pI;

                     break;

              case 2:

                     pF = new MyArray<float>(size);

                     pF->sort();

                     pF->check();

                     pF->display();

                     delete pF;

                     break;

              case 3:

                     pC = new MyArray<char>(size);

                     pC->sort();

                     pC->check();

                     pC->display();

                     delete pC;

                     break;

       }

       cin >> ty;

     }

     return 0;

}

 

输入样例:

1 3 2 3   1

2 4 1.5   2.6 3.7 0.5

3 2 A a

0

输出样例:

1 2 3

0.5 1.5   2.6 3.7

A a

 

 

得分

四、 继承和多态程序设计 30分)

 


学期结束,班主任决定表彰一批学生,已知该班学生数在650人之间,有三类学生:普通生,特招运动员,学科专长生,其中学科专长生不超过5人。主函数根据输入的信息,相应建立GroupA, GroupB, GroupC类对象。

1.         GroupA类是普通生,有2门课程的成绩(均为不超过100的非负整数);

2.         GroupB类是特招运动员,有2门课程的成绩(均为不超过100的非负整数),1次运动会的表现分,表现分有:ABCD4等。

3.         GroupC类是学科专长生,有5门课程的成绩(均为不超过100的非负整数)。

表彰人员至少符合以下3个条件中的一个:

1.         2门课程平均分在普通生和特招运动员中,名列第一者。

a. 该平均分称为获奖线。

b. 存在成绩并列时,则全部表彰,例如某次考试有2人并列第1,则他们全部表彰。

2.         5门课程平均分达到或超过获奖线90%的学科专长生,给予表彰。

3.         2门课程平均分达到或超过获奖线70%的特招运动员,如果其运动会表现分为A,给予表彰。

输入格式:每个测试用例占一行,第一项为类型,1为普通生,2为特招运动员,3为学科专长生, 输入0表示输入的结束。第二项是学号,第三项是姓名。对于普通生来说,共输入5项,第45项是课程成绩。对于特招运动员来说,共输入6项,第45项是课程成绩,第6项是运动会表现。对于学科专长生来说,共输入8项,第45678项是课程成绩。

输出时,打印要表彰的学生的学号和姓名。(输出顺序与要表彰学生的输入前后次序一致)。构造函数要用初始化列表。

函数接口定义:以Student为基类,构建GroupA, GroupBGroupC三个类

裁判测试程序样例:

 

#include <iostream>

#include <string>

using namespace std;

 

/* 你的代码将放到这里 */

 

int main() {

       const int Size = 50;

       string num, name;

       int i, ty, s1, s2, s3, s4, s5;

       char gs;

       Student *pS[Size];

       int count = 0;

       for (i = 0; i < Size; i++) {

              cin >> ty;

              if (ty == 0)

                     break;

              cin >> num >> name >> s1 >> s2;

              switch (ty) {

                     case 1:

                            pS[count++] = new GroupA(num, name, s1, s2);

                            break;

                     case 2:

                            cin >> gs;

                            pS[count++] = new GroupB(num, name, s1, s2, gs);

                            break;

                     case 3:

                            cin >> s3 >> s4 >> s5;

                            pS[count++] = new GroupC(num, name, s1, s2, s3, s4, s5);

                            break;

              }

       }

       for (i = 0; i < count; i++) {

              pS[i]->display();

              delete pS[i];

       }

       return 0;

}

输入样例:

1 001   AAAA 96 80

2 009   BBB 82 75 A

1 007   CC 100 99

3 012   CCCC 97 95 90 99 93

1 003   DDD 62 50

1 022   ABCE 78 92

2 010   FFF 45 40 A

3 019   AAA 93 97 94 82 80

0

输出样例:

009 BBB

007 CC

012   CCCC

 



湖州师范学院20202021学年第 1 学期

C++程序设计》期末考试卷(B卷)


得分

一、 读程序,写答案 (每空2分,共30分)



 

1.7空)

#include <iostream>

using namespace std;

 

class B {

public:

  B()

  {

    cout << ++b << endl;

  }

  ~B()

  {

    cout << --b << endl;

  }

  static int Getb()

  {

    return b;

  }

private:

  static int b;

};

int B::b = 100;

 

int main()

{

  B b1, b2, b3;

  cout << B::Getb() << endl;

  return 0;

}

 

2.4空)

#include <iostream>

using namespace std;

 

class A {

public :

  virtual ~A()

  {

    cout << "Destruct 1" << endl;

  }

};

 

class B: public A {

public:

  virtual ~B()

  {

    cout << "Destruct 2" << endl;

  }

};

 

class C: public B {

public:

  ~C()

  {

    cout << "Destruct 3" << endl;

  }

};

 

int main()

{

  A *pa = new C;

  delete pa;

  A a;

  return 0;

}

 

3.4空)

#include <iostream>

using namespace std;

 

class A {

public:

  A( ) { }

  virtual void func()

  {

    cout << "A::func" << endl;

  }

  virtual void fund( )

  {

    cout << "A::fund" << endl;

  }

  void fun()

  {

    cout << "A::fun" << endl;

  }

};

 

class B: public A {

public:

  B ( )

  {

    func( ) ;

  }

  void fun( )

  {

    func( ) ;

  }

};

 

class C : public B {

public :

  C( ) { }

  void func( )

  {

    cout << "C::func" << endl;

  }

  void fund()

  {

    cout << "C::fund" << endl;

  }

};

 

int main()

{

  A *pa = new B();

  pa->fun();

  B *pb = new C();

  pb->fun();

  return 0;

}


 

得分

二、 类和对象程序设计(20分)


定义一个Point类,代表平面上的一个点,其横坐标和纵坐标分别用xy表示,设计Point类的成员函数,实现并测试这个类。 主函数中输入两个点的坐标,计算并输出了两点间的距离。请根据主函数实现Point类。

裁判测试程序样例:

#include <iostream>

#include <iomanip>

#include <cmath>

using namespace std;

 

//你的代码将被嵌在这里

 

int main() {

       Point p1, p2;

       double x1, y1, x2, y2;

       cin >> x1 >> y1 >> x2 >> y2;

       p1.setX(x1);

       p1.setY(y1);

       p2.setX(x2);

       p2.setY(y2);

       double x = p1.getX() - p2.getX();

       double y = p1.getY() - p2.getY();

       double len = sqrt(x * x + y * y);

       cout << fixed << setprecision(2) << len << endl;

       return 0;

}

 

输入样例:

0 0 3 3

输出样例:

4.24

 

得分

三、 继承和多态程序设计(20分)

 


完成两个类,一个类Animal,表示动物类,有一个成员表示年龄。一个类Dog,继承自Animal,有一个新的数据成员表示颜色,合理设计这两个类,使得测试程序可以运行并得到正确的结果。

 

/* 你的代码将被嵌在这里 */

 

int main() {

       Animal ani(5);

       cout << "age of ani:" << ani.getAge() << endl;

       Dog dog(5, "black");

       cout << "infor of dog:" << endl;

       dog.showInfor();

}

 

输入样例:

输出样例:

age of   ani:5

infor   of dog:

age:5

color:black

得分

四、类模板程序设计(30分)


复数类Complex有两个数据成员:ab, 分别代表复数的实部和虚部,并有若干构造函数和一个重载-(减号,用于计算两个复数的距离)的成员函数。 要求设计一个函数模板。

template < class T > double dist(T a, T b)

intfloatComplex或者其他类型的数据,返回两个数据的间距。以上类名和函数模板的形式,均须按照题目要求,不得修改。

输入格式:

每一行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3Complex类型,若为整型元素,接着输入两个整型数据,若为浮点型元素,接着输入两个浮点型数据,若为Complex型元素,输入两个Complex型数据(a1 b1 a2 b2),输入0时标志输入结束。

输出格式:

对每个输入,每行输出一个间距值。

 

输入样例:

1 2 5

3 2 4 5   9

2 2.2   9.9

0

输出样例:

3

5.83095

7.7

 

 


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。