2020年度COBOL经典面试题库_第1页
2020年度COBOL经典面试题库_第2页
2020年度COBOL经典面试题库_第3页
2020年度COBOL经典面试题库_第4页
2020年度COBOL经典面试题库_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020年COBOL经典面试题库中文

COBOL经典面试题库

Q1:列举COBOL的DEVISION

Al:标识部,环境部,数据部,过程部

Q2:COBOL有哪些可用的数据类型

A2:字符型(这里指的是包含字母和数字),字母

型,数字型

Q3:INITIALIZE这个词做了些什么

A3:将字母,字符,数字区域都置成空格(置空),

将数字区置0,FILLER和OCCURSDEPENDINGON

项不处理

Q4:77层有什么作用

A4:基本层数据项,不能用做细分别的层,也不

能被细分

(来源:)

Q5:88层有什么作用

A5:条件逻辑层

Q6:66层有什么作用

A6:重命名层

Q7:ISNUMERIC这个子句怎么确定(也就是说确

定句子的真值)

A7:ISNUMERIC用在字符项,带符号数字,浮点

数,不带符号数。如果目标项只含0~9则返回

TRUEo但是,如果待测项目是个带符号数,那么

他就含有0-9还有+和-

05ARRAY1PICX(9)OCCURS10TIMES.

05ARRAY2PICX(6)OCCURS20TIMESINDEXED

BYWS-INDEX

Q8:COBOL中怎么建表/数组

A8:如上.

Q9:OCCURS子句能用在第一层吗

A9:不能

Q10:索引和下标有什么区别

A10:下标可以指定数组中任意中位置的元素(只

要知道其下标),下标只能是数字型常量或者数

字型变量(但是不能在指定的时候修改,如:A

(K+1)这样是不行的,要修改的话要在指定的

外部改,如:ADD1TOK,而索引的话是从表头/

数组头开始检索(以BYN的指定检索规律往后

滚)

再者,索引只能通过PERFORM,SEARCH和SET

来修改,如果要在一个表中使用SEARCH,SEARCH

ALL,那这个表就要有索引(因为SEARCH,SEARCH

ALL的参数中指定索引,所以即使其有很多限制

还是得用它)

Qll:SERACH和SERACHALL有什么区别

All:SEARCH是顺序查找

SERACHALL是2叉查找(相信数据结构学过2

叉树的都不会陌生),在使用SEARCHALL前表必

须有一个递增/递减的KEY,并且表已经按照其

KEY值排序了,这样才能使用SEARCHALL

Q12:为了使用SEARCHALL,存贮顺序是怎么样

A12:他必须是递增或者是递减的,默认地政。如

果你想在一个递减顺序存贮的表/数组使用搜索

的话,那么当定义表/数组的时候你应该加一个

DESCENDINGKEY子句(这之前表要已经按指定

的顺序排序了)

Q13:什么是2叉查找

A13:将你要找的目标项与数组的正中项比较,找

到就结束搜索,没找到则继续如此循环(比较下

一个中值),取哪一半取决于目标值大于中值还

是小于中值

PS:联想2叉树的查找规律就很好理解,因为所

谓的“表“本身也就是数组

Q14:我的程序有个数组定义了10项。因为有个

BUG,我发现即使访问第11项,程序也不异常终

止。那是出了什么问题

A14:必须使用编译器的一个选项SSRANGE,如果

你想检查数组的超界问题。默认是N0SSRANGE

Q15:怎么在一个COBOL程序中排序?给出排序文

件的定义,排序语法和意思

A15:语法就是SORTfile-1ON

ASCENDING/DESCENDINGKEYkey….USING

file-2GIVINGfile-3.

USING后程序的输入接口,这个地方可以替换成

一个输出过程,也就是说写一个过程往USING这

个接口中导数据(要在这个过程中READ,AT

END,……),这个过程在将数据释放到执行排序

的文件中之前执行,GIVING后是输出借口,用

法类似。

此例中输入文件是file-2输出文件是file3(这

样个文件必须在文件区中用FD和在文件控制中

用到SELECT)真正执行排序的file-1,这里需要

注意的是file-1中的文件区不能用FD,应该用

SD,file-2和3还是一样(用FD),具体可以看

一下书上的例子

Q16:怎么在JCL中定义一个排序文件来跑这个

COBOL程序

A16:用SORTWKO1,S0RTWK02,.作为DATASET

NAMEO用多少取决于你要排序的数量,但是至少

3个。

Q17:执行一个区和一个段有什么区别

A17:简单来说的话就是区的概念比段大,执行一

个区就要执行其内部所有段,执行段的话只执行

该段。

Q18:EVALUATE语句有什么作用

A18:EVALUATE就象个CASE语句(多重开关语句,

学过C的总知道吧),不同点在于EVALUATE不需

要BREAK,一旦匹配就跳出EVALUATE语句了

Q19)Whatarethedifferentformsof

EVALUATEstatement?

A19)

EVALUATEEVALUATESQLCODEALSOFILE-STATUS

WHENA=BANDC=DWHEN100ALSO’00’

imperativestmtimperativestmt

WHEN(D+X)/Y=4WHEN-305ALSO’32’

imperativestmtimperativestmt

WHENOTHERWHENOTHER

imperativestmtimperativestmt

END-EVALUATEEND-EVALUATE

EVALUATESQLCODEALSOA=BEVALUATESQLCODE

ALSOTRUE

WHEN100ALSOTRUEWHEN100ALSOA=B

imperativestmtimperativestmt

WHEN-305ALSOFALSEWHEN-305ALSO(A/C=4)

imperativestmtimperativestmt

END-EVALUATEEND-EVALUATE

Q20:怎么跳出一条EVALUATE语句

A20:象18题目说的那样,一旦匹配了某一个

“WHEN”语句就自动跳出了,不需要什么额外的

代码来跳出

Q21:在一个EVALUATE语句的某个WHEN分支中能

否再插入复杂的情况(也就是嵌套)

A21:当然可以,当多个参数作为控制变量的时候

1个WHEN内部可以嵌套更多的情况

Q22:什么是结束终止符

A22:结束终止符是搭配一些范围指令的,也就是

标识一些范围指令的结束。如:EVALUATE,

END-EVALUATE;IF,END-IF如果没有该结束符,

该条语句将终止不了

Q23:怎么使用内嵌的PERFORM

A23:PERFORM

END-PERFORM

所谓内嵌也就是PERFORM被嵌在某些比如循环

语句中担当执行主体,同时通过UNTIL来指定结

束判定

Q24:什么时候使用内嵌式PERFORM

A24:当该段PERFORM的内容不被其它段用到,只

在某些局部代码中(当然PERFORM的主体所用到

的参数也都是局部的,例如循环)使用,如果

PERFORM主体的代码是一般的(用到了别的程序

段的变量),还是使用PERFORMParaname这样

的形式比较好(也就是相对与内于PERFORM的外

部PERFORM)o

Q25:CONTINUE和NEXTSENTENCE有什么不同

A25:两者比较相似,都是将程序控制权交给下一

句,但是用NEXTSENTENCE的时候,只有当碰到

句结束符(就是句末的才会将执行下句

这道题我用了2个例子测试了一下:

1:IFTEST-NUMERIC>0

THENNEXTSENTENCE

END-IF

DISPLAY'LINE—DISPLAY'LINE2'.

DISPLAY'LINE3,.(请注意代码中的'号)

结果输出:LINE3

2:IFTEST-NUMERIC>0

THENCONTINUE

END-IF

DISPLAY'LINE—DISPLAY'LINE2'.

DISPLAY'LINE3'.

结果输出:LINE1

LINE2

LINE3

相信已经区别已经比较明显了,NEXTSENTENCE

是靠句末的结束符(也就是来判断下一

句的,而CONTINUE是通过句头的保留字(这例

中是DISPLAY)来判断下一句的

Q26:EXIT语句有什么作用

A26:什么都不做,如果用到的话,肯定是作为一

段的唯一的一句话,注意:这里不是子程序中用

的EXITPROGRAME

01WS-TOPPICX(l)

01WS-TOP-REDREDEFINESWS-TOPPICX(2).

IfyouMOVE’12'toWS-TOP-RED,

DISPLAYWS-TOPwillshow1while

DISPLAYWS-TOP-REDwillshow12.

Q27:能不能把X(100)的区域重定义成X(200)

A27:可以,重定义只是相当于把两个区域的首地

址放在一起,从上面这个例子也很好理解

Q28:能不能把X(200)的区域重定义成X(100)

A28:可以,原因同上

Q29:怎么解决S0C-7错误

A29:基本上你要看一下一些比较奇怪的数据,很

多导致S0C7的原因都是因为数据项的初始化。

首先检查所有的可能性。某些功能可能提供一个

空间用来存贮那些运行时间ABEND,并且提供最

近一次运行时间ABEND的偏移量的说明(也就是

位于队列中的位置),检查编译器的输出XREF队

列以获得一些关键字。然后你就能看下源代码找

出BUG。为了捕获一些运行时间的信息,你需要

在JCL中建一个DATASET(象SYSABOUT这样的),

如果这些都没用,那么再审查一下ERROR出现的

位置判断一下原因。有些软件安装了会提供批处

理程序调试工具,那么可以就可以用这些工具

了。

PS:以上大意就是说SOC-7这个错误多半是因为

数据项初始化造成的,然后你应该到运行后编译

器的返回信息中去找这些ERROR出现的地方(我

们常用的话应该就是走查LOG),查的时候多注

意下数据项的初始化问题。

Q30:在内部十进制区域和显示十进制区域符号

是怎么存贮的

A30:内部十进制是一个数字占4位(半字节),

内存中用16进制来存,最后在追加4位作为符

号,如-4=01001101(末尾的1101表示负,1100

表示正),而我们用于显示的十进制,符号并不

占空间,只是在最后一位上标识一下

Q31:C0MP-3区怎么存储符号

A31:COMP-3采用的是内部十进制的存储方式,

所谓内部十进制就是压缩式的外部十进制存储

方式,上题讲过外部十进制每个数值都用1个字

节存储,但前4位是存符号的,这样比较浪费存

储空间,所以内部十进制的存储方式就用半个字

节(4位)存储一个数字,在最后增加4位作为

符号(1100(C)为正,1101(D)为负)

Q32:C0MP区怎么存储符号

A32:COMP是采用定点二进制的方式存储数据,

也就是将一个十进制的数值转化成二进制再进

行存储,因为机器存储的形式也是二进制,所以

定点二进制的读取是最快速的,因为COMP型的

数据是用做计算(也就是说不用再转化成十进制

打印),使用定点二进制将会非常高效。这样的

存储方式符号是保存在最高有效果位上,如:10=

(00001010)2,

-10=(00011010)2

Q33:COMP和C0MP-3什么区别

A33:这之前讲过了,COMP采用定点二进制存储,

C0MP-3采用内部十进制存储

Q34:C0MP-l是什么?什么是C0MP-2

A34:其实之所以定义计算型数据(C0MP~C0MP-3)

以区别DISPLAY(能计算,但是要用于打印)是

为了考虑效率,因为大家知道文件导入(也就是

USER使用的数据)一般是十进制的,而机器存

储都是二进制,那么当定义的数据光用来计算不

用打印,处于效率考虑会把它定义成COMP型,

当然就会衍生出几类COMP以适应不用的数据类

型的存储。很明显,这里COMP-1就是采用内部

短浮点(4个字节表示一个数,8位指数部分,

24位表示数字部分),COMP-2用内部长浮点型(8

个字节表示一个书,16位指数部分,48位表示

数字部分)以适应浮点数据的存储,长浮点精确

度更高.

Q35:怎么定义一个COMP-1型?COMP-2型

A35:不要用PICTURE描述,因为是确定分配多少

内存的,直接用USAGE,如01WS-VARUSAGE

C0MP-1

Q36:一个S9(7)的COMP-3型占用多少字节?

A36:占用4字节。C0MP-3用内部十进制存储,

S9(7)中的S是要占空间的,符号占4位,7

个数字,每个4位(半个字节),所以是(4+7*4)

/8=4字节(字节和位的比例不要搞错了哦)

Q37:一个S9(7)SIGNTRAILINGSEPARATE区域

占多少字节

A37:这里是每个符号单独分配空间(也就是没个

数值用1个字节表示,就象最常用的DISPLAY型

的分配方式),算上S的空间,所以是7+1=8字

节。一般情况省略的SIGN子句都是隐含SIGNIS

TRAILING的

Q38:一个S9(8)COMP区域占多少字节

A38:如果之前关于COMP的解释听懂了的话,那

很显然就是4字节了(定点二进制用2字节存储

1~4,4字节存储5〜9,……类推,你可以自己推

下),如果这块还不懂的可以问我或者查下书

Q39:S9(8)COMP型最多存储的最大值是什么

A39:除了8个数值外不要忽略符号位

Q40:COMPSYNC是什么

A40:使数据项按“自然边界”排列oSYNCHRONIZED

(简写SYNC)语句是同步安置语句。不同的机

器会有一个机器字的概念(以一个WORD四个字

节举例,这个数字因机器各异,但往往是四个字

节),两个机器字之间就是这里说的“自然边界”,

也就是说机器每次从内存中取出二个字节长度

的数据,但是一个数据项中含有的数值可能跨越

几个机器字或者未填满机器字,这样连续读取虽

然比较省空间,但是要引用某些机器字的时候要

把多个拿出来重新组织(因为一个数值可能跨越

多个数据字,也可能未满,机器就要判断一个机

器字中哪些是前一个数值哪些是下个数值)。如

果向左对齐的话就是想左“自然边界”靠,也就

是说未满一个数据字的用空格(对非数字项)或

者零(数字项)填充,填充部分不能插入其它数

据项的内容,同理向右对齐就是向机器字的右

“自然边界”靠,类似的在左边的空余部分填充。

按照自然边界存储相当与牺牲空间换取时间,存

取效率,系统读取的机器字两段填充区域(0或

者SPACE)之间就是一个数值,效率很高。

Q41:C0B0Ll定义的01层最大大小是多少,COBOL

II中?

A41:COBOLII中是16777215,没什么说的,自

己翻书

Q42:COBOL中如何涉及(引用调用)以下这些文

A42:文件类型这里是COBOL在文件控制区中

的文件组织访问形式(SELECT下面那句)这里

最好翻翻书或者事例代码反复记忆

定长文件用ORGANISATIONISSEQUENTIAL.

UseRECORDINGMODEISF,BLOCKCONTAINS0

固定但是不是以块的组织形式用

ORGANISATIONISSEQUENTIAL.UseRECORDING

MODEISF,不要使用BLOCKCONTAINS(因为不

是以块的组织形式)

变长文件用ORGANISATIONISSEQUENTIAL.

UseRECORDINGMODEISV,BLOCK,CONTAINS

变长但是不是以块的组织形式用

ORGANISATIONISSEQUENTIAL.UseRECORDING

MODEISV,同样不要使用BLOCKCONTAINS也不

要编码记录长度为4字节(原因同上)

ESDSVSAM文件用ORGANISATIONISSEQUENTIAL

KSDSVSAM文件用ORGANISATIONISINDEXED,

RECORDKEYIS,ALTERNATERECORD

作为关键字的RRDS文件用ORGANISATIONIS

RELATIVE,RELATIVEKEYIS

打印文件用ORGANISATIONISSEQUENTIAL.Use

RECORDINGMODEISF,BLOCKCONTAINS0.(Use

RECFM=FBAinJCLDCB)

PS:这道题是阐述COBOL怎么调用外部的各种文

件,在文件控制区以及文件区中要定义的一些关

键字,有我们最熟悉的FB(定长)和VB(变长)

(当然我们的前提是这两类都是以BLOCK(块)

为单位的)但是也有不为我们所知的文件类型

(可能出现的情况很少,但是也确实存在,比如

编译出的MODULE放的LOAD必须是V文件(文件

组织形式是V))当然在不写ORGANISATION这些

关键字的时候都是默认为FB的,但是在处理一

些复杂数据(比如VSAM数据)还有和外部文件

(比如JCL)的连接的时候这些保留字都是要指

定的,关于更具体的还是要翻书加强记忆

Q43:COBOL中有哪些OPEN方式

A43:有INPUT,OUTPUT,1-0,EXTEND这些OPEN

模式

Q44:当你想OPEN一个文件用来写入的时候,这

属于什么方式

A44:OUTPUT,EXTEND方式

Q45:JCL中怎么定义在子程序中要调用的文件

A45:就象要在主程序中调用一样使用DD语句

Q46:能否REWRITE(重写)一个ESDS文件?能否

删除ESDS中的一条记录?

A46:可以重写(但是记录长度必须相同),但是

不能删除

Q47:文件状态92是什么?

A47:是文件状态的一个返回码,是逻辑错误的意

思,比如,打开了一个文件用来导入数据但是又

想将其它数据写入这个文件

Q48:文件状态39是什么

A48:当你的COBOL的逻辑记录长度(LRECL)或

者块长度(BLOCKSIZE)或者记录形式(RECFM)

和JCL匹配错误,文件状态参数就会返回39

Q49:什么是静态和动态连接

A49:在静态连接中,被调用的子程序是连接到调

用程序,但是在动态连接中,被调用子程序和调

用主程序的可执行模块是都存在的(分开的)。

你可以在连接选项中选择DYNAM或者NODYNAM

(就算你选择了NODYNAM,CALL标识符还是回把

它自动转换成一个动态调用)。静态子程序下次

被调用时不会再处于其初始状态,除非用

INITIAL初始化或者用CANCELo动态的都是以初

始状态存在的。

Q50:AM0DE(24),AMODE(31),RMODE(24)和

RMODE(ANY)是什么?(仅适用于MVS/ESA企业

管理器)

A50:是编译/连接的选项卡。基本上AMODE表示

寻址方式,RMODE表示贮存方式。

AMODE(24):24位的寻址方式

AMODE(31):31位的寻址方式

AMODE(ANY):是用24位还是31位的寻址方式

取决于REMODE

RMOD灰24):存在虚存中超过16Meglne(MEGLINE

是某种单位)允许31位的程序调用24位的程序。

(OS/VSCOBOL的PGM只有24位的存址)

RMODE(ANY)-超过或者不到16Megline

Q51:如果要动态连接那么要用什么编译选项

A51:DYNAM

Q52:SSRANGE,NOSSRANGE是什么

A52:这在之前已经提到过了,是编译器的一个选

项,用来核对数组索引或者下标的超界问题(比

如只定义了10个元素程序却使用了第11个元素

的情况)默认情况下是NOSSRANGE,如果选了

NOSSRANGE,那么当索引和下标超界的时候也不

会报RUNTIMEERROR

Q53:怎么从一个COBOL程序设置一个JCL的返回

A53:把你想设置的值MOVE到RETURN-CODE这个

寄存器中。RETURN-CODE寄存器并未在这COBOL

程序中申明

Q54:怎么在COBOL程序中提交一个JOB

A54:把一个JCL用“〃xxxxxxxSYSOUT=

(A,INTRDR)”写到一个DATASET中,A是输出组,

在程序中要将这个DATASET作为OUTPUT(输出)

打开。为这个文件定义一个80字节的记录格式

长度

Q55:OS/VSCOBOL和VSCOBOLH有什么区别

A55:OS/VSCOBOL的PGM只能是24位地址的,

VSCOBOLII的PGM既能24位又能31位

报表writer只支持OS/VSCOBOL

USAGEISPOINTER只支持VSCOBOLII

REFERENCE(感觉翻成“引用”合适点)修改,

比如:WS-VAR只支持VSCOBOLII

只有COBOLII有EVALUATE语句

范围终止符只有COBOLH中才有

OS/VSCOBOL是按照ANSI74标准,VSCOBOLII

是按照ANSI85标准

VSCOBOLH程序之间允许CICS调用

Q56:建立一个COBOL可执行程序要通过哪些步

A56:DB2预编译(如果内含SQL),CICS翻译器

(如果是CICSPGM),COBOL编译器,连接编辑

器,如果是DB2程序,要建立绑定DBRM的PLAN

Q57:能不能在VSCOBOLII的PGM中调用OSVS

COBOL的PGM?

A57:在没有CICS的环境中,是可以的,在CICS

环境中不行

Q58:COBOL和COBOLII什么区别

A58:有五点不同,COBOLII支持结构变成(通

过PERFORMS和一系列范围终止符);COBOLII

引进了些新的特性(如EVALUATE,SETTOTRUE,

CALL,BYCONTEXT,等等),COBOLII允许程序

编址在16MB行上;COBOLII不支持一些旧的特

性(如READYTRACE,REPORT-WRITER,ISAM,

ETC),以及支持加强版CICS

Q59:什么是范围终止符

A59:一个范围终止符和其之前的动词配套使用,

如,IF和END-IF,以至于前置动词和终止符一

起作用。COBOLII其它普通的词是READ,

PERFORM,EVALUATE,SEARCH和STRING

Q60:PERFORM行有什么作用?什么时候使用?简单

介绍下它

A60:PERFORM和END-PERFORM配套使用,所有

COBOLII程序语句都在这两关键字之间。这和

COBOL的PERFORM或者PERFORMTHRU一段是一

样的意思。在PERFORM的语句中只要没有内部

GOTO就一直执行直到碰到EXITo在行PERFORM

语句中为了可读型不能超过一页的长度,他经常

会引用到其它PERFORM段

Q61:NEXTSENTENCE和CONTINUE有什么区别

A61:(这在前面已经详细说明,这样仅就文字翻

译)NEXTSENTENCE当碰到''转移程序控制

权给下句,CONTINUE碰到范围终止符就转移程

序控制权给下句。所以用CONTINUE比用NEXT

SENTENCE安全(即使忘记写'也没有关系)。

Q62:COBOLII中的EVALUATE相当于取代了

COBOL中的什么结构

A62:EVALUATE相当于取代了COBOL中的IFTHEN

ELSE的嵌套语句

Q63:'abovetheline'和'belowtheline'

有什么意义

A63:在IBM推出MVS/XA体系之前,80年代的程

序虚拟存储都限制在16,就好象那些程序被保

存在虚存中一样。使用COBOLII编码之后,以

31位方式的编码能超过16位的界线。(也就是

说COBOLII之前是“在此界线之下”的,COBOL

II之后“在这接线之上”,这通常容易使一些主

机程序员搞混)

Q64:COBOLII从COBOL中舍弃了哪些

A64:部分列表(指COBOL中有的,COBOLII中

没有的部分语句):REMARKS,NOMINALKEY,

COUNTER,CURRENT-DAY,TIME-OF-DAY,

STATE,FLOW,COUNT,EXAMINE,EXHIBIT,READY

TRACEandRESETTRACE.

Q65:通过比较和其它调用的区别解释下CONTEXT

调用

A65:传入CONTEXT调用的参数是能防止被其它

程序调用修改的。普通的调用,别的程序可以修

Q66:LINKAGESECTION是什么

A66:“连接区”是一个被调用程序连接或者映射

到调用程序工作单元的程序部分。被调用程序中

一些共享项被定义在“连接区”中(想象下子程

序,主程序是没有连接区的)

Q67:在表的定义中,下表和索引有什么区别

A67:(这也在前面的题目也解释过了,这里仅对

文字作翻译。)下表是工作单元数据定义项,具

有代表性的就是将一个常量移到一个PIC999下

标中,通过ADDTO和SUBTRACTFROM来增减。

索引是一个存在在程序工作单元之外的记录项。

用SET设置一个索引的值,并用UPBY和DOWNBY

设置步长来增减

Q68:如果通过连接传递一个表,使用哪个更优-

下标或者索引?

A68:注意!是不能通过连接传递索引的。索引并

不是调用程序工作单元的一部分。这点经常搞错

Q69:解释下内部排序和外部排序的区别和内部

排序的语法

A69:外部排序不是COBOL,他是通过JCL和

PGM二SORT的形式排序的。这种方式不引用代码

却容易理解。内部排序用两中语法:1)USING,

GIVING,这种方式比得上外边排序,不用额外的

文件处理。2)INPUTPROCEDURE,OUTPUT

PROCEDURE,这种方式适用用文件操作,并且在

排序前后允许数据操作

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:COBOL的PERFORM中什么时候测试

CONDITION,在执行PERFORM之前还是之后

A72:在COBOLII中有个WITHTESTBEFORE或

者WITHTESTAFTER的选项子句可以指定在执行

前还是后测试CONDITION,默认情况是在执行前

测试

Q73:在EVALUATE语句中,WHEN子句的顺序是否

有意义

A73:当然有意义。EXALUATION通过WHEN子句从

头到尾的执行顺序会决定结果。

Q74:INITIALIZE默认是值是什么?替代默认值的

关键字是什么

A74:默认情况下INITIALIZE将空格移到字符

区,将零移到数字区。REPLACING作为替代默认

值的关键保留字

Q75:总之,说明关于SETTOTRUE的一切

A75:在COBOLII中88层是通过将关联值移到关

联数据项中来设置的(这点改变并不是COBOLII

好的地方)。(也就是说88层是通过其关联的数

据项也就是上一层的,比如‘丫,或者’2来决

定TRUE或者FALSE)

Q76:COBOLII中LENGTH是什么

A76:LENGTH就象个专用寄存器来显示GROUP的

长度或者基本项的长度

Q77:二叉搜索和顺序搜索有什么区别?相关的

COBOL命令是什么

A77:(关于二叉搜索之前已经详细讲过了)要用

二叉搜索一个表,那该表一定要按照这个KEY值

是排序的(递增或者递减)。该表被一次次得平

分直到找到目标元素。顺序搜索是从表头查到

尾,所以这些元素是不是按照什么顺序排的无所

谓。二分搜索对于大数据量的表查找速度很快,

顺序搜索适合数据量小的表。SEARCHALL用在

二叉搜索中,SEARCH用在顺序查找中

Q78:REPLACING项复制语句的要点是什么

A78:REPLACING用对指定的数据做不止一次的相

同拷贝,也就是说在同一段程序中要多次拷贝相

同的数据的时候用REPLACING

Q79:在COBOL中如果你用GOBACK代替STOPRUN

会发生什么,该程序没有调用别的程序

A79:当然是会无限循环下去

Q80:怎么知道一个模块是动态的还是静态的

A80:只能通过看连接编辑器(IEWL)或者LOAD

模块本身(编译生成的模块)的输出来看是

DYNAMICALLY还是STATICALLY的。如果一个模

块被叫成动态模块,那么他不会出现在主模块

中,如果是静态模块,那么会出现在LOAD模块

中。调用一个工作单元区的变量,包括一个程序

名,并不是动态调用。这种被工作单元区内容中

的变量以调用模块名字的的形式的调用是固定

调用。

Q81:COBOL中动态动用和静态调用有什么区别

A81:所有被调用的模块都不能单独跑除非这些

模块要求程序通过连接区传递变量给他们。动态

调用的模块就是那些在连接编辑时(LEWL)没有

被调用程序限定的模块,这些模块在程序库

(JOBLIB,STEPLIB)中被加载以连接JOB。要

动态调用一个模块,DYNAM的编译器选项要被选

中,另外,连接编辑器不能是可执行的,因为他

会要你处理所有的模块。一个静态调用在连接编

辑时被调用程序限制,所以变成了可执行模块的

一部分。

Q82:JCL-COBOL中有几个区

A82:四个区

Q83:写标识区是什么目的

A83:标识一些作者等信息,便于文档管理

Q84:PIC

A84:PIC,因为包括了一个小数点,但是9V99

只占用3个位置,因为V不占位

Q85:PIC9V99指什么

A85:PIC9V99指一段含有一个不占位置的小数

点的占三个位置的数值区域。小数点位置在第一

个位置之后,V表示一个隐含的小数点。

Q86:按照什么原则/方针去写一段结构化的

COBOL程序(也就是程序规范)

A86:l)用'EVALUATE'语句去对应不用的情况

2)嵌套的时候不要忘记写范围终止符

3)用PERFORM语句来写要执行的语句(也就是

说把要执行的语句写成一段然后用行PERFORM

语句去执行,不要光把要执行的语句罗列在主程

序中)

4)用在使用PERFORM语句之前和之后都检测(我

们现在常用的是检测文件状态)这种方式来写

DO-WHILE结构(不要问我DO-WHILE结构是什么)

Q87:01ws-npic9(2)valuezero.

a-para.

move5tows-n.

performb-paraws-ntimes.

b-para.

move10tows-n.

这段程序中b-para被执行几次

A87:只执行5次。在循环中并不会取这个10的

值。

我的理解是:在第一次执行performb-paraws-n

10to,也就是说在该循环语句中取到的ws-n

还是5,那就该执行(将10移到ws-n5次),

b-paraws-n

Q88:SEARCH和SEARCHALL有什么区别?哪个更

高效

A88:SEARCH是顺序查找,从头到尾。SEARCH是

二叉搜索。超过70个数据项的时候SEARCHALL

效率更高

Q89:给出命令终止符的例子

A89:END-IF,END-EVALUATE

Q90:强制程序执行超过16Meg行的时候应该注

意什么

A90:确认连接选项AM0DE=31和RM0DE=ANY.

Q91:怎么通过COBOL提交一个JCL

A91:将〃ddlDDsysout=(*,intrdr)写在JCL

Q92:怎么在一个COBOL程序中执行一段JCL语句

A92:使用EXECCICSSPOOLWRITE(变量)

END-EXEC命令。变量名是一个包括一段JCL语

句的COBOL结构

Q93:说明REDEFINES子句的优点

A93:l:你能用另一个PICTURE(另一种类型)重

定义之前的一种类型,并且以相同的起点

2:在工作单元区中能通过REDEFINES初始化变

3:可以通过重定义一个变量而重定义很多子变

量。(这个来解决Y问题很方便)

PS:在多维表的元素初始化中也用到REDEFINE,

不过这和第3点作用类似

Q94:静态调用和动态调用有什么区别

A94:在静态调用的情况下,被调用的程序是单独

的一段程序,他是一段可执行的程序。在跑程序

的时候可以调用它。而关于动态调用,被调用程

序并不是一段可执行程序,但能通过调用程序而

执行

Q95:你认为怎么才能写相互好的程序

A95:一段好的程序要遵循从上到下步骤。这也能

使程序员和用户可以根据逻辑容易得读懂程序

Q96:怎么编写一个COBOL去访问一个JCL定义的

参数?你会在JCL的EXEC行上写PARM参数吗?

A96:l)用JCL的SYSINo//sysindd*这里你

写参数*/这样就能把参数传给COBOL

2)在JCL中用PARM语句,比如:在EXEC行写

parm==,john','david',那么你就必须在PGM

的连接区中为第一个值写变量长度和变量名,

如:abcpicx(4),就会在这个变量前加上之前的

PARMCjohn'david'),你需要用以上的方

法定义其它参数

Q97:既然已经知道COMP-3会占用较少的空间,

为什么还要编码S9(4)COMP

A97:这里S9(4)COMP是个小整数,所以2个数

值相当于一个字节,所以一共占用2字节。如果

是S9(4)COMP-3的情况就是1个数值占半个字

节。4个数值占用2个字节,符号占半个字节,

这么算一共是2个半字节,但是系统存储的最小

单位是字节,所以一共占3个字节

虽然C0MP-3占用少的空间(这里的较少是相对

于DISPLAY型说的),但是COMP占用少的时间,

效率更高。

Q98:在COBOL-85中一个数组最多能是几维的

A98:COBOL-85最多是七维,COBOL-84最多是三

01EMP-GRP.

49E-LENPICS9(4)COMP.

49E-NAMEPICX(25).

Q99:在COBOL中怎么申明一个带有类型为25位

字符型属性的变量

A99:答案见上

Q100:请区分COBOL和COBOLII(大部分程序是

用COBOLII写的,所以比较好理解,但是这和

COBOL是不同的)

A100:以下是COBOL与VSCOBOLII的不用点

支持MVS/XA和MVS/ESAoCOBOL提供的编译器和

OBJECT程序可以在24或者31位的寻址方式下

执行

支持VM/XA和VM/ESA。其提供的编译器和OBJECT

程序可以在24或者31位的寻址方式下执行

支持VSE/ESAo其提供的编译器和OBJECT程序

可以在VSE/ESA环境下执行

Q101:PERFORM是什么?VARYING是什么?(详细介

绍下这些子句)

AIOI:PERFORM语句是过程部的语句,它能将程

序控制权交给一段指定的程序,并按照指定的次

数执行(也就是说执行一段程序,PERFORMXXXN

TIMES)等到这段程序执行完之后(比如,指定

要执行的次数执行到了或者UNTIL后的判断逻

辑为真),那么程序控制权就会转到下一条执行

语句(也就是执行下一条语句,紧跟该PERFORM

的),有5种PERFORM语句:

基本PERFORM

PERFORMXXXNTIMES

PERFORMXXXUNTILYYY

PERFORMXXXVARYING

内嵌PERFORM

Q102:数据部中有几个区

A102:6个区1,文件区;2,工作单元区;3,

本地存储区;4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论