软件水平考试(初级)程序员下午(应用技术)模拟试卷23
-
对以上【Java源程序】进行运行测试,请将以下(9)、(10)空缺处的测试命令填写完整。
在本机运行WebServer程序,然后打开IE浏览器。
1)在IE地址栏中,输入请求“/index.html”页面的命令:(9)。
2)在IE地址栏中,输入关闭Web服务器的命令:(10)。
-
阅读以下技术说明、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
-
阅读以下关于某绘图系统的技术说明、部分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;
}
-
阅读以下应用说明及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
-
阅读以下应用说明及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
-
阅读以下应用程序说明和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 );
}
-
阅读以下函数说明和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;
} /*
-
阅读以下技术说明和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);
}
}
-
图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)
}
-
假设《应试捷径—典型考题解析与考点贯通(系统分析师考试)》书籍标准书号前9个数字为 7-121-04715,请写出其对应的校验码。
-
阅读以下标准书号校验码的技术说明和程序流程图,根据要求回答问题1至问题3。
[说明]
为实现图书的国际统一编码,便于实现计算机化的图书管理,每本正式出版的图书都印有国际标准书号。标准书号由“ISBN”、10个数字(0-9)组成,其格式如下。
ISBN 组号-出版者号-书名号-校验码
其中,校验码是根据前面9个数字计算得到的,用于计算机自动校验。假设标准书号的10个数字依次是a(1),a(2),…,a(10),则校验码a(10)的设置应使S=1O*a(1)+9*a(2)+8*a(3)+…+1*a(10)能被11整除。如果校验码a(10)应设置成10,则规定以“X”表示之。
例如,《软件设计师考试考前冲刺预测卷及考点解析》的标准书号为:ISBN 7-121-05027-5。第1段上的数字“7”是国际ISBN中心分配给中国ISBN中心管理的组号;第2段上的“121”表示电子工业出版社。标准书号的校验过程如图3-16所示,计算校验码的过程如图3-17所示。其中,Mod(S,11)表示S除以 11得到的余数。
请根据标准书号校验码的说明,将图3-16和图3-17程序流程图中(1)-(4)空缺处的内容填补完整。