软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷24

0
收藏   分享
  • 卷面总分:75分
  • 试卷类型:模拟考试
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:7次
  • 作答时间:150分钟
试卷简介
试卷预览
1

阅读以下说明和c++代码,将应填入(n)处的字句写在对应栏内。

  【说明】

 现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1, y1,x2,y2)画一条直线,DF2则用drawline(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现 部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图9-7显示了各个类间的关系。

这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是 C++语言实现,能够正确编译通过。

 【C++代码】

 class DP1{

 public:

    static void draw_a_line(double x1, double y1,double x2, double y2){

    //省略具体实现

    }

 );

 class DP2{

 public:

    static void drawline(double x1, double x2,double y1, double y2){

    //省略具体实现

    }

 };

 class Drawing{

 public:

     (1) void drawLine(double x1,double y1,double x2,double y2)=0;

 };

 class V1Drawing:public Drawing{

 public:

    void drawLine(double x1, double y1,double x2, double y2){

       DP1::draw_a_line(x1,y1,x2,y2);

    }

  };

 class V2Drawing:public Drawing{

 public:

    void drawLine(double x1, double y1, double x2, double y2){

       (2);

    }

 };

 class Shape{

 private:

     (3) _dp;

 public:

    Shape(Drawing *dp);

    virtual void draw()=0;

    void drawLine(double x1, double y1, double x2, double y2);

 };

 Shape::Shape(Drawing *dp)

 {

    _dp = dp;

 }

 void Shape::drawLine(double x1, double y1, double x2, double y2)

 {  //画一条直线

    (4);

 }

 class Rectangle: public Shape{

 private:

     double _x1,_y1,_x2,_y2;

 public:

     Rectangle(Drawing *dp, double x1, double y1,

             double x2, double y2);

     void draw();

 };

 Rectangle::Rectangle(Drawing *dp, double x1, double y1, double x2, double y2)

                  :(5) 

 {

   _x1=x1;_y1=y1;_x2=x2;_y2=y2;

 }

 void Rectangle::draw()

 {

 //省略具体实现

 }

1

阅读下列函数说明、图和C代码,将应填入(n)处的字句写在对应栏内。

 【说明】

 当一元多项式aixi中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指数和对应系数。

 为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式8x5-2x2+7的存储结构为:

 

 函数中使用的预定义符号如下:

 #define EPSI le-6

 struct Node(         /*多项式中的一项*/

     double c;       /*系数*/

     int e;         /*指数*/

     struct Node *next;

 };

 typedef struct{        /*多项式头节点*/

    int n;         /*多项式不为零的项数*/

    struct Node *head;

 }POLY;

 【函数】

 void Del(POLY *C, struct Node *p)

 /*若p是空指针则删除头节点,否则删除p节点的后继*/

 {

    struct Node *t;

    /*C是空指针或C没有节点*/

    if(C==NULL||C->head==NULL)return;

    if((1)){/*删除头节点*/

        t=C->head;

        C->head=t->next;

        return;

    }/*if*/

    t=p->next;

    p->next=t->next;

 };/*Del*/

 void Insert(POLY *C, struct Node *pC)

 /*将pC节点按指数降序插入到多项式C中*/

 /*若C中存在pC对应的指数项,则将系数相加;若其结果为零,则删除该节点*/

    {

     struct Node *t, *tp;

     /*pC为空指针或其系数近似为零*/

     if(pC==NULL || fabs(pC->c) < EPSI)return;

        if(C->head==NULL){ /*若C为空, 作为头节点插入*/

        C->head=pC;

        pC->next=NULL;

        C->n++;

        return;

     }/*if*/

     /*若pC的指数比头节点的还大, 插入到头节点之前*/

     if(pC->e>C->head->e){

         (2);

        C->head=pC;

        C->n++;

        return;

     }/*if*/

      (3);

     t=C->head;

     while(t!=NULL){

        if(t->e>pC->e){

           tp=t;

           t=t->next;

        }

        else if(t->e==pC->e){/*C中已经存在该幂次项*/

           t->c+=pC->c;/*系数相加*/

           if(fabs(t->c)<EPSI){/*系数之和为零*/

               (4);/*删除对应节点*/

              C->n--;

           }

            (5);

1

阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。

 【说明】

 现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用DP1还是DP2。

 为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图9-6显示了各个类间的关系。

这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是 Java语言实现,能够正确编译通过。

 【Java代码】

 //DP1.java文件

 public class DP1{

    static public void draw_a line(double x1,double y1,

                            double x2,double y2){

        //省略具体实现

    }

 }

 //DP2.java文件

 public class DP2{

    static public void drawline(double x1,double y1,

                          double x2,double y2){

       //省略具体实现

   }

 }

 //Drawing.java文件

  (1) public class Drawing{

     abstract public void drawLine(double x1, double y1, double x2, double y2);

 }

 //V1Drawing.java文件

 public class V1Drawing extends Drawing{

    public void drawLine(double x1, double y1, double x2, double y2){

       DP1.draw_a_line(x1,y1,x2,y2);

    }

 }

  //V2Drawing.java文件

 public class V2Drawing extends Drawing{

    public void drawLine(double x1,double y1,

            double x2, double y2)(//画一条直线

        (2);

    }

 }

 //Shape.java文件

 abstract public class Shape{

    abstract public void draw();

    private (3) _dp;

    Shape(Drawing dp){

       _dp=dp;

    }

    protected void drawLine(double x1,double y1,

                     double x2, double y2){

        (4);

    }

 }

 //Rectangle.java文件

 public class Rectangle extends Shape{

    private double_x1,_x2,_y1,_y2;

    public Rectangle(Drawing dp,

          double x1,double y1,

          double x2,double y2){

        (5);

        _x1=x1;_x2=x2;

        _y1=y1;_y2=y2;

    }

    public void draw(){

    //省略具体实现

    }

 }

1

阅读下列说明和图,回答问题1至问题3。

 【说明】

 某大型旅店为了便于管理,欲开发一个客房管理系统。希望实现客房预订、入住登记、账务结算、退房,以及将服务项目记入客人账单。

 旅客包括散客和团体,散客预订或入住时需要提供姓名、性别、身份证和联系电话,团体则提供团体名称、负责人的姓名、性别、身份证和联系电话,以及团体人数。对于散客,还要提供换房。

 旅店还提供了很多服务项目,比如早餐。对每一个入住客人,服务列表记录了住宿期间的各项服务,包括服务类型、日期、数量等。当然,客人也可以不要任何服务。

 旅店的客房有一个唯一的房间号,分为不同的类别,不同的房间床位数和价格不同。

 为了有效的管理,需要记录每天的客房状态。客房的状态有:空闲、占用、已预订和维修。

 . 客人入住后,客房处于占用状态。

 . 客人退房后,客房处于空闲状态。

 . 客人预订后,客房处于已预订状态。

 . 预订客人入住后,客房处于占用状态。

 . 预订客人取消预订后客房处于空闲状态。

 . 需要维修时客房处于维修状态。

 . 维修完成后客房处于空闲状态。

 该系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,如图9-12所示是该系统的类图的一部分,图9-13描述了客房状态的转变情况。

请用如图9-12所示的属性和方法的名称给出客人类的属性和方法(注意;团体类中的负责人姓名等与散客的对应属性含义相同,不必区分)。

1

阅读下列说明和图,回答问题1至问题3。

【说明】

 某学校的教学系统描述如下。

 学生信息包括:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、入学年份(Syear)、主修专业(Smajor),其中学号是入学时唯一编定的。

 教师信息包括:教工号(Tno)、姓名(Tname)、性别(Tsex)、年龄(Tage)、职称(Ttitle),其中教工号是唯一编定的。

 课程信息包括:课程号(Cno)、课程名称(Cname)、学时(Cperiod)、学分(Ccredit),其中课程号是唯一编定的。

 每个专业每个年级只有一个班级,这样班级就可用入学年份标识。

 每位教师只教授特定的一门的课程,每门课程可以有多个教师教授,各位老师的上课地点及上课时间有所不同。注意:一门课程至少有一位教师教授,否则这门课程就视为不存在。

 每位学生可以同时选修多门不同的课程,一门课程至少要有10位学生选修,否则就取消这门课程的开设。注意:选修课程时要指定任课教师,不能重复选修同一门课程。课程结束后,任课教师给选修该课程的学生一个成绩(Grade)。注意:教师不能给没有选修他所教授课程的学生成绩,即使选修了其他教师教授的同一门课也不行。

 如图9-11所示是经分析得到的E-R图。

根据题意,给出联系的属性。实体间的联系有“一对一”、“一对多”和“多对多”,指出各联系分别属于哪一种。