Fortan基礎編程(6)——數組詳解

FORTRAN基礎編程系列推出后,廣受大家喜愛,原本是打算分享一些自己在學習Abaqus子程序時的語法疑難,分享了之后發現大家對此共鳴很多,為此木木盡可能多分享一些閱讀子程序時需要用到的FORTRAN語法。語法這個問題很基礎同樣也很重要,很多人接觸子程序,就直接閱讀程序核心內容,對于一些程序語言的細節,卻很少關注,往往導致出現一些簡單的“Erro”,程序框架沒問題,卻找不到錯誤的解決方法。

本次推文主要分享FORTRAN中數組的概念,主要內容:數組的三種定義方法;動態數組Allocatable的應用;二維數組的應用,參考了《Fortran語言程序設計——Fortran95》,練習文件可在后臺回復:數組Fortran,即可自動獲取。代碼運行環境均在 Simply Fortran中編譯運行,具體操作方法,可點擊查看Simply 保姆級教程。

更多詳情請點擊:Fortan基礎編程(6)——數組詳解


數組的定義

程序中要使用任何一個數組都必須給予定義,即說明該數組的名字、類型、維數及大小,以便編譯系統給數組分配相應的存儲單元。

(1) 數組名:數組和變量一樣,也用符號名來命名。

(2) 數組的類型:數組的類型由數組元素的類型來決定。

(3) 數組的維數:數組的維數即為了區分數組元素所需順序號的個數。

(4) 數組的大小:數組的大小即數組中包含數組元素的個數,由數組每維下標的上界和下界來決定。

數組的說明方法

Fortran 95中,數組說明方法有三種:

  • ? dimension語句

  • ? 類型說明語句

  • ? 同時使用dimension語句和類型說明語句

用dimension語句說明數組

dimension  a(1:10), m(-10:10), b(4,10)
  • dimension語句是非執行語句,必須放在程序單位的可執行語句之前。

  • ? 用dimension語句只說明了數組的名字、維數、大小等特性,但不能說明數組的類型,這時,數組類型的說明方法與變量名相同,即:

    • ? 如無特別指明,數組的類型服從i-n規則(以i-n開頭命名的為整數類型);

    • ? 用類型說明語句指明數組的類型。dimension ju(20), name(-10:10,1:2)
      real ju
      character name

    •   說明了一維實型數組ju,共有 20 個元素。還有二維字符型數組name,共有 42 個元素,每個元素的定義長度為 1。

    • ? 用implicit語句指明數組的類型

implicit integer (a-c),real(i,j)
dimension b(3:15),ix(10)

說明了整型數組b和實型數組ix。

用類型說明語句說明數組

類型說明語句可以直接說明數組的全部特性。其一般格式為:

character*6  ch(-10:10,5:9)*8
real kk(8)
real(8)  solution(30)
double precision re(4,5)

分別說明了字符型數組ch,數組元素的長度為 8。還有實型數組kk和雙精度一維數組solution以及雙精度二維數組re

同時使用dimension語句和類型說明語句說明數組

real(8), dimension(0:10) :: a, b, c
integer,dimension(4,5) :: d, e

說明了三個雙精度型數組a,b,c,它們各含有 11 個元素。說明了兩個整型數組d,e,它們各含有 4×5 共 20 個元素。

動態數組Allocatable的應用

在程序的運行過程中,根據需要,動態地定義一個適合的數組來使用,可以節省存儲空間,提高程序的執行效率。

動態數組定以后,在程序中,通過allocate語句分配相應存儲空間,確定數組的大小。使用完成后,要及時地通過deallocate語句釋放存儲空間。

【例】輸入某班級學生的一門成績,計算出平均分。

分析:這里學生人數由鍵盤輸入,根據人數確定數組的大小,保存成績。因此采用動態數組。

integer n,aver
integer,allocatable:: a(:)
print *,"輸入學生人數:"
read *,n
allocate(a(n))
print *,"輸入學生成績:"
do i=1,n
  read*,a(i)
enddo
aver=0
do i=1,n
  aver=aver+a(i)
enddo
aver=aver/n
print *,"aver=",aver
deallocate(a)
end

二維數組的應用

【例】設有一個   的矩陣:

 求:

  • ? 矩陣所有元素之和及平均值;

  • ? 保留所有大于平均值的元素,其余元素清零。

integer,dimension(4,5):: a
data  a/2,5,12,7,6,-1,0,6,4,3,4,-9,9,8,10,5,-13,7,2,3/
sum=0
do i=1,4
    do j=1,5
        sum=sum+a(i,j)
    end do
end do
average=sum/(4*5)
print *,'sum',sum
print *,'average',average
do i=1,4
    do j=1,5
        if (a(i,j)<=average) a(i,j)=0
    end do
end do
do i=1,4
  write(*,*) (a(i,j),j=1,5)
end do
end

以上就是本次所要分享的全部內容了,希望對于正在接觸 Frotran 的你有所幫助,我們下期再見~

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1