全国高等教自学考试C++程序设计试题及答案.docx
《全国高等教自学考试C++程序设计试题及答案.docx》由会员分享,可在线阅读,更多相关《全国高等教自学考试C++程序设计试题及答案.docx(18页珍藏版)》请在冰豆网上搜索。
全国高等教自学考试C++程序设计试题及答案
全国2012年1月高等教育自学考试
C++程序设计试题
课程代码:
04737
一、单项选择题(本大题共20小题,每小题1分,共20分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.如声明对象数组,则下列描述正确的是A
A.对每个元素均调用一次构造函数
B.部分元素调用构造函数,其它元素不需调用
C.均不需要调用构造函数
D.只是首元素调用构造函数
2.不同对象调用同一成员函数时,this指针指向A
A.不同对象B.相同对象
C.无对象D.不确定
3.设存在函数intmax(int,int)返回两参数中较大值,若求22,59,70三者中最大值,下列表达式正确的是D
A.intm=max(22,max(59,70));
B.intm=max(max(22,59),max(59,70));
C.intm=max(max(22,70),59);
D.以上皆正确
4.一个类可拥有多少个构造函数C
A.0个B.1个
C.1或多个D.以上皆对
5.在编译指令中,嵌入指令是指A
A.#includeB.#define
C.#ifD.#else
6.设存在数组a,其长度为Len,下列哪项操作是将a中元素复制到数组b中D
A.reverse(a+a,Len,b);B.sort(a,a+Len,b);
C.find(a,a+Len,b);D.copy(a,a+Len,b);
7.下列哪个要素不是面向对象的关键要素A
A.模块化B.抽象性
C.封装性D.继承性
8.下列对于类的描述错误的是C
A.类要先声明后使用
B.类是具有唯一标识的实体
C.两个类可以使用同一个名称
D.组成类的不仅有数据,还可以有对数据进行操作的函数
9.使用引用调用方式将实参传给形参,下列说法正确的是A
A.形参是实参的备份B.实参是形参的备份
C.形参和实参共享同一对象D.形参和实参无联系
10.关于对象的性质,下列描述错误的是B
A.同一类对象之间可相互赋值
B.不能使用对象数组
C.对象可以用作函数参数
D.一个对象可以用作另一个类的成员
11.类的私有成员可在哪里被赋值B
A.类体中B.该类的成员函数中
C.A和BD.以上都不是
12.设存在数组a,其长度为Len,则下列哪个泛型算法用于反转a中各元素A
A.reverse(a,a+Len);B.sort(a,a+Len);
C.find(a,a+Len,value);D.copy(a,a+Len,b);
13.用于标识八进制常量的前缀或后缀是C
A.无B.后缀L或1
C.前缀零D.前缀Ox
14.派生类中继承的基类成员初始化如何进行A
A.由派生类构造函数调用基类的构造函数进行
B.由派生类构造函数进行
C.由基类构造函数进行,无需派生类构造函数调用
D.以上皆不正确
15.对于多重继承,下列描述正确的是B
A.所有基类使用相同的派生方式B.每个基类可使用不同派生方式
C.只能是public派生D.只能是protected派生
16.下列关于类的权限描述错误的是B
A.类本身的成员函数可以访问自身的任何成员
B.类的对象可以访问该类的所有成员
C.普通函数不能直接访问类的公有成员,必须通过成员函数对其访问
D.一个类可以将另一个类的对象作为成员
17.运算符delete与哪个函数一起运行B
A.构造函数B.析构函数
C.主函数D.不与任何函数一起工作
18.一个类可以获得另一个类的特性的机制称为C
A.抽象B.封装
C.继承D.多态性
19.使用下列哪个格式控制符可设置转换十六进制为十进制A
A.decB.oct
C.hexD.endl
20.对引用调用描述正确的是D
A.分配新存储空间
B.修改已存储空间的名称为引用名
C.引用名与已存在存储空间无任何关联
D.将引用名标识符与一块已存在储区域相关联,没有分配新存储空间
二、填空题(本大题共20小题,每小题1分,共20分)
请在每小题的空格中填上正确答案,错填、不填均无分。
21.公共派生中,基类的公有成员在派生类中是___公有成员___。
22.若要使用标准输入流机制从键盘输入一个整数赋给整型变量a,相应的C++语句是___cin>>a;___。
23.UML中对象行为之间的动态关系是通过对象行为之间的依赖关系表现的,称之为_消息链接_____。
24.C++函数中按引用调用传递参数时使用___对象别名___作为参数。
25.在C++中除具有__循环____语句和switch语句的函数外,其它函数都可以说明为内联函数。
26.C++中规定模板以__Template____关键字和一个形参表示开头。
27.构造函数不能被继承,一个派生类只能调用它的__直接____基类的构造函数。
28.vector类中用于获取存放的元素个数的方法是__Size();____。
29.C++中istream类的直接基类是___Ios类___。
30.要关闭一个文件输出流对象myFile,所用的C++语句是___myFile.close();___。
31.执行下列代码3.1
doublepi=3.141592
coutP>
32.在私有派生中,基类的权限为private的成员,在派生类中__不可访问____。
33.C++总共有3种文件流,分别是输入文件流、输出文件流和__.输入输出文件流____。
34.C++使用流进行输入输出,其中能捕获键盘输入的对象是__Cin____。
35.在vector类中删除向量中最后一个对象的方法是___pop_back(constT&)___。
36.函数重载可使一个函数名具有多种功能,称这种特性为__多态性____。
37.C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是引进了___对象___概念。
38.__#define____指令定义一个标识符及串,在源程序中每次遇到该标识符时,编译器均用定义的串代替之。
39.在C++标准输出方式中,要设置输出数据字段宽度width所使用的操控符是__Setw(intwidth)____。
40.设有定义intx;floaty;,则10+x+y值的数据类型是___Float___。
三、改错题(本大题共5小题,每小题2分,共10分)
下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见。
41.
#include
main(){
intx=9,y=8,z=7;
constint*p=z;
cout<<*p<
}
constint*p=z;
普通变量不能给指针变量赋值改为constint*p=&z;
42.
#include
main(){
intx=8,y=6;
constint*constp=&x;
p=&y;
cout<<*p<
}
P=&y;p是指向常量的常量指针不能做为表达式的左值。
43.
#include
main(){
folatp;
p=newfolat[5];
for(inti=0;i<5;i++)
{cin>>*(p+i);cout<<*(p+i)<
deletep;
}
folatp;float关键字错误
44.
template
Tf(Tx){
Ty;
y=x+T;
returny;
}
y=x+T;T是类型名不能进行此类操作
45.
#include
classpoint{
intx;
public:
voidinit(inta){x=a;}
intgetx(){returnx;}
voidsetx(inta){x=a;}
};
main(){
pointa;
a.init(20,30);
coutP>
}
public:
voidinit(inta)//a.init(20,30);
函数重载参数不匹配改为a.init(20);或a.init(30);
四、完成程序题(本大题共5小题,每小题4分,共20分)
46.在下面程序的下划线处填上正确的语句,使其得到下面的输出结果。
x=2,y=3
#include
classSample
{
intx,y;
public:
Sample(){
x=y=0;
}
Sample(inta,intb){
x=a;
(____y=b;______)
}
voiddisp()
{
cout<<"x="",Y="P>
}
}(_____y=b;______)
voidmain()
{
Samples(2,3),*p=&s;
p->disp();
}
47.在下划线处填上适当的语句,使程序的输出结果如下:
n=30
#include
template
classSample
{
Tn;
public:
Sample(){}
Sample(Ti){___n=i;______}
Sample&operator+(constSample&);
voiddisp(){cout<<"n="P>
};
template
Sample&Sample:
:
operator+(constSample&s)
{
staticSampletemp;
returntemp;
}
voidmain()
{
Samples1(10),s2(20),s3;
s3=s1+s2;
s3.disp();
}
48.在下划线处填上适当的语句,使程序的输出结果如下:
12345678910
#include
classSample
{
intA[10][10];
public:
int&operator()(int,int);
};
int&Sample:
:
operator()(intx,inty)
{
returnA[x][y];
}
voidmain()
{
Samplea;
inti,j;
____不填_____
for(j=0;j<10;j++)
___a(j,1)=j+a;______
for(i=0;i
cout"";
cout<
}
49.在下划线处填上适当的句子,完成函数的定义。
#include
classSample
{
intx;
public:
Sample(){};
__Sample(inta)_______{x=a;}
__Sample(Samplea)_______{x=a.x+++10;}
voiddisp(){cout<<"x="P>
};
voidmain()
{
Samples1
(2),s2(s1);
s1.disp();
s2.disp();
}
50.输入一个字符串,将其逆序后输出。
#include
usingnamespacestd;
voidmain()
{
chara[50];memset(a,0,sizeof(a));
inti=0,j;
chart;
cin.getline(a,50,'n';
for(i=0,j=strlen(a)-1;i<____j_____;i++,j――)
{
t=a[i];
a[j]=t;
}
coutP>
}
a[i]=a[j];
五、程序分析题(本大题共4小题,每小题5分,共20分)
51.(给出下面程序的输出结果
#include
classexample
{
inta;
public:
example(intb){a=b++;}
voidprint(){a=a+1;cout"";}
voidprint()const{cout"";}
};
voidmain()
{
examplex(3);
constexampley
(2);
x.print();
y.print();
}
52.给出下面程序的输出结果
#include
classSample
{
intx,y;
public:
Sample(){x=y=0;}
Sample(inta,intb){x=a;y=b;}
~Sample()
{
if(x==y)
cout<<"x=y"<
else
cout<<"x!
=y"<
}
voiddisp()
{
cout<<"x="",Y="P>
}
};
voidmain()
{
Samplesl(2,3);
s1.disp();
}
53.给出下面程序的输出结果
#include
classSample
{
intn;
staticintsum;
public:
Sample(intx){n=x;}
voidadd(){sum+=n;}
voiddisp()
{
cout<<"n="",SUM:
"P>
}
};
intSample:
:
sum=0;
voidmain()
{
Samplea
(2),b(3),c(5);
a.add();
a.disp();
b.add();
b.disp();
c.add();
c.disp();
}
答案:
42
x=2,y=3
x!
=y
n=2,sum:
2
n=3,sum:
5
n=5,sum:
10
54.给出下面程序的输出结果
#include
classA{
private:
friendclassB;
A(intval=0):
data(val),use
(1){}
intuse,data;
};
classB{
public:
A*pa;
B(intval=0):
pa(newA(val)){}
~B(){if(--pa->use==0)deletepa;}
B(B&rhs){++rhs->use;pa=rhs.pa;}
B&operator=(B&rhs);
A*operator->{returnpa;}
voidDisplay(){
cout<<"data="
<<",use="
}
};
B&B:
:
operator=(B&rhs)
{
if(this==&rhs)return*this;
if(--pa->use==0)deletepa;
++rhs->use;
pa=rhs.pa;
return*this;
}
intmain(){
Bb1
(1),b2(b1),b3(3);
b1.Display();
b2.Display();
b3.Display();
b3=b1;
b1.Display();
b3.Display();
return0;
}答案略
六、程序设计题(本大题共1小题,每小题10分,共10分)
55.已知一个student类,包括学姓名,成绩和等级,不含任何成员函数.process为学生信息处理类.
classstudent{
charname[10];
intdeg;
charlevel[7];
friendclassprocess:
public:
student(charna[],intd){strcpy(name,na);deg=d;}
};
classprocess{
public:
voidtrans(students[]){…}//根据学生成绩计算学生等级(优大于89分,良大于79分,中大于69分,及格大于59分,不及格小于60分).
voiddisp(students[]){...}//根据成绩降序打印所有学生信息
};
要求实现process类中的两个函数:
答案:
voidtrans(students[])
{
for(inti=0;i!
=size;i++){
if(s[i].deg>89)
strcpy(s[i].leve,"优");
elseif(s[i].deg>79)
strcpy(s[i].leve,"良");
elseif(s[i].deg>69)
strcpy(s[i].leve,"中");
elseif(s[i].deg>=59)
strcpy(s[i].leve,"及格");
else
strcpy(s[i].leve,"不及格");
}
}