一起答

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

  • 卷面总分:75分
  • 浏览次数:0
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:17次
  • 作答时间:150分钟
试卷简介
部分试题预览
  1. 对以上【Java源程序】进行运行测试,请将以下(9)、(10)空缺处的测试命令填写完整。

     在本机运行WebServer程序,然后打开IE浏览器。

     1)在IE地址栏中,输入请求“/index.html”页面的命令:(9)。

     2)在IE地址栏中,输入关闭Web服务器的命令:(10)。

  2. 阅读以下技术说明、Java源程序和运行测试部分,根据要求回答问题1和问题2。

     【说明】

     1.HTTP

       ◆ HTTP请求消息示例

       GET/index,htmlHTTP/1.1

       Accept:image/gif,image/jpeg,*/*

       Accept-Language:zh-ch

       Accept-encoding:gzip,deflate

       User-Agent:Mozilla/4.0(compatible: MSIE6.0;Windows 2003)

       Host:localhost:8080

       Connection:Keep-Alive

       ◆ HTTP响应消息示例

       HTTP/1.1 200 OK

       Servert:Microsoft-IIS/6.0

       Date:Mon,3 Jan 2008 13:13:33 GMT

       Content-Type:text/html

       Last-Modified:Mon,11 Jan 2008 13:23:42 GMT

       Contelit-Length:112

       <html>

       ...

       </html>

     2.相关类及主要成员函数

       ◆ ServerSocket类

       服务器端套接字,它监听固定端口,以接收来自客户端的连接请求,一旦建立连接就返回一个Socket类型的对象,类中的主要成员函数如表6-16所示。

    ◆Socket类   基于连接的套接字,类中的主要成员函数如表6-17所示。

    【Java源程序:一个简单的Web服务器】

     /* WebScrvc.java */

     packageobjclass;

     import java.net.*;

     import java.io.*;

     public class WebServer{

       public static final int PORT=8080;   //Web服务器侦听的端口号

       public static final String WEB_ROOT= SyStem.getProperty("user.dir")+

                         File.separator+"webroot";

       //WEB_ROOT变量存放Web服务器工作目录,HTML, GIF图片等静态文件资源

       private static final String SHUTDOWN_COMMAND="/shutdown";

       //SHUTDOWN_COMM_AND变量保存关闭服务器的命令

       private Boolean shutdown=false;     //是否收到关闭服务器命令的标志

       public static void main(Sting[] args) {

         WebServer server=new WebServer();

         Server.await ()

       }

       public void await() {

         ServerSocket serverSocket = null;

         try {

           serverSocket = new (1);

           //创建侦听端口号为PORT的ServerSocket类型的对象

           System.out.println ("WebServerStarted!");

         }

         catch(IOException e) {

           e.printStackTrace ();

           SyStem. exit (1);

         }

         while(!shutdown) {                 //循环等待客房端连接

           Socket socket = null;

           InputStream input = null;

           OutputStream utput = null;

           try{

             Socket =(2);              //创建来自客房端的连接套接字

             Input = socket.(3);          //创建输入流

             utput = socket.(4);          //创建输出流

             Request reque

  3. 阅读以下关于某绘图系统的技术说明、部分UML类图及C++程序,将C++程序中(1)~(6)空缺处的语句填写完整。

      【说明】

     某绘图系统存在Point、Line和Square这三种图元,它们具有Shape接口,图元的类图关系如图5-10所示。

                             

     现要将Circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供XCircle类,且完全满足系统新增的Circle图元所需的功能,但XCircle不是由Shape派生而来,它提供了的接口不被系统直接使用。【C++代码5-1】既使用了XCircle又遵循了Shape规定的接口,即避免了从头开发一个新的Circle类,又可以不修改绘图系统中已经定义的接口。【C++代码5-2】根据用户指定的参数生成特定的图元实例,并对它进行显示操作。

     该绘图系统定义的接口与XCircle提供的显示接口及其功能如表5-13所示。

    【C++代码5-1】

     class Circle: public (1) {

      Private;

        (2) m_circle;

      Public;

        void display(){

          m_circle. (3) 

      }

     };

     【C++代码5-2】

     class Factory{

     public;

      (4) getShapeInstance(int type){  //生成特定类实例

       Switch(type){

        case 0: return new Point;

        case 1: return new Rectangle;

        case 2: return new Line;

        case 3: return new Circle;

        default: return NULL;

       }

      }

     };

     void main(int argc, char *argv[]){

      if(argc !=2){

       cout<<"error parameters!"<<endl;

       return;

      }

      int type=atoi(argv[1]);

      Factory factory;

      Shape *s;

      s=factory.(5);

      if(s==NULL){

      cout<<"Error get the instance!"<<endl;

      return;

      }

      s->display();

       (6);

      Return;

     }

  4. 阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。

     【说明8.1】

     以下程序的功能是:生成20个200~300之间的随机整数,输出其中能被5整除的数并求出它们的和。

     【程序代码8.1】

      Private Sub Command1_Click()

       For i=1 To 20

         x=Int((1)*200+100)

         If (2)=0 Then

           Print x

           S=S+ (3) 

         End If

       Next i

       Print"Sum=";S

     End Sub

     【说明8.2】

     程序8.2运行后,单击窗体,则在窗体上显示的内容是:a=(4)和b=(5)。

     【程序代码8.2】

      Private Sub Form_Click()

       Dim a As Integer,b As Integer

       a=20:b=50

       p1 a,b

       p2 a,b

       p3 a,b

       Print"a=";a,"b=";b

     End Sub

     Sub p1(x As Integer, ByValy As Integer)

       x=x+l0

       y=y+20

     End Sub

     Sub p2(ByVal×As Integer, y As Integer)

       x=x+l0

       y=y+20

     End Sub

     Sub p3(ByVal×As Integer, ByVal y As Integer)

       x=x+10

       y=y+20

     End Sub

  5. 阅读以下应用说明及Visual Basic部分程序代码,将应填入(n)处的字句写在对应栏内。

     【说明】

     该应用程序是用来求一元二次方程和一元一次方程的,其运行如图2所示。

    当用户在对应方程系数的文本框(txt1、txt2和txt3)中输入数值后,单击“解方程”按钮 (cmdcalculate),解方程并将解显示在Ⅺ和K2对应的文本框中(txt4和txt5)中。若是一个一元一次方程,只显示在X1对应的文本框中,若无解则弹出对话框。下面的代码是“解方程”按钮的Click事件的代码。

     【程序代码】

     Private Sub (1) ()

       a=Val(Txt1.Text):b=Val(Txt2.Text);c=Val(Txt3.Text)

      If a =0 Then

       If b = 0 Then

         MsgBox"方程无解!",vbOKOnly,"提示"

         Txt4.Text=" "

         Txt5.Text=" "

       Else

         Txt4.Text=(2) 

         Txt5.Text=" "

       End If

     Else

       delta=(3) 

       If (4) Then

         MsgBox"方程无解!",vbOKOnly,"提示"

         Txt4.Text=" "

         Txt5.Text=" "

       Else

         Txt4.Text=Str $ (((-1) * b + Sqr(delta))/(2 * a))

         Txt5.Text=(5) 

       End If

      End If

     End Sub

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

     [说明]

     以下[C程序]是对某电码明文(原文)进行加密形成密文。其加密算法如下。

     假定原文为C1C2C3……Cn,加密后形成的密文为S1S2S3……Sn其中n为小于256的任意自然数。首先读入正整数Key(Key>1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如图4-12所示。

     

     图4-12 密文字符环示意图

     加密时从S1位置起顺时针计数,当数到第Key个字符位置时,将原文中的字符放入该密文字符位置中,同时从环中除去该字符位置;接着从环中下一个字符位置起继续计数,当再次数到第Key个字符位置时,将原文中字符C2放入其中,并从环中除去该字符位置;依此类推,直至n个原文字符全部放入密文环中。由此产生的S1S2……Sn即为原文的密文。

     例如,原文:One World One Dream。当Key=5时,其密文为:me OnWlanD oOedrer;当Key=6时该原文的密文为:oeDn OedrrOn Wma le。程序使用示例如图4-13所示。

     

     图4-13 程序使用示例

     在[C程序]中,将电码的原文存入字符数组old[],加密钥匙存入在整数变量Key中。函数decode用于将原文old加密并返回密文字符数组的首指针。其中,函数采用一个双向循环链表CODE来表示密文环。函数strlen用于计算一个字符串中个数(不包括字符串结尾符'\0\)。为了简单起见,程序中假设内存容量足以满足动态存贮单元分配的要求。

     [C程序]

     #include <stdio.h>

     #include <alloc.h>

     #define CR 13

     typedef struct node{

       char ch;

       struct node *forward;     /* Link to next node. */

       struct node *backward;    /* Link to previous node.*/

     } CODE;

     main()

     {  char (1), old[256];

        int strlen () , key , num=0;

        printf("\n Please input the telegraph:\n")

        while (num<255 && (old[num++] = getch() != CR );

          old [(2)] = '\0';

        do

        {  printf("\n Please input Key=?(Key>1):");

          scanf ("%d",& key);

        } while (key<=1);

        printf("\n The decode of telegraph: '%s' is:\n '%s'\n", old, decode (old, key));

     char *decode(old, key);

     char *old;

     int key;

     {  char *new;

        int length, count, i;

        CODE *loop,*p;

        length=strlen (old);

        loop=( (3) ) malloc (length*sizeof (CODE));

        for (i = 1;i<length-1;i++)

        {  loop[i].forward = &loop[i+1];

          loop[i].backward = &loop[i-1];

        }

        loop[0].backward = &loop[length-1];

        loop[0].forward = &loop[1];

        loop[length-1].forward = loop;

        loop[length-1].backward = &loop[length-2];

        for (p = loop, i = 0;i<length; i++)

        {  for (count = 1;count<key; count++)

            p=(4);

          p->ch=*old++;

          p->backward->forward =(5);

          p->forward->backward =(6);

          p=p->forward;

        }

        new = (char *) malloc((length+1 *sizeof(char));

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

          new[i] = loop[i].ch;

        new[length]='\0';

        return (new)

     }

     int strlen(s)

     char *s;

     {  int len = 0;

        while ((7) !='\0')

          len++;

        return( len );

     }

  7. 阅读以下函数说明和C代码,将C程序中(1)~(5)空缺处的语句填写完整。

      [说明]

     函数int Toplogical (LinkedWDigraph G)的功能是对图G中的顶点进行拓扑排序,并返回关键路径的长度。其中,图G表示一个具有n个顶点的AOE-网,图中顶点从1~n依次编号,图G的存储结构采用邻接表表示,其数据类型定义如下。

     typedef struct Gnode{       /* 邻接表的表节点类型 */

       int adjvex;          /* 邻接顶点编号 */

       int weight;          /* 弧上的权值 */

        struct Gonde*nextare;    /* 指示下一个弧的节点 */

     } Gnode;

     typedef struct Adjlist {    /* 邻接表的头节点类型 */

       char vdata;         /* 顶点的数据信息 */

       struct Gnode*Firstadj;   /* 指向邻接表的第一个表节点 */

     }Adjlist;

     typedef struct LinkedWDigraph{ /* 图的类型 */

       struct Adjlist head;    /* 指向图中第一个顶点的邻接表的头节点 */

     } LinkedWDigraph;

     例如,某AOE-网如图4-14所示,其邻接表存储结构如图4-15所示。

     

     [函数]

     int Toplogical(LinkedWDigraph G)

     {  Gnode *p;

        int j, w, top=0;

        int Stack,*ve, *indegree;

        ve=(int *)mallloc(G.n+1)*sizeof(int));

        indegree=(int*)malloc((G.n+1)*sizeof(int)); /* 存储网中个顶点的入度 */

        Stack=(int*)malloc((G.n+1)*sizeof(int));  /* 存储入度为0的顶点的编号 */

        if(!ve || !indegree ||!Stack)

          exit(0);

        for(j=1;j<=G.n;j++){

          ve [j]=0;

          indegree[j]=0;

        }                     /* for */

        for (j=1;j<=G.n; j++) {          /* 求网中各顶点的入度 */

          p=G.head[j].Firstadj;

          while (p) {

            (1);

            p=p->nextarc;

          }                   /* while */

        }                     /* for */

        for (j=1; j<=G.n; j++)          /* 求网中入度为0的顶点并保存其编号 */

          if (!indegree[j])

            Stack[++top]=j;

        while (top>O) {

          w=(2);

          printf("%c", G.head[w].vdata);

          p=G.head[w].Firstadj;

          while (p) {

            (3);

            if (!indegree[p->adjvex])

              Stack[++top]=p->adjvex;

            if ( (4) )

              Ve[p->adjvex]=ve[w]+p->weight;

            P=p->nextarc;

          }                          /*

  8. 阅读以下技术说明和C代码,将C程序中(1)~(5)空缺处的内容填写完整。

      [说明]

     某种传感器的输出值Ratio依赖于环境温度temp(-40℃≤temp≤50℃)。对一组环境温度值(ITEMS个),已经测量得到了相应的Ratio值(如表4-10表格所示)。表4-10粗略地描述了曲线Ratio(temp)。

    校正系数K是Ratio的倒数,因此也依赖于环境温度temp。在数据处理中,需要用更多的列表值细致地描述曲线K(temp),如表4-11所示。

    在表4-11中,各温度值所对应的K值是对表4-10进行线性插值再求倒数得到的,具体的计算方法如下。

     1) 根据temp值,在表4-10中用二分法查找;

     2) 若找到相应的温度值,则按相应的Ratio值求倒数得到K值;

     3) 若没找到相应的温度值,则可确定temp所在的温度区间[Tp1,Tp2],同时获得了相应的Ratio1和 Ratio2,再按如下公式计算K值:

     

     在程序中,当temp高于50℃或低于-40℃C时,设定K=0。

     [C程序]

     #include

     typedef struct {

       int Temp;      /* 环境温度 */

       double Ratio;    /* 传感器的输出值 */

     }CURVE;

     #define ITEMS 7

     double GetK(int Temp,CURVE *p,int n)

     { /* 用二分法在n个元素的有序表p中查找与Temp对应的传感器输出值 */

       int low, high, m;

       double Step;

       low = 0;

       high = n-1;

       if ((Temp<p->Temp) || (Temp>(p+high)->Temp))

       return 0.0;       /* 超出温度范围时返回 0.0 */

       while (low<=high)

       {  m=(1);

          if (Temp==(p+m)->Temp)

            return (2);

          if (Temp<(p+m) >Temp)

            high=m-1;

          else

            low=(3);

       }

       p+=high;

       Step=( (4) )/((p+1)->Temp-p->Temp);

       return 1.0/ (p->Ratio + Step*( (5) ) ;

     }

     void main()

     {  int Degree;

        double k;

        CURVE Curve [ITEMS]={{-40,0.2},{-20,0.60.},{-10,0.8},{0,1.0},{10,1.17},{30,1.50},{50,1.8}};

     printf ("环境温度 校正系数\n");

     for (Degree=-40;Degree<=50;Degree++)

       {  k=GetK ( Degree, Curve, ITEMS);

          printf("%3d %4.2f\n",Degree,k);

       }

     }

  9. 图3-16(或图3-17)中Mod(S,11)表示S除以11得到的余数。以下[C程序]实现不使用求余计算符号“%”,求取被除数p和除数q之间的余数。

     [C程序]

     static int fun(int p,int q)

     {  int x=0;

        while (x<=p)

        {  if (x == p)

            return 0;

           (5) 

        }

        return (6) 

     }

  10. 假设《应试捷径—典型考题解析与考点贯通(系统分析师考试)》书籍标准书号前9个数字为 7-121-04715,请写出其对应的校验码。