夜夜嗨AV色综合久久久综合网,国产精品一区电影,久久亚洲欧美日本精品,色五月,开心五月,丁香五月

7.7   計算機系統(tǒng)

 

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

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

二、重點內(nèi)容

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

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

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

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

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

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

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

 

2 .計算機的分類

計算機的分類方法有多種,具體為:

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

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

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

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

 

3 .計算機系統(tǒng)組成及其特點

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

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

按照馮·諾依曼結(jié)構(gòu)原理,計算機至少應由運算器、控制器、存儲器、輸人設備和輸出設備五部分組成。

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

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

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

1 )總線

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

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

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

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

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

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

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

沒有軟件支持的計算機稱之為“裸機”。

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

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

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

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

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

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

分時操作系統(tǒng)的特點是:同時性、交互性、獨占性。

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

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

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

6 .計算機程序設計語言

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

1 )匯編程序與編譯程序

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

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

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

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

其次,編譯程序有保存的目標程序,而解釋程序無保存的目標程序;

 

第三,編譯代碼比解釋代碼運行的速度要快。

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

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

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

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

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

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