最新Cobol基础.docx
- 文档编号:26264358
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:28
- 大小:292.99KB
最新Cobol基础.docx
《最新Cobol基础.docx》由会员分享,可在线阅读,更多相关《最新Cobol基础.docx(28页珍藏版)》请在冰豆网上搜索。
最新Cobol基础
Cobol语法基础
作成者
审查者
承认者
丁成远
变更履历
日期
版本
作成者
备注
2005-03-01
1.0
丁成远
初版
一.COBOL语言的特点
最适于数据处理领域:
算数计算量少而逻辑处理量多,输入输出量大,数据间存在着一定的逻辑 关系,大量的分类排序;COBOL比较接近英语,容易懂;通用性强,易植,COBOL结构严谨,层次分明。
二.COBOL的组成部分
1.标识部(IDENTIFICATIONDIVISION):
用于标识程序名。
IDENTIFICATION DIVISION.
PROGRAM-ID. 程序名。
[AUTHOR。
作者名。
]
[INSTALLATION。
计算机设置场所。
]
[DATE-WRITTEN。
源程序编写日期。
]
[DATE-COMPILED。
源程序编译日期。
]
[SECURITY。
保密程度。
]
2.环境部(ENVIRONMENTDIVISION):
用于说明程序运行的环境。
ENVIRONMENT DIVISION.
CONFIGRATION SECTION。
SOURCE-COMPUTER。
源计算机名。
OBJECT-COMPUTER。
目标计算机名。
[SPECIAL-NAMES。
专用名描述项。
]
[INPUT-OUTPUT SECTION。
FILE-CONTROL。
{文件控制描述体}
[I-O-CONTROL。
输入输出控制描述体]]
3.数据部(DATA DIVISION):
用于说明程序中涉及的所有数据。
4.过程部(PROCEDUREDIVISION):
是程序的核心部分,它决定计算机应进行什么操作。
三.最简单的COBOL程序举例
1.环境配置说明:
(1)安装“FujitsuNetCOBOLforWindowsV7.0”的企业版,安装完成后选择“COBOLProjectManager”打开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.
000090 STOPRUN。
说明:
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之间的数字。
因此:
01 A PIC999. 或
01 A PIC9(3).
表示A可以存放000~999之间的一个三位数。
有几个9表示有几位数。
注意:
(1)在数值型数据项中只能放数字不能放空格。
(2)用‘9’描述符只能表示整数,如输入小数部分,则小数部分被舍弃。
(3)如送入一个负数,则负号被舍弃。
(4)如送入大于定义位数的数值,会从左开始舍弃多于的数。
(2)‘V’描述符:
指出在数值数据结构中隐含的小数点的位置。
小数点不占内存单元。
如:
01 M PIC 9(3)V9
(2).
注意:
(1)V在描述符的最后,则等于无小数点。
(2)一个数据的描述符中只能出现一个V。
(3)V表示的小数点只在传送或运算时起作用,不能被显示或打印出来。
(3)‘S’描述符:
如果想在数据项中放入一个带符号的数,可以用‘S’描述符。
如:
01 M PIC S9(3)V9
(2).
注意:
(1)S描述符必须是最左边的一个描述符。
(2)在内存中,S不占位数,在传送或运算时起作用。
2字符型数据的描述:
由任意的COBOL字符组成的数据,称为字符型数据,它是非数值型的,不能用于计算。
用X描述符来表示字符型数据。
如:
01 M PIC X(5).
注意:
字符型数据中可以放数字。
3编辑型描述符:
编辑型数据项只是作为输出数据时增加或改变某些所需的符号,起编辑作用,它不是作计算用的。
下面分别介绍编辑数据项中用到的编辑描述符。
(1)。
插入小数点‘。
’,用‘。
’描述符。
如:
77 T PIC 99.99.
(2)。
插入逗号‘,’作分位号,用‘,’描述符。
如:
02 A PIC 999,999.99.(或PIC 9(3),9(3).9
(2)).
(3)。
插入空格,用‘B’描述符。
如:
02 A PIC B9(3)B.
(4)。
插入正负号,用‘+’或‘-’描述符。
如:
02 A1 PIC +9(3).(或PIC 9(3)+)
02 A2 PIC -9(3).(或PIC 9(3)-)
注意:
描述符‘+’,一律加符号。
描述符‘-’只对负值加负号。
(5)。
插入‘$’。
如:
02 A1 PIC $999.99.
02 A2 PIC +$99999.
02 A3 PIC -$999.9.
(6)。
浮动插入正负号和‘$’
02 A1 PIC $$$99.99.
02 A2 PIC $$$$$.$$.
02 A3 PIC ++9.99.
(7)。
取消高位零,用‘Z’和‘*’描述符。
在高位零的位置上代以空格或‘*’。
如:
02 A1 PIC Z(5).99.
02 A2 PIC *(5).*
(2).
02 A3 PIC +ZZZ,ZZZ,ZZ.ZZ.
02 A4 PIC -*,***,***.99.
(8)。
插入‘DB’和‘CR’字符。
DB和CR只能用作固定插入,当数值为负时,在编辑型数据项中最后两个字节中置DB或CR,数值为正时,此两字节留空格。
如:
02 A1 PIC $9(3).99DB.
02 A2 PIC $9(3).99CR.
4.VALUE子句:
VALUE子句用于给变量赋初值。
如:
01 A PIC 9(3) VALUE 123.
*注意:
只有对工作单元节中的数据项才能赋初值,不能对文件节中输入输出文件中的数据项赋初值。
如果在组合项的描述体中使用VALUE,初值只能是表意常量或非数值型常量。
对组合项整体而言,一律按字符型数据项处理。
(3)当用一个带符号的数值作初值时,相应的PIC子句中应有‘S’描述符。
(4)赋初值时应该注意类型的一致性。
(5)VALUE子句给出的值应适合PIC子句的描述范围,否则会出现截断或产生错误。
*总结:
输入专用符号:
S,V
输出专用符号:
.B$+-Z
说明:
输入专用符号一般用在从外部设备读入数据的定义,输出专用符号一般用在输出数据的定义。
定义数据时要根据数据的用途使用不同的符号,否则会编译出错。
如果要将输入数据以某种格式输出,则需要定义两种数据进行赋值操作。
5.COBOL在DATADIVISON中进行变量以及文件记录的定义:
其格式为:
(1).普通变量
DATADIVISION.
WORKING-STORAGESECTION.
NUM-DATAPIC9.
01STR-DATAPICXX.
(2).结构体定义
DATADIVISON.
WORKING-STORAGESECTION.
01STRUCT-DATA.
05NAMEPICX(4).
05SEXPIC9(4).
05TELPIC9(8).
结构体中的每个变量都可以在程序中单独使用,当引用到结构体时相当于引用了结构体中的全部变量。
如DISPLAYSTRUCT-DATA.就会将NAME,SEX,TEL的值都显示在屏幕上.
(3).文件记录的定义
DATADIVISION.
FILESECTION.
FDPHONE-FILE
LABELRECORDSARESTANDARD.
01PHONE-RECORD.
05PHONE-LAST-NAMEPICX(20).
05PHONE-FIRST-NAMEPICX(20).
05PHONE-NUMBERPICX(15).
五.基本的过程部语句
1.输入输出语句:
(1)ACCEPT语句:
直接从终端键盘或系统指定的输入设备上输入数据。
ACCEPT 标识符[FROM助忆名]
说明:
A.标识符(identifier)指的是能唯一地标识一个数据项的数据名,不能唯一地标识一个数据项的数据名不是标识符。
B.在ACCEPT语句中如不写FROM部分,如ACCEPT A ,则表示从系统隐含指定的设备上读入一个数据给A。
如果不想从指定的设备上输入,则要用FROM选项,
如:
ACCEPTNUM-DATA运行到这语句时,系统会等待从键盘输入一个字符赋给变量NUM-DATA.
(2)DISPLAY语句:
从计算机内存中输出到某一指定的输出设备上。
DISPLAY {标识符1,常量1}[标识符2,常量2]。
。
。
[UPON助忆名]
(标识符和助忆名的说明同上)
如:
DISPLAYNUM-DATA将NUM-DATA的值显示到屏幕上。
ACCEPT语句和DISPLAY语句不必定义文件适用于少量的数据输入输出。
2.算数运算语句:
(1)ADD语句:
①ADD 标识符1 ,标识符2。
。
。
TO标识符m[,标识符n]。
。
。
例如:
ADDATOB.表示:
B=B+A
②ADD 标识符1 ,标识符2。
。
。
GIVING标识符M
例如:
ADDA,BGIVINGC.表示:
C=B+A
(2)SUBTRACT语句:
SUBTRACT 标识符1 ,标识符2。
。
。
FROM标识符m[,标识符n]。
。
。
例如:
SUBTRACTAFROMB.表示:
B=B-A
(3)MULTIPLY语句:
MULTIPLY 标识符1 BY 标识符2[,标识符3]。
。
。
例如:
MULTIPLYABYB.表示:
B=B*A
(4)DIVIDE语句:
DIVIDE 标识符1 INTO 标识符2[,标识符3]。
。
。
例如:
DIVIDE A INTO B 表示:
B=B/A
COMPUTE语句:
COMPUTE 标识符1 [,标识符2]。
。
。
=算术表达式
例如:
COMPUTEC=A+B.
(5)除法语句中的余数语句(REMAINDER子句):
DIVIDE语句只能求商不能求余数。
如想求余数,可用 REMAINDER子句。
如:
DIVIDE A INTO B GIVING C REMAINDER D
注意:
(1)商和余数的值不仅取决于除数和被除数,还取决于数据部中对商和余数的描述。
(2)如用ROUNDED子句,它只对商起作用,余数不作四舍五入处理,在计算余
数时,仍按四舍五入前的值为准。
3.传送语句(MOVE):
MOVE语句用来实现内存中数据的传送(而不是内存和外设之间的传送)。
MOVE语句的一般格式为:
MOVE 标识符1 TO 标识符2[,标识符3]。
。
。
MOVE语句的传送规则:
1,如果接收项和发送项在数据部中描述的类型和长度相同,则按字节一一对应传送。
2,如果接收项和发送项长度不相同,而二者都是数值数据项,则按小数点对齐处理。
3,对字母或字符数据(非数值型数据)的传送,按左对齐处理。
4,初等项和组合项之间可以相互传送。
4.转移语句(GO TO):
当需要使程序改变正常执行的顺序时,可以使用无条件转移语句GO TO。
其一般格式为:
GO TO 过程名
注意:
只能转移到段或节的开头,不能转移到段或节的当中某一语句。
段名或节名为过程名。
5.条件语句(IF):
当需要根据给出的某些条件是否满足来决定应执行哪一部分语句时,可以使用条件语句IF。
其一般格式为:
IF 条件 语句组1 ELSE 语句组1
注意:
句点在IF语句中的特殊作用。
如:
IF A> 0
DISPLAY A。
ADD A TO TOTAL。
DISPLAY TOTAL。
与 IF A > 0
DISPLAY A
ADD A TO TOTAL。
DISPLAY TOTAL。
COBOL关系运算符:
IS GREATER THAN (>)
IS LESS THAN (<)
IS EQUAL TO (=)
NOT GREATER THAN (NOT>)(<=)
NOT LESS THAN (NOT<)(>=)
NOT EQUAL TO (NOT=)
6.停止语句(STOP):
其一般格式为:
STOP RUN
常量
STOP RUN 执行后,程序停止运行,停止后不能再接着运行,如需要,可重新运行一次。
STOP 常量,表示程序暂时挂起不往下执行,显示出此常量。
7.执行语句(PERFORM):
在一个COBOL程序中,过程部中往往有一部分语句需要执行多次。
为了让重复的部分在程序中只出现一次,可以把重复的部分单独写成一段或一节(有一个段名或节名),每次执行这部分语句时转去该段,执行完转回来。
这时候就需要用到执行语句(PERFORM)。
A.执行语句的一般形式:
PERFORM 过程名1
使用PERFORM语句实现循环:
(1). PERFORM 过程名1 整数 TIMES
例如:
PERFORMPRINT8TIMES
说明:
执行PRINT过程8次。
(2).PERFORM 过程名1 UNTIL 条件
例如:
PERFORMREAD-FILEUNTILEND-OF-FILE=“Y”
说明:
执行READ-FILE过程直到END-OF-FILE等于Y.
(3).FERFORM过程名1
VARYING变量名FROM整数TO整数
UNTIL条件
例如:
PERFORMPROGRAMVARYINGTEMPFROM1BY1
UNTILTEMP>10.
8.习题:
1从屏幕中输入一组产品销售记录,每读入一个记录,计算出销售总额(数量X单价),循环输入记录直到用户中止输入,.然后打印出全部产品的统计数据。
输入数据形式如下:
格式数据类型
(1)销售时间:
YYYYMMDD9
(2)产品编号:
99999
(3)产品简称:
XXXXX
(4)销售总量:
99999
(5)单位价格:
999.999
提示:
程序中的循环控制要使用7中所述的方法,不可以使用GOTO语句。
六.对文件的操作
1.COBOL中文件的定义.
在程序的ENVIRONMENTDIVISION里对用到的文件进行物理描述
ENVIRONMENTDIVISION.
INPUT-OUTPUTSECTION.
FILE-CONTROL.
SELECTPHONE-FILE
ASSIGNTO"phone.dat"
ORGANIZATIONISSEQUENTIAL.
文件名:
PHONE-FILE
ASSIGNTO:
将文件映射到一个具体的文件上去
ORGANIZATIONISSEQUENTIAL:
说明这个文件是有序列的
ORGANIZATIONISLINESEQUENTIAL:
文件是有序列的,每个记录为一行
2.在程序的DATADIVISION里对用到的文件进行逻辑描述:
:
DATADIVISION.
FILESECTION.
FDPHONE-FILE
LABELRECORDSARESTANDARD.
01PHONE-RECORD.
05PHONE-LAST-NAMEPICX(20).
05PHONE-FIRST-NAMEPICX(20).
05PHONE-NUMBERPICX(15).
文件名:
PHONE-FILE
LABELRECORDSARESTANDARD.:
表明这个文件是存储在磁盘或者磁带上的
文件中的记录(RECORD)名:
PHONE-RECORD
文件的记录也就是一个结构体,定义了文件的所存储的信息.
3.对STANDARD文件的操作:
(1)OPEN语句:
程序中如果需要读写文件,则该文件必须先用OPEN语句打开,系统在执行READ,WRITE以前先检查该文件是否已在规定的外部设备上准备就绪。
(2)打开控制语句为:
OPENMODEFILE-NAME
例如:
A.OPENOUTPUTPHONE-FILE
(如果文件不存在,自动生成文件,向里面写入记录,如果文件存在,文件中已有的记录被删除,写入新的记录)
B.OPENEXTENDPHONE-FILE
(如果文件不存在,自动
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 Cobol 基础