COBOL经典面试题目.docx
《COBOL经典面试题目.docx》由会员分享,可在线阅读,更多相关《COBOL经典面试题目.docx(19页珍藏版)》请在冰豆网上搜索。
COBOL经典面试题目
JCL------JobControlLanguage(作业控制语言)
@JCL代表作业控制语言、JCL是一组控制语句,为需要处理的JOB提供必要的规范。
@JCL每行80个字符,至今未变
@JCL必须包括3个JCL基本语句
作业语句(JOB):
表示一个作业的开始,提供必要的运行参数
执行语句(EXEC):
标识一个作业步的开始,定义本作业步所要执行的程序或过程
数据定义语句(DD):
用于描述应用程序所需要的数据文件。
@/*语句:
表示流内数据结束或调用JES控制语句
@//*语句:
注释语句,从第4列到第80列写出注释内容
@//语句:
空语句,用以标识一个作业的结束
@PROC语句:
流内过程(IN-STREAMPROCEDURE)或编目过程(CATALOGEDPROCEDURE)的起始标记
@PEND语句:
表示一个流内过程的结束
@Command语句:
操作员用这个语句在输入流中写入操作命令
@名字从第3行写,长度必须是1到8个字符
@JOBLIB和STEPLIB的区别
JOBLIB语句是放在JOB语句后面的,作用于所有的作业步,它不能放在编目过程里
STEPLIB语句是放在EXEC语句后面的,只作用于本作业步,但是它可以放在编目过程里。
@一个顺序文件有多少extents,VSAM?
顺序文件为在一个卷上为16extents,VSAM文件为123
@DISP=MOD既可以扩展一个顺序DATASET,也可以创建一个没有存在的DATASET,对于一个
存在的DATASET,记录被追加到末尾。
如果没存在系统将把MOD当成NEW看,提供一个没有使
用的空间参数。
如果空间参数使用过了,系统则终止JOB并且不创建DATASET,MOD可以被用
来扩展一个DATASET的空间。
经常用MOD为一个编目的DATASET指定CATLG的属性,既使它已
经编目了,因此在编目中可以增加任何连续的空间来写记录。
@DATASET怎么从一个STEP传递到另一个STEP?
传递由DISP参数决定,使用DATASET只能被传递到下一个STEP
@//YEARDATDDDSN=JAN.DATA,DISP=SHR
//DDDSN=FEB.DATA,DISP=SHR
//DDDSN=MAR.DATA,DISP=SHR
DATASET怎么级联的?
DATASET级联是通过先写一个一般的DD语句,然后加上一个没有DDNAME的DD语句,
看读取顺序被级联。
@在procs那些JCL语句不能命名
在过程中不允许的JCL语句:
1.JOB,分隔符(/*),或空语句
2.JOBLIB或JOBCATDD语句
3.DD*或DATA语句
4.任何JES2或JES3控制语句
@一个数据集的初次分配是什么
数据集建立时的空间
@一个数据集的主分配和从分配有什么区别
从分配是当要求更多空间时所分配的
@你如何创建一个临时数据集吗?
在哪里可以使用它们?
可以创建临时数据集通过不指定任何DSNAME或指定DSN=&&TEMP。
我们把它们输出到在同意作业步上的工作。
一旦作业完成,这个临时数据集就会被删除。
@甚么是S0C4错误
存储违反错误由多种原因决定,例,READING是一个美有打开的文件,?
?
?
?
?
?
@SD37,SB37,SE37abends是甚么
表示磁盘空间不足
SD37没有指定的从分配
SB37终止卷,并且没有根多的卷被指定
SE37已经分配到最大16extents
@甚么是S322abend
需要更多的CPU时间程序已经超过了默认的为该作业分配的CPU时间,陷入一个无限循环..
@TIME参数的意思是甚么?
TIME=1440表示甚么
TIME当程序需要更多的CPU时间时用于克服S322abends
TIME=1440表示作业的运行没有时间限制,即24小时。
@COND=EVEN
即使先前作业步异常终止,本作业步都要执行
@COND=ONLY
只有先前作业步异常终止,本作业步才执行
@如何在一个JCL中检查是否有语法错误
在JOB过程中,TYPERUN=SCAN或JSCAN.
@在PROC中的流数据可以编码吗
No
如何解决这个限制呢
在PROC内编写SYSINDDDUMMY,然后从JCL用流数据覆盖它
@当一个JCL中既定义了JOBLIB,又定义了STEPLIB,则会怎样
JOBLIB被忽略
@在JCL里寻找库的顺序是什么?
首先在STEPLIB或JOBLIB指定的库中找,然后再系统库中找,
例如SYS1。
LINKLIB。
系统库在连接表中指定。
@DCB关键字是什么意思,与它相关的一些关键字有哪些?
DCB是在DD语句中用来描述DATASET的关键字,与其相关的关键字有BLKSIZE,DEN,LRECL。
@BLKSIZE和LRECL有什么不同?
LRECL是指逻辑记录长度。
BLKSIZE指多个记录长度。
@实用程序介绍:
IEFBR14:
什么也不做,返回码0.例如:
DD语句中创建数据集
IEBGENER:
建立顺序数据集,PDS。
打印顺序数据集
IEBCOPY:
拷贝或合并分区数据集和扩展分区数据集
COBOL&COBOLII
Q2)WhatarethedifferentdatatypesavailableinCOBOL?
Q:
COBOL有哪些可用的数据类型
A:
字符型(这里指的是包含字母和数字),字母型,数字型
Q3)WhatdoestheINITIALIZEverbdo?
-GS
Q:
INITIALIZE这个词做了些什么
A:
将字母,字符,数字区域都置成空格(置空),将数字区置0,FILLER和OCCURSDEPENDINGON项不处理
Q4)Whatis77levelusedfor?
Q:
77层有什么作用
A:
基本层数据项,不能用做细分别的层,也不能被细分
Q5)Whatis88levelusedfor?
Q:
88层有什么作用
A:
条件逻辑层
Q6)Whatislevel66usedfor?
Q:
66层有什么作用
A:
重命名层
Q7)WhatdoestheISNUMERICclauseestablish?
Q:
ISNUMERIC这个子句怎么确定(也就是说确定句子的真值)
A:
ISNUMERIC用在字符项,带符号数字,浮点数,不带符号数。
如果目标项只含0~9则返回TRUE。
但是,如果待测项目是个带符号数,那么他就含有0-9还有+和-
Q8)Howdoyoudefineatable/arrayinCOBOL?
A8)ARRAYS.
05ARRAY1PICX(9)OCCURS10TIMES.
05ARRAY2PICX(6)OCCURS20TIMESINDEXEDBYWS-INDEX
Q:
COBOL中怎么建表/数组
A:
如上.
Q:
OCCURS子句能用在第一层吗
A:
不能
Q10)Whatisthedifferencebetweenindexandsubscript?
-GS
Q:
索引和下标有什么区别
A:
下标可以指定数组中任意中位置的元素(只要知道其下标),下标只能是数字型常量或者数字型变量(但是不能在指定的时候修改,如:
A(K+1)这样是不行的,要修改的话要在指定的外部改,如:
ADD1TOK,而索引的话是从表头/数组头开始检索(以BYN的指定检索规律往后滚)
再者,索引只能通过PERFORM,SEARCH和SET来修改,如果要在一个表中使用SEARCH,SEARCHALL,那这个表就要有索引(因为SEARCH,SEARCHALL的参数中指定索引,所以即使其有很多限制还是得用它)
Q11)WhatisthedifferencebetweenSEARCHandSEARCHALL?
-GS
Q:
SERACH和SERACHALL有什么区别
A:
SEARCH是顺序查找
SERACHALL是2叉查找(相信数据结构学过2叉树的都不会陌生),在使用SEARCHALL前表必须有一个递增/递减的KEY,并且表已经按照其KEY值排序了,这样才能使用SEARCHALL
Q12)WhatshouldbethesortingorderforSEARCHALL?
-GS
Q:
为了使用SEARCHALL,存贮顺序是怎么样的
A:
他必须是递增或者是递减的,默认地政。
如果你想在一个递减顺序存贮的表/数组使用搜索的话,那么当定义表/数组的时候你应该加一个DESCENDINGKEY子句(这之前表要已经按指定的顺序排序了)
Q14)Myprogramhasanarraydefinedtohave10items.Duetoabug,Ifindthateveniftheprogramaccessthe
11thiteminthisarray,theprogramdoesnotabend.Whatiswrongwithit?
Q:
我的程序有个数组定义了10项。
因为有个BUG,我发现即使访问第11项,程序也不异常终止。
那是出了什么问题
A:
必须使用编译器的一个选项SSRANGE,如果你想检查数组的超界问题。
默认是NOSSRANGE
Q18)WhatistheuseofEVALUATEstatement?
-GS
Q:
EVALUATE语句有什么作用
A:
EVALUATE就象个CASE语句(多重开关语句,学过C的总知道吧),不同点在于EVALUATE不需要BREAK,一旦匹配就跳出EVALUATE语句了
Q20)HowdoyoucomeoutofanEVALUATEstatement?
-GS
Q:
怎么跳出一条EVALUATE语句
A:
象18题目说的那样,一旦匹配了某一个“WHEN“语句就自动跳出了,不需要什么额外的代码来跳出
Q21)InanEVALUATEstatement,canIgiveacomplexconditiononawhenclause?
Q:
在一个EVALUATE语句的某个WHEN分支中能否再插入复杂的情况(也就是嵌套)
A:
当然可以,当多个参数作为控制变量的时候1个WHEN内部可以嵌套更多的情况
Q22)Whatisascopeterminator?
Giveexamples.
Q:
什么是结束终止符
A:
结束终止符是搭配一些范围指令的,也就是标识一些范围指令的结束。
如:
EVALUATE,END-EVALUATE;IF,END-IF如果没有该结束符,该条语句将终止不了
Q23)Howdoyoudoin-linePERFORM?
-GS
Q:
怎么使用内嵌的PERFORM
A:
PERFORM......
END-PERFORM
所谓内嵌也就是PERFORM被嵌在某些比如循环语句中担当执行主体,同时通过UNTIL来指定结束判定
Q24)Whenwouldyouusein-lineperform?
Q:
什么时候使用内嵌式PERFORM
A:
当该段PERFORM的内容不被其他段用到,只在某些局部代码中(当然PERFORM的主体所用到的参数也都是局部的,例如循环)使用,如果PERFORM主体的代码是一般的(用到了别的程序段的变量),还是使用PERFORMParaname这样的形式比较好(也就是相对与内于PERFORM的外部PERFORM)。
Q25)WhatisthedifferencebetweenCONTINUE&NEXTSENTENCE?
Q:
CONTINUE和NEXTSENTENCE有什么不同
A:
两者比较相似,都是将程序控制权交给下一句,但是用NEXTSENTENCE的时候,只有当碰到句结束符(就是句末的‘.’)才会将执行下句
这道题我用了2个例子测试了一下:
1:
IFTEST-NUMERIC>0
THENNEXTSENTENCE
END-IF
DISPLAY'LINE1'DISPLAY'LINE2'.DISPLAY'LINE3'.(请注意代码中的‘.’号)
结果输出:
LINE3
2:
IFTEST-NUMERIC>0
THENCONTINUE
END-IF
DISPLAY'LINE1'DISPLAY'LINE2'.DISPLAY'LINE3'.
结果输出:
LINE1
LINE2
LINE3
相信已经区别已经比较明显了,NEXTSENTENCE是靠句末的结束符(也就是‘.‘)来判断下一句的,而CONTINUE是通过句头的保留字(这例中是DISPLAY)来判断下一句的
Q26)WhatdoesEXITdo?
Q:
EXIT语句有什么作用
A:
什么都不做,如果用到的话,肯定是作为一段的唯一的一句话,注意:
这里不是子程序中用的EXITPROGRAME
Q27)CanIredefineanX(100)fieldwithafieldofX(200)?
Q:
能不能把X(100)的区域重定义成X(200)
A:
可以,重定义只是相当于把两个区域的首地址放在一起,从上面这个例子也很好理解
A28)CanIredefineanX(200)fieldwithafieldofX(100)?
Q:
能不能把X(200)的区域重定义成X(100)
A:
可以,原因同上
Q32)HowissignstoredinPackedDecimalfieldsandZonedDecimalfields?
Q32)PackedDecimalfields:
Signisstoredasahexvalueinthelastnibble(4bits)ofthestorage.
ZonedDecimalfields:
Asadefault,signisoverpunchedwiththenumericvaluestoredinthelastbite.
Q:
在内部十进制区域和显示十进制区域符号是怎么存贮的
A:
内部十进制是一个数字占4位(半字节),内存中用16进制来存,最后在追加4位作为符号,如-4=01001101(末尾的1101表示负,1100表示正),而我们用于显示的十进制,符号并不占空间,只是在最后一位上标识一下
Q33)Howissignstoredinacomp-3field?
-GS
Q:
COMP-3区怎么存储符号
A:
COMP-3采用的是内部十进制的存储方式,所谓内部十进制就是压缩式的外部十进制存储方式,上题讲过外部十进制每个数值都用1个字节存储,但前4位是存符号的,这样比较浪费存储空间,所以内部十进制的存储方式就用半个字节(4位)存储一个数字,在最后增加4位作为符号(1100(C)为正,1101(D)为负)
Q34)HowissignstoredinaCOMPfield?
-GS
Q:
COMP区怎么存储符号
A:
COMP是采用定点二进制的方式存储数据,也就是将一个十进制的数值转化成二进制再进行存储,因为机器存储的形式也是二进制,所以定点二进制的读取是最快速的,因为COMP型的数据是用做计算(也就是说不用再转化成十进制打印),使用定点二进制将会非常高效。
这样的存储方式符号是保存在最高有效果位上,如:
10=(00001010)₂,
-10=(00011010)₂
Q35)WhatisthedifferencebetweenCOMP&COMP-3?
Q:
COMP和COMP-3什么区别
A:
这之前讲过了,COMP采用定点二进制存储,COMP-3采用内部十进制存储
Q36)WhatisCOMP-1?
COMP-2?
Q:
COMP-1是什么?
什么是COMP-2
A:
其实之所以定义计算型数据(COMP~COMP-3)以区别DISPLAY(能计算,但是要用于打印)是为了考虑效率,因为大家知道文件导入(也就是USER使用的数据)一般是十进制的,而机器存储都是二进制,那么当定义的数据光用来计算不用打印,处于效率考虑会把它定义成COMP型,当然就会衍生出几类COMP以适应不用的数据类型的存储。
很明显,这里COMP-1就是采用内部短浮点(4个字节表示一个数,8位指数部分,24位表示数字部分),COMP-2用内部长浮点型(8个字节表示一个书,16位指数部分,48位表示数字部分)以适应浮点数据的存储,长浮点精确度更高.
Q37)HowdoyoudefineavariableofCOMP-1?
COMP-2?
Q:
怎么定义一个COMP-1型?
COMP-2型
A:
不要用PICTURE描述,因为是确定分配多少内存的,直接用USAGE,如01WS-VARUSAGECOMP-1
Q38)HowmanybytesdoesaS9(7)COMP-3fieldoccupy?
Q:
一个S9(7)的COMP-3型占用多少字节?
A:
占用4字节。
COMP-3用内部十进制存储,S9(7)中的S是要占空间的,符号占4位,7个数字,每个4位(半个字节),所以是(4+7*4)/8=4字节(字节和位的比例不要搞错了哦)
Q39)HowmanybytesdoesaS9(7)SIGNTRAILINGSEPARATEfieldoccupy?
Q:
一个S9(7)SIGNTRAILINGSEPARATE区域占多少字节
A:
这里是每个符号单独分配空间(也就是没个数值用1个字节表示,就象最常用的DISPLAY型的分配方式),算上S的空间,所以是7+1=8字节。
一般情况省略的SIGN子句都是隐含SIGNISTRAILING的
Q40)HowmanybyteswillaS9(8)COMPfieldoccupy?
Q:
一个S9(8)COMP区域占多少字节
A:
如果之前关于COMP的解释听懂了的话,那很显然就是4字节了(定点二进制用2字节存储1~4,4字节存储5~9,……类推,你可以自己推下),如果这块还不懂的可以问我或者查下书
Q41)WhatisthemaximumvaluethatcanbestoredinS9(8)COMP?
Q41)99999999
Q:
S9(8)COMP型最多存储的最大值是什么
A:
除了8个数值外不忽略符号位
Q43)Whatisthemaximumsizeofa01leveliteminCOBOLI?
inCOBOLII?
Q43)InCOBOLII:
16777215
Q:
COBOL1定义的01层最大大小是多少,COBOLII中?
A:
COBOLII中是16777215,没什么说的,自己翻书
Q44)HowdoyoureferencethefollowingfileformatsfromCOBOLprograms:
Q:
COBOL中如何涉及(引用调用)以下这些文件
A:
文件类型这里是COBOL在文件控制区中的文件组织访问形式(SELECT下面那句)这里最好翻翻书或者事例代码反复记忆
定长文件用ORGANISATIONISSEQUENTIAL.UseRECORDINGMODEISF,BLOCKCONTAINS0
固定但是不是以块的组织形式用ORGANISATIONISSEQUENTIAL.UseRECORDINGMODEISF,不要使用BLOCKCONTAINS(因为不是以块的组织形式)
变长文件用ORGANISATIONISSEQUENTIAL.UseRECORDINGMODEISV,BLOCK,CONTAINS0.在之后的文件区中的文件描述FD中不要编码记录长度为4字节
变长但是不是以块的组织形式用ORGANISATIONISSEQUENTIAL.UseRECORDINGMODEISV,同样不要使用BLOCKCONTAINS也不要编码记录长度为4字节(原因同上)
ESDSVSAM文件用ORGANISATIONISSEQUENTIAL
KSDSVSAM文件用ORGANISATIONISINDEXED,RECORDKEYIS,ALTERNATERECORD
作为关键字的RRDS文件用ORGANISATIONISRELATIVE,RELATIVEKEYIS
打印文件用ORGANISATIONISSEQUENTIAL.UseRECORDINGMODEISF,BLOCKCONTAINS0.(UseRECFM=FBAinJCLDCB)
Q45)WhataredifferentfileOPENmodesavailableinCOBOL?
Q:
COBOL中有哪些OPEN方式
A:
有INPUT,OUTPUT,I-O,EXTEND这些OPEN模式
Q46)WhatisthemodeinwhichyouwillOPENafileforwriting?
-GS
Q:
当你想OPEN一个文件用来写入的时候,这属于什么方式
A:
OUTPUT,EXTEND方式
Q48)CanyouREWRITEarecordinanESDSfile?
CanyouDELETEarecordfromit?
Q:
能否REWRITE(重写)一个ESDS文件?
能否删除ESDS中的一条记录?
A:
能够重写(但是记录长度必须相同),但是不能删除
Q51)WhatisStaticandDynamiclinking?
Q:
什么是静态和动态连接
A:
在静态连接中,被调用的子程序是连接到调用程序,但是在动态连接中,被调用子程序和调用主程序的可执行模块是都存在的(分开的)。
你可以在连接选项中选择DYNAM或者NODYNAM(就算你选择了NODYNAM,CALL标识符还是回把它自动转换成一个动态调用)。
静态子程序下次被调用时不会再处于其初始状态,除非用INITIAL初始化或者用CANCEL。
动态的都是以初始状态存在的。
Q53)Whatcompileroptionwouldyouusefordynamiclinking?
Q:
如果要动态连接那么要用什么编译选项
A:
DYNAM
Q62)WhatisaninlinePERFORM?
Whenwouldyouuseit?
Anythingelsetosayabou