fortran程序实例
- 格式:docx
- 大小:719.42 KB
- 文档页数:5
1.Fibonacci数列定义如下:F1=1F2=1Fn=Fn-1+Fn-2(n>2)求Fibonacci数列的前30项。
integer f(30),if(1)=1f(2)=2do i=3,30f(i)=f(i-1)+f(i-2)enddoprint*,fend2.输入10个学生的总分,求每个学生的名次integer s(10),a(10),i,jdo i=1,10read*,s(i)enddodo i=1,10a(i)=1do j=1,10if(s(i)<s(j))a(i)=a(i)+1enddoenddodo i=1,10print*,s(i),a(i)enddoend3.给定一组数,按照从小到大的顺序输出。
integer a(10)integer pdo i=1,10read *,a(i)enddodo j=1,9p=jdo i=j+1,10if (a(i)<a(p))p=ienddoif (p/=j) thent=a(p);a(p)=a(j);a(j)=tendifenddoprint *,(a(i),i=1,10)end4.输入若干名学生的学号和三门课程(语数英)的成绩,要求从键盘输入一个学生的学号,能打印出该学生的三门功课成绩和总分。
character*6,dimension(:),allocatable::xueinteger,dimension(:,:),allocatable::ginteger,dimension(:),allocatable::zonginteger i,j,ncharacter*6,xhprint *,"请输入学生的个数"read *,nallocate(xue(n))allocate(g(n,3))allocate(zong(n))do i=1,nread *,xue(i),(g(i,j),j=1,3)enddodo i=1,nzong(i)=0do j=1,3zong(i)=zong(i)+g(i,j)enddoenddoprint *,"请输入你要打印的学生的学号"read *,xhdo i=1,nif(xue(i)==xh)thenprint *,(g(i,j),j=1,3),zong(i)exitendifenddoend5.编写一个函数子程序计算所输入两个整数m、n的最大公约数。
1) 实例3 —求多个半径下的圆周长 ! z3.f90 --Fortran95 FUNCTIONS:-Entry point of con sole application.I*************************************************************************PROGRAM: z3PURPOSE: En try point for the con sole applicati on.I************************************************************************program z3 !求多个半径下的圆周长 !主程序! PROGRAM Z3PRINT *, '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 endz3•■Alta• JSwFta.■■ TTjn* FMIIH-.T jd - |叭■(Lld4ilh■ Hi li tii.IW M H MvfriiMfeai Iwi Ji JJII+M4Tml+n««I*界rFHtlE- HfrtpliK * W mita itflLuLfl-PRINT* ,'以上为计算机的计算结果,注意 B 的值'ZXZ I O.f90 FUNCTIONS: ZXZ_I_O- Entry point of con sole applicati on.PROGRAM: ZXZ_I_OPURPOSE: En try point for the con sole applicati on.program ZXZ_I_O implicit none!变量声明的位置INTEGER(2) i; INTEGER(4) j; INTEGER(4) m; REAL n INTEGER A,B PRINT*,'输入整数 A'; READ*, A PRINT*,'输入整数 B'; READ*, B B=A+BWRITE(*,*) 'A*B=',A*B实例4 —键盘与显示器输入/输出2)a) Fortra n 基本操作1 B Li PlLu- i \ JfiL ■ I■' hi -IJBL . n :»'匹:"b )程序指令BIE1A J~. C ■* «I*************** 输入、输出样式种种 **************************!系统默认的输出样式 PRINT* ,'系统默认的输出样式' !人为控制的的输出样式--格式化输出 i=21; j=53; m=5 n=(i+j*m*i**m) WRITE(*,*) 'i,j,m 是常量,程序赋初值PRINT*, i,j,m WRITE(*,*) 'i,j,m 的计算结果:'PRINT*,'i+j*m*i**m=' ,nPRINT* ,''! Body of ZXZ_I_O end program ZXZ_I_O 程序说明: 程序赋值一初始化 i=21; j=53; m=5 键盘无格式输入 READ*, A 键盘有格式输入 READ ( *, 100)A,B,C 100 FORMA T( 2F5.2,F5.3) 显示器无格式输出PRINT* ,'系统默认的输出样式' WRITE(*,*) 'A*B=',A*B 显示器有格式输出 PRINT 100 ,A+B WRITE(*,100) 'A*B=',A*B 100 FORMA T( F5.2)C )调试运行d )程序指令pruqrdiri ZX2_l_0 iflnpllclt iioiiv 陝量声明的立置IHTEGERfZ) i; IMTEGEimi ]; IHTEGER(^)叭 REAL nA.B I Uairidbles■HIKE J 播入整該■打1E.D 屯A PRINT •,-KM«a■ e-fltBFHJHIv T -H-Ai-B-1 ,ti' Axb- 1 T A I UHU NA 「臥存为计負机药计貝韭呆*妊憲L1的低・1-21; j-b3;«R[TEC-,«) l,j,n 是常最.程序Itt 前值・FHIHTa, 1 J ,■WR1TF(-F -J l p j,n 的tt 幣结黑,.FHim* /■r u 讪o#畑」」Ffirl prnni'an ZK? I o! ZXZ丄O.f90! FUNCTIONS:ZXZ_I_O - Entry point of con sole applicati on.PROGRAM: ZXZ_I_OPURPOSE: En try point for the con sole applicati on.1 *************** 输^入 ^输出样式种不中program ZXZ_I_Oimplicit none!变量声明的位置INTEGER(2) i; INTEGER(4) j; INTEGER(4) m; REAL nINTEGER A,BREAL X,Y ,Z ! VariablesPRINT*,'输入整数A'; READ*, APRINT*,'输入整数B'; READ*, B PRINT*,'计算结果为:'B=A+BPRINT*,'B=A+B=',BWRITE(*,*) 'A*B=',A*BPRINT* ,'以上为计算机的计算结果,注意B的值'!系统默认的输出样式PRINT* ,'系统默认的输出样式'PRINT*,'输入实数X'; READ(*,100) XPRINT*,'输入实数Y:READ(*,100) Y100 FORMA T(F5.2)PRINT*,'计算结果为:'Z=X+YPRINT 200,Z200 FORMA T(4X,'Z=X+Y=',F8.3)WRITE(*,*)WRITE(*,300) X*Y300 FORMA T(4X,'Z=X*Y=',F8.3)!人为控制的的输出样式--格式化输出PRINT* ,'程序为常量赋了初值'i=21; j=53; m=5n=(i+j*m*i**m)WRITE(*,*) 'i,j,m 是常量,程序赋初值PRINT*, i,j,mWRITE(*,*) 'i,j,m 的计算结果:'PRINT*,'i+j*m*i**m=' ,nPRINT* ,' '! Body of ZXZ_I_Oend program ZXZ_I_Oe)调试运行rRIHT* JPRTNi*. ■讦薛结果为.・ E^A*BPRTNT*,,R=A+R=,,8 URrfEfw,*) 'ft-D-1t A-DPRINT * J 以上药i1■宴利的iT 畀结果.傢金默认囱馥出择畫PRINT*「系唏默认册葆出样式・ 阳IHH. •揃扎斓 W : WIHZJ 输入宪数V;1B0 F0RHAKF5.2)PRINT -,■廿尊结杲为FREAD(*,1ua ) K R 匚flD(*,100) VPRINT 2Q0左2(JU FUKMfil(4i(t ; = «+/= \FB »J) unrrEf*.*)WRITE(*r 30O) X*V FORMfiT(UX /? = X*V=* ,F8 .3}认为扌前函的输世#戎一逼占化输出PRTHT- ”囉序対常豊瓯了初值・ i^Z» i j=53;I1=5 n=(i +j*m*i**n)WRITEf"^) 'i t j t n 是常量,程序赋初值 PRTHTw, i r j F nMRlTEe 』)・i J,n 的计具结衆:,PRI HI*.'i+j *R*i**m=',n。
对于FORTRA的初学者。
这些例子可作为小练习1.例题:计算工资问题。
每小时工资为RATE如果工作超过40小时,加班呢部分工资是正常时间工资的1.5倍。
C Payroll with overtimeprogram payrollreal rate, hours, payread (*,*) rate, hoursif (hours>40) thenpay=40*rate+(hours-40)*1.5*rateelsepay=hours*rateEND IFprint *, "rate=" , rateprint *, "hours=" , hoursprint *, "pay=" ,payend2•学生成绩问题。
大于80为A级。
大于60小于80为B级。
小于60为C级。
IF的嵌套。
注意空格可以看清楚else if ,e nd if,pri nt 的内容•PROGRAGRADESTUDENTREA0GRADEIF (GRADE .GE. 80) THENPRINT*,GRADE, "GRADE=>A"ELSEIF (GRADELT.60) THENPRINT*,GRADE"GRADE=>C"ELSEPRINT*,GRADE"GRADE=>B"END IFEND IFEND3. 三个数按从小到大排序。
PROGRA M AXMINREALA,B,C,TREA0A,B,CIF (A.GT.B) THENT=AA=BB=TELSEEND IFIF (B.GT.C) THENT=BB=CC=TELSEEND IFIF (A.GT.B) THENT=AA=BB=TEND IFPRINT*,A,B,CEND4. 运用EISE IF语句。
重做例子2PROGRAM2READ*,*) GRADEIF (GRADE .GE. 80.0) THENPRINT*, GRADE, "=>A"ELSE IF(GRADE .GE. 70.0) THENPRINT*, GRADE, "=>B"ELSE IF(GARDE .GE. 60.0) THENPRINT*, GRADE, "=>C"ELSEPRINT*, GARDE, "=>D"END IFEND3x 6,x 05. 计算y 2x 2x 8,x 0PROGRAEQUATIONREAD*,*) XIF (X .GE. 0.0) Y=3*X+6IF (X .LT. 0.0) Y=-X**2+2*X-8PRINT*, "X=" ,X, "Y=" ,YEND6. CONTINUED句。
fortran debug案例
Fortran是一种程序设计语言,其用途广泛,在科学计算和工程领域使用较多。
在编写Fortran程序时,调试是非常重要的,以下是一个Fortran调试的案例。
假设我们有一个Fortran程序,用于计算给定数组的平均值。
然而,当我们运行这个程序时,得到的结果并不正确。
我们需要进行调试来找到问题所在。
首先,我们可以检查程序中的算法。
可以通过在代码中添加打印语句来跟踪程序的执行。
例如,我们可以在计算平均值之前打印出数组的值,以确保数组中的数据正确无误。
其次,我们可以检查数组的大小是否与程序的预期相匹配。
如果数组的大小不正确,程序可能会访问无效的内存位置,导致错误的结果。
在这种情况下,我们需要仔细检查数组的定义和传递给计算平均值函数的参数。
此外,我们还可以使用调试工具来进一步分析程序。
例如,我们可以使用gdb或者Ddt来调试Fortran程序。
这些调试工具可以帮助我们在程序运行时跟踪变量的值,执行代码的流程,并定位错误所在的位置。
最后,一些常见的Fortran调试技巧包括:
1. 使用正确的输出格式打印变量值,以检查其值是否正确。
2. 检查循环和条件语句的逻辑,确保程序按照预期的方式执行。
3. 检查程序中的错误处理机制,例如数组越界或除以零等情况。
总之,Fortran调试是找出程序错误的关键步骤。
通过仔细检查代码逻辑、打印变量值、使用调试工具以及遵循常见的调试技巧,我们可以快速有效地找到问题所在,并修复程序中的错误。
fortran77程序设计pdf
Fortran 77 是一种老旧的编程语言,主要用于科学计算。
以下是一个简单的Fortran 77 程序示例,用于计算斐波那契数列的第n 项:
```fortran
PROGRAM FIBONACCI
IMPLICIT NONE
INTEGER N, F1, F2, FN
INTEGER I
PARAMETER (N = 10)
DATA F1, F2 /0, 1/
DO I = 1, N
PRINT *, F1, F2
FN = F1 + F2
F1 = F2
F2 = FN
END DO
END PROGRAM FIBONACCI
```
该程序首先定义了几个整数变量N、F1、F2 和FN,然后使用PARAMETER 语句将N 设置为10。
接下来,程序使用DATA 语句初始化F1 和F2 为斐波那契数列的前两项0 和1。
然后,程序使用DO 循环迭代N 次,每次迭代中输出F1 和F2 的值,计算下一项FN,然后更新F1 和F2 的值。
最后,程序使用END PROGRAM 语句结束。
需要注意的是,Fortran 77 的语法比较繁琐,不支持现代编程语言的许多特性,如变量名中不能包含空格、不支持注释等。
因此,建议使用更现代的Fortran 版本进行编程。
FORTRAN95程序设计实验FORTRAN95的基本语法包括变量定义、注释、循环和条件判断等。
在FORTRAN95中,变量可以通过关键字"INTEGER"、"REAL"和"CHARACTER"等进行定义。
例如,以下语句定义了一个整型变量A和一个浮点型变量B:INTEGER::AREAL::B注释可以通过用一个感叹号(!)开头进行标识。
例如:!这是一个注释循环可以使用关键字"DO"和"ENDDO"来实现。
例如,以下代码展示了一个简单的循环,计算了1到10的和:INTEGER::I,SUMSUM=0DOI=1,10SUM=SUM+IENDDO条件判断可以使用关键字"IF"、"THEN"、"ELSE"和"ENDIF"来实现。
例如,以下代码展示了一个简单的条件判断,判断一个数是否为正数:INTEGER::NUMREAD(*,*)NUMIF(NUM>0)THENPRINT*,"该数为正数"ELSEPRINT*,"该数为非正数"ENDIF在FORTRAN95中,还有其他的语法和特点,如数组、函数、子程序等。
下面的实例将展示如何使用FORTRAN95编写一个计算圆面积和周长的程序。
PROGRAM CircleREAL :: PI, R, Area, CircumferencePRINT*,"请输入半径:"READ(*,*)RArea = PI * R**2Circumference = 2 * PI * RPRINT *, "圆的面积为:", AreaPRINT *, "圆的周长为:", CircumferenceEND PROGRAM Circle以上程序首先定义了一个实数变量PI、半径R、面积Area和周长Circumference。
有限元编程算例(Fortran)本程序通过Fortran语言编写,程序在Intel Parallel Studio XE 2013 with VS2013中成功运行,程序为《计算力学》(龙述尧等编)一书中的源程序,仅作研究学习使用,省去了敲写的麻烦.源程序为:!Page149COMMON/X1/NJ,NE,NZ,NDD,NPJ,IND,NJ2,EO,UN,GAMA,TE,AECOMMON/X2/JM(100,3),NZC(50),CJZ(100,2),PJ(100,2),B(3,6),D(3,3),S(3,6),TKZ(200,20),EKE(6,6),P(200)OPEN(5,FILE=’DATAIN’)!OPEN(6,FILE=’DATAOUT’,STATUS=’NEW')CALL DATAIF(IND.EQ.0)GOTO 10EO=EO/(1.0—UN*UN)UN=UN/(1。
0—UN)10 CALL TOTSTICALL LOADCALL SUPPORCALL SOLVEQCALL STRESSPAUSE!STOPENDSUBROUTINE DATACOMMON/X1/NJ,NE,NZ,NDD,NPJ,IND,NJ2,EO,UN,GAMA,TE,AECOMMON/X2/JM(100,3),NZC(50),CJZ(100,2),PJ(100,2),B(3,6),D(3,3),S(3,6),TKZ(200,20),EKE(6,6),P(200)READ(5,*)NJ,NE,NZ,NDD,NPJ,INDNJ2=NJ*2NPJ1=NPJ+1READ(5,*)EO,UN,GAMA,TEREAD(5,*)((JM(I,J),J=1,3),I=1,NE)READ(5,*)((CJZ(I,J),J = 1,2),I=1,NJ)!Page150READ(5,*)(NZC(I),I=1,NZ)READ(5,*)((PJ(I,J),J=1,2),I=1,NPJ1)WRITE(6,10)(I,(CJZ(I,J),J=1,2),I=1,NJ)10 FORMA T(4X,2HNO,6X,1HX,6X,1HY/(I6,2X,F7。
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的值'
!系统默认的输出样式
PRINT* ,'系统默认的输出样式'
!人为控制的的输出样式--格式化输出
i=21; j=53; m=5
n=(i+j*m*i**m)
WRITE(*,*) 'i,j,m 是常量,程序赋初值' PRINT*, i,j,m
WRITE(*,*) 'i,j,m 的计算结果:' PRINT*,'i+j*m*i**m=',n
PRINT* ,' '
! Body of ZXZ_I_O
end program ZXZ_I_O
程序说明:
程序赋值—初始化
i=21; j=53; m=5
键盘无格式输入
READ*, A
键盘有格式输入
READ(*, 100)A,B,C
100 FORMA T( 2F5.2,F5.3)
显示器无格式输出
PRINT* ,'系统默认的输出样式' WRITE(*,*) 'A*B=',A*B
显示器有格式输出
PRINT 100 ,A+B
WRITE(*,100) 'A*B=',A*B
100 FORMA T( F5.2)
c)调试运行
d)程序指令
带格式的输入输出
! 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
REAL X,Y,Z
! Variables
PRINT*,'输入整数A'; READ*, A
PRINT*,'输入整数B'; READ*, B
PRINT*, '计算结果为:'
B=A+B
PRINT*,'B=A+B=',B
WRITE(*,*) 'A*B=',A*B
PRINT* ,'以上为计算机的计算结果,注意B的值'
!系统默认的输出样式
PRINT* ,'系统默认的输出样式'
PRINT*,'输入实数X'; READ(*,100) X
PRINT*,'输入实数Y'; READ(*,100) Y
100 FORMA T(F5.2)
PRINT*, '计算结果为:'
Z=X+Y
PRINT 200,Z
200 FORMA T(4X,'Z=X+Y=',F8.3)
WRITE(*,*)
WRITE(*,300) X*Y
300 FORMA T(4X,'Z=X*Y=',F8.3)
!人为控制的的输出样式--格式化输出
PRINT* ,'程序为常量赋了初值'
i=21; j=53; m=5
n=(i+j*m*i**m)
WRITE(*,*) 'i,j,m 是常量,程序赋初值'
PRINT*, i,j,m
WRITE(*,*) 'i,j,m 的计算结果:'
PRINT*,'i+j*m*i**m=',n
PRINT* ,' '
! Body of ZXZ_I_O
end program ZXZ_I_O e)调试运行。