cpp08自动化复习题.docx

上传人:b****6 文档编号:12558379 上传时间:2023-06-06 格式:DOCX 页数:16 大小:23.90KB
下载 相关 举报
cpp08自动化复习题.docx_第1页
第1页 / 共16页
cpp08自动化复习题.docx_第2页
第2页 / 共16页
cpp08自动化复习题.docx_第3页
第3页 / 共16页
cpp08自动化复习题.docx_第4页
第4页 / 共16页
cpp08自动化复习题.docx_第5页
第5页 / 共16页
cpp08自动化复习题.docx_第6页
第6页 / 共16页
cpp08自动化复习题.docx_第7页
第7页 / 共16页
cpp08自动化复习题.docx_第8页
第8页 / 共16页
cpp08自动化复习题.docx_第9页
第9页 / 共16页
cpp08自动化复习题.docx_第10页
第10页 / 共16页
cpp08自动化复习题.docx_第11页
第11页 / 共16页
cpp08自动化复习题.docx_第12页
第12页 / 共16页
cpp08自动化复习题.docx_第13页
第13页 / 共16页
cpp08自动化复习题.docx_第14页
第14页 / 共16页
cpp08自动化复习题.docx_第15页
第15页 / 共16页
cpp08自动化复习题.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

cpp08自动化复习题.docx

《cpp08自动化复习题.docx》由会员分享,可在线阅读,更多相关《cpp08自动化复习题.docx(16页珍藏版)》请在冰点文库上搜索。

cpp08自动化复习题.docx

cpp08自动化复习题

自动化系《面向对象程序设计》复习题

编号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

答案

C

C

C

A

D

A

A

D

C

C

D

C

D

D

B

编号

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

答案

D

C

D

D

B

 

一.选择题(本题共30小题,每题1分,共30分)

 

 1. 设x是一个bool型的逻辑量,y的值为10,则表达式 x  y的值为(    )。

        A. 1      B. 0      C. 与x值相同      D. 与x值相反

2. 假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[1][2]的值为(    )。

        A. 2      B. 4      C. 6      D. 8

 3. 以下正确的描述是(    )。

        A. 不允许设置参数的默认值

        B. 设置参数的默认值只能在定义函数时设置

        C. 设置参数的默认值时,应该设置右边的参数

        D. 设置参数的默认值时,应该全部参数都设置

4. 变量s的定义为“char *s=”Hello world!

”;”,要使变量p指向s所指向的同一个字符串,则应选取(   )。

        A. char *p=s;    B. char *p=s;    C. char *p;p=*s;   D. char *p; p=s;

5. 关于封装,下列说法中不正确的是(   )。

        A. 通过封装,对象的全部属性和操作结合在一起,形成一个整体

        B. 通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)

        C. 通过封装,每个对象都成为相对独立的实体

        D. 通过封装,对象的属性都是不可见的

6. x>0  x<=10的相反表达式为(    )。

A. x<=0 || x>10        B. x<=0  x>10

C. x<=0 || x<=10       D. x>0  x>10

7. 假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为(    )。

  A. 0      B. 4      C. 8      D. 6

 8. 采用重载函数的目的是(    )。

        A. 实现共享        B. 减少空间

        C. 提高速度        D. 使用方便,提高可读性

9. 关于void 指针,下列说法正确的是(   )。

        A. void 指针就是未指向任何数据的指针

        B. void 指针就是已定义而未初始化的指针

        C. 指向任何类型数据的指针可直接赋值给一个void 指针

        D. void 指

针值可直接赋给一个非void 指针

10. 面向对象方法的多态性是指(   )。

        A. 一个类可以派生出多个特殊类

        B. 一个对象在不同的运行环境中可以有不同的变体

        C. 针对一消息,不同的对象可以以适合自身的方式加以响应

        D. 一个对象可以是由多个其他对象组合而成的

11. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队非空,则进行插入时必须把新结点的地址赋给(   )。

        A. elemHead                      B. elemTail

        C. elemHead->next和elemHead     D. elemTail->next和elemTail

12. 一个类的静态数据成员所表示属性 (   )。

        A. 是类的或对象的属性          B. 只是对象的属性

        C. 只是类的属性                D. 类和友元的属性 

13. 静态数据成员的初始化是在(    )中进行的。

        A. 构造函数                  B. 任何成员函数

 C. 所属类                    D. 全局区

14. 假定M是一个类名,且M中重载了操作符=,可以实现M对象间的连续赋值,如“m1=m2=m3;”。

重载操作符=的函数原型最好是(  )。

        A. int operaotor=(M);           B.  int operator=(M);

        C. M operator=(M&);             D.  M& operator=(M);

15. 关于输出运算符<<的重载,下列说法不正确的是(   )。

        A. 运算符函数的返回值类型是ostream  。

        B. 重载的运算符必须定义为类的成员函数。

        C. 运算符函数的第一个参数的类型是ostream  。

        D. 运算符函数有两个参数。

16. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队为空,则进行插入时必须把新结点的地址赋给(   )。

        A. elemHead                B. elemTail

        C. elemHead和elemTail     D. elemHead或elemTail

17. 类的静态成员的访问控制(   )。

        A. 只允许被定义为private

        B. 只允许被定义为private或protected  

        C. 只允许被定义为public   

        D. 可允许被定义为private、protected或publi

18. 当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的(    )。

        A. 只能是公有成员                      B. 只能是保护成员 

        C. 只能是除私有成员之外的任何成员      D. 具有任何权限的成员

19. 下面是重载双目运算符+的普通函数原形,其中最符合+原来含义的是(   )。

        A. Value operator+(Value, Value);   B. Value operator+(Value,int);

        C. Value operator+(Value, Value);  D. Value operator+(Value, Value);

20. 从一个基类派生出的各个类的对象之间(    )。

       A. 共享所有数据成员,每个对象还包含基类的所有属性

       B. 共享部分数据成员,每个对象还包含基类的所有属性

       C. 不共享任何数据成员,但每个对象还包含基类的所有属性

       D. 共享部分数据成员和函数成员

 

得分

阅卷教师

填空题(每个空1分,共10分)

1在C语言中,编程的单位是__①___;在C++语言中,编程的单位是__②____。

2类的具体表现是通过定义_______来操作的。

3一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为__①___权

4类中构造函数有__①___个,析构函数有__②____个。

5在定义类的对象时,C++程序将自动调用该对象的______函数初始化对象自身。

6__①___运算符对指定类型对象动态分配内存并返回____②____。

7类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的

__①___,共同行为被描述为类中的__②____

8对类中的成员函数和属性的访问是通过__①___、__②____和__③___这3

个关键字来控制的。

9.在类定义中,数据和成员函数默认权限是_________。

10类中的构造函数是一个特殊的成员函数,它由类的对象__①___调用,它的作用

是__②____。

11在撤销类的对象时,C++程序将自动调用该对象的______函数。

答案:

1函数类

2成员函数

3privatepublic

4.1个或者N个,1个

5构造函数

6.new,true或者false

7数据成员成员函数

8.privatepublicprotect

9.private

10.生成时,初始化

11.析构函数

得分

阅卷教师

判断题(本题共10小题,每题1分,共10分)

1)    一个对象数组中的所有数组元素属于同一个类 Y

2)    当在类的外部定义成员函数时,必须在函数名前加上类名和作用域运算符:

:

 Y

3)    类中有且只有一个析构函数 Y

4)    析构函数可以有形式参数 N

 

得分

阅卷教师

四、简答题(本题共3小题,每题3分,共9分)

1.说明类中的public、protected和private成员函数分别在public、protected和private继承方式下在派生类中的可访问性。

答案:

1.重点是基类中的任何Private在派生类中都是不可访问的。

2.若类A和类B没有继承关系,对于函数voidfunc(A&),请至少用两种不同方法说明如何才能传递一个非常量的B类对象给func函数。

答案:

.可在A类中定义一个构造函数:

A(constB&);

或在B类中定义一个自动转换函数:

operatorA()const;

3.在声明类中的构造函数、析构函数、纯虚函数、静态成员函数、非静态的成员函数以及全局函数作为类的友元函数时,哪些可以是常量成员函数?

答案:

只有纯虚函数、非静态的成员函数可以是常量成员函数。

(这题有点问题,析构函数可以是纯虚函数,但不能是常量函数)

4.举例说明重载(overload)、重定义(redefine)和重写(override)的含义。

答案:

如类A中有函数intf(void);和intf(int);为重载(overload)(同名,参数不同)

如类A中有函数intf(void);,A的派生类B中给intf(void)一个新的实现体,为redefine

如类A中有虚函数virtualintf(void);,A的派生类B中给virtualintf(void)一个新的实现体,

为override.

5.通常类A的拷贝构造函数的原型写为A(constA&);,请问为什么参数一定要使用引用形式?

使用const修饰符除了可以防止修改传递给构造函数的实参外,还有什么作用?

答案:

A(constA&one).当调用此拷贝构造函数时,需将参数压栈,若不使用&,就需要在

栈内创建一个one的副本,而这需要用拷贝构造函数。

这样就会形成递归调用。

使用const,还允许用一个常量对象作为样本,来构造一个新的对象。

6.程序员规范中要求不要写出类似(++i)+(i++)或f(++i,i++)这样的代码,请说明原因。

答案:

计算子表达式的顺序由编译器决定的,虽然参数的压栈顺序在给定的调用方式下式固定的,但参数表达式的计算顺序也由编译器决定的。

不同的编译器或不同的表达式计算的顺序可能不一致。

得分

阅卷教师

五.阅读程序题(本题共5小题,每题5分,共25分)

(1).

#include

#include

doubleSD(inta,intb,charop){

doublex;

switch(op){

case'+':

x=double(a)+b;break;

case'-':

x=double(a)-b;break;

case'*':

x=double(a)*b;break;

case'/':

if(b)x=double(a)/b;

elseexit

(1);

break;

default:

exit

(1);

}

returnx;

}

voidmain(){

intx=20,y=5;

cout<

cout<

cout<

}

程序运行结果:

251003

(2).

#include

#include

voidmain(){

char*a[5]={"student","worker","cadre","soldier","apen"};

char*p1,*p2;

p1=p2=a[0];

for(inti=1;i<5;i++){

if(strcmp(a[i],p1)>0)p1=a[i];

if(strcmp(a[i],p1)<0)p2=a[i];

}

cout<

}

程序运行结果:

workerapen

 

(3).

#include

voidWF(intx,inty){

x=x+y;

y=x+y;

cout<<"subs:

"<<"x,y="<

}

voidmain(){

intx=8,y=15;

cout<<"main:

"<<"x,y="<

WF(x,y);

x=2*x;

cout<<"main:

"<<"x,y="<

}

程序运行结果:

main:

x,y=8,15

subs:

x,y=23,38

main:

x,y=16,15

(4).

#include

voidLG(int*&a,int&m){

a=newint[m];

int*p=a;

for(inti=0;i

*p++=i*i+1;

}

voidmain(){

int*b,n=5;

LG(b,n);

for(inti=0;i

cout<

cout<

delete[]b;

}

程序运行结果:

1251017

(5).intSC(inta,intb,intc){

if(a>b)a=b;

if(a>c)a=c;

returna;

}

函数的功能是:

求出a,b,c三个数中的最小值并返回。

(6).

#include

template

TTWG(TTa,TTb){

if(a>b)return1;

elseif(a==b)return0;

elsereturn-1;

}

函数的功能是:

模板函数,比较两个变量a和b的大小,若a>b则返回1,若a==b,则返回0,若a

(7).structStrNode{

charname[15];//字符串域

StrNode*next;//指针域

};

voidQB{StrNode*&f,intn){

if(n==0){f=NULL;return;}

f=newStrNode;

cin>>f->name;

StrNode*p=f;

while(--n){

p=p->next=newStrNode;

cin>>p->name;

}

p->next=NULL;

}

函数的功能是:

建立一个具有n个结链表,每个结点的字符串值由键盘输入,链表的表头指针由引用变量f带回。

(8).//structWorker{

//charname[15];//姓名

//intage;//年龄

//floatpay;//工资

//};

istream&operator>>(istream&istr,Worker&x){

cout<<"请输入一个职工记录:

姓名、年龄、工资"<

istr>>x.name>>x.age>>x.pay;

returnistr;

}

函数的功能是:

重载撮操作符,用于从输入流中输入一个Worker类型的记录到引用参数x中。

 

得分

阅卷教师

六.程序设计题(本题共2小题,每题8分,共16分)

1、设计一个程序,输入正五边形的边长a,按公式R=

计算该五边形外接圆的半径。

.//设计一程序,输入正五边形的边长a,计算该五边形外接圆的半径

#include

#include

voidmain()

{

doublea,R;

cout<<"输入正五边形的边长"<

cin>>a;

R=a*(sqrt((10+2*sqrt(5))/5))/2;

cout<<"该五边形外接圆的半径R="<

}

2.重新安排整数序列21,26,15,78,3,47,11,7,53,39的顺序,使其中最大的5个整数位于序列的前部。

显示处理后的这个整数序列

#include

voidmain()

{

intarray[10]={21,26,15,78,3,47,11,7,53,39};

inti,j,m,temp;

for(i=0;i<10;i++)

cout<

for(i=0;i<5;i++)

{

j=i;

for(m=i+1;m<10;m++)

{

if(array[j]

j=m;

}

if(j>i)

{

temp=array[j];

array[j]=array[i];

array[i]=temp;

}

}

for(i=0;i<10;i++)

cout<

cout<

}

3.输入12个正整数,然后重新排列这个数列的顺序,使得所有的奇数位于数列的前部。

显示处理后的这两个数列的结果

#include

voidmain()

{

inti,m=0,n=11,array[12],data[12];

for(i=0;i<12;i++)

cin>>array[i];

for(i=0;i<12;i++)

{

if(array[i]%2!

=0)//如果array[i]是奇数

{

data[m]=array[i];

m++;

}

else

{

data[n]=array[i];

n--;

}

}

for(i=0;i<12;i++)

cout<

cout<

}

4设计一个程序,输入四个整数,找出其中最大的一个并显示出来。

#include

voidmain()

{

doublea,b,c,d;

cout<<"请输入四个数:

"<

cin>>a>>b>>c>>d;

a=a>b?

a:

b;

a=a>c?

a:

c;

a=a>d?

a:

d;

cout<<"四个数中最大的是:

"<

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2