Fortran95学习用强大ppt.ppt_第1页
Fortran95学习用强大ppt.ppt_第2页
Fortran95学习用强大ppt.ppt_第3页
Fortran95学习用强大ppt.ppt_第4页
Fortran95学习用强大ppt.ppt_第5页
免费预览已结束,剩余348页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Fortran90程序设计,21世纪高等学校计算机科学与技术规划教材教学课程,几点说明,几点说明,第一章 Fortran程序设计基础,2020/8/30,4,本章目的和要求 了解程序及其概念 掌握算法及算法描述方法 简单程序设计了解Fortran编程环境(Fortran PowerStation 4.0),Fortran语言的发展概况,2020/8/30,5,Fortran语言的发展过程: 1951年由约翰贝克斯等人开始研究Fortran语言; 1957年第一个Fortran程序在IBM704机上运行; 1958和1962年先后推出Fortran和Fortran; 1966和1978年先后颁布

2、Fortran66和Fortran77; 1991年颁布了Fortran90。 现在已经有了Fortran 95, Fortran 2003,Fortran的特点,FORmula TRANslator 公式翻译器 Fortran语言是一种适合于科学和工程计算问题的程序设计语言;也是计算机高级语言发展史上使用最早的一种程序设计语言,Fortran语言的特征,2020/8/30,7,Fortran语言的最大特性是接近数学公式的自然描述,在计算机里具有很高的执行效率。 易学,语法严谨。 可以直接对矩阵和复数进行运算。 自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。 很多专用的大型

3、数值运算计算机针对Fortran做了优化。 广泛地应用于并行计算和高性能计算领域。 Fortran 90,Fortran 95,Fortran 2003的相继推出使Fortran语言具备了现代高级编程语言的一些特性。,1.1 程序与程序设计,程序设计包括以下四个过程 1. 分析问题,确定解决问题的方法或数学模型 2. 设计算法通常采用流程图 3. 编写程序也叫源程序(通常为文本文件,Fortran源程序文件的后缀是“f90”、 4. 调试程序,分析结果。,2020/8/30,8,1.2 算法及其表示方法,例1:求 从键盘输入x , y的值 如果x + y 不等于零 ,则计算 输出u的值 否则,

4、输出分母为零,2020/8/30,9,1.2 算法及其表示方法,例2, 输入10个数,求最大数?,2020/8/30,10,1. 输入一个数,放在存储单元MAX中,2. 设置一个统计比较次数的单元i,i=1,3. 若i=9,执行4,4. 输入一个数,放在X单元中,5. 比较X与MAX,若XMAX ,MAX=X,6. i 增加 1,7. i 增加 1 ,执行3,8. 输出MAX,1.2 算法及其表示方法,例3 求两个正整数m,n的最大公约数。 1)比较m与n的大小,如果mn,则交换m,n 2)求m除以n的余数r 3)若r=0 则执行6) 4)nm,rn 5)执行2) 6)输出n,1.2 算法及其

5、表示方法,2020/8/30,12,一、算法的概念 算法解决某一问题所采取的方法和步骤。 计算机算法计算机能够执行的算法。 计算机算法的特征: 有穷性操作步骤是有限的。 确定性方法步骤是明确的。 有效性方法是正确的,步骤是完整的。 必须有输入和输出。(取得必要的信息,给出正确的结果。),1.2 算法及其表示方法,2020/8/30,13,Fortran是结构化程序设计语言,每个程序单位可由三种基本结构组成: 顺序结构 分支选择结构 循环结构 实践证明,任何复杂的问题都可以用这三种基本结构来描述。,1.2 算法及其表示方法,例1:求 从键盘输入x , y的值 如果x + y 不等于零 ,则计算

6、输出u的值 否则,输出分母为零,2020/8/30,14,结束,否,是,1.2 算法及其表示方法,例2, 输入10个数,求最大数?,2020/8/30,15,1. 输入一个数,放在存储单元MAX中,2. 设置一个统计比较次数的单元i,i=1,3. 若i=9,执行4,4. 输入一个数,放在X单元中,5. 比较X与MAX,若XMAX ,MAX=X,6. i 增加 1,7. i 增加 1 ,执行3,8. 输出MAX,输入Max,i1,输入 x,XMax,i+1i,输出Max,i=9?,N,XMax,Y,Y,Y,N,1.2 算法及其表示方法,例3 求两个正整数m,n的最大公约数。 1)比较m与n的大小

7、,如果mn,则交换m,n 2)求m除以n的余数r 3)若r=0 则执行6) 4)nm,rn 5)执行2) 6)输出n,输入M,N,交换M,N,M/N的余数r,NM,rN,输出N,N,r=0,Y,MN,Y,N,1.2 算法及其表示方法,2020/8/30,17,二、算法的表示 用NS流程图表示。(由几种功能框组合而成) 矩形框用于表示顺序结构。 如:若先执行语句A,再执行语句B。,A,B,1.2 算法及其表示方法,2020/8/30,18,例:若a=1.5,b=4.5,求a+b的平方。 画NS图: 编程: A=1.5 B=4.5 C=(a+b)*2 Print *, c end,1.5a,4.5

8、b,(a+b)2c,打印 c,结束,1.2 算法及其表示方法,2020/8/30,19,三角框用于表示分支选择结构。 如:若P为条件,当P成立执行语句A,否则执行语句B。,1.2 算法及其表示方法,2020/8/30,20,L形框用于表示循环结构。 当型循环(P为条件,A循环体) 如:若条件P成立,则执行循环体A,否则跳出循环体。,1.2 算法及其表示方法,2020/8/30,21,直到型循环(P为条件,A循环体) 如:首先执行循环体A,若条件P不成立继续执行循环体A,直到条件P成立为止。,1.3程序设计的基本方法,2020/8/30,22,计算机程序,计算机解决问题所需要的一系列代码化指令序

9、列计算机程序。 程序=数据结构+算法 即“程序就是在数据的某些特定的表示方式和结构的基础上,对抽象算法的具体描述。”,上述公式可扩充为: 程序=数据结构+算法+程序设计方法+语言工具,1.3程序设计的基本方法,2020/8/30,23,所谓面向过程的程序设计,是指利用面向过程的语言工具(如Basic、Pascal、Fortran和C等)进行程序开发的各项活动。,面向过程的程序设计,优点:编程简单、结构性强、可读性好,程序执行时序特征明显;遵循这种结构的程序只有一个入口和一个出口。 缺点:存在数据与程序模块的分离和程序的可重用性差等问题。,1.3程序设计的基本方法,2020/8/30,24,结构

10、化程序设计方法:,结构化编码 在结构化程序设计中,任何复杂的算法,都可以由三种基本结构组成。 在构造算法时,也仅以三种基本结构作为基本单元。 遵循这种结构的程序只有一个输入口和一个输出口。,模块化设计 将一个复杂问题的程序分为若干个程序模块,每个模块完成一项特定功能;其中有一个主模块和若干个子模块,主模块控制各个子模块来实现整个程序的功能。,自顶向下,逐步细化,1.3程序设计的基本方法,2020/8/30,25,面向对象的程序设计是一种新的程序设计范型。它将一些新的理念和结构化程序设计中好的思想相融合,提供了一种全新的程序设计方法。,面向对象的程序设计,基本思想 将一个需要求解的问题分解为一系

11、列实体(对象),然后围绕这些对象建立数据和函数;函数的功能决定了该对象的行为。规定一个对象的函数可以访问另一对象的函数,但一个对象的数据不能应用于另一对象的函数中。,1.4 简单的Fortran程序分析,2020/8/30,26,例1的Fortran程序如下:,Program Example1 Real a,b,x print *,请输入a,b的值 Read *, a,b If (a+b)/=0) then x=(a-b)/(a+b) Print *, x Else print *, 表达式的分母为零 endif end,1.4 简单的Fortran程序分析,2020/8/30,27,Fort

12、ran程序的基本结构: 一个Fortran源程序由一个或多个程序单位组成,每个程序单位以“end”语句结束。 每个程序单位包括若干行 语句行(执行语句和非执行语句行) 非语句行(注释行) 语句前可不设标号,也可根据需要设标号。 各类语句在程序单位中的位置有一定规则。 程序必须按规定格式书写。,1.5 Fortran源程序的书写格式,2020/8/30,28,Fortran77源程序必须按以下格式书写: 每行只能在80列内书写,并把80列分为4个区。 15列:标号区 ( 15 位无符号整数;第1列为“*”或“c”时,为注释行) 第6列:续行标志区 (非空格或非零字符;最多19个续行) 772列:

13、语句区 (书写语句;一行只能写一条语句) 7380列:语句注释区 (一般作编号注释),1.5 Fortran源程序的书写格式,自由格式 一行可以写多个语句,语句之间用分号“;”隔开,末句不能有标点号 用!作为注释符号,可以在一行的任意一列 用a=b;b=t endif if(ac)then t=a;a=c;c=t endif if(ad) then t=a;a=d;d=t endif,if (bc) then t=b;b=c;c=t endif if (bd) then t=b;b=d;d=t endif if (cd) then t=c;c=d;d=t endif print*,a,b,c,

14、d end,习题9,real x,y read*,x if (x=-15.and.x=0.and.x15.and.x20) then y=x*(1.0/3) Else y=x*2 Endif end,赋值语句: a=a* p 具有 公式的计算功能,关于计算等差数列与等比数列,赋值语句:a=a + d 具有 公式的计算功能,例4.1计算,其中第n项为: Real S ,A Read*, x, n A=1 S=1 Do k=1 ,n A=A*x/k !K=1,2,3,,n S=S+A Enddo Print *,S End,2020/8/30,149,4.2 Do While语句实现循环,用do

15、while语句实现当型循环 一般形式 do while (条件) 循环体 end do,F,T,2020/8/30,150,4.2 Do While语句实现循环,例如:求110的累加和。 integer i,sum sum=0 i=1 DO while (i=10) sum = sum + i i=i+1 end do print*, sum end,2020/8/30,151,4.2 Do While语句实现循环,编程如下: read*,n m=1 i =1 do while (i=n) m=m*i i=i+1 end do print*,m end,例:求n!。,4.3 Do 语句与Do

16、While 的比较,Do循环: Do循环适用于循环次数已知的循环 循环控制变量按照e3的步长自动增加 Do While循环: 适用于循环的次数未知的循环。 一般需要循环变量初始化。 循环体中必须有改变控制变量的语句, 或者,有退出循环的控制语句。,2020/8/30,153,4.3 Do 语句与Do While 的比较,integer x,sum sum=0 x=1 DO while (x=10) sum = sum + x x=x+1 end do print*, sum end,integer x,sum sum=0 DO x=1,10 sum = sum + x end do print

17、*, sum end,例:求110的累加和。,Do While 循环,Do循环,2020/8/30,154,4.3 Do 语句与Do While 的比较,read*,n m=1 i =1 do while (i=n) m=m*i i=i+1 end do print*,m end,read*,n m=1 do i=1, n m=m*i end do print*,m end,例:求n!。,Do While 循环,Do循环,2020/8/30,155,4.3 Do While 循环的 特例:求n!,read*,n m=1 i =1 do while (i=n) m=m*i i=i+1 end d

18、o print*,m end,read*,n m=1; i=1 do while ( .true. ) m=m*I i=i+1 if (in) exit end do print*,m end,举例:,输入x,计算cosx的值,直到最后一项的值小于1E-6为止 read*,x y=1; t=1; n=1; fm=1 do while (abs(t)1E-6) fm=fm*(2*n-1)*(2*n) t=(-1)*n*x*(2*n) /fm y=y + t n=n+1 end do,或: t=t*(-1)*x*2/(2*n-1)*2*n),2020/8/30,157,4.4 循环的嵌套,在一个d

19、o循环中还可以包含一套或多套完整的do循环,这就是do循环的嵌套。 一般形式(以双重循环为例) do i=1, 10 do j=1, 10 end do end do,2020/8/30,158,4.4 循环的嵌套,说明: 在一个程序单位中,并列的do循环可用同名循环变量,而嵌套的do循环不允用同一变量作为循环变量。 例: do i=1, 10 do i=1, 10 end do end do 否则,使循环控制产生混乱,编译语法错误,举例,read*,x y=1; t=1; n=1 do while (abs(t)1E-6) fm=1 do i=1, 2*n fm= fm * i end do

20、 t=(-1)*n*x*(2*n) /fm n=n+1; y=y + t end do,2020/8/30,160,课后练习题,P66: 课后练习: 第1题 (2)、(4)、(5) 作业; 第9、11、13、15题。,习题1-(5),sum=1 j=1 do while (j.le.3) f=1 do i=2,2*j+1 f=f*i enddo sum=sum+f j=j+1 enddo print*,sum end,J=2 i=2-5 F=2*3*4*5 Sum=1+6+120,J=1 i=2-3 F=6 Sum=1+6,J=3 i=2-7 F=2*3*4*5*6*7 =5040 Sum=1

21、+6+120+5040=5167,习题2,S=0 Do n=1,1000 f1=1.0/(4*n-3) f2=-1.0/(4*n-1) s=s+f1+f2 Enddo Print*,”的值为:”, s*4 end,N=1000 S=0; f=-1 Do i=1,4*n-1,2 f=-f s=s+f*1.0/i Enddo Print*,”的值为:”, s*4 end,习题3,real s, f, x read*,x f=1;s=f x=x*3.14159/180 n=1 Do f=-f*x*x/(2*n-1)*(2*n) s=s+f if (abs(f)1e-6) exit n=n+1 End

22、do Print*,cos(,x,)的值为:, s end,分析:,习题4,real x,y s=0 do i=1,5 x=2*i-1 do j=1,10 y=2.0+0.1*j f=sin(x+y)/(1+x*y) s=s+f enddo enddo Print*,s=, s end,习题6,integer m,n1,n2,n3 i=0 do k=100,999 m=k/9 !对k=100而言 n1=mod(k,10) n2=mod(k,100)/10 n3=k/100 if (n1*n1+n2*n2+n3*n3=m) then i=i+1 print*,第,i,个满足条件的数为:,k en

23、dif enddo end,习题7,integer m,sum,i Read*,m Do m=2,1000 Sum=0 do i=1,m/2 if(mod(m,i)=0) sum=sum+1 enddo if (m=sum) then print*,m,是完数 else print*,m,不是完数 endif enddo end,习题7,integer m,sum,i Do m=2,1000 Sum=0 do i=1,m/2 if(mod(m,i)=0) sum=sum+1 enddo if (m=sum) print*,m,是完数 enddo end,习题10,f1=1 f2=2 do f=

24、f1+f2 f1=f2 f2=f if (f4000) exit enddo print*,f1,f end,f1=1; f2=2 i=2 do f=f1+f2 f1=f2 f2=f if (f5000) exit i=i+1 enddo print*, *,5000以内的项数为:,i end,2020/8/30,169,第五章 Fortran90数据类型,2020/8/30,170,5.1 数据类型的概念,数据类型既是简单的数据结构 程 序 = 算法 + 数据结构 结构化程序 = 算法 + 数据结构 + 结构化的方法 FORTRAN语言的数据类型就是这种语言中对数据的表示方法。,2020/8

25、/30,171,5.1 数据类型的概念,数据类型有四个性质: 类型名:如:Integer 允许值的集合:如整型 允许值(常量)的表示方法 操作这些值的运算集合,5.2 整型数据,INTEGER I,N ! 默认整型 INTEGER(2):K,L ! 两字节整型 integer*2:n=1,m !两字节表示 INTEGER*4:MIN,MAX !四字节表示 integer*4 m,n1,n2,n3 !四字节表示 见P68:表5.1,5.3 实型数据,单精度类型 REAL X,Y REAL(4): A,B 等价于 REAL*4:A,B 双精度类型(一般为8个字节来存储数据,提供1517位有效数字)

26、 REAL(8):X1,X2 等价于 REAL*8:X1,X2 REAL*8 X1,X2 或者 DOUBLE PRECISION X1,X2,2020/8/30,174,5.3 双精度数据类型,Fortran中双精度常数要用指数表示(小数位数达到15位: 如:12.3456789 1.2345656789D+1 -0.123456789 -1.23456789D-1 注意:不可写成 1.2345676789E-1 否则相当于 1.234568E-1 Fortran中双精度变量使用前要用类型说明语句或IMPLICIT语句加以说明: 如:double precision A,B,C implici

27、t double precision(a-c),2020/8/30,175,程序举例,例5.1:求如下分数序列前20项的和,2020/8/30,176,程序如下: Double precision a,b,c,s s=0.0D0 a=1.0 b=1.0 c=a+b do i=1,20 s=s+c/b a=b b=c c=a+b enddo print*,s=,s end,2020/8/30,177,5.4 复型类型数据,Fortran中复型常数要用一个括弧中的两个实数来表示,第一个实数表示复数中的实部,第二个实数表示复数中的虚部。 如:1+2.5i (1.0, 2.5) -5.4i (0.0,

28、 5.4) Fortran中复型变量使用前要用类型说明语句或IMPLICIT语句加以说明: 如:complex A,B,C implicit complex(a-c),2020/8/30,178,5.4 复型类型数据,直接赋值 如: c=(3.0, 4.0) d=(8.76E+5, -5.8E-3) 当实部和虚部不是常数,而是表达式时,则应该用CMPLX函数将实部和虚部组成复型数据再赋给复型变量 如: C=cmplx( 3.0*A, 5.0+B ),2020/8/30,179,5.3 复型类型数据,如果CMPLX函数只有一个自变量,则它代表实部 如:cmplx(3.0) (3.0, 0.0)

29、在内存中一个复型数据占两个实数的存储单元,在PC中通常为8个字节,2020/8/30,180,程序举例,例:求一元二次方程ax2+bx+c=0的根 Real a,b,c,d,part1,part2 Complex x1,x2 d=b*2-4.0*a*c part1=-b/2.0*a part2=sqrt(abs(d)/2.0*a if(d.ge.0.0) then x1=cmplx(part1+part2) x2=cmplx(part1-part2) else x1=cmplx(part1, part2) x2=cmplx(part1, -part2) endif print*, x1=,x1

30、 print*, x2=,x2 end,2020/8/30,181,5.5 字符型数据,一、字符型常量:又称字符串,是用撇号括起来的若干个字符 如:CHINA U.S.A,2020/8/30,182,5.5 字符型数据,一、字符串常量 1. 空格也是有效字符 2. 用单撇号或双撇号括起来 如:How are you? 都是合法字符串 3. 当字符串本身有撇号时,用两个撇号表示 如:Thats right 或 Thats right,2020/8/30,183,5.5 字符型数据,二、字符型变量:用来存放字符型常量的变量 字符型变量在使用前必须先定义。可以用IMPLICIT语句和CHARACTE

31、R语句。 如: Implicit character*5(A-C),character*4(x) character*5 str1,str2,str3 character name*20,addr*30,code*10 character(len=10):str,name,2020/8/30,184,5.5 字符型数据,如果在CHARACTER语句中不指定长度则隐含指定长度为1 如:character A, B, C 定义了长度为1的A,B,C字符型变量 如果统一指定的字符长度与变量个别指定的长度不一致,则以个别指定的长度为准 如:character*5 A, B*6, C*7 则定义 A为长

32、度为5的字符型变量, B的长度为6, C的长度为7。,2020/8/30,185,5.5 字符型数据,三、字符变量的赋值 用赋值语句直接对字符型变量赋值 如: character*5 A, B*6, C*7 A=CHINA B=NANJING C=WHU A B C,2020/8/30,186,5.5 字符型数据,通过READ语句从键盘或其它输入设备读入字符常量给字符变量。用表控语句进行输入字符串时要用撇号将字符串括起来。 如可以用READ语句代替上页的三个赋值语句。 READ*,A,B,C 输入: CHINA,NANJING,WHU 或者:一行输入一个字符串,可不加撇号,但不能有空格,202

33、0/8/30,187,5.5 字符型数据,四、子字符串:一个字符串连续的一部分 如:一个字符串nanjing 则na,nan,nanj,nanji,都是其子串 子串表示形式 字符变量名(m:n) m和n是整型表达式,分别表示子字符串在原字符串中的起止位置,且1mnL,L是字符变量的长度。,2020/8/30,188,5.5 字符型数据,如:str=structured programming in fortran 子字符串子串的值备注 str(12:22)programming str(27:)fortran与str(27:33)相同 str(:10)structured与str(1:10)相

34、同 str(5:5)c str(:)原字符串与str(1:33)相同,2020/8/30,189,5.5 字符型数据,可以将一个子字符串赋给一个字符变量或另一个子字符串 如:name=str(27:33) str(1:10)= str(27:33) 赋值号两侧的子串不能相互覆盖 如:str(25:29)= str(27:33) 错误!,2020/8/30,190,5.5 字符型数据,五、字符表达式 Fortran只提供一种字符运算符“/”,即为字符连接符,其功能是把前后两个字符型数据连接起来 如:a/b ab,2020/8/30,191,5.5 字符型数据,五、字符关系表达式 格式: 如:A.

35、GT.B NANJING.EQ.NANJING 比较规则 按其字符ASCII码的值进行比较(P268),2020/8/30,192,5.5 字符型数据,两个单个字符比较,以其ASCII码比较,ASCII码大者为大 如:AB 两个字符常量(字符串)比较,将两个字符串中的字符自左向右进行比较,如有差别,则ASCII码大者为大,否则两者相等。 如:SHANGHAISHANGKONG 如果两个字符串长度不等,则系统会自动将短的字符补以空格,使两者等长再比较。 如:thethen thethen,2020/8/30,193,5.5 字符型数据,六、用于字符处理的内部函数 1. LEN(A) 计算字符串a

36、的长度 2. LGT(a,b) 若ab则返回真,否则为假 3. LGE(a,b) 若ab则返回真,否则为假 4. LLT(a,b) 若ab则返回真,否则为假 5. LLE(a,b) 若ab则返回真,否则为假 5. INDEX(a,b) 检查字符串a是否包含字符串b 7. CHAR(I) 得到ASCII码为I的字符 CHAR(97) a CHAR(65) A 8. ICHAR(a) 得到字符串a中第一个字符的ASCII码 ICHAR(apple) 97,习题8,character( Len=80 ) s ,str read*,s j=1 do i=1,len(s) if (s(i:i)/= )

37、then str(j:j)=s(i:i) j=j+1 endif enddo print*,str end,2020/8/30,195,程序举例,例5.9翻译密码(P83) 按事先约定的规律将一个字符转换为另一字符。例如AF,BG,CH。 将该字母的ASCII码加上5,即得到转换后的字母的ASCII码。 需要调用ICHAR函数和CHAR函数 CHAR(ICHAR(A)+5) F 当字母为V时,加5就超过了Z,故应使之转换为A,同理W,X,Y,Z(包括小写vz)也需要类似的处理。,2020/8/30,196,! 翻译密码 character*80 line1, line2 character L

38、1, L2 print*, enter the original code: read*, line1 do k=1, LEN(line1) L1=line1(k:k) if(lge(L1,a) .and. lle(L1,z) .OR. (lge(L1,A) .and. lle(L1,Z) then i=ichar(L1) j=i+5 if(j.gt.122) .or. (j.gt.90).and.(j.lt.96) j=j-26 L1=char(j) endif line2(k:k)=L1 enddo print*,line2 end,2020/8/30,197,课后练习题,P87:第1、7

39、题。 第7题: 利用ASCII码值、函数ICHAR()和CHAR() 使用计数循环,2020/8/30,198,第六章 数据的输入和输出,P66习题9,integer*4 m i=0 do k=2,2000 m=k*k if (k10) then n=mod(m,10) elseif (k99) then n=mod(m,100) elseif(k999) then n=mod(m,1000) else n=mod(m,10000) endif if (n=k) then i=i+1 print*,k,的低位数为:,n endif enddo print*,满足条件的数有:,i,个 end,P

40、66习题11,real x,y0,y print*,请输入x的值 read*,x y0=x y=y0*2.0/3.0+x/(3*y0*y0) do while (abs(y-y0)1e-5) y0=y y=y0*2.0/3.0+x/(3*y0*y0) enddo print*,x,的立方根为:,y end,P66习题13,integer m,n,h,l integer*4:k print*,请输入四位的整数m,n read*,m,n k=m*n h=k/10000 l=mod(k,10000) print*,m,n,的高四位为:, j=1 do i=1,n j=j*2 s=s+j enddo

41、k=int(sqrt(s) t=1; f=1 do i=2,k f=-f ! 符号取反 t=t+f*1.0/i ! i =2,3,k enddo print*,t=,t end,P 87 习题1,函数的迭代公式为:,P87习题1,double precision x,y,y1 print*,请输入小于等于90度x的角度值 read*,x x=x*3.1415926/180 f=-1;y1=x;y=y1;i=1 do y1=y1*x*x/(i+1)*(i+2) y=y+f*y1 f=-f; i=i+2 if (abs(y1)1d-15) exit enddo print*,sin(,x,)的近似

42、值为:,y end,P88习题7,integer k,i k=ichar(M) print*,char(k) do i=1,12 print*,char(k-i) ! i=1,2,12 print*,char(k+i) enddo end,P88习题7,character*25 :s integer k,i k=ichar(M) j=1 s(j:j)=M do i=1,12 j=j+1 s(j:j)=char(k-i) ! i=1,2,12 j=j+1 s(j:j)=char(k+i) enddo print*,s end,2020/8/30,207,6.1 概 述,在程序设计中总是要有输入和

43、输出。一般说来,在进行输入或输出时要确定三个基本要素: 输入输出设备 输入输出格式 输入输出数据 注:系统隐含的输入输出设备为:键盘、显示器和打印机。,6.2 格式输入输出语句,一、格式输出 Print*,i, “j=”,j 输出的每个实数占11列 如i=123 ,j=8 则输出为: “”代表空格 123j=8 Print*,x, y 或write(*,*),x, y 输出的每个实数占15列,小数位数6位 如:x=123 y=456 则输出如下: 123.000000456.000000,2020/8/30,209,6.2 格式输入输出语句,一般形式: (1) print f, (2)writ

44、e(u,f) f:是格式说明符,指明所用的格式,包括: *,表控格式,即系统设定的格式 格式说明符是一个字符常量: print(1x,2f7.3),x,y 格式说明符是格式语句(FORMAT)的标号,常用 print 10, x,y 10 format(1x,f7.2,f6.2) !格式语句 u是设备号,*表示系统预先设定的外部设备,一般是显示器,6.2 格式输入输出语句,例如 x=5.67 y=3.1416 print 10, x, y format(1x,f5.2,f7.4) 则输出为: 5.67 3.1416,6.2 格式输入输出语句,二、格式输入 表控格式的输入: Read*,n,m,

45、x,y 其中为n,m,x,y变量名 或: Read(*,*),n,m,x,y 执行此语句时,要求从键盘输入数据,数值类型的每个数据,用空格或逗号隔开。 字符类型数据输入的区别是撇号作为数据的界定符号即可,其余同数值类型。 逻辑类型数据只有:.false. 和 .true. ,输入t或f即可,其余同数值类型。,2020/8/30,212,6.2 格式输入输出语句,一般形式: read f, read(u,f) f:是格式说明符,指明所用的格式 u是设备号,*表示系统预先设定的外部设备,一般是键盘,2020/8/30,213,6.2 格式输入输出语句,例: read(*,100)i,j 100 F

46、ormat (i4,i5) End 键盘输入: 345456 i=345,j=456 345456 i=3450,j=45600,2020/8/30,214,6.2 格式输入输出语句,例: read(*,100)a,b,c 100 Format(f5.1,e12.2,f7.2) End 键盘输入: 15.72345.67e+04705.83,2020/8/30,215,6.4 常用的编辑描述符,一、格式编辑符 主要介绍:I、F、E、X、纵向走纸、(撇号)、r(重复系数)、/(斜杠) I编辑符 作用:用于整型数据的输出。 一般形式: Iw Iw.m 其中:I整型输出;w字段宽度; m输出数据的最

47、少数字位数。,2020/8/30,216,6.4 常用的编辑描述符,例1: k=254 M=-12 n=-48 write(*, 100) k,m,n 100 Format (1x,i8,i6,i6.3) End 输出结果: 254-12-048,2020/8/30,217,6.4 常用的编辑描述符,例2: i=300 j=1250 print 50,i,j 50 Format (1x,i6,i3) End 输出结果: 300* 注:format语句可以出现在program和function语句之后,end语句之前的任何位置。,2020/8/30,218,6.4 常用的编辑描述符, F编辑符

48、作用:用于实数的小数形式输出。 一般形式: Fw.d 其中:F实数的小数形式输出; w字段宽度; d输出数据的小数位数。,2020/8/30,219,6.4 常用的编辑描述符,例: x=12.5 y=12.3457 z=-12.8467 print 100,x,y,z 100 Format (1x,f8.2,f10.3,f10.1) End 输出结果: 12.5012.346-12.8,2020/8/30,220,6.4 常用的编辑描述符, E编辑符 作用:用于实数的指数形式输出。 一般形式: Ew.d 其中:E实数的指数形式输出; w字段宽度; d数字部分的小数位数。 数值部分1,2020/

49、8/30,221,6.4 常用的编辑描述符,例: a=246.0 b=0.0000025 write(*,100)a,b 100 Format (1x,e9.3,e9.3) End 输出结果: .246e+03.250e-05 9列 9列,2020/8/30,222,6.4 常用的编辑描述符, X编辑符 作用:用于输出空格。 一般形式: nX 其中:X输出空格; n输出空格数。,2020/8/30,223,6.4 常用的编辑描述符,例: a=246.0 b=0.0000025 write(*,100)a,b 100 Format (1x,e9.3,3x,e9.3) End 输出结果: .246

50、e+03.250e-05 9列 9列,2020/8/30,224,6.4 常用的编辑描述符, H编辑符 作用:用于输出字符常量。 一般形式: nH 其中:H输出字符常量; n输出字符个数。,2020/8/30,225,6.4 常用的编辑描述符,例: x=12.5 y=12.3457 write(*,100) x,y 100 Format (1x,2hx=,f4.1,2x, y=,f6.3) End 输出结果: x=12.5y=12.346,2020/8/30,226,6.4 常用的编辑描述符, (撇号编辑符) 作用:用于输出字符常量,即把撇号内的字符串原样照打。 例: i=140 j=2000

51、 write(*,100)i,j 100 format(1x,i=,i3,j=,i4) end 输出结果: i=140j=2000,2020/8/30,227,6.4 常用的编辑描述符,注:如果输出的字符中包含撇号,则用两个连续的撇号代表一个要输出的撇号。 例: write(*,100) 100 format(1x,Hes a student.) end 输出结果: Hes a student.,2020/8/30,228,6.4 常用的编辑描述符, 纵向走纸编辑符 Fortran规定:将输出记录中的第一个字符作为纵向走纸控制符,这个字符不再被打印出来,而从输出记录的第二个字符开始输出。 记录

52、中第一个打印字符与纵向走纸的关系(见右表):,2020/8/30,229,6.4 常用的编辑描述符,例1: integer x,y x=1250 y=405 write(*,100)x,y 100 Format (i4,3x,i3) End 输出结果: 250405 (即把1“吃”掉了) 所以,在format语句中一定要预设一个走纸控制符。,2020/8/30,230,6.4 常用的编辑描述符,例2: integer x,y x=3250 y=405 write(*,100)x,y 100 Format (i6,3x,i3) End 输出结果: 3250405 (第一个输出空格已作为纵向走纸)

53、,2020/8/30,231,6.4 常用的编辑描述符, 重复系数r 在format语句中,如果出现几个(或几组)相同的格式编辑符,则可以利用重复系数而只写一个(或一组)编辑符。 r可重复使用的次数。 例1: write(*,100)n1,n2,x,y1,y2,y3 100 format(1x,i10,i10,f8.3,f7.2,f7.2,f7.2) format(1x,2i10,f8.3,3f7.2),2020/8/30,232,6.4 常用的编辑描述符,例2: format(1x,i5,f8.2,f8.2, i5,f8.2,f8.2) format(1x,2(i5,f8.2,f8.2) 斜

54、杠编辑符“/” 作用:将输出转入下一行记录。,2020/8/30,233,6.4 常用的编辑描述符,例1: i=246 j=35 x=12.3 y=173.5 write(*,100)i,x,j,y 100 Format (1x,i5,f7.1/1x,i5,f7.1) End 输出结果: 24612.3 35173.5,2020/8/30,234,6.4 常用的编辑描述符,例2: i=246 j=35 x=12.3 y=173.5 write(*,100)i,x,j,y 100 Format (1x,i5,f7.1/1x,i5,f7.1/) End 输出结果: 24612.3 (空一行) 35

55、173.5 (空一行),2020/8/30,235,6.4 常用的编辑描述符,几点说明: 输出量的个数与格式编辑符的个数(不包括X、H、撇号编辑符) 相等 write(*,100)n1,n2,x,y1,y2,y3 100 format(1x,2i10,3x,f8.3,3x,3f7.2) 不等 编辑符输出量,忽略多余编辑符 write(*,100)m,n 100 format(1x,i5,i6,i7) 编辑符输出量,重复使用Format格式说明,2020/8/30,236,6.4 常用的编辑描述符,不等 编辑符输出量,重复使用Format格式说明 重复使用格式说明时产生一个新的记录 例:a=12

56、.5,b=5.4,c=35.4,d=112.7 write(*,100)a,b,c,d 100 format(1x,2f6.1) 输出结果 12.55.4 35.4112.7 Format语句中有格式编辑符组时,从最后一个编辑符组开始重复使用 例:write(*,100)m,n,a,b,c,d 100 format(1x,2i8,2(1x,f6.1),2020/8/30,237,6.4 常用的编辑描述符,几点说明: 格式编辑符与输出量类型要匹配 即,不能没有或类型不同 例: a=12.5 write(*,100)a 100 format(1x,A=,i5) end format(),输出一个空

57、行 Format语句可以出现在program和function语句之后、end语句之前的任何位置。但一般集中放在程序最前或最后。,2020/8/30,238,输入输出语句中的格式说明,在格式输入输出时,也可以将format语句中的格式说明放到print、write和read语句中。 例1: print 100,k,y 100 format(1x,i8,f7.2) print (1x,i8,f7.2),k,y,2020/8/30,239,输入输出语句中的格式说明,例2: write(*,100)k,y 100 format(1x,i8,f7.2) write(*,(1x,i8,f7.2) k,y 例3: read(*,100)k,y 100 format(i8,f7.2) read(*,(i8,f7.2)k,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论