COBOL中如何在IF语句中检查除法余数?附示例代码
在COBOL中实现IF语句里的余数检查
当然有办法实现类似其他语言中取模判断的功能啦!你目前的代码思路其实是对的——利用COBOL的DIVIDE...REMAINDER语法获取余数,再在IF语句里判断。不过还有更简洁的方式,咱们一步步说:
方法1:传统DIVIDE...REMAINDER判断
你已经在使用这种方式了,只需要把代码补全并优化一下结构就行。如果不需要保存除法的商,甚至可以省略GIVING result部分,让代码更清爽:
DATA DIVISION. WORKING-STORAGE SECTION. 01 number-in PIC 9(3) VALUE 4. 01 number-out PIC Z9. 01 residue PIC 9. PROCEDURE DIVISION. MAIN-PROCEDURE. PERFORM L1-LOOP UNTIL number-in = 100 STOP RUN. L1-LOOP. *> 获取number-in除以2的余数,存到residue里 DIVIDE number-in BY 2 REMAINDER residue *> 判断余数是否为0,是则输出 IF residue = 0 MOVE number-in TO number-out DISPLAY number-out END-IF *> 补全循环递增逻辑 ADD 1 TO number-in.
注意:COBOL 85及以后的版本推荐用END-IF闭合IF语句,避免嵌套逻辑的语法问题,老版本可以省略,但建议尽量用标准写法。
方法2:用FUNCTION MOD直接在IF中判断
从COBOL 85标准开始,内置了FUNCTION MOD(被除数, 除数)函数,它直接返回两数相除的余数,用法和其他语言的%运算符几乎一致,能让你的IF判断更直观:
DATA DIVISION. WORKING-STORAGE SECTION. 01 number-in PIC 9(3) VALUE 4. 01 number-out PIC Z9. PROCEDURE DIVISION. MAIN-PROCEDURE. PERFORM L1-LOOP UNTIL number-in = 100 STOP RUN. L1-LOOP. *> 直接在IF里判断余数是否为0,无需额外变量 IF FUNCTION MOD(number-in, 2) = 0 MOVE number-in TO number-out DISPLAY number-out END-IF ADD 1 TO number-in.
这种方式不用提前执行DIVIDE语句,代码结构更紧凑,完全符合你想要的if (16 % 2 == 0)的逻辑风格。需要注意的是:除数不能为0,否则会触发运行时错误;余数的符号会和被除数保持一致(这里都是正整数,所以不用担心符号问题)。
两种方法都能实现你的需求,你可以根据自己的代码场景选择——如果需要同时用到商和余数,用第一种;如果只需要判断余数,第二种更简洁。
内容的提问来源于stack exchange,提问作者Karol Patecki
相关产品推荐
相关产品推荐

