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è),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Fortran程序設(shè)計(jì)第一部分 Fortran基礎(chǔ)知識(shí)第一章 前言本章學(xué)習(xí)目標(biāo)了解Fortran的合法字符了解Fortran語(yǔ)句和Fortran程序基本結(jié)構(gòu)了解可執(zhí)行和不可執(zhí)行語(yǔ)句之間的區(qū)別了解常量與變量的區(qū)別理解INTEGER、REAL和CHARACTER數(shù)據(jù)類型的區(qū)別掌握默認(rèn)和顯式類型說明的不同,理解為什么總該使用顯式類型說明了解Fortran賦值語(yǔ)句的結(jié)構(gòu)掌握在使用時(shí)整數(shù)運(yùn)算和實(shí)數(shù)運(yùn)算的不同了解Fortran操作符號(hào)的運(yùn)算級(jí)別掌握Fortran怎么計(jì)算混合運(yùn)算表達(dá)式掌握什么是內(nèi)置函數(shù)和怎樣使用它們了解怎樣使用表控輸入和輸出語(yǔ)句了解為什么總是使用IMPLICIT NONE語(yǔ)句很重要簡(jiǎn)單地說

2、:學(xué)完本章,你應(yīng)該可以編寫除函數(shù)以外的簡(jiǎn)單程序1.1 Fortran字符集 正如英語(yǔ)的學(xué)習(xí)從abc開始,F(xiàn)ortran的學(xué)習(xí)也是從字符集開始符號(hào)個(gè)數(shù)類型取值26大寫字母A-Z26小寫字母a-z10數(shù)字0-91下劃線_5算術(shù)符號(hào)+ - * / *17其它各種符號(hào)().=,$:!”%&;?和空格和C、JAVA語(yǔ)言不同,F(xiàn)ortran語(yǔ)言部分大小寫1.2 句法程序由一系列語(yǔ)句構(gòu)成,語(yǔ)句有兩種基本類型可執(zhí)行語(yǔ)句(executable)描述程序執(zhí)行時(shí)的行為,比如加減乘除等等不可執(zhí)行語(yǔ)句(unexecutable)對(duì)程序中的相應(yīng)操作進(jìn)行必要的說明1.2 句法每行最長(zhǎng)132個(gè)字符寫不下可以換行,一條語(yǔ)句最長(zhǎng)

3、可以40行語(yǔ)句標(biāo)號(hào)現(xiàn)代Fortran程序很少用語(yǔ)句標(biāo)號(hào)在程序里面必須是唯一的注釋(comment)!開始到行末的字符都不會(huì)被編譯output=input1+input2 ! Sum the inputsoutput=input1 & +input2 !Sum the inputs100 output=input1 & !Sum the inputs & +input2 1.3 程序結(jié)構(gòu)PROGRAM my_first_program!Purpose:!To illustrate some of the basic feature of a Fortran program.! Declare t

4、he variables used in this program.INTEGER : i,j,k! All variables are integers!Get two values to store in variables i and jWRITE (*,*) Enter the numbers to multiply:READ (*,*) i,j! Multiply the number togetherk = i*j! Write out the result.WRITE (*,*) Result =,k!Finish up.STOPEND PROGRAM my_first_prog

5、ram例 聲明部分聲明由不可執(zhí)行語(yǔ)句組成位于程序開頭定義程序名和程序引用的數(shù)據(jù)以及變量類型PROGRAM語(yǔ)句用來指定程序的名字程序名最長(zhǎng)可達(dá)31個(gè)字符由字母、數(shù)字和下劃線任意組合而成第一個(gè)字符必須是字母如果存在PROGRAM語(yǔ)句,它必須是程序的第一個(gè)語(yǔ)句行例程中出現(xiàn)的另外一條聲明語(yǔ)句是INTEGER類型聲明語(yǔ)句,關(guān)于這條語(yǔ)句在后續(xù)的課程中我會(huì)詳細(xì)介紹1.3.2 執(zhí)行部分 1.3.3終止部分例程中標(biāo)注紅色的是執(zhí)行部分,可以看到有多條執(zhí)行語(yǔ)句所有的這些語(yǔ)句我將會(huì)在后續(xù)課程中逐一詳解終止部分由STOP和END PROGRAM語(yǔ)句組成編譯器會(huì)自動(dòng)在END PROGRAM之前生成一條ST

6、OP語(yǔ)句,所以,STOP語(yǔ)句經(jīng)常是可以省掉的1.3.4 程序書寫格式Fortran程序的基本書寫原則保留字都大寫變量用小寫常量名用大寫名字中的下劃線出現(xiàn)在兩個(gè)單詞之間書寫原則是為了閱讀的方便你可以采用自己的書寫風(fēng)格統(tǒng)一的風(fēng)格和始終保持這種風(fēng)格有助于編程效率的提高1.4 常數(shù)與變量 常數(shù)(constant,也稱常量)是一個(gè)數(shù)據(jù)對(duì)象,定義在程序執(zhí)行之前,且在程序執(zhí)行期間取值不可改變,當(dāng)編譯器編譯到常數(shù)時(shí),它將常數(shù)放置在一個(gè)位置已知的內(nèi)存空間,無論何時(shí)程序使用該常數(shù),就引用該存儲(chǔ)位置 變量(variable)是一個(gè)數(shù)據(jù)對(duì)象,它的值在執(zhí)行期間發(fā)生改變,編譯器編譯遇到變量時(shí),會(huì)給變量預(yù)留一個(gè)位置已知的存

7、儲(chǔ)空間,在執(zhí)行期間使用到該變量時(shí),就引用這個(gè)存儲(chǔ)位置。變量可以在執(zhí)行前初始化,也可以不初始化1.4.1 起名的規(guī)則常量和變量實(shí)際上是內(nèi)存中特定位置的標(biāo)號(hào),方便程序員記憶和使用名字可以長(zhǎng)達(dá)31個(gè)字符(Fortran95的標(biāo)準(zhǔn))字母、數(shù)字、下劃線任意組合第一個(gè)字符必須是字母有效名:distancetimeyear2013my_book_name無效名:2monththis_is_a_very_long_variable_namemoney$_this_is_illegalPS:盡量給常量和變量起有意義的名字1.5 數(shù)據(jù)類型 Fortran內(nèi)置數(shù)據(jù)類型INTEGERREALCOMPLEXLOGICA

8、LCHARACTER還可以自定義數(shù)據(jù)類型這一章我們學(xué)習(xí)INTEGER/REAL/CHARACTER這三種1.5.1 整數(shù)類型整數(shù)類型是不含小數(shù)點(diǎn)的任意數(shù)據(jù)如果是正數(shù),可以帶+號(hào)也可以不帶計(jì)算機(jī)能表示的整數(shù)長(zhǎng)度是有限的,在下一章我們會(huì)討論這個(gè)問題1.5.2 實(shí)數(shù)類型實(shí)數(shù)類型是含有小數(shù)部分的數(shù)據(jù)實(shí)數(shù)可以用指數(shù)記數(shù)法表示,+1.0E-3指數(shù)部分只能是整數(shù)用實(shí)數(shù)表示時(shí),實(shí)數(shù)分兩成尾數(shù)和指數(shù)兩部分,計(jì)算機(jī)分配用來存放尾數(shù)的二進(jìn)制位數(shù)決定了實(shí)數(shù)的精度,分配給存儲(chǔ)指數(shù)的位數(shù)決定了實(shí)數(shù)的表示范圍,第二章我們會(huì)詳細(xì)討論這個(gè)問題有效的實(shí)數(shù)表示:2E10.12E+1-12.0E-1無效的實(shí)數(shù)表示:

9、-12.0E 字符類型字符類型由字符串組成字符常數(shù)是由單引號(hào)或雙引號(hào)括住的字符串在單引號(hào)或雙引號(hào)之間括起來的部分稱為字符文本,字符文本可以采用任意計(jì)算機(jī)可以表示的字符,而不受Fortran字符集限制如果字符文本中含有單引號(hào)該怎么辦?方法一、如果字符串是用單引號(hào)括起來的,那么可以用連續(xù)兩個(gè)單引號(hào)表示方法二、直接用雙引號(hào)括起來類似的辦法可解決雙引號(hào)問題Im fine. Im fine. “Im fine.” “who are you?” “who are you?” “”who are you?” 1.5.4 默認(rèn)的變量類型 如果在程序中沒有聲明變量類型,那么編譯器就會(huì)用默認(rèn)的規(guī)則

10、來確定變量類型任何以字母I,J,K,L,M,N開頭的變量名假定為INTEGER其它字母開頭的變量名則假定為REAL1.5.5 顯式的變量類型變量的類型可以在程序的聲明部分顯式地聲明 INTEGER : var1 ,var2,var3,REAL : var1 ,var2,var3,CHARACTER(len=) : var1 ,var2,var3,類型聲明語(yǔ)句是不可執(zhí)行語(yǔ)句必須在PGROGRAM之后,第一條可執(zhí)行語(yǔ)句之前CHRACTER類型不是默認(rèn)類型,所以所有的字符變量必須顯式聲明聲明語(yǔ)句中的(len=)是可以省略的,如果省略,說明所定義的字符常量的長(zhǎng)度為1,否則,len的值就是該變量的長(zhǎng)度1

11、.5.6 常數(shù)的聲明常數(shù)的類型聲明語(yǔ)句也放在程序的聲明部分type, PARAMETER : name=value ,name2=value2,例如:REAL,PARAMETER : PI=3.141593 為了便于閱讀,我們約定常數(shù)名一律大寫,并且名字起的要有意義1.6 賦值語(yǔ)句和算術(shù)運(yùn)算variable_name = expression賦值語(yǔ)句是執(zhí)行語(yǔ)句“=”并不是表示左右兩邊相等的意思,而是一個(gè)操作符(賦值符號(hào)),表示將expression的值存儲(chǔ)到變量variable_name所代表的存儲(chǔ)單元i=i+1 表示什么?expression叫表達(dá)式由常數(shù)、變量、圓括號(hào)、算術(shù)或邏輯運(yùn)算符構(gòu)成

12、1.6 賦值語(yǔ)句和算術(shù)運(yùn)算Fortran 的算術(shù)運(yùn)算符有5個(gè)+-*/* 指數(shù)運(yùn)算基本上它們和我們?cè)跀?shù)學(xué)里面接觸到的沒什么區(qū)別要注意的是,+和-同時(shí)也可以用來表示數(shù)的正負(fù)號(hào)運(yùn)算優(yōu)先級(jí)由高到低是括號(hào)、指數(shù)運(yùn)算、乘除、加減,運(yùn)算順序是從左到右1.6.1 整數(shù)運(yùn)算整數(shù)運(yùn)算的結(jié)果始終是整型整數(shù)之間的除法會(huì)得到意外的結(jié)果3/4=04/4=15/4=16/4=18/4=29/4=2在程序中處理描述現(xiàn)實(shí)世界連續(xù)量的變量時(shí),要避免使用整數(shù)整數(shù)主要用來計(jì)數(shù)和索引1.6.2 實(shí)數(shù)運(yùn)算實(shí)數(shù)運(yùn)算基本上會(huì)產(chǎn)生一個(gè)我們希望的實(shí)數(shù)結(jié)果3.0/4.0=0.754.0/4.0=1.5.0/4.0=1.256.0/4.0=1.58

13、.0/4.0=2.9.0/4.0=2.25有些實(shí)數(shù)不能被精確表示比如1/3 可能會(huì)表示為0.3333333在某些計(jì)算機(jī)上3.0*(1.0/3.0)與3.0*1.0/3.0的結(jié)果不一樣由于精度的問題,部分實(shí)數(shù)的表示會(huì)出現(xiàn)截?cái)?,用有限位來表示該?shù)的近似值,但是表示出來的值并不一定遵循四舍五入的原則,具體是多少不同的計(jì)算機(jī)有不同的結(jié)果。所以在進(jìn)行實(shí)數(shù)的相等比較時(shí),要慎重1.6.3 指數(shù)運(yùn)算xn的表達(dá)式是x*n如果x是實(shí)數(shù),n是整數(shù)計(jì)算機(jī)會(huì)將x連乘n次,這是一個(gè)實(shí)數(shù)的乘法運(yùn)算如果x是實(shí)數(shù),n是實(shí)數(shù)連乘的方法不可用計(jì)算機(jī)實(shí)際上是計(jì)算enlnx采用這種方法計(jì)算,精度比較低,運(yùn)行時(shí)間長(zhǎng)盡量用整數(shù)冪,避免采用

14、實(shí)數(shù)冪如果必須要采用實(shí)數(shù)冪,必須要注意到對(duì)于負(fù)數(shù)不能求負(fù)的實(shí)數(shù)冪(-2.0)*2.0是不合法的,編譯程序時(shí)將會(huì)提示如下錯(cuò)誤1.6.4 運(yùn)算符優(yōu)先級(jí)首先做圓括號(hào)內(nèi)的計(jì)算,且內(nèi)層括號(hào)優(yōu)先再?gòu)挠业阶笞鲋笖?shù)運(yùn)算從左到右做乘法和除法運(yùn)算從左到右做加法和減法運(yùn)算1.6.5 混合運(yùn)算實(shí)數(shù)與整數(shù)一起運(yùn)算時(shí),計(jì)算機(jī)將整數(shù)轉(zhuǎn)換為實(shí)數(shù),結(jié)果是實(shí)數(shù)這一轉(zhuǎn)換僅僅是指參與操作的兩個(gè)操作數(shù)類型分別為實(shí)數(shù)和整數(shù)而言表達(dá)式結(jié)果11+1/4121.0+1/41.031+1.0/41.25因?yàn)榛旌线\(yùn)算的情況是如此復(fù)雜,所以我們?cè)诔绦蛑幸M量避免這種情況發(fā)生1.6.5 混合運(yùn)算如果不得不進(jìn)行混合運(yùn)算,可以利用轉(zhuǎn)換函數(shù)顯式地在數(shù)的類型

15、之間進(jìn)行轉(zhuǎn)換,然后再參與運(yùn)算函數(shù)名和參數(shù)參數(shù)類型結(jié)果類型返回值INT(X)REALINTEGERx的整數(shù)部分(x被截尾)NINT(X)REALINTEGER最接近x的整數(shù)(x被四舍五入)CEILING(X)REALINTEGER大于或等于x的最小整數(shù)FLOOR(X)REALINTEGER小于或等于x的最大整數(shù)REAL(I)INTEGERREAL整數(shù)轉(zhuǎn)換為實(shí)數(shù)NINT函數(shù)會(huì)比較常用于REAL轉(zhuǎn)換到INTEGER,因?yàn)樵斐傻恼`差比較小1.7 內(nèi)置函數(shù)科學(xué)計(jì)算經(jīng)常要用到一些數(shù)學(xué)函數(shù),比如三角函數(shù)、對(duì)數(shù)、平方根等等,F(xiàn)ortran將一些常用的函數(shù)內(nèi)置到語(yǔ)言中,用戶可以直接調(diào)用這些函數(shù)更復(fù)雜的函數(shù)通過外

16、部函數(shù)或內(nèi)部函數(shù)實(shí)現(xiàn),課程后續(xù)會(huì)討論這個(gè)問題y=sin(theta)調(diào)用內(nèi)部函數(shù)sin()來計(jì)算theta的正弦值1.7 內(nèi)置函數(shù)部分內(nèi)置函數(shù)函數(shù)名和參數(shù)函數(shù)值參數(shù)類型結(jié)果類型說明SQRT(X)xRR求x0的平方根ABS(X)R/IR/I求x的絕對(duì)值A(chǔ)CHAR(I)ICHAR(1)返回字符I在ASCII表上對(duì)應(yīng)值SIN(X)sin(x)RRx的正弦值(x單位是弧度)COS(X)cos(x)RRx的余弦值(x單位是弧度)TAN(X)tan(x)RRx的正切值(x單位是弧度)EXP(X)exRRe的x次冪LOG(X)logexRRx的自然對(duì)數(shù),x0LOG10(X)log10 xRR以10為底的對(duì)數(shù)

17、,x0IACHAR(C)CHAR(1)I返回字符C在ASCII表上的位置MOD(A,B)R/IR/I模函數(shù)的余數(shù)MAX(A,B)R/IR/Ia,b中的最大值MIN(A,B)R/IR/Ia,b的最小值A(chǔ)SIN(X)sin-1(x)RRx的反正弦,-1x1(結(jié)果是弧度)ACOS(X)1.8 輸入與輸出輸入語(yǔ)句READ (*,*) input_list從鍵盤或文件中讀入一個(gè)或多個(gè)數(shù)值存儲(chǔ)到input_list所指定的變量中(*,*) 含有讀入操作的控制信息第一個(gè)*所代表的數(shù)域是指定從哪個(gè)輸入設(shè)備讀入數(shù)據(jù),不指定就是標(biāo)準(zhǔn)設(shè)備,一般是鍵盤第二個(gè)*所代表的數(shù)域是指明讀入數(shù)據(jù)的格式,不指定表示用自由格式輸入

18、,意味著變量列表中的變量類型決定輸入數(shù)據(jù)需要的格式每條READ指令都從輸入數(shù)據(jù)的一個(gè)新行開始讀取PROGRAM input_exampleINTEGER : i,jREAL : aCHARACTER(len=12) : charsREAD (*,*) i,j,a,charsEND PROGRAM input_example正確的輸入格式輸出語(yǔ)句WRITE(*,*) output_list 類似于輸入語(yǔ)句1.9 變量初始化在使用變量之前,對(duì)它們進(jìn)行初始化如果不對(duì)變量初始化,不同的系統(tǒng)可能會(huì)給變量不同的值,導(dǎo)致你的程序完全不可控初始化有三個(gè)辦法:賦值語(yǔ)句READ語(yǔ)句類型聲明語(yǔ)句中初始化例:將整型變

19、量i的值初始化為10方法一:INTEGER : ii=10方法二:INTEGER : iREAD (*,*) i方法三:INTEGER : i =101.10 IMPLICIT NONEIMPLICIT NONE 出現(xiàn)在PROGRAM語(yǔ)句之后,類型聲明語(yǔ)句之前如果程序中出現(xiàn)這條語(yǔ)句,那么在這個(gè)程序中,F(xiàn)ortran的默認(rèn)提供輸入值的功能喪失,也就是說,所有變量必須顯式聲明! 在本課程的學(xué)習(xí)、作業(yè)、實(shí)驗(yàn)、考試中,我要求所有程序編寫必須加上這條語(yǔ)句避免簡(jiǎn)單的打字錯(cuò)誤便于維護(hù)PROGRAM test_1REAL : time = 10.0WRITE (*,*) Time=,tmieEND PROGR

20、AM test_1例程1.2現(xiàn)在我們可以嘗試寫一個(gè)簡(jiǎn)單的程序來計(jì)算園的面積PROGRAM area_of_circle! Caculate the area of a circle.REAL,PARAMETER : PI=3.141593REAL : area,radiusWRITE (*,*) Input number of radius:READ (*,*) radiusarea=PI*radius*radiusWRITE (*,*) area=,areaEND PROGRAM 第一章 習(xí)題1、下列常數(shù)是否有效,如有效則標(biāo)注其類型,無效則說明原因 10.0 -100 000 123E-5

21、Thats ok! -32768 3.14159 Distance = “Thats ok!” 17.877E+6 13.022、下列各組數(shù)在計(jì)算機(jī)里表示的值是否一樣 4650. 4.65E+3 -12.71 -1.27E1 0.0001 1.0E4 3.14159E0 314.159E-33、下列程序名是否有效,如無效則說明原因 new_program 3rd第一章 習(xí)題4、找出無效的變量名并說明原因 length distance 1problem when_does_school_end _ok5、找出錯(cuò)誤的常量聲明并說明原因 REAL , PARAMETER BEGIN=-30 CHARACTER , PARAMETER : NAME=Rosa6、下列表達(dá)式中,合法的寫出結(jié)果,不合法的說明原因37/337+13/328/3/4(28/3)/428/(3/4)-3.*4./2.3.*(-4./2.)4.*-32+5*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論