编程语言
首页 > 编程语言> > C++刷题系列 操作题考试题库_第一套

C++刷题系列 操作题考试题库_第一套

作者:互联网

文章目录


前言

寒假了,寒假了o( ̄▽ ̄)ブ,已经回来在家好多天了。在家没事想着没事买本C++的题库,做做题好好的练习练习自己逻辑思维以及实际的写代码的能力,今天这是打卡的第一天,话不多说上题!


一、C++刷题系列 操作题考试题库_第一套

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、第一套 操作题考试题库

1.基本操作题

每个注释之后的一行语句有错误,改正这些错误,使程序的输出结果为:1 2 3 4 5 6 7 8 9 10。题目程序的解释如我在图中的注释所示:

代码如下:

// proj1.cpp
#include <iostream>
using namespace std;

class MyClass {             //定义一个MyClass的类用以创建数组进行数据的写入及输出
public:
   MyClass(int len)         //设置形参len用以控制数组中元素的个数
   { 
      array = new int[len]; //利用new在堆栈区开辟空间
      arraySize = len;      
      for(int i = 0; i < arraySize; i++)  //通过for循环将0到len之间的数据全部传入array[]数组中
         array[i] = i+1;
   }

   ~MyClass()              //设置Myclass的析构函数对对象进行释放
   {
// ERROR   **********found**********
       delete array[i];  //正确应为delete[]array;
   }

   void Print() const       //写一个打印输出函数Print()
   {
      for(int i = 0; i < arraySize; i++)    //通过for循环将0到arraySize=len的数值全部打印输出
// ERROR   **********found**********
         cin << array[i] << ' ';    //正确输出应为cout<<array[i]<<"";
       cout << endl;
    }
private:                         //私有类
   int *array;
   int arraySize;
};
int main()
{
// ERROR   **********found**********
   MyClass obj;      //正确应为MyClass obj(10);通过obj来调用写好的函数进行输出
   obj.Print();      //根据实际的要求来确定输出的长度,题目要求0到10故为10
   return 0;
}

分析解题:
1、析构函数就是考查delete语句的用法,其一般形式为:delete[ ]+要释放的指针。
2、没什么说的就是利用cout进行输出,而cin使进行数据的写入操作。
3、要联系前面MyClass类的构造函数,注意到形参len没有定义的默认值,因此要想使array动态数组里依此存放1,2,3,4,5,6,7,8,9,10,就需要给len赋值为10。

2.简单应用题

SortedArray是Array的派生类,表示有序数组。SortedArray重新定义了Array中的add函数,以确保有序数组中的元素始终按照升序排列。请在程序中的横线上填写合适的代码。
并且实现下述类定义:
成员函数 add 用于向数组末尾添加一个元素。
成员函数get用于获取数组中指定位置的元素。
数据成员a表示实际用于存储数据的整型数组。
数据成员size表示数组容量,数组中的元素个数最多不能超过size。
数据成员num表示当前数组中的元素个数。

代码如下:

#include <iostream>
using namespace std;

class Array {
public:
  Array(unsigned int s)
  {
    size = s;
    num = 0;
    a = new int[s];
  }
	
  virtual ~Array() { delete[] a;	}
	
  virtual void add(int e)
  {
    if (num < size) {
      //**********found**********
      ___________
      num++;
    }
  }
	
  int get(unsigned int i) const
  {
    if (i < size)
      return a[i];
    return 0;
  }
	
protected:
  int *a;
  unsigned int size, num;
};

class SortedArray : public Array {
public:
  //**********found**********
  SortedArray(unsigned int s) : _______________ { }
	
  virtual void add(int e)
  {
    if (num >= size)
      return;
	
    int i=0, j;
    while (i < num) {
      if (e < a[i]) {
        for (j = num; j > i; j--) {
          //**********found**********
          _______________;
        }
        //**********found**********
        _______________;
        break;
      }
      i++;
    }
	
    if (i == num)
      a[i] = e;
    num++;
  }
};

void fun(Array& a)
{
  int i;
  for (i = 10; i >= 1; i--) {
    a.add(i);
  }
  for (i = 0; i < 10; i++) {
    cout << a.get(i) << ", ";
  }
  cout << endl;
}

int main()
{
  Array a(10);
  fun(a);
	
  SortedArray sa(10);
  fun(sa);
	
  return 0;
}

分析解题:
首先题目的整体思路非常的清晰,每个成员函数的功能题目中给出,剩下的是填空。
1、有关键字virtual,说明该函数是虚函数,在Array类的派生类里肯定会有对add函数的定义。
有关键字return说明没有返回值,add的意思是添加,它的形参是int e,综上考察的就是虚函数virtual void add(int e)的定义,即添加一个整型数e到a[num]中。即a[num]=e;
2、主要是Array类的派生类SortArray类的构造函数的定义,定义之前要对基础类进行初始化。即Array(s);
3、有题可知SortedArray类是排序类,所以数组a中的元素从小到大排序。在if( e < a[ i ] )条件下,要把i后的元素逐个后移一位,即为a[ j ]=a[ j-1 ];
4、主要考察虚函数virtual void add(int e )在派生类SortArray类中的定义,把插入的数据放在数组a的第 i+1个位置,即a[ i ]=e;

3.综合应用题

源程序文件如下所示,其中定义了用于表示二维向量的类MyVector;程序应当显示(6,8)
但程序有缺失部分,按照提示补充完整;
(1)在标志下方是构造函数的定义,它用参数提供的坐标对x和y进行初始化。
(2)在标志下方是减法运算函数定义中的一条语句。两个二维向量相减生成另一个二维向量:其X坐标等于两向量X坐标之差,其Y坐标等于Y坐标只差。
(3)在标志下方语句功能是使变量v3获得新值,他等于v1和v2之和。

代码如下:

// proj3.cpp
#include<iostream>
using std::ostream;
using std::cout;
using std::endl;

class MyVector{    //表示二维向量的类
    double x;      //X坐标值
    double y;      //Y坐标值
public:
    MyVector(double i=0.0 , double j=0.0);                //构造函数
    MyVector operator+( MyVector j);                      //重载运算符+
    friend MyVector operator-( MyVector i, MyVector j);   //重载运算符-
    friend ostream& operator<<( ostream& os, MyVector v); //重载运算符<<
};
//**1** **********found**********
MyVector::MyVector(double i, double j) : x(i), y(j) { }

MyVector MyVector::operator+( MyVector j) {
    return  MyVector(x+j.x, y+j.y);
}

MyVector operator-( MyVector i, MyVector j)
{//**2** **********found**********
	return MyVector(i.x - j.x, i.y - j.y);
}

ostream& operator<<( ostream& os, MyVector v){
    os << '(' << v.x << ',' << v.y << ')' ;          //输出向量v的坐标
    return os;
}

int main()
{ 
    MyVector v1(2,3), v2(4,5), v3;
//**3** **********found**********
	v3 = v1 + v2;
    cout<<v3<<endl;
    return 0;
}

分析解题:
1、根据提示只需要正确写出构造函数在类外定义构造函数时要使用类名和作用域,即MyVector::MyVector。
2、重载运算符“-”的返回语句,返回值应为向量i 和 j 的差,即MyVector(i.x-j.x,i.y-j.y);/
3、重载运算符“+”的使用,已经提示了返回v3是v2和v1的和,因为前面+号运算符已经重新定义过了,所以可以直接使用+号来连接。


总结

以上就是今天做的操作题考试题库_第一套时间有些仓促,就先大致这样吧,再有什么好的想法在加,时间也不早了,不说了,不说了

标签:10,MyVector,int,操作题,C++,num,数组,题库,Array
来源: https://blog.csdn.net/qq_45252077/article/details/112637967