版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
FORTRAN語言
--FORTRAN77結(jié)構(gòu)化程序設(shè)計(jì)講師:徐紅波Email:第七章數(shù)組
數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),每個(gè)數(shù)組代表一組具有同一類型的變量,把數(shù)組中所包含的變量稱為數(shù)組元素。在程序中通過說明語句聲明數(shù)組。例如:
INTEGERA(1:6)
每個(gè)變量都在內(nèi)存中占有一個(gè)獨(dú)立的存儲單元。例如:
INTEGERA1,A2,A3,A4,A5,A6
這六個(gè)變量所代表的六個(gè)存儲單元在內(nèi)存中的位置是彼此獨(dú)立、互不相關(guān)的。 從終端讀入六個(gè)數(shù)放到這六個(gè)存儲單元中,則需要用以下輸入語句:
READ(*,*)A1,A2,A3,A4,A5,A6
從這六個(gè)數(shù)中找出最小數(shù),則需要以下一系列語句:
MIN=A1 IF(A2.LT.MIN)MIN=A2 IF(A3.LT.MIN)MIN=A3 IF(A4.LT.MIN)MIN=A4 IF(A5.LT.MIN)MIN=A5 IF(A6.LT.MIN)MIN=A6
數(shù)組是由一組相同類型的變量組成的,每個(gè)元素當(dāng)然也在內(nèi)存中占用一個(gè)存儲單元。與A1、A2、…、A6不同的是,A數(shù)組的這六個(gè)存儲單元在內(nèi)存中是一個(gè)接著一個(gè)排列、彼此緊密相關(guān)的。數(shù)組名A是六個(gè)存儲單元的總名字。 同一個(gè)數(shù)組中的各個(gè)元素用不同的下標(biāo)來區(qū)別,它們的表示形式為A(1)、A(2)、A(3)、A(4)、A(5)、A(6),下標(biāo)放在緊跟在數(shù)組名后的一對圓括號內(nèi)。在內(nèi)存中A(2)元素的位置必定緊挨在A(1)之后,A(3)元素的位置緊挨在A(2)之后,其它依次類推。 只要給出數(shù)組名和下標(biāo)值就可以確定該數(shù)組元素在內(nèi)存中的位置從而對其進(jìn)行存取。在程序中通過改變下標(biāo)值的方法來引用數(shù)組中不同的存儲單元。 例如,可以通過以下語句從終端給前面說明的A數(shù)組中的六個(gè)變量賦值:
DO10,I=1,6 READ(*,*)A(I) 10 CONTINUE
通過以下語句找出它們之中最小的那個(gè)數(shù):
IP=1 MIN=A(IP) DO20,I=2,6 IF(A(I).LT.MIN)THEN IP=I MIN=A(IP) ENDIF20 CONTINUE
通過以上例子可以看到,數(shù)組的使用將使程序變得簡潔、靈活、易讀,它是程序設(shè)計(jì)中一種十分有用的工具。使用數(shù)組可以使許多復(fù)雜的算法得以實(shí)現(xiàn),這些算法用簡單變量是無法實(shí)現(xiàn)的。7.1數(shù)組的說明和數(shù)組元素的引用
使用數(shù)組必須在類型說明語句或在DIMENSION語句中先對數(shù)組進(jìn)行說明。 說明數(shù)組的一般形式如下:
類型說明或DIMENSION數(shù)組說明符,…
其中數(shù)組說明符的形式如下:
數(shù)組名(維說明符,…)
維說明符的組成形式如下:
下標(biāo)下界:下標(biāo)上界7.1.1用類型語句說明數(shù)組
數(shù)組通常在類型說明語句中說明:
REALIA(1:10),ND(80:99),W(1:3,1:2) INTEGERNUM(-1:0),A(0:2,0:1,0:3)7.1.2用DIMENSION語句說明數(shù)組
在上一小節(jié)中說明的IA、ND、W、NUM、A數(shù)組也可以用以下語句說明:
DIMENSIONIA(10),ND(80:99),W(3,2) DIMENSIONNUM(-1:0),A(0:2,0:1,0:3) INTEGERA REALIA,ND DIMENSION語句用來說明數(shù)組,數(shù)組的類型則根據(jù)數(shù)組名的第一個(gè)字母由隱含類型規(guī)則來決定,否則應(yīng)該在類型語句中對數(shù)組名進(jìn)行顯示說明。例如,以上IA、ND是實(shí)型數(shù)組,所以應(yīng)該在REAL語句中說明,而W則可以不在REAL語句中說明,因?yàn)榘措[含類型規(guī)則,名字W的隱含類型就是實(shí)型;A數(shù)組(整型)應(yīng)該在INTEGER語句中說明,而NUM數(shù)組則可以不必另行說明。7.1.3數(shù)組元素的引用數(shù)組元素的引用形式:
數(shù)組名(下標(biāo),...)7.2數(shù)組的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)7.3數(shù)據(jù)的輸入和輸出
假定有以下數(shù)組說明語句:
REALW(3,2) INTEGERA(10)
將以A數(shù)組和W數(shù)組為例介紹對數(shù)組進(jìn)行輸入和輸出操作的三種方式。7.3.1利用DO循環(huán)對數(shù)組進(jìn)行輸入和輸出
從終端鍵盤輸入十個(gè)數(shù),按順序逐個(gè)放入A(1)到A(10)中
DO10,I=1,10 READ(*,*)A(I)10 CONTINUE
把A(1)、A(3)、A(5)、A(7)、A(9)輸出到終端屏幕上。
DO20I=1,10,2 WRITE(*,*)A(I)20 CONTINUE
雙重循環(huán)將從終端讀入數(shù)據(jù)賦給W數(shù)組中各元素
DO10I=1,3 DO20J=1,2 READ(*,*)W(I,J)20 CONTINUE10 CONTINUE
按列的順序輸出W數(shù)組中的元素值:
DO30,I=1,2 DO40,J=1,3 WRITE(*,*)W(J,I)40 CONTINUE30 CONTINUE
按A數(shù)組元素排列的逆序打印數(shù)組元素的值:
N=10 DO20,I=N,1,-1 WRITE(*,*)A(I)20 CONTINUE
打印出A數(shù)組中前五個(gè)元素的值:
N=5 DO20,I=1,N WRITE(*,*)A(I)20 CONTINUE
每行輸出五個(gè)元素的值: DO20,I=1,10,5 WRITE(*,*)A(I),A(I+1),A(I+2),A(I+3),A(I+4)20 CONTINUE7.3.2在輸入輸出語句中用數(shù)組名來輸入輸出整個(gè)數(shù)組 FORTRAN規(guī)定在輸入輸出語句中可以出現(xiàn)數(shù)組名。如:
WRITE(*,*)A
相當(dāng)于: WRITE(*,*)A(1),A(2),A(3),A(4),…,A(10)
輸入輸出語句中的數(shù)組名可以是任意維數(shù)的。例如以上說明的3*2的W數(shù)組是二維的,可以用以下語句輸出W數(shù)組:
WRITE(*,*)W
相當(dāng)于:
WRITE(*,*)W(1,1),W(2,1),W(3,1),W(1,2),W(2,2),W(3,2)7.3.3在輸入輸出語句中使用隱含DO循環(huán)
以下輸出語句的輸出項(xiàng)中包含了一個(gè)隱含的DO循環(huán),它將輸出A數(shù)組中A(1)到A(5)元素。
N=5 WRITE(*,*)(A(I),I=1,N)
相當(dāng)于:
WRITE(*,*)A(1),A(2),A(3),A(4),A(5)
下面的輸出語句將輸出A數(shù)組中下標(biāo)為奇數(shù)的五個(gè)元素的值:
WRITE(*,*)(A(I),I=1,10,2)
相當(dāng)于:
WRITE(*,*)A(1),A(3),A(5),A(7),A(9)
下面的輸出語句在每次循環(huán)時(shí)將同時(shí)輸出下標(biāo)的值:
WRITE(*,*)(I,A(I),I=1,10,2)
隱含DO循環(huán)可以多層嵌套,例如下面的輸出語句將首先輸出W數(shù)組第一行中的元素,然后輸出第二行、第三行的元素。
WRITE(*,*)((W(I,J),J=1,2),I=1,3)
由以上所舉例子可以看出,利用隱含DO循環(huán)時(shí),輸入輸出的次序和格式可由程序員來控制。 隱含DO循環(huán)通常用于對數(shù)組的輸入或輸出,但也可用于對一般變量的輸入或輸出。例如:
WRITE(*,*)(A,B,I=1,3)
相當(dāng)于:
WRITE(*,*)A,B,A,B,A,B
又如以下語句:
WRITE(*,*)(I,I=1,10)
相當(dāng)于:
WRITE(*,*)1,2,3,4,5,6,7,8,9,107.4給數(shù)組賦初值(使用DATA語句)
通過DATA語句給變量或數(shù)組賦初值。例如:
DATAA,B,C/-1.0,-1.0,-10/
或者寫成:
DATAA/-1.0/,B/-10/,C/-1.0/ DATA語句的一般形式如下:
DATA變量表/初值表/,變量表/初值表/,…
變量表中可以出現(xiàn)變量名、數(shù)組名、數(shù)組元素名、隱含DO循環(huán);初值表中只允許出現(xiàn)常量,不允許出現(xiàn)任何形式的表達(dá)式。變量表中的變量個(gè)數(shù)與對應(yīng)初值表中常量的個(gè)數(shù)必須相同,類型按從左到右的順序一一對應(yīng)相同。變量表中變量之間、初值表中初值之間都用逗號隔開。
對于以上所舉的DATA語句,由于A、B、C三個(gè)變量都賦初值-1.0,所以可簡寫如下:
DATAA,B,C/3*-1.0/
當(dāng)在DATA語句中的變量表中出現(xiàn)數(shù)組名時(shí),初值表中常量的個(gè)數(shù)必須與元素的個(gè)數(shù)相同。例如:
CHARACTER*6CHN(10) DATACHN/10*’abcdef‘/
給數(shù)組中部分元素置初值,可以在變量表中利用隱含DO循環(huán)。例如:
INTEGERNUM(1000) DATA(NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/
DATA語句是非執(zhí)行語句,可以出現(xiàn)在程序中說明語句之后、END語句之前的任意行上。程序在編譯期間給變量賦初值,因?yàn)槌绦蛑幸粋€(gè)變量只能有一個(gè)初值,如果程序中有多個(gè)DATA語句給同一個(gè)變量賦初值,則以最后一條DATA語句所賦初值為準(zhǔn)。在程序執(zhí)行期間DATA語句不起任何作用。 以下程序中給I所賦的實(shí)際初值為10:
DATAI/0/ WRITE(*,*)‘1.I=’,I I=I+1 DATAI/10/ WRITE(*,*)‘2.I=’,I END7.5程序舉例
[例7.1]輸入10名學(xué)生的學(xué)號和一門課的考試成績,把高于平均分的學(xué)生學(xué)號和成績打印出來 PARAMETER(NUMST=10) CHARACTER*7NUM(NUMST) DIMENSIONS(NUMST) REALAVE,SUM READ(*,*)(NUM(I),S(I),I=1,NUMST) SUM=0.0 DO10,I=1,NUMST,1 SUM=SUM+S(I)10 CONTINUE AVE=SUM/NUMST DO20,I=1,NUMST,1 IF(S(I).GE.AVE)WRITE(*,*)NUM(I),S(I)20 CONTINUE END
[例7.2]輸入10名學(xué)生一門課的考試成績,統(tǒng)計(jì)各分?jǐn)?shù)段的人數(shù)
用數(shù)組的元素作為各分?jǐn)?shù)段的計(jì)數(shù)器。凡是0-9分用下標(biāo)為0的計(jì)數(shù)器統(tǒng)計(jì),11-19分用下標(biāo)為1的計(jì)數(shù)器統(tǒng)計(jì),故成績與數(shù)組下標(biāo)的關(guān)系如下:
READ(*,*)S K=S/10 C(K)=C(K)+1
PARAMETER(NS=10)
INTEGERCOUNTER(0:10) DIMENSIONS(NS) DATACOUNTER/11*0/ READ(*,*)(S(I),I=1,NS) DO10,I=1,NS,1 IF(S(I).LE.100.AND.S(I).GE.0)THEN K=S(I)/10 COUNTER(K)=COUNTER(K)+1 ENDIF10 CONTINUEWRITE(*,*)COUNTER END[例7.3]順序查找 PARAMETER(NA=10) INTEGERA(NA),X,P
DATAA/55,62,93,87,10,23,38,71,35,91/ READ(*,*)X WRITE(*,*)(A(I),I=1,NA) P=1 DO10WHILE(X.NE.A(P).AND.P.LT.NA) P=P+110 CONTINUE IF(X.EQ.A(P))THEN WRITE(*,*)X,P ELSE WRITE(*,*)X,‘Couldnotbefound’ ENDIF END[例7.4]折半查找序號 A數(shù)組元素值 查找x(x=68)1 10<-TOP2 173 204 225 316 447 518 59<-MID9 68 <-TOP <-TOP <-TOP<-BOT<-MID10 73 <-MID11 89 <-BOT12 95 <-MID13 12014 13315 137<-BOT <-BOT (a)(b)(c) (d) PARAMETER(NA=15) INTEGERA(NA),TOP,BOT,MID,X LOGICALFIND DATAA/10,17,20,22,31,44,51,59,68,73,89,95,120,133,137/ READ(*,*)X FIND=.FALSE. TOP=1 BOT=NA DO10WHILE(TOP.LE.BOT.AND..NOT.FIND) MID=(TOP+BOT)/2 IF(X.EQ.A(MID))THEN FIND=.TRUE. WRITE(*,*)X,‘Hasbefound,on‘,MID,‘thposition’ ELSEIF(X.LT.A(MID))THEN BOT=MID-1 ELSE TOP=MID+1 ENDIF10 CONTINUE IF(.NOT.FIND)WRITE(*,*)X,‘Hasnotbefound’ END[例7.5]把數(shù)組中所有的數(shù)都向后移動(dòng)一個(gè)位置,最后一個(gè)數(shù)移到最前面 PARAMETER(NA=10) INTEGERA(NA),X DATAA/55,62,93,87,10,23,38,71,35,91/ WRITE(*,*)(A(I),I=1,NA) X=A(NA) DO10,I=NA-1,1,-1 A(I+1)=A(I)10 CONTINUE
A(1)=X WRITE(*,*)(A(I),I=1,NA) END[例7.6]把一個(gè)數(shù)插到有序數(shù)列中,插入后數(shù)列仍然有序
INTEGERA(20),X DATA(A(I),I=1,10)/14,25,28,33,45,56,68,72,81,95/
WRITE(*,*)‘Enteranumbertoinsert:’ READ(*,*)X NA=10 WRITE(*,*)(A(I),I=1,NA) P=1 DO10WHILE(X.GT.A(P).AND.P.LE.NA)
P=P+110 CONTINUE DO20,I=NA,P,-1 A(I+1)=A(I)20 CONTINUE A(P)=X NA=NA+1
WRITE(*,*)(A(I),I=1,NA) END[例7.7]從存有N個(gè)字符的字符數(shù)組中刪去指定的字符 PARAMETER(NC=20) CHARACTERC(NC),CH INTEGERP,N DATAC/NC*’‘/ READ(*,*)N READ(*,*)(C(I),I=1,N)
READ(*,*)CH N0=N
P=1 DO10WHILE(P.LE.N) DO20WHILE(CH.NE.C(P).AND.P.LE.N) P=P+120 CONTINUE IF(CH.EQ.C(P))THEN DO30I=P,N-1 C(I)=C(I+1)30 CONTINUE N=N-1 ENDIF10 CONTINUE IF(N.NE.N0)THEN WRITE(*,*)(C(I),I=1,N) ELSE WRITE(*,*)CH ENDIF END
[例7.8]選擇法排序 PARAMETER(N=8) INTEGERA(N),P DATAA/15,8,4,13,6,10,17,1/ WRITE(*,*)(A(I),I=1,N) DO10J=1,N-1 P=J DO20I=J+1,N IF(A(I).LT.A(P))THEN P=I ENDIF20 CONTINUE K=A(J) A(J)=A(P) A(P)=K10 CONTINUE WRITE(*,*)(A(I),I=1,N) END[例7.9]輸入若干名學(xué)生的學(xué)號和四門課的考試成績,計(jì)算出每位學(xué)生的平均分,打印出成績表(學(xué)生人數(shù)不多于35人) PARAMETER(NR=35,NC=4) REALS(NR,NC),AVE(NR) CHARACTER*6NUM(NR) N=1
READ(*,*)NUM(N),(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職(連鎖門店運(yùn)營)門店日常管理階段測試試題及答案
- 2025年中職(樂器制造與維護(hù))二胡制作工藝階段測試題及答案
- 2025年中職(汽車運(yùn)用與維修)汽車底盤構(gòu)造試題及答案
- 2025年大學(xué)藥品與醫(yī)療器械(醫(yī)療器械檢測)試題及答案
- 2025年高職衛(wèi)星通信技術(shù)(衛(wèi)星通信應(yīng)用)試題及答案
- 2025年大學(xué)紡織服裝類(紡織性能測試)試題及答案
- 中國課件介紹
- 養(yǎng)老院老人請假審批制度
- 養(yǎng)老院老人生活?yuàn)蕵坊顒?dòng)組織人員行為規(guī)范制度
- 養(yǎng)老院老人康復(fù)理療師激勵(lì)制度
- 第六單元課外古詩詞誦讀《南安軍》說課稿 2023-2024學(xué)年統(tǒng)編版語文九年級下冊
- 食堂2023年工作總結(jié)及2024年工作計(jì)劃(匯報(bào)課件)
- 機(jī)器學(xué)習(xí)課件周志華Chap08集成學(xué)習(xí)
- 殯儀館鮮花采購?fù)稑?biāo)方案
- T-GDWCA 0035-2018 HDMI 連接線標(biāo)準(zhǔn)規(guī)范
- 面板堆石壩面板滑模結(jié)構(gòu)設(shè)計(jì)
- 初中語文新課程標(biāo)準(zhǔn)與解讀課件
- 無人機(jī)裝調(diào)檢修工培訓(xùn)計(jì)劃及大綱
- GB/T 3683-2023橡膠軟管及軟管組合件油基或水基流體適用的鋼絲編織增強(qiáng)液壓型規(guī)范
- 春よ、來い(春天來了)高木綾子演奏長笛曲譜鋼琴伴奏
- ARJ21機(jī)型理論知識考試題庫(匯總版)
評論
0/150
提交評論