第二章 语言的基本类型

"下面给出一个具体例子来进行说明。例如,某家公司要改变其公司的名称,这时便可以定义两个变量。其中一个变量保存公司名称,另一个变量保存该公司新名称的讨论结果。当新名称确定后,需要将讨论结果中的内容复制到公司名称变量中。代码如下:
IDENTIFICATION DIVISION.
PROGRAM-ID COMP-NAME-PROG.
AUTHER XXX.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 COMPANY-NAME PIC X(20). /定义公司名称变量/
01 DISCUSSED-NAME PIC X(20). /定义讨论结果变量/
*
PROCEDURE DIVISION.
… /此处省略讨论过程的代码/
DISPLAY-NEW-NAME.
MOVE DISCUSSED-NAME TO COMPANY-NAME.
DISPLAY COMPANY-NAME.
STOP RUN.

2.1.2常量
常量通常可分为普通常量和象征常量两种,不同于变量,常量的内容不可被更改。
1、普通常量:定义的同时通过VALUE语句赋值
例如,COBOL程序常用来打印报表,此时报表的名称就应该被定义为一个常量。设某一公司财务报表在输出打印时首先应包含表头,即该报表的名称。此外还应包含该报表由谁完成, 即提交该报表的职员姓名,因此,这里需要定义两个常量,报表名+职员姓名。定义方式为:
DATA DIVISION.

01 REPORT-HEAD PIC X (20) VALUE ‘EINANCE REPORT’. /报表名称/

01 REPORTER-NAME PIC X (20) VALUE ‘ROBERT’. /报表完成者姓名/
假设是定义数字型常量,已知圆的半径为3,圆周率为3.14,现要求计算圆的周长和面积。这里将圆周率设为一个常量RATE,完成以上功能的代码如下:
IDENTIFICATION DIVISION.
PROGRAM-ID COMPUTE-CIRCLE.
AUTHER XXX.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 RADIUS PIC 9 VALUE 3.
01 RATE PIC 9V99 VALUE 3.14.
01 LENGTH PIC 9V99.
01 AREA PIC 9V99.
01 EDITED-LENGTH PIC 9V99. /Numeric Edited Fields/
01 EDITED-AREA PIC 99.99. /Numeric Edited Fields/
*
COMPUTE- STATEMENT.
COMPUTE LENGT =RADIUS * RATE * 2.
COMPUTE AREA =RATE * RADIUS * RADIUS.
*
RESULT-STAEMENT.
MOVE LENGTH TO EDITED-LENGTH.
MOVE AREA TO EDITED-AREA.
DISPIAY "LENGTH = ", EDITED-LENGTH.
DISPLAY “AREA= “, EDITED-AREA.
STOP RUN.
代码执行后结果:
LENGTH=18.84
AHEA=28.26
上例中将圆周率定义为了一个常量,该常量名称为RATE。这样做主要有以下两点好处:
①程序中不用每次都写出具体数的值,而使用常量名称取代之,特别是对于数值较长的情况下,使用一个长度较短的常量名取代是很方便的。
②当该固定数值根据实际情况需要更改时,只需要更改VALUE后面的内容即可。比如:
01 RATE PIC 9V99 VALUE 3.1415926.
2.象征常量
象征常量是通过COBOL中的关键字引用的,不需要在数据部中进行定义.
COBOL中象征常量及其对应关系如表所示:(括号中的名称表示复数用法)
象征常量 该象征常量的内容
ZERO (ZEROS, ZEROES) 数字0或者字符"0”
SPACE (SPACES) 空格
HGH-VALUE (HIGH-VALUES) 将对应的二进制码全部置为1
LOW-VALUE (LOW-VALUES) 将对应的二进制码全部置为0
DUOTE (QUOTES) 引号
ALL 相应字符连接而成的字符串
比如:
定义一个变量:01 TEST-DATA PIC X(10)
==> MOVE SPACE TO TEST-DATA. /将长度=10字符置为空格/
==> MOVE LOW-VALUE TO TEST-DATA. /将长度=10字符置为0/
==> MOVE ALL ‘ABC’ TO TEST-DATA. /将长度=10字符置为ABCABCABCA/
2.1.3 直接数
1.数字型直接数只能包含数字、正负号和小数点,并且最多只能包含18个数字。数字前没符号时,系统默认为正号。此外,小数点不能为数字型直接数的最后一个字符,否则会和语句结束符相混淆。
以下是几个非法的数字型直接数:
A82. /数字型直接数不能包含字符/
118. /小数点不能最后一个字符,会和语句结束符相混淆/
123456789987654321000 /最多只能包含18个数字,不能超过/
‘123’. /这是字符型直接数/
数字型直接数通常用于算术运算,有时也可作为编号信息,如账号等。
MOVE 2 TO NUM1. /此处2为数字型直接数/
MOVE 3 TO NUM2. /此处3为数字型直接数/
MOVE 5 TO NUM1. /此处5为数字型直接数/
COMPUTE NUM3 = (NUM1 + NUM2) * 100 / 2. / 此处100和2均为数字型直接数/
IF ACCOUNT-CODE (NUM3) = 013745 /此处013745为数字型直接数/
TNEN DISPLAY ‘ ACCOUNT CODE FOUND! ’
END-IF.
2.字符型直接数
字符型直接数是通过引号表示的,引号可以为单引号,也可以为双引号。字符型直接数最多包含160个字符。字符型直接数既可包含数字、字母、空格、标点符号等,即几乎所有字符。
‘I love “”COBOL”” !’ /包含引号字符时,该引号必须重复出现两次/
字特型直接数通常用在条件判断中对某一变量的比较,以及输出信息等
IF ACCOUNT-NAME (NUM3) = ‘TOM’. /此处"TOM" 是字符型直接数/
DISPIAY ’ FOUNDED ! ’ /此处" FOUNDED ! " 是字符型直接数/
最后需要特别注意的是,以下两个数据是不等价的:
3.14 //此为数字型直接数,表示一个具体数值
‘3.14’ //此为字符型直接数,表示一个字符串
2.1.4结构体
数据从组成关系上来说可以分成两种:
·单元结构体。都是孤立的数据,彼此之间没有内在的联系。也就是基本项目。
·组结构体。是组合的数据项,数据之间存在互相关联。也就是集团项目。
例如,下面这段代码对银行账户进行操作。不妨假设这里的账户号前4位为统一编号,后10 位才为对应每位储户的特定编号。这里首先读入账户文件信息,然后再分别将账户姓名和账户的特定编号保存到程序所定义的变量中。代码如下:
IDENIEICATION DIVISION.
PROGRAM-ID ACCOUNT-PROG.
AUTHER xxxx.
*
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ACCOUNT-FILE
ASSIGN TO ACC-SYSIN.
SELECT PRINT-FILE
ASSIGN TO ACC-SYSOUT.
*
DATA DIVISION.
ETIE SECTION.
FD ACCOUNT-FILE /此处定义输入文件/
RECORDING MODE IS F
RECORD CONTAINS 40 CHARACTERS.
01 ACQOUNT-RECORD.
05 ACCOUNT-NAME. /组结构体/
10 FTRST-NAME PIC X (10).
10FLLER PIC X.
10 LAST-NAME PIC X (14).
05 ACCOUNT-NUMBER.
10 GENENAL-NUM PIC 9 (5).
10 SPECIAL - NUM PIC 9 (10). /单元结构体/
FD PRINT-PILE /此处定义输出文件/
RECORDING MODE IS F
LABEL RECORDS ARE OMITTED
RECORD CONTAINS 132 CHARACTERS
DATA RECORD IS PRINT-LINE.
01 PRINT-LINE PIC X (132).
WORKING-STORAGE SECTION.
01 OUTPUT-LINE.
05 FILLER PIC X (10) VALUE SPACES.
05 PRINT-NAME PIC X (25).
05 FILLER PIC X (5) VALUE SPACES.
05 PRINT-NUM PIC 9 (10).
05 FILER PIC X (82) VALUE SPACES.
01 EOF-FLAG PIC X (1) VALUE ‘N’
*
PROCEDURE DIVISION.
000-PREPARE-REPORT.
OPEN INPUT ACCOUNT-FILE OUTPUT PRINT-EILE.
READ ACCOUNT-FILE AT END MOVE ‘Y’ TO EOF-FLAG
END-READ./顺次读取账户文件ACCOUNT-FILE的每条记录,直到读完全部记录/
PERFORM 100-PROCESS-RECORDS UNTIL EOF-ELAG = ‘Y’.
CLOSE ACCOUNT-FILE PRINT-EILE.
STOP RUN.
100-PROCESS-RECORDS.
MOVE ACCOUNT-NAME TO PRINT-NAME.
/每读取一条记录,将组结构体ACCOUNT-NAME复制到输出变量PRINT-NAME中/
MOVE SPECIAL-NUM TO PRINT-NUM.
WRITE PRINT-LINE FROM OUTPUT-IINE.
FROM OUTPUT-LINE.”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值