上学吧题库

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

试卷预览
请打开考生文件夹下的解决方案文件proj1,该工程中包含程序文件main.cpp,其中有类CDate(“日期”)和主函数main的定义。程序中位于每个“//ERROR **** found ****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:原日期:2005-9-25更新后的日期:2006-4-1注意:只修改每个“//ERROR **** found ****”下的那一行,不要改动程序中的其他内容。#include < iostream >#include < cstdlib >using namespace std;class CDate //日期类{//ERROR ****** found ******protected:CDate() { };CDate (int d,int m,int y){// ERROR ****** found ******SetDate(int day=d, int month=m, int year=y);};void Display();//显示日期void SetDate(int day, int month, int year)//设置日期{ m_nDay=day; m_nMonth=month; m_nYear=year; }private:int m_nDay; //日int m_nMonth; //月int m_nYear; //年};void CDate:: Display() //显示日期{//ERROR ****** found ******cout << m_nDay << “-” << m_ nMonth << “-” << m_nYear;cout << endl;}int main (){CDate d(25,9,2005);//调用构造函数初始化日期cout << “原日期:”;d.Display();d.SetDate(1,4,2006);//调用成员函数重新设置日期cout << “更新后的日期:”;d.Display ();return 0;}
请打开考生文件夹下的解决方案文件proj1,此工程包含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR ****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:(4,4)注意:只修改注释“ // ERROR ****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include < iostream >using namespace std;class Point {public://ERROR *******found*******Point(double x, double y) _x (x), _y(y) { }double GetX () const { return _x; }double GetY () const { return _y;)// ERROR ******* found *******void Move (double xOff, double yOff) const{ _x + = xOff; _y + = yoff; }protected:double _x, _y;};int main (){Point pt(1 .5 , 2.5);pt. Move(2.5, 1.5);// ERROR *******found********以下语句输出pt成员_x和_y的值cout << ‘(‘ << pt._x << ‘,’ << pt._y << ‘)’ << endl;return 0;}
请打开考生文件夹下的解决方案文件proj2,此工程包含有一个源程序文件proj2.cpp。其中定义了Base1类、Base2类和 Derived 类。Base1是一个抽象类,其类体中声明了纯虚函数Show。Base2类的构造函数负责动态分配一个字符数组,并将形参指向的字符串复制到该数组中,复制功能要求通过调用strcpy函数来实现。Derived类以公有继承方式继承Base1类,以私有继承方式继承Base2类。在Derived类的构造函数的成员初始化列表中调用Base类的构造函数。请在程序中的横线处填写适当的代码,然后删 除横线,以完成Base1、Base2和Derived类的功能。此程序的正确输出结果应为:I’m a derived class.注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“**** found****”。// proj2.cpp #include < iostream >#include < cstring >using namespace std;class Base1 {public://******** found ********下列语句需要声明纯虚函数Show________;};class Base2 {protected:char * _p;Base2 (const char * s){_p = new char[strlen(s)+1];//******** found ********下列语句将形参指向的字符串常量复制到该类的字符数组中________;}~Base2() { delete [] _p; }};//******** found ******** Derived类公有继承Base1,私有继承Base2类class Derived :________{public://******** found ******** 以下构造函数调用Base2类构造函数Derived(const char * s):_______{ }
请打开考生文件夹下的解决方案文件proj2,其中定义了Employee 类和Manager类。Employee用于表示某公司的雇员,其属性包括姓名(name)和工作部分(dept)。Manager是Employee的公有派生类,用于表示雇员中的经理。除了姓名和工作部分之外,Manager的属性还包括级别(level)。Employee类的成员函数print用于输出雇员的信息;Manager类的成员函数print负责输出经理的信息。请在横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为:Name:Sally SmithDept:SalesLevel:2注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//**** found ****”。#include <iostream>#include < string >using namespace std;class Employee {public:Employee(string name, string dept):// ********** found **********________{ }virtual void print () const;stringdept() const //返回部门名称{//********** found **********________}virtual ~Employee() { }private:string name_;string dept_;};class Manager: public Employee {public:Manager(string name, string dept, int level)://********** found **********________{ }virtual void print () const;private:int level_;}; void Employee:: print () const{cout << “Name:” << name_ << endl;cout << “Dept:” << dept_ << endl;}void Manager:: print() const{//********** found **********________cout << “Level:” << level << endl;}int main (){Employee * emp= new Manager(“Sally Smith”, “Sales”, 2);emp -> print ();delete emp;return 0;}
请打开考生文件夹下的解决方案文件proj3,此工程包含一个源程序文件proj3.cpp,其功能是从文本文件in.dat中读取全部整数,将整数序列存放到intArray类的对象myArray中,然后对整数序列按非递减排序,最后由函数writeToFile选择序列中的部分数据输出到文件out.dat中。文件in.dat中的整数个数不大于300个。要求:补充编制的内容写在“//**********333********** ”与“//**********666**********” 两行之间。实现对整数序列按非递减排序,并将排序结果在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件out.dat中。输出函数writeToFile已经给出并且调用。//proj3.cpp#include < iostream >#include < fstream >#include < cstring >using namespace std;class intArray{private:int * array; //整数序列首地址int length; //序列中的整数个数public: //构造函数,从文件中读取数据用于初始化新对象。参数是文件名intArray(char * filename);void sort (); //对整数序列按非递减排序~intArray ();void writeToFile(char * filename);};intArray:: intArray ( char * filename){ifstream myFile (filename);int len=300;array=new int[len];length =0;while(myFile >> array[length++]);length --;myFile.close ();}void intArray::sort (){//*************333***********//*************666***********}intArray:: ~intArray (){delete [] array;}void intArray:: writeToFile(char * filename){int step =0;ofstream outFile (filename);for(int i=0 ; i﹤length; i=i+step){outFile << array [i] << endl;step ++ ;}outFile.close();}void main (){intArray myArray (“in.dat”);myArray.sort();myArray. writeToFile (“out.dat”);}
请打开考生文件夹下的解决方案文件proj3,其中该工程中包含定义了用于表示姓名的抽象类Name、表示“先名后姓”的姓名类Name1(名、姓之间用空格隔开)和表示“先姓后名”的姓名类Name2(姓、名之间用逗号隔开);程序应当显示:John SmithSmith,John但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:(1)在“//**1** ****found ****”的下方是函数show中的一个语句,它按先名后姓的格式输出姓名。(2)在“//**2** ****found ****”的下方是函数getWord中的一个语句,它把一个字符序列复制到head所指向的字符空间中,复制从start所指向的字符开始,共复制end - start个字符。(3)在“//**3** ****found ****”的下方是函数createName中的语句,它根据指针p的值决定返回何种对象:如果p为空,直接返回一个Name1对象,否则直接返回一个Name2对象。注意:返回的 Name1或Name2对象必须是动态对象,返回的实际是指向它的指针。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。填写的内容必须在一行中完成,否则评分将产生错误。//proj3.cpp#include < iostream >using namespace std;class Name {protected:char * surname; //姓char * firstname; //名public:~Name () { delete[ ] surname; delete[ ] firstname; }virtual void show () =0;}; class Name1: public Name {public:Name1(const char * name);// **1** ******* found *******void show () { ________; }};class Name2: public Name{public:Name2(const char * name);void show (){ cout << surname << ‘,’ << firstname; }};char * getWord(const char * start, const char * end){char * head = new char[end-start +1];// **2** ******* found *******for(int i =0;i﹤end-start; i ++)________;head[end-start]= ‘\0’;return head;}Namel:: Name1(const char * name){char *p=strchr(name, ‘’);firstname = getWord(name,p);surname = new char[strlen(P)];strcpy(surname, p +1);}Name2:: Name2 (const char * name){char * p = strchr(name, ‘,’);surname = getWord(namef p);firstname = new char[strlen(P)];strcpy(firstname, p +1);}Name * createName(const char *s){char * p = strchr (s, ‘,’);// **3** ******* found *******if(p) ________;}int main (){Name * n;n = createName(“John Smith”);n -> show (); cout << endl;delete n;n = createName(“Smith, John”);n -> show(); cout << endl;delete n;return 0;}