Fortran基本用法小结

Fortran基本用法小结
Fortran基本用法小结

【以下文字转载自D_Atmosphere 讨论区】

【原文由superjyq 所发表】

我的Fortran基本用法小结

高级语言和算法组heavensky

目录:

一、说明

二、概述

三、数据类型及基本输入输出

四、流程控制

五、循环

六、数组

七、函数

八、文件

一、说明

本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是3~9章,都是些最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。要想弄得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九章应该很快的,花一两天就行了。觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。

另外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没来得及仔细想,只是按着作者的意思去理解。所以这份笔记还处于纸上谈兵的层次。如果有不妥的地方,希望大家指正。谢谢!

文中蓝色的部分是程序代码,!后面的内容为注释。

二、概述

1、名词解释

Fortran=Formula Translator/Translation

一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。的确,从一开始,IBM设计它的时候就是为了方便数值计算和科学数据处理。设计强大的数组操作就是为了实现这一目标。Fortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。

2、Fortran的主要版本及差别

按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran 77和Fortran90。Fortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所

以编程时推荐使用90。鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看懂77程序。以下是77和90的一些格式上的区别。

Fortran 77:固定格式(fixed format),程序代码扩展名:.f或.for

(1)若某行以C,c或*开头,则该行被当成注释;

(2)每行前六个字符不能写程序代码,可空着,或者1~5字符以数字表明行代码(用作格式化输入输出等);7~72为程序代码编写区;73往后被忽略;

(3)太长的话可以续行,所续行的第六个字符必须是"0"以外的任何字符。

Fortran 90:自由格式(free format),扩展名:.f90

(1)以"!"引导注释;

(2)每行可132字符,行代码放在每行最前面;

(3)以&续行,放在该行末或下行初。

以下都是讨论Fortran 90。

3、Fortran的一些特点和C不同,在下面涉及具体方面时可以看到。这里只是大致提一些。(1)不分大小写

(2)每句末尾不必要写分号

(3)程序代码命令间的空格没有意义

(4)不像C,Fortran不使用{ }

(5)数据类型多出了复数和逻辑判断类型。比如复数类型complex :: a !声明复数的方法。

复数显然方便了科学计算,满足了工程方面的需求

a=(1.0,2.0) ! a=1+i

(6)多出了乘幂运算(**)。乘幂除了整数还可以是实数形式。如开方,开立方a=4.0**0.5,a=8.0**(1.0/3.0)。

(7)数组有一些整体操作的功能;可以方便的对部分元素进行操作

(8)有些情况下可以声明大小待定的数组,很实用的功能

4、Fortran的基本程序结构

先看一看所谓的"Hello Fortran"程序。

program main !程序开始,main是program的名字,完全自定义

write(*,*) "Hello" !主程序

stop !终止程序

end [program[main]] !end用于封装代码,表示代码编写完毕。

[ ]中的内容可省略,下同。

再看一段实用一些的程序,好有点感性认识。程序用于计算圆柱的表面积,要求输入底面半径和高。其中展示了Fortran的一些特色用法。程序摘自维基。其实是一个叫https://www.360docs.net/doc/423459652.html, 的网上引用的维基的网页。推荐去看看!能查到不少有意思的东西。

program cylinder !给主函数起个名字

! Calculate the area of a cylinder.

!

! Declare variables and constants.

! constants=pi

! variables=radius squared and height

implicit none ! Require all variables to be explicitly declared

! 这个一般都是要写上的。下面会进一步说明。

integer :: ierr

character :: yn

real :: radius, height, area

real, parameter :: pi = 3.1415926536 !这是常量的声明方法

interactive_loop: do !do循环,Fortran中的循环可以加标签,如do前!面的interactive_loop就是标签

! Prompt the user for radius and height and read them.

write (*,*) 'Enter radius and height.' !屏幕输出

read (*,*,iostat=ierr) radius,height !键盘输入。isotat的值用于判断

!输入成功否。

! If radius and height could not be read from input,

! then cycle through the loop.

if (ierr /= 0) then

write(*,*) 'Error, invalid input.'

cycle interactive_loop !cycle 相当于C里的continue

end if

! Compute area. The ** means "raise to a power."

area = 2 * pi * (radius**2 + radius*height) ! 指数运算比C方便

! Write the input variables (radius, height)

! and output (area) to the screen.

write (*,'(1x,a7,f6.2,5x,a7,f6.2,5x,a5,f6.2)') & !"&"表示续行。这里

!还显示了格式化输出

'radius=',radius,'height=',height,'area=',area

yn = ' '

yn_loop: do !内嵌的另一个do循环write(*,*) 'Perform another calculation? y[n]'

read(*,'(a1)') yn

if (yn=='y' .or. yn=='Y') exit yn_loop

if (yn=='n' .or. yn=='N' .or. yn==' ') exit interactive_loop

end do yn_loop !结束内嵌do循环

end do interactive_loop

end program cylinder

Fortran程序的主要结构就是这样了。一般还会有些module的部分在主函数前,函数在主函数后。

三、数据类型及基本输入输出

1、数据类型,声明及赋初值

(1)integer:短整型kind=2, 长整型kind=4

integer([kind=]2) :: a=3

如果声明成integer:: a,则默认为长整型。

!"::" 在声明并同时赋初值时必须要写上;类型名后面有形容词时也必须有;其他情况可略去!所谓形容词,可以看一下这个。比如声明常数

real,parameter :: pi=3.1415926 。parameter就是形容词。

(2)real:单精度kind=4(默认),双精度kind=8

real([kind=]8) :: a=3.0

还有指数的形式,如1E10为单精度,1D10为双精度

(3)complex 单精度和双精度

complex([kind=]4) b

(4)character

character([len=]10) c !len为最大长度

(5)logical

logical*2 :: d=.ture. (等价于logical(2)::d=.ture.)

(6)自定义类型type:类似于C中的struct

Fortran 77中给变量赋初值常用DATA命令,可同时给多个变量赋初值

data a,b,string /1, 2.0, 'fortran'/

与C不同的是,Fortran中变量不声明也能使用,即有默认类型(跟implicit命令有关)。按照默认的规定,以i,j,k,l,m,n开头的变量被定义为integer,其余为real。取消该设置需在程序声明部分之前加implicit none。彭国伦建议一般都使用该语句。

另一点关于声明的不同是Fortran有"等价声明":

integer a,b

equivalence(a,b)

使得a,b使用同一块内存。这样可以节省内存;有时可精简代码。如:equivalence(很长名字的变量,比如三维数组的某个元素,a),之后使用a来编写程序就简洁多了。

2、基本输入输出

输入:read(*,*) a !从键盘读入

输出:write(*,*) "text" !在屏幕上输出。Fortran 77用'text'。Fortran 90

!一般" "和' '都可

print *,"text" !只能屏幕输出

(*,*)完整写为(unit=*,fmt=*)。其中unit为输入/输出位置,如屏幕,文件等;fmt为格式。

如果这两项都写成*,则按默认的方式进行,即上面描述的。print后面的*表示按默认格式输出。

四、流程控制

1、运算符

(1)逻辑运算符

== /= > >= < <= !Fortran 90用法

.EQ. .NE. .GT. .GE. .LT. .LE. !Fortran 77用法

(2)涉及相互关系的集合运算符

.AND. .OR. .NOT. .EQV. .NEQV.

! 仅.NOT.连接一个表达式,其余左右两边都要有表达式(可以是logical类型的变量)!.EQV.:当两边逻辑运算值相同时为真,.NEQV.:当两边逻辑运算值不同时为真

2、IF

(1) 基本:

if(逻辑判断式) then

……

end if

如果then后面只有一句,可写为

if(逻辑判断式) ……!then和end if可省略

(2) 多重判断:

if(逻辑判断式) then

……

else if

……

else if

……

else

……

end if

(3) 嵌套:

if(逻辑判断式) then

if(逻辑判断式) then

if(逻辑判断式) then

else if(逻辑判断式) then

……

else

……

end if !没必要跟C语句多时用{}了,因为有end if

end if

end if

(4) 算术判断:

program example

implicit none

real c

write (*,*) "input a number"

read (*,*) c

if(c) 10,20,30 !10,20和30为行代码,根据c小于/等于/大于0,执行10/20/30行的程序10 write (*,*) "A"

goto 40 !goto可实现跳到任意前面或后面的行代码处,但用多了破坏程序结构20 write (*,*) "B"

goto 40

30 write (*,*) "C"

goto 40

40 stop

end

3、SELECT CASE

类似于C的switch语句

select case(变量)

case(数值1)! 比如case(1:5)代表1<=变量<=5会执行该模块

……!case(1,3,5)代表变量等于1或3或5会执行该模块

case(数值2)!括号中数值只能是integer,character或logical型常量,不能是real型……

case default

……

end case

4、PAUSE, CONTINUE

pause暂停程序执行,按enter可继续执行

continue貌似没什么用处,可用作封装程序的标志

五、循环

1、DO

do counter=初值, 终值, 增/减量!counter的值从初值到终值按增/减量变化,……!counter每取一个值对应着一次循环。增/减量不写则默认为1 ……

……!循环主体也没有必要用{}

……

end do

Fortran 77中不是用end do来终止,而是下面这样子:

do 循环最后一行的行代码counter=初值, 终值, 增/减量

……

行代码……!这是do的最后一行

2、DO WHILE

do while(逻辑运算)

……

……

end do

类似于C中的while(逻辑运算) {……}。

一开始那个计算圆柱表面积的程序中,应该也算是这一类。不过它是通过内部的if语句来控制循环。看来也是可以的,不过在这本书上没看到这样写。其实应该也可以归于下面这种。

3、没看到和C里面的do{……}while(逻辑运算); 相对应的循环语句,不过可以这样,保证至少做一次循环:

do while(.ture.)

……

……

if(逻辑运算) exit !exit就好比C里面的break。C里的continue在Fortran里是cycle

end do

4、Fortran的一个特色:带署名的循环

可以这样,不易出错:

outer: do i=1,3

inner: do j=1,3

……

end do inner

end do outer

还可以这样,很方便:

loop 1: do i=1,3

loop2: do j=1,3

if(i==3) exit loop1 !exit终止整个循环loop1

if(j==2) cycle loop2 !cycle跳出loop2的本次循环,进行loop2的下一次循环

write(*,*) i,j

end do loop2

end do loop1

还有一些循环主要用于Fortran中的数组运算,为Fortran特有,很实用。

六、数组

1、数组的声明

和C不同的是,Fortran中的数组元素的索引值写在()内,且高维的也只用一个(),如下integer a(5) !声明一个整型一维数组

real :: b(3,6) !声明一个实型二维数组

类型可以是integer, real, character, logical或type。最高可以到7维。

数组大小必须为常数。但是和C语言不同,Fortran也有办法使用大小可变的数组,方法如下:

integer, allocatable :: a(:) !声明

大小可变经过某个途径得知所需数组大小size之后,用下面的语句:

allocate(a(size)) !配置内存空间

之后该数组和通过一般方法声明的数组完全相同。

与C不同,Fortran索引值默认为从1开始,而且可以在声明时改变该规则:

integer a(-3:1) ! 索引值为-3,-2,-1,0,1

integer b(2:3,-1:3) !b(2~3,-1~3)为可使用的元素

2、数组在内存中的存放

和C不同,Fortran中的数组比如a(2,2)在内存中存放顺序为a(1,1),a(2,1),a(1,2),a(2,2)。原则是先放低维的元素,再放高维的元素。此规则称为column major。

3、赋初值

(1)最普通的做法:

integer a(5)

data a /1,2,3,4,5/

或integer :: a(5)=(/1,2,3,4,5/)

若integer :: a(5)=5,则5个元素均为5

对于integer :: a(2,2)=(/1,2,3,4/)

根据数组元素在内存中存放的方式,等价于赋值a(1,1)=1,a(2,1)=2,a(1,2)=3,a(2,2)=4

(2)利用Fortran的特色:隐含式循环。看例子就明白了。

integer a(5)

integer i

data (a(i),i=2,4)/2,3,4/ !(a(i),i=2,4)表示i从2到4循环,增量为默认值1

还可以这样:

integer i

integer :: a(5)=(/1,(2,i=2,4),5/) !五个元素分别赋值为1,2,2,2,5

integer :: b(5)=(/i, i=1,5/) !五个元素分别赋值为1,2,3,4,5

还可以嵌套

data ((a(i,j),i=1,2),j=1,2)=/1,2,3,4/ !a(1,1)=1,1(2,1)=2,a(1,2)=3,a(2,2)=4

4、操作整个数组

设a,b为相同类型、维数和大小的数组

a=5 !所有元素赋值为5

a=(/1,2,3/) !这里假设a为一维,a(1)=1,a(2)=2,a(3)=3

a=b !对应元素赋值,要求a,b,c维数和大小相同,下同

a=b+c

a=b-c

a=b*c

a=b/c

a=sin(b) !内部函数都可以这样用

5、操作部分数组元素

a为一维数组

a(3:5)=(/3,4,5/) !a(3)=3,a(4)=4,a(5)=5

a(1:5:2)=3 !a(1)=3,a(3)=3,a(5)=3

a(3:)=5 !a(3)以及之后的所有元素赋值为5

a(1:3)=b(4:6) !类似于这种的要求左右数组元素个数相同

a(:)=b(:,2) !a(1)=b(1,2),a(2)=b(2,2),以此类推

6、WHERE

where形式上类似于if,但只用于设置数组。设有两个同样类型、维数和大小的数组a,b

初中英语常见时态用法小结

初中英语常见时态用法小结 一般现在时的用法 1) 经常性或习惯性的动作,常与表示频腮度的时间状语连用。 时间状语:every…, sometimes, at…, on Sunday I leave home for school at 7 every morning. 2) 客观真理,客观存在,科学事实。 The earth moves around the sun. Shanghai lies in the east of China. 3) 表示格言或警句中。 Pride goes before a fall. 骄者必败。 注意:此用法如果出现在宾语从句中,即使主句是过去时,从句谓语也要用一般现在时。 例:Columbus proved that the earth is round.. 4) 现在时刻的状态、能力、性格、个性。 I don’t want so much. Ann Wang writes good English but does not speak well. 比较:Now I put the sugar in the cup. I am doing my homework now. 第一句用一般现在时,用于操作演示或指导说明的示范性动作,表示言行的瞬间动作。再如:Now watch me, I switch on the current and stand back. 第二句中的now 是进行时的标志,表示正在进行的动作的客观状况,所以后句用一般现在时。 2. 一般过去时的用法 1)在确定的过去时间里所发生的动作或存在的状态。 时间状语有:yesterday, last week, an hour ago, the other day, in 1982等。 Where did you go just now? 2)表示在过去一段时间内,经常性或习惯性的动作。 When I was a child, I often played football in the street. Whenever the Browns went during their visit, they were given a warm welcome. 3)句型: It is time for sb. to do sth "到……时间了" "该……了" It is time sb. did sth. "时间已迟了" "早该……了" It is time for you to go to bed. 你该睡觉了。 It is time you went to bed. 你早该睡觉了。 would (had) rather sb. did sth. 表示’宁愿某人做某事’ I’d rather you came tomorrow. 4) wish, wonder, think, hope 等用过去时,作试探性的询问、请求、建议等。 I thought you might have some. 我以为你想要一些。 比较: 一般过去时表示的动作或状态都已成为过去,现已不复存在。 Christine was an invalid all her life. (含义:她已不在人间。) Christine has been an invalid all her life. (含义:她现在还活着)

fortran语法手册

1 FORTRAN77四则运算符 + - * / ** (其中**表示乘方) 在表达式中按优先级次序由低到高为:+或-→*或/→**→函数→() 2 FORTRAN77变量类型 2.1 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 2.4 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例: DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3) REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2) 10FORMAT(1X,5(A2,I2,1X,A2,I4)) 2.5 使用DATA语句给数组赋初值 变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如 DATA A,B,C/-1.0,-1.0,-1.0/ DATA A/-1.0/,B/-1.0/,C/-1.0/ DATA A,B,C/3*-1.0/CHARACTER*6 CHN(10)

DATA CHN/10*' '/INTEGER NUM(1000) DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/ 3 FORTRAN77程序书写规则 程序中的变量名,不分大小写; 变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效; 一行只能写一个语句; 程序的第一个语句固定为PROGRAM 程序名称字符串 某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容; 某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容; 某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行; 某行的第7至72字符位为语句区,语句区内可以任加空格以求美观; 某行的第73至80字符位为注释区,80字符位以后不能有内容。 4 FORTRAN77关系运算符 .GT. 大于 .GE. 天于或等于 .LT. 小于 .LE. 小于或等于 .EQ. 等于 .NE. 不等于 .AND. 逻辑与 .OR. 逻辑或 .NOT. 逻辑非 .EQV. 逻辑等 .NEQV. 逻辑不等 运算符优先级由高到低顺序为:()→**→*或/→+或-→.GT.或.GE.或.LT. 或.LE.或.EQ.或.NE.→.NOT.→.AND.→.OR.→.EQV.或.NEQV 5 FORTRAN77语句

高考英语一般现在时用法总结(完整)

高考英语一般现在时用法总结(完整) 一、单项选择一般现在时 1.I know daydreaming benefits invention, but the fact that it has no solid evidence. A.will be remaining B.remained C.remains D.had remained. 【答案】C 【解析】考查动词时态。句意:我知道白日梦有益于发明,但事实是它没有确凿的证据。根据所给动词是一般现在时和句意可知此处也用一般现在时,故选C. 2.The Small Goose Pagoda in Xi’an, one of the 22 Silk Road relics located in China, _______ back in 707 during the Tang Dynasty. A.dated B.was dated C.dates D.is dating 【答案】C 【解析】 试题分析:考查动词短语和时态。短语date back to追溯到....;从....开始有;该句型没有被动语态,也没有进行时。通常都使用一般现在时表示从现在时间某一事物能够追溯到的时期。故C项正确。 【名师点睛】 当分词做状语的时候,要特别考虑主被动关系以及时间的先后关系。如果构成分词的动词与句子的主语构成主动关系,就使用现在分词做状语;当二者构成被动关系,使用过去分词做状语。如果分词的动作发生在谓语动词之前,就使用分词的完成式。如果分词与句子的主语没有关系,可以使用状语从句或者独立主格结构。 考点:考查动词短语和时态 3.We live in a beautiful cottage with a yard, which ______ 20 feet from side to side. A.measures B.is measured C.measured D.has been measured 【答案】A 【解析】 试题分析:考察非谓语。句意:我们住的地方有一个院子,这个院子从一遍到另一边的距离是20英尺。 考点:考察非谓语。 4.---We’d better leave now. ---No hurry. The train ______ at 10 o’clock. A.has left B.left C.leaves D.would leave 【答案】C

最新英语一般现在时用法总结(完整)

最新英语一般现在时用法总结(完整) 一、单项选择一般现在时 1.We’ll go to play with snow if it ______ tomorrow. A.snow B.snows C.will snow D.snowed 【答案】B 【解析】 【详解】 考查if引导的条件状语从句。句意:如果明天下雪,我们就去玩雪。此处是if引导的条件状语从句,主句是一般将来时态,从句用一般现在时态,且主语是it,故答案为B。 2. you read the instructions closely, you would know what I . A.Had, was B.Should, am C.Had, am D.If, was 【答案】C 【解析】 句意:如果你仔细阅读了说明,你就会知道我现在指的是什么了。根据句意可知条件状语从句与过去的事实相反,在条件状语从句中,若if省略,需将should /had/were提前。主句中“我现在指的是什么”是客观事实,故用am。故选C。 3.Whenever you ______ a present, you’d better think about it from the receiver’s preference. A.bought B.buy C.will buy D.have bought 【答案】B 【解析】 试题分析:句意:每当你买礼物的时候,你最好从接收方的偏好想一想。whenever引导的让步状语从句,采用一般现在时表将来的用法。故选B。 考点:考查动词的时态。 4.The Dragon Boat Festival ________ the beginning of the hottest season of the year. A.is marking B.marks C.will mark D.marked 【答案】B 【解析】 试题分析:考查时态。一般现在时表示经常性习惯性的行为。本句中使用一般现在时端午节标志着一年中最热的季节的开始。故B正确。 考点:考查时态 5.Every time he ______ to visit me, he ______ buy me some books. A.will come; will B.will come; would C.comes; will D.comes; would 【答案】C

一般现在时总结归纳

一般现在时语法总结 一般现在时:表示经常性的事情,经常性的动作或一般性事实。 时间状语:often 经常,usually 通常,always 总是,every 每个,sometimes 有时,at……在点钟 只有在第三人称单数用动词的三单变化,其他用动词的原型。 1.三单变化: (1)多数在动词后面加- s ask->asks work->works get->gets stay->stays (2)以字母s x ch sh或o结尾的动词,在词尾直接加- es Watch -> watches wish -> wishes fix -> fixes do -> does go -> goes pass -> passes (3)以辅音字母加y结尾的动词,要先变y为i再加- es Try -> tries study -> studies cry -> cries fly -> flies 2.不规则变化 be-> am is are have->has 一般现在时的用法: 表示经常性或习惯性的状态;表示客观事实或普遍真理;在时间、条件等状语从句中,用现在时表示将来;在某些以here,there开头的句子中,用一般现在时表示正在发生的动作1>经常性或习惯的动作,常与表示频率的时间状语连用。 时间状语:every、sometimes、at……,on Sunday I leave home for school at 7 every morning. 2>客观真理,客观存在,科学事实 The earth moves around the sun. Shanghai lies in the east of china. 3>表示格言或警局中 Pride goes before fall. (骄者必败) 注意:此用法如果出现在宾语从句中,即使主句是过去时,从句谓语也要用一般现在时。例:columbus proved that earth is round. 4>现在时刻的状态、能力、性格、个性 I dont want so much.

Fortran常用函数

1、RANDOM_NUMBER Syntax ['sint?ks] n. 语法 CALL RANDOM_NUMBER (harvest结果) Intrinsic Subroutine(固有子程序):Returns a pseudorandom number greater than or equal to zero and less than one from the uniform distribution. 返回大于或等于0且小于1,服从均匀分布的随机数 2、RNNOA/ DRNNOA (Single/Double precision) Generate pseudorandom numbers from a standard normal distribution using an acceptance/rejection method. 产生服从标准正态分布的随机数 Usage(用法) CALL RNNOA (NR, R) Arguments(参数) NR— Number of random numbers to generate. (Input) 要产生随机数的个数 R— Vector of length NR containing the random standard normal deviates. (Output) 输出长度为NR,随机正态分布的向量 Comments(注解) The routine RNSET can be used to initialize the seed of the random number generator. The routine RNOPT can be used to select the form of the generator. 程序RNSET可以用来初始化随机数发生器的种子 Example In this example, RNNOA is used to generate five pseudorandom deviates from a standard normal distribution. INTEGER ISEED, NOUT, NR REAL R(5) EXTERNAL RNNOA, RNSET, UMACH C CALL UMACH (2, NOUT) NR = 5 ISEED = 123457 CALL RNSET (ISEED) CALL RNNOA (NR, R) WRITE (NOUT,99999) R 99999 FORMAT (' Standard normal random deviates: ', 5F8.4) END Output Standard normal random deviates: 2.0516 1.0833 0.0826 1.2777 -1.2260

FORTRAN知识点总结

F O R T R A N 第2章FORTRAN90基础知识: 程序单元的概念: fortran90程序是一种分块形式的程序,整个程序由若干程序单元块组成。每个程序只有一个主程序单元。各单元体的程序体形式上相同。 程序单元可以是主程序、子程序(外部过程或内部过程)、模块MODULE (供其他程序单元引用即把该程序单元内的全部语句复制到程序单元中)或块数据程序单元BLOCK 。 语言元素:指在程序设计中用到的基本成分,如字符集、常量、变量、记号(标号、关键字、名字、常数、运算符和定界符)以及其他的基本结构等。 字符集:英文字母、阿拉伯数字、下划线、21个特殊字符($和?没有规定用法)。 数据结构: 整型INTEGER (34-2下划线后面是种别参数),n 位字长的计算机的数据表示范围一般为12~211-+---n n ,种别参数由内在询问函数KIND 送回,种别值提供的最小范围由内在函数SELECTED-INT-KIND 送回,表示十进制幂的范围由内在函数RANGE 送回; 实型REAL ,小数形式和指数形式;复型COMPLEX (种别类

型参数值取实部与虚部中较大者); 字符型CHARACTER,由一对单撇号或双撇号之间的字符序列组成; 逻辑型LOGICAL。 派生数据类型TYPE; 数组INTEGER,DIMENSION(1,50)::A,可直接对数组元素进行运算如3*A,SQRT(A); 字符子串,在字符串CHARACTER(LEN=80)::ROW中,ROW(1:3)就表示字符串ROW中第1到第3个元素组成的子串。 变量名的命名规则:不能超过31个字符;组成成分是字母、数字、下划线;第一个字符必须是字母。 第3章基本语句: 类型说明语句:类型说明(种别说明),属性说明::变量名表 尽量避免把两个实数作相等或不相等的比较。淘汰隐式说明IMPLICIT NONE 种别说明:种别参数即对可移植数据精度和范围进行选择的机制 KIND(X) 返回变元X的种别参数值 SELECTED-REAL-KIND(n,m) 产生一个种别值,它表示某一精度和范围。N指十进制有效位数,m指明值范围内以10为底的幂次。

一般现在时知识点归纳总结

一般现在时知识点归纳总结 定义: 一般现在时表示经常或习惯性的动作或一般性事实,也可表示现在的状态或主语具备的性格和能力。 用法: (1)表示经常性或习惯性的动作。通常与副词every day(每天),always(总 是),usually(通常),often(经常),sometimes(有时),等时间状语连用。 I get up at six every day.我每天六点起床。 She usually plays sports. 她每天都做运动。 (2)表示科学原理,自然现象,客观事实或格言谚语等等。 The sun rises in the east.太阳每天从东方升起。 Constant dropping wears the stone. 滴水穿石 There are 50 students in my class. 我们班有50个学生。 (3).在某些以here,there开头的句子中,用一般现在时表示正在发生的动 作。如:Here comes the bus.公交车来了。 (4)在下列情况下用一般现在时表示将来:

①. 表示按计划或时间表将要发生的动作,通常有表示将来的时间状语。如: The plane takes off at 11:30 and arrives in Shanghai at l:20. 飞机十一点半起飞,一点二十分抵达上海。 注:只限于少数动词能这样用,如begin, start, end, finish, stop, go, come, leave, sail, arrive, return, close, open 等。 ②. 当主句为一般将来时态时,在if,as soon as,until,when等引导的状语 从句中用一般现在时代替一般将来时。如: If it doesn’t rain this afternoon,we’ll have a football match. As soon as he got inside, the dog shook himself. You can't leave until you find another to replace you. 一般现在时句式变换: 肯定句:表示肯定的句子 否定句:表示否定的句子 一般疑问句:一般疑问句是疑问句的一种。它是一般只用yes(是)或no (否)来回答的句子。朗读一般疑问句时用升调,而一般疑问句的简略答语用降调。

fortran心得

Read 的规则: 按行读取,每次读一行,读完后光标自动跳到下一行的开头,空格和逗号代表结束(所以空格和逗号也是读取的一部分的话,需要使用“输入输出格式”) 如果想要将一行数据读入数组,代码为: Read(10,*) s(:,:,:) 不用规定输入输出格式,因为会根据s(:,:,:)确定需要读入的数字的个数,然后fortran会按部就班的读取,甚至文件中当前这一行的数字个数不足以填满s(:,:,:)的时候,read会自动跳到下一行继续搜索数字,直到填满s(:,:,:)为止。 但是需要注意给数组赋值的顺序:read会把它搜索到的第一个数字给s(1,1,1),第二个给s(2,1,1),第三个给s(3,1,1)… 程序9 1: 将read(unit=field,fmt="(A79)",iostat=status)buffer 中的A79改为A2,结果只输出每行的前两个字符,说明read是按整行整行读取的。 中间空了几行之后,空行之后的内容还是能被读取和输出,这说明,空行和空白是不一样的:空行也算是一种文本内容,因此不会终止读取,而空白意味着结束。 !读取文件 program main implicit none character(len=79)::filename="number.txt",buffer integer,parameter::field=10 integer::status=0 logical alive inquire(file=filename,exist=alive) if(alive)then open(unit=field,file=filename) do while(.true.) read(unit=field,fmt="(A79)",iostat=status)buffer if(status/=0)exit write(*,"(A79)")buffer end do else write(*,*)filename,"does't exist." end if pause stop end program main ============================================= 附number.txt =============================== 1234555666

【英语】一般现在时-知识点归纳与练习

【英语】一般现在时-知识点归纳与练习 一、一般现在时 1.We will go to Tian'anmen Square to watch the raising of the national flag if it tomorrow. A. will rain B. rains C. doesn't rain D. won't rain 【答案】 C 【解析】【分析】主句用一般将来时.if引导的条件状语从句用一般现在时态,即“主将从现”,故选C。句意是:如果明天不下雨我们将去天安门广场看升旗。 【点评】本题考查if 引导的条件状语从句,主句用将来时,从句用一般现在时。 2.The children will climb the mountain if it________ tomorrow. A. won't rain B. didn't rain C. isn't raining D. doesn't rain 【答案】 D 【解析】【分析】句意:如果明天不下雨,孩子们会去爬山。if 引导的条件状语从句遵循主将从现的原则,主句用一般将来时,从句用一般现在时,从句是一个否定句,含有实义动词rain的否定句,要借助助动词don't/doesn't构成,主语是it,助动词用doesn't,故选D。 【点评】考查if引导的条件状语的时态。注意句子涉及到if引导的条件状语从句的用法。 3.Will you get wet if I ______ the experiment? A. will do B. do C. does D. did 【答案】 B 【解析】【分析】句意:如果我做实验,你会淋湿吗?if引导的条件状语从句,时态是主将从现,从句主语是 I,故谓语是动词原形,故选B。 【点评】考查时态,注意f引导的条件状语从句,时态是主将从现的用法。 4.If he _____ the money, he _____ a lot of clothes. A. has; will buy B. had; bought C. had; would buy D. had; will buy 【答案】 A 【解析】【分析】句意:如果他有钱,他会买许多衣服。if引导的时间状语从句遵循主将从现的原则,即主句用一般将来时,从句用一般现在时,从句主语是he,动词用三单形式,have有,其三单是has,主句用一般将来时,其结构为will+动词原形,buy买,动词原形,bought是buy的过去式,故选A。 【点评】考查if引导的主从复合句的时态。主语if引导条件状语从句的用法。 5.—I don't know if it tomorrow. —Well, if it , the school sports meeting will be cancelled. A. will rain;will rain B. rains;will rain C. will rain;rains

FORTRAN 90 程序编程规范

FORTRAN 90 程序编程规范 Fortran 90 编程规范,使程序代码高度组织化,更加易读、易懂、易于维护,程序更加高效。使编出的程序更易懂、易于维护。 1 语言选择 数值预报创新系统软件开发应避免使用Fortran77 的某些过时特征以Fortran 90不一致的特征。选择Fortran 90 作为开发语言,并采用Fortran 90 的新功能,如动态内存的分配(dynamic memory allocation)、递归(recursion ), 模块(modules)、POINTER 、长变量名、自由格式等。 Fortran 77其中某些只是一些冗余的功能,这些功能已经过时,另外,还有一些在Fortran90 中被证明是不好的用法,建议不要使用。 2 Fortran 90 的新特性 2.1.1 建议使用的Fortran 90 新特性 建议使用Fortran 90 提供的模块(module ),并用Use ONLY 指定module 中哪些变量或派生类型定义可用于调用程序。 尽量使用数组下标三元组,这样可优化并减少所需的代码行数。为提高可读性,要在括号内表明数组的维数,例如: 1dArrayA(:) = 1dArrayB(:) + 1dArrayC(:) 2dArray(: , :) = scalar * Another2dArray(: , :) 当访问数组的子集时,例如在有限差分等式中,可以通过使用下标三元组实现。例如:2dArray(: , 2:len2) = scalar *( & Another2dArray(:, 1:len2 -1) & - Another2dArray(:, 2:len2) & ) 对程序单元(program units )命名,并使用End program ,End subroutine ,End interface ,End module 等结构再次指定“program unit ”的名称。 在逻辑表达式中使用>、 >=、 ==、 <、 <=、 /=,它们分别代 替.gt.、.ge.、.eq.、.lt.、.le.、.ne. 。新的表示方法更接近标准的数学符号 在变量定义中始终使用“::”;始终用“DIMENSION ”定义数组形状;始终用(len=)的语法格式声明字符变量的长度。

一般现在时的用法

一般现在时的用法(1) 表示经常发生或习惯性的动作或状态。 We often write to each other. 我们时常相互通信。 Father always reads newspaper after breakfast. 父亲总是在早餐后读报。 这种情况常与always总是,usually通常,often经常,sometimes有时,seldom 很少,hardly几乎不,scarcely几乎不,every day每天,once a week每周一次,yearly每年,monthly每月,等时间状语或频率副词连用。 一般现在时的用法(2) 表示主语现在的性格、特征、能力。 He works hard. 他努力工作。 Does he like sports? 他喜欢体育运动吗? 一般现在时的用法(3) 表示客观事实或普遍真理。 The sun rises in the east. 太阳从东方升起。 After summer comes autumn. 秋天在夏天之后。 Light goes faster than sound. 光的传播速度比声音快。 一般现在时的用法(4) 表示按规定、计划或时间表将要发生的事。

He starts next week. 他下个星期出发。 We leave very soon. 我们很快就离开。 The train starts at 10 o'clock in the morning. 火车将在早上10点开出。 这类用法限于表示“移动”的动词:go去,come来,leave离开,start出发,begin 开始,arrive到达,take off起飞,等。 一般现在时的用法(5) 用于状语从句代替一般将来时。 I will tell him about it as soon as I see him next Monday. 下个星期一我看到他时马上告诉他。 I will get everything ready before my boss comes back. 我要在老板回来之前把一切都准备妥当。 这种情况常与连词:when当...的时候,as soon as一...就,before在...之前,after在...之后,until直到...,if如果,等引导的时间状语从句或条件状语从句连用。 如果从句有“愿意”的含义,在从句中可用“will或shall”。 You will succeed if you will (=are willing to) try. 如果你愿意一试,你是可能成功的。 比较: You will succeed if you try. 如果你尝试你就可能成功。 一般现在时的用法(6)

fortran语法手册

1F O R T R A N77四则运算符+ - */ ** (其中**表示乘方) 在表达式中按优先级次序由低到高为:+或-→*或/→**→函数→() 2 FORTRAN77变量类型 隐含约定:I-N规则 凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。 如IMPLICIT REAL (I,J) 三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。 数组的说明与使用 使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3) REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如 WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2) 10FORMAT(1X,5(A2,I2,1X,A2,I4)) 使用DATA语句给数组赋初值 变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如 DATA A,B,C/,, DATA A/,B/,C/ DATA A,B,C/3*CHARACTER*6 CHN(10) DATA CHN/10*''/INTEGER NUM(1000) DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/ 3 FORTRAN77程序书写规则

【英语】英语一般现在时用法总结(完整)

【英语】英语一般现在时用法总结(完整) 一、单项选择一般现在时 1.Professor Williams keeps telling his students that the future ___ to the well-educated. A.belongs B.is belonged C.is belonging D.will be belonged 【答案】A 【解析】 考查belong的用法。Belong to属于;不用被动语态。句意:威廉教授坚持告诉学生们,未来属于受过良好教育的人,故A正确。 2.That children ______meet with setbacks is a matter of necessity as they_____, so parents don’t worry about that. A.shall; grew up B.must; grew up C.can; grow up D.will; grow up 【答案】D 【解析】 考查情态动词和时态。 will 表示“不可避免性”。如:Boys will be boys. 句中的don’t worry说明了该句用一般现在时。 3.Mr. Black, as well as the professor who________ from Beijing University, ________ to attend our school meeting. A.come; is B.comes; are C.comes; is D.come; are 【答案】C 【解析】 考查主谓一致。第一个空处主语为定语从句中的who,指代单数名词professor,谓语用单数。第二个空处主语为Mr. Black,为单数,谓语用单数。故选C。 4.During the quality time at night, the father enjoys watching TV, while the mother together with her three children fond of listening to popular songs. A.is B.are C.was D.were 【答案】A 【解析】 考查主谓一致和时态。当主语后带有together with短语时,句中的谓语仍然和前面的主语一致,不受together with短语的干扰。根据enjoys可知,第二个分句也应用一般现在时。 5.The Small Goose Pagoda in Xi’an, one of the 22 Silk Road relics located in China, _______ back in 707 during the Tang Dynasty. A.dated B.was dated C.dates D.is dating 【答案】C

一般现在时与现在进行时用法小结

一般现在时与现在进行时用法小结 【自我归纳】观察下表各组句子中一般现在时和现在进行时的不同用法,然后补全表格内容。 一般现在时 例句总结 ◆I always get the eight o’clock bus. ◆He writes to me often. ◆Women usually live longer than men. ◆I sometimes have to work late. ◆They see each other every day. ◆We have lunch together twice a month. ◆She never goes to the cinema. 1.表示经常发生的动作或经常存在 的状态,常与always,often,usually, sometimes,every day,twice a month, ________等表时间的状语连用。 ◆He is a law student. ◆They live in the same building. 2.表示现在时刻发生的动作或存在 的状态。 ◆It snows in winter. ◆Knowledge is power. 3.表示客观事实或________。 ◆The train leaves at9:00pm. ◆The Browns arrive at7this evening. ◆When do you start? 4.表示计划、安排好的将来动作或按 时刻表发生的动作,这种一般现在时 多用于转移动词,如:________, arrive,start,begin等。

一般现在时表将来用法总结

一般现在时表将来用法总结-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

1. 当主句为将来时态或表示将来意义时,时间和条件的状语从句必须用一般现在时表将来。如: I’ll write to her when I have time. 我有空会给她写信。 Turn off the lights before you leave. 走前关灯。 If we hurry, we may catch the bus. 如果赶紧走我们可能赶得上公共汽车。Tell me in case you get into difficulty. 遇到困难请告诉我。 【注】①除表示时间和条件的状语从句外,表示让步、相似、比例的从句也必须用一般现在时表示将来。如: I’ll follow him wherever he goes. 他去哪儿,我就跟着去哪儿。 Whatever you say, I won’t pay. 无论你说什么,我都不会付钱。 Whether we help him or not, he will fail. 无论我们帮他与否,他都会失败。I’ll have a good time whether I win or lose. 赢也好,输也好,我都将会玩好。 The more you eat, the fatter you will become. 你吃得越多就会越胖。 ②另外,当主句为用将来时态时,定语从句也通常用一般现在时表将来。如: I’ll give you anything you ask for. 你要什么我都给你。 You can have anything I find. 我找到的任何东西你都可以拿去。 Everyone who comes first will get a present. 每个先来的人都可得到一份礼物。 2. 按照英语习惯,一个句子中若主要动词已经表明了所谈论动作的时间,那么与之相关的其他动词就不必再次指明同一时间,而往往使用一个比较简单的时态,如用一般现在时表示一般将来时等。比较。如: This discovery means that we will spend less on food.这一发现意味着我们将减少在食品上的花费。 This discovery will mean that we spend less on food. 这一发现意味着我们将减少在食品上的花费。 3. 在make sure(弄清楚),make certain(弄清楚),take care(注意,当心),be careful(注意,当心),mind(注意),watch(注意)等后的that从句中通常也只用一般现在时表示将来意义。如: Take care that it does not occur again. 注意别再发生这样的事。 We must take care that no one sees us. 我们必须注意别让人看见我们。Make sure you come back soon. 你要保证快点回来。 Be careful that you don’t hurt her feelings. 当心别伤了她的感情。 Watch that the baby doesn’t go near the heater. 注意别让宝宝接近加热器。 Mind you read the examination questions carefully before you begin to answer them. 在答题前要注意仔细阅读考题。 【注】在it doesn’t matter, I don’t care, I don’t mind 等结构(以及类似结构)后的名词性从句也通常用一般现在表示将来意义。如: It doesn’t matter where we go on holiday. 我们去哪儿度假都行。 Does it matter who goes first 谁先去这有关系吗 I don’t care whether we win or lose. 我不在乎我们是赢还是输。 Don’t you care what happens to them 难道你不关心他们出什么事了

fortran用法总结

我的Fortran基本用法小结 周日, 10/14/2007 - 21:00 — gator 一、说明 二、概述 三、数据类型及基本输入输出 四、流程控制 五、循环 六、数组 七、函数 八、文件 一、说明 本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。只读到第九章,主要是3~9 章,都是最基本的用法(原书共16章)。这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础, 看完前九应该很快的,花一两天就行了。觉得如果耐心看完本文,基本功能应该也可以顺利用起 来了。外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过 之后都没得及仔细想,只是按着作者的意思去理解。所以这份笔记还处于纸上谈兵的层次。如果 有不妥的方,希望大家指正。谢谢! 文中蓝色的部分是程序代码,!后面的内容为注释。 二、概述 1、名词解释 Fortran=For mula Tran slator/Translation 一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。的确,从一开始 ,IBM设计的时候就是为了方便数值计算和科学数据处理。设计强大的数组操作就是为了实现这一 目标。ortran奠定了高级语言发展的基础。现在Fortran在科研和机械方面应用很广。 2、Fortran的主要版本及差别 按其发展历史,Fortran编译器的版本其实很多。现在在广泛使用的是Fortran 77和Fortr an90。ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式, 所以编程时推荐使用90。鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。以下是77和90的一些格式上的区别。 Fortran 77:固定格式(fixed format),程序代码扩展名:.f或.for (1)若某行以C,c或*开头,则该行被当成注释; (2)每行前六个字符不能写程序代码,可空着,或者1~5字符以数字表明行代码(用作格 式化输入出等);7~72为程序代码编写区;73往后被忽略; (3)太长的话可以续行,所续行的第六个字符必须是"0"以外的任何字符。 Fortran 90:自由格式(free format),扩展名:.f90 (1)以"!"引导注释; (2)每行可132字符,行代码放在每行最前面; (3)以&续行,放在该行末或下行初。 以下都是讨论Fortran 90。 3、Fortran的一些特点,和C的一些不同 其实很多,在下面涉及具体方面时可以看到。这里只是大致提一些。

相关文档
最新文档