软件设计师第1部分C++类试题
2012-12-26来源/作者:卫凯点击次数:348
第1部分C++类试题
●试题1
阅读下列程序说明和c++程序,把应填人其中(n)处的字句,写在答卷的对应栏内。【说明】
下面的程序实现了类String的构造函数、析构函数和赋值函数。
已知类String的原型为:
答案:(1)delete[]m_data或者delete m_data
解析:由于m_data是内部数据类型,也可以写成delete m_data。
答案:(2)str==NULL
解析:当传入参数为空时,则生成一个元素的字符数组,即‘\0’。
答案:(3)this==&other
解析:检查自赋值。若this和&other相同。则直接返回$this。
答案:(4)strcpy(m_data,other.m_data)
解析:在分配新的内存资源后。将other内容复制到m_data。
答案:(5)*this
解析:返回本对象的引用。
●试题2
阅读下列程序说明和c++程序,把应填入其中(n)处的字句,写在答卷的对应栏内。【说明】
阅读下面几段C++程序回答相应问题。【问题1】比较下面两段程序的优缺点.
【问题2】下面的程序各自独立,请问执行下面的四个TestMemory函数各有什么样的结果?
【问题1】解答:
程序1优点:程序简洁;缺点:多执行了N-1次逻辑判断,并且程序无法循环“流水”作业,使 得编译器无法对循环进行优化处理,降低了效率。
程序2优点:循环的效率高;缺点:程序不简洁。
【问题2】解答:
程序1程序崩溃。因为GetMemory并不能传递动态内存,TestMemory函数中的str一直都是NULL。strcpy(str,”hello world”);将使程序崩溃。
程序2可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原来的内容已经被清除,新内容不可知。
程序3能够输出hell0,但是会发生内存泄漏。
程序4篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str!=NULL)语句不起作用。
●试题3
阅读下列说明和c++程序,将应填入(n)处的字句写在答题纸的对应栏内。
【程序6说明】
程序6中定义了数组的类模板,该模板使得对于任意类型的二维数组,可以在访问数组元素的同时,对行下标和列下标进行越界判断,并给出相应的提示信息(c++语言本身不提供对下标越界的判断)。
答案:(1)class Array2D
解析:此处应当是类的友元类或者友元函数。程序中只有一个模板类。即Array2D。
答案:(2)new T[Rows,Cols]
解析:使用new对tempBody进行初始化。
答案:(3)throw‘e’
解析:数组出现错误。抛出异常。throw后面可以填写任意宇符常数
答案:(4)return tBody
解析:完成初始化后,返回tBody。
答案:(5)tBody(Rows,Cols) 解析:用数组的行和列对成员变量tBody赋初始值。
●试题4
阅读以下说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
应用系统在启动之前,首先要将配置文件加载到内存中,这些内存配置信息应该是唯一的。通常情况下,用户可以对应用系统进行配置,并将配置信息保存在配置文件中。下面的代码应用了单身模式(Singleton)以保证Configure类只能有一个实例。这样,Configure类的使用者无法定义该类的多个实例,否则会产生编译错误。
答案:(1)Configure()
解析:由于是单身模式,其构造函数必须是私有的。于是private后面的函数是构造函数。答案:(2)Configure术Configure::jnstance
解析:instance是静态变量,此处进行必要的初始化。
答案:(3)一instance
解析:构造类的一个实例赋给一instance。
答案:(4)一instance
解析:返回一instance,即实例化的Configure对象。
答案:(5)Configure::Instance()
解析:主函数中应用该类时,只能通过Instance来实例化一个Configure对象。
阅读以下说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
某网络游戏存在战士(Fighter)、野蛮人(Savage)、白法师(WhiteWitch)三种角色,它们具有 Role接口,角色的类图关系如图l.1所示。现要将黑法师(BlackWitch)角色加入此网络游戏以实现功能扩充。已知某第三方库已经提供了法师(Witch)类,且完全满足系统新增的黑法师角色所需的功能,但法师(witch)不是由Role派生而来,它提供的接口不能被系统直接使用。代码5—1既使用了法师(Witch),又遵循了Role规定的接口,既避免了从头开发一个新的黑法师类,又可以不修改游戏中已经定义的接口。代码5—2根据用户指定的参数生成特定的角色实例,并对之进行显示操作。
游戏中定义的接口与黑法师(BlackWitch)提供的显示接口及其功能见表1.1。
答案:(1)Role
解析:题目中要求BlackWitch具有Role接口,所以应该继承Role。
答案:(2)Witch
解析:因为需要重用Witch类,所以生成Witch类型的私有变量。
答案:(3)displayIt()
解析:因为需要重用Witch类,因此BlackWitch实现Role时要调用Witch类的方法。
答案:(4)Role*
解析:主函数中s是Role*类型的,所以9etRolelnstance(int type)返回值类型为Role*。答案:(5)getRolelnstance(type)
解析:生成特定类型的角色实例,类型由type确定。
答案:(6)delete S
解析:程序退出前需要释放指针s所占用的空间。
●试题6
阅读以下说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
在一图像处理系统中,开发者定义了一个图像类ImageCon,其中定义了图像具有的属性和处理图像的相应方法。当图像件的内容或状态发生变化时,关注此ImageCon类对象的相应的Image— View对象都要更新其自身的状态。一个ImageCon对象能够关联一组ImageView对象。当Image— Con对象的内容或状态发生变化时,所有与之相关联的ImageView对象都将得到通知,这种应用被称为观察者模式。以下代码写在一个C++源文件中,能够正确编译通过。
【C++代码】
答案:(1)class ImageCon解析:对类ImageCon的声明。
答案:(2)Virtual
解析:在类中声明函数的时候虚函数可以将其声明为空。而将其实现放到派生类中。
答案:(3)ImageCon
解析:由构造函数的声明可知im9的类型是ImageCon *。
答案:(4)update(this)
解析:ImageView对象调用update(this)更新自身状态。
答案:(5)attach(this)
解析:通过调用方法attach(this)将此ImageView对象与img对象相关联。
●试题7
阅读以下说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
类AWD表示有向网(带权有向图)。Floyd算法的基本思想是递推地产生一个矩阵序列M0, M1,M2,…,Mn,其中M0是已知的带权邻接矩阵wa,Mk(i,j)(0≤i,j 【C++代码】
答案:(1)wa[i][j]
解析:初始时,最短路径长度sp[i][j]初值为权值wa[i][j]。
答案:(2)sp[i][k]+sp[k][J]或者t1+t2
解析:身找到点i到点j的更短路径时,需要更新sp[i][j]的值。
答案:(3)k
解析:更新sp[i][j]的值的时候,k成为最短路径上的点。
答案:(4)path[i][j]
解析:此处递归调用输出最短路径中经过点path[i][j]的前半段,应填入path[i][j]。
答案:(5)path[i][j],j
解析:此处递归调用输出最短路径中经过点path[i][j]的后半段,应填入path[I][]J。
●试题8
阅读下列程序说明和c++代码,将应填入(n)处的字句写在答卷的对应栏内。
【程序6说明】
本程序实现两个多项式的乘积运算。多项式的每一项由类Expression描述,而多项式由类 Polynomial描述。类Polynomial的成员函数有:
Create():创建按指数降序链接的多项式链表,以表示多项式。
Reverse():将多项式链表的表元链接顺序颠倒。
Multiply(Polynomial Ll,Polynomial L2):计算多项式L1多项式L2的乘积多项式。
答案:(1)quot=一quot;exp=一exp;next=NULL解析:创建系数为_quot,指数为_exp的项。
答案:(2)P!=NULL&&exp 解析:待插入项成为新的链尾。
答案:(3)new Expression(quot,exp)
解析:根据读入的指数或者系数创建要插入的项。
答案:(4)L1.poly→exp+L2.poly→exp
解析:两项的指数之和就是乘积多项式的最高次幂。
答案:(5)pLl→exp+pL2→exp 解析:跳过Ll和L2幂数之和超过k的项。
答案:(6)quot+=pLl→quot*pL2→quot
解析:当两多项式的当前次幂的和为k时,累计它们系数的乘积,并分别准备考虑下一项。
●试题1
阅读下列程序说明和c++程序,把应填人其中(n)处的字句,写在答卷的对应栏内。【说明】
下面的程序实现了类String的构造函数、析构函数和赋值函数。
已知类String的原型为:
答案:(1)delete[]m_data或者delete m_data
解析:由于m_data是内部数据类型,也可以写成delete m_data。
答案:(2)str==NULL
解析:当传入参数为空时,则生成一个元素的字符数组,即‘\0’。
答案:(3)this==&other
解析:检查自赋值。若this和&other相同。则直接返回$this。
答案:(4)strcpy(m_data,other.m_data)
解析:在分配新的内存资源后。将other内容复制到m_data。
答案:(5)*this
解析:返回本对象的引用。
●试题2
阅读下列程序说明和c++程序,把应填入其中(n)处的字句,写在答卷的对应栏内。【说明】
阅读下面几段C++程序回答相应问题。【问题1】比较下面两段程序的优缺点.
【问题2】下面的程序各自独立,请问执行下面的四个TestMemory函数各有什么样的结果?
【问题1】解答:
程序1优点:程序简洁;缺点:多执行了N-1次逻辑判断,并且程序无法循环“流水”作业,使 得编译器无法对循环进行优化处理,降低了效率。
程序2优点:循环的效率高;缺点:程序不简洁。
【问题2】解答:
程序1程序崩溃。因为GetMemory并不能传递动态内存,TestMemory函数中的str一直都是NULL。strcpy(str,”hello world”);将使程序崩溃。
程序2可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原来的内容已经被清除,新内容不可知。
程序3能够输出hell0,但是会发生内存泄漏。
程序4篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str!=NULL)语句不起作用。
●试题3
阅读下列说明和c++程序,将应填入(n)处的字句写在答题纸的对应栏内。
【程序6说明】
程序6中定义了数组的类模板,该模板使得对于任意类型的二维数组,可以在访问数组元素的同时,对行下标和列下标进行越界判断,并给出相应的提示信息(c++语言本身不提供对下标越界的判断)。
答案:(1)class Array2D
解析:此处应当是类的友元类或者友元函数。程序中只有一个模板类。即Array2D
答案:(2)new T[Rows,Cols]
解析:使用new对tempBody进行初始化。
答案:(3)throw‘e’
解析:数组出现错误。抛出异常。throw后面可以填写任意宇符常数
答案:(4)return tBody
解析:完成初始化后,返回tBody。
答案:(5)tBody(Rows,Cols) 解析:用数组的行和列对成员变量tBody赋初始值。
●试题4
阅读以下说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
应用系统在启动之前,首先要将配置文件加载到内存中,这些内存配置信息应该是唯一的。通常情况下,用户可以对应用系统进行配置,并将配置信息保存在配置文件中。下面的代码应用了单身模式(Singleton)以保证Configure类只能有一个实例。这样,Configure类的使用者无法定义该类的多个实例,否则会产生编译错误。
答案:(1)Configure()
解析:由于是单身模式,其构造函数必须是私有的。于是private后面的函数是构造函数。答案:(2)Configure术Configure::jnstance
解析:instance是静态变量,此处进行必要的初始化。
答案:(3)一instance
解析:构造类的一个实例赋给一instance。
答案:(4)一instance
解析:返回一instance,即实例化的Configure对象。
答案:(5)Configure::Instance()
解析:主函数中应用该类时,只能通过Instance来实例化一个Configure对象。
阅读以下说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
某网络游戏存在战士(Fighter)、野蛮人(Savage)、白法师(WhiteWitch)三种角色,它们具有 Role接口,角色的类图关系如图l.1所示。现要将黑法师(BlackWitch)角色加入此网络游戏以实现功能扩充。已知某第三方库已经提供了法师(Witch)类,且完全满足系统新增的黑法师角色所需的功能,但法师(witch)不是由Role派生而来,它提供的接口不能被系统直接使用。代码5—1既使用了法师(Witch),又遵循了Role规定的接口,既避免了从头开发一个新的黑法师类,又可以不修改游戏中已经定义的接口。代码5—2根据用户指定的参数生成特定的角色实例,并对之进行显示操作。
游戏中定义的接口与黑法师(BlackWitch)提供的显示接口及其功能见表1.1。
答案:(1)Role
解析:题目中要求BlackWitch具有Role接口,所以应该继承Role。
答案:(2)Witch
解析:因为需要重用Witch类,所以生成Witch类型的私有变量。
答案:(3)displayIt()
解析:因为需要重用Witch类,因此BlackWitch实现Role时要调用Witch类的方法。
答案:(4)Role*
解析:主函数中s是Role*类型的,所以9etRolelnstance(int type)返回值类型为Role*。答案:(5)getRolelnstance(type)
解析:生成特定类型的角色实例,类型由type确定。
答案:(6)delete S
解析:程序退出前需要释放指针s所占用的空间。
●试题6
阅读以下说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
在一图像处理系统中,开发者定义了一个图像类ImageCon,其中定义了图像具有的属性和处理图像的相应方法。当图像件的内容或状态发生变化时,关注此ImageCon类对象的相应的Image— View对象都要更新其自身的状态。一个ImageCon对象能够关联一组ImageView对象。当Image— Con对象的内容或状态发生变化时,所有与之相关联的ImageView对象都将得到通知,这种应用被称为观察者模式。以下代码写在一个C++源文件中,能够正确编译通过。
【C++代码】
答案:(1)class ImageCon解析:对类ImageCon的声明。
答案:(2)Virtual
解析:在类中声明函数的时候虚函数可以将其声明为空。而将其实现放到派生类中。
答案:(3)ImageCon
解析:由构造函数的声明可知im9的类型是ImageCon *。
答案:(4)update(this)
解析:ImageView对象调用update(this)更新自身状态。
答案:(5)attach(this)
解析:通过调用方法attach(this)将此ImageView对象与img对象相关联。
●试题7
阅读以下说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
类AWD表示有向网(带权有向图)。Floyd算法的基本思想是递推地产生一个矩阵序列M0, M1,M2,…,Mn,其中M0是已知的带权邻接矩阵wa,Mk(i,j)(0≤i,j
答案:(1)wa[i][j]
解析:初始时,最短路径长度sp[i][j]初值为权值wa[i][j]。
答案:(2)sp[i][k]+sp[k][J]或者t1+t2
解析:身找到点i到点j的更短路径时,需要更新sp[i][j]的值。
答案:(3)k
解析:更新sp[i][j]的值的时候,k成为最短路径上的点。
答案:(4)path[i][j]
解析:此处递归调用输出最短路径中经过点path[i][j]的前半段,应填入path[i][j]。
答案:(5)path[i][j],j
解析:此处递归调用输出最短路径中经过点path[i][j]的后半段,应填入path[I][]J。
●试题8
阅读下列程序说明和c++代码,将应填入(n)处的字句写在答卷的对应栏内。
【程序6说明】
本程序实现两个多项式的乘积运算。多项式的每一项由类Expression描述,而多项式由类 Polynomial描述。类Polynomial的成员函数有:
Create():创建按指数降序链接的多项式链表,以表示多项式。
Reverse():将多项式链表的表元链接顺序颠倒。
Multiply(Polynomial Ll,Polynomial L2):计算多项式L1多项式L2的乘积多项式。
答案:(1)quot=一quot;exp=一exp;next=NULL解析:创建系数为_quot,指数为_exp的项。
答案:(2)P!=NULL&&exp
答案:(3)new Expression(quot,exp)
解析:根据读入的指数或者系数创建要插入的项。
答案:(4)L1.poly→exp+L2.poly→exp
解析:两项的指数之和就是乘积多项式的最高次幂。
答案:(5)pLl→exp+pL2→exp
答案:(6)quot+=pLl→quot*pL2→quot
解析:当两多项式的当前次幂的和为k时,累计它们系数的乘积,并分别准备考虑下一项。