计算机二级C++操作题考试题库模拟卷一

考试难度:
2人已考
  • 卷面总分:100
  • 试卷类型:模拟试题
  • 测试费用: 免费
  • 关注人数:69
  • 作答时间:120分钟
  • 解析:
关闭
试卷简介:
本试卷是C++操作题考试题库试题,总分100分。
试题类型:
  • 基本操作题
  • 简单应用题
  • 综合应用题
试卷预览
  • 基本操作题
  • 简单应用题
  • 综合应用题
1
请打开考生文件夹下的解决方案文件proj1,该工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句有错误。请改正这些错误,使程序的输出结果为:1 2 3 4 5 6 7 8 9 10 注意:只能修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。// proj1 .cpp#include <iostream>using namespace std;class MyClass {public:MyClass(int len){array = new int[len];arraySize = len;for (int i = 0; i﹤arraySize; i++ )array[i] = i+1;}~MyClass() {//ERROR ******** found ********delete array[i];}void Print () const{for (int i = 0; i﹤arraySize; i++ )//ERROR ******** found ********cin << array[i] << ‘’;cout << endl;}private:int * array;int arraySize;};int main (){//ERROR ******** found ********MyClass obj;obj.Print ();return 0 ;}
2
请打开考生文件夹下的解决方案文件proj1,其中的主程序文件main.cpp中定义有Xabc类和主函数main。在程序文本中位于每行“//ERROR ****** found ******”下面的一行有错误,请加以更正。更正后程序的输出为:5 8 7 1234注意:只允许修改每个“// ERROR ****** found ******”下面的一行语句,不允许改动程序中的其他任何内容。#include <iostream>using namespace std;class Xabc {int * a; int n;public:Xabc (int aa[ ], int nn) : n(nn) { //构造函数// ERROR ********** found **********a=int[n];for(int i=0; i < n; i++)a[i] = aa[i];}int sum () {int s= 0;for (int i = 0; i﹤n; i ++)s+=a[i];// ERROR ********** found **********return* s;}};int main () {int a[5] = {2,5,8,7,12};Xabc x (a, 5);int i;for (i =0 ; i﹤5 ; i++)cout << a[i] << ‘’;cout << endl;// ERROR ********** found **********int b = sum ();cout << b << endl;return 0;}
1
请打开考生文件夹下的解决方案文件proj2,此工程中声明的Army是一个表示数组的类。一个Army对象可以包含多个整型元素。Array的成员说明如下:成员函数add用于向数组的末尾添加一个元素;成员函数get用于获取数组中指定位置的元素;数据成员a表示实际用于存储数据的整型数组;数据成员size表示数组的容量,数组中的元素个数最多不能超过size;数据成员num表示当前数组中的元素个数。SortedArray是Array的派生类,表示有序数组。SortedArray重新定义了Array中的add函数,以确保有序数组中的元素始终按照升序排列。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为:10,9,8,7,6,5,4,3,2,1,1,2,3,4,5,6,7,8,9,10,注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#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 ;}
2
请打开考生文件夹下的解决方案文件proj2,其中的主程序文件main.cpp中定义有类XBase和XDerived,以及主函数main。程序文本中位于每行“// ********* found *********”下面的一行内有一处下划线标记,请在每个下划线标记处填写合适的内容,并删除掉下划线标记。经修改后运行程序,得到的输出结果为:61 29#include <iostream>using namespace std;class XBase{private:int mem1, mem2;public://用m1和m2分别初始化数据成员mem1和mem2//******* found ******* XBase (int m1, int m2): mem1(m1), ________ { }//squareSum函数定义,返回两个数据成员平方之和//******* found *******virtual int squareSum() ________};class XDerived: public XBase{private:int mem3;public://利用m1和m2作为调用基类构造函数的实际参数//******* found *******XDerived (int m1, int m2, int m3): ________, mem3 (m3) { }//******* found *******________ { return XBase :: squareSum() + mem3 * mem3; }};int main () {XDerived b(2,3,4);XBase a(5,6), * p;p = &a;cout << p="" -=""> squareSum() << ‘’;p = &b;cout << p="" -=""> squareSum() << endl;return 0;}
1
请打开考生文件夹下的解决方案文件proj3,此工程包含一个源程序文件proj3.cpp,其中定义了用于表示二维向量的类MyVector;程序应当显示(6,8)。但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:(1)在“//**1** ****found****”的下方是构造函数的定义,它用参数提供的坐标对x和y进行初始化。(2)在“//**2** ****found****”的下方是减法运算符函数定义中的一条语句。两个二维向量相减生成另一个二维向量:其X坐标等于两向量X坐标之差,其Y坐标等于两向量Y坐标之差。(3)在“//**3** ****found****”的下方,语句的功能是使变量v3获得新值,它等于向量v1与向量v2之和。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。// proj3 .cpp#include <iostream>using std:: iostream;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 ******* ________(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 (________);}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 =________;cout << v3 << endl;return 0;}
2
请打开考生文件夹下的解决方案文件proj3,其中包含主程序文件main.cpp和用户定义的头文件Array.h,整个程序包含有XArray类的定义和main主函数的定义。请把主程序文件中的XArmy类的成员函数twoMinSum()的定义补充完整,补充的内容填写在“//********333********”与“//********666********”两行之间。经修改后运行程序,得到的输出为:3 5 7 9 8 6 4 2 5 注意:只允许在“//********333********”和“//********666********”两行之间填写内容,不允许修改其他任何地方的内容。//Array.h#include <iostream>using namespace std;class XArray { //数组类int * a;int size;public: XArray ( int b[ ], int len): size(len) //构造函数{a =new int[ size];for (int i = 0 ; i﹤size; i ++ )a[i] =b[i];} int length() const { return size; } //返回数组长度int& operator[ ] (int i) { //返回下标为i的元素 if (i﹤0|| i﹥=size) { cout << “下标越界!” << endl;delete [ ] a; exit (1);}return a[ i];}int twoMinSum(); //成员函数声明,返回数组a中两个最小元素值之和~XArray() { delete [ ] a; }};void writeToFile (const char * ); //不用考虑此语句的作用//main.cpp#include “Array.h”//返回成员数组a中的两个最小元素值之和int XArray:: twoMmSum(){int x1, x2;if (length()﹤2) exit(1);if (a[0]﹤=a[1]){ x1 = a[0]; x2 = a[1]; }else { x1= a[1]; x2 = a[0]; }//*********333********//*********666********return x1+x2;}void main () {int a[8]={3,5,7,9,8,6,4,2};XArray x (a, 8);for( int i = 0 ; i﹤x . length(); i ++)cout << x[i] << ‘’;cout << endl << x.twoMinSum() << endl;writeToFile (“”); //不用考虑此语句的作用}