fortran用法总结

fortran用法总结
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的一些不同

其实很多,在下面涉及具体方面时可以看到。这里只是大致提一些。

(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/3215724105.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中的循环可以加标签,如d前面的

!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'。Fortan 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(条件1) then

……

else if(条件2)then

……

else if (条件3)then

……

else

……

end if

(3) 嵌套:

if(逻辑判断式) then

if(逻辑判断式) then

if(逻辑判断式) then

else if(逻辑判断式) then

……

else

……

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

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,

还可以嵌套

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 where(a<3)

b=a !a中小于3的元素赋值给b对应位置的元素

end where

再如:where(a(1:3)/=0) c=a !略去了end where,因为只跟了一行where可嵌,也

!可类似do循环有署名标签。

7、FORALL

有点像C中的for循环:

forall(triplet1[,triplet2 [,triplet3…]],mask)

其中triplet形如i=2:6:2,表示循环,最后一个数字省略则增量为1

例如:

forall(i=1:5,j=1:5,a(i,j)<10)

a(i,j)=1

end forall

又如: forall(i=1:5,j=1:5,a(i,j)/=0) a(i,j)=1/a(i,j)

forall也可以嵌套使用,好比C中for循环的嵌套。

七、函数

Fortran中函数分两类:子程序(subroutine)和自定义函数(function)。自定义函数本

质上就是学上的函数,一般要传递自变量给自定义函数,返回函数值。子程序不一定是这样,可

以没有返值。传递参数要注意类型的对应,这跟C是一样的。

1、子程序

目的:把某一段经常使用的有特定功能的程序独立出来,可以方便调用。

习惯上一般都把子程序放在主程序结束之后。

形式:

subroutine name (parameter1, parameter2)

!给子程序起一个有意义的名字。可以传递参数,这样可以有返回值。括号内也可以

空着,代不传递参数。

implicit none

integer:: parameter1, parameter2 !需要定义一下接收参数的类型。

…… !接下来的程序编写跟主程序没有任何别。

……

mreturn !跟C不同,这里表示子程序执行后回到调用它的地方继续执行下面的程序。不一定放

!在最后。可以放在子程序的其他位置,作用相同;子程序中return之后的部分不执行。end [subroutine name]

调用:使用call命令直接使用,不需要声明。在调用处写:

call subroutine name(parameter1,parameter2)

注意点:

a.子程序之间也可相互调用。直接调用就是了,像在主程序中调用子程序一样。

b.传递参数的原理和C中不同。Fortran里是传址调用(call by address/reference),就是

传递时用参数和子程序中接收时用的参数使用同一个地址,尽管命名可以不同。这样如果子程序

的执行改子程序中接收参数的值,所传递的参数也相应发生变化。

c.子程序各自内部定义的变量具有独立性,类似于C。各自的行代码也具有独立性。因此各

个子程序主程序中有相同的变量名、行代码号,并不会相互影响。

2、自定义函数

和子程序的明显不同在于:需要在主程序中声明之后才能使用。调用方式也有差别。另外

按照惯例用函数不去改变自变量的值。如果要改变传递参数的值,习惯上用子程序来做。

声明方式:real, external :: function_name

一般自定义函数也是放在主程序之后。

形式:

function function_name(parameter1, parameter2)

implicit none

real:: parameter1, parameter2 !声明函数参数类型,这是必需的

real::function_name !声明函数返回值类型,这是必需的

……

……

function_name=…. !返回值的表达式

return

end

也可以这样直接声明返回值类型,简洁些:

real function function_name(parameter1, parameter2)

implicit none

real:: parameter1, parameter2 !这个还是必需的

……

……

function_name=…. !返回值表达式

return

end

调用:function_name(parameter1,parameter2)

不需要call命令。

自定义函数可以相互调用。调用时也需要事先声明。

总之,调用自定义函数前需要做声明,调用子程序则不需要。

3、关于函数中的变量

(1)注意类型的对应。Fortran中甚至可以传递数值常量,但只有跟函数定义的参数类型

对应才会到想要的结果。如call ShowReal(1.0)就必须用1.0而不是1。

(2)传递数组参数,也跟C一样是传地址,不过不一定是数组首地址,而可以是数组某个

指定元素地址。比如有数组a(5),调用call function(a)则传递a(1)的地址,调用call functio n(a(3))则递a(3)的地址。

(3)多维数组作为函数参数,跟C相反的是,最后一维的大小可以不写,其他维大小必须

写。这决于Fortran中数组元素column major的存放方式。

(4)在函数中,如果数组是接收用的参数,则在声明时可以用变量赋值它的大小,甚至可

以不指定小。例如:

subroutine Array(num,size)

implicit none

integer:: size

integer num(size) !可以定义一个数组,其大小是通过传递过来的参数决定的。这很实用

……

……

return

end

(5)save命令:将函数中的变量值在调用之后保留下来,下次调用此函数时该变量的值就

是上次保的值。只要在定义时加上save就行:

integer, save :: a=1

(6)传递函数(包括自定义函数、库函数、子程序都是可以的)。类似于C中的函数指针需要在主程序和调用函数的函数中都声明作为参数传递的函数。如

real, external :: function !自定义函数

real, intrinsic :: sin !库函数

external sub !子程序

(7)函数使用接口(interface):一段程序模块。以下情况必需:

a.函数返回值为数组

b.指定参数位置来传递参数时

c.所调用的函数参数个数不固定

d.输入指标参数时

e.函数返回值为指针时。

具体用法结合例子容易看懂。例子都很长。看书吧。

4、全局变量

功能就不用说了。原理:根据声明时的相对位置关系而取用,不同与C中根据变量名使用。如果在主程序中定义:

integer :: a,b

common a,b !就是这样定义全局变量的

在子程序或自定义函数中定义:

integer :: c,d

common c,d

则a和c共用相同内存,b和d共用相同内存。

全局变量太多时会很麻烦。可以把它们人为归类,只需在定义时在common后面加上区间名。如

common /groupe1/ a, common /group2/ b。这样使用时就不必把所有全局变量

都列出来,再声明common /groupe1/ c就可以用a、c全局变量了。

可以使用block data程序模块。在主程序和函数中不能直接使用前面提到的data命令给全局变量赋初值。可以给它们各自赋初值;如果要使用data命令必须要这样:

block data [name]

implicit none

integer a,b,c

real d,e

common a b c

common /group1/ d,e

data a,b,c,d,e /1,2,3,4.0,5.0/

end [block data [name]]

5、Module

Module不是函数。它用于封装程序模块,一般是把具有相关功能的函数及变量封装在一起

。用法很单,但能提供很多方便,使程序变得简洁,比如使用全局变量不必每次都声明一长串,

写在odule里调用就行了。Module一般写在主程序开始之前。

形式:

module module_name

……

……

end [module [module_name]]

使用:在主程序或函数中使用时,需要在声明之前先写上一行:use module_name.

Module中有函数时必须在contains命令之后(即在某一行写上contains然后下

面开始写数,多所有函数都写在这个contains之后)。并且module中定义过的变量在module里的函数中可直接使用,函数之间也可以直接相互调用,连module中的自定义函数在被调用时也不用先声明。

6、include放在需要的任何地方,插入另外的文件(必须在同一目录下)。如:

include 'funcion.f90'

八、文件

1、文本文件

Fortran里有两种读取文件的方式,对应于两种文件

顺序读取:用于文本文件

直接读取:用于二进制文件

这里只摘录关于文本文件的读取。一般模式如下。

character(len=20)::filenamein="in.txt", filenameout="out.txt" !文件名

logical alive

integer::fileidin=10,fileidout=20

!10,20是给文件编的号,除1,2,5,6的正整数都可,因为2、6是默认的输出位置(屏幕

),1、5是默认的输入位置(键盘)

integer::error

real::in,out

!下面这一段用于确认指定名字的文件是否存在

inquire(file=filenamein, exist=alive) !如果存在,alive赋值为0

if(.NOT. alive) then

write(*,*) trim(filenamein), " doesn't exist."!trim用于删去filenamein中字串

!后面的stop多余空格,输出时好看些

end if

open([unit=]fileidin, file=filenamein, status="old")

open([unit=]fileidout,file=filenameout[,status="new"])

!unit指定输入/输出的位置。打开已有文件一定要用status="old";打开新文件用status="new";!不指定status,则默认status="unknown",覆盖已有文件或打开新文件……

read([unit=]fileidin, [fmt=]100,iostat=error )in !error=0表示正确读入数据。

100 format(1X,F6.3)

!按一定格式输入输出,格式可以另外写并指定行代码,也可以直接写在read/write中

write(([unit=]fileidout, "(1X,F6.3)")out

close(fileidin)

close(fileidout)

!1X代表一个空格。F6.3代表real型数据用占6个字符(含小数点),其中小数点后三位。

!常用的还有I3,用于整型数据,共占三个字符;A8,字符型,占8个字符。换行用 /

二进制文件的读取有所不同。不再列举。

2、内部文件

另一个很实用的读写功能是内部文件(internal file)。看看这个例子就明白了。

integer::a=1,b=2

character(len=20)::string

write(unit=string,fmt="(I2,'+',I2,'=',I2)")a,b,a+b

write(*,*)string

则结果输出1+2=3。反过来也是可以的:

integer a

character(len=20)::string="123"

read(string,*)a

write(*,*)a

则输出123。

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) 经常性或习惯性的动作,常与表示频腮度的时间状语连用。 时间状语: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语句

Fortran复习题讲解

FORTRAN程序设计复习题 选择题 B (1)下列各FORTRAN表达式中合法的是 A) S+T*2P >= 0.0 B) .NOT. (A*B+C) C) A2+B2/(C+D) <= 0.0 D) (A+B).NOT.A*B.GT.0.0(.NOT.只跟一个表达式) C (2)数学式(3/5)ex+y的FORTRAN表达式是 A) 3*EXP(X+Y)/5 B) 3*E* *(X+Y)/5.0 C) (3/5)*EXP(X+Y) D) (3.0/5.0)EXP(X+Y) D (3)下列FORTRAN77表达式中不合法的是 A) A.GT.B.EQV.C.GT.D B) A.AND.B.AND.C.AND.D C) .NOT.(X.LE.0.0) D) A.LT.B.LT.C.LT.D D (4)下列叙述中不正确的是 A) FORTRAN子程序可以单独编译 B) 对一个FORTRAN源程序进行编译和连接无误后可生成可执行文件 C) 即使编译和连接都正确无误,FORTRAN程序运行时仍可能出错 D) FORTRAN连接的主要任务是把函数库中的函数翻译成机器指令(主要任务为连接目标文件) B (5)在下列FORTRAN77运算符中,优先级最高的是 A) .AND. B) .NOT. C) .OR. D) .EQ. B (6)FORTRAN表达式"6/5+9/2**3/2"的值为 A) 33 B) 1 C) 5 D) 3 A (7)下列FORTRAN77 表达式中,合法的是:A)相当于0.0.LE.X .AND.(.NOT.(X.GE.10.0 ))A) 0.0.LE.X .AND..NOT.X.GE.10.0 B) 0.0.GE.X.LT.10.0 C) 0.0.LE.X.GE.10. D) 10.0.LE.X.OR..AND.X.GT.0.0 D (8)关于编译一个FORTRAN源程序文件,下列说法中错误的是 A) 允许编译只有一个主程序而没有子程序的源文件 B) 允许编译有多个子程序的源文件 C) 允许编译只有一个子程序而没有主程序的源文件 D) 允许编译有多个主程序的源文件 C (9)在FORTRAN77源程序中,续行标志符必须放在 A) 第1列 B) 第1-6列 C) 第6列 D) 第5列 D (10)下列关于"SUBROUTIN E MAP(X,Y)"语句行的叙述中,不正确的是 A) 这是子程序的第一个语句 B) 字符串"MAP"是子程序名 C) 变量X是子程序的形参 D) 子程序执行后,MAP将返回整型数据(子程序无返回值,自定义函数才有) A (11)FORTRAN表达式"2/4+0.5"的值是 A) 0.5 B) 1 C) 1.0 D) 0 D (12)FORTRAN表达式"MOD(4.9,1.3)"的值是 A)1.3 B)0.0 C)4.9 D)1.0 A (13下列FORTRAN运算符中,优先级最低的是 A)逻辑运算符.AND. B)算术运算符* C)关系运算符 >= D)算术运算符+ A (14下列语句函数的定义中正确的是 A)F(X,Y)=(X+Y)/(X*Y)+7.0 B)FUNCTION FUN(I,J,K)=3*I+2*J+0.5*K

fortran程序案例题汇编(14道)

1.Fibonacci数列定义如下: F1=1 F2=1 F n=F n-1+F n-2 (n>2) 求Fibonacci数列的前30项。 integer f(30),i f(1)=1 f(2)=2 do i=3,30 f(i)=f(i-1)+f(i-2) enddo print*,f end 2.输入10个学生的总分,求每个学生的名次integer s(10),a(10),i,j do i=1,10 read*,s(i) enddo do i=1,10 a(i)=1 do j=1,10 if(s(i)

3.给定一组数,按照从小到大的顺序输出。integer a(10) integer p do i=1,10 read *,a(i) enddo do j=1,9 p=j do i=j+1,10 if (a(i)

4.输入若干名学生的学号和三门课程(语数英)的成绩,要求从键盘输入一个学生的学号,能打印出该学生的三门功课成绩和总分。 character*6,dimension(:),allocatable::xue integer,dimension(:,:),allocatable::g integer,dimension(:),allocatable::zong integer i,j,n character*6,xh print *,"请输入学生的个数" read *,n allocate(xue(n)) allocate(g(n,3)) allocate(zong(n)) do i=1,n read *,xue(i),(g(i,j),j=1,3) enddo do i=1,n zong(i)=0 do j=1,3 zong(i)=zong(i)+g(i,j) enddo enddo print *,"请输入你要打印的学生的学号" read *,xh do i=1,n if(xue(i)==xh)then print *,(g(i,j),j=1,3),zong(i) exit endif enddo end

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

高考英语一般现在时用法总结(完整) 一、单项选择一般现在时 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

(完整)Fortran经典编程语言笔记(你值得拥有)

FORTRAN笔记 2014.10.07 目录 第七讲_FORTRAN的基本知识.ppt (2) FORTRAN语言程序设计初步 (2) FORTRAN源程序的书写格式(以77为例) (2) 变量 (2) 变量类型 (2) 算术运算符和运算优先级 (3) 赋值语句 (3) 参数语句(PARAMETER语句) (3) END语句 (3) PAUSE语句 (3) 逻辑运算和选择结构 (4) 关系表达式 (4) FORTRAN中数组的定义及使用 (4) 其他 (5) 1. fortran语言定义CHARACTER*6 TTL(14,3),CNAM(400)是什么意思? (5) 2. fortran里character*10 是什么意思 (5) 3. Fortran中kind是什么函数? (5)

第七讲_FORTRAN的基本知识.ppt FORTRAN语言程序设计初步 FORTRAN是Formula Translation的缩写,意为“公式翻译”,它是为科学、工程问题或企事业管理中的那些能够用 数学公式表达的问题而设计的,其数值计算的功能较强。 常用的是FORTRAN77和FORTRAN90两种标准。 1、一个程序由若干个程序单位组成。主程序和每一个子程序分别是一个独立的程序单位。 2、每一个程序单位都是以“END”结束的。 3、一个程序单位包括若干行。 1)语句行。由一个FORTRAN语句组成。 2)非语句行,即注释行。 4、FORTRAN程序中的语句可以没有标号,也可以有标号,根据需要而定。标号的作用是标志一个语句以便被其 他语句引用。 5、一个程序单位中各类语句的位置是有一定规定的。 6、FORTRAN源程序必须按一定的格式书写。 FORTRAN源程序的书写格式(以77为例) 每一行有80列,分别如下: 1、第1-5列为标号区。一行中第一列为“C”或“*”,该行即被认为是注释行。 2、第6列为“续行标志区”,如果在一行的第6列上写一个非空格和非零的字符,则该行作为其上一行的续行。 3、第7-72列为语句区。 4、第73-80列,注释区。 变量 变量名:一个变量需要用一个名字(变量名)来识别。在同一个程序单位中不能用同一个变量名代表两个不同的变 量。 FORTRAN的变量名按以下规则选定: 1)第一个字符必须是字母,即变量名必须以字母开头; 2)在一个字母后面可以跟1-5为数字或字母。 如果选定的变量名超过6个字符,则只有前面6个字符有效。 注:在变量名中大写与小写字母是等价的。 变量类型 整型变量Integer、实型变量Real、双精度变量Double Precision、复型变量Complex、逻辑型变量Logical和字符型变量Character。 1、隐含约定(I-N规则) FORTRAN规定:在程序中的变量名,凡以字母I,J,K,L,M,N六个字母开头的,即认为该变量为整型变量。 在程序中,凡是变量名以字母I,J,K,L,M,N,i,j,k,l,m,n开头的变量被默认为整型变量,以其他字母开头的变量被 默认为实型变量。 2、用类型说明语句确定变量类型 1)INTEGER语句(整型说明语句) 2)REAL语句(实型说明语句) 3)DOUBLE PRECISION语句(双精度说明语句) 4)COMPLEX语句(复型说明语句) 5)LOGICAL语句(逻辑型说明语句)

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

最新英语一般现在时用法总结(完整) 一、单项选择一般现在时 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

中国海洋大学Fortran程序考试典型题

1、找出100-150之间和400-450之间能被9整除的数 2、找出100-999之间的回文数 3、找出水仙花数

4、输出“*”图形 5、输入n个数,找出大于平均值的数和最小数

6、把一个数值型数组的相同数删除到只剩一个 7、形成一个5*5矩阵,对角线元素为“i”,其余为“j”program juzhen implicit none integer I,J integer,parameter::size=5 integer::a(size,size) forall(I=1:size,J=1:size,I>J) a(I,J)=j forall(I=1:size,J=1:size,I==J) a(I,J)=i forall(I=1:size,J=1:size,I

integer,allocatable::c(:) write(*,*) "输入数组A的数据个数" read(*,*) n write(*,*) "输入数组B的数据个数" read(*,*) m l=m+n allocate (a(n)) allocate (b(m)) allocate (c(l)) write(*,*) "从小到大输入A的元素" do i=1,n read(*,*) a(i) end do write(*,*) "从小到大输入B的元素" do i=1,m read(*,*) b(i) end do do i=1,n c(i)=a(i) end do i=1 do while(i=c(n))then n=n+1 c(n)=b(i) goto 10 else if(b(i)>c(j).and.b(i)

fortran程序实例

1)实例3—求多个半径下的圆周长 ! z3.f90 --Fortran95 ! FUNCTIONS: ! z3 - Entry point of console application. !************************************************************************* ! PROGRAM: z3 ! PURPOSE: Entry point for the console application. !************************************************************************ program z3 ! 求多个半径下的圆周长 ! 主程序 ! PROGRAM Z3 PRINT *, 'R=',1.2,'C=',C(1.2) PRINT *, 'R=',3.4,'C=',C(3.4) PRINT *, 'R=',15.6,'C=',C(15.6) PRINT *, 'R=',567.3,'C=',C(567.3) END program z3 !子程序 FUNCTION C(R) PI=3.1415926 C=2*PI*R RETURN ! Body of z3 end

2)实例4—键盘与显示器输入/输出 a)Fortran 基本操作 b)程序指令 ! ZXZ_I_O.f90 ! FUNCTIONS: ! ZXZ_I_O - Entry point of console application. ! PROGRAM: ZXZ_I_O ! PURPOSE: Entry point for the console application. !***************输入、输出样式种种************************** program ZXZ_I_O implicit none !变量声明的位置 INTEGER(2) i; INTEGER(4) j; INTEGER(4) m; REAL n INTEGER A,B ! Variables PRINT*,'输入整数A'; READ*, A PRINT*,'输入整数B'; READ*, B B=A+B PRINT*,'B=A+B=',B WRITE(*,*) 'A*B=',A*B PRINT* ,'以上为计算机的计算结果,注意B的值'

一般现在时总结归纳

一般现在时语法总结 一般现在时:表示经常性的事情,经常性的动作或一般性事实。 时间状语: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程序设计复习题及答案

FORTRAN程序设计复习题 一、选择题 B (1)下列各FORTRAN表达式中合法的是 A) S+T*2P >= B) .NOT. (A*B+C) C) A2+B2/(C+D) <= D) (A+B).NOT.A*B.GT.(.NOT.只跟一个表达式) C (2)数学式(3/5)ex+y的FORTRAN表达式是 A) 3*EXP(X+Y)/5 B) 3*E* *(X+Y)/ C) (3/5)*EXP(X+Y)D) EXP(X+Y) D (3)下列FORTRAN77表达式中不合法的是 A) A.GT.B.EQV.C.GT.D B) A.AND.B.AND.C.AND.D C) .NOT.(X.LE.D) A.LT.B.LT.C.LT.D D(4)下列叙述中不正确的是 A) FORTRAN子程序可以单独编译 B) 对一个FORTRAN源程序进行编译和连接无误后可生成可执行文件 C) 即使编译和连接都正确无误,FORTRAN程序运行时仍可能出错 D) FORTRAN连接的主要任务是把函数库中的函数翻译成机器指令(正确描述:主要任务为连接目标文件) B (5)在下列FORTRAN77运算符中,优先级最高的是 A) .AND. B) .NOT. C) .OR. D) .EQ. B (6)FORTRAN表达式"6/5+9/2**3/2"的值为 A) 33 B) 1 C) 5 D) 3 A (7)下列FORTRAN77表达式中,合法的是: A) .AND.. B) 10.0 C) D) 提示:A)相当于 .AND.(.NOT.()) D (8)关于编译一个FORTRAN源程序文件,下列说法中错误的是 A) 允许编译只有一个主程序而没有子程序的源文件 B) 允许编译有多个子程序的源文件 C) 允许编译只有一个子程序而没有主程序的源文件 D) 允许编译有多个主程序的源文件 C (9)在FORTRAN77源程序中,续行标志符必须放在 A) 第1列 B) 第1-6列C) 第6列D) 第5列 D (10)下列关于"SUBROUTIN E MAP(X,Y)"语句行的叙述中,不正确的是 A) 这是子程序的第一个语句 B) 字符串"MAP"是子程序名 C) 变量X是子程序的形参D) 子程序执行后,MAP将返回整型数据 提示:子程序无返回值,自定义函数才有) A (11)FORTRAN表达式"2/4+"的值是 A) B) 1 C) D) 0 提示:2/4默认等于整型,=》 D (12)FORTRAN表达式"MOD,"的值是 A) B)0.0 C) D) A (13下列FORTRAN运算符中,优先级最低的是 A)逻辑运算符.AND. B)算术运算符*

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为底的幂次。

几个fortran程序

计算圆周率 REAL R,R1,R2,PI ISEED=RTC() N0=0 N=300000 DO I=1,N R1=RAN(ISEED) R2=RAN(ISEED) R=SQRT(R1*R1+R2*R2) IF(R<1.0)N0=N0+1 END DO PI=4.0*N0/N WRITE(*,*)PI END 一)蒙特卡洛计算生日问题 假设有N个人在一起,各自的生日为365天之一,根据概率理论,与很多人的直觉相反,只需23个人便有大于50%的几率人群中至少有2个人生日相同。 INTEGER M(1:10000), NUMBER1(0:364), NUMBER2 REAL X,Y ISEED=RTC() DO J=1, 10000 NUMBER1=0 X=RAN(ISEED) NUMBER1(0)=INT(365*X+1) JJJ=1 DO I=1,364 Y=RAN(ISEED) NUMBER2=INT(365*Y+1) ETR=COUNT(NUMBER1.EQ.NUMBER2) IF (ETR= =1) THEN EXIT ELSE JJJ=JJJ+1 M(J)=JJJ NUMBER1(I)=NUMBER2 END IF END DO END DO DO I=1,10000 IF(M(I).LE.23) SUM=SUM+1 END DO PRINT *,SUM/10000 END 二)MONTE CARLO SIMULATION OF ONE DIMENSIONAL DIFFUSION 蒙特卡罗计算一维扩散问题

INTEGER X,XX(1:1000,1:1000) REAL XXM(1:1000) ! X:INSTANTANEOUS POSITION OF ATOM ! XX(J,I):X*X ,J:第几天实验,I:第几步跳跃 ! XXM(I): THE MEAN OF XX WRITE(*,*) "实验天数JMAX,实验次数IMAX" READ(*,*) JMAX,IMAX ISEED=RTC() DO J=1,JMAX !第几天实验 X=0 !!! DO I=1,IMAX !第几步跳跃 RN=RAN(ISEED) IF(RN<0.5)THEN X=X+1 ELSE X=X-1 END IF XX(J,I)=X*X END DO END DO OPEN(1,FILE="C:\DIF1.DAT") DO I=1,IMAX XXM=0.0 XXM(I)=1.0*SUM(XX(1:JMAX,I))/JMAX !! WRITE(1,*) I, XXM(I) END DO CLOSE(1) END 三维的! 三)通过该程序了解FORTRAN语言如何画图(通过像素画图)USE MSFLIB INTEGER XR,YR !在的区域中画一个圆 PARAMETER XR=400,YR=400 INTEGER R, S(1:XR,1:YR) X0=XR/2 ! 圆心位置X0,YO Y0=YR/2 R=MIN(X0-10,Y0-10) !圆半径 S=0 !像素的初始状态(颜色) DO I=1,XR DO J=1,YR IF((I-X0)**2+(J-Y0)**2<=R**2)S(I,J)=10 IER=SETCOLOR(S(I,J)) IER=SETPIXEL(I,J) END DO END DO END

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

一般现在时知识点归纳总结 定义: 一般现在时表示经常或习惯性的动作或一般性事实,也可表示现在的状态或主语具备的性格和能力。 用法: (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 (否)来回答的句子。朗读一般疑问句时用升调,而一般疑问句的简略答语用降调。

相关文档
最新文档