历年软件设计师考试C++题集.docx

上传人:b****3 文档编号:24733529 上传时间:2023-06-01 格式:DOCX 页数:52 大小:1.31MB
下载 相关 举报
历年软件设计师考试C++题集.docx_第1页
第1页 / 共52页
历年软件设计师考试C++题集.docx_第2页
第2页 / 共52页
历年软件设计师考试C++题集.docx_第3页
第3页 / 共52页
历年软件设计师考试C++题集.docx_第4页
第4页 / 共52页
历年软件设计师考试C++题集.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

历年软件设计师考试C++题集.docx

《历年软件设计师考试C++题集.docx》由会员分享,可在线阅读,更多相关《历年软件设计师考试C++题集.docx(52页珍藏版)》请在冰豆网上搜索。

历年软件设计师考试C++题集.docx

历年软件设计师考试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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1