面向对象程序设计模拟试题Word文档下载推荐.docx
《面向对象程序设计模拟试题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计模拟试题Word文档下载推荐.docx(14页珍藏版)》请在冰点文库上搜索。
”,则元素a[2][1]的值为()。
A:
0 B:
4
8 D:
6
6、以下说法中正确的是()。
C++程序总是从第一个定义的函数开始执行
B:
C++程序总是从main函数开始执行
C++函数必须有返回值,否则不能使用函数
D:
C++程序中有调用关系的所有函数必须放在同一个程序文件中
7、以下叙述中不正确的是()。
在一个函数中,可以有多条return语句
函数的定义不能嵌套,但函数的调用可以嵌套
函数必须有返回值
不同的函数中可以使用相同名字的变量
8、函数原型语句正确的是()。
intFunction(voida);
B:
voidFunction(int);
C:
intFunction(a);
D:
voidint(doublea);
9、设有如下函数定义
intf(char*s){
char*p=s;
while(*p!
=’’)p++;
return(p-s);
}
在主函数中用cout<
<
f(“good”)调用上述函数,则输出结果为()。
3 B:
5 D:
10、以下错误的描述是()。
被调用函数中可以不用return语句
被调用函数中可以用多个return语句
被调用函数中,如果有返回值,就一定要有return语句
被调用函数中,一个return语句可返回多个值给调用函数
11、定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为()。
int*p=newint[30];
*p=newint[30];
int*p=new[30];
int*p=newint(30);
12、关于封装,下列说法中不正确的是()。
通过封装,对象的全部属性和操作结合在一起,形成一个整体
通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)
通过封装,每个对象都成为相对独立的实体
通过封装,对象的属性都是不可见的
13、在类作用域中能够通过直接使用该类的()成员名进行访问。
私有 B:
公用
保护 D:
任何
14、在关键字public后面定义的成员为类的()成员。
15、在多文件结构的程序中,通常把类中所有非内联函数的定义单独存放于()中。
主文件 B:
实现文件
库文件 D:
头文件
16、假定AB为一个类,则执行“AB*s=newAB(a,5);
”语句时得到的一个动态对象为_______。
s B:
s->
a
s.a D:
*s
17、假定AB为一个类,则()为该类的拷贝构造函数的原型说明。
AB(ABx);
B:
AB(AB&
x);
voidAB(AB&
AB(intx);
18、假定AB为一个类,则执行“ABa
(2),b[3],*p[4];
”语句时共调用该类构造函数的次数为()。
9
19、类的构造函数可以带有()个参数。
1
2 D:
任意
20、引入友元的主要目的是为了()。
增强数据安全性 B:
提高程序的可靠性
提高程序的效率和灵活性 D:
保证类的封装性
二、编程综合题:
32分,每题08分
21、
#include<
iostream.h>
#include<
string.h>
voidmain(){
chara[5][10]={"
student"
"
worker"
soldier"
cadre"
peasant"
};
chars1[10],s2[10];
strcpy(s1,a[0]);
strcpy(s2,a[0]);
for(inti=1;
i<
5;
i++){
if(strcmp(a[i],s1)>
0)strcpy(s1,a[i]);
if(strcmp(a[i],s2)<
0)strcpy(s2,a[i]);
cout<
s1<
’’<
s2<
endl;
参考答案:
workercadre//6分,每个数据3分
三、简答题:
32分,每题08分
22、求出从键盘上输入的10个整数中的最大值,要求输入变量用x表示,存储最大值的变量用max表示。
voidmain()
{
intx,max;
cin>
>
x;
max=x;
for(inti=0;
9;
if(x>
max)max=x;
"
max:
max<
23、根据下面类中MaxMin函数成员的原型和注释写出它的类外定义。
classAA{
int*a;
intn;
intMS;
public:
voidInitAA(intaa[],intnn,intms){
if(nn>
ms){cout<
Error!
exit
(1);
}
MS=ms;
n=nn;
a=newint[MS];
i++)a[i]=aa[i];
intMaxMin(int&
x,int&
y);
//从数组a的前n个元素中求出
//最大值和最小值,并分别由引用参数x和y带回,
//同时若n大于0则返回1,否则返回0。
intAA:
:
MaxMin(int&
y)
{
intmx,my;
mx=my=a[0];
i++){
if(a[i]>
mx)mx=a[i];
if(a[i]<
my)my=a[i];
x=mx;
y=my;
if(n>
0)return1;
elsereturn0;
24、根据下面类中Uion函数的原型和注释写出它的类外定义。
classStrings{
char*s;
//指向动态分配的字符串数组空间
//记录字符串长度
Strings(char*str);
//构造函数,利用str字符串长度初始化n,
//利用str字符串初始化s所指的字符串空间
Strings(Strings&
str);
//拷贝构造函数
Strings&
Give(Strings&
//实现str赋值给*this的功能并返回*this
StringsUion(Strings&
//实现*this和str中的字符串连接的功能,
//把连接结果存入临时对象并返回
intLenth(){returnn;
}//返回字符串长度
voidPrint(){cout<
s<
}//输出字符串
StringsStrings:
Uion(Strings&
str){
Stringsr("
);
r.n=n+str.n;
r.s=newchar[r.n+1];
strcpy(r.s,s);
strcat(r.s,str.s);
returnr;
25、下列程序段中,A_class的成员函数Variance()可求出两数的平方差,请改写该程序段,把Variance()函数从A_class类中分离出来,用友元函数来实现该函数的功能。
classA_class{
private:
intx,y,t;
public:
A_class(inti,intj):
x(i),y(j){
if(y>
x){t=x;
x=y;
y=t;
intVariance(){returnx*x-y*y;
}
//其它函数从略
voidmain(){
A_classA_obj(3,5);
Result:
A_obj.Variance()<
x(i),y(j){
friendintVariance(A_class&
ac);
//参数名任意
intVariance(A_class&
ac)
returnac.x*ac.x-ac.y*ac.y;
Variance(A_obj)<
四、填空题(主观):
24分,每题06分
26、一个函数的函数体就是一条_________语句。
复合
27、假定x=5,y=6,则执行表达式y+=x--计算后,x和y的值分别为__________和__________。
4
11
28、在C++中存储字符串”abcdef”至少需要________个字节。
7
29、假定x是一个逻辑量,则!
x||false的值为__________。
!
x
30、若a是一个字符数组,则从键盘上向该数组输入一个字符串的表达式为__________。
cin>
a
31、一个二维字符数组a[10][20]能够存储________个字符串,每个字符串的长度至多为________。
10
19
32、已知intcubin(intn){returnn*n*n;
}和doublecubin(doublen){returnn*n*n;
}是一个函数模板的两个实例,假定类型参数用T表示,则该函数模板的定义是__________________________________。
templateTcubin(Tn){returnn*n*n;
33、假定p是一个指针,则*p++运算首先访问________,然后使________的值增1。
*p
p
34、假定p所指对象的值为25,p+1所指对象的值为42,则*p++的值为________。
25
35、一个数组的数组名实际上是指向该数组________元素的指针,并且在任何时候都不允许________它。
第一个
修改
36、假定一个二维数组为c[5][8],则c[3]的值为二维元素________的地址,c[3]+2的值为二维元素________的地址。
c[3][0]
c[3][2]
37、NULL是一个符号常量,通常作为空指针值,它的具体值为________。
0(或’\0’)
38、对象是对问题域中客观事物的________,它是一组属性和在这些属性上操作的__________。
抽象
封装体
39、对类中一般数据成员的初始化既可以通过在构造函数中给出的初始化表来实现,也可以通过构造函数中的____________来实现。
函数体
40、除了__________运算符外,其他重载的运算符都可以被派生类继承。
赋值
41、在一个或若干个类的基础上构造一个新类,被称为___________。
继承(派生)
42、派生类的成员函数可以直接访问基类的()成员,不能直接访问基类的______成员。
公有和保护
私有
43、主函数调用一个fun函数将字符串逆序。
___
(1)___;
voidmain(){
chars[80];
s;
___
(2)___;
”逆序后的字符串:
”<
endl;
voidfun(charss[]){
intn=strlen(ss);
___(3)____;
charc=ss[i];
ss[i]=ss[n?
1?
i];
ss[n?
i]=c;
voidfun(charss[])
fun(s)
2>
44、假定有定义为“structNODE{intdata;
NODE*next;
”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序相同。
voidf5(NODE*&
L,inttable[],intn)
{
if(n<
=0){L=NULL;
return;
L=newNODE;
//生成附加的头结点
inti=0;
NODE*p=L;
while(___
(1)___){
p=p->
next=___
(2)___;
p->
data=___(3)___;
i++;
next=NULL;
//把最后一个结点的指针域置空
p=L;
L=L->
next;
//使L指向链表的第一个带值的结点
deletep;
N
newNODE
table[i]
45、
假定有定义为“structNODE{intdata;
”,下面算法是依次显示输出以L为表头指针的链表中各结点的值。
voidf7(NODE*L)
for(___
(1)___;
p!
=NULL;
___
(2)___)
___(3)___<
'
'
;
NODE*p=L
p=p->
next
p->
data