1、數值賦初值操作:
例子:
integer a(5)
data a /1,2,3,4,5/ !fortran77 通常用法
或者integer a(5)
integer i
data (a(i),i=2,4) /2,3,4/ !用隱含式的迴圈將 a(2)=2,a(3)=3,a(4)=4賦值。
下面用fortran95的用法賦值,例子如下:
integer::a(5)=(/1,2,3,4,5/)
直接將陣列a的5個元素賦值,注意:省略data直接把初始值寫在宣告語句後面時候,每個元素都必須賦值,因此簡單的做法是用隱含式do迴圈完成,另外就是乾脆把陣列的全部元素都用乙個相同值來賦值。例如下面:
integer::a(5)=1 !a(1)=a(2)=a(3)=a(4)=(5)=5
或者integer::i
integer::a(5)=(/(i,i=1,5)/) !a(1)=1,a(2)=2,a(3)=3,a(4)=4,a(5)=5
2、對部分陣列的操作: fortran90為我們提供了一次只挑出部分陣列來操作的功能,這一功能的實現類似於隱含式的迴圈操作,下面用如下幾個例子來說明:
a(3:5)=5 !a(3)=a(4)=a(5)=5,其他元素值不變
a(3:)=5 !把a(3)以後的元素的值都賦值成5,a(1)和a(2)不變,
a(1:3)=b(4:6) !a(1)=b(4),a(2)=b(5),a(3)=b(6)
a(1:10)=a(10:1:-1) !將a(1~10)的內容給翻轉過來儲存a中
a(:,:)=b(:,:,1) !要保證三維陣列b中的二維陣列全部元素對應的賦值給二維陣列a中
要注意的是多個隱含式迴圈,較低維的迴圈對應是內層迴圈,而且必須保證賦值符號兩側的陣列元素是同樣數目,如下面的例子:
integer::a(2,2),b(2,2)
b=a(2:1:-1,2:1,:-1) !相當於 b(1,1)=a(2,2);b(2,1)=a(1,2);b(1,2)=a(2,1);
!b(2,2)=a(1,1)
3、應用where對部分陣列操作
where是fortran95新加入的功能,類似於if的功能,使用它可以使得程式精簡化,但是他的使用同樣要保證兩個陣列質檢的維數和大小是相同的。例如a和b都是一維陣列而且都是含有5個元素的,那麼下面:
where(a<3)
b=1elsewhere
b=2endwhere !用a陣列對應位置內容的大小來給b陣列賦值
4、forall 對部分陣列操作
forall是fortran95新加入的功能,但是這個功能更為強大,例如:
integer::a(10,5)
integer::i,j
......
......
forall(i=1:5,j=1:5,a(i,j)<10) !只處理陣列小標在1~5範圍而且元素內容小於10的元素
a(i,j)=1
end forall
同樣的,與if、where相似的地方是,只有一行**時候,可以省略end forall。
另外在forall中可以使用where。
5、陣列在記憶體中的儲存規則
fortran程式的陣列元素在記憶體中按列儲存,用二維陣列a(3,4)來說明它在記憶體中的儲存:
a(1,1)->a(2,1)->a(3,1) 先存第一列的各行元素
--->>a(1,2)->a(2,2)->a(3,2) 再存第二列
--->>a(1,3)->a(2,3)->a(3,3)
--->>a(1,4)->a(2,4)->a(3,4) 最後儲存第四列
值得注意的是現在的計算機硬體結構中,會應用快取記憶體cache,當cpu使用資料時會先檢查快取記憶體中有沒有這個資料,當沒有時才會到儲存器中拿資料,在拿資料的時候,不僅會拿所需的資料同時也會拿臨近的資料,並把這列臨近的資料儲存在快取記憶體中,如有cpu之後馬上用到這些臨近的資料會直接向快取記憶體讀取,這使得線性計算機的計算速度變得快,因此我們應該利用這個規則來安排資料的存放。
6、可變大小的陣列
fortran90比fortran77功能強大的一點在於可以支援可變大小的陣列,寫法如下:
program ex0716
implicit none
integer::students
integer,allocatable::a(:) !宣告乙個可變大小的陣列
integer::i
write(*,*) "how many students"
read(*,*)students
allocate(a(students)) !配置記憶體空間
......
end
另外釋放空間可用deallocate。
當我們要檢查乙個變數是否已經被配置過記憶體空間時,可以用allocated函式,該函式返回乙個邏輯值
if(.not.allocated(a)) then
allocate(a(5))
end if
陣列及陣列操作
c語言是在組合語言的基礎上就行的抽象,所以在理解c語言程式時,務必要以記憶體為基礎進行理解。關於陣列,只是同種型別資料的記憶體使用方式,除了在與指標連用時的語法比較繁瑣,其他都比較簡單。1 定義 初始化 使用 結合指標使用時,就要把它當做位址了 2 使用的情況 當儲存多個相同型別的資料時,可以使用陣...
ruby 陣列操作
陣列的建立 arr array.new num 建立num個元素的陣列,所有陣列元素為nil arr array.new num,elem 建立num個元素的陣列,所有陣列元素為elem arr array m.n 建立m.n元素為m到n的陣列 包括n m.n不包括n arr array elem1...
Jquery 陣列操作
在jquery中處理json陣列的情況中遍歷用到的比較多,但是用新增移除這些好像不是太多。今天試過json i remove json.remove i 之後都不行,看網頁的dom物件中好像json資料是以陣列的形式出現的,查閱了下相關js中陣列的操作一試果然很爽。記錄下來。1 陣列的建立 var ...