COBOL学习第三天

2007-8-12 COBOL语言程序随堂笔记摘要

缓和下气分,一天7小时对电脑搞程序快要死人了!

小笑话一个:

爹对儿子说,我想给你找个媳妇。

儿子说,可我愿意自己找! 爹说,但这个女孩子是比尔盖茨的女儿!儿子说,要是这样,可以。

然后他爹找到比尔盖茨,说,我给你女儿找了一个老公。比尔盖茨说,不行,我女儿还小!爹说,可是这个小伙子是世界银行的副总裁! 比尔盖茨说,啊,这样,行!

最后,爹找到了世界银行的总裁,说,我给你推荐一个副总裁!总裁说,可是我有太多副总裁了,多余了!爹说,可是这个小伙子是比尔盖茨的女婿! 总裁说,这样呀,行!

 

好了,进入今天的内容:

过程部常用语句及其操作

算数运算语句

1ADD语句:
 
格式1ADD     标识符,标识符2。。。  TO 标识符m [,标识符n]。。。
   
常量,常量2

 格式2ADD     标识符1     ,标识符2      ,标识符3
   
常量1         ,常量2          ,常量3

    。。。GIVING 标识符m [,标识符n]。。。

2SUBTRACT语句:
    
格式1SUBTRACT       标识符,标识符2 。。。 FROM 标识符m [,标识符n]。。。
                            
常量,常量2

     格式2SUBTRACT       标识符1      ,标识符2   。。。  FROM      标识符 
                                  
常量1          ,常量2                                       常量

     GIVING
标识符n [,标识符p]。。。

3MULTIPLY语句:
    
格式1MULTIPLY        标识符1         BY 标识符2 [,标识符3]。。。

                             
常量1 

     格式2MULTIPLY        标识符1         BY 标识符2  GIVING 标识符3 [,标识符4]。。。
                             
常量 常量
2
4DIVIDE语句:
    
格式1DIVIDE              标识符1         INTO 标识符2 [,标识符3]。。。

                             
常量1  

     格式2DIVIDE             标识符1         INTO 标识符2  GIVING 标识符3 [,标识符4]。。。
                           
常量1  BY 常量2

B          à     注意: DIVIDE    A  INTO  B    是指    B/A
 DIVIDE   A  INTO  C
à B   GIVING  C     是指
 B/A
                  DIVIDE    A  BY      B   C 
àGIVING  C     是指
    A/B
5COMPUTE 语句:
                 COMPUTE          
标识符1  [,标识符2 ]。。。= 算术表达式

                
运算的优先级由高到低顺序为:(),正负号  **(次方) *   /   +
-
                
如:C = 3 D = 5 E = 2 F = 1 则:

                 COMPUT   A
B = -C + D
* 2 /  E ** 3 -  F = -3
注意1。每个语句中红色标记的部分,不同的语句之间不要弄混。

2.计算都遵循:右标识符 算数运算符 左标识符 A +/-/*// B

3.其中BY在乘除法中都可以用,区别在于前面的关键字。

   对比BY INTO都表示除法时的不同:BY是前除以后,INTO是后除以前。

6.自己动手写个小程序

 

 

算术语句的说明

l         四舍五入处理(ROUNDED子句):

ADD AB TO C ROUNDEDEF ROUNDED

COMPUTE A ROUNDED = B*C +D

l         长度益处处理(ON SIZE ERROR子句):

MULTIPLY A  BY B GIVING C

ON SIZE ERROR DISPLAY SIZE ERROR

STOP RUN

DISPLAY C

l         ROUNDEDON SIZE ERROR一起使用时,先按ROUNDED做四舍五入再判断是否益出。

l         除法语句中的余数语句(REMAINDER子句):

DIVIDE A INTO B GIVING C REMAINDER D

注意:长度益出只检查商的值而不检查余数。

传送语句 MOVE
        MOVE
语句用来实现内存中数据的传送(而不是内存和外设之间的传送)。
        MOVE
语句的一般格式为:

 MOVE         
标识符1        TO          标识符2 [,标识符3]。。。

                     
常量
1  
MOVE
语句的传送规则:

 1
,如果接收项和发送项在数据部中描述的类型和长度相同,则按字节一一对应传送。

 2
,如果接收项和发送项长度不相同,而二者都是数值数据项,则按小数点对齐处理。

 3
,对字母或字符数据(非数值型数据)的传送,按左对齐处理。

 4
,初等项和组合项之间可以相互传送。

       
关于各类数据之间的传送规则将在第五章中介绍。

转移语句(GO  TO
       
当需要使程序改变正常执行的顺序时,可以使用无条件转移语句 GO  TO 。其一般格式为:

       
格式1 GO         TO     过程名

       
格式2      GO          TO    过程名1  [,过程名2]。。过程名n   DEPENDING    ON      标识符

       
       
注意:只能转移到段或节的开头,不能转移到段或节的当中某一语句。段名或节名为过程名。

条件语句(IF
       
当需要根据给出的某些条件是否满足来决定应执行哪一部分语句时,可以使用条件语句IF

       
其一般格式为:

          IF        
条件     语句组1               ELSE       语句组
1                   [END-IF]
                                NEXT  SENTENCE                      NEXT  SENTENCE
                      

         COBOL关系运算符:  IS         GREATER     THAN    (>)
   IS         LESS              THAN    (<)                                           
   IS         EQUAL          TO          (=)
   NOT    GREATER     THAN    (NOT >) (<=)
   NOT    LESS              THAN    (NOT <) (>=)
   NOT    EQUAL          TO         (NOT =)
注意:句点在IF 语句中的特殊作用。

 
如:
IF    A >  0 
                                             DISPLAY        A
  
         ADD          A          TO    TOTAL
                  
         DISPLAY         TOTAL
                
 
   IF    A  >  0
               DISPLAY  A
                ADD         A     TO    TOTAL

        DISPLAY        TOTAL
。就不同。

为避免出现问题应该使用显式终止符(END-IFEND-PERFORM等)代替隐式终止符(句点

停止语句(STOP
       
其一般格式为:           STOP          RUN
          
常量

        STOP   RUN 
执行后,程序停止运行,停止后不能再接着运行,如需要,可重新运行一次。

        STOP 
常量,表示程序暂时挂起不往下执行,显示出此常量。

返回语句(GOBACK
       
停止运行,将控制权返回给上一级。可用本语句代替STOP语句。子程序必须用GOBACK

不能用STOP:因为STOP停止的是一个

RUN UNIT(运行单元)。

执行语句

执行语句的作用:在一个COBOL程序中,过程部中往往有一部分语句需要执行多次。为了让重复的部分在程序中只出现一次,可以把重复的部分单独写成一段或一节(有一个段名或节名),每次执行这部分语句时转去该段,执行完转回来。这时候就需要用到执行语句(PERFORM. )。
执行语句的一般形式:
            PERFORM          
过程名1        [THRU]                过程名2

使用PERFORM语句实现循环:
  1
 PERFORM           过程名1        [{THRU}                过程名2   ]        整数         TIMES
                                                                                                                                        
标识符

   2
 PERFORM           过程名1        [{THRU}                过程名2   ]        UNTIL     条件

  3 PERFORM           过程名1        [{THRU}                过程名2   ]       
  VARYING   
标识符1        FROM   常数1        BY       常数2             UNTIL   条件

                                                                     
标识符2                            标识符
3
执行语句的多重循环形式COBOL 允许三重循环,其一般格式可写为:
 PERFORM         
过程名1        [{THRU}                过程名
2   ]       
  [VARYING  
参数1        FROM   初值1        BY       步长1             UNTIL   条件
1 ]
  [AFTER        
参数2        FROM   初值2        BY       步长2             UNTIL   条件
2 ]
  [AFTER        
参数3        FROM   初值3        BY       步长3             UNTIL   条件
3 ]
出口语句(EXITEXIT语句提供了一组过程的公共出口,即指出了被调用过程的逻辑终点。

老师演示中偷学的注释表示法:

*****************************************************************

**         在这里写你要对程序总的说明或是其他什么总之你想写的

**         东西,省掉简单程序每行注释的麻烦!!!

*****************************************************************

当然其实除了星星你还可以使用D’‘ /’‘ 来进行注释。需要注意的只是必须从A区开始书写。发现这个也是利用了它系统自动的报错功能。如图:

插话:养成良好习惯:书写标识部等四个部时建议从第11列开始写,这样再书写一定得在B区书写的内容时不会搞忘,因为只要一个空格即可。但为了安全起见,很多的时候我们会键入两个空格。

 

 

 

 

 

 

 

作业题目:1。日期显示:2007-08-12

          2.九九乘法表。

作业代码:1

******把日期的070812改为2007-08-12显示******

 IDENTIFICATION DIVISION.           

 PROGRAM-ID. STRING01.                

 ENVIRONMENT DIVISION.              

*                               

 DATA DIVISION.                     

 WORKING-STORAGE SECTION.           

  01 DAYSTR PIC XX.                  

  01 MONTHSTR PIC X(2).              

  01 YEARSTR PIC X(2).               

  01 DATESTR PIC X(10) VALUE ALL "-".

*                                 

 PROCEDURE DIVISION.

        ACCEPT DATESTR FROM DATE.

        DISPLAY "BEFORE DATE IS :" DATESTR.

        UNSTRING DATESTR

            INTO YEARSTR, MONTHSTR, DAYSTR

        END-UNSTRING.

         STRING "20"   DELIMITED BY SIZE

                YEARSTR DELIMITED BY SPACES

                "-" DELIMITED BY SIZE  

                MONTHSTR DELIMITED BY SPACES

                "-"    DELIMITED BY SIZE    

                DAYSTR DELIMITED BY SIZE   

         INTO DATESTR                    

         END-STRING.                        

       DISPLAY "TODAY IS :" DATESTR.

        STOP RUN.

2

C版本的

#include
void main ()
{
        int i,j;

        for(i=1;i<=9;i++)
        {
                for(j=1;j<=i;j++)
                        printf("%d*%d=%d/t",j,i,i*j);
                printf("/n");
        }
}

 

 

自己最后的版本 更新2007-08-13

  ********************************99CHENGFABIAO***********************

///////////AUTHOR NAME BI JIANG*********************************

 IDENTIFICATION DIVISION.           

 PROGRAM-ID. 99CHENFA.                

 ENVIRONMENT DIVISION.              

 DATA DIVISION.                      

 WORKING-STORAGE SECTION.

  77     I                 PIC   99.

  77     J                 PIC   99.

  77     K                 PIC   99.

  77     II                PIC   Z9.

  77     JJ                PIC   Z9.

  77     KK                PIC   Z9.   

 PROCEDURE DIVISION.

      DISPLAY "THIS PROGRAM IS WRITTEN BY JIANGBI."

      DISPLAY "STUDENT NUMBER IS : 0543041279."  

      PERFORM   VARYING   I   FROM   1   BY   1   UNTIL   I   >   9  

                PERFORM   VARYING   J   FROM   1   BY   1   UNTIL   J   >   I

                COMPUTE K = J * I

                MOVE I TO II

                MOVE J TO JJ

                MOVE K TO KK

                DISPLAY JJ "*" II "=" KK " "  WITH NO ADVANCING

                END-PERFORM

      DISPLAY " "

      END-PERFORM.

            STOP RUN.

 

 

你可能感兴趣的