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

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

阅读以下技术说明、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

1

阅读以下关于某绘图系统的技术说明、部分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;

 }

1

阅读以下应用程序说明和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 );

 }

1

阅读以下函数说明和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;

      }                          /*

1

阅读以下技术说明和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);

   }

 }