Fortran77表达式和赋值(Expressions and assignment)条件和循环语句


前言

Fortran77的表达式和赋值

一、表达式

1.常量表达式

常量是最简单的表达式。有6种常量,对应于6种数据类型。

常量数据类型
Integer(整数)1, 0, -100, 32767, +15( ± 2 ∗ 1 0 9 \pm2*10^9 ±2109
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

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值