自考C++程序设计2012年1月试题及答案解析
-
已知一个student类,包括学姓名,成绩和等级,不含任何成员函数,process为学生信息处理类。
class student{
char name[10];
int deg;
char level[7];
friend class process:
public:
student(char na[ ],int d){strcpy(name,na);deg=d;}
} ;
class process{
public:
void trans(student s[ ]){…} //根据学生成绩计算学生等级(优大于89分,良大于79分,中大于69分,及格大于59分,不及格小于60分)
void disp(student s[ ]){…} //根据成绩降序打印所有学生信息
};
要求实现process类中的两个函数:
-
给出下面程序的输出结果
#include ﹤iostream.h﹥
class A{
private:
friend class B;
A(int val=0):data(val),use(1){ }
int use,data;
};
class B{
public:
A*pa;
B(int val=0):pa(new A(val)){ }
~B( ){if( -- pa -﹥use==0)delete pa;}
B(B&rhs){ ++ rhs -﹥use;pa=rhs.pa;}
B&operator=(B&rhs);
A*operator -﹥( ){return pa;}
void Display( ){
cout﹤﹤"data="﹤﹤pa -﹥data﹤﹤",use="﹤﹤pa -﹥use﹤﹤endl;
}
};
B&B::operator=(B&rhs)
{
if(this ==&rhs)return*this;
if( -- pa -﹥use = =0)delete pa;
++ rhs -﹥use;
pa=rhs.pa;
return * this;
}
int main( ){
B b1(1),b2(b1),b3(3);
b1.Display( );
b2.Display( );
b3.Display( );
b3=b1;
b1.Display( );
b3.Display( );
return 0;
-
给出下面程序的输出结果
#include ﹤iostream.h﹥
class Sample
{
int n;
static int sum;
public:
Sample(int x){n=x;}
void add( ){sum+=n;}
void disp( )
{
cout﹤﹤"n="﹤﹤n﹤﹤",sum="﹤﹤sum﹤﹤endl;
}
};
int Sample::sum=0;
void main( )
{
Sample a(2),b(3),c(5);
a.add( );
a.disp( );
b.add( );
b.disp( );
c.add( );
c.disp( );
}
-
给出下面程序的输出结果
#include ﹤iostream.h﹥
class example
{
int a;
public:
example(int b){a=b++;}
void print( ){a=a+1;cout﹤﹤a﹤﹤" ";}
void print( )const{cout﹤﹤a﹤﹤"";}
};
void main( )
{
example x(3);
const example y(2);
x.print( );
y.print( );
}
-
给出下面程序的输出结果
#include ﹤iostream.h﹥
class Sample
{
int x,y;
public:
Sample( ){x=y=0;}
Sample(int a,int b){x=a;y=b;}
~Sample( )
{
if(x==y)
cout﹤﹤"x=y"﹤﹤endl;
else
cout﹤﹤"x!=y"﹤﹤endl;
}
void disp( )
{
cout﹤﹤"x="﹤﹤x﹤﹤",y="﹤﹤y﹤﹤endl;
}
};
void main( )
{
Sample s1(2,3);
s1.disp( );
}
-
输入一个字符串,将其逆序后输出。
#include ﹤iostream﹥
using namespace std;
void main( )
{
char a[50];memset(a,0,sizeof(a));
int i=0,j;
char t;
cin.getline(a,50,'\n';
for(i=0, j=strlen(a)-1;i﹤_________;i++, j-- )
{
t=a[i];
a[j]=t;
}
cout﹤﹤a﹤﹤endl;
}
-
在下划线处填上适当的句子,完成函数的定义。
#include ﹤iostream.h﹥
class Sample
{
int x;
public:
Sample( ){ };
_________{x=a;}
_________{x=a.x+++10;}
void disp( ){cout﹤﹤"x="﹤﹤x﹤﹤endl;}
};
void main( )
{
Sample s1(2),s2(s1);
s1.disp( );
s2.disp( );
}
-
在下面程序的下划线处填上正确的语句,使其得到下面的输出结果。 x=2,y=3
#include ﹤iostream.h﹥
class Sample
{
int x,y;
public:
Sample( ){
x=y=0;
}
Sample(int a,int b){
x=a;
(__________)
}
void disp( )
{
cout﹤﹤"x="﹤﹤x﹤﹤",y="﹤﹤y﹤﹤endl;
}
}(___________)
void main( )
{
Sample s(2,3), *p=&s;
p-﹥disp( );
}
-
在下划线处填上适当的语句,使程序的输出结果如下: 1 2 3 4 5 6 7 8 9 10 #include ﹤iostream.h﹥
class Sample
{
int A[10][10];
public:
int &operator( )(int,int);
};
int &Sample::operator( )(int x,int y)
{
return A[x][y];
}
void main( )
{
Sample a;
int i, j;
_________
for(j=0;j﹤10;j++)
_________
for(i=0;i﹤10;i++)
cout﹤﹤a(i, 1)﹤﹤ " ";
cout﹤﹤endl;
}
-
在下划线处填上适当的语句,使程序的输出结果如下: n=30
#include ﹤ iostream.h ﹥
template﹤ class T ﹥
class Sample
{
T n;
public:
Sample( ){ }
Sample(T i){_________}
Sample﹤T﹥&operator+(const Sample﹤T﹥&);
void disp( ){cout﹤﹤"n="﹤﹤n﹤﹤endl;}
};
template﹤class T﹥
Sample﹤T﹥&Sample﹤T﹥::operator+(const Sample﹤T﹥&s)
{
static Sample﹤T﹥temp; return temp;
}
void main( )
{
Sample﹤int﹥s1(10),s2(20),s3;
s3=s1+s2;
s3.disp( );
}
-
#include ﹤iostream.h﹥
class point{
int x;
public: void init(int a){x=a;}
int getx( ){return x;}
void setx(int a){x=a;}
};
main( ){
point a;
a.init(20,30);
cout﹤﹤a.getx( )﹤﹤endl;
}
-
template﹤class T﹥
T f(T x){
T y;
y=x+T;
return y;
}
-
#include ﹤iostream.h﹥
main( ){
int x=8,y=6;
const int*const p=&x;
p=&y;
cout﹤﹤* p﹤﹤endl;
}
-
#include ﹤iostream.h﹥
main( ){
folat p;
p=new folat[5];
for(int i=0;i﹤5;i++)
{cin﹥﹥ * (p+i);cout﹤﹤ * (p+i)﹤﹤endl;} delete p;
}
-
#include ﹤iostream.h﹥
main( ){
int x=9,y=8,z=7;
const int * p=z;
cout﹤﹤ * p﹤﹤endl;
}
-
在C++标准输出方式中,要设置输出数据字段宽度width所使用的操控符是______。
-
设有定义int x; float y;,则10+x+y值的数据类型是______。
-
C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是引进了______概念。
-
______指令定义一个标识符及串,在源程序中每次遇到该标识符时,编译器均用定义的串代替之。
-
C++使用流进行输入输出,其中能捕获键盘输入的对象是______。
-
函数重载可使一个函数名具有多种功能,称这种特性为______。
-
在vector类中删除向量中最后一个对象的方法是______。
-
在私有派生中,基类的权限为private的成员,在派生类中______。
-
C++总共有3种文件流,分别是输入文件流、输出文件流和______。
-
C++中istream类的直接基类是______。
-
执行下列代码 double pi=3.141592 cout﹤﹤setprecision(2)﹤﹤pi; 程序的输出结果是______。
-
要关闭一个文件输出流对象myFile,所用的C++语句是______。
-
vector类中用于获取存放的元素个数的方法是______。
-
构造函数不能被继承,一个派生类只能调用它的______基类的构造函数。
-
C++中规定模板以______关键字和一个形参表示开头。
-
在C++中除具有______语句和switch语句的函数外,其它函数都可以说明为内联函数。
-
C++函数中按引用调用传递参数时使用______作为参数。
-
若要使用标准输入流机制从键盘输入一个整数赋给整型变量a,相应的C++语句是______。
-
UML中对象行为之间的动态关系是通过对象行为之间的依赖关系表现的,称之为______。
-
公共派生中,基类的公有成员在派生类中是______。
-
对引用调用描述正确的是( )
- A.分配新存储空间
- B.修改已存储空间的名称为引用名
- C.引用名与已存在存储空间无任何关联
- D.将引用名标识符与一块已存在储区域相关联,没有分配新存储空间
-
使用下列哪个格式控制符可设置转换十六进制为十进制( )
- A.dec
- B.oct
- C.hex
- D.endl
-
运算符delete与哪个函数一起运行( )
- A.构造函数
- B.析构函数
- C.主函数
- D.不与任何函数一起工作
-
一个类可以获得另一个类的特性的机制称为( )
- A.抽象
- B.封装
- C.继承
- D.多态性
-
对于多重继承,下列描述正确的是( )
- A.所有基类使用相同的派生方式
- B.每个基类可使用不同派生方式
- C.只能是public派生
- D.只能是protected派生
-
下列关于类的权限描述错误的是( )
- A.类本身的成员函数可以访问自身的任何成员
- B.类的对象可以访问该类的所有成员
- C.普通函数不能直接访问类的公有成员,必须通过成员函数对其访问
- D.一个类可以将另一个类的对象作为成员
-
用于标识八进制常量的前缀或后缀是( )
- A.无
- B.后缀L或l
- C.前缀零
- D.前缀0x
-
派生类中继承的基类成员初始化如何进行( )
- A.由派生类构造函数调用基类的构造函数进行
- B.由派生类构造函数进行
- C.由基类构造函数进行,无需派生类构造函数调用
- D.以上皆不正确
-
设存在数组a,其长度为Len,则下列哪个泛型算法用于反转a中各元素( )
- A.reverse(a,a+Len);
- B.sort(a,a+Len);
- C.find(a,a+Len,value);
- D.copy(a,a+Len,b);
-
关于对象的性质,下列描述错误的是( )
- A.同一类对象之间可相互赋值
- B.不能使用对象数组
- C.对象可以用作函数参数
- D.一个对象可以用作另一个类的成员
-
类的私有成员可在哪里被赋值( )
- A.类体中
- B.该类的成员函数中
- C.A和B
- D.以上都不是
-
下列对于类的描述错误的是( )
- A.类要先声明后使用
- B.类是具有唯一标识的实体
- C.两个类可以使用同一个名称
- D.组成类的不仅有数据,还可以有对数据进行操作的函数
-
使用引用调用方式将实参传给形参,下列说法正确的是( )
- A.形参是实参的备份
- B.实参是形参的备份
- C.形参和实参共享同一对象
- D.形参和实参无联系
-
下列哪个要素不是面向对象的关键要素( )
- A.模块化
- B.抽象性
- C.封装性
- D.继承性
-
在编译指令中,嵌入指令是指( )
- A.#include
- B.#define
- C.#if
- D.#else
-
设存在数组a,其长度为Len,下列哪项操作是将a中元素复制到数组b中( )
- A.reverse(a+a,Len,b);
- B.sort(a,a+Len,b);
- C.find(a,a+Len,b);
- D.copy(a,a+Len,b);
-
一个类可拥有多少个构造函数( )
- A.0个
- B.1个
- C.1或多个
- D.以上皆对
-
设存在函数int max(int,int)返回两参数中较大值,若求22,59,70三者中最大值,下列表达式正确的是( )
- A.int m=max(22,max(59,70));
- B.int m=max(max(22,59),max(59,70));
- C.int m=max(max(22,70),59);
- D.以上皆正确
-
不同对象调用同一成员函数时,this指针指向( )
- A.不同对象
- B.相同对象
- C.无对象
- D.不确定
-
如声明对象数组,则下列描述正确的是( )
- A.对每个元素均调用一次构造函数
- B.部分元素调用构造函数,其它元素不需调用
- C.均不需要调用构造函数
- D.只是首元素调用构造函数