2 赋常数为初值
DCL A FIXED DEC(5,4) INIT(3.1416);
2 赋字符串为初值
DCL NAME CHAR(B) INIT(‘BANK OF CHINA’)
2 用表达式作为赋初值
DCL B INIT(M*N);
2 用内部函数来赋初值
DCL DATE BUILTIN;
DCL YMD PIC’99/99/99’ INIT(DATE);
2 对数组赋初值
整个数组元素: DCL A(10) FIXED BIN(15) INIT((10)0)
部分数组元素: DCL A(15) CHAR(10)
INIT(‘ASM’,’COBOL’,*,’PL/I’)
则仅对A(1),A(2),A(4)分别赋初值为:ASM COBOL PL/I
2 对几个变量同时赋初值
DCL (A,B,C) FIXED BIN(15) INIT(0);
即同时对A,B,C赋以0
2 对一个内存进行初始化: 如:
0DCL TEST_RECORD CHAR(31);
DCL 1 TEST_REC BASED(ADDR(TEST_RECORD)),
2 TEST_BKNO FIXED DEC(3),
2 TEST_BK2C FIXED DEC(3),
2 TEST_CUR CHAR(3),
TEST_REC = ‘’;
这样可以对TEST_BKNO、TEST_BK2C、TEST_CUR按它们对应的类型进行初始化。
2 动态初始化:
DCL W FIXED BIN(15) INIT(REMQTY);
注:REMQTY是一个带返回值的程序。有REMQTY在编译前处理,因此REMQTY程序内用的变量最好是局部变量,特别读的COPY BOOK一定要定义为局部变量。
4、表达式(expression) 4.1运算符
算术运算 +,-,*,/,**
逻辑运算 ┑,|,&
比较运算 <,=,>,<=,>=,┑<,┑=,┑>
连接运算 ‖
4.2算术运算的优先级 ** * + / -
若要更改运算的优先顺序,可采用括号或前缀符作人为规定
4.3逻辑运算 A B ┑A ┑B A & B A | B 1 1
0 0 1 0 1 0 0 0 1 1 0 1 0 1 1 0 0 0 1 1 1 0
4.4比较运算
4.4.1算术比较
当运算对进行比较时,若进位制、精确度、型等不同则先进行数据转换
4.4.2字符比较
从左到右逐个字符相比
4.4.3位(二进位)的比较
从左到右逐位进行比较
注:1. 不同长的串进行比较时,把短者延长与长者相等后再作比较,
字符,延长部分是以空格补足
二进位,延长部分是以“0”B补足
2. 优先顺序
属性相同时:代数的、字符的、二进位的
属性不同时:二进位的、字符的、代数的
例:BIT与 FIXED DEC 作比较
则BIT –> FIXED BIN和FIXED DEC –> FIXED BIN再相比
3. 比较结果以BIT的一位表示
真——-’1’B 假——-’0’B
4.5 连接运算
把串(字符串、二进位字符串)进行合并的运算,
但若BIT与CHAR进行此运算,BIT一定要转换成CHAR再作合并。
4.6运算符的优先顺序
**,prefix+, prefix-,┑ *,/
infix+, infix- ‖
<,┑<,<=,=,┑=,>=,>,┑> & |
4.7数组表达式(Harray Expression)
4.7.1数组是由一组数据元素组成,而IF语句是只试验单一条件,所以数组不能用于IF语句里.
例: 设A为数组
则只能有IF A(I)……THEN 其中A(I)为A的某一元素,
不能写IF A…… THEN…….
4.7.2数组的运算
例:设数组A(3,2)
则 A*3的结果是:A(1,1)*3, A(1,2)*3,
A(2,1)*3,A(2,2)*3,
A(3,1)*3,A(3,2)*3
若B=A*3 则B必须与A有相同的界和范围
2 A+-B 对应元素相加、减
2 A*/B 对应元素相乘、除
4.8结构表达式(Structure expression)
4.8.1 结构与变量的运算,即是结构中基本名字与变量进行相应运算
例: DCL 1 A 2 B 3 C 3 D 2 E 3 F
设A * X即 A.C * X
A.D * X
A.F * X
4.8.2 结构与结构的运算,两结构的组成形式应一样,结果是:两结构的相应基本名字作所规定的运算.
例: DCL 1 A 2 B 3 C 3 D