1、COBOL经典面试题库中文资料仅供参考COBOL经典面试题库Q1:列举COBOL的DEVISIONA1:标识部,环境部,数据部,过程部Q2:COBOL有哪些可用的数据类型A2:字符型(这里指的是包含字母和数字),字母型,数字型Q3:INITIALIZE这个词做了些什么A3:将字母,字符,数字区域都置成空格(置空),将数字区置0, FILLER和OCCURS DEPENDING ON项不处理Q4:77层有什么作用A4:基本层数据项,不能用做细分别的层,也不能被细分(来源:)Q5:88层有什么作用A5:条件逻辑层Q6:66层有什么作用A6:重命名层Q7:IS NUMERIC这个子句怎么确定(也就是
2、说确定句子的真值)A7:IS NUMERIC用在字符项,带符号数字,浮点数,不带符号数。如果目标项只含09则返回TRUE。可是,如果待测项目是个带符号数,那么她就含有0-9还有+和-05 ARRAY1 PIC X(9) OCCURS 10 TIMES.05 ARRAY2 PIC X(6) OCCURS 20 TIMES INDEXED BY WS-INDEXQ8:COBOL中怎么建表/数组A8:如上.Q9:OCCURS 子句能用在第一层吗A9:不能Q10:索引和下标有什么区别A10:下标能够指定数组中任意中位置的元素(只要知道其下标),下标只能是数字型常量或者数字型变量(可是不能在指定的时候修
3、改,如:A(K+1)这样是不行的,要修改的话要在指定的外部改,如:ADD 1 TO K,而索引的话是从表头/数组头开始检索(以BY N的指定检索规律往后滚)再者,索引只能经过PERFORM, SEARCH 和SET来修改,如果要在一个表中使用SEARCH, SEARCH ALL,那这个表就要有索引(因为SEARCH, SEARCH ALL的参数中指定索引,因此即使其有很多限制还是得用它)Q11:SERACH和SERACH ALL有什么区别A11:SEARCH是顺序查找SERACH ALL 是2叉查找(相信数据结构学过2叉树的都不会陌生),在使用SEARCH ALL前表必须有一个递增/递减的KE
4、Y,而且表已经按照其KEY值排序了,这样才能使用SEARCH ALLQ12:为了使用SEARCH ALL,存贮顺序是怎么样的A12:她必须是递增或者是递减的,默认地政。如果你想在一个递减顺序存贮的表/数组使用搜索的话,那么当定义表/数组的时候你应该加一个DESCENDING KEY子句(这之前表要已经按指定的顺序排序了)Q13:什么是2叉查找A13:将你要找的目标项与数组的正中项比较,找到就结束搜索,没找到则继续如此循环(比较下一个中值),取哪一半取决于目标值大于中值还是小于中值PS:联想2叉树的查找规律就很好理解,因为所谓的“表“本身也就是数组Q14:我的程序有个数组定义了10项。因为有个B
5、UG,我发现即使访问第11项,程序也不异常终止。那是出了什么问题A14:必须使用编译器的一个选项SSRANGE,如果你想检查数组的超界问题。默认是NOSSRANGEQ15:怎么在一个COBOL程序中排序?给出排序文件的定义,排序语法和意思A15:语法就是SORT file-1 ON ASCENDING/DESCENDING KEY key. USING file-2 GIVING file-3.USING后程序的输入接口,这个地方能够替换成一个输出过程,也就是说写一个过程往USING这个接口中导数据(要在这个过程中READ,AT END,),这个过程在将数据释放到执行排序的文件中之前执行,GI
6、VING后是输出借口,用法类似。此例中输入文件是file-2输出文件是file3(这样个文件必须在文件区中用FD和在文件控制中用到SELECT)真正执行排序的file-1,这里需要注意的是file-1中的文件区不能用FD,应该用SD,file-2和3还是一样(用FD),具体能够看一下书上的例子Q16:怎么在JCL中定义一个排序文件来跑这个COBOL程序A16:用SORTWK01, SORTWK02,.作为DATA SET NAME。用多少取决于你要排序的数量,可是至少3个。Q17:执行一个区和一个段有什么区别A17:简单来说的话就是区的概念比段大,执行一个区就要执行其内部所有段,执行段的话只执
7、行该段。Q18:EVALUATE语句有什么作用A18:EVALUATE就象个CASE语句(多重开关语句,学过C的总知道吧),不同点在于EVALUATE不需要BREAK,一旦匹配就跳出EVALUATE语句了Q19) What are the different forms of EVALUATE statement?A19)EVALUATE EVALUATE SQLCODE ALSO FILE-STATUSWHEN A=B AND C=D WHEN 100 ALSO 00imperative stmt imperative stmtWHEN (D+X)/Y = 4 WHEN -305 ALSO
8、32imperative stmt imperative stmtWHEN OTHER WHEN OTHERimperative stmt imperative stmtEND-EVALUATE END-EVALUATEEVALUATE SQLCODE ALSO A=B EVALUATE SQLCODE ALSO TRUEWHEN 100 ALSO TRUE WHEN 100 ALSO A=Bimperative stmt imperative stmtWHEN -305 ALSO FALSE WHEN -305 ALSO (A/C=4)imperative stmt imperative s
9、tmtEND-EVALUATE END-EVALUATEQ20:怎么跳出一条EVALUATE语句A20:象18题目说的那样,一旦匹配了某一个“WHEN“语句就自动跳出了,不需要什么额外的代码来跳出Q21:在一个EVALUATE语句的某个WHEN分支中能否再插入复杂的情况(也就是嵌套)A21:当然能够,当多个参数作为控制变量的时候1个WHEN内部能够嵌套更多的情况Q22:什么是结束终止符A22:结束终止符是搭配一些范围指令的,也就是标识一些范围指令的结束。如:EVALUATE, END-EVALUATE; IF, END-IF 如果没有该结束符,该条语句将终止不了Q23:怎么使用内嵌的PERFO
10、RMA23:PERFORM END-PERFORM所谓内嵌也就是PERFORM被嵌在某些比如循环语句中担当执行主体,同时经过UNTIL来指定结束判定Q24:什么时候使用内嵌式PERFORMA24:当该段PERFORM的内容不被其它段用到,只在某些局部代码中(当然PERFORM的主体所用到的参数也都是局部的,例如循环)使用,如果PERFORM主体的代码是一般的(用到了别的程序段的变量),还是使用PERFORM Para name这样的形式比较好(也就是相对与内于PERFORM的外部PERFORM)。Q25:CONTINUE 和 NEXT SENTENCE有什么不同A25:两者比较相似,都是将程序
11、控制权交给下一句,可是用NEXT SENTENCE的时候,只有当碰到句结束符(就是句末的.)才会将执行下句这道题我用了2个例子测试了一下:1:IF TEST-NUMERIC 0THEN NEXT SENTENCEEND-IFDISPLAY LINE1 DISPLAY LINE2. DISPLAY LINE3.(请注意代码中的.号)结果输出:LINE32:IF TEST-NUMERIC 0THEN CONTINUEEND-IFDISPLAY LINE1 DISPLAY LINE2. DISPLAY LINE3.结果输出:LINE1LINE2LINE3相信已经区别已经比较明显了,NEXT SENT
12、ENCE是靠句末的结束符(也就是.)来判断下一句的,而CONTINUE是经过句头的保留字(这例中是DISPLAY)来判断下一句的Q26:EXIT语句有什么作用A26:什么都不做,如果用到的话,肯定是作为一段的唯一的一句话,注意:这里不是子程序中用的EXIT PROGRAME01 WS-TOP PIC X(1)01 WS-TOP-RED REDEFINES WS-TOP PIC X(2).If you MOVE 12 to WS-TOP-RED,DISPLAY WS-TOP will show 1 whileDISPLAY WS-TOP-RED will show 12.Q27:能不能把X(10
13、0)的区域重定义成X(200)A27:能够,重定义只是相当于把两个区域的首地址放在一起,从上面这个例子也很好理解Q28:能不能把X(200)的区域重定义成X(100)A28:能够,原因同上Q29:怎么解决SOC-7错误A29:基本上你要看一下一些比较奇怪的数据,很多导致SOC7的原因都是因为数据项的初始化。首先检查所有的可能性。某些功能可能提供一个空间用来存贮那些运行时间ABEND,而且提供最近一次运行时间ABEND的偏移量的说明(也就是位于队列中的位置),检查编译器的输出XREF队列以获得一些关键字。然后你就能看下源代码找出BUG。为了捕获一些运行时间的信息,你需要在JCL中建一个DATAS
14、ET(象SYSABOUT这样的),如果这些都没用,那么再审查一下ERROR出现的位置判断一下原因。有些软件安装了会提供批处理程序调试工具,那么能够就能够用这些工具了。PS:以上大意就是说SOC-7这个错误多半是因为数据项初始化造成的,然后你应该到运行后编译器的返回信息中去找这些ERROR出现的地方(我们常见的话应该就是走查LOG),查的时候多注意下数据项的初始化问题。Q30:在内部十进制区域和显示十进制区域符号是怎么存贮的A30:内部十进制是一个数字占4位(半字节),内存中用16进制来存,最后在追加4位作为符号,如-4=01001101(末尾的1101表示负,1100表示正),而我们用于显示的
15、十进制,符号并不占空间,只是在最后一位上标识一下Q31:COMP-3区怎么存储符号A31:COMP-3采用的是内部十进制的存储方式,所谓内部十进制就是压缩式的外部十进制存储方式,上题讲过外部十进制每个数值都用1个字节存储,但前4位是存符号的,这样比较浪费存储空间,因此内部十进制的存储方式就用半个字节(4位)存储一个数字,在最后增加4位作为符号(1100(C)为正,1101(D)为负)Q32:COMP区怎么存储符号A32:COMP是采用定点二进制的方式存储数据,也就是将一个十进制的数值转化成二进制再进行存储,因为机器存储的形式也是二进制,因此定点二进制的读取是最快速的,因为COMP型的数据是用做
16、计算(也就是说不用再转化成十进制打印),使用定点二进制将会非常高效。这样的存储方式符号是保存在最高有效果位上,如:10=(00001010),-10=(00011010)Q33:COMP和COMP-3什么区别A33:这之前讲过了,COMP采用定点二进制存储,COMP-3采用内部十进制存储Q34:COMP-1是什么?什么是COMP-2A34:其实之因此定义计算型数据(COMPCOMP-3)以区别DISPLAY(能计算,可是要用于打印)是为了考虑效率,因为大家知道文件导入(也就是USER使用的数据)一般是十进制的,而机器存储都是二进制,那么当定义的数据光用来计算不用打印,处于效率考虑会把它定义成C
17、OMP型,当然就会衍生出几类COMP以适应不用的数据类型的存储。很明显,这里COMP-1就是采用内部短浮点(4个字节表示一个数,8位指数部分,24位表示数字部分),COMP-2用内部长浮点型(8个字节表示一个书,16位指数部分,48位表示数字部分)以适应浮点数据的存储,长浮点精确度更高.Q35:怎么定义一个COMP-1型?COMP-2型A35:不要用PICTURE描述,因为是确定分配多少内存的,直接用USAGE,如01 WS-VAR USAGE COMP-1Q36:一个S9(7)的COMP-3型占用多少字节?A36:占用4字节。COMP-3用内部十进制存储,S9(7)中的S是要占空间的,符号占
18、4位,7个数字,每个4位(半个字节),因此是(4+7*4)/8=4字节(字节和位的比例不要搞错了哦)Q37:一个S9(7) SIGN TRAILING SEPARATE区域占多少字节A37:这里是每个符号单独分配空间(也就是没个数值用1个字节表示,就象最常见的DISPLAY型的分配方式),算上S的空间,因此是7+1=8字节。一般情况省略的SIGN子句都是隐含SIGN IS TRAILING的Q38: 一个S9(8) COMP 区域占多少字节A38:如果之前关于COMP的解释听懂了的话,那很显然就是4字节了(定点二进制用2字节存储14,4字节存储59,类推,你能够自己推下),如果这块还不懂的能够
19、问我或者查下书Q39:S9(8)COMP型最多存储的最大值是什么A39:除了8个数值外不要忽略符号位Q40:COMP SYNC是什么A40:使数据项按“自然边界”排列。SYNCHRONIZED(简写SYNC)语句是同步安置语句。不同的机器会有一个机器字的概念(以一个WORD四个字节举例,这个数字因机器各异,但往往是四个字节),两个机器字之间就是这里说的“自然边界”,也就是说机器每次从内存中取出二个字节长度的数据,可是一个数据项中含有的数值可能跨越几个机器字或者未填满机器字,这样连续读取虽然比较省空间,可是要引用某些机器字的时候要把多个拿出来重新组织(因为一个数值可能跨越多个数据字,也可能未满,
20、机器就要判断一个机器字中哪些是前一个数值哪些是下个数值)。如果向左对齐的话就是想左“自然边界”靠,也就是说未满一个数据字的用空格(对非数字项)或者零(数字项)填充,填充部分不能插入其它数据项的内容,同理向右对齐就是向机器字的右“自然边界”靠,类似的在左边的空余部分填充。按照自然边界存储相当与牺牲空间换取时间,存取效率,系统读取的机器字两段填充区域(0或者SPACE)之间就是一个数值,效率很高。Q41:COBOL1定义的01层最大大小是多少,COBOL II中?A41:COBOL II中是16777215,没什么说的,自己翻书Q42:COBOL中如何涉及(引用调用)以下这些文件A42: 文件类型
21、 这里是COBOL在文件控制区中的文件组织访问形式(SELECT下面那句)这里最好翻翻书或者事例代码重复记忆定长文件 用 ORGANISATION IS SEQUENTIAL. Use RECORDING MODE IS F, BLOCK CONTAINS 0固定可是不是以块的组织形式 用 ORGANISATION IS SEQUENTIAL. Use RECORDING MODE IS F, 不要使用BLOCK CONTAINS(因为不是以块的组织形式)变长文件 用 ORGANISATION IS SEQUENTIAL. Use RECORDING MODE IS V,BLOCK ,CONT
22、AINS 0.在之后的文件区中的文件描述FD中不要编码记录长度为4字节变长可是不是以块的组织形式 用 ORGANISATION IS SEQUENTIAL. Use RECORDING MODE IS V,同样不要使用BLOCK CONTAINS也不要编码记录长度为4字节(原因同上)ESDS VSAM文件 用ORGANISATION IS SEQUENTIALKSDS VSAM文件 用ORGANISATION IS INDEXED, RECORD KEY IS, ALTERNATE RECORD作为关键字的RRDS文件 用ORGANISATION IS RELATIVE, RELATIVE K
23、EY IS打印文件 用ORGANISATION IS SEQUENTIAL. Use RECORDING MODE IS F, BLOCK CONTAINS 0. (Use RECFM=FBA in JCL DCB)PS:这道题是阐述COBOL怎么调用外部的各种文件,在文件控制区以及文件区中要定义的一些关键字,有我们最熟悉的FB(定长)和VB(变长)(当然我们的前提是这两类都是以BLOCK(块)为单位的)可是也有不为我们所知的文件类型(可能出现的情况很少,可是也确实存在,比如编译出的MODULE放的LOAD必须是V文件(文件组织形式是V)当然在不写ORGANISATION这些关键字的时候都是默
24、认为FB的,可是在处理一些复杂数据(比如VSAM数据)还有和外部文件(比如JCL)的连接的时候这些保留字都是要指定的,关于更具体的还是要翻书加强记忆Q43:COBOL中有哪些OPEN方式A43:有INPUT,OUTPUT,I-O,EXTEND这些OPEN模式Q44:当你想OPEN一个文件用来写入的时候,这属于什么方式A44:OUTPUT,EXTEND方式Q45:JCL中怎么定义在子程序中要调用的文件A45:就象要在主程序中调用一样使用DD语句Q46:能否REWRITE(重写)一个ESDS文件?能否删除ESDS中的一条记录?A46:能够重写(可是记录长度必须相同),可是不能删除Q47:文件状态9
25、2是什么?A47:是文件状态的一个返回码,是逻辑错误的意思,比如,打开了一个文件用来导入数据可是又想将其它数据写入这个文件Q48:文件状态39是什么A48:当你的COBOL的逻辑记录长度(LRECL)或者块长度(BLOCKSIZE)或者记录形式(RECFM)和 JCL匹配错误,文件状态参数就会返回39Q49:什么是静态和动态连接A49:在静态连接中,被调用的子程序是连接到调用程序,可是在动态连接中,被调用子程序和调用主程序的可执行模块是都存在的(分开的)。你能够在连接选项中选择DYNAM或者NODYNAM(就算你选择了NODYNAM,CALL标识符还是回把它自动转换成一个动态调用)。静态子程序
26、下次被调用时不会再处于其初始状态,除非用INITIAL初始化或者用CANCEL。动态的都是以初始状态存在的。Q50:AMODE(24),AMODE(31),RMODE(24)和RMODE(ANY)是什么?(仅适用于MVS/ESA 企业管理器)A50:是编译/连接的选项卡。基本上AMODE表示寻址方式,RMODE 表示贮存方式。AMODE(24):24位的寻址方式AMODE(31):31位的寻址方式AMODE(ANY):是用24位还是31位的寻址方式取决于REMODERMODE(24):存在虚存中超过16Meg lne(MEG LINE是某种单位)允许31位的程序调用24位的程序。(OS/VS
27、COBOL的PGM只有24位的存址)RMODE(ANY)-超过或者不到16Meg lineQ51:如果要动态连接那么要用什么编译选项A51:DYNAMQ52:SSRANGE,NOSSRANGE是什么A52:这在之前已经提到过了,是编译器的一个选项,用来核对数组索引或者下标的超界问题(比如只定义了10个元素程序却使用了第11个元素的情况)默认情况下是NOSSRANGE,如果选了NOSSRANGE,那么当索引和下标超界的时候也不会报RUN TIME ERRORQ53:怎么从一个COBOL程序设置一个JCL的返回码A53:把你想设置的值MOVE到RETURN-CODE这个寄存器中。RETURN-CO
28、DE寄存器并未在这COBOL程序中申明Q54:怎么在COBOL程序中提交一个JOBA54:把一个JCL用“/xxxxxxx SYSOUT= (A,INTRDR)”写到一个DATASET中,A是输出组,在程序中要将这个DATASET作为OUTPUT(输出)打开。为这个文件定义一个80字节的记录格式长度Q55:OS/VS COBOL和VS COBOL II有什么区别A55:OS/VS COBOL的PGM只能是24位地址的,VS COBOL II的PGM既能24位又能31位报表writer只支持OS/VS COBOLUSAGE IS POINTER只支持VS COBOL IIREFERENCE(感觉
29、翻成“引用”合适点)修改,比如:WS-VAR只支持VS COBOL II只有COBOL II有EVALUATE语句范围终止符只有COBOL II中才有OS/VS COBOL是按照ANSI 74标准,VS COBOL II是按照ANSI 85标准VS COBOL II程序之间允许CICS调用Q56:建立一个COBOL可执行程序要经过哪些步骤A56:DB2预编译(如果内含SQL),CICS翻译器(如果是CICS PGM),COBOL编译器,连接编辑器,如果是DB2程序,要建立绑定DBRM的PLANQ57:能不能在VS COBOL II的PGM中调用OS VS COBOL的PGM?A57:在没有CI
30、CS的环境中,是能够的,在CICS环境中不行Q58:COBOL和COBOL II什么区别A58:有五点不同,COBOL II支持结构变成(经过PERFORMS和一系列范围终止符);COBOL II引进了些新的特性(如EVALUATE,SET TO TRUE,CALL,BY CONTEXT,等等),COBOL II允许程序编址在16MB行上;COBOL II不支持一些旧的特性(如READY TRACE,REPORT-WRITER,ISAM,ETC),以及支持加强版CICSQ59:什么是范围终止符A59:一个范围终止符和其之前的动词配套使用,如,IF和END-IF,以至于前置动词和终止符一起作用。
31、COBOL II其它普通的词是READ,PERFORM,EVALUATE,SEARCH和STRINGQ60:PERFORM行有什么作用?什么时候使用?简单介绍下它A60:PERFORM和END-PERFORM配套使用,所有COBOL II程序语句都在这两关键字之间。这和COBOL的PERFORM或者PERFORM THRU一段是一样的意思。在PERFORM的语句中只要没有内部GOTO就一直执行直到碰到EXIT。在行PERFORM语句中为了可读型不能超过一页的长度,她经常会引用到其它PERFORM段Q61:NEXT SENTENCE和CONTINUE有什么区别A61:(这在前面已经详细说明,这样
32、仅就文字翻译)NEXT SENTENCE当碰到.转移程序控制权给下句,CONTINUE碰到范围终止符就转移程序控制权给下句。因此用CONTINUE比用NEXT SENTENCE安全(即使忘记写.也没有关系)。Q62:COBOL II中的EVALUATE相当于取代了COBOL中的什么结构A62:EVALUATE相当于取代了COBOL中的IF THEN ELSE的嵌套语句Q63: above the line和below the line有什么意义A63:在IBM推出MVS/XA体系之前,80年代的程序虚拟存储都限制在16 megs.程序以24位的方式仅在一个16Mb的地址空间中被编译,就好象那些
33、程序被保存在虚存中一样。使用COBOL II编码之后,以31位方式的编码能超过16位的界线。(也就是说COBOL II之前是“在此界线之下”的,COBOL II之后“在这接线之上”,这一般容易使一些主机程序员搞混)Q64:COBOL II从COBOL中舍弃了哪些A64:部分列表(指COBOL中有的,COBOL II中没有的部分语句):REMARKS, NOMINAL KEY, PAGE-COUNTER, CURRENT-DAY, TIME-OF-DAY, STATE, FLOW, COUNT, EXAMINE, EXHIBIT, READY TRACE and RESET TRACE.Q65:
34、经过比较和其它调用的区别解释下CONTEXT调用A65:传入CONTEXT调用的参数是能防止被其它程序调用修改的。普通的调用,别的程序能够修改Q66:LINKAGE SECTION是什么A66:“连接区”是一个被调用程序连接或者映射到调用程序工作单元的程序部分。被调用程序中一些共享项被定义在“连接区”中(想象下子程序,主程序是没有连接区的)Q67:在表的定义中,下表和索引有什么区别A67:(这也在前面的题目也解释过了,这里仅对文字作翻译。)下表是工作单元数据定义项,具有代表性的就是将一个常量移到一个PIC 999下标中,经过ADD TO 和SUBTRACT FROM来增减。索引是一个存在在程序
35、工作单元之外的记录项。用SET设置一个索引的值,并用UP BY和DOWN BY设置步长来增减Q68:如果经过连接传递一个表,使用哪个更优-下标或者索引?A68:注意!是不能经过连接传递索引的。索引并不是调用程序工作单元的一部分。这点经常搞错Q69:解释下内部排序和外部排序的区别和内部排序的语法A69:外部排序不是COBOL,她是经过JCL和PGM=SORT的形式排序的。这种方式不引用代码却容易理解。内部排序用两中语法:1)USING,GIVING,这种方式比得上外边排序,不用额外的文件处理。2)INPUT PROCEDURE, OUTPUT PROCEDURE,这种方式适用用文件操作,而且在排
36、序前后允许数据操作Q70:COMP和COMP-3有什么区别?解释下COBOL中的USAGE语句A70:COMP用的是定点二进制,COMP-3用的是内部十进制(压缩)。其它的不同USAGE语句就是二进制和DISPLAY。DISPLAY是默认情况。Q71:什么时候范围终止符强制执行A71:范围终止符在行内PERFORM和EVALUATE语句中强制执行。为了程序的可读性,编码规范都建议写上这两个终止符。(也就是说PERFORM和EVALUATE就算没有END-PERFORM和END-EVALUATE也会强制终止,可是为了可读性还是建议把END-PERFORM和END-EVALUATE写上)Q72:C
37、OBOL的PERFORM中什么时候测试CONDITION,在执行PERFORM之前还是之后A72:在COBOL II中有个WITH TEST BEFORE 或者WITH TEST AFTER的选项子句能够指定在执行前还是后测试CONDITION,默认情况是在执行前测试Q73:在EVALUATE语句中,WHEN子句的顺序是否有意义A73:当然有意义。EXALUATION经过WHEN子句从头到尾的执行顺序会决定结果。Q74:INITIALIZE默认是值是什么?替代默认值的关键字是什么A74:默认情况下INITIALIZE将空格移到字符区,将零移到数字区。REPLACING作为替代默认值的关键保留字
38、Q75:总之,说明关于SET TO TRUE的一切A75:在COBOL II中88层是经过将关联值移到关联数据项中来设置的(这点改变并不是COBOL II好的地方)。(也就是说88层是经过其关联的数据项也就是上一层的,比如Y或者N来决定TRUE或者FALSE)Q76:COBOL II中LENGTH是什么A76:LENGTH就象个专用寄存器来显示GROUP的长度或者基本项的长度Q77:二叉搜索和顺序搜索有什么区别?相关的COBOL命令是什么A77:(关于二叉搜索之前已经详细讲过了)要用二叉搜索一个表,那该表一定要按照这个KEY值是排序的(递增或者递减)。该表被一次次得平分直到找到目标元素。顺序搜
39、索是从表头查到尾,因此这些元素是不是按照什么顺序排的无所谓。二分搜索对于大数据量的表查找速度很快,顺序搜索适合数据量小的表。SEARCH ALL用在二叉搜索中,SEARCH用在顺序查找中Q78:REPLACING项复制语句的要点是什么A78:REPLACING用对指定的数据做不止一次的相同拷贝,也就是说在同一段程序中要多次拷贝相同的数据的时候用REPLACINGQ79:在COBOL中如果你用GO BACK代替STOP RUN会发生什么,该程序没有调用别的程序A79:当然是会无限循环下去Q80:怎么知道一个模块是动态的还是静态的A80:只能经过看连接编辑器(IEWL)或者LOAD模块本身(编译生
40、成的模块)的输出来看是DYNAMICALLY还是STATICALLY的。如果一个模块被叫成动态模块,那么她不会出现在主模块中,如果是静态模块,那么会出现在LOAD模块中。调用一个工作单元区的变量,包括一个程序名,并不是动态调用。这种被工作单元区内容中的变量以调用模块名字的的形式的调用是固定调用。Q81:COBOL中动态动用和静态调用有什么区别A81:所有被调用的模块都不能单独跑除非这些模块要求程序经过连接区传递变量给她们。动态调用的模块就是那些在连接编辑时(LEWL)没有被调用程序限定的模块,这些模块在程序库(JOBLIB,STEPLIB)中被加载以连接JOB。要动态调用一个模块,DYNAM的
41、编译器选项要被选中,另外,连接编辑器不能是可执行的,因为她会要你处理所有的模块。一个静态调用在连接编辑时被调用程序限制,因此变成了可执行模块的一部分。Q82:JCL-COBOL中有几个区A82:四个区Q83:写标识区是什么目的A83:标识一些作者等信息,便于文档管理Q84:PIC 9.99和9V99有什么区别A84:PIC 9.99是一块占用了4个位置的区域,因为包括了一个小数点,可是9V99只占用3个位置,因为V不占位Q85:PIC 9V99指什么A85:PIC 9V99指一段含有一个不占位置的小数点的占三个位置的数值区域。小数点位置在第一个位置之后,V表示一个隐含的小数点。Q86:按照什么
42、原则/方针去写一段结构化的COBOL程序(也就是程序规范)A86:1)用EVALUATE语句去对应不用的情况2)嵌套的时候不要忘记写范围终止符3)用PERFORM语句来写要执行的语句(也就是说把要执行的语句写成一段然后用行PERFORM语句去执行,不要光把要执行的语句罗列在主程序中)4)用在使用PERFORM语句之前和之后都检测(我们现在常见的是检测文件状态)这种方式来写DO-WHILE结构(不要问我DO-WHILE结构是什么)Q87:01 ws-n pic 9(2) value zero.a-para.move 5 to ws-n.perform b-para ws-n times.b-pa
43、ra.move 10 to ws-n.这段程序中b-para被执行几次A87:只执行5次。在循环中并不会取这个10的值。我的理解是:在第一次执行perform b-para ws-n times.的时候并没有经过move 10 to ws-n.修改ws-n的值,也就是说在该循环语句中取到的ws-n还是5,那就该执行(将10移到ws-n 5次),如果最后再跟一句c-para.perform b-para ws-n times.这样的话b-para就该执行10次了Q88:SEARCH和SEARCH ALL有什么区别?哪个更高效A88:SEARCH是顺序查找,从头到尾。SEARCH是二叉搜索。超过7
44、0个数据项的时候SEARCH ALL效率更高Q89:给出命令终止符的例子A89:END-IF,END-EVALUATEQ90:强制程序执行超过16Meg行的时候应该注意什么A90:确认连接选项AMODE=31和RMODE=ANY.Q91:怎么经过COBOL提交一个JCLA91:将/dd1 DD sysout=(*, intrdr)写在JCL中Q92:怎么在一个COBOL程序中执行一段JCL语句A92:使用EXEC CICS SPOOL WRITE(变量) END-EXEC命令。变量名是一个包括一段JCL语句的COBOL结构Q93:说明REDEFINES子句的优点A93:1:你能用另一个PICT
45、URE(另一种类型)重定义之前的一种类型,而且以相同的起点2:在工作单元区中能经过REDEFINES初始化变量3:能够经过重定义一个变量而重定义很多子变量。(这个来解决Y 问题很方便)PS:在多维表的元素初始化中也用到REDEFINE,不过这和第3点作用类似Q94:静态调用和动态调用有什么区别A94:在静态调用的情况下,被调用的程序是单独的一段程序,她是一段可执行的程序。在跑程序的时候能够调用它。而关于动态调用,被调用程序并不是一段可执行程序,但能经过调用程序而执行Q95:你认为怎么才能写相互好的程序A95:一段好的程序要遵循从上到下步骤。这也能使程序员和用户能够根据逻辑容易得读懂程序Q96:
46、怎么编写一个COBOL去访问一个JCL定义的参数?你会在JCL的EXEC行上写PARM参数吗?A96:1)用JCL的SYSIN。/sysin dd *这里你写参数*/ 这样就能把参数传给COBOL2)在JCL中用PARM语句,比如:在EXEC行写parm=john,david,那么你就必须在PGM的连接区中为第一个值写变量长度和变量名,如:abc pic x(4),就会在这个变量前加上之前的PARM(john,david),你需要用以上的方法定义其它参数Q97:既然已经知道COMP-3会占用较少的空间,为什么还要编码S9(4)COMPA97:这里S9(4)COMP是个小整数,因此2个数值相当于
47、一个字节,因此一共占用2字节。如果是S9(4)COMP-3的情况就是1个数值占半个字节。4个数值占用2个字节,符号占半个字节,这么算一共是2个半字节,可是系统存储的最小单位是字节,因此一共占3个字节虽然COMP-3占用少的空间(这里的较少是相对于DISPLAY型说的),可是COMP占用少的时间,效率更高。Q98:在COBOL-85中一个数组最多能是几维的A98:COBOL-85最多是七维,COBOL-84最多是三维01 EMP-GRP.49 E-LEN PIC S9(4) COMP.49 E-NAME PIC X(25).Q99:在COBOL中怎么申明一个带有类型为25位字符型属性的变量A99:答案见上Q100:请区分COBOL和COBOL II(大部分程序是用COBOL II写的,因此比较好