请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,此工程中包含一个源程序文件main.cpp,其中有类Book(“书”)和主函数main的定义。程序中位于每个“//ERROR****found****”下的语句行有错误,请加以改正。改正后程序的输出结果应该是: 书名:C++语句程序设计总页数:299 已把“c++语言程序设计”翻到第50页 已把“c++语言程序设计”翻到第51页 已把“c++语言程序设计”翻到第52页 已把“c++语言程序设计”翻到第51页 已把书合上。 当前页:0

题目

请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,此工程中包含一个源程序文件main.cpp,其中有类Book(“书”)和主函数main的定义。程序中位于每个“//ERROR****found****”下的语句行有错误,请加以改正。改正后程序的输出结果应该是: 书名:C++语句程序设计总页数:299 已把“c++语言程序设计”翻到第50页 已把“c++语言程序设计”翻到第51页 已把“c++语言程序设计”翻到第52页 已把“c++语言程序设计”翻到第51页 已把书合上。 当前页:0 注意:只修改每个“//ERROR ***found***”下的那一行,不要改动程序中的其他内容。 include<iostream> using namespace std; class Book{ char*title; int num—pages;//页数 int cur_page;//当前打开页面的页码,0表示书未打开 public: //ERROR***********found*********** Book(const char*theTitle,int pages)num_pages(pages) { title=new char[strlen(theTitle)+1]; strepy(title,theTitle); cout<<endl<<”书名:”<<title <<”总页数:”<<num_pages; } ~Book{delete[]title;} bool isClosedconst{return cur_page==0;} //书合上时返回true,否则返回false bool isOpenconst{return!isClosed;}//书打开时返回true,否则返回false int numOfPagesconst{return num_pages;}//返回书的页数 int currentPageconst{return cur_page;}//返回打开页面的页码 //ERROR***********found*********** void openAtPage(int page_no)const{ //把书翻到指定页 cout<<endl: i“page_no<l Jj page_no>hum_pages){ tOUt<<”无法翻到第”<<cur page<<”页。”; ClOSe; } else{ cur_page=page_n0; tout<<”已把“"<<tide<<"”翻到第"<<cur page<<“页”; } } void openAtPrevPage{openAtPage(cur page—1);{//把书翻到上一页 void openAtNextPage{openAtPage(cur_page+1);}//把书翻到下一页 void close{//把书合上 tout<<endl: if(isClosed) tout<<"书是合上的。"; else{ //ERROR**********found********** num_pages=0; cout<<”已把书合上。”; } cOut<<endl: } }; int main{ Book book(”C++语言程序设计”,299); book.openAtPage(50); book.openAtNextPage; book.openAtNextPage; book.openA.tPrevPage; book.close; tout<<”当前页:”<<book.currentPage<<endl; return 0: }


相似考题
更多“请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,此工程中包含一个源程序文件main.c ”相关问题
  • 第1题:

    使用VC6打开考生文件夹下的工程RevProj3。此工程包含一个源程序文件 RevMain3.cpp。阅读文件中的程序代码,找出程序中的错误,并改正。

    源程序文件RevMain3.cpp清单如下:

    //RevMain3.cpp

    include<iostream>

    using namespace std;

    class MyClass{

    public:

    /* * * * * * * * *found * * * * * * + * * */

    void MyClass(int a){ value=a;}

    int Max(int x,int y)

    {

    if(x>y)

    return x>y?x:y;

    else

    return y>value?y:value;

    }

    /* * * * * * * * *found * * * * * * * * * */

    ~MyClass(int a)

    {

    value=a;

    }

    private:

    int value;

    };

    int main()

    {

    MyClass my(10);

    cout<<my.Max(20,30)<<end1;

    return 0;

    }


    正确答案:正确的类MyClass定义为: class MyClass { public: MyClas(int a) { value=a;} int Max(int xint y) { if (x>y) return x>y?x:y; else return y>a?y:a; } ~MyClass() {} private: value; };
    正确的类MyClass定义为: class MyClass { public: MyClas(int a) { value=a;} int Max(int x,int y) { if (x>y) return x>y?x:y; else return y>a?y:a; } ~MyClass() {} private: value; }; 解析:本题考核类的定义。程序中出现了2个出错标识符,说明此程序有2处错误。第1处错误:类的构造函数没有返回类型,而程序中将类的构造函数设为void型,显然是错误的。
    第2处错误:C++中类的析构函数中不能带有行参,所以程序中析构函数的定义是错误的。

  • 第2题:

    使用VC6打开考生文件夹下的工程test34_1,此工程包含一个源程序文件test34_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为:

    David 3123 1000

    源程序文件test34_1.cpp清单如下:

    include <iostream.h>

    include <string.h>

    class person

    {

    public:

    char name[20];

    unsigned long id;

    float salary;

    void print(){cout<<name<<' '<<id<<' '<<salary<<

    /***************** found *****************/

    }

    void main( )

    {

    person p;

    person *ptr;

    /***************** found *****************/

    ptr=p;

    /***************** found *****************/

    strcpy("David",ptr->name);

    ptr->id=3123;

    ptr->salary=1000;

    ptr->print();

    }


    正确答案:(1)错误:} 正确:}; (2)错误:ptr=p; 正确:ptr=&p; (3)错误:strcpy("David"ptr>name); 正确:strcpy(ptr->name"David");
    (1)错误:} 正确:}; (2)错误:ptr=p; 正确:ptr=&p; (3)错误:strcpy("David",ptr>name); 正确:strcpy(ptr->name,"David"); 解析:(1)类定义的一般格式为:
    class类名>
    {
    pubic:
    数据成员或成员函数的说明>
    private:
    数据成员或成员函数的说明>
    protected:
    数据成员或成员函数的说明>
    };
    花括号表示类的声明范围,说明该类的成员,其后的分号表示类声明结束,类声明最后的分号是不可少的;
    (2)p为类person的对象,ptr为指向类person对象的指针,所以将p的值赋给ptr应该为ptr=&p,即ptr指向对象p;
    (3)strcpy()函数的一般形式为:
    strcpy(to,from);
    该函数将from字符串中的内容复制到to字符串,所以将字符串“David”赋值给ptr所指对象的数据成员name的语句应该为:
    strcpy(ptr->name,"David")。

  • 第3题:

    使用VC6打开考生文件夹下的工程test41_1,此工程包含一个源程序文件test41_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为:

    7

    源程序文件test41_1.cpp清单如下:

    include<iostream.h>

    class myclass

    {

    int a, b;

    public:

    /***************** found *****************/

    int sum(myclass x);

    void set_ab(int i, int j);

    }:

    /**************** found ****************/

    void myclass:set_ab(int i, int j)

    {

    a=i;

    b=j;

    }

    int sum (myclass x)

    {

    /***************** found ***************/

    x.a+x.b;

    }

    void main ( )

    {

    myclass n;

    n.set_ab (3, 4);

    cout <<sum(n)<<endl;

    }


    正确答案:(1) 错误:int sum(myclass x); 正确:friend int sum(myclass x); (2) 错误:void myclass:set_ab(int iint j) 正确:void myclass::set_ab(int iint j) (3) 错误:x.a+x.b; 正确:return x.a+x.b;
    (1) 错误:int sum(myclass x); 正确:friend int sum(myclass x); (2) 错误:void myclass:set_ab(int i,int j) 正确:void myclass::set_ab(int i,int j) (3) 错误:x.a+x.b; 正确:return x.a+x.b; 解析:(1)函数sum中含有对于myclass类的私有数据成员a和b的操作,而普通函数没有这样的权限,所以编译器会报错,只有把sum定义成该类的友元函数,这样根据友元函数可以访问该类的所有元素的规则,就可以正确地实现该函数:
    (2)函数的参数列表只能用于类的构造函数,对于构造函数,参数列表与在函数体内赋值是等价的,但是一般的类的成员函数只能使用函数体内赋值一种方法;
    (3)该函数的返回值为int型,所以计算之后的结果应该使用关键字return返回主函数,return返回值可以使用括号,也可以不使用,后面可以是表达式也可以是变量或者常量。

  • 第4题:

    使用VC6打开考生文件夹下的工程proj2。此工程包含一个源程序文件main2.cpp,但该程序运行有问题。请改正main函数中的错误。

    源程序文件main2.cpp清单如下:

    //main2.cpp

    include <iostream>

    using namespace std;

    class MyClass

    {

    public:

    MyClass(int m)

    {

    member=m;

    }

    ~MyClass() {}

    int GetMember()

    {

    return member;

    }

    private:

    int member;

    };

    MyClass MakeObject(int m)

    {

    MyClass *pMyClass=new MyClass(m);

    return *pMyClass;

    }

    int main ( )

    {

    int x=7;

    /************found**************/

    MyClass *myObj=MakeObject(x);

    /*************found*************/

    cout<<"My object has member"<<myObj.GetMember()<<end1;

    return 0;

    }


    正确答案:修改后的主函数为: int main() { int x=7; MyClass *myObj=&MakeObject(x); cout"My object has member"myObj->GetMember()end1; return 0; }
    修改后的主函数为: int main() { int x=7; MyClass *myObj=&MakeObject(x); cout"My object has member"myObj->GetMember()end1; return 0; } 解析:本题考核对象指针的应用。程序中出现了2个出错标识符,说明此程序有2处错误。
    第1处错误:“MyClass*myObj=MakeObject(x);”。myObj是对象指针,而函数 MakeObject( )的返回值是类MyClass的对象,所以应改为:“MyClass *myObj=&MakeObject(x);”。
    第2处错误:“cout"MyObject has member"myObj.GetMember()end1;”。对象指针使用方式有两种:“对象指针名->成员名;”和“(*对象指针名)成员名;”。显然上述语句的对象指针的使用方式是错误的。应改为“cout"My object has member"myObj->GetMember()end1;”,或者“cout"MyObject has member"(*myObj).GetMember()end1;”。

  • 第5题:

    使用VC6打开考生文件夹下的工程test21_1,此工程包含一个源程序文件test21_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:

    The grade is 3

    源程序文件test21_1.cpp清单如下:

    include<iostream.h>

    class student

    {

    private:

    int grade;

    public:

    /**************** found*******************/

    student(int thegra):(thegra){}

    ~student(){}

    int get_grade(){return grade;}

    };

    void main()

    {

    int thegra=3;

    /**************** found*******************/

    student point=new student(thegra);

    /**************** found*******************/

    cout<<"The grade is"<<point.get_grade()<<endl;

    delete point;

    }


    正确答案:(1)错误:student(int thegra):(thegra){} 正确:student(int thegra):grade(thegra){} (2)错误:student point=new student(thegra) 正确:student*point=new student(thegra); (3)错误:cout"The grade is"point.get_grade()endl; 正确:cout"The grade is"point->get_grade()endl;
    (1)错误:student(int thegra):(thegra){} 正确:student(int thegra):grade(thegra){} (2)错误:student point=new student(thegra) 正确:student*point=new student(thegra); (3)错误:cout"The grade is"point.get_grade()endl; 正确:cout"The grade is"point->get_grade()endl; 解析:(1)主要考查考生对于构造函数使用参数列表初始化数据成员的掌握,可以使用参数列表的形式,也可以在函数内部实现,不过参数赋值的双方都必须出现,本题的错误就在于并没有把参数赋值给数据成员;
    (2)主要考查考生对于使用指针申请动态空间的方法的理解,new运算符申请的空间返回值为指针类型,指针类型的定义是在变量名前加上“*”;
    (3)主要考查考生对于对象指针调用成员函数方法的掌握,必须使用符号“->”,而对象本身使用符号“.”。

  • 第6题:

    请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl。程序中位于每个“//ERROR****found料****之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: Name:Smith Age:21 ID:99999 CourseNum:12 Record:970 注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。 include<iostream> using namespace std; class Studentlnfo { protected: //ERROR********************found**************** char Name; int Age; int ID: int CourseNum; float Record; public: Studentlnfo(char*name,int Age,int ID,int coumeNum,float record); //ERROR ********************found******************** void~Studentlnfo{} float AverageRecord{ return Record/CourseNum; } void showconst{ cout<<”Name:”<<Name<<”Age:”<<Age<<”ID:”<<ID <<”CourseNum:”<<CourseNum<<”Record:”<<Record<<endl; } }; //ERROR ******************found************** StudentInfo StudentInfo(char*Name,int Age,int ID,int CourseNum,float Record) { Name=name; Age=age; this一>ID=ID: CourseNum=courseNum: Record=record; } int main { Studentlnfo st(’’Smith”,21,99999,12,970); st.show; return 0; }


    正确答案:

    (1)char*Name;
    (2)~Studentlnfo{}
    (3)Studentlnf0::Studentlnfo(char*name,int age,,int ID,int eourseNum,float record)