程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> C語言和Fortran語言的差異

C語言和Fortran語言的差異

編輯:C語言基礎知識

本文詳細介紹語言和Fortran語言的差異

1. C++語言和Fortran語言的發展背景

在程序設計語言的發展過程中,FORTRAN 語言被認為是科學計算的專用語言。後來推出的FORTRAN90 和FORTRAN 95 版本也不例外,它們雖然可以完全實現C++語言同樣的功能,然而其軟件開發環境和軟件的集成性等方面都遠不如C++ 語言。近年來,隨著計算機軟硬件技術的發展,數據結構、數據庫管理技術、可視化與計算機圖形學、用戶接口系統集成以及人工智能等領域的成果被逐漸應用到結構分析軟件中,結構分析軟件的設計並不僅僅局限於單一的科學計算需要涉及眾多的軟件開發領域。C++ 語言可以提供這類軟件開發所需的功能,而用FORTRAN 90 卻很難實現,另一方面從軟件的編程環境來看,目前FORTRAN 90 的編譯器極少,而C++ 語言的編譯系統相當普及,可以運行在各種機型上,便於實現跨平台的軟件系統集成。

2. C語言和Fortran語言的差異

由於兩者產生的背景不同,它們是存在差異的,在比較了幾組源代碼之後,主要有以下體會:

C 最大的優點在於靈活,不但可以藉由 struct 來定義新的數據結構 ,同時 的pointer 更可以讓我們自由而且有效率地處理大數據。而在 UNIX 系統 中,由於整個操作系統絕大部分就是 C 寫出來的,故我們也有方便的 C 函數庫, 直接使用系統資源與享受系統帶來的服務,以做到一些低階、快速的動作。而FORTRAN從一開始就用於科學計算,它與C的差異主要表現為:

* 復數運算的速度

* 程序參數與字串

* 內存的動態管理

* 多維陣列的處理

* 函數調用與參數傳遞

2.1. 復數運算的速度

在進行復數運算的時候,C++ 可以定義復數的 class,還可以重新定義所有的四則運算式,復雜的算式也可以做到由一個表達式來解決。但它的重新定義復數四則運算是用函數來做的,使用函數來調用其速度很慢,除非采用 inline function 的方式,但會遇到以下的問題:要先將這個算式拆解,分別算過後再重組結果,故表面上程序代碼很簡潔,但實際上是 compiler做了很多工作,還是要付出相當的計算時間代價的。

至於 Fortran,最大的優點在於復數 (complex number) 的運算,復數是 Fortran 的基本數據類型之一,這正是 C 所缺乏的 (C 基本上只有實型與整型類型而已)。 雖然C 也可以由 struct 的定義,達到復數四則運算的目的,但 卻很可能犧牲了程序效能,或者是程序寫起來相當繁雜降低可讀性。因此,在大量而且要求高速的復數運算場合, Fortran 實際上比 C 還要適合。

然而既然復數已是 Fortran 基本數據類型之一,則 Fortran compiler在設計上可以做到對復數特別的 optimization,例如如果遇到較短的復數運算式,它可以用“心算” 直接得出 real_part 與 imag_part 的 expression,像這樣:

real(a) =……;imag(a) = …….

如此只需兩步就得到結果。直到遇到太長太復雜的算式,才去做拆解的動作。

這樣使用 C 來做復數運算可能需要繞圈圈,而且繞出來的圈圈可能還不小。不過如果程序中需要復合的數據結構,如一個自定義的數據結構中既有浮點數、整數、還有字符串時, Fortran 只有舉白旗投降了。當然, Fortran 如果要做還是可以做,只是不太方便,而且可能也需要繞圈圈。但如果使用 Fortran 90 則不成問題了,因為 Fortran 90 也有類似 C 的 struct 結構以定義復合的數據類型。

2.2. 程序參數與字串

C 程序可以有參數串列, Fortran 則沒有。例如,當程序執 行時,必須輸入 a, b, c

三個參數,在 C 可以這樣寫:

int main(int argc, char **argv)
{
int a, b, c;
a = atoi(argv[1]);
b = atoi(argv[2]);
c = atoi(argv[3]);
}

而程序執行時,參數就是這樣傳入: a.out 12 15 18

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved