版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
FORTRAN90數(shù)據(jù)類型
整型數(shù)據(jù)
實型數(shù)據(jù)
復型數(shù)據(jù)
字符型數(shù)據(jù)
邏輯型數(shù)據(jù)一、整型數(shù)據(jù)
整型變量的說明:INTEGER[(類別參數(shù)值)][[,屬性列表]::]變量列表其中類別參數(shù)值取1,2,4,變量的屬性是指被說明對象的所屬性質。一個對象被說明具有某一屬性時,就使該對象具有某種附加功能、特殊的使用方式與適用范圍。屬性的種類有很多,這里介紹兩種最常見屬性的說明格式:INTEGER,PARAMETER::I=5,J=24INTERGER,DIMENSION(1:10)::A例求Fibonacci數(shù)列前30項之和。
分析:本例中,F(xiàn)ibonacci數(shù)列前30項之和是一個很大的數(shù),已經(jīng)超過了類別參數(shù)為2的整數(shù)的取值范圍,只能采用類別參數(shù)為4整數(shù)。如果數(shù)超過類別參數(shù)為4的整數(shù)取值范圍,就只能采用實型數(shù)據(jù)來處理。二、實型數(shù)據(jù)
實型變量的說明:REAL[([KIND=]類別參數(shù)值)][[,屬性列表]::]變量列表單精度用REAL(4)定義,雙精度用REAL(8)或DOUBLEPRECISION定義。缺省的類別值為4,即為單精度。例利用雙精度求:
直到最后一項的絕對值小于10-15為止。三、復型數(shù)據(jù)
將兩個實數(shù)用逗號分隔,再用括號括起來就構成了一個FORTRAN復型常量。其中第一個實數(shù)稱為復數(shù)的實部,第二個實數(shù)稱為復數(shù)的虛部。復型變量的說明:COMPLEX[(類別值)][[,屬性列表]::]變量列表如果實部和虛部都不是常數(shù),而是表達式,則應該用CMPLX函數(shù)將實部和虛部組成復型數(shù)據(jù)再賦給復型變量。例如C=CMPLX(3.0*A,6.0+B)例有一線段AB,A的坐標為(1,1),B的坐標為(4.5,4.5),求AB的長度以及黃金分隔點C的坐標。黃金分割點在線段的0.618處。分析:A,B的坐標可用復數(shù)表示:即A為(1.0,1.0),B為(4.5,4.5)。AB的長度就是(A-B)的模??捎肁BS函數(shù)直接求出復數(shù)的模。黃金分隔點C的坐標為A+0.618×(B-A)。四、字符型數(shù)據(jù)
1.字符型常量字符型常量又叫字符串常量,它是用單撇號或雙撇號括起來的字符序列。例如,″ABCD″、′CHINA′、′12345678′等都是FORTRAN字符型常量。當字符串中又含有單撇號時,例如要將I′MASTUDENT作為一個字符串來處理,為了區(qū)分′是字符串中的字符還是定界符,可采用兩種方式表示:″I′MASTUDENT″′I′′MASTUDENT′前者用雙撇號作定界符,后者用單撇號作定界符,而將字符串的單撇號用兩個單撇號表示,系統(tǒng)會自動將其處理為字符串的一個單撇號字符。2.字符型變量CHARACTER(LEN=n1[,KIND=n2])[[,屬性說明]::]變量列表格式中的n1和n2是一個整數(shù)和整型表達式,n1代表被說明變量的長度,n2代表字符變量的類別參數(shù),各項屬性說明是字符型變量有關屬性的說明。例如CHARACTER(LEN=25,KIND=2)::A,B,CCHARACTER(LEN=8),DIMENSION(1:10)::X,Y,ZCHARACTER(10),PARAMETER::NAME=′FORTRAN_90′CHARACTER(15)::ACHARACTER*15::ACHARACTER(15)::A,B*8,C*5,D,E3.子字符串字符變量名(m:n)其中,m和n是整數(shù)和整型表達式,表示子字符串在字符串中的起止位置,該子字符串的長度為n-m+1(n≥m≥1)。
4.字符表達式字符運算符只有一個,就是字符連接符″//″,它是由兩個斜杠組合而成的,其作用是將兩個字符型數(shù)據(jù)連接起來,成為一個字符型數(shù)據(jù)。5.字符關系表達式兩個字符串比較時,將兩個字符串中的字符自左向右這個進行比較。若所有字符完全相同,則兩表達式相等。否則,以第一次出現(xiàn)不同字符的比較結果為準。6.用于字符處理的內(nèi)部函數(shù)?
求字符串長度函數(shù)(LEN和LEN_TRIM)?
子串位置函數(shù)(INDEX)?
字符與字符序號相互轉化函數(shù)
7.字符處理應用舉例例1在讀入的一批單詞中,把以字母′B′開頭的打印出來,直到輸入′ZZZ′結束。例2翻譯密碼:為了保密,常不采用明碼電文,而用密碼電文,按事先約定的規(guī)律將一個字符轉換為另一個字符。收報人則按相反的規(guī)律轉換得到原來的字符。例如,將字母′A′→′F′,′B′→′G′,′C′→′H′,即將一個字母變成其后第五個字母。五、邏輯型數(shù)據(jù)
邏輯常量只有真和假兩種值:.TRUE.和.FALSE.。變量說明的格式為:LOGICAL[(類別值)][[,屬性列表]::]變量列表例當某點的X,Y坐標落在四個方塊內(nèi)和方塊邊上時,Z=0,如在方塊外,Z=3。實驗六FORTRAN數(shù)據(jù)類型
格式輸入輸出
輸入輸出概述
格式輸入輸出語句
格式說明語句
常用的編輯描述符
輸入輸出項與編輯符的相互作用
一、輸入輸出概述
輸入輸出是指在計算機內(nèi)存與外部設備之間傳送數(shù)據(jù)的過程。從外部設備將數(shù)據(jù)傳送到計算機內(nèi)存稱為輸入。將計算機內(nèi)部的數(shù)據(jù)傳送到外部設備稱為輸出。要順利地傳送數(shù)據(jù),一般應在輸入輸出語句中給計算機提供三方面的信息:
(1)通過什么設備來進行輸入輸出。
(2)采用什么樣的格式來進行輸入輸出。
(3)輸入輸出的具體內(nèi)容。二、格式輸入輸出語句
1.格式輸出v
PRINTf,輸出項其中f是格式說明符,指明了輸出所用的格式。它有以下三種形式:
(1)格式說明符是一個“*”,表示輸出使用表控格式。(2)格式說明符是一個字符常量。例如
PRINT'(1X,2F7.3)',X,Y(3)格式說明符是格式語句(FORMAT)的語句標號。例如PRINT100,A,B,C100FORMAT(1X,F9.4,2F7.3)v
WRITE(u,f)輸出項其中u是設備號,用于指明具體使用的輸出設備。u可以是一個無符號整數(shù),還可以是星號*。*表示系統(tǒng)預先約定的外部設備,一般為顯示器。2.格式輸入格式輸入語句是指READ語句,它有兩種形式:READf,輸入項READ(u,f)輸入項其中f指明了輸入所用的格式。它有以下三種形式:
(1)格式說明符是一個“*”,表示輸入使用表控格式。(2)格式說明符是一個字符常量。例如READ(*,'(I3,2I4)')I,J,K(3)格式說明符是格式語句(FORMAT)的語句標號。這是最常用的格式輸入形式。
u是設備號,用于指明具體使用的輸入設備。u可以是一個無符號整數(shù),還可以是星號“*”?!?”表示由計算機系統(tǒng)預先約定的外部設備,一般為鍵盤。三、格式說明語句
格式說明語句的一般格式是:
nFORMAT(格式說明)其中n是語句標號,F(xiàn)ORMAT語句一定帶有語句標號,以便同格式輸入輸出語句配合使用。四、常用的編輯描述符
1.可重復編輯描述符
整型數(shù)據(jù)編輯描述符實型數(shù)據(jù)編輯描述符復型數(shù)據(jù)編輯描述符邏輯型數(shù)據(jù)編輯描述符字符型數(shù)據(jù)編輯描述符2.非重復編輯描述符3.縱向走紙控制符
整型數(shù)據(jù)編輯描述符:I編輯符、B編輯符、O編輯符和Z編輯符。
I編輯符用于十進制整數(shù)的輸入輸出。它的一般格式是:
rIw其中r是重復系數(shù),為1時可以省略。w表示字段寬度,即與該編輯描述符對應的輸入輸出項所占用的字符個數(shù)。(1)I型輸入的使用規(guī)則:在輸入記錄中從左往右取w個字符存入對應的輸入項。(2)I型輸出的使用規(guī)則:在輸出記錄中,對應的輸出項的值占w個字符寬度。實型數(shù)據(jù)編輯描述符:F編輯符、E編輯符、EN編輯符、ES編輯符和G編輯符。
F編輯符用于實型量的輸入輸出(按小數(shù)形式)。它的一般格式是:rFw.d其中r為重復系數(shù),為1時可以省略。w為字段寬度,d為輸入輸出項小數(shù)部分所占的位數(shù)。(1)F型輸入規(guī)則:按編輯描述符中w指定的字段寬度從輸入記錄中截取數(shù)據(jù),若w個字符中不含小數(shù)點,則系統(tǒng)自動按d決定小數(shù)點的位置,若w個字符中含有小數(shù)點,則按“自帶小數(shù)點優(yōu)先”的原則。(2)F型輸出規(guī)則:把輸出項的值轉換成字段寬度為w的小數(shù)形式輸出,其中小數(shù)部分占d位,小數(shù)點占一位。復型數(shù)據(jù)編輯描述符復型數(shù)據(jù)沒有專門的編輯符。對復型數(shù)據(jù)的輸入輸出,可以按實部和虛部分別輸入輸出。邏輯型數(shù)據(jù)編輯描述符邏輯型數(shù)據(jù)的輸入輸出用L編輯符。其一般格式是:rLw
邏輯值只有兩個:真(.TRUE.)和假(.FALSE.)。(1)輸入時,輸入的數(shù)據(jù)可以是頭一個字母為T或F的任何字符串。(2)輸出時,對邏輯真(.TRUE.),輸出一個字母T,對邏輯假(.FALSE.),輸出字母F,且在左邊補w-1個空格。字符型數(shù)據(jù)編輯描述符字符型數(shù)據(jù)的輸入輸出用A編輯符。其一般格式是:
rAw其中字段寬度w可以省略,省略時,輸入輸出項的字段寬度隱含為對應的字符型輸入輸出項的長度l。
(1)A編輯符的輸入規(guī)則:當w>l時,從w個字符中取出最右邊l個字符送給對應的輸入項。當w<l時,當w個字符全部送入輸入項,并靠左對齊,右邊補l-w個空格。這一點同字符賦值語句的規(guī)則是相同的。(2)A編輯符的輸出規(guī)則:在輸出記錄中,Aw編輯符所對應的輸出項一定占w個字符的寬度,但輸出項實際包含字符的個數(shù)l可能與w不一致。當w=l時,輸出項所有的字符全部輸出。當w>l時,輸出項所有的字符全部輸出,并且靠右對齊,左補w-l個空格。當w<l時,輸出項最左邊w個字符輸出。當w省略時,按輸出項的長度輸出,這是最方便的形式。2.非重復編輯描述符
(1)X編輯符。用于在輸入輸出的常數(shù)之間插入空格。它的一般格式是:
nX其中n是正數(shù),用于指明從當前位置向右跳過n個字符位置。這里n不能省略,即使n為1,也要寫成1X。(2)H編輯符。用于輸出一個字符串。其一般格式是:
nHh1h2…h(huán)n其中n是正整數(shù),表示字符串的長度,h1h2…h(huán)n為n個字符。(3)撇號編輯符。用于輸出一個字符串。撇號編輯符和H編輯符作用相同,但撇號編輯符使用更為方便。(4)斜扛編輯符:結束當前正在輸入或輸出的記錄,并轉入下一個記錄開始輸入輸出。3.縱向走紙控制符FORTRAN規(guī)定,將輸出記錄中的第一個字符作為縱向走紙控制符,這個字符不輸出,而從輸出紀錄的第二個字符開始輸出。常用的控制字符有:空格(走紙一行)、0(走紙二行)、1(換頁)、+(不走紙,返回到本行重迭打印)。五、輸入輸出項與編輯符的相互作用
(1)如果可重復編輯符的個數(shù)多于輸入輸出項的個數(shù),則多余的編輯符不起作用。(2)如果可重復編輯符的個數(shù)少于輸入輸出項的個數(shù),則按順序用完最后一個可重復編輯符之后,再重復使用格式說明,但產(chǎn)生一個新記錄。(3)如果在編輯描述符表中包含有重復使用的編輯符組,則當所有編輯符用完之后,返回到最右邊那個編輯符組(包括其重復系數(shù))開始使用。分析下列程序的輸出結果。
I=56J=1247K=5126WRITE(*,10)I,J,K10FORMAT(1X,2(I5,2X)/)END
輸出結果為:
□□□56□□□1247(空一行)5126總結
FORTRAN90提供的編輯描述符很多,這給初學者學習帶來了困難,但一些編輯描述符也有共同特點,把握這些特點以后也就不難掌握了??芍貜途庉嬅枋龇怯脕頉Q定對應輸入輸出項的輸入輸出格式的,其中都有字段寬度w,而且對于輸入都是從輸入記錄中取w個字符,對于輸出都是在輸出記錄中輸出w個字符。但問題是,在輸入時,取得的w個字符按什么規(guī)則加工后傳送到對應的輸入項。在輸出時,當輸出項實際包括的字符的個數(shù)和編輯符中所確定的字段寬度(對于數(shù)值型數(shù)據(jù)還有小數(shù)位數(shù))之間不相符時,如何輸出?讀者可以分數(shù)值型、邏輯型、字符型進行總結。實驗七格式輸入輸出
數(shù)組
數(shù)組的概念
數(shù)組的說明與引用
數(shù)組元素的存儲結構
數(shù)組的輸入輸出
給數(shù)組賦初值
數(shù)組的應用一、數(shù)組的概念思考一:?
計算一個班學生的平均成績。?
計算一個班學生的平均成績以及每個成績與平均成績的差。思考二:?
求100個學生成績中的最高分。將100個學生的成績按從高到低的順序排列。把具有相同類型的一批數(shù)據(jù)看成是一個整體,叫做數(shù)組。給數(shù)組取一個名字叫數(shù)組名。數(shù)組中的每一個數(shù)據(jù)稱為數(shù)組元素,它可通過順序號(下標)來區(qū)分。例如,一個班60名學生的成績組成一個數(shù)組G,又如某廠5個車間全年各季度的產(chǎn)量組成數(shù)組P。在這里,區(qū)分G數(shù)組的元素需要一個順序號,故稱為一維數(shù)組,而區(qū)分P數(shù)組的元素需要兩個順序號,故稱為二維數(shù)組。二、數(shù)組的說明與引用1.數(shù)組說明的內(nèi)容程序中要使用任何一個數(shù)組都必須給予說明,即說明該數(shù)組的名字、類型、維數(shù)及大小。數(shù)組說明要用到數(shù)組說明符。它的一般形式是:數(shù)組名(維說明符[,維說明符]…)
維說明符的一般形式是:
[維下界:]維上界2.數(shù)組說明(1)用DIMENSION語句說明數(shù)組
DIMENSION數(shù)組說明符[,數(shù)組說明符]…例如DIMENSIONJU(20),NAME(-10:10,1:2)REALJUCHARACTERNAME(2)用類型說明語句說明數(shù)組類型符數(shù)組說明符[,數(shù)組說明符]…例如
CHARACTER*6CH(-10:10,5:9)*8REALKK(8)REAL(8)SOLUTION(30)(3)同時使用DIMENSION語句和類型說明語句說明數(shù)組一般格式為:類型符,DIMENSION(維說明符[,維說明符]…)::數(shù)組名[,數(shù)組名]…例如
REAL(8),DIMENSION(0:10)::A,B,CINTEGER,DIMENSION(4,5)::D,E
在說明數(shù)組時,也可以在數(shù)組名后面給出維說明,這時以該數(shù)組名后面的維說明為準。例如
REAL,DIMENSION(0:10)::A,B(20),C(4,5,3)說明A為A(0:10),而B,C分別為B(2)和C(4,5,3)3.數(shù)組元素的引用一般形式是:數(shù)組名(下標表達式[,下標表達式]…)思考:有下列程序片段:
REALLK(5,5)
…
LK(5,5)=12.5…兩個語句中都有L(5,5),它門的含義有何不同?對數(shù)組進行整體操作INTEGER,DIMENSION(4,5)::A A=100 A(:,1:5:2)=470說明了4×5整型數(shù)組A,先將A的全部元素賦為100,再將A第1,3,5列元素賦為470。三元表達式一般形式:初值:終值:步長三、數(shù)組元素的存儲結構FORTRAN90規(guī)定,數(shù)組元素在內(nèi)存中是按列的順序連續(xù)存放的。就二維數(shù)組而言,存放時先存入第一列元素,然后第二列,…,直到全部元素存完為止。對于多維數(shù)組,首先改變第一個下標,其次改變第二個下標,直至最后一個。分析下列數(shù)組的存儲結構:
INTEGERA(50),B(3,4)REALC(3,2,3)四、數(shù)組的輸入輸出1.使用DO循環(huán)輸入輸出數(shù)組元素例如,利用二重循環(huán)實現(xiàn)二維數(shù)組的輸入輸出。2.以數(shù)組名作為輸入輸出項數(shù)組名作為輸入輸出項時,數(shù)組元素按照它們在內(nèi)存中的排列順序輸入輸出。這種方式要特別注意數(shù)據(jù)的組織。3.使用隱DO循環(huán)進行數(shù)組元素的輸入輸出隱DO循環(huán)的一般形式是:
(輸入/輸出表,i=e1,e2[,e3])其中i是隱DO循環(huán)變量,e1、e2、e3是隱DO循環(huán)參數(shù)。例如WRITE(*,*)(3,4,I=1,3)等價于WRITE(*,*)3,4,3,4,3,4例分析下列程序段在輸出格式上的差異:(1)WRITE(*,*)(A(I),I=2,14,3)(2)DOI=2,14,3WRITE(*,*)A(I)ENDDO五、給數(shù)組賦初值1.使用DATA語句賦初值一般格式:DATA項目表/常量表/[[,]項目表/常量表/]…2.使用數(shù)組賦值符賦初值一般格式是:數(shù)組名=(/取值列表/)實驗八數(shù)組(一)六、數(shù)組的應用1.一維數(shù)組的應用例1從鍵盤輸入10個整數(shù)存入一個一維數(shù)組,然后將數(shù)組最大值與第一個元素互換,最小值與最后一個元素互換,其余元素不變。例2輸入100個字母,分別統(tǒng)計元音字母A、E、I、O、U出現(xiàn)的次數(shù)。例3將N個數(shù)排序。2.二維數(shù)組的應用例1設有一個4×5的矩陣,求(1)矩陣所有元素之和及平均值。(2)保留所有大于平均值的元素,其余元素清零。例2給定一個5×10矩陣,其元素互不相等,求每行絕對值最大的元素及其所在列號。例3矩陣乘法。已知m×n矩陣A和n×p矩陣B,試求它們乘積:C=A×B。例4求矩陣B50x50的范數(shù)。矩陣范數(shù)定義為它各行元素絕對值和的最大值,計算公式如下:總結1. 數(shù)組的概念、定義、引用。2. 關于數(shù)組的常用算法:排序、查詢、矩陣乘法等。實驗八數(shù)組(二)
順序結構程序設計
FORTRAN常量
FORTRAN變量
FORTRAN內(nèi)部函數(shù)
FORTRAN算術表達式
賦值語句
簡單輸入輸出語句
程序執(zhí)行控制語句
程序舉例一、FORTRAN常量
1.直接常量(1)整型常量(2)實型常量:小數(shù)形式和指數(shù)形式。分析:1E2,1.0E2,100.0,100的區(qū)別。2.符號常量所謂符號常量,是用一個標識符來代表一個常量。符號常量常用PARAMETER語句來定義。二、FORTRAN變量
1.變量的概念變量實質上代表的是一個內(nèi)存單元。分析下列語句:N=N+12.變量名變量的名字用標識符命名。在FORTRAN語言中,標識符只能由字母、數(shù)字和下劃線組成,且開頭只能是字母。3.變量的說明
(1)類型說明語句格式為:類型說明符變量名1,變量名2,…
類型說明符::變量名1,變量名2,…例如
INTEGERX,YREAL::SCORE,HEIGTH=16.5(2)隱含說明語句IMPLICIT格式為:IMPLICIT類型說明(字母表)例如IMPLICITINTEGER(A,C,T-V)(3)隱含約定I-N規(guī)則:FORTRAN語言規(guī)定以I,J,K,L,M,N6個字母開頭的變量被當作整型變量。三、FORTRAN內(nèi)部函數(shù)內(nèi)部函數(shù)是指系統(tǒng)本身帶有的能完成一定功能的程序單位。
(1)FORTRAN內(nèi)部函數(shù),也稱為庫函數(shù)。在程序中可直接調(diào)用這些函數(shù),在完成程序的編譯后,通過連接,即將一組二進制指令代入該函數(shù)出現(xiàn)的地方,與編譯好的目標程序一起形成可執(zhí)行程序。(2)一個內(nèi)部函數(shù)要求一個或多個自變量。(3)函數(shù)的自變量是有類型的,函數(shù)的值也是有類型的。三、FORTRAN內(nèi)部函數(shù)
例:(1)求三個數(shù)X、Y、Z中的最大值可以表示為:MAX(X,Y,Z)。(2)判斷一個數(shù)自然數(shù)M是否為另外一個自然數(shù)N的因子,通過MOD(N,M)是否為0可以判斷,如果為0,則說明M是N的因數(shù),否則說明N不能被M整除。四、FORTRAN算術表達式
1.運算符號與其優(yōu)先級別+、-、*、/、**2.如何書寫表達式
(1)表達式中的所有字符都必須寫在一行。
(2)表達式中常量的表示、變量的命名以及函數(shù)的引用要符合FORTRAN語言的規(guī)則。
(3)算術表達式中,乘號不能省略。
(4)兩整數(shù)相除,結果為整數(shù),不會進行四舍五入,而是把小數(shù)后面的部分切掉。分析:3*2/3與2/3*33.算術表達式中類型轉化:將低級類型轉換成高級類型。
例(SIN(A)+COS(B))/(A*B)EXP(X*Y)*SQRT(X-Y)ABS(A**(-n))+LOG(B)1.0/N思考題
寫出FORTRAN表達式(1) (2)(3)將兩位自然數(shù)的個位與十位互換,得到一個新的數(shù)。(4)將實數(shù)X四舍五入保留兩位小數(shù)。
實驗一FORTRAN程序設計基礎
五、賦值語句
1.賦值語句的格式變量名=表達式
2.執(zhí)行賦值語句時的類型轉換問題(1)左右兩邊類型相同,運算完畢,直接賦值。(2)左右兩邊類型不同,右邊表達式按原來規(guī)則計算,再轉換為與左邊變量相同的類型,然后將值賦給左邊的變量。六、簡單輸入輸出語句
1.表控輸入語句READ*,變量表READ(*,*)變量表例:READ*,X,Y,Z系統(tǒng)隱含指定的輸入設備表控輸入
六、簡單輸入輸出語句2.表控輸出語句
PRINT*,輸出項表WRITE(*,*)輸出列表例:PRINT*,”Y=”,X**2表控格式輸出
七、程序執(zhí)行控制語句
?
STOP語句?
PAUSE語句?
END語句八、程序舉例
例1已知
f(x)=x3+sin2x2+ln(x4+1)輸入自變量的值,求出對應的函數(shù)值。READ*,XF=X**3+SIN(X**2)**2+LOG(X**4+1)PRINT*,"F(X)=",FEND總結
1.編程的思路可以分三步來考慮:一是輸入原始數(shù)據(jù),二是對原始數(shù)據(jù)進行處理,三是輸出處理結果。一般而言第一步和第三步比較簡單,往往需重點考慮第三步。在一開始學習程序設計時,讀者就要養(yǎng)成好的習慣。2.注意表達式的書寫方法。3.注意以下技巧:·
將實數(shù)取整?!?/p>
整除的判斷。分離整數(shù)的各位數(shù)字。思考題
已知,其中,求y的值。
實驗二順序結構程序設計
文件
文件的概念文件的打開與關閉文件的讀寫文件應用舉例
一、文件的概念
數(shù)據(jù)文件是存放在外部介質上數(shù)據(jù)的集合。數(shù)據(jù)文件由記錄組成。它是數(shù)據(jù)傳遞的基本實體,是計算機內(nèi)存與外部設備傳遞信息的最小單位。記錄分為格式記錄和無格式記錄。格式記錄是一個字符的序列,在計算機內(nèi)部以ASCII碼形式存放,輸出時轉換成外部形式。無格式記錄是由二進制值的序列組成。這些二進制值是FORTRAN數(shù)據(jù)的內(nèi)部表示,輸入輸出時無需作格式轉換,其速度較快。根據(jù)記錄的數(shù)據(jù)存放形式可分為格式文件和無格式文件。由格式記錄組成的文件稱為格式文件,由無格式記錄組成的文件稱為無格式文件。根據(jù)文件的存放方式分為順序文件和直接文件。順序存取是指將文件的記錄按建立的時間先后順序依次存放在存儲介質中。
直接存取,又稱隨機存取。它是指將文件記錄由程序指定的某一位置直接存取。順序文件的存取操作必須從頭到尾順序進行。直接文件也稱為隨機文件,文件中的每一個記錄都有一個記錄號,可以按記錄號對指定的記錄進行讀寫。順序存取的文件中所有的記錄長度可以完全不同,而直接存取的文件中的記錄的長度由OPEN語句中的說明項“RECL=”指定,每個記錄長度相同。例以順序方式和直接方式將字符型、數(shù)值型數(shù)據(jù)寫入文件中。OPEN(10,FILE="A.TXT",FORM="FORMATTED",&ACCESS="SEQUENTIAL")WRITE(10,100)911WRITE(10,200)"WELCOME"OPEN(11,FILE="B.TXT",FORM="FORMATTED",&ACCESS="DIRECT",RECL=10)WRITE(11,100,REC=1)911WRITE(11,200,REC=2)"WELCOME"100FORMAT(1X,I5)200FORMAT(1X,A15)END二、文件的打開與關閉
1.OPEN語句
OPEN語句將設備號與文件名聯(lián)系起來,并指定文件的各項性質,其一般格式為:OPEN([UNIT=]ie[,FILE=ce][,ACCESS=ce][,FORM=ce][,RECL=ie])UNIT=ie是設備號說明,設備號是一個整型表達式。
FILE=ce是指定文件名。
ACCESS=ce是文件存取方式說明??捎?SEQUENTIAL'或'DIRECT',缺省'SEQUENTIAL'。
FORM=ce是記錄格式說明??捎?FORMATTED'或'UNFORMATTED'。對于順序文件隱含為有格式,對于隨機文件,隱含為無格式。RECL=ie說明記錄長度,僅用于直接文件。
2.CLOSE語句CLOSE語句解除設備號與文件的連接,即關閉該文件。一般格式是:
CLOSE([UNIT=]ie[,STATUS=ce])其中STATUS=ce說明文件被關閉后的狀態(tài):'KEEP'(保留)、"DELETE'(刪除),缺省狀態(tài)為'KEEP'。
三、文件的讀寫
1.READ語句READ([UNIT=]ie[,FMT=]格式說明[,REC=ie][,END=L][,ERR=L])輸入表REC=ie為記錄號說明,僅適用于直接存取文件。END=L為文件結束說明,遇到文件結束標志時轉向標號為L的語句去執(zhí)行。WRITE語句中無此項。ERR=L為出錯說明,當產(chǎn)生錯誤時,轉向標號為L的語句去執(zhí)行。
2.WRITE語句的一般形式WRITE([UNIT=]ie[,FMT=]格式說明[,REC=ie][,ERR=L])輸出表
3內(nèi)部文件內(nèi)部文件用字符串或字符數(shù)組作為單元標識,通過內(nèi)部文件,利用格式輸入輸出可以實現(xiàn)內(nèi)存和外部字符表示之間值的相互轉換。(1)用READ語句將ASCII碼轉換成數(shù)值型、邏輯型、字符型。例分析下列程序的輸出結果。CHARACTERstr(2)*10REALn(2)LOGICALloDATAstr/'1.232','.TRUE.'/READ(str(1),200)n,m !字符型轉換成數(shù)值型READ(str(2),*)lo !字符型轉換成邏輯型200FORMAT(2F3.1,I3)WRITE(*,*)n,m,loEND(2)利用WRITE語句將數(shù)值型、邏輯型、字符型轉換成ASCII碼。例11.13假設磁盤上有70個文件,文件的主文件名首字符都為“F”,后兩個字符為文件序號(如F01.DAT),編寫程序,實現(xiàn)根據(jù)輸入的序號打開相應文件。CHARACTERfname*7WRITE(*,*)"請輸入兩位數(shù)的文件序號:"READ(*,*)iWRITE(fname,200)I !合并字符串200FORMAT('F',I2,'.DAT')OPEN(11,FILE=fname)WRITE(11,*)'Fortran90'END四、文件應用舉例
例1建立一個有格式順序存取文件,存放某單位辦公用品信息(如表所示)。
其中,品名、數(shù)量、單價由用戶輸入,金額由程序計算得出,然后存放到磁盤文件中,文件名為goods.dat。當輸入的品名為“/”時,結束輸入。
例2有9個班的學生成績,在磁盤上建立9個存放學生成績的直接存取文件,文件名分別為class1.dat、class2.dat、…,class9.dat,文件的記錄格式見表2。
選擇結構程序設計
關系運算和邏輯運算塊IF選擇結構塊CASE選擇結構邏輯IF語句程序舉例
一、關系運算和邏輯運算
1.關系運算(1)FORTRAN90共有6個關系運算符:(2)關系表達式表達式1關系運算符 表達式2
例:MOD(I,2)/=1或MOD(I,2).NE.12.邏輯運算(1)FORTRAN所用的基本邏輯運算有:·
邏輯與運算.AND.·
邏輯或運算.OR.·
邏輯非運算.NOT.·
邏輯等于運算.EQV.·
邏輯不等運算.NEQV.·
邏輯異或運算.XOR.(2)邏輯表達式邏輯值1邏輯運算符邏輯值2例:
(a)直角坐標中,第一象限的點
(b)X∈[-3,5](c)a<b<c二、塊IF選擇結構
IF(邏輯表達式)THEN
塊1 ELSE
塊2ENDIF例:判斷自然數(shù)M是否為N的因子,是輸出“YES”,不是輸出“NO” IF(MOD(N,M)==0)THEN PRINT*,”YES” ELSE PRINT*,”NO” ENDIF3.多分支結構IF(邏輯表達式1)THEN
塊1ELSEIF(邏輯表達式2)THEN
塊2 …ELSEIF(邏輯表達式n)THEN
塊nELSE
塊n+1ENDIF例教材PAGE44第9題三、塊CASE選擇結構
塊CASE選擇結構一般格式為:SELECTCASE(表達式)CASE(表達式1)
塊1CASE(表達式2)
塊2
……CASE(表達式N)
塊NCASEDEFAULT
默認塊ENDSELECT例編寫程序,輸入年月,輸出該月所對應的天數(shù)。四、邏輯IF語句
邏輯IF語句格式:IF(條件表達式)可執(zhí)行語句例:教材PAGE44第9題
五、程序舉例
例1輸入一個三位自然數(shù),判斷它是否為水仙花數(shù),所謂水仙花數(shù),是指各位數(shù)字的立方和等于該數(shù)本身的數(shù)如153=13+53+33為水仙花數(shù)。例2將學生成績分為優(yōu)(90~100分)、良(80~89)、中(70~79)、及格(60~69)、不及格五個檔次。從鍵盤輸入學生的成績,輸出對應的檔次。
總結
選擇結構程序設計注意兩個問題:一是如何表達條件?二是實現(xiàn)選擇結構的語句。要注意關系表達式和邏輯表達式的書寫規(guī)則,注意各種語句的書寫格式、執(zhí)行過程以及應用方法。
實驗三選擇結構程序設計
循環(huán)結構程序設計
用DO語句實現(xiàn)循環(huán)
用DOWHILE語句實現(xiàn)循環(huán)
幾種循環(huán)組織方式的比較
循環(huán)的嵌套
循環(huán)結構的程序設計方法
一、用DO語句實現(xiàn)循環(huán)
1.DO循環(huán)一般格式DOi=e1,e2[,e3]…(循環(huán)體)ENDDO其中i代表循環(huán)變量,它可以是整型或實型變量。e1、e2、e3稱為循環(huán)參數(shù)表達式,分別表示循環(huán)變量的初值、終值和步長。循環(huán)體是在循環(huán)過程中被重復執(zhí)行的語句組。例求5!2.DO循環(huán)執(zhí)行過程計算e1、e2、e3的值e1→i計算循環(huán)次數(shù)rr=0?執(zhí)行循環(huán)體i+e3→ir-1→rENDDO下面的語句YNDO循環(huán)的執(zhí)行次數(shù)
r=MAX(INT((e2-e1+e3)/e3),0)說明?
循環(huán)體指的是DO語句與ENDDO語句之間的語句,因此循環(huán)體并不包括DO語句,執(zhí)行程序時DO語句也只執(zhí)行一次。如果循環(huán)參數(shù)表達式e1、e2、e3中含有變量,那么即便在循環(huán)體中改變變量的值,循環(huán)參數(shù)并不改變。?
在循環(huán)體內(nèi)給循環(huán)變量賦值,是不允許的。思考下列程序的執(zhí)行結果DOK=1,10,2L=KENDDOPRINT*,K,LEND例1一個整數(shù)的因子(不包括該數(shù)本身)之和等于它本身,則稱該數(shù)為完數(shù)。例如6的因子有1,2,3,且1+2+3=6,因此6是完數(shù)。輸入一個整數(shù),判斷它是否完數(shù)例2
Fibonacci數(shù)列定義如下:F1=1F2=1Fn=Fn-1+Fn-2(n>2)求Fibonacci數(shù)列的前30項。
例3所謂“水仙花數(shù)”是指一個三位整數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153就是一個水仙花數(shù)。輸出全部“水仙花數(shù)”。在[100,999]范圍內(nèi),對所有整數(shù)逐一驗證是否符合的條件,輸出符合條件的數(shù)。這種方法稱為窮舉法。
二、用DOWHILE語句實現(xiàn)循環(huán)對于循環(huán)次數(shù)確定的循環(huán)問題使用DO循環(huán)是比較方便的。但是,有些循環(huán)問題事先是無法確定循環(huán)次數(shù)的,只能通過給定的條件來決定是否繼續(xù)循環(huán)。這時可以使用DOWHILE語句來實現(xiàn)循環(huán)。1.DOWHILE循環(huán)的一般格式
DOWHILE(邏輯表達式)
循環(huán)體
ENDDO例輸出所輸入的全部正數(shù),直到輸入負數(shù)或零,程序結束。
2.DOWHILE循環(huán)的執(zhí)行過程例輸入一個整數(shù),輸出其位數(shù)。執(zhí)行循環(huán)體ENDDO下面的語句滿足循環(huán)條件?3.與循環(huán)有關的控制語句
?
EXIT語句?
CYCLE語句
CYCLE語句和EXIT語句的區(qū)別在于:CYCLE語句只結束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。EXIT語句則是結束所在循環(huán),跳出所在循環(huán)體。實驗四循環(huán)結構程序設計
三、幾種循環(huán)組織方式的比較實現(xiàn)循環(huán)結構的三種語句,它們各具特點。一般而言,事先能確定循環(huán)次數(shù)的循環(huán)問題用DO循環(huán),而事先不能確定循環(huán)次數(shù)的循環(huán)問題用DOWHILE循環(huán)。但這并不是絕對的,很多情況下它們是可以相互代替的。例輸入一個整數(shù)m,判斷是否素數(shù)。?
用DO循環(huán)實現(xiàn)。?
用DOWHILE循環(huán)實現(xiàn)?
用DO循環(huán)和邏輯IF語句的嵌套實現(xiàn)。四、循環(huán)的嵌套如果一個循環(huán)結構的循環(huán)體又包括一個循環(huán)結構,就稱為循環(huán)的嵌套,或稱為多重循環(huán)結構。在例求[100,1000]以內(nèi)的全部素數(shù)。
(1)判斷一個數(shù)是否素數(shù)。
(2)利用窮舉法將判斷一個數(shù)是否素數(shù)的程序段,對指定范圍內(nèi)的每一個數(shù)都執(zhí)行一遍,即可求出某個范圍內(nèi)的全部素數(shù)。五、程序舉例例1已知某球從100m高度自由落下,落地后反復彈起。每次彈起的高度都是上次高度的一半。求此球第10次落地后反彈起的高度和球所經(jīng)過的路程
分析:用變量H來表示下落的高度,變量R來表示反彈的高度,變量S來表示小球經(jīng)過的路程,則H的初值為100,反彈高度R=H/2。彈起一次小球要經(jīng)過下降和上升兩個階段,小球經(jīng)過的路程為H+R,這個過程如圖所示。例2用牛頓迭代法求方程f(x)=2x3-4x2+3x-7=0在x=2.5附近的實根,直到滿足|xn-xn-1|≤10-6
為止。牛頓迭代公式為:注意:關于迭代初值x0的選取問題,理論上可以證明,只要選取滿足條件f(x0)f’’(x0)>0的初始值x0,就可保證牛頓迭代法收斂。當然迭代初值不同,迭代的次數(shù)也就不同。
例3求f(x)在[a,b]上的定積分。分析:求一個函數(shù)f(x)在[a,b]上的定積分,其幾何意義就是求曲線y=f(x)與直線x=a,x=b,y=0所圍成的圖形的面積。為了求得圖形面積,先將區(qū)間[a,b]分成n等分,每個區(qū)間的寬度為h=(b-a)/n,對應地將圖形分成n等分,每個小部分近似一個小曲邊梯形。近似求出每個小曲邊梯形面積,然后將n個小曲邊梯形的面積加起來,就得到總面積,即定積分的近似值。n越大,近似程度越高。這就是函數(shù)的數(shù)值積分方法。近似求每個小曲邊梯形的面積的常用方法(1)用小矩形代替小曲邊梯形,求出各個小矩形面積,然后累加。此種方法稱為矩形法。
(2)用小梯形代替小曲邊梯形,此種方法稱為梯形法。
(3)用拋物線代替該區(qū)間的f(x),然后求出拋物線與x=a+(i-1)h,x=a+ih,y=0圍成的小曲邊梯形面積,此種方法稱為辛普生法。以梯形法為例:
第一個小梯形的面積為:
第二個小梯形的面積為:
第i個小梯形的面積為:
…
…
第n個小梯形的面積為:本質上講這是一個累加問題。例4某些分子和分母都是兩位數(shù)的真分數(shù),分子的個位數(shù)與分母的十位數(shù)相同,而且奇怪的是:如果把該分數(shù)的分子的個位數(shù)和分母的十位數(shù)同時去掉,所得結果正好等于原分數(shù)約分后的結果。例如,試求所有滿足上述條件的真分數(shù)。分析:我們先把條件歸納為下面四點:
(1)分子和分母原為兩位數(shù);
(2)真分數(shù);
(3)分子的個位數(shù)與分母的十位數(shù)相同;
(4)把分子的個位數(shù)和分母的十位數(shù)同時劃去,分數(shù)值不變??紤]到分子和分母原為兩位數(shù),可以把分子和分母看成從10到99這90個數(shù)中每次取兩個數(shù)的組合,對每一種組合驗證條件(2)、(3)、(4)。總結:如何編寫與調(diào)試程序
一、程序設計算法“如何編寫程序”是學習高級語言程序設計的難點,也是學習的重點。初學者普遍感到頭疼的問題是,碰到一個問題后不知從何下手,難以建立起明確的編程思路。根據(jù)教學基本要求,將本章程序設計問題分為累加與累乘問題、數(shù)字問題、數(shù)值計算等3類,每一類程序設計問題的思路如下:
1.累加與累乘問題
累加與累乘問題是很典型、最基本的一類算法,實際應用中很多問題都可以歸結為累加與累乘問題。算法設計思路是:
(1)寫出循環(huán)體中需要重復執(zhí)行的部分。這一部分要確定兩個內(nèi)容:一是求每次要累加或累乘的數(shù);二是迭代關系S=S+X或P=P*X。
(2)確定終止循環(huán)的方式。一般有事先知道循環(huán)次數(shù)的計數(shù)循環(huán)和事先不知道循環(huán)次數(shù)的條件循環(huán)兩種方式,依具體情況而定。計數(shù)循環(huán)可用一個變量來計數(shù),當達到一定循環(huán)次數(shù)后即退出循環(huán)。條件循環(huán)可根據(jù)具體情況確定一個循環(huán)的條件,當循環(huán)條件不滿足時即退出循環(huán)。
(3)確定循環(huán)初始值,即第一次循環(huán)時迭代變量的值。
(4)重新檢查,以保證算法正確無誤。一般而言,這一類問題的算法流程圖基本框架如圖所示。
例1已知,分別求:
(1)當N取1000時,S的值。
(2)S<0.78時的最大N值和與此時N值對應的S值。
(3)求S的值,直到累加項小于10-4為止。第一種情況下,屬于循環(huán)次數(shù)已知的循環(huán)結構,第二,三兩種情況下,屬于循環(huán)次數(shù)未知的循環(huán)結構,
2.數(shù)字問題
數(shù)字問題主要研究整數(shù)的一些自身性質與相互關系。處理過程中常常要用到求余數(shù)、分離數(shù)字及判斷整除等技巧,務必熟練掌握。
(1)判斷一個整數(shù)M能否被另一個整數(shù)N整除。方法1:若MOD(M,N)的值為0,則M能被N整除,否則不能。方法2:若M-INT(M/N)*N的值為0,則M能被N整除,否則不能。事實上,MOD(M,N)的函數(shù)值是M除以N的余數(shù),正是按照表達式M-INT(M/N)*N得到的計算結果。M-INT(M/N)*N也可以寫成M-M/N*N。
(2)分離自然數(shù)M各位的數(shù)字。
數(shù)字問題的提法往往是,求某一范圍內(nèi)符合某種條件的數(shù)。這一類問題的算法設計思路是:
(1)考慮判斷一個數(shù)是否滿足條件的算法。有時侯可以直接用一個關系表達式或邏輯表達式來判斷,如判斷奇數(shù)、偶數(shù)。但更多的情況是無法直接用一個條件表達式來判斷,這時可根據(jù)定義往往利用一個循環(huán)結構來進行判斷。
(2)在指定范圍內(nèi)重復執(zhí)行“判斷一個數(shù)是否滿足條件”的程序段,從而求得指定范圍內(nèi)全部符合條件的數(shù)。這里用的方法是窮舉。一般而言,這一類問題的算法流程圖基本框架如圖2所示。
例2若兩個素數(shù)之差是2,則稱這兩個素數(shù)是一對孿生數(shù)。例如,3和5是一對孿生數(shù)。求[2,500]區(qū)間內(nèi)(1)孿生數(shù)的對數(shù)。(2)最大的一對孿生數(shù)。
3.數(shù)值計算問題
數(shù)值計算是“計算方法”課程研究的對象,主要研究如何用計算機來求一些數(shù)學問題的數(shù)值解。目前數(shù)值計算方法已趨于完臻和成熟,許多問題都有了現(xiàn)成的算法或軟件包。詳細內(nèi)容可參閱數(shù)值分析或計算方法方面的專著,或直接使用有關軟件。(1)用牛頓迭代法求方程f(x)=0在x=x0
附近的實根。直到∣xn-xn-1∣≤ε為止。
(2)求之值。二、常用程序調(diào)試技巧
設置斷點輸出中間結果注釋語句的運用
實驗五常用算法
指針
指針的定義與使用
動態(tài)變量
指針與數(shù)組一、指針的定義與使用1.指針變量的定義格式指針變量的定義格式為:類型說明,POINTER::指針變量名1,指針變量名2,…其中類型說明可以是任何數(shù)據(jù)類型,如INTEGER、REAL等,它表示該指針所指的目標變量類型。POINTER為指針定義的關鍵字。2.指針變量的使用例PROGRAMPOINTER1 INTEGER,POINTER::P INTEGER,TARGET::X READ*,X P=>X PRINT*,"X=",X PRINT*,"P=",P END輸入3,程序的輸出結果為:
X=3P=35PX指針變量的三種狀態(tài)①未定義狀態(tài),在程序開始時,所有的指針都處于這種狀態(tài)。②空狀態(tài),此時指針還沒有作為任何對象的別名。在程序中,有時為了方便起見,可以讓指針指向一個空對象。其語句為:NULLIFY(指針變量名)。③關聯(lián)狀態(tài),此時,指針已經(jīng)作為其他對象的別名。值得注意的是只有在第三種狀態(tài)時,指針才能參與運算,否則,或者編譯出錯,或者非法操作。二、動態(tài)變量通過指針,可以先得到變量名,然后再利用ALLOCATE(P)函數(shù)可以動態(tài)分配其空間,其中P為指針變量。例如
PROGRAMPOINTER3 INTEGER,POINTER::P
ALLOCATE(P) P=4 PRINT*,"P=",P END輸出結果為:P=4三、指針與數(shù)組指針數(shù)組定義格式為:類型說明,DIMENSION(:…:),POINTER::指針名其中類型說明可以為各種數(shù)據(jù)類型,如INTEGER、REAL等;DIMENSION(:…:)是數(shù)組的動態(tài)說明標識,即不指定數(shù)組下標界限,“:”個數(shù)等于數(shù)組維數(shù)。POINTER為指針說明標識。例如REAL,DIMENSION(:),POINTER::XALLOCATE(X(20))第一個語句聲明了一個可以指向一維整型數(shù)組的指針X,第二個語句為該數(shù)組分配了20個單位的存儲空間。例輸入任意兩個數(shù),將它們及四則運算結果存儲起來后,輸出。分析:利用指針,定義一個動態(tài)數(shù)組X,用來存放輸入的數(shù)據(jù)和計算的結果,該數(shù)組的空間大小可以根據(jù)要存儲的數(shù)據(jù)個數(shù)動態(tài)分配??偨Y指針是現(xiàn)代程序設計語言中一個非常重要的概念。FORTRAN90以前的FORTRAN版本,沒有指針這種數(shù)據(jù)類型,F(xiàn)ORTRAN90對其作了重大改進,引入了指針的概念。但是值得注意的是,F(xiàn)ORTRAN90的指針與C語言中的指針并不相同,因為它并不代表一個變量的地址,而是代表一個變量的別名,實質上它相當于C++里的引用。四、鏈表指針用途之一是使得數(shù)據(jù)在計算機中可以按鏈接方式存儲,而鏈接存儲中,最簡單是鏈表。順序存儲和鏈接存儲是數(shù)據(jù)的兩種最基本的存儲結構。在順序存儲中,每個存儲結點只含有存儲元素本身的信息,元素之間的邏輯關系是通過數(shù)組下標位置簡單計算出來的。順序存儲最大的缺點是不利于數(shù)據(jù)的動態(tài)變化,如向順序表中插入或刪除一個元素時,需要大量移動數(shù)據(jù),處理效率很低。在鏈式存儲中,每一個節(jié)點包含兩個部分:一個值和一個指向下一個節(jié)點的指針。10.4.1結點的定義TYPENODEINTEGERVALUETYPE(NODE),POINTER::NEXTENDTYPENODE10.4.2鏈表的基本操作鏈表的基本操作包括建表、插入、刪除、查找、更新、遍歷等例建立一個包含5個節(jié)點的鏈表,并輸出建表后的結果。(1)定義鏈表TYPE(NODE),POINTER::CURRENT,L(2)建立鏈表READ*,NUMNULLIFY(L)ALLOCATE(CURRENT)CURRENT%VALUE=NUML=>CURRENTDOWHILE(NUM/=0)READ*,NUMIF(NUM/=0)THENALLOCATE(CURRENT)CURRENT%VALUE=NUMCURRENT%NEXT=>LL=>CURRENTENDIFENDDO12345(3)鏈表的輸出CURRENT=>LPRINT*,CURRENT%VALUECURRENT=>CURRENT%NEXTDOWHILE(ASSOCIATED(CURRENT))PRINT*,CURRENT%VALUECURRENT=>CURRENT%NEXTENDDOEND12345
子程序語句函數(shù)函數(shù)子程序子例行程序程序單元之間的數(shù)據(jù)傳遞遞歸調(diào)用等價語句與數(shù)據(jù)塊子程序內(nèi)部子程序模塊一、語句函數(shù)1.語句函數(shù)的定義語句函數(shù)定義的一般格式是:
f(x1,x2,…,xn)=e2.語句函數(shù)的調(diào)用語句函數(shù)的調(diào)用形式和內(nèi)在函數(shù)完全相同。例1計算f(1)f(10)f(12)f(-5)的值。例2找出100~999之間的所有水仙花數(shù)。二、函數(shù)子程序1.函數(shù)子程序的定義函數(shù)子程序的定義格式是:[類型說明]FUNCTION函數(shù)名(虛參表)
函數(shù)體END函數(shù)名的命名方法與變量名相同,虛參可以是簡單變量和數(shù)組變量,但不能是常數(shù)、數(shù)組元素、表達式)例1求分析:上述三個數(shù)列的通項不同,求和范圍也不同,用一個程序段難以同時計算三個數(shù)列的和,并且,因為無法用一個語句函數(shù)完成數(shù)列的求和計算,所以也無法使用語句函數(shù)來簡化程序設計??梢圆捎煤瘮?shù)子程序來完成這個問題。設計一個求和的函數(shù)子程序SM(M,N,L),M、N分別為求和范圍的上、下界,L反映數(shù)列通項的性質。函數(shù)定義部分應注意如下問題:(1)函數(shù)不能有同名虛參。虛參的類型可以在函數(shù)體中進行說明,當未對虛參類型進行說明時,虛參類型遵守I—N隱含規(guī)則。(2)函數(shù)定義部分中一定要有一個語句將函數(shù)值賦值給函數(shù)名,這種賦值語句的格式是:函數(shù)名=表達式。注意不要在函數(shù)名后帶上括弧。2.函數(shù)子程序的調(diào)用調(diào)用一個函數(shù)子程序的方法和調(diào)用內(nèi)在函數(shù)和語句函數(shù)的方法基本相同。例2用函數(shù)子程序的方法設計一個程序,求50~100內(nèi)的所有素數(shù)及其和。分析:設計一個函數(shù)子程序PRIME(N):主程序的任務是應用PRIME函數(shù)子程序在50~100之間使用枚舉法求出那些使PRIME函數(shù)值為1的自然數(shù)并求這些數(shù)的和。思考:子程序的返回值分別為邏輯型、字符型時,主、子程序程序做何修改?例2當一個數(shù)各個數(shù)位的立方和等于這個數(shù)本身時,稱這樣的數(shù)為水仙花數(shù)(如153=1**3+5**3+3**3,所以,153是一個水仙花數(shù)。)編程:求100~999之間的水仙花數(shù)。分析:設計一個函數(shù)子程序NUM(N,I),當I=100時,函數(shù)NUM返回N的百位上的數(shù);當I=10時,NUM返回N的十位上的數(shù),I=1時,NUM返回N的個位上的數(shù)。主程序中調(diào)用NUM函數(shù)在100~999之間找出所有水仙花數(shù)。三、子例行程序1.子例行子程序的定義子例行子程序定義格式是:SUBROUTINE子程序名(虛參表)
子例行程序體END子程序的命名方法與變量相同。虛參由變量、數(shù)組名(不能是數(shù)組元素,常數(shù)、表達式)充當,當虛參多于一個時,各虛參間用逗號分隔,當沒有虛參時,子例行程序名后的一對括弧可以省略。子例行程序的設計方法和函數(shù)子程序相同,但因為其名字沒有值,所以不能有對子例行程序的名字賦值的語句。2.子例行子程序的調(diào)用子例行程序的調(diào)用格式是:CALL子例行程序名(實參表)其實參的類型與函數(shù)子程序相同。和函數(shù)子程序的調(diào)用不同的是,子例行子程序的調(diào)用是一個獨立的語句。例1用子例行程序的方法求上面的s1,s2,s3。例2設計一個子例行程序程序,求任意矩陣的轉置矩陣。實驗九子程序(一)四、程序單元之間的數(shù)據(jù)傳遞1.簡單變量作為虛參(1)簡單變量或數(shù)組元素作為實參。系統(tǒng)將實參與虛參安排同一個存儲單元,對虛參的任何改變都作用在對應的實參上,因而調(diào)用一個子程序(包括函數(shù)子程序和子例行程序)時,實參的值有可能改變。(2)常量或表達式作為實參。首先計算表達式的值(如果實參為表達式時),然后將該值賦值給對應的虛參。此種情況下,子程序中不能改變與常量(或表達式)對應的虛參的值。2.數(shù)組名作為虛參當虛參是數(shù)組名時,對應的實參可以是與虛參類型相同的數(shù)組名或數(shù)組元素,并且實參與虛參共用一片連續(xù)的存儲單元。例:寫出下列程序的執(zhí)行結果 INTEGERA(5) N1=1 N2=1 DO10J=1,510 A(J)=M(N1,N2) WRITE(*,*)A END FUNCTIONM(I1,I2) M=I1+I2 I1=I2 I2=M ENDJ=1J=2J=3J=4J=5I2I18—>135—>85—>83—>53—>52—>32—>31—>21—>21—>1N2N1例PROGRAMMAININTEGERA(10)……CALLSB(A(3))……ENDSUBROUTINESB(B)DIMENSIONB(6)
……ENDDIMENSIONB(10)A(1)A(2)A(3)A(4)A(5)A(6)A(7)A(8)A(9)A(10)B(1)B(2)B(3)B(4)B(5)B(6)四、程序單元之間的數(shù)據(jù)傳遞3.子程序名作為虛參例設有三個連續(xù)函數(shù):四、程序單元之間的數(shù)據(jù)傳遞4.變量的作用域(1)變量存儲區(qū)的分配與釋放(2)變量作用域(3)子程序中變量的存儲屬性:SAVE屬性,STATIC屬性,AUTOMATIC屬性變量的存儲屬性的說明方法是:存儲屬性變量名表例如AUTOMATICA,B,CINTEGERSAVEX,Y
例分析:定義一個函數(shù),實現(xiàn)的功能相當于f(a)/(f(b)*f(c)),函數(shù)有四個參數(shù)(FUN,A,B,C),其中FUN是虛擬函數(shù)名,A、B、C為自變量,第一次調(diào)用時把內(nèi)部函數(shù)名SIN傳送給FUN,第二次調(diào)用時把內(nèi)部函數(shù)名COS傳送給FUN。五、遞歸調(diào)用1.遞歸的概念2.遞歸函數(shù)遞歸函數(shù)的定義格式是:RECURSIVEFUNCTION函數(shù)名(虛參表)RESULT(變量名)
…
調(diào)用該函數(shù)本身
…END例1設計一個計算N!的函數(shù)子程序。函數(shù)子程序如下:RECURSIVEFUNCTIONFAC(N)RESULT(FAC1)IF(N==1)THENFAC1=1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院新進人員培訓制度
- 班班通運用培訓制度
- 酒店開業(yè)前培訓制度
- 培訓學校住宿管理制度
- 垃圾場培訓上崗制度
- 非學科培訓機構準入制度
- 培訓人員課堂管理制度
- 員工培訓與管理規(guī)章制度
- 華為企業(yè)培訓管理制度
- 管理人員業(yè)務培訓制度
- 大學任課老師教學工作總結(3篇)
- 《功能性食品學》第七章-輔助改善記憶的功能性食品
- 幕墻工程竣工驗收報告2-2
- 1、工程竣工決算財務審計服務項目投標技術方案
- 改進維持性血液透析患者貧血狀況PDCA
- 阿司匹林在心血管疾病級預防中的應用
- 化工設備培訓
- D500-D505 2016年合訂本防雷與接地圖集
- 國家開放大學電大??啤毒W(wǎng)絡信息編輯》期末試題標準題庫及答案(試卷號:2489)
- GB/T 20914.1-2007沖模氮氣彈簧第1部分:通用規(guī)格
- FZ/T 90086-1995紡織機械與附件下羅拉軸承和有關尺寸
評論
0/150
提交評論