DUT单位:大连理工大学作者:陆坤,李凤岐,姜厚云1大型主机平台系统应用开发基础教育部-IBM精品课程DUT2第六章COBOL过程部(高级)6.1流程控制程序结构6.2其他高级语句6.3子程序6.4内置函数DUT3第一节流程控制语句IF语句EVALUATE语句PERFORMGOTO语句DUT逻辑控制结构结构化程序的四种控制语句:顺序选择循环Case结构DUT顺序结构指令按照出现顺序执行如下,指令一条一条顺序执行:•STARTReadAmt1,Amt2ComputeTotal=Amt1+Amt2WriteTotalSTOPDUT选择结构IF指令执行顺序,是根据条件跳转IF-THEN-ELSE结构IFcondition1[THEN]instructionstodoifconditionexists[ELSEinstructionstodoifconditiondoesn’texist][END-IF]ExampleIFDisc-Code=1THENMultiplyAmtBy.15GivingWS-DiscELSEMove0ToWS-DiscEND-IF•简单的关系运算符:,,=,=,=DUTIF嵌套例1:如果1000Q2000,显示Q值IFQ1000IFQ2000DISPLAYQ.例2:嵌套式IF结构中,只能在最外层的选择结构中使用一个句点IFA100IFA100DISPLAYA.DISPLAYAIFB100IFB100DISPLAYB.DISPLAYB.最好每个IF都有对应的END-IFDUTIfemp-gender=“m”ifemp-married=“y”performmale-married-rtnelseperformmale-single-rtnEnd-ifElseifemp-married=“y”performfemale-married-rtnelseperformfemale-single-rtnEnd-ifEnd-ifIfemp-age=65performage-addition-rtnEnd-ifIF嵌套DUTIF语句IF结构中句子和语句的区别IFA0DISPLAYA----------------①ADDATOTOTAL.----------------②DISPLAYTOTAL.IFA0DISPLAYA.----------------①ADDATOTOTAL.----------------②DISPLAYTOTAL.DUT关系运算符关系运算符:ISGREATERTHANISLESSTHANISEQUALTO=ISNOTGREATERTHANNOTISNOTLESSTHANNOTISNOTEQUALTONOT=ISGREATERTHANOREQUALTO=ISLESSTHANOREQUALTO=DUT关系运算规则字符型,即大小写,数字等混合,按照编码规则。主机上,根据EBCDIC编码比较非主机,用ASCII编码码比较EBCDICASCIILowSpacesSpaces|SpecialcharactersSpecialcharacters|a-z0-9↓A-ZA-ZHigh0-9a-zEBCDICASCIIgGgGCatCATCatCATD33DD33DEBCDICvsASCII比较,见右图DUT关系运算规则数值型按照代数值顺序:00502653901212.0012+12这些数值是相同的;字母型,按照字典序ABLEBAKEBARK右面的空格不影响比较•ABCABCbbABCbbbbb都相同组合项只能作为字符型数据项进行比较,即使组合项内部都由数值型初等项组成,也按字符一一比较,如:01A.01B.02A1PIC9(3).02B1PIC9(4).02A2PIC9(2).02B2PIC9.DUT关系条件客体主体数值型数值常量非数值常量字母型字符型组合项数值型NNCCCC数值常量N××CCC非数值常量C××CCC字母型CCCCCC字符型CCCCCC组合项CCCCCCN:数值型C:字符型×:不能比较DUT符号条件(Signtest)用来检查某数据项的值的代数符号格式:数据名IS[NOT]{POSITIVE|NEGATIVE|ZERO}IFXISPOSITIVE等价于IFX0DISPLAYX.DISPLAYX.符号条件用来作定性的测定,如:商品的库存量不应为负,库存为零表示脱销,银行信用卡业务中负值表示透支DUT类型条件(ClassTest)检查数据项的类型是否符合指定的要求,即数据项的内容是否全为数字或字母格式:数据名IS[NOT]{NUMERIC|ALPHABETIC|ALPHABETIC-UPPER|ALPHABETIC-LOWER}(A-Zandblank)(a-zandblank)77TPICA(4)VALUE‘WANG’77QPICX(5)VALUE‘OS390’77RPIC9(3)VALUE789IFTISALPHABETICDISPLAYT.IFQISNOTNUMERICDISPLAYQ.IFRISNUMERICADD1TOR.DUT类型条件用‘9’描述符定义的数据项不能用ALPHABETIC比较用‘A’描述符定义的数据项不能用NUMERIC比较用‘X’描述符定义的数据项既能用NUMERIC,也能用ALPHABETIC77XPIC99VALUE8877YPICAAVALUE‘QQ’77ZPICXXVALUE‘O2’IFXISALPHABETIC……//错误IFYISNOTNUMERIC……//错误IFZISNOTALPHABETICIFZISNOTNUMERICDISPLAY‘ERRORINPUT’.DUT条件名条件(Condition-Names)用来表示数据项特定值(或特定范围内的值)而定义的有意义的名字,称为条件名。条件名本身是一个条件,它有一个值(‘真’或‘假’),用它来检查条件变量的值是否落在条件名所代表的值的范围中,当条件变量的值落在条件名所代表的值的范围中,则此条件名所表示的条件为‘真’,否则为‘假’。例如:DUT条件名条件(Condition-Names)例如:为鼓励存款,存款数小于1000元,利息为2%;大于等于1000元但小于10000元,利息为3%;大于等于10000元但小于50000元,利息为4%;大于等于50000元但小于100000元,利息为5%简单的说,条件名就是用一个数据名代表一个条件;使用四个名字代表四个区间77XPIC9(5).88X1VALUE0THRU999.88X2VALUE1000THRU9999.88X3VALUE10000THRU49999.88X4VALUE50000.DUT条件名条件X是条件变量,定义为数值变化的范围X1-X4是条件名,紧跟在条件变量之后,必须用层号88定义VALUE子句的作用不是赋初值,而是为条件变量的一个可能值命名对于“88X1VALUE0THRU999”应理解为:当X的值在0-999时,条件X1为“真”在过程部可以直接使用条件名条件IFX1MOVE0.02TORATE.(等同于ifx=0andx=999)IFX2MOVE0.03TORATE.IFX3MOVE0.04TORATE.IFX4MOVE0.05TORATE.DUTIF语句-条件名条件DUTIF语句-条件名条件DUTIF语句-条件名条件DUTIF语句-条件名条件DUT复合条件复合条件是由若干个简单的“条件”组合而成的条件使用逻辑运算符AND(与),OR(或),NOT(非)连接多个条件例如:IFA1000ANDA10000如果在一个IF语句中同时用到AND,OR,NOT,其优先级是:NOTANDOR例如:X=3.5Y=4T=3W=2C=5D=4G=8,求:IFX=YORNOTT=WANDCDANDGISPOSITIVEDUT复合条件DUTIF语句NEXTSENTENCE语句例:求AX2+BX+C=0的实数解IFB**2-4*A*C0NEXTSENTENCEELSECOMPUTEX1=……COMPUTEX2=……DUT循环复杂PerformDUTIn-linePERFORMUNTILIn-linePERFORMUNTILPERFORMUNTILcondition..statementstoberepeated.END-PERFORM..StatementsfollowingPERFORM.DUTIn-linePERFORMUNTIL例子:循环三次,显示’hello’MoveZerosToCountPerformUntilCount=3Display'Hello'Add1ToCountEnd-PerformDUTStandardPERFORMUNTILStandardPERFORMUNTILPERFORMparagraph-1UNTILcondition..StatementsfollowingPERFORM.Paragraph-1...statementstoberepeated.DUTPERFORM…TIMES执行固定次数特定语句,此时不需要计数器如下循环,执行300-Print-Rtn段五次。Perform300-Print-Rtn5TimesorMove5ToHow-ManyPerform300-Print-RtnHow-ManyTimesIn-lineloop也可以:Move2ToNumPerform3TimesMultiply2ByNumEnd-PerformDUTNestedPERFORMPseudocodePerform5TimesPerform10TimesReadrecordfromfileandadditsamounttogrouptotalEnd-ReadEnd-PerformPerformPrint-Group-TotalEnd-PerformOuterloopInnerloopDUTPERFORMWITHTEST格式:PERFORM段名1[THRU段名2][WITHTESTBEFOR|AFTER]UNTIL条件DUTTESTAFTERExamplePerformWithTestAfterUntilOpt-Num=1And=5Display'Selectoption(1-5)'AcceptOpt-NumEnd-PerformExampleDUTPERFORMVARING格式:PERFORM段名1[THRU段名2]VARYING数据项FROM初值BY步长UNTIL条件例如:PERFORMT1VARYINGXFROM1BY2WITHTESTBEFORUNTILX101)把初值1赋给X2)检查条件X10?若条件为假,则执行T1段一次3)将X增加步长2,即X+2→X,返回第二步4)若条件为真,则PERFORM执行完毕,继续执行下一语句DUTPERFORMVARING注意:a.循环变量X的初值可以为正,负或零;步长不能为零!b.循环变量X的值在每次循环中自动按步长增加,不必人为添加ADD2TOX语句c.UNTIL语句的条件,不一定直接用到循环变量,但也可能配合使用,如:A.MOVE1TON.PERFORMBVARYINGXFROM1BY2UNTILN10.B.ADD1TON.(COMPUTEN=X*2)DUTPERFORMVARINGPERFORM语句可以实现多重循环格式:PERFORM段名1[THRU段名2]VARYING参数1FROM初值1BY步长1UNTIL条件1AFTER参数2FROM初值2BY步长2UNTIL条件2AFTER参数3FROM初值3BY步长3UNTIL条件3例如:PERFORMTVARYINGXFROM1BY1UNTILX9AFTERYFROM1BY1UNTILYXDUTPERFORM语句小结PERFORM语句