IBM主机技术一本通
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

6.5 IF语句

IF语句总是跟某些判断条件联系在一起的,它会根据条件的判断结果决定程序所要采取的动作。下面显示的是IF语句的语法。其中,条件(Condition)可以是简单条件(Simple Condition),也可以是复合条件(Complex Condition),关于它们我们接下来会做详细的讨论。要执行的语句(StatementBlock)跟在THEN短语或ELSE短语之后,分别表示条件满足和不满足时所要执行的动作。如果指定NEXT SENTENCE语句,程序会转移到离IF语句最近的句号(.)后面的语句,这样,为了不引起误会,我们建议当指定NEXT SENTENCE时,就不要使用END-IF短语,因为在NEXT SENTENCE后即使指定了END-IF短语,当执行NEXT SENTENCE语句时,程序也不会转移到紧跟在END-IF后面的语句中,而是仍然会转移到离该IF语句最近的句号(.)后面的语句中,请你记住这一点,好多程序员经常犯这样的错误。

条件可以分为简单条件和复合条件两种。简单条件又可以分为关系条件(Relation Condition)、类别条件(Class condition)两种。

关系条件是最常见的条件类型,主要用于说明两个变量之间的大小关系。下面是关系条件的语法。

正负条件(Sign Conditions)用来判断算术表达式的正(>0)、负(<0)或零的关系。下面是它的语法,其中,ArithExp是要判断的变量或表达式,正负条件是表达关系条件的另外一种形式。

尽管COBOL对数据类型的定义不是很严格或清晰的,但依然可以将数据项分成数字或字符这样的大类。类别条件(Class Condition)就是用来判别数据项的类别的。下面是类别关系的语法。

COBOL语言定义的数据类别如下。

数字(Numberic):字段中只包含数字0~9(如果PIC中定义为有符号的),其USAGE短语只能是DISPLAY或PACKED-DECIMAL(COMP-3)。

字符(Alphabetic):整个字段中只包含字符(A~Z、a~z和空格)。

小写字符(Alphabetic-Lower):整个字段中只包含小写字符(a~z)或空格。

大写字符(Alphabetic-Upper):整个字段中只包含大写字符(A~Z)或空格。

复合条件(Complex Condition)是简单条件用AND或OR组合起来的复杂条件。就像简单条件一样,复合条件的值也只能是真(True)或假(Flase)。下面是复合条件的语法:

一般来说,复合条件是按照从左到右的顺序判断的,但是,括号和下面的优先规则具有更高的优先级,复合条件的优先级是:

● NOT。

● AND。

● OR。

当一个数据项要多次出现在关系条件中时,可以只写一次。比如,图6.4左右两边的IF语句是相同的。

图6.4 等价的IF语句描述

IF语句可以嵌套使用,下面是嵌套IF语句的例子。

        IF Item-Class = “A” THEN
          DISPLAY 'He is Class A'
        ELSE
          IF Item-Class = “B” THEN
              DISPLAY 'He is Class B'
          ELSE
              DISPLAY 'He is Class C'
        END-IF

条件名也可以在IF语句中使用,比如,我们前面定义的介绍条件名定义的变量GRADE-A、GRADE-B等,都可以用到IF语句中。如果我们继续使用下面的数据定义,则图6.5左边和右边方框中的IF语句就是等价的。

        05 STUDENT-TYPE          PIC X.
            88 GRADE-A        VALUE 'A'.
            88 GRADE-B        VALUE 'B'.
            88 GRADE-C        VALUE 'C'.
            88 GRADE-O        VALUE  'D' OR 'O'.