01-Cobol-基础知识讲义_第1页
01-Cobol-基础知识讲义_第2页
01-Cobol-基础知识讲义_第3页
01-Cobol-基础知识讲义_第4页
01-Cobol-基础知识讲义_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE49关于COBOL的初步知识一.COBOL语言的特点COBOL是CommonBusiness-OrientedLanguage(公用面向商业的语言)的缩写,主要供数据处理、数据收集及分析之用。COBOL自60年代初开始广泛应用于计算机应用领域(商业和其他领域)。事实上,除了商业之外,各种管理工作都广泛使用COBOL,如各种统计工作,财会工作,企业计划编制,作业制度,情报检索,人事管理等。COBOL针对商业世界的使用,是真正商用应用程序开发的首选语言。适于数据处理领域。采用英语语法的高级语言,可读性、可维护性、可移植性较强。通用性强,标准化程度较高。结构严谨,层次分明。缺点是比较繁琐。最简单的COBOL程序介绍例1:IDENTIFICATIONDIVISION.(标识部)PROGRAM-ID.EXAM1.(程序标识段)ENVIRONMENTDIVISION.(设备部)DATADIVISION.(数据部)PROCEDUREDIVISION.(过程部)A.DISPLAY‘THISISACOBOLPROGRAM.’.STOPRUN.例2:IDENTIFICATIONDIVISION.(标识部)PROGRAM-ID.EXAM2.(程序标识段)ENVIRONMENTDIVISION.(设备部)DATADIVISION.(数据部)WORKING-STORAGESECTION.(工作单元节)APICTUREIS9(3).(对A进行描述)77BPICTUREIS9(3).(对B进行描述)PROCEDUREDIVISION.(过程部)S.ACCEPTA.(输入A值)ACCEPTB.(输入B值)ADDATOB.(A+B->B)DISPLAYA,B.(显示A和B值)STOPRUN.COBOL程序的结构部每个程序都包括四个部:IDENTIFICATIONDIVISION(标识部)提供程序的一般性文档说明,主要用来指定源程序名。ENVIRONMENTDIVISION(环境部)列出程序中所用到的文件。程序中不需要外部文件时,环境部为空,也可以省略部标题。DATADIVISION(数据部)程序中所用到的全部数据(包括:文件数据—-用于输入输出、静态数据、参数等)都应在数据部中说明它们的类型和所占内存的情况。PROCEDUREDIVISION(过程部)包含构成程序的过程性语句,用来给出程序要执行的指令,使计算机产生相应的操作。节和段标识部下只有各个段。除标识部以外,每个部下可以有若干个节(SECTION),每个节以“节头”作标识。每个节下又可包括若干段(PARAGRAPH),每个段用“段名”标识。各个段内有各种COBOL元素。句子,语句和子句在过程部中,每一段由若干个句子(Sentence)组成。一个句子是以英文句号来结束的。句子又由语句(Statement)组成。一个语句中又可以包含若干个子句(Clause)。注意:部标题、节标题、段名、数据项目描述及句子后必须用英文句号结束,否则程序无法编译。描述体(描述款目)在数据部中有若干个节,每个节中有若干个描述体,每个描述体又有若干个子句构成。源程序的书写格式1~6列,为“序号区”,为6位整数序号,不是程序本身的内容。序号不是必须的,但其所占区域要保留。第7列,为“指示符区(续行标志区)”。连接符“-”表示本行是紧接在上一行的后面。“*”或“/”表示本行为注释行。“D”表示本行为调试行。8~11列,为“A区”,部头,节头,段头,层号01,层号77以及文件描述符FD,程序结束标题等应从A区开始书写,但不一定从第8列开始写。12~72列(现在有时厂家规定可到80列),为“B”区,过程部中的句子只能从B区开始书写。73~80列,为“注释区”。在写程序时,应注意以下几点:1.大写或小写字母均可,习惯用大写字母。2.相邻的两个字之间必须留一个以上的空格。3.运算符和等号左右两边必须各留一个空格。4.逗号,句号,分号的左边不能留空格,而右边应有空格。COBOL字符和COBOL单字COBOL字符集包括以下字符:0~9,a~z,A~Z,+-*/=,.;’”()<>$空格:COBOL单字分三种:保留字、用户自定义字及系统名称。COBOL单字的规则如下:字长为1~30个字符之间。只能由字母,数字和连字符“-”组成,第一个和最后一个字符不能用连字符。字中不能出现空格。小写字母与大写字母等价。不能用保留字作为用户定义字和系统名称,但用户定义字和系统名称可以用同一个单词。用户自定义字:文件、数据、标号、程序等所取的名称。系统名称:COBOL保留字,用于与操作环境通信,又COBOL厂家定义。分为:Computername、Implementersname、Languagename。保留字:有300多个。如:+、ACCEPT、ADD、BEFORE、DATA。常量数值常量(数字直接数)例:123,+45.67,-89.65非数值常量(非数字直接数):字符串内的引号用两个连续引号表示。例:’abcd’,’Expired’,象征常量:用保留字表示某些常用常量(直接数)。例:ZEROZEROSZEROESSPACESPACESHIGH-VALUEHIGH-VALUESLOW-VALUELOW-VALUESQUOTEQUOTESALL常量七.COBOL处理数据的特点:层次的概念;记录和文件的概念。八.程序文本的复制与替换操作COPY语句COPY语句用COBOL源文本text-name替换从COPY字开始到终止句号之前的内容。REPLACE语句REPLACE语句将COBOL源程序某个段中的文本进行替换。替换从REPLACE语句的第一个格式开始,到REPLACEOFF语句结束。第二章标识部和环境部标识部(IDENTIFICATIONDIVISION)(一)必写部分IDENTIFICATIONDIVISION.PROGRAM-ID.程序名.(二)任选部分一般格式:[AUTHOR.作者姓名][INSTALLATION.设计这个程序的公司或部门。][DATE-WRITTEN.编写日期,可记入修订史,修改日期、原因及人员。][DATE-COMPILED.编译日期][SECURITY.保密程度的描述。]注:标识部中的段标题只能按部描述中指定的顺序出现。环境部(ENVIRONMENTDIVISION)环境部指定程序中与特定计算机或操作系统相关的方面,指明用到哪些设备,哪些文件,将程序中用到的内部文件名与外部文件(或外部设备)联系起来。如果程序不需要任何环境部提供的项目,则可以省略环境部。一般格式:ENVIRONMENTDIVISION.CONFIGURATIONSECTION.配置节SOURCE-COMPUTER.OBJECT-COMPUTER.SPECIAL-NAMES.INPUT-OUTPUTSECTION.输入/输出节FILE-CONTROL.I-O-CONTROL.配置节包括SOURCE-COMPUTER,OBJECT-COMPUTER和SPECIAL-NAMES(专用名段)。SOURCE-COMPUTER段标识编译程序的计算机。若该段省略,则编译程序的计算机是源计算机。如果指定WITHDEBUGGINGMODE从句,则编译所有源调试行,否则把调试行作为说明语句。OBJECT-COMPUTER段标识编译程序运行的计算机。SPECIAL-NAMES段用于把系统中原规定的一些设备名或功能名或符号改为用户自己指定的名字或符号。SPECIAL-NAMES.CLASSREAL-NUMBERIS"0123456789+-."可用于类条件测试DECIMAL-POINTISCOMMA.逗号用作小数点,句号用作编辑符CURRENCYSIGNIS“Y”.表示货币符号的字符,DEFAULT$输入输出节输入输出节只用于文件,它把内部文件与外部文件(包括外部设备)联系起来。它有两个段:文件控制段:FILE-CONTROL段是给文件命名,指出存放该文件的外部设备及其他有关文件控制信息。对每个文件包含一个项目。FILE-CONTROL.SELECTFILE-1ASSIGNTO“FILE-1.TXT”.SELECTFILE-2ASSIGNTODISK.SELECTFILE-3ASSIGNTOPRINTER.输入输出控制段:I-O-CONTROL段包含定义程序返回点,不同文件共享的内存区和多文件卷中文件位置的项目。数据部数据部的节数据部包含程序引用的所有数据的定义,如文件记录、变量、表格和报表。COBOL将数据部分成节,每个节是可选的,但程序中的节应按指定顺序定义。DATADIVISION.FILESECTION.文件节WORKING-STORAGESECTION.工作存储节LINKAGESECTION.连接节COMMUNICATIONSECTION.通信节REPORTSECTION.报表节文件节程序中每一个输入或输出文件都要在文件节中定义。包括:文件名和文件属性。文件中包括的记录名。每个记录中数据的层次关系。记录中各数据项的数据形式和占内存的大小。DATADIVISION.(数据部)FILESECTION.(文件节)FDFILE-1.(文件名)LABELRECORDISOMITTEDDATARECORDISSTUDENT-SCORE.01STUDENT-SCORE.(记录名)03NAMEPICX(10).03NUMPIC9(06).CORUSE-SCORE.05CORUSE-1PIC9(03).05CORUSE-2PIC9(03).05CORUSE-3PIC9(03).工作存储节包含程序所需的临时结果和初始化静态数据的数据定义。WORKING-STORAGESECTION.77XPICS99VALUE-21.01APIC9(08).01B.03B1PICX(04).03B2PICX(02).03B3PICX(02).连接节本节只用于子程序,包含调用程序传递的数据(即参数)。LINKAGESECTION.01LCMIN.COPYRCI001.01LCMOT.COPYRCJ001.通信节通信节描述作为程序间接口的数据和消息控制系统,用以实现与通信设备相关的消息分析的COBOL方法。属过时部分,很少使用。报表节报表节描述实现COBOL报告编写工具的系统所需的数据。REPORTSECTION.RDEMPLOYEE-REPORTPAGELIMIT60LINESHEADING1FOOTING58FIRSTDETAIL3.二.COBOL数据的类型及层次(一)数据类型(1)numeric(数字)(2)numeric-edited(数字编辑)(3)alphabetic(字母)(4)alphanumeric(字母数字)(5)alphanumeric-edited(字母数字编辑)所有数据类型缺省作为字符串存放在内存中,唯一可以用不同方式存储的数据类别是数字型数据(通过USAGE子句)。对数字型数据制订不同方式存储,提高计算效率。(二)数据的层次和层号COBOL中把有从属关系的数据用层次关系来描述。数据的层次结构是:记录—组合项—基本项。层次规定如下:(1)用来描述数据的层次结构的层号从01开始,到49结束,即可用的层号为01~49。(2)从属项的层号比其上属项的层号高。(3)如果几个数据项都从属于同一组合项但互不从属,则这几个数据项应具有相同的层号。(4)77层项目用于某个组的数据项,如程序中的临时变量。(5)66层和88层是特殊层。88层是对特殊数据项目条件名保留的。(在讲过程部的条件语句时再详细介绍。)66层是用于更明现有数据项或数据项组。(讲RENAMES语句时再介绍。)(三)限定数据(四)FILLER关键字需要定义部分记录,但这部分在程序中永远不会用到,则可用保留字FILLER占有这个记录部分的位置。举例:一个打印用的记录行,有固定的空格时。如果组项目不需按名称引用,则可以用FILLER关键字作为数据名,不用生成组名,但FILLER组名中定义的每个数据项应当唯一。三.数据部用子句(一)PIC子句PIC是PICTURE的缩写,PIC子句用来描述每一个基本数据项,定义基本项目的具体长度、格式和数据类型。01A.03A1PIC9999.03A2PICAAAA.03A3PICXXXX.(A)字母数据字母数据限于字母表中使用的字符和空格符,用A描述符表示,每个字符用一个A表示。01XPICA(4).MOVE‘ABC’TOX.(B)字符数据(字母数字)字符数据可以包含计算机字符集中的任何字符。字符数据项目的格式字符串可用用A、X、9表示,至少要包含一个X,是非数值类型的,不能用于运算。01XPICX(4).01YPICX(8).01ZPICA(5)X9(2).MOVE’BOOK’TOXMOVE’1234’TOXMOVE’COBOL-85’TOYMOVE’COBOL-85’TOZ(C)字符编辑数据(字母数字)要把字符数据格式化成特定形式,则可以用字符编辑数据。字符编辑数据用特定字符表示格式。字符编辑数据项目的格式字符串可用A、X、9、B、0和/表示,至少要有一个A或X和一个B(空格)或0(0)或/(斜杠)。01EDITED-DATEPICTUREIS99/XXX/9999.MOVE’05May1909’TOEDITED-DATE则EDITED-DATE的值为‘05/May/1909’(D)数字数据数字数据由数字组成,包括其隐含的小数点和操作符号,表示的是实际数字值,可用于数据运算。数字数据只能包含字符9,V,S和P的组合,至少要有一个9,最多18个9,至少一个V和S。1.“9”描述符表示数字存放位置,不能放入空格,不能表示小数和负数。算进项目长度中。描述数值内存中表示长度数值范围01XPIC99912312330~99901YPIC9(4)4567456740~999901ZPIC9912.3412201TPIC99-12.341222.“V”描述符指出在数据中隐含的小数点的位置,不占内存,不算进项目长度中。运算时按隐含的小数点位置对准进行运算。显示时只显示内存中的内容,不显示小数点。不包含V的项目假设的小数点位于最右边。描述数值内存中表示长度数值范围01XPIC99V99.87.5875040.00~99.9901YPIC9(3)V9(2).7817810050.000~999.9901ZPICV9991.234234301TPIC999V12312333.“P”描述符表示数据项的比例因子,不占内存,不算进项目长度中。当数值很大,前面或后面若干位为0,为了节省内存可以用“P”描述符。P只能出现在开头或末尾,而不能同时在两处出现。显示时只显示内存中实际存放的数字而不显示隐含的P(即0)。描述数值内存中表示长度数值范围01XPIC9P(4).10000111~9*1000001YPICPPP99.0.000232320.00001~0.000994.“S”描述符表示一个带符号的数,符号不算如项目长度中,除非包括SIGNISSEPARATE从句。如有S则必须是最左边一个描述符。如无S则总是表示为正值。描述数值内存中表示长度数值范围01XPICS9(3)V9(2)126.89126895-999.99~999.9901YPICS9(3)V9(2)-1126.897126895(E)数字编辑数据为了使输出数据更易读,可以定义数字编辑数据。数字编辑数据可以用于显示数字,但所有计算中只能用数字数据。数字编辑数据项目的格式字符串只能包含字符9、Z、B、0、/、P、V、,、。、*、+、-、CR、DB的组合。它必须包含1~18个9字符,包含至少一个除9、P、V以外的字符。1.“.”描述符表示插入小数点的位置,只能在格式字符串中使用一次,不能与V和P同时使用。01WPIC9(3).9(2).01VPIC9(3)V9(2).MOVE123.45TOVMOVEVTOW错误:01WPICS9(3).9(2).2.“,”描述符表示插入逗号的位置,尽管它通常作千位分隔符,但也可以插入格式字符串其他地方。01WPIC999,999.99.MOVE123456.78TOW输出表示:123,456.783.“0”描述符表示插入’0’。4.“B”描述符表示插入空格。01WPIC9(3).01VPICB9(3)B.MOVE123TOW.MOVEWTOV.5.“+”或“-”描述符表示在输出的数值前(或后)加正号或负号。当用“+”时,不论数值为正或负一律加符号。当用“-”时,当数值为正时,数值前空一格,数值为负时,加一负号。01XPICS99.01YPIC+99.01ZPIC-99.01UPIC99+.01VPIC99-.6.插入“$”01APIC$999.99.01BPIC+$999.99.01CPIC-$999.99.7.浮点插入形式(浮动插入正负号和“$”)“$”,“+”,“-”的位置是浮动的,能够使符号紧挨着数字之前输出。在编辑型数据的描述中,指定浮动插入的字符个数应足够,以免数据被截断。浮动字符前不能再出现其它符号,即浮动字符应为第一个描述字符。01A1PICS9(3)V99.01A2PIC++++.99.01A3PIC$$$$.99.01A4PIC++++.++.01A5PIC$$$$.$$.错误:01A1PIC+$$.99.8.零抑制格式(取消高位零,用“Z”和“*”描述符)01A1PICS9(3)V99.01A2PICZZZZ.99.01A3PIC****.99.(1)不能同时用Z浮动和+,-,$浮动错误:ZZ$$9.99或++ZZ.99(2)单个的+,-,$可以与Z或*连用01A1PIC+ZZZ.99.01A2PIC-*(3).99.01A3PIC$ZZZ.99.(3)如果使“Z”或“*”对应与所有的数字字符,当数值为0时,则所用数字位全部由空格或*代替。小数点位置上,由空格代替(用Z时),或保留“.”(用*时)。01A1PICZZZ.ZZ.01A2PIC***.**.(4)可与“,”连用01A1PICZ,ZZZ.99.9.插入“DB”和“CR”字符DB(DEBIT,借方)和CR(CREDIT,贷方)只能用作固定插入,而且只作最后一个描述符号。当数值为负时,在编辑型数据项中最后两个字节中置DB或CR,数值为正时,此两字节留空格。01A1PIC$9(3).99DB.01A2PIC$999.99CR.10.PIC子句小结描述字符含义9表示一个数字位置A表示一个字母位置X表示一个字符位置V表示隐含的小数点位置S表示数值数据带符号P表示十进比例换算$插入货币号.插入小数点位置,插入逗号位置+一律加符号-对负数加负号,对正数前留一空格Z取消高位零,用空格代替*取消高位零,用*代替B插入空格0插入零DB(借方)数据为负时,在数据后面插入DB,为正时,空两格CR(贷方)数据为负时,在数据后面插入CR,为正时,空两格(二)REDEFINES子句REDEFINES子句可以用不同数据描述同一计算机内存,适用于基本数据项和组数据项。层号数据名1REDEFINES数据名202A.03A1PIC9(4).03A2PICX(6).03A3PICX(4).02BREDEFINESA.03B1PICX(5).03B2PIC9(6).03B3PIC99V9.02CREDEFINESA.03C1PICX(5).03C2PICX(4).03C3PICX(5).规则:(1)数据名2与数据名1的层号必须相同。内存中的值为数据名1和数据名2共享。(2)用REDEFINES子句的描述体应紧跟在被重新定义的数据项的描述之后,中间不能插入其它项的说明。当进行多次重定义,必须紧跟出现,而且要求使用最初定义的数据名。(3)不能用于文件节或报表节的01层,可用于工作单元节的01层。(4)用REDEFINES子句可以改变数据的结构,REDEFINES从句定义的区域长度应小于等于原区域长度。(5)REDEFINES子句应在其它子句之前。(6)使用REDEFINES子句的数据项不能使用VALUE子句赋初值。(7)数据名2不能包含OCCURS子句。03APICX(8)VALUE’ABCDEFGH’.03BREDEFINESA.05B1PICX(4).05B2PICX(4).(三)USAGE子句USAGE子句可以指定计算机内存中的数据项格式,充分利用计算机内存空间和算术功能。USAGE子句不影响项目的使用(但过程部的有些语句将某些操作数限于某种USAGE从句)。USAGE子句可以用于基本和组数据项目。[USAGEIS]BINARYDISPLAYCOMPUTATIONALCOMPCOMPUTATIONAL-1COMP-1COMPUTATIONAL-2COMP-2COMPUTATIONAL-3COMP-3COMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5INDEXPACKED-DECIMAL缺省为DISPLAY。BINARY、COMPUTATIONAL、PACKED-DECIMAL只用于数字数据项。BINARY指定项目存放成二进制数。在PIC子句中描述字符9的个数为1~4时,占内存字节为2;个数为5~9时,占内存字节为4;个数为10~18时,占内存字节为8。COMPUTATIONAL由厂家定义。大多选择与BINARY相同。COMPUTATIONAL-1由厂家定义。大多定义为单精度内部浮点数字项,用内存4Byte。(不用PIC)COMPUTATIONAL-2由厂家定义。大多定义为双精度内部浮点数字项,用内存8Byte。(不用PIC)PACKED-DECIMAL指定数字按缩和十进制存放,以减少每个数字的存储量。每个数字4位或每个字节表示2个数字。符号也占半个字节,放在最后面(无符号,用‘1111’;+号,用‘1100’;-号,用‘1101’)。COMPUTATIONAL-3由厂家定义。大多选择与PACKED-DECIMAL一致。COMPUTATIONAL-4由厂家定义。大多选择与PACKED-DECIMAL一致。COMPUTATIONAL-5由厂家定义。类似于USAGECOMP,但与在某些平台上的字节顺序相反。在支持小尾字节顺序的平台上,COMP-5执行速度更快。(COMP-X类似于COMP-5,但按大尾字节顺序存放。)INDEX用法是特殊用法,指定用该项目作为表格索引。采用INDEX用法的项目只能在过程部的某些语句中,不能有PIC从句。注:USAGE从句用于组层时作用于组中每个基本项目。如用BINARY时,组中的所有基本项目都要用数字。03APIC9(4)COMP.03BPIC9(4).03CCOMP.05C1PICS9(3).05C2PICS9(6).(四)SIGN子句SIGN子句可以指定格式字符串包含S字符的数字数据项中符号的位置。[SIGNIS]LEADING[SEPARATECHARACTER]TRAILING通过LEADING或TRAILING来指定符号在数字的第一位(LEADING)或最后一位(TRAILING)。符号的具体表示由厂家指定。如果有SEPARATE子句,则符号用标准字符+或-表示,符号位记入数据项的长度。(五)OCCURS子句OCCURS子句指定数据项为固定项目数或可变项目数的表格(即数组)。OCCURS子句不能用于01和77层,可以用于基本或组数据项目。详细内容见表格处理。(六)SYNCHRONIZED子句SYNCHRONIZED子句指定基本数据项在计算机内存自然边界上的对齐。指定SYNCHRONIZED子句时的具体效果由厂家指定。可参看教科书的25章。(七)JUSTIFIED子句JUSTIFIED子句(简称JUST)只能用于非编辑的字母数字基本数据项。即数据放进这个项目时,它与最右边的字符对齐。数据太长时左边截尾,太短时则左边填充。标准规则为与最左边的字符对齐并在右边截尾或填充。(八)BLANKWHENZERO子句BLANKWHENZERO子句只能用于数字型或数字编辑型的基本项。使用时,当数据项的值为零时,内容改变为空格。03APIC$(5).99BLANKWHENZERO.03BPICZ,ZZ9.99BLANKWHENZERO.03CPIC***.**BLANKWHENZERO.(BLANK子句不起作用)(九)赋初值子句(VALUE子句)程序中的数据往往需要赋初值,可以用VALUE子句来实现。01A1PIC99VALUE12.01A2PICX(5)VALUE’COBOL’.01A3PICS99V99VALUE-12.34.01T.03A4PIC9(6)VALUEZERO.03A5PICX(6)VALUESPACES.03A6PICX(6)VALUEALL’A’.A7VALUE’1234’.组项目被初始化了,则下属项目不能有05A71PIC99.VALUE子句。05A72PIC99.四.66层RENAMES项目用66层RENAMES项目可以在不改变数据项的长度的前提下,重新定义数据区的名称和数据结构的形式。原各基本项的类型和长度不变。即是说该格式可以更名现有数据项或数据项组,或以原定以未允许的方式组合。66数据名1RENAMES数据名2[THRU数据名3]01A.03B05G05H03C05I05J03D03E03F66KRENAMESGTHRUI.66MRENAMESBTHRUC.66NRENAMESE.(1)层号只能用66,它必须紧跟在01层记录中最后一个数据描述体之后。(2)只能用于工作单元节中,不能用于文件节中。(3)指定数据名3时,数据名3必须在数据名2后面定义,不能从属于数据名2。此时数据名1是一组项目。过程部一.简介过程部是COBOL程序的最后一个部分。包含程序运行时要执行的所有语句。以PROCEDUREDIVISION开头,包含对数据操作的程序逻辑。过程部的组件包括语句、句子、段和节。语句(statement):以动词开头的单词、直接数和分隔符的组合。语句应一律从B区(12列开始)开始写,续行也应从B区开始。句子(sentence):以英文句号(.)结尾的一系列语句。段(paragraph):由段名、句号分隔符和零或几条句子组成。段的最后一条语句要用英文句号结束。节(section):由节标题加上保留字SECTION和分隔符句号。注:段名应在节中保持唯一性、节名应在程序中保持唯一性。段名不能与节名重复。引用段名时可以用所属的节限定如下:GOTOPARA-1INSECTION-22.例1:PROCEDUREDIVISION.(过程部头)ASECTION. (A节)A1.MOVE1TOI.(A1段)MOVE2TOJ.A2.ADDITOJ.(A2段)BSECTION.(B节)…例2:PROCEDUREDIVISION.DISPLAY’HOWDOYOUDO’STOPRUN.例3:MOVE100TOX.ADDYTOZ.IFX>100GOTOFINISH.二.算术运算语句加法语句(ADD语句)ADDATOBA+B→BADD15TOC15+C→CADDA,BTOCA+B+C→CADD15,25TOC15+25+C→CADDA,BGIVINGCA+B→CADD15,25GIVINGC15+25→CADDA,BTOC,DA+B+C→C,A+B+D→D减法语句(SUBTRACT语句)SUBTRACTBFROMAA–B→ASUBTRACTB,CFROMAA–B–C→ASUBTRACTB,CFROMA,TA–B–C→A,T–B–C→TSUBTRACTB,CFROMAGIVINGXA–B–C→X3.乘法语句(MULTIPLY语句)MULTIPLYABYBA*B→BMULTIPLYABYBGIVINGCA*B→CMULTIPLYABYB,CA*B→B,A*C→C4.除法语句(DIVIDE语句)DIVIDEAINTOBB/A→BDIVIDEAINTOBGIVINGCB/A→CDIVIDEABYBGIVINGCA/B→CDIVIDEABYBGIVINGCREMAINDERDA/B→商C,余数DREMAINDER子句:取得余数。存放余数的数据项可以时数字或数字编辑数据项。余数计算取决于每个操作数的符号和小数点位置。例:77QPICS99V9.77RPICS99V9.DIVIDE3INTO7GIVINGQREMAINDERRQ=2.3R=0.15.计算语句(COMPUTE语句)COMPUTE语句可以进行复杂的四则运算,也可实现指数运算。COMPUTET=(A+B)*C/DCOMPUTET=X**2COMPUTET=1/(1/A+1/B)运算次序:()->单边运算符+、―->**->*、/->+、-例1:IDENTIFICATIONDIVISION.PROGRAM-IDEX1.ENVIRONMENTDIVISION.DATADIVISION.WORKING-STORAGESECTION.77XPIC9999.77APIC9977BPIC99.77CPIC99.PROCEDUREDIVISION.ACCEPTA.ACCEPTB.ACCEPTC.COMPUTEX=(A+B)/C.DISPLAYX.STOPRUN.6.四舍五入处理(ROUNDER子句)接收项目后边的ROUNDER短语表示运算产生的数值先进行四舍五入处理再存入接收项目中。对多个接收项目,舍入处理对各个项目独立进行。ADDA,BTOCROUNDERADDA,B,CTOD,EROUNDER,FROUNDER7.长度溢出处理(ONSIZEERROR短语)结果绝对值大于接收项目最大存储能力时,会发生SIZEERROR条件。APIC9V9VALUE1.2.BPIC9V9VALUE9.0.01CPIC9V9.MULTIPLYABYBGIVINGCONSIZEERRORDISPLAY’SIZEERROR’.8.带CORRESPONDING子句的算术运算语句(数据项同名时编写多条语句的缩写方法。)算术运算语句中的ADD和SUBTRACT语句除了可以用来使两个或多个单个的数据项进行运算外,还可以用来使两个组合项中的对应项进行加,减运算。进行运算的各项必须是数值型初等项。(数据项目不一定要格式相同。数据项的顺序也无关紧要。)02A.02B.03A1PIC9(3).03A1PIC99V99.03A2PIC99V99.03A2PIC9V9.03A3PIC9V9.03A3PIC99V99.ADDCORRATOB.三.传送语句(MOVE语句)MOVE语句用来实现数据的传送,将一个数据从一个内存域送到另一个内存域。MOVE123TOAMOVEZEROTOBMOVESPACETOCMOVE’COBOL’TOX,Y,Z1.同类型数据间的传送规则。MOVEATOB其中A为发送项,B为接收项数字型数据之间的传送,按小数点位置对齐,如发送项长于接收项,则多余位截去,如短于接收项,接收项的空位补零。字母或字符型数据间的传送,按左端对齐,如发送项长于接收项,则右端多余位截去,如短于接收项,右端补空格。2.编辑传送。发送项是数字型数据,而接收项是编辑数字型数据,则先将发送项中数据按接收项的描述要求进行编辑,然后再传送。3.不同类型数据间的传送规则(1)接收项为数字或数字编辑型,则发送项为数字和数字编辑型或字母数字型。常量ZERO可直接赋值。(2)接收项为字符数据或字符编辑数据,则发送项目可以用任何类别。如果发送项是数字,则必须是无符号整数。4.组合项的传送MOVE可以一次传送一个基本项,也可以传送一组合项或一个记录。组合项的传送是将发送项的内容不加转换地一个字节一个字节地顺序传送到接收项。01A.01B.03A1PIC999.03B1PICX(6).03A2PICXX.03B2.03A3PIC999.05B21PICX(6).03A4PICA(5).05B22PICA(2).03A5PICX(3).03B3PICX(2).5.对应传送(CORRESPONDING子句)对应传送即把一个组合项中若干项传送给另一个组合项中同名的项。如果两个组合项中包括的项不同,则只传送同名的项。传送的两者间必须有成对的同名数据项,而且这一对中必须至少有一个项是基本项。四.输入输出语句1.接收语句(ACCEPT语句)ACCEPT语句从输入设备读取数据。有两种格式:一种是将输入设备中的少量数据移到程序中,通常通过键盘或控制台;一种是使程序可以取得系统日期和时间。ACCEPT标识符[FROM助忆名]**助忆名应与环境部SPECIAL-NAMES段中的硬件名相关联。省略时为键盘输入。ACCEPT标识符FROMDATE(6字符)DAY(6字符)DAY-OF-WEEK(1字符)TIME(8字符)2.显示语句(DISPLAY语句)DISPLAY语句将数据写入输出设备。DISPLAY标识符[UPON助忆名][WITHNOADVANCING]**助忆名应与环境部SPECIAL-NAMES段中的硬件名相关联。省略时为操作员控制台。如果使用NOADVANCING短语则传输最后一个字符后,输出设备仍然保持原位,使下一条DISPLAY语句在该位置开始输出数据。否则显示这个数据后输出设备复位到下一行。五.转移语句(GOTO语句)GOTO语句是一个无条件转移语句,程序执行到此语句,无条件转到指定的节或段去。A1.ADDATOCONSIZEERRORGOTOA2.A2.STOPRUN.六.字符串连接语句(STRING语句)STRING语句从一个或几个发送数据项收集字符并将数据合成一个接收数据项。STRINGA,B,CTOD1.DELIMITED(定界短语),用来控制各个发送项的终止位置。STRINGA,B,CDELIMITEDBYSIZEINTODSTRINGA,B,CDELIMITEDBYSPACEINTOD2.POINTER(指针短语),用来指定开始复制的具体字符位置。MOVE3TOTSTRINGA,B,CDELIMITEDBYSIZEINTODPOINTERT.3.OVERFLOW(溢出短语)STRINGA,B,CDELIMITEDBYSIZEINTODONOVERFLOWDISPLAY‘OVERFLOW’NOTONOVERFLOWDISPLAY‘NOTOVERFLOW’END-STRING.注:发送项必须为USAGEDISPLAY数据项;接收项也应为USAGEDISPLAY数据项,不能是编辑数据项或包括JUSTIFIED从句的数据项。若取得的发送项的长度小于接收项,则接收项中没有复制的字符位置保持不变。七.字符串分解语句(UNSTRING语句)UNSTRING语句取一个发送数据项中的字符并将其放进多个接收数据项。UNSTRINGAINTOB,C,D1.DELIMITED短语UNSTRINGADELIMITEDBYSIZEINTOB,CUNSTRINGADELIMITEDBY’T’INTOB,CUNSTRINGADELIMITEDBYALL’’INTOB,CUNSTRINGADELIMITEDBYALLSPACEOR’.’INTOB,C2.COUNT短语,将已发送的字符个数记入用户定义的记数器。UNSTRINGADELIMITEDBY’T’INTOBCOUNTINW.3.DELIMITER短语,定界符存储短语。UNSTRINGADELIMITEDBY’T’ORALL’’OR’R’INTOBDELIMITERINQCDELIMITERINPDEND-UNSTRING.4.POINTER短语,指定从发送项某一指定位置开始传送。MOVE5TOTUNSTRINGAINTOBWITHPOINTERT.5.TALLYING短语,接收项记数短语,用来记录实际接收传送的接收项项数。UNSTRINGAINTOB,C,DTALLYINGINN.(N=3)6.OVERFLOW短语注:如果发送项的长度大于接收项的总长度,则填完最后一个接收项时,语句结束并发生溢出。如果发送项的长度小于接收项的总长度或遇到分隔字符串使UNSTRING语句结束,则接收项中没有复制到的字符位置保持不变。八.检测语句(INSPECT语句)INSPECT语句检查数据项以计算该项目中某个字符串出现的次数或用另一个字符串替换该字符串。1.INSPECTTALLYING格式,用来统计满足某种条件的字符的个数。(检查方向由左向右。对TALLYING后的变量要由使用者负责初始化到适当数值,不能自动初始化到零。)MOVE’AT**F,***,T’TOAINSPECTATALLYINGNFORALL’*’AFTER’T’(N=5)ALL检查匹配的字符或字符串个数。INSPECTATALLYINGNFORLEADING’*’AFTER’T’(N=2)INSPECTATALLYINGNFORLEADING’*’(N=0)--LEADING只计算开头的匹配,其他都不算匹配。INSPECTATALLYINGNFORCHARACTERSAFTER’T’(N=9)CHARACTERS计算所有字符,任何字符都算匹配。INSPECTATALLYINGNFORALL’*’,ALL’,’AFTER’T’(N=7)--AFTER设置开始比较的点,若没发现指定的开始字符,则不进行比较。INSPECTATALLYINGNFORALL’*’BEFORE’,’(N=2)BEFORE指定停止比较中断,若没发现指定的字符,则效果如同没有指定BEFORE.注意:如果在同一条INSPECTTALLYING语句中组合CHARACTERS、ALL、LEADING,则检查一个字符进行,连续采用每个检查标准,检查顺序按INSPECT语句中指定的顺序。找到匹配后,当前位置移动,比较在次从第一个操作数开始。即是说,第一个比较成功后,指针移动到下一个字符,再从第一个比较做起。例:77CSPICX(9)VALUE‘REELWHEEL’.77COUNT-0PIC9(1).77COUNT-1PIC9(1).77COUNT-2PIC9(1).MOVE0TOCOUNT-0,COUNT-1,COUNT-2.INSPECTCSTALLYINGCOUNT-0FORALL‘E’,COUNT-1FORLEADING‘W’AFTER‘L’COUNT-2FORCHARACTERS.(COUNT-0=4,COUNT-1=1,COUNT-2=4)2.INSPECTREPLACING格式,用指定的字符代替另一些指定的字符。MOVE’A000.12B’TOAINSPECTAREPLACINGALL’0’BYSPACEALL’.’BY’,’ALL’A’BY’B’INSPECTAREPLACINGFIRST’0’BYSPACEBEFORE’.’--FIRST短语时,只把第一个出现的字符当作匹配。组合INSPECTTALLYING和REPLACING格式(等于INSPECT语句顺序编写,先用TALLYING选,再用REPLACING选项。)INSPECTATALLYINGNFORALL’L’REPLACINGLEADING’A’BY’E’AFTER’L’INSPECTCONVERTING格式,是INSPECTREPLACING语句缩写。(等同于用一系列ALL选项。对象与目标应当长度相同,且对象中字符不能重复。)INSPECTACONVERTING’EL’TO’AX’===〉INSPECTAREPLACINGALL‘E’BY‘A’,REPLACINGALL‘L’BY‘X’.九.条件语句(IF语句)IF条件THEN语句组1ELSE语句组2END-IF1.关系表达式条件关系运算符:>,<,=,>=,<=,NOT>,NOT<,NOT=,NOT>=,NOT<=IFA>=ZERO…IFBNOTEQUALTO1…IF(0.03*C)<D…IFNAMENOT=’WANG’…IFSTU=SPACE…2.符号条件符号条件测试算术表达式的代数值大于,小于或等于0。数据名或IS[NOT]POSITIVE算术表达式NEGATIVEZEROIFAISPOSITIVE…IFBISNOTNEGATIVE…IF(A+B)ISZERO…3.类型条件类型条件测试数据项的类型是否完全由属于某个类或集合的字符组成。标识符IS[NOT]NUMERICALPHABETICALPHABETIC-LOWERALPHABETIC-UPPERClass-nameENVIRONMENTDIVISION.CONFIGURATIONSECTION.SPECIAL-NAMES.CLASSREAL-NUMBERIS’0123456789+-*/’.……PROCEDUREDIVISION.IFAISREAL-NUMBER…4.条件名条件一个基本项只能根据某些条件取预定的值,或只能在一个预定的范围中取值,则这个变量称条件变量。用来表示条件变量当前值的名字叫条件名,用层号88,紧跟在条件变量之后说明。77XPIC9(6).88X1VALUE0THRU99.88X2VALUE100THRU999.88X3VALUE1000THRU4999.88X4VLAUE5000THRU100000.……IFX1MOVE0.03TOR.IFX2MOVE0.04TOR.IFX3MOVE0.05TOR.IFX4MOVE0.06TOR.5.复合条件用逻辑操作符(AND,OR,NOT)和括号进行组合,可以构成复合条件。IFX>0ANDX<100…IFX=0ORX=1十.PERFORM语句PERFORM语句使控制传递另一过程,并在执行后返回。它相当于子程序调用,只是不传递参数。1.简单PERFORM格式PERFORM过程名1[THRU(THROUGH)过程名2]过程部中的节名,段名称为过程名。例1:A.DISPLAY‘A’MOVE‘B’TOT.PERFORMB.STOPRUN.DISPLAYT.MOVE‘C’TOT.PERFORMC.C.DISPLAYT.例2:PERFORMATHRUCA.……B.……C.……例3:PROCEDUREDIVISION.PERFORMA00.PERFORMB00.PERFORMC00.STOPRUN.A00SECTION.A00-START.……A00-END.EXIT2.PERFORMTIMES格式PERFORMTIMES格式与简单PERFORM格式相似,只是指定的过程组不是执行一次,而是执行指定的次数。PERFORM过程名1[THRU过程名2]整数TIMES例1:A.MOVE5TON.MOVE1TOM.PERFORMA1NTIMES.DISPLAYM.STOPRUN.A1.MULTIPLYNBYMSUBTRACT1FROMN.上例中的PERFORM部分也可写成:PERFORMNTIMESMULTIPLYNBYMSUBTRACT1FROMNEND-PERFORM.3.PERFORMUNTIL格式PERFORMUNTIL格式重复执行指定的过程组,直到条件值变为真。PERFORM过程名1[THRU过程名2]UNTIL条件注意:在执行PERFORM语句时,先判断指定的条件是否为真,若为假则执行所指定的语句序列,如果一开始条件就为真,则一次也不执行。MOVE0TOTMOVE1TONPERFORMUNTILN>30ADDNTOTADD1TONEND-PERFORM.4.PERFORMVARYING格式PERFORMVARYING格式相当于C语言中的FOR语句。多个计数器(AFTER短语)等于嵌套FOR语句。PERFORM过程名1[THRU过程名2]VARYING标识符1FROM标识符2BY标识符3UNTIL条件1[AFTER标识符4FROM标识符5BY标识符6UNTIL条件2]MOVE0TOTPERFORMVARYINGNFROM1BY1UNTILN>30ADDNTOTEND-PERFORMPERFORMVARYINGIFROM1BY1UNTILI>9AFTERJFROM1BY1UNTILJ>9DISPLAYP=I*JEND-PERFORM.5.出口语句(EXIT语句)EXIT语句提供了一组过程的公共出口,或者说它指出了被调用过程的逻辑终点。十一.多分支选择语句(EVALUATE语句)EVALUATE语句根据一列表达式的值,从一大组语句中选择一组要执行的语句,相当于CASE语句。EVALUATENET-INCOMEWHEN0THRU12500MOVE0TOTAX-RATEWHEN12501THRU28000MOVE0.15TOTAX-RATEWHEN28001THRU50000MOVE0.28TOTAX-RATEWHENOTHERMOVE0.33TOTAX-RATEEND-EVALUATE十二.停止语句(STOP语句)STOPRUN格式停止程序,关闭任何打开的文件,这是COBOL程序正常终止的方式。表的建立和查找COBOL语言中的表(TABLE)相当于其它高级语言中的数组(ARRAY)。一.表定义生成表时,在数据部的数据描述项中使用OCCURS子句。1.定长表OCCURSinteger-1TIMESOCCURS从句生成定长数据项表格,数据项个数就是指定的个数,引用表格的下标取值为1到integer-1之间。PRODUCT-RECORD.03PRODUCTOCCURS20TIMES.05PRODUCTIONPIC9(6).05SALESPIC9(6).05HANDPIC9(6).**PRODUCT是表的名字。2.变长表格OCCURS整数1TO整数2TIMESDEPENDINGON数据名1OCCURS从句生成变长表格,数据项个数可变。integer-1指定最少个数,可以为0,integer-2指定最大个数。data-name-2应为整数,确定每次引用表格时数据项的实际个数,取值为integer-1和integer-2之间。01STUDENT-SCORE-RECORD.03NAMEPICX(10).03QTY-OF-COURSEPIC99.03SCOREPIC9(3)OCCURS1TO10TIMESDEPENDINGONQTY-OF-COURSE.3.多维表格发生多维表格时,用从属于带OCCURS从句的数据项的另一个OCCURS从句定义数据项。允许最多7维。01PRODUCT-RECORD.03PRODUCTOCCURS20TIMES.05QUANTITYPIC9(6)OCCURS3TIMES.PRODUCT是一维表,QUANTITY是二维表。有关说明(1)OCCURS后面只能为正整数。(2)OCCURS从句不能用于01层和77层。(表只能定义在记录内部。77层是孤立的数据项,不和其他数据发生组合关系。)(3)如果用OCCURS来描述一个基本项,则重复出现的是这个基本项。如果用OCCURS来描述一个组合项,则重复出现的是这个组合项。(4)在COBOL中表元素可以允许为组合项。而且在建立一个多维表的同时,也建立了一维表。(5)只有当OCCURS所说明的数据是基本项时,才能在该数据项的描述中使用PIC从句。A.02BPICX(20)OCCURS5.错误03CPICX(20).二.表元素的引用表必须先在数据部定义,才能在过程部引用。各个表元素是按一定规律在内存中顺序存放的(在内存中按行排列,如A(1,1)、A(1,2)、A(2,1)、A(2,2)),因此,在引用时必须指出表名和这个元素在表中的位置。例PRODUCT(2)。如果是二维表,在括弧中要用两个下标分别表示此元素在每一维中的位置。例QUANTITY(3,2)。注:下标只能是整常数或具有整型值的数据名。TABLE.02BOCCURS8.03C1PICX(8).03C2PICX(2).MOVESPACETOC1OFB(2).–表元素应出现在限定词OF或IN的后面。三.表格的初始化1.对整个表格赋初值。01TABLEVALUEISZERO.03APIC9(3)OCCURS20TIMES.01TABLE.03APIC9(3)OCCURS20TIMESVALUEISZERO.TABLE.03AOCCURS20TIMESVALUESPACES.05NAMEPICX(10).05MAILPICX(20).对带OCCURS从句的数据项指定VALUE值。01TABLE.03AOCCURS1TO20DEPENDINGONCOUNTVALUESPACES.05NAMEPICX(10).05MAILPICX(20).对变长

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论