本文概述
根据程序员指定的某些条件, 条件语句用于更改执行流程。输出始终由条件语句以true或false给出。 COBOL包含各种类型的条件语句:
- 如果条件声明
- 关系声明
- 签署声明
- 类声明
- 条件-名称声明
- 否定条件
- 组合条件
如果条件声明
如果使用条件语句检查条件是否为真, 则执行IF块, 如果条件为假, 则执行ELSE块。
IF语句根据其在COBOL程序中的用法主要有三种类型:
简单中频
简单IF主要用于执行条件相关代码。如果条件为真, 则它将执行在IF块中编写的语句集。如果不满足条件, 则在IF语句终止后, 控件将转移到下一个语句。
语法如下:
IF Condition
{Statement Block}
[END-IF].
在这里, 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 THEN
Statements-block-1
[ELSE
Statements-block-2
END-IF]
[ELSE
IF Condition-3 THEN
Statements-block-3
[ELSE
Statements-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 THEN
DISPLAY 'IN LOOP 1 - IF BLOCK'
IF WS-NUM3 = WS-NUM4 THEN
DISPLAY 'IN LOOP 2 - IF BLOCK'
ELSE
DISPLAY 'IN LOOP 2 - ELSE BLOCK'
END-IF
ELSE
DISPLAY 'IN LOOP 1 - ELSE BLOCK'
END-IF.
STOP RUN.
输出如下:
范例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 MALE
DISPLAY "Gender: Male"
ELSE
DISPLAY "Gender: Female"
END-IF.
STOP RUN.
输出如下:
关系条件
关系条件将两个操作数进行对比。这些操作数可以是标识符, 文字或算术表达式。
不管大小和使用条款如何, 都将进行代数数字字段的比较。
对于非数字操作数
通过比较两个大小相等的非数字操作数, 将从左侧开始以相应位置测量字符, 直到到达末尾。具有更多字符的操作数被认为更大。
在比较两个大小不同的操作数时, 较短的数据项将在末尾附加空格, 直到操作数的大小相等, 然后根据上一段中所述的规则进行比较。
关系运算符定义比较的类型, 如下所示:
关系运算符 | 我们可以写成 | 描述 |
---|---|---|
等于 | 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 THEN
DISPLAY 'A IS GREATER THAN B'
ELSE
DISPLAY 'A IS LESS THAN B'
END-IF.
STOP RUN.
输出如下:
签收条件
符号条件检查数字操作数的符号。它用于确定给定的数值是否大于, 小于, 等于或为零。
语法如下:
[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 THEN
DISPLAY 'A IS POSITIVE'.
IF A IS NEGATIVE THEN
DISPLAY 'A IS NEGATIVE'.
IF A IS ZERO THEN
DISPLAY 'A IS ZERO'.
IF B IS POSITIVE THEN
DISPLAY 'B IS POSITIVE'.
STOP RUN.
输出如下:
课堂条件
类条件检查操作数是否仅包含字母或数字数据。空格以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 THEN
DISPLAY 'WS-VAL1 IS ALPHABETIC'.
IF WS-VAL1 IS NUMERIC THEN
DISPLAY 'WS-VAL1 IS NUMERIC'.
IF WS-VAL2 IS NUMERIC THEN
DISPLAY 'WS-VAL2 IS NUMERIC'.
STOP RUN.
输出如下:
条件名称条件
条件名称是用户定义的名称。该语句包含一组用户定义的值, 并用作布尔变量。 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.
输出如下:
否定条件
否定条件是通过使用关键字NOT给出的。如果满足条件并且我们在其前面未给出NOT, 则其最终值将为false。
语法如下:
IF NOT [CONDITION]
COBOL Statements
END-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 THEN
DISPLAY 'IF-BLOCK'
ELSE
DISPLAY 'ELSE-BLOCK'
END-IF.
STOP RUN.
输出如下:
组合条件
组合条件语句包括与OR或AND逻辑运算符关联的两个或多个条件。
语法如下:
IF [CONDITION] AND [CONDITION]
COBOL Statements
END-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 THEN
DISPLAY 'Both condition OK'
ELSE
DISPLAY 'Error'
END-IF.
STOP RUN.
输出如下:
评估动词
我们可以使用Evaluate动词代替一系列IF-ELSE语句。它的作用与C程序的SWITCH语句相同。这个动词在评估多个条件时非常有用。
在程序执行期间, 它提供多选控制。一次即可测试多个条件。
语法如下:
EVALUATE {Expression1}
WHEN Cond-1
Statement block-1
WHEN Cond-2
Statement block-2
.
.
.
.
WHEN Cond-n
Statement block-n
WHEN other
Statement block- other
END-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 TRUE
WHEN WS-A > 2
DISPLAY 'WS-A GREATER THAN 2'
WHEN WS-A < 0
DISPLAY 'WS-A LESS THAN 0'
WHEN OTHER
DISPLAY 'INVALID VALUE OF WS-A'
END-EVALUATE.
STOP RUN.
输出如下:
评论前必须登录!
注册