面向对象程序设计课程作业及复习资料
《面向对象程序设计c》综合复习题集及答案详解

《面向对象程序设计c》综合复习题集及答案详解综合复习题集一、单选题1.C++源程序文件的缺省扩展名为(A)。
A.cppB.e某eC.objD.lik2.由C++源程序文件编译而成的目标文件的缺省扩展名为(C)。
A.cppB.e某eC.objD.lik3.由C++目标文件连接而成的可执行文件的缺省扩展名为(B)。
A.cppB.e某eC.objD.lik4.编写C++程序一般需经过的几个步骤依次是()。
A.编译、编辑、连接、调试B.编辑、编译、连接、调试C.编译、调试、编辑、连接D.编辑、调试、编辑、连接5.以下标识符中不全是保留字的是()。
A.caeforintB.defaultthenwhileC.boolclalongD.gotoreturnchar6.能作为C++程序的基本单位是()。
A.字符B.语句C.函数D.源程序文件7.程序中主函数的名字为()。
A.mainB.MAINC.MainD.任意标识符8.C++程序的基本模块为()。
A.表达式B.标识符C.语句D.函数9.可用作C++语言用户标识符的一组标识符是()。
A.voiddefine+WORDB.a3_b3_123YNC.for-abcCaeD.2aDOizeof10.存储以下数据,占用存储字节最多的是()。
A.0B.‘0’C.“0”D.0.011.程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用()符号作为分隔符。
A.空格或逗号B.逗号或回车C.逗号或分号D.空格或回车12.设”inta=12;”,则执行完语句”a+=a某a;”后,a的值是()。
A.12B.144C.156D.28813.假设在程序中a、b、c均被定义成整型,所赋的值都大于1,则下列能正确表示代数式1/abc的表达式是()。
A.1.0/a某b某cB.1/(a某b 某c)C.1/a/b/(float)cD.1.0/a/b/c14.设”inta=15,b=26;”,则”cout<A.15B.26,15C.15,26D.2615.设某是一个bool型的逻辑量,y的值为10,则表达式某&&y的值为()。
面向对象程序设计考试复习资料

面向对象程序设计1. 代码public class Test {public int aMethod() {static int i = 0;i++;return i;}public static void main (String args[]) {Test test = new Test();test.aMethod();int j = test.aMethod();System.out.println(j);}}输出结果为编译失败,static用来修饰全局变量,不能修饰局部变量2. 下面的程序中,temp的最终值是1long temp=(int)3.9;temp%=2;3.在J2EE中属于Web层的组件有:Servlet4. 派生类中的成员不能直接访问基类中的private成员。
5.以public修饰的类如:public class Car{…}则Car可被其它程序包中的类使用6.paint( )方法使用 Graphics 类型的参数7. 下面数据插入语言(DIL)不属于SQL语句的子类8. 实现运行时的多态性要使用虚函数。
9. 创建对象时构造函数被调用10. 如下代码:class Base {Base() { System.out.print(“Base”); }}public class Alpha extends Base {public static void main( String[] args ) {new Alpha();-----调用父类无参的构造方法new Base();}}结果是BaseBase。
11.如果希望控件在界面上按表格行分列排列,应使用GridLayout布局管理器12. 声明抽象方法不可写出大括号叙述正确13. 线程交互中不提倡使用stop()方法14.当检索一个压缩文件时,首先要建立压缩文件输入流对象,该对象以 FileInputStream 对象为参数15.jsp指令中isELIgnored="boolean"的意思是决定是否支持EL表示。
面向对象程序设计(Java)总复习

需要频繁地创建和销毁同一对象实例的场合,如日志 记录器、缓存对象等。
工厂模式
定义
提供一个创建对象的最佳方 式。
实现方式
简单工厂、工厂方法、抽象 工厂。
应用场景
当需要根据不同的参数条件 创建不同的对象时,如数据 库连接池、对象序列化等。
观察者模式
定义
定义了对象之间的依赖关系,使得当一个对象状态发生改变时,其 相关依赖对象能够得到通知并自动更新。
for语句
用于循环遍历数组或集合等数据结 构。
04
函数与方法
函数
函数是执行特定任务的代码块,可以接受输入参数并返回结果。在 Java中,函数也被称为方法。
方法重载
在同一类中可以定义多个同名方法,只要它们的参数列表不同即可。
方法覆盖
子类可以定义与父类同名的方法,只要它们的参数列表和返回类型相 同即可。
集合框架
集合框架概述
List接口及其实现
Java集合框架提供了用于存储和操作对象 集合的接口和类。它包括List、Set、 Queue和Map等接口以及实现这些接口的 类。
Set接口及其实现
List接口表示有序集合,可以包含重复元素 。Java提供了ArrayList、LinkedList等类来 实现List接口。
String类与正则表达式
字符串的比较
字符串的替换
字符串的截取
01
03 02
String类与正则表达式
01
正则表达式
02
正则表达式的概念
03
正则表达式的使用方法
String类与正则表达式
正则表达式的匹配规则
正则表达式的特殊字符
IO流与文件操作
C++面向对象程序设计期末复习资料

一.选择题(20题,共30分)●作用域运算符的功能●设置虚基类的目的●构造函数的特征●析构函数的说法●重载函数在调用时选择的依据●静态成员的特性●友元●派生类的描述●运算符在C++中不能被重载?●动态联编的描述●纯虚函数和抽象类的描述●抽象类的使用●delete删除一个动态对象●new运算符的下列描述●C++与C语言关系的描述●类定义中,错误的语句书3.1.1(7)●自动调用该类构造函数次数●静态数据成员的描述●派生类的描述●派生类的构造函数的初始化列表中,不能包含●虚基类的声明●赋值兼容规则●虚函数●纯虚函数表述●抽象类表述●重载运算符函数●成员函数重载的运算符、友元函数重载的运算符●关键字class和typename●类模板表述●重载了运算符<< 书7.2节●语句ofstream f()二.填空题(15空,共30分)●标准输入输出流对象cin cout●类中的数据和成员函数●类都有一个隐含的指针指向:正在调用成员函数的对象●非成员函数访问类成员●虚基类的目的:解决二义性问题●基类数据成员的初始化●operator++●运算符函数调用格式●异常处理的保留字●异常错误处理函数terminate() 、set_terminate()三.程序的执行、填空(4题,共20分)四.编程题(3小题,共20分)一.选择题1.如果表达式++i*k中的“++”和“*”都是重载的友元运算符,若采用运算符函数调用格式,则表达式还可以表示为 A 。
A. operator*(i.operator++(),k)B. operator*(operator++(i),k)C. i.operator++().operator*(k)D. k.operator*(operator++(i))2.在下列成对的表达式中,运算符“/”的意义相同的一对是 D 。
A.8/3和8.0/3.0B.8/3.0和8/3C.8.0/3和8/3D.8.0/3.0和8.0/33.如果表达式y*x++中,“*”是作为成员函数重载的运算符,“++”是作为友元函数重载的运算符,采用运算符函数调用格式时,该表达式应表示为 C 。
面向对象的程序设计复习资料

⾯向对象的程序设计复习资料⾯向对象复习资料·········⼀、名词解释1、软件⼯程——建⽴在系统化、规范化、数量化等⼯程原则和⽅法上的,关于软件开发各阶段的定义、任务和作⽤的⼯程学科。
包括软件开发技术、软件项⽬管理两⽅⾯内容。
2、模型——对现实的简化,提供系统的蓝图,包含架构[总体]设计和组件[详细]设计;包含重要的因素忽略不相⼲的细节;⼀个系统可以从不同视⾓使⽤不同模型进⾏描述;模型可以是架构的[侧重于组织]、也可以关注⾏为[系统的动作]3、对象——现实世界中具有静态特征和动态特征的某个具体的实际事物。
4、封装——把属性和操作封在⼀个对象⾥,不允许外界直接存取和使⽤。
包含属性与⾏为的结合和信息屏蔽两层含义。
5、消息——向对象发出的[服务]请求,包括服务的对象标识、服务标识、输⼊信息和回答信息等。
定义对象之间单路通信,是从发送⽅到接收⽅的控制流,激发某操作、唤醒信号或导致对象的创建或撤消。
⽤箭头表⽰,符号见表6、继承——派⽣类或⼦类⾃动拥有基类或⽗类的全部属性和操作的类创建⽅法7、多态——同⼀操作作⽤于不同对象,有不同解释或不同的执⾏结果。
两种——编译时、运⾏时;3实现⽅式——接⼝、继承、抽象类。
8、UML——⼀种功能强⼤的、⾯向对象的可视化系统分析的建模语⾔[对⾯向对象系统进⾏可视化、详述、构造和⽂档化的⼯具,已成为软件建模的⼯业标准。
] 9、视图——从某个⽅⾯或⾓度出发描述系统,或表达系统某个⽅⾯特征的⼀个或多个图。
10、动作事物——时间、空间上的动作,模型的动词;最基本的是交互与状态机11、交互——⼀组对象在特定上下⽂、为达到特定⽬的进⾏⼀系列消息交换组成的动作,要列出每个操作的消息、动作次序、连接关系。
12、状态——13、⽤例——14、事件流——15、对象关联——16、可见性——描述属性和操作是否可被其他类引⽤17、活动——对象被占⽤以完成某任务,⽤矩形条表⽰。
面向对象程序设计 复习资料

1.对象(1)从概念层面讲,对象是某种拥有责任的抽象。
(2)从规格层面讲,对象是一系列可以被其他对象使用的公共接口。
(3)从语言实现层面讲,对象封装了代码和数据。
2.软件开发中的经典阶段:需求、分析、设计、规范、实现、测试、部署、维护。
3.设计7原则:开闭原则、里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪M特原则、接口隔离原则、单一职责原则。
4.面向对象的方法学:UML(统一建模语言)、RUP(统一软件开发过程)、XP(极限编程)。
开发方法:Booch、Coad、OMT、UML、OOSE、Wirfs—Brock 5.OOA——运用面向对象方法进行需求分析。
OOD——运用面向对象方法进行系统设计。
OOP——运用面向对象方法进行程序设计。
6.OOA的基本任务:是运用面向对象的方法,对问题域和系统责任进行分析和理解,对其中的事物和它们之间的关系产生正确的认识,找出描述问题域及系统责任所需的类及对象,定义这些类和对象的属性和操作,以及它们之间所形成的结构、静态联系和动态联系。
最终目的:是产生一个符合用户需求,并能够直接反映问题域和系统责任的OOA模型及其详细说明。
优点:(1)加强了对问题域和系统责任的理解。
(2)改进与分析有关的各类人员之间的交流。
(3)对需求的变化具有较强的适应性。
(4)支持软件复用。
OOA的三大策略是:属性策略、方法策略、对象策略。
7.(1)封装:是指对象在其操作中隐藏属性。
它是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。
封装的目的是使对象的使用者和生产者分开,使对象的定义和实现分开。
例如:要从同事那里借钱,在商店购买食物,就不会抢夺同事的钱包,大翻一通,看看里面是否有足够的钱。
而应该询问他们是否可以借你一些钱,他们就会自己翻钱包。
以表示圆的一个对象作为封装的例子。
圆的操作应能计算出半径、直径、周长和面积。
假定选择存储直径,要访问直径的程序员都会选择存储直径属性,而不是通过“获取直径”的操作来访问。
面向对象程序设计 复习资料2

面向对象程序设计复习资料(一)单项选择题1.Java是一门()语言。
A. 机器B. 汇编C. 面向过程的高级D. 面向对象的高级2. 具有相同属性和服务的一组对象的共同模板称为()。
A. 程序B. 类C. 代码D. 概念3.在Java程序中包含主方法的类被称为主类,主方法的访问控制修饰符为()。
A. privateB. protectedC. publicD. static4.Java语言中的switch语句属于()语句。
A. 数据输入B. 数据输出C. 分支处理D. 循环控制5.在类的定义中,实现接口的子句所使用的关键字为()。
A. extendsB. implementsC. publicD. abstract6.在派生类的定义中,继承父类的子句所使用的关键字为()。
A. extendsB. implementsC. publicD. abstract7.下列能表示栈(stack)s1长度的是( )。
A.s1.length()B.s1.lengthC.s1.sizeD.s1.size()8.下面的异常()为文件没有找到异常。
A. NullPointerExceptionB. FileNotFoundExceptionC. ArrayIndexOutOfBoundsExceptionD. IOException9.下列不是InputStream 类的子类的是()。
A. FileInputStreamB. ObjectInputStreamC、 FileOutputStream D. DataInputStream10.进行文件输入输出操作时,最常用的系统包是()。
A. B. java.ioC. java.utilD. java.awt11.类是对具有共同属性和行为的对象的抽象描述,每个对象称为该类的一个()。
A. 产品B. 元素C. 成分D. 实例12.使用JDK运行Java程序时使用的命令是()。
面向对象程序设计课程作业及复习资料

《面向对象程序设计》课程作业及答案作业1:是非题1. 头文件中一般存放着变量和常量的定义、函数的原型以及类的定义。
1. 错2. 程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。
4. 对填空题下面是一个求数组元素之和的程序。
主程序中定义并初始化了一个数组,然后计算该数组各元素的和,并输出结果。
函数sum计算数组元素之和。
填充程序中不完整的部分。
________A__________int sum(int [],int);void main(){int ia[5] = {2,3,6,8,10};B ;sumOfArray = sum(ia,5);cout << "Sum of array:" << sumOfArray << endl;}int sum(int array[],int len){int iSum = 0;for(int i = 0; C ; D )E ;return iSum;}答案:A #include <iostream.h>B int sumOfArray;C i < lenD i++E iSum += array[i];阅读理解题写出下列程序的运行结果: //static int i = 20;int x;static int g(int p) {return i + p;}void f(int v){x=g(v);}//#include <iostream.h> extern int x;void f(int);void main(){int i=5;f(i);cout << x;}回答以下问题:1. 程序的运行结果是什么样的?2. 为什么文件中要包含头文件<iostream.h>?3. 在函数main()中是否可以直接调用函数g()?为什么?4. 如果把文件中的两个函数定义的位置换一下,程序是否正确?为什么?5. 文件和中的变量i的作用域分别是怎样的?在程序中直接标出两个变量各自的作用域。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向对象程序设计》课程作业及答案作业1:是非题1. 头文件中一般存放着变量和常量的定义、函数的原型以及类的定义。
1. 错2. 程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。
4. 对填空题下面是一个求数组元素之和的程序。
主程序中定义并初始化了一个数组,然后计算该数组各元素的和,并输出结果。
函数sum计算数组元素之和。
填充程序中不完整的部分。
________A__________int sum(int [],int);void main(){int ia[5] = {2,3,6,8,10};B ;sumOfArray = sum(ia,5);cout << "Sum of array:" << sumOfArray << endl;}int sum(int array[],int len){int iSum = 0;for(int i = 0; C ; D )E ;return iSum;}答案:A #include <iostream.h>B int sumOfArray;C i < lenD i++E iSum += array[i];阅读理解题写出下列程序的运行结果: //static int i = 20;int x;static int g(int p) {return i + p;}void f(int v){x=g(v);}//#include <iostream.h> extern int x;void f(int);void main(){int i=5;f(i);cout << x;}回答以下问题:1. 程序的运行结果是什么样的?2. 为什么文件中要包含头文件<iostream.h>?3. 在函数main()中是否可以直接调用函数g()?为什么?4. 如果把文件中的两个函数定义的位置换一下,程序是否正确?为什么?5. 文件和中的变量i的作用域分别是怎样的?在程序中直接标出两个变量各自的作用域。
答案:1. 程序的运行结果:25因为程序中需要利用cout对象进行输出,而cout是在C++标准I/O库iostream中定义的类ostream的一个对象。
2 在函数main()中不可以直接调用函数g(),因为g()是静态函数,只在它所在的文件内可见。
3 如果把文件中的两个函数定义的位置换一下,程序不正确,因为C++规定所有使用的变量和函数需要先声明,后使用。
在函数f中用到了函数g,所以函数f不能出现在函数g的定义或声明之前。
文件中的变量i的作用域从它的定义开始到文件结束。
中的变量i的作用域从它的定义开始到main函数结束。
编程题写一个函数,完成在链表末尾增加一个节点的操作。
函数的原型为:Node * AddNode(Node * & head, int newData);其中,链表节点的定义如下:struct Node {int data; //存放数据Node * next; //指向链表中的下一个节点};函数参数:函数的第一个参数head指向链表的第一个节点,如果链表为空,则head的值为NULL。
第二个参数newData为要插入的新节点中存放的数据。
函数返回值:当成功地插入新的节点时,函数返回指向新节点的指针,否则,如果不能申请到内存空间,则返回NULL。
3 / 24Node * AddNode(Node *& head, int newData){//在这里写出函数的实现}答案:Node * AddNode(Node * &head, int newData){//申请新的节点空间Node * newNode = new Node;if (newNode == NULL)return NULL;//填充新节点的内容newNode->data = newData;newNode->next = NULL;//插入到链表的结尾if (head == NULL)head = newNode;else{//寻找链表的最后一个节点Node *tail = head;while(tail->next != NULL)tail = tail->next;//将新节点插入到最后tail->next = newNode;}return newNode;}作业2:是非题1. 在不同作用域中的变量可以同名。
对2. 派生类的成员函数可以直接访问基类的所有成员。
2. 错填空题#include<iostream.h>___________A_____________;void main(){int a[6]={2,4,8,6,9,14};int x1=____B______; //调用f1函数求出a中前4各元素之和。
int x2=f1(a,6);cout<<x1<<' '<<x2<<endl;}int f1(int a[], int n){int i,s=0;for(i=0;i<n;i++) s+=a[i];return s;}答案:A int f1(int a[], int n);B f1(a,4)改错题1. 下面的函数将浮点型指针参数para所指向的值赋给一个局部指针变量pFloat所指向的空间,然后输出*pFloat的值。
#include <iostream.h>void func(float * para){float * pFloat;pFloat = para;5 / 24cout << pFloat;}错误为:______________________________________________________改正方法为:________________________________________________________________________________________________________________答案错误为:没有给指针申请空间,就直接赋值改正的方法为:先为pFloat申请空间,再赋值。
2. 下列程序片段对二维数组的每个元素赋值unsigned short SomeArray[5][4];for (int i = 1; i<=5; i++)for (int j = 1; j<=4; j++)SomeArray[i][j] = i+j;错误为:______________________________________________________改正方法为:__________________________________________________ ______________________________________________________________答案错误为:访问数组元素的下标不对改正的方法为:将两个for循环的循环初始值改为0,循环结束条件分别改为i<5和j<4。
编程题写一个函数,找出给定字符串中小写字母字符的个数。
函数的原型为:int CalcAlpha(char *str);函数参数: str为所要处理的字符串;函数返回值:所给字符串中小写字母字符的个数int CalcAlpha(char *str){ //在这里写上程序的实现}答案:int CalcAlpha(char *str){//判断字符指针是否为空if(str == NULL) return 0;//记录小写字母字符个数的变量int num=0;//依次检查各个字符,如果是小写字母,则总数加1for(int i=0; str[i]!=0x0; i++)if(str[i])>='a' && str[i]<='z')num++;//返回数字字符个数return num;}作业3:是非题1. 函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组和类。
3. 错7 / 242. 如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。
5. 对填空题#include<iostream.h>________A___________;int f2(int* a, int n){______ B___________;for(i=1;i<n;i++)if(max<a[i]) max=a[i];return max;}void main(){int b[MM]={3,12,6,20,9,7,34,50,25,66};_______C__________; //求出b[4]至b[8] 之间的最大值并赋给x1_______D___________; //求出b[0]至b[5] 之间的最大值并赋给x2cout<<x1<<' '<<x2<<endl;}答案:A const int MM=10;B int i,max=a[0];C int x1=f2(b+4, 5);D int x2=f2(b, 6);阅读理解题二、valarray是C++的标准模板库中的一个类模板,类模板的每个实例类实现了某个具体的数据类型的数组,如valarray<int>是一个整型的数组类。
该类的使用和一般的数组非常类似,可以通过’[ ]’运算符来访问数组中的每个元素。
C++的标准模板库中还有一个模板函数abs(),其函数原型为:template<class T>valarray<T> abs(const valarray<T> & x);该函数的作用是将作为参数的数组x的每个元素的值取绝对值,并返回得到的新的数组。
如原来的数组为:4 -1 -3 0 -34将这个数组作为参数传递给函数abs后,函数返回的数组就变成:4 1 3 0 34要求:阅读下列程序,回答后面的问题。
/********************************************************************/#include <iostream.h>#include <valarray.h> //该头文件中定义了模板类valarray和模板函数abs() #define ARRAY_SIZE 10typedef valarray<int> INTVALARRAY;void main(){INTVALARRAY val_array(ARRAY_SIZE);//定义一长度为ARRAY_SIZE的数组对象9 / 24//赋初始值for (int i = 0; i < ARRAY_SIZE; i++)val_array[i] = -i;cout << "Size of val_array = " << val_array.size() << "\n";cout << "The values of val_array before calling abs():\n";for (i = 0; i < ARRAY_SIZE; i++)cout << val_array[i] << " ";cout << "\n";INTVALARRAY abs_array = abs(val_array);cout << "The result of val_array after calling abs():\n";for (i = 0; i < ARRAY_SIZE; i++)cout << abs_array[i] << " ";cout << "\n";}/*********************************************************************/ 问题1:写出程序的输出结果问题2:关于程序中的语句:INTVALARRAY val_array(ARRAY_SIZE);下列说法哪些是正确的,哪些是错误的?在下表相应的位置写上“对”或“错”(A)该语句定义了一个对象val_array,这个对象是类valarray<int>的实例(B)该语句说明了一个函数原型,函数的名字为val_array,参数为ARRAY_SIZE,函数的返回值类型为INTVALARRAY(C)板类valarray一定有一个只带一个参数的构造函数(D)模板类valarray一定有一个只带两个参数的构造函数(E)ARRAY_SIZE将作为参数传递给val_array的构造函数,初始化val_array对象问题3:(本小题共12分)下面是模板函数abs()的实现。