面向对象程序设计模拟试题(1)
一、单选题:12分,每题02分
1、设x是一个bool型的逻辑量,y的值为10,则表达式 x && y的值为()。
A:1 B:0
C:与x值相同D:与x值相反
2、在下面循环语句中循环体执行的次数为()。
for(int i=0; i if(i>n/2) break; A:n/2 B:n/2+1 C:n/2-1 D:n-1 3、 switch语句能够改写为()语句。 A:for B:if C:do D:while 4、在下面的一维数组定义中,哪一个有语法错误。() A:int a[]={1,2,3}; B:int a[10]=; C:int a[]; D:int a[5]; 5、假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1] 的值为()。A:0 B:4 C:8 D:6 6、以下说法中正确的是()。 A:C++程序总是从第一个定义的函数开始执行 B:C++程序总是从main函数开始执行 C:C++函数必须有返回值,否则不能使用函数 D:C++程序中有调用关系的所有函数必须放在同一个程序文件中 7、以下叙述中不正确的是()。 A:在一个函数中,可以有多条return语句 B:函数的定义不能嵌套,但函数的调用可以嵌套 C:函数必须有返回值 D:不同的函数中可以使用相同名字的变量 8、函数原型语句正确的是()。 A:int Function(void a); B:void Function (int); C:int Function(a); D:void int(double a); 9、设有如下函数定义 int f(char *s) { char *p=s; while(*p!=’’) p++; return(p-s); } 在主函数中用cout< A:3 B:4 C:5 D:6 10、以下错误的描述是()。 A:被调用函数中可以不用return语句 B:被调用函数中可以用多个return语句 C:被调用函数中,如果有返回值,就一定要有return语句 D:被调用函数中,一个return语句可返回多个值给调用函数 11、定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为()。 A:int *p=new int[30]; B:*p=new int[30]; C:int *p=new [30]; D:int *p=new int(30); 12、关于封装,下列说法中不正确的是()。 A:通过封装,对象的全部属性和操作结合在一起,形成一个整体 B:通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见) C:通过封装,每个对象都成为相对独立的实体 D:通过封装,对象的属性都是不可见的 13、在类作用域中能够通过直接使用该类的()成员名进行访问。 A:私有B:公用 C:保护D:任何 14、在关键字public后面定义的成员为类的()成员。 A:私有B:公用 C:保护D:任何 15、在多文件结构的程序中,通常把类中所有非内联函数的定义单独存放于()中。 A:主文件B:实现文件 C:库文件D:头文件 16、假定AB为一个类,则执行“AB *s=new AB(a,5);”语句时得到的一个动态对象为 _______。A:s B:s->a C:s.a D:*s 17、假定AB为一个类,则( )为该类的拷贝构造函数的原型说明。 A:AB(AB x); B:AB(AB& x); C:void AB(AB& x); D:AB(int x); 18、假定AB为一个类,则执行“AB a(2), b[3], *p[4];”语句时共调用该类构造函数的次数为( )。 A:3 B:4 C:5 D:9 19、类的构造函数可以带有( )个参数。 A:0 B:1 C:2 D:任意 20、引入友元的主要目的是为了()。 A:增强数据安全性B:提高程序的可靠性 C:提高程序的效率和灵活性D:保证类的封装性 二、编程综合题:32分,每题08分 21、 #include #include void main() { char a[5][10]={"student","worker","soldier","cadre","peasant"}; char s1[10], s2[10]; strcpy(s1,a[0]); strcpy(s2,a[0]); for(int i=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< } 参考答案: worker cadre //6分,每个数据3分 三、简答题:32分,每题08分 22、求出从键盘上输入的10个整数中的最大值,要求输入变量用x表示,存储最大值的变量用max表示。 参考答案: #include void main() { int x,max; cin>>x; max=x; for(int i=0;i<9;i++) { cin>>x; if(x>max) max=x; } cout<<"max:"< } 23、根据下面类中MaxMin 函数成员的原型和注释写出它的类外定义。 class AA { int* a; int n; int MS; public: void InitAA(int aa[], int nn, int ms) { if(nn>ms) {cout<<"Error!"< MS=ms; n=nn; a=new int[MS]; for(int i=0; i } int MaxMin(int& x, int& y); //从数组a的前n个元素中求出 //最大值和最小值,并分别由引用参数x和y带回, //同时若n大于0则返回1,否则返回0。 }; 参考答案: int AA::MaxMin(int& x, int& y) { int mx,my; mx=my=a[0]; for(int i=1; i if(a[i]>mx) mx=a[i]; if(a[i] } x=mx; y=my; if(n>0) return 1; else return 0; } 24、根据下面类中Uion函数的原型和注释写出它的类外定义。 class Strings { char *s; //指向动态分配的字符串数组空间 int n; //记录字符串长度 public: Strings(char*str); //构造函数,利用str字符串长度初始化n, //利用str字符串初始化s所指的字符串空间 Strings(Strings& str); //拷贝构造函数 Strings& Give(Strings& str); //实现str赋值给*this的功能并返回*this Strings Uion(Strings& str); //实现*this和str中的字符串连接的功能, //把连接结果存入临时对象并返回 int Lenth() {return n;} //返回字符串长度 void Print() {cout< }; 参考答案: Strings Strings::Uion(Strings& str) { Strings r(""); r.n=n+str.n; r.s=new char[r.n+1]; strcpy(r.s,s); strcat(r.s,str.s); return r; } 25、下列程序段中,A_class的成员函数Variance()可求出两数的平方差,请改写该程序段,把Variance()函数从A_class类中分离出来,用友元函数来实现该函数的功能。 class A_class { private: int x,y,t; public: A_class(int i,int j):x(i),y(j) { if(y>x){t=x;x=y;y=t;} } int Variance(){return x*x-y*y;} //其它函数从略 }; void main() { A_class A_obj(3,5); cout<<"Result:"< } 参考答案: class A_class { private: int x,y,t; public: A_class(int i,int j):x(i),y(j){ if(y>x){t=x;x=y;y=t;}; } //其它函数从略 friend int Variance (A_class& ac); //参数名任意 }; int Variance (A_class& ac) { return ac.x*ac.x-ac.y*ac.y; } void main() { A_class A_obj(3,5); cout<<"Result:"< } 四、填空题(主观):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、已知int cubin(int n){return n*n*n;}和double cubin(double n){return n*n*n;}是一个函数模板的两个实例,假定类型参数用T表示,则该函数模板的定义是__________________________________。 参考答案: template T cubin(T n){return n*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函数将字符串逆序。 #include #include ___(1)___; void main( ) { char s[80]; cin>>s; ___(2)___; cout<<”逆序后的字符串:”< } void fun(char ss[]) { int n=strlen(ss); for(int i=0; ___(3)____; i++) { char c=ss[i]; ss[i]=ss[n?1?i]; ss[n?1?i]=c; } } 参考答案: void fun(char ss[]) fun(s) i< 2> 44、假定有定义为“struct NODE{int data; NODE* next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序相同。void f5(NODE*& L, int table[], int n) { if(n<=0) {L=NULL; return;} L=new NODE; //生成附加的头结点 int i=0; NODE* p=L; while(___(1)___) { p=p->next=___(2)___; p->data=___(3)___; i++; } p->next=NULL; //把最后一个结点的指针域置空 p=L; L=L->next; //使L指向链表的第一个带值的结点 delete p; } 参考答案: i new NODE table[i] 45、 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法是依次显示输出以L 为表头指针的链表中各结点的值。 void f7(NODE* L) { for(___(1)___; p!=NULL; ___(2)___) cout<<___(3)___ <<' '; cout< } 参考答案: NODE* p=L p=p->next p->data 第1章习题答案 名词解释 抽象:抽象(Abstract)就是忽略事物中与当前目标无关的非本质特征,而强调与当前目标有关的本质特征,从而找出事物的共性,并把具有共性的事物划为一类。面向对象方法中的抽象,是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。 封装:面向对象方法中的封装就是把将抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。 消息:消息是面向对象程序设计用来描述对象之间通信的机制。一个消息就是一个对象要求另一个对象实施某种操作的一个请求。 填空题 (1) 面向过程的结构化程序设计方法面向对象程序设计方法 (2) 顺序选择循环 (3) 程序=数据结构+算法程序=对象+消息 (4) 过程类 (5) 抽象性封装性继承性多态性 选择题 (1) B (2) C (3) D (4) C (5) D (6) A (7) A (8) B C (9) A D 判断题 (1) t (2) f (3) f (4)f (5) t (6) f (7) f (8) t 简答题 (1) 结构化程序设计方法着眼于系统要实现的功能,从系统的输入和输出出发,分析系统要做哪些事情,进而考虑如何做这些事情,自顶向下地对系统的功能进行分解,来建立系统的功能结构和相应的程序模块结构,有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。 随着程序规模与复杂性的增长,这种面向过程的结构化程序设计方法存在明显的不足之处。首先是数据安全性问题,由于数据被每个模块所共用,因此是不安全的,一旦出错,很难查明原因。其次是可维护性及可重用性差,它把数据结构和算法分离为相互独立的实体,一旦数据结构需要改变时,常常要涉及整个程序,修改工作量极大并容易产生新的错误。每一种相对于老问题的新方法都要带来额外的开销。另外,图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。 (2) 面向对象的程序设计方法中,将程序设计为一组相互协作的对象(Object)而不是一组相互协作的函数。在程序中,属性用数据表示,用来描述对象静态特征;行为用程序代码实现,用来描述对象动态特征。可见,在面向对象的程序设计方法中,对象是数据结构和算法的封装体。对象之间存在各种联系,它们之间通过消息进行通信。程序可表示为: 程序=对象+消息 在面向对象程序设计中,它着重于类的设计。类正是面向对象语言的基本程序模块,通过类的设计,来完成实体的建模任务。类通过一个简单的外部接口,与外界发生关系。一个类中的操作不会处理到另一个类中的数据,这样程序模块的独立性、数据的安全性就有了良好的保障。程序的执行取决于事件发生的顺序,由顺序产生的消息来驱动程序的执行。不必预先确定消息产生的顺序,更符合客观世界的实际。并且面向对象程序设计方法提供了软件重用、解决大问题和复杂问题的有效途径,具有抽象性、封装性、继承性和多态性等特点。 软件工程期末试卷A 试题一、结构化分析与设计(共20分,每小题10分) 需求陈述: 高考录取统分子系统有如下功能: (1)计算标准分:根据考生原始分计算,得到标准分,存入考生分数文件; (2)计算录取线分:根据标准分、招生计划文件中的招生人数,计算录取线,存入录取线文件。 要求:用结构化方法学对高考录取统分子系统进行分析与设计,分别完成以下工作: (1)给出高考录取统分子系统的功能模型(用数据流图表示)。(10分) (2)给出高考录取统分子系统的软件体系结构(用H图或结构图表示)。(10分) 答案网上搜的答案 let计创 结构图即软件的模块 软件结构答案 试题二、F面是程序流程图,试分别用表示。(共20分) 答案: 我做的: do { if( ! P) { g ; } while(q); 我自己做的,可以不太对 始 开 q 为真 执行 do nothing Else if(g 为假) return } Else if(p 为假) { Return }while(g 为真) 试题三、(共20分,每题10分) float calculateTotal( int N) { float count = 0.0; int i=1; while ( i<=N ) Do lf(p 为真) lf(g 为真) 阅读下面的程序段,回答后面的问题: //计算满足条件的N 个数的和 { if( i % 4 == 0) cou nt += i; i++; } retur n count; } (1)画出上述程序的有向流图,并计算该函数的环形复杂度。 (每问5分,共10分) (2)请用基本路径的 测试技术完成该函数的 测试。要求给出 基本路径和测试用例。(每问5 分,共 10分) 答:这道题课本上没有知识点,从网上搜出来的,知识点见“测试基础” 对应的测试用例 N=1 对应的测试用例N=4 试用例N=0 对应的测试用例 N=1 (?? ?不太确定) 对应的测试用例 N=4 对应的测试用例 N=4 PPT 的P30页 白盒测试代码分支图的环形复杂度计算: 环形复杂度以图论为基础, 为我们提供了非常有用的软件度量。 算环形复杂度: (1)控制流图中环形区域的数量对应于环形复杂度。 可用如下三种方法之一来计 (2)给定控制流图 N 是控制 G 的环形复杂度 一V(G),定义为V(G) = E-N+2其中,E 是控制流图中边的数量, 流图中 的节点数量。 (3)给定控制流图 其中,P 是控制流图G 中判定节点的数量。 以上输出路径的节点。 环形复杂度V(G)=区域数=边-结点+2= 4 G 的环形复杂度 一V(G),也可定义为 V(G) = P+1 何为判定节点:即存在一个输入,两个或两个 判定结点+1 环形复杂度3 基本路径3条 路径 1 : 1-2-3-4-6-3-7 路径 2 : 1-2-3-4-5-6-3-7 路径3 : 1-2-3-7 对 路径 1 : 1-2-3-4-6-7 路径 2 : 1-2-3-4-5-6-7 路径 3 : 1-2-3-4-6-3-7 《社会保障学》模拟试题1及参考答案 一、不定项选择题(每小题2分,共20分) 1、工伤保险待遇主要包括。 A.医疗给付B.工伤津贴 C.残疾年金或补助金D.遗属津贴 2、率先建立现代失业保险制度的国家是,该国于1905年颁布了失业保险法。 A.日本B.法国 C.德国D.英国 3、下列关于医疗保险的表述中,正确的是。 A.医疗保险属于短期的、经常性保险 B.医疗保险是通过医疗服务和费用实偿来实现的 C.医疗保险是自愿执行的社会保障制度 D.医疗保险由政府、单位、个人三方面合理分担费用 4、社会保障基金可以由基金管理机构通过等方式运营。 A.购买股票B.开办企业 C.兴建公共设施D.融资借贷 5、社会救助的特点主要表现为。 A.最低保障性B.按需分配 C.权利义务单向性D.救助对象全民性 6、下列各项中,有“福利国家橱窗”之称的是。 A.英国B.瑞典 C.芬兰D.丹麦 7、下列各项中,有关美国“多元化医疗保险模式”描述正确的是。 A.医疗照顾制度的对象主要是65岁以上的老人 B.社会医疗保险计划在美国的医疗保险体系中占主要地位 C.HMO开办合同医院并直接为参保人员提供医疗服务 D.蓝十字和蓝盾是美国最大的两家营利性民间医疗保险公司 8、下列有关各国养老保险金覆盖范围的表述中,正确的是。 A.德国的养老保险制度覆盖范围是本国所有居民。 B.英国的养老保险制度覆盖范围是薪金劳动者和独立劳动者。 C.美国的老年、残疾、遗属保险的覆盖范围是从事有收益工作的人,包括独立劳动者。 D.我国省、自治区、直辖市地方政府可根据实际情况将城镇个体工商户纳入覆盖范围。 9、依据救助种类,社会救助包括。 1 什么是面向对象程序设计,它与传统的结构式程序有什么不同。 面向对象程序设计是一种适用于设计、开发各类软件的范型。它是将软件看成是一个由对象组成的社会:这些对象具有足够的智能,能理解从其他对象接受的信息,并以适当的行为作出响应;允许低层对象从高层对象继承属性和行为。通过这样的设计思想和方法,将所模拟的现实世界中的事物直接映射到软件系统的解空间。 与传统的结构式程序设计相比,面向对象程序设计吸取了结构式程序设计的一切优点(自顶向下、逐步求精的设计原则)。而二者之间的最大差别表现在: ·面向对象程序采用数据抽象和信息隐藏技术使组成类的数据和操作是不可分割的,避免了结构式程序由于数据和过程分离引起的弊病。 · 面向对象程序是由类定义、对象(类实例)和对象之间的动态联系组成的。而结构式程序是由结构化的数据、过程的定义以及调用过程处理相应的数据组成的 2 用面向对象方法建立模型的思维过程是怎样的。 用面向对象方法建立拟建系统的模型的过程就是从被模拟现实世界的感性具体中抽象要解决的问题概念的过程。这种抽象过程分为知性思维和具体思维两个阶段,其中:·知性思维是从感性材料中分解对象,抽象出一般规定,形成了对对象的普遍认识。·具体思维是从知性思维得到出的一般规定中揭示的事物的深刻本质和规律,其目的是把握具体对象的多样性的统一和不同规定的综合。 3 解释以下概念: ①对象:在现实世界中,对象就是可以感觉到的实体。每个对象具有一个特定的名字以 区别于其他对象;具有一组状态用来描述它的某些特性;具有一组操作,每一个操作决定对象的一种功能或行为(为自身服务的操作和为其他对象提供服务的操作)。而在面向对象系统中,对象是可以标识的存储区域。每个对象的状态被保存在此区域中,而实现一类对象行为的操作(代码)被保存在另外相关的存储器区域中。 ②消息:消息是要求某个对象执行其某种功能操作(方法)的规格说明。因此,消息是 由消息的接收者、消息要求提供的操作(消息名)和必要的参数组成的。 ③类:在现实世界中,类是对一组具有共同特性(属性和行为)的客观对象的抽象。而 在面向对象系统中,类是由程序员自定义的具有特定结构和功能的类型,是一种代码共享的手段。 ④实例:任何一个对象都是该对象所属类的一个具体实例。 ⑤公有消息:是由对象外向对象发送的消息,用于激活该对象的某种方法。 ⑥私有消息:是由对象向自身发送的消息,用于内部操作;该类消息不能从对象外向该 对象发送。 ⑦消息序列:在面向对象系统中一个事件的发生总会有多个对象的多次相互作用才能完 成,使得这些对象能够相互作用的消息组成的序列被称为消息序列。 4 类与实例的关系如何? 类是创建对象的模板,而对象是实现类的实例。属于同一类的不同实例必须具有: ·相同的操作集合; ·相同的静态属性集合; ·不同的对象名和属性动态值。面向对象程序设计教程 (马石安版)
软件工程模拟题1带答案
《社会保障学》模拟试题1及参考答案
什么是面向对象程序设计
《面向对象程序设计》答案