COBOL-条件语句用法图解

本文概述

  • 如果条件声明
  • 关系条件
  • 签收条件
  • 课堂条件
  • 条件名称条件
  • 否定条件
  • 组合条件
  • 评估动词
根据程序员指定的某些条件, 条件语句用于更改执行流程。输出始终由条件语句以true或false给出。 COBOL包含各种类型的条件语句:
  • 如果条件声明
  • 关系声明
  • 签署声明
  • 类声明
  • 条件-名称声明
  • 否定条件
  • 组合条件
如果条件声明 如果使用条件语句检查条件是否为真, 则执行IF块, 如果条件为假, 则执行ELSE块。
IF语句根据其在COBOL程序中的用法主要有三种类型:
简单中频
简单IF主要用于执行条件相关代码。如果条件为真, 则它将执行在IF块中编写的语句集。如果不满足条件, 则在IF语句终止后, 控件将转移到下一个语句。
语法如下:
IF Condition {Statement Block}[END-IF].

【COBOL-条件语句用法图解】在这里, END-IF是作用域终止符, 在程序中是可选的。句点(。)可以在IF块的最后一个语句中定义。
如果未指定期限, 则必须使用范围终止符END-IF。
如果别的
IF ELSE语句用于需要由两个条件执行的一组特定语句时。该语句主要用于执行条件特定的代码。
在IF-ELSE中, 如果指定条件为true, 则将执行语句块。如果条件为假, 则将执行另一组语句, 这些语句将位于ELSE块下。
语法如下:
IF Condition-1 {Statement-Block-1/NEXT SENTENCE}[ELSE] {Statement-Block-2/NEXT SENTENCE}[END-IF].

嵌套IF
与其他COBOL编程语言一样, COBOL也允许嵌套的IF语句。 IF语句中的IF语句称为嵌套IF语句。嵌套IF语句的深度没有限制。
语法如下:
IF Condition-1 THEN IF Condition-2 THENStatements-block-1 [ELSEStatements-block-2 END-IF][ELSE IF Condition-3 THENStatements-block-3 [ELSEStatements-block-4 END-IF]END-IF.]

范例1:
让我们看一下COBOL程序中IF条件语句的示例:
IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-NUM1 PIC 9(9).01 WS-NUM2 PIC 9(9).01 WS-NUM3 PIC 9(5).01 WS-NUM4 PIC 9(6).PROCEDURE DIVISION.A000-FIRST-PARA.MOVE 25 TO WS-NUM1 WS-NUM3.MOVE 15 TO WS-NUM2 WS-NUM4.IF WS-NUM1 > WS-NUM2 THENDISPLAY 'IN LOOP 1 - IF BLOCK'IF WS-NUM3 = WS-NUM4 THENDISPLAY 'IN LOOP 2 - IF BLOCK'ELSEDISPLAY 'IN LOOP 2 - ELSE BLOCK'END-IFELSEDISPLAY 'IN LOOP 1 - ELSE BLOCK'END-IF.STOP RUN.

输出如下:
COBOL-条件语句用法图解

文章图片
范例2:
让我们看一下IF条件语句的另一个简单示例:
IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 CHECK-GENDER.05 GENDER PIC X(1).88 MALE VALUE 'M'.88 FEMALE VALUE 'F'.PROCEDURE DIVISION.MAIN-PARA.SET FEMALE TO TRUE.IF MALEDISPLAY "Gender: Male"ELSEDISPLAY "Gender: Female"END-IF.STOP RUN.

输出如下:
COBOL-条件语句用法图解

文章图片
关系条件 关系条件将两个操作数进行对比。这些操作数可以是标识符, 文字或算术表达式。
不管大小和使用条款如何, 都将进行代数数字字段的比较。
对于非数字操作数
通过比较两个大小相等的非数字操作数, 将从左侧开始以相应位置测量字符, 直到到达末尾。具有更多字符的操作数被认为更大。
在比较两个大小不同的操作数时, 较短的数据项将在末尾附加空格, 直到操作数的大小相等, 然后根据上一段中所述的规则进行比较。
关系运算符定义比较的类型, 如下所示:
关系运算符 我们可以写成 描述
等于 IS = 这意味着, 等于
比更大 是> 这意味着, 大于
小于 IS < 这意味着, 小于
不超过 不是> 这意味着, 不大于
不少于 不是< 这意味着, 不少于
不等于 不是= 这意味着, 不等于
大于或等于 IS> = 表示, 大于或等于
少于或等于 IS < = 表示, 小于或等于
语法如下:
[Data Name/Arithmetic Operation][IS] [NOT] [Equal to (=), Greater than (> ), Less than (< ), Greater than or Equal (> =), Less than or equal (< =) ][Data Name/Arithmetic Operation]

例子:
IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 A PIC 9(9).01 B PIC 9(9).PROCEDURE DIVISION.A000-FIRST-PARA.MOVE 24 TO A.MOVE 13 TO B.IF A IS GREATER THAN OR EQUAL TO B THENDISPLAY 'A IS GREATER THAN B'ELSEDISPLAY 'A IS LESS THAN B'END-IF.STOP RUN.

输出如下:
COBOL-条件语句用法图解

文章图片
签收条件 符号条件检查数字操作数的符号。它用于确定给定的数值是否大于, 小于, 等于或为零。
语法如下:
[Data Name/Arithmetic Operation] [IS] [NOT] [Positive, Negative or Zero][Data Name/Arithmetic Operation]

例子:
IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 A PIC S9(9) VALUE -1234.01 B PIC S9(9) VALUE 123456.PROCEDURE DIVISION.A000-FIRST-PARA.IF A IS POSITIVE THENDISPLAY 'A IS POSITIVE'.IF A IS NEGATIVE THENDISPLAY 'A IS NEGATIVE'.IF A IS ZERO THENDISPLAY 'A IS ZERO'.IF B IS POSITIVE THENDISPLAY 'B IS POSITIVE'.STOP RUN.

输出如下:
COBOL-条件语句用法图解

文章图片
课堂条件 类条件检查操作数是否仅包含字母或数字数据。空格以ALPHABETIC, ALPHABETIC-LOWER和ALPHABETIC-UPPER表示。
语法如下:
[Data Name/Arithmetic Operation> ][IS] [NOT] [NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER][Data Name/Arithmetic Operation]

例子:
IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-VAL1 PIC X(9) VALUE 'NIKITA '.01 WS-VAL2 PIC 9(9) VALUE 123456789.PROCEDURE DIVISION.A000-FIRST-PARA.IF WS-VAL1 IS ALPHABETIC THENDISPLAY 'WS-VAL1 IS ALPHABETIC'.IF WS-VAL1 IS NUMERIC THENDISPLAY 'WS-VAL1 IS NUMERIC'.IF WS-VAL2 IS NUMERIC THENDISPLAY 'WS-VAL2 IS NUMERIC'.STOP RUN.

输出如下:
COBOL-条件语句用法图解

文章图片
条件名称条件 条件名称是用户定义的名称。该语句包含一组用户定义的值, 并用作布尔变量。 88级定义了它们。它没有PIC子句。
语法如下:
88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].

例子:
IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-NUM PIC 9(3).88 PASS VALUES ARE 041 THRU 100.88 FAIL VALUES ARE 000 THRU 40.PROCEDURE DIVISION.A000-FIRST-PARA.MOVE 85 TO WS-NUM.IF PASS DISPLAY 'Passed with ' WS-NUM ' marks'.IF FAIL DISPLAY 'FAILED with ' WS-NUM 'marks'.STOP RUN.

输出如下:
COBOL-条件语句用法图解

文章图片
否定条件 否定条件是通过使用关键字NOT给出的。如果满足条件并且我们在其前面未给出NOT, 则其最终值将为false。
语法如下:
IF NOT [CONDITION] COBOL StatementsEND-IF.

例子:
IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-NUM1 PIC 9(2) VALUE 20.01 WS-NUM2 PIC 9(9) VALUE 25.PROCEDURE DIVISION.A000-FIRST-PARA.IF NOT WS-NUM1 IS LESS THAN WS-NUM2 THENDISPLAY 'IF-BLOCK'ELSEDISPLAY 'ELSE-BLOCK'END-IF.STOP RUN.

输出如下:
COBOL-条件语句用法图解

文章图片
组合条件 组合条件语句包括与OR或AND逻辑运算符关联的两个或多个条件。
语法如下:
IF [CONDITION] AND [CONDITION]COBOL StatementsEND-IF.

例子:
IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-NUM1 PIC 9(2) VALUE 20.01 WS-NUM2 PIC 9(2) VALUE 25.01 WS-NUM3 PIC 9(2) VALUE 20.PROCEDURE DIVISION.A000-FIRST-PARA.IF WS-NUM1 IS LESS THAN WS-NUM2 AND WS-NUM1=WS-NUM3 THENDISPLAY 'Both condition OK'ELSEDISPLAY 'Error'END-IF.STOP RUN.

输出如下:
COBOL-条件语句用法图解

文章图片
评估动词 我们可以使用Evaluate动词代替一系列IF-ELSE语句。它的作用与C程序的SWITCH语句相同。这个动词在评估多个条件时非常有用。
在程序执行期间, 它提供多选控制。一次即可测试多个条件。
语法如下:
EVALUATE {Expression1} WHEN Cond-1Statement block-1 WHEN Cond-2Statement block-2.... WHEN Cond-nStatement block-n WHEN otherStatement block- otherEND-EVALUATE.

例子:
IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-A PIC 9 VALUE 0.PROCEDURE DIVISION.MOVE 3 TO WS-A.EVALUATE TRUEWHEN WS-A > 2DISPLAY 'WS-A GREATER THAN 2'WHEN WS-A < 0DISPLAY 'WS-A LESS THAN 0'WHEN OTHERDISPLAY 'INVALID VALUE OF WS-A'END-EVALUATE.STOP RUN.

输出如下:
COBOL-条件语句用法图解

文章图片

    推荐阅读