天天看點

Fortran77表達式和指派(Expressions and assignment)條件和循環語句前言一、表達式二、指派三、類型轉換四、邏輯表達式運算符五、邏輯變量和指派六、if 語句七、循環語句

文章目錄

  • 前言
  • 一、表達式
    • 1.常量表達式
    • 2.非常量表達式
  • 二、指派
  • 三、類型轉換
  • 四、邏輯表達式運算符
  • 五、邏輯變量和指派
  • 六、if 語句
    • 1、形式1
    • 2、形式2
    • 3、Nested if statements.嵌套IF語句
  • 七、循環語句
    • 1.do-loop
    • 2.while-loop
    • 3.if and goto loop
    • 4.until-loops

前言

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