COBOL面试题及答案TOP 50+

2025年3月17日 | 阅读13分钟

以下是最常问的COBOL面试题及答案列表。

1) 什么是COBOL?/ 您对COBOL了解什么?

COBOL是Common Business Oriented Language的缩写。它是最古老的编程语言之一,主要用于商业领域,包括政府机构的职能、金融和管理系统。它是一种弱类型、静态类型的语言。COBOL编程语言主要用于大型批处理和事务处理作业,以及解决复杂的业务问题。


2) COBOL是一种过时的编程语言吗?它还被使用吗?/ 现在学习COBOL编程语言还有价值吗?

COBOL是最古老的编程语言之一,这是一个事实,但你不能说它是一种过时的编程语言。它仍然被使用,是的,它仍然值得学习。这取决于用户或程序员是否要维护它们或将其移植到其他编程语言。

COBOL使很多事情变得容易。它是一种有60多年历史的编程语言,但最近由于一些政府机构和项目的需求,这种语言的需求有所增加。如今,COBOL被用于许多政府项目,程序员在许多州政府运营中也使用它。


3) COBOL编程语言是如何开发的?/ COBOL编程语言的历史是什么?

1959年,美国国防部成立了CODASYL(Conference on Data Systems Language的缩写)。成立CODASYL的主要目的是开发一种名为COBOL的计算机编程语言。该语言的主要目的是满足商业、管理和金融需求。它是一种简单的语言,使用简单的英语术语和短语,以便业务用户能够轻松理解并通过COBOL满足他们的数据处理需求。


4) COBOL支持哪些不同的数据类型?

COBOL主要支持三种数据类型:

  • 字母数字 (X):字母数字数据类型可以同时包含字母和数字值。
  • 字母 (A):COBOL编程语言的字母数据类型可以包含A-Z范围内的任何字母变量。
  • 数字 (9):数字数据类型在COBOL编程中表示0-9之间的数字值。

5) COBOL中的下标(subscript)和索引(index)有什么区别?

下标和索引的主要区别在于,下标称为数组的出现次数。另一方面,索引是指从数组开头开始的偏移量。索引只能通过PERFORM、SEARCH和SET进行修改。


6) COBOL有哪些显著的特点?

以下是COBOL的一些关键特性列表:

  • COBOL是一种标准编程语言,可以在各种机器上进行编译和执行。
  • COBOL编程语言最适合面向业务的应用程序,因为它能够处理大量数据。
  • COBOL提供了多种调试和测试工具。
  • COBOL是一种结构化语言,有不同的分部,因此在COBOL中调试很容易。

7) COBOL程序中有哪些不同的分部?

COBOL程序中使用的不同分部有:

  • 标识分部 (Identification Division)
  • 环境分部 (Environment Division)
  • 数据分部 (Data Division)
  • 过程分部 (Procedure Division)

8) COBOL编程语言中的分节(section)和段落(paragraph)有什么区别?

在COBOL编程语言中,分节包含属于该分节的所有段落,并且必须被执行。另一方面,段落只包含必须被执行的那个段落。


9) “IS NUMERIC”子句是做什么用的?/ 您如何理解COBOL中的“IS NUMERIC”子句?

在COBOL编程语言中,“IS NUMERIC”子句用于检查一个项是否为数字。如果被检查的项只包含数字(0到9),则返回TRUE。该项可以是正数或负数。


10) COBOL编程语言中的66级和88级是什么?

在COBOL编程语言中,66级用于RENAME子句,88级用于条件名称。


11) COBOL中的范围终止符(scope terminator)是什么?

在COBOL中,范围终止符用于标记动词的结束。例如,IF和END-IF。


12) COBOL中SEARCH和SEARCH ALL的区别是什么?

在COBOL中,SEARCH命令用于顺序搜索,而SEARCH ALL命令用于二分搜索,其中表或数组必须使用ASCENDING或DESCENDING键进行排序。


13) NEXT SENTENCE和CONTINUE有什么区别?

NEXT SENTENCE将控制转移到下一个句子,而CONTINUE则像一个空语句,它会继续执行。


14) COBOL中有哪些不同的文件打开模式?

COBOL中有四种文件打开模式。它们是:

  • 输入
  • 输出
  • 输入-输出 (Input-Output)
  • 扩展 (Extend)

15) COBOL中可以定义的numeric字段的最大大小是多少?

COBOL中可以定义的numeric字段的最大大小是PIC 9(18)。


16) COBOL中的静态链接(Static Linking)和动态链接(Dynamic Linking)有什么区别?

在静态链接中,子程序链接到调用程序中。另一方面,在动态链接中,关键程序和子程序将保持为单独的模块。可以通过链接编辑选项 DYNAM 或 NODYNAM 来实现静态链接和动态链接。


17) COBOL编程语言作为一种商业语言的主要特点是什么?

COBOL是一种编程语言,也是一种面向业务的应用程序。它具有许多有助于企业管理和更新数据的特性。作为一种商业语言,COBOL可以处理大量数据。它方便程序员在许多机器上编译、执行和运行COBOL。如果需要调试解决方案,它也可以用于调试和测试工具。不同版本的COBOL可以多次增强其功能。


18) EVALUATE语句在COBOL中有何用途?

在COBOL中,EVALUATE语句就像一个case语句。它也可以用作嵌套IF。EVALUATE语句和case语句的主要区别在于EVALUATE语句不使用“break”,一旦找到匹配项,控制就会从EVALUATE中退出。


19) 编写结构化COBOL程序时应遵循哪些准则?

编写结构化COBOL程序时,我们必须遵循一定的格式,以便代码能够正确实现。例如,在构建case时,我们可以每次都使用EQUIVALENT语句。在嵌套时,我们应该使用范围终止符,当我们希望程序执行某些操作时,我们应该尝试使用IN-LINE PERFORM语句。我们还可以使用TEST BEFORE和TEST AFTER语句来编写do-while循环语句。


20) PERFORM ... WITH TEST AFTER和PERFORM ... WITH TEST BEFORE有什么区别?

PERFORM … WITH TEST BEFORE:如果指定了TEST BEFORE,则在每次重复执行指定的PERFORM范围时,都会在开始时测试条件。

PERFORM … WITH TEST AFTER:如果指定了TEST AFTER,则在每次重复执行PERFORM范围时,都会在结束时测试条件。在TEST AFTER中,该范围至少会执行一次。


21) COBOL的COPY语句中的REPLACING选项有什么用途?

在COBOL编程语言中,REPLACING选项允许在需要时多次使用相同的COPY。它会更改同一代码中的替换值。

语法


22) COBOL编程语言中的范围终止符有什么用途?

在COBOL编程语言中,范围终止符用于标记动词的结束。

示例:IF和END-IF。


23) 为什么不能在01级别定义Occurs子句?

我们不能在01级别定义Occurs子句,因为01是记录级别。我们重复记录中的字段,而不是记录本身。所以,我们不能在01级别使用Occurs子句。


24) ON SIZE ERROR选项在捕获错误中的作用是什么?/ ON SIZE ERROR选项可以捕获哪些类型的错误?

ON SIZE ERROR选项用于捕获以下类型的错误:

  • 定点溢出。
  • 数字0的0次幂。
  • 除以零
  • 数字0的负数次幂。
  • 负数次幂的分数

25) 结构化COBOL程序和面向对象COBOL程序有什么区别?

结构化编程是一种逻辑的编程方式,其中函数被分成模块并进行逻辑操作。COBOL是一种结构化且非常用户友好的编程语言。它是最古老的编程语言之一。它为大型管理系统提供的功能不易被取代。因此,尽管它在很久以前就被发明了,但它仍然活跃并被使用。

面向对象COBOL编程是一种自然编程方式,其中识别对象,然后围绕该对象编写函数和过程。面向对象程序运行在依赖类和对象概念的编程范式上。在这里,我们围绕识别出的对象编写方法和函数。


26) 写入文件使用哪种模式打开?

要写入文件,我们必须打开OUTPUT或EXTEND模式。


27) SEARCH ALL的排序顺序应该是怎样的?

SEARCH ALL的排序顺序可以是升序(ASCENDING)或降序(DESCENDING)。默认情况下是升序。如果您希望在降序排序的数组上进行搜索,那么在定义数组时应该使用DESCENDING KEY子句。这意味着您必须按照指定的顺序加载表。


28) COBOL中的按内容传递(Call By Content)和按引用传递(Call By Reference)有什么区别?

在按内容传递中,传递的参数受到保护,不会被被调用程序修改。另一方面,在按引用传递中,被调用程序可以修改参数。


29) 您如何理解COBOL中的INPUT PROCEDURE和OUTPUT PROCEDURE?

在INPUT PROCEDURE中,输入文件被打开,记录被读取和编辑,然后释放给排序操作。最后,文件将被关闭。

在OUTPUT PROCEDURE中,输出文件被打开,排序后的记录返回到输出记录,然后写入记录。最后,文件将被关闭。


30) COBOL中的按内容传递(Call By Content)和按引用传递(Call By Reference)有什么区别?

在按内容传递中,传递的参数受到保护,不会被被调用程序修改。另一方面,在按引用传递中,被调用程序可以修改参数。


31) COBOL编程中的LINKAGE SECTION有什么用途?

在COBOL编程中, linkage section 用于在程序之间传递数据,或在过程和程序之间传递数据。它是程序的一部分,用于映射调用程序工作区中的数据项。


32) START语句有哪些访问模式?

START语句有两种访问模式:SEQUENTIAL(顺序)和DYNAMIC(动态)。


33) 数据分部中有多少个分节(Section)?

数据分部共有六个分节:

  • 文件分节 (FILE Section)
  • 工作存储分节 (WORKING-STORAGE Section)
  • 局部存储分节 (LOCAL-STORAGE Section)
  • 屏幕分节 (SCREEN Section)
  • 报表分节 (REPORT Section)
  • 连接分节 (LINKAGE Section)

34) COBOL程序必须包含哪些程序分部?

COBOL程序必须包含两个程序分部:标识分部(identification division)和程序ID(Program ID)。


35) COBOL编程语言中有哪些不同的分部?

COBOL编程语言有四个主要分部:

  • 标识分部 (Identification Division):标识分部开始COBOL程序,并且是每个COBOL程序的强制分部。编译器和程序员使用此分部来识别程序。我们必须在标识分部后面立即定义PROGRAM-ID(一个关键字)。
  • 环境分部 (Environment Division):在环境分部中,我们可以定义程序的输入和输出文件。此分部是可选的,主要用于描述程序将运行的系统的环境。
  • 数据分部 (Data Division):数据分部包含有关程序中使用的数据项和变量的信息。它还定义了变量名、它们的长度、小数点位置以及存储格式信息。
  • 过程分部 (Procedure Division):过程分部是COBOL程序中最重要的部分。它类似于C/C++程序的main()函数。程序从这个分部开始执行。过程分部是程序的逻辑部分。所有业务逻辑都写在这里。与C/C++的main()函数一样,所有COBOL程序都必须有一个过程分部。我们可以在过程分部中使用用户定义的名称和段落。此分部至少必须指定一个语句,因为它不能为空。

36) COBOL编程中的GOBACK、STOP RUN和EXIT PROGRAM有什么区别?

以下是COBOL中GOBACK、STOP RUN和EXIT PROGRAM之间的关键区别列表:

  • GOBACK:用于将控制返回到调用程序。
  • STOP RUN:用于停止当前工作单元并将控制返回给操作系统。
  • EXIT PROGRAM:用于退出被另一个程序调用的程序。

37) COBOL中的COMP和COMP-3有什么区别?

在COBOL中,comp用于指示二进制使用。另一方面,comp-3用于指示打包的十进制数(packed decimal)。


38) DELIMITED BY SPACE和DELIMITED BY SIZE的含义是什么?它们的用途是什么?

DELIMITED BY SPACE和DELIMITED BY SIZE与STRING一起使用,用于控制信息的复制方式。

  • DELIMITED BY SIZE:在DELIMITED BY SIZE中,信息的总大小将被视为分隔符。
  • DELIMITED BY SPACE:在DELIMITED BY SPACE中,空格将被视为分隔符。

39) 您如何理解Redefines子句?

Redefines子句允许使用不同的数据名称来引用相同的存储分配。


40) 执行REWRITE操作时,为什么必须打开文件?

要执行REWRITE,我们必须打开记录并从文件中读取它。因此,如果要执行REWRITE功能,文件必须以I-O模式打开。


41) 您如何理解IN-LINE PERFORM?

IN-LINE PERFORM是一个语句,它允许将例程嵌套在 PERFORM语句本身内部,而不是在单独的段落中。

它使用PERFORM和END-PERFORM两个语句来块化它们之间的COBOL语句。IN-LINE PERFORM只要没有内部的GO TO语句(甚至没有跳转到出口),就可以正常工作。


42) 在字符串中使用Pointer的主要目的是什么?

Pointer用于指定接收字段中第一个传输字符将存储的左侧位置。


43) 全局变量(Global Variables)和外部变量(External Variables)有什么区别?

全局变量和外部变量的主要区别在于,全局变量只能被批处理程序访问。另一方面,外部变量可以被同一系统库中的任何批处理程序引用。


44) 二分查找(binary search)和顺序查找(sequential search)有什么区别?

二分查找和顺序查找的区别:

二分搜索顺序搜索
在二分查找中,表元素键值按升序或降序排列。在此搜索技术中,表被“对半分割”以搜索等于、大于或小于的条件,直到找到元素。在顺序查找的情况下,表从上到下进行搜索。在此搜索技术中,不需要元素按特定顺序排列。
对于较大的表,二分查找是最好且速度更快的。顺序查找适用于较小的表。
对于二分查找,使用SEARCH ALL。对于顺序查找,使用SEARCH。

45) 您如何理解Pic 9v99?它表示什么?

Pic 9v99用于指定一个三位数字字段。它在第一个位置后有一个隐含的或假定的小数点。这里的v表示一个隐含的或假定的小数点。


46) PIC 9.99和PIC9v99有什么区别?

PIC 9.99是一个包含小数点(`.`)的四位字段。另一方面,PIC 9v99是一个三位数字字段,它有一个隐含的或假定的小数点(`v`)。


47) 执行SEARCH时使用的各种规则是什么?

如果一个表满足以下条件,我们就可以对其应用SEARCH:

  • 如果它有OCCURS子句
  • 如果它有INDEXED BY短语
  • Search Index必须具有初始值
  • 将index值设置为1

48) 使用哪个函数可以从系统中获取带世纪的当前日期?

要从系统中获取带世纪的当前日期,我们可以使用一个名为FUNCTION CURRENT-DATE的内部函数。


49) COBOL编程语言中的SSRANGE和NOSSRANGE是什么?

在COBOL编程语言中,SSRANGE和NOSSRANGE是编译器的选项,用于查找下标越界。NOSSRANGE是默认选项,当索引或下标超出范围时不会发生运行时错误。


50) 数据分部有哪些不同的分节?

数据分部共有六个分节。以下是它们的列表:

  • 文件分节 (File Section)
  • 工作存储分节 (Working Storage Section)
  • 局部存储分节 (Local Storage Section)
  • 屏幕分节 (Screen Section)
  • 报表分节 (Report Section)
  • 连接分节 (Linkage Section)

51) COBOL编程语言中的Call和Link有什么区别?

Call是用于启动外部程序并返回到COBOL编程语言的实际COBOL命令。另一方面,Link与Call相同,但唯一的区别是它不属于COBOL动词。


52) COMP和COMP-3用法有什么区别?

Comp用于二进制使用,而comp-3用于指定打包的十进制数。


53) 在什么条件下我们可以执行SORT操作?SORT操作的不同规则是什么?

我们可以在以下条件下执行SORT操作:

  • 当输入和输出文件必须保持关闭状态时。
  • 当输入和输出文件有FD条目时。
  • 当工作文件必须有一个SELECT子句时。
  • 当工作文件在文件分节中应有简短描述时。

54) 是否可以搜索带索引或不带索引的表?

不可以,必须对表进行索引才能搜索表。