一起答

自考C++程序设计2017年4月试题及答案解析

如果您发现本试卷没有包含本套题的全部小题,请尝试在页面顶部本站内搜索框搜索相关题目,一般都能找到。
  1. 定义一个生日类,数据成员有年、月、日。定义一个人员类,数据成员有姓名、性别、生日。人员类中的生日是生日类的对象,两个类都有构造函数和显示函数。在主函数中声明一个人员类对象,屏幕显示其数据。

  2. #include ﹤iostream﹥

    using namespace std;

    void sort( int L[ ], int n)

    {

    int i, k, flag, temp;

    flag=n-1;

    while( flag﹥0)

    {

     k=flag -1;

     flag=0;

    for(j=0; j﹤=k; j++)

    {

     if(L[j]﹥L[j+1])

    {

     temp=L[j];

     L[j]=L[j+1];

    L[j+1]=temp;

     flag =j;

    }

    }

    }

    }

    void main( )

    {

     int array[4]={7,2,3,4};

    sort( array, 4);

    cout ﹤﹤"The sorted numbers:";

    for(int i=0; i﹤4; i++)

    cout ﹤﹤ array[i];

    }

  3. #include ﹤iostream﹥

    using namespace std;

    class x

    {protected: int a;public: x( ) {a=1; }

    };

    class x1;

    virtual public x

    {

     public:

    x1( )

     {a+=1; cout﹤﹤"x1: "﹤﹤a﹤﹤","; }

    };

    class x2:

    virtual public x

    {

    public:x2( )

     {a+=2; cout﹤﹤"x2: "﹤﹤a﹤﹤","; }

    };

    class y:

    public x1,

     public x2

    {

    public:y( )

    { cout ﹤﹤"y: "﹤﹤a﹤﹤ endl; }

    };

    void main( )

    {

     y obj;

     }

  4. 程序运行结果为3

    #include ﹤iostream﹥

    using namespace std;

    int main( )

    {

    int a=16, b=21, m=0;_________

    {

    case 0: m++; break;

    case 1: m++ ;

    switch(b%3)

    {

    _________

    case 1: m++; break;

    }

    }

    cout ﹤﹤m﹤﹤ endl;

    return 0;

    }

  5. 定义平面上一个点的类point,有双精度型私有数据成员横坐标x和纵坐标y,公有成员函数有写入函数input( )、求原点距离函数distance( )和显示函数show( ),请完成point( )的类图。

  6. 程序的运行结果为:12

    #include ﹤iostream﹥

    using namespace std;

    class Base

    {

     public:

    int a;Base (int i)

     {

     a=i;

    }

    };

    class Derived:

    public Base

    {

    int a;

    public:

    Derived(int x):

    Base(x) { }

    void show( )

    {

    _________; //输出基类数据成员a的值

    }

    };

    void main( }

    {_________d. show ( );

    }

  7. #include ﹤iostream﹥

    using namespace std;

    class F

    {

     public:

    _________

    };

    double F:: operator( ) (double x, double y) const

    {

    retum(x+5)*y;

    }

    _________

    {

     F f;cout﹤﹤f(1.5, 2.2)﹤﹤endl;

    }

  8. 程序在主函数中创建派生类Derived的对象obj,调用f( )函数后输出DBC

    #include ﹤iostream﹥

    using namespace std;

    class Base

    {

    public:

    virtual void f( )

    {

    cout ﹤﹤"B";

    }

    };

    _________

    {

     public:

    Derived( )

     {

    cout ﹤﹤"D";

    }

    virtual void f( )

    {

    Base:: f( );

    cout ﹤﹤"C";

     }

    };

    int main( )

    {

    Base *ptr;

    Derived obj;

    ptr=&obj;

    _________

    retun 0;

    }

  9. 此程序调用 findmax( )函数,返回数组中的最大值。

    include ﹤iostream﹥

    using namespace std;

    int findmax (int *a, int n)

    {

    int *p, *s;

    for(p=a, s=a; p-a﹤n; p++)

    if(*P﹤*s) *s=*p;

    return(* s);

    }

    void main( )

    {

    int x[5]={12,2,8,47};

    cout﹤﹤ findmax(x, 5)﹤﹤endl;

    }

  10. #include ﹤iostream﹥

    using namespace std;

    int main( )

    {

    int x=15;

    while(10﹤x﹤50)

    {

    x++;if(x/3)

     {

     x ++; break;

     }

    }

    cout﹤﹤x﹤﹤endl;

    return 0;

    }

  11. 此程序改正后的运行结果为:1 2 5 11 21

    #include ﹤iostream﹥

    using namespace std;

    int f(int);int main( )

    {

    int i;

    for(i=0; i﹤5; i++)

    cout﹤﹤f(i)﹤﹤" ";

    return 0;

    }

    int f(int i)

    {

    int k=1;

    for(;i﹥0;i--)k+=i;

    return k;

    }

  12. #include ﹤iostream﹥

    using namespace std;

    void swap(int &, int &);

    void main( )

    {

    int a=5, b=10;

    swap(a, b);

    cout﹤﹤"a="﹤﹤a﹤﹤",b="﹤﹤b﹤﹤end;

    }

    void swap(int x, int y)

    {

     int temp;

    temp =x;x=y;y=temp;

    }

  13. C++程序中使用string类定义存储字符串的对象时,必须在程序中包含这个类的头文件,即使用语句_________。

  14. 以下是对类 Sample的定义

    #include ﹤iostream﹥

    using namespace std;

    class Sample

    {

    public:

    Sample(int val);

    ~Sample( );

    private:

    float a =2.5;

    Sample( );

    };

  15. C++为结构动态分配内存的一般格式是“指针名=_________;”,当不再使用这个空间时必须用“delete指针名;”释放空间。

  16. 所谓“引用”就是将一个新标识符和一块已经存在的_________相关联,通常用于函数的参数表中或者作为函数的返回值

  17. 若有整型变量a=1,b=-2,c=3;则表达式a-b﹥b?c:a+b的值为_________。

  18. this指针保证每个对象拥有自己的数据成员,又共享处理这些数据成员的_________。

  19. 若有一个Myclass类,则执行语句“MyClass obj1,obj2[2],*p”后,自动调用该类的构造函数_________次。

  20. 在C++中输入输出是通过流来完成的,输出操作是将一个对象的状态转换成一个_________序列。

  21. C++语言中,派生类继承了基类的全部数据成员和除构造函数及_________之外的全部函数。

  22. 定义以下变量并假设已赋确定的值:“ char w; int x; float y; double z;”,则表达式“w*x+z-y”的数据类型是_________。

  23. 在类中定义和实现的函数可以成为_________,它能够加快程序执行速度。

  24. 重载函数必须有不同的_________。

  25. 源程序文档化要求程序应加注释,注释一般分为序言性注释和_________。

  26. 将数学表达式 写成C++语言表达式为:_________。

  27. 模板函数的真正代码是在源程序中_________时产生。

  28. 若有以下定义:double w[9];则w数组元素下标的下限是0,上限是_________。

  29. 设int x[3][4]; 则x数组中含有_________个int类型的数组元素。

  30. C++语言中提供了3种循环语句:_________循环语句、for循环语句和do_while循环语句。

  31. 在“int a=10, *p=&a;”语句中,p的值是_________。

  32. 执行3条语句“int a, b, *c=&a; int *p=c; p=&b;”后,c指向_________。

  33. 一般C++语言源程序文件的后缀是.cpp;经过编译后,生成文件的后缀是.obj;经过连接后,生成文件的后缀是_________。

  34. 有以下程序段,其输出结果是(  )#include ﹤iostream﹥using namespace std;void main( ){ char b[ ] ="Hello, you";b[5]='!';cout ﹤﹤b﹤﹤endl;}

    • A.Hello, you
    • B.Hello
    • C.Hello! you
    • D.!
  35. 下列关于虚函数的描述中,正确的是(  )

    • A.使用虚函数就一定产生多态性
    • B.虚函数只能是类中的一个成员函数,但不能是静态成员
    • C.一个类中仅可以声明一个纯虚函数
    • D.在构造函数和析构函数中调用虚函数采用动态联编
  36. 考虑函数原型void pass(int x, int y=5, char z='*'),下面的函数调用中,属于不合法调用的是(  )

    • A.pass(5)
    • B.pass(5, 8)
    • C.pass(6, '#')
    • D.pass(0, 0, '*')
  37. 下面关于对象概念的描述中错误的是(  )

    • A.任何对象都必须有继承性
    • B.对象是属性和方法的封装体
    • C.对象间的通信靠消息传递
    • D.操作是对象的动态属性
  38. 对于下面定义的类Myclass,在函数f( )中将对象成员n的值修改为50的语句应该是(  )class Myclass{ public:Myclass( int i) { n=i; }void SetNum(int x) { n=x; }private:int n;};int f( ){ Myclass *p=new Myclass(45);_________}

    • A.p-﹥SetNum(50)
    • B.SetNum(50)
    • C.p-﹥n=50
    • D.*p-﹥SetNum (50)
  39. 以下关于运算符重载的描述中,错误的是(  )

    • A.运算符重载其实就是函数重载
    • B.成员运算符比友元运算符少一个参数
    • C.需要使用关键字operator
    • D.成员运算符比友元运算符多一个参数
  40. C++语言的跳转语句中,对于beak和 continue说法正确的是(  )

    • A.break语句只应用于循环体中
    • B.continue语句只应用于循环体中
    • C.break是无条件跳转语句,continue不是
    • D.break和 continue的跳转范围不够明确,容易产生问题
  41. 下列函数的说明中,表示纯虚函数的是(  )

    • A.virtual int vf(int)
    • B.void f(int)=0
    • C.virtual void vf( )=0
    • D.virtual void vf(int) { }
  42. 已知:“int a=5; char c='a';”则输出语句cout﹤﹤c+1﹤﹤a﹤﹤c;的显示结果是(  )

    • A.65a
    • B.985a
    • C.98'5'a
    • D.65'a'
  43. 下面程序的输出结果是(  )#include ﹤iostream﹥using namespace std;int main( ){ int a=1, b=-2, c=3;if(a﹤b)if(b﹤0) c=0;else c+=1;cout ﹤﹤c﹤﹤endl;return 0;}

    • A.0
    • B.2
    • C.3
    • D.4
  44. 不能作为函数重载的判断依据的是(  )

    • A.const
    • B.返回类型
    • C.参数个数
    • D.参数类型
  45. 下列变量命名中,非法的是(  )

    • A.A**LONG
    • B.MyCar
    • C.my_car
    • D.a48
  46. 关于对类的描述中,错误的是(  )

    • A.类是创建对象的样板
    • B.类是具有唯一标识符的实体
    • C.类就是C语言中的结构类型
    • D.类是具有共同行为的若千对象的统一描述体
  47. 在C++中,字符型数据在内存中的存放形式为(  )

    • A.原码
    • B.BCD码
    • C.ASCII码
    • D.反码
  48. 友元函数的主要作用是(  )

    • A.提高程序的效率
    • B.加强类的封装性
    • C.实现数据的隐蔽性
    • D.增加成员函数的种类
  49. 以下有关构造函数的叙述中,错误的是(  )

    • A.构造函数名必须和类名一致
    • B.构造函数在定义对象时自动执行
    • C.在一个类中构造函数有且仅有一个
    • D.构造函数可以在类体内声明在类体外实现
  50. 以下叙述中正确的是(  )

    • A.类成员的定义必须放在类体内部
    • B.在类中,不作特别说明的数据成员均为私有类型
    • C.在类中,不作特别说明的数据成员均为公有类型
    • D.类成员的定义必须是成员变量在前,成员函数在后
  51. 若有定义int *p= new int(0),则下列说法正确的是(  )

    • A.系统用指针变量p来表示所指整型变量
    • B.声明一个指针变量p,指向名为new的存储单元
    • C.系统为指针变量p分配一个整型数据的存储空间
    • D.通过运算符new,分配一个整型数据的存储空间,并将其内存地址赋予指针变量
  52. 以下说法中不正确的是(  )

    • A.C++程序中必须有一个主函数main( ),而且是从main( )的第一条语句开始执行
    • B.非主函数都是在执行主函数时,通过函数调用或嵌套调用而得以执行的
    • C.主函数可以在任何地方出现
    • D.主函数必须出现在固定位置
  53. 以下有关类与对象的叙述中,错误的是(  )

    • A.对象是类的一个实例
    • B.一个类可以有多个对象
    • C.任何一个对象都归属于一个具体的类
    • D.只要是某个类的对象,那么该对象就可以访问这个类的所有成员