一起答

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

如果您发现本试卷没有包含本套题的全部小题,请尝试在页面顶部本站内搜索框搜索相关题目,一般都能找到。
  1. 声明复数类Complex,该类中有两个私有变量rel,image分别表示一个复数的实部和虚部。为Complex类添加适当的构造函数,并使用友元函数add实现复数加法。

    #include ﹤iostream﹥

    using namespace std;

    class Complex

    {

    private:

    double real, image;

    public:

    void setRI( double a, double b)

    {

    real=a;image=b;

    }

    double getReal( )

    {

    return real;

    }

    double getImage( )

    {

    return image;

    }

    void print( )

     {

    if( image ﹥0)

    cout﹤﹤"复数:"﹤reall﹤﹤"+"﹤﹤ image﹤﹤"i"﹤﹤endl;

    if( image ﹤0)

    cout﹤﹤"复数:"﹤﹤real﹤﹤"-"﹤﹤ image﹤﹤"i﹤endl;

    }

    friend Complex add( Complex, Complex); //声明友元函数

    };

    void main( )

    {

    Complex c1(19, 0.864), c2, c3;

    c2.setRI(90,125.012);

    c3=add(c1, c2)cout﹤﹤"复数一:";

    c1.pint( );cout﹤﹤"复数二:";

    c2.pint( );cout﹤﹤"相加后:";

     c3.pint( );

    }

  2. #include ﹤iostream. h﹥

    class Based

    {public:

    Based( )

    {cout﹤﹤" Based构造函数\n"; fun( ); }

    virtual void fun( )

    {cout﹤﹤" Based::fun( )函数\n"; }

    };

    class Derived: publicBase

    {public:

    Derived( )

    {cout﹤﹤" Derived构造函数\n"; fun( ); }

    void fun( )

     { cout﹤﹤"Derived::fun( )函数\n"; }

    };

    void main( )

    {Derived d;}

  3. 下面是一个输入半径,输出其面积和周长的C++程序,在横线处填上正确的语句。(圆周率为3.14159)#include "stdafx. h"

    #include ﹤iostream﹥

    #include "math. h"

    using namespace std;

    _________ //宏定义void main( )

    {

    double rad;

    cout ﹤﹤ "rad =";cin ﹥﹥ rad;

    double l=2.0*pi *rad;_________;

    cout﹤﹤ "\n The long is: "﹤﹤l﹤﹤ endl;

    cout﹤﹤ "The area is: "﹤﹤s﹤﹤ endl;

    }

  4. #include ﹤iostream. h﹥

    class example

    {

    int a;public:example(int b=5)

    { a=b++; }

    void print( )

    { a=a+1; cout﹤﹤a﹤﹤" "; }

    void print( )

    const

    { cout ﹤﹤a﹤﹤ endl; }

    };

    void main( )

    { example x;const example y(2);x. print( );y. print( );}

  5. 在下面程序的横线处填上适当的字句,使输出为:0,2,10。

    #include "stdafx. h"

    #include ﹤iostream﹥

    #include "math. h"

    using namespace std;

    class Magic

    {

     double x;

    public:

    Magic( double d =0. 00): x( fabs(d))

    { }

    Magic operator +(_________){return Magic(sqrt(x*x+c. x*c. x));

    }

    _________&operator ﹤﹤(ostream & stream, Magic &c)

    { stream ﹤﹤c.x;return stream;}

    };

    void main( )

    {

    Magic ma;

    cout ﹤﹤ma﹤﹤","﹤﹤Magic(2)﹤﹤", "﹤﹤ma+Magic(-6)+ Magic(-8)﹤﹤endl;

    }

  6. 在下面程序的横线处填上适当的字句,使该程序执行结果为40。

    #include ﹤iostream.h﹥

    class Test

    {

    public:_________;

    Test (int i=0)

    { x=i+x; }

    int Geytnum( )

    { return Test:: x +10; }

    };

    _________;

    void main( )

    {

    Test test;cout ﹤﹤ test. Getmum( )﹤﹤ endl;

    }

  7. 在下面程序的横线处填上适当字句,完成类的定义。

    class line;

    class box

    {

    private:

    int color;

    int upx, upy;

    int lowx, lowy;

    pubnic:

    _________void set_color (int c )

    {

     color =c;

    }void define_box(int x1, int y1, int x2, int y2)

    { upx=x1; upy =y1; lowx =x2; lowy =y2; }

    };

    class line

    {

    private:

    int color;

    int startx, starty;

    int endx, endy;

    public:

    friend int same_color(line l, box b)

    void set_color (int c) { color =c; }

    void define_line(_________)

    { startx =x1; starty =y1; endx =x2; endy =y2; }

    };

    int same_color (line l, box b)

    {

     if (l. color==b. color) return l;

    retum 0;

    }

  8. 1 #include ﹤iostream﹥

    2 using namespace std;

    3 int main( )

    4 { inta=10, b=18, c=77;

    5 const int *p = c;

    6 cout ﹤﹤*p﹤﹤ endl;

    7 return 0;

    8 }

  9. 下面程序中用来求数组和。请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:s=150。

    #include ﹤iostream.h﹥

    class Arr

    {

    int *a, n;

    public:

    Arr( ):a(0),n(0) { }Arr( int *aa, int nn)

    {

    n=nn;a= new int[n];

    for(int i=0; i﹤nn; i ++)*(a+i)=*(aa+i);

    }

    ~Arr( )

    {delete a; }

    _________;

    {

    return *(a+i);

    }

    };

    void main( )

    {

    int b[5]={10,20,30,40,50};

    Arr a1(b, 5)int i=0, s=0;

    _________s+=a1. GetValue(i);

    cout﹤﹤"s="﹤﹤s﹤﹤endl;

    }

  10. 1 #include ﹤iostream﹥

    2 using namespace std;

    3 int main( ){

    4 const int num =20;

    5 int scores[num];

    6 for(int i=1; i﹤=num; i ++)

    7 scores[i]=i;

    8 return 0; }

  11. 1 #include ﹤iostream.h﹥

    2 class Aton

    3 { int X, Y;

    4 protected:

    5 int zx, zy;

    6 public:

    7 void init( int i, int) { zx=i; zy =j; }

    8 Aton(int i, int j, int n=0, int m=0)

    9 { X=i, Y=j, zx=m, zy=n;

    10 }

    11 };

    12 void main( )

    13 { Aton A(25,20,3,5);

    14 A.init(5,9);

    15 cout ﹤﹤A.X﹤﹤ endl;

    16 cout ﹤﹤A.Y﹤﹤ endl;

    17 }

  12. 1 #include "stdafx. h"

    2 #include ﹤iostream﹥

    3 using namespace std;

    4 class Test

    5 { prvate:

    6 int x, y=20;

    7 public:

    8 Test(int i, int j) { x=i, y=j; }

    9 int getx( ) { return x; }

    10 int gety ( ) { return y; }

    11 };

    12 void main( )

    13 { Test mt(10,20);

    14 cout ﹤﹤mt. getx( )﹤﹤ endl;

    15 cout ﹤﹤mt. gety( )﹤﹤ endl;

    16 }

  13. 1 #include ﹤iostream.h﹥

    2 #include ﹤string. h﹥

    3 class Base4 {public:

    5 Base(char *s="\0") { strcpy(name, s); }

    6 void show( );

    7 protected:

    8 char name[20];

    9 };

    10 Base b;

    11 void show( )

    12 { cout ﹤﹤"name: "﹤ b. name ﹤ endl; }

    13 void main( )

    14 { Base d2("hello");

    15 show( );

    16 }

  14. 将指向对象的引用作为函数的形参,形参是对象的引用,实参是_________。

  15. 重载的运算符保持其原有的_________、优先级和结合性不变。

  16. 在C++中,利用向量类模板定义一个具有10个int的向量A,其元素均被置为1,实现此操作的语句是_________。

  17. 若int a=8; int b=(++a)++; 则b=_________。

  18. 派生类的主要用途是可以定义其基类中_________。

  19. 在函数前面用_________保留字修饰时,则表示该函数为内联函数。

  20. 在保护派生中,基类权限为public的成员在派生类中为_________。

  21. 面向对象的四个基本特性是多态性、继承性、封装性_________。

  22. C++语言的_________提供了与要操作的元素类型无关的算法。

  23. 为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常为该类定义_________。

  24. 如果要把A类成员函数f( )且返回值为void声明为类B的友元函数,则应在类B的定义中加入语句_________。

  25. C++语言中如果调用函数时,需要改变实参或者返回多个值,应该采取_________方式。

  26. 书写程序语句时,适当增加空行和程序注释以增加程序的_________。

  27. 设在程序中使用如下语句申请了一个对象数组:Point *pr= new Point[2]; 当要释放ptr指向的动态数组对象时,所使用的语句是_________。

  28. 定义虚函数所用的关键字是_________。

  29. 一个抽象类的派生类可以实例化的必要条件是实现了所有的_________。

  30. cin是输人流istream的一个对象,处理标准输入;_________是输出流ostream的一个对象,处理标准输出。

  31. #include ﹤iostream. h﹥命令中,include的意义是:_________。

  32. this指针始终指向调用成员函数的_________。

  33. 假定AB为一个类,则执行语句AB a[10]; 时,系统自动调用该类的构造函数的次数为_________。

  34. 下面叙述中错误的是(  )

    • A.预处理命令都必须以“#”开始
    • B.在程序中凡是以“#”开始的语句行都是预处理命令行
    • C.C++程序在程序执行过程中对预处理命令进行处理
    • D.一行只能写一条预处理命令
  35. 下列关于友元函数的描述,正确的是(  )

    • A.友元函数可以存取私有成员、公有成员和保护成员
    • B.友元函数不可以是一个类
    • C.友元函数的作用之一是实现数据的隐藏性
    • D.在类中说明的友元函数,函数的定义不可在类体之外
  36. 下列说法不正确的是(  )

    • A.主函数main中定义的变量在整个文件或程序中有效
    • B.不同函数中,可以使用相同名字的变量
    • C.形式参数是局部变量
    • D.在一个函数内部,可以在复合语句中定义变量,这些变量只在复合语句中有效
  37. 非数组指针或引用型变量做实参时,它和对应虚参之间的数据传递方式是(  )

    • A.地址传递
    • B.单向值传递
    • C.双向值传递
    • D.由用户指定传递方式
  38. 下列输出字符'd'的方法中,错误的是(  )

    • A.cout﹤﹤put('d')
    • B.cout﹤﹤'d'
    • C.cout. put('d')
    • D.char a='d'; cout﹤﹤a;
  39. 下面关于C++字符数组的叙述中,错误的是(  )

    • A.字符数组可以放字符串
    • B.字符数组的字符可以整体输入、输出
    • C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
    • D.可以用关系运算符对字符数组比较大小
  40. 关于引用,下列的说法中错误的是(  )

    • A.引用是给被引用的变量取一个别名
    • B.引用主要是用来作函数的形参和函数的返回值
    • C.在声明引用时,要给它另开辟内存单元
    • D.在声明引用时,必须同时使它初始化
  41. 下列关于类的权限的描述错误的是(  )

    • A.类本身的成员函数只能访问自身的私有成员
    • B.类的对象只能访问该类的公有成员
    • C.普通函数不能直接访问类的公有成员,必须通过对象访问
    • D.一个类可以将另一个类的对象作为成员
  42. 下面不能够判断字符串S是空串的是(  )

    • A.if(S[0]==0)
    • B.if(strlen(S)==0)
    • C.if(strcmp(S, " ")==0)
    • D.if(S=='\0')
  43. 若二维数组y有m列,则位于y[i][j]之前的元素数量是(  )

    • A.j*m+i
    • B.i*m+j
    • C.i*m+j-1
    • D.i*m +j+1
  44. 在C++中,函数原型不能标识(  )

    • A.函数的返回类型
    • B.函数参数的个数
    • C.函数参数类型
    • D.函数的功能
  45. 下列关于类的继承描述中,错误的是(  )

    • A.基类不一定具有派生类的全部属性和方法
    • B.派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数
    • C.继承描述类的层次关系,派生类可以具有与基类相同的属性和方法
    • D.一个基类可以有多个派生类,一个派生类可以有多个基类
  46. 关于构造函数的说法,不正确的是(  )

    • A.没有定义构造函数时,系统将不会调用它
    • B.其名与类名完全相同
    • C.它在对象被创建时由系统自动调用
    • D.没有返回值
  47. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是(  )

    • A.类
    • B.对象
    • C.函数体
    • D.数据块
  48. 逻辑运算符两侧运算对象的数据(  )

    • A.是逻辑型数据
    • B.只能是整型数据
    • C.只能是整型或字符型数据
    • D.可以是任何类型的数据
  49. 对使用关键字new所开辟的动态存储空间,释放时必须使用(  )

    • A.free
    • B.create
    • C.delete
    • D.release
  50. if与else在使用过程中为避免嵌套出现二义性,C++中规定与else子句配对的是(  )

    • A.其之前最近的if语句
    • B.其之前最近且尚未配对的if语句
    • C.缩排位置相同的if语句
    • D.其之后最近的if语句
  51. 已知:print( )函数是一个类的常成员函数,无返回值,下列表示中正确的是(  )

    • A.void print( )const
    • B.void print(const)
    • C.void const print( )
    • D.const void print( )
  52. 下列输出语句中,正确的是(  )

    • A.cout﹤﹤("%c\n"," student")
    • B.cout﹤﹤("%s\n","hello")
    • C.cout﹤﹤ ("%c\n","c")
    • D.cout ﹤ ("%s\n", &a)
  53. 按照标识符的要求,不能组成标识符的符号是(  )

    • A.连接符
    • B.下划线
    • C.大小写字母
    • D.数字字符