历年软件设计师考试C++题集.docx
- 文档编号:24733529
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:52
- 大小:1.31MB
历年软件设计师考试C++题集.docx
《历年软件设计师考试C++题集.docx》由会员分享,可在线阅读,更多相关《历年软件设计师考试C++题集.docx(52页珍藏版)》请在冰豆网上搜索。
历年软件设计师考试C++题集
历年软件设计师考试C++题集
2010下半年试题
参考答案:
2010上半年试题
试题五
阅读下列说明和C++弋码,将应填入 (n) 处的字句写在对应栏内。
[说明]
某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。
需要模拟的飞机种类及其特征如表5-1所示。
表5-1
飞机种类
起飞特征
飞行特征
直升机(Helicopter)
垂直起飞(VerticalTakeOff)
亚音速飞行(SubSonicFly)
客机(AirPlane)
长距离起飞(LongDistanceTakeOff)
亚音速飞行(SubSonicFly)
歼击机(Fighter)
长距离起飞(LongDistanceTakeOff)
超音速飞行(SuperSonicFly)
鹞式战斗机(Harrier)
垂直起飞(VerticalTakeOff)
超音速飞行(SuperSonicFly)
为支持将来模拟更多种类的飞机,采用策略设计模式(strategy)设计的类图如图5-1所示。
图5-1中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法fly()和takeOff()分别表示不同飞机都具有飞行特征和起飞特征;类FlyBehavior与TakeOffBehavior为抽象类,分别用于表示抽象的飞行行为与起飞行为;类SubSonicFly与SuperSonicFly分别描述亚音速飞行和超音速飞行的行为;类VerticalTakeOff与LongDistanceTakeOff分别描述垂直起飞与长距离起飞的行为。
[C++代码]
#include<iostream>
usingnamespacestd;
class FlyBehaVior {
public:
virtualvoidfly()=0;
};
class SubSonicFly:
publicFlyBehaVior{
public:
voidfly(){cout<<"亚音速飞行!
"<<endl;)
};
class SupersonicFly:
publicFlyBehaVior{
public:
voidfly(){cout<<"超音速飞行!
"<<endl;)
};
classTakeOffBehavior{
publie:
virtualvoidtakeOff()=0;
};
classVerticalTakeOff:
publicTakeOffBehavior{
public:
voidtakeOff(){cout<<"垂直起飞!
"<<endl' }
};
classLongDistanceTakeOff:
publicTakeOffBehavior{
public:
voidtakeOff(){cout<<"长距离起飞!
"<<endl;}
};
classAirCraft{
protected:
(1) ;
(2) ;
public:
voidfly(){ (3) ; }
voidtakeoff() { (4) ; };
};
class Helicopter:
publicAirCraft {
public:
Helicopter (){
flyBehavior=new (5) ;
takeoffBehavior=new (6) ;
}
(7) {
if(!
flyBehaVior) delete flyBehaVior;
if(!
takeoffBehavior) deletetakeoffBehaVior;
}
};
//其他代码省略
参考答案:
1.FlyBehavior*flyBehavior
2.TakeOffBehavjor*=takeOffBehavior
3.flyBehavior->fly()
4.takeOffBehavior->takeOff()
5.SubSonicFly()
6.VerticalTakeOff()
7.~Helicopter()
2009上半年试题
阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
[说明]
现欲构造一文件/目录树,采用组合(Composite)设计模式来设计,得到的类图如下图所示:
[C++代码]
#include<list>
#include<iostream>
#include<string>
usingnamespacestd;
classAbstractFile {
protected:
stringname; //文件或目录名称
public:
voidprintName(){cout<<name;> //打印文件或目录名称
virtualvoidaddChild(AbstractFile *file)=0;
//给一个目录增加子目录或文件
virtualvoidremoveChild(AbstractFile*file)=0;
//删除一个目录的子目录或文件
virtuallist<AbstractFile*>*getChildren()=0;
//获得一个目录的子目录或文件
};
classFile:
publiCAbstractFile{
public:
File(stringname) {
(1) =name;}
voidaddChild(AbstractFile *file) {return; }
voidremoveChild(AbstractFile*file) {return; }
(2) getChildren(){return (3) ;}
};
classFolder:
publicAbstractFile{
private:
list<AbstractFile*>childList; //存储子目录或文件
public:
Folder(stringname){ (4) =name;}
voidaddChild(AbstractFile*file){childList.push_back(file);}
voidremoveChild(AbstractFile*file) {childList.remove(file);}
list<AbstractFile*>*getChildren(){return (5) ;}
};
voidmain() {
//构造一个树形的文件/目录结构
AbstractFile*rootFolder=newFolder("c:
\\");
AbstractFile*compositeFolder=newFolder("compositel");
AbstractFile*windowsFolder=newFolder("windows");
AbstractFile*file=newFile("TestComposite.java");
rootFolder->addChild(compositeFolder);
rootFolder->addChild(windowsFolder);
compositeFolder->addChild(file);
}
参考答案:
1.this->name
2.list<AbstractFile*>*
3.NULL
4.this->name
5.&childList
2009下半年试题
试题六
阅读下列说明和C++代码,将应填入 (n) 处的字句写在的对应栏内。
1.
[说明]
现欲实现一个图像浏览系统,要求该系统能够显示BMP、3PEG和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。
系统首先将BMP、JPEG和GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。
系统需具有较好的扩展性以支持新的文件格式和操作系统。
为满足上述需求并减少所需生成的子类数目,采用桥接(Bridge)设计模式进行设计,所得类图如下图所示。
采用该设计模式的原因在于:
系统解析BMP、GIF与JPEG文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。
[C++代码]
classMatrix{ //各种格式的文件最终都被转化为像素矩阵
//此处代码省略
};
classImagelmp{
public:
virtualvoiddoPaint(Matrixm)=0; //显示像素矩阵m
};
classWinImp:
publicImageImp{
public:
voiddoPaint(Matrixm){/*调用Windows系统的绘制函数绘制像素矩阵*/)
};
classLinuxImp:
publicImageImp{
public:
voiddoPaint(Matrixm){/*调用Linux系统的绘制函数绘制像素矩阵*/}
};
classImage{
public:
voidsetImp(ImageImp*imp){
(1) =imp;}
virtualvoidparseFile(stringfileName)=0;
protected:
(2) *imp;
};
class BMP:
publicImage{
public:
voidparseFile(stringfileName){
//此处解析BMP文件并获得一个像素矩阵对象m
(3) ;//显示像素矩阵m
}
};
class GIF:
publicImage{
//此处代码省略
};
class JPEG:
publicImage{
//此处代码省略
};
voidmain(){
//在Windows操作系统上查看demo.bmp图像文件
Image*imagel= (4) ;
ImageImp*imageImpl= (5) ;
(6) ;
imagel->parseFile("demo.bmp");
}
现假设该系统需要支持10种格式的图像文件和5种操作系统,不考虑类Matrix,若采用桥接设计模式则至少需要设计 (7) 个类。
参考答案:
(1)this->imp
(2)ImageImp
(3)imp->doPaint(m)
(4)newBMP()
(5)newWinImp()
(6)imagel->setImp(imageImpl)
(7)17
2008下半年试题
试题六
阅读下列说明和C++代码,将应填入 (n) 处的字句写在对应栏内。
1.
【说明】
已知某类库开发商提供了一套类库,类库中定义了Application类和Document类,它们之间的关系如下图所示。
其中,Application类表示应用程序自身,而Document类则表示应用程序打开的文档。
Application类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中读出信息后,它就由一个Document对象表示。
当开发一个具体的应用程序时,开发者需要分别创建自己的Application和Document子类,例如上图中的类MyApplication和类MyDocument,并分别实现Application和Document类中的某些方法。
已知Application类中的openDocument方法采用了模板方法(TemplateMethod)设计模式,该方法定义了打开文档的每一个主要步骤,如下所示:
1.首先检查文档是否能够被打开,若不能打开,则给出出错信息并返回;
2.创建文档对象;
3.通过文档对象打开文档;
4.通过文档对象读取文档信息;
5.将文档对象加入到Application的文档对象集合中。
【C++代码】
#include<iostream>
#include<vector>
usingnamespacestd;
classDocument{
public:
voidsave(){/*存储文档数据,此处代码省略*/)
voidopen(stringdocName){/*打开文档,此处代码省略*/)
voidclose(){ /*关闭文档,此处代码省略*/)
virtualvoidread(stringdocName)=0;
};
classAppplication{
private:
vector<
(1) > docs; /*文档对象集合*/
public:
boolcanOpenDocument(stringdocName){
/*判断是否可以打开指定文档,返回真值时表示可以打开,
返回假值表示不可打开,此处代码省略*/
}
voidaddDocument(Document*aDocument){
/*将文档对象添加到文档对象集合中*/
docs.push_back(
(2) );
}
virtualDocument*doCreateDocument()=0;/*创建一个文档对象*/
voidopenDocument(stringdocName){/*打开文档*/
if ( (3) ){
cout<<“文档无法打开!
”<<endl;
return;
}
(4) adoc= (5) ;
(6) ;
(7) ;
(8) ;
}
};
参考答案:
(1)Document*
(2)aDocument
(3)!
canOpenDocument(docName)
(4)Document*
(5)doCreateDocument()
(6)adoc->open(docName)
(7)adoc->read(docName)
(8)addDocument(adoc)
2008上半年试题
试题六
阅读下列说明和C++代码,将应填入 (n) 处的字句写在对应栏内。
1.
【说明】
已知某企业欲开发一家用电器遥控系统,即用户使用一个遥控器即可控制某些家用电器的开与关。
遥控器如左下所示。
该遥控器共有4个按钮,编号分别是0至3,按钮0和2能够遥控打开电器1和电器2,按钮1和3则能遥控关闭电器1和电器2。
由于遥控系统需要支持形式多样的电器,因此,该系统的设计要求具有较高的扩展性。
现假设需要控制客厅电视和卧室电灯,对该遥控系统进行设计所得类图如右下所示。
右上图中,类RomoteController的方法onPressButton(intbutton)表示当遥控器按键按下时调用的方法,参数为按键的编号;Command接口中on和off方法分别用于控制电器的开与关;Light中turnLight(intdegree)方法用于调整电灯灯光的强弱,参数degree值为0时表示关灯,值为100时表示开灯并且将灯光亮度调整到最大;TV中setChannel(intchannel)方法表示设置电视播放的频道,参数channel值为0时表示关闭电视,为1时表示开机并将频道切换为第1频道。
【C++代码】
classLight{ //电灯类
public:
voidtrunLight(intdegree){//调整灯光亮度,0表示关灯,100表示亮度最大);
};
classTV{//电视机类
public:
voldsetChannel(intchannel]{//调整电视频道,0表示关机,1表示开机并切换到1频道};
};
classCommand{//抽象命令类
public:
virtualvoidon()=0;
virtualvoidoff()=0;
};
classRemoteController{ //遥控器类
protected:
Command*commands[4];//遥控器有4个按钮,按照编号分别对应4个Command对象
public:
voidonPressButton(intbutton){ //按钮被按下时执行命令对象中的命令
if(button%2==0)commands[button]->on();
elsecommands[button]->off();
}
voidsetCommand(intbutton,Command*command){
(1) =command;//设置每个按钮对应的命令对象
}
};
classLightCommand:
publicCommand{ //电灯命令类
protected:
Light*light; //指向要控制的电灯对象
public:
voidOn(){light->trunLight(100););
voidoff()[light->
(2) ;);
LightCommand(Light*light){this->light=light;);
};
classTVCommand:
publicCommand{//电视机命令类
protected:
TV*tv; //指向要控制的电视机对象
public:
voidon(){tv-> (3) ;};
voidoff(){tv->setChannel(0););
TVCommand(TV*tv){this->tv=tv;);
};
voidmain(){
Lightlight; TVtv;//创建电灯和电视对象
LightCommandlightCommand(&light);
TVCommandtVCommand(&tv);
RemoteControllerremoteController;
remoteController.setCommand(0, (4) ); //设置按钮0的命令对象
…//此处省略设置按钮1、按钮2和按钮3的命令对象代码
}
本题中,应用命令模式能够有效让类 (5) 和类 (6) 、类 (7) 之间的耦合性降至最小。
参考答案:
(1)commands[button]
(2)trunLight(0) (3)setChaunel
(1)
(4)&lightCommand (5)RemoteController (6)Light (7)TV
2007下半年试题
试题六
阅读下列说明和C++代码,将应填入 (n) 处的字句写在对应栏内。
1.
【说明】
已知某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开会讨论决定。
采用责任链设计模式(ChainofResponsibility)对上述过程进行设计后得到的类图如图6-1所示。
【C++代码】
#include<string>
#include<iostream>
usingnamespacestd;
classPurchaseRequest {
public:
doubleAmount; /*一个采购的金额*/
intNumber; /*采购单编号*/
stringPurpose; /*采购目的*/
};
classApprover{ /*审批者类*/
public:
Approver(){successor=NULL; }
virtualvoidProcessRequest(PurchaseRequestaRequest){
if (successor !
=NULL){ successor->
(1) ; }
}
voidSetSuc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 历年 软件 设计师 考试 C+ 题集