![IBM主机技术一本通](https://wfqqreader-1252317822.image.myqcloud.com/cover/684/683684/b_683684.jpg)
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语句最近的句号(.)后面的语句中,请你记住这一点,好多程序员经常犯这样的错误。
![](https://epubservercos.yuewen.com/C75CDE/3590469503001701/epubprivate/OEBPS/Images/figure_0282_0001.jpg?sign=1738855081-EvNt8v1WKC9MlJUCsZIZ4SWFOhMw89DI-0-c7ac5f72947e3fdeb89c54e8c67bc6a8)
条件可以分为简单条件和复合条件两种。简单条件又可以分为关系条件(Relation Condition)、类别条件(Class condition)两种。
关系条件是最常见的条件类型,主要用于说明两个变量之间的大小关系。下面是关系条件的语法。
正负条件(Sign Conditions)用来判断算术表达式的正(>0)、负(<0)或零的关系。下面是它的语法,其中,ArithExp是要判断的变量或表达式,正负条件是表达关系条件的另外一种形式。
![](https://epubservercos.yuewen.com/C75CDE/3590469503001701/epubprivate/OEBPS/Images/figure_0283_0001.jpg?sign=1738855081-6uNGSyS8ugZx3FjmcuLkuqQek8ODohqI-0-64f067a8e47c867bb2f773bd25f08549)
![](https://epubservercos.yuewen.com/C75CDE/3590469503001701/epubprivate/OEBPS/Images/figure_0283_0002.jpg?sign=1738855081-kGPaFoj39YinB107gs6hUaBhi54Ccgql-0-e0bd003cd7037e99f121ad3124a4b4de)
尽管COBOL对数据类型的定义不是很严格或清晰的,但依然可以将数据项分成数字或字符这样的大类。类别条件(Class Condition)就是用来判别数据项的类别的。下面是类别关系的语法。
![](https://epubservercos.yuewen.com/C75CDE/3590469503001701/epubprivate/OEBPS/Images/figure_0283_0003.jpg?sign=1738855081-LOOs0DM3MGHulguvYdRDOnV23Fdkw2aG-0-1defafd7c7af7c8a36ebf79b96a22059)
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)。下面是复合条件的语法:
![](https://epubservercos.yuewen.com/C75CDE/3590469503001701/epubprivate/OEBPS/Images/figure_0283_0004.jpg?sign=1738855081-77SqzbVB1Uf6va3IDKlpI3XbN3dryAFY-0-8d5b591630a4bfd1983d757f9db99cac)
一般来说,复合条件是按照从左到右的顺序判断的,但是,括号和下面的优先规则具有更高的优先级,复合条件的优先级是:
● NOT。
● AND。
● OR。
当一个数据项要多次出现在关系条件中时,可以只写一次。比如,图6.4左右两边的IF语句是相同的。
![](https://epubservercos.yuewen.com/C75CDE/3590469503001701/epubprivate/OEBPS/Images/figure_0283_0005.jpg?sign=1738855081-oR0WnPa835MTNpOe6HOYU798Q2lf5pKf-0-5688f2317ea54afea947f76e88947fd4)
图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'.