您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > COBOL经典面试题库(中文)
COBOL经典面试题库Q1:列举COBOL的DEVISIONA1:标识部,环境部,数据部,过程部Q2:COBOL有哪些可用的数据类型A2:字符型(这里指的是包含字母和数字),字母型,数字型Q3:INITIALIZE这个词做了些什么A3:将字母,字符,数字区域都置成空格(置空),将数字区置0,FILLER和OCCURSDEPENDINGON项不处理Q4:77层有什么作用A4:基本层数据项,不能用做细分别的层,也不能被细分(来源:)Q5:88层有什么作用A5:条件逻辑层Q6:66层有什么作用A6:重命名层Q7:ISNUMERIC这个子句怎么确定(也就是说确定句子的真值)A7:ISNUMERIC用在字符项,带符号数字,浮点数,不带符号数。如果目标项只含0~9则返回TRUE。但是,如果待测项目是个带符号数,那么他就含有0-9还有+和-05ARRAY1PICX(9)OCCURS10TIMES.05ARRAY2PICX(6)OCCURS20TIMESINDEXEDBYWS-INDEXQ8:COBOL中怎么建表/数组A8:如上.Q9:OCCURS子句能用在第一层吗A9:不能Q10:索引和下标有什么区别A10:下标可以指定数组中任意中位置的元素(只要知道其下标),下标只能是数字型常量或者数字型变量(但是不能在指定的时候修改,如:A(K+1)这样是不行的,要修改的话要在指定的外部改,如:ADD1TOK,而索引的话是从表头/数组头开始检索(以BYN的指定检索规律往后滚)再者,索引只能通过PERFORM,SEARCH和SET来修改,如果要在一个表中使用SEARCH,SEARCHALL,那这个表就要有索引(因为SEARCH,SEARCHALL的参数中指定索引,所以即使其有很多限制还是得用它)Q11:SERACH和SERACHALL有什么区别A11:SEARCH是顺序查找SERACHALL是2叉查找(相信数据结构学过2叉树的都不会陌生),在使用SEARCHALL前表必须有一个递增/递减的KEY,并且表已经按照其KEY值排序了,这样才能使用SEARCHALLQ12:为了使用SEARCHALL,存贮顺序是怎么样的A12:他必须是递增或者是递减的,默认地政。如果你想在一个递减顺序存贮的表/数组使用搜索的话,那么当定义表/数组的时候你应该加一个DESCENDINGKEY子句(这之前表要已经按指定的顺序排序了)Q13:什么是2叉查找A13:将你要找的目标项与数组的正中项比较,找到就结束搜索,没找到则继续如此循环(比较下一个中值),取哪一半取决于目标值大于中值还是小于中值PS:联想2叉树的查找规律就很好理解,因为所谓的“表“本身也就是数组Q14:我的程序有个数组定义了10项。因为有个BUG,我发现即使访问第11项,程序也不异常终止。那是出了什么问题A14:必须使用编译器的一个选项SSRANGE,如果你想检查数组的超界问题。默认是NOSSRANGEQ15:怎么在一个COBOL程序中排序?给出排序文件的定义,排序语法和意思A15:语法就是SORTfile-1ONASCENDING/DESCENDINGKEYkey….USINGfile-2GIVINGfile-3.USING后程序的输入接口,这个地方可以替换成一个输出过程,也就是说写一个过程往USING这个接口中导数据(要在这个过程中READ,ATEND,……),这个过程在将数据释放到执行排序的文件中之前执行,GIVING后是输出借口,用法类似。此例中输入文件是file-2输出文件是file3(这样个文件必须在文件区中用FD和在文件控制中用到SELECT)真正执行排序的file-1,这里需要注意的是file-1中的文件区不能用FD,应该用SD,file-2和3还是一样(用FD),具体可以看一下书上的例子Q16:怎么在JCL中定义一个排序文件来跑这个COBOL程序A16:用SORTWK01,SORTWK02,…..作为DATASETNAME。用多少取决于你要排序的数量,但是至少3个。Q17:执行一个区和一个段有什么区别A17:简单来说的话就是区的概念比段大,执行一个区就要执行其内部所有段,执行段的话只执行该段。Q18:EVALUATE语句有什么作用A18:EVALUATE就象个CASE语句(多重开关语句,学过C的总知道吧),不同点在于EVALUATE不需要BREAK,一旦匹配就跳出EVALUATE语句了Q19)WhatarethedifferentformsofEVALUATEstatement?A19)EVALUATEEVALUATESQLCODEALSOFILE-STATUSWHENA=BANDC=DWHEN100ALSO‘00′imperativestmtimperativestmtWHEN(D+X)/Y=4WHEN-305ALSO‘32′imperativestmtimperativestmtWHENOTHERWHENOTHERimperativestmtimperativestmtEND-EVALUATEEND-EVALUATEEVALUATESQLCODEALSOA=BEVALUATESQLCODEALSOTRUEWHEN100ALSOTRUEWHEN100ALSOA=BimperativestmtimperativestmtWHEN-305ALSOFALSEWHEN-305ALSO(A/C=4)imperativestmtimperativestmtEND-EVALUATEEND-EVALUATEQ20:怎么跳出一条EVALUATE语句A20:象18题目说的那样,一旦匹配了某一个“WHEN“语句就自动跳出了,不需要什么额外的代码来跳出Q21:在一个EVALUATE语句的某个WHEN分支中能否再插入复杂的情况(也就是嵌套)A21:当然可以,当多个参数作为控制变量的时候1个WHEN内部可以嵌套更多的情况Q22:什么是结束终止符A22:结束终止符是搭配一些范围指令的,也就是标识一些范围指令的结束。如:EVALUATE,END-EVALUATE;IF,END-IF如果没有该结束符,该条语句将终止不了Q23:怎么使用内嵌的PERFORMA23:PERFORM……END-PERFORM所谓内嵌也就是PERFORM被嵌在某些比如循环语句中担当执行主体,同时通过UNTIL来指定结束判定Q24:什么时候使用内嵌式PERFORMA24:当该段PERFORM的内容不被其他段用到,只在某些局部代码中(当然PERFORM的主体所用到的参数也都是局部的,例如循环)使用,如果PERFORM主体的代码是一般的(用到了别的程序段的变量),还是使用PERFORMParaname这样的形式比较好(也就是相对与内于PERFORM的外部PERFORM)。Q25:CONTINUE和NEXTSENTENCE有什么不同A25:两者比较相似,都是将程序控制权交给下一句,但是用NEXTSENTENCE的时候,只有当碰到句结束符(就是句末的‘.’)才会将执行下句这道题我用了2个例子测试了一下:1:IFTEST-NUMERIC0THENNEXTSENTENCEEND-IFDISPLAY‘LINE1′DISPLAY‘LINE2′.DISPLAY‘LINE3′.(请注意代码中的‘.’号)结果输出:LINE32:IFTEST-NUMERIC0THENCONTINUEEND-IFDISPLAY‘LINE1′DISPLAY‘LINE2′.DISPLAY‘LINE3′.结果输出:LINE1LINE2LINE3相信已经区别已经比较明显了,NEXTSENTENCE是靠句末的结束符(也就是‘.‘)来判断下一句的,而CONTINUE是通过句头的保留字(这例中是DISPLAY)来判断下一句的Q26:EXIT语句有什么作用A26:什么都不做,如果用到的话,肯定是作为一段的唯一的一句话,注意:这里不是子程序中用的EXITPROGRAME01WS-TOPPICX(1)01WS-TOP-REDREDEFINESWS-TOPPICX(2).IfyouMOVE‘12′toWS-TOP-RED,DISPLAYWS-TOPwillshow1whileDISPLAYWS-TOP-REDwillshow12.Q27:能不能把X(100)的区域重定义成X(200)A27:可以,重定义只是相当于把两个区域的首地址放在一起,从上面这个例子也很好理解Q28:能不能把X(200)的区域重定义成X(100)A28:可以,原因同上Q29:怎么解决SOC-7错误A29:基本上你要看一下一些比较奇怪的数据,很多导致SOC7的原因都是因为数据项的初始化。首先检查所有的可能性。某些功能可能提供一个空间用来存贮那些运行时间ABEND,并且提供最近一次运行时间ABEND的偏移量的说明(也就是位于队列中的位置),检查编译器的输出XREF队列以获得一些关键字。然后你就能看下源代码找出BUG。为了捕获一些运行时间的信息,你需要在JCL中建一个DATASET(象SYSABOUT这样的),如果这些都没用,那么再审查一下ERROR出现的位置判断一下原因。有些软件安装了会提供批处理程序调试工具,那么可以就可以用这些工具了。PS:以上大意就是说SOC-7这个错误多半是因为数据项初始化造成的,然后你应该到运行后编译器的返回信息中去找这些ERROR出现的地方(我们常用的话应该就是走查LOG),查的时候多注意下数据项的初始化问题。Q30:在内部十进制区域和显示十进制区域符号是怎么存贮的A30:内部十进制是一个数字占4位(半字节),内存中用16进制来存,最后在追加4位作为符号,如-4=01001101(末尾的1101表示负,1100表示正),而我们用于显示的十进制,符号并不占空间,只是在最后一位上标识一下Q31:COMP-3区怎么存储符号A31:COMP-3采用的是内部十进制的存储方式,所谓内部十进制就是压缩式的外部十进制存储方式,上题讲过外部十进制每个数值都用1个字节存储,但前4位是存符号的,这样比较浪费存储空间,所以内部十进制的存储方式就用半个字节(4位)存储一个数字,在最后增加4位作为符号(1100(C)为正,1101(D)为负)Q32:COMP区怎么存储符号A32:COMP是采用定点二进制的方式存储数据,也就是将一个十进制的数值转化成二进制再进行存储,因为机器存储的形式也是二进制,所以定点二进制的读取是最快速的,因为COMP型的数据是用做计算(也就是说不用再转化成十进制打印),使用定点二进制将会非常高效。这样的存储方式符号是保存在最高有效果位上,如:10=(00001010)₂,-10=(00011010)₂Q33:COMP和COMP-3什么区别A33:这之前讲过了,COMP采用定点二进制存储,COMP-3采用内部十进制存储Q34:COMP-1是什么?什么是COMP-2A34:其实之所以定义计算型数据(COMP~COMP-3)以区别DISPLAY(能计算,但是要用于打印)是为了考虑效率,因为大家知道文件导入(也就是USER使用的数据)一般是十进制的,而机器存储都是二进制,那么当定义的数据光用来计算不用打印,处于效率考虑会把它定义成COMP型,当然就会衍生出几类COMP以适应不用的数据类型的存储。很明显,这里COMP-1就是采用内部短浮点(4个字节表示一个数,8位指数部分,24位表示数字部分),COMP-2用内部长浮点型(8个字节表示一个书,16位指数部分,48位表示数字部分)以适应浮点数据的存储,长浮点精确度更高.Q35:怎么定义一个COMP-1型?COMP-2型A35:不要用PICTURE描述,因为是确定分配多少内存的,直接用USAGE,如01WS-VARUSAGECOMP-1Q36:一个S9(7)的COMP-3型占用多少字节?A36:占用4字节。COMP-3用内部十进制存储,S9(7)中的S是要占空间的,符号占4位,7个数字,每个4位(半个字节),所以是(4+7*4)/8=
本文标题:COBOL经典面试题库(中文)
链接地址:https://www.777doc.com/doc-8568925 .html