fortran程序30个

fortran程序30个
fortran程序30个

程序1

PROGRAM chaper1272

INTEGER :: A(10)=(/5,7,4,8,12,2,10,3,9,11/)

INTEGER :: sum=0,ave

!打开一数据文件,设置一个有格式直接存取文件,将10个数分2个记录写入文件。

!数据文件生成2个记录,每个记录行长度相同,记录长度为25 OPEN(1,FILE='input21.dat',FORM='FORMATTED',ACCESS='D IRECT',RECL=25)

WRITE(1,"(5I5)",REC=1)(A(I)+10,I=1,5) !按格式说明将头5个数写入第1个记录

WRITE(1,"(5I5)",REC=2)(A(I)+10,I=6,10)!按格式说明将后5个数写入第2个记录

READ(1,"(5I5)",REC=2)(A(I),I=6,10) !按格式说明从第2个记录中读取后5个数

READ(1,"(5I5)",REC=1)(A(I),I=1,5) !按格式说明从第1个记录中读取头5个数

DO I=1,10

sum=sum+A(I)

ENDDO

ave=sum/10

!打开一个最大记录长度为22的有格式顺序存取文件

OPEN(2,FILE='input22.dat',FORM='FORMATTED',ACCESS='D IRECT',RECL=22)

WRITE(2,"('10个数之和为:',I5)",REC=1) sum !输出1记录行,记录长度为22

WRITE(2,"('10个数平均值为:',I5)",REC=2)ave !输出1记录行,记录长度为22

WRITE(2,"(A)",REC=3) '程序运行正常结束。' !输出一个记录行,记录长度为22

END

程序2

PROGRAM average

REAL sum,ave

INTEGER n

OPEN(1,file='score.dat')

PRINT*,'正在统计平均成绩,请等待。'

sum=0.0;n=0

DO

READ(1,*,END=100) S

sum=sum+s

n=n+1

ENDDO

100 ave=sum/n

WRITE(*,"('平均成绩为:',F5.2)") ave

PRINT*,'平均成绩统计完毕。'

END

程序3

本章《文件与设备》的例题ex1009

一、本程序是一个写入文件的程序,可以用来记录全班同学的考试成绩。

二、源程序。

module typedef

type student

integer chinese,english,math

end type

end module

program exam1009

use typedef

implicit none

integer students

type(student),allocatable::s(:)

character(len=80)::filename="data.txt"

integer,parameter::fileid=10

integer::i

write(*,*) "班上有多少学生?"

read(*,*) students

allocate(s(students),stat=i)

if(i/=0) then

write(*,*) "allocate buffer fail."

stop

end if

open(fileid,file=filename)

do i=1,students

write(*,"('请输入'I2'号同学的中文、英文、及数学成绩')")i

read(*,*)s(i).chinese,s(i).english,s(i).math

write(fileid,"('座号:' I2/ '中文:'I3 ' 英文:' I3 ' 数学:'I3)")i,s(i) end do

close(fileid)

stop

end

程序4

本章《文件与设备》的例题ex1008

一、MODUL 可以用来封装程序模块,通常用来把程序具有

相关功能的函数及变量封装在一起。

二、源程序《使用MODULE》

使用这些变量的子程序和函数只要USE这个MODULE就可以使用它们。

module global

implicit none

integer a,b

common a,b

end module

program exam1008

use global

implicit none

a=1

b=2

call sub()

end program

subroutine sub()

use global

implicit none

write(*,*) a,b

return

end subroutine

程序5

本章《文件与设备》的例题ex1007

一、请调试源程序。

二、源程序《显示文件内容》

program exam1007

implicit none

character(len=79)::filename

character(len=79)::buffer

integer,parameter::fileid=10

integer::status=0

logical alive

write(*,*) "filename:"

read (*,"(A79)") filename

inquire(file=filename,exist=alive)

if(alive) then

open(unit=fileid,file=filename,access="sequential",status= "old")

do while(.true.)

read (unit=fileid,fmt="(A79)",iostat=status) buffer

if (status/=0) exit

write(*,"(A79)") buffer

end do

else

write(*,*) trim(filename)," doesn't exist."

endif

stop

end

说明:1、程序先要求用户输入所要阅读的文件

2、使用inquire查询文件是否存在

3、若存在则打开该文件,否则显示???doesn't exist.

4、对打开的文件逐行读取文件内容

5、显示改行在屏幕上

其中:因为DOS及WINDOWS窗口下,一行只能显示80个字符,所以设定

每次读入79个字符。

6、循环终止条件是STATUS不为0时。

程序6

本章《文件与设备》的例题ex1006

一、请调试源程序。

二、源程序《文件删除》

program exam1005

implicit none

integer,parameter::fileid=10

logical alive

character(len=20)::filename

write(*,*) "filename:"

read (*,"(A20)") filename

inquire(file=filename,exist=alive)

if(alive) then

open(unit=fileid,file=filename)

close(fileid,status="DELETE")

else

write(*,*) trim(filename)," doesn't exist."

endif

stop

end

用close命令关闭某文件时,可用参数DELETE删除该文件TRIM函数用来删除字符串后面的多余空格

程序7

本章《文件与设备》的例题ex1005

一、请调试源程序。

二、源程序《查询文件的状态》

program exam1005

implicit none

character (len=20)::filename="rr.f90"

logical alive

inquire (file=filename, exist=alive)

if(alive) then

write (*,*) filename ,"exist."

else

write(*,*)filename,"doesn't exist."

endif

stop

end

说明:inquire 命令可以查询字符串filename中的文件是否存在。文件存在时

ALIVE会被设成 .TRUE.,不存在则会被设成.FALSE.

程序8

本章《文件与设备》的例题ex1004

一、请调试源程序,仔细阅读注释语句。

二、源程序《有格式顺序文件的存取》

PROGRAM exam1004

INTEGER ::A(10),sum=0,ave

OPEN(1,FILE='input1.dat')

READ(1,*)(A(I),I=1,10) !按表控格式从数据文件中输入10个数!READ(1,*) A(1),A(2),A(3),A(4),A(5) !可用3个READ语句分3个行输入

!READ(1,*) A(6),A(7)

!READ(1,*) A(8),A(9),A(10)

CLOSE(1)

DO I=1,10

sum=sum+A(I)

ENDDO

ave=sum/10

!打开一个最大记录长度为25的有格式顺序存取文件

OPEN(2,FILE='c:\input2.dat',RECL=25)

WRITE(2,"('10个数之和为:',I5)") sum !输出一个记录行WRITE(2,"('10个数平均值为:',I5)") ave !输出一记录行WRITE(*,*) '程序运行正常结束。'

END

三、创建数据文件input1.dat

使用文本编辑器创建

数据文件中有10个整数,第1行5个,第2行2个,第3行3个数据文件有3个记录行,每个记录行长度不同

输入数据文件内容:

5, 7, 4, 8, 12

2,10

3, 9,11

输出数据文件内容:

10个数之和为:71

10个数平均值为:7

显示器输出信息:“程序运行正常结束。”

四、有格式顺序存取文件读写操作的方法?

有格式顺序存取文件读写操作与键盘、显示器的读写操作类似,不

同的是需要用OPEN语句打开文件,指定设备号,在READ和WRITE语句

中指定设备号,而不是星号“*”。

对于有格式顺序存取文件,OPEN中的RECL选项可指定文件的最大记录长度,但RECL选项对输入没有影响,按实际记录长度输入数据, RECL选项对输出有影响,如果输出数据是字符串,则超过最大记录长度将换行输出(下一个记录),如果输出数据不是字符串,则按表控格

式域宽或格式编辑符指定域宽输出,允许超出最大记录长度,保证输

出数据的完整性,超出最大记录长度后,下一个输出数据项换行输出。程序9

本章《文件与设备》的例题ex1003

一、请调试源程序,仔细阅读注释语句。

二、源程序《设备号与文件的关系》

PROGRAM exam1003

INTEGER fac

!输出数据至显示器,设备号可以是*或6

WRITE(*,"('输入一个整数N:'\)")!WRITE(6,*) '输入一整数N:' !从键盘输入数据,设备号可以是*或5

READ(*,*) N !或者READ(5,*) N

!使用OPEN语句打开一个外部文件,设备号为1

OPEN(UNIT=1,FILE='c:\factor1.dat',STATUS='NEW')

fac=1

DO I=1,N

fac=fac*I

!向设备号为1的外部文件输出数据,有格式输出

WRITE(1,"(I3,'!=',I7)") I,fac

ENDDO

!关闭设备号为1的逻辑设备

CLOSE(1)

!向显示器输出数据

WRITE(6,*) '程序运行结束。'

END

三、运行程序

输入数据为:

输入一个整数N:5↙

程序运行结束后,从显示器输出数据为:“程序运行结束。”,外部文件“factor.dat”中输出数据为:

1!= 1

2!= 2

3!= 6

程序10

本章《文件与设备》的例题ex1002

一、请调试源程序,并注释相关语句。

二、源程序《使用文件形式组织数据》

PARAMETER(max=100)

REAL::score(max),n,sum=0.0,ave

OPEN(1,FILE='exam2.in') !注释:

OPEN(2,FILE='c:\exam2.out') !注释:

READ(*,*) n

IF (n

READ(1,*) (score(I),I=1,n)

DO I=1,n

sum=sum+score(I)

ENDDO

ave=sum/n

WRITE(2,*) '学生成绩有:' !注释: WRITE(2,100) (score(I),I=1,n-1)!注释: WRITE(2,"(1X,F5.1)") score(N) WRITE(2,200) ave

100 FORMAT(1X,F5.1,','\)

200 FORMAT(1X,'平均分数:',F5.1)

ELSE

PRINT*,'数据太多,超出空间要求。'

ENDIF

close(1)

CLOSE(2)

END

三、数据文件

输入数据文件exam2.in

5

78.5,55.0,85.5,90.0,68.5

输出数据文件exam2.out

学生成绩有:

78.5, 55.0, 85.5, 90.0, 68.5

平均分数:75.5

四、问题:使用文件来组织数据的步骤,它的好处是什么?

上述程序使用数据文件“exam2.in”(称为输入数据文件)来组织待输入的

有关数据,如:有n个成绩数据。使用数据文件“exam2.out”(称为输出数

据文件)来存放输出数据,如:提示信息“学生成绩有:”;n个成绩数据; 平均分数ave等。对于输入数据文件(文本文件)需要在程序运行前通过Devaloper Studio开发环境建立,并编辑输入有关输入数据。对于输出数

据文件无需事先建立,程序运行过程中自动创建,并将数据输出到程序新创

建的输出数据文件中,其后可随时打开输出数据文件,浏览输出数据,也可被

其它程序使用。

在程序中使用数据文件,需要通过OPEN语句打开这些文件,指定逻辑设备和

外部文件名,建立两者间的相互关系。在输入输出语句中,直接使用相关的

逻辑设备号(如:1、2)从文件中输入数据,或将数据输出至文件。改变数

据文件中数据不影响程序代码,程序不需重新编译和构建,直接运行即可。

程序11

本章《文件与设备》的例题ex1001

一、请调试源程序,并注释相关语句。

二、源程序《使用键盘、屏幕组织数据》

PROGRAM ex1001

PARAMETER(n=5) ! 注释

REAL::score(n),sum=0.0,ave

! READ(*,*) (score(I),I=1,n)! 注释

score=(/78.5,55.0,85.5,90.0,68.5/)! 注释

DO I=1,n

sum=sum+score(I)

ENDDO

ave=sum/n

WRITE(*,*)'学生成绩有:'

WRITE(*,100) (score(I),I=1,n)

WRITE(*,200) ave

100 FORMAT(1X,F5.1,','\) ! 注释

200 FORMAT(1X,'平均分数:',F5.1)

END

本程序组织数据的方法会带来什么后果?

本程序所处理的数据比较少(5个数据),数据通过赋值语句在内部生成(也可通过READ语句从键盘输入),数据通过WRITE语句从显示器上输出。

数据的这种组织方式在数据量比较少的情况下是可行的,并没有什么

不足之处。问题是如果程序处理的数据量比较大(如:20个、30个、50个、100个、…), 数据的这种组织方式将给程序的设计、编写和使用带来诸多不便。如果程序处理的数据个数达到100个,则在程序中

就要写100个数据。如果这些数据有所变化,则需要在程序中直接修改数据,每次修改后,都需要重新编译、构建和运行。

这种在程序中直接修改数据的做法是非常危险的,容易产生错误,将严重影响程序的可靠性。

程序12

PROGRAM exam4

CHARACTER*40 str1,str2

str1='125,250,375'

READ(str1,*) i,j,k

WRITE(str2,100) i,j,k,i+j+k

100 FORMAT('i=',I3,' j=',I3,' k=',I3,' i+j+k=',I3) PRINT*,i,j,k

PRINT*,str2

END

程序13

!用COMMON语句建立全局变量

!使用GROUP参数将公共区分组使用,

目的是把变量分类,并放在彼此独

立的公共区内。

program ex0909

implicit none

integer:: a,b

common /GROUP1/a !定义公共区1 common /GROUP2/b !定义公共区2 a=1

b=2

call showGROUP1()

call showGROUP2()

stop

end

subroutine showGROUP1() implicit none

integer :: num1

common /GROUP1/num1

write(*,*) num1

return

end

subroutine showGROUP2() implicit none

integer :: num1

common /GROUP2/num1

write(*,*) num1

return

end

程序14

!用COMMON语句建立全局变量

!函数和程序间,可以使用COMMON语句将各自的变量共享同一存储区域,来实现数据传递的作用。program ex0908

implicit none

integer:: a,b

common a,b !定义公共区

a=1

b=2

call showcommon()

stop

end

subroutine showcommon()

implicit none

integer :: num1,num2

common num1,num2 !定义公共区

write(*,*) num1,num2

return

end

程序15

!自定义函数(FUNCTION)的使用

!函数如果很简短又只在同一程序或函数中使用,可以这样来写。program ex0907

implicit none

real :: a=1

real :: b

real add !此处声明一个函数

add(a,b)=a+b !直接把函数写出,省略了定义。

write(*,*) add(a,3.0) !此处调用一个函数

stop

end

程序16

!自定义函数(FUNCTION)的使用

!我们可以创建FORTRAN库里没有的函数,注意函数的定义、调用和声明语句。

program ex0906

implicit none

real :: a=1

real :: b=2

real,external ::add !此处声明一个函数

write(*,*) add(a,b) !此处调用一个函数

stop

end

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=)的语法格式声明字符变量的长度。

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程序案例题汇编(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

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的值'

中国海洋大学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、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

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

fortran程序30个

程序1 PROGRAM chaper1272 INTEGER :: A(10)=(/5,7,4,8,12,2,10,3,9,11/) INTEGER :: sum=0,ave !打开一数据文件,设置一个有格式直接存取文件,将10个数分2个记录写入文件。 !数据文件生成2个记录,每个记录行长度相同,记录长度为25 OPEN(1,FILE='input21.dat',FORM='FORMATTED',ACCESS='D IRECT',RECL=25) WRITE(1,"(5I5)",REC=1)(A(I)+10,I=1,5) !按格式说明将头5个数写入第1个记录 WRITE(1,"(5I5)",REC=2)(A(I)+10,I=6,10)!按格式说明将后5个数写入第2个记录 READ(1,"(5I5)",REC=2)(A(I),I=6,10) !按格式说明从第2个记录中读取后5个数 READ(1,"(5I5)",REC=1)(A(I),I=1,5) !按格式说明从第1个记录中读取头5个数 DO I=1,10 sum=sum+A(I) ENDDO ave=sum/10 !打开一个最大记录长度为22的有格式顺序存取文件

OPEN(2,FILE='input22.dat',FORM='FORMATTED',ACCESS='D IRECT',RECL=22) WRITE(2,"('10个数之和为:',I5)",REC=1) sum !输出1记录行,记录长度为22 WRITE(2,"('10个数平均值为:',I5)",REC=2)ave !输出1记录行,记录长度为22 WRITE(2,"(A)",REC=3) '程序运行正常结束。' !输出一个记录行,记录长度为22 END 程序2 PROGRAM average REAL sum,ave INTEGER n OPEN(1,file='score.dat') PRINT*,'正在统计平均成绩,请等待。' sum=0.0;n=0 DO READ(1,*,END=100) S sum=sum+s n=n+1 ENDDO 100 ave=sum/n

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程序书写规则

Fortran95程序设计课后习题答案(word版方便)

第四章 1.program main implicit none write(*,*) "Have a good time." write(*,*) "That's not bad." write(*,*) '"Mary" isn''t my name.' end program 2.program main real, parameter :: PI=3 implicit none.14159 real radius write(*,*) "请输入半径长" read(*,*) radius write(*,"(' 面积='f8. 3)") radius*radius*PI end program 3.program main implicit none real grades write(*,*) "请输入成绩" read(*,*) grades write(*,"(' 调整后成绩为'f8.3)") SQRT(grades)*10.0 end program 4.integer a,b real ra,rb a=2 b=3 ra=2.0 rb=3.0 write(*,*) b/a ! 输出1, 因为使用整数计算, 小数部分会无条件舍去write(*,*) rb/ra ! 输出1.5 5.p rogram main implicit none type distance real meter, inch, cm end type type(distance) :: d write(*,*) "请输入长度:" read(*,*) d%meter d%cm = d%meter*100 d%inch = d%cm/2.54 write(*,"(f8.3'米='f8.3'厘米='f8.3'英寸')") d%meter, d%cm, d%inch end program 第五章 1.program main implicit none integer money real tax write(*,*) "请输入月收入" read(*,*) money if ( money<1000 ) then tax = 0.03 else if ( money<5000) then tax = 0.1 else tax = 0.15 end if write(*,"(' 税金为'I8)") nint(money*tax) end program 2.program main implicit none integer day character(len=20) :: tv write(*,*) "请输入星期几" read(*,*) day select case(day) case(1,4) tv = "新闻" case(2,5) tv = "电视剧" case(3,6) tv = "卡通" case(7) tv = "电影" case default write(*,*) "错误的输入" stop end select write(*,*) tv end program 3.program main implicit none integer age, money real tax write(*,*) "请输入年龄" read(*,*) age write(*,*) "请输入月收入" read(*,*) money if ( age<50 ) then if ( money<1000 ) then tax = 0.03 else if ( money<5000 )then tax = 0.10 else tax = 0.15 end if else if ( money<1000 ) then tax = 0.5 else if ( money<5000 )then tax = 0.7 else tax = 0.10 end if end if write(*,"(' 税金为'I8)") nint(money*tax) end program 4.program main implicit none integer year, days logical mod_4, mod_100, mod_400 write(*,*) "请输入年份" read(*,*) year mod_4 = ( MOD(year,4) == 0 ) mod_100 = ( MOD(year,100) == 0 ) mod_400 = ( MOD(year,400) == 0 ) if ( (mod_4 .NEQV. mod_100) .or. mod_400 ) then days = 366 else days = 365 end if write(*,"('这一年有'I3'天')") days stop end program 第六章 1.program main implicit none integer i do i=1,5 write(*,*) "Fortran" end do stop end program 2.program main implicit none integer i,sum sum = 0 do i=1,99,2 sum = sum+i end do write(*,*) sum stop end program 3.program main implicit none integer, parameter :: answer = 45 integer, parameter :: max = 5 integer weight, i do i=1,max write(*,*) "请输入体重" read(*,*) weight if ( weight==answer ) exit end do if ( i<=max ) then write(*,*) "猜对了" else write(*,*) "猜错了" end if stop end program 4.program main implicit none integer, parameter :: max=10 integer i real item real ans ans = 1.0 item = 1.0 do i=2,max item = item/real(i) ans = ans+item

FORTRAN经典入门程序20例

对于FORTRAN的初学者。这些例子可作为小练习。 1.例题:计算工资问题。每小时工资为RATE,如果工作超过40小时,加班呢部分工资是正常时间工资的1.5倍。 C Payroll with overtime program payroll real rate, hours, pay read (*,*) rate, hours if (hours>40) then pay=40*rate+(hours-40)*1.5*rate else pay=hours*rate END IF print *,"rate=", rate print *, "hours=", hours print *,"pay=",pay end 2.学生成绩问题。大于80为A级。大于60小于80为B级。小于60为C级。IF的嵌套。注意空格可以看清楚else if ,end if,print的内容. PROGRAM GRADESTUDENT READ *,GRADE IF (GRADE .GE. 80) THEN PRINT *,GRADE,"GRADE=>A" ELSE IF (GRADE.LT.60) THEN PRINT*,GRADE,"GRADE=>C" ELSE PRINT*,GRADE,"GRADE=>B" END IF END IF END 3.三个数按从小到大排序。 PROGRAM MAXMIN REAL A,B,C,T READ *,A,B,C IF (A.GT.B) THEN T=A A=B B=T ELSE END IF IF (B.GT.C) THEN T=B B=C

PROGRAM EQUATION READ (*,*) X IF (X .GE. 0.0) Y=3*X+6 IF (X .LT. 0.0) Y=-X**2+2*X-8 PRINT *,"X=",X, "Y=",Y END 6.CONTINUE语句。为了使循环的起止范围清晰,使用终端语句 例:求5! program ex1 FACT=1 do 10, N=1,5,1 ##DO 语句标号,循环不变量=初值,终值,步长FACT=FACT*N 10continue print*,FACT end 求1!+2!+3!+···+N! READ *,N FACT=1

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的一些不同 其实很多,在下面涉及具体方面时可以看到。这里只是大致提一些。

优秀的fortran程序编程规范

Programming Guidelines for PARAMESH Software Development(NOTE: This document is heavily based upon the Introduction This document describes the programming guidelines to be used by software developers wishing to contribute software to the PARAMESH, parallel, adaptive mesh refinement software. We welcome people to contribute software and/or bug fixes to the PARAMESH AMR software. Software to be added to PARAMESH can come in 2 forms: ?Improvements to the basic PARAMESH kernal software found in the mpi_source, source and hearders directories. ?Software the addes additional functionality to PARAMESH. This type of software should be added as separate entities within the utilities directory. Complete applications should not be added as part of PARAMESH. PARAMESH is only meant to be a tool which supports parallel adaptive mesh applications and any software which supports this goal will be considered for acceptance into PARAMESH. For instance, a solver for the poisson equation that works with PARAMESH would be acceptable, but an application that solves the equation of gas dynamics would not. The PARAMESH software is slowly being evolved to be consistent with this document. Any new software which is contributed should follow these guidlines. If not, it will be rejected. This document deals mainly with Fortran 90, since most new PARAMESH software will probably be written in that language. [Throughout this document, the term "Fortran" should be understood to mean Fortran 90.] Since we expect C and C++ also to be used, a separate document dealing with them will be developed in the future. In the meantime, this document can serve as a general guideline for developing code to be used with PARAMESH in those programming languages. The guidlines in this document should be adhered to by ANY software which will be released as part of the PARAMESH package of source code. This includes software 'utilities' (stored in the paramesh/utilities directory) which add functionality to PARAMESH for different algorithms. It also should be applied to any new code developed and added to the main source code for PARAMESH in the paramesh/source, paramesh/mpi_source, or paramesh/headers directories.

相关文档
最新文档