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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

復(fù)型數(shù)據(jù)

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

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

整型變量的說(shuō)明:INTEGER[(類別參數(shù)值)][[,屬性列表]::]變量列表其中類別參數(shù)值取1,2,4,變量的屬性是指被說(shuō)明對(duì)象的所屬性質(zhì)。一個(gè)對(duì)象被說(shuō)明具有某一屬性時(shí),就使該對(duì)象具有某種附加功能、特殊的使用方式與適用范圍。屬性的種類有很多,這里介紹兩種最常見屬性的說(shuō)明格式: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)超過(guò)了類別參數(shù)為2的整數(shù)的取值范圍,只能采用類別參數(shù)為4整數(shù)。如果數(shù)超過(guò)類別參數(shù)為4的整數(shù)取值范圍,就只能采用實(shí)型數(shù)據(jù)來(lái)處理。二、實(shí)型數(shù)據(jù)

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

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

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

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

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

求字符串長(zhǎng)度函數(shù)(LEN和LEN_TRIM)?

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

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

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

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

格式輸入輸出

輸入輸出概述

格式輸入輸出語(yǔ)句

格式說(shuō)明語(yǔ)句

常用的編輯描述符

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

一、輸入輸出概述

輸入輸出是指在計(jì)算機(jī)內(nèi)存與外部設(shè)備之間傳送數(shù)據(jù)的過(guò)程。從外部設(shè)備將數(shù)據(jù)傳送到計(jì)算機(jī)內(nèi)存稱為輸入。將計(jì)算機(jī)內(nèi)部的數(shù)據(jù)傳送到外部設(shè)備稱為輸出。要順利地傳送數(shù)據(jù),一般應(yīng)在輸入輸出語(yǔ)句中給計(jì)算機(jī)提供三方面的信息:

(1)通過(guò)什么設(shè)備來(lái)進(jìn)行輸入輸出。

(2)采用什么樣的格式來(lái)進(jìn)行輸入輸出。

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

1.格式輸出v

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

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

PRINT'(1X,2F7.3)',X,Y(3)格式說(shuō)明符是格式語(yǔ)句(FORMAT)的語(yǔ)句標(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è)無(wú)符號(hào)整數(shù),還可以是星號(hào)*。*表示系統(tǒng)預(yù)先約定的外部設(shè)備,一般為顯示器。2.格式輸入格式輸入語(yǔ)句是指READ語(yǔ)句,它有兩種形式:READf,輸入項(xiàng)READ(u,f)輸入項(xiàng)其中f指明了輸入所用的格式。它有以下三種形式:

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

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

格式說(shuō)明語(yǔ)句的一般格式是:

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

1.可重復(fù)編輯描述符

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

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

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

rIw其中r是重復(fù)系數(shù),為1時(shí)可以省略。w表示字段寬度,即與該編輯描述符對(duì)應(yīng)的輸入輸出項(xiàng)所占用的字符個(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為重復(fù)系數(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)占一位。復(fù)型數(shù)據(jù)編輯描述符復(fù)型數(shù)據(jù)沒有專門的編輯符。對(duì)復(fù)型數(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)的長(zhǎ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)同字符賦值語(yǔ)句的規(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)的長(zhǎng)度輸出,這是最方便的形式。2.非重復(fù)編輯描述符

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

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

nHh1h2…h(huán)n其中n是正整數(shù),表示字符串的長(zhǎng)度,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(換頁(yè))、+(不走紙,返回到本行重迭打印)。五、輸入輸出項(xiàng)與編輯符的相互作用

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

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

輸出結(jié)果為:

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

FORTRAN90提供的編輯描述符很多,這給初學(xué)者學(xué)習(xí)帶來(lái)了困難,但一些編輯描述符也有共同特點(diǎn),把握這些特點(diǎn)以后也就不難掌握了。可重復(fù)編輯描述符是用來(lái)決定對(duì)應(yīng)輸入輸出項(xiàng)的輸入輸出格式的,其中都有字段寬度w,而且對(duì)于輸入都是從輸入記錄中取w個(gè)字符,對(duì)于輸出都是在輸出記錄中輸出w個(gè)字符。但問(wèn)題是,在輸入時(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ù)組的說(shuō)明與引用

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

數(shù)組的輸入輸出

給數(shù)組賦初值

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

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

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

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

維說(shuō)明符的一般形式是:

[維下界:]維上界2.?dāng)?shù)組說(shuō)明(1)用DIMENSION語(yǔ)句說(shuō)明數(shù)組

DIMENSION數(shù)組說(shuō)明符[,數(shù)組說(shuō)明符]…例如DIMENSIONJU(20),NAME(-10:10,1:2)REALJUCHARACTERNAME(2)用類型說(shuō)明語(yǔ)句說(shuō)明數(shù)組類型符數(shù)組說(shuō)明符[,數(shù)組說(shuō)明符]…例如

CHARACTER*6CH(-10:10,5:9)*8REALKK(8)REAL(8)SOLUTION(30)(3)同時(shí)使用DIMENSION語(yǔ)句和類型說(shuō)明語(yǔ)句說(shuō)明數(shù)組一般格式為:類型符,DIMENSION(維說(shuō)明符[,維說(shuō)明符]…)::數(shù)組名[,數(shù)組名]…例如

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

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

REAL,DIMENSION(0:10)::A,B(20),C(4,5,3)說(shuō)明A為A(0:10),而B,C分別為B(2)和C(4,5,3)3.數(shù)組元素的引用一般形式是:數(shù)組名(下標(biāo)表達(dá)式[,下標(biāo)表達(dá)式]…)思考:有下列程序片段:

REALLK(5,5)

LK(5,5)=12.5…兩個(gè)語(yǔ)句中都有L(5,5),它門的含義有何不同?對(duì)數(shù)組進(jìn)行整體操作INTEGER,DIMENSION(4,5)::A A=100 A(:,1:5:2)=470說(shuō)明了4×5整型數(shù)組A,先將A的全部元素賦為100,再將A第1,3,5列元素賦為470。三元表達(dá)式一般形式:初值:終值:步長(zhǎng)三、數(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循環(huán)輸入輸出數(shù)組元素例如,利用二重循環(huán)實(shí)現(xiàn)二維數(shù)組的輸入輸出。2.以數(shù)組名作為輸入輸出項(xiàng)數(shù)組名作為輸入輸出項(xiàng)時(shí),數(shù)組元素按照它們?cè)趦?nèi)存中的排列順序輸入輸出。這種方式要特別注意數(shù)據(jù)的組織。3.使用隱DO循環(huán)進(jì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)等價(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語(yǔ)句賦初值一般格式:DATA項(xiàng)目表/常量表/[[,]項(xiàng)目表/常量表/]…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的范數(shù)。矩陣范數(shù)定義為它各行元素絕對(duì)值和的最大值,計(jì)算公式如下:總結(jié)1. 數(shù)組的概念、定義、引用。2. 關(guān)于數(shù)組的常用算法:排序、查詢、矩陣乘法等。實(shí)驗(yàn)八數(shù)組(二)

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

FORTRAN常量

FORTRAN變量

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

FORTRAN算術(shù)表達(dá)式

賦值語(yǔ)句

簡(jiǎn)單輸入輸出語(yǔ)句

程序執(zhí)行控制語(yǔ)句

程序舉例一、FORTRAN常量

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

1.變量的概念變量實(shí)質(zhì)上代表的是一個(gè)內(nèi)存單元。分析下列語(yǔ)句:N=N+12.變量名變量的名字用標(biāo)識(shí)符命名。在FORTRAN語(yǔ)言中,標(biāo)識(shí)符只能由字母、數(shù)字和下劃線組成,且開頭只能是字母。3.變量的說(shuō)明

(1)類型說(shuō)明語(yǔ)句格式為:類型說(shuō)明符變量名1,變量名2,…

類型說(shuō)明符::變量名1,變量名2,…例如

INTEGERX,YREAL::SCORE,HEIGTH=16.5(2)隱含說(shuō)明語(yǔ)句IMPLICIT格式為:IMPLICIT類型說(shuō)明(字母表)例如IMPLICITINTEGER(A,C,T-V)(3)隱含約定I-N規(guī)則:FORTRAN語(yǔ)言規(guī)定以I,J,K,L,M,N6個(gè)字母開頭的變量被當(dāng)作整型變量。三、FORTRAN內(nèi)部函數(shù)內(nèi)部函數(shù)是指系統(tǒng)本身帶有的能完成一定功能的程序單位。

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

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

1.運(yùn)算符號(hào)與其優(yōu)先級(jí)別+、-、*、/、**2.如何書寫表達(dá)式

(1)表達(dá)式中的所有字符都必須寫在一行。

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

(3)算術(shù)表達(dá)式中,乘號(hào)不能省略。

(4)兩整數(shù)相除,結(jié)果為整數(shù),不會(huì)進(jìn)行四舍五入,而是把小數(shù)后面的部分切掉。分析:3*2/3與2/3*33.算術(shù)表達(dá)式中類型轉(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表達(dá)式(1) (2)(3)將兩位自然數(shù)的個(gè)位與十位互換,得到一個(gè)新的數(shù)。(4)將實(shí)數(shù)X四舍五入保留兩位小數(shù)。

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

五、賦值語(yǔ)句

1.賦值語(yǔ)句的格式變量名=表達(dá)式

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

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

六、簡(jiǎn)單輸入輸出語(yǔ)句2.表控輸出語(yǔ)句

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

七、程序執(zhí)行控制語(yǔ)句

?

STOP語(yǔ)句?

PAUSE語(yǔ)句?

END語(yǔ)句八、程序舉例

例1已知

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

1.編程的思路可以分三步來(lái)考慮:一是輸入原始數(shù)據(jù),二是對(duì)原始數(shù)據(jù)進(jìn)行處理,三是輸出處理結(jié)果。一般而言第一步和第三步比較簡(jiǎn)單,往往需重點(diǎn)考慮第三步。在一開始學(xué)習(xí)程序設(shè)計(jì)時(shí),讀者就要養(yǎng)成好的習(xí)慣。2.注意表達(dá)式的書寫方法。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í)體,是計(jì)算機(jī)內(nèi)存與外部設(shè)備傳遞信息的最小單位。記錄分為格式記錄和無(wú)格式記錄。格式記錄是一個(gè)字符的序列,在計(jì)算機(jī)內(nèi)部以ASCII碼形式存放,輸出時(shí)轉(zhuǎn)換成外部形式。無(wú)格式記錄是由二進(jìn)制值的序列組成。這些二進(jìn)制值是FORTRAN數(shù)據(jù)的內(nèi)部表示,輸入輸出時(shí)無(wú)需作格式轉(zhuǎn)換,其速度較快。根據(jù)記錄的數(shù)據(jù)存放形式可分為格式文件和無(wú)格式文件。由格式記錄組成的文件稱為格式文件,由無(wú)格式記錄組成的文件稱為無(wú)格式文件。根據(jù)文件的存放方式分為順序文件和直接文件。順序存取是指將文件的記錄按建立的時(shí)間先后順序依次存放在存儲(chǔ)介質(zhì)中。

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

OPEN語(yǔ)句將設(shè)備號(hào)與文件名聯(lián)系起來(lái),并指定文件的各項(xiàng)性質(zhì),其一般格式為:OPEN([UNIT=]ie[,FILE=ce][,ACCESS=ce][,FORM=ce][,RECL=ie])UNIT=ie是設(shè)備號(hào)說(shuō)明,設(shè)備號(hào)是一個(gè)整型表達(dá)式。

FILE=ce是指定文件名。

ACCESS=ce是文件存取方式說(shuō)明。可用'SEQUENTIAL'或'DIRECT',缺省'SEQUENTIAL'。

FORM=ce是記錄格式說(shuō)明??捎?FORMATTED'或'UNFORMATTED'。對(duì)于順序文件隱含為有格式,對(duì)于隨機(jī)文件,隱含為無(wú)格式。RECL=ie說(shuō)明記錄長(zhǎng)度,僅用于直接文件。

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

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

三、文件的讀寫

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

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

3內(nèi)部文件內(nèi)部文件用字符串或字符數(shù)組作為單元標(biāo)識(shí),通過(guò)內(nèi)部文件,利用格式輸入輸出可以實(shí)現(xiàn)內(nèi)存和外部字符表示之間值的相互轉(zhuǎn)換。(1)用READ語(yǔ)句將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語(yǔ)句將數(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é)生成績(jī),在磁盤上建立9個(gè)存放學(xué)生成績(jī)的直接存取文件,文件名分別為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語(yǔ)句程序舉例

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

1.關(guān)系運(yùn)算(1)FORTRAN90共有6個(gè)關(guān)系運(yùn)算符:(2)關(guān)系表達(dá)式表達(dá)式1關(guān)系運(yùn)算符 表達(dá)式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)邏輯表達(dá)式邏輯值1邏輯運(yùn)算符邏輯值2例:

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

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

IF(邏輯表達(dá)式)THEN

塊1 ELSE

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

塊1ELSEIF(邏輯表達(dá)式2)THEN

塊2 …ELSEIF(邏輯表達(dá)式n)THEN

塊nELSE

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

塊CASE選擇結(jié)構(gòu)一般格式為:SELECTCASE(表達(dá)式)CASE(表達(dá)式1)

塊1CASE(表達(dá)式2)

塊2

……CASE(表達(dá)式N)

塊NCASEDEFAULT

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

邏輯IF語(yǔ)句格式:IF(條件表達(dá)式)可執(zhí)行語(yǔ)句例:教材PAGE44第9題

五、程序舉例

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

總結(jié)

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

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

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

用DO語(yǔ)句實(shí)現(xiàn)循環(huán)

用DOWHILE語(yǔ)句實(shí)現(xiàn)循環(huán)

幾種循環(huán)組織方式的比較

循環(huán)的嵌套

循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)方法

一、用DO語(yǔ)句實(shí)現(xiàn)循環(huán)

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

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

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

在循環(huán)體內(nèi)給循環(huán)變量賦值,是不允許的。思考下列程序的執(zhí)行結(jié)果DOK=1,10,2L=KENDDOPRINT*,K,LEND例1一個(gè)整數(shù)的因子(不包括該數(shù)本身)之和等于它本身,則稱該數(shù)為完數(shù)。例如6的因子有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]范圍內(nèi),對(duì)所有整數(shù)逐一驗(yàn)證是否符合的條件,輸出符合條件的數(shù)。這種方法稱為窮舉法。

二、用DOWHILE語(yǔ)句實(shí)現(xiàn)循環(huán)對(duì)于循環(huán)次數(shù)確定的循環(huán)問(wèn)題使用DO循環(huán)是比較方便的。但是,有些循環(huán)問(wèn)題事先是無(wú)法確定循環(huán)次數(shù)的,只能通過(guò)給定的條件來(lái)決定是否繼續(xù)循環(huán)。這時(shí)可以使用DOWHILE語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán)。1.DOWHILE循環(huán)的一般格式

DOWHILE(邏輯表達(dá)式)

循環(huán)體

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

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

?

EXIT語(yǔ)句?

CYCLE語(yǔ)句

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

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

用DO循環(huán)實(shí)現(xiàn)。?

用DOWHILE循環(huán)實(shí)現(xiàn)?

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

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

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

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

為止。牛頓迭代公式為:注意:關(guān)于迭代初值x0的選取問(wèn)題,理論上可以證明,只要選取滿足條件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è)小曲邊梯形的面積加起來(lái),就得到總面積,即定積分的近似值。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è)累加問(wèn)題。例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í)語(yǔ)言程序設(shè)計(jì)的難點(diǎn),也是學(xué)習(xí)的重點(diǎn)。初學(xué)者普遍感到頭疼的問(wèn)題是,碰到一個(gè)問(wèn)題后不知從何下手,難以建立起明確的編程思路。根據(jù)教學(xué)基本要求,將本章程序設(shè)計(jì)問(wèn)題分為累加與累乘問(wèn)題、數(shù)字問(wèn)題、數(shù)值計(jì)算等3類,每一類程序設(shè)計(jì)問(wèn)題的思路如下:

1.累加與累乘問(wèn)題

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

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

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

(3)確定循環(huán)初始值,即第一次循環(huán)時(shí)迭代變量的值。

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

例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為止。第一種情況下,屬于循環(huán)次數(shù)已知的循環(huán)結(jié)構(gòu),第二,三兩種情況下,屬于循環(huán)次數(shù)未知的循環(huán)結(jié)構(gòu),

2.?dāng)?shù)字問(wèn)題

數(shù)字問(wèn)題主要研究整數(shù)的一些自身性質(zhì)與相互關(guān)系。處理過(guò)程中常常要用到求余數(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ù),正是按照表達(dá)式M-INT(M/N)*N得到的計(jì)算結(jié)果。M-INT(M/N)*N也可以寫成M-M/N*N。

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

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

(1)考慮判斷一個(gè)數(shù)是否滿足條件的算法。有時(shí)侯可以直接用一個(gè)關(guān)系表達(dá)式或邏輯表達(dá)式來(lái)判斷,如判斷奇數(shù)、偶數(shù)。但更多的情況是無(wú)法直接用一個(gè)條件表達(dá)式來(lái)判斷,這時(shí)可根據(jù)定義往往利用一個(gè)循環(huán)結(jié)構(gòu)來(lái)進(jìn)行判斷。

(2)在指定范圍內(nèi)重復(fù)執(zhí)行“判斷一個(gè)數(shù)是否滿足條件”的程序段,從而求得指定范圍內(nèi)全部符合條件的數(shù)。這里用的方法是窮舉。一般而言,這一類問(wèn)題的算法流程圖基本框架如圖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ì)算問(wèn)題

數(shù)值計(jì)算是“計(jì)算方法”課程研究的對(duì)象,主要研究如何用計(jì)算機(jī)來(lái)求一些數(shù)學(xué)問(wèn)題的數(shù)值解。目前數(shù)值計(jì)算方法已趨于完臻和成熟,許多問(wèn)題都有了現(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ǔ)句的運(yùn)用

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

指針

指針的定義與使用

動(dòng)態(tài)變量

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

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

PROGRAMPOINTER3 INTEGER,POINTER::P

ALLOCATE(P) P=4 PRINT*,"P=",P END輸出結(jié)果為:P=4三、指針與數(shù)組指針數(shù)組定義格式為:類型說(shuō)明,DIMENSION(:…:),POINTER::指針名其中類型說(shuō)明可以為各種數(shù)據(jù)類型,如INTEGER、REAL等;DIMENSION(:…:)是數(shù)組的動(dòng)態(tài)說(shuō)明標(biāo)識(shí),即不指定數(shù)組下標(biāo)界限,“:”個(gè)數(shù)等于數(shù)組維數(shù)。POINTER為指針說(shuō)明標(biāo)識(shí)。例如REAL,DIMENSION(:),POINTER::XALLOCATE(X(20))第一個(gè)語(yǔ)句聲明了一個(gè)可以指向一維整型數(shù)組的指針X,第二個(gè)語(yǔ)句為該數(shù)組分配了20個(gè)單位的存儲(chǔ)空間。例輸入任意兩個(gè)數(shù),將它們及四則運(yùn)算結(jié)果存儲(chǔ)起來(lái)后,輸出。分析:利用指針,定義一個(gè)動(dòng)態(tài)數(shù)組X,用來(lái)存放輸入的數(shù)據(jù)和計(jì)算的結(jié)果,該數(shù)組的空間大小可以根據(jù)要存儲(chǔ)的數(shù)據(jù)個(gè)數(shù)動(dòng)態(tài)分配??偨Y(jié)指針是現(xiàn)代程序設(shè)計(jì)語(yǔ)言中一個(gè)非常重要的概念。FORTRAN90以前的FORTRAN版本,沒有指針這種數(shù)據(jù)類型,F(xiàn)ORTRAN90對(duì)其作了重大改進(jìn),引入了指針的概念。但是值得注意的是,F(xiàn)ORTRAN90的指針與C語(yǔ)言中的指針并不相同,因?yàn)樗⒉淮硪粋€(gè)變量的地址,而是代表一個(gè)變量的別名,實(shí)質(zhì)上它相當(dāng)于C++里的引用。四、鏈表指針用途之一是使得數(shù)據(jù)在計(jì)算機(jī)中可以按鏈接方式存儲(chǔ),而鏈接存儲(chǔ)中,最簡(jiǎn)單是鏈表。順序存儲(chǔ)和鏈接存儲(chǔ)是數(shù)據(jù)的兩種最基本的存儲(chǔ)結(jié)構(gòu)。在順序存儲(chǔ)中,每個(gè)存儲(chǔ)結(jié)點(diǎn)只含有存儲(chǔ)元素本身的信息,元素之間的邏輯關(guān)系是通過(guò)數(shù)組下標(biāo)位置簡(jiǎn)單計(jì)算出來(lái)的。順序存儲(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

子程序語(yǔ)句函數(shù)函數(shù)子程序子例行程序程序單元之間的數(shù)據(jù)傳遞遞歸調(diào)用等價(jià)語(yǔ)句與數(shù)據(jù)塊子程序內(nèi)部子程序模塊一、語(yǔ)句函數(shù)1.語(yǔ)句函數(shù)的定義語(yǔ)句函數(shù)定義的一般格式是:

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

函數(shù)體END函數(shù)名的命名方法與變量名相同,虛參可以是簡(jiǎn)單變量和數(shù)組變量,但不能是常數(shù)、數(shù)組元素、表達(dá)式)例1求分析:上述三個(gè)數(shù)列的通項(xiàng)不同,求和范圍也不同,用一個(gè)程序段難以同時(shí)計(jì)算三個(gè)數(shù)列的和,并且,因?yàn)闊o(wú)法用一個(gè)語(yǔ)句函數(shù)完成數(shù)列的求和計(jì)算,所以也無(wú)法使用語(yǔ)句函數(shù)來(lái)簡(jiǎn)化程序設(shè)計(jì)??梢圆捎煤瘮?shù)子程序來(lái)完成這個(gè)問(wèn)題。設(shè)計(jì)一個(gè)求和的函數(shù)子程序SM(M,N,L),M、N分別為求和范圍的上、下界,L反映數(shù)列通項(xiàng)的性質(zhì)。函數(shù)定義部分應(yīng)注意如下問(wèn)題:(1)函數(shù)不能有同名虛參。虛參的類型可以在函數(shù)體中進(jìn)行說(shuō)明,當(dāng)未對(duì)虛參類型進(jìn)行說(shuō)明時(shí),虛參類型遵守I—N隱含規(guī)則。(2)函數(shù)定義部分中一定要有一個(gè)語(yǔ)句將函數(shù)值賦值給函數(shù)名,這種賦值語(yǔ)句的格式是:函數(shù)名=表達(dá)式。注意不要在函數(shù)名后帶上括弧。2.函數(shù)子程序的調(diào)用調(diào)用一個(gè)函數(shù)子程序的方法和調(diào)用內(nèi)在函數(shù)和語(yǔ)句函數(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ù)、表達(dá)式)充當(dāng),當(dāng)虛參多于一個(gè)時(shí),各虛參間用逗號(hào)分隔,當(dāng)沒有虛參時(shí),子例行程序名后的一對(duì)括弧可以省略。子例行程序的設(shè)計(jì)方法和函數(shù)子程序相同,但因?yàn)槠涿譀]有值,所以不能有對(duì)子例行程序的名字賦值的語(yǔ)句。2.子例行子程序的調(diào)用子例行程序的調(diào)用格式是:CALL子例行程序名(實(shí)參表)其實(shí)參的類型與函數(shù)子程序相同。和函數(shù)子程序的調(diào)用不同的是,子例行子程序的調(diào)用是一個(gè)獨(dú)立的語(yǔ)句。例1用子例行程序的方法求上面的s1,s2,s3。例2設(shè)計(jì)一個(gè)子例行程序程序,求任意矩陣的轉(zhuǎn)置矩陣。實(shí)驗(yàn)九子程序(一)四、程序單元之間的數(shù)據(jù)傳遞1.簡(jiǎn)單變量作為虛參(1)簡(jiǎn)單變量或數(shù)組元素作為實(shí)參。系統(tǒng)將實(shí)參與虛參安排同一個(gè)存儲(chǔ)單元,對(duì)虛參的任何改變都作用在對(duì)應(yīng)的實(shí)參上,因而調(diào)用一個(gè)子程序(包括函數(shù)子程序和子例行程序)時(shí),實(shí)參的值有可能改變。(2)常量或表達(dá)式作為實(shí)參。首先計(jì)算表達(dá)式的值(如果實(shí)參為表達(dá)式時(shí)),然后將該值賦值給對(duì)應(yīng)的虛參。此種情況下,子程序中不能改變與常量(或表達(dá)式)對(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.變量的作用域(1)變量存儲(chǔ)區(qū)的分配與釋放(2)變量作用域(3)子程序中變量的存儲(chǔ)屬性:SAVE屬性,STATIC屬性,AUTOMATIC屬性變量的存儲(chǔ)屬性的說(shuō)明方法是:存儲(chǔ)屬性變量名表例如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為自變量,第一次調(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(變量名)

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論