自考C++程序设计2017年10月试题及答案解析
-
声明复数类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( );
}
-
#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;}
-
下面是一个输入半径,输出其面积和周长的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;
}
-
#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( );}
-
在下面程序的横线处填上适当的字句,使输出为: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;
}
-
在下面程序的横线处填上适当的字句,使该程序执行结果为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;
}
-
在下面程序的横线处填上适当字句,完成类的定义。
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;
}
-
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 }
-
下面程序中用来求数组和。请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为: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;
}
-
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; }
-
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 }
-
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 }
-
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 }
-
将指向对象的引用作为函数的形参,形参是对象的引用,实参是_________。
-
重载的运算符保持其原有的_________、优先级和结合性不变。
-
在C++中,利用向量类模板定义一个具有10个int的向量A,其元素均被置为1,实现此操作的语句是_________。
-
若int a=8; int b=(++a)++; 则b=_________。
-
派生类的主要用途是可以定义其基类中_________。
-
在函数前面用_________保留字修饰时,则表示该函数为内联函数。
-
在保护派生中,基类权限为public的成员在派生类中为_________。
-
面向对象的四个基本特性是多态性、继承性、封装性_________。
-
C++语言的_________提供了与要操作的元素类型无关的算法。
-
为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常为该类定义_________。
-
如果要把A类成员函数f( )且返回值为void声明为类B的友元函数,则应在类B的定义中加入语句_________。
-
C++语言中如果调用函数时,需要改变实参或者返回多个值,应该采取_________方式。
-
书写程序语句时,适当增加空行和程序注释以增加程序的_________。
-
设在程序中使用如下语句申请了一个对象数组:Point *pr= new Point[2]; 当要释放ptr指向的动态数组对象时,所使用的语句是_________。
-
定义虚函数所用的关键字是_________。
-
一个抽象类的派生类可以实例化的必要条件是实现了所有的_________。
-
cin是输人流istream的一个对象,处理标准输入;_________是输出流ostream的一个对象,处理标准输出。
-
#include ﹤iostream. h﹥命令中,include的意义是:_________。
-
this指针始终指向调用成员函数的_________。
-
假定AB为一个类,则执行语句AB a[10]; 时,系统自动调用该类的构造函数的次数为_________。
-
下面叙述中错误的是( )
- A.预处理命令都必须以“#”开始
- B.在程序中凡是以“#”开始的语句行都是预处理命令行
- C.C++程序在程序执行过程中对预处理命令进行处理
- D.一行只能写一条预处理命令
-
下列关于友元函数的描述,正确的是( )
- A.友元函数可以存取私有成员、公有成员和保护成员
- B.友元函数不可以是一个类
- C.友元函数的作用之一是实现数据的隐藏性
- D.在类中说明的友元函数,函数的定义不可在类体之外
-
下列说法不正确的是( )
- A.主函数main中定义的变量在整个文件或程序中有效
- B.不同函数中,可以使用相同名字的变量
- C.形式参数是局部变量
- D.在一个函数内部,可以在复合语句中定义变量,这些变量只在复合语句中有效
-
非数组指针或引用型变量做实参时,它和对应虚参之间的数据传递方式是( )
- A.地址传递
- B.单向值传递
- C.双向值传递
- D.由用户指定传递方式
-
下列输出字符'd'的方法中,错误的是( )
- A.cout﹤﹤put('d')
- B.cout﹤﹤'d'
- C.cout. put('d')
- D.char a='d'; cout﹤﹤a;
-
下面关于C++字符数组的叙述中,错误的是( )
- A.字符数组可以放字符串
- B.字符数组的字符可以整体输入、输出
- C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
- D.可以用关系运算符对字符数组比较大小
-
关于引用,下列的说法中错误的是( )
- A.引用是给被引用的变量取一个别名
- B.引用主要是用来作函数的形参和函数的返回值
- C.在声明引用时,要给它另开辟内存单元
- D.在声明引用时,必须同时使它初始化
-
下列关于类的权限的描述错误的是( )
- A.类本身的成员函数只能访问自身的私有成员
- B.类的对象只能访问该类的公有成员
- C.普通函数不能直接访问类的公有成员,必须通过对象访问
- D.一个类可以将另一个类的对象作为成员
-
下面不能够判断字符串S是空串的是( )
- A.if(S[0]==0)
- B.if(strlen(S)==0)
- C.if(strcmp(S, " ")==0)
- D.if(S=='\0')
-
若二维数组y有m列,则位于y[i][j]之前的元素数量是( )
- A.j*m+i
- B.i*m+j
- C.i*m+j-1
- D.i*m +j+1
-
在C++中,函数原型不能标识( )
- A.函数的返回类型
- B.函数参数的个数
- C.函数参数类型
- D.函数的功能
-
下列关于类的继承描述中,错误的是( )
- A.基类不一定具有派生类的全部属性和方法
- B.派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数
- C.继承描述类的层次关系,派生类可以具有与基类相同的属性和方法
- D.一个基类可以有多个派生类,一个派生类可以有多个基类
-
关于构造函数的说法,不正确的是( )
- A.没有定义构造函数时,系统将不会调用它
- B.其名与类名完全相同
- C.它在对象被创建时由系统自动调用
- D.没有返回值
-
所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是( )
- A.类
- B.对象
- C.函数体
- D.数据块
-
逻辑运算符两侧运算对象的数据( )
- A.是逻辑型数据
- B.只能是整型数据
- C.只能是整型或字符型数据
- D.可以是任何类型的数据
-
对使用关键字new所开辟的动态存储空间,释放时必须使用( )
- A.free
- B.create
- C.delete
- D.release
-
if与else在使用过程中为避免嵌套出现二义性,C++中规定与else子句配对的是( )
- A.其之前最近的if语句
- B.其之前最近且尚未配对的if语句
- C.缩排位置相同的if语句
- D.其之后最近的if语句
-
已知:print( )函数是一个类的常成员函数,无返回值,下列表示中正确的是( )
- A.void print( )const
- B.void print(const)
- C.void const print( )
- D.const void print( )
-
下列输出语句中,正确的是( )
- A.cout﹤﹤("%c\n"," student")
- B.cout﹤﹤("%s\n","hello")
- C.cout﹤﹤ ("%c\n","c")
- D.cout ﹤ ("%s\n", &a)
-
按照标识符的要求,不能组成标识符的符号是( )
- A.连接符
- B.下划线
- C.大小写字母
- D.数字字符