面向对象技术与C++(3)答案

合集下载

C++面向对象程序设计课后题答案

C++面向对象程序设计课后题答案

面向对象程序设计课后题答案第二章C++概述【2.6】D【2.7】D【2.8】A【2.9】A【2.10】B【2.11】A【2.12】C【2.13】B【2.14】D【2.15】C【2.16】D【2.17】C【2.18】程序的运行结果:101【2.19】程序的运行结果:10 10【2.20】程序的运行结果:1020【2.22】编写一个C++风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中。

#include <iostream.h>int main(){int *p,i;p[0]=1;p[1]=1;for(i=2;i<20;i++){p[i]=p[i-1]+p[i-2];}for(i=0;i<20;i++){cout<<p[i]<<endl;}return 0;}【2.23】编写一个C++风格的程序,建立一个被称为sroot()的函数,返回其参数的二次方根。

重载sroot()3次,让它返回整数、长整数与双精度数的二次方根。

#include <iostream.h>#include<math.h>double sroot(int m){return sqrt(m);}double sroot(long m){return sqrt(m);}double sroot(double m){return sqrt(m);}int main()cout<<"sroot(145)="<<sroot(145)<<endl;cout<<"sroot(123456)="<<sroot(123456)<<endl;cout<<"sroot(1.44)="<<sroot(1.44)<<endl;return 0;}【2.24】编写一个C++风格的程序,解决百钱问题:将一元人民币兑换成1、2、5分的硬币,有多少种换法?#include <iostream.h>int main(){int k=0;for(int i=0;i<=20;i++){for(int j=0;j<=50;j++){if(100-5*i-2*j>=0){k++;}}}cout<<"将一元人民币兑换成1、2、5分的硬币,共有"<<k<<"种换法"<<endl;return 0;}【2.25】编写一个C++风格的程序,输入两个整数,将它们按由小到大的顺序输出。

2020年智慧树知道网课《面向对象与UML(山东联盟)》课后章节测试满分答案

2020年智慧树知道网课《面向对象与UML(山东联盟)》课后章节测试满分答案

绪论单元测试1【判断题】(20分)UML是面向对象的软件建模语言,可应用到软件开发全过程。

A.对B.错2【判断题】(20分)面向对象是当今主流的软件开发思想。

()A.对B.错3【多选题】(20分)下列哪些工具可以用来进行UML建模?()A.MicrosoftOfficeVisioB.EnterpriseArchitect(EA)C.RationalRoseD.StarUML4【多选题】(20分)我们要从本课程中学到哪些知识?()A.面向对象的基础知识B.UML软件建模C.面向对象的设计原则D.面向对象编程语言5【多选题】(3分)平时分析问题,总要获取哪些方面的信息?()A.事物之间的关系是什么?B.事物的特征和行为是什么?C.问题中涉及哪些事物?D.事物之间如何协作完成任务?第一章测试1【多选题】(20分)以下对软件建模描述正确的是()A.每个模型可以有多种表达方式,从不同角度来刻画系统。

B.描述同一个系统的多个模型只能相对孤立,不能完全孤立,完全孤立的模型是不完整的C.要正确建模,模型必须准确反映软件系统的真实情况。

D.越庞大复杂的系统,建模的重要性越大。

E.模型是对现实世界的简化,但不能掩盖重要的细节。

2【单选题】(20分)模型的实质是什么?()A.对现实的复杂化B.对现实的简化C.便于交流D.可视化3【单选题】(20分)对软件模型而言,下面说法的是()A.是软件的标准文档B.是软件的中间形态C.是人员交流的媒介D.是软件升级和维护的依据4【单选题】(20分)以下关于模型的说法的是()A.一个好的模型包括那些有广泛影响的主要元素,而忽略那些与给定的抽象水平不相关的次要元素。

B.模型必须是可视化的。

C.通过建模可以帮助人们理解复杂的问题。

D.模型是对现实的简化。

5【单选题】(20分)以下哪一个选项不能当做模型?()A.交通地图B.地球仪C.电路设计图D.灭火器第二章测试1【单选题】(20分)在下面所述中,关于UML的说法不正确的是()A.UML不是过程也不是方法,但允许每一种过程和方法使用它。

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

《面向对象程序设计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的值为()。

面向对象程序设计C课后题答案

面向对象程序设计C课后题答案

第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。

这种范型的主要特征是:程序=对象+消息。

面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。

第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。

面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。

这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。

[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。

对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。

类和对象之间的关系是抽象和具体的关系。

类是多个对象进行综合抽象的结果,一个对象是类的一个实例。

在面向对象程序设计中,总是先声明类,再由类生成对象。

类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。

[1_3]现实世界中的对象有哪些特征?请举例说明。

对象是现实世界中的一个实体,其具有以下一些特征:(1)每一个对象必须有一个名字以区别于其他对象。

(2)需要用属性来描述它的某些特性。

(3)有一组操作,每一个操作决定了对象的一种行为。

(4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。

例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:1966.10.1 工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。

C++面向对象技术复习题汇总(含答案)

C++面向对象技术复习题汇总(含答案)

面向对象程序设计C++复习资料与答案第一、二、六、七章习题一、选择题1、系统约定C++源程序文件名的缺省的扩展名为()A、bccB、c++C、cppD、vcc2、面向对象的程序设计将数据与( )放在一起,作为一个相互依存、不可分割的整体来处理.A、对数据的操作B、信息C、数据隐藏D、数据抽象3、当一个函数无返回值时,函数的类型应定义为()A、voidB、任意C、intD、无4、对于C++的函数,正确的叙述是:A、函数的定义不能嵌套,但函数的调用可以嵌套B、函数的定义不能嵌套,但函数的调用不能嵌套C、函数的定义和调用都不能嵌套D、函数的定义和调用都可以嵌套5、下列语句中错误的是( )A、int *p=new int(10);B、int *p=new int[10]C、int *p=new int;D、int *p=new int[40](0);6、假设已经有定义:const char *const name=”chen”;,下面的语句中正确的是:()A、name[3]=’a’;B、name=”lin”;C、name=new char[5]; D、cout<〈name[3];7、假设已经定义:char *const name=”chen”;, 下面的语句中正确的是:( )A、name[3]=’q';B、name=”lin”;C、name=new char[5];D、name=new char(‘q’);8、假设已经定义:const char *name=”chen”;,下面的语句中错误的是:( )A、name[3]=’q’;B、name=”lin”;C、name=new char[5];D、name=new char(‘q’);9、下面的类型声明中正确的是:( )A、int &a[4];B、int &*p;C、int &&qD、int i,*p=&i;10、假设定义了函数模板( )template 〈class T>T max(T x,T y){ return(x>y)?x:y;}并定义了int i;char c;错误的调用语句是:()A、max(i,i)B、max(c,c)C、max((int)c,i);D、max(i,c)11、模板的使用是为了( )A、提高代码的可重用性B、提高代码的运行效率C、加强类的封装性D、实现多态性12、设有二个语句:int x[‘a’];cin>>x;则编译器认为()A、说明语句int x[‘a’]错B、二个语句都错C、语句cin〉〉x 错D、二个语句正确,没有语法错13、设有语句:void f(int a[10],int &x);int y[10],*py=y,n;则对函数f的正确调用语句是( )A、f(py[10],n);B、f(py,n)C、f(*py,&n)D、f(py,&n)14、在C++中实现封装是借助于()A、枚举B、类C、数组D、函数15、对于下面几个函数:(1) void f(int x,float y){……}(2) int f(int a,float b){…… }(3) int f(int i,int j){……}(4) float k(int x){…… }是重载函数。

Java程序设计习题附答案(三)

Java程序设计习题附答案(三)

第三部分面向对象程序设计1、引用数据类型变量具有基本属性为(ABCD)A、变量名B、数据类型C、存储单元D、变量值。

2、面向对象技术的特性是(ACD)A、继承性B、有效性C、多态性D、封装性。

3、下列哪个命题为真?(C)A、所有类都必须定义一个构造函数。

B、构造函数必须有返回值。

C、构造函数可以访问类的非静态成员。

D、构造函数必须初始化类的所有数据成员。

4、关于子类与父类关系的描述正确的是(ACD)A、子类型的数据可以隐式转换为其父类型的数据;B、父类型的数据可以隐式转换为其子类型的数据;C、父类型的数据必须通过显示类型转换为其子类型的数据;D、子类型实例也是父类型的实例对象。

5、下列哪一项说法最好地描述了Java中的对象?(C)A、对象是通过import命令引入到程序中的所有事情B、对象是方法的集合,这些方法在小程序窗口或应用程序窗口中产生图形元素,或者计算和返回值C、对象是一种数据结构,它具有操作数据的方法D、对象是一组具有共同的结构和行为的类6、下面哪个关键字不是用来控制对类成员的访问的?(C)A、publicB、protectedC、defaultD、private7、Java语言正确的常量修饰符应该是(D)A、finalB、static finalC、staticD、public static final;8、接口的所有成员域都具有public 、static和final 属性。

9、接口的所有成员方法都具有public 和abstract 属性。

10、编译下列源程序会得到哪些文件?(C)class A1{}class A2{}public class B{public static void main(String args[]){}}A) 只有B.classB)只有A1.class和A2.class文件C)有A1.class、A2.class和B.class文件D) 编译不成功11、下列哪种说法是正确的?(A)A、私有方法不能被子类覆盖。

JAVA程序设计习题附答案(三)

JAVA程序设计习题附答案(三)

JAVA程序设计习题附答案(三)第三部分面向对象程序设计1、引用数据类型变量具有基本属性为(ABCD)A、变量名B、数据类型C、存储单元D、变量值。

2、面向对象技术的特性是(ACD)A、继承性B、有效性C、多态性D、封装性。

3、下列哪个命题为真?(C)A、所有类都必须定义一个构造函数。

B、构造函数必须有返回值。

C、构造函数可以访问类的非静态成员。

D、构造函数必须初始化类的所有数据成员。

4、关于子类与父类关系的描述正确的是(ACD)A、子类型的数据可以隐式转换为其父类型的数据;B、父类型的数据可以隐式转换为其子类型的数据;C、父类型的数据必须通过显示类型转换为其子类型的数据;D、子类型实例也是父类型的实例对象。

5、下列哪一项说法最好地描述了Java中的对象?(C)A、对象是通过import命令引入到程序中的所有事情B、对象是方法的集合,这些方法在小程序窗口或应用程序窗口中产生图形元素,或者计算和返回值C、对象是一种数据结构,它具有操作数据的方法D、对象是一组具有共同的结构和行为的类6、下面哪个关键字不是用来控制对类成员的访问的?(C)A、publicB、protectedC、defaultD、private7、Java语言正确的常量修饰符应该是(D)A、finalB、static finalC、staticD、public static final;8、接口的所有成员域都具有public、static和final属性。

9、接口的所有成员方法都具有public和abstract属性。

10、编译下列源程序会得到哪些文件?(C)class A1{}class A2{}public class B{public static void main(String args[]){}}A)只有B.classB)只有A1.class和A2.class文件C)有A1.class、A2.class和B.class文件D)编译不成功11、下列哪种说法是正确的?(A)A、私有方法不能被子类覆盖。

面向对象课后题答案

面向对象课后题答案
C. 使用内联函数,可以加快程序执行的速度,但会增加程序代码的大小
D. 使用内联函数,可以减小程序代码大小,但使程序执行的速度减慢
【结果分析】
内联函数主要是解决程序的运行效率问题。在程序编译时,编译系统将程序中出现内联函数调用的地方用函数体进行替换,进而减少了程序运行的时间,但会增加程序代码的大小。它是以空间换取时间,因此内联函数适用于功能不太复杂,但要求被频繁调用的函数。
B. 对象实际是功能相对独立的一段程序
C. 各个对象间的数据可以共享是对象的一大优点
D. 在面向对象的程序中,对象之间只能通过消息相互通信
【结果分析】
对象是计算机内存中的一块区域。在对象中,不但存有数据,而且存有代码,使得每个对象在功能上相互之间保持相对独立。对象之间存在各种联系,但它们之间只能通过消息进行通信。
C. C++对C语言进行了一些改进 D. C++和C语言都是面向对象的
【结果分析】
C语言是面向过程的。C++语言是一种经过改进的更为优化的C语言,是一种混合型语言,既面向过程也面向对象。
(6) 面向对象的程序设计将数据结构与( A )放在一起,作为一个相互依存、不可分割的整体来处理。
A. 算法 B. 信息 C. 数据隐藏 D. 数据抽象
四、 判断题
(1) 在高级程序设计语言中,一般用类来实现对象,类是具有相同属性和行为的一组对象的集合,它是创建对象的模板。( √ )
(2) C++语言只支持面向对象技术的抽象性、封装性、继承性等特性,而不支持多态性。( × )
【结果分析】
C++语言不仅支持面向对象技术的抽象性、封装性、继承性等特性,而且支持多态性。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《面向对象技术与C++》试卷答案(3)第一题填充题(10分,每1个空格1分)1.当使用带参数的流操纵算子时,程序中必须包含(iomanip)头文件。

2.复合对象中的成员对象是在建立复合对象之(前)建立的。

3.运算符new分配的动态内存要用运算符(delete) 回收。

如果在一个类的构造函数中使用new分配动态内存,则回收操作应在类的(析构)函数中完成。

4.struct成员的默认访问模式是(public),而class成员的默认访问模式是 (private)。

5.关键字(const) 指定了不可修改的对象或变量。

关键字(const) 指定一个类的成员不会修改类中的数据成员。

6.重载赋值运算符operator= 时,应将其声明为类的(成员)函数。

7.C++中的输入/输出是以字节(流) 的形式实现的。

第二题指出下列程序段中的错误,说明错误原因(10分,每1小题5分)1.class Rational { //表示有理数的类声明public:void Rational (int,int); //第1个参数为分子,第2个参数为分母// 其他成员函数的原型说明private:void Rational ( ); //默认的数为0,其分子表示为0,分母表示为1int a = 0 , b = 1;}1) void Rational(); 构造函数的访问属性应为public2) 两个构造函数都不能指定返回类型3)int a = 0 , b = 1; 不能直接赋初值4)最后少了一个分号(;)2.class myClass {public:myClass(char a, int b) { v = a ; si = b ; }void f1(int i = 10) const { v = v + i ; }static int f2() { return v + si; }private:char v;static int si;} ;1) static函数f2()不能访问非static成员v2) 构造函数中不能对static数据赋值3) const成员函数f1不能修改数据成员v4) static数据si需要在类声明的外面进行初始化第三题选择题 (10分,每1个空格1分)1.在VC++中,目标文件的扩展名为(B)[A] .cpp[B] .obj[C] .h[D] .exe2.通常情况下,模板函数的类型参数个数不能为(A)个。

[A] 0[B] 1[C] 2[D] 2个以上3.既要禁止修改指针p,又要禁止修改p所指的数据,则p的正确定义是(D)。

[A] const char* p=”xxxx”;[B] char* const p=”xxxx”;[C] char const *p=”xxxx”;[D] const char * const p=”xxxx”;4.若函数f是类C中的虚函数,类D是类C的公有派生类,则函数f在类D中是(A)。

[A] 总是虚函数[B] 只有重新声明时才是虚函数[C] 只有使用virtual关键字重新声明时才是虚函数[D] 不可能是虚函数5. 每个类(A)析构函数。

[A] 只能有一个[B] 只可有私有的[C] 可以有多个[D] 只可有缺省的6. 重载函数调用运算符operator[ ]时,应将其声明为类的(C)函数。

[A] 非成员[B] 虚[C] 成员[D] 多态7. static成员函数没有(B)。

[A] 返回值[B] this指针[C] 指针参数[D] 返回类型8. 设T是类名,则声明T a(); 表示a是(A)。

[A] 函数名[B] 对象名[C] 函数指针[D] 引用8. 设函数f是类A的虚函数,类B是类A的public派生类。

定义B d; A* p=&d; A& r=d; 则采用动态联编的是(B)和(E)。

[A] d.f();[B] p->f();[C] p.f();[D] r->f();[E] r.f();第四题简答题(10分)为什么编译器认为把基类指针转换为派生类指针是危险的?派生类指针指向基类对象。

这种方法是不安全的,因而需要避免。

因为通过派生类指针使用派生类自己添加的成员是可以的,但它所指的基类对象中并不存在这种成员。

第五题写出以下程序运行时的输出结果(10分)#include <iostream>using namespace std;class A {public:A() { cout << "initialize A\n"; }virtual void write() { cout << "class A \n"; }};class B: public A {public:B() { cout << "initialize B\n"; }void write() { cout << "class B \n"; }};class C: public B {public:C() { cout << "initialize C\n"; }void write() { cout << "class C\n"; }};class D: public C {public:D() { cout << "initialize D\n"; }};int main( ){ A a; B b; C c; D d;A* p[ ] = {&a,&b,&c,&d}; A arr[ ] = {a,b,c,d};for (int i=0;i<4;i++) { p[i]->write(); arr[i]. write(); }return 0;}initialize Ainitialize Ainitialize Binitialize Ainitialize Binitialize Cinitialize Ainitialize Binitialize Cinitialize Dclass Aclass Aclass Bclass Aclass Cclass Aclass Cclass A第六题写出以下程序运行时的输出结果(10分)#include <iostream>using namespace std;class A{ public: A( ) { cout << " AAA "; } ~A( ) { cout << " ~AAA "; } }; class B : public A{ public: B ( ) { cout << " BBB "; } ~B( ) { cout << " ~BBB "; } private: A m1,m2;};class C : public A{public: C( ) { cout << " CCC "; } ~C( ) { cout << "~CCC "; } private: B m1,m2;};A obj;B obj2;C obj3;int main( ){ C objc; B* p=new B; cout << endl; delete p;static A sa;return 0;}AAA AAA AAA AAA BBB AAA AAA AAA AAA BBB AAA AAA AAA BBB CCC AAAAAA AAA AAA BBB AAA AAA AAA BBB CCC AAA AAA AAA BBB~BBB ~AAA ~AAA ~AAA AAA ~CCC ~BBB ~AAA ~AAA ~AAA ~BBB ~AAA ~AAA ~AAA ~AAA ~AAA ~CCC ~BBB ~AAA ~AAA ~AAA ~BBB ~AAA ~AAA ~AAA ~AAA ~BBB~AAA ~AAA ~AAA ~AAA第七题编程题(10分)编写一个名称为sum的函数模板计算其三个同类型参数值的和。

template <class T> T sum(T a, T b, T c) { return a+b+c; }第八题编程题(30分)建立一个能安全使用的动态数组类DynamicArray。

所谓安全使用指数组下标越界时自动终止程序执行;所谓动态指数组的大小可在程序运行过程中确定,而不必要在编写程序时就确定下来。

给类提供能完成下列功能的函数:构造函数和拷贝构造函数;数组整体赋值和输出;下标运算符。

//dynamicarray.h#ifndef DYNAMICARRAY_H#define DYNAMICARRAY_H#include <iostream>using namespace std;class DynamicArray {friend ostream& operator<<(ostream&, const DynamicArray&);public:DynamicArray( int arraySize = 10 );DynamicArray( const DynamicArray& );~DynamicArray();const DynamicArray& operator= ( const DynamicArray& );int& operator[] ( int );private:int* ptr; int size;};#endif//dynamicarray.cpp#include <cstdlib>#include <cassert>using namespace std;#include "dynamicarray.h"DynamicArray::DynamicArray(int arraySize){ size = arraySize; ptr = new int[size]; assert( ptr != 0 );for (int i = 0 ; i < size ; i++ ) ptr[i] = 0;}DynamicArray::DynamicArray( const DynamicArray& init ){ size = init.size; ptr = new int[size]; assert( ptr != 0 );for (int i = 0 ; i < size ; i++ ) ptr[i] = init.ptr[i];}DynamicArray::~DynamicArray() { delete[] ptr; }int& DynamicArray::operator[]( int subscript){ assert ( 0 <= subscript && subscript < size );return ptr [ subscript ];}const DynamicArray& DynamicArray::operator= ( const DynamicArray& right ) { if ( this != &right ){ delete[] ptr; size = right.size; ptr = new int[size]; assert ( ptr != 0 );for ( int i = 0 ; i < size ; i++ ) ptr[i] = right.ptr[i];}return *this;}ostream& operator<<(ostream& output, const DynamicArray& a ){ for ( int i = 0 ; i < a.size ; i++ ) output << a.ptr[i] << ' ';return output;}。

相关文档
最新文档