一起答

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

如果您发现本试卷没有包含本套题的全部小题,请尝试在页面顶部本站内搜索框搜索相关题目,一般都能找到。
  1. 阅读下列程序说明和C++代码,将应填入(n)处。

     【程序6说明】

     本程序实现两个多项式的乘积运算。多项式的每一项由类Item描述,而多项式由类List描述。类List的成员函数有:

     createList():创建按指数降序链接的多项式链表,以表示多项式。

     reverseList():将多项式链表的表元链接顺序颠倒。

     multiplyList(List L1,List L2):计算多项式L1和多项式L2的乘积多项式。

     【程序6】

     #include<iostream.h>

     class List;

     class |tem{

       friend class List;

     private:

       double quot;

       int exp;

       |tem * next;

     public:

        |tem(double_quot,int_exp)

        { (1) ;}

     };

     class List {

     private:

       |tem * list;

     public:

      List(){list=NULL;}

      void reverseList();

      void multiplyList(List L1,List L2);

      void createList();

     };

     void List::createList()

     { |tem * p,* u,*pre;

      int exp;

      doubte quot;

      list=NULL;

      while(1){

      cout<<"输入多项式中的一项(系数、指数):"<<endl;

      cin>>quot>>exp:

      if(exp<0)break;  //指数小于零,结束输入

      if(quot==0)continue;

      p=list;

      while((2)){  //查找插入点

       pre=p;p=p->next;}

      if(p!=NULL&&exp==p->exp) {p->quot+=quot;continue;}

       u=(3);

       if(p==list) list=u;

       else pre->next=u;

       u->next=p;}

      }

      void List::reverseList()

      { |tem*p,*u;

       if(list==NULL)return;

       p=list->next;list->next=NULL;

        while(p!=NULL)}

        u=p->next;p->next=list;

        list=p;p=u;}

      }

      void List::multiplyList(List L1,List L2)

      {|tem*pLI,*pL2,*u;

      int k,maxExp;

      double quot;

      maxExp=(4);

     L2.reverseList();list=NULL;

     for(k=maxExp;k>=0;k--){

      pL1=L1.list;

      while(pL1!=NULL&&pL1->exp>k)pL1=pL1->next;

      pL2=L2.list;

      while(pL2!=NULL&&(5) pL2=pL2->next;

      quot=0.0;

      while(pL1!=NULL&&pL2!=NULL){

       if(pL1->exp+pL2->exp==k){

       (6);

        pL1=pL1->next;pL2=pL2->next;

       }else if(pL1->exp+pL2->exp>k) pL1=pL1->next;

         else pL2=pL2->next;

     } 

     if(quot!=0.0){

      u=new |tem(quot,k);

      u->next=list;list=u;}

     }

     reverseList(:);L2.reverseList():

     }

     void main()

     { ListL1,L2,L;

      cout<<"创建第一个多项式链表\n";L1.createList();

      cout<<"创建第二个多项式链表\n";L2.createList();

      L.multiplyList(L1,L2);

     }

  2. 【说明】

     下面是一个Applet程序,其功能是根据给出的小时,分钟和秒数计算相等的秒数,即将1分钟化为60秒,依此类推。要求建立一个时间类,时间参数均作为类的成员变量,并且给出换算时间的方法,也作为这个类的成员函数,可以供外部对象进行调用。同时还需要在输出窗口中显示换算结果,并且将结果写到out3_3.txt文件中,本题给出确定的时间为4小时23分47秒,要求换算成以秒做单位的时间。

     程序运行结果如图11所示。

     

     import java.io.*;

     import java.awt.*;

     impOrt java.applet.*;

     /*

      <applet code=ex7_7.class width=800 height=400>

      </applet>

     */

     public class ex7_7 extends APPlet{

      public void paint (Graphics g){

      int nSum;

      class myTime7_7{

       public int h;

       public int m;

       public int s;

       public int out;

       public int caculateSecond(){

          (1);

       return out;

       }

      }

      myTime7_7 objTime7_7=new myTime7_7();

      ObjTime7_7. h=4;

      ObjTime7_7.m=23;

      ObjTime7_7.s=47;

      nSum=objTime7_7.  (2);

      g.drawString("时:"+objTime7_7.h,20,30);

      g.drawString("分:"+objTime7_7.m,20,50);

      g.drawString("秒:"+objTime7_7.s,20,70);

      g.drawString((3));

      try{

      FileOutputStream fos7_7=new FileOutputStream("out7_7.txt");

      BufferedOutputStream bos7_7=new BufferedOutputStream(fos7_7,1024);

      PrintStream ps7_7=new PrintStream(bos7_7,false);

      SyStem.setOut(ps7_7);

      System.out.println((4));

      ps7_7. close();

      }catch(|OException ioe){

       (5) (ioe);

      }

      }

     }

     ex7_7.htm|

     <HTML>

      <HEAD>

       <TITLE>ex7_7</TITLE>

      </HEAD>

      <BODY>

       <appletcode="ex7_7.class"width=800 height=400>

       </applet>

      </BODY>

     </HTML>

  3. 阅读下列程序说明和C代码,将应填入(n)处。

      【程序5说明】

     著名的四色定理指出任何平面区域图均可用四种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过四种颜色的着色方案。

     程序中用1~4表示四种颜色。要着色的N个区域用0~N-1编号,区域相邻关系用 adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域j相邻;矩阵的i行j列的元素为0,表示区域i与区域j不相邻。数组color[]用来存储着色结果,color[i]的值为区域i所着颜色。

     【程序5】

     #include<stdio.h>

     #define N 10

     void output(int color[])/*输出一种着色方案*/

     { int i;

      for(i=0;i<N;i++)

       printf("%4d",color[i]);

      printf("\n");

     }

     int back (int * ip,int color[])/*回溯*/

     { int c=4;

       while(c==4){

       if(*ip<=0)return 0;

       --(*ip);

       c=(1);

       color[*ip]=-1;

       }

       return c;

     }

     /*检查区域i,对c种颜色的可用性*/

     int colorOk(int i,int c,int [][N],int color[]}

     { int j;

      for(j=0;j<i;j++)

      if((2))

       return 0;

     return 1;

     }

     /*为区域i选一种可着的颜色*/

     int select (int i,int c,int adj[][N],int color[])

     { int k;

      for(k=c;k<=4;k++)

      if(colorOK((3)))

       return k;

      return 0;

     }

     int coloring(int adj[][N])/*寻找各种着色方案*/

     { int color[N],i,c,cnt;

      for(i=0;i<N;i++)color[i] =-1;

      i=c=0;cnt=0;

      while(1){

       if((c=(4))==0){

        c=back(&i,color);

        if(c==0)return cnt;

       }else{(5);i++;

        if(i==N){

         output(color);

         ++cnt;

         c=back(&i,color);

        }else c=0;

       }

      }

     }

      void main()

      { int adj[N][N]=

           {{0,1,0,1,1,1,1,1,1,1},

            {1,0,1,1,0,1,1,1,1,0},

            {0,1,0,1,0,1,1,0,1,1},

            {1,1,1,0,1,1,0,0,1,1},

            {1,0,0,1,0,1,0,0,0,0},

            {1,1,1,1,1,0,1,0,0,1},

            {1,1,1,0,0,1,0,0,1,0},

            {1,1,0,0,0,0,0,0,1,1},

            {1,1,1,1,0,0,1,1,0,1},

            {1,0,1,1,0,1,0,1,1,0}

           };

      printf("共有%d组解.\n",coloring(adj));

     }

  4. 阅读下列函数说明,将应填入(n)处的字句写在对应栏内。

    【函数1说明】

     函数compare(SqList A, SqList B)的功能是:设A=(al,…,am)和B=(b1,…,bn)均为顺序表,“比较”,两个顺序表A和B的大小。设A’ 和B’ 分别为A和B中除去最大共同前缀后的子表(例如,A=(y,x,x,z,x,z),B=(y,x,x,2,y,x,x,z),则两者中最大的共同前缀为 (y,x,x,z),在两表中除去最大共同前缀后的子表分别为A'=(x,z)和B'=(y,x,x,z))。若 A'=B'=空表,则A=B;若A'=空表,而B'≠空表,或者两者均不为空表,且A'的首元小于 B'首元,则A<B:否则A>B。

     提示:算法的基本思想为:若相等,则j+1,之后继续比较后继元素;否则即可得出比较结果。显然,j的初值应为0,循环的条件是j不超出其中任何一个表的范围。若在循环内不能得出比较结果,则循环结束时有3种可能出现的情况需要区分。

     【函数1】

    int compare ( SqListA, SqList B)

    {

    //若A<B,则返回-1;若A=B,则返回0:若A>B,则返回1

    j =0;

    while(i< (1) &&j<B. length)

    if(A. elem[j] < B. elem[j] )return(-1)

    else if(A. elem[j] > B. elem[j] )return(1);

    else (2);

    if(A. length == B. length) return(0);

    else if(A. length<B. length)return(-1);

    else return(1)

    }//compare

    //函数1的时间复杂度是(3)。

      【函数2说明】

     函数exchanse_L(SLnk&L,int m)的功能是:用尽可能少的辅助空间将单链表中前m个结点和后n个结点的互换。即将单链表(a1、a2…,am,b1,b2,…,bn)改变成(b1,b2,…,bn,a1, a2,…,am,)。

    【函数2】

    void exchange_L(SLink &L, int m)

    {

    if((4)&&L->next)     //链表不空且Lm!=0

    {

     P = L->next; k=1;

     while( k < m&&p)      //查找am,所在结点

     {

       P=(5);++k;

      }

     if( (6) &&p->next)   //n! =0 时才需要修改指针

       ha = L -> next;      //以指针ha记a1结点的位置

       L -> next = p -> next;  //将B1结点链接在头结点之后

       p -> next = NULL;     //设am的后继为空

       q=(7);        //令q指向b1结点

       while(q->next)q =(8); //查找bn结点

       q->>next=(9);     //将a1结点链接到bn结点之后

      }

    }

    }

    //函数2的时间复杂度是(10)。

  5. 设计二中关系Merchandise中由属性price表示商品价格,关系lnvoicedetail中的属性 unitprice也表示商品价格。两个是否有必要同时存在?为什么?

  6. 根据设计二中关系模式,以下SQL语句是用于“查询从未售出的商品信息”的不完整语句,请填补其中的空缺。

     SELECT Mno, Mname, price

     FROM Merchandise(1)

     WHERE(2)

    (SELECT(3)

     FROM lnvoicedetail

     WHERE A. Mno=lnvoicedetail. Mno);

  7. 根据设计二中关系模式,以下SQL语句是用于“建立2005年1月期间每张发票的发票号,交易日期,交易商品件数和交易总金额的视图”的不完整语句,请填补其中的空缺。

     CREATE VIEW Invoice -total(1)

     SELECT Invoice. ino, ldate,(2),(3)

     FROM Invoice, lnvoicedetail

     WHERE(4)AND

     ldate BETWEEN '2005-01-01'AND '2005-01-31'

     GROUPBY(5);

  8. 请从下面的选项中选择相应的判断逻辑填补【算法2-1】中的“判断条件1”至“判断条件3”。注意,若“判断条件2”的逻辑判断结果为假,就无需对“判断条件3”进行判断。

    (a)字符是括号

    (b)字符是左括号

    (c)字符是右括号

    (d)栈空

    (e)栈不空

    (f)栈顶元素表示的是与当前字符匹配的左括号

    (R)栈顶元素表示的是与当前字符匹配的右括号

  9. 阅读下列说明,回答问题1~问题4。

    【说明】

     某超市的销售业务由一个销售业务管理系统进行管理,该系统每完成一次交易都需要提供顾客发票,其格式见表6所示。

          

     对于这样一个销售业务管理系统,分别给出了以下两种关系数据库的设计(下划线表示主关键字)

     设计一:

     顾客Customer(顾客代码Cno,姓名name,住址address,联系电话phone)

     收银员Salesman(收银员代码Sno,身份证号idno,姓名name,住址address,联系电话 phone)

     商品Merchandise(商品代码Mno,商品名称Mname,价格price)

     发票Invoice(发票号码Ino,交易日期Idate,顾客代码Cno,收银员代码Sno,商品代码 Mno,单价unitpfice,数量amount)

     设计二:

     顾客Customer(顾客代码Cno,姓名name,住址address,联系电话phone)

     收银员Salesman(收银员代码Sno,身份证号idno,姓名name,住址address,联系电话 phone)

     商品Memhandise(商品代码Mno,商品名称Mname,价格price)

     发票Ivoice(发票号码Ino,交易日期Idate,顾客代码Cno,收银员代码Sno)

     发票明细Invoicedetail(发票号码Ino,商品代码Mno,单价unitprice,数量amount)

    设计一的关系模式Invoice最高满足第几范式?为什么?设计一和设计二哪个更加合理?为什么?

  10. UML采用5个互联的视图来描述软件系统的体系结构,即用例视图(Use—case View)、设计视图(Design View)、进程视图(Process View)、实现视图(Implementation View)和展开视图(Deployment View)。系统模型中每一个视图的内容是由一些图来描述的,UML中包含用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、分布图等9种图。对整个系统而言,其功能由用例图描述,静态结构由类图和对象图描述,动态行为由状态图、时序图、协作图和活动图描述,而物理架构则是由组件图和分布图描述。请分别指出用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、分布图的作用。

  11. 阅读下列说明和算法,回答问题1和问题2。

    【说明】

     算法2-1是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号,则给出相应的提示信息,如下所示:

     文件             提示信息

     (1+2)

     abc)          缺少对应左括号:第2行,第4列

     ((def)gx)        缺少对应左括号:第3行,第10列

     (((h)

     ij)(k

     (1ml)         缺少对应右括号:第5行,第4列;第4行,第1列

     在算法2-1中,stack为一整数栈。算法中各函数的说明见表4。

    【算法2-1】将栈stack 置空,置EOF为false ch < - nextch(); while( not EOF) k < - kind(CH); if(k== (1) ) push( (2) );push( (3) ); elseif(k== (4) ) if(not empty()) pop( ) ;pop( ); else 显示错误信息(缺少对应左括号或右括号); 显示行号row;显示列号col; endif endif ch < - nextch( ); endwhile if(not empty()) 显示错误信息(缺少对应左括号或右括号); while(not empty()) row < - pop() ; col <- pop(); 显示行号row; 显示列号col; endwhile endif 为了识别更多种类的括号,对算法2-1加以改进后得到算法2-2。算法2-2能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数kind(char ch)的参数及其对应的返回值见表5。

     【算法2-2】

     将栈stack置空,置EOF为false

     ch< -nextch();

     while(not EOF)

         k <-kind(ch);

        if( k >0)

          if( 判断条件1 )

              push((5));push((6));push((7));

          elseif( 判断条件2 and 判断条件3 )

              pop() ;pop() ;pop();

          else

              显示行号row; 显示列号col;

          endif

       endif

       ch < - nextch();

    endwhile

    if(not empty( ) )

       显示错误信息(缺少对应左括号或右括号);

       while( not empty( ) )

              pop( );   row←pop( ); col←pop( );

              显示行号row;显示列号col;

       endwhile

    endif

    请将【算法2-1】和【算法2-2】中(1)~(7)处补充完整。

  12. 协作图与时序图是同构的,二者表示的都是同样的系统交互活动,只是各自的侧重点不同而已。根据题目提供的信息,指出协作图中(4)~(8)处表示的内容。

  13. 阅读下列说明以及图示(如图1所示),回答问题1~3。

     【说明】

     某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成,绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。

     在每个学期的开始,学生可以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等。

     新学期开始前两周为选课注册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过4门课程,同时指定2门侯选课程以备主选课程未选上。每门课程最多不能超过10人,最少不能低于3人,低于3人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付费。如果在实际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改。

     在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。

     【用例图】

    【时序图】

     注释1:学生打算注册新的课程。

     注释2:一张这学期可选择的课程列表。

     注释3:显示一张为学生选课用的空白登记表。

    在UML中,用例代表一个完整的功能,如与角色通信、进行计算或在系统内工作等。请简要说明用例具有哪些的特征,并指出用例图中(1)~(3)处表示的内容。