当前位置:文档之家› C++上机考试题库答案

C++上机考试题库答案

第1套题解析题目一:基本操作题【参考答案】(1)delete [] array;(2)cout<< array[i]<< ' ';(3)MyClass obj(10);【考点分析】本题考查MyClass类,其中涉及构造函数、析构函数、输出语句、动态数组、语句初始化。

一般考到类时就会涉及构造函数,要注意构造函数的定义方法。

析构函数就是考查delete语句的用法, 其一般形式为: delete []+要释放的指针。

【解题思路】(1)语法错误,使用delete语句删除一个指针时,直接把指针变量的名称放在delete [] 后面即可。

(2) 考查考生对输入、输出语句的运用。

使用cout进行数据输出操作,一般格式为:cout<<Expr;其中,Expr代表一个表达式,"<<"称为插入运算符,该语句的含义是;将表达式Expr的值输出到屏幕上。

使用cin进行数据输入操作,一般格式为:cin>>vari。

其中,var是代表一个变量,">>"称为提取运算符,该语句的含义是,将用户输入的数据保存到var中。

(3) 考查语句的初始化,我们来看MyClass类的构造函数:MyClass(int len){array = new int[len];arraySize = len;for(int i = 0; i < arraySize; i++)array[i] = i+1;}注意形参len没有定义默认值,因此要想使array动态数组里依次存放1,2,3,4,5,6,7,8,9,10,就是要给len赋值为10。

【解题宝典】delete语句是最常考的知识点,用于释放指针变量,其一般形式为:delete[]+要释放的指针。

题目二:简单应用题【参考答案】(1) a[num] = e;(2) Array(s)(3) a[j] = a[j - 1];(4) a[i] = e;【考点分析】本题考查数组类Array以及Array的派生类SortedArray,其知识点涉及构造函数、析构函数、虚函数、动态数组。

考到函数时,首先要看函数名,通过函数名称能大概知道该函数的功能,比如Array 类中的virtual void add(int e) 函数,看到这个函数我们能得到如下信息:1) 有关键字virtual,说明该函数是虚函数,在Array类的派生类里肯定会有对add函数的定义。

2) 有关键字void,说明此函数没有返回值。

3) add的意思是添加,它的形参是int e,那么我们大概可以猜到该函数的功能是把整型数值e添加到数组a中。

【解题思路】(1) 考查的是虚函数virtual void add(int e)的定义,即添加一个整型数已到a[num] 中。

(2) 主要考查的是Array类的派生类SortedArray类的构造函数的定义,定义之前要对基础类初始化。

(3) 因为SortedArray类是排序类,所以数组a中的元素是要从小到大排序的。

在if (e < a[i])条件下,要把i后的元素逐个往后移一位,因此此处为a[j] = a[j - 1]。

(4) 主要考查虚函数virtual void add(int e)在派生类SortedArray类中的定义,把插入的数据放在数组a的第i+1个位置,即a[i] = e;。

【举一反三】第31套的简单应用题。

题目三:综合应用题【参考答案】(1) MyVector::MyVector(2) i.x - j.x, i.y - j.y(3) v1 + v2【考点分析】本题考查二维向量类MyVector,其中涉及到的知识点有构造函数,重载运算符+、-、<<。

在类外定义构造函数时,语法要和定义其他类函数一样,前面要加上类名和作用域符号。

重载运算符函数要注意其返回值类型和参数类型。

【解题思路】(1) 主要考查的是构造函数, 在类外定义构造函数时要使用类名和作用域, 即MyVector::MyVector。

(2) 主要考查重载运算符"-"的返回语句,返回值应为向量i和j的差,即MyVector(i.x - j.x, i.y - j.y);。

(3) 主要考查重载运算符"+"的使用,由题目可知v3是v1和v2的和,前面我们已经重新定义了运算符"+",所以在这里直接使用语句v3 = v1 + v2即可。

第2套题解析题目一:基本操作题【参考答案】(1)MyClass(int i)(2)int Max(int x, int y, int z)(3)cout<< "The value is "<< obj.GetValue()<< endl;【考点分析】本题考查:MyClass类,构造函数,析构函数,成员函数,函数重载。

函数重载必须要形参类型不同,或者形参个数不同。

【解题思路】(1)考查构造函数,构造函数前不加void或其它任何类型名,直接使用MyClass(int i)即可。

(2)主要考查函数重载,在int Max(int x, int y) { return x>y ? x : y; }中两个形参变量都是int型,而语句int Max(int x, int y, int z= 0)的前两个形参也都是int 型,第三个形参定义默认值,那么这两个Max函数在调用时它们的参数个数和参数类型都一样,因为函数重载要求形参类型或形参个数不同,所以要把int z=0 改为intz,才能构成函数重载。

(3)主要考查成员函数的调用,因为value是私有成员,所以不能被类外函数直接调用,而且value()的用法也是错误的,可以使用成员函数obj.GetValue()得到value的值。

【举一反三】第28套的程序改错题。

题目二:简单应用题【参考答案】(1)item(val)(2)delete [] p(3)temp = top(4)temp->next = top【考点分析】本题考查:堆栈类Stack类,Item类,构造函数,析构函数,成员函数,函数调用。

堆栈类的节点一般使用指针表示,也就会考查到指针的相关知识点,要注意释放指针应使用delete [] 语句。

【解题思路】(1)主要考查构造函数,对私有成员进行初始化,即item(val)。

(2)主要考查delete语句释放指针,一般格式为:delete []+指针。

(3)指向栈顶节点的是top指针,要使temp指向栈顶节点,故使用语句temp = top。

(4)指向栈顶结点的是top指针,要使新节点的next指针指向栈顶数据,故使用语句temp->next = top。

【解题宝典】本题涉及堆栈类,栈是先进后出,后进先出的存储结构。

对于此类问题指针的使用是个难点,要记住栈中指向栈顶节点的是top指针,添加数据时要往栈顶添加。

【举一反三】第46套的简单应用题。

题目三:综合应用题【参考答案】(1)MyPoint p1, MyPoint p2(2)up_left.getX(), down_right.getY()(3)double MyRectangle::【考点分析】本题考查:表示平面坐标系中的点的类MyPoint,表示矩形的类MyRectangle,构造函数,成员函数。

【解题思路】(1)考查构造函数,构造函数中的参数要给私有成员赋值,在下句中up_left(p1),down_right(p2){}指出私有成员赋值要使用形参p1和p2,所以这里参数要定义为MyPoint p1, MyPoint p2。

(2)主要考查成员函数的返回语句,MyPoint My Rectangle: getDownLeft()const函数要求返回一个左下角的点坐标,因此使用语句MyPoint(up_left.getX(), down_right.getY());。

(3)主要考查成员函数的定义,在MyRectangle类中已经声明double area()const,因此此处只要添加double MyRectangle::即可。

【解题宝典】构造函数的参数定义时要注意在赋值语句中使用的参数。

考查构造函数一般都会考查到形参,应注意联系上下文。

类的成员函数在类外定义时要在函数名前面加上:返回值类型+ 类名+ 作用域(::)。

【举一反三】第28套的综合应用题。

第3套题解析题目一:基本操作题【参考答案】(1)MyClass(int val) : value(val) {}(2)void MyClass::SetValue(int val) { value = val; }(3)cout<< "The value is "<< obj.GetValue()<< endl;【考点分析】本题主要考查:MyClass类,构造函数,成员函数以及成员函数调用。

【解题思路】(1)考查构造函数,定义构造函数时不能使用void,直接使用MyClass(int val)即可。

(2)主要考查成员函数定义,类的成员函数定义时要使用前缀MyClass,而inline是内联函数的关键字,在此是错误的,应该删掉inline并在函数名前加上前缀MyClass,即void MyClass::SetValue(int val) { value = val; }。

(3)考查成员函数调用,value是私有成员,在主函数中不能直接调用value,可以使用成员函数GetValue()来得到value的值。

【解题宝典】构造函数前不能添加任何类型,如void,int,double等。

类的成员函数定义时要加上前缀,即类的名字。

私有成员只能被类的成员函数调用。

【举一反三】第32套的程序改错题。

题目二:简单应用题【参考答案】(1)new char[s](2)delete [] p(3)p[top] = c(4)return p[top]【考点分析】本题主要考查的是表示栈的抽象类Stack类以及它的派生类ArrayStack类,纯虚函数,成员函数。

栈的节点一般使用指针表示,定义构造函数时要给指针分配空间,使用new语句来完成。

ArrayStack() 是析构函数,因为前面已经使用了new来分配空间了,因此在这里要用delete 语句来释放指针。

【解题思路】(1)主要考查的是ArrayStack的构造函数,在函数中要为p申请s个char型空间,应使用语句p = new char[s];。

相关主题