📜  COBOL 中的条件语句

📅  最后修改于: 2022-05-13 01:54:26.685000             🧑  作者: Mango

COBOL 中的条件语句

在编写程序时,程序员需要检查各种条件,如果条件为真,则执行特定的语句块,否则执行另一个语句块。为了检查这些条件,我们使用条件语句。这些语句返回假。 Cobol 中有多种类型的条件语句:

  1. 关系条件。
  2. 签条件。
  3. 班条件。
  4. 条件名称条件。
  5. 否定条件。
  6. 复合条件。
  7. 条件的话。
  8. If-else 条件。
  9. 嵌套 If 条件。

关系条件:

 如果程序员想要在操作数/s 或字面量/s 之间进行关系比较,那么我们使用关系运算符,即 < 、 > 、 < = 、 >= 、 ==。我们可以使用特定的关系符号,也可以用文字拼写出来。

例如 :

  • (a > b ) 也可以写成 (a GREATER THAN b)。
  • (a !< b) 也可以写成 (a 不小于 b)。
  • (a == b) 也可以写成 (a IS EQUAL TO b)。

句法:

Operand-1 [IS][NOT] relational-operator Operand-2.

例子:



Cobol
IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
    77 OPERAND3 PIC 99.
    77 OPERAND4 PIC 99.
PROCEDURE DIVISION.
    MOVE 8 TO OPERAND1.
    MOVE 5 TO OPERAND2.
    MOVE 4 TO OPERAND3.
    MOVE 4 TO OPERAND4.
    IF (OPERAND1 > OPERAND2)
            DISPLAY "OPERAND1 IS GREATER THAN OPERAND2"
    ELSE
            DISPLAY "OPERAND2 IS GREATER THAN OPERAND2".
    IF (OPERAND3 IS EQUAL TO OPERAND4)
            DISPLAY "OPERAND3 AND OPERAND4 ARE EQUAL"
    ELSE
            DISPLAY "OPERAND3 AND OPERAND4 ARE NOT EQUAL".
    STOP RUN.


Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 8 TO OPERAND1.
    MOVE 5 TO OPERAND2.
    IF (OPERAND1 IS POSITIVE)
            DISPLAY "OPERAND1 IS POSITIVE".
    IF (OPERAND2 IS NOT ZERO)
            DISPLAY "OPERAND2 IS NOT ZER0".
    STOP RUN.


Cobol
IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND PIC X9.
PROCEDURE DIVISION.
    DISPLAY "ENTER ANY ALPHABET/NUMBER".
    ACCEPT OPERAND.
    IF (OPERAND IS ALPHABETIC)
            DISPLAY "ALPHABET"
    ELSE
            DISPLAY "NUMBER".
    STOP RUN.


Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
      77 WEXP PIC 99.
      88 PROFESSIONAL VALUE 10.
      88 HIGH VALUE 9.
      88 INTERMEDIATE VALUES ARE 6,7,8.
      88 BEGINNER VALUES ARE 1 THRU 5.
      88 UNEXP VALUE IS 0.
PROCEDURE DIVISION.
      DISPLAY "ENTER EXPERIENCE".
      ACCEPT WEXP.
      IF PROFESSIONAL
             DISPLAY "PROFESSIONAL".
      IF HIGH
             DISPLAY "HIGHLY EXPERIENCED".
      IF INTERMEDIATE
               DISPLAY "INTERMEDIATE LEVEL".
      IF  BEGINNER
               DISPLAY "BEGINNER".
      IF UNEXP
               DISPLAY "UNEXPERIENCED".
STOP RUN.


Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 10 TO OPERAND1.
    MOVE 8 TO OPERAND2.
    IF NOT OPERAND1 > OPERAND2
            DISPLAY "TRUE CONDITION REVERSED"
    ELSE
            DISPLAY "FALSE COONDITION REVERSED".
    STOP RUN.


Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 9.
    77 OPERAND2 PIC 9.
PROCEDURE DIVISION.
    MOVE 7 TO OPERAND1.
    MOVE 0 TO OPERAND2.
    IF  OPERAND1 IS POSITIVE AND OPERAND2 IS POSITIVE
            DISPLAY "BOTH OPERANDS ARE POSITIVE"
    ELSE
            DISPLAY "BOTH OPERANDS ARE NOT POSITIVE".
    STOP RUN.


Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 10 TO OPERAND1.
    MOVE 8 TO OPERAND2.
    IF OPERAND1 > OPERAND2
            DISPLAY "OPERAND1 IS GREATER".
 
    STOP RUN.


Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 3 TO OPERAND1.
    MOVE 8 TO OPERAND2.
    IF OPERAND1 > OPERAND2
            DISPLAY "OPERAND1 IS GREATER"
    ELSE
              DISPLAY "OPERAND2 IS GREATER".
    STOP RUN.


Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
      WORKING-STORAGE SECTION.
          77 OPERAND1 PIC 99.
PROCEDURE DIVISION.
      MOVE 12 TO OPERAND1.
      IF OPERAND1 IS NUMERIC
              DISPLAY "OPERAND IS NUMERIC"
              IF OPERAND1 IS POSITIVE
                  DISPLAY " OPERAND IS POSITIVE"
              ELSE
                  IF OPERAND1 IS NEGATIVE
                      DISPLAY "OPERAND IS NEGATIVE"
                  ELSE
                      DISPLAY "OPERAND IS ZERO"
                  END-IF
              END-IF
      ELSE
              DISPLAY "OPERAND IS NOT NUMERIC"
    END-IF.
STOP RUN.


输出:

OPERAND1 IS GREATER THAN OPERAND2
OPERAND3 AND OPERAND4 ARE EQUAL

签到条件:

符号条件确定特定操作数或算术表达式是正数、负数还是零。在符号条件中,只有当操作数的值严格为真时,正条件才被确定为真,即在这种情况下不对值零进行正面处理。

句法:

Operand1/Arithmetic expression IS [NOT] POSITIVE/NEGATIVE/ZERO

例子:

科博尔

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 8 TO OPERAND1.
    MOVE 5 TO OPERAND2.
    IF (OPERAND1 IS POSITIVE)
            DISPLAY "OPERAND1 IS POSITIVE".
    IF (OPERAND2 IS NOT ZERO)
            DISPLAY "OPERAND2 IS NOT ZER0".
    STOP RUN.

输出:

OPERAND1 IS POSITIVE
OPERAND2 IS NOT ZERO

班级条件:

 如果程序员想要检查输入的值是字母还是数字,那么我们使用类条件。它有助于检查输入的值是否有效。仅当输入的值包含 0-9 的数字(不考虑符号)或字母数字时,数字条件才为真。同样,仅当输入的值包含来自 AZ 的字母或字母数字时,字母条件才为真。



句法:

Operand IS [NOT] NUMERIC/ALPHABETIC

例子:

科博尔

IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND PIC X9.
PROCEDURE DIVISION.
    DISPLAY "ENTER ANY ALPHABET/NUMBER".
    ACCEPT OPERAND.
    IF (OPERAND IS ALPHABETIC)
            DISPLAY "ALPHABET"
    ELSE
            DISPLAY "NUMBER".
    STOP RUN.

输出:

ENTER ANY ALPHABET/NUMBER
C
ALPHABET

条件名称条件:

Condition-name 是一个条件本身,包含值或值。条件名称必须始终在名为Conditional Variable的数据名称中声明,即它不能独立定义。仅当条件变量采用任何指定的值时,条件名称才变为真。 LEVEL 88 用于声明条件名称。

例如;

77 EXPERIENCE PIC 9.
88 BEGINNER VALUE IS 1.
88 INTERMEDIATE VALUE IS 3.
88 PROFESSIONAL VALUES ARE 5,6,7.

说明:在上面的例子中,“EXPERIENCE”是一个级别为 77 的条件变量,而“BEGINNER”、“INTERMEDIATE”、“PROFESSIONAL”是级别为 88 的条件名称。现在 BEGINNER 条件只有在值为EXPERIENCE 为 1,类似地,仅当 EXPERIENCE 的值为 3 时,INTERMEDIATE 条件才会为真,只有当 EXPERIENCE 的值为 5 或 6 或 7 时,PROFESSIONAL 条件才会为真。

句法:

77 Conditional Variable PIC 9/A/X.
88 Condition-name1 {VALUE IS/VALUES ARE} Literal-1 [ {THRU/THROUGH} Literal-2][,Literal-3 [{THRU/THROUGH} Literal-4]]
88 Condition-name2 {VALUE IS/VALUES ARE} Literal-1 [ {THRU/THROUGH} Literal-2][,Literal-3 [{THRU/THROUGH} Literal-4]]

例子:

科博尔



IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
      77 WEXP PIC 99.
      88 PROFESSIONAL VALUE 10.
      88 HIGH VALUE 9.
      88 INTERMEDIATE VALUES ARE 6,7,8.
      88 BEGINNER VALUES ARE 1 THRU 5.
      88 UNEXP VALUE IS 0.
PROCEDURE DIVISION.
      DISPLAY "ENTER EXPERIENCE".
      ACCEPT WEXP.
      IF PROFESSIONAL
             DISPLAY "PROFESSIONAL".
      IF HIGH
             DISPLAY "HIGHLY EXPERIENCED".
      IF INTERMEDIATE
               DISPLAY "INTERMEDIATE LEVEL".
      IF  BEGINNER
               DISPLAY "BEGINNER".
      IF UNEXP
               DISPLAY "UNEXPERIENCED".
STOP RUN.

输出:

ENTER EXPERIENCE
7
INTERMEDIATE LEVEL

否定条件:

任何前面带有 NOT运算符的条件都称为否定条件。这个条件总是产生相反的条件,即如果条件为真,则最终输出为,反之亦然。 NOT运算符可以通过两种方式使用:

  1. 作为条件的一部分,正如我们在上述条件中所见。
  2. 它可以简单地在任何条件之前并使其成为否定条件。

句法:

NOT Condition

例子:

科博尔

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 10 TO OPERAND1.
    MOVE 8 TO OPERAND2.
    IF NOT OPERAND1 > OPERAND2
            DISPLAY "TRUE CONDITION REVERSED"
    ELSE
            DISPLAY "FALSE COONDITION REVERSED".
    STOP RUN.

输出:

FALSE CONDITION REVERSED

复合条件:

当程序员必须将两个或多个条件检查为单个条件时,我们使用逻辑运算符AND 或 OR,将两个条件组合在一起。在 AND 的情况下,仅当所有组成条件都为true 时,复合条件才返回true值,否则返回false 。在 OR 的情况下,如果任何一个组成条件为true ,则复合条件返回true值,否则返回false

句法:

Condition1 AND/OR Condition2 [AND/OR Condition3....];

例子:

科博尔



IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 9.
    77 OPERAND2 PIC 9.
PROCEDURE DIVISION.
    MOVE 7 TO OPERAND1.
    MOVE 0 TO OPERAND2.
    IF  OPERAND1 IS POSITIVE AND OPERAND2 IS POSITIVE
            DISPLAY "BOTH OPERANDS ARE POSITIVE"
    ELSE
            DISPLAY "BOTH OPERANDS ARE NOT POSITIVE".
    STOP RUN.

输出:

BOTH OPERANDS ARE NOT POSITIVE

如果条件:

如果条件语句检查条件,如果特定条件返回值,则仅执行一组特定语句。这些语句可以是简单语句或复合语句。如果条件返回值,则控件不会进入 IF-block 在这种情况下,请始终记住 PERIOD(.) 只会在最后一条语句的末尾使用,以终止 IF 块。

句法:

IF (Condition/s)
  Set of statements
[END IF]

例子:

科博尔

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 10 TO OPERAND1.
    MOVE 8 TO OPERAND2.
    IF OPERAND1 > OPERAND2
            DISPLAY "OPERAND1 IS GREATER".
 
    STOP RUN.

输出:

OPERAND1 IS GREATER

If-else 条件:

If-else 条件语句检查条件,如果条件为真则执行 IF-block 的语句,如果条件为假则执行 ELSE-block 的语句。在这种情况下,请始终记住 PERIOD(.) 只会在最后一条语句的末尾使用,以终止 IF-ELSE 块。

句法:

IF (Condition/s)
    Set of Statements
ELSE
    Set of statements
[END IF].

例子:

科博尔

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 3 TO OPERAND1.
    MOVE 8 TO OPERAND2.
    IF OPERAND1 > OPERAND2
            DISPLAY "OPERAND1 IS GREATER"
    ELSE
              DISPLAY "OPERAND2 IS GREATER".
    STOP RUN.

输出:

OPERAND2 IS GREATER

以下语法也用于 COBOL 中的嵌套 if 条件语句:

句法:

IF (Condition1)
        IF (Condition2)
            Set of statement/s
        ELSE
            Set of statement/s
        END-IF
    ELSE
        Set of statement/s
    END-IF.    

例子:

科博尔

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
      WORKING-STORAGE SECTION.
          77 OPERAND1 PIC 99.
PROCEDURE DIVISION.
      MOVE 12 TO OPERAND1.
      IF OPERAND1 IS NUMERIC
              DISPLAY "OPERAND IS NUMERIC"
              IF OPERAND1 IS POSITIVE
                  DISPLAY " OPERAND IS POSITIVE"
              ELSE
                  IF OPERAND1 IS NEGATIVE
                      DISPLAY "OPERAND IS NEGATIVE"
                  ELSE
                      DISPLAY "OPERAND IS ZERO"
                  END-IF
              END-IF
      ELSE
              DISPLAY "OPERAND IS NOT NUMERIC"
    END-IF.
STOP RUN.

输出:

OPERAND IS NUMERIC
OPERAND IS POSITIVE