电大面向对象程序设计期末复习题.doc
一、单选题,在括号内填写正确的选项编号每小题2分,共 20分)1.对象是构成现实世界的一个独立单位,它具有自己的静态特征和( )特征。 A.颜色 B.动态 c.状态 D 重量 2.使用JDK编译Java程序时使用的命令是 ( )。 A. java B. javac C. appletviewer D javadoc 3.包含 主方法的类被称为主类,主方法的存储控制属性应定义为 ()。 A. final B. abstract C. short Do static 4.在类 的定义中,若需要把一个属性或方法定义为类成员,而不是实例成员,则使用的修饰符为( )。A. const B. final C. static D public 5.JaV3 语言中规定的转义字符,以()字符作前缀。 A. B.I C. / D. 6.把对象的属性和服务组合成一个独立的整体,尽可能隐蔽其内部的细节,这称为对象的()。 A.封装性B.多态 '性 C.继承性D.开放性 7.具有 ()访问权限的成员能够被本类和其他任何类中的成员所访问。 A. public B. protectd C. private D.缺省 8.在类定义首部的语法格式中, ()不能作为其中的修饰符。 A. public B. protectd C. extends D. abstract 9.下面的关键字 ( )与异常处理无关。 A. throwB. throws C. import D. finally10.下面 ( )既可以作为流的数据源,又可以作为流的目的地。A.键盘B.磁盘文件c.显示器D.扫描仪二、 是非判断题,在每小题后面括号内打上对号、/表示叙述正确,打上叉号×表示叙述错误11. Java既支持类的单继承,又支持类的多重继承。 ( ) 12.在一个派生类中,能够定义与上层父类中的成员具有相同名称的成员。 ( ) 13.派生类可以直接访问从父类中继承下来的所有成员。 ( ) 14.在Java语言中,可以把实现了一个接口的类对象,赋给这个接口的引用对象。 ( ) 15.在一个抽象类中,不允许包含任何成员变量和构造方法。 ( ) 16.接口中的成员方法都默认具有pu blic和abstract的修饰属性。 ( ) 17.在Java语言中,一个类不能被定义在另一个类之中,类与类之间没有包含关系。 ( ) 18.在Java语言中,声明包语句可以出现在一个Java程序文件的任何位置。 ( ) 19.向量类Vector中的size()方法能够返回调用向量中当前保存的元素的个数。( ) 20. FileWriter类的构造函数的参数不是一个文本文件名。 ( ) 21.输入流类 (InputStream)和输出流类 ( OutputStream)是用来处理字符流的抽象基类。 () 22. DatalnputStream类的文件流能够从二进制文件中读出基本类型的数据。 ( ) 23. 在图形用户界面中,原子组件是不能同用户进行交互的组件。 ( ) 24. 在Java程序中,既允许创建单个线程,也允许创建多个线程。 ( ) 25.如果在派生类的构造方法的定义中没有明确调用父类的构造方法,则系统在执行派生类的构造方法时将隐含调用父类的元参构造方法。( )三、填空题,在横线上填写正确的内容(每空1分,共 15分 26.Java语言中的逻辑类型的关键字为 ,它的两种取值分别为关键宇 true和false。27. 用于修饰类的成员具有公有访问属性的关键字为 28. 假定整数变量x的值为10,则执行y=2 * x+赋值后,y的值为 。29. 类中的 方法不需要给定返回值类型。 30. 当类中的成员定义采用static关键宇修饰时,则称该成员为类的 (静态/实例 ) 成员。 31.类中的成员方法也可以使用关键字 进行修饰,表示该方法不能被子类所重新 定义。 32.在方法调用的参数传递中,若为 (按值 /引用 ) 传递,方法体中对形参内容的修改不影响实参的值。 33. 定义一个终结类时需要在类首部的关键字class前使用修饰符 。 34. 假定一个字符串对象x的值为"abc",则x. concat("def勺的值为 。35. 假定要访问维数组 X中的第 k个元素,则对应的元素 (下标变量 )表示为 。 36. 基本数据类型boolean对应的包装类为 。37.在Java语言中,程序运行时发生的运行错误又分为致命性的严重错误和非致命性的-般错误两种,异常属于 错误。 38.Java语言中的System. out表示标准 (输入 /输出 ) 流。 39. 对于原子组件,根据功能的不同,可以被分为 类。40. 每个线程具有四种基本状态 :就绪状态、 、死亡状态和阻塞状态。四、写出下列每个程序编译和运行后的输出结果41. public class XXK public static void main(String args) int x , y=O; for(x=l; x<lO; x+十 ) ifCx%2=0) y+=x祷x; System. out. println("y= "+y) ; 42. public class XXK2 private final int a; public XXK2(int a) this. a=a;) public int f1 (int x) if(x%2= =1) return a+x; else return a-x; public static void main(String args) XXK2 x=new XXK2(3); int y= x. f1(l() ; System. out. println("y="+y); 43. class Rectangle private int a ,b; public RectangleCint aa , int bb) a=aa; b=bb; public int areaO return a势b; public int girthO return 2券(a十b) ; public class XXK3 extends Rectangle private Int c; public XXK3(int aa , int bb , int cc) super(aa,bb); c=cc; public int volumeO return areaO赞c; public int arrisLengthO return 2替girthO+4祷c; public static void main(Stri吨口args) XXK3 x=new XXK3 (l ,3,5) ; int yl = x. volumeO; int y2 = x. arrisLength() ; System. Olit. println(y1 +", "+y2); 44. public class XXK4 public static void main(String args) int口丁a=凹, 5,剖,3,6,9, 4 ,5,6; int 8=0; orCint i=O; i<a.length; i十十 ) or(int j=O; j<ai.length; j+十 )自+ = aijJ; System.out.printirk"5="十s) 45. class ABC inta ,b; public ABCCint a , int b) this. a=的this. b=b; public int compareToCABC x) return a祷b-x. a祷x. b; public class XXK5 public static void mainCStringJ args) int JJd=3,肘,饨,6,5,6,2,9,饵, 7 ; ABC口arznew ABC5j; int i,k=O; for (i=O; i<d.length; i+) ariJ= new ABCCdiJOJ,d i丁 lJ ) ; forCi=l; i<ar.length; i+) if(ari. compareToCark.O) k=i; System. out. printlnC"k= "+ k) ; 一、单选题,在括号内填写正确的选项编号1. B 2.B 3.D 4.C 5.D 6.A 7.A 8.B 9.C 10.B二、是非判断题,在每小题后面括号内打上对号J表示叙述正确,打上叉号×表示叙述错误11. X(错 ) 12. .J(对) 13. X(错) 14. .J(对) 15. X(错) 16. .J(对) 17. X(错) 18. X(错) 19. .J(对) 20. X(错) 21. X(错) 22. .J(对) 23. X(错) 24.、J(对) 25. .J(对)三、填空题,在横线上填写正确的内容26. boolean 27. public 28. 20 29.构造 30.静态 31. final 32.按值 33. final 34. "abcdef" 35. xk一lJ 36. Boolean 37.一般 38.输出 39. 3 40.运行状态四、写出下列每个程序编译和运行后的输出结果41. y=120 42. y=一7 43. 15 , 36 44. s=48 45. k=2 一、单项选题1设x和y均为bool量,则x && y为真的条件是( )。 A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假2. 在下面循环语句中循环体执行的次数为( )。 int i=0,s=0; while(s<20) i+; s+=i; A. 4 B. 5 C. 6 D. 73. 假定p是具有int*类型的指针变量,则给p赋值的正确语句为( )。A. p=new int; B. p=new int*; C. p=new int*; D. p=new int10;4. 以下关于函数模板叙述正确的是( )。 A. 函数模板也是一个具体类型的函数 B. 函数模板的类型参数与函数的参数是同一个概念 C. 通过使用不同的类型参数,函数模板可以生成不同类型的函数 D. 用函数模板定义的函数没有类型5. 在多文件结构的程序中,通常把类的声明单独存放于( )中。 A. 主文件 B. 实现文件 C. 库文件 D. 头文件6. 假定有定义“int b10; int *pb;”,则不正确的赋值语句为( )。 A. pb=b; B. pb=&b0; C. pb=new int; D. pb=b5; 7. 假定一个类的构造函数为“A(int aa=1, int bb=0) a=aa; b=bb;”,则执行“A x(0);”语句后,x.a和x.b的值分别为( )。 A. 0和0 B. 0和1 C. 1和0 D. 1和18. 假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为( )。 A. x.a B. x.a() C. x->GetValue() D. x.GetValue()9. C+的继承性允许派生类继承基类的( )。 A. 部分特性,并允许增加新的特性或重定义基类的特性 B. 部分特性,但不允许增加新的特性或重定义基类的特性 C. 所有特性,并允许增加新的特性或重定义基类的特性 D. 所有特性,但不允许增加新的特性或重定义基类的特性10. 假定AB为一个类,则执行“AB x;”语句时将自动调用该类的( )。 A. 带参构造函数 B. 无参构造函数 C. 拷贝构造函数 D. 赋值重载函数11. 定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为( )。 A. int *p=new int30; B. int *p=new int(30); C. int *p=new 30; D. *p=new int30; 12. 假定有“struct BOOKchar title40; float price; BOOK *book=new BOOK;”,则正确的语句为( )。 A. strcpy(book->title,”Wang Tao”); B. strcpy(book.title,”Wang Tao”); C. strcpy(*book.title,”Wang Tao”); D. strcpy(*book)->title,”Wang Tao”); 13. 假定有定义“int b10; int *pb;”,则不正确的赋值语句为( )。 A. pb=b; B. pb=&b0; C. pb=new int; D. pb=b5; 14. 假定指针变量p定义为“int *p=new int(100);”,要释放p所指向的动态内存,应使用语句( )。 A. delete p; B. delete *p; C. delete &p; D. delete p; 15. 软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的( )。 A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性 16. 若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( )放在函数原型或函数头的前面。 A. in B. inline C. inLine D. InLiner 17. 在关键字public后面定义的成员为类的( )成员。 A. 私有 B. 公用 C. 保护 D. 任何18. 假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为( )。 A. x.a B. x.a() C. x->a D. x->a() 19. 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( )。 A. int AA:a() B. int AA:a() C. AA:a() D. AA:int a() 20. 在多文件结构的程序中,通常把类的定义单独存放于( )中。 A. 主文件 B. 实现文件 C. 库文件 D. 头文件二、填空题1. 假定x=5,y=6,则执行表达式y+=x-计算后,x和y的值分别为_和_。2. 执行char *p=new char(a)操作后,p所指向的数据对象的值为_。3. 变量v定义为“double v=23.4;”,要使指针pv指向v,则定义pv的语句为_。4. 若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上_和两个冒号分隔符。5. 假定用户只为类AB定义了一个构造函数"AB(int aa, int bb=0) a=aa; b=bb;",则定义该类的对象时,其实参表中至少带有_个实参。 6假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为_。 7. 一个二维字符数组a1020能够存储_个字符串,每个字符串的长度至多为_。8. 重载一个函数的条件是:该函数必须在参数的个数或参数对应的_上与其它同名函数不相同。 9. 一个指针类型的对象占用内存的_个字节的存储空间。 10. 假定一个数据对象为int*类型,则指向该对象的指针类型为_。 11假定p所指对象的值为25,p+1所指对象的值为42,则*+p的值为_。 12假定p所指对象的值为25,p+1所指对象的值为42,则执行*(p+)或*p+运算后,p所指对象的值为_。13. 一个数组的数组名实际上是指向该数组_元素的指针,并且在任何时候都不允许_它。14 重载一个函数的条件是:该函数必须在参数的_或参数对应的_上与其它同名函数不相同。15. 指针变量pv和pc定义为“void *pv =”Hello, word!”; char *pc;”,要将pv值赋给pc,则正确的赋值语句是pc=_pv。16. 若p指向x,则_与x的表示是等价的。 17. 假定p为指向二维数组int d46的指针,则p的类型为_。 18. 若y是x的引用,则对y的操作就是对_的操作。 19. 执行char *p=new char(a)操作后,p所指向的数据对象的值为_。 20. 执行_操作将释放由p所指向的动态分配的数据空间。三、程序填充题,根据题意在横线上填写合适的内容。2、已知一维数组类ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符 要对下标是否越界进行检查。class ARRAY int *v; /指向存放数组数据的空间int s; /数组大小 public: ARRAY(int a, int n); ARRAY()delete v; int size() return s; int& operator(int n); ;_(1)_ operator(int n) / 的运算符成员函数定义if(n<0 | _(2)_) cerr<<"下标越界!" exit(1); return _(3)_;(1) (2) (3) 3类A的定义class A char *a; public: A() a=NULL; A(char *aa) a=_(1)_ charstrlen(aa)+1; strcpy(a,aa); _(2)_ /定义析构函数,删除a所指向的动态存储空间 ;(1) (2) 4. 已知一个类的定义如下:#include<iostream.h>class AA int a10;int n;public:void SetA(int aa, int nn); /用数组aa初始化数据成员a, /用nn初始化数据成员nint MaxA(); /从数组a中前n个元素中查找最大值void SortA(); /采用选择排序的方法对数组a中前n个元素 /进行从小到大排序 void InsertA();/采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(); /依次输出数组a中的前n个元素; 该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。int _(1)_ int x=a0;for(int i=1; i<n; i+) if(ai>x) _(2)_;_(3)_;(1) (2) (3)四、理解问答题,写出程序运行结果或程序(或函数)所能实现的功能。 1. #include<iostream.h> void main() int i,s=0; for(i=2;i<=30;i+=2) s+=i*i; cout<<"s="<<s<<endl; 函数功能: 2. #include<iostream.h> double f1(int n) double sign=1,s=1; for(int i=2;i<=n; i+) s+=sign/(i*i); sign*=-1; return s; void main() int a; cin>>a; cout<<f1(a)<<endl; 函数功能:3.#include<iostream.h> class A int a,b; public: A() a=b=0; A(int aa, int bb) a=aa; b=bb; int Sum() return a+b; int* Mult() int *p=new int(a*b); return p; ; void main() A x(4,5), *p; p=new A(2,3); cout<<x.Sum()<< <<*(x.Mult()<<endl; cout<<p->Sum()<< <<*(p->Mult()<<endl; 运行结果:4. #include<iostream.h> void main() int a10=76,83,54,62,40,75,90,92,77,84; int b4=60,70,90,101; int c4=0; for(int i=0;i<10;i+) int j=0; while(ai>=bj) j+; cj+; for(i=0;i<4;i+) cout<<ci<< ; cout<<endl; 运行结果:五、编程题 根据下面类中拷贝构造函数的原型写出它的类外定义。 class Array int *a; /指向动态分配的整型数组空间 int n; /记录数组长度 public: Array(int aa, int nn); /构造函数,利用aa数组长度nn初始化n, /利用aa数组初始化a所指向的数组空间 Array(Array& aa); /拷贝构造函数;参考答案一、单选题1. A 2. C 3. B 4. C 5. D 6. D 7. A 8. D 9. C 10. B 11. A 12. A 13. D 14. A 15. B 16. B 17. B 18. B 19. A 20. D二、填空题1. 4 11 2. a 3. double *pv=&v; 4. 类名 5. 1 6. AB() 7.10 19 8. 类型 9. 4 10. int* 11. 12 12. 42 13. 第一个、 修改 14. 个数(或数目) 类型 15. char * 16. *p 17. int(*)6 18. x 19. a 20. delete p三、程序填充题,根据题意在横线上填写合适的内容。 1. (1) i<=temp (2) break 2. (1) int& ARRAY: (2) n>=s (3) vn (或*(v+n)3. (1)new (2)A() delete a; 4. (1) AA:MaxA() (2) x=ai (3) return x四、理解问答题,写出程序运行结果或程序(或函数)所能实现的功能。1. 计算并输出22+42+62+L+302的值。2. 计算并输出1+的值,其中a的值由键盘输入。 3. 9 20 5 6 4 2 1 5 2 五、编程题 1、 Array:Array(Array& aa) n=aa.n; a=new intn; for(int i=0; i<n; i+) ai=aa.ai; 一、单项选择题(每小题2分,共20分)1.设X和Y均为boot量,则xY为假的条件是(A.它们均为真 B.其中一个为真 C.它们均为假D.其中一个为假2.假定一个二维数组的定义语句为“inta34 _ 3,4,2,8,6;",则元素a12的值为(A. 2 B. 4 C. 6 D. 83.假定P是具有int 、类型的指针变量,则给P赋值的正确语句为(A. p=newintint关关 B.p=rew int C. p=new D. p =new int104.软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的(A.可维护性 B.可复用性 C.兼容性 D.正确性5.若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( )放在函数原型或函数头的前面。A. in B. Inline C. inline D. InLiner6.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为(A.l ength+1 B. f irst-length C (first-f-length一I)0oMS D. ( first-f-length)0 oM S7.假定一个类的构造函数为“A(inta a,in tb b) a=aa;b =aa* b b;" ,则执行 “A x(4,);”语句后,x. a和x. b的值分别为( )。A. 4和 5 B. 5 和 4 C. 4和20 D. 20和58.假定AB为一个类,则执行“AB * p=new AB(1,2);”语句时共调用该类构造函数的次数为(A. 0 C.2 B. 1 D. 39.一个类的成员函数也可以成为另一个类的友元函数,这时的友元声明( )类域的限A.需加上B.不需加上 C.可加可不加D.取消10.队列具有( )的操作特性。A.先进先出13.先进后出 C.进出无序D.仅进不出二、填空题(每小题2分,共20分)1.多行注释的开始标记符为 。2.假定x=5,y=6,则表达式x- + * - - Y的值为 。3. 假 定 x是一个逻辑量,则 xa乙true的值与x的值 。4. 含 随 机函数的表达式 rand()% 20的值在0至 的整数区间内。5. 程 序 的编译是以 为单位进行的。6. 一 个 数组的 实际上是指向该数组的第一个元素的指针,并且在任何时候都不允许修改它。7. 指 针变 量pv和pc定义为“void -pv = "Hello,w ord!"c har p c;",要将pv值赋给pc,则正确的赋值语句是pc=( ) Pv o8一 个 类 的 函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。9. 假 定 用户为类 AB定义了一个构造函数“AB(inta a);a(aa),",则 是该类的数据成员。10 .在 多 文件 结构 的程 序 中,通 常 把含 有 main )函数 的文件 称 为该 程 序 的 。三、 程序填充题。根据题意在横线上填写合适的内容。(每小题6分,1.采用辗转相除法求出两个整数的最大公约数。# inc lu de<iostream.h >vo id main()IIlt 8,hcout+ 请输人两个正整数:;cin; a; bwhile(a<二0b<=0) cout+ '重新输人:“;cin>>a>>bwhile(b)int rr=a%b; , ,/分别修改a和b的值cout+ a+ endl,/输出最大公约数2.用插入排序方法对table指针数组中size个指针所指向的字符串进行按升序排序的算法。void sort(char*table仁,int size)for(inti =1;i<size;i-f- +)charp=tablei;for(int j=i一1;j>=0;j一一)if(strcmp(p,tablej)<0)t ablej- 1= ;else break;tablej+1= ;3.类A的定义class A char * apublicF>1A()a =NULL;A(char,aa)/定义无参构造函数,使a为空指针a charstrlen(aa)+1strcpy(a,aa); 刀用as所指字符串初始化a所指向的动态存储空间 /定义析构函数,删除a所指向的动态存储空间4.类Goods的定义classpnvate:ch arN ame20; /商品名称int W eight; /商品重量sta ticin tt otalWeight;/同类商品总重量public:Go ods< char s tr,intw ) /构造函数str cp y CN a m e, str);Weight=w;totalW eight十“Weight一Goods()totalWeight一=Weight;char二GetN() /返回商品名称int GetW )return weight;static int GetTotalWeight()/定义静态成员函数返回总重量四、理解问答题,分别写出前2小题的程序运行结果和指出后2小题的程序或函数功能。(每小题6分,共24分)1.#include<iostream, h>const intT= 6void main()int i,j,k=0;for(i=1;i