FORTRAN程序設(shè)計(jì)課件_第1頁
FORTRAN程序設(shè)計(jì)課件_第2頁
FORTRAN程序設(shè)計(jì)課件_第3頁
FORTRAN程序設(shè)計(jì)課件_第4頁
FORTRAN程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩142頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

FORTRAN90數(shù)據(jù)類型

整型數(shù)據(jù)

實(shí)型數(shù)據(jù)

複型數(shù)據(jù)

字元型數(shù)據(jù)

邏輯型數(shù)據(jù)一、整型數(shù)據(jù)

整型變數(shù)的說明:INTEGER[(類別參數(shù)值)][[,屬性列表]::]變數(shù)列表其中類別參數(shù)值取1,2,4,變數(shù)的屬性是指被說明對(duì)象的所屬性質(zhì)。一個(gè)對(duì)象被說明具有某一屬性時(shí),就使該對(duì)象具有某種附加功能、特殊的使用方式與適用範(fàn)圍。屬性的種類有很多,這裏介紹兩種最常見屬性的說明格式:INTEGER,PARAMETER::I=5,J=24INTERGER,DIMENSION(1:10)::A例求Fibonacci數(shù)列前30項(xiàng)之和。

分析:本例中,F(xiàn)ibonacci數(shù)列前30項(xiàng)之和是一個(gè)很大的數(shù),已經(jīng)超過了類別參數(shù)為2的整數(shù)的取值範(fàn)圍,只能採用類別參數(shù)為4整數(shù)。如果數(shù)超過類別參數(shù)為4的整數(shù)取值範(fàn)圍,就只能採用實(shí)型數(shù)據(jù)來處理。二、實(shí)型數(shù)據(jù)

實(shí)型變數(shù)的說明:REAL[([KIND=]類別參數(shù)值)][[,屬性列表]::]變數(shù)列表單精確度用REAL(4)定義,雙精度用REAL(8)或DOUBLEPRECISION定義。缺省的類別值為4,即為單精確度。例利用雙精度求:

直到最後一項(xiàng)的絕對(duì)值小於10-15為止。三、複型數(shù)據(jù)

將兩個(gè)實(shí)數(shù)用逗號(hào)分隔,再用括弧括起來就構(gòu)成了一個(gè)FORTRAN複型常量。其中第一個(gè)實(shí)數(shù)稱為複數(shù)的實(shí)部,第二個(gè)實(shí)數(shù)稱為複數(shù)的虛部。複型變數(shù)的說明:COMPLEX[(類別值)][[,屬性列表]::]變數(shù)列表如果實(shí)部和虛部都不是常數(shù),而是運(yùn)算式,則應(yīng)該用CMPLX函數(shù)將實(shí)部和虛部組成複型數(shù)據(jù)再賦給複型變數(shù)。例如C=CMPLX(3.0*A,6.0+B)例有一線段AB,A的座標(biāo)為(1,1),B的座標(biāo)為(4.5,4.5),求AB的長度以及黃金分隔點(diǎn)C的座標(biāo)。黃金分割點(diǎn)線上段的0.618處。分析:A,B的座標(biāo)可用複數(shù)表示:即A為(1.0,1.0),B為(4.5,4.5)。AB的長度就是(A-B)的模??捎肁BS函數(shù)直接求出複數(shù)的模。黃金分隔點(diǎn)C的座標(biāo)為A+0.618×(B-A)。四、字元型數(shù)據(jù)

1.字元型常量字元型常量又叫字串常量,它是用單撇號(hào)或雙撇號(hào)括起來的字元序列。例如,″ABCD″、′CHINA′、′12345678′等都是FORTRAN字元型常量。當(dāng)字串中又含有單撇號(hào)時(shí),例如要將I′MASTUDENT作為一個(gè)字串來處理,為了區(qū)分′是字串中的字元還是定界符,可採用兩種方式表示:″I′MASTUDENT″′I′′MASTUDENT′前者用雙撇號(hào)作定界符,後者用單撇號(hào)作定界符,而將字串的單撇號(hào)用兩個(gè)單撇號(hào)表示,系統(tǒng)會(huì)自動(dòng)將其處理為字串的一個(gè)單撇號(hào)字元。2.字元型變數(shù)CHARACTER(LEN=n1[,KIND=n2])[[,屬性說明]::]變數(shù)列表格式中的n1和n2是一個(gè)整數(shù)和整型運(yùn)算式,n1代表被說明變數(shù)的長度,n2代表字元變數(shù)的類別參數(shù),各項(xiàng)屬性說明是字元型變數(shù)有關(guān)屬性的說明。例如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.子字串字元變數(shù)名(m:n)其中,m和n是整數(shù)和整型運(yùn)算式,表示子字串在字串中的起止位置,該子字串的長度為n-m+1(n≥m≥1)。

4.字元運(yùn)算式字元運(yùn)算符只有一個(gè),就是字元連接符″//″,它是由兩個(gè)斜杠組合而成的,其作用是將兩個(gè)字元型數(shù)據(jù)連接起來,成為一個(gè)字元型數(shù)據(jù)。5.字元關(guān)係運(yùn)算式兩個(gè)字串比較時(shí),將兩個(gè)字串中的字元自左向右這個(gè)進(jìn)行比較。若所有字元完全相同,則兩運(yùn)算式相等。否則,以第一次出現(xiàn)不同字元的比較結(jié)果為準(zhǔn)。6.用於字元處理的內(nèi)部函數(shù)?

求字串長度函數(shù)(LEN和LEN_TRIM)?

子串位置函數(shù)(INDEX)?

字元與字元序號(hào)相互轉(zhuǎn)化函數(shù)

7.字元處理應(yīng)用舉例例1在讀入的一批單詞中,把以字母′B′開頭的列印出來,直到輸入′ZZZ′結(jié)束。例2翻譯密碼:為了保密,常不採用明碼電文,而用密碼電文,按事先約定的規(guī)律將一個(gè)字元轉(zhuǎn)換為另一個(gè)字元。收?qǐng)?bào)人則按相反的規(guī)律轉(zhuǎn)換得到原來的字元。例如,將字母′A′→′F′,′B′→′G′,′C′→′H′,即將一個(gè)字母變成其後第五個(gè)字母。五、邏輯型數(shù)據(jù)

邏輯常量只有真和假兩種值:.TRUE.和.FALSE.。變數(shù)說明的格式為:LOGICAL[(類別值)][[,屬性列表]::]變數(shù)列表例當(dāng)某點(diǎn)的X,Y座標(biāo)落在四個(gè)方塊內(nèi)和方塊邊上時(shí),Z=0,如在方塊外,Z=3。實(shí)驗(yàn)六FORTRAN數(shù)據(jù)類型

格式輸入輸出

輸入輸出概述

格式輸入輸出語句

格式說明語句

常用的編輯描述符

輸入輸出項(xiàng)與編輯符的相互作用

一、輸入輸出概述

輸入輸出是指在電腦記憶體與外部設(shè)備之間傳送數(shù)據(jù)的過程。從外部設(shè)備將數(shù)據(jù)傳送到電腦記憶體稱為輸入。將電腦內(nèi)部的數(shù)據(jù)傳送到外部設(shè)備稱為輸出。要順利地傳送數(shù)據(jù),一般應(yīng)在輸入輸出語句中給電腦提供三方面的資訊:

(1)通過什麼設(shè)備來進(jìn)行輸入輸出。

(2)採用什麼樣的格式來進(jìn)行輸入輸出。

(3)輸入輸出的具體內(nèi)容。二、格式輸入輸出語句

1.格式輸出v

PRINTf,輸出項(xiàng)其中f是格式說明符,指明了輸出所用的格式。它有以下三種形式:

(1)格式說明符是一個(gè)“*”,表示輸出使用表控格式。(2)格式說明符是一個(gè)字元常量。例如

PRINT'(1X,2F7.3)',X,Y(3)格式說明符是格式語句(FORMAT)的語句標(biāo)號(hào)。例如PRINT100,A,B,C100FORMAT(1X,F9.4,2F7.3)v

WRITE(u,f)輸出項(xiàng)其中u是設(shè)備號(hào),用於指明具體使用的輸出設(shè)備。u可以是一個(gè)無符號(hào)整數(shù),還可以是星號(hào)*。*表示系統(tǒng)預(yù)先約定的外部設(shè)備,一般為顯示器。2.格式輸入格式輸入語句是指READ語句,它有兩種形式:READf,輸入項(xiàng)READ(u,f)輸入項(xiàng)其中f指明了輸入所用的格式。它有以下三種形式:

(1)格式說明符是一個(gè)“*”,表示輸入使用表控格式。(2)格式說明符是一個(gè)字元常量。例如READ(*,'(I3,2I4)')I,J,K(3)格式說明符是格式語句(FORMAT)的語句標(biāo)號(hào)。這是最常用的格式輸入形式。

u是設(shè)備號(hào),用於指明具體使用的輸入設(shè)備。u可以是一個(gè)無符號(hào)整數(shù),還可以是星號(hào)“*”?!?”表示由電腦系統(tǒng)預(yù)先約定的外部設(shè)備,一般為鍵盤。三、格式說明語句

格式說明語句的一般格式是:

nFORMAT(格式說明)其中n是語句標(biāo)號(hào),F(xiàn)ORMAT語句一定帶有語句標(biāo)號(hào),以便同格式輸入輸出語句配合使用。四、常用的編輯描述符

1.可重複編輯描述符

整型數(shù)據(jù)編輯描述符實(shí)型數(shù)據(jù)編輯描述符複型數(shù)據(jù)編輯描述符邏輯型數(shù)據(jù)編輯描述符字元型數(shù)據(jù)編輯描述符2.非重複編輯描述符3.縱向走紙控制符

整型數(shù)據(jù)編輯描述符:I編輯符、B編輯符、O編輯符和Z編輯符。

I編輯符用於十進(jìn)位整數(shù)的輸入輸出。它的一般格式是:

rIw其中r是重複係數(shù),為1時(shí)可以省略。w表示字段寬度,即與該編輯描述符對(duì)應(yīng)的輸入輸出項(xiàng)所佔(zhàn)用的字元個(gè)數(shù)。(1)I型輸入的使用規(guī)則:在輸入記錄中從左往右取w個(gè)字元存入對(duì)應(yīng)的輸入項(xiàng)。(2)I型輸出的使用規(guī)則:在輸出記錄中,對(duì)應(yīng)的輸出項(xiàng)的值占w個(gè)字元寬度。實(shí)型數(shù)據(jù)編輯描述符:F編輯符、E編輯符、EN編輯符、ES編輯符和G編輯符。

F編輯符用於實(shí)型量的輸入輸出(按小數(shù)形式)。它的一般格式是:rFw.d其中r為重複係數(shù),為1時(shí)可以省略。w為字段寬度,d為輸入輸出項(xiàng)小數(shù)部分所占的位數(shù)。(1)F型輸入規(guī)則:按編輯描述符中w指定的字段寬度從輸入記錄中截取數(shù)據(jù),若w個(gè)字元中不含小數(shù)點(diǎn),則系統(tǒng)自動(dòng)按d決定小數(shù)點(diǎn)的位置,若w個(gè)字元中含有小數(shù)點(diǎn),則按“自帶小數(shù)點(diǎn)優(yōu)先”的原則。(2)F型輸出規(guī)則:把輸出項(xiàng)的值轉(zhuǎn)換成字段寬度為w的小數(shù)形式輸出,其中小數(shù)部分占d位,小數(shù)點(diǎn)占一位。複型數(shù)據(jù)編輯描述符複型數(shù)據(jù)沒有專門的編輯符。對(duì)複型數(shù)據(jù)的輸入輸出,可以按實(shí)部和虛部分別輸入輸出。邏輯型數(shù)據(jù)編輯描述符邏輯型數(shù)據(jù)的輸入輸出用L編輯符。其一般格式是:rLw

邏輯值只有兩個(gè):真(.TRUE.)和假(.FALSE.)。(1)輸入時(shí),輸入的數(shù)據(jù)可以是頭一個(gè)字母為T或F的任何字串。(2)輸出時(shí),對(duì)邏輯真(.TRUE.),輸出一個(gè)字母T,對(duì)邏輯假(.FALSE.),輸出字母F,且在左邊補(bǔ)w-1個(gè)空格。字元型數(shù)據(jù)編輯描述符字元型數(shù)據(jù)的輸入輸出用A編輯符。其一般格式是:

rAw其中字段寬度w可以省略,省略時(shí),輸入輸出項(xiàng)的字段寬度隱含為對(duì)應(yīng)的字元型輸入輸出項(xiàng)的長度l。

(1)A編輯符的輸入規(guī)則:當(dāng)w>l時(shí),從w個(gè)字元中取出最右邊l個(gè)字元送給對(duì)應(yīng)的輸入項(xiàng)。當(dāng)w<l時(shí),當(dāng)w個(gè)字元全部送入輸入項(xiàng),並靠左對(duì)齊,右邊補(bǔ)l-w個(gè)空格。這一點(diǎn)同字元賦值語句的規(guī)則是相同的。(2)A編輯符的輸出規(guī)則:在輸出記錄中,Aw編輯符所對(duì)應(yīng)的輸出項(xiàng)一定占w個(gè)字元的寬度,但輸出項(xiàng)實(shí)際包含字元的個(gè)數(shù)l可能與w不一致。當(dāng)w=l時(shí),輸出項(xiàng)所有的字元全部輸出。當(dāng)w>l時(shí),輸出項(xiàng)所有的字元全部輸出,並且靠右對(duì)齊,左補(bǔ)w-l個(gè)空格。當(dāng)w<l時(shí),輸出項(xiàng)最左邊w個(gè)字元輸出。當(dāng)w省略時(shí),按輸出項(xiàng)的長度輸出,這是最方便的形式。2.非重複編輯描述符

(1)X編輯符。用於在輸入輸出的常數(shù)之間插入空格。它的一般格式是:

nX其中n是正數(shù),用於指明從當(dāng)前位置向右跳過n個(gè)字元位置。這裏n不能省略,即使n為1,也要寫成1X。(2)H編輯符。用於輸出一個(gè)字串。其一般格式是:

nHh1h2…h(huán)n其中n是正整數(shù),表示字串的長度,h1h2…h(huán)n為n個(gè)字元。(3)撇號(hào)編輯符。用於輸出一個(gè)字串。撇號(hào)編輯符和H編輯符作用相同,但撇號(hào)編輯符使用更為方便。(4)斜扛編輯符:結(jié)束當(dāng)前正在輸入或輸出的記錄,並轉(zhuǎn)入下一個(gè)記錄開始輸入輸出。3.縱向走紙控制符FORTRAN規(guī)定,將輸出記錄中的第一個(gè)字元作為縱向走紙控制符,這個(gè)字元不輸出,而從輸出紀(jì)錄的第二個(gè)字元開始輸出。常用的控制字元有:空格(走紙一行)、0(走紙二行)、1(換頁)、+(不走紙,返回到本行重迭列印)。五、輸入輸出項(xiàng)與編輯符的相互作用

(1)如果可重複編輯符的個(gè)數(shù)多於輸入輸出項(xiàng)的個(gè)數(shù),則多餘的編輯符不起作用。(2)如果可重複編輯符的個(gè)數(shù)少於輸入輸出項(xiàng)的個(gè)數(shù),則按順序用完最後一個(gè)可重複編輯符之後,再重複使用格式說明,但產(chǎn)生一個(gè)新記錄。(3)如果在編輯描述符表中包含有重複使用的編輯符組,則當(dāng)所有編輯符用完之後,返回到最右邊那個(gè)編輯符組(包括其重複係數(shù))開始使用。分析下列程式的輸出結(jié)果。

I=56J=1247K=5126WRITE(*,10)I,J,K10FORMAT(1X,2(I5,2X)/)END

輸出結(jié)果為:

□□□56□□□1247(空一行)5126總結(jié)

FORTRAN90提供的編輯描述符很多,這給初學(xué)者學(xué)習(xí)帶來了困難,但一些編輯描述符也有共同特點(diǎn),把握這些特點(diǎn)以後也就不難掌握了。可重複編輯描述符是用來決定對(duì)應(yīng)輸入輸出項(xiàng)的輸入輸出格式的,其中都有字段寬度w,而且對(duì)於輸入都是從輸入記錄中取w個(gè)字元,對(duì)於輸出都是在輸出記錄中輸出w個(gè)字元。但問題是,在輸入時(shí),取得的w個(gè)字元按什麼規(guī)則加工後傳送到對(duì)應(yīng)的輸入項(xiàng)。在輸出時(shí),當(dāng)輸出項(xiàng)實(shí)際包括的字元的個(gè)數(shù)和編輯符中所確定的字段寬度(對(duì)於數(shù)值型數(shù)據(jù)還有小數(shù)位數(shù))之間不相符時(shí),如何輸出?讀者可以分?jǐn)?shù)值型、邏輯型、字元型進(jìn)行總結(jié)。實(shí)驗(yàn)七格式輸入輸出

數(shù)組

數(shù)組的概念

數(shù)組的說明與引用

數(shù)組元素的存儲(chǔ)結(jié)構(gòu)

數(shù)組的輸入輸出

給數(shù)組賦初值

數(shù)組的應(yīng)用一、數(shù)組的概念思考一:?

計(jì)算一個(gè)班學(xué)生的平均成績。?

計(jì)算一個(gè)班學(xué)生的平均成績以及每個(gè)成績與平均成績的差。思考二:?

求100個(gè)學(xué)生成績中的最高分。將100個(gè)學(xué)生的成績按從高到低的順序排列。把具有相同類型的一批數(shù)據(jù)看成是一個(gè)整體,叫做數(shù)組。給數(shù)組取一個(gè)名字叫數(shù)組名。數(shù)組中的每一個(gè)數(shù)據(jù)稱為數(shù)組元素,它可通過順序號(hào)(下標(biāo))來區(qū)分。例如,一個(gè)班60名學(xué)生的成績組成一個(gè)數(shù)組G,又如某廠5個(gè)車間全年各季度的產(chǎn)量組成數(shù)組P。在這裏,區(qū)分G數(shù)組的元素需要一個(gè)順序號(hào),故稱為一維數(shù)組,而區(qū)分P數(shù)組的元素需要兩個(gè)順序號(hào),故稱為二維數(shù)組。二、數(shù)組的說明與引用1.?dāng)?shù)組說明的內(nèi)容程式中要使用任何一個(gè)數(shù)組都必須給予說明,即說明該數(shù)組的名字、類型、維數(shù)及大小。數(shù)組說明要用到數(shù)組說明符。它的一般形式是:數(shù)組名(維說明符[,維說明符]…)

維說明符的一般形式是:

[維下界:]維上界2.?dāng)?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)同時(shí)使用DIMENSION語句和類型說明語句說明數(shù)組一般格式為:類型符,DIMENSION(維說明符[,維說明符]…)::數(shù)組名[,數(shù)組名]…例如

REAL(8),DIMENSION(0:10)::A,B,CINTEGER,DIMENSION(4,5)::D,E

在說明數(shù)組時(shí),也可以在數(shù)組名後面給出維說明,這時(shí)以該數(shù)組名後面的維說明為準(zhǔn)。例如

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ù)組名(下標(biāo)運(yùn)算式[,下標(biāo)運(yùn)算式]…)思考:有下列程式片段:

REALLK(5,5)

LK(5,5)=12.5…兩個(gè)語句中都有L(5,5),它門的含義有何不同?對(duì)數(shù)組進(jìn)行整體操作INTEGER,DIMENSION(4,5)::A A=100 A(:,1:5:2)=470說明了4×5整型數(shù)組A,先將A的全部元素賦為100,再將A第1,3,5列元素賦為470。三元運(yùn)算式一般形式:初值:終值:步長三、數(shù)組元素的存儲(chǔ)結(jié)構(gòu)FORTRAN90規(guī)定,數(shù)組元素在內(nèi)存中是按列的順序連續(xù)存放的。就二維數(shù)組而言,存放時(shí)先存入第一列元素,然後第二列,…,直到全部元素存完為止。對(duì)於多維數(shù)組,首先改變第一個(gè)下標(biāo),其次改變第二個(gè)下標(biāo),直至最後一個(gè)。分析下列數(shù)組的存儲(chǔ)結(jié)構(gòu):

INTEGERA(50),B(3,4)REALC(3,2,3)四、數(shù)組的輸入輸出1.使用DO迴圈輸入輸出數(shù)組元素例如,利用二重迴圈實(shí)現(xiàn)二維數(shù)組的輸入輸出。2.以數(shù)組名作為輸入輸出項(xiàng)數(shù)組名作為輸入輸出項(xiàng)時(shí),數(shù)組元素按照它們?cè)趦?nèi)存中的排列順序輸入輸出。這種方式要特別注意數(shù)據(jù)的組織。3.使用隱DO迴圈進(jìn)行數(shù)組元素的輸入輸出隱DO迴圈的一般形式是:

(輸入/輸出表,i=e1,e2[,e3])其中i是隱DO迴圈變數(shù),e1、e2、e3是隱DO迴圈參數(shù)。例如WRITE(*,*)(3,4,I=1,3)等價(jià)於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í)驗(yàn)八數(shù)組(一)六、數(shù)組的應(yīng)用1.一維數(shù)組的應(yīng)用例1從鍵盤輸入10個(gè)整數(shù)存入一個(gè)一維數(shù)組,然後將數(shù)組最大值與第一個(gè)元素互換,最小值與最後一個(gè)元素互換,其餘元素不變。例2輸入100個(gè)字母,分別統(tǒng)計(jì)母音字母A、E、I、O、U出現(xiàn)的次數(shù)。例3將N個(gè)數(shù)排序。2.二維數(shù)組的應(yīng)用例1設(shè)有一個(gè)4×5的矩陣,求(1)矩陣所有元素之和及平均值。(2)保留所有大於平均值的元素,其餘元素清零。例2給定一個(gè)5×10矩陣,其元素互不相等,求每行絕對(duì)值最大的元素及其所在列號(hào)。例3矩陣乘法。已知m×n矩陣A和n×p矩陣B,試求它們乘積:C=A×B。例4求矩陣B50x50的範(fàn)數(shù)。矩陣範(fàn)數(shù)定義為它各行元素絕對(duì)值和的最大值,計(jì)算公式如下:總結(jié)1. 數(shù)組的概念、定義、引用。2. 關(guān)於數(shù)組的常用演算法:排序、查詢、矩陣乘法等。實(shí)驗(yàn)八數(shù)組(二)

順序結(jié)構(gòu)程式設(shè)計(jì)

FORTRAN常量

FORTRAN變數(shù)

FORTRAN內(nèi)部函數(shù)

FORTRAN算術(shù)運(yùn)算式

賦值語句

簡單輸入輸出語句

程式執(zhí)行控制語句

程式舉例一、FORTRAN常量

1.直接常量(1)整型常量(2)實(shí)型常量:小數(shù)形式和指數(shù)形式。分析:1E2,1.0E2,100.0,100的區(qū)別。2.符號(hào)常量所謂符號(hào)常量,是用一個(gè)識(shí)別字來代表一個(gè)常量。符號(hào)常量常用PARAMETER語句來定義。二、FORTRAN變數(shù)

1.變數(shù)的概念變數(shù)實(shí)質(zhì)上代表的是一個(gè)記憶體單元。分析下列語句:N=N+12.變數(shù)名變數(shù)的名字用識(shí)別字命名。在FORTRAN語言中,識(shí)別字只能由字母、數(shù)字和下劃線組成,且開頭只能是字母。3.變數(shù)的說明

(1)類型說明語句格式為:類型說明符變數(shù)名1,變數(shù)名2,…

類型說明符::變數(shù)名1,變數(shù)名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個(gè)字母開頭的變數(shù)被當(dāng)作整型變數(shù)。三、FORTRAN內(nèi)部函數(shù)內(nèi)部函數(shù)是指系統(tǒng)本身帶有的能完成一定功能的程式單位。

(1)FORTRAN內(nèi)部函數(shù),也稱為庫函數(shù)。在程式中可直接調(diào)用這些函數(shù),在完成程式的編譯後,通過連接,即將一組二進(jìn)位指令代入該函數(shù)出現(xiàn)的地方,與編譯好的目標(biāo)程式一起形成可執(zhí)行程式。(2)一個(gè)內(nèi)部函數(shù)要求一個(gè)或多個(gè)引數(shù)。(3)函數(shù)的引數(shù)是有類型的,函數(shù)的值也是有類型的。三、FORTRAN內(nèi)部函數(shù)

例:(1)求三個(gè)數(shù)X、Y、Z中的最大值可以表示為:MAX(X,Y,Z)。(2)判斷一個(gè)數(shù)自然數(shù)M是否為另外一個(gè)自然數(shù)N的因數(shù),通過MOD(N,M)是否為0可以判斷,如果為0,則說明M是N的因數(shù),否則說明N不能被M整除。四、FORTRAN算術(shù)運(yùn)算式

1.運(yùn)算符號(hào)與其優(yōu)先順序別+、-、*、/、**2.如何書寫運(yùn)算式

(1)運(yùn)算式中的所有字元都必須寫在一行。

(2)運(yùn)算式中常量的表示、變數(shù)的命名以及函數(shù)的引用要符合FORTRAN語言的規(guī)則。

(3)算術(shù)運(yùn)算式中,乘號(hào)不能省略。

(4)兩整數(shù)相除,結(jié)果為整數(shù),不會(huì)進(jìn)行四捨五入,而是把小數(shù)後面的部分切掉。分析:3*2/3與2/3*33.算術(shù)運(yùn)算式中類型轉(zhuǎn)化:將低級(jí)類型轉(zhuǎn)換成高級(jí)類型。

例(SIN(A)+COS(B))/(A*B)EXP(X*Y)*SQRT(X-Y)ABS(A**(-n))+LOG(B)1.0/N思考題

寫出FORTRAN運(yùn)算式(1) (2)(3)將兩位自然數(shù)的個(gè)位與十位互換,得到一個(gè)新的數(shù)。(4)將實(shí)數(shù)X四捨五入保留兩位小數(shù)。

實(shí)驗(yàn)一FORTRAN程式設(shè)計(jì)基礎(chǔ)

五、賦值語句

1.賦值語句的格式變數(shù)名=運(yùn)算式

2.執(zhí)行賦值語句時(shí)的類型轉(zhuǎn)換問題(1)左右兩邊類型相同,運(yùn)算完畢,直接賦值。(2)左右兩邊類型不同,右邊運(yùn)算式按原來規(guī)則計(jì)算,再轉(zhuǎn)換為與左邊變數(shù)相同的類型,然後將值賦給左邊的變數(shù)。六、簡單輸入輸出語句

1.表控輸入語句READ*,變數(shù)表READ(*,*)變數(shù)表例:READ*,X,Y,Z系統(tǒng)隱含指定的輸入設(shè)備表控輸入

六、簡單輸入輸出語句2.表控輸出語句

PRINT*,輸出項(xiàng)表WRITE(*,*)輸出列表例:PRINT*,”Y=”,X**2表控格式輸出

七、程式執(zhí)行控制語句

?

STOP語句?

PAUSE語句?

END語句八、程式舉例

例1已知

f(x)=x3+sin2x2+ln(x4+1)輸入引數(shù)的值,求出對(duì)應(yīng)的函數(shù)值。READ*,XF=X**3+SIN(X**2)**2+LOG(X**4+1)PRINT*,"F(X)=",FEND總結(jié)

1.編程的思路可以分三步來考慮:一是輸入原始數(shù)據(jù),二是對(duì)原始數(shù)據(jù)進(jìn)行處理,三是輸出處理結(jié)果。一般而言第一步和第三步比較簡單,往往需重點(diǎn)考慮第三步。在一開始學(xué)習(xí)程式設(shè)計(jì)時(shí),讀者就要養(yǎng)成好的習(xí)慣。2.注意運(yùn)算式的書寫方法。3.注意以下技巧:·

將實(shí)數(shù)取整?!?/p>

整除的判斷。分離整數(shù)的各位數(shù)字。思考題

已知,其中,求y的值。

實(shí)驗(yàn)二順序結(jié)構(gòu)程式設(shè)計(jì)

檔的概念檔的打開與關(guān)閉檔的讀寫檔應(yīng)用舉例

一、檔的概念

數(shù)據(jù)檔是存放在外部介質(zhì)上數(shù)據(jù)的集合。數(shù)據(jù)檔由記錄組成。它是數(shù)據(jù)傳遞的基本實(shí)體,是電腦記憶體與外部設(shè)備傳遞資訊的最小單位。記錄分為格式記錄和無格式記錄。格式記錄是一個(gè)字元的序列,在電腦內(nèi)部以ASCII碼形式存放,輸出時(shí)轉(zhuǎn)換成外部形式。無格式記錄是由二進(jìn)位值的序列組成。這些二進(jìn)位值是FORTRAN數(shù)據(jù)的內(nèi)部表示,輸入輸出時(shí)無需作格式轉(zhuǎn)換,其速度較快。根據(jù)記錄的數(shù)據(jù)存放形式可分為格式檔和無格式檔。由格式記錄組成的檔稱為格式檔,由無格式記錄組成的檔稱為無格式檔。根據(jù)檔的存放方式分為順序檔和直接檔。順序存取是指將檔的記錄按建立的時(shí)間先後順序依次存放在存儲(chǔ)介質(zhì)中。

直接存取,又稱隨機(jī)存取。它是指將檔記錄由程式指定的某一位置直接存取。順序檔的存取操作必須從頭到尾順序進(jìn)行。直接檔也稱為隨機(jī)檔,檔中的每一個(gè)記錄都有一個(gè)記錄號(hào),可以按記錄號(hào)對(duì)指定的記錄進(jìn)行讀寫。順序存取的檔中所有的記錄長度可以完全不同,而直接存取的檔中的記錄的長度由OPEN語句中的說明項(xiàng)“RECL=”指定,每個(gè)記錄長度相同。例以順序方式和直接方式將字元型、數(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二、檔的打開與關(guān)閉

1.OPEN語句

OPEN語句將設(shè)備號(hào)與檔案名聯(lián)繫起來,並指定檔的各項(xiàng)性質(zhì),其一般格式為:OPEN([UNIT=]ie[,FILE=ce][,ACCESS=ce][,FORM=ce][,RECL=ie])UNIT=ie是設(shè)備號(hào)說明,設(shè)備號(hào)是一個(gè)整型運(yùn)算式。

FILE=ce是指定檔案名。

ACCESS=ce是檔存取方式說明??捎?SEQUENTIAL'或'DIRECT',缺省'SEQUENTIAL'。

FORM=ce是記錄格式說明??捎?FORMATTED'或'UNFORMATTED'。對(duì)於順序檔隱含為有格式,對(duì)於隨機(jī)檔,隱含為無格式。RECL=ie說明記錄長度,僅用於直接檔。

2.CLOSE語句CLOSE語句解除設(shè)備號(hào)與檔的連接,即關(guān)閉該檔。一般格式是:

CLOSE([UNIT=]ie[,STATUS=ce])其中STATUS=ce說明文件被關(guān)閉後的狀態(tài):'KEEP'(保留)、"DELETE'(刪除),缺省狀態(tài)為'KEEP'。

三、檔的讀寫

1.READ語句READ([UNIT=]ie[,FMT=]格式說明[,REC=ie][,END=L][,ERR=L])輸入表REC=ie為記錄號(hào)說明,僅適用於直接存取檔。END=L為檔結(jié)束說明,遇到檔結(jié)束標(biāo)誌時(shí)轉(zhuǎn)向標(biāo)號(hào)為L的語句去執(zhí)行。WRITE語句中無此項(xiàng)。ERR=L為出錯(cuò)說明,當(dāng)產(chǎn)生錯(cuò)誤時(shí),轉(zhuǎn)向標(biāo)號(hào)為L的語句去執(zhí)行。

2.WRITE語句的一般形式WRITE([UNIT=]ie[,FMT=]格式說明[,REC=ie][,ERR=L])輸出表

3內(nèi)部檔內(nèi)部檔用字符串或字元數(shù)組作為單元標(biāo)識(shí),通過內(nèi)部檔,利用格式輸入輸出可以實(shí)現(xiàn)記憶體和外部字元表示之間值的相互轉(zhuǎn)換。(1)用READ語句將ASCII碼轉(zhuǎn)換成數(shù)值型、邏輯型、字元型。例分析下列程式的輸出結(jié)果。CHARACTERstr(2)*10REALn(2)LOGICALloDATAstr/'1.232','.TRUE.'/READ(str(1),200)n,m !字元型轉(zhuǎn)換成數(shù)值型READ(str(2),*)lo !字元型轉(zhuǎn)換成邏輯型200FORMAT(2F3.1,I3)WRITE(*,*)n,m,loEND(2)利用WRITE語句將數(shù)值型、邏輯型、字元型轉(zhuǎn)換成ASCII碼。例11.13假設(shè)磁片上有70個(gè)檔,檔的主文件名首字元都為“F”,後兩個(gè)字元為檔序號(hào)(如F01.DAT),編寫程式,實(shí)現(xiàn)根據(jù)輸入的序號(hào)打開相應(yīng)檔。CHARACTERfname*7WRITE(*,*)"請(qǐng)輸入兩位數(shù)的檔序號(hào):"READ(*,*)iWRITE(fname,200)I !合併字串200FORMAT('F',I2,'.DAT')OPEN(11,FILE=fname)WRITE(11,*)'Fortran90'END四、檔應(yīng)用舉例

例1建立一個(gè)有格式順序存取檔,存放某單位辦公用品資訊(如表所示)。

其中,品名、數(shù)量、單價(jià)由用戶輸入,金額由程式計(jì)算得出,然後存放到磁片檔中,檔案名為goods.dat。當(dāng)輸入的品名為“/”時(shí),結(jié)束輸入。

例2有9個(gè)班的學(xué)生成績,在磁片上建立9個(gè)存放學(xué)生成績的直接存取檔,檔案名分別為class1.dat、class2.dat、…,class9.dat,檔的記錄格式見表2。

選擇結(jié)構(gòu)程式設(shè)計(jì)

關(guān)係運(yùn)算和邏輯運(yùn)算塊IF選擇結(jié)構(gòu)塊CASE選擇結(jié)構(gòu)邏輯IF語句程式舉例

一、關(guān)係運(yùn)算和邏輯運(yùn)算

1.關(guān)係運(yùn)算(1)FORTRAN90共有6個(gè)關(guān)係運(yùn)算符:(2)關(guān)係運(yùn)算式運(yùn)算式1關(guān)係運(yùn)算符 運(yùn)算式2

例:MOD(I,2)/=1或MOD(I,2).NE.12.邏輯運(yùn)算(1)FORTRAN所用的基本邏輯運(yùn)算有:·

邏輯與運(yùn)算.AND.·

邏輯或運(yùn)算.OR.·

邏輯非運(yùn)算.NOT.·

邏輯等於運(yùn)算.EQV.·

邏輯不等運(yùn)算.NEQV.·

邏輯異或運(yùn)算.XOR.(2)邏輯運(yùn)算式邏輯值1邏輯運(yùn)算符邏輯值2例:

(a)直角坐標(biāo)中,第一象限的點(diǎn)

(b)X∈[-3,5](c)a<b<c二、塊IF選擇結(jié)構(gòu)

IF(邏輯運(yùn)算式)THEN

塊1 ELSE

塊2ENDIF例:判斷自然數(shù)M是否為N的因數(shù),是輸出“YES”,不是輸出“NO” IF(MOD(N,M)==0)THEN PRINT*,”YES” ELSE PRINT*,”NO” ENDIF3.多分支結(jié)構(gòu)IF(邏輯運(yùn)算式1)THEN

塊1ELSEIF(邏輯運(yùn)算式2)THEN

塊2 …ELSEIF(邏輯運(yùn)算式n)THEN

塊nELSE

塊n+1ENDIF例教材PAGE44第9題三、塊CASE選擇結(jié)構(gòu)

塊CASE選擇結(jié)構(gòu)一般格式為:SELECTCASE(運(yùn)算式)CASE(運(yùn)算式1)

塊1CASE(運(yùn)算式2)

塊2

……CASE(運(yùn)算式N)

塊NCASEDEFAULT

默認(rèn)塊ENDSELECT例編寫程式,輸入年月,輸出該月所對(duì)應(yīng)的天數(shù)。四、邏輯IF語句

邏輯IF語句格式:IF(條件運(yùn)算式)可執(zhí)行語句例:教材PAGE44第9題

五、程式舉例

例1輸入一個(gè)三位自然數(shù),判斷它是否為水仙花數(shù),所謂水仙花數(shù),是指各位數(shù)字的立方和等於該數(shù)本身的數(shù)如153=13+53+33為水仙花數(shù)。例2將學(xué)生成績分為優(yōu)(90~100分)、良(80~89)、中(70~79)、及格(60~69)、不及格五個(gè)檔次。從鍵盤輸入學(xué)生的成績,輸出對(duì)應(yīng)的檔次。

總結(jié)

選擇結(jié)構(gòu)程式設(shè)計(jì)注意兩個(gè)問題:一是如何表達(dá)條件?二是實(shí)現(xiàn)選擇結(jié)構(gòu)的語句。要注意關(guān)係運(yùn)算式和邏輯運(yùn)算式的書寫規(guī)則,注意各種語句的書寫格式、執(zhí)行過程以及應(yīng)用方法。

實(shí)驗(yàn)三選擇結(jié)構(gòu)程式設(shè)計(jì)

迴圈結(jié)構(gòu)程式設(shè)計(jì)

用DO語句實(shí)現(xiàn)迴圈

用DOWHILE語句實(shí)現(xiàn)迴圈

幾種迴圈組織方式的比較

迴圈的嵌套

迴圈結(jié)構(gòu)的程式設(shè)計(jì)方法

一、用DO語句實(shí)現(xiàn)迴圈

1.DO迴圈一般格式DOi=e1,e2[,e3]…(循環(huán)體)ENDDO其中i代表迴圈變數(shù),它可以是整型或?qū)嵭妥償?shù)。e1、e2、e3稱為迴圈參數(shù)運(yùn)算式,分別表示迴圈變數(shù)的初值、終值和步長。循環(huán)體是在迴圈過程中被重複執(zhí)行的語句組。例求5!2.DO迴圈執(zhí)行過程計(jì)算e1、e2、e3的值e1→i計(jì)算迴圈次數(shù)rr=0?執(zhí)行循環(huán)體i+e3→ir-1→rENDDO下麵的語句YNDO迴圈的執(zhí)行次數(shù)

r=MAX(INT((e2-e1+e3)/e3),0)說明?

循環(huán)體指的是DO語句與ENDDO語句之間的語句,因此循環(huán)體並不包括DO語句,執(zhí)行程式時(shí)DO語句也只執(zhí)行一次。如果迴圈參數(shù)運(yùn)算式e1、e2、e3中含有變數(shù),那麼即便在循環(huán)體中改變變數(shù)的值,迴圈參數(shù)並不改變。?

在循環(huán)體內(nèi)給迴圈變數(shù)賦值,是不允許的。思考下列程式的執(zhí)行結(jié)果DOK=1,10,2L=KENDDOPRINT*,K,LEND例1一個(gè)整數(shù)的因數(shù)(不包括該數(shù)本身)之和等於它本身,則稱該數(shù)為完數(shù)。例如6的因數(shù)有1,2,3,且1+2+3=6,因此6是完數(shù)。輸入一個(gè)整數(shù),判斷它是否完數(shù)例2

Fibonacci數(shù)列定義如下:F1=1F2=1Fn=Fn-1+Fn-2(n>2)求Fibonacci數(shù)列的前30項(xiàng)。

例3所謂“水仙花數(shù)”是指一個(gè)三位整數(shù),其各位數(shù)字立方和等於該數(shù)本身。例如,153就是一個(gè)水仙花數(shù)。輸出全部“水仙花數(shù)”。在[100,999]範(fàn)圍內(nèi),對(duì)所有整數(shù)逐一驗(yàn)證是否符合的條件,輸出符合條件的數(shù)。這種方法稱為窮舉法。

二、用DOWHILE語句實(shí)現(xiàn)迴圈對(duì)於迴圈次數(shù)確定的迴圈問題使用DO迴圈是比較方便的。但是,有些迴圈問題事先是無法確定迴圈次數(shù)的,只能通過給定的條件來決定是否繼續(xù)迴圈。這時(shí)可以使用DOWHILE語句來實(shí)現(xiàn)迴圈。1.DOWHILE迴圈的一般格式

DOWHILE(邏輯運(yùn)算式)

循環(huán)體

ENDDO例輸出所輸入的全部正數(shù),直到輸入負(fù)數(shù)或零,程式結(jié)束。

2.DOWHILE迴圈的執(zhí)行過程例輸入一個(gè)整數(shù),輸出其位數(shù)。執(zhí)行循環(huán)體ENDDO下麵的語句滿足迴圈條件?3.與迴圈有關(guān)的控制語句

?

EXIT語句?

CYCLE語句

CYCLE語句和EXIT語句的區(qū)別在於:CYCLE語句只結(jié)束本次迴圈,而不是終止整個(gè)迴圈的執(zhí)行。EXIT語句則是結(jié)束所在迴圈,跳出所在循環(huán)體。實(shí)驗(yàn)四迴圈結(jié)構(gòu)程式設(shè)計(jì)

三、幾種迴圈組織方式的比較實(shí)現(xiàn)迴圈結(jié)構(gòu)的三種語句,它們各具特點(diǎn)。一般而言,事先能確定迴圈次數(shù)的迴圈問題用DO迴圈,而事先不能確定迴圈次數(shù)的迴圈問題用DOWHILE迴圈。但這並不是絕對(duì)的,很多情況下它們是可以相互代替的。例輸入一個(gè)整數(shù)m,判斷是否素?cái)?shù)。?

用DO迴圈實(shí)現(xiàn)。?

用DOWHILE迴圈實(shí)現(xiàn)?

用DO迴圈和邏輯IF語句的嵌套實(shí)現(xiàn)。四、迴圈的嵌套如果一個(gè)迴圈結(jié)構(gòu)的循環(huán)體又包括一個(gè)迴圈結(jié)構(gòu),就稱為迴圈的嵌套,或稱為多重迴圈結(jié)構(gòu)。在例求[100,1000]以內(nèi)的全部素?cái)?shù)。

(1)判斷一個(gè)數(shù)是否素?cái)?shù)。

(2)利用窮舉法將判斷一個(gè)數(shù)是否素?cái)?shù)的程式段,對(duì)指定範(fàn)圍內(nèi)的每一個(gè)數(shù)都執(zhí)行一遍,即可求出某個(gè)範(fàn)圍內(nèi)的全部素?cái)?shù)。五、程式舉例例1已知某球從100m高度自由落下,落地後反復(fù)彈起。每次彈起的高度都是上次高度的一半。求此球第10次落地後反彈起的高度和球所經(jīng)過的路程

分析:用變數(shù)H來表示下落的高度,變數(shù)R來表示反彈的高度,變數(shù)S來表示小球經(jīng)過的路程,則H的初值為100,反彈高度R=H/2。彈起一次小球要經(jīng)過下降和上升兩個(gè)階段,小球經(jīng)過的路程為H+R,這個(gè)過程如圖所示。例2用牛頓迭代法求方程f(x)=2x3-4x2+3x-7=0在x=2.5附近的實(shí)根,直到滿足|xn-xn-1|≤10-6

為止。牛頓迭代公式為:注意:關(guān)於迭代初值x0的選取問題,理論上可以證明,只要選取滿足條件f(x0)f’’(x0)>0的初始值x0,就可保證牛頓迭代法收斂。當(dāng)然迭代初值不同,迭代的次數(shù)也就不同。

例3求f(x)在[a,b]上的定積分。分析:求一個(gè)函數(shù)f(x)在[a,b]上的定積分,其幾何意義就是求曲線y=f(x)與直線x=a,x=b,y=0所圍成的圖形的面積。為了求得圖形面積,先將區(qū)間[a,b]分成n等分,每個(gè)區(qū)間的寬度為h=(b-a)/n,對(duì)應(yīng)地將圖形分成n等分,每個(gè)小部分近似一個(gè)小曲邊梯形。近似求出每個(gè)小曲邊梯形面積,然後將n個(gè)小曲邊梯形的面積加起來,就得到總面積,即定積分的近似值。n越大,近似程度越高。這就是函數(shù)的數(shù)值積分方法。近似求每個(gè)小曲邊梯形的面積的常用方法(1)用小矩形代替小曲邊梯形,求出各個(gè)小矩形面積,然後累加。此種方法稱為矩形法。

(2)用小梯形代替小曲邊梯形,此種方法稱為梯形法。

(3)用拋物線代替該區(qū)間的f(x),然後求出拋物線與x=a+(i-1)h,x=a+ih,y=0圍成的小曲邊梯形面積,此種方法稱為辛普生法。以梯形法為例:

第一個(gè)小梯形的面積為:

第二個(gè)小梯形的面積為:

第i個(gè)小梯形的面積為:

第n個(gè)小梯形的面積為:本質(zhì)上講這是一個(gè)累加問題。例4某些分子和分母都是兩位數(shù)的真分?jǐn)?shù),分子的個(gè)位數(shù)與分母的十位數(shù)相同,而且奇怪的是:如果把該分?jǐn)?shù)的分子的個(gè)位數(shù)和分母的十位數(shù)同時(shí)去掉,所得結(jié)果正好等於原分?jǐn)?shù)約分後的結(jié)果。例如,試求所有滿足上述條件的真分?jǐn)?shù)。分析:我們先把條件歸納為下麵四點(diǎn):

(1)分子和分母原為兩位數(shù);

(2)真分?jǐn)?shù);

(3)分子的個(gè)位數(shù)與分母的十位數(shù)相同;

(4)把分子的個(gè)位數(shù)和分母的十位數(shù)同時(shí)劃去,分?jǐn)?shù)值不變??紤]到分子和分母原為兩位數(shù),可以把分子和分母看成從10到99這90個(gè)數(shù)中每次取兩個(gè)數(shù)的組合,對(duì)每一種組合驗(yàn)證條件(2)、(3)、(4)??偨Y(jié):如何編寫與調(diào)試程式

一、程式設(shè)計(jì)演算法“如何編寫程式”是學(xué)習(xí)高級(jí)語言程式設(shè)計(jì)的難點(diǎn),也是學(xué)習(xí)的重點(diǎn)。初學(xué)者普遍感到頭疼的問題是,碰到一個(gè)問題後不知從何下手,難以建立起明確的編程思路。根據(jù)教學(xué)基本要求,將本章程序設(shè)計(jì)問題分為累加與累乘問題、數(shù)字問題、數(shù)值計(jì)算等3類,每一類程式設(shè)計(jì)問題的思路如下:

1.累加與累乘問題

累加與累乘問題是很典型、最基本的一類演算法,實(shí)際應(yīng)用中很多問題都可以歸結(jié)為累加與累乘問題。演算法設(shè)計(jì)思路是:

(1)寫出循環(huán)體中需要重複執(zhí)行的部分。這一部分要確定兩個(gè)內(nèi)容:一是求每次要累加或累乘的數(shù);二是迭代關(guān)係S=S+X或P=P*X。

(2)確定終止迴圈的方式。一般有事先知道迴圈次數(shù)的計(jì)數(shù)迴圈和事先不知道迴圈次數(shù)的條件迴圈兩種方式,依具體情況而定。計(jì)數(shù)迴圈可用一個(gè)變數(shù)來計(jì)數(shù),當(dāng)達(dá)到一定迴圈次數(shù)後即退出迴圈。條件迴圈可根據(jù)具體情況確定一個(gè)迴圈的條件,當(dāng)迴圈條件不滿足時(shí)即退出迴圈。

(3)確定迴圈初始值,即第一次迴圈時(shí)迭代變數(shù)的值。

(4)重新檢查,以保證演算法正確無誤。一般而言,這一類問題的演算法流程圖基本框架如圖所示。

例1已知,分別求:

(1)當(dāng)N取1000時(shí),S的值。

(2)S<0.78時(shí)的最大N值和與此時(shí)N值對(duì)應(yīng)的S值。

(3)求S的值,直到累加項(xiàng)小於10-4為止。第一種情況下,屬於迴圈次數(shù)已知的迴圈結(jié)構(gòu),第二,三兩種情況下,屬於迴圈次數(shù)未知的迴圈結(jié)構(gòu),

2.?dāng)?shù)字問題

數(shù)字問題主要研究整數(shù)的一些自身性質(zhì)與相互關(guān)係。處理過程中常常要用到求餘數(shù)、分離數(shù)字及判斷整除等技巧,務(wù)必熟練掌握。

(1)判斷一個(gè)整數(shù)M能否被另一個(gè)整數(shù)N整除。方法1:若MOD(M,N)的值為0,則M能被N整除,否則不能。方法2:若M-INT(M/N)*N的值為0,則M能被N整除,否則不能。事實(shí)上,MOD(M,N)的函數(shù)值是M除以N的餘數(shù),正是按照運(yùn)算式M-INT(M/N)*N得到的計(jì)算結(jié)果。M-INT(M/N)*N也可以寫成M-M/N*N。

(2)分離自然數(shù)M各位的數(shù)字。

數(shù)字問題的提法往往是,求某一範(fàn)圍內(nèi)符合某種條件的數(shù)。這一類問題的演算法設(shè)計(jì)思路是:

(1)考慮判斷一個(gè)數(shù)是否滿足條件的演算法。有時(shí)侯可以直接用一個(gè)關(guān)係運(yùn)算式或邏輯運(yùn)算式來判斷,如判斷奇數(shù)、偶數(shù)。但更多的情況是無法直接用一個(gè)條件運(yùn)算式來判斷,這時(shí)可根據(jù)定義往往利用一個(gè)迴圈結(jié)構(gòu)來進(jìn)行判斷。

(2)在指定範(fàn)圍內(nèi)重複執(zhí)行“判斷一個(gè)數(shù)是否滿足條件”的程式段,從而求得指定範(fàn)圍內(nèi)全部符合條件的數(shù)。這裏用的方法是窮舉。一般而言,這一類問題的演算法流程圖基本框架如圖2所示。

例2若兩個(gè)素?cái)?shù)之差是2,則稱這兩個(gè)素?cái)?shù)是一對(duì)孿生數(shù)。例如,3和5是一對(duì)孿生數(shù)。求[2,500]區(qū)間內(nèi)(1)孿生數(shù)的對(duì)數(shù)。(2)最大的一對(duì)孿生數(shù)。

3.?dāng)?shù)值計(jì)算問題

數(shù)值計(jì)算是“計(jì)算方法”課程研究的對(duì)象,主要研究如何用電腦來求一些數(shù)學(xué)問題的數(shù)值解。目前數(shù)值計(jì)算方法已趨於完臻和成熟,許多問題都有了現(xiàn)成的演算法或軟體包。詳細(xì)內(nèi)容可參閱數(shù)值分析或計(jì)算方法方面的專著,或直接使用有關(guān)軟體。(1)用牛頓迭代法求方程f(x)=0在x=x0

附近的實(shí)根。直到∣xn-xn-1∣≤ε為止。

(2)求之值。二、常用程式調(diào)試技巧

設(shè)置中斷點(diǎn)輸出中間結(jié)果注釋語句的運(yùn)用

實(shí)驗(yàn)五常用演算法

指針

指針的定義與使用

動(dòng)態(tài)變數(shù)

指針與數(shù)組一、指針的定義與使用1.指針變數(shù)的定義格式指針變數(shù)的定義格式為:類型說明,POINTER::指針變數(shù)名1,指針變數(shù)名2,…其中類型說明可以是任何數(shù)據(jù)類型,如INTEGER、REAL等,它表示該指針?biāo)傅哪繕?biāo)變數(shù)類型。POINTER為指針定義的關(guān)鍵字。2.指針變數(shù)的使用例PROGRAMPOINTER1 INTEGER,POINTER::P INTEGER,TARGET::X READ*,X P=>X PRINT*,"X=",X PRINT*,"P=",P END輸入3,程式的輸出結(jié)果為:

X=3P=35PX指針變數(shù)的三種狀態(tài)①未定義狀態(tài),在程式開始時(shí),所有的指針都處於這種狀態(tài)。②空狀態(tài),此時(shí)指針還沒有作為任何對(duì)象的別名。在程式中,有時(shí)為了方便起見,可以讓指針指向一個(gè)空對(duì)象。其語句為:NULLIFY(指針變數(shù)名)。③關(guān)聯(lián)狀態(tài),此時(shí),指針已經(jīng)作為其他對(duì)象的別名。值得注意的是只有在第三種狀態(tài)時(shí),指針才能參與運(yùn)算,否則,或者編譯出錯(cuò),或者非法操作。二、動(dòng)態(tài)變數(shù)通過指針,可以先得到變數(shù)名,然後再利用ALLOCATE(P)函數(shù)可以動(dòng)態(tài)分配其空間,其中P為指針變數(shù)。例如

PROGRAMPOINTER3 INTEGER,POINTER::P

ALLOCATE(P) P=4 PRINT*,"P=",P END輸出結(jié)果為:P=4三、指針與數(shù)組指針數(shù)組定義格式為:類型說明,DIMENSION(:…:),POINTER::指針名其中類型說明可以為各種數(shù)據(jù)類型,如INTEGER、REAL等;DIMENSION(:…:)是數(shù)組的動(dòng)態(tài)說明標(biāo)識(shí),即不指定數(shù)組下標(biāo)界限,“:”個(gè)數(shù)等於數(shù)組維數(shù)。POINTER為指針說明標(biāo)識(shí)。例如REAL,DIMENSION(:),POINTER::XALLOCATE(X(20))第一個(gè)語句聲明了一個(gè)可以指向一維整型數(shù)組的指針X,第二個(gè)語句為該數(shù)組分配了20個(gè)單位的存儲(chǔ)空間。例輸入任意兩個(gè)數(shù),將它們及四則運(yùn)算結(jié)果存儲(chǔ)起來後,輸出。分析:利用指針,定義一個(gè)動(dòng)態(tài)數(shù)組X,用來存放輸入的數(shù)據(jù)和計(jì)算的結(jié)果,該數(shù)組的空間大小可以根據(jù)要存儲(chǔ)的數(shù)據(jù)個(gè)數(shù)動(dòng)態(tài)分配。總結(jié)指針是現(xiàn)代程式設(shè)計(jì)語言中一個(gè)非常重要的概念。FORTRAN90以前的FORTRAN版本,沒有指針這種數(shù)據(jù)類型,F(xiàn)ORTRAN90對(duì)其作了重大改進(jìn),引入了指針的概念。但是值得注意的是,F(xiàn)ORTRAN90的指針與C語言中的指針並不相同,因?yàn)樗鼇K不代表一個(gè)變數(shù)的地址,而是代表一個(gè)變數(shù)的別名,實(shí)質(zhì)上它相當(dāng)於C++裏的引用。四、鏈表指針用途之一是使得數(shù)據(jù)在電腦中可以按鏈接方式存儲(chǔ),而鏈接存儲(chǔ)中,最簡單是鏈表。順序存儲(chǔ)和鏈接存儲(chǔ)是數(shù)據(jù)的兩種最基本的存儲(chǔ)結(jié)構(gòu)。在順序存儲(chǔ)中,每個(gè)存儲(chǔ)結(jié)點(diǎn)只含有存儲(chǔ)元素本身的資訊,元素之間的邏輯關(guān)係是通過數(shù)組下標(biāo)位置簡單計(jì)算出來的。順序存儲(chǔ)最大的缺點(diǎn)是不利於數(shù)據(jù)的動(dòng)態(tài)變化,如向順序表中插入或刪除一個(gè)元素時(shí),需要大量移動(dòng)數(shù)據(jù),處理效率很低。在鏈?zhǔn)酱鎯?chǔ)中,每一個(gè)節(jié)點(diǎn)包含兩個(gè)部分:一個(gè)值和一個(gè)指向下一個(gè)節(jié)點(diǎn)的指針。10.4.1結(jié)點(diǎn)的定義TYPENODEINTEGERVALUETYPE(NODE),POINTER::NEXTENDTYPENODE10.4.2鏈表的基本操作鏈表的基本操作包括建表、插入、刪除、查找、更新、遍曆等例建立一個(gè)包含5個(gè)節(jié)點(diǎn)的鏈表,並輸出建表後的結(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)用等價(jià)語句與數(shù)據(jù)塊副程式內(nèi)部副程式模組一、語句函數(shù)1.語句函數(shù)的定義語句函數(shù)定義的一般格式是:

f(x1,x2,…,xn)=e2.語句函數(shù)的調(diào)用語句函數(shù)的調(diào)用形式和內(nèi)在函數(shù)完全相同。例1計(jì)算f(1)f(10)f(12)f(-5)的值。例2找出100~999之間的所有水仙花數(shù)。二、函數(shù)副程式1.函數(shù)副程式的定義函數(shù)副程式的定義格式是:[類型說明]FUNCTION函數(shù)名(虛參表)

函數(shù)體END函數(shù)名的命名方法與變數(shù)名相同,虛參可以是簡單變數(shù)和數(shù)組變數(shù),但不能是常數(shù)、數(shù)組元素、運(yùn)算式)例1求分析:上述三個(gè)數(shù)列的通項(xiàng)不同,求和範(fàn)圍也不同,用一個(gè)程式段難以同時(shí)計(jì)算三個(gè)數(shù)列的和,並且,因?yàn)闊o法用一個(gè)語句函數(shù)完成數(shù)列的求和計(jì)算,所以也無法使用語句函數(shù)來簡化程式設(shè)計(jì)??梢話裼煤瘮?shù)副程式來完成這個(gè)問題。設(shè)計(jì)一個(gè)求和的函數(shù)副程式SM(M,N,L),M、N分別為求和範(fàn)圍的上、下界,L反映數(shù)列通項(xiàng)的性質(zhì)。函數(shù)定義部分應(yīng)注意如下問題:(1)函數(shù)不能有同名虛參。虛參的類型可以在函數(shù)體中進(jìn)行說明,當(dāng)未對(duì)虛參類型進(jìn)行說明時(shí),虛參類型遵守I—N隱含規(guī)則。(2)函數(shù)定義部分中一定要有一個(gè)語句將函數(shù)值賦值給函數(shù)名,這種賦值語句的格式是:函數(shù)名=運(yùn)算式。注意不要在函數(shù)名後帶上括弧。2.函數(shù)副程式的調(diào)用調(diào)用一個(gè)函數(shù)副程式的方法和調(diào)用內(nèi)在函數(shù)和語句函數(shù)的方法基本相同。例2用函數(shù)副程式的方法設(shè)計(jì)一個(gè)程式,求50~100內(nèi)的所有素?cái)?shù)及其和。分析:設(shè)計(jì)一個(gè)函數(shù)副程式PRIME(N):主程序的任務(wù)是應(yīng)用PRIME函數(shù)副程式在50~100之間使用枚舉法求出那些使PRIME函數(shù)值為1的自然數(shù)並求這些數(shù)的和。思考:副程式的返回值分別為邏輯型、字元型時(shí),主、副程式程式做何修改?例2當(dāng)一個(gè)數(shù)各個(gè)數(shù)位的立方和等於這個(gè)數(shù)本身時(shí),稱這樣的數(shù)為水仙花數(shù)(如153=1**3+5**3+3**3,所以,153是一個(gè)水仙花數(shù)。)編程:求100~999之間的水仙花數(shù)。分析:設(shè)計(jì)一個(gè)函數(shù)副程式NUM(N,I),當(dāng)I=100時(shí),函數(shù)NUM返回N的百位上的數(shù);當(dāng)I=10時(shí),NUM返回N的十位上的數(shù),I=1時(shí),NUM返回N的個(gè)位上的數(shù)。主程序中調(diào)用NUM函數(shù)在100~999之間找出所有水仙花數(shù)。三、子例行程式1.子例行副程式的定義子例行副程式定義格式是:SUBROUTINE副程式名(虛參表)

子例行程式體END副程式的命名方法與變數(shù)相同。虛參由變數(shù)、數(shù)組名(不能是數(shù)組元素,常數(shù)、運(yùn)算式)充當(dāng),當(dāng)虛參多於一個(gè)時(shí),各虛參間用逗號(hào)分隔,當(dāng)沒有虛參時(shí),子例行程式名後的一對(duì)括弧可以省略。子例行程式的設(shè)計(jì)方法和函數(shù)副程式相同,但因?yàn)槠涿譀]有值,所以不能有對(duì)子例行程式的名字賦值的語句。2.子例行副程式的調(diào)用子例行程式的調(diào)用格式是:CALL子例行程式名(實(shí)參表)其實(shí)參的類型與函數(shù)副程式相同。和函數(shù)副程式的調(diào)用不同的是,子例行副程式的調(diào)用是一個(gè)獨(dú)立的語句。例1用子例行程式的方法求上面的s1,s2,s3。例2設(shè)計(jì)一個(gè)子例行程式程式,求任意矩陣的轉(zhuǎn)置矩陣。實(shí)驗(yàn)九副程式(一)四、程式單元之間的數(shù)據(jù)傳遞1.簡單變數(shù)作為虛參(1)簡單變數(shù)或數(shù)組元素作為實(shí)參。系統(tǒng)將實(shí)參與虛參安排同一個(gè)存儲(chǔ)單元,對(duì)虛參的任何改變都作用在對(duì)應(yīng)的實(shí)參上,因而調(diào)用一個(gè)副程式(包括函數(shù)副程式和子例行程式)時(shí),實(shí)參的值有可能改變。(2)常量或運(yùn)算式作為實(shí)參。首先計(jì)算運(yùn)算式的值(如果實(shí)參為運(yùn)算式時(shí)),然後將該值賦值給對(duì)應(yīng)的虛參。此種情況下,副程式中不能改變與常量(或運(yùn)算式)對(duì)應(yīng)的虛參的值。2.?dāng)?shù)組名作為虛參當(dāng)虛參是數(shù)組名時(shí),對(duì)應(yīng)的實(shí)參可以是與虛參類型相同的數(shù)組名或數(shù)組元素,並且實(shí)參與虛參共用一片連續(xù)的存儲(chǔ)單元。例:寫出下列程式的執(zhí)行結(jié)果 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.副程式名作為虛參例設(shè)有三個(gè)連續(xù)函數(shù):四、程式單元之間的數(shù)據(jù)傳遞4.變數(shù)的作用域(1)變數(shù)存儲(chǔ)區(qū)的分配與釋放(2)變數(shù)作用域(3)副程式中變數(shù)的存儲(chǔ)屬性:SAVE屬性,STATIC屬性,AUTOMATIC屬性變數(shù)的存儲(chǔ)屬性的說明方法是:存儲(chǔ)屬性變數(shù)名表例如AUTOMATICA,B,CINTEGERSAVEX,Y

例分析:定義一個(gè)函數(shù),實(shí)現(xiàn)的功能相當(dāng)於f(a)/(f(b)*f(c)),函數(shù)有四個(gè)參數(shù)(FUN,A,B,C),其中FUN是虛擬函數(shù)名,A、B、C為引數(shù),第一次調(diào)用時(shí)把內(nèi)部函數(shù)名SIN傳送給FUN,第二次調(diào)用時(shí)把內(nèi)部函數(shù)名COS傳送給FUN。五、遞歸調(diào)用1.遞歸的概念2.遞歸函數(shù)遞歸函數(shù)的定義格式是:RECURSIVEFUNCTION函數(shù)名(虛參表)RESULT(變數(shù)名)

調(diào)用該函數(shù)本身

…END例1設(shè)計(jì)一個(gè)計(jì)算N!的函數(shù)副程式。函數(shù)副程式如下:RECURSIVEFUNCTIONFAC(N)RESULT(FAC1)IF(N==1)THENFAC1=1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論