COBOL经典面试题库(中文)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

COBOL经典面试题库

Q1:列举COBOL的DEVISION

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

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

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

Q3:INITIALIZE这个词做了些什么

A3:将字母,字符,数字区域都置成空格(置空),将数字区置0,FILLER和OCCURS DEPENDING ON项不处理

Q4:77层有什么作用

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

(来源:)

Q5:88层有什么作用

A5:条件逻辑层

Q6:66层有什么作用

A6:重命名层

Q7:IS NUMERIC这个子句怎么确定(也就是说确定句子的真值)

A7:IS NUMERIC用在字符项,带符号数字,浮点数,不带符号数。如果目标项只含0~9则返回TRUE。但是,如果待测项目是个带符号数,那么他就含有0-9还有+和-

05 ARRAY1 PIC X(9) OCCURS 10 TIMES.

05 ARRAY2 PIC X(6) OCCURS 20 TIMES INDEXED BY WS-INDEX

Q8:COBOL中怎么建表/数组

A8:如上.

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

A9:不能

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

A10:下标可以指定数组中任意中位置的元素(只要知道其下标),下标只能是数字型常量或者数字型变量(但是不能在指定的时候修改,如: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前表必须有一个递增/递减的KEY,并且表已经按照其KEY值排序了,这样才能使用SEARCH ALL

Q12:为了使用SEARCH ALL,存贮顺序是怎么样的

A12:他必须是递增或者是递减的,默认地政。如果你想在一个递减顺序存贮的表/数组使用搜索的话,那么当定义表/数组的时候你应该加一个DESCENDING KEY子句(这之前表要已经按指定的顺序排序了)

Q13:什么是2叉查找

A13:将你要找的目标项与数组的正中项比较,找到就结束搜索,没找到则继续如此循环(比较下一个中值),取哪一半取决于目标值大于中值还是小于中值

PS:联想2叉树的查找规律就很好理解,因为所谓的“表“本身也就是数组

Q14:我的程序有个数组定义了10项。因为有个BUG,我发现即使访问第11项,程序也不异常终止。那是出了什么问题

A14:必须使用编译器的一个选项SSRANGE,如果你想检查数组的超界问题。默认是NOSSRANGE

Q15:怎么在一个COBOL程序中排序?给出排序文件的定义,排序语法和意思

A15:语法就是SORT file-1 ON ASCENDING/DESCENDING KEY key…. USING file-2 GIVING file-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:用SORTWK01, SORTWK02,…..作为DATA SET NAME。用多少取决于你要排序的数量,但是至少3个。

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

A17:简单来说的话就是区的概念比段大,执行一个区就要执行其内部所有段,执行段的话只执行该段。

Q18:EVALUATE语句有什么作用

A18:EVALUATE就象个CASE语句(多重开关语句,学过C的总知道吧),不同点在于EVALUATE 不需要BREAK,一旦匹配就跳出EVALUATE语句了

Q19) What are the different forms of EVALUATE statement?

A19)

EVALUATE EVALUATE SQLCODE ALSO FILE-STATUS

WHEN A=B AND C=D WHEN 100 ALSO ‘00′

imperative stmt imperative stmt

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

imperative stmt imperative stmt

WHEN OTHER WHEN OTHER

imperative stmt imperative stmt

END-EVALUATE END-EVALUATE

EVALUATE SQLCODE ALSO A=B EVALUATE SQLCODE ALSO TRUE

WHEN 100 ALSO TRUE WHEN 100 ALSO A=B

imperative stmt imperative stmt

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

imperative stmt imperative stmt

END-EVALUATE END-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主体的代码是一般的(用到了别的程序段的变量),还是使用PERFORM Para name这样的形式比较好(也就是相对与内于PERFORM的外部PERFORM)。

Q25:CONTINUE 和NEXT SENTENCE有什么不同

A25:两者比较相似,都是将程序控制权交给下一句,但是用NEXT SENTENCE的时候,只有当碰到句结束符(就是句末的‘.’)才会将执行下句

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

1:IF TEST-NUMERIC > 0

THEN NEXT SENTENCE

END-IF

DISPLAY ‘LINE1′DISPLAY ‘LINE2′. DISPLAY ‘LINE3′.(请注意代码中的‘.’号)

相关文档
最新文档