Cobol语法基础
一.COBOL语言的特点
最适于数据处理领域:算数计算量少而逻辑处理量多,输入输出量大,数据间存在着一
定的逻辑关系,大量的分类排序;COBOL比较接近英语,容易懂;通用性强,易植,COBOL
结构严谨,层次分明。
二.COBOL的组成部分
1.标识部(IDENTIFICATIONDIVISION):用于标识程序名。
IDENTIFICATIONDIVISION.
PROGRAM-ID.程序名。
AUTHOR。作者名。
INSTALLATION。计算机设置场所。
DATE-WRITTEN。源程序编写日期。
DATE-COMPILED。源程序编译日期。
SECURITY。保密程度。
2.环境部(ENVIRONMENTDIVISION):用于说明程序运行的环境。
ENVIRONMENTDIVISION.
CONFIGRATIONSECTION。
SOURCE-COMPUTER。源计算机名。
OBJECT-COMPUTER。目标计算机名。
SPECIAL-NAMES。专用名描述项。
INPUT-OUTPUTSECTION。
FILE-CONTROL。{文件控制描述体}
I-O-CONTROL。输入输出控制描述体
3.数据部(DATADIVISION):用于说明程序中涉及的所有数据。
4.过程部(PROCEDUREDIVISION):是程序的核心部分,它决定计算机应进行什么操作。
三.最简单的COBOL程序举例
1.环境配置说明:
(1)安装“FujitsuNetCOBOLforWindowsV7.0”的企业版,安装完成后选择“COBOLProject
Manager”打开COBOL主控制台。
(2)选择“OpenProject”打开存在的COBOL程序,或者输入新的Project名选择打开,可以建
立新的COBOLProject.。
(3)在主控制台新建的Project目录下创建新的文件,后缀名为EXE。
(4)在主控制台新建的文件下建立一个“COBOLSourceFiles”目录。
(5)在建立的“COBOLSourceFiles”目录下新建一个后缀名为”COB”的文件,该文件就是
COBOL的源程序文件。
(6)在主控制台上右击COBOL的源程序文件,将“main”选项设置为“Console”。
(7)编译时需要先compile源程序,再build上层的EXE文件,之后就可以执行该EXE文件
了。
(8)COBOL程序的整体结构图如下:
2.程序举例:
000010IDENTIFICATIONDIVISION.
000020PROGRAM-ID。PSAMPLE1.
000030ENVIRONMENTDIVISION.
000040DATADIVISION.
000050PROCEUREDIVISION.
000060PROGRAMBEGIN.
000070DISPLAY‘THISISACOBOLPROGRAM.’.
000080PROGRAMDONE.
000090STOPRUN。
说明:cobol源程序的格式如下:
(1).每行开头有6个字符的序号区。可以输入000010,000020等表示行,因为目前的编辑
器一般都会自动添加行号,所以一般不输。
(2).序号区后面是一个字符(第7位)的指示符区,如第一行所示。可以用*和/表示注释,_
表示续行,D表示调试。
(3).指示符区后面是4个字符(8~11位)的A区。程序中有些内容如部头,节头,段头,层
号01,层号77及文件描述符FD等应从A区开始写。
第12至此72列,称为“B区”。写程序中的正文部分。如过程部中的句子只能从B区开始写。
第73至80列,称为“注释区”。
COBOL字符集包括:
(4).数字0---9,字母A---Z,a---z,专用字符:+-*/=,.;‘()$及空格。
属于系统字符集而不属于COBOL字符集的字符只能出现在COBOL程序中的字符串里。
3.习题:
1熟悉COBOL的运行环境,程序结构和编译方式。
2编写“HelloWorld”小程序,要求在屏幕上输出“HelloWorld”。
四.变量的定义
1数值型数据的描述:
(1).‘9’描述符:表示该位置上可以放入一个0~9之间的数字。因此:
01APIC999.或
01APIC9(3).
表示A可以存放000~999之间的一个三位数。有几个9表示有几位数。
注意:(1)在数值型数据项中只能放数字不能放空格。
(2)用‘9’描述符只能表示整数,如输入小数部分,则小数部分被舍弃。
(3)如送入一个负数,则负号被舍弃。
(4)如送入大于定义位数的数值物业经理人,会从左开始舍弃多于的数。
(2)‘V’描述符:指出在数值数据结构中隐含的小数点的位置。小数点不占内存单元。如:
01MPIC9(3)V9(2).
注意:(1)V在描述符的最后,则等于无小数点。
(2)一个数据的描述符中只能出现一个V。
(3)V 表示的小数点只在传送或运算时起作用,不能被显示或打印出来。
(3)‘S’描述符: 如果想在数据项中放入一个带符号的数,可以用‘S’描述符。如:
01MPIC S9(3)V9(2).
注意:(1)S 描述符必须是最左边的一个描述符。
(2)在内存中,S 不占位数,在传送或运算时起作用。
2 字符型数据的描述:
由仸意的 COBOL 字符组成的数据,称为字符型数据,它是非数值型的,不能用于计算。用 X
描述符来表示字符型数据。如:
01MPIC X(5).
注意:字符型数据中可以放数字。
3 编辑型描述符:
编辑型数据项只是作为输出数据时增加或改变某些所需的符号,起编辑作用,它不是作计算
用的。下面分别介绍编辑数据项中用到的编辑描述符。
(1)。插入小数点‘。’,用‘。’描述符。如:
77TPIC 99.99.
(2)。插入逗号‘,’作分位号,用‘,’描述符。如:
02APIC 999,999.99. (或PIC 9(3),9(3).9(2)) .
(3)。插入空格,用‘B’描述符。如:
02APIC B9(3)B.
(4)。插入正负号,用‘+’或‘-’描述符。如:
02A1PIC +9(3).(或 PIC 9(3)+)
02A2PIC -9(3).(或PIC 9(3)-)
注意:描述符‘+’,一律加符号。描述符‘-’只对负值加负号。
(5)。插入‘$’ 。如:
02A1PIC $999.99.
02A2PIC +$99999.
02A3PIC -$999.9.
(6)。浮动插入正负号和‘$’
02A1PIC $$$99.99.
02A2PIC $$$$$.$$.
02A3PIC ++9.99.
(7)。取消高位零,用‘Z’和‘*’描述符。在高位零的位置上代以空格或‘*’。如:
02A1PIC Z(5).99.
02A2PIC *(5).*(2).
02A3PIC +ZZZ,ZZZ贝语网校,ZZ.ZZ.
02A4PIC -*,***,***.99.
(8)。插入‘DB’和‘CR’字符。DB 和 CR 只能用作固定插入,当数值为负时,在编辑型数据项
中最后两个字节中置DB 或CR,数值为正时,此两字节留空格。如:
02A1PIC $9(3).99DB.
02A2PIC $9(3).99CR.
4. VALUE 子句:
VALUE 子句用于给变量赋初值。如:
01APIC9(3)VALUE 123.
*注意:
只有对工作单元节中的数据项才能赋初值,不能对文件节中输入输出文件中的数据项赋初
值。
如果在组合项的描述体中使用VALUE,初值只能是表意常量或非数值型常量。
对组合项整体而言,一律按字符型数据项处理。
(3) 当用一个带符号的数值作初值时,相应的PIC 子句中应有‘S’描述符。
(4) 赋初值时应该注意类型的一致性。
(5) VALUE 子句给出的值应适合PIC 子句的描述范围,否则会出现截断或产生错误。
*总结:输入专用符号:S,V
输出专用符号:, . B $ + - Z
说明:输入专用符号一般用在从外部设备读入数据的定义,输出专用符号一般用在输出数据
的定义。
定义数据时要根据数据的用途使用不同的符号,否则会编译出错。
如果要将输入数据以某种格式输出,则需要定义两种数据进行赋值操作。
5. COBOL 在DATA DIVISON 中进行变量以及文件记录的定义:
其格式为:
(1). 普通变量
DATA DIVISION.
WORKING-STORAGE SECTION.
NUM-DATA PIC 9.
01 STR-DATA PIC XX.
(2). 结构体定义
DATA DIVISON.
WORKING-STORAGE SECTION.
01 STRUCT-DATA.
05 NAME PIC X(4).
05 SEX PIC 9(4).
05 TEL PIC 9(8).
结构体中的每个变量都可以在程序中单独使用,当引用到结构体时相当于引用了结构体中
的全部变量。如DISPLAY STRUCT-DATA. 就会将 NAME, SEX, TEL 的值都显示在屏幕上.
(3).文件记录的定义
DATA DIVISION.
FILE SECTION.
FD PHONE-FILE
LABEL RECORDS ARE STANDARD.
01 PHONE-RECORD.
05 PHONE-LAST-NAMEPIC X(20).
05 PHONE-FIRST-NAMEPIC X(20).
05 PHONE-NUMBERPIC X(15).
五.基本的过程部语句
1.输入输出语句:
(1)ACCEPT 语句:直接从终端键盘或系统指定的输入设备上输入数据。
ACCEPT 标识符
FROM 助忆名
说明:A.标识符(identifier)指的是能唯一地标识一个数据项的数据名,不能唯一地标识一个
数据项的数据名不是标识符。
B.在 ACCEPT 语句中如不写 FROM 部分,如 ACCEPT A ,则表示从系统隐含指定
的设备上读入一个数据给A。 如果不想从指定的设 备上输入,则要用FROM 选项,
如:ACCEPT NUM-DATA 运行到这语句时,系统会等待从键盘输入一个字符赋给变量
NUM-DATA .
(2)DISPLAY 语句:从计算机内存中输出到某一指定的输出设备上。
DISPLAY { 标识符1,常量1}
标识符2,常量2
。。。
UPON 助忆名
( 标识符和助忆名的说明同上)
如:DISPLAY NUM-DATA 将NUM-DATA 的值显示到屏幕上。
ACCEPT 语句和DISPLAY 语句不必定义文件适用于少量的数据输入输出。
2.算数运算语句:
(1)ADD 语句:
①ADD标识符1 ,标识符2。。。 TO 标识符m
,标识符n
。。。
例如:ADD A TO B. 表示:B = B + A
②ADD标识符1 , 标识符2。。。 GIVING 标识符M
例如:ADD A , B GIVING C. 表示:C = B + A
(2)SUBTRACT 语句:
SUBTRACT标识符1 ,标识符2 。。。 FROM 标识符m
,标识符n
。。。
例如:SUBTRACT A FROM B. 表示:B = B - A
(3)MULTIPLY 语句:
MULTIPLY标识符1BY 标识符2
,标识符3
。。。
例如:MULTIPLY A BY B. 表示:B = B * A
(4)DIVIDE 语句:
DIVIDE标识符1INTO 标识符2
,标识符3
。。。
例如:DIVIDEA INTO B表示: B = B / A
COMPUTE 语句:
COMPUTE标识符1
,标识符2
。。。= 算术表达式
例如: COMPUTE C = A + B.
(5)除法语句中的余数语句(REMAINDER 子句):DIVIDE 语句只能求商不能求余数。如想求
余数,可用REMAINDER 子句。
如: DIVIDEAINTOBGIVINGCREMAINDERD
注意:(1)商和余数的值不仅取决于除数和被除数,还取决于数据部中对商和余数的描述。
(2)如用ROUNDED 子句,它只对商起作用,余数不作四舍五入处理,在计算余
数时,仍按四舍五入前的值为准。
3.传送语句 (MOVE):
MOVE 语句用来实现内存中数据的传送(而不是内存和外设之间的传送)。
MOVE 语句的一般格式为:
MOVE标识符1TO标识符2
一流范文网,标识符3
。。。
MOVE 语句的传送规则:
1,如果接收项和发送项在数据部中描述的类型和长度相同,则按字节一一对应传送。
2,如果接收项和发送项长度不相同,而二者都是数值数据项,则按小数点对齐处理。
3,对字母或字符数据(非数值型数据)的传送,按左对齐处理。
4,初等项和组合项之间可以相互传送。
4.转移语句(GO TO):
当需要使程序改变正常执行的顺序时,可以使用无条件转移语句 GO TO 。其一般格式为:
GOTO过程名
注意:只能转移到段或节的开头,不能转移到段或节的当中某一语句。段名或节名为过程名。
5.条件语句(IF):
当需要根据给出的某些条件是否满足来决定应执行哪一部分语句时钓鱼网,可以使用条件语句IF。
其一般格式为:
IF条件语句组1ELSE语句组1
注意:句点在IF 语句中的特殊作用。
如:IFA > 0
DISPLAYA。
ADDATOTOTAL。
DISPLAYTOTAL。
与 IFA > 0
DISPLAY A
ADDATOTOTAL。
DISPLAYTOTAL。
COBOL 关系运算符:
ISGREATERTHAN(>)
ISLESSTHAN() ( 10.
8.习题:
1 从屏幕中输入一组产品销售记录,每读入一个记录,计算出销售总额(数量X 单价),循环输入
记录直到用户中止输入,.然后打印出全部产品的统计数据。输入数据形式如下:
格式数据类型
(1) 销售时间:YYYYMMDD9
(2) 产品编号:99999
(3) 产品简称:XXXXX
(4) 销售总量:99999
(5) 单位价格:999.999
提示: 程序中的循环控制要使用7 中所述的方法起步网校,不可以使用GOTO 语句。
六.对文件的操作
1.COBOL 中文件的定义.
在程序的ENVIRONMENT DIVISION 里对用到的文件进行物理描述
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PHONE-FILE
ASSIGN TO "phone.dat"
ORGANIZATION IS SEQUENTIAL.
文件名: PHONE-FILE
ASSIGN TO: 将文件映射到一个具体的文件上去 |