第6章基本运算Word文档下载推荐.docx
《第6章基本运算Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第6章基本运算Word文档下载推荐.docx(31页珍藏版)》请在冰豆网上搜索。
……
DATADIVISION.
WORKING-STORAGESECTION.
01NUM1PIC99V9.
01NUM2PIC99V9.
01REAL-RESULTPIC99V9.
01REAL-DISPLAYPIC99.9.
01RESULTPIC99.
*
PROCEDUREDIVISION.
MOVE12.3TONUM1.
MOVE45.6TONUM2.
ADDNUM1TONUM2
GIVINGREAL-RESULT.
MOVEREAL-RESULTTOREAL-DISPLAY.
DISPLAY‘REALRESULT:
’,REAL-DISPLAY.
GINVINGRESULT.
DISPLAY‘RESULTWITHOUTROUNDED:
’,RESULT.
GINVINGRESULTROUNDED./*此处使用ROUNDED选项对运算结果进行舍入*/
DISPLAY‘RESULTWITHROUNDED:
STOPRUN.
以上代码运行后,将有如下输出结果。
REALRESULT:
57.9
RESULTWITHOUTROUNDED:
57
RESULTWITHROUNDED:
58
由此可见,使用ROUNDED选项后,对运算结果第1位小数进行了四舍五入操作。
以上运算中,两数据相加的原始结果为57.9。
当在运算中没有加上ROUNDED选项时,结果数据将被截断。
根据保存结果的变量RESULT的定义,截取原始数据小数点前两位数字,因此结果显示为57。
当在运算中加上ROUNDED选项后,将对57.9进行四舍五入处理。
由于9是大于5的,因此最终结果为58。
6.1.2运算结果溢出报错ONSIZEERROR
当结果数据长度超过保存结果数据的变量所定义的长度时,称为运算结果溢出。
当运算结果溢出时,可以使用ONSIZEERROR选项进行报错,并执行相应处理过程。
下面这段代码进行相加运算后,得到的结果数据长度超出了保存结果的变量所定义的长度。
因此,运算结果溢出了。
当运算结果溢出时,在屏幕上输出相应提示信息。
代码如下。
01NUM1PIC99.
01NUM2PIC99.
01REAL-RESULTPIC999.
01OVER-FLOW-FLAGPICXVALUE‘N’.
MOVE56TONUM1.
MOVE78TONUM2.
’,REAL-RESULT.
GINVINGRESULT
ONSIZEERROR/*此处使用ONSIZEERROR选项,当结果溢出时进行以下处理*/
DISPLAY‘OVERFLOW!
’
PERFORMOVER-FLOW-ROUTINE.
IFOVER-FLOW-FLAG=‘N’
DISPLAY‘CORRECTRESULT:
’,RESULT
END-IF.
OVER-FLOW-ROUTINE.
MOVE‘Y’TOOVER-FLOW-FLAG.
DISPLAY‘TRUNCATEDRESULT:
’,RESULT.
134
OVERFLOW!
TRUNCATEDRESULT:
34
本例中结果数据为134,占3个字符长度,而保存结果的变量RESULT被定义为只占两个字符长度。
因此,结果数据将溢出,RESULT只能保存实际结果的后两为数字,即34。
此外,当不使用ONSIZEERROR选项时,结果数据仍然将溢出。
只是此时不会报错,也不能进行相应处理。
总之,ONSIZEERROR选项以及前面所讲的ROUNDED选项,都是用于对运算结果进行处理。
对运算结果的处理将涵盖在下面所要讲解的各种算术运算的实际应用之中。
以上讲解的这两种对运算结果的处理方式区别如下。
❑ROUNDED选项对结果进行四舍五入处理,针对的是小数点右边的小数部分。
❑ONSIZEERROR选项判断结果是否溢出,并在溢出时进行相应处理。
其针对的是小数点左边的整数部分。
6.1.3算术加运算ADD
前面两小节讲解了对运算结果进行处理的两种常用方式。
从本小节开始,将依此讲解COBOL中常用的算术运算。
其中包括常用的加减乘除四则运算以及乘方运算。
最后,将讲解基于以上各种运算的复合算术运算。
本小节主要讲解算术加运算。
在COBOL中进行算术加运算,通常有两种方式。
一种是直接通过运算符号“+”进行算术加运算。
另一种则是通过ADD语句完成。
关于第一种方式,将在复合算术运算一节中介绍。
本节只介绍如何通过ADD语句实现算术加运算。
下面这段代码将NUM1中的数值加到NUM2中,并将结果保存在NUM2中。
此时,运算结果将覆盖NUM2中原来的数值,而NUM1中数值不变。
01NUM1PIC9.
01NUM2PIC9.
MOVE2TONUM1.
MOVE3TONUM2.
DISPLAY‘NUM1BEFOREADD:
‘,NUM1.
DISPLAY‘NUM2BEFOREADD:
‘,NUM2.
ONSEZEERROR
END-ADD.
DISPLAY‘NUM1AFTERADD:
DISPLAY‘NUM2AFTERADD:
STOPRUN.
NUM1BEFOREADD:
2
NUM2BEFOREADD:
3
NUM1AFTERADD:
NUM2AFTERADD:
5
上面NUM1中的数据为2,NUM2中的数据为3。
两数相加后,结果为5,并且结果5保存在NUM2中,覆盖了其原来的数据3。
而NUM1中的数据2在运算后是不变的。
以上进行的是两个数的算术加运算,实际上,这种方式也可用于多个数的算术加运算。
下面代码实现了3个数的相加运算。
01NUM1PIC9VALUE2.
01NUM2PIC9VALUE3.
01NUM3PIC9VALUE4.
DISPLAY‘NUM1:
DISPLAY‘NUM2:
DISPLAY‘NUM3:
’,NUM3.
ADDNUM1NUM2TONUM3.
DISPLAY‘TOTAL:
DISPLAY‘NUM3AFTERADD:
‘,NUM3.
NUM1:
2
NUM2:
3
NUM3:
4
TOTAL:
9
NUM3AFTERADD:
上面讲解的实际上是ADD语句的其中一种使用方式。
ADD语句还有另一种使用方式,就是配合GIVING子句来使用。
这种使用方式中,运算结果并不会覆盖用来相加的某一数值,而是另外保存在一个新的变量中。
此外,通常也可省略掉ADD语句的结束标志END-ADD,而直接使用句点表示该语句的结束。
下面代码使用了ADD…GIVING语句,并省略掉了END-ADD,代码如下。
01TOTALPIC9.
GIVINGTOTAL.
’,TOTAL.
6.1.4算术减运算SUBTRACT
当需要进行算术减运算时,通常也可以直接使用运算符号“-”或者使用SUBTRACT语句完成。
本小节只介绍SUBTRACT语句。
同ADD语句类似,SUBTRACT语句也有两种使用方式。
其中一种是将结果覆盖到最后一个运算数中,另一种是将结果保存到一个新的变量中。
下面先介绍第一种方式。
以下这段代码将NUM3中的数据同时减去NUM1和NUM2中的数据。
该段代码使用的便是SUBTRACT语句的第一种方式,即将结果保存到NUM3中,并覆盖其原始数据。
01NUM3PIC9VALUE9.
SUBTRACTNUM1NUM2FROMNUM3.
END-SUBTRACT.
DISPLAY‘RESUL