文章目录
前言
Fortran77的表达式和赋值
一、表达式
1.常量表达式
常量是最简单的表达式。有6种常量,对应于6种数据类型。
常量 | 数据类型 |
---|---|
Integer(整数) | 1, 0, -100, 32767, +15( ± 2 ∗ 1 0 9 \pm2*10^9 ±2∗109) |
Real (实数32位) | 1.0,-0.25,2.0E6, 3.33E-1 (E6就是乘以 1 0 6 10^6 106) |
Double precision (双精度浮点数64位) | 2.0D-1, 1D99,(D99, 就是 ∗ 1 0 99 *10^{99} ∗1099) |
Complex (复数) | (2, -3), (1., 9.9E-1) (括号里只能是Integer或者是Real) (实部, 虚部) |
Logical (逻辑常量) | .TRUE. .FALSE. (只有两个值,并且要用两个…括起来) |
Character (符号常量) | ‘ABC’, ‘Anything goes!’, ‘It’‘s a nice day’ (当你需要输入’号时候,你需要用‘’两个) |
2.非常量表达式
最简单的非常量表达式的形式为:
operand operator operand
x + y
** 是乘方 2**3, 就是2的三次方
另外需要注意的是除操作。/, 如果是两个整数相除,那就是整除,去掉小数。如:3/2 = 1. 但是如果是3./2=1.5(因为3.是小数)
二、赋值
赋值由以下类型:
variable_name = expression
area = pi * r**2
三、类型转换
当不同类型的数据类型出现在一个表达式中时,类型转换就会发生,隐式的或者显式的。
例如:
real x
x=x+1
这个程序将会将x增加1,会把1变成小数。这就是隐式的转换。
但是还是推荐在关键的计算部分使用强制转换。Fortran提供以下强制转换函数。
int
real
dble
ichar
char
ichar是将一个字符转换成整数,而char就是将一个整数转换成字符
四、逻辑表达式运算符
.LT. // <
.LE. // <=
.GT. // >
.GE. // >=
.EQ. // =
.NE. // NOT Equal
五、逻辑变量和赋值
常用于IF statement
.AND.
.OR.
.NOT.
Logical a, b
a=.TRUE.
b = a .AND 3 .LT. 5/2
六、if 语句
条件语句在任何编程语言中都占有重要的位置。在Fortran中最常见的条件语句就是IF语句。IF语句有好几种形式。
1、形式1
if后的表达语句就一个。这个需要写在一行上,就是7-72列的位置内(每一个空格就是一列)
if (logical expression) executable statement
if (X .LT. 0) X=-X
2、形式2
如果if后边需要执行很多条语句就得用到下面的if表达语句。
if (logical expression) then
executable statement
endif
if (logical expression) then
statements
elseif (logical expression) then
statements
:
:
else
statements
endif
3、Nested if statements.嵌套IF语句
if语句可以嵌套好几个水平,为了保证可读性,需要使用恰当的缩进。
if (x .GT. 0) then
if (x .GE. y) then
write(*,*) 'x is positive and x >= y'
else
write(*,*) 'x is positive and x <= y'
IF语句虽然可以嵌套,但是你应该避免使用很多嵌套。
七、循环语句
Fortran官方循环语句就只有一种do-loop, 就是类似于for-loop,另外还有一种看起来非常low的一种那就是if 和 go to 语句。
1.do-loop
do-loop能够用于简单的计数。
c2345678
integer i, n, sum
sum = 0
do 10 i = 1, n
sum = sum +i
write(*,*) 'i = ', i
write(*,*) 'sum = ', sum
10 continue
这个10就是statement label语句标签,一般是10的整数倍.
通用do-loop模板是:
c2345678
do label var = expr1(start), expr2(end), expr3(step)
statements
label continue
do-loop的var一般都是以1递增的。这个循环变量var尽量不要在循环里被其他语句改变,否则会产生很大的误解。很多Fortran编译器都允许使用enddo语句,这样的好处是,do 和enddo是一个封闭的循环。
与其他循环不一样,Fortran的loop循环只evaluates, start, end, step一次。例如下面的循环不是一个一个无限循环。
c2345678
integer i,j
read (*,*) j
do 20 i = 1, j
j = j + 1
20 continue
write (*,*) j
2.while-loop
c2345678
while (ligical exp) do
statements
enddo
c2345678
do while (ligical expr)
statements
enddo
仍然上述程序仍需变成if and goto语句
label if (logical expr) then
statements
goto label
endif
3.if and goto loop
c2345678
label if (logical expr) then
statements
goto label
endif
c2345678
Integer n
n=1
10 if (n .le. 100) then
write (*,*) n
n = n*2
goto 10
endif
4.until-loops
c2345678
do
statements
until (logical expr)
上述程序就是if 和 goto的结合
c2345678
label continue
statements
if (logical expr) goto label