[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷23及答案与解析.doc

上传人:boatfragile160 文档编号:507368 上传时间:2018-11-29 格式:DOC 页数:22 大小:358KB
下载 相关 举报
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷23及答案与解析.doc_第1页
第1页 / 共22页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷23及答案与解析.doc_第2页
第2页 / 共22页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷23及答案与解析.doc_第3页
第3页 / 共22页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷23及答案与解析.doc_第4页
第4页 / 共22页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷23及答案与解析.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 23 及答案与解析 1 阅读以下标准书号校验码的技术说明和程序流程图,根据要求回答问题 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

2、)能被 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得到的余数。1 请根据标准书号校验码的说明 ,将图 3-16和图 3-17程序流程图中 (1)-(4)空缺处的内容填补完整。 2 图 3-16(或图 3-17)中 Mod(S, 11

3、)表示 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) 3 假设应试捷径 典型考题解析与考点贯通 (系统分析师考试 )书籍标准书号前9个数字为 7-121-04715,请写出其对应的校验码。 4 阅读以下技术说明和 C代码,将 C程序中 (1) (5)空缺处的内容填写完整。 说明 某种传感器的输出值 Ratio依赖于环境温度 temp(-40 temp50

4、 )。对一组环境温度值 (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所在的温度

5、区间 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;

6、 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; dou

7、ble 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.2fn“,Degree,k); 5 阅读以下应用程序说明和 C程序,将 C程序段中 (1) (7)空缺处的语句填写完整。 说明 以下 C程序 是对某电码明文 (原文 )进行加密形成密文。其加密算法如下。 假定原文为 C1C2

8、C3Cn ,加密后形成的密文为 S1S2S3Sn 其中 n为小于 256的任意自然数。首先读入正整数 Key(Key 1)作为加密钥匙,并将密文字符位置按顺时针方向连成一个环,如图 4-12所示。 图 4-12 密文字符环示意图 加密时从 S1位置起顺时针计数,当数到第 Key个字符位置时,将原文中的字符放入该密文字符位置中,同时从环中除去该字符位置;接着从环中下一个字符位置起继续计数,当再次数到第 Key个字符位置时,将原文中字符 C2放入其中,并从环中除去该字符位置;依此类推,直至 n个原文字符全部放入密文环中。由此产生的S1S2Sn 即为原文的密文。 例如,原文: One World O

9、ne 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 stdi

10、o.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), old256; int strlen () , key , num=0; printf(“n Please input the telegraph:n“) while (num 255 old (2) = 0; do printf

11、(“n Please input Key=?(Key 1):“); scanf (“%d“, while (key =1); printf(“n The decode of telegraph: %s is:n %sn“, 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 =

12、 1;i length-1;i+) loopi.forward = loopi.backward = loop0.backward = loop0.forward = looplength-1.forward = loop; looplength-1.backward = 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 = (

13、char *) malloc(length+1 *sizeof(char); for (i=0;i length; i+) newi = loopi.ch; newlength=0; return (new) int strlen(s) char *s; int len = 0; while (7) !=0) len+; return( len ); 6 阅读以下函数说明和 C代码,将 C程序中 (1) (5)空缺处的语句填写完整。 说明 函数 int Toplogical (LinkedWDigraph G)的功能是对图 G中的顶点进行拓扑排序,并返回关键路径的长度。其中,图 G表示一个具有

14、 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;

15、 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)*s

16、izeof(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; indegreej=0; /* for */ for (j=1;j =G.n; j+) /* 求网中各顶点的入度 */ p=G.headj.Firstadj; while (p) (1); p=p- nextarc; /* while */ /* for */ for (j=1; j=G.n;

17、j+) /* 求网中入度为 0的顶点并保存 其编号 */ if (!indegreej) Stack+top=j; while (top O) w=(2); printf(“%c“, G.headw.vdata); p=G.headw.Firstadj; while (p) (3); if (!indegreep- adjvex) Stack+top=p- adjvex; if ( (4) ) Vep-adjvex=vew+p- weight; P=p- nextarc; /* while */ /* while */ return (5); /* Toplogical */ 7 阅读以下应用

18、说明及 Visual Basic部分程序代码,将应填入 (n)处的字句写在对应栏内。 【说明】 该应用程序是用来求一元二次方程和一元一次方程的,其运行如图 2所示。 当用户在对应方程系数的文本框(txt1、 txt2和 txt3)中输入数值后,单击 “解方程 ”按钮 (cmdcalculate),解方程并将解显示在 和 K2对应的文本框中 (txt4和 txt5)中。若是一个一元一次方程,只显示在X1对应的文本框中,若无解 则弹出对话框。下面的代码是 “解方程 ”按钮的 Click事件的代码。 【程序代码】 Private Sub (1) () a=Val(Txt1.Text):b=Val(T

19、xt2.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

20、) End If End If End Sub 8 阅读以下应用说明及 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运行后,单击窗体,则在

21、窗体上显示的内容是: 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(ByValAs Integer, y As Integer) x=x+l0 y=y+20 End Sub Sub p3(ByValAs Integer, ByVal

22、 y As Integer) x=x+10 y=y+20 End Sub 9 阅读以下关于某绘图系统的技术说明、部分 UML类图及 C+程序,将 C+程序中 (1) (6)空缺处的语句填写完整。 【说明】 某绘图系统存在 Point、 Line和Square这三种图元,它们具有 Shape接口,图元的类图关系如图 5-10所示。 现要将 Circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供 XCircle类,且完全满足系统新增的 Circle图元所需的功能,但 XCircle不是由 Shape派生而来,它提供了的接口不被系统直接使用。【 C+代码 5-1】既使用了 XCircl

23、e又遵循了 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 ty

24、pe) /生成特定类实例 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(argv1); Factory factory; Shape *s; s=factory

25、.(5); if(s=NULL) cout “Error get the instance!“ endl; return; s-display(); (6); Return; 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: MSIE

26、6.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类 服务器端套接字,它监听固定端口,以接收来自客户端的连接请求

27、,一旦建立连接就返回一个 Socket类型的对象,类中的主要成员函数如表 6-16所示。 Socket类 基于连接的套接字,类中的主要成员函数如表 6-17所示。【 Java源程序:一 个简单的 Web服务器】 /* WebScrvc.java */ packageobjclass; import .*; import java.io.*; public class WebServer public static final int PORT=8080; /Web服务器侦听的端口号 public static final String WEB_ROOT= SyStem.getProperty(

28、“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.awa

29、it () 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;

30、 OutputStream output = null; try Socket =(2); /创建来自客房端的连接套接字 Input = socket.(3); /创建输入流 Output = socket.(4); /创建输出流 Request request = new Request (input); /创建 request对象 Request.(5); /解析客户端 HTTP请求 Response response = new ReSponse(output); /创建 Response对象 response, setRequest (request); /将 request对象传递给

31、 response对象 response.(6); /给客户端发送所请求的静态资源 (7); /关闭连接套接字 shutdown = request.(8).equals (SHUTDOWN_COMMAND); /凑数当前 HTTP请求中的 URL是否是关闭服务器命令 Catch(Exception e) e.printStackTrace (); continue; /* Request.java */ package objclass; import java.io.InputStream; import java.iO.IOException; public Class Request

32、private InputStream input; private String url; public Request(InputStream input)this.input = input; public void parse() . parseUrl() ;. /解析客户端 HTTP请求消息 private String parseUrl(String requestString). /解析客户端 HTTP请求中的URL public String getUrl()return url; /* Response.java */ package objclass; import jav

33、a.io.*; public class Response private static final int BUFFER_ SIZE=1024; Request request; OutputStream output; public Response(Output Strearm output) this.output=output; public void setRequest(Request request)this.request=request; public void sendStaticResource()throwsIOmxception. /向客户端发送所请求的静态资源 1

34、0 请将以上【 Java源程序】中的 (1) (8)空缺处的内容填写完整。 11 对以上【 Java源程序】进行运行测试,请将以下 (9)、 (10)空缺处的测试命令填写完整。 在本机运行 WebServer程序,然后打开 IE浏览器。 1)在 IE地址栏中,输入请求 “/index.html”页面的命令: (9)。 2)在 IE地址栏中,输入关闭 Web服务器的命令: (10)。 软件水平考试(初级)程序员下午(应用技术)模拟试卷 23 答 案与解析 1 【正确答案】 制订标准书号的目的是实现图书的国际统一编码,以便于实现计算机化的图书管理,使出版社内的医书管理、书库中的图书管理及书店的图书

35、销售管理具有更高的工作效率和管理水平。标准书号由 “ISBN”, 10个数字 (0-9)组成,采用 “ISBN 组号 出版者号 书名号 校验码 ”的格式。其中,出版者号规定为 2-7位数字。对较大的出版社分配比较短的码,留出较长的书名号为更多的书进行编码。 标准书号的最后一位是校验码。设置校验码可以大大减少录入错误造成的管理混乱。校验码一般由计算机程序产生 。当操作人员录入前 9个数字后,计算机就会自动启动计算校验码的过程,输出正确的校验码。在书店 (或书库 ),不论是建库还是查询检索,在手工输入带校验码的标准书号后,计算机就会自动启动校验过程,判断是否输入错误。 在图 3-17计算校验码的过

36、程中,首先要计算部分 S值,即 S=10*a(1)十9*a(2)+8*a(3)+2*a (9) 。此时需要使用循环处理。在循环开始之前,应设置初始值 S=0。在循环体内,应执行语句 “S+=(11-I) *a(I)”或 “S+=(1+I)*a(10-I)”(注意,其中的乘号 “*”不 要丢失 )。该循环应对循环变量 I=1 9进行 (步长默认为 1)控制,因此, (2)空缺处应填入 “9”, (3)空缺处所填写的内容是 “S+(11-I)*aI- S”或“S+(1+I)*a(10-I)- S”。 接着再计算该 S值除以 11的余数 R。显然 0R10。 由于 “校验码 a(10)的设置应使 S

37、=10*a(1)+9*a(2)+8*a(3)+1*a(10) 能被 11整除 ”,即余数 R与校验码之和应能被 11整除,因此校验码应等于 MOD(11-R, 11),即 (4)空缺处所填写的内容是“MOD(11-R, 11)”。若读者在该空缺处填写 “MOD(11-R)”,则是没有考虑 R=0这一情况。当校验码等于 10时,还应以符号 表示。 在对标准书号的校验过程 (图 3-16)中,首先要将校验码为 的情况转换成数据10,以 便于后续计算。为了计算 S=10*a(1)+9*a(2)+8*a(3)+1*a(10) ,需要使用循环处理。在循环开始之前,应设置初始值 S=0,循环变量 I从 1

38、到 10(步长默认为 1)。在循环体内,应执行语句 “S+ (11-I)*a(1)”或 “S+ I*a(11 -I)”。因此 (1)空缺处所填写的内容是 “(11-I)*a(I)”或 “I*a(11-I)”。 在图 3-16中,计算出 S值之后,还应判断 S除以 11的余数是否为 0。若余数为0,说明 S能够被 11整除,表示校验结果正确;若余数不为 0,则说明输入的标准书号 有错 (可能是校验码输入有错,也可能是前面的数字输入有错 )。此时计算机应输出相应的错误提示信息,提醒信息录入人员仔细校对改正。 2 【正确答案】 不使用求余计算符号 “%”,求取被除数 p和除数 q之间的余数的 C程序

39、如下。 C程序 1 static Int fun_Mod(int p, int q) int x=0; while (x =p) if (x = p) return 0; X += q; return q-(x-p); C程序 2 int fun_Mod(int p, int q) while(p q) if (x = p) return 0; p -= q; return p; 3 【正确答案】 由题干说明可知,校验码可以是 0 9的数宁或者是符号 “”。软件设计师考试考前冲刺预测卷及考点解析的标准书号为: ISBN7-121-05027-5。该标准书号的校验过程如下。 余数为0,说明输入的

40、标准书号正确。 结合 问题 1要点解析思路,若应试捷径 典型考题解析与考点贯通 (系统分析师考试 )书籍标准书号前 9个数字为 7-121-04715,则其对应的校验码 a(10)的计算过程如下。 1) S1=1Oa(1)+9a(2)+8a(3)+7a(4)+6a(5)+5a(6)+4a(7)+3a(8)+2a(9) =107+91+82+71+60+54+47+31+25=163 2) 由于 =14.9,因此R=Mod(163,11)=9。 3) a(10)=Mod(11-R, 11)=Mod(2, 11)=2 4 【正确答案】 这是一道要求读者掌握线性插值计算及二分查找算法的 C语言程序设

41、计题。本题的解答思路如下。 1) 试题中已给出函数 GetK(intTemp,CURVE *p,int n)用二分法在 n个元素的有序表 p中查找与 Temp对应的传感器输出值,表中的元素已经按照温度有序排列。 2) 结合本题的应用背景,二分查找算法是指先计算表的 中间位置,即 (low+high)/2,若待查元素等于中间位置上的元素,则查找成功并结束查找过程;若待查元素大,则在后半区间 (m+1,high)继续进行二分查找:否则,在前半区间 (low, m-1)进行二分查找,如图 4-17所示。本试题中low=0, m=3, high=6。 图 4-17 二分查找算法示意图 1 3) 以查找

42、温度值 20 C为例,由于 20 0 ,因此设置下一个查找区间为 (m+1,high),即 4, 6,如图 418所示。 图 4-18 二分查找算法示意图 2 4) 由于 20 30 , 因此取 high等于 m-1,即下一个查找区间为 (low,m-1),即 4, 5。再进一步分析,由于 20 10 ,因此取low等于 m+1,即再下一个查找区间为 5, 5。而查找区间 5, 5上的数据 3020,至此可确定此次查找失败,即如图 4-19所示。 图 4-19 二分查找算法示意图 3 5) 由以上分析可知, (1)空缺处应填入“(low+high)/2”。 6) 程序中 “if(Temp=(p

43、+m)- Temp)”语句用于判断是否找到相应的温度值,若找到,则执行 “return (2)”语句以返回相应温 度的校正系数 K。由试题关键信息 “若找到相应的温度值,则按相应的 Ratio值求倒数得到 K值 ”可推理出,(2)空缺处应填入 “1.0/(p+m)- Ratio”。 7) 当 “if(Temp=(p+m)- Temp)”语句的判断条件不满足时,将执行 “if(Temp (p+m)- Temp)”判断语句。若待查元素小,将执行 “high=m-1;”语句,即在前半区间 (low,m-11)进行二分查找。若待查元素大,则在后半区间 (m+1,high,继续进行二分查找,因此 els

44、e语句中则需将 “low”指针向上移动,即执 行 “low=m+1”语句。 8) 根据题干中给出的计算式子“Step= ”,以及题目中要求线性插值再求倒数得到 K值可推理出 (4)空缺处应填入 “(p+1)- Ratio-p- Ratio”。 9) 同理,根据题干中给出的计算式子“ ”可推理出, (5)空缺处应入 “Temp-p-Temp”。 5 【正确答案】 本案例是对一字符串根据正整数 key进行加密处理。 C程序中原文存放在数组 old中,用函数 decode(old, key)将原文 old加密成密文,并返回存放密文字符数组的首指针。了解加密算法和存放原文与 密文的数据结构及完成加密功

45、能的函数名称后,再仔细阅读程序,分析给出的语句在加密过程中的作用,就能逐步求得解答。 主函数 main用来接收输入参数并输出加密结果。仔细阅读程序,可知加密函数decode在 main之后定义而被 main引用,在引用前应给予说明。因此 (1)空缺处是用来说明函数 decode的,其所填入的内容是 “*decode()”。 主函数中用 while循环语句读入原文并存放在数组 old中,控制条件是已接收255个字符或回车符。在 C语言中规定,一个字符串数据总是以 0为结束标志。在接 收字符过程中,变量 num总是指向下一个要接收的字符存放位置。如果已接收 255个字符,就应该把 0放入 old2

46、55;如果遇到回车符,因其不是原文字符,则应该把 0放入 oldnum-1中。因此 (2)空缺处需要使用 C语言中的条件语句来完成相应的功能,该空缺处所填入的内容是 “(num=255)?num:num-1”。 函数 decode把存放在 old中的原文按 key值进行加密,加密结果存放在以 new为首地址的字符串中,并将该地址返回。这此信息可从函数一开始的 “char *decode(old, key)”和函数结束处的 “return (new); ”得知。函数 decode中调用另一个函数 length(old),以计算数组 old中的字符个数,并利用此长度去分配存储空间。该存储空间用于存

47、放密文,空间的首地址指针为 loop,类型为 CODE。借鉴语句 “new=(char *)malloc(length+1) *sizeof(char); ”可得, (3)空缺处所填入的内容是“CODE*”,使之成为待加密的双向环状链表。 在函数 decode中,对待加密的双向环状链表加密之后,利用 for循环语句找出应从环 中去除字符的位置,因此 (4)空缺处所填入的内容是 “p- forward”,使指针 p指向下一个节点。按题干说明的加密算法,应把 *old放入该节点,并要把该节点从双向链表中删除。 (5)、 (6)即为将该节点从链表中脱钩,节点本身仍然存在,可以通过 loopi的形式取其密文。因此 (5)、 (6)空缺处所填入的内容分别是 “p-forward”和 “p- backward”。 函数 strlen的功能是计算字符串的长度。它先取字符串进行判别,即是否为字符串的结束标志 0,是则结束;否则应使 S指向该串的下一个字符 ,同时计数器加1。因此 (7)空缺处所填入的内容是 “*s+”。 6 【正确答案】 这是一道要求读者掌握数据结构中拓扑排序和求关键路径问题的算法分析及设计题。本题的解答思路如下。 AOE-网 (Activity On Edge network,边表示活动的网 )是一个带权的有向无环图,其中顶点表示事件,弧表示活动,权表示活动持续的时

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1