济宁蓖乒工艺品有限责任公司

7.7   計(jì)算機(jī)系統(tǒng)

 

一、 《 考試大綱 》 的規(guī)定

計(jì)算機(jī)系統(tǒng)組成;計(jì)算機(jī)的發(fā)展;計(jì)算機(jī)的分類;計(jì)算機(jī)系統(tǒng)特點(diǎn);計(jì)算機(jī)硬件系統(tǒng)組成; cpu ;存儲(chǔ)器;輸入/輸出設(shè)備及控制系統(tǒng);總線;數(shù)模/模數(shù)轉(zhuǎn)換;計(jì)算機(jī)軟件系統(tǒng)組成;系統(tǒng)軟件;操作系統(tǒng);操作系統(tǒng)定義;操作系統(tǒng)特征;操作系統(tǒng)功能;操作系統(tǒng)分類;支撐軟件;應(yīng)用軟件;計(jì)算機(jī)程序設(shè)計(jì)語言。

二、重點(diǎn)內(nèi)容

1 .計(jì)算機(jī)的發(fā)展

1946 2 月美國賓夕法尼亞大學(xué)誕生世界上第一臺(tái)電子數(shù)字積分計(jì)算機(jī) eniac 以來,計(jì)算機(jī)的發(fā)展隨著其主要部件的演變經(jīng)歷了如下幾代歷程:

l )第一代計(jì)算機(jī)(19461956 年),其主要基本特征是其主要部件為電子管;

2 )第二代計(jì)算機(jī)(19561962 年),其主要特征是其主要部件為晶體管;

3 )第三代計(jì)算機(jī)(19621970 年),其主要特征是其主要部件為中、小規(guī)模集成電路;

4 )第四代計(jì)算機(jī)(1971 年~至今),其主要特征是其主要部件為大規(guī)模、超大規(guī)模集成電路。 1971 年英特爾公司( intel )推出了第一代微處理器芯片 inte14004 。

未來的計(jì)算機(jī)發(fā)展趨勢(shì)是:高性能、人性化、網(wǎng)絡(luò)化、多媒體、多極化和智能化。

 

2 .計(jì)算機(jī)的分類

計(jì)算機(jī)的分類方法有多種,具體為:

1 )按計(jì)算機(jī)所處理的量值不同,可分為模擬計(jì)算機(jī)和數(shù)字計(jì)算機(jī)。

2 )按數(shù)字計(jì)算機(jī)用途,可分為專用計(jì)算機(jī)和通用計(jì)算機(jī)。

3 )按計(jì)算機(jī)內(nèi)部邏輯結(jié)構(gòu),可分為復(fù)雜指令系統(tǒng)計(jì)算機(jī)和精簡指令系統(tǒng)計(jì)算機(jī)。

4 )按計(jì)算機(jī)的字長不同,可分為 8 位機(jī)、 16 位機(jī)、 32 位機(jī)和 64 位機(jī)。

 

3 .計(jì)算機(jī)系統(tǒng)組成及其特點(diǎn)

一個(gè)完整的計(jì)算機(jī)系統(tǒng)是由計(jì)算機(jī)硬件系統(tǒng)和軟件系統(tǒng)組合而成的,如圖 741 所示。計(jì)算機(jī)系統(tǒng)的特點(diǎn)是:具有計(jì)算、判斷、存儲(chǔ)、快速操作能力,精確計(jì)算能力,通用性好,通俗易用和聯(lián)網(wǎng)功能。

4 .計(jì)算機(jī)硬件系統(tǒng)組成。

按照馮·諾依曼結(jié)構(gòu)原理,計(jì)算機(jī)至少應(yīng)由運(yùn)算器、控制器、存儲(chǔ)器、輸人設(shè)備和輸出設(shè)備五部分組成

通常將運(yùn)算器和控制器統(tǒng)稱為中央處理器,簡稱 cpu 。由中央處理器和內(nèi)存儲(chǔ)器構(gòu)成主機(jī)。 cpu 是分析指令和執(zhí)行指令的部件,是計(jì)算機(jī)的核心,它主要由運(yùn)算器、控制器和通用寄存器組成。

存儲(chǔ)器,其主要功能是存放程序和數(shù)據(jù),可分為內(nèi)存儲(chǔ)器(主存)和外存儲(chǔ)器(輔助)。目前內(nèi)存儲(chǔ)器多數(shù)是半導(dǎo)體存儲(chǔ)器,外存儲(chǔ)器通常是磁盤、磁帶、光盤等。

輸入/輸出設(shè)備(i / o) ,如圖 741 所示。輸入/輸出設(shè)備控制系統(tǒng),其主要功能是控制輸入/輸出設(shè)備的工作過程,它包括控制輸入/輸出操作的通道、輸入/輸出處理器、輸入/輸出設(shè)備控制器等。

1 )總線

在計(jì)算機(jī)中,各部件之間傳遞的信息可分為:地址信息、數(shù)據(jù)信息(包括指令)和控制信息三種類型。

總線是計(jì)算機(jī)內(nèi)部傳輸各種信息的通道,是一組公共信息傳輸線路,并能為多個(gè)部件服務(wù),可分時(shí)地發(fā)送和接收各部件的信息。根據(jù)總線傳送信息的類別,總線可分為數(shù)據(jù)總線、地址總線和控制總線。

總線工作方式通常是由發(fā)送信息的部件分時(shí)地將信息發(fā)往總線,再由總線將這些信息同時(shí)發(fā)往各個(gè)接收信息的部件。對(duì)于由哪個(gè)部件接收信息,則由輸入脈沖控制決定??偩€的數(shù)據(jù)通路寬度是指能夠一次并行傳送的數(shù)據(jù)位數(shù)。

2 )數(shù)模/模數(shù)轉(zhuǎn)換設(shè)備

計(jì)算機(jī)硬件系統(tǒng)中的新成員包括輔助存儲(chǔ)器和數(shù)模/模數(shù)轉(zhuǎn)換設(shè)備。其中,數(shù)模/模數(shù)轉(zhuǎn)換設(shè)備,其功能是在實(shí)時(shí)控制系統(tǒng)或過程控制系統(tǒng)中,將模擬量變換為相應(yīng)的數(shù)字量,輸入計(jì)算機(jī);或?qū)⒂?jì)算機(jī)中數(shù)字量變換為相應(yīng)的模擬量,輸出到被測試對(duì)象。

5 .計(jì)算機(jī)軟件系統(tǒng)

根據(jù)組成軟件的功能和特點(diǎn),一般將計(jì)算機(jī)軟件分為兩大類:系統(tǒng)軟件和應(yīng)用軟件。按照應(yīng)用和虛擬機(jī)的觀點(diǎn),計(jì)算機(jī)軟件又可分為三大類:系統(tǒng)軟件、支撐軟件和應(yīng)用軟件。

沒有軟件支持的計(jì)算機(jī)稱之為“裸機(jī)”。

1 )系統(tǒng)軟件一般包括操作系統(tǒng)、語言處理程序、診斷程序等。操作系統(tǒng)是計(jì)算機(jī)硬件和各種用戶程序之間的接口程序,位于各種軟件的最底層。操作系統(tǒng)的特征是:并發(fā)性、共享性、隨機(jī)性。操作系統(tǒng)有兩個(gè)主要功能:資源管理和提供友好的界面。操作系統(tǒng)的分類,具體為:

① 按系統(tǒng)功能分:批處理操作系統(tǒng)、分時(shí)操作系統(tǒng)、實(shí)時(shí)操作系統(tǒng);

② 按計(jì)算機(jī)配置分:單機(jī)配置(又分為大、小、微型和多媒體操作系統(tǒng))、多機(jī)配置(又分為網(wǎng)絡(luò)、分布式操作系統(tǒng)) ;

③ 按用戶數(shù)目分:單用戶操作系統(tǒng)(如 ms dos 、 windows2000 xp )、多用戶操作系統(tǒng)(如 unix ;

④ 按任務(wù)數(shù)量分:單任務(wù)操作系統(tǒng)、多任務(wù)操作系統(tǒng)。

批處理操作系統(tǒng)的特點(diǎn)是:批處理、多道程序操作系統(tǒng)。

分時(shí)操作系統(tǒng)的特點(diǎn)是:同時(shí)性、交互性、獨(dú)占性。

實(shí)時(shí)操作系統(tǒng)的特點(diǎn)是:及時(shí)性,即及時(shí)接收來自現(xiàn)場的數(shù)據(jù),及時(shí)對(duì)其進(jìn)行分析處理,及時(shí)作出相應(yīng)的響應(yīng)。實(shí)時(shí)操作系統(tǒng)通常包括實(shí)時(shí)控制系統(tǒng)和實(shí)時(shí)處理系統(tǒng)。

分布式操作系統(tǒng)的特征是:統(tǒng)一性、共享性、透明性和自治性。它與網(wǎng)絡(luò)操作系統(tǒng)相比,具有更短的響應(yīng)時(shí)間,高容量和高可靠性。兩者的主要區(qū)別在于資源管理、通信和系統(tǒng)結(jié)構(gòu)。網(wǎng)絡(luò)操作系統(tǒng),如 windows nt 、 windows 2000 。對(duì)網(wǎng)絡(luò)操作系統(tǒng)的要求是保證信息傳輸?shù)臏?zhǔn)確性、安全性和保密性。

2 )支撐軟件與應(yīng)用軟件目前,支撐軟件主要包括:各種接口軟件、工具軟件和數(shù)據(jù)庫。其中,常見的數(shù)據(jù)庫系統(tǒng)有: microsoft access 、 foxpro 、 oracle 、 sql server 。應(yīng)用軟件,如文字處理軟件、表格處理軟件、輔助設(shè)計(jì)軟件、實(shí)時(shí)控制軟件(像 fix 、 intouch , lookout )等。

6 .計(jì)算機(jī)程序設(shè)計(jì)語言

計(jì)算機(jī)程序設(shè)計(jì)語言的發(fā)展歷程為: ① 第一代語言 ― 機(jī)器語言; ② 第二代語言 ― 匯編語言; ③ 第三代語言 ― 高級(jí)語言、算法語言; ④ 第四代語言 ― 面向問題的語言,如 sql的數(shù)據(jù)庫查詢語言, ⑤ 第五代語言 ― 智能性語言,如 prolog 語言。

1 )匯編程序與編譯程序

匯編程序是指把由匯編語言編寫的源程序,翻譯成目標(biāo)程序(即計(jì)算機(jī)可執(zhí)行程序)的軟件。

編譯程序是指把由高級(jí)語言編寫的源程序,翻譯成計(jì)算機(jī)可執(zhí)行程序的軟件。

計(jì)算機(jī)能執(zhí)行高級(jí)語言編寫的程序,實(shí)際上是先將用高級(jí)語言編寫的程序(稱為源程序),用解釋或編譯的方法,變?yōu)橛?jì)算機(jī)可執(zhí)行程序(或稱為機(jī)器語言程序),再由計(jì)算機(jī)執(zhí)行這個(gè)機(jī)器語言程序。所以,一個(gè)計(jì)算機(jī)程序的執(zhí)行過程可分為編程、編譯、連接和運(yùn)行四個(gè)過程。

上述解釋或編譯的方法,可用編譯程序和解釋程序,兩者的本質(zhì)區(qū)別是:在翻譯的過程中,編譯程序是在整體理解源程序的基礎(chǔ)上進(jìn)行翻譯的,而解釋程序?qū)υ闯绦虿扇〉氖歉鶕?jù)程序語句執(zhí)行的,順利進(jìn)行逐條語句翻譯的方法。

其次,編譯程序有保存的目標(biāo)程序,而解釋程序無保存的目標(biāo)程序;

 

第三,編譯代碼比解釋代碼運(yùn)行的速度要快。

使用編譯程序的高級(jí)語言有 fortran 、cobol 、 pascal 、 c++、 visualc++等。使用解釋程序的高級(jí)語言有 basic 。

2 )常用的程序設(shè)計(jì)語言 fortran 語言,主要用于科學(xué)計(jì)算,廣泛用于數(shù)學(xué)、科學(xué)和工程計(jì)算。

basic 語言,主要為初學(xué)者設(shè)計(jì)的小型高級(jí)語言; visual basic vb )是 windows 下的可視化編程語言環(huán)境,支持面向?qū)ο蟮某绦蛟O(shè)計(jì)。

c 語言,適用于系統(tǒng)軟件和大量應(yīng)用軟件。 c 語言是結(jié)構(gòu)化、模塊化的語言,是面向過程的。 c ++語言,是增加了面向?qū)ο蟮某绦蛟O(shè)計(jì)的“類” ( class )的機(jī)制,其功能比 c 語言更強(qiáng)大。 pascal 語言,適用于教學(xué),用于幫助學(xué)生學(xué)習(xí)計(jì)算機(jī)編程。 lisp 語言,人工智能程序,主要用于構(gòu)建人工智能程序。

java語言,是完全面向?qū)ο蟮恼Z言,是因特網(wǎng)應(yīng)用的主要開發(fā)語言之一,并且它的運(yùn)行與操作系統(tǒng)平臺(tái)無關(guān)。

第七節(jié) 計(jì)算機(jī)程序設(shè)計(jì)語言
 
一、程序設(shè)計(jì)語言
計(jì)算機(jī)程序設(shè)計(jì)語言又稱算法語言。目前國內(nèi)外比較通用的算法語言有多種,如 basic、fortran、pascal、algol、c等。隨著算法語言本身的發(fā)展和完善,同一 語言中還有不同的標(biāo)準(zhǔn)文本問世。每種語言都有其自身的規(guī)則和特點(diǎn),但也有共性的地方。
在目前通用的算法語言中, fortran語言特別適用于科學(xué)計(jì)算,又是為我國廣大結(jié)構(gòu)工程技術(shù)人員較為普遍掌握的一種語言,因此,本次注冊(cè)結(jié)構(gòu)工程師考試的內(nèi)容選為 fortran 語言。fortran語言于50年代出現(xiàn)于美國。1966年,美國國家標(biāo)準(zhǔn)化協(xié)會(huì)(ansi)公布了標(biāo)準(zhǔn)fortran (ansi x3. 9-1966 ), 1977年對(duì)其進(jìn)行了修訂, 1978年,將其定為國家標(biāo)準(zhǔn),稱為fortran 77(ansi x3. 9-1978) 。以下有關(guān)內(nèi)容,主要參照fortran 77的標(biāo)準(zhǔn)進(jìn)行說明。
 
二、fortran的程序構(gòu)成和基本規(guī)定
(一)程序構(gòu)成
一個(gè)完整的fortran程序由一個(gè)主程序或一個(gè)主程序和若干個(gè)子程序組成。主程序與每個(gè)子程序都是一個(gè)獨(dú)立的程序單位,稱為一個(gè)程序模塊。關(guān)于程序的構(gòu)成,有如下一些基本規(guī)定。
1.程序由若干行組成。
2.在fortran中,程序行分為語句行和注釋行。
 (1)語句行由fortran語句組成,包括執(zhí)行語句和非執(zhí)行語句。執(zhí)行語句使計(jì)算機(jī)在運(yùn)行時(shí)產(chǎn)生某些操作,如賦值語句、輸入輸出語句等。非執(zhí)行語句為計(jì)算機(jī)在編譯或 運(yùn)行時(shí)提供某種信息,本身不產(chǎn)生操作,如說明語句、格式語句等。
(2)注釋行又稱為非語句行,在程序中起注釋作用,便于程序的編寫、修改和維護(hù)。
3. fortran規(guī)定,每個(gè)語句行只能寫一個(gè)語句;但當(dāng)語句長度超過規(guī)定的一行范圍、或者為表達(dá)清晰起見需要將一個(gè)語句分行書寫時(shí),可以采用連續(xù)行。連續(xù)行的第一行稱為始行,以后各行稱為續(xù)行。
4.fortran語句可以有標(biāo)號(hào)。標(biāo)號(hào)作為一個(gè)語句被其他語句引用的標(biāo)志。在同一個(gè)程序單位中,不能出現(xiàn)相同的語句標(biāo)號(hào)。
5.程序單位的最后一行語句,必須是end 語句。如果一個(gè)fortran語句行與注釋行的集合,最末沒有end,可稱其為一個(gè)語句塊或程序段,但不能作為一個(gè)程序單位。
 
(二)書寫規(guī)則
1.fortran77的字符集由26個(gè)英文字母、10個(gè)數(shù)字和其他13個(gè)專用字符組成。
2.一個(gè)程序行有80列,每列寫一個(gè)字符。
3.程序行的第1列如寫上c或*,表示該行為注釋行。注釋內(nèi)容可寫在該行中除第1列外的任何位置。
4.在語句行中,程序行的第1列至第5列為語句標(biāo)號(hào)區(qū),標(biāo)號(hào)區(qū)內(nèi)是最多為5位的無符號(hào)整數(shù);程序行的第6列為續(xù)行區(qū),若某行為續(xù)行,則標(biāo)號(hào)區(qū)必須空白,且第6列為非0的任一fortran77字符(不能為空格) ;第7列至第72列為語句區(qū)。
例如,在邊長為b的正方形中挖一個(gè)半徑為r的圓,計(jì)算剩余的面積;若b<2r, 則給出相關(guān)信息。該問題的fortran程序可編寫如下。
c computation of area.
read*, b, r
if (b. lt.2*r) then
write (*, 10)
10 format ('error message: b less than 2*r
else
write (*,(”area =”, f10.2))
$ b*b-3.14159*r*r
endif
end
本例中,第1行為注釋行,第5行為帶標(biāo)號(hào)的語句,第7~8行為連續(xù)行,符號(hào)$為續(xù)行標(biāo)志。
 
(三)常量與變量
1.常量指程序中其值固定不變的一些量,包括以下6種類型。
(1)整形常量,也稱整數(shù)。一個(gè)整數(shù)可采用正、負(fù)號(hào)和數(shù)字字符表示,正號(hào)可以省略.。
(2)實(shí)型常量,也稱實(shí)數(shù)??梢杂眯?shù)形式或指數(shù)形式表示。用指數(shù)形式表示的實(shí)數(shù)如11.3e5,+11. 3e+5, 1. e-12,-.23e12等。
(3)雙精度實(shí)型常量,或稱雙精度實(shí)數(shù)。雙精度實(shí)數(shù)也是實(shí)數(shù)。但在一般的微型計(jì)算 機(jī)中,實(shí)數(shù)的有效位數(shù)為7位,雙精度實(shí)數(shù)的有效位數(shù)可以達(dá)到15~17位。雙精度實(shí)數(shù)的表示方法,除在指數(shù)形式的表達(dá)中用字符d代替e以外,其余和實(shí)數(shù)相同。
(4)復(fù)型常量,簡稱復(fù)數(shù)。在fortran中,用一對(duì)圓括弧括起來的兩個(gè)實(shí)數(shù)表示。如(12 . 0 ,-6.e2 )表示復(fù)數(shù)12.0—600.0i。
(5)邏輯型常量。fortran中的邏輯型常量有兩個(gè)值: . true.與. false.。
(6)字符型常量,也稱為字符串。計(jì)算機(jī)系統(tǒng)使用的若干個(gè)字符,用一對(duì)單引號(hào)括起 來后,就作為字符串。
2.變量指在程序運(yùn)行期間可以改變的量。
(1)變量的類型與常量相對(duì)應(yīng),分為整型變量、實(shí)型變量、雙精度實(shí)型變量、復(fù)型變 量、邏輯型變量與字符串變量。
(2)變量名按一定的規(guī)則命名。在fortran中,變量名采用1至6個(gè)字符(數(shù)字 或字母) ,其中第一個(gè)字符必須是字母。fortran77規(guī)定,變量名書寫時(shí)不區(qū)別字母的大寫與小寫,例如abc與abc都指同一個(gè)變量。
(3)變量類型的說明方法。
1 i-n隱含規(guī)則。在程序單位中沒有其他說明時(shí),以字母i, j, k, l, m, n中的 任一個(gè)字母打頭命名的變量都是整型變量。
2)用類型說明語句規(guī)定變量類型。例如:
integer a, count
real icount
double precision xing
complex dup
logical jug
character頭10 filenm
分別表示變量a, count為整型, icount為實(shí)型, xing為雙精度實(shí)型, dup為復(fù) 制, jug為邏輯型, filenm為字符型變量,其長度為10個(gè)字符。
3)用隱含說明語句implicit語句,可以將程序單位中以某一字母開頭的所有變量 指定為所需類型。例如:
implicit integer (a, c), real (i-k)
指定了以a與c字母開頭的所有變量都是整型變量,以字母i至k開頭的所有變量為實(shí) 型變量。
類型說明語句和隱含說明語句只在本程序單位中有效;它們必須放在程序單位所有可執(zhí)行語句的前面,而implicit語句又必須在所有的類型說明語句的前面。確定變量類型的三種方法中,類型說明語句的優(yōu)先級(jí)最高, i-n規(guī)則的優(yōu)先級(jí)最低。
 
 (四)數(shù)組
1.數(shù)組的定義
有些互相關(guān)聯(lián)的數(shù)據(jù),作為單個(gè)變量處理并不方便。程序設(shè)計(jì)語言通常把這種相互關(guān)聯(lián)的數(shù)據(jù)按一定的順序關(guān)系組成一個(gè)集合,該集合稱為數(shù)組;組成數(shù)組的基本單元稱為數(shù)組元素,每一個(gè)數(shù)組元素對(duì)應(yīng)一個(gè)數(shù)據(jù)。
在fortran中,使用數(shù)組前必須對(duì)數(shù)組進(jìn)行定義,包括對(duì)數(shù)組命名;確定數(shù)組的類型;確定數(shù)組的維數(shù)及大小;指出數(shù)組各維下標(biāo)的下限與上限。數(shù)組的命名規(guī)則與變量的命名規(guī)則相同。
確定數(shù)組類型、維數(shù)及其大小的方法有以下兩種。
(1)用類型說明語句定義數(shù)組。例如:
integer x (-2:30), xyz (1 :20, 0: 15)
定義了兩個(gè)整型數(shù)組。其中x稱為一維數(shù)組,下標(biāo)的下限與上限分別為-2與30,即這個(gè)一維數(shù)組共有30-(-2) + 1 = 33個(gè)元素,它們分別為: x (- 2), x (-1), x (0), x (1),…, x (30); xyz稱為二維數(shù)組,第一個(gè)下標(biāo)的下限與上限分別為1與20,第 二個(gè)下標(biāo)的下限與上限分別為0與15,即這個(gè)二維數(shù)組共有(20-1 + 1) x (15-0 + 1)=20×16=320個(gè)整型元素,它們分別為:
xyz (1, 0), xyz (1, 1),…, xyz (1, 15)
xyz ( 20, 0), xyz ( 20, 1),…, xyz (20, 15 )
字符型數(shù)組必須用類型說明語句定義。例如:
character*8 out (10)
數(shù)組out每個(gè)元素的長度都是8,即每個(gè)元素都可以存放8個(gè)字符。
(2)用dimension語句定義數(shù)組。這時(shí),數(shù)組的類型按隱含規(guī)則確定,或者可以用類型說明語句再次說明其類型。例如:
dimension [ im (-1:10), ia (0:100 , - 2:0), x (1:5 )]
real ia
integer x
其中,im為一維整型數(shù)組, ia為2維實(shí)型數(shù)組,x為一維整型數(shù)組。
當(dāng)數(shù)組的下標(biāo)下限為1時(shí),可以省略說明下標(biāo)下限。例如,下列數(shù)組說明
dimension a (100), b (5,5)
等價(jià)于
dimension a (1:100), b (1:5, 1:5)
目前在許多微機(jī)上使用的fortran 77子集中,數(shù)組的下標(biāo)下限只允許為1,并且也只允許用省略下限的數(shù)組說明。
數(shù)組說明語句必須放在所有可執(zhí)行語句與data 語句之前。
2.數(shù)組在內(nèi)存中的存儲(chǔ)形式
在fortran中,數(shù)組的各元素是按順序存儲(chǔ)在計(jì)算機(jī)內(nèi)存單元中的。(特別需要注意的是, 2維和2維以上的多維數(shù)組中,各元素是以列為主存儲(chǔ)的。)
例如,有一個(gè)二維數(shù)組1(1:2,1:3),該數(shù)組可以寫成數(shù)表的形式
i   (1,   1 i   (1,   2 i   (1,   3
i   (2,   1 i   (2,   2 i   (2,   3
各元素的值為i (1, 1)=1, 1(1,2) =2, 1(1,3)=-1, i ( 2 , 1) = 20 , i ( 2 , 2) = 40 , i ( 2, 3)=50,在內(nèi)存中存放的順序是1(1, 1), 1(2, 1), 1(1,2), i (2, 2), i (1, 3) i (2, 3),如果按內(nèi)存存放順序?qū)⑦@個(gè)數(shù)組的元素打印出來,數(shù)據(jù)的順序?qū)⑹?
1,20,2,40,-1,50
其他多維數(shù)組中的元素也是按同樣規(guī)則存儲(chǔ)的,即先存儲(chǔ)第1列,再存儲(chǔ)第2列,以 此類推,最后存儲(chǔ)數(shù)組中的最后一列。
 
(五)各種運(yùn)算符及其運(yùn)算的優(yōu)先級(jí)
1.算術(shù)運(yùn)算符。fortran有五個(gè)算術(shù)運(yùn)算符,它們是:
加法運(yùn)算符+
減法運(yùn)算符-
乘法運(yùn)算符*
除法運(yùn)算符/
乘幕運(yùn)算符**
這五個(gè)算術(shù)運(yùn)算符的運(yùn)算順序是:
(1)乘幕運(yùn)算符**優(yōu)先級(jí)最高;
(2)乘法與除法運(yùn)算符*,/優(yōu)先級(jí)次之;
(3)加法與減法運(yùn)算符十,一優(yōu)先級(jí)最低。
對(duì)于同一優(yōu)先級(jí)的兩個(gè)運(yùn)算符,按"先左后右"的原則進(jìn)行計(jì)算。
2.關(guān)系運(yùn)算符。fortran有六個(gè)關(guān)系運(yùn)算符,用于比較兩個(gè)表達(dá)式相等或不等。它們是:
大于.gt.
大于或等于.ge.
小于.lt.
小于或等于.le.
等于.eq.
不等于.ne.
經(jīng)過關(guān)系運(yùn)算符比較后,得到一個(gè)邏輯型的值。例如,整型變量i的值為10, j的值為 12,則i.lt.j的結(jié)果為"真" (. true.),而i.eq.j的結(jié)果為"假" (. false.)。
3.邏輯運(yùn)算符。fortran有五個(gè)邏輯運(yùn)算符,它們是:
邏輯與.and.兩個(gè)邏輯型量都為"真"時(shí),其值為"真",否則為"假",
邏輯或.or.兩個(gè)邏輯型量都為"假"時(shí),其值為"假",否則為"真";
邏輯非.not.一個(gè)邏輯型量為"真"時(shí),其值為"假",否則為"真",
邏輯等.eqv.兩個(gè)邏輯型量等值時(shí),其值為"真",否則為"假",
邏輯不等.neqv.兩個(gè)邏輯型量不等值時(shí),其值為"真",否則為"假"。
邏輯運(yùn)算符中,除了邏輯非運(yùn)算符. not.只有一個(gè)運(yùn)算對(duì)象外,其余四個(gè)邏輯運(yùn)算 符均有兩個(gè)運(yùn)算對(duì)象。
邏輯運(yùn)算符的優(yōu)先級(jí)如下:
(1) . not.
(2) . and.
(3) .or.
(4) .eqv.與.neqv.這兩個(gè)運(yùn)算符按"先左后右"的原則進(jìn)行計(jì)算。
三、賦值語旬
賦值語句的一般格式為:
變量名=表達(dá)式
其中,連接變量名和表達(dá)式的符號(hào)" ="稱為賦值號(hào)。在fortran 77中,有三種賦值 語句:算術(shù)賦值語句,邏輯賦值語句和字符賦值語句。
(一)算術(shù)賦值語句
1.算術(shù)賦值語句中賦值號(hào)右邊是算術(shù)表達(dá)式。算術(shù)表達(dá)式可以是單個(gè)變量或數(shù)組元 素,可以是用算術(shù)運(yùn)算符號(hào)連接起來的數(shù)值計(jì)算過程。
(1)算術(shù)表達(dá)式中的各個(gè)數(shù)據(jù)量(常量或變量)的類型一般應(yīng)該一致。如果不一致, fortran程序在運(yùn)行中先將其進(jìn)行轉(zhuǎn)換,再進(jìn)行計(jì)算。例如實(shí)型變量和整型變量進(jìn)行 計(jì)算時(shí),整型變量的數(shù)值先被轉(zhuǎn)換為實(shí)型。
(2)算術(shù)表達(dá)式計(jì)算中,特別應(yīng)注意兩個(gè)整型量之間的除法(稱為整除)。例如,算術(shù)表達(dá)式10.0-2/4*10.0的計(jì)算過程是
10.0 – 0*10.0= 10.0 -0.0= 10.0
如果表達(dá)式寫為10.0-2/4.0*10.0,則計(jì)算過程是
10.0-2.0/4.0*10.0=10.0-0.5*10.0=5.0
因?yàn)?/4是整除,其結(jié)果為0,而進(jìn)行2/4.0的計(jì)算時(shí),整型量2先被轉(zhuǎn)化為實(shí)型。
2.算術(shù)賦值左邊只能是數(shù)值型變量名或數(shù)值型數(shù)組元素。如果賦值號(hào)左邊的變量與 右邊的表達(dá)式類型不一樣時(shí),系統(tǒng)將自動(dòng)把右邊表達(dá)式計(jì)算的結(jié)果轉(zhuǎn)換為與左邊變量的類 型一致后再賦給該變量。
 
(二)邏輯賦值語句
在邏輯賦值語句中,賦值號(hào)左邊為邏輯變量或邏輯型數(shù)組元素,右邊為一個(gè)邏輯表 達(dá)式。
 
(三)字符賦值語句
1.字符賦值語句賦值號(hào)的左邊為字符變量或字符型數(shù)組元素。
2.賦值號(hào)的右邊為字符表達(dá)式,可以是單個(gè)字符串或用字符運(yùn)算符連接起來的字符串。字符運(yùn)算符只有一個(gè),表示為礦,含義為連接該符號(hào)兩邊的字符串.
3.執(zhí)行字符賦值語句時(shí),應(yīng)注意字符串的長度與賦值號(hào)右邊變量或數(shù)組元素的長度的關(guān)系。例如:
character*4 a, b*6, c
a= 'file
b=a//’'name'
c=b (5:6)
定義字符型變量時(shí),根據(jù)類型說明語句的規(guī)定,a長度為4,而變量b因有專門說明,其長度為6。程序運(yùn)行后,變量a的長度與賦值號(hào)右邊字符串長一致,a的值為 ‘file' ;而b的長度小于‘file'和‘name'兩個(gè)字符串長度之和,因此多余的字 符被截去,b的值為‘filena'; c的結(jié)果為‘na__' ,其中最后兩格為空格符,這是 因?yàn)閏的長度為4,大于字符串‘na'的長度,于是在其右邊補(bǔ)上2個(gè)空格符后形成4 個(gè)字符長再賦值給c.在上面的程序例中,出現(xiàn)表達(dá)式b (5:6),稱為"子串",表示取出字符串的一部分,本例中,表示將b的字符串‘filena'中的第5個(gè)字符至第6 個(gè)字符取出。
 
四、循環(huán)語句
(一)do語句
do語句的一般形式為:
do n v = el, e2, e3
n循環(huán)體
其中,n為語句標(biāo)號(hào);v為循環(huán)控制變量,它只能是簡單變量(整型或?qū)嵭停?,不能是表 達(dá)式; el, e2, e3分別為循環(huán)控制變量的初值、終值與增量(步長) ,它們都可以是表達(dá) 式,當(dāng)e3為1時(shí)可以省略不寫。循環(huán)體是若干語句的集合,其中最后一個(gè)語句稱為循環(huán) 終端語句;若循環(huán)體只有一個(gè)語句,則該語句也就是終端語句。終端語句必須有標(biāo)號(hào)n。
在do循環(huán)執(zhí)行時(shí),首先計(jì)算表達(dá)式el, e2, e3的值,并將它們化為與循環(huán)控制變量v的類型一致;然后將初值賦給循環(huán)控制變量v,并計(jì)算需要循環(huán)的次數(shù);最后根據(jù) 循環(huán)次數(shù)重復(fù)執(zhí)行循環(huán)體中的語句,并每次執(zhí)行完循環(huán)體后,將循環(huán)控制變量增值一次, 循環(huán)次數(shù)減少一次。當(dāng)循環(huán)次數(shù)為零時(shí),則結(jié)束循環(huán),轉(zhuǎn)向程序規(guī)定的下一個(gè)語句。
 
(二)繼續(xù)語句continue
continue是一個(gè)可執(zhí)行語句,其功能是使程序的流程繼續(xù)到邏輯上的下一個(gè)語句。
fortran 77規(guī)定,循環(huán)終端語句必須是一個(gè)可執(zhí)行語句,但不能是goto語句、 塊if語句、else語句、else if 語句、endif語句、00語句、stop語句、end語句。由于這些限制,通常用continue 語句作為循環(huán)的終端語句。當(dāng)然, continue 語句也可用在其他場合。
 
(三)循環(huán)嵌套
使用循環(huán)嵌套可以實(shí)現(xiàn)多重循環(huán)。這時(shí)應(yīng)注意各重循環(huán)的層次和循環(huán)變量的關(guān)系。例如,編寫一個(gè)計(jì)算乘法表的程序段,可以寫為:
do 10 1=1, 9
do 8 j=l, 9
ij = i*j
8 continue
10 continue
本例中,外層循環(huán)控制變量i初值為1,終值為9,內(nèi)層循環(huán)控制變量j初值為外層循環(huán) 控制變量i的當(dāng)前值,終值為9。外層的第1次循環(huán),內(nèi)層經(jīng)過9-1+1=9次循環(huán),依次 計(jì)算1×1=1,1×2=2,…,1×9=9,外層的第2次循環(huán),內(nèi)層經(jīng)過9-2+1=8次循 環(huán),依次計(jì)算2×2=4, 2×3=6,…, 2×9 = 18……
 
(四)使用循環(huán)語句應(yīng)注意的若干問題
1.正確選定循環(huán)變量的初值。比如,對(duì)累加問題和連乘問題,變量初值不正確,使 影響最終結(jié)果。
例如計(jì)算m=1!十2! +……十10! ,采用循環(huán)語句編寫程序,涉及到累加和連乘。 其程序可編寫如下:
m=0
n=1
do 20 i= 1, 10
n=n×i
m=m十n
20 continue
print*,m
end
例中, n用于存放連乘結(jié)果,其初值設(shè)定為1,而m用于存放累加結(jié)果,其初值設(shè)定為0。
2. do語句可以和轉(zhuǎn)換語句,條件語句等結(jié)合起來使用,此時(shí)應(yīng)注意從循環(huán)體內(nèi)可以 轉(zhuǎn)向循環(huán)體外,但不允許從循環(huán)體外轉(zhuǎn)向循環(huán)體內(nèi);從內(nèi)層循環(huán)中可以轉(zhuǎn)向外層循環(huán),但不允許從外層循環(huán)轉(zhuǎn)向內(nèi)層循環(huán)中。
3.當(dāng)內(nèi)外層循環(huán)體的終端語句相同,且兩個(gè)終端語句之間沒有其他語句時(shí),可以合 并使用一個(gè)終端語句。例如,前面計(jì)算乘法表的程序段可以寫為:
do 10 i=1. 9
do 10j=i,9
ij = i*j
10 continue
或?qū)憺?/span>
do 10 i=1,9
00 10 j=i, 9
10 ij=i*j
 
五、輸入輸出語旬
(一)表控輸入輸出
表控輸入輸出語句是一種隱含格式的輸入輸出語句,其格式由程序編譯系統(tǒng)提供,在 程序語句中不予表示。
1.表控輸出語句
fortran 77表控輸出語句有兩種方式:
print*,輸出量表
write (*,*)輸出量表
這兩種表控輸出語句的作用是相同的,但一般微機(jī)上的fortran 77子集不提供print 語句,所以通常使用write 語句。
2.表控輸入
fortran 77表控輸入語句有兩種型式:
read*,輸入量表
read (*,*)輸入量表
表控輸入又稱為自由格式輸入。表控輸入語句要求用戶在隱含的輸入設(shè)備(通常是鍵盤)上輸入所需的數(shù)據(jù),在輸入數(shù)據(jù)時(shí),各數(shù)據(jù)之間用逗號(hào)或空格分隔。
 
(二)格式輸入輸出
1.格式輸出數(shù)據(jù)語句write語句和format語句
write語句的一般形式為:
write (u, f)輸出量表
其中, u為部件說明符,用以指出在哪個(gè)設(shè)備上進(jìn)行輸出,通常也稱為通道號(hào),當(dāng)u為記號(hào)*時(shí),表示在顯示器(標(biāo)準(zhǔn)輸出設(shè)備)上進(jìn)行輸出。f為格式說明,它通常是一個(gè)格式語句的標(biāo)號(hào),用以指出輸出數(shù)據(jù)所采用的格式。
格式語句的一般形式為:
標(biāo)號(hào)format (格式說明)
例如:
write (*, 10) a, b, a*b
10 format (lx, f6.2, f7.3, f10.4)
format語句中,第一個(gè)"1x"稱為縱向控制符,它表示前進(jìn)一空格后再輸出后面的數(shù)據(jù),后面的三個(gè)項(xiàng)分別說明了三個(gè)實(shí)型數(shù)據(jù)輸出的,稱為格式編輯符。
fortran 77也允許在write語句中直接指定輸出格式,從而可以省略格式語句 format。例如,上面的輸出語句與格式語句可以合并成一個(gè),即:
write (*, i (1x , f6. 2, f7. 3, f10.4) ') a, b, a*b
2.格式編輯符 fortran常用的格式符有十幾種,詳細(xì)可參照任何一本fortran教材或?qū)S糜趦?cè)。
 
(三)隱循環(huán)的輸入輸出
數(shù)組元素的輸入輸出可以采用循環(huán)方式實(shí)現(xiàn)。 例如:
dimension x (20)
do 10 1= 1, 20
10 read*, x (i)
程序段執(zhí)行時(shí)進(jìn)行20次循環(huán),每次輸入1個(gè)數(shù)據(jù)。這個(gè)輸入程序段可以改寫如下: dimension x (20)
read*, (x (i), i = 1, 20)
其中第2句就是隱循環(huán)的輸入語句。循環(huán)控制變量i的初值為1,終值為20,步長為1而 予以省略。隱循環(huán)語句的作用與do語句是相同的;但使用隱循環(huán)語句時(shí), 20個(gè)數(shù)據(jù)允 許一次性輸入,當(dāng)然,數(shù)據(jù)與數(shù)據(jù)之間要用空格符或逗號(hào)區(qū)別開來。
隱循環(huán)語句也用于輸出語句,也可使用多重循環(huán)。例如
dimension y (l0, 6)
read (*,*) ((y (i, j), j=1, 6), i=1, 10)
write (*, 5) ((y (i, j), j=1, 6), i=1, 10)
5   format (lx, 6f10.2)
運(yùn)行程序段時(shí),首先讀入60個(gè)數(shù)據(jù), y (1, 1), y (1,2),……, y (1, 6), y (2, 1), y (2, 2),……, y (2, 6),……, y (10, 1), y (10, 2),……, y (10, 6), 然后輸出60個(gè)數(shù)據(jù),每行輸出6個(gè)數(shù)據(jù),數(shù)據(jù)的排列順序與輸入時(shí)相同。
 
例:
1.fortran 語句: i=25 + 3.0**2 / 2 執(zhí)行后,整型變量 i 的值是()。
a . 29 . 5;
b . 30
c . 29;
d . 28
【 解 】 由條件, i 為整型變量知 a 項(xiàng)不對(duì),應(yīng)排除。 i=25 + 3 . 0**2 / 2=29 ,所以應(yīng)選 c 項(xiàng)。
 
2.fortran 語句: b=10 . 0 -2/ 4 * 10 . 0 執(zhí)行后,變量 b 的值是()。
a . 10 . 0;
b . 5 . 0;
c . 10;
d . 5
【 解 】 由條件, b=10 . 0 -0×10 . 0=10 . 0 ,所以應(yīng)選 a 。
 
3.不等式 2 . 0≤y≤10.0對(duì)應(yīng)的 y表達(dá)式是(a)
a . 2 . 0 . le . y . and . y . le .10.0;
b . 2 . 0 . ge.y. le .10.0;
c. 2 . 0 . le.y. le .10.0;
d y . ge.2.0 . or.le.10.0
 
4.下列各符號(hào)中, 可作為 rortran77 合法變量名的是(c)
a . 112fa
b . f- 312;
c. abd;
d π
 
5.若有語句: integerb (-1:2 , 3:7 ) ,則數(shù)組 b 中所包含的元素個(gè)數(shù)為(c)。
a . 10
b . 15
c . 20;
d . 24
 
六、控制語句
一般情況下, fortran程序是按語句順序執(zhí)行的,但需要時(shí),可以改變這種順序。 這種改變可以通過各種控制轉(zhuǎn)移語句、邏輯條件語句等來實(shí)現(xiàn)。
(一)轉(zhuǎn)移語句
1.無條件轉(zhuǎn)移語句
無條件轉(zhuǎn)移語句的一般形式為:
goto n
當(dāng)程序流程到達(dá)goto語句時(shí),隨后就轉(zhuǎn)向語句標(biāo)號(hào)為n的語句。標(biāo)號(hào)為n的語句必須是可執(zhí)行語句,但它在程序中的排列位置,可以在引導(dǎo)到它的goto語句之后,也可以 在該goto 語句之前。無條件轉(zhuǎn)移語句常和其他控制語句結(jié)合起來使用。
2.算術(shù)條件轉(zhuǎn)移語句
算術(shù)條件轉(zhuǎn)移語句的一般形式為:
if (e) nl, n2, n3
其中, e必須是算術(shù)表達(dá)式,當(dāng)表達(dá)式運(yùn)算結(jié)果e<0時(shí),程序轉(zhuǎn)向標(biāo)號(hào)為n1的語句;當(dāng) e=0時(shí),轉(zhuǎn)向標(biāo)號(hào)為n2的語句;當(dāng)e>0時(shí),轉(zhuǎn)向標(biāo)號(hào)為n3的語句。
例如,計(jì)算邊長為b的正方形中挖去半徑為r的圓后的面積,若b<2r,則給出相 關(guān)信息。該問題的fortran程序可用別遼條件轉(zhuǎn)移語句編寫如下。
c computation of area.
read*b.r
if (b-2*r) 5, 15, 15
5 write (*, 10)
10 format ('error message: b less than 2*r)
goto 20
15 area=b*b-3.14159*r*r
write *area
20 continue
end
本例中,在算術(shù)條件轉(zhuǎn)移語句的第1個(gè)分支后,使用了goto語句;倘沒有此語句,則 程序按順序仍會(huì)執(zhí)行標(biāo)號(hào)為15的語句,從而得出不正確的結(jié)果。
3.計(jì)算轉(zhuǎn)移語句
計(jì)算轉(zhuǎn)移語句的一般形式為:
goto (n1, n2,……, nm), e
其中, ni (i = 1, 2,……, m)是被轉(zhuǎn)向的語句標(biāo)號(hào),共m個(gè); e是一個(gè)整型算術(shù)表達(dá) 式,其值不得小于1且不得大于m。當(dāng)e的值等于1時(shí),程序轉(zhuǎn)向標(biāo)號(hào)nl的語句,當(dāng)e 的值等于2時(shí)轉(zhuǎn)向標(biāo)號(hào)n2的話句,當(dāng)e的值為m時(shí)轉(zhuǎn)向標(biāo)號(hào)為nm的語句。整型算術(shù)表 達(dá)式e前的逗號(hào)可以省略。計(jì)算轉(zhuǎn)移語句通常也和goto語句結(jié)合起來使用。 例如,有如下一個(gè)程序:
read*,m
goto (20, 30, 40, 50) m
20 n=m goto 60
30 n=m*2 goto 60
40 n=m*3 goto 60
50 n=m*4
60 write*,n
end
程序運(yùn)行時(shí),若輸入1,則轉(zhuǎn)向標(biāo)號(hào)為20的語句,x的值為1 ;若輸入2,則轉(zhuǎn)向標(biāo)號(hào)為 30的語句,x的值為4;輸入3,轉(zhuǎn)向標(biāo)號(hào)為40的語句,x的值為9,輸入4,轉(zhuǎn)向標(biāo)號(hào) 為50的語句,x的值為16
 
(二)邏輯條件語句
1.邏輯if語句
邏輯if 語句用來實(shí)現(xiàn)選擇結(jié)構(gòu)。它的一般形式為:
if (邏輯表達(dá)式)內(nèi)嵌語句
其中內(nèi)嵌語句是單獨(dú)的一個(gè)可執(zhí)行語句。邏輯if語句執(zhí)行時(shí),首先計(jì)算邏輯表達(dá)式的值, 如果邏輯表達(dá)式的值為"真",則執(zhí)行內(nèi)嵌語句,若內(nèi)嵌語句非轉(zhuǎn)移語句,則執(zhí)行該語句 后繼續(xù)按順序往下執(zhí)行,若內(nèi)嵌語句是轉(zhuǎn)移語句,則轉(zhuǎn)向指定的語句;如果邏輯表達(dá)式的值為"假",則不執(zhí)行內(nèi)嵌語句,而直接執(zhí)行該語句后面的語句。
例如,從鍵盤讀入一個(gè)代表百分制成績的數(shù)據(jù),如果數(shù)據(jù)在90-100之間就輸出 ‘excellent' ,在80-89之間輸出‘good' ,在60-79之間輸出‘pass' ,在60以下則輸出 ‘not pass' 。其程序可以如下編寫:
read (*.*) ipoint
if (ipoint. gt .100. or. ipoint. lt. 0) write (*,*) 'data error'
if (ipoint.ge.90.and. ipoint. le.100) write (*.*) 'excellent'
if (ipoint.ge.80.and.ipoint.le89) write ( * . *'good'
if (ipoint.ge.60.and. ipoint. le. 79) write (*.*) 'pass'
if (ipoint.ge.0.and. ipoint. le.59) write (*.*) 'not pass'
end
2.塊if結(jié)構(gòu)的各種形式
(1)塊if和endif形式
if (邏輯表達(dá)式) then
語句塊
endif
當(dāng)邏輯表達(dá)式的值為"真"時(shí),執(zhí)行語句塊,否則按順序執(zhí)行endif后的語句。例如, 如下程序段:
read*, rn, an
if (rn.ge.0.0.and.an.gt.0.0) then
stress=rn/an
write*rn,an,stress
endif
end
當(dāng)rn大于等于零且an大于零時(shí),執(zhí)行賦值語句和輸出語句。
(2)使用else的形式
if (邏輯表達(dá)式) then
語句塊1
else
語句塊2
endif
當(dāng)邏輯表達(dá)式的值為"真"時(shí),執(zhí)行語句塊1 ,當(dāng)邏輯表達(dá)式的值為"假"時(shí),執(zhí)行語句塊2。由此可見,使用else的形式,可以進(jìn)行兩個(gè)分支的選擇。
(3)使用else if的形式
if (邏輯表達(dá)式1) then
語句塊1
else if (邏輯表達(dá)式2) then
語句塊2
else
語句塊3
endif
這種形式,允許在三個(gè)分支中作出選擇。當(dāng)邏輯表達(dá)式1的值為"真"時(shí),執(zhí)行語句 塊1表示的分支;當(dāng)邏輯表達(dá)式1的值為"假"而邏輯表達(dá)式2的值為"真"時(shí),執(zhí)行語 句塊2表示的分支;當(dāng)邏輯表達(dá)式1的值和邏輯表達(dá)式2的值均為"假"時(shí),執(zhí)行語句塊 3表示的分支。
3.塊if結(jié)構(gòu)的嵌套
在一個(gè)塊if結(jié)構(gòu)的語句塊中,可以完整地包含另一個(gè)或多個(gè)塊if結(jié)構(gòu),稱為塊if 的嵌套。塊的嵌套可以多層。
 
七、函數(shù)與子程序(過程)
(一)內(nèi)部函數(shù)
內(nèi)部函數(shù)是預(yù)先編制的一些常用函數(shù)或算法的過程,由fortran語言提供,可以, 直接調(diào)用。內(nèi)部函數(shù)調(diào)用時(shí)的一般形式是:
內(nèi)部函數(shù)名(實(shí)元表)
實(shí)元表中元素的數(shù)據(jù)類型、個(gè)數(shù)是預(yù)先規(guī)定的。
常用內(nèi)部函數(shù)及其功能可查閱fortran教材或用戶手冊(cè)。
 
(二)語句函數(shù)
1.語句函數(shù)的定義
定義語句函數(shù)的語句稱為語句函數(shù)語句。其一般形式為:
函數(shù)名(形參表) =表達(dá)式。
其中,函數(shù)名的命名規(guī)則與一般變量名相同,所以它也可以用類型說明語句等來說明。形參又稱啞元,是一些變量名,一般應(yīng)出現(xiàn)在表達(dá)式中。
語句函數(shù)在程序單位中的位置,應(yīng)在所有可執(zhí)行語句之前。
2.語句函數(shù)的調(diào)用
調(diào)用語句函數(shù)的結(jié)果是得到一個(gè)函數(shù)值,因此,調(diào)用語句函數(shù)時(shí)代之以實(shí)際變量(又稱實(shí)元)。
 
(三)函數(shù)子程序
一個(gè)函數(shù)子程序是一個(gè)獨(dú)立的fortran程序單位。它的第一個(gè)語句必須是function語句,最后一個(gè)語句必須是end 語句。即函數(shù)子程序的一般結(jié)構(gòu)為:
[類型說明] function函數(shù)名(形參表)
語句塊
[return]
end
也可以寫為:
function函數(shù)名(形參表)
[類型說明函數(shù)名]
語句塊
[return]
end
其中函數(shù)名的命名規(guī)則與變量相間,而函數(shù)名的類型決定了函數(shù)值的類型。在函數(shù)子程序中,形參可以是變量名、數(shù)組名、外部過程名,而形參的命名與類型說明也與變量相同,形參數(shù)組也必須在函數(shù)子程序中予以定義。
函數(shù)子程序的函數(shù)值由函數(shù)名帶回到調(diào)用該函數(shù)子程序的程序,因此,在函數(shù)子程序 中必須對(duì)函數(shù)名賦值。在函數(shù)子程序中,函數(shù)名應(yīng)該像普通變量那樣來使用。在函數(shù)子程序中,所有的名字、語句標(biāo)號(hào)都可以和其他程序單位中的相同而彼此沒有 任何關(guān)系。
在函數(shù)子程序中, end語句的功能有兩個(gè):一是表示該程序單位的結(jié)束,二是具有返回語句return的功能。函數(shù)子程序中必須有并且只有一個(gè)end語句,而且只 能是子程序的最后一個(gè)語句。當(dāng)在子程序的其他位置須要返回時(shí),可以使用return 語句。
 
(四)子程序
1.子程序的結(jié)構(gòu)
一個(gè)子程序是一個(gè)獨(dú)立的fortran程序單位。
子程序的第一個(gè)語句必須是subroutine語句,最后一個(gè)語句必須是end 語句。 即子程序的一般結(jié)構(gòu)為:
subroutine子程序名(形參表)
語句塊
[return]
end
子程序名的命名規(guī)則與普通變量相同。但是子程序中的子程序名不能用于返回?cái)?shù)值,這與函數(shù)子程序是不同的。因此,子程序名沒有類型,它不能在本程序單位中使用。 subroutine 語句中的形參表可以省略。這時(shí)子程序名后的括弧不要保留。對(duì)子程序的其他有關(guān)規(guī)定與函數(shù)子程序相同。
2.子程序的調(diào)用
子程序調(diào)用通過call 語句實(shí)現(xiàn)。其形式為:
call子程序名(實(shí)參)
其他有關(guān)對(duì)子程序的調(diào)用規(guī)定與函數(shù)子程序相同。
 
八、程序單位間的數(shù)據(jù)傳遞
(一)虛實(shí)結(jié)合
虛實(shí)結(jié)合又稱啞實(shí)結(jié)合,是各程序單位(主程序和各種過程如函數(shù)子程序)之間傳遞數(shù)據(jù)的一種重要途徑。
1.變量的虛實(shí)結(jié)合
當(dāng)子程序等過程的形參為變量時(shí),則在調(diào)用時(shí)所對(duì)應(yīng)的實(shí)參可以是類型相同的常數(shù)、變量、數(shù)組元素或表達(dá)式;子程序調(diào)用后,其運(yùn)行的結(jié)果通過這些實(shí)參返回到調(diào)用者。在fortran77中,當(dāng)形參變量所對(duì)應(yīng)的實(shí)參是變量或數(shù)組元素時(shí),則它們之間的結(jié)合方 式是地址結(jié)合;而當(dāng)形參變量所對(duì)應(yīng)的實(shí)參是常數(shù)或表達(dá)式時(shí),其結(jié)合方法對(duì)于不同的 fortran系統(tǒng)有可能是不同的。
2.數(shù)組的虛實(shí)結(jié)合
當(dāng)子程序中的形參為數(shù)組名時(shí),則在調(diào)用時(shí)所對(duì)應(yīng)的實(shí)參必須是數(shù)組名或數(shù)組元素。
如果實(shí)參是數(shù)組名,則實(shí)參數(shù)組與形參數(shù)組按地址結(jié)合,實(shí)參數(shù)組與形參數(shù)組都從第 一個(gè)元素開始按列逐個(gè)對(duì)應(yīng)。例如,有主程序與子程序如下:
program main
integer a (0:5)
call sb (a)
end
subroutine sb (b)
 integer b (-1:2)
end
則在主程序中使用call語句調(diào)用子程序sb時(shí),實(shí)參數(shù)組與形參數(shù)組的結(jié)合情況如下:
實(shí)參數(shù)組 形參數(shù)組
a (0)——b (-1)
a (1)一一b (0)
a (2)——b (1)
a (3)一一b (2)
a (4)
a (5)
也即調(diào)用sb時(shí),a數(shù)組的頭4個(gè)元素與b數(shù)組的元素對(duì)應(yīng),這些對(duì)應(yīng)元素實(shí)際上為同一 存儲(chǔ)地址。
如果實(shí)參是數(shù)組元素,則從該元素開始依次與形參數(shù)組的第一個(gè)元素起按列逐個(gè)對(duì)應(yīng),它們也是按地址結(jié)合。例如,有主程序與子程序如下:
program main
dimention a (8)
call sb (a(5))
end
subroutine sb (b)
dimension b (3)
end
則在調(diào)用語句執(zhí)行時(shí),實(shí)參數(shù)組a與形參數(shù)組b的結(jié)合情況如下: 實(shí)參數(shù)組形參數(shù)組
a (1)
a (2)
a (3)
a (4)
a (5)——b (1)
a (6)一一b (2)
a (7)——b (3)
a (8)
fortran 77規(guī)定,不管實(shí)參是數(shù)組名還是數(shù)組元素,用作實(shí)參的數(shù)組,其維數(shù)、各維下標(biāo)的上下限及數(shù)組中元素個(gè)數(shù)可以和與之結(jié)合的形參數(shù)組不同,但要求從與形參數(shù)組的第一個(gè)元素結(jié)合的實(shí)參數(shù)組元素算起,以后的實(shí)參數(shù)組元素的個(gè)數(shù)不能少于形參數(shù)組元素的個(gè)數(shù)。
多維數(shù)組或數(shù)組元素虛實(shí)結(jié)合時(shí),要特別注意fortran中數(shù)組按列存放的規(guī)定, 不要搞錯(cuò)存儲(chǔ)地址的對(duì)應(yīng)關(guān)系。例如:
program main
dimension a (3, 2)
call sb (a)
。。。
end
subroutine sb (b)
dimension b (2, 3)
。。。
end
這種情況下,數(shù)組元索地址的對(duì)應(yīng)關(guān)系是:
實(shí)參數(shù)組 形參數(shù)組
a (1, 1)一一b (1, 1)
a (2, 1)一一b (2, 1)
a (3, 1) 一一b (1, 2)
a (1, 2) 一一b (2, 2)
a (2, 2) 一一b (1, 3)
a (3, 2) 一一b (2, 3)
3.可調(diào)數(shù)組
在主程序中定義數(shù)組元素時(shí),定義說明符中各維下標(biāo)的上下限必須為整常數(shù),不能是 變量或算術(shù)表達(dá)式。但在子程序中定義數(shù)組時(shí),允許用變量來定義各維下標(biāo)的上下限。子程序中用變量來定義各維下標(biāo)上下限的數(shù)組稱為可調(diào)數(shù)組。但使用可調(diào)數(shù)組必須遵循以下 幾個(gè)原則。
(1)可調(diào)數(shù)組名必須是形參數(shù)組名。
(2)說明可調(diào)數(shù)組各維下標(biāo)上下限的表達(dá)式中只能出現(xiàn)整型變量,且這種變量必須是形參或出現(xiàn)在common 語句中。但在某些fortran 77子集中,定義可調(diào)數(shù)組各維下 標(biāo)上下限時(shí)只能是整型變量,而不能是任何算術(shù)表達(dá)式。
(3)可調(diào)數(shù)組的大小不得超過對(duì)應(yīng)實(shí)參數(shù)組的大小。
4.字符型變量的虛實(shí)結(jié)合
(1)當(dāng)子程序中的形參為字符型變量時(shí),對(duì)應(yīng)的實(shí)參必須是字符型變量、字符常數(shù)、字符型數(shù)組元素或字符表達(dá)式。字符型實(shí)參必須用character 語句加以說明。
(2)如果字符型形參的長度小于對(duì)應(yīng)的實(shí)參長度,則從實(shí)參中最左邊的字符開始與形參結(jié)合,而實(shí)參中右邊多余的字符被截去。例如:
character a*5
a=abcde'
call sb (a)
end
subroutine sb (x)
character x*3
write (* , *) x
end
程序執(zhí)行后的輸出結(jié)果為: abc。
(3)在fortran 77中,對(duì)字符型形參的長度還可以用"*"號(hào)來說明,此時(shí),形 參字符變量自動(dòng)與對(duì)應(yīng)的實(shí)參取相同的長度。例如在上面的子程序sb中,如果將character x*3改變?yōu)閏haracter x* (*) ,則執(zhí)行后,輸出的結(jié)果為: abcde。
(4)當(dāng)子程序中形參為字符型數(shù)組時(shí),如果形參字符型數(shù)組元素的長度與對(duì)應(yīng)實(shí)參字符型數(shù)組元素長度一致,則其虛實(shí)結(jié)合的情況與一般的數(shù)組虛實(shí)結(jié)合的情況相同。如果形參與實(shí)參的字符型數(shù)組元素長度不同,則按字符依次對(duì)應(yīng)。例如,有主程序與子程序 如下:
character a (5) *3
data a(' abc', 'def', 'ghi', 'jkl', 'mno' )
call sb (a)
end
subroutine sb (d)
character d (4) *2
end
則形參數(shù)組d中元素的值為:
d (1):' ab'
d (2): 'cd'
d (3): 'ef'
d (4): 'gh'
(5)過程名的虛實(shí)結(jié)合 fortran允許子程序中的形參為過程名,此時(shí),調(diào)用程序中的實(shí)參必須是過程名.如果實(shí)參是外部過程名(如函數(shù)子程序名、子程序名) ,則該外部過程名在調(diào)用程序 中必須用external 語句說明。
如果實(shí)參是內(nèi)部過程名(如內(nèi)部函數(shù)名) ,則該內(nèi)部過程名在調(diào)用中必須用intrinsic語句說明。
 
(二)公用區(qū)語句
1.公用區(qū)語句的一般形式
common [公用區(qū)名l/]變量表1, [公用區(qū)名2/變量表2]…
沒有公用區(qū)名的就稱為無名公用區(qū),其他都是有名公用區(qū);一個(gè)完整的程序只能設(shè)置一個(gè)無名公用區(qū),但可以有多個(gè)有名公用區(qū);變量表中,可以是變量名、數(shù)組名、數(shù)組說明符,互相之間用逗號(hào)隔開。例如:
common a, b (3), c (2)
定義了b是3個(gè)元素的一維數(shù)組, c是2個(gè)元素的一維數(shù)組。這條語句與下面兩句語句是 等價(jià)的:
dimension b (3), c (2)
common a, b, c
2.利用公用區(qū)進(jìn)行數(shù)據(jù)傳遞時(shí),在元名公用區(qū)或同名的有名公用區(qū)中,位置排列相 同的變量、數(shù)組,實(shí)際上使用同一存儲(chǔ)地址,亦即共享同一數(shù)據(jù)。例如:
program main
common a, i (2) /coml/d, c
。。。
call sb
end
subroutine sb
common aa, ]k (2) /coml/f, g
end
其中,主程序中的變量a的數(shù)據(jù)與子程序的變量aa共享,數(shù)組1的數(shù)據(jù)與jk共享,而d, c的數(shù)據(jù)分別與f, g共享。由此可以知道,各個(gè)程序單位中common語句中的變量類型 必須按位置一一對(duì)應(yīng)一致才能正確傳遞數(shù)據(jù)。
 
九、文件
fortran程序輸入輸出的基本單位稱為記錄。記錄是數(shù)值或字符的序列。記錄的集合稱作文件。
(一)文件的存取方式
1.順序文件
順序文件中的記錄是一個(gè)接一個(gè)按順序存放的,即總從第1個(gè)記錄開始,然后是第2 個(gè)記錄,第3個(gè)記錄,…,要取任何一個(gè)記錄,都必須從第1個(gè)記錄開始。
2.直接文件
直接文件又稱直接存取文件,或隨機(jī)文件。它可以按任意順序讀寫某一記錄。直接文件中每個(gè)記錄的長度都是相等的。
 
(二)文件操作語句
文件操作語句有打開文件的open語句和關(guān)閉文件的close 語句。此外還有文件的 讀寫語句read語句和write語句。
 
(三)文件定位
設(shè)想在文件的讀寫操作時(shí)存在一根指針。起先指針停在文件的開始處,隨著文件存取 的進(jìn)行,指針在文件中移動(dòng)。控制指針的位置,即定位,在fortran中可以通過如下語句來實(shí)現(xiàn)。
i.rewind語句
rewind語句也稱回繞語句。它的形式是:
rewind設(shè)備號(hào)
它使與指定設(shè)備號(hào)相連的文件中的指針定位在文件的開頭。
在fortran中,用open語句打開一個(gè)文件,指針也是在文件的開頭位置。因此對(duì)一個(gè)已經(jīng)打開的文件,要使指針移到開頭,也可組合使用close和open 語句。
2.backspace語句
語句backspace的形式是:
backspace設(shè)備號(hào)
它使與指定設(shè)備號(hào)相連的文件中的指針退回一個(gè)記錄。
 
例題:
 
1.閱讀下列 fortran 程序:
integer sum
sum=0
do 10 i= 1 , 10 , 4
do 10 j = 5 , 100 , 20
do 10 k =-10 ,-5 ,2
10 sum = sum + 1
上面程序的運(yùn)行結(jié)果為(c)。
a . 15
b .30;
c .45;
d .60
k取值3次,j取值5次,i取值3次,共取值45次
 
2.若有integer a (-2:2, 0: 3, 1: 2) ,按照在內(nèi)存中的存儲(chǔ)次序,數(shù)組a中第8號(hào)元素為(b)
(a) a (-1,0,2) 
(b) a (0,1,1)
(c) a (2, 1,2)
(d) a (1, 1,1)
a中數(shù)據(jù)按列排序,a(5,4,2)第八個(gè)元素是a(3,2,1),對(duì)應(yīng)本題應(yīng)為a (0,1,1)
 
3.對(duì)下列程序段
read (*,*) x
if ( (x. lt. - 5.0) .or. (x.eq. -1.0)) then
y=0.0
elseif (x.lt.0.0) then
y=1.0/(x+1.0)
elseif (x. lt.5.0) then
y=1.0/(x+2.0)
else
y=0.0
endif
write (*,*) y
若輸入4.0,則結(jié)果為:(c)   
(a) 0.0    
(b) 1/5  
(c) 1/6   
(d) 1/4十2.0
輸入的是4,小于5,所以輸出結(jié)果為1/(2+4)=1/6
 
4.閱讀下列 fortran 程序:
dimension a ( 2 , 2 )
integer a , y
y =0
do 20 i=1,2
do 20 j = 1 , 2
a ( i , j ) = i * i + j*j
y = ( y + a ( i , j ) ) / 2
20 continue
write ( * ,*) y
end
此程序運(yùn)行的結(jié)果為(a)。
a . 6;
b . 9 ;
c . 10 ;
d 20
y1=2/2=1,y2=(1+5)/2=3,y3=(3+5)/2=4,y4=(4+8)/2=6
 
5.閱讀下列 fortran 程序:
k = 0
do 10 i= 1 , 6 , 2
do 10 j= 1 , 6 , 3
if ( k . lt . i * j )
k = i*j
10 continue write (*,* ) k
end
此程序執(zhí)行后的輸出結(jié)果為(c)。
a . 18;
b . 30;
c . 20 ;
d . 36
i,j乘積的最大值為4×5=20
 
6.以下程序段
dimension a (4)
read*,a
i=1
10 j = i + 1
20 if (a (i) . lt. a (j)) then
t=a (j)
a (j)=a (i)
a (i)=t
endif
j=j+l
if (j.le. 4) goto 20
i=i+1
if (1. le.3) goto 10
print*, a (4)
end
若輸入4, 2, 3, 5,則程序運(yùn)行結(jié)果為(b)  
(a) 4 
(b) 2 
(c) 3    
(d) 5
   相當(dāng)于把數(shù)列從大到小排列,最后5,4,3,2,故選b
 
7.對(duì)下列程序段
parameter (n=3)
integer a (n, n)
read*,a
do 10 j=1, n
ls=0
do 20 1= 1, n
20    ls= ls+ a (i, j)
ls=ls/n
do 30 i=1, n
30   a (i, j) = a(i, j)-ls
10 continue
print*,a
end
若輸入2, 4, 6, 8, 10, 12, 14, 16, 18
則程序運(yùn)行后a (3, 2)為(c)
(a) -2   
(b) 0     
(c) 2   
(d) 12
                              2 8 14
原數(shù)組注意是按列存儲(chǔ)數(shù)據(jù),a=4 10 16
                             6 12 18
每一列和除三,每個(gè)元素減去上述結(jié)果,a變?yōu)?/span>
    -2 -2 -2
a= 0   0    0
    2   2    2
a(3,2)為2
 
 
华池县| 衡阳县| 齐河县| 任丘市| 钟山县| 赤水市| 余江县| 定远县| 建宁县| 富平县| 西华县| 卓资县| 五原县| 东莞市| 荔浦县| 南平市| 阿拉尔市| 芷江| 山西省| 金堂县| 林口县| 侯马市| 恩平市| 东海县| 桂东县| 江永县| 交口县| 五家渠市| 益阳市| 无为县| 吴桥县| 寿阳县| 富顺县| 凤阳县| 百色市| 玉山县| 商城县| 茶陵县| 龙门县| 孝感市| 岐山县|