符号常量及其定义方法

上传人:宝路 文档编号:47998806 上传时间:2018-07-08 格式:PPT 页数:58 大小:5.91MB
返回 下载 相关 举报
符号常量及其定义方法_第1页
第1页 / 共58页
符号常量及其定义方法_第2页
第2页 / 共58页
符号常量及其定义方法_第3页
第3页 / 共58页
符号常量及其定义方法_第4页
第4页 / 共58页
符号常量及其定义方法_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《符号常量及其定义方法》由会员分享,可在线阅读,更多相关《符号常量及其定义方法(58页珍藏版)》请在金锄头文库上搜索。

1、23 符号常量及其定义方法FORTRAN 77允许用一个名字来代表一个常量,例如,可以指定用PI来代表31415926,在本程序单位用到PI时,它就代表31415926,这个PI就称为“符号常量” (或“符号常数”),即用一个符号来代表一个常量。FORTRAN规定用PARAMETER语句来定义符号常量。例如:PARAMETER (PI=31415926)PARAMETER语句也称参数语句,它与赋值语句不同,它是非执行语句,并且在程序中定义一个符号常量后,不能再以任何形式改变它的值。这是符号常量与变量的最大区别。PARAMETER语句应写在所有执行语句之前。符号常量的定名规则与定变量名规则相同。

2、名字本身隐含类型,也遵循I-N规则。可以用类型说明语句定义符号常量的类型。 在一个参数语句中可以定义多个符号常量。例如:PARAMETER (A=05,N50,J30) 用符号常量的好处是:如果需要改变某一常数时,不需一一改变这个常数,只需改变参数语句中符号常量的值即可。注意:类型语句和参数语句的先后顺序,必须类型语句在前,参数语句在后。符号常量不能作为语句标号,也不能出现在FORMAT语句中代替常数。除此以外,凡出现常数处均可用符号常量代替。24 FORTRAN内部函数表1下面举例说明函数的求值:SIN(10) = sin(5729578o) = 08414709TAN(10) = tan(

3、5729578o) = 1557408ATAN(10) = arctan(1.0)=07853981(弧度)LOG(3.0) = ln3 =1098612INT(86) = 8INT(-86) = -8MOD(8,3) = 2SIGN(40,-05) = -40SIGN (-40,05) = 40REAL(8) = 80 MAX(8,6,7,15,-1) = 15 MIN(8,6,7,15,-1)= -1 说明:(1)FORTRAN 77提供的系统函数称为“内部函数”。FORTRAN将这些函数分别编成一个个子程序,组成函数库,存在于外部介质(如磁盘)上。在完成源程序的编译之后,用连接命令实现连

4、接,即将已翻译成二进制指令的目标程序与函数库连接。也就是将程序中出现函数名的地方用函数库中 相应的一组指令代入之,组成一个统一的“可执行目标块”。例如,程序中出现一个SIN函数,在连接时就将一组二进制指令直接插入到程序中出现SIN的地方。由于是插入到程序内部的,所以称为“内部函数”。 (2) 一个内部函数要求一个或多个自变量。从附录中可以查出自变量(参数)的个数。例如,SQRT函数只能有一个自变量(如SQRT(46),MOD函数要求两个自变量 (如MOD (8,3),MAX和MIN函数要求两个以上自变量(如MAX(6,8,10),MIN(-6, 8,0)等)。请注意,当自变量个数规定为2个时,

5、自变量的顺序不应任意颠倒,如MOD(8,3)表示8被3除的余数,其值为2,而MOD(3,8)则表示3被8除的余数,其值为3。当自变量个数为2时,自变量的顺序无关,如MAX(6,8,10)和MAX(8,10,6)结果是一样的。(3) 函数的自变量是有类型的,函数值也是有类型的,例如MOD(8,3)中自变量8和 3是整型,函数MOD(8,3)的值“2”也是整型,如果写成MOD(80,30),自变量是实型的,函数值也是实型的,其值为20。要特别注意,当自变量的个数为两个或两个以上时,它们的类型必须一致,否则出错。(4) 三角函数中角度的单位是“弧度”而不是“度”。 SIN(10) = sin(572

6、9578o) =08414709ATAN(10) = 07853981(弧度)例如,SIN(10)表示的不是sin l o,而是sin5729578 o 1弧度 = 5729578 o sin30 o应写成SIN(30*3.14159/180) (5)自变量可以是常量,变量或表达式。例如 SQRT(40),SQRT(A)和SORT (20+20)均为合法。自变量的值必须落在取值范围之内,例如,SQRT的自变量不得为负数,LOG、LOG10的自变量必须大于0,MOD的第二个自变量不能为0等。自变量的类型应符合要求。例如SQRT(1)就不合法,因为1为整型变量,而SQRT函数的自变量不能是整型量。

7、(6) INT函数的作用是简单地截去小数部分,如INT(86) = 8,INT(-8.5)= -8。 (7) SIGN函数的作用是“符号传送”。 SIGN(A,B)的作用是将B的符号传送给 A,例如, SIGN(65,-83)的值为-65,它将第二项的符号(负号)传送给第一项。 SIGN(-65,83)的值为65,因为第二个自变量为正数。也就是说,函数值的符号与第二个自变量的符号相同。 利用这个函数可以检查A和B是否同符号。如果SIGN(A,B) = A(即 SIGN(A,B)与A同符号),则说明A与B同符号,而如果SIGN(A,B)与A不相等 (它们符号不同),则说明A与B不同符号。当B的值

8、为0时,按正数处理。例如:SIGN(1,0) ,SIGN(-1,0)的值都为1。25 FORTRAN表达式和它的求值规则表达式是指一个或多个运算的组合。FORTRAN表达式是由运算符和圆括号将各类操作数(如常数、变量、函数等)按照一定规则连接起来的有意义的式子。 FORTRAN有四种表达式: 算术表达式关系表达式逻辑表达式字符表达式它们各有自己的运算符和运算规则。 251 算术表达式(1) 算术运算符FORTRAN规定可以使用五种算术运算符。它们是:+ 表示“加” (或正号) 表示“减” (或负号) * 表示“乘”/ 表示“除” * 表示“乘方”注意: (3)两个运算符不能紧邻,如A*B是不合

9、法的,应该写为 A *(B)。只有两个“*”可以连写代表乘方,如 A * * 2 表示 A2。(2)除号不能用“ ”。(1)乘号用“*”表示,不能写成“ ”,也不能用“ ”代替乘号。(2) 算术运算符优先级算术运算符的优先级按以下顺序排列:* 最高*,/ 次之+, 最低同一优先级的两个运算,按“先左后右”原则。例如:3 + 5 6.0 * 8.0 / 4 * 2 (3) 算术表达式的含义和表示方法FORTRAN算术表达式是用算术运算符和圆括号,将算术量按照一定的规则连接起来的式子。算术表达式中各运算元素都是算术量(即数值),使用的运算符只能是算术运算符和圆括号,表达式的值也是一个算术量。例如,

10、下面就是一个FORTRAN算术表达式:(AB)/ C * 2 + SIN( X + Y )注意:1 由于用“/”号作为除号,因此在写除法时应加上必要的括号,例如: 。 如果写成就相当于 ,应该写成 ,分子、分母都必须加括号。2 乘号不能省略,例如,a sin x,必须写成A*SIN(X),而不能写成ASIN(X)。3 FORTRAN中无大、中、小括号之分,一律用小括号。例如, 相应的FORTRAN表达式应该为: (a+b)*2+(ab)*2)* 3+c)+6 当括号层次比较多时往往容易弄错或漏写一侧括号,要十分小心。 4如果连续使用乘方符号,如4*3*2,FORTRAN77规定,对多次乘方按“

11、先右后左”原则处理,即先计算3*2得9,再进行49的运算。为避免出错, 建议自己加上括号,如4 *(3* 2),如果想计算(43)2,则应写成(4*3)*2。5 对单边(单目)运算符(例如,3,+4,A中的符号称为单边运算符)相当于在它前面有一个运算量“0”,例如,A相当于0A;A* 2相当于0A*2即(A* 2),而不是相当于(A)* 2。6 FORTRAN算术表达式的求值运算的优先次序为: 括号 函数 * *,/ +, 高 低例如 SQRT(3.5 * 2)* 2的求值过程为:1 先算括号内的3.5*2;2 再进行平方根的计算;3 最后进行乘方运算。 表 2(4) 算术表达式运算中的类型问

12、题FORTRAN 77允许不同类型的算术量(包括整型、实型、双精度、复型)之间的算术运算,但不允许在算术量和非算术量(如逻辑型、字符型)之间进行算术运算。例如,2*35是允许的。 FORTRAN 77作如下规定:1 同类型的算术量之间运算的结果仍保持原类型。例如,2* 3的值为整数6,25*20的值为实数50。2*3的值为整数8,而20* 30的值为实数80。特别应当注意的是:FORTRAN规定两个整数相除的商也是整数。 例如, 5/2的值是2,而不是25。 5/2的值为2。尤其需要注意的是1/2的值为0。 因此,如果要计算05sinx,不能写成1/2*SIN(X),因为它的值是零,应写成0.

13、5*SIN(X)或10/20*SIN(X) 。 40.5不能写成4*(1/2),而应写成4*05或4*(10/20)。 4*(1)得零。 同理,16*(4)的值也为零。 如果表达式中包括整数的除法,应注意运算的顺序,如数学上的 值为64,写成FORTRAN表达式4*8/5得到结果为6,而若写成4/5*8得到结果零。如果改用实数相除就不会有这种情况:40*80/50 和 40/50* 80 的值都是64。2 如果参加运算的两个算术量为不同类型,则编译系统会自动将它们转换成同一类型然后进行运算。转换的规律是:将低级类型转换成高级类型。类型的等级次序为: (高)复型 双精度型 实型 整型(低)我们以

14、实型和整型的运算量之间的运算为例。 类型的级别实型高于整型。 如果有5* 65,则系统先将5转换为50,然后乘以65得325,为实型数。5*60的值为300。整型和实型的算术量四则运算的规律见表3。表 3乘方运算的规律见表4。表 4类型的转换是从左向右进行的,在遇到不同类型的算术量时才进行转换。例如: 1/4*20.0。并不是一开始就同时将1和4转换成实数10和40然后进行实数运算(得50),而是先进行整数运算1/4得0,然后再乘以20.0,使结果转化为实型,最后结果为0.00000。(5) 算术表达式运算的误差问题整型量的运算是准确的,只要在整数范围内,没有任何误差。而实型量的运算会出现一些

15、误差,例如:11111.1*1111.11本应得12345654.321,但由于受有效位数的限制,只能得到1.234565*107(假定所用的FORTRAN允许有效位数为7位)。 又如:0.001+1246825.0-1246820.0 本应得到5.001。 但由于有效位数的限制,在进行前两项相加时不可能得到1246825.001(因为它需要10个有效位数),而只能得到1246825.0,再进行减法得到5.0,显然有误差。这个误差也来源于有效位数,也就是说由于实数在内部的存储方式引起的。 如果把表达式改写一下,将运算次序换一下,就不会出现这个问题:1246825.0-1246820.0+0.001 结果为5.001。 这是因为每次运算所得结果的数字位数都不超过有效位数。因此,在写表达式时应尽量使每一次运算结果都在有效位数范围之内,否则就会出现误差。在运算中尽量不要使两个相差很大的数值直接相加或相减。 因此,有两个理论上本应相等的实数A和B,如果判断“AB”,可能得到的结果不等于0,即A不等于B。所以在判断两个实数相等或不相等时,要慎重

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号