一起答

软件水平考试(初级)程序员下午(应用技术)模拟试卷19

如果您发现本试卷没有包含本套题的全部小题,请尝试在页面顶部本站内搜索框搜索相关题目,一般都能找到。
  1. 阅读以下应用说明、图和Java代码,根据要求回答问题1至问题5。

     【说明】

     Stack类是java. ntil包中专门用来实现栈的工具类。以下Java程序是一个不使用库函数而实现字符串反转的程序。例如,输入:123456,则输出:654321:输入:asdfeg,则输出:gefdsa。

    【Java程序】

    import java.applet.Applet;

    import java.awt.*;

    import java.awt.event.*;

    import java.util.*;

    public class UseStack extends Applet implements ActionListener

    { Stack MyStack;

     Label prompt=new Label("输入要反转字符:");

     Button pushBtn=new Button("压栈");

     Button popBtn=new Button("弹栈");    //反转

     TextField input=new TextField(5);

     int[] DrawStack =new int[10];      //记录堆栈中数据

     int[] PoppedOut=new int[20];       //记录被弹出的数据

     int StackCnt=0;             //记录模拟堆栈的数组中的数据个数

     String msg=" ";

     public void init()

     { MyStack=new Stack();

       add(prompt);

       add(input);

       add(pushBtn);

       add(popBtn);

       pushBtn.addActionListener(this);

        (1) 

     }

     public void paint(Graphics g)

     { for (int i=10; i<StackCnt; i++)    //模拟显示堆栈内部的数据排列情况

       { g.drawRect(50,200-i*20,80,20);

         g.drawString(Integer.toString(DrawStack[i]),80,215-i*20);

       }

       for (int i=0;(2) )         //显示被弹出的数据

         g.drawString(Integer.toString(PoppedOut[i]),200+i*20,100);

         g.drawString("堆栈",70,236);

         g.drawString("栈底",135,225);

         g.drawString("栈顶",160,225-StackCnt*20);

         g.drawString(msg,200,140);

     }

     public void actionPerformed( (3) )

     { if (e.getAct ionCommand () == "压栈")  //压栈操作

       { if(StackCnt<10)

         { MyStack.push(new Integer( (4) ));

           DrawStack[StackCnt++]=Integer.parseInt(input.getText() );

           input.setText (" ");

         }

         else

           msg="输入数据过多,请先弹栈!"

         }

       else if (e.getActionCommand () == "弹栈") //弹栈操作

       { if( (5) )

         { StackCnt--;

           PoppedOut[PopCnt++]=[(Integer)(MyStack.pop())).intValue();

         }

         else

           msg="堆栈已空,不能再弹栈!";

       }

       repaint();

     }

    }

  2. 阅读以下应用说明、图和C++程序,将C++程序中(1)~(6)空缺处的语句填写完整。

      【说明】

     以下【C++程序】用于实现两个多项式的乘积运算。多项式的每一项由类Item描述,而多项式由类List描述。类List的成员函数主要有:

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

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

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

    【C++程序】

    #include <iostream.h>

    class List;

    class Item {

      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 << "输入多项式中的一项(系数、指数) :" << 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()

    { 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 *pL1,*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.1ist;

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

    { List L1,L2,L;

  3. 假设某应用程序开发工程(默认的工程名为“工程1”)已先后创建了名为Form01和Form02的两个窗体。为使窗体Form02成为运行该工程时的启动窗体,在开发过程应进行的操作过程如下。

     在工程对话框中,用鼠标右键单击“工程1(工程1)”,在选择[(8)]命令,系统弹出如图3-20所示的对话框。切换至图3-20的“通用”选项,在“(9)”下拉列表框中,选择“ (10)”。

  4. filFile.Pattern属性用于指定文件列表框中所显示的文件类型。若要同时显示*.jpg和*.gif两种文件类型,filFile.Pattern的属性值应如何设置?

  5. 若要在图3-19窗口(窗体名为frm001)中新增一个命令按钮,单击该命令按钮后,图像框所显示的图像就会成为此窗口的背景图像。请写出该命令按钮单击事件过程内的程序代码。

  6. 阅读以下应用说明及Visual Basic程序代码,根据要求回答问题1至问题4。

     [说明]

     某文件管理系统的图片浏览器如图3-19所示。运行程序时,用户只要通过驱动器列表框、目录列表框和文件列表框,选择文本文件所在的驱动器、文件夹及相应的文件名后,在图像框中将显示出相应的文件图像。

     在开发过程中,假设驱动器列表框名为drvFile,目录列表框名为 dirFile,文件列表框名为filFile,选择文件类型组合框名为cboFile,图像框名为IMG nClick=over(this) title=放大Show。

     

     图3-19 图片浏览器

     [Visual Basic程序]

     Private Sub Form_Load ()

       IMG nClick=over(this) title=放大Show.Stretch=True

       cboFile.Addltem "位图文件(*.bmp)"

       cboFile.Addltem "图标文件(*.ico)"

       cboFile.Addltem "图元文件(*.wmf)"

       cboFile.Addltem "JPEG文件(*.jpg)"

       cboFile.Addltem "GIF文件(*.gif)"

       cboFile.ListIndex = 0

        (1) 

     End Sub

     Private Sub drvFile_Change ()

        (2) 

     End Sub

     Private Sub dirFile_Change ()

        (3) 

     End Sub

     Private Sub cboFile_Click ()

        (4) 

         Case 0

           filFile. Pattern= "*.bmp"

         Case 1

           filFile. Pattern= "*.ico"

         Case 2

           filFile. Pattern= "*.wmf"

         Case 3

           filFile. Pattern= "*.jpg.

         Case 4

           filFile. Pattern= "*.gif"

       End Select

     End Sub

     Private Sub filFile_Click()

       If (5) Then

         IMG nClick=over(this) title=放大Show. Picture= LoadPieture(filFile. Path+ filFile.FileName)

       Else

         IMG nClick=over(this) title=放大Show. Picture= LoadPicture( (6) + "\" + (7) )

       End If

     End Sub

    请根据[说明]和图3-19的显示结果,从以下备选答案中为程序(1)~(7)空缺处选择正确的答案。

     [备选答案]

     A. filFile.path        B. dirFile.Path=drvFile.Drive

     C.Right(filFile.Path,1) = "\"  D.filFile.Pattern ="*.bmp"

     E.filFile.Path = dirFile.Path  F.filFile.FileName

     G.Select Case cboFile.ListIndex

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

    [说明]

     Kruskal算法是一种构造图的最小生成树的方法。设G为一无向连通图,令T是由G的顶点构成的于图,Kmskal算法的基本思想是为T添加适当的边使之成为最小生成树:初始时,T中的点互相不连通;考察G的边集E中的每条边,若它的两个顶点在T中不连通,则将此边添加到T中,同时合并其两顶点所在的连通分量,如此下去,当添加了n-1条边时,T的连通分量个数为1,T便是G的一棵最小生成树。

     下面的函数void Kruskal(EdgeType edges[],int n)利用Kruskal算法,构造了有n个顶点的图 edges的最小生成树。其中数组father[]用于记录T中顶点的连通性质:其初值为father[i]=-1 (i=0,1,…,n-1),表示各个顶点在不同的连通分量上;若有father[i]=j,j>-1,则顶点i,j连通;函数int Find(int father[],int v)用于返回顶点v所在树形连通分支的根结点。

    [函数]

    #define MAXEDGE 1000

    typedef struct

    { int v1;

     int v2;

    }EdgeType;

    void Kruskal(EdgeType edges[],int n)

    { int father[MAXEDGE];

     int i,j,vf1,vt2;

     for(i=0;i<n;i+ +) father[i]=-1;

     i=0;

     j=0;

     while(i<MAXEDGE && j<(1))

     { vf1=Find(father,edges[i].v1);

       vf2=Find(father,edges[i].v2);

       if((2))

       {(3)=vf1;

         (4);

         printf("%3d%3d\n",edges[i].v1,edges[i].v2);

       }

        (5);

     }

    }

    int Find(int father[],int v)

    { int t;

     t=v;

     while(father[t]>=0) t=father[t];

     return(t);

    }

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

     邻接表是图的一种顺序存储与链式存储结合的存储方法。其思想是:对于图G中的每个顶点 vi,将所有邻接于vi的顶点vj连成一个单链表,这个单链表就称为顶点vi的邻接表,其中表头称作顶点表结点VertexNode,其余结点称作边表结点EdgeNode。将所有的顶点表结点放到数组中,就构成了图的邻接表AdjList。邻接表表示的形式描述如下: #define MaxVerNum 100    /*最大顶点数为100*/

    typedef struct node{     /*边表结点*/

      int adjvex;       /*邻接点域*/

      struct node *next;   /*指向下一个边表结点的指针域*/ }EdgeNode;

    typedef struct vnode{    /*顶点表结点*/

     int vertex;       /*顶点域*/

     EdgeNode *firstedge;   /*边表头指针*/

    }VertexNode;

    typedef VertexNode AdjList[MaxVerNum];  /*AdjList是邻接表类型*/

    typedef struct{

      AdjList adjlist;     /*邻接表*/

      int n;          /*顶点数*/

    }ALGraph;           /*ALGraph是以邻接表方式存储的图类型*/

     深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。

     下面的函数利用递归算法,对以邻接表形式存储的图进行深度优先搜索:设初始状态是图中所有顶点未曾被访问,算法从某顶点v出发,访问此顶点,然后依次从v的邻接点出发进行搜索,直至所有与v相连的顶点都被访问;若图中尚有顶点未被访问,则选取这样的一个点作起始点,重复上述过程,直至对图的搜索完成。程序中的整型数组visited[]的作用是标记顶点i是否已被访问。

    [函数]

    void DFSTraverseAL(ALGraph *G)/*深度优先搜索以邻接表存储的图G*/

    { int i;

     for(i=0;i<(1);i++) visited[i]=0;

     for(i=0;i<(1);i++)if((2)) DFSAL(G,i);

    }

    void DFSAL(ALGraph *G,int i)  /*从Vi出发对邻接表存储的图G进行搜索*/

    { EdgeNode *p;

      (3);

     p=(4);

     while(p!=NULL)       /*依次搜索Vi的邻接点Vj*/

     { if(! visited[(5)]) DFSAL(G,(5));

       p=p->next;       /*找Vi的下一个邻接点*/

     }

    }

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

    [函数2.1说明]

     下面程序的功能是:将由键盘输入的某个十进制数转换成对应的R进制数并输出。这里R是 2到16的整数,由键盘输入。例如,输入n=128,base=13后的输出为9B。

    [函数2.1]

    #include <stdio.h>

    main()

    { char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

     int c[64],n,i=0,base;

     printf("Enter a number:");scaaf("%d",&n);

     printf("Enter new base:");scanf("%d",&base);

     do{c[i]=(1);

       i++;

       n=n/base;

     }while((2));

     printf("Transmit new base:");

       for(- -i;i>=0;- -i)printf("%c",(3));

    }

    [函数2.2说明]

     所谓回文字符中是指正序和逆序拼写相同的字符串,例如astrtsa,adgdtdgda等。下面函数int fun(char *str)的功能是判断字符串str是否是回文,当字符串是回文时,函数返回1,否则返回0。

    [函数2.2]

    int fun(char *str)

    { int i,j,l;

     for(i=0;str[i]! ='\0';i++);

     l=i/2;

     for(j=0,i- -;j<=1;(4))

     if((5)) return 0;

     return 1;

    }

  10. 阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。

    [说明]

     下面的流程图用于统计一个英文句子中单词的个数N。假设该英文句子中只含字母、空格和句点“.”,其中句点表示结尾,空格之间连续的字母串称为单词。

    [流程图]