自考C++程序设计2015年4月试题及答案解析
-
声明复数类,Complex,该类中有两个私有变量real,image分别表示一个复数的实部和虚部。为Complex类添加适当的构造函数。并使用友元函数add实现复数加法。
#include ﹤iostream﹥
using namespace std;
class Complex
{
private:
double real, image;
public:
voidsetRI( double a, double b)
{
real=a;
image=b;
}
doublegetReal( )
{
return real;
}
doublegetImage( )
{
return image;
}
void print( ) {
if( image ﹥0)
cot﹤﹤"复数:"﹤﹤real﹤﹤"+"﹤﹤ 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=ad(c1,c2);
cout﹤﹤"复数一:"; c1.pint( );
cout﹤﹤"复数二:"; c2. print( );
cout﹤﹤"相加后:"; c3.pint( );
}
-
写出程序运行结果
#include ﹤iostream.h﹥
int func(int a)
{
int b=0;
static int c =4;
b++; c--;
return(a+b+c);
}
void main( )
{
int a =2;
for( int j=0; j ﹤2; j++)
cout ﹤﹤ func(a +j)﹤﹤" ";
}
-
请完成一下程序,使其输出结果为: x=5,y=27 X=10,y=27
#include ﹤iostream﹥
using namespace std;
class Sample
{ private:
int x;
static int y;
_____①_____:
Sample( int a);
void print( );
};
Sample:: Sample(int a)
{ x=a; y++; }
void Sample:: print( )
{
cout﹤﹤"x="﹤﹤x﹤﹤",y="﹤﹤y﹤﹤ endl;
}
_____②_____
void main( )
{
Sample s1(5);
Sample s2(10)
s1. print( );
s2. print( );
}
-
写出程序运行结果
#include "stdafx. h"
#include ﹤iostream﹥
using namespace std;
class B;class A
{ public:
A(int i) { a=i; }
friend int F(A &f1, B &f2);
private:
int a;
};
class B
{ public:
B(int i) { b=i; }
friend int F(A &f1, B &f2);
private:
int b;
};
int F(a &f1, B &f2)
{ return(f1. a+f2. b)*(f1. a-f2.b); }
void main( )
{
A n1(10);
B n2(8)
cout﹤﹤F(n1, n2)﹤﹤endl;
}
-
在下列程序的空格处填上适当的字句,使输出为: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));
}
_____②_____﹤﹤(ostream & stream, Magic &c)
{ stream ﹤﹤c. x; return stream; }
};
void main( )
{
Magic ma;
cout﹤﹤ma﹤﹤","﹤﹤ Magic(2)﹤﹤","﹤﹤ma+Magic(-6)+Magic(-8)﹤﹤endl;
}
-
下面是一个输入半径,输出其面积和周长的C++程序,在下划线处填上正确的语句。
#include "stdafx. h"
#include ﹤iostream﹥
#include "math. h"
_____①_____
_____②_____
void main( )
{
double rad;
cout ﹤﹤"rad=";
cin﹥﹥rad;
double l=2.0*pi*rad;
double s= pi*rad*rad;
cout ﹤﹤"\n The long is: "﹤﹤l﹤﹤endl;
cout ﹤﹤"The area is: "﹤﹤s﹤﹤endl;
}
-
在下面程序横线处填上适当字句,以使该程序执行结果为: 50 4 34 21 10 6.1 7.1 8.1 9.1 10.1 11.1
#include ﹤iostream﹥
using namespace std;
template ﹤class T﹥
void f( _____①_____ )
{ _____②_____
for(int i=0; i﹤n/2; i++)
t=a[i], a[i]=a[n-1-i], a[n-1-i]=t;
}
void main( )
{ int a[5]={10,21,34,4,50};
double d[6]={11.1,10.1,9.1,8.1,7.1,6.1};
f(a,5); f(d,6);
for(int i=0; i﹤5; i++)
cout ﹤﹤ a[i]﹤﹤" ";
cout ﹤﹤ endl;
for(int i=0; i﹤6; i++)
cout﹤﹤d[i]﹤﹤" ";
cout﹤﹤ endl;
}
-
在下面程序的底藏线处填上适当的字句,使该程序执行结果为40,x为静态成员。
include ﹤iostream.h﹥
class Test
{ public:
_____①_____;
Test (int i=0)
{ x=i+x; }
int Getnum( )
{ returm Test:: x+10; }
};
_____②_____;
void main( )
{
Test test;
cout﹤﹤test. Getmum( )﹤﹤ endl;
}
-
#include "stdafx.h"
#include ﹤iostream﹥
using namespace std;
class A
{
int i;
public:
virtual void fun( )=0;
A( int a)
{ i=a;}
};
class B: public A
{
int j;
public:
void fun( )
{
cout﹤﹤"B:: fun( )\n";
}
B(int m, int n=0): A(m),j(n) { }
};
void main ( )
{
A *pa;
B b(7);
pa=&b;
}
-
#include ﹤iostream. h﹥
#include ﹤string. h﹥
class Base
{ public:
Base( char *s="\0") { strcpy ( name, s); }
void show( );
protected:
char name[20];
};
Base b;
void show( )
{ cout ﹤﹤"name: "﹤﹤b. name ﹤ endl; }
void main( )
{
Base d2("hello");
show( );
}
-
#include ﹤iostream. h﹥
class f{
private: T x, y;
public: f1(T a, T b) { x=a; y=b; }
float max( ) { return(x﹥y)? x: y; }
};
main( )
{
f a;
a. f1(1.5,3.8);
cout﹤﹤a. max( )﹤﹤endl;
}
-
#include "stdafx. h"
#include ﹤iostream﹥
using namespace std;
class Test
{ private:
int x, y =20;
public:
Test( int i, int j) {x=i, y=j; }
int getx( ) { return x; }
int gety( ) { return y; }
};
void main( )
{
Test mt(10, 20);
cout﹤﹤mt. getx( )﹤﹤endl;
cout﹤﹤mt. gety( )﹤﹤endl;
}
-
#include "stdafx.h"
#include ﹤iostream﹥
using namespace std;
class Test
{
int x, y;
public:
fun(int i, int j)
{
x=i; y=j;
}
show( )
{
cout﹤﹤"x="﹤﹤x;
if(y)
cout﹤﹤" ,y="﹤﹤y﹤﹤endl;
cout﹤﹤endl;
}
};
void man( )
{
Test A;
A. fun (1);
A. show( );
A. fun(2,4);
A. show( );
}
-
A是一个类,已有语句“A *p; P=new A[10];”。要释放由P指向的动态空间,正确的语句应该是__________。
-
一个const对象只能访问__________成员函数。
-
如果通过同一个基类派生一系列的类,则将这些类总称为__________。
-
如果一个派生类只有一个唯一的基类,则这样的继承关系称为__________。
-
设函数sum是由函数模板实现的,并且sum(3,6)和sum(4.6,8)都是正确的函数调用,则函数模板具有__________个类型参数。
-
假如一个类的名称为MyClass,使用这个类的一个对象初始化该类的另一个对象时,可以调用__________构造函数来完成此功能。
-
函数模板中紧随template之后尖括号内的类型参数都要冠以保留字__________。
-
设有定义int x=3, y=4; 则表达式x*=y+5的值为__________。
-
在C++中,函数在定义时可以预先定义出默认的形参值。默认形参值必须按__________的顺序定义。因为在调用时,实参初始化形参是按从左到右的顺序。
-
如果一个函数直接或间接地调用自身,这样的调用称为__________调用。
-
设要把一个文件输出流对象myFile与文件“f:\myText.txt”相关联,所用的C++语句是__________。
-
在C++中,函数的参数有两种传递方式,它们是__________和地址或指针或引用传递。
-
按照联编进行阶段的不同,联编方法可分为两种:动态联编和__________。
-
重载运算符的含义必须清楚,不能有__________。
-
建立一个对象时,对象的状态是不确定的。为了使对象的状态确定,必须对其进行正确的__________。
-
执行下列代码: double pi=3.1415926; cout﹤﹤setprecision(5)﹤﹤pi; 程序的输出结果是__________。
-
已知x=2,y=3,x﹤y的值是__________。
-
面向对象编程的英文缩写是__________。
-
cin后面的符号是:﹥﹥,cout后面的符号是__________。
-
以下叙述中不正确的是( )
- A.在一个函数中,可以有多条return语句
- B.函数的定义不能嵌套,但函数的调用可以嵌套
- C.函数必须有返回值
- D.不同的函数中可以使用相同名字的变量
-
对象的核心概念就是通常所说的继承、封装和__________。
-
已知:int m=10;在下列表示引用的方法中,下列哪一项是正确的?( )
- A.int&x=m
- B.int &y=10
- C.int &z
- D.float &t=&m
-
在C++语言中,能代表逻辑值“假”的是( )
- A.小于0的数
- B.大于0的数
- C.非0整数
- D.0
-
下列运算符中,在C++语言中不能重载的是( )
- A.*
- B.﹥=
- C.::
- D./
-
下面函数原型声明中,声明了fun为虚函数的是( )
- A.void fun( )=0
- B.virtual void fun( )=0
- C.virtual void fun( )
- D.virtual void fun( ){ }
-
在C++语言中,080是( )
- A.八进制数
- B.十进制数
- C.十六进制
- D.非法数
-
下列虚基类的声明中,正确的是( )
- A.class virtual B:public A
- B.class B:virtual public A
- C.class B:public A virtual
- D.virtual class B:public A
-
当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的( )
- A.public成员
- B.private成员
- C.protected成员
- D.友元
-
设x和y均为bool量,则x&&y为真的条件是( )
- A.它们均为真
- B.其中一个为真
- C.它们均为假
- D.其中一个为假
-
对于友元描述正确的是( )
- A.友元是本类的成员函数
- B.友元不是本类的成员函数
- C.友元不是函数
- D.友元不能访问本类私有成员
-
下列哪个类型函数不适合声明为内联函数?( )
- A.函数体语句较多
- B.函数体语句较少
- C.函数执行时间较短
- D.函数执行时间过长
-
通常的拷贝构造函数的参数是( )
- A.某个对象名
- B.某个对象成员名
- C.某个对象的引用
- D.某个对象的指针名
-
有如下类声明“class A{int x; …};”,则A类的成员x是( )
- A.公有数据成员
- B.私有数据成员
- C.公有成员函数
- D.私有成员函数
-
下列不是构造函数的特征的是( )
- A.构造函数的函数名与类名相同
- B.构造函数可以重载
- C.构造函数可以设置缺省参数
- D.构造函数不能重载
-
采用重载函数的目的是( )
- A.实现共享
- B.减少空间
- C.提高速度
- D.使用方便,提高可读性
-
以下关键字不能用来声明类的访问权限的是( )
- A.public
- B.private
- C.static
- D.protected
-
作用域运算符“::”的功能是( )
- A.标识作用域的级别的
- B.指出作用域的范围的
- C.给定作用域的大小的
- D.标识成员是属于哪个类的
-
关于函数模板,描述错误的是( )
- A.函数模板必须由程序员实例化为可执行的函数模板
- B.函数模板的实例化由编译器实现
- C.一个类定义中,只要有一个函数模板,则这个类是类模板
- D.类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
-
结构化程序设计所规定的三种基本控制结构是( )
- A.输入、处理、输出
- B.树形、网形、环形
- C.顺序、选择、循环
- D.主程序、子程序、函数
-
C++语言是从早期的C语言逐渐发展演变而来的,与C语言相比,C++在求解问题方法上进行的最大改进是( )
- A.面向过程
- B.面向对象
- C.安全性
- D.复用性