《fortran课件 第三章.ppt》由会员分享,可在线阅读,更多相关《fortran课件 第三章.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Fortran 95 程序设计程序设计第三章第三章 输入输出及声明输入输出及声明程序结构程序结构 程序开始程序开始 PROGRAM MAIN MAIN是自定义名称是自定义名称 .主程序代码主程序代码 WRITE(*,*)“HELLO”程序终止程序终止 STOP 此行可省略此行可省略主程序代码结束主程序代码结束 END END (FORTRAN 77)END PROGRAM END PROGRAM MAIN 3.1 简单的输出简单的输出:WRITE命令命令Write(*,*)“就这么简单就这么简单“Write(unit=*,fmt=*)“就这么简单就这么简单“!完整写法完整写法Write(6,*
2、)“string”!严谨一些的写法!严谨一些的写法Write(unit=6,fmt=*)“STRING”!最严谨的写法最严谨的写法WRITE(*,*)“HELLO”,“FRIENDS!”WRITE(*,*)“MY NAME IS“”PETER”.”WRITE(*,*)Thats right 注意:注意:1)每执行完一个write命令后,会自动换行2)Fortran 77只能使用单引号封装的字符串3)引号封装的字符串中含有同类的引号要连用才能输出 PRINT命令命令 print*,“hello”比比write少了一个少了一个*号,只能在屏幕输出号,只能在屏幕输出 3-2 声明声明:在程序代码中,
3、向编译器要求预留存放数据(变量和常量)的内存空间变量、常量的命名原则1)名称以使用英文字母为原则,可以内含下划线或数字,但名称以使用英文字母为原则,可以内含下划线或数字,但是前缀必须是英文字母是前缀必须是英文字母2)名称的长度,在名称的长度,在77标准中至少支持标准中至少支持6个字符长,个字符长,90标准中标准中至少支持至少支持31个字符长。个字符长。3)变量名最好不要和变量名最好不要和Fortran的执行命令同名,也不能和主的执行命令同名,也不能和主程序的名称或是前面声明过的变量同名。程序的名称或是前面声明过的变量同名。4)程序中辨认变量时,不会区分它的大小写程序中辨认变量时,不会区分它的大
4、小写。例:例:x1,va_2,3p,program,print 主程序名为主程序名为PX 中的变量名不能有中的变量名不能有PX或或px 3-2-1 整数类型的声明赋值语句赋值语句,数值或数数值或数学表达式学表达式声明数据类型声明数据类型变量名称变量名称输出变量值输出变量值整型变量的声明形式:整型变量的声明形式:长整型(长整型(4个字节)个字节)Integer(kind=4)a !fortran 90 添加添加 integer*4 a !fortran 77 传统作法传统作法 integer(4)a !fortran 77 传统作法传统作法短整型(短整型(2个字节)个字节)Integer(kin
5、d=2)a !fortran 90 添加添加 integer*2 a !fortran 77 传统作法传统作法 integer(2)a !fortran 77 传统作法传统作法未声明长度的未声明长度的变量变量,通常,通常编译器默认为长整型编译器默认为长整型;有的编译器支持;有的编译器支持1 byte的的整数变量。整数变量。另外的形式:另外的形式:integer a,b,cinteger:a,b=3 !声明语句中赋初值声明语句中赋初值 注意:整型变量只保存整数,实数的小数注意:整型变量只保存整数,实数的小数点后数据会自动省略点后数据会自动省略变量名的隐含约定变量名的隐含约定Fortran标准规定
6、:标准规定:凡是以字母I,J,K,L,M,N六个字母开头的变量,未经声明默认为整型,其他字母开头的变量为实型。未经声明的变量未经声明的变量 IMAX=6.6 IMAX=6变量类型声明后,隐含约定不作用,但是声明仅在本程序单元内有效。即变量声明具有局域性(局部变量或全局变量)3-2-2 实数(浮点数 real)声明形式:声明形式:Real a !默认单精度(默认单精度(4 bytes)单精度:real(kind=4)a !fortran 90 添加添加 real*4 a !fortran 77旧有旧有 real(4)a !fortran 77旧有旧有双精度:real(kind=8)a !fort
7、ran 90 添加添加 real*8 a !fortran 77旧有旧有 real(8)a !fortran 77旧有旧有算式科学计数法表示科学计数法表示106,0.1单精度的有效位数为单精度的有效位数为67位位双精度有效位数双精度有效位数15位位三角函数中三角函数中使用的角度为弧度,使用的角度为弧度,如果是变量必需是实型,不能是整型如果是变量必需是实型,不能是整型完整的数学函数完整的数学函数说明参见附录说明参见附录A注意输入参数的类注意输入参数的类型要求及输出的数型要求及输出的数据类型据类型 3-2-3 复数(COMPLEX)复数由实部和虚部组成,为浮点数保存Complex a !默认单精度
8、默认单精度Complex(kind=4)a !单精度,单精度,fortran90添加添加Complex(kind=8)a !双精度,双精度,fortran90添加添加Complex*4 a !单精度,单精度,fortran 77旧有旧有Complex(4)a !单精度,单精度,fortran 77旧有旧有Complex*8 a !双精度,双精度,fortran 77旧有旧有Complex(8)a !双精度,双精度,fortran 77旧有旧有复数变量的赋值:复数变量的赋值:a=(x,y)!a=x+yi 3-2-4字符及字符串(character)字符类型是用来保存一个字符或一长串字符符所组成的
9、字符类型是用来保存一个字符或一长串字符符所组成的“字符串字符串”时所使用的类型,每个字符占用一个字节。时所使用的类型,每个字符占用一个字节。Character a !单个字符单个字符Character(len=10)b !fortran 90 添加添加Character(10)c !fortran 77 旧有旧有Character*10 d !fortran 77 旧有旧有Character*(10)e !fortran 77 旧有旧有字符和字符串变量赋值:单引号或双引号封装,内装内容属于数据,区分英语字母的大小写A=“Hello”!fortran 90添加添加B=Hello !fortran
10、 77 只能用单引号封装只能用单引号封装C=“Thats right.”!双引号封装的字符串,字符串中任含单引号D=Thats right !单引号封装的字符串中,每个单引号要连用两次E=“Thats“”right”.”!双引号封装的字符串中,每个双引号要连用两次 字符串中引号的用法在输出语句中规则相同字符变量的操作:字符变量的操作:局部操作局部操作(起始位置:终止位置)(起始位置:终止位置)字符变量的操作:字符变量的操作:两个两个字符串连接字符串连接 /注意字符串的长度注意字符串的长度部分常用字符串函数部分常用字符串函数CHAR(num)返回计算机上所使用的字符表上,与整数返回计算机上所使用
11、的字符表上,与整数num所对应的字符所对应的字符(PC ASCII码)码)ICHAR(char)返回字符表上与字符返回字符表上与字符char所对应的整数所对应的整数LEN(string)返回字符串返回字符串string的声明长度的声明长度LEN_TRIM(string)返回字符串去除尾端的空格后,实际内容的返回字符串去除尾端的空格后,实际内容的长度长度INDEX(string,key)参数为两个字符串,返回子字符串参数为两个字符串,返回子字符串key在母在母字符串字符串string中第一次出现的位置中第一次出现的位置TRIM(string)返回把字符串返回把字符串string尾端的多余空格去除
12、后尾端的多余空格去除后的字符串的字符串 3-2-5 逻辑变量(逻辑变量(logical)声明(通常占用空间大小由编译器选择):声明(通常占用空间大小由编译器选择):LOGICAL a赋值:赋值:a=.true.b=.false.!注意前后分别要注意前后分别要加一个点加一个点显示 3-3 输入命令输入命令(read)从键盘或文件读入数据给变量从键盘或文件读入数据给变量形式形式:read(*,*)a read(unit=5,fmt=*)a !最严谨的写法最严谨的写法 read(unit=5,*)a !键盘为默认的输入设备,输入号为键盘为默认的输入设备,输入号为5 read(*,*)a,b,c !多
13、个变量值同时输入多个变量值同时输入数据输入注意事项:数据输入注意事项:1)输入的数据要与对应的变量的类型相一致)输入的数据要与对应的变量的类型相一致2)多个数据同时输入可以逗号或空格(一个或多个)多个数据同时输入可以逗号或空格(一个或多个),或者回车键,来间隔数据,或者回车键,来间隔数据3)如果输入数据数目不足,计算机会等待直到完成;如果输入数据数目不足,计算机会等待直到完成;如果数据量超过,多余的数据不起作用如果数据量超过,多余的数据不起作用4)每个)每个read语句都是从新的输入行开始读语句都是从新的输入行开始读5)如果输入数据行中出现)如果输入数据行中出现“/”符号,表示输入终符号,表示
14、输入终止止 3-4 格式化输入输出(格式化输入输出(FORMAT)格式化输出的目的:把数据按照一定的格式来显示格式化输出的目的:把数据按照一定的格式来显示某些读取数据的情况,要恰当的设置输入格式才能某些读取数据的情况,要恰当的设置输入格式才能得到正确的数据得到正确的数据设置格式采用设置格式采用FORMAT命令命令 3-4-1 格式化输出概论格式化输出概论形式:形式:Integer aWrite(*,100)a100 format(I4)!此行可放在程序的任意位置此行可放在程序的任意位置Write(*,“(I4)”)a行号行号格式,第二种形式中格式,第二种形式中用双引号或单引号封用双引号或单引号
15、封装装第二种形式的优缺点第二种形式的优缺点优点:优点:1)减少程序的行数)减少程序的行数2)输出格式和)输出格式和write在一起,阅读较清楚在一起,阅读较清楚3)可以避免在程序代码中写行号)可以避免在程序代码中写行号缺点:缺点:1)格式复杂时,编写很长)格式复杂时,编写很长2)在不同的输出语句使用相同格式时,程序代码重)在不同的输出语句使用相同格式时,程序代码重复复 3-4-2 详论格式化输出详论格式化输出最常用的格式控制字符最常用的格式控制字符“I,F,E,A,X”Iw.m 整数的输出格式,总共占整数的输出格式,总共占w个字符宽度,至少有个字符宽度,至少有m个数字个数字Write(*,“(
16、I5)”)100 100Write(*,“(I3)”)10000 *Write(*,“(I5.3)”)10 010Fw.d 浮点数输出浮点数输出,总共占总共占w个字符宽度,小数部分占个字符宽度,小数部分占m个字符宽个字符宽Write(*,”(F9.3)”)123.45 123.450 Ew.dEe 科学计数法输出浮点数,总宽度科学计数法输出浮点数,总宽度w个字符,小数部分占个字符,小数部分占d个,个,指数部分至少输出指数部分至少输出e个数字个数字Write(*,“(E15.7)”)123.45 0.1234500E+03Write(*,“(E9.2E3)”)12.34 0.12E+002Dw.
17、d 与与Ew.d用法同,只是用法同,只是E换成换成DWrite(*,“(D9.2)”)12.34 0.12D+02Aw 以以w个字符宽度来输出字符串个字符宽度来输出字符串Write(*,“(A10)”)“Hello”HelloWrite(*,“(A10)”)a !和声明长度有关和声明长度有关 HelloWrite(*,“(A3”)“Hello”HelnX 输出位置向右移输出位置向右移n位位Write(*,“(5X,I3)”)100 100Lw 以以w个字符宽输出个字符宽输出T或或FWrite(*,“(L4)”).true.T 3-4-2 详论格式化输出详论格式化输出 3-4-2 详论格式化输出
18、详论格式化输出/换行输出换行输出 write(*,“(I3/I3)”10,10 10 10Tc 把输出的位置移动到本行的第把输出的位置移动到本行的第c个字节处个字节处Write(*,”(T3,I3)”)100 100Write(*,“(10X,T3,I3)”)100 100An 输出输出n个字符个字符write(*,“(A4,I3)”)ANS=,10 !输出字符不足前面以空格添加,超过则舍弃输出字符不足前面以空格添加,超过则舍弃Write(*,100)10 !可以在!可以在format里直接写出里直接写出100FORMAT(ANS=,I3)ANS=10WRITE(*,“(ANS=,I3)”)1
19、0 !用双引号封装的用双引号封装的format,字符串用单引号字符串用单引号 !反之亦然反之亦然输出格式的写法技巧及注意事项输出格式的写法技巧及注意事项一个输出语句中的重复格式一个输出语句中的重复格式 n(fmt)WRITE(*,“(3(1XF5.2)”)A,B,C将输出格式存储在字符变量中将输出格式存储在字符变量中格式设置要与输出数据的类型对应格式设置要与输出数据的类型对应 3-4-2 详论格式化输出详论格式化输出格式化输出格式化输出print 与与write类似,只是不能只定输出位置类似,只是不能只定输出位置Print 100,a !使用行代码使用行代码100的的format语句来输出语句
20、来输出print“(A10)”,“Hello”!直接把格式字符串写在直接把格式字符串写在print中中格式也用在输入语句(格式也用在输入语句(read)中中特别是:特别是:1)输入内容包含空格、逗号或)输入内容包含空格、逗号或/号号 2)从文件读入数据)从文件读入数据 3-5 声明的其他事项声明的其他事项IMPLICIT 命令改变命令改变Fortran标准默认类型标准默认类型 FORTRAN中的变量可以不必声明直接使用,第一个字母为中的变量可以不必声明直接使用,第一个字母为I,J,K,L,M,N的被视为整型,其他视为浮点数的被视为整型,其他视为浮点数IMPLICIT NONE!加在所有声明语句
21、之前,则所有变量都必须声明再用!加在所有声明语句之前,则所有变量都必须声明再用IMPLICIT 类型类型(字母)字母)Implicit integer(a,b,c)!a,b,c开始的变量都为整型开始的变量都为整型Implicit integer(a-f,i)!a-f,i开始的变量都为整型开始的变量都为整型Implicit real(m-p)!M-p开始的变量都为浮点数开始的变量都为浮点数 IMPLICIT命令必须接在命令必须接在program命令的下一行,其他语句之前命令的下一行,其他语句之前 3-5 声明的其他事项声明的其他事项常数的声明方法(常数的声明方法(PARAMETER)1)常用的参
22、数设为常数参量,在程序中不能被改变,常用的参数设为常数参量,在程序中不能被改变,避免错误避免错误2)把不变的数据设为常数,可以增加执行速度)把不变的数据设为常数,可以增加执行速度 Real,parameter:pi=3.14159 !双冒号不能省略双冒号不能省略形容词形容词 3-5 声明的其他事项声明的其他事项设置变量的初值设置变量的初值Fortran 90可在声明变量类型时,可在声明变量类型时,fortran 77用用DATA语句语句 3-5 声明的其他事项声明的其他事项DATA语句在声明语句之后,语句中在变量名之后语句在声明语句之后,语句中在变量名之后用两个斜杠包罗数值,数值之间以逗号相隔
23、,并与用两个斜杠包罗数值,数值之间以逗号相隔,并与变量名一一对应变量名一一对应 3-5 声明的其他事项声明的其他事项声明在程序中的结构声明在程序中的结构声明应放在所有可执行语句之前,声明应放在所有可执行语句之前,Data命令属于声命令属于声明的一部分;声明不被视为可执行语句。明的一部分;声明不被视为可执行语句。Program mainImplicit noneInteger aReal b,c,dData c,d/2.3,4.5/Read(*,*)a从program或是impicit后面开始声明变量声明要在执行语句之前结束,此后不能再声明变量 3-6 混合运算混合运算类型不完全相同的数值或变量
24、之间的运算,如整数与浮点数类型不完全相同的数值或变量之间的运算,如整数与浮点数1)同类型的数值间的运算结果仍保持原类型同类型的数值间的运算结果仍保持原类型 1/2 0;1.0/2.0 0.52)不同类型的数值间的运算,低级类型转成高级类型不同类型的数值间的运算,低级类型转成高级类型 1.0/2 0.5 整型整型浮点数浮点数3)类型转换由左向右类型转换由左向右 1/4*2.0 0.04)可用库函数可用库函数 INT(R)和和 REAL(I)改变数值类型改变数值类型 integer I=2 write(*,*)sin(real(i)3-7 Fortran 90 的自定义数据类型自定义类型:用自定义
25、类型:用type 命令创造命令创造 组合型数据组合型数据赋值可以整体设置:a=person(“Peter”,18,180,80,“Hefei,Anhui”)依顺序依顺序 name age height weight address 3-8 KIND的使用的使用声明中声明中KIND用来为变量向计算机申请内存字节空间用来为变量向计算机申请内存字节空间PC的编译器中,各类变量所保存的值域范围如下:的编译器中,各类变量所保存的值域范围如下:Integer(kind=1)-128127Integer(kind=2)-3276832767Integer(kind=4)-2147483648 2147483
26、647Real(kind=4)1.18*10-38 3.40*1038Real(kind=8)2.23*10-308 1.79*10308FORTRAN 90有关有关kind的库函数,可以增加程序代的库函数,可以增加程序代码的跨平台能力码的跨平台能力 3-8 KIND的使用的使用SELECTED_INT_KIND(n)返回对应于记录返回对应于记录n位整数所需声明的位整数所需声明的kind值。超出值域,值。超出值域,返回返回1。SELECTED_REAL_KIND(n,e)返回对应于记录返回对应于记录n位有效位数、指数达到位有效位数、指数达到e位的浮点数说需要的位的浮点数说需要的kind值。有值
27、。有效位数无法满足,返回效位数无法满足,返回-1;指数范围无法满足,返回指数范围无法满足,返回2;都无法满足,;都无法满足,返回返回-3.在不同的机器或编译器上,保存同样有效位数的数值,所在不同的机器或编译器上,保存同样有效位数的数值,所使用的使用的kind值不一定相同;不同机型(值不一定相同;不同机型(PC或工作站)所能或工作站)所能保存的值域也可能不同。保存的值域也可能不同。查询出各种数值的范围所需的查询出各种数值的范围所需的kind值,可以有效地使用内值,可以有效地使用内存空间存空间;保证程序代码的通用性保证程序代码的通用性 3-8 KIND的使用的使用1.下面哪些为有效的变量名或程序名
28、?下面哪些为有效的变量名或程序名?Name address phone_#real main 4.1Iou iou_2 4gotten packet for/22.判断下列输入、输出语句是否正确,如果不正确,请说明判断下列输入、输出语句是否正确,如果不正确,请说明理由理由(其中变量其中变量a,b,x,y开头的为实数,开头的为实数,M,N,K为整数为整数)(1)read(*,*)a,b,a+b(2)write(*,*)F(x)=,x*x-2,.(3)Write(*,*)M=,M+3,N=N(4)Write(*,10)x,2*y,k10 format(1X,f5.2,2F6.2,I5)(5)wri
29、te(*,20)A1,X*Y,A2,M+N 20 format(10X,2(F5.2,F8.2)(6)write(*,(1X,“X=”,F8.2)X 作业作业网上网上提交到提交到 注明学号,姓名以及作业次数注明学号,姓名以及作业次数问答题提交问答题提交*.txt文件,编程作业提交源程序文件,编程作业提交源程序*.f90文件文件请勿压缩文件。请勿压缩文件。平时分占平时分占30,请勿抄袭,按时提交,请勿抄袭,按时提交,逾期无效逾期无效!作业一:作业一:1)Fortran中有哪些数据类型,分别占用多大的存储空间?中有哪些数据类型,分别占用多大的存储空间?2)对于数据的有效位数,在)对于数据的有效位数
30、,在fortran中有何规定的?中有何规定的?3)课本)课本p.70,4.1,4.3,4.4,4.54).类型声明如下:类型声明如下:Real:x=123.45,y=78.6,Z=6.9Integer:I=45,j=610,k=5对写出下面的输出语句的结果,空格以代替。对写出下面的输出语句的结果,空格以代替。(1)Write(*,(1X,E10.3,2F6.2,3I4)X,Y,Z,I,J,K(2)Write(*,10)x,y,j,k 10 format(1X,X=,F10.2,1X,Y=,E10.3,/,1X,J=,I5,&1X,K=,I5)(3)write(*,20)X,I,Y,J,Z,K 20 FORMAT(1X,3(F10.2,1X,I5)