一起答

2011年软件设计师考试考前密卷(七)-下午试题

如果您发现本试卷没有包含本套题的全部小题,请尝试在页面顶部本站内搜索框搜索相关题目,一般都能找到。
  1. ●试题六

    阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。

    【程序6说明】

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

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

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

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

    【程序6】

    #include

    class List;

    class ltem{

    friend class List;

    private:

    double quot;

    int exp;

    Item*next;

    public:

    Item(double_quot,int_exp)

    { (1) ;}

    };

    class List{

    private:

    Item*list;

    public:

    List(){list=NULL;}

    void reverseList();

    void multiplyList(List L1,List L2);

    void createList();

    };

    void List::createList()

    {Item*p,*u,*pre;

    int exp;

    double quot;

    list=NULL;

    while (1) {

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

    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()

    {Item*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)

    {Item*pLl,*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 Item(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所示。

    图11

    import javA.io.*;

    import javA.awt.*;

    import javA.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(IOException ioe) {

     (5) (ioe);

    }

    }

    }

    ex7_7.html

    ex7_7

       code="ex7_7.class" width=800 height=400 >

  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

    #define N 10

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

    {int i;

    for(i=0;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 color0k(int i,int c,int[][N],int color[]}

    {int j;

    for(j=0;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

    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. ●试题三

    有下列关于运动会管理系统的ER图,如图10所示。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体之间的关系。假定已通过下列SQL语言建立了基本表。

    CREATE TABLE ATHLETE

    (ANO CHAR (6) NOT NULL,

    ANAME CHAR (20) ,

    ASEX CHAR (1) ,

    ATEAM CHAR (20) );

    CREATE TABLE ITEM

    (INO CHAR (6) NOT NULL,

    INAME CHAR (20) ,

    ITIME CHAR (12) ,

    IPLACE CHAR (20) ;

    CREATE TABLE GAMES

    (ANO CHAR (6) NOT NULL,

    INO CHAR (6) NOT NULL,

    SCORRE CHAR (10) );

    为了答题的方便,图中的实体和属性同时给出了中英文两种文字,回答问题时只需写出英文名即可。

    【E-R图】

    图10 E-R图

    【问题】

    填充下列SQL程序1~4中的 (1) ~ (7) ,使它们分别完成相应的功能:

    程序1:统计参加比赛时男运动员人数。

    SELECT (1) 

    FROM ATHLETE

    WHERE ASEX=′M′;

    程序2:查100872号运动员参加的所有项目及其比赛时间和地点。

    SELECT ITEM,INO,IN A ME,ITIME,IPLACE

    FROM GAMES,ITEM

    WHERE (2) ;

    AND (3) ;

    程序3:查参加100035项目的所有运动员名单。

    SELECT ANO,ANAME,ATEAM

    FROM ATHLETE

    WHERE (4) ;

    (SELECT (4)   (5) 

    FROM GAMES

    WHERE GAMES.ANO=ATHLETE.ANO AND INO='100035');

    程序4:建立运动员成绩视图。

     (6)  ATHLETE-SCORE

    AS SELECT ATHLETE,ANO,ANAME,ATEAM,INAME,SCORE

    FORM (7) WHERE ATHLETE.ANO=GAMES.ANO AND GAMES.INO=ITEM.INO;

  5. ●试题四

    阅读下列程序说明和C程序,将应填入(n)处的字句写在答卷纸的对应栏内。

    【程序说明】

    该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。

    【程序】

    #include

    void strmerge(char*a,char*b,char*c)//将字符串a,b合并到字符串c中

       {

    char t,*w;

    w=c;

    while( (1) )

     {

    //找到字符串a,b当前字符中较小的字符

    if(*a<*b)

    {

    t=*a;

     (2) ;

    }

    else if(*a>*b)

    {

    t=*b;

     (3) ;

    }

    else//字符串a,b当前字符相等

    {

    t=*a;

    a++;

    b++;

    }

    if( (4) )//开始,可直接赋值

    *w=t;

    else if(t!=*w)

    //如果a,b中较小的当前字符与c中当前字符不相等,才赋值 (5) ;

     }

    if(*a!=\′\0′)//如果字符串a还没有结束,则将a的剩余部分赋给c

    while(*a!=′\0′)

    if(*a!=*w)

    {

    *(++w)=*a;

    a++;

    }

    else

     (6) ;

     if(*6!=′\0′)//如果字符串b还没有结束,则将b的剩余部分赋给c

    while(*b!=′\0′)

    if(*b!=*w)

    {

    *(++w)=*b;

    b++;

    }

    else

    b++;

     (7) ;

    }

    void strsort(char*s)//将字符串S中的字符排序

    {

    int i,j,n;

    char t,*w;

    W=S;

    for(n=0;*w!=′\0′;n++)//得到字符串长度n

    w++;

    for(i=0;i

    for(j=i+1;j

    if( (8) )

    {

    t=s[i];s[i]=s[j]; (9) ;

    }

    }

    void main()

    {

    char s1[100],s2[100],s3[100];printf("\nPlease,input the first string:");

    scanf("%s",s1);

    printf("\nPlease input the second string:");

    scanf("%s",s2);

    strsort(s1);//将字符串s1排序

    strsort(s2);//将字符串s2排序

    printf("%s\n",s1);

    printf("%s\n",s2);

    s3[0]=′\0′;//字符串s3的第一个字符先置′\0′结束标志

       (10) //将s1和s2合并,按照字母顺序排列,

     //且要删去相同字符,存入s3中

    printf("%s",s3);

     }

  6. ●试题二

    阅读以下说明和流程图,回答问题1和问题2,将答案写在答卷的对应栏内。

    【说明】

    某供销系统接受顾客的订货单,当库存中某配件的数量小于订购量或库存量低于一定数量时,向供应商发出采购单;当某配件的库存量大于或等于定购粮食,或者收到供应商的送货单并更新了库存后,向顾客发出提货单。该系统还可随时向总经理提供销售和库存情况表。该供销系统的分层数据流图中部分数据流和文件的组成如下:

    文件

    配件库存=配件号+配件名+规格+数量+允许的最低库存量

    数据流

    订货单=配件号+配件名+规格+数量+顾客名+地址

    提货单=订货单+金额

    采购单=配件号+配件名+规格+数量+供应商名+地址

    送货单=配件号+配件名+规格+数量+金额

    假定顶层图(如图6所示)是正确的,"供应商"文件已由其他系统生成。

    【问题1】

    指出哪张图中的哪些文件可不必画出。

    【问题2】

    指出在哪些图中遗漏了哪些数据流。回答时使用如下形式之一:

     (1) XX图中遗漏了XX加工(或文件)流向XX加工(或文件)的XX数据流;

     (2) XX图中XX加工遗漏了XX输入(或输出)数据流。

     【流程图】

    顶层图

    图6

    0层图

    图7

    加工1子图

    图8

    加工2子图

    图9

  7. ●试题一

    阅读下列说明和数据流图,回答问题1~问题3。

    【说明】

    某医院收费系统的主要功能是收取病人门诊的各项费用。系统的收费功能分为3个方面:病历收费、挂号收费和根据处方单内容收取检查或药物费用。

    1.病人初次来该医院看病,首先购买病历,记录病人基本情况。

    2.病人看病前要挂号。根据病人的病历和门诊部门(内科、外科等),系统提供相应的挂号单和处方单,并收取费用。

    3.病人根据处方单进行进一步检查或取药前需交纳各项费用。系统首先根据病人基本情况检查处方单中病历号是否正确,记录合格的处方单,并提供收据。

    4.所有收费都必须依据定价表中的定价来计算,且所有收费都必须写入收费记录中。

    医院收费系统的顶层图如图2所示;医院收费系统的第O层DFD图如图3所示。其中,加工1的细化图如图4所示,加工2的细化图如图5所示。

    假定顶层图是正确的,"定价表"文件已由其他系统生成。

    【数据流图】

    图2医院收费系统的顶层图

    图3医院收费系统的0层图

    图4医院收费系统的加工1子图

    图5医院收费系统的加工2子图

    【问题1】

    指出哪张图的哪些文件可以不必画出。

    【问题2】

    数据流图4中缺少2条数据流,请直接在图中添加。

    【问题3】

    数据流图5中缺少4条数据流,请直接在图中添加。