You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:58:28