问答题使用VC6打开考生文件夹下的源程序文件modi3.cpp,阅读下列程序说明和代码,功能如下:  从屏幕输入数字,然后由大到小插入指定的链中。当输入0时,表示输出的数据已经输入完成,然后把数据打印到屏幕,然后释放内存。  其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。  1.在父节点的Next中保存新插入的节点的指针,请在注释//********1********后添加适当的语句。  2.把pNext的子节点赋给pNext本身,请在注释//********2********后添加适当的

题目
问答题
使用VC6打开考生文件夹下的源程序文件modi3.cpp,阅读下列程序说明和代码,功能如下:  从屏幕输入数字,然后由大到小插入指定的链中。当输入0时,表示输出的数据已经输入完成,然后把数据打印到屏幕,然后释放内存。  其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。  1.在父节点的Next中保存新插入的节点的指针,请在注释//********1********后添加适当的语句。  2.把pNext的子节点赋给pNext本身,请在注释//********2********后添加适当的语句。  3.判定P的子节点不为空,如果不为空,则打印P其中的数据到屏幕,请在注释//********3********后添加适当的语句。  4.用temp1保存动态申请内存节点的链表头,请在注释//********4********后添加适当的语句。  注意:仅在函数指定位置添加语句,请勿改动主函数 main与其他函数中的任何内容。

相似考题
更多“使用VC6打开考生文件夹下的源程序文件modi3.cpp,阅读下列程序说明和代码,功能如下:  从屏幕输入数字,然后由大”相关问题
  • 第1题:

    使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成以下两个函数。 (1)funl(intn)求出n的阶乘,必须使用递归调用。 (2)fun2(intn)求出n的阶乘,不能使用递归调用。如果n小于1则返回0。 注意:不能修改函数的其他部分。 试题程序: include<iostream.h> //必须使用递归 intfunl(intn) { } //不能使用递归 intfun2(intn) { } voidmain { inti; cout<<"请输入一个整数:"<<endl; cin>>i; cout<<"输入数字的阶乘是:"<<funl(i)<<endl; cout<<"输入数字的阶乘是:"<<fun2(i)<<endl; return; }


    正确答案:
    //必须使用递归
    jntfunl(intn)
    {
    if(n<=0)
    return0;
    if(n==1)
    return1;
    returnn*funl(n-1);
    };
    //不能使用递归
    intfun2(intn)
    {
    if(n<=0)
    retturn0;
    intres=1:
    for(inti=1;i<=n;i++)
    {
    res*=i;
    }
    returnres;
    }
    【解析】本题考查的是递归函数和阶乘算法。递归的阶乘算法可以通过判断传入参数,如果大于1,则返回n*funl(n-1),意思是返回n乘以n-1的阶乘;如果等于1,则返回1。这样递归下去就能最终得出n的阶乘。非递归算法可以先建立一个累乘变量,并初始化为1,然后循环遍历1~n,将遍历的数累乘到变量中即可。

  • 第2题:

    使用VC++6.0打开考生文件夹下的源程序文件2.cpp。阅读下列函数说明和代码,补充空出的代码。使sum(intn)能计算所有n的因子之和(不包括1和自身)。 注意:不能修改程序的其他部分,只能补充sum函数。 试题程序: include<iostream.h> intsum(intn) { } voidmain { cout<<sum(10)<<endl; cout<<sum(200)<<endl; cout<<sum(400)<<endl; return; }


    正确答案:
    intall=0:
    for(inti=2;i<n;i++)
    {
    if(n%i==0)
    {
    all+=i:
    }
    }
    returnall;
    【解析】为了实现计算所有n的因子之和且不包含1和自身,在函数中定义一个变量all来保存求和结果,并为最终结果在函数结束时返回。在循环中逐个寻找n的因子,为了在计算中排除掉1和n本身,因此循环变量i的变化范围为2~(n-1)。如果n%i==0,说明i是n的因子,因此将i加到all上。

  • 第3题:

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

    x=3 y=5 z=0

    8

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

    include<iostream.h>

    static int x=5;

    int z=0;

    int *add(int x,int y)

    {

    cout<<"X="<<X<<"y="<<y<<" Z="<<z<<endl;

    z=z+x+y;

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

    return z;

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

    };

    void main()

    {

    int y=5;

    int x=3;

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

    cout<<&(add(X,y))<<endl;

    }


    正确答案:(1)错误:return z; 正确:return &z; (2)错误:}; 正确:} (3)错误:cout&(add(xy))endl; 正确:cout*(add(xy))endl;
    (1)错误:return z; 正确:return &z; (2)错误:}; 正确:} (3)错误:cout&(add(x,y))endl; 正确:cout*(add(x,y))endl; 解析:(1)主要考查考生对于函数返回类型的掌握,该函数的返回值应该是指向int型的指针,所以应该将地址作为返回值:
    (2)主要考查考生对于类定义格式与函数定义格式区别的掌握,类的定义最后应该使用“;”而函数不需要用“;”;
    (3)主要考查考生对于有返回值的函数调用的掌握,函数定义是返回指针型的,调用的时候就应该使用取地址符号。

  • 第4题:

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

    a=3 b=13

    a=5 b=13

    注意:请勿修改主函数main中的任何内容。

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

    include<iostream.h>

    class T

    {

    public:

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

    T(int x){a=x; b+=x;)

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

    void display(T c)

    { cout<<"a="<<c.a<<"\t"<<"b="<<c.b<<endl;)

    private:

    const int a;

    static int b;

    };

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

    int b=5;

    void main()

    {

    T A(3),B(5);

    T::display(A);

    T::display(B);

    }


    正确答案:(1)错误:T(int x){a=x;b+=x;) 正确:T(int x):a(x){b+=x;) (2)错误:void display(T c) 正确:static void display(T c) (3)错误:int b=5; 正确:int T::b=5;
    (1)错误:T(int x){a=x;b+=x;) 正确:T(int x):a(x){b+=x;) (2)错误:void display(T c) 正确:static void display(T c) (3)错误:int b=5; 正确:int T::b=5; 解析:(1)主要考查考生对常量数据成员初始化方法的掌握,常量数据成员的初始化只能通过构造函数的成员初始化列表进行,常量数据成员使用关键字const修饰;
    (2)主要考查考生对静态成员函数的理解,由主函数中的T::display(A)与T::display(B)可知display应定义为静态成员函数,因为调用类的静态成员必须使用作用域“::”符号;
    (3)主要考查考生对静态数据成员初始化方法的掌握,由static int b可知b为静态成员数据,其初始化必须在类外使用作用域运算符(::)限定它所属的类。

  • 第5题:

    使用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++中类的析构函数中不能带有行参,所以程序中析构函数的定义是错误的。

  • 第6题:

    使用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;”。

  • 第7题:

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

    2

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

    include<iostream.h>

    class amount;

    class coins

    {

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

    enum units {penny, nickel, dime, quarter, half_dollar}

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

    class amount;

    };

    class amount

    {

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

    coins:units money;

    public:

    void setm();

    int germ();

    };

    void amount::setm()

    {

    money = coins::dime;

    }

    int amount::getm()

    {

    return money;

    }

    int main ( )

    {

    amount ob;

    ob.setm();

    cout << ob.getm()<<end1;

    return 0;

    }


    正确答案:(1) 错误;enum units{pennynickeldimequarterhalf_dollar} 正确:enum units {pennynickeldimequarterhalf_dollar}; (2) 错误:class amount; 正确:friend class amount; (3) 错误:coins:units money; 正确:coins::units money;
    (1) 错误;enum units{penny,nickel,dime,quarter,half_dollar} 正确:enum units {penny,nickel,dime,quarter,half_dollar}; (2) 错误:class amount; 正确:friend class amount; (3) 错误:coins:units money; 正确:coins::units money; 解析:(1)enum是枚举类型,units是本题中该类型的一个变量,后面为枚举表,大括号中为枚举符,枚举变量的值实际上是一个有名字的常量,所以它的定义结束时也需要一个分号;
    (2)类amount是类coins中定义的成员,要是想要访问coins类中的私有成员,把amount定义成普通的数据成员是不能做到的,只能把它定义成友元类,即可以访问coins类中的所有成员(提示:units是使用的默认定义,即私有成员);
    (3)units是类coins中的成员,在它的友元类中访问它时应该使用作用域符“::”,本题的错误是使用了冒号。

  • 第8题:

    使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成函数fun(intn),使其实现以下功能:当i等于3时,则打印如下内容。 A AA AAA 注意:不能修改程序的其他部分,只能修改fun函数。 试题程序: include<iostream.h> voidfun(intn) { } voidmain { intn; cout<<"请输入打印的行数:"<<endl; cin>>n; if(n<1) { cout<<"输入的行数必须大于0"<<endl; return; } fun(n); return; }


    正确答案:
    inti;
    for(i=0;i<n;i++)//外层循环,要打印的行数
    {
    intj;
    for(j=0;j(n-i-1;j++)//循环打印空格
    {
    cout<<'';
    }
    for(;j<n;j++)//循环打印A
    {
    cout<<"A":
    }
    cout<<endl;//打印每一行的回车符
    }
    【解析】本题利用外层循环打印每一行。内层循环分为
    打印空格和打印A。打印空格由第一个位置到第n-i-1。打印A,是由打印完空格开始一直到行结束。在外循环中打印每一行的结束符。

  • 第9题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行。并且使程序输出的结果为:  OK  注意:错误的语句在//********error********的下面,修改该语句即可。

    正确答案: 1.将语句“virtual void func();”修改为“virtual void func()=0;”
    2.将语句“cout<<OK<endl;”修改为“cout<<OK<<endl;”
    3.将语句“CDerive1 *p = (CDerive1*) obj;”修改为“CDerive1 *p=(CDerive1*) &obj;”
    解析:1.类CDerive1中的func()函数是纯虚函数,定义格式为:virtual <函数类型> <函数名> (<参数表>)=0,因此第1个标识下应将语句“virtual void func();”修改为“virtual void func()=0;”。
    2.第2个标识下的cout流中,输出数据用流插入运算符“<<”顺序加入,应改成“cout<<OK<<endl;”
    3.虚函数有非多态调用和多态调用两种调用方式,非多态调用是指不使用指针或引用的直接调用,多态调用是指通过对象的指针或引用的调用。主函数定义了CDerivel*p,p是基类CDerive1的指针,采用多态调用方式,将派生类对象的地址赋给基类指针p,因此第3个标识下应改为“CDerive1 *p=(CDerive1*) &obj;”。
    解析: 暂无解析

  • 第10题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正其中的错误,使程序正常运行,并且输出以下结果:  4,5.  7,8  4,8.  注意:错误的语句在//******error******的下面,修改该语句即可。

    正确答案: 1.将语句“virtual void move(int a; int b)”修改为“virtual void move(int a, int b)”
    2.将语句“CObj1(int i, int j,int k):(i,j)”修改为“CObj1(int i, int j,int k):CObj0(i,j)”
    3.将语句“print();”修改为“CObj0::print();”
    解析:1.虚函数的声明方式为:virtual <类型说明符> <函数名>(<参数表>),参数表中各参数之间应该用逗号隔开,因此第1个标识下应改为“virtual void move(int a, int b)”。
    2.主函数调用构造函数CObj1时,传递了四个实参,完成对变量m、n、x和y的初始化,变量 x和y是基类CObj0的数据成员,初始化通过基类构造函数CObj0(int i,int j)来完成,第2个标识下应改为“CObj1(int i, int j,int k):CObj0(i,j)”。
    3.由程序运行结果可知标识3下执行基类的print()函数,需要通过类名来指定需要调用的print()函数,即第3个标识下应改为“CObj0::print();”。
    解析: 暂无解析

  • 第11题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正程序中的错误。  本题的功能是:从键盘输入字符串s,然后输出字符串s中的字符个数。  注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。

    正确答案: 1.std::cout<<″please input a string:″<<std::endl;
    2.using namespace std;
    解析:1.第1个标识实现在屏幕上输出“please input a string:”的提示语句。在程序中用到C++标准库时,要使用std标准命名空间进行限定。cout为标准库函数,所以要声明cout是在命名空间std中定义的流对象,即第1个标识下的“std::cout<<″please input a string:″<<std::endl;”。
    2.第2个标识下的“namespace std;”语句是使用标准命名空间std,格式应该为“using namespace std;”。
    解析: 暂无解析

  • 第12题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:  1.声明类objA1,请在注释∥********1********后添加适当的语句。  2.为类objA0增加友元函数func(),请在注释∥********2********后添加适当的语句。  3.为类objA1增加友元函数func(),请在注释∥********3********后添加适当的语句。  4.函数func()返回objA1对象中的变量和objA0的静态变量的乘积,请在注释∥********4********后添加适当的语句。  注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。

    正确答案: 1.添加语句:“class objA1;”
    2.添加语句:“friend int func(objA1&obj);”
    3.添加语句:“friend int func(objA1&obj);”
    4.添加语句:“return obj.m_A1*objA0::m_A0;”
    解析:1.类objA0中引用objA1的成员对象,因此需要在类objA0前添加类objA1的声明,第1个标识下应添加语句:“class objA1;”。
    2.友元函数是在类声明中由关键字friend修饰的非成员函数,func()函数在类外部给出了具体的实现形式,即“int func(objA1&obj)”,因此第2个标识下应添加语句:“friend int func(objA1&obj);”,这里参数是obiA1类的对象obj。
    3.声明友元函数,因此第3标识下应语句:“friend int func(objA1&obj);”。
    4.类objA1的对象obj对象可以直接访问obj.m_A1,objA0的静态变量m_A0是所有对象的共享成员,其访问形式为:objA0::m_A0,因此第4个标识下应添加语句:“return obj.m_A1*objA0::m_A0;”。
    解析: 暂无解析

  • 第13题:

    使用VC++6.0打开考生交件夹下的源程序文件2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intN[4])的功能是用4个数字,组成互不相同且无重复数字的3位数,并将满足所有条件的数字输出到屏幕, 并且每输出一个3位数就换一行。 程序分析:可填在百位、十位、个位的数字都是1、2、3、0。组成所有的排列后再去掉不满足条件的排列。如果判定第一个数字是0,则也去掉。 试题程序: include<iostream.h> voidfun(intN[4]) { } intmain() intN[4]={1,2,3,0}; fun(N): return0; }


    正确答案:
    inti,j,k;
    for(i=0;i<4;i++)//百位循环
    {
    for(j=0;j<4;j++)//十位循环
    for(k=0;k<4;k++)//个位循环
    {
    if(i!=j&&j!=k&&k!=i&&N[i]!=0)//
    当三位数不同,并且百位不为0
    {
    cout<<N[i]<(N[i]<<N[k]<<endl;//输出这三位
    数组成的数字
    }
    }
    }
    【解析】本题利用3层循环,对3位数字是否相同进行判断。如果3位数不同,并且百位不为0,那么依次输出这3位数,即由3位数组成的数字。

  • 第14题:

    使用VC++6.0打开考生文件夹下的源程序文件2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intn)的功能是实现对一个整数的加密,具体的加密方法是一个4位长的整数,用每位数字加上3然后除以9的余数代替该数字,再将第1位和第4位交换,第2位和第3位交换,然后返回得到的密码。 程序输出结果为 1864 2075 注意:不能修改其他部分的代码。 试题程序: include<iostream.h> include<cmath> intfun(intn) { } intmain() { inti=1357: cout<<fun(i)<<endl; i=2468; cout<<fun(i)<<endl: return0; }


    正确答案:
    inti,a[4],t;
    a[0]=n%10;//取整型n的第1位数字
    a[1]=n%100/10;//取整型n的第2位数字
    a[2]=n%1000/100;//取整型n的第3位数字
    a[3]=n/1000;//取整型n的第4位数字
    for(i=0;i<=3;i++)//每位数字加3,取余
    {
    a[i]+=3;
    a[i]%=9;
    }
    t=a[0];//根据加密算法交换
    a[0]=a[3];
    a[3]=t;
    t=a[1];
    a[1]=a[2];
    a[2]=t;
    returna[3]*1000+a[2]*100+a[1]*10+a[0];
    //重组,返回加密数字
    【解析】本题首先取得要加密整数的每一位数字,并存
    入数组。根据加密算法,利用循环实现每位数字加3,再除以9取余。根据加密算法进行数字交换,最后重组,返回密码。

  • 第15题:

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

    Previous=9,Next=11

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

    include <iostream.h>

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

    void prevnext (int,int &,int&);

    int main ( )

    {

    int x=10,y,z;

    prevnext (x,y,z);

    cout << "Previous=" << y << ", Next=" << z<<end1;

    return 0;

    }

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

    void prevnext (int x, int prev, int next)

    {

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

    prev=x--;

    next=++x;

    }


    正确答案:(1)错误:在main()函数前缺少prevnext函数的声明 正确:void prevnext(intint &int &); (2)错误:void prevnext(int xint prevint next) 正确:void prevnext(int xint &prevint &next) (3)错误:prev=x--; 正确:prev=x-1;
    (1)错误:在main()函数前缺少prevnext函数的声明 正确:void prevnext(int,int &,int &); (2)错误:void prevnext(int x,int prev,int next) 正确:void prevnext(int x,int &prev,int &next) (3)错误:prev=x--; 正确:prev=x-1; 解析:(1)函数在使用前必须已经被定义,main()中调用prevnext函数,而该函数的实现在main()之后,所以在main()之前必须添加该函数的声明;
    (2)由运行结果可知,通过函数prevnext调动要改变main()中的实参值,所以prey和next都应为引用型参数:
    (3)由运行结果prev=x-1,而源程序的prev=x,x=x-1,这里涉及的是运算符的优先级问题。

  • 第16题:

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

    A:no parameters

    B:int parameter

    A:no parameters

    B:int parameter

    C:int parameter

    源程序文件test29_1.cpp清单如下;

    include <iostream.h>

    class A

    {

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

    private:

    A(){ cout<<"A:no parameters\n";}

    A(int a) {cout<<"A: int parameter\n";}

    };

    class B:public A

    {

    public:

    B(int a){cout<<"B:int Parameter\n";}

    };

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

    class C:public B,public A

    {

    public:

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

    C(int a) ::B(a) {cout<<"C: int parameter\n"; )

    };

    void main ( )

    {

    B b(1);

    C c(2);

    }


    正确答案:(1)错误:private: 正确:public: (2)错误:class C:public Bpublic A 正确:class C:public B (3)错误:C(int a)::B(a){cout"C:int parameter\n";) 正确:C(int a):B(a){cout"C:int parameter\n";}
    (1)错误:private: 正确:public: (2)错误:class C:public B,public A 正确:class C:public B (3)错误:C(int a)::B(a){cout"C:int parameter\n";) 正确:C(int a):B(a){cout"C:int parameter\n";} 解析:(1)一个类的构造函数和析构函数可以由系统自动生成,也可以由用户提供,但构造函数和析构函数都必须是该类的公有成员函数,否则编译时将出现错误,不能被调用;
    (2)A已经是B的基类,C公有继承B,A也就成为了C的基类,根据程序的运行结果可知,C是要公有继承B;
    (3)派生类的构造函数,初始化基类的参数,调用基类的构造函数时,使用符号“:”,而不是“::”;

  • 第17题:

    使用VC6打开考生文件夹下的工程test26_1,此工程包含一个源程序文件test26_1.cpp,但该程序运行有问题,请改正

    函数中的错误,使该程序的输出结果为:

    Values are: 1,2 and 3

    源程序文件test26_1.cpp清单如下;

    include <iostream.h>

    class CommonBase

    {

    public:

    int x;

    };

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

    class DeriveCommonA::public CommonBase

    {

    public:

    int y;

    };

    class DeriveCommonB:public CommonBase

    {

    public:

    int z;

    };

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

    class Overlapping:public DeriveCommonA; public DeriveCommonB

    {

    public:

    void Display()

    {

    cout<<"Values are: "<<DeriveCommonA::x<<", "<<y<<" and "<<z<<end1;

    }

    };

    int main ( )

    {

    Overlapping ov;

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

    ov.x=1;

    ov.y=2;

    ov.z=3;

    ov.Display();

    return 0;

    }


    正确答案:(1)错误:class DeriveCommonA::public CommonBase 正确:class DeriveCommonA:public CommonBase (2)错误:class Overlapping:public DeriveCommonA;public DeriveCommonB 正确:class Overlapping:public DeriveCommonApublic DeriveCommonB (3)错误:ov.x=1; 正确:ov.DeriveCommonA::x=1;
    (1)错误:class DeriveCommonA::public CommonBase 正确:class DeriveCommonA:public CommonBase (2)错误:class Overlapping:public DeriveCommonA;public DeriveCommonB 正确:class Overlapping:public DeriveCommonA,public DeriveCommonB (3)错误:ov.x=1; 正确:ov.DeriveCommonA::x=1; 解析:(1)主要考查考生对于派生类定义的理解,C++规定的继承格式是在类名的后面加冒号,之后是继承方式和继承类的名称,题目中错误的使用了作用域运算符;
    (2)主要考查考生是否掌握了多继承的定义,多继承的格式基本上和单继承相同,不过在多个基类之间应该使用逗号分开,题目中错误的使用了分号,分号在C++中是结束标志;
    (3)主要考查考生对于派生类的对象访问的掌握,x是类CommonBase的成员,如果不加限制的访问就会产生二义性,编译程序不知道这个x是A类的,还是B类的,所以必须使用作用域限制符“::”,为了解决这个问题可以使用虚基类。

  • 第18题:

    使用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)主要考查考生对于对象指针调用成员函数方法的掌握,必须使用符号“->”,而对象本身使用符号“.”。

  • 第19题:

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

    400

    40

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

    include <iostream.h>

    class Student

    {

    public:

    Student(int xx){x=xx;}

    virtual float calcTuition();

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

    private:

    int x;

    };

    float Student::calcTuition()

    {

    return float(x'x);

    }

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

    class GraduateStudent::public Student

    {

    public:

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

    GraduateStudent(int xx) ::Student(xx){}

    virtual float calcTuition();

    };

    float GraduateStudent::calcTuition()

    {

    return float(x*2);

    }

    void main()

    {

    Student s(20);

    GraduateStudent gs(20);

    cout<<s.calcTuition()<<end1;

    cout<<gs.calcTuition()<<end1;

    }


    正确答案:(1)错误:private: 正确:protected: (2)错误:class GraduateStudent::public Student 正确:class GraduateStudent:public Student (3)错误:GraduateStudent(int XX)::Student(xx){} 正确:GraduateStudent(int xx):Student(xx){}
    (1)错误:private: 正确:protected: (2)错误:class GraduateStudent::public Student 正确:class GraduateStudent:public Student (3)错误:GraduateStudent(int XX)::Student(xx){} 正确:GraduateStudent(int xx):Student(xx){} 解析:(1)本题考查点为派生类对基类成员的访问。派生类中的成员不能访问基类中的私有成员,只可以访问基类中的公有成员和保护成员。
    (2)派生类的一般格式“class派生类名>:继承方式1>基类名1>,……{派生类新定义成员>};”,所以应将“::”改为规定的“:”,“::”是作用域运算符,用来标识某个成员属于某个类。
    (3)派生类构造函数在类体内定义的一般格式“派生类名>:基类名1>(参数表1>),……{派生类构造函数体>}”,所以应将“::”改为规定的“:”。

  • 第20题:

    请教:2016年计算机二级C++基础练习三简答题9如何解答?

    使用VC6打开考生文件夹下的源程序文件2.cpp。阅读下列函数说明和代码,补充空出的代码。函数sum(intn)返回1,2,3,…,n的和。其中n大于0。

    程序要求使用递归实现上述功能。

    注意:不能修改程序的其他部分,只能补充sum函数。

    试题程序:

    #include

    #include

    intsum(intn)

    {

    }

    voidmain()

    {

    cout<<"1+2+3+…+100="<

    endl;

    return;

    }


    【答案】

      return(n==1)?1:n+sum(n-1);

      【解析】本题主要考查三目运算符?:的使用和递归函数的编制。程序功能是计算前n个自然数的和,n为参数。程序的运算过程如下,不是一般性,假设n为3,首先执行sum(3),因为3不等于1,所以return语句返回的值为3+sum(3-1),然后执行sum(3-1)即sum(2),2不等于1,所以return语句返回的值为2+sum(2-1),然后执行sum(2-1)即sum(1),因为1等于1,所以return语句返回的值为1,即问号后的值,所以最终结果为3+2+1=6,而题中n为100,所以结果为5050。

  • 第21题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:  1,2,3,4,5,  注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。

    正确答案: 1 public:TestClass(int i)
    2 int i(10);
    3 i--;
    解析:1.调试程序,错误提示类TestClass中的构造函数TestClass被定义为私有的,无法获得,因此这里应该改变类的访问修饰符为public,即“public:TestClass(int i)”。
    2.题目中要求输出结果为1,2,3,4,5,即循环5次。第三个标识处,while循环条件是i大于5。题干中要求不能删除i初始化中的括号,所以在括号中添加i的初始值。i要大于5且while循环要执行5次,所以i的初始值为10,而while循环中对i的操作应该是i--,这样第二个和第三个标示下应该是“int i(10);”和“i--”。
    解析: 暂无解析

  • 第22题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:  number1=4.8   number2=93.6   number3=0.9  PRODUCT=404.352  注意:错误的语句在∥******error******的下面。修改该语句即可。其他的语句不能修改。

    正确答案: 1.修改为“double product=number1* number2 * number3;”
    2.修改为“cout<<number1=<<number1<<'\t'<<number2=<<number2<<'\t';”
    3.修改为“cout<<number3=<<number3<<'\t'<<endl;”
    解析:1.变量product没有定义,number1、number2和number3均为double型变量,product是这三个变量的乘积,其数据类型是double型,因此第1个标识下应将语句“product = number1 * number2 * number3;”修改为“double product = number1 * number2 * number3;”。
    2.cout流中的数据是用流插入运算符“<<”顺序加入的,第2个标识下是输出number1、number2和number3的值,各个数据之间用“<<”顺序加入,不能用“<”,第2个标识下应将语句“cout<<number1=<<number1<'\t'<<number2=<<number2<'\t';”修改为“cout<<number1=<<number1<<'\t'<<number2=<<number2<<'\t';”。
    3.输出“PRODUCT=404.352”在“number1=4.8 number2=93.6 number3=0.9”的下一行,因此在输出“number3=0.9”后应换行,故第3个标识下的语句应该添加换行符,语句修改为“cout<<number3=<<number3<<'\t'<<endl;”。
    解析: 暂无解析

  • 第23题:

    问答题
    使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:  Max is 7  提示:max()函数实现找出两个数中的最大值,并作为函数值返回。  注意:错误的语句在∥******error******的下面,修改该语句即可。

    正确答案: 1.将语句“int max(int a, int b)”修改为“int max(int&a,int &b)”
    2.将语句“max(-3,n);”修改为“max(m,n);”
    解析:1.函数max采用的参数传递机制是传地址,因此第1个标识下应该将语句“int max(int a, int b)”修改为“int max(int&a,int &b)”。
    2.调用函数max,实参类型应为一个整型变量,第2个标识下应将语句“max(-3,n);”修改为“max(m,n);”。
    解析: 暂无解析